From 8e7061a9aa6708fbac8d5672ff4f3e41daf18caf Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 24 May 2022 07:18:59 -0400 Subject: [PATCH] full rebuild --- CHANGELOG.md | 7 +++++-- dist/face-api.esm-nobundle.js | 2 +- dist/face-api.esm.js | 2 +- dist/face-api.esm.js.map | 2 +- dist/face-api.js | 2 +- dist/face-api.node-gpu.js | 2 +- dist/face-api.node-wasm.js | 2 +- dist/face-api.node.js | 2 +- typedoc/classes/AgeGenderNet.html | 2 +- typedoc/classes/BoundingBox.html | 2 +- typedoc/classes/Box.html | 2 +- typedoc/classes/ComposableTask.html | 2 +- typedoc/classes/ComputeAllFaceDescriptorsTask.html | 2 +- typedoc/classes/ComputeFaceDescriptorsTaskBase.html | 2 +- typedoc/classes/ComputeSingleFaceDescriptorTask.html | 2 +- typedoc/classes/DetectAllFaceLandmarksTask.html | 2 +- typedoc/classes/DetectAllFacesTask.html | 2 +- typedoc/classes/DetectFaceLandmarksTaskBase.html | 2 +- typedoc/classes/DetectFacesTaskBase.html | 2 +- typedoc/classes/DetectSingleFaceLandmarksTask.html | 2 +- typedoc/classes/DetectSingleFaceTask.html | 2 +- typedoc/classes/Dimensions.html | 2 +- typedoc/classes/FaceDetection.html | 2 +- typedoc/classes/FaceDetectionNet.html | 2 +- typedoc/classes/FaceExpressionNet.html | 2 +- typedoc/classes/FaceExpressions.html | 2 +- typedoc/classes/FaceLandmark68Net.html | 2 +- typedoc/classes/FaceLandmark68TinyNet.html | 2 +- typedoc/classes/FaceLandmarkNet.html | 2 +- typedoc/classes/FaceLandmarks.html | 2 +- typedoc/classes/FaceLandmarks5.html | 2 +- typedoc/classes/FaceLandmarks68.html | 2 +- typedoc/classes/FaceMatch.html | 2 +- typedoc/classes/FaceMatcher.html | 2 +- typedoc/classes/FaceRecognitionNet.html | 2 +- typedoc/classes/LabeledBox.html | 2 +- typedoc/classes/LabeledFaceDescriptors.html | 2 +- typedoc/classes/NetInput.html | 2 +- typedoc/classes/NeuralNetwork.html | 2 +- typedoc/classes/ObjectDetection.html | 2 +- typedoc/classes/Point.html | 2 +- typedoc/classes/PredictedBox.html | 2 +- typedoc/classes/Rect.html | 2 +- typedoc/classes/SsdMobilenetv1.html | 2 +- typedoc/classes/SsdMobilenetv1Options.html | 2 +- typedoc/classes/TinyFaceDetector.html | 2 +- typedoc/classes/TinyFaceDetectorOptions.html | 2 +- typedoc/classes/TinyYolov2.html | 2 +- typedoc/classes/TinyYolov2Options.html | 2 +- typedoc/classes/draw.DrawBox.html | 2 +- typedoc/classes/draw.DrawBoxOptions.html | 2 +- typedoc/classes/draw.DrawFaceLandmarks.html | 2 +- typedoc/classes/draw.DrawFaceLandmarksOptions.html | 2 +- typedoc/classes/draw.DrawTextField.html | 2 +- typedoc/classes/draw.DrawTextFieldOptions.html | 2 +- typedoc/enums/Gender.html | 2 +- typedoc/enums/draw.AnchorPosition.html | 2 +- typedoc/index.html | 2 +- typedoc/interfaces/IBoundingBox.html | 2 +- typedoc/interfaces/IDimensions.html | 2 +- typedoc/interfaces/IFaceDetecion.html | 2 +- typedoc/interfaces/IFaceLandmarks.html | 2 +- typedoc/interfaces/IFaceMatch.html | 2 +- typedoc/interfaces/IPoint.html | 2 +- typedoc/interfaces/IRect.html | 2 +- typedoc/interfaces/ISsdMobilenetv1Options.html | 2 +- typedoc/interfaces/ITinyYolov2Options.html | 2 +- typedoc/interfaces/draw.IDrawBoxOptions.html | 2 +- typedoc/interfaces/draw.IDrawFaceLandmarksOptions.html | 2 +- typedoc/interfaces/draw.IDrawTextFieldOptions.html | 2 +- typedoc/modules/draw.html | 2 +- typedoc/modules/utils.html | 2 +- 72 files changed, 76 insertions(+), 73 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d1b111..cd4ce47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # @vladmandic/face-api - Version: **1.6.9** + Version: **1.6.10** Description: **FaceAPI: AI-powered Face Detection & Rotation Tracking, Face Description & Recognition, Age & Gender & Emotion Prediction for Browser and NodeJS using TensorFlow/JS** Author: **Vladimir Mandic ** @@ -9,7 +9,10 @@ ## Changelog -### **HEAD -> master** 2022/05/18 mandic00@live.com +### **1.6.10** 2022/05/24 mandic00@live.com + + +### **origin/master** 2022/05/18 mandic00@live.com ### **1.6.9** 2022/05/18 mandic00@live.com diff --git a/dist/face-api.esm-nobundle.js b/dist/face-api.esm-nobundle.js index b6352d9..9346619 100644 --- a/dist/face-api.esm-nobundle.js +++ b/dist/face-api.esm-nobundle.js @@ -4,4 +4,4 @@ author: ' */ -var lr=Object.defineProperty;var ho=Object.getOwnPropertyDescriptor;var bo=Object.getOwnPropertyNames;var go=Object.prototype.hasOwnProperty;var xo=(o=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(o,{get:(t,e)=>(typeof require!="undefined"?require:t)[e]}):o)(function(o){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+o+'" is not supported')});var Ve=(o,t)=>{for(var e in t)lr(o,e,{get:t[e],enumerable:!0})},fr=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of bo(t))!go.call(o,a)&&a!==e&&lr(o,a,{get:()=>t[a],enumerable:!(r=ho(t,a))||r.enumerable});return o},v=(o,t,e)=>(fr(o,t,"default"),e&&fr(e,t,"default"));var n={};Ve(n,{version:()=>Eo});v(n,fn);v(n,ln);v(n,dn);import*as fn from"@tensorflow/tfjs/dist/index.js";import*as ln from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as dn from"@tensorflow/tfjs-backend-wasm/dist/index.js";var vo="3.18.0",yo="3.18.0",_o="3.18.0",To="3.18.0",Po="3.18.0",wo="3.18.0",Fo="3.18.0",Do="3.18.0",Eo={tfjs:vo,"tfjs-core":yo,"tfjs-data":_o,"tfjs-layers":To,"tfjs-converter":Po,"tfjs-backend-cpu":wo,"tfjs-backend-webgl":Fo,"tfjs-backend-wasm":Do};var Ar={};Ve(Ar,{AnchorPosition:()=>Ke,DrawBox:()=>ee,DrawBoxOptions:()=>de,DrawFaceLandmarks:()=>De,DrawFaceLandmarksOptions:()=>Fe,DrawTextField:()=>et,DrawTextFieldOptions:()=>kt,drawContour:()=>Z,drawDetections:()=>Ao,drawFaceExpressions:()=>Wo,drawFaceLandmarks:()=>Bo});function Z(o,t,e=!1){if(o.beginPath(),t.slice(1).forEach(({x:r,y:a},s)=>{let i=t[s];o.moveTo(i.x,i.y),o.lineTo(r,a)}),e){let r=t[t.length-1],a=t[0];if(!r||!a)return;o.moveTo(r.x,r.y),o.lineTo(a.x,a.y)}o.stroke()}var dr={};Ve(dr,{computeReshapedDimensions:()=>je,getCenterPoint:()=>yt,isDimensions:()=>ue,isEven:()=>pe,isFloat:()=>Ge,isTensor:()=>xt,isTensor1D:()=>Mo,isTensor2D:()=>Ye,isTensor3D:()=>K,isTensor4D:()=>R,isValidNumber:()=>G,isValidProbablitiy:()=>It,range:()=>U,round:()=>vt});var S=class{constructor(t,e){if(!G(t)||!G(e))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:t,height:e})}`);this._width=t,this._height=e}get width(){return this._width}get height(){return this._height}reverse(){return new S(1/this.width,1/this.height)}};function xt(o,t){return o instanceof n.Tensor&&o.shape.length===t}function Mo(o){return xt(o,1)}function Ye(o){return xt(o,2)}function K(o){return xt(o,3)}function R(o){return xt(o,4)}function Ge(o){return o%1!==0}function pe(o){return o%2===0}function vt(o,t=2){let e=10**t;return Math.floor(o*e)/e}function ue(o){return o&&o.width&&o.height}function je({width:o,height:t},e){let r=e/Math.max(t,o);return new S(Math.round(o*r),Math.round(t*r))}function yt(o){return o.reduce((t,e)=>t.add(e),new b(0,0)).div(new b(o.length,o.length))}function U(o,t,e){return Array(o).fill(0).map((r,a)=>t+a*e)}function G(o){return!!o&&o!==1/0&&o!==-1/0&&!Number.isNaN(o)||o===0}function It(o){return G(o)&&o>=0&&o<=1}var b=class{constructor(t,e){this._x=t,this._y=e}get x(){return this._x}get y(){return this._y}add(t){return new b(this.x+t.x,this.y+t.y)}sub(t){return new b(this.x-t.x,this.y-t.y)}mul(t){return new b(this.x*t.x,this.y*t.y)}div(t){return new b(this.x/t.x,this.y/t.y)}abs(){return new b(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new b(Math.floor(this.x),Math.floor(this.y))}};var w=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(G)}static assertIsValidBox(t,e,r=!1){if(!w.isRect(t))throw new Error(`${e} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!r&&(t.width<0||t.height<0))throw new Error(`${e} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,e=!0){let r=t||{},a=[r.left,r.top,r.right,r.bottom].every(G),s=[r.x,r.y,r.width,r.height].every(G);if(!s&&!a)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(r)}`);let[i,c,m,p]=s?[r.x,r.y,r.width,r.height]:[r.left,r.top,r.right-r.left,r.bottom-r.top];w.assertIsValidBox({x:i,y:c,width:m,height:p},"Box.constructor",e),this._x=i,this._y=c,this._width=m,this._height=p}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new b(this.left,this.top)}get topRight(){return new b(this.right,this.top)}get bottomLeft(){return new b(this.left,this.bottom)}get bottomRight(){return new b(this.right,this.bottom)}round(){let[t,e,r,a]=[this.x,this.y,this.width,this.height].map(s=>Math.round(s));return new w({x:t,y:e,width:r,height:a})}floor(){let[t,e,r,a]=[this.x,this.y,this.width,this.height].map(s=>Math.floor(s));return new w({x:t,y:e,width:r,height:a})}toSquare(){let{x:t,y:e,width:r,height:a}=this,s=Math.abs(r-a);return re&&(c=-f+e+r,f=e),l>t&&(m=-l+t+a,l=t),p<1&&(m=2-p,p=1),u<1&&(m=2-u,u=1),{dy:i,edy:m,dx:s,edx:c,y:u,ey:l,x:p,ex:f,w:r,h:a}}calibrate(t){return new w({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Nt=class extends w{constructor(t,e,r,a,s=!1){super({left:t,top:e,right:r,bottom:a},s)}};var ct=class{constructor(t,e,r,a,s){this._imageDims=new S(s.width,s.height),this._score=t,this._classScore=e,this._className=r,this._box=new w(a).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new w(this._box).rescale(this.imageDims.reverse())}forSize(t,e){return new ct(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:e})}};var E=class extends ct{constructor(t,e,r){super(t,t,"",e,r)}forSize(t,e){let{score:r,relativeBox:a,imageDims:s}=super.forSize(t,e);return new E(r,a,s)}};function hr(o,t,e=!0){let r=Math.max(0,Math.min(o.right,t.right)-Math.max(o.left,t.left)),a=Math.max(0,Math.min(o.bottom,t.bottom)-Math.max(o.top,t.top)),s=r*a;return e?s/(o.area+t.area-s):s/Math.min(o.area,t.area)}function br(o){let t=o.map(c=>c.x),e=o.map(c=>c.y),r=t.reduce((c,m)=>mmcc({score:i,boxIndex:c})).sort((i,c)=>i.score-c.score).map(i=>i.boxIndex),s=[];for(;a.length>0;){let i=a.pop();s.push(i);let c=a,m=[];for(let p=0;pm[u]<=e)}return s}function X(o,t){return n.tidy(()=>{let[e,r,a]=t,s=n.fill([...o.shape.slice(0,3),1],e,"float32"),i=n.fill([...o.shape.slice(0,3),1],r,"float32"),c=n.fill([...o.shape.slice(0,3),1],a,"float32"),m=n.concat([s,i,c],3);return n.sub(o,m)})}function xr(o,t=!1){return n.tidy(()=>{let[e,r]=o.shape.slice(1);if(e===r)return o;let a=Math.abs(e-r),s=Math.round(a*(t?.5:1)),i=e>r?2:1,c=l=>{let d=o.shape.slice();return d[i]=l,n.fill(d,0,"float32")},m=c(s),p=a-m.shape[i],f=[t&&p?c(p):null,o,m].filter(l=>!!l).map(l=>n.cast(l,"float32"));return n.concat(f,i)})}function Hn(o){let t=o.slice();for(let e=t.length-1;e>0;e--){let r=Math.floor(Math.random()*(e+1)),a=t[e];t[e]=t[r],t[r]=a}return t}function fe(o){return 1/(1+Math.exp(-o))}function Vn(o){return Math.log(o/(1-o))}var St=class extends w{constructor(t,e,r,a,s=!1){super({x:t,y:e,width:r,height:a},s)}};var Co=.5,Io=.43,No=.45,$=class{constructor(t,e,r=new b(0,0)){let{width:a,height:s}=e;this._imgDims=new S(a,s),this._shift=r,this._positions=t.map(i=>i.mul(new b(a,s)).add(r))}get shift(){return new b(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map(t=>t.sub(this._shift).div(new b(this.imageWidth,this.imageHeight)))}forSize(t,e){return new this.constructor(this.relativePositions,{width:t,height:e})}shiftBy(t,e){return new this.constructor(this.relativePositions,this._imgDims,new b(t,e))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,e={}){if(t){let s=t instanceof E?t.box.floor():new w(t);return this.shiftBy(s.x,s.y).align(null,e)}let{useDlibAlignment:r,minBoxPadding:a}={useDlibAlignment:!1,minBoxPadding:.2,...e};return r?this.alignDlib():this.alignMinBbox(a)}alignDlib(){let t=this.getRefPointsForAlignment(),[e,r,a]=t,s=f=>a.sub(f).magnitude(),i=(s(e)+s(r))/2,c=Math.floor(i/No),m=yt(t),p=Math.floor(Math.max(0,m.x-Co*c)),u=Math.floor(Math.max(0,m.y-Io*c));return new St(p,u,Math.min(c,this.imageWidth+p),Math.min(c,this.imageHeight+u))}alignMinBbox(t){let e=br(this.positions);return e.pad(e.width*t,e.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var vr=class extends ${getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],yt([t[3],t[4]])]}};var Lt=class extends ${getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(yt)}};var Kt=class{constructor(t,e){this._label=t,this._distance=e}get label(){return this._label}get distance(){return this._distance}toString(t=!0){return`${this.label}${t?` (${vt(this.distance)})`:""}`}};var Qt=class extends w{constructor(e,r){super(e);this._label=r}static assertIsValidLabeledBox(e,r){if(w.assertIsValidBox(e,r),!G(e.label))throw new Error(`${r} - expected property label (${e.label}) to be a number`)}get label(){return this._label}};var Q=class{constructor(t,e){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(e)||e.some(r=>!(r instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=e}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let e=t.descriptors.map(r=>new Float32Array(r));return new Q(t.label,e)}};var yr=class extends Qt{constructor(e,r,a,s){super(e,r);this._score=a,this._classScore=s}static assertIsValidPredictedBox(e,r){if(Qt.assertIsValidLabeledBox(e,r),!It(e.score)||!It(e.classScore))throw new Error(`${r} - expected properties score (${e.score}) and (${e.classScore}) to be a number between [0, 1]`)}get score(){return this._score}get classScore(){return this._classScore}};function tt(o){return o.detection instanceof E}function At(o,t){return{...o,...{detection:t}}}function Ue(){let o=window.fetch;if(!o)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:o,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function te(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function le(o){let t="";if(!o&&te())try{o=xo("fs")}catch(r){t=r.toString()}return{readFile:o?r=>new Promise((a,s)=>{o.readFile(r,(i,c)=>i?s(i):a(c))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function Xe(){let o=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,e=global.Video||global.HTMLVideoElement,r=()=>{if(o)return new o;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},a=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},s=()=>{if(e)return new e;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},i=global.fetch,c=le();return{Canvas:o||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:r,createImageElement:a,createVideoElement:s,fetch:i,...c}}function Je(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var C;function So(){if(!C)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return C}function qe(o){C=o}function Ze(){return Je()?qe(Ue()):te()?qe(Xe()):null}function Lo(o){if(C||Ze(),!C)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=C.Canvas,Image:e=C.Image}=o;C.Canvas=t,C.Image=e,C.createCanvasElement=o.createCanvasElement||(()=>new t),C.createImageElement=o.createImageElement||(()=>new e),C.ImageData=o.ImageData||C.ImageData,C.Video=o.Video||C.Video,C.fetch=o.fetch||C.fetch,C.readFile=o.readFile||C.readFile}var T={getEnv:So,setEnv:qe,initialize:Ze,createBrowserEnv:Ue,createFileSystem:le,createNodejsEnv:Xe,monkeyPatch:Lo,isBrowser:Je,isNodejs:te};Ze();function Wt(o){return!T.isNodejs()&&typeof o=="string"?document.getElementById(o):o}function k(o){let{Canvas:t,CanvasRenderingContext2D:e}=T.getEnv();if(o instanceof e)return o;let r=Wt(o);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let a=r.getContext("2d");if(!a)throw new Error("resolveContext2d - canvas 2d context is null");return a}var Ke=(a=>(a.TOP_LEFT="TOP_LEFT",a.TOP_RIGHT="TOP_RIGHT",a.BOTTOM_LEFT="BOTTOM_LEFT",a.BOTTOM_RIGHT="BOTTOM_RIGHT",a))(Ke||{}),kt=class{constructor(t={}){let{anchorPosition:e,backgroundColor:r,fontColor:a,fontSize:s,fontStyle:i,padding:c}=t;this.anchorPosition=e||"TOP_LEFT",this.backgroundColor=r||"rgba(0, 0, 0, 0.5)",this.fontColor=a||"rgba(255, 255, 255, 1)",this.fontSize=s||14,this.fontStyle=i||"Georgia",this.padding=c||4}},et=class{constructor(t,e,r={}){this.text=typeof t=="string"?[t]:t instanceof et?t.text:t,this.anchor=e,this.options=new kt(r)}measureWidth(t){let{padding:e}=this.options;return this.text.map(r=>t.measureText(r).width).reduce((r,a)=>r{let g=m+f.x,_=m+f.y+(d+1)*i;r.fillText(l,g,_)})}};var de=class{constructor(t={}){let{boxColor:e,lineWidth:r,label:a,drawLabelOptions:s}=t;this.boxColor=e||"rgba(0, 0, 255, 1)",this.lineWidth=r||2,this.label=a;let i={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new kt({...i,...s})}},ee=class{constructor(t,e={}){this.box=new w(t),this.options=new de(e)}draw(t){let e=k(t),{boxColor:r,lineWidth:a}=this.options,{x:s,y:i,width:c,height:m}=this.box;e.strokeStyle=r,e.lineWidth=a,e.strokeRect(s,i,c,m);let{label:p}=this.options;p&&new et([p],{x:s-a/2,y:i},this.options.drawLabelOptions).draw(t)}};function Ao(o,t){(Array.isArray(t)?t:[t]).forEach(r=>{let a=r instanceof E?r.score:tt(r)?r.detection.score:void 0,s=r instanceof E?r.box:tt(r)?r.detection.box:new w(r),i=a?`${vt(a)}`:void 0;new ee(s,{label:i}).draw(o)})}function he(o){let{Image:t,Video:e}=T.getEnv();return o instanceof t&&o.complete||o instanceof e&&o.readyState>=3}function _r(o){return new Promise((t,e)=>{(o instanceof T.getEnv().Canvas||he(o))&&t(null);function r(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",a),s.currentTarget.removeEventListener("error",r),e(s))}function a(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",a),s.currentTarget.removeEventListener("error",r),t(s))}o.addEventListener("load",a),o.addEventListener("error",r)})}function Tr(o){return new Promise((t,e)=>{o instanceof Blob||e(new Error("bufferToImage - expected buf to be of type: Blob"));let r=new FileReader;r.onload=()=>{typeof r.result!="string"&&e(new Error("bufferToImage - expected reader.result to be a string, in onload"));let a=T.getEnv().createImageElement();a.onload=()=>t(a),a.onerror=e,a.src=r.result},r.onerror=e,r.readAsDataURL(o)})}function Bt(o){let{Image:t,Video:e}=T.getEnv();return o instanceof t?new S(o.naturalWidth,o.naturalHeight):o instanceof e?new S(o.videoWidth,o.videoHeight):new S(o.width,o.height)}function Rt({width:o,height:t}){let{createCanvasElement:e}=T.getEnv(),r=e();return r.width=o,r.height=t,r}function be(o,t){let{ImageData:e}=T.getEnv();if(!(o instanceof e)&&!he(o))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:r,height:a}=t||Bt(o),s=Rt({width:r,height:a});return o instanceof e?k(s).putImageData(o,0,0):k(s).drawImage(o,0,0,r,a),s}async function Pr(o,t){let e=t||T.getEnv().createCanvasElement(),[r,a,s]=o.shape.slice(R(o)?1:0),i=n.tidy(()=>o.as3D(r,a,s).toInt());return await n.browser.toPixels(i,e),i.dispose(),e}function Qe(o){let{Image:t,Canvas:e,Video:r}=T.getEnv();return o instanceof t||o instanceof e||o instanceof r}function wr(o,t,e=!1){let{Image:r,Canvas:a}=T.getEnv();if(!(o instanceof r||o instanceof a))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Rt({width:1,height:1});let s=Bt(o),i=t/Math.max(s.height,s.width),c=i*s.width,m=i*s.height,p=Rt({width:t,height:t}),u=o instanceof a?o:be(o),f=Math.abs(c-m)/2,l=e&&c0&&u.height>0&&k(p).drawImage(u,l,d,c,m),p}var rt=class{constructor(t,e=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=e,this._batchSize=t.length,t.forEach((r,a)=>{if(K(r)){this._imageTensors[a]=r,this._inputDimensions[a]=r.shape;return}if(R(r)){let i=r.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[a]=r,this._inputDimensions[a]=r.shape.slice(1);return}let s=r instanceof T.getEnv().Canvas?r:be(r);this._canvases[a]=s,this._inputDimensions[a]=[s.height,s.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return U(this.batchSize,0,1).map((t,e)=>this.getReshapedInputDimensions(e))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let e=this.getInputWidth(t),r=this.getInputHeight(t);return je({width:e,height:r},this.inputSize)}toBatchTensor(t,e=!0){return this._inputSize=t,n.tidy(()=>{let r=U(this.batchSize,0,1).map(s=>{let i=this.getInput(s);if(i instanceof n.Tensor){let c=R(i)?i:n.expandDims(i);return c=xr(c,e),(c.shape[1]!==t||c.shape[2]!==t)&&(c=n.image.resizeBilinear(c,[t,t],!1,!1)),c.as3D(t,t,3)}if(i instanceof T.getEnv().Canvas)return n.browser.fromPixels(wr(i,t,e));throw new Error(`toBatchTensor - at batchIdx ${s}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)});return n.stack(r.map(s=>n.cast(s,"float32"))).as4D(this.batchSize,t,t,3)})}};async function M(o){if(o instanceof rt)return o;let t=Array.isArray(o)?o:[o];if(!t.length)throw new Error("toNetInput - empty array passed as input");let e=a=>Array.isArray(o)?` at input index ${a}:`:"",r=t.map(Wt);return r.forEach((a,s)=>{if(!Qe(a)&&!K(a)&&!R(a))throw typeof t[s]=="string"?new Error(`toNetInput -${e(s)} string passed, but could not resolve HTMLElement for element id ${t[s]}`):new Error(`toNetInput -${e(s)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(R(a)){let i=a.shape[0];if(i!==1)throw new Error(`toNetInput -${e(s)} tf.Tensor4D with batchSize ${i} passed, but not supported in input array`)}}),await Promise.all(r.map(a=>Qe(a)&&_r(a))),new rt(r,Array.isArray(o))}async function re(o,t){let{Canvas:e}=T.getEnv(),r=o;if(!(o instanceof e)){let i=await M(o);if(i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let c=i.getInput(0);r=c instanceof e?c:await Pr(c)}let a=k(r);return t.map(i=>i instanceof E?i.forSize(r.width,r.height).box.floor():i).map(i=>i.clipAtImageBorders(r.width,r.height)).map(({x:i,y:c,width:m,height:p})=>{let u=Rt({width:m,height:p});return m>0&&p>0&&k(u).putImageData(a.getImageData(i,c,m,p),0,0),u})}async function oe(o,t){if(!K(o)&&!R(o))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(R(o)&&o.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return n.tidy(()=>{let[e,r,a]=o.shape.slice(R(o)?1:0);return t.map(c=>c instanceof E?c.forSize(r,e).box:c).map(c=>c.clipAtImageBorders(r,e)).filter(c=>c.width>0&&c.height>0).map(({x:c,y:m,width:p,height:u})=>n.slice3d(o.as3D(e,r,a),[m,c,0],[u,p,a]))})}async function mt(o,t){let{fetch:e}=T.getEnv(),r=await e(o,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}async function Mi(o){let t=await mt(o),e=await t.blob();if(!e.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${e.type}, for url: ${t.url}`);return Tr(e)}async function Fr(o){return(await mt(o)).json()}async function Li(o){return new Float32Array(await(await mt(o)).arrayBuffer())}function Dr(o){return new Promise((t,e)=>{o instanceof Blob||e(new Error("bufferToVideo - expected buf to be of type: Blob"));let r=T.getEnv().createVideoElement();r.oncanplay=()=>t(r),r.onerror=e,r.playsInline=!0,r.muted=!0,r.src=URL.createObjectURL(o),r.play()})}async function $i(o){let t=await mt(o),e=await t.blob();if(!e.type.startsWith("video/"))throw new Error(`fetchVideo - expected blob type to be of type video/*, instead have: ${e.type}, for url: ${t.url}`);return Dr(e)}function ge(o,t){let e=`${t}-weights_manifest.json`;if(!o)return{modelBaseUri:"",manifestUri:e};if(o==="/")return{modelBaseUri:"/",manifestUri:`/${e}`};let r=o.startsWith("http://")?"http://":o.startsWith("https://")?"https://":"";o=o.replace(r,"");let a=o.split("/").filter(c=>c),s=o.endsWith(".json")?a[a.length-1]:e,i=r+(o.endsWith(".json")?a.slice(0,a.length-1):a).join("/");return i=o.startsWith("/")?`/${i}`:i,{modelBaseUri:i,manifestUri:i==="/"?`/${s}`:`${i}/${s}`}}async function Er(o,t){let{manifestUri:e,modelBaseUri:r}=ge(o,t),a=await Fr(e);return n.io.loadWeights(a,r)}function ji(o,t,e=!1){let{width:r,height:a}=e?Bt(t):t;return o.width=r,o.height=a,{width:r,height:a}}var I=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:e,objProp:r}=this.traversePropertyPath(t);return e[r]}reassignParamFromPath(t,e){let{obj:r,objProp:a}=this.traversePropertyPath(t);r[a].dispose(),r[a]=e}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof n.Variable)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof n.Variable))}variable(){this.getFrozenParams().forEach(({path:t,tensor:e})=>{this.reassignParamFromPath(t,e.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:e})=>{let r=n.tensor(e.dataSync());e.dispose(),this.reassignParamFromPath(t,r)})}dispose(t=!0){this.getParamList().forEach(e=>{if(t&&e.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${e.path}`);e.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,e)=>t.concat(e)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let e=await Er(t,this.getDefaultModelName());this.loadFromWeightMap(e)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:e}=T.getEnv(),{manifestUri:r,modelBaseUri:a}=ge(t,this.getDefaultModelName()),s=p=>Promise.all(p.map(u=>e(u).then(f=>f.buffer))),i=n.io.weightsLoaderFactory(s),c=JSON.parse((await e(r)).toString()),m=await i(c,a);this.loadFromWeightMap(m)}loadFromWeightMap(t){let{paramMappings:e,params:r}=this.extractParamsFromWeightMap(t);this._paramMappings=e,this._params=r}extractWeights(t){let{paramMappings:e,params:r}=this.extractParams(t);this._paramMappings=e,this._params=r}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let e=t.split("/").reduce((s,i)=>{if(!s.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${t}`);return{obj:s.nextObj,objProp:i,nextObj:s.nextObj[i]}},{nextObj:this.params}),{obj:r,objProp:a}=e;if(!r||!a||!(r[a]instanceof n.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:r,objProp:a}}};function W(o,t,e){return n.tidy(()=>{let r=n.separableConv2d(o,t.depthwise_filter,t.pointwise_filter,e,"same");return r=n.add(r,t.bias),r})}function xe(o,t,e=!1){return n.tidy(()=>{let r=n.relu(e?n.add(n.conv2d(o,t.conv0.filters,[2,2],"same"),t.conv0.bias):W(o,t.conv0,[2,2])),a=W(r,t.conv1,[1,1]),s=n.relu(n.add(r,a)),i=W(s,t.conv2,[1,1]);return n.relu(n.add(r,n.add(a,i)))})}function ne(o,t,e=!1,r=!0){return n.tidy(()=>{let a=n.relu(e?n.add(n.conv2d(o,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):W(o,t.conv0,r?[2,2]:[1,1])),s=W(a,t.conv1,[1,1]),i=n.relu(n.add(a,s)),c=W(i,t.conv2,[1,1]),m=n.relu(n.add(a,n.add(s,c))),p=W(m,t.conv3,[1,1]);return n.relu(n.add(a,n.add(s,n.add(c,p))))})}function _t(o,t,e="same",r=!1){return n.tidy(()=>{let a=n.add(n.conv2d(o,t.filters,[1,1],e),t.bias);return r?n.relu(a):a})}function L(o,t){Object.keys(o).forEach(e=>{t.some(r=>r.originalPath===e)||o[e].dispose()})}function $t(o,t){return(e,r,a,s)=>{let i=n.tensor4d(o(e*r*a*a),[a,a,e,r]),c=n.tensor1d(o(r));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:c}}}function ve(o,t){return(e,r,a)=>{let s=n.tensor2d(o(e*r),[e,r]),i=n.tensor1d(o(r));return t.push({paramPath:`${a}/weights`},{paramPath:`${a}/bias`}),{weights:s,bias:i}}}var ae=class{constructor(t,e,r){this.depthwise_filter=t;this.pointwise_filter=e;this.bias=r}};function Ot(o,t){return(e,r,a)=>{let s=n.tensor4d(o(9*e),[3,3,e,1]),i=n.tensor4d(o(e*r),[1,1,e,r]),c=n.tensor1d(o(r));return t.push({paramPath:`${a}/depthwise_filter`},{paramPath:`${a}/pointwise_filter`},{paramPath:`${a}/bias`}),new ae(s,i,c)}}function Ht(o){return t=>{let e=o(`${t}/depthwise_filter`,4),r=o(`${t}/pointwise_filter`,4),a=o(`${t}/bias`,1);return new ae(e,r,a)}}function B(o,t){return(e,r,a)=>{let s=o[e];if(!xt(s,r))throw new Error(`expected weightMap[${e}] to be a Tensor${r}D, instead have ${s}`);return t.push({originalPath:e,paramPath:a||e}),s}}function A(o){let t=o;function e(a){let s=t.slice(0,a);return t=t.slice(a),s}function r(){return t}return{extractWeights:e,getRemainingWeights:r}}function ye(o,t){let e=$t(o,t),r=Ot(o,t);function a(i,c,m,p=!1){let u=p?e(i,c,3,`${m}/conv0`):r(i,c,`${m}/conv0`),f=r(c,c,`${m}/conv1`),l=r(c,c,`${m}/conv2`);return{conv0:u,conv1:f,conv2:l}}function s(i,c,m,p=!1){let{conv0:u,conv1:f,conv2:l}=a(i,c,m,p),d=r(c,c,`${m}/conv3`);return{conv0:u,conv1:f,conv2:l,conv3:d}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:s}}function Mr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=A(o),{extractDenseBlock4Params:a}=ye(e,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),c=a(64,128,"dense2"),m=a(128,256,"dense3");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:c,dense3:m}}}function _e(o){return t=>{let e=o(`${t}/filters`,4),r=o(`${t}/bias`,1);return{filters:e,bias:r}}}function Te(o,t){let e=B(o,t),r=_e(e),a=Ht(e);function s(c,m=!1){let p=m?r(`${c}/conv0`):a(`${c}/conv0`),u=a(`${c}/conv1`),f=a(`${c}/conv2`);return{conv0:p,conv1:u,conv2:f}}function i(c,m=!1){let p=m?r(`${c}/conv0`):a(`${c}/conv0`),u=a(`${c}/conv1`),f=a(`${c}/conv2`),l=a(`${c}/conv3`);return{conv0:p,conv1:u,conv2:f,conv3:l}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:i}}function Cr(o){let t=[],{extractDenseBlock4Params:e}=Te(o,t),r={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2"),dense3:e("dense3")};return L(o,t),{params:r,paramMappings:t}}var zt=class extends I{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("FaceFeatureExtractor - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=X(r,[122.782,117.001,104.298]).div(255),i=ne(s,e.dense0,!0);return i=ne(i,e.dense1),i=ne(i,e.dense2),i=ne(i,e.dense3),i=n.avgPool(i,[7,7],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await M(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return Cr(t)}extractParams(t){return Mr(t)}};function se(o,t){return n.tidy(()=>n.add(n.matMul(o,t.weights),t.bias))}function Ir(o,t,e){let r=[],{extractWeights:a,getRemainingWeights:s}=A(o),c=ve(a,r)(t,e,"fc");if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:r,params:{fc:c}}}function Nr(o){let t=[],e=B(o,t);function r(s){let i=e(`${s}/weights`,2),c=e(`${s}/bias`,1);return{weights:i,bias:c}}let a={fc:r("fc")};return L(o,t),{params:a,paramMappings:t}}function Pe(o){let t={},e={};return Object.keys(o).forEach(r=>{let a=r.startsWith("fc")?e:t;a[r]=o[r]}),{featureExtractorMap:t,classifierMap:e}}var Vt=class extends I{constructor(e,r){super(e);this._faceFeatureExtractor=r}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){let{params:r}=this;if(!r)throw new Error(`${this._name} - load model before inference`);return n.tidy(()=>{let a=e instanceof rt?this.faceFeatureExtractor.forwardInput(e):e;return se(a.as2D(a.shape[0],-1),r.fc)})}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){let{params:r,paramMappings:a}=this.extractClassifierParams(e);this._params=r,this._paramMappings=a}extractClassifierParams(e){return Ir(e,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(e){let{featureExtractorMap:r,classifierMap:a}=Pe(e);return this.faceFeatureExtractor.loadFromWeightMap(r),Nr(a)}extractParams(e){let r=this.getClassifierChannelsIn(),a=this.getClassifierChannelsOut(),s=a*r+a,i=e.slice(0,e.length-s),c=e.slice(e.length-s);return this.faceFeatureExtractor.extractWeights(i),this.extractClassifierParams(c)}};var Sr=["neutral","happy","sad","angry","fearful","disgusted","surprised"],pt=class{constructor(t){this.neutral=0;this.happy=0;this.sad=0;this.angry=0;this.fearful=0;this.disgusted=0;this.surprised=0;if(t.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${t.length}`);Sr.forEach((e,r)=>{this[e]=t[r]})}asSortedArray(){return Sr.map(t=>({expression:t,probability:this[t]})).sort((t,e)=>e.probability-t.probability)}};var we=class extends Vt{constructor(t=new zt){super("FaceExpressionNet",t)}forwardInput(t){return n.tidy(()=>n.softmax(this.runNet(t)))}async forward(t){return this.forwardInput(await M(t))}async predictExpressions(t){let e=await M(t),r=await this.forwardInput(e),a=await Promise.all(n.unstack(r).map(async i=>{let c=i.dataSync();return i.dispose(),c}));r.dispose();let s=a.map(i=>new pt(i));return e.isBatchInput?s:s[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function Lr(o){return o.expressions instanceof pt}function tr(o,t){return{...o,...{expressions:t}}}function Wo(o,t,e=.1,r){(Array.isArray(t)?t:[t]).forEach(s=>{let i=s instanceof pt?s:Lr(s)?s.expressions:void 0;if(!i)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let m=i.asSortedArray().filter(f=>f.probability>e),p=tt(s)?s.detection.box.bottomLeft:r||new b(0,0);new et(m.map(f=>`${f.expression} (${vt(f.probability)})`),p).draw(o)})}function Yt(o){return tt(o)&&o.landmarks instanceof $&&o.unshiftedLandmarks instanceof $&&o.alignedRect instanceof E}function ko(o){let t=(c,m,p,u)=>Math.atan2(u-m,p-c)%Math.PI,e=c=>c*180/Math.PI,r={roll:void 0,pitch:void 0,yaw:void 0};if(!o||!o._positions||o._positions.length!==68)return r;let a=o._positions;r.roll=-t(a[36]._x,a[36]._y,a[45]._x,a[45]._y),r.pitch=t(0,Math.abs(a[0]._x-a[30]._x)/a[30]._x,Math.PI,Math.abs(a[16]._x-a[30]._x)/a[30]._x);let s=a.reduce((c,m)=>cc>m._y?c:m._y,-1/0);return r.yaw=Math.PI*(o._imgDims._height/(i-s)/1.4-1),r}function ie(o,t){let{box:e}=o.detection,r=t.shiftBy(e.x,e.y),a=r.align(),{imageDims:s}=o.detection,i=new E(o.detection.score,a.rescale(s.reverse()),s),c=ko(t);return{...o,...{landmarks:r,unshiftedLandmarks:t,alignedRect:i,angle:c}}}var Fe=class{constructor(t={}){let{drawLines:e=!0,drawPoints:r=!0,lineWidth:a,lineColor:s,pointSize:i,pointColor:c}=t;this.drawLines=e,this.drawPoints=r,this.lineWidth=a||1,this.pointSize=i||2,this.lineColor=s||"rgba(0, 255, 255, 1)",this.pointColor=c||"rgba(255, 0, 255, 1)"}},De=class{constructor(t,e={}){this.faceLandmarks=t,this.options=new Fe(e)}draw(t){let e=k(t),{drawLines:r,drawPoints:a,lineWidth:s,lineColor:i,pointSize:c,pointColor:m}=this.options;if(r&&this.faceLandmarks instanceof Lt&&(e.strokeStyle=i,e.lineWidth=s,Z(e,this.faceLandmarks.getJawOutline()),Z(e,this.faceLandmarks.getLeftEyeBrow()),Z(e,this.faceLandmarks.getRightEyeBrow()),Z(e,this.faceLandmarks.getNose()),Z(e,this.faceLandmarks.getLeftEye(),!0),Z(e,this.faceLandmarks.getRightEye(),!0),Z(e,this.faceLandmarks.getMouth(),!0)),a){e.strokeStyle=m,e.fillStyle=m;let p=u=>{e.beginPath(),e.arc(u.x,u.y,c,0,2*Math.PI),e.fill()};this.faceLandmarks.positions.forEach(p)}}};function Bo(o,t){(Array.isArray(t)?t:[t]).forEach(r=>{let a=r instanceof $?r:Yt(r)?r.landmarks:void 0;if(!a)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new De(a).draw(o)})}var Wr="1.6.9";function Oo(o,t){let e=$t(o,t),r=Ot(o,t);function a(i,c,m){let p=r(i,c,`${m}/separable_conv0`),u=r(c,c,`${m}/separable_conv1`),f=e(i,c,1,`${m}/expansion_conv`);return{separable_conv0:p,separable_conv1:u,expansion_conv:f}}function s(i,c){let m=r(i,i,`${c}/separable_conv0`),p=r(i,i,`${c}/separable_conv1`),u=r(i,i,`${c}/separable_conv2`);return{separable_conv0:m,separable_conv1:p,separable_conv2:u}}return{extractConvParams:e,extractSeparableConvParams:r,extractReductionBlockParams:a,extractMainBlockParams:s}}function kr(o,t){let e=[],{extractWeights:r,getRemainingWeights:a}=A(o),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:c,extractMainBlockParams:m}=Oo(r,e),p=s(3,32,3,"entry_flow/conv_in"),u=c(32,64,"entry_flow/reduction_block_0"),f=c(64,128,"entry_flow/reduction_block_1"),l={conv_in:p,reduction_block_0:u,reduction_block_1:f},d={};U(t,0,1).forEach(h=>{d[`main_block_${h}`]=m(128,`middle_flow/main_block_${h}`)});let g=c(128,256,"exit_flow/reduction_block"),_=i(256,512,"exit_flow/separable_conv"),F={reduction_block:g,separable_conv:_};if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:e,params:{entry_flow:l,middle_flow:d,exit_flow:F}}}function Ho(o,t){let e=B(o,t),r=_e(e),a=Ht(e);function s(c){let m=a(`${c}/separable_conv0`),p=a(`${c}/separable_conv1`),u=r(`${c}/expansion_conv`);return{separable_conv0:m,separable_conv1:p,expansion_conv:u}}function i(c){let m=a(`${c}/separable_conv0`),p=a(`${c}/separable_conv1`),u=a(`${c}/separable_conv2`);return{separable_conv0:m,separable_conv1:p,separable_conv2:u}}return{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:i}}function Br(o,t){let e=[],{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:i}=Ho(o,e),c=r("entry_flow/conv_in"),m=s("entry_flow/reduction_block_0"),p=s("entry_flow/reduction_block_1"),u={conv_in:c,reduction_block_0:m,reduction_block_1:p},f={};U(t,0,1).forEach(_=>{f[`main_block_${_}`]=i(`middle_flow/main_block_${_}`)});let l=s("exit_flow/reduction_block"),d=a("exit_flow/separable_conv"),g={reduction_block:l,separable_conv:d};return L(o,e),{params:{entry_flow:u,middle_flow:f,exit_flow:g},paramMappings:e}}function Rr(o,t,e){return n.add(n.conv2d(o,t.filters,e,"same"),t.bias)}function er(o,t,e=!0){let r=e?n.relu(o):o;return r=W(r,t.separable_conv0,[1,1]),r=W(n.relu(r),t.separable_conv1,[1,1]),r=n.maxPool(r,[3,3],[2,2],"same"),r=n.add(r,Rr(o,t.expansion_conv,[2,2])),r}function zo(o,t){let e=W(n.relu(o),t.separable_conv0,[1,1]);return e=W(n.relu(e),t.separable_conv1,[1,1]),e=W(n.relu(e),t.separable_conv2,[1,1]),e=n.add(e,o),e}var Ee=class extends I{constructor(e){super("TinyXception");this._numMainBlocks=e}forwardInput(e){let{params:r}=this;if(!r)throw new Error("TinyXception - load model before inference");return n.tidy(()=>{let a=n.cast(e.toBatchTensor(112,!0),"float32"),i=X(a,[122.782,117.001,104.298]).div(255),c=n.relu(Rr(i,r.entry_flow.conv_in,[2,2]));return c=er(c,r.entry_flow.reduction_block_0,!1),c=er(c,r.entry_flow.reduction_block_1),U(this._numMainBlocks,0,1).forEach(m=>{c=zo(c,r.middle_flow[`main_block_${m}`])}),c=er(c,r.exit_flow.reduction_block),c=n.relu(W(c,r.exit_flow.separable_conv,[1,1])),c})}async forward(e){return this.forwardInput(await M(e))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(e){return Br(e,this._numMainBlocks)}extractParams(e){return kr(e,this._numMainBlocks)}};function $r(o){let t=[],{extractWeights:e,getRemainingWeights:r}=A(o),a=ve(e,t),s=a(512,1,"fc/age"),i=a(512,2,"fc/gender");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:s,gender:i}}}}function Or(o){let t=[],e=B(o,t);function r(s){let i=e(`${s}/weights`,2),c=e(`${s}/bias`,1);return{weights:i,bias:c}}let a={fc:{age:r("fc/age"),gender:r("fc/gender")}};return L(o,t),{params:a,paramMappings:t}}var rr=(e=>(e.FEMALE="female",e.MALE="male",e))(rr||{});var Me=class extends I{constructor(e=new Ee(2)){super("AgeGenderNet");this._faceFeatureExtractor=e}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){let{params:r}=this;if(!r)throw new Error(`${this._name} - load model before inference`);return n.tidy(()=>{let a=e instanceof rt?this.faceFeatureExtractor.forwardInput(e):e,s=n.avgPool(a,[7,7],[2,2],"valid").as2D(a.shape[0],-1),i=se(s,r.fc.age).as1D(),c=se(s,r.fc.gender);return{age:i,gender:c}})}forwardInput(e){return n.tidy(()=>{let{age:r,gender:a}=this.runNet(e);return{age:r,gender:n.softmax(a)}})}async forward(e){return this.forwardInput(await M(e))}async predictAgeAndGender(e){let r=await M(e),a=await this.forwardInput(r),s=n.unstack(a.age),i=n.unstack(a.gender),c=s.map((p,u)=>({ageTensor:p,genderTensor:i[u]})),m=await Promise.all(c.map(async({ageTensor:p,genderTensor:u})=>{let f=p.dataSync()[0],l=u.dataSync()[0],d=l>.5,g=d?"male":"female",_=d?l:1-l;return p.dispose(),u.dispose(),{age:f,gender:g,genderProbability:_}}));return a.age.dispose(),a.gender.dispose(),r.isBatchInput?m:m[0]}getDefaultModelName(){return"age_gender_model"}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){let{params:r,paramMappings:a}=this.extractClassifierParams(e);this._params=r,this._paramMappings=a}extractClassifierParams(e){return $r(e)}extractParamsFromWeightMap(e){let{featureExtractorMap:r,classifierMap:a}=Pe(e);return this.faceFeatureExtractor.loadFromWeightMap(r),Or(a)}extractParams(e){let a=e.slice(0,e.length-1539),s=e.slice(e.length-1539);return this.faceFeatureExtractor.extractWeights(a),this.extractClassifierParams(s)}};var Gt=class extends Vt{postProcess(t,e,r){let a=r.map(({width:i,height:c})=>{let m=e/Math.max(c,i);return{width:i*m,height:c*m}}),s=a.length;return n.tidy(()=>{let i=(f,l)=>n.stack([n.fill([68],f,"float32"),n.fill([68],l,"float32")],1).as2D(1,136).as1D(),c=(f,l)=>{let{width:d,height:g}=a[f];return l(d,g)?Math.abs(d-g)/2:0},m=f=>c(f,(l,d)=>lc(f,(l,d)=>di(m(l),p(l))))).div(n.stack(Array.from(Array(s),(f,l)=>i(a[l].width,a[l].height))))})}forwardInput(t){return n.tidy(()=>{let e=this.runNet(t);return this.postProcess(e,t.inputSize,t.inputDimensions.map(([r,a])=>({height:r,width:a})))})}async forward(t){return this.forwardInput(await M(t))}async detectLandmarks(t){let e=await M(t),r=n.tidy(()=>n.unstack(this.forwardInput(e))),a=await Promise.all(r.map(async(s,i)=>{let c=Array.from(s.dataSync()),m=c.filter((u,f)=>pe(f)),p=c.filter((u,f)=>!pe(f));return new Lt(Array(68).fill(0).map((u,f)=>new b(m[f],p[f])),{height:e.getInputHeight(i),width:e.getInputWidth(i)})}));return r.forEach(s=>s.dispose()),e.isBatchInput?a:a[0]}getClassifierChannelsOut(){return 136}};var jt=class extends Gt{constructor(t=new zt){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function Hr(o){let t=[],{extractDenseBlock3Params:e}=Te(o,t),r={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2")};return L(o,t),{params:r,paramMappings:t}}function zr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=A(o),{extractDenseBlock3Params:a}=ye(e,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),c=a(64,128,"dense2");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:c}}}var Ce=class extends I{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("TinyFaceFeatureExtractor - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=X(r,[122.782,117.001,104.298]).div(255),i=xe(s,e.dense0,!0);return i=xe(i,e.dense1),i=xe(i,e.dense2),i=n.avgPool(i,[14,14],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await M(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return Hr(t)}extractParams(t){return zr(t)}};var Ie=class extends Gt{constructor(t=new Ce){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var Vr=class extends jt{};function Yr(o,t){return n.add(n.mul(o,t.weights),t.biases)}function or(o,t,e,r,a="same"){let{filters:s,bias:i}=t.conv,c=n.conv2d(o,s,e,a);return c=n.add(c,i),c=Yr(c,t.scale),r?n.relu(c):c}function Gr(o,t){return or(o,t,[1,1],!0)}function nr(o,t){return or(o,t,[1,1],!1)}function Ne(o,t){return or(o,t,[2,2],!0,"valid")}function Vo(o,t){function e(c,m,p){let u=o(c),f=u.length/(m*p*p);if(Ge(f))throw new Error(`depth has to be an integer: ${f}, weights.length: ${u.length}, numFilters: ${m}, filterSize: ${p}`);return n.tidy(()=>n.transpose(n.tensor4d(u,[m,f,p,p]),[2,3,1,0]))}function r(c,m,p,u){let f=e(c,m,p),l=n.tensor1d(o(m));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/bias`}),{filters:f,bias:l}}function a(c,m){let p=n.tensor1d(o(c)),u=n.tensor1d(o(c));return t.push({paramPath:`${m}/weights`},{paramPath:`${m}/biases`}),{weights:p,biases:u}}function s(c,m,p,u){let f=r(c,m,p,`${u}/conv`),l=a(m,`${u}/scale`);return{conv:f,scale:l}}function i(c,m,p,u,f=!1){let l=s((f?.5:1)*c,m,p,`${u}/conv1`),d=s(c,m,p,`${u}/conv2`);return{conv1:l,conv2:d}}return{extractConvLayerParams:s,extractResidualLayerParams:i}}function jr(o){let{extractWeights:t,getRemainingWeights:e}=A(o),r=[],{extractConvLayerParams:a,extractResidualLayerParams:s}=Vo(t,r),i=a(4704,32,7,"conv32_down"),c=s(9216,32,3,"conv32_1"),m=s(9216,32,3,"conv32_2"),p=s(9216,32,3,"conv32_3"),u=s(36864,64,3,"conv64_down",!0),f=s(36864,64,3,"conv64_1"),l=s(36864,64,3,"conv64_2"),d=s(36864,64,3,"conv64_3"),g=s(147456,128,3,"conv128_down",!0),_=s(147456,128,3,"conv128_1"),F=s(147456,128,3,"conv128_2"),h=s(589824,256,3,"conv256_down",!0),y=s(589824,256,3,"conv256_1"),x=s(589824,256,3,"conv256_2"),D=s(589824,256,3,"conv256_down_out"),N=n.tidy(()=>n.transpose(n.tensor2d(t(256*128),[128,256]),[1,0]));if(r.push({paramPath:"fc"}),e().length!==0)throw new Error(`weights remaing after extract: ${e().length}`);return{params:{conv32_down:i,conv32_1:c,conv32_2:m,conv32_3:p,conv64_down:u,conv64_1:f,conv64_2:l,conv64_3:d,conv128_down:g,conv128_1:_,conv128_2:F,conv256_down:h,conv256_1:y,conv256_2:x,conv256_down_out:D,fc:N},paramMappings:r}}function Yo(o,t){let e=B(o,t);function r(i){let c=e(`${i}/scale/weights`,1),m=e(`${i}/scale/biases`,1);return{weights:c,biases:m}}function a(i){let c=e(`${i}/conv/filters`,4),m=e(`${i}/conv/bias`,1),p=r(i);return{conv:{filters:c,bias:m},scale:p}}function s(i){return{conv1:a(`${i}/conv1`),conv2:a(`${i}/conv2`)}}return{extractConvLayerParams:a,extractResidualLayerParams:s}}function Ur(o){let t=[],{extractConvLayerParams:e,extractResidualLayerParams:r}=Yo(o,t),a=e("conv32_down"),s=r("conv32_1"),i=r("conv32_2"),c=r("conv32_3"),m=r("conv64_down"),p=r("conv64_1"),u=r("conv64_2"),f=r("conv64_3"),l=r("conv128_down"),d=r("conv128_1"),g=r("conv128_2"),_=r("conv256_down"),F=r("conv256_1"),h=r("conv256_2"),y=r("conv256_down_out"),{fc:x}=o;if(t.push({originalPath:"fc",paramPath:"fc"}),!Ye(x))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${x}`);let D={conv32_down:a,conv32_1:s,conv32_2:i,conv32_3:c,conv64_down:m,conv64_1:p,conv64_2:u,conv64_3:f,conv128_down:l,conv128_1:d,conv128_2:g,conv256_down:_,conv256_1:F,conv256_2:h,conv256_down_out:y,fc:x};return L(o,t),{params:D,paramMappings:t}}function j(o,t){let e=Gr(o,t.conv1);return e=nr(e,t.conv2),e=n.add(e,o),e=n.relu(e),e}function ce(o,t){let e=Ne(o,t.conv1);e=nr(e,t.conv2);let r=n.avgPool(o,2,2,"valid"),a=n.zeros(r.shape),s=r.shape[3]!==e.shape[3];if(r.shape[1]!==e.shape[1]||r.shape[2]!==e.shape[2]){let c=[...e.shape];c[1]=1;let m=n.zeros(c);e=n.concat([e,m],1);let p=[...e.shape];p[2]=1;let u=n.zeros(p);e=n.concat([e,u],2)}return r=s?n.concat([r,a],3):r,e=n.add(r,e),e=n.relu(e),e}var Ut=class extends I{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("FaceRecognitionNet - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(150,!0),"float32"),s=X(r,[122.782,117.001,104.298]).div(255),i=Ne(s,e.conv32_down);i=n.maxPool(i,3,2,"valid"),i=j(i,e.conv32_1),i=j(i,e.conv32_2),i=j(i,e.conv32_3),i=ce(i,e.conv64_down),i=j(i,e.conv64_1),i=j(i,e.conv64_2),i=j(i,e.conv64_3),i=ce(i,e.conv128_down),i=j(i,e.conv128_1),i=j(i,e.conv128_2),i=ce(i,e.conv256_down),i=j(i,e.conv256_1),i=j(i,e.conv256_2),i=ce(i,e.conv256_down_out);let c=i.mean([1,2]);return n.matMul(c,e.fc)})}async forward(t){return this.forwardInput(await M(t))}async computeFaceDescriptor(t){var s;if((s=t==null?void 0:t.shape)!=null&&s.some(i=>i<=0))return new Float32Array(128);let e=await M(t),r=n.tidy(()=>n.unstack(this.forwardInput(e))),a=await Promise.all(r.map(i=>i.data()));return r.forEach(i=>i.dispose()),e.isBatchInput?a:a[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return Ur(t)}extractParams(t){return jr(t)}};function vf(o){let t=new Ut;return t.extractWeights(o),t}function ar(o,t){return{...o,...{descriptor:t}}}function Pf(o){return typeof o.age=="number"}function sr(o,t){return{...o,...{age:t}}}function Ef(o){return(o.gender==="male"||o.gender==="female")&&It(o.genderProbability)}function ir(o,t,e){return{...o,...{gender:t,genderProbability:e}}}function Go(o,t){function e(m,p){let u=n.tensor4d(o(9*m),[3,3,m,1]),f=n.tensor1d(o(m)),l=n.tensor1d(o(m)),d=n.tensor1d(o(m)),g=n.tensor1d(o(m));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/batch_norm_scale`},{paramPath:`${p}/batch_norm_offset`},{paramPath:`${p}/batch_norm_mean`},{paramPath:`${p}/batch_norm_variance`}),{filters:u,batch_norm_scale:f,batch_norm_offset:l,batch_norm_mean:d,batch_norm_variance:g}}function r(m,p,u,f,l){let d=n.tensor4d(o(m*p*u*u),[u,u,m,p]),g=n.tensor1d(o(p));return t.push({paramPath:`${f}/filters`},{paramPath:`${f}/${l?"batch_norm_offset":"bias"}`}),{filters:d,bias:g}}function a(m,p,u,f){let{filters:l,bias:d}=r(m,p,u,f,!0);return{filters:l,batch_norm_offset:d}}function s(m,p,u){let f=e(m,`${u}/depthwise_conv`),l=a(m,p,1,`${u}/pointwise_conv`);return{depthwise_conv:f,pointwise_conv:l}}function i(){let m=a(3,32,3,"mobilenetv1/conv_0"),p=s(32,64,"mobilenetv1/conv_1"),u=s(64,128,"mobilenetv1/conv_2"),f=s(128,128,"mobilenetv1/conv_3"),l=s(128,256,"mobilenetv1/conv_4"),d=s(256,256,"mobilenetv1/conv_5"),g=s(256,512,"mobilenetv1/conv_6"),_=s(512,512,"mobilenetv1/conv_7"),F=s(512,512,"mobilenetv1/conv_8"),h=s(512,512,"mobilenetv1/conv_9"),y=s(512,512,"mobilenetv1/conv_10"),x=s(512,512,"mobilenetv1/conv_11"),D=s(512,1024,"mobilenetv1/conv_12"),N=s(1024,1024,"mobilenetv1/conv_13");return{conv_0:m,conv_1:p,conv_2:u,conv_3:f,conv_4:l,conv_5:d,conv_6:g,conv_7:_,conv_8:F,conv_9:h,conv_10:y,conv_11:x,conv_12:D,conv_13:N}}function c(){let m=a(1024,256,1,"prediction_layer/conv_0"),p=a(256,512,3,"prediction_layer/conv_1"),u=a(512,128,1,"prediction_layer/conv_2"),f=a(128,256,3,"prediction_layer/conv_3"),l=a(256,128,1,"prediction_layer/conv_4"),d=a(128,256,3,"prediction_layer/conv_5"),g=a(256,64,1,"prediction_layer/conv_6"),_=a(64,128,3,"prediction_layer/conv_7"),F=r(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),h=r(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),y=r(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),x=r(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),D=r(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),N=r(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),Y=r(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),q=r(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),O=r(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),at=r(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),st=r(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),it=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:m,conv_1:p,conv_2:u,conv_3:f,conv_4:l,conv_5:d,conv_6:g,conv_7:_,box_predictor_0:{box_encoding_predictor:F,class_predictor:h},box_predictor_1:{box_encoding_predictor:y,class_predictor:x},box_predictor_2:{box_encoding_predictor:D,class_predictor:N},box_predictor_3:{box_encoding_predictor:Y,class_predictor:q},box_predictor_4:{box_encoding_predictor:O,class_predictor:at},box_predictor_5:{box_encoding_predictor:st,class_predictor:it}}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:c}}function Xr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=A(o),{extractMobilenetV1Params:a,extractPredictionLayerParams:s}=Go(e,t),i=a(),c=s(),p={extra_dim:n.tensor3d(e(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:i,prediction_layer:c,output_layer:p},paramMappings:t}}function jo(o,t){let e=B(o,t);function r(p,u,f){let l=e(`${p}/Conv2d_${u}_pointwise/weights`,4,`${f}/filters`),d=e(`${p}/Conv2d_${u}_pointwise/convolution_bn_offset`,1,`${f}/batch_norm_offset`);return{filters:l,batch_norm_offset:d}}function a(p){let u=`mobilenetv1/conv_${p}`,f=`MobilenetV1/Conv2d_${p}_depthwise`,l=`${u}/depthwise_conv`,d=`${u}/pointwise_conv`,g=e(`${f}/depthwise_weights`,4,`${l}/filters`),_=e(`${f}/BatchNorm/gamma`,1,`${l}/batch_norm_scale`),F=e(`${f}/BatchNorm/beta`,1,`${l}/batch_norm_offset`),h=e(`${f}/BatchNorm/moving_mean`,1,`${l}/batch_norm_mean`),y=e(`${f}/BatchNorm/moving_variance`,1,`${l}/batch_norm_variance`);return{depthwise_conv:{filters:g,batch_norm_scale:_,batch_norm_offset:F,batch_norm_mean:h,batch_norm_variance:y},pointwise_conv:r("MobilenetV1",p,d)}}function s(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:a(1),conv_2:a(2),conv_3:a(3),conv_4:a(4),conv_5:a(5),conv_6:a(6),conv_7:a(7),conv_8:a(8),conv_9:a(9),conv_10:a(10),conv_11:a(11),conv_12:a(12),conv_13:a(13)}}function i(p,u){let f=e(`${p}/weights`,4,`${u}/filters`),l=e(`${p}/biases`,1,`${u}/bias`);return{filters:f,bias:l}}function c(p){let u=i(`Prediction/BoxPredictor_${p}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${p}/box_encoding_predictor`),f=i(`Prediction/BoxPredictor_${p}/ClassPredictor`,`prediction_layer/box_predictor_${p}/class_predictor`);return{box_encoding_predictor:u,class_predictor:f}}function m(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:c(0),box_predictor_1:c(1),box_predictor_2:c(2),box_predictor_3:c(3),box_predictor_4:c(4),box_predictor_5:c(5)}}return{extractMobilenetV1Params:s,extractPredictionLayerParams:m}}function Jr(o){let t=[],{extractMobilenetV1Params:e,extractPredictionLayerParams:r}=jo(o,t),a=o["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!K(a))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${a}`);let s={mobilenetv1:e(),prediction_layer:r(),output_layer:{extra_dim:a}};return L(o,t),{params:s,paramMappings:t}}function H(o,t,e){return n.tidy(()=>{let r=n.conv2d(o,t.filters,e,"same");return r=n.add(r,t.batch_norm_offset),n.clipByValue(r,0,6)})}var Uo=.0010000000474974513;function Xo(o,t,e){return n.tidy(()=>{let r=n.depthwiseConv2d(o,t.filters,e,"same");return r=n.batchNorm(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,Uo),n.clipByValue(r,0,6)})}function Jo(o){return[2,4,6,12].some(t=>t===o)?[2,2]:[1,1]}function qr(o,t){return n.tidy(()=>{let e,r=H(o,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((s,i)=>{let c=i+1,m=Jo(c);r=Xo(r,s.depthwise_conv,m),r=H(r,s.pointwise_conv,[1,1]),c===11&&(e=r)}),e===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:e}})}function qo(o,t,e){let r=o.arraySync(),a=Math.min(r[t][0],r[t][2]),s=Math.min(r[t][1],r[t][3]),i=Math.max(r[t][0],r[t][2]),c=Math.max(r[t][1],r[t][3]),m=Math.min(r[e][0],r[e][2]),p=Math.min(r[e][1],r[e][3]),u=Math.max(r[e][0],r[e][2]),f=Math.max(r[e][1],r[e][3]),l=(i-a)*(c-s),d=(u-m)*(f-p);if(l<=0||d<=0)return 0;let g=Math.max(a,m),_=Math.max(s,p),F=Math.min(i,u),h=Math.min(c,f),y=Math.max(F-g,0)*Math.max(h-_,0);return y/(l+d-y)}function Zr(o,t,e,r,a){let s=o.shape[0],i=Math.min(e,s),c=t.map((u,f)=>({score:u,boxIndex:f})).filter(u=>u.score>a).sort((u,f)=>f.score-u.score),m=u=>u<=r?1:0,p=[];return c.forEach(u=>{if(p.length>=i)return;let f=u.score;for(let l=p.length-1;l>=0;--l){let d=qo(o,u.boxIndex,p[l]);if(d!==0&&(u.score*=m(d),u.score<=a))break}f===u.score&&p.push(u.boxIndex)}),p}function Zo(o){let t=n.unstack(n.transpose(o,[1,0])),e=[n.sub(t[2],t[0]),n.sub(t[3],t[1])],r=[n.add(t[0],n.div(e[0],2)),n.add(t[1],n.div(e[1],2))];return{sizes:e,centers:r}}function Ko(o,t){let{sizes:e,centers:r}=Zo(o),a=n.unstack(n.transpose(t,[1,0])),s=n.div(n.mul(n.exp(n.div(a[2],5)),e[0]),2),i=n.add(n.mul(n.div(a[0],10),e[0]),r[0]),c=n.div(n.mul(n.exp(n.div(a[3],5)),e[1]),2),m=n.add(n.mul(n.div(a[1],10),e[1]),r[1]);return n.transpose(n.stack([n.sub(i,s),n.sub(m,c),n.add(i,s),n.add(m,c)]),[1,0])}function Kr(o,t,e){return n.tidy(()=>{let r=o.shape[0],a=Ko(n.reshape(n.tile(e.extra_dim,[r,1,1]),[-1,4]),n.reshape(o,[-1,4]));a=n.reshape(a,[r,a.shape[0]/r,4]);let s=n.sigmoid(n.slice(t,[0,0,1],[-1,-1,-1])),i=n.slice(s,[0,0,0],[-1,-1,1]);i=n.reshape(i,[r,i.shape[1]]);let c=n.unstack(a),m=n.unstack(i);return{boxes:c,scores:m}})}function Tt(o,t){return n.tidy(()=>{let e=o.shape[0],r=n.reshape(_t(o,t.box_encoding_predictor),[e,-1,1,4]),a=n.reshape(_t(o,t.class_predictor),[e,-1,3]);return{boxPredictionEncoding:r,classPrediction:a}})}function Qr(o,t,e){return n.tidy(()=>{let r=H(o,e.conv_0,[1,1]),a=H(r,e.conv_1,[2,2]),s=H(a,e.conv_2,[1,1]),i=H(s,e.conv_3,[2,2]),c=H(i,e.conv_4,[1,1]),m=H(c,e.conv_5,[2,2]),p=H(m,e.conv_6,[1,1]),u=H(p,e.conv_7,[2,2]),f=Tt(t,e.box_predictor_0),l=Tt(o,e.box_predictor_1),d=Tt(a,e.box_predictor_2),g=Tt(i,e.box_predictor_3),_=Tt(m,e.box_predictor_4),F=Tt(u,e.box_predictor_5),h=n.concat([f.boxPredictionEncoding,l.boxPredictionEncoding,d.boxPredictionEncoding,g.boxPredictionEncoding,_.boxPredictionEncoding,F.boxPredictionEncoding],1),y=n.concat([f.classPrediction,l.classPrediction,d.classPrediction,g.classPrediction,_.classPrediction,F.classPrediction],1);return{boxPredictions:h,classPredictions:y}})}var z=class{constructor({minConfidence:t,maxResults:e}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=t||.5,this._maxResults=e||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if(typeof this._maxResults!="number")throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}};var Pt=class extends I{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("SsdMobilenetv1 - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(512,!1),"float32"),a=n.sub(n.div(r,127.5),1),s=qr(a,e.mobilenetv1),{boxPredictions:i,classPredictions:c}=Qr(s.out,s.conv11,e.prediction_layer);return Kr(i,c,e.output_layer)})}async forward(t){return this.forwardInput(await M(t))}async locateFaces(t,e={}){let{maxResults:r,minConfidence:a}=new z(e),s=await M(t),{boxes:i,scores:c}=this.forwardInput(s),m=i[0],p=c[0];for(let x=1;x{let[D,N]=[Math.max(0,h[x][0]),Math.min(1,h[x][2])].map(O=>O*F),[Y,q]=[Math.max(0,h[x][1]),Math.min(1,h[x][3])].map(O=>O*_);return new E(u[x],new St(Y,D,q-Y,N-D),{height:s.getInputHeight(0),width:s.getInputWidth(0)})});return m.dispose(),p.dispose(),y}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return Jr(t)}extractParams(t){return Xr(t)}};function Qo(o){let t=new Pt;return t.extractWeights(o),t}function vl(o){return Qo(o)}var to=class extends Pt{};var eo=.4,ro=[new b(.738768,.874946),new b(2.42204,2.65704),new b(4.30971,7.04493),new b(10.246,4.59428),new b(12.6868,11.8741)],oo=[new b(1.603231,2.094468),new b(6.041143,7.080126),new b(2.882459,3.518061),new b(4.266906,5.178857),new b(9.041765,10.66308)],no=[117.001,114.697,97.404],ao="tiny_yolov2_model",so="tiny_yolov2_separable_conv_model";var Se=o=>typeof o=="number";function io(o){if(!o)throw new Error(`invalid config: ${o}`);if(typeof o.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${o.withSeparableConvs}`);if(!Se(o.iouThreshold)||o.iouThreshold<0||o.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${o.iouThreshold}`);if(!Array.isArray(o.classes)||!o.classes.length||!o.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(o.classes)}`);if(!Array.isArray(o.anchors)||!o.anchors.length||!o.anchors.map(t=>t||{}).every(t=>Se(t.x)&&Se(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(o.anchors)}`);if(o.meanRgb&&(!Array.isArray(o.meanRgb)||o.meanRgb.length!==3||!o.meanRgb.every(Se)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(o.meanRgb)}`)}function Xt(o){return n.tidy(()=>{let t=n.mul(o,n.scalar(.10000000149011612));return n.add(n.relu(n.sub(o,t)),t)})}function ot(o,t){return n.tidy(()=>{let e=n.pad(o,[[0,0],[1,1],[1,1],[0,0]]);return e=n.conv2d(e,t.conv.filters,[1,1],"valid"),e=n.sub(e,t.bn.sub),e=n.mul(e,t.bn.truediv),e=n.add(e,t.conv.bias),Xt(e)})}function nt(o,t){return n.tidy(()=>{let e=n.pad(o,[[0,0],[1,1],[1,1],[0,0]]);return e=n.separableConv2d(e,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),e=n.add(e,t.bias),Xt(e)})}function tn(o,t){let e=$t(o,t);function r(i,c){let m=n.tensor1d(o(i)),p=n.tensor1d(o(i));return t.push({paramPath:`${c}/sub`},{paramPath:`${c}/truediv`}),{sub:m,truediv:p}}function a(i,c,m){let p=e(i,c,3,`${m}/conv`),u=r(c,`${m}/bn`);return{conv:p,bn:u}}let s=Ot(o,t);return{extractConvParams:e,extractConvWithBatchNormParams:a,extractSeparableConvParams:s}}function co(o,t,e,r){let{extractWeights:a,getRemainingWeights:s}=A(o),i=[],{extractConvParams:c,extractConvWithBatchNormParams:m,extractSeparableConvParams:p}=tn(a,i),u;if(t.withSeparableConvs){let[f,l,d,g,_,F,h,y,x]=r,D=t.isFirstLayerConv2d?c(f,l,3,"conv0"):p(f,l,"conv0"),N=p(l,d,"conv1"),Y=p(d,g,"conv2"),q=p(g,_,"conv3"),O=p(_,F,"conv4"),at=p(F,h,"conv5"),st=y?p(h,y,"conv6"):void 0,it=x?p(y,x,"conv7"):void 0,gt=c(x||y||h,5*e,1,"conv8");u={conv0:D,conv1:N,conv2:Y,conv3:q,conv4:O,conv5:at,conv6:st,conv7:it,conv8:gt}}else{let[f,l,d,g,_,F,h,y,x]=r,D=m(f,l,"conv0"),N=m(l,d,"conv1"),Y=m(d,g,"conv2"),q=m(g,_,"conv3"),O=m(_,F,"conv4"),at=m(F,h,"conv5"),st=m(h,y,"conv6"),it=m(y,x,"conv7"),gt=c(x,5*e,1,"conv8");u={conv0:D,conv1:N,conv2:Y,conv3:q,conv4:O,conv5:at,conv6:st,conv7:it,conv8:gt}}if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{params:u,paramMappings:i}}function en(o,t){let e=B(o,t);function r(c){let m=e(`${c}/sub`,1),p=e(`${c}/truediv`,1);return{sub:m,truediv:p}}function a(c){let m=e(`${c}/filters`,4),p=e(`${c}/bias`,1);return{filters:m,bias:p}}function s(c){let m=a(`${c}/conv`),p=r(`${c}/bn`);return{conv:m,bn:p}}let i=Ht(e);return{extractConvParams:a,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}}function mo(o,t){let e=[],{extractConvParams:r,extractConvWithBatchNormParams:a,extractSeparableConvParams:s}=en(o,e),i;if(t.withSeparableConvs){let c=t.filterSizes&&t.filterSizes.length||9;i={conv0:t.isFirstLayerConv2d?r("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:c>7?s("conv6"):void 0,conv7:c>8?s("conv7"):void 0,conv8:r("conv8")}}else i={conv0:a("conv0"),conv1:a("conv1"),conv2:a("conv2"),conv3:a("conv3"),conv4:a("conv4"),conv5:a("conv5"),conv6:a("conv6"),conv7:a("conv7"),conv8:r("conv8")};return L(o,e),{params:i,paramMappings:e}}var J=class{constructor({inputSize:t,scoreThreshold:e}={}){this._name="TinyYolov2Options";if(this._inputSize=t||416,this._scoreThreshold=e||.5,typeof this._inputSize!="number"||this._inputSize%32!==0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}};var cr=class extends I{constructor(e){super("TinyYolov2");io(e),this._config=e}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(e,r){let a=ot(e,r.conv0);return a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv1),a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv2),a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv3),a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv4),a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv5),a=n.maxPool(a,[2,2],[1,1],"same"),a=ot(a,r.conv6),a=ot(a,r.conv7),_t(a,r.conv8,"valid",!1)}runMobilenet(e,r){let a=this.config.isFirstLayerConv2d?Xt(_t(e,r.conv0,"valid",!1)):nt(e,r.conv0);return a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv1),a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv2),a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv3),a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv4),a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv5),a=n.maxPool(a,[2,2],[1,1],"same"),a=r.conv6?nt(a,r.conv6):a,a=r.conv7?nt(a,r.conv7):a,_t(a,r.conv8,"valid",!1)}forwardInput(e,r){let{params:a}=this;if(!a)throw new Error("TinyYolov2 - load model before inference");return n.tidy(()=>{let s=n.cast(e.toBatchTensor(r,!1),"float32");return s=this.config.meanRgb?X(s,this.config.meanRgb):s,s=s.div(255),this.config.withSeparableConvs?this.runMobilenet(s,a):this.runTinyYolov2(s,a)})}async forward(e,r){return this.forwardInput(await M(e),r)}async detect(e,r={}){let{inputSize:a,scoreThreshold:s}=new J(r),i=await M(e),c=await this.forwardInput(i,a),m=n.tidy(()=>n.unstack(c)[0].expandDims()),p={width:i.getInputWidth(0),height:i.getInputHeight(0)},u=await this.extractBoxes(m,i.getReshapedInputDimensions(0),s);c.dispose(),m.dispose();let f=u.map(h=>h.box),l=u.map(h=>h.score),d=u.map(h=>h.classScore),g=u.map(h=>this.config.classes[h.label]);return gr(f.map(h=>h.rescale(a)),l,this.config.iouThreshold,!0).map(h=>new ct(l[h],d[h],g[h],f[h],p))}getDefaultModelName(){return""}extractParamsFromWeightMap(e){return mo(e,this.config)}extractParams(e){let r=this.config.filterSizes||cr.DEFAULT_FILTER_SIZES,a=r?r.length:void 0;if(a!==7&&a!==8&&a!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${a} filterSizes in config`);return co(e,this.config,this.boxEncodingSize,r)}async extractBoxes(e,r,a){let{width:s,height:i}=r,c=Math.max(s,i),m=c/s,p=c/i,u=e.shape[1],f=this.config.anchors.length,[l,d,g]=n.tidy(()=>{let y=e.reshape([u,u,f,this.boxEncodingSize]),x=y.slice([0,0,0,0],[u,u,f,4]),D=y.slice([0,0,0,4],[u,u,f,1]),N=this.withClassScores?n.softmax(y.slice([0,0,0,5],[u,u,f,this.config.classes.length]),3):n.scalar(0);return[x,D,N]}),_=[],F=await d.array(),h=await l.array();for(let y=0;ya){let Y=(x+fe(h[y][x][D][0]))/u*m,q=(y+fe(h[y][x][D][1]))/u*p,O=Math.exp(h[y][x][D][2])*this.config.anchors[D].x/u*m,at=Math.exp(h[y][x][D][3])*this.config.anchors[D].y/u*p,st=Y-O/2,it=q-at/2,gt={row:y,col:x,anchor:D},{classScore:pr,label:ur}=this.withClassScores?await this.extractPredictedClass(g,gt):{classScore:1,label:0};_.push({box:new Nt(st,it,st+O,it+at),score:N,classScore:N*pr,label:ur,...gt})}}return l.dispose(),d.dispose(),g.dispose(),_}async extractPredictedClass(e,r){let{row:a,col:s,anchor:i}=r,c=await e.array();return Array(this.config.classes.length).fill(0).map((m,p)=>c[a][s][i][p]).map((m,p)=>({classScore:m,label:p})).reduce((m,p)=>m.classScore>p.classScore?m:p)}},wt=cr;wt.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var Jt=class extends wt{constructor(t=!0){let e={withSeparableConvs:t,iouThreshold:eo,classes:["face"],...t?{anchors:oo,meanRgb:no}:{anchors:ro,withClassScores:!0}};super(e)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,e){return(await this.detect(t,e)).map(a=>new E(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?so:ao}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function pd(o,t=!0){let e=new Jt(t);return e.extractWeights(o),e}var Le=class extends J{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var V=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Ft(o,t,e,r,a=({alignedRect:s})=>s){let s=o.map(m=>Yt(m)?a(m):m.detection),i=r||(t instanceof n.Tensor?await oe(t,s):await re(t,s)),c=await e(i);return i.forEach(m=>m instanceof n.Tensor&&m.dispose()),c}async function qt(o,t,e,r,a){return Ft([o],t,async s=>e(s[0]),r,a)}var po=.4,uo=[new b(1.603231,2.094468),new b(6.041143,7.080126),new b(2.882459,3.518061),new b(4.266906,5.178857),new b(9.041765,10.66308)],fo=[117.001,114.697,97.404];var Zt=class extends wt{constructor(){let t={withSeparableConvs:!0,iouThreshold:po,classes:["face"],anchors:uo,meanRgb:fo,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,e){return(await this.detect(t,e)).map(a=>new E(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var P={ssdMobilenetv1:new Pt,tinyFaceDetector:new Zt,tinyYolov2:new Jt,faceLandmark68Net:new jt,faceLandmark68TinyNet:new Ie,faceRecognitionNet:new Ut,faceExpressionNet:new we,ageGenderNet:new Me},rn=(o,t)=>P.ssdMobilenetv1.locateFaces(o,t),Od=(o,t)=>P.tinyFaceDetector.locateFaces(o,t),Hd=(o,t)=>P.tinyYolov2.locateFaces(o,t),on=o=>P.faceLandmark68Net.detectLandmarks(o),zd=o=>P.faceLandmark68TinyNet.detectLandmarks(o),Vd=o=>P.faceRecognitionNet.computeFaceDescriptor(o),Yd=o=>P.faceExpressionNet.predictExpressions(o),Gd=o=>P.ageGenderNet.predictAgeAndGender(o),nn=o=>P.ssdMobilenetv1.load(o),jd=o=>P.tinyFaceDetector.load(o),Ud=o=>P.tinyYolov2.load(o),Xd=o=>P.faceLandmark68Net.load(o),Jd=o=>P.faceLandmark68TinyNet.load(o),qd=o=>P.faceRecognitionNet.load(o),Zd=o=>P.faceExpressionNet.load(o),Kd=o=>P.ageGenderNet.load(o),Qd=nn,th=rn,eh=on;var Ae=class extends V{constructor(e,r,a){super();this.parentTask=e;this.input=r;this.extractedFaces=a}},Dt=class extends Ae{async run(){let t=await this.parentTask,e=await Ft(t,this.input,async r=>Promise.all(r.map(a=>P.faceExpressionNet.predictExpressions(a))),this.extractedFaces);return t.map((r,a)=>tr(r,e[a]))}withAgeAndGender(){return new Mt(this,this.input)}},Et=class extends Ae{async run(){let t=await this.parentTask;if(!t)return;let e=await qt(t,this.input,r=>P.faceExpressionNet.predictExpressions(r),this.extractedFaces);return tr(t,e)}withAgeAndGender(){return new Ct(this,this.input)}},ut=class extends Dt{withAgeAndGender(){return new lt(this,this.input)}withFaceDescriptors(){return new ht(this,this.input)}},ft=class extends Et{withAgeAndGender(){return new dt(this,this.input)}withFaceDescriptor(){return new bt(this,this.input)}};var We=class extends V{constructor(e,r,a){super();this.parentTask=e;this.input=r;this.extractedFaces=a}},Mt=class extends We{async run(){let t=await this.parentTask,e=await Ft(t,this.input,async r=>Promise.all(r.map(a=>P.ageGenderNet.predictAgeAndGender(a))),this.extractedFaces);return t.map((r,a)=>{let{age:s,gender:i,genderProbability:c}=e[a];return sr(ir(r,i,c),s)})}withFaceExpressions(){return new Dt(this,this.input)}},Ct=class extends We{async run(){let t=await this.parentTask;if(!t)return;let{age:e,gender:r,genderProbability:a}=await qt(t,this.input,s=>P.ageGenderNet.predictAgeAndGender(s),this.extractedFaces);return sr(ir(t,r,a),e)}withFaceExpressions(){return new Et(this,this.input)}},lt=class extends Mt{withFaceExpressions(){return new ut(this,this.input)}withFaceDescriptors(){return new ht(this,this.input)}},dt=class extends Ct{withFaceExpressions(){return new ft(this,this.input)}withFaceDescriptor(){return new bt(this,this.input)}};var ke=class extends V{constructor(e,r){super();this.parentTask=e;this.input=r}},ht=class extends ke{async run(){let t=await this.parentTask;return(await Ft(t,this.input,r=>Promise.all(r.map(a=>P.faceRecognitionNet.computeFaceDescriptor(a))),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}))).map((r,a)=>ar(t[a],r))}withFaceExpressions(){return new ut(this,this.input)}withAgeAndGender(){return new lt(this,this.input)}},bt=class extends ke{async run(){let t=await this.parentTask;if(!t)return;let e=await qt(t,this.input,r=>P.faceRecognitionNet.computeFaceDescriptor(r),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}));return ar(t,e)}withFaceExpressions(){return new ft(this,this.input)}withAgeAndGender(){return new dt(this,this.input)}};var Be=class extends V{constructor(e,r,a){super();this.parentTask=e;this.input=r;this.useTinyLandmarkNet=a}get landmarkNet(){return this.useTinyLandmarkNet?P.faceLandmark68TinyNet:P.faceLandmark68Net}},Re=class extends Be{async run(){let t=await this.parentTask,e=t.map(i=>i.detection),r=this.input instanceof n.Tensor?await oe(this.input,e):await re(this.input,e),a=await Promise.all(r.map(i=>this.landmarkNet.detectLandmarks(i)));return r.forEach(i=>i instanceof n.Tensor&&i.dispose()),t.filter((i,c)=>a[c]).map((i,c)=>ie(i,a[c]))}withFaceExpressions(){return new ut(this,this.input)}withAgeAndGender(){return new lt(this,this.input)}withFaceDescriptors(){return new ht(this,this.input)}},$e=class extends Be{async run(){let t=await this.parentTask;if(!t)return;let{detection:e}=t,r=this.input instanceof n.Tensor?await oe(this.input,[e]):await re(this.input,[e]),a=await this.landmarkNet.detectLandmarks(r[0]);return r.forEach(s=>s instanceof n.Tensor&&s.dispose()),ie(t,a)}withFaceExpressions(){return new ft(this,this.input)}withAgeAndGender(){return new dt(this,this.input)}withFaceDescriptor(){return new bt(this,this.input)}};var Oe=class extends V{constructor(e,r=new z){super();this.input=e;this.options=r}},me=class extends Oe{async run(){let{input:t,options:e}=this,r;if(e instanceof Le)r=P.tinyFaceDetector.locateFaces(t,e);else if(e instanceof z)r=P.ssdMobilenetv1.locateFaces(t,e);else if(e instanceof J)r=P.tinyYolov2.locateFaces(t,e);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return r}runAndExtendWithFaceDetections(){return new Promise((t,e)=>{this.run().then(r=>t(r.map(a=>At({},a)))).catch(r=>e(r))})}withFaceLandmarks(t=!1){return new Re(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Dt(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Mt(this.runAndExtendWithFaceDetections(),this.input)}},He=class extends Oe{async run(){let t=await new me(this.input,this.options),e=t[0];return t.forEach(r=>{r.score>e.score&&(e=r)}),e}runAndExtendWithFaceDetection(){return new Promise(async t=>{let e=await this.run();t(e?At({},e):void 0)})}withFaceLandmarks(t=!1){return new $e(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Et(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Ct(this.runAndExtendWithFaceDetection(),this.input)}};function Kh(o,t=new z){return new He(o,t)}function mr(o,t=new z){return new me(o,t)}async function an(o,t){return mr(o,new z(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function nb(o,t={}){return mr(o,new J(t)).withFaceLandmarks().withFaceDescriptors()}var ab=an;function lo(o,t){if(o.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let e=Array.from(o),r=Array.from(t);return Math.sqrt(e.map((a,s)=>a-r[s]).reduce((a,s)=>a+s**2,0))}var ze=class{constructor(t,e=.6){this._distanceThreshold=e;let r=Array.isArray(t)?t:[t];if(!r.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let a=1,s=()=>`person ${a++}`;this._labeledDescriptors=r.map(i=>{if(i instanceof Q)return i;if(i instanceof Float32Array)return new Q(s(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new Q(s(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,e){return e.map(r=>lo(r,t)).reduce((r,a)=>r+a,0)/(e.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:e,label:r})=>new Kt(r,this.computeMeanDistance(t,e))).reduce((e,r)=>e.distancet.toJSON())}}static fromJSON(t){let e=t.labeledDescriptors.map(r=>Q.fromJSON(r));return new ze(e,t.distanceThreshold)}};function Pb(o){let t=new Zt;return t.extractWeights(o),t}function sn(o,t){let{width:e,height:r}=new S(t.width,t.height);if(e<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:e,height:r})}`);if(Array.isArray(o))return o.map(a=>sn(a,{width:e,height:r}));if(Yt(o)){let a=o.detection.forSize(e,r),s=o.unshiftedLandmarks.forSize(a.box.width,a.box.height);return ie(At(o,a),s)}return tt(o)?At(o,o.detection.forSize(e,r)):o instanceof $||o instanceof E?o.forSize(e,r):o}var Ab=Wr;export{Me as AgeGenderNet,Nt as BoundingBox,w as Box,V as ComposableTask,ht as ComputeAllFaceDescriptorsTask,ke as ComputeFaceDescriptorsTaskBase,bt as ComputeSingleFaceDescriptorTask,Re as DetectAllFaceLandmarksTask,me as DetectAllFacesTask,Be as DetectFaceLandmarksTaskBase,Oe as DetectFacesTaskBase,$e as DetectSingleFaceLandmarksTask,He as DetectSingleFaceTask,S as Dimensions,Sr as FACE_EXPRESSION_LABELS,E as FaceDetection,to as FaceDetectionNet,we as FaceExpressionNet,pt as FaceExpressions,jt as FaceLandmark68Net,Ie as FaceLandmark68TinyNet,Vr as FaceLandmarkNet,$ as FaceLandmarks,vr as FaceLandmarks5,Lt as FaceLandmarks68,Kt as FaceMatch,ze as FaceMatcher,Ut as FaceRecognitionNet,rr as Gender,Qt as LabeledBox,Q as LabeledFaceDescriptors,rt as NetInput,I as NeuralNetwork,ct as ObjectDetection,b as Point,yr as PredictedBox,St as Rect,Pt as SsdMobilenetv1,z as SsdMobilenetv1Options,Zt as TinyFaceDetector,Le as TinyFaceDetectorOptions,Jt as TinyYolov2,J as TinyYolov2Options,ab as allFaces,an as allFacesSsdMobilenetv1,nb as allFacesTinyYolov2,_r as awaitMediaLoaded,Tr as bufferToImage,Vd as computeFaceDescriptor,Rt as createCanvas,be as createCanvasFromMedia,vl as createFaceDetectionNet,vf as createFaceRecognitionNet,Qo as createSsdMobilenetv1,Pb as createTinyFaceDetector,pd as createTinyYolov2,mr as detectAllFaces,on as detectFaceLandmarks,zd as detectFaceLandmarksTiny,eh as detectLandmarks,Kh as detectSingleFace,Ar as draw,T as env,lo as euclideanDistance,sr as extendWithAge,ar as extendWithFaceDescriptor,At as extendWithFaceDetection,tr as extendWithFaceExpressions,ie as extendWithFaceLandmarks,ir as extendWithGender,oe as extractFaceTensors,re as extractFaces,Mi as fetchImage,Fr as fetchJson,Li as fetchNetWeights,mt as fetchOrThrow,$i as fetchVideo,k as getContext2dOrThrow,Bt as getMediaDimensions,Pr as imageTensorToCanvas,wr as imageToSquare,Vn as inverseSigmoid,hr as iou,Qe as isMediaElement,he as isMediaLoaded,Pf as isWithAge,tt as isWithFaceDetection,Lr as isWithFaceExpressions,Yt as isWithFaceLandmarks,Ef as isWithGender,Kd as loadAgeGenderModel,Qd as loadFaceDetectionModel,Zd as loadFaceExpressionModel,Xd as loadFaceLandmarkModel,Jd as loadFaceLandmarkTinyModel,qd as loadFaceRecognitionModel,nn as loadSsdMobilenetv1Model,jd as loadTinyFaceDetectorModel,Ud as loadTinyYolov2Model,Er as loadWeightMap,th as locateFaces,ji as matchDimensions,br as minBbox,P as nets,gr as nonMaxSuppression,X as normalize,xr as padToSquare,Gd as predictAgeAndGender,Yd as recognizeFaceExpressions,sn as resizeResults,Wt as resolveInput,Hn as shuffleArray,fe as sigmoid,rn as ssdMobilenetv1,n as tf,Od as tinyFaceDetector,Hd as tinyYolov2,M as toNetInput,dr as utils,io as validateConfig,Ab as version}; +var lr=Object.defineProperty;var ho=Object.getOwnPropertyDescriptor;var bo=Object.getOwnPropertyNames;var go=Object.prototype.hasOwnProperty;var xo=(o=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(o,{get:(t,e)=>(typeof require!="undefined"?require:t)[e]}):o)(function(o){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+o+'" is not supported')});var Ve=(o,t)=>{for(var e in t)lr(o,e,{get:t[e],enumerable:!0})},fr=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of bo(t))!go.call(o,a)&&a!==e&&lr(o,a,{get:()=>t[a],enumerable:!(r=ho(t,a))||r.enumerable});return o},v=(o,t,e)=>(fr(o,t,"default"),e&&fr(e,t,"default"));var n={};Ve(n,{version:()=>Eo});v(n,fn);v(n,ln);v(n,dn);import*as fn from"@tensorflow/tfjs/dist/index.js";import*as ln from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as dn from"@tensorflow/tfjs-backend-wasm/dist/index.js";var vo="3.18.0",yo="3.18.0",_o="3.18.0",To="3.18.0",Po="3.18.0",wo="3.18.0",Fo="3.18.0",Do="3.18.0",Eo={tfjs:vo,"tfjs-core":yo,"tfjs-data":_o,"tfjs-layers":To,"tfjs-converter":Po,"tfjs-backend-cpu":wo,"tfjs-backend-webgl":Fo,"tfjs-backend-wasm":Do};var Ar={};Ve(Ar,{AnchorPosition:()=>Ke,DrawBox:()=>ee,DrawBoxOptions:()=>de,DrawFaceLandmarks:()=>De,DrawFaceLandmarksOptions:()=>Fe,DrawTextField:()=>et,DrawTextFieldOptions:()=>kt,drawContour:()=>Z,drawDetections:()=>Ao,drawFaceExpressions:()=>Wo,drawFaceLandmarks:()=>Bo});function Z(o,t,e=!1){if(o.beginPath(),t.slice(1).forEach(({x:r,y:a},s)=>{let i=t[s];o.moveTo(i.x,i.y),o.lineTo(r,a)}),e){let r=t[t.length-1],a=t[0];if(!r||!a)return;o.moveTo(r.x,r.y),o.lineTo(a.x,a.y)}o.stroke()}var dr={};Ve(dr,{computeReshapedDimensions:()=>je,getCenterPoint:()=>yt,isDimensions:()=>ue,isEven:()=>pe,isFloat:()=>Ge,isTensor:()=>xt,isTensor1D:()=>Mo,isTensor2D:()=>Ye,isTensor3D:()=>K,isTensor4D:()=>R,isValidNumber:()=>G,isValidProbablitiy:()=>It,range:()=>U,round:()=>vt});var S=class{constructor(t,e){if(!G(t)||!G(e))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:t,height:e})}`);this._width=t,this._height=e}get width(){return this._width}get height(){return this._height}reverse(){return new S(1/this.width,1/this.height)}};function xt(o,t){return o instanceof n.Tensor&&o.shape.length===t}function Mo(o){return xt(o,1)}function Ye(o){return xt(o,2)}function K(o){return xt(o,3)}function R(o){return xt(o,4)}function Ge(o){return o%1!==0}function pe(o){return o%2===0}function vt(o,t=2){let e=10**t;return Math.floor(o*e)/e}function ue(o){return o&&o.width&&o.height}function je({width:o,height:t},e){let r=e/Math.max(t,o);return new S(Math.round(o*r),Math.round(t*r))}function yt(o){return o.reduce((t,e)=>t.add(e),new b(0,0)).div(new b(o.length,o.length))}function U(o,t,e){return Array(o).fill(0).map((r,a)=>t+a*e)}function G(o){return!!o&&o!==1/0&&o!==-1/0&&!Number.isNaN(o)||o===0}function It(o){return G(o)&&o>=0&&o<=1}var b=class{constructor(t,e){this._x=t,this._y=e}get x(){return this._x}get y(){return this._y}add(t){return new b(this.x+t.x,this.y+t.y)}sub(t){return new b(this.x-t.x,this.y-t.y)}mul(t){return new b(this.x*t.x,this.y*t.y)}div(t){return new b(this.x/t.x,this.y/t.y)}abs(){return new b(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new b(Math.floor(this.x),Math.floor(this.y))}};var w=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(G)}static assertIsValidBox(t,e,r=!1){if(!w.isRect(t))throw new Error(`${e} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!r&&(t.width<0||t.height<0))throw new Error(`${e} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,e=!0){let r=t||{},a=[r.left,r.top,r.right,r.bottom].every(G),s=[r.x,r.y,r.width,r.height].every(G);if(!s&&!a)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(r)}`);let[i,c,m,p]=s?[r.x,r.y,r.width,r.height]:[r.left,r.top,r.right-r.left,r.bottom-r.top];w.assertIsValidBox({x:i,y:c,width:m,height:p},"Box.constructor",e),this._x=i,this._y=c,this._width=m,this._height=p}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new b(this.left,this.top)}get topRight(){return new b(this.right,this.top)}get bottomLeft(){return new b(this.left,this.bottom)}get bottomRight(){return new b(this.right,this.bottom)}round(){let[t,e,r,a]=[this.x,this.y,this.width,this.height].map(s=>Math.round(s));return new w({x:t,y:e,width:r,height:a})}floor(){let[t,e,r,a]=[this.x,this.y,this.width,this.height].map(s=>Math.floor(s));return new w({x:t,y:e,width:r,height:a})}toSquare(){let{x:t,y:e,width:r,height:a}=this,s=Math.abs(r-a);return re&&(c=-f+e+r,f=e),l>t&&(m=-l+t+a,l=t),p<1&&(m=2-p,p=1),u<1&&(m=2-u,u=1),{dy:i,edy:m,dx:s,edx:c,y:u,ey:l,x:p,ex:f,w:r,h:a}}calibrate(t){return new w({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Nt=class extends w{constructor(t,e,r,a,s=!1){super({left:t,top:e,right:r,bottom:a},s)}};var ct=class{constructor(t,e,r,a,s){this._imageDims=new S(s.width,s.height),this._score=t,this._classScore=e,this._className=r,this._box=new w(a).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new w(this._box).rescale(this.imageDims.reverse())}forSize(t,e){return new ct(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:e})}};var E=class extends ct{constructor(t,e,r){super(t,t,"",e,r)}forSize(t,e){let{score:r,relativeBox:a,imageDims:s}=super.forSize(t,e);return new E(r,a,s)}};function hr(o,t,e=!0){let r=Math.max(0,Math.min(o.right,t.right)-Math.max(o.left,t.left)),a=Math.max(0,Math.min(o.bottom,t.bottom)-Math.max(o.top,t.top)),s=r*a;return e?s/(o.area+t.area-s):s/Math.min(o.area,t.area)}function br(o){let t=o.map(c=>c.x),e=o.map(c=>c.y),r=t.reduce((c,m)=>mmcc({score:i,boxIndex:c})).sort((i,c)=>i.score-c.score).map(i=>i.boxIndex),s=[];for(;a.length>0;){let i=a.pop();s.push(i);let c=a,m=[];for(let p=0;pm[u]<=e)}return s}function X(o,t){return n.tidy(()=>{let[e,r,a]=t,s=n.fill([...o.shape.slice(0,3),1],e,"float32"),i=n.fill([...o.shape.slice(0,3),1],r,"float32"),c=n.fill([...o.shape.slice(0,3),1],a,"float32"),m=n.concat([s,i,c],3);return n.sub(o,m)})}function xr(o,t=!1){return n.tidy(()=>{let[e,r]=o.shape.slice(1);if(e===r)return o;let a=Math.abs(e-r),s=Math.round(a*(t?.5:1)),i=e>r?2:1,c=l=>{let d=o.shape.slice();return d[i]=l,n.fill(d,0,"float32")},m=c(s),p=a-m.shape[i],f=[t&&p?c(p):null,o,m].filter(l=>!!l).map(l=>n.cast(l,"float32"));return n.concat(f,i)})}function Hn(o){let t=o.slice();for(let e=t.length-1;e>0;e--){let r=Math.floor(Math.random()*(e+1)),a=t[e];t[e]=t[r],t[r]=a}return t}function fe(o){return 1/(1+Math.exp(-o))}function Vn(o){return Math.log(o/(1-o))}var St=class extends w{constructor(t,e,r,a,s=!1){super({x:t,y:e,width:r,height:a},s)}};var Co=.5,Io=.43,No=.45,$=class{constructor(t,e,r=new b(0,0)){let{width:a,height:s}=e;this._imgDims=new S(a,s),this._shift=r,this._positions=t.map(i=>i.mul(new b(a,s)).add(r))}get shift(){return new b(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map(t=>t.sub(this._shift).div(new b(this.imageWidth,this.imageHeight)))}forSize(t,e){return new this.constructor(this.relativePositions,{width:t,height:e})}shiftBy(t,e){return new this.constructor(this.relativePositions,this._imgDims,new b(t,e))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,e={}){if(t){let s=t instanceof E?t.box.floor():new w(t);return this.shiftBy(s.x,s.y).align(null,e)}let{useDlibAlignment:r,minBoxPadding:a}={useDlibAlignment:!1,minBoxPadding:.2,...e};return r?this.alignDlib():this.alignMinBbox(a)}alignDlib(){let t=this.getRefPointsForAlignment(),[e,r,a]=t,s=f=>a.sub(f).magnitude(),i=(s(e)+s(r))/2,c=Math.floor(i/No),m=yt(t),p=Math.floor(Math.max(0,m.x-Co*c)),u=Math.floor(Math.max(0,m.y-Io*c));return new St(p,u,Math.min(c,this.imageWidth+p),Math.min(c,this.imageHeight+u))}alignMinBbox(t){let e=br(this.positions);return e.pad(e.width*t,e.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var vr=class extends ${getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],yt([t[3],t[4]])]}};var Lt=class extends ${getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(yt)}};var Kt=class{constructor(t,e){this._label=t,this._distance=e}get label(){return this._label}get distance(){return this._distance}toString(t=!0){return`${this.label}${t?` (${vt(this.distance)})`:""}`}};var Qt=class extends w{constructor(e,r){super(e);this._label=r}static assertIsValidLabeledBox(e,r){if(w.assertIsValidBox(e,r),!G(e.label))throw new Error(`${r} - expected property label (${e.label}) to be a number`)}get label(){return this._label}};var Q=class{constructor(t,e){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(e)||e.some(r=>!(r instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=e}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let e=t.descriptors.map(r=>new Float32Array(r));return new Q(t.label,e)}};var yr=class extends Qt{constructor(e,r,a,s){super(e,r);this._score=a,this._classScore=s}static assertIsValidPredictedBox(e,r){if(Qt.assertIsValidLabeledBox(e,r),!It(e.score)||!It(e.classScore))throw new Error(`${r} - expected properties score (${e.score}) and (${e.classScore}) to be a number between [0, 1]`)}get score(){return this._score}get classScore(){return this._classScore}};function tt(o){return o.detection instanceof E}function At(o,t){return{...o,...{detection:t}}}function Ue(){let o=window.fetch;if(!o)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:o,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function te(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function le(o){let t="";if(!o&&te())try{o=xo("fs")}catch(r){t=r.toString()}return{readFile:o?r=>new Promise((a,s)=>{o.readFile(r,(i,c)=>i?s(i):a(c))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function Xe(){let o=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,e=global.Video||global.HTMLVideoElement,r=()=>{if(o)return new o;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},a=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},s=()=>{if(e)return new e;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},i=global.fetch,c=le();return{Canvas:o||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:r,createImageElement:a,createVideoElement:s,fetch:i,...c}}function Je(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var C;function So(){if(!C)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return C}function qe(o){C=o}function Ze(){return Je()?qe(Ue()):te()?qe(Xe()):null}function Lo(o){if(C||Ze(),!C)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=C.Canvas,Image:e=C.Image}=o;C.Canvas=t,C.Image=e,C.createCanvasElement=o.createCanvasElement||(()=>new t),C.createImageElement=o.createImageElement||(()=>new e),C.ImageData=o.ImageData||C.ImageData,C.Video=o.Video||C.Video,C.fetch=o.fetch||C.fetch,C.readFile=o.readFile||C.readFile}var T={getEnv:So,setEnv:qe,initialize:Ze,createBrowserEnv:Ue,createFileSystem:le,createNodejsEnv:Xe,monkeyPatch:Lo,isBrowser:Je,isNodejs:te};Ze();function Wt(o){return!T.isNodejs()&&typeof o=="string"?document.getElementById(o):o}function k(o){let{Canvas:t,CanvasRenderingContext2D:e}=T.getEnv();if(o instanceof e)return o;let r=Wt(o);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let a=r.getContext("2d");if(!a)throw new Error("resolveContext2d - canvas 2d context is null");return a}var Ke=(a=>(a.TOP_LEFT="TOP_LEFT",a.TOP_RIGHT="TOP_RIGHT",a.BOTTOM_LEFT="BOTTOM_LEFT",a.BOTTOM_RIGHT="BOTTOM_RIGHT",a))(Ke||{}),kt=class{constructor(t={}){let{anchorPosition:e,backgroundColor:r,fontColor:a,fontSize:s,fontStyle:i,padding:c}=t;this.anchorPosition=e||"TOP_LEFT",this.backgroundColor=r||"rgba(0, 0, 0, 0.5)",this.fontColor=a||"rgba(255, 255, 255, 1)",this.fontSize=s||14,this.fontStyle=i||"Georgia",this.padding=c||4}},et=class{constructor(t,e,r={}){this.text=typeof t=="string"?[t]:t instanceof et?t.text:t,this.anchor=e,this.options=new kt(r)}measureWidth(t){let{padding:e}=this.options;return this.text.map(r=>t.measureText(r).width).reduce((r,a)=>r{let g=m+f.x,_=m+f.y+(d+1)*i;r.fillText(l,g,_)})}};var de=class{constructor(t={}){let{boxColor:e,lineWidth:r,label:a,drawLabelOptions:s}=t;this.boxColor=e||"rgba(0, 0, 255, 1)",this.lineWidth=r||2,this.label=a;let i={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new kt({...i,...s})}},ee=class{constructor(t,e={}){this.box=new w(t),this.options=new de(e)}draw(t){let e=k(t),{boxColor:r,lineWidth:a}=this.options,{x:s,y:i,width:c,height:m}=this.box;e.strokeStyle=r,e.lineWidth=a,e.strokeRect(s,i,c,m);let{label:p}=this.options;p&&new et([p],{x:s-a/2,y:i},this.options.drawLabelOptions).draw(t)}};function Ao(o,t){(Array.isArray(t)?t:[t]).forEach(r=>{let a=r instanceof E?r.score:tt(r)?r.detection.score:void 0,s=r instanceof E?r.box:tt(r)?r.detection.box:new w(r),i=a?`${vt(a)}`:void 0;new ee(s,{label:i}).draw(o)})}function he(o){let{Image:t,Video:e}=T.getEnv();return o instanceof t&&o.complete||o instanceof e&&o.readyState>=3}function _r(o){return new Promise((t,e)=>{(o instanceof T.getEnv().Canvas||he(o))&&t(null);function r(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",a),s.currentTarget.removeEventListener("error",r),e(s))}function a(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",a),s.currentTarget.removeEventListener("error",r),t(s))}o.addEventListener("load",a),o.addEventListener("error",r)})}function Tr(o){return new Promise((t,e)=>{o instanceof Blob||e(new Error("bufferToImage - expected buf to be of type: Blob"));let r=new FileReader;r.onload=()=>{typeof r.result!="string"&&e(new Error("bufferToImage - expected reader.result to be a string, in onload"));let a=T.getEnv().createImageElement();a.onload=()=>t(a),a.onerror=e,a.src=r.result},r.onerror=e,r.readAsDataURL(o)})}function Bt(o){let{Image:t,Video:e}=T.getEnv();return o instanceof t?new S(o.naturalWidth,o.naturalHeight):o instanceof e?new S(o.videoWidth,o.videoHeight):new S(o.width,o.height)}function Rt({width:o,height:t}){let{createCanvasElement:e}=T.getEnv(),r=e();return r.width=o,r.height=t,r}function be(o,t){let{ImageData:e}=T.getEnv();if(!(o instanceof e)&&!he(o))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:r,height:a}=t||Bt(o),s=Rt({width:r,height:a});return o instanceof e?k(s).putImageData(o,0,0):k(s).drawImage(o,0,0,r,a),s}async function Pr(o,t){let e=t||T.getEnv().createCanvasElement(),[r,a,s]=o.shape.slice(R(o)?1:0),i=n.tidy(()=>o.as3D(r,a,s).toInt());return await n.browser.toPixels(i,e),i.dispose(),e}function Qe(o){let{Image:t,Canvas:e,Video:r}=T.getEnv();return o instanceof t||o instanceof e||o instanceof r}function wr(o,t,e=!1){let{Image:r,Canvas:a}=T.getEnv();if(!(o instanceof r||o instanceof a))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Rt({width:1,height:1});let s=Bt(o),i=t/Math.max(s.height,s.width),c=i*s.width,m=i*s.height,p=Rt({width:t,height:t}),u=o instanceof a?o:be(o),f=Math.abs(c-m)/2,l=e&&c0&&u.height>0&&k(p).drawImage(u,l,d,c,m),p}var rt=class{constructor(t,e=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=e,this._batchSize=t.length,t.forEach((r,a)=>{if(K(r)){this._imageTensors[a]=r,this._inputDimensions[a]=r.shape;return}if(R(r)){let i=r.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[a]=r,this._inputDimensions[a]=r.shape.slice(1);return}let s=r instanceof T.getEnv().Canvas?r:be(r);this._canvases[a]=s,this._inputDimensions[a]=[s.height,s.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return U(this.batchSize,0,1).map((t,e)=>this.getReshapedInputDimensions(e))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let e=this.getInputWidth(t),r=this.getInputHeight(t);return je({width:e,height:r},this.inputSize)}toBatchTensor(t,e=!0){return this._inputSize=t,n.tidy(()=>{let r=U(this.batchSize,0,1).map(s=>{let i=this.getInput(s);if(i instanceof n.Tensor){let c=R(i)?i:n.expandDims(i);return c=xr(c,e),(c.shape[1]!==t||c.shape[2]!==t)&&(c=n.image.resizeBilinear(c,[t,t],!1,!1)),c.as3D(t,t,3)}if(i instanceof T.getEnv().Canvas)return n.browser.fromPixels(wr(i,t,e));throw new Error(`toBatchTensor - at batchIdx ${s}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)});return n.stack(r.map(s=>n.cast(s,"float32"))).as4D(this.batchSize,t,t,3)})}};async function M(o){if(o instanceof rt)return o;let t=Array.isArray(o)?o:[o];if(!t.length)throw new Error("toNetInput - empty array passed as input");let e=a=>Array.isArray(o)?` at input index ${a}:`:"",r=t.map(Wt);return r.forEach((a,s)=>{if(!Qe(a)&&!K(a)&&!R(a))throw typeof t[s]=="string"?new Error(`toNetInput -${e(s)} string passed, but could not resolve HTMLElement for element id ${t[s]}`):new Error(`toNetInput -${e(s)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(R(a)){let i=a.shape[0];if(i!==1)throw new Error(`toNetInput -${e(s)} tf.Tensor4D with batchSize ${i} passed, but not supported in input array`)}}),await Promise.all(r.map(a=>Qe(a)&&_r(a))),new rt(r,Array.isArray(o))}async function re(o,t){let{Canvas:e}=T.getEnv(),r=o;if(!(o instanceof e)){let i=await M(o);if(i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let c=i.getInput(0);r=c instanceof e?c:await Pr(c)}let a=k(r);return t.map(i=>i instanceof E?i.forSize(r.width,r.height).box.floor():i).map(i=>i.clipAtImageBorders(r.width,r.height)).map(({x:i,y:c,width:m,height:p})=>{let u=Rt({width:m,height:p});return m>0&&p>0&&k(u).putImageData(a.getImageData(i,c,m,p),0,0),u})}async function oe(o,t){if(!K(o)&&!R(o))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(R(o)&&o.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return n.tidy(()=>{let[e,r,a]=o.shape.slice(R(o)?1:0);return t.map(c=>c instanceof E?c.forSize(r,e).box:c).map(c=>c.clipAtImageBorders(r,e)).filter(c=>c.width>0&&c.height>0).map(({x:c,y:m,width:p,height:u})=>n.slice3d(o.as3D(e,r,a),[m,c,0],[u,p,a]))})}async function mt(o,t){let{fetch:e}=T.getEnv(),r=await e(o,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}async function Mi(o){let t=await mt(o),e=await t.blob();if(!e.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${e.type}, for url: ${t.url}`);return Tr(e)}async function Fr(o){return(await mt(o)).json()}async function Li(o){return new Float32Array(await(await mt(o)).arrayBuffer())}function Dr(o){return new Promise((t,e)=>{o instanceof Blob||e(new Error("bufferToVideo - expected buf to be of type: Blob"));let r=T.getEnv().createVideoElement();r.oncanplay=()=>t(r),r.onerror=e,r.playsInline=!0,r.muted=!0,r.src=URL.createObjectURL(o),r.play()})}async function $i(o){let t=await mt(o),e=await t.blob();if(!e.type.startsWith("video/"))throw new Error(`fetchVideo - expected blob type to be of type video/*, instead have: ${e.type}, for url: ${t.url}`);return Dr(e)}function ge(o,t){let e=`${t}-weights_manifest.json`;if(!o)return{modelBaseUri:"",manifestUri:e};if(o==="/")return{modelBaseUri:"/",manifestUri:`/${e}`};let r=o.startsWith("http://")?"http://":o.startsWith("https://")?"https://":"";o=o.replace(r,"");let a=o.split("/").filter(c=>c),s=o.endsWith(".json")?a[a.length-1]:e,i=r+(o.endsWith(".json")?a.slice(0,a.length-1):a).join("/");return i=o.startsWith("/")?`/${i}`:i,{modelBaseUri:i,manifestUri:i==="/"?`/${s}`:`${i}/${s}`}}async function Er(o,t){let{manifestUri:e,modelBaseUri:r}=ge(o,t),a=await Fr(e);return n.io.loadWeights(a,r)}function ji(o,t,e=!1){let{width:r,height:a}=e?Bt(t):t;return o.width=r,o.height=a,{width:r,height:a}}var I=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:e,objProp:r}=this.traversePropertyPath(t);return e[r]}reassignParamFromPath(t,e){let{obj:r,objProp:a}=this.traversePropertyPath(t);r[a].dispose(),r[a]=e}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof n.Variable)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof n.Variable))}variable(){this.getFrozenParams().forEach(({path:t,tensor:e})=>{this.reassignParamFromPath(t,e.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:e})=>{let r=n.tensor(e.dataSync());e.dispose(),this.reassignParamFromPath(t,r)})}dispose(t=!0){this.getParamList().forEach(e=>{if(t&&e.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${e.path}`);e.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,e)=>t.concat(e)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let e=await Er(t,this.getDefaultModelName());this.loadFromWeightMap(e)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:e}=T.getEnv(),{manifestUri:r,modelBaseUri:a}=ge(t,this.getDefaultModelName()),s=p=>Promise.all(p.map(u=>e(u).then(f=>f.buffer))),i=n.io.weightsLoaderFactory(s),c=JSON.parse((await e(r)).toString()),m=await i(c,a);this.loadFromWeightMap(m)}loadFromWeightMap(t){let{paramMappings:e,params:r}=this.extractParamsFromWeightMap(t);this._paramMappings=e,this._params=r}extractWeights(t){let{paramMappings:e,params:r}=this.extractParams(t);this._paramMappings=e,this._params=r}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let e=t.split("/").reduce((s,i)=>{if(!s.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${t}`);return{obj:s.nextObj,objProp:i,nextObj:s.nextObj[i]}},{nextObj:this.params}),{obj:r,objProp:a}=e;if(!r||!a||!(r[a]instanceof n.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:r,objProp:a}}};function W(o,t,e){return n.tidy(()=>{let r=n.separableConv2d(o,t.depthwise_filter,t.pointwise_filter,e,"same");return r=n.add(r,t.bias),r})}function xe(o,t,e=!1){return n.tidy(()=>{let r=n.relu(e?n.add(n.conv2d(o,t.conv0.filters,[2,2],"same"),t.conv0.bias):W(o,t.conv0,[2,2])),a=W(r,t.conv1,[1,1]),s=n.relu(n.add(r,a)),i=W(s,t.conv2,[1,1]);return n.relu(n.add(r,n.add(a,i)))})}function ne(o,t,e=!1,r=!0){return n.tidy(()=>{let a=n.relu(e?n.add(n.conv2d(o,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):W(o,t.conv0,r?[2,2]:[1,1])),s=W(a,t.conv1,[1,1]),i=n.relu(n.add(a,s)),c=W(i,t.conv2,[1,1]),m=n.relu(n.add(a,n.add(s,c))),p=W(m,t.conv3,[1,1]);return n.relu(n.add(a,n.add(s,n.add(c,p))))})}function _t(o,t,e="same",r=!1){return n.tidy(()=>{let a=n.add(n.conv2d(o,t.filters,[1,1],e),t.bias);return r?n.relu(a):a})}function L(o,t){Object.keys(o).forEach(e=>{t.some(r=>r.originalPath===e)||o[e].dispose()})}function $t(o,t){return(e,r,a,s)=>{let i=n.tensor4d(o(e*r*a*a),[a,a,e,r]),c=n.tensor1d(o(r));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:c}}}function ve(o,t){return(e,r,a)=>{let s=n.tensor2d(o(e*r),[e,r]),i=n.tensor1d(o(r));return t.push({paramPath:`${a}/weights`},{paramPath:`${a}/bias`}),{weights:s,bias:i}}}var ae=class{constructor(t,e,r){this.depthwise_filter=t;this.pointwise_filter=e;this.bias=r}};function Ot(o,t){return(e,r,a)=>{let s=n.tensor4d(o(9*e),[3,3,e,1]),i=n.tensor4d(o(e*r),[1,1,e,r]),c=n.tensor1d(o(r));return t.push({paramPath:`${a}/depthwise_filter`},{paramPath:`${a}/pointwise_filter`},{paramPath:`${a}/bias`}),new ae(s,i,c)}}function Ht(o){return t=>{let e=o(`${t}/depthwise_filter`,4),r=o(`${t}/pointwise_filter`,4),a=o(`${t}/bias`,1);return new ae(e,r,a)}}function B(o,t){return(e,r,a)=>{let s=o[e];if(!xt(s,r))throw new Error(`expected weightMap[${e}] to be a Tensor${r}D, instead have ${s}`);return t.push({originalPath:e,paramPath:a||e}),s}}function A(o){let t=o;function e(a){let s=t.slice(0,a);return t=t.slice(a),s}function r(){return t}return{extractWeights:e,getRemainingWeights:r}}function ye(o,t){let e=$t(o,t),r=Ot(o,t);function a(i,c,m,p=!1){let u=p?e(i,c,3,`${m}/conv0`):r(i,c,`${m}/conv0`),f=r(c,c,`${m}/conv1`),l=r(c,c,`${m}/conv2`);return{conv0:u,conv1:f,conv2:l}}function s(i,c,m,p=!1){let{conv0:u,conv1:f,conv2:l}=a(i,c,m,p),d=r(c,c,`${m}/conv3`);return{conv0:u,conv1:f,conv2:l,conv3:d}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:s}}function Mr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=A(o),{extractDenseBlock4Params:a}=ye(e,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),c=a(64,128,"dense2"),m=a(128,256,"dense3");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:c,dense3:m}}}function _e(o){return t=>{let e=o(`${t}/filters`,4),r=o(`${t}/bias`,1);return{filters:e,bias:r}}}function Te(o,t){let e=B(o,t),r=_e(e),a=Ht(e);function s(c,m=!1){let p=m?r(`${c}/conv0`):a(`${c}/conv0`),u=a(`${c}/conv1`),f=a(`${c}/conv2`);return{conv0:p,conv1:u,conv2:f}}function i(c,m=!1){let p=m?r(`${c}/conv0`):a(`${c}/conv0`),u=a(`${c}/conv1`),f=a(`${c}/conv2`),l=a(`${c}/conv3`);return{conv0:p,conv1:u,conv2:f,conv3:l}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:i}}function Cr(o){let t=[],{extractDenseBlock4Params:e}=Te(o,t),r={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2"),dense3:e("dense3")};return L(o,t),{params:r,paramMappings:t}}var zt=class extends I{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("FaceFeatureExtractor - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=X(r,[122.782,117.001,104.298]).div(255),i=ne(s,e.dense0,!0);return i=ne(i,e.dense1),i=ne(i,e.dense2),i=ne(i,e.dense3),i=n.avgPool(i,[7,7],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await M(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return Cr(t)}extractParams(t){return Mr(t)}};function se(o,t){return n.tidy(()=>n.add(n.matMul(o,t.weights),t.bias))}function Ir(o,t,e){let r=[],{extractWeights:a,getRemainingWeights:s}=A(o),c=ve(a,r)(t,e,"fc");if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:r,params:{fc:c}}}function Nr(o){let t=[],e=B(o,t);function r(s){let i=e(`${s}/weights`,2),c=e(`${s}/bias`,1);return{weights:i,bias:c}}let a={fc:r("fc")};return L(o,t),{params:a,paramMappings:t}}function Pe(o){let t={},e={};return Object.keys(o).forEach(r=>{let a=r.startsWith("fc")?e:t;a[r]=o[r]}),{featureExtractorMap:t,classifierMap:e}}var Vt=class extends I{constructor(e,r){super(e);this._faceFeatureExtractor=r}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){let{params:r}=this;if(!r)throw new Error(`${this._name} - load model before inference`);return n.tidy(()=>{let a=e instanceof rt?this.faceFeatureExtractor.forwardInput(e):e;return se(a.as2D(a.shape[0],-1),r.fc)})}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){let{params:r,paramMappings:a}=this.extractClassifierParams(e);this._params=r,this._paramMappings=a}extractClassifierParams(e){return Ir(e,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(e){let{featureExtractorMap:r,classifierMap:a}=Pe(e);return this.faceFeatureExtractor.loadFromWeightMap(r),Nr(a)}extractParams(e){let r=this.getClassifierChannelsIn(),a=this.getClassifierChannelsOut(),s=a*r+a,i=e.slice(0,e.length-s),c=e.slice(e.length-s);return this.faceFeatureExtractor.extractWeights(i),this.extractClassifierParams(c)}};var Sr=["neutral","happy","sad","angry","fearful","disgusted","surprised"],pt=class{constructor(t){this.neutral=0;this.happy=0;this.sad=0;this.angry=0;this.fearful=0;this.disgusted=0;this.surprised=0;if(t.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${t.length}`);Sr.forEach((e,r)=>{this[e]=t[r]})}asSortedArray(){return Sr.map(t=>({expression:t,probability:this[t]})).sort((t,e)=>e.probability-t.probability)}};var we=class extends Vt{constructor(t=new zt){super("FaceExpressionNet",t)}forwardInput(t){return n.tidy(()=>n.softmax(this.runNet(t)))}async forward(t){return this.forwardInput(await M(t))}async predictExpressions(t){let e=await M(t),r=await this.forwardInput(e),a=await Promise.all(n.unstack(r).map(async i=>{let c=i.dataSync();return i.dispose(),c}));r.dispose();let s=a.map(i=>new pt(i));return e.isBatchInput?s:s[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function Lr(o){return o.expressions instanceof pt}function tr(o,t){return{...o,...{expressions:t}}}function Wo(o,t,e=.1,r){(Array.isArray(t)?t:[t]).forEach(s=>{let i=s instanceof pt?s:Lr(s)?s.expressions:void 0;if(!i)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let m=i.asSortedArray().filter(f=>f.probability>e),p=tt(s)?s.detection.box.bottomLeft:r||new b(0,0);new et(m.map(f=>`${f.expression} (${vt(f.probability)})`),p).draw(o)})}function Yt(o){return tt(o)&&o.landmarks instanceof $&&o.unshiftedLandmarks instanceof $&&o.alignedRect instanceof E}function ko(o){let t=(c,m,p,u)=>Math.atan2(u-m,p-c)%Math.PI,e=c=>c*180/Math.PI,r={roll:void 0,pitch:void 0,yaw:void 0};if(!o||!o._positions||o._positions.length!==68)return r;let a=o._positions;r.roll=-t(a[36]._x,a[36]._y,a[45]._x,a[45]._y),r.pitch=t(0,Math.abs(a[0]._x-a[30]._x)/a[30]._x,Math.PI,Math.abs(a[16]._x-a[30]._x)/a[30]._x);let s=a.reduce((c,m)=>cc>m._y?c:m._y,-1/0);return r.yaw=Math.PI*(o._imgDims._height/(i-s)/1.4-1),r}function ie(o,t){let{box:e}=o.detection,r=t.shiftBy(e.x,e.y),a=r.align(),{imageDims:s}=o.detection,i=new E(o.detection.score,a.rescale(s.reverse()),s),c=ko(t);return{...o,...{landmarks:r,unshiftedLandmarks:t,alignedRect:i,angle:c}}}var Fe=class{constructor(t={}){let{drawLines:e=!0,drawPoints:r=!0,lineWidth:a,lineColor:s,pointSize:i,pointColor:c}=t;this.drawLines=e,this.drawPoints=r,this.lineWidth=a||1,this.pointSize=i||2,this.lineColor=s||"rgba(0, 255, 255, 1)",this.pointColor=c||"rgba(255, 0, 255, 1)"}},De=class{constructor(t,e={}){this.faceLandmarks=t,this.options=new Fe(e)}draw(t){let e=k(t),{drawLines:r,drawPoints:a,lineWidth:s,lineColor:i,pointSize:c,pointColor:m}=this.options;if(r&&this.faceLandmarks instanceof Lt&&(e.strokeStyle=i,e.lineWidth=s,Z(e,this.faceLandmarks.getJawOutline()),Z(e,this.faceLandmarks.getLeftEyeBrow()),Z(e,this.faceLandmarks.getRightEyeBrow()),Z(e,this.faceLandmarks.getNose()),Z(e,this.faceLandmarks.getLeftEye(),!0),Z(e,this.faceLandmarks.getRightEye(),!0),Z(e,this.faceLandmarks.getMouth(),!0)),a){e.strokeStyle=m,e.fillStyle=m;let p=u=>{e.beginPath(),e.arc(u.x,u.y,c,0,2*Math.PI),e.fill()};this.faceLandmarks.positions.forEach(p)}}};function Bo(o,t){(Array.isArray(t)?t:[t]).forEach(r=>{let a=r instanceof $?r:Yt(r)?r.landmarks:void 0;if(!a)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new De(a).draw(o)})}var Wr="1.6.10";function Oo(o,t){let e=$t(o,t),r=Ot(o,t);function a(i,c,m){let p=r(i,c,`${m}/separable_conv0`),u=r(c,c,`${m}/separable_conv1`),f=e(i,c,1,`${m}/expansion_conv`);return{separable_conv0:p,separable_conv1:u,expansion_conv:f}}function s(i,c){let m=r(i,i,`${c}/separable_conv0`),p=r(i,i,`${c}/separable_conv1`),u=r(i,i,`${c}/separable_conv2`);return{separable_conv0:m,separable_conv1:p,separable_conv2:u}}return{extractConvParams:e,extractSeparableConvParams:r,extractReductionBlockParams:a,extractMainBlockParams:s}}function kr(o,t){let e=[],{extractWeights:r,getRemainingWeights:a}=A(o),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:c,extractMainBlockParams:m}=Oo(r,e),p=s(3,32,3,"entry_flow/conv_in"),u=c(32,64,"entry_flow/reduction_block_0"),f=c(64,128,"entry_flow/reduction_block_1"),l={conv_in:p,reduction_block_0:u,reduction_block_1:f},d={};U(t,0,1).forEach(h=>{d[`main_block_${h}`]=m(128,`middle_flow/main_block_${h}`)});let g=c(128,256,"exit_flow/reduction_block"),_=i(256,512,"exit_flow/separable_conv"),F={reduction_block:g,separable_conv:_};if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:e,params:{entry_flow:l,middle_flow:d,exit_flow:F}}}function Ho(o,t){let e=B(o,t),r=_e(e),a=Ht(e);function s(c){let m=a(`${c}/separable_conv0`),p=a(`${c}/separable_conv1`),u=r(`${c}/expansion_conv`);return{separable_conv0:m,separable_conv1:p,expansion_conv:u}}function i(c){let m=a(`${c}/separable_conv0`),p=a(`${c}/separable_conv1`),u=a(`${c}/separable_conv2`);return{separable_conv0:m,separable_conv1:p,separable_conv2:u}}return{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:i}}function Br(o,t){let e=[],{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:i}=Ho(o,e),c=r("entry_flow/conv_in"),m=s("entry_flow/reduction_block_0"),p=s("entry_flow/reduction_block_1"),u={conv_in:c,reduction_block_0:m,reduction_block_1:p},f={};U(t,0,1).forEach(_=>{f[`main_block_${_}`]=i(`middle_flow/main_block_${_}`)});let l=s("exit_flow/reduction_block"),d=a("exit_flow/separable_conv"),g={reduction_block:l,separable_conv:d};return L(o,e),{params:{entry_flow:u,middle_flow:f,exit_flow:g},paramMappings:e}}function Rr(o,t,e){return n.add(n.conv2d(o,t.filters,e,"same"),t.bias)}function er(o,t,e=!0){let r=e?n.relu(o):o;return r=W(r,t.separable_conv0,[1,1]),r=W(n.relu(r),t.separable_conv1,[1,1]),r=n.maxPool(r,[3,3],[2,2],"same"),r=n.add(r,Rr(o,t.expansion_conv,[2,2])),r}function zo(o,t){let e=W(n.relu(o),t.separable_conv0,[1,1]);return e=W(n.relu(e),t.separable_conv1,[1,1]),e=W(n.relu(e),t.separable_conv2,[1,1]),e=n.add(e,o),e}var Ee=class extends I{constructor(e){super("TinyXception");this._numMainBlocks=e}forwardInput(e){let{params:r}=this;if(!r)throw new Error("TinyXception - load model before inference");return n.tidy(()=>{let a=n.cast(e.toBatchTensor(112,!0),"float32"),i=X(a,[122.782,117.001,104.298]).div(255),c=n.relu(Rr(i,r.entry_flow.conv_in,[2,2]));return c=er(c,r.entry_flow.reduction_block_0,!1),c=er(c,r.entry_flow.reduction_block_1),U(this._numMainBlocks,0,1).forEach(m=>{c=zo(c,r.middle_flow[`main_block_${m}`])}),c=er(c,r.exit_flow.reduction_block),c=n.relu(W(c,r.exit_flow.separable_conv,[1,1])),c})}async forward(e){return this.forwardInput(await M(e))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(e){return Br(e,this._numMainBlocks)}extractParams(e){return kr(e,this._numMainBlocks)}};function $r(o){let t=[],{extractWeights:e,getRemainingWeights:r}=A(o),a=ve(e,t),s=a(512,1,"fc/age"),i=a(512,2,"fc/gender");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:s,gender:i}}}}function Or(o){let t=[],e=B(o,t);function r(s){let i=e(`${s}/weights`,2),c=e(`${s}/bias`,1);return{weights:i,bias:c}}let a={fc:{age:r("fc/age"),gender:r("fc/gender")}};return L(o,t),{params:a,paramMappings:t}}var rr=(e=>(e.FEMALE="female",e.MALE="male",e))(rr||{});var Me=class extends I{constructor(e=new Ee(2)){super("AgeGenderNet");this._faceFeatureExtractor=e}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){let{params:r}=this;if(!r)throw new Error(`${this._name} - load model before inference`);return n.tidy(()=>{let a=e instanceof rt?this.faceFeatureExtractor.forwardInput(e):e,s=n.avgPool(a,[7,7],[2,2],"valid").as2D(a.shape[0],-1),i=se(s,r.fc.age).as1D(),c=se(s,r.fc.gender);return{age:i,gender:c}})}forwardInput(e){return n.tidy(()=>{let{age:r,gender:a}=this.runNet(e);return{age:r,gender:n.softmax(a)}})}async forward(e){return this.forwardInput(await M(e))}async predictAgeAndGender(e){let r=await M(e),a=await this.forwardInput(r),s=n.unstack(a.age),i=n.unstack(a.gender),c=s.map((p,u)=>({ageTensor:p,genderTensor:i[u]})),m=await Promise.all(c.map(async({ageTensor:p,genderTensor:u})=>{let f=p.dataSync()[0],l=u.dataSync()[0],d=l>.5,g=d?"male":"female",_=d?l:1-l;return p.dispose(),u.dispose(),{age:f,gender:g,genderProbability:_}}));return a.age.dispose(),a.gender.dispose(),r.isBatchInput?m:m[0]}getDefaultModelName(){return"age_gender_model"}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){let{params:r,paramMappings:a}=this.extractClassifierParams(e);this._params=r,this._paramMappings=a}extractClassifierParams(e){return $r(e)}extractParamsFromWeightMap(e){let{featureExtractorMap:r,classifierMap:a}=Pe(e);return this.faceFeatureExtractor.loadFromWeightMap(r),Or(a)}extractParams(e){let a=e.slice(0,e.length-1539),s=e.slice(e.length-1539);return this.faceFeatureExtractor.extractWeights(a),this.extractClassifierParams(s)}};var Gt=class extends Vt{postProcess(t,e,r){let a=r.map(({width:i,height:c})=>{let m=e/Math.max(c,i);return{width:i*m,height:c*m}}),s=a.length;return n.tidy(()=>{let i=(f,l)=>n.stack([n.fill([68],f,"float32"),n.fill([68],l,"float32")],1).as2D(1,136).as1D(),c=(f,l)=>{let{width:d,height:g}=a[f];return l(d,g)?Math.abs(d-g)/2:0},m=f=>c(f,(l,d)=>lc(f,(l,d)=>di(m(l),p(l))))).div(n.stack(Array.from(Array(s),(f,l)=>i(a[l].width,a[l].height))))})}forwardInput(t){return n.tidy(()=>{let e=this.runNet(t);return this.postProcess(e,t.inputSize,t.inputDimensions.map(([r,a])=>({height:r,width:a})))})}async forward(t){return this.forwardInput(await M(t))}async detectLandmarks(t){let e=await M(t),r=n.tidy(()=>n.unstack(this.forwardInput(e))),a=await Promise.all(r.map(async(s,i)=>{let c=Array.from(s.dataSync()),m=c.filter((u,f)=>pe(f)),p=c.filter((u,f)=>!pe(f));return new Lt(Array(68).fill(0).map((u,f)=>new b(m[f],p[f])),{height:e.getInputHeight(i),width:e.getInputWidth(i)})}));return r.forEach(s=>s.dispose()),e.isBatchInput?a:a[0]}getClassifierChannelsOut(){return 136}};var jt=class extends Gt{constructor(t=new zt){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function Hr(o){let t=[],{extractDenseBlock3Params:e}=Te(o,t),r={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2")};return L(o,t),{params:r,paramMappings:t}}function zr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=A(o),{extractDenseBlock3Params:a}=ye(e,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),c=a(64,128,"dense2");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:c}}}var Ce=class extends I{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("TinyFaceFeatureExtractor - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=X(r,[122.782,117.001,104.298]).div(255),i=xe(s,e.dense0,!0);return i=xe(i,e.dense1),i=xe(i,e.dense2),i=n.avgPool(i,[14,14],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await M(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return Hr(t)}extractParams(t){return zr(t)}};var Ie=class extends Gt{constructor(t=new Ce){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var Vr=class extends jt{};function Yr(o,t){return n.add(n.mul(o,t.weights),t.biases)}function or(o,t,e,r,a="same"){let{filters:s,bias:i}=t.conv,c=n.conv2d(o,s,e,a);return c=n.add(c,i),c=Yr(c,t.scale),r?n.relu(c):c}function Gr(o,t){return or(o,t,[1,1],!0)}function nr(o,t){return or(o,t,[1,1],!1)}function Ne(o,t){return or(o,t,[2,2],!0,"valid")}function Vo(o,t){function e(c,m,p){let u=o(c),f=u.length/(m*p*p);if(Ge(f))throw new Error(`depth has to be an integer: ${f}, weights.length: ${u.length}, numFilters: ${m}, filterSize: ${p}`);return n.tidy(()=>n.transpose(n.tensor4d(u,[m,f,p,p]),[2,3,1,0]))}function r(c,m,p,u){let f=e(c,m,p),l=n.tensor1d(o(m));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/bias`}),{filters:f,bias:l}}function a(c,m){let p=n.tensor1d(o(c)),u=n.tensor1d(o(c));return t.push({paramPath:`${m}/weights`},{paramPath:`${m}/biases`}),{weights:p,biases:u}}function s(c,m,p,u){let f=r(c,m,p,`${u}/conv`),l=a(m,`${u}/scale`);return{conv:f,scale:l}}function i(c,m,p,u,f=!1){let l=s((f?.5:1)*c,m,p,`${u}/conv1`),d=s(c,m,p,`${u}/conv2`);return{conv1:l,conv2:d}}return{extractConvLayerParams:s,extractResidualLayerParams:i}}function jr(o){let{extractWeights:t,getRemainingWeights:e}=A(o),r=[],{extractConvLayerParams:a,extractResidualLayerParams:s}=Vo(t,r),i=a(4704,32,7,"conv32_down"),c=s(9216,32,3,"conv32_1"),m=s(9216,32,3,"conv32_2"),p=s(9216,32,3,"conv32_3"),u=s(36864,64,3,"conv64_down",!0),f=s(36864,64,3,"conv64_1"),l=s(36864,64,3,"conv64_2"),d=s(36864,64,3,"conv64_3"),g=s(147456,128,3,"conv128_down",!0),_=s(147456,128,3,"conv128_1"),F=s(147456,128,3,"conv128_2"),h=s(589824,256,3,"conv256_down",!0),y=s(589824,256,3,"conv256_1"),x=s(589824,256,3,"conv256_2"),D=s(589824,256,3,"conv256_down_out"),N=n.tidy(()=>n.transpose(n.tensor2d(t(256*128),[128,256]),[1,0]));if(r.push({paramPath:"fc"}),e().length!==0)throw new Error(`weights remaing after extract: ${e().length}`);return{params:{conv32_down:i,conv32_1:c,conv32_2:m,conv32_3:p,conv64_down:u,conv64_1:f,conv64_2:l,conv64_3:d,conv128_down:g,conv128_1:_,conv128_2:F,conv256_down:h,conv256_1:y,conv256_2:x,conv256_down_out:D,fc:N},paramMappings:r}}function Yo(o,t){let e=B(o,t);function r(i){let c=e(`${i}/scale/weights`,1),m=e(`${i}/scale/biases`,1);return{weights:c,biases:m}}function a(i){let c=e(`${i}/conv/filters`,4),m=e(`${i}/conv/bias`,1),p=r(i);return{conv:{filters:c,bias:m},scale:p}}function s(i){return{conv1:a(`${i}/conv1`),conv2:a(`${i}/conv2`)}}return{extractConvLayerParams:a,extractResidualLayerParams:s}}function Ur(o){let t=[],{extractConvLayerParams:e,extractResidualLayerParams:r}=Yo(o,t),a=e("conv32_down"),s=r("conv32_1"),i=r("conv32_2"),c=r("conv32_3"),m=r("conv64_down"),p=r("conv64_1"),u=r("conv64_2"),f=r("conv64_3"),l=r("conv128_down"),d=r("conv128_1"),g=r("conv128_2"),_=r("conv256_down"),F=r("conv256_1"),h=r("conv256_2"),y=r("conv256_down_out"),{fc:x}=o;if(t.push({originalPath:"fc",paramPath:"fc"}),!Ye(x))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${x}`);let D={conv32_down:a,conv32_1:s,conv32_2:i,conv32_3:c,conv64_down:m,conv64_1:p,conv64_2:u,conv64_3:f,conv128_down:l,conv128_1:d,conv128_2:g,conv256_down:_,conv256_1:F,conv256_2:h,conv256_down_out:y,fc:x};return L(o,t),{params:D,paramMappings:t}}function j(o,t){let e=Gr(o,t.conv1);return e=nr(e,t.conv2),e=n.add(e,o),e=n.relu(e),e}function ce(o,t){let e=Ne(o,t.conv1);e=nr(e,t.conv2);let r=n.avgPool(o,2,2,"valid"),a=n.zeros(r.shape),s=r.shape[3]!==e.shape[3];if(r.shape[1]!==e.shape[1]||r.shape[2]!==e.shape[2]){let c=[...e.shape];c[1]=1;let m=n.zeros(c);e=n.concat([e,m],1);let p=[...e.shape];p[2]=1;let u=n.zeros(p);e=n.concat([e,u],2)}return r=s?n.concat([r,a],3):r,e=n.add(r,e),e=n.relu(e),e}var Ut=class extends I{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("FaceRecognitionNet - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(150,!0),"float32"),s=X(r,[122.782,117.001,104.298]).div(255),i=Ne(s,e.conv32_down);i=n.maxPool(i,3,2,"valid"),i=j(i,e.conv32_1),i=j(i,e.conv32_2),i=j(i,e.conv32_3),i=ce(i,e.conv64_down),i=j(i,e.conv64_1),i=j(i,e.conv64_2),i=j(i,e.conv64_3),i=ce(i,e.conv128_down),i=j(i,e.conv128_1),i=j(i,e.conv128_2),i=ce(i,e.conv256_down),i=j(i,e.conv256_1),i=j(i,e.conv256_2),i=ce(i,e.conv256_down_out);let c=i.mean([1,2]);return n.matMul(c,e.fc)})}async forward(t){return this.forwardInput(await M(t))}async computeFaceDescriptor(t){var s;if((s=t==null?void 0:t.shape)!=null&&s.some(i=>i<=0))return new Float32Array(128);let e=await M(t),r=n.tidy(()=>n.unstack(this.forwardInput(e))),a=await Promise.all(r.map(i=>i.data()));return r.forEach(i=>i.dispose()),e.isBatchInput?a:a[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return Ur(t)}extractParams(t){return jr(t)}};function vf(o){let t=new Ut;return t.extractWeights(o),t}function ar(o,t){return{...o,...{descriptor:t}}}function Pf(o){return typeof o.age=="number"}function sr(o,t){return{...o,...{age:t}}}function Ef(o){return(o.gender==="male"||o.gender==="female")&&It(o.genderProbability)}function ir(o,t,e){return{...o,...{gender:t,genderProbability:e}}}function Go(o,t){function e(m,p){let u=n.tensor4d(o(9*m),[3,3,m,1]),f=n.tensor1d(o(m)),l=n.tensor1d(o(m)),d=n.tensor1d(o(m)),g=n.tensor1d(o(m));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/batch_norm_scale`},{paramPath:`${p}/batch_norm_offset`},{paramPath:`${p}/batch_norm_mean`},{paramPath:`${p}/batch_norm_variance`}),{filters:u,batch_norm_scale:f,batch_norm_offset:l,batch_norm_mean:d,batch_norm_variance:g}}function r(m,p,u,f,l){let d=n.tensor4d(o(m*p*u*u),[u,u,m,p]),g=n.tensor1d(o(p));return t.push({paramPath:`${f}/filters`},{paramPath:`${f}/${l?"batch_norm_offset":"bias"}`}),{filters:d,bias:g}}function a(m,p,u,f){let{filters:l,bias:d}=r(m,p,u,f,!0);return{filters:l,batch_norm_offset:d}}function s(m,p,u){let f=e(m,`${u}/depthwise_conv`),l=a(m,p,1,`${u}/pointwise_conv`);return{depthwise_conv:f,pointwise_conv:l}}function i(){let m=a(3,32,3,"mobilenetv1/conv_0"),p=s(32,64,"mobilenetv1/conv_1"),u=s(64,128,"mobilenetv1/conv_2"),f=s(128,128,"mobilenetv1/conv_3"),l=s(128,256,"mobilenetv1/conv_4"),d=s(256,256,"mobilenetv1/conv_5"),g=s(256,512,"mobilenetv1/conv_6"),_=s(512,512,"mobilenetv1/conv_7"),F=s(512,512,"mobilenetv1/conv_8"),h=s(512,512,"mobilenetv1/conv_9"),y=s(512,512,"mobilenetv1/conv_10"),x=s(512,512,"mobilenetv1/conv_11"),D=s(512,1024,"mobilenetv1/conv_12"),N=s(1024,1024,"mobilenetv1/conv_13");return{conv_0:m,conv_1:p,conv_2:u,conv_3:f,conv_4:l,conv_5:d,conv_6:g,conv_7:_,conv_8:F,conv_9:h,conv_10:y,conv_11:x,conv_12:D,conv_13:N}}function c(){let m=a(1024,256,1,"prediction_layer/conv_0"),p=a(256,512,3,"prediction_layer/conv_1"),u=a(512,128,1,"prediction_layer/conv_2"),f=a(128,256,3,"prediction_layer/conv_3"),l=a(256,128,1,"prediction_layer/conv_4"),d=a(128,256,3,"prediction_layer/conv_5"),g=a(256,64,1,"prediction_layer/conv_6"),_=a(64,128,3,"prediction_layer/conv_7"),F=r(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),h=r(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),y=r(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),x=r(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),D=r(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),N=r(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),Y=r(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),q=r(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),O=r(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),at=r(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),st=r(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),it=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:m,conv_1:p,conv_2:u,conv_3:f,conv_4:l,conv_5:d,conv_6:g,conv_7:_,box_predictor_0:{box_encoding_predictor:F,class_predictor:h},box_predictor_1:{box_encoding_predictor:y,class_predictor:x},box_predictor_2:{box_encoding_predictor:D,class_predictor:N},box_predictor_3:{box_encoding_predictor:Y,class_predictor:q},box_predictor_4:{box_encoding_predictor:O,class_predictor:at},box_predictor_5:{box_encoding_predictor:st,class_predictor:it}}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:c}}function Xr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=A(o),{extractMobilenetV1Params:a,extractPredictionLayerParams:s}=Go(e,t),i=a(),c=s(),p={extra_dim:n.tensor3d(e(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:i,prediction_layer:c,output_layer:p},paramMappings:t}}function jo(o,t){let e=B(o,t);function r(p,u,f){let l=e(`${p}/Conv2d_${u}_pointwise/weights`,4,`${f}/filters`),d=e(`${p}/Conv2d_${u}_pointwise/convolution_bn_offset`,1,`${f}/batch_norm_offset`);return{filters:l,batch_norm_offset:d}}function a(p){let u=`mobilenetv1/conv_${p}`,f=`MobilenetV1/Conv2d_${p}_depthwise`,l=`${u}/depthwise_conv`,d=`${u}/pointwise_conv`,g=e(`${f}/depthwise_weights`,4,`${l}/filters`),_=e(`${f}/BatchNorm/gamma`,1,`${l}/batch_norm_scale`),F=e(`${f}/BatchNorm/beta`,1,`${l}/batch_norm_offset`),h=e(`${f}/BatchNorm/moving_mean`,1,`${l}/batch_norm_mean`),y=e(`${f}/BatchNorm/moving_variance`,1,`${l}/batch_norm_variance`);return{depthwise_conv:{filters:g,batch_norm_scale:_,batch_norm_offset:F,batch_norm_mean:h,batch_norm_variance:y},pointwise_conv:r("MobilenetV1",p,d)}}function s(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:a(1),conv_2:a(2),conv_3:a(3),conv_4:a(4),conv_5:a(5),conv_6:a(6),conv_7:a(7),conv_8:a(8),conv_9:a(9),conv_10:a(10),conv_11:a(11),conv_12:a(12),conv_13:a(13)}}function i(p,u){let f=e(`${p}/weights`,4,`${u}/filters`),l=e(`${p}/biases`,1,`${u}/bias`);return{filters:f,bias:l}}function c(p){let u=i(`Prediction/BoxPredictor_${p}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${p}/box_encoding_predictor`),f=i(`Prediction/BoxPredictor_${p}/ClassPredictor`,`prediction_layer/box_predictor_${p}/class_predictor`);return{box_encoding_predictor:u,class_predictor:f}}function m(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:c(0),box_predictor_1:c(1),box_predictor_2:c(2),box_predictor_3:c(3),box_predictor_4:c(4),box_predictor_5:c(5)}}return{extractMobilenetV1Params:s,extractPredictionLayerParams:m}}function Jr(o){let t=[],{extractMobilenetV1Params:e,extractPredictionLayerParams:r}=jo(o,t),a=o["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!K(a))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${a}`);let s={mobilenetv1:e(),prediction_layer:r(),output_layer:{extra_dim:a}};return L(o,t),{params:s,paramMappings:t}}function H(o,t,e){return n.tidy(()=>{let r=n.conv2d(o,t.filters,e,"same");return r=n.add(r,t.batch_norm_offset),n.clipByValue(r,0,6)})}var Uo=.0010000000474974513;function Xo(o,t,e){return n.tidy(()=>{let r=n.depthwiseConv2d(o,t.filters,e,"same");return r=n.batchNorm(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,Uo),n.clipByValue(r,0,6)})}function Jo(o){return[2,4,6,12].some(t=>t===o)?[2,2]:[1,1]}function qr(o,t){return n.tidy(()=>{let e,r=H(o,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((s,i)=>{let c=i+1,m=Jo(c);r=Xo(r,s.depthwise_conv,m),r=H(r,s.pointwise_conv,[1,1]),c===11&&(e=r)}),e===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:e}})}function qo(o,t,e){let r=o.arraySync(),a=Math.min(r[t][0],r[t][2]),s=Math.min(r[t][1],r[t][3]),i=Math.max(r[t][0],r[t][2]),c=Math.max(r[t][1],r[t][3]),m=Math.min(r[e][0],r[e][2]),p=Math.min(r[e][1],r[e][3]),u=Math.max(r[e][0],r[e][2]),f=Math.max(r[e][1],r[e][3]),l=(i-a)*(c-s),d=(u-m)*(f-p);if(l<=0||d<=0)return 0;let g=Math.max(a,m),_=Math.max(s,p),F=Math.min(i,u),h=Math.min(c,f),y=Math.max(F-g,0)*Math.max(h-_,0);return y/(l+d-y)}function Zr(o,t,e,r,a){let s=o.shape[0],i=Math.min(e,s),c=t.map((u,f)=>({score:u,boxIndex:f})).filter(u=>u.score>a).sort((u,f)=>f.score-u.score),m=u=>u<=r?1:0,p=[];return c.forEach(u=>{if(p.length>=i)return;let f=u.score;for(let l=p.length-1;l>=0;--l){let d=qo(o,u.boxIndex,p[l]);if(d!==0&&(u.score*=m(d),u.score<=a))break}f===u.score&&p.push(u.boxIndex)}),p}function Zo(o){let t=n.unstack(n.transpose(o,[1,0])),e=[n.sub(t[2],t[0]),n.sub(t[3],t[1])],r=[n.add(t[0],n.div(e[0],2)),n.add(t[1],n.div(e[1],2))];return{sizes:e,centers:r}}function Ko(o,t){let{sizes:e,centers:r}=Zo(o),a=n.unstack(n.transpose(t,[1,0])),s=n.div(n.mul(n.exp(n.div(a[2],5)),e[0]),2),i=n.add(n.mul(n.div(a[0],10),e[0]),r[0]),c=n.div(n.mul(n.exp(n.div(a[3],5)),e[1]),2),m=n.add(n.mul(n.div(a[1],10),e[1]),r[1]);return n.transpose(n.stack([n.sub(i,s),n.sub(m,c),n.add(i,s),n.add(m,c)]),[1,0])}function Kr(o,t,e){return n.tidy(()=>{let r=o.shape[0],a=Ko(n.reshape(n.tile(e.extra_dim,[r,1,1]),[-1,4]),n.reshape(o,[-1,4]));a=n.reshape(a,[r,a.shape[0]/r,4]);let s=n.sigmoid(n.slice(t,[0,0,1],[-1,-1,-1])),i=n.slice(s,[0,0,0],[-1,-1,1]);i=n.reshape(i,[r,i.shape[1]]);let c=n.unstack(a),m=n.unstack(i);return{boxes:c,scores:m}})}function Tt(o,t){return n.tidy(()=>{let e=o.shape[0],r=n.reshape(_t(o,t.box_encoding_predictor),[e,-1,1,4]),a=n.reshape(_t(o,t.class_predictor),[e,-1,3]);return{boxPredictionEncoding:r,classPrediction:a}})}function Qr(o,t,e){return n.tidy(()=>{let r=H(o,e.conv_0,[1,1]),a=H(r,e.conv_1,[2,2]),s=H(a,e.conv_2,[1,1]),i=H(s,e.conv_3,[2,2]),c=H(i,e.conv_4,[1,1]),m=H(c,e.conv_5,[2,2]),p=H(m,e.conv_6,[1,1]),u=H(p,e.conv_7,[2,2]),f=Tt(t,e.box_predictor_0),l=Tt(o,e.box_predictor_1),d=Tt(a,e.box_predictor_2),g=Tt(i,e.box_predictor_3),_=Tt(m,e.box_predictor_4),F=Tt(u,e.box_predictor_5),h=n.concat([f.boxPredictionEncoding,l.boxPredictionEncoding,d.boxPredictionEncoding,g.boxPredictionEncoding,_.boxPredictionEncoding,F.boxPredictionEncoding],1),y=n.concat([f.classPrediction,l.classPrediction,d.classPrediction,g.classPrediction,_.classPrediction,F.classPrediction],1);return{boxPredictions:h,classPredictions:y}})}var z=class{constructor({minConfidence:t,maxResults:e}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=t||.5,this._maxResults=e||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if(typeof this._maxResults!="number")throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}};var Pt=class extends I{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("SsdMobilenetv1 - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(512,!1),"float32"),a=n.sub(n.div(r,127.5),1),s=qr(a,e.mobilenetv1),{boxPredictions:i,classPredictions:c}=Qr(s.out,s.conv11,e.prediction_layer);return Kr(i,c,e.output_layer)})}async forward(t){return this.forwardInput(await M(t))}async locateFaces(t,e={}){let{maxResults:r,minConfidence:a}=new z(e),s=await M(t),{boxes:i,scores:c}=this.forwardInput(s),m=i[0],p=c[0];for(let x=1;x{let[D,N]=[Math.max(0,h[x][0]),Math.min(1,h[x][2])].map(O=>O*F),[Y,q]=[Math.max(0,h[x][1]),Math.min(1,h[x][3])].map(O=>O*_);return new E(u[x],new St(Y,D,q-Y,N-D),{height:s.getInputHeight(0),width:s.getInputWidth(0)})});return m.dispose(),p.dispose(),y}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return Jr(t)}extractParams(t){return Xr(t)}};function Qo(o){let t=new Pt;return t.extractWeights(o),t}function vl(o){return Qo(o)}var to=class extends Pt{};var eo=.4,ro=[new b(.738768,.874946),new b(2.42204,2.65704),new b(4.30971,7.04493),new b(10.246,4.59428),new b(12.6868,11.8741)],oo=[new b(1.603231,2.094468),new b(6.041143,7.080126),new b(2.882459,3.518061),new b(4.266906,5.178857),new b(9.041765,10.66308)],no=[117.001,114.697,97.404],ao="tiny_yolov2_model",so="tiny_yolov2_separable_conv_model";var Se=o=>typeof o=="number";function io(o){if(!o)throw new Error(`invalid config: ${o}`);if(typeof o.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${o.withSeparableConvs}`);if(!Se(o.iouThreshold)||o.iouThreshold<0||o.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${o.iouThreshold}`);if(!Array.isArray(o.classes)||!o.classes.length||!o.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(o.classes)}`);if(!Array.isArray(o.anchors)||!o.anchors.length||!o.anchors.map(t=>t||{}).every(t=>Se(t.x)&&Se(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(o.anchors)}`);if(o.meanRgb&&(!Array.isArray(o.meanRgb)||o.meanRgb.length!==3||!o.meanRgb.every(Se)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(o.meanRgb)}`)}function Xt(o){return n.tidy(()=>{let t=n.mul(o,n.scalar(.10000000149011612));return n.add(n.relu(n.sub(o,t)),t)})}function ot(o,t){return n.tidy(()=>{let e=n.pad(o,[[0,0],[1,1],[1,1],[0,0]]);return e=n.conv2d(e,t.conv.filters,[1,1],"valid"),e=n.sub(e,t.bn.sub),e=n.mul(e,t.bn.truediv),e=n.add(e,t.conv.bias),Xt(e)})}function nt(o,t){return n.tidy(()=>{let e=n.pad(o,[[0,0],[1,1],[1,1],[0,0]]);return e=n.separableConv2d(e,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),e=n.add(e,t.bias),Xt(e)})}function tn(o,t){let e=$t(o,t);function r(i,c){let m=n.tensor1d(o(i)),p=n.tensor1d(o(i));return t.push({paramPath:`${c}/sub`},{paramPath:`${c}/truediv`}),{sub:m,truediv:p}}function a(i,c,m){let p=e(i,c,3,`${m}/conv`),u=r(c,`${m}/bn`);return{conv:p,bn:u}}let s=Ot(o,t);return{extractConvParams:e,extractConvWithBatchNormParams:a,extractSeparableConvParams:s}}function co(o,t,e,r){let{extractWeights:a,getRemainingWeights:s}=A(o),i=[],{extractConvParams:c,extractConvWithBatchNormParams:m,extractSeparableConvParams:p}=tn(a,i),u;if(t.withSeparableConvs){let[f,l,d,g,_,F,h,y,x]=r,D=t.isFirstLayerConv2d?c(f,l,3,"conv0"):p(f,l,"conv0"),N=p(l,d,"conv1"),Y=p(d,g,"conv2"),q=p(g,_,"conv3"),O=p(_,F,"conv4"),at=p(F,h,"conv5"),st=y?p(h,y,"conv6"):void 0,it=x?p(y,x,"conv7"):void 0,gt=c(x||y||h,5*e,1,"conv8");u={conv0:D,conv1:N,conv2:Y,conv3:q,conv4:O,conv5:at,conv6:st,conv7:it,conv8:gt}}else{let[f,l,d,g,_,F,h,y,x]=r,D=m(f,l,"conv0"),N=m(l,d,"conv1"),Y=m(d,g,"conv2"),q=m(g,_,"conv3"),O=m(_,F,"conv4"),at=m(F,h,"conv5"),st=m(h,y,"conv6"),it=m(y,x,"conv7"),gt=c(x,5*e,1,"conv8");u={conv0:D,conv1:N,conv2:Y,conv3:q,conv4:O,conv5:at,conv6:st,conv7:it,conv8:gt}}if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{params:u,paramMappings:i}}function en(o,t){let e=B(o,t);function r(c){let m=e(`${c}/sub`,1),p=e(`${c}/truediv`,1);return{sub:m,truediv:p}}function a(c){let m=e(`${c}/filters`,4),p=e(`${c}/bias`,1);return{filters:m,bias:p}}function s(c){let m=a(`${c}/conv`),p=r(`${c}/bn`);return{conv:m,bn:p}}let i=Ht(e);return{extractConvParams:a,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}}function mo(o,t){let e=[],{extractConvParams:r,extractConvWithBatchNormParams:a,extractSeparableConvParams:s}=en(o,e),i;if(t.withSeparableConvs){let c=t.filterSizes&&t.filterSizes.length||9;i={conv0:t.isFirstLayerConv2d?r("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:c>7?s("conv6"):void 0,conv7:c>8?s("conv7"):void 0,conv8:r("conv8")}}else i={conv0:a("conv0"),conv1:a("conv1"),conv2:a("conv2"),conv3:a("conv3"),conv4:a("conv4"),conv5:a("conv5"),conv6:a("conv6"),conv7:a("conv7"),conv8:r("conv8")};return L(o,e),{params:i,paramMappings:e}}var J=class{constructor({inputSize:t,scoreThreshold:e}={}){this._name="TinyYolov2Options";if(this._inputSize=t||416,this._scoreThreshold=e||.5,typeof this._inputSize!="number"||this._inputSize%32!==0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}};var cr=class extends I{constructor(e){super("TinyYolov2");io(e),this._config=e}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(e,r){let a=ot(e,r.conv0);return a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv1),a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv2),a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv3),a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv4),a=n.maxPool(a,[2,2],[2,2],"same"),a=ot(a,r.conv5),a=n.maxPool(a,[2,2],[1,1],"same"),a=ot(a,r.conv6),a=ot(a,r.conv7),_t(a,r.conv8,"valid",!1)}runMobilenet(e,r){let a=this.config.isFirstLayerConv2d?Xt(_t(e,r.conv0,"valid",!1)):nt(e,r.conv0);return a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv1),a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv2),a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv3),a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv4),a=n.maxPool(a,[2,2],[2,2],"same"),a=nt(a,r.conv5),a=n.maxPool(a,[2,2],[1,1],"same"),a=r.conv6?nt(a,r.conv6):a,a=r.conv7?nt(a,r.conv7):a,_t(a,r.conv8,"valid",!1)}forwardInput(e,r){let{params:a}=this;if(!a)throw new Error("TinyYolov2 - load model before inference");return n.tidy(()=>{let s=n.cast(e.toBatchTensor(r,!1),"float32");return s=this.config.meanRgb?X(s,this.config.meanRgb):s,s=s.div(255),this.config.withSeparableConvs?this.runMobilenet(s,a):this.runTinyYolov2(s,a)})}async forward(e,r){return this.forwardInput(await M(e),r)}async detect(e,r={}){let{inputSize:a,scoreThreshold:s}=new J(r),i=await M(e),c=await this.forwardInput(i,a),m=n.tidy(()=>n.unstack(c)[0].expandDims()),p={width:i.getInputWidth(0),height:i.getInputHeight(0)},u=await this.extractBoxes(m,i.getReshapedInputDimensions(0),s);c.dispose(),m.dispose();let f=u.map(h=>h.box),l=u.map(h=>h.score),d=u.map(h=>h.classScore),g=u.map(h=>this.config.classes[h.label]);return gr(f.map(h=>h.rescale(a)),l,this.config.iouThreshold,!0).map(h=>new ct(l[h],d[h],g[h],f[h],p))}getDefaultModelName(){return""}extractParamsFromWeightMap(e){return mo(e,this.config)}extractParams(e){let r=this.config.filterSizes||cr.DEFAULT_FILTER_SIZES,a=r?r.length:void 0;if(a!==7&&a!==8&&a!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${a} filterSizes in config`);return co(e,this.config,this.boxEncodingSize,r)}async extractBoxes(e,r,a){let{width:s,height:i}=r,c=Math.max(s,i),m=c/s,p=c/i,u=e.shape[1],f=this.config.anchors.length,[l,d,g]=n.tidy(()=>{let y=e.reshape([u,u,f,this.boxEncodingSize]),x=y.slice([0,0,0,0],[u,u,f,4]),D=y.slice([0,0,0,4],[u,u,f,1]),N=this.withClassScores?n.softmax(y.slice([0,0,0,5],[u,u,f,this.config.classes.length]),3):n.scalar(0);return[x,D,N]}),_=[],F=await d.array(),h=await l.array();for(let y=0;ya){let Y=(x+fe(h[y][x][D][0]))/u*m,q=(y+fe(h[y][x][D][1]))/u*p,O=Math.exp(h[y][x][D][2])*this.config.anchors[D].x/u*m,at=Math.exp(h[y][x][D][3])*this.config.anchors[D].y/u*p,st=Y-O/2,it=q-at/2,gt={row:y,col:x,anchor:D},{classScore:pr,label:ur}=this.withClassScores?await this.extractPredictedClass(g,gt):{classScore:1,label:0};_.push({box:new Nt(st,it,st+O,it+at),score:N,classScore:N*pr,label:ur,...gt})}}return l.dispose(),d.dispose(),g.dispose(),_}async extractPredictedClass(e,r){let{row:a,col:s,anchor:i}=r,c=await e.array();return Array(this.config.classes.length).fill(0).map((m,p)=>c[a][s][i][p]).map((m,p)=>({classScore:m,label:p})).reduce((m,p)=>m.classScore>p.classScore?m:p)}},wt=cr;wt.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var Jt=class extends wt{constructor(t=!0){let e={withSeparableConvs:t,iouThreshold:eo,classes:["face"],...t?{anchors:oo,meanRgb:no}:{anchors:ro,withClassScores:!0}};super(e)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,e){return(await this.detect(t,e)).map(a=>new E(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?so:ao}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function pd(o,t=!0){let e=new Jt(t);return e.extractWeights(o),e}var Le=class extends J{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var V=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Ft(o,t,e,r,a=({alignedRect:s})=>s){let s=o.map(m=>Yt(m)?a(m):m.detection),i=r||(t instanceof n.Tensor?await oe(t,s):await re(t,s)),c=await e(i);return i.forEach(m=>m instanceof n.Tensor&&m.dispose()),c}async function qt(o,t,e,r,a){return Ft([o],t,async s=>e(s[0]),r,a)}var po=.4,uo=[new b(1.603231,2.094468),new b(6.041143,7.080126),new b(2.882459,3.518061),new b(4.266906,5.178857),new b(9.041765,10.66308)],fo=[117.001,114.697,97.404];var Zt=class extends wt{constructor(){let t={withSeparableConvs:!0,iouThreshold:po,classes:["face"],anchors:uo,meanRgb:fo,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,e){return(await this.detect(t,e)).map(a=>new E(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var P={ssdMobilenetv1:new Pt,tinyFaceDetector:new Zt,tinyYolov2:new Jt,faceLandmark68Net:new jt,faceLandmark68TinyNet:new Ie,faceRecognitionNet:new Ut,faceExpressionNet:new we,ageGenderNet:new Me},rn=(o,t)=>P.ssdMobilenetv1.locateFaces(o,t),Od=(o,t)=>P.tinyFaceDetector.locateFaces(o,t),Hd=(o,t)=>P.tinyYolov2.locateFaces(o,t),on=o=>P.faceLandmark68Net.detectLandmarks(o),zd=o=>P.faceLandmark68TinyNet.detectLandmarks(o),Vd=o=>P.faceRecognitionNet.computeFaceDescriptor(o),Yd=o=>P.faceExpressionNet.predictExpressions(o),Gd=o=>P.ageGenderNet.predictAgeAndGender(o),nn=o=>P.ssdMobilenetv1.load(o),jd=o=>P.tinyFaceDetector.load(o),Ud=o=>P.tinyYolov2.load(o),Xd=o=>P.faceLandmark68Net.load(o),Jd=o=>P.faceLandmark68TinyNet.load(o),qd=o=>P.faceRecognitionNet.load(o),Zd=o=>P.faceExpressionNet.load(o),Kd=o=>P.ageGenderNet.load(o),Qd=nn,th=rn,eh=on;var Ae=class extends V{constructor(e,r,a){super();this.parentTask=e;this.input=r;this.extractedFaces=a}},Dt=class extends Ae{async run(){let t=await this.parentTask,e=await Ft(t,this.input,async r=>Promise.all(r.map(a=>P.faceExpressionNet.predictExpressions(a))),this.extractedFaces);return t.map((r,a)=>tr(r,e[a]))}withAgeAndGender(){return new Mt(this,this.input)}},Et=class extends Ae{async run(){let t=await this.parentTask;if(!t)return;let e=await qt(t,this.input,r=>P.faceExpressionNet.predictExpressions(r),this.extractedFaces);return tr(t,e)}withAgeAndGender(){return new Ct(this,this.input)}},ut=class extends Dt{withAgeAndGender(){return new lt(this,this.input)}withFaceDescriptors(){return new ht(this,this.input)}},ft=class extends Et{withAgeAndGender(){return new dt(this,this.input)}withFaceDescriptor(){return new bt(this,this.input)}};var We=class extends V{constructor(e,r,a){super();this.parentTask=e;this.input=r;this.extractedFaces=a}},Mt=class extends We{async run(){let t=await this.parentTask,e=await Ft(t,this.input,async r=>Promise.all(r.map(a=>P.ageGenderNet.predictAgeAndGender(a))),this.extractedFaces);return t.map((r,a)=>{let{age:s,gender:i,genderProbability:c}=e[a];return sr(ir(r,i,c),s)})}withFaceExpressions(){return new Dt(this,this.input)}},Ct=class extends We{async run(){let t=await this.parentTask;if(!t)return;let{age:e,gender:r,genderProbability:a}=await qt(t,this.input,s=>P.ageGenderNet.predictAgeAndGender(s),this.extractedFaces);return sr(ir(t,r,a),e)}withFaceExpressions(){return new Et(this,this.input)}},lt=class extends Mt{withFaceExpressions(){return new ut(this,this.input)}withFaceDescriptors(){return new ht(this,this.input)}},dt=class extends Ct{withFaceExpressions(){return new ft(this,this.input)}withFaceDescriptor(){return new bt(this,this.input)}};var ke=class extends V{constructor(e,r){super();this.parentTask=e;this.input=r}},ht=class extends ke{async run(){let t=await this.parentTask;return(await Ft(t,this.input,r=>Promise.all(r.map(a=>P.faceRecognitionNet.computeFaceDescriptor(a))),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}))).map((r,a)=>ar(t[a],r))}withFaceExpressions(){return new ut(this,this.input)}withAgeAndGender(){return new lt(this,this.input)}},bt=class extends ke{async run(){let t=await this.parentTask;if(!t)return;let e=await qt(t,this.input,r=>P.faceRecognitionNet.computeFaceDescriptor(r),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}));return ar(t,e)}withFaceExpressions(){return new ft(this,this.input)}withAgeAndGender(){return new dt(this,this.input)}};var Be=class extends V{constructor(e,r,a){super();this.parentTask=e;this.input=r;this.useTinyLandmarkNet=a}get landmarkNet(){return this.useTinyLandmarkNet?P.faceLandmark68TinyNet:P.faceLandmark68Net}},Re=class extends Be{async run(){let t=await this.parentTask,e=t.map(i=>i.detection),r=this.input instanceof n.Tensor?await oe(this.input,e):await re(this.input,e),a=await Promise.all(r.map(i=>this.landmarkNet.detectLandmarks(i)));return r.forEach(i=>i instanceof n.Tensor&&i.dispose()),t.filter((i,c)=>a[c]).map((i,c)=>ie(i,a[c]))}withFaceExpressions(){return new ut(this,this.input)}withAgeAndGender(){return new lt(this,this.input)}withFaceDescriptors(){return new ht(this,this.input)}},$e=class extends Be{async run(){let t=await this.parentTask;if(!t)return;let{detection:e}=t,r=this.input instanceof n.Tensor?await oe(this.input,[e]):await re(this.input,[e]),a=await this.landmarkNet.detectLandmarks(r[0]);return r.forEach(s=>s instanceof n.Tensor&&s.dispose()),ie(t,a)}withFaceExpressions(){return new ft(this,this.input)}withAgeAndGender(){return new dt(this,this.input)}withFaceDescriptor(){return new bt(this,this.input)}};var Oe=class extends V{constructor(e,r=new z){super();this.input=e;this.options=r}},me=class extends Oe{async run(){let{input:t,options:e}=this,r;if(e instanceof Le)r=P.tinyFaceDetector.locateFaces(t,e);else if(e instanceof z)r=P.ssdMobilenetv1.locateFaces(t,e);else if(e instanceof J)r=P.tinyYolov2.locateFaces(t,e);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return r}runAndExtendWithFaceDetections(){return new Promise((t,e)=>{this.run().then(r=>t(r.map(a=>At({},a)))).catch(r=>e(r))})}withFaceLandmarks(t=!1){return new Re(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Dt(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Mt(this.runAndExtendWithFaceDetections(),this.input)}},He=class extends Oe{async run(){let t=await new me(this.input,this.options),e=t[0];return t.forEach(r=>{r.score>e.score&&(e=r)}),e}runAndExtendWithFaceDetection(){return new Promise(async t=>{let e=await this.run();t(e?At({},e):void 0)})}withFaceLandmarks(t=!1){return new $e(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Et(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Ct(this.runAndExtendWithFaceDetection(),this.input)}};function Kh(o,t=new z){return new He(o,t)}function mr(o,t=new z){return new me(o,t)}async function an(o,t){return mr(o,new z(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function nb(o,t={}){return mr(o,new J(t)).withFaceLandmarks().withFaceDescriptors()}var ab=an;function lo(o,t){if(o.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let e=Array.from(o),r=Array.from(t);return Math.sqrt(e.map((a,s)=>a-r[s]).reduce((a,s)=>a+s**2,0))}var ze=class{constructor(t,e=.6){this._distanceThreshold=e;let r=Array.isArray(t)?t:[t];if(!r.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let a=1,s=()=>`person ${a++}`;this._labeledDescriptors=r.map(i=>{if(i instanceof Q)return i;if(i instanceof Float32Array)return new Q(s(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new Q(s(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,e){return e.map(r=>lo(r,t)).reduce((r,a)=>r+a,0)/(e.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:e,label:r})=>new Kt(r,this.computeMeanDistance(t,e))).reduce((e,r)=>e.distancet.toJSON())}}static fromJSON(t){let e=t.labeledDescriptors.map(r=>Q.fromJSON(r));return new ze(e,t.distanceThreshold)}};function Pb(o){let t=new Zt;return t.extractWeights(o),t}function sn(o,t){let{width:e,height:r}=new S(t.width,t.height);if(e<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:e,height:r})}`);if(Array.isArray(o))return o.map(a=>sn(a,{width:e,height:r}));if(Yt(o)){let a=o.detection.forSize(e,r),s=o.unshiftedLandmarks.forSize(a.box.width,a.box.height);return ie(At(o,a),s)}return tt(o)?At(o,o.detection.forSize(e,r)):o instanceof $||o instanceof E?o.forSize(e,r):o}var Ab=Wr;export{Me as AgeGenderNet,Nt as BoundingBox,w as Box,V as ComposableTask,ht as ComputeAllFaceDescriptorsTask,ke as ComputeFaceDescriptorsTaskBase,bt as ComputeSingleFaceDescriptorTask,Re as DetectAllFaceLandmarksTask,me as DetectAllFacesTask,Be as DetectFaceLandmarksTaskBase,Oe as DetectFacesTaskBase,$e as DetectSingleFaceLandmarksTask,He as DetectSingleFaceTask,S as Dimensions,Sr as FACE_EXPRESSION_LABELS,E as FaceDetection,to as FaceDetectionNet,we as FaceExpressionNet,pt as FaceExpressions,jt as FaceLandmark68Net,Ie as FaceLandmark68TinyNet,Vr as FaceLandmarkNet,$ as FaceLandmarks,vr as FaceLandmarks5,Lt as FaceLandmarks68,Kt as FaceMatch,ze as FaceMatcher,Ut as FaceRecognitionNet,rr as Gender,Qt as LabeledBox,Q as LabeledFaceDescriptors,rt as NetInput,I as NeuralNetwork,ct as ObjectDetection,b as Point,yr as PredictedBox,St as Rect,Pt as SsdMobilenetv1,z as SsdMobilenetv1Options,Zt as TinyFaceDetector,Le as TinyFaceDetectorOptions,Jt as TinyYolov2,J as TinyYolov2Options,ab as allFaces,an as allFacesSsdMobilenetv1,nb as allFacesTinyYolov2,_r as awaitMediaLoaded,Tr as bufferToImage,Vd as computeFaceDescriptor,Rt as createCanvas,be as createCanvasFromMedia,vl as createFaceDetectionNet,vf as createFaceRecognitionNet,Qo as createSsdMobilenetv1,Pb as createTinyFaceDetector,pd as createTinyYolov2,mr as detectAllFaces,on as detectFaceLandmarks,zd as detectFaceLandmarksTiny,eh as detectLandmarks,Kh as detectSingleFace,Ar as draw,T as env,lo as euclideanDistance,sr as extendWithAge,ar as extendWithFaceDescriptor,At as extendWithFaceDetection,tr as extendWithFaceExpressions,ie as extendWithFaceLandmarks,ir as extendWithGender,oe as extractFaceTensors,re as extractFaces,Mi as fetchImage,Fr as fetchJson,Li as fetchNetWeights,mt as fetchOrThrow,$i as fetchVideo,k as getContext2dOrThrow,Bt as getMediaDimensions,Pr as imageTensorToCanvas,wr as imageToSquare,Vn as inverseSigmoid,hr as iou,Qe as isMediaElement,he as isMediaLoaded,Pf as isWithAge,tt as isWithFaceDetection,Lr as isWithFaceExpressions,Yt as isWithFaceLandmarks,Ef as isWithGender,Kd as loadAgeGenderModel,Qd as loadFaceDetectionModel,Zd as loadFaceExpressionModel,Xd as loadFaceLandmarkModel,Jd as loadFaceLandmarkTinyModel,qd as loadFaceRecognitionModel,nn as loadSsdMobilenetv1Model,jd as loadTinyFaceDetectorModel,Ud as loadTinyYolov2Model,Er as loadWeightMap,th as locateFaces,ji as matchDimensions,br as minBbox,P as nets,gr as nonMaxSuppression,X as normalize,xr as padToSquare,Gd as predictAgeAndGender,Yd as recognizeFaceExpressions,sn as resizeResults,Wt as resolveInput,Hn as shuffleArray,fe as sigmoid,rn as ssdMobilenetv1,n as tf,Od as tinyFaceDetector,Hd as tinyYolov2,M as toNetInput,dr as utils,io as validateConfig,Ab as version}; diff --git a/dist/face-api.esm.js b/dist/face-api.esm.js index 9a20171..cb14c91 100644 --- a/dist/face-api.esm.js +++ b/dist/face-api.esm.js @@ -4682,7 +4682,7 @@ return a / b;`,pne=` `}};function tse(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,segmentIds:s}=t,{numSegments:i}=a,o=r.shape.length,l=[],u=0,p=C.getAxesPermutation([u],o),d=r;p!=null&&(d=Wt({inputs:{x:r},backend:n,attrs:{perm:p}}),l.push(d),u=C.getInnerMostAxes(1,o)[0]);let c=C.segment_util.computeOutShape(d.shape,u,i),h=w.sizeFromShape([d.shape[u]]),m=me({inputs:{x:d},backend:n,attrs:{shape:[-1,h]}});l.push(m);let f=Bm(r.dtype),g=(v,k,T,_,E)=>{let A=v.shape[0],M=v.shape[1],$=C.segment_util.segOpComputeOptimalWindowSize(M,E),S={windowSize:$,inSize:M,batchSize:A,numSegments:E},P=new ese(S,k),V=n.compileAndRun(P,[v,T],_);if(l.push(V),V.shape[1]===E)return V;let j=PC({backend:n,attrs:{start:0,stop:E,step:1,dtype:"float32"}}),q=LC({inputs:{x:j},backend:n,attrs:{reps:[M/$]}});return l.push(j),l.push(q),g(V,k,q,_,E)},y=g(m,"unsortedSegmentSum",s,f,i),b=me({inputs:{x:y},backend:n,attrs:{shape:c}}),x=b;if(p!=null){l.push(b);let v=C.getUndoAxesPermutation(p);x=Wt({inputs:{x},backend:n,attrs:{perm:v}})}return l.forEach(v=>n.disposeIntermediateTensorInfo(v)),x}var nse={kernelName:_c,backendName:"webgl",kernelFunc:tse},ase=[rQ,iQ,uQ,dQ,mQ,yQ,xQ,wQ,NQ,_Q,FQ,DQ,PQ,BQ,UQ,HQ,qQ,QQ,ZQ,tJ,sJ,dJ,mJ,gJ,kJ,SJ,CJ,z9,AJ,PJ,BJ,jJ,KJ,YJ,JJ,eZ,aZ,iZ,uZ,cZ,hZ,fZ,bZ,vZ,SZ,TZ,EZ,$Z,RZ,LZ,VZ,jZ,XZ,JZ,ZZ,tee,aee,see,oee,uee,hee,gee,xee,wee,See,_ee,Aee,Mee,L9,Oee,RJ,Bee,Uee,jee,W9,Yee,ete,nte,ite,ute,hte,gte,vte,Ste,_te,Ete,Dte,Mte,Ote,Wte,Ute,Hte,qte,Xte,Zte,ane,one,fne,j9,xne,kne,Nne,Cne,bJ,Ane,Dne,Mne,Lne,Vne,U9,Gne,Hne,xJ,cne,Kne,Jne,nae,K9,iae,uae,hae,gae,vae,kae,Nae,Cae,Fae,Dae,Pae,zae,Uae,jae,Xae,Jae,pJ,hne,tre,are,sre,ore,ure,cre,hre,fre,yre,vre,kre,Sre,_re,Ere,Are,Dre,dne,tQ,Pre,zre,Vre,jre,Xre,nQ,Qre,Zre,nse,$ne];for(let e of ase)Cc(e);var $t;(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"})($t||($t={}));var uc;(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"})(uc||(uc={}));var zC;function rse(e){zC=e.wasm.cwrap(ni,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function sse(e){let{inputs:t,backend:n,attrs:a}=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:d}=a,c=n.dataIdMap.get(r.dataId).id,h=n.dataIdMap.get(s.dataId).id,m=0;if(i!=null){let E=n.dataIdMap.get(i.dataId);if(E.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${E.shape.length}.`);m=E.id}let f=o==null?0:n.dataIdMap.get(o.dataId).id,g=uc[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],b=u?s.shape[1]:s.shape[2],x=Cu.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),v=n.makeOutput([...x,y,b],r.dtype),k=n.dataIdMap.get(v.dataId).id,T=new Uint8Array(new Int32Array(r.shape).buffer),_=new Uint8Array(new Int32Array(s.shape).buffer);return zC(c,T,r.shape.length,h,_,s.shape.length,l,u,g,m,f,d||0,k),v}var ise={kernelName:ni,backendName:"wasm",setupFunc:rse,kernelFunc:sse};function cn(e,t){let n;function a(s){n=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 w.sizeFromShape(u.shape)===0||n(l,$t[o.dtype],p),u}return{kernelName:e,backendName:"wasm",setupFunc:a,kernelFunc:r}}var ose=cn(Tl);function En(e,t,n){let a;function r(i){a=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,d=o.dataIdMap.get(u.dataId).id,c=o.dataIdMap.get(p.dataId).id,h=n!=null?n:u.dtype,m=C.assertAndGetBroadcastShape(u.shape,p.shape),f=o.makeOutput(m,h);if(w.sizeFromShape(m)===0)return f;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(p.shape).buffer),b=o.dataIdMap.get(f.dataId).id;return a(d,g,u.shape.length,c,y,p.shape.length,$t[u.dtype],b),f}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var lse=!0,use=En(hs,lse),BC;function pse(e){BC=e.wasm.cwrap(vi,null,["array","number","number","number"])}function cse(e){let{inputs:t,backend:n}=e,a=n.makeOutput(t[0].shape,t[0].dtype);if(w.sizeFromShape(a.shape)===0)return a;let r=t.map(o=>n.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(r).buffer),i=n.dataIdMap.get(a.dataId).id;return BC(s,r.length,$t[a.dtype],i),a}var dse={kernelName:vi,backendName:"wasm",setupFunc:pse,kernelFunc:cse};function Yf(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype),r=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(a).set(r),a}var hse={kernelName:zi,backendName:"wasm",kernelFunc:Yf},WC;function mse(e){WC=e.wasm.cwrap(Nr,null,["number","array","number","number","number","array","number"])}function cs(e){let{inputs:t,backend:n,attrs:a}=e,[r,s]=gse(t.x.shape,a.perm),i=!0;for(let m=0;m=r&&(s===-1||a[s]>a[i])&&(s=i);a[s]=r}return[n,a]}var yse={kernelName:Nr,backendName:"wasm",kernelFunc:cs,setupFunc:mse};function Ss(e,t,n){let a=e.shape,r=e.shape.length,s=w.parseAxisParam(t,a),i=s,o=C.getAxesPermutation(i,r),l=null,u=!1;if(o!=null){let p=new Array(r);for(let c=0;c`new shape: ${i}, old shape: ${a.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(a.dataId),{dataId:a.dataId,shape:i,dtype:a.dtype}}var Fse={kernelName:cu,backendName:"wasm",kernelFunc:Bn},jC;function Ase(e){jC=e.wasm.cwrap(Ii,null,["number","array","number","number","array","number","number","number","number"])}function $se(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=a;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],d=o?s.shape[u-1]:s.shape[u-2],c=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=w.sizeFromShape(m),y=w.sizeFromShape(f),b=Cu.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([c,h]);w.assert(p===d,()=>`Error in matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[g,p,c]:[g,c,p],v=o?[y,h,d]:[y,d,h],k=Bn({inputs:{x:r},backend:n,attrs:{shape:x}}),T=Bn({inputs:{x:s},backend:n,attrs:{shape:v}}),_=n.dataIdMap.get(k.dataId).id,E=n.dataIdMap.get(T.dataId).id,A=i?k.shape[2]:k.shape[1],M=o?T.shape[1]:T.shape[2],$=Math.max(g,y),S=n.makeOutput([$,A,M],k.dtype),P=n.dataIdMap.get(S.dataId).id,V=new Uint8Array(new Int32Array(k.shape).buffer),j=new Uint8Array(new Int32Array(T.shape).buffer);return jC(_,V,k.shape.length,E,j,T.shape.length,i,o,P),n.disposeData(k.dataId),n.disposeData(T.dataId),S.shape=b,S}var Dse={kernelName:Ii,backendName:"wasm",setupFunc:Ase,kernelFunc:$se};function yi(e){let{inputs:{x:t},attrs:{begin:n,size:a},backend:r}=e,[s,i]=Kt.parseSliceParams(t,n,a),o=Kt.isSliceContinous(t.shape,s,i),l=r.readSync(t.dataId),u=r.makeOutput(i,t.dtype),p=w.computeStrides(t.shape),d=r.dataIdMap.get(u.dataId);if(o){let m=Kt.computeFlatOffset(s,p);return t.dtype==="string"?d.stringBytes=l.slice(m,m+w.sizeFromShape(i)):r.typedArrayFromHeap(u).set(l.subarray(m,m+w.sizeFromShape(i))),u}if(t.dtype==="string"){let m=Qh(l,s,i,t.shape,t.dtype);return d.stringBytes=m,u}let c=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)Rse(l,p[0],c,s,i);else if(h===3)Mse(l,p[0],p[1],c,s,i);else if(h===4)Pse(l,p[0],p[1],p[2],c,s,i);else{let m=Qh(l,s,i,t.shape,t.dtype);c.set(m)}return u}function Rse(e,t,n,a,r){let s=0,i=a[0],o=a[1],l=i+r[0];for(let u=i;uy*b),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),d=C.getSliceBeginCoords(i,s.length),c=C.getSliceSize(p,i,s.length),h=Bn({inputs:{x:r},backend:n,attrs:{shape:l}}),m=cs({inputs:{x:h},backend:n,attrs:{perm:u}}),f=Bn({inputs:{x:m},backend:n,attrs:{shape:p}}),g=yi({inputs:{x:f},backend:n,attrs:{begin:d,size:c}});return n.disposeData(h.dataId),n.disposeData(m.dataId),n.disposeData(h.dataId),g}var zse={kernelName:Pl,backendName:"wasm",kernelFunc:Lse};function ud(e){let{inputs:{x:t},attrs:{dtype:n},backend:a}=e,r=a.makeOutput(t.shape,n),s=a.typedArrayFromHeap(t);return a.typedArrayFromHeap(r).set(s),r}var Bse={kernelName:Si,backendName:"wasm",kernelFunc:ud},Wse=cn(Ni),qC;function Vse(e){qC=e.wasm.cwrap(ms,null,["number","number","number","number"])}function Use(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=a,o=n.dataIdMap.get(r.dataId).id,l=n.makeOutput(r.shape,r.dtype),u=n.dataIdMap.get(l.dataId).id;return qC(o,s,i,u),l}var Gse={kernelName:ms,backendName:"wasm",setupFunc:Vse,kernelFunc:Use};function KC(e){let{inputs:t,backend:n}=e,a=w.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=C.computeOutShape(t.map(h=>h.shape),a),s=t.filter(h=>w.sizeFromShape(h.shape)>0);if(s.length===1)return Yf({inputs:{x:s[0]},backend:n});let i=n.makeOutput(r,t[0].dtype);if(w.sizeFromShape(r)===0)return i;let o=s.map(h=>h.shape);if(C.assertParamsConsistent(o,a),s[0].dtype==="string"){let h=s.map(x=>{let v=w.sizeFromShape(x.shape.slice(a));return Bn({inputs:{x},backend:n,attrs:{shape:[-1,v]}})}),m=h.map(x=>({vals:n.readSync(x.dataId),shape:x.shape}));r=C.computeOutShape(h.map(x=>x.shape),1);let f=h[0].shape[0]===1,g=m0(m,r,t[0].dtype,f),y=C.computeOutShape(s.map(x=>x.shape),a);i.shape=y;let b=n.dataIdMap.get(i.dataId);return b.stringBytes=C.fromStringArrayToUint8(g),h.forEach(x=>n.disposeData(x.dataId)),i}let l=w.sizeFromShape(s[0].shape.slice(0,a)),u=0,p=s.map(h=>{let m=w.sizeFromShape(h.shape.slice(a));return u+=m,m}),d=s.map(h=>n.typedArrayFromHeap(h)),c=n.typedArrayFromHeap(i);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=cs({inputs:{x:r},attrs:{perm:u},backend:n}));let d=C.getInnerMostAxes(1,l)[0];C.assertAxesAreInnerMostDims("cumprod",[d],l);let c=n.makeOutput(p.shape,p.dtype),h=p.shape[d],m=n.dataIdMap.get(p.dataId).id,f=n.dataIdMap.get(c.dataId).id;JC(m,i?1:0,o?1:0,h,f,$t[r.dtype]);let g=c;if(u!==null){let y=C.getUndoAxesPermutation(u);g=cs({inputs:{x:c},attrs:{perm:y},backend:n}),n.disposeData(p.dataId),n.disposeData(c.dataId)}return g}var sie={kernelName:Ll,backendName:"wasm",setupFunc:aie,kernelFunc:rie},ZC;function iie(e){ZC=e.wasm.cwrap(Fi,null,["number","number","number","number","number","number"])}function oie(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a,l=r.shape.length;w.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=cs({inputs:{x:r},attrs:{perm:u},backend:n}));let d=C.getInnerMostAxes(1,l)[0];C.assertAxesAreInnerMostDims("cumsum",[d],l);let c=n.makeOutput(p.shape,p.dtype),h=p.shape[d],m=n.dataIdMap.get(p.dataId).id,f=n.dataIdMap.get(c.dataId).id;ZC(m,i?1:0,o?1:0,h,f,$t[r.dtype]);let g=c;if(u!==null){let y=C.getUndoAxesPermutation(u);g=cs({inputs:{x:c},attrs:{perm:y},backend:n}),n.disposeData(p.dataId),n.disposeData(c.dataId)}return g}var lie={kernelName:Fi,backendName:"wasm",setupFunc:iie,kernelFunc:oie},eE;function uie(e){eE=e.wasm.cwrap(Bl,null,["number","number","number","array","number","array","array","number","number"])}function pie(e){let{backend:t,inputs:n,attrs:a}=e,{x:r}=n,{blockSize:s,dataFormat:i}=a,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],d=l*s,c=u*s,h=p/(s*s),m=i==="NHWC"?[o,d,c,h]:[o,h,d,c],f=t.makeOutput(m,"float32"),g=t.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(w.computeStrides(r.shape)).buffer),b=new Uint8Array(new Int32Array(m).buffer),x=new Uint8Array(new Int32Array(w.computeStrides(m)).buffer),v=t.dataIdMap.get(f.dataId).id;return eE(g,s,i==="NHWC"?1:0,y,r.shape.length-1,b,x,m.length,v),f}var cie={kernelName:Bl,backendName:"wasm",setupFunc:uie,kernelFunc:pie},tE;function die(e){tE=e.wasm.cwrap(Ai,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function hie(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s}=t,i=a.dataIdMap.get(r.dataId).id,o=a.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:p,dimRoundingMode:d}=n,c=u==null?[1,1]:u,h=C.computeConv2DInfo(r.shape,s.shape,l,c,p,d,!0),m=h.filterHeight,f=h.filterWidth,g=h.padInfo.top,y=h.padInfo.right,b=h.padInfo.bottom,x=h.padInfo.left,v=h.dilationHeight,k=h.dilationWidth,T=h.strideHeight,_=h.strideWidth,E=h.inChannels,A=h.outChannels,M=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 $=a.makeOutput(h.outShape,"float32"),S=a.dataIdMap.get($.dataId).id;return tE(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,y,b,x,M,v,k,T,_,E,A,S),$}var mie={kernelName:Ai,backendName:"wasm",setupFunc:die,kernelFunc:hie},fie=cn(Di),gie=!1,yie=En(Vl,gie,"bool"),bie=cn(Ri,"float32");function yx(e){let{inputs:t,attrs:n,backend:a}=e,{input:r}=t,{dim:s}=n,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(w.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),Bn({inputs:{x:r},backend:a,attrs:{shape:o}})}var xie={kernelName:Ul,backendName:"wasm",kernelFunc:yx};function nE(e){let{attrs:{shape:t,value:n,dtype:a},backend:r}=e,s=r.makeOutput(t,a);return r.typedArrayFromHeap(s).fill(n),s}var vie={kernelName:gc,backendName:"wasm",kernelFunc:nE},aE;function wie(e){aE=e.wasm.cwrap(Hl,null,["number","number","number","number","number","number"])}function kie(e){let{inputs:t,backend:n}=e,{image:a}=t,r=n.makeOutput(a.shape,a.dtype),s=n.dataIdMap.get(a.dataId).id,i=n.dataIdMap.get(r.dataId).id,[o,l,u,p]=a.shape;return aE(s,o,l,u,p,i),r}var Iie={kernelName:Hl,backendName:"wasm",kernelFunc:kie,setupFunc:wie},Sie=cn(Mi),Nie=!1,Tie=En(Pi,Nie),rE;function _ie(e){rE=e.wasm.cwrap(Oi,null,["number","number","number","number","number","number","number"])}function Cie(e){let{backend:t,inputs:n,attrs:a}=e,{varianceEpsilon:r}=a,{x:s,mean:i,variance:o,offset:l,scale:u}=n,p=t.dataIdMap.get(s.dataId).id,d=t.dataIdMap.get(i.dataId).id,c=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(w.sizeFromShape(s.shape)===0)return f;let g=t.dataIdMap.get(f.dataId).id;return rE(p,d,c,h,m,r,g),f}var Eie={kernelName:Oi,backendName:"wasm",setupFunc:_ie,kernelFunc:Cie},sE;function Fie(e){sE=e.wasm.cwrap(ai,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 Aie(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=n,f=C.computeConv2DInfo(r.shape,s.shape,l,p,u,c),g=uc[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let y=a.dataIdMap.get(r.dataId).id,b=a.dataIdMap.get(s.dataId).id,x=f.outChannels,v=0;if(i!=null){let ae=a.dataIdMap.get(i.dataId);if(ae.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==x)throw new Error(`FusedConv2D bias shape (${ae.shape}) does not match the number of output channels (${x})`);v=ae.id}let k=f.filterHeight,T=f.filterWidth,_=f.padInfo.top,E=f.padInfo.right,A=f.padInfo.bottom,M=f.padInfo.left,$=f.dilationHeight,S=f.dilationWidth,P=f.strideHeight,V=f.strideWidth,j=f.inChannels,q=f.padInfo.type==="SAME"?1:0,K=f.batchSize,Z=f.inHeight,ee=f.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let re=a.makeOutput(f.outShape,"float32"),Y=a.dataIdMap.get(re.dataId).id,ie=o==null?0:a.dataIdMap.get(o.dataId).id;return sE(y,K,Z,ee,b,k,T,v,_,E,A,M,q,$,S,P,V,j,x,g,ie,m||0,Y),re}var $ie={kernelName:ai,backendName:"wasm",setupFunc:Fie,kernelFunc:Aie},iE;function Die(e){iE=e.wasm.cwrap(ri,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 Rie(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=n,f=C.computeConv2DInfo(r.shape,s.shape,l,p,u,c,!0),g=uc[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=a.dataIdMap.get(r.dataId).id,b=a.dataIdMap.get(s.dataId).id,x=f.outChannels,v=0;if(i!=null){let ae=a.dataIdMap.get(i.dataId);if(ae.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==x)throw new Error(`FusedDepthwiseConv2D bias shape (${ae.shape}) does not match the number of output channels (${x})`);v=ae.id}let k=f.filterHeight,T=f.filterWidth,_=f.padInfo.top,E=f.padInfo.right,A=f.padInfo.bottom,M=f.padInfo.left,$=f.dilationHeight,S=f.dilationWidth,P=f.strideHeight,V=f.strideWidth,j=f.inChannels,q=f.padInfo.type==="SAME"?1:0,K=f.batchSize,Z=f.inHeight,ee=f.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let re=a.makeOutput(f.outShape,"float32"),Y=a.dataIdMap.get(re.dataId).id,ie=o==null?0:a.dataIdMap.get(o.dataId).id;return iE(y,K,Z,ee,b,k,T,v,_,E,A,M,q,$,S,P,V,j,x,g,ie,m||0,Y),re}var Mie={kernelName:ri,backendName:"wasm",setupFunc:Die,kernelFunc:Rie},oE;function Pie(e){oE=e.wasm.cwrap(ql,null,["number","number","number","number","number","number","array","number"])}function Oie(e){let{backend:t,inputs:n}=e,{params:a,indices:r}=n,[s,i,o,l]=Px.prepareAndValidate(a,r),u=t.makeOutput(s,a.dtype);if(i===0)return u;let p=r.shape,d=p[p.length-1],c=t.dataIdMap.get(a.dataId).id,h=t.dataIdMap.get(r.dataId).id,m=new Uint8Array(new Int32Array(l).buffer),f=t.dataIdMap.get(u.dataId).id;return oE(c,$t[a.dtype],h,i,d,o,m,f),u}var Lie={kernelName:ql,backendName:"wasm",setupFunc:Pie,kernelFunc:Oie},lE;function zie(e){lE=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function Bie(e){let{backend:t,inputs:n,attrs:a}=e,{x:r,indices:s}=n,{axis:i,batchDims:o}=a,l=w.parseAxisParam(i,r.shape)[0],u=t.readSync(s.dataId),p=r.shape[l];for(let _=0;_=0,()=>`GatherV2: the index value ${E} is not in [0, ${p-1}]`)}let d=C.segment_util.collectGatherOpShapeInfo(r,s,l,o),c=Bn({inputs:{x:r},attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]},backend:t}),h=w.sizeFromShape(s.shape),m=Bn({inputs:{x:s},attrs:{shape:[d.batchSize,h/d.batchSize]},backend:t}),f=[d.batchSize,d.outerSize,h/d.batchSize,d.sliceSize],g=t.makeOutput(f,r.dtype);if(w.sizeFromShape(r.shape)===0)return g;let y=c.shape.length-1,b=t.dataIdMap.get(c.dataId).id,x=t.dataIdMap.get(m.dataId).id,v=t.dataIdMap.get(g.dataId).id,k=new Uint8Array(new Int32Array(w.computeStrides(c.shape)).buffer),T=new Uint8Array(new Int32Array(w.computeStrides(f)).buffer);return lE(b,$t[r.dtype],k,y,x,d.batchSize,T,v),t.disposeData(c.dataId),t.disposeData(m.dataId),g.shape=d.outputShape,g}var Wie={kernelName:jl,backendName:"wasm",setupFunc:zie,kernelFunc:Bie},Vie=!1,Uie=En(Kl,Vie,"bool"),Gie=!1,Hie=En(Li,Gie,"bool"),uE;function jie(e){uE=e.wasm.cwrap(Bi,null,["number","number","number","number"])}function qie(e){let{inputs:{x:t},attrs:{alpha:n},backend:a}=e,r=a.dataIdMap.get(t.dataId).id,s=a.makeOutput(t.shape,"float32");if(w.sizeFromShape(t.shape)!==0){let i=a.dataIdMap.get(s.dataId).id;uE(r,$t[t.dtype],n,i)}return s}var Kie={kernelName:Bi,backendName:"wasm",setupFunc:jie,kernelFunc:qie},Xie=!1,Yie=En(Jl,Xie,"bool"),Qie=!1,Jie=En(Zl,Qie,"bool"),Zie=cn(Wi),eoe=!1,toe=En(tu,eoe,"bool"),pE;function noe(e){pE=e.wasm.cwrap(Vi,null,["number","number","number","number"])}function aoe(e){let{backend:t,inputs:n,attrs:a}=e,{reductionIndices:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:p,originalAxes:d,inputWasTransposed:c}=Ss(i,r,t);if(c){let b=t.dataIdMap.get(u.dataId).id;l=u,o=b}let h=l.shape.length;C.assertAxesAreInnerMostDims("max",p,h);let[m,f]=C.computeOutAndReduceShapes(l.shape,p),g=w.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(w.sizeFromShape(l.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;pE(o,$t[i.dtype],g,b)}if(c&&t.disposeData(u.dataId),s){let b=C.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var roe={kernelName:Vi,backendName:"wasm",setupFunc:noe,kernelFunc:aoe},soe=!1,ioe=En(Ui,soe),cE;function ooe(e){cE=e.wasm.cwrap(Gi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function loe(e){let{inputs:t,attrs:n,backend:a}=e,r=t.x,s=a.dataIdMap.get(r.dataId).id;w.assert(r.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${r.dtype}.`);let{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=C.computePool2DInfo(r.shape,i,o,1,l,u),d=p.filterHeight,c=p.filterWidth,h=p.padInfo.top,m=p.padInfo.right,f=p.padInfo.bottom,g=p.padInfo.left,y=p.dilationHeight,b=p.dilationWidth,x=p.strideHeight,v=p.strideWidth,k=p.inChannels,T=p.outChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let _=a.makeOutput(p.outShape,"float32"),E=a.dataIdMap.get(_.dataId).id;return cE(s,r.shape[0],r.shape[1],r.shape[2],d,c,h,m,f,g,y,b,x,v,k,T,E),_}var uoe={kernelName:Gi,backendName:"wasm",setupFunc:ooe,kernelFunc:loe},dE;function poe(e){dE=e.wasm.cwrap(Hi,null,["number, number, number"])}function coe(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=Ss(i,r,t),m=d;if(h){let v=t.dataIdMap.get(p.dataId).id;v!==o&&(u=p,l=v,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("mean",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=w.sizeFromShape(g),b=u;u.dtype!=="float32"&&(b=ud({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(b.dataId).id);let x=t.makeOutput(f,"float32");if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(x.dataId).id;dE(l,y,v)}if(h&&t.disposeData(p.dataId),s){let v=C.expandShapeToKeepDim(x.shape,c);x.shape=v}return u.dtype!=="float32"&&t.disposeData(b.dataId),x}var doe={kernelName:Hi,backendName:"wasm",setupFunc:poe,kernelFunc:coe},hE;function hoe(e){hE=e.wasm.cwrap(ji,null,["number","number","number","number"])}function moe(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=Ss(i,r,t);if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x)}let m=u.shape.length;C.assertAxesAreInnerMostDims("min",d,m);let[f,g]=C.computeOutAndReduceShapes(u.shape,d),y=w.sizeFromShape(g),b=t.makeOutput(f,u.dtype);if(w.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;hE(l,$t[i.dtype],y,x)}if(h&&t.disposeData(p.dataId),s){let x=C.expandShapeToKeepDim(b.shape,c);b.shape=x}return b}var foe={kernelName:ji,backendName:"wasm",setupFunc:hoe,kernelFunc:moe},goe=!1,yoe=En(qi,goe),bx;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(bx||(bx={}));var mE;function boe(e){mE=e.wasm.cwrap(Ki,null,["number","array","number","number","array","array","number","number"])}function xoe(e){let{inputs:{x:t},backend:n,attrs:{paddings:a,mode:r}}=e,s=a.map((m,f)=>m[0]+t.shape[f]+m[1]),i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=a.map(m=>m[0]),d=a.map(m=>m[1]),c=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(d).buffer);return mE(i,u,t.shape.length,$t[t.dtype],c,h,bx[r],l),o}var voe={kernelName:Ki,backendName:"wasm",kernelFunc:xoe,setupFunc:boe},woe=!0,koe=En(Xi,woe),Ioe=cn(au);function P0(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),a=n[0],r=n[1],s=n[2],i=n[3];return e.wasm._free(t),{pSelectedIndices:a,selectedSize:r,pSelectedScores:s,pValidOutputs:i}}var fE;function Soe(e){fE=e.wasm.cwrap(su,"number",["number","number","number","number","number"])}function Noe(e){let{backend:t,inputs:n,attrs:a}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i}=a,{boxes:o,scores:l}=n,u=t.dataIdMap.get(o.dataId).id,p=t.dataIdMap.get(l.dataId).id,d=fE(u,p,s,r,i),{pSelectedIndices:c,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=P0(t,d);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",c)}var Toe={kernelName:su,backendName:"wasm",setupFunc:Soe,kernelFunc:Noe},gE;function _oe(e){gE=e.wasm.cwrap(iu,"number",["number","number","number","number","number","bool"])}function Coe(e){let{backend:t,inputs:n,attrs:a}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=a,{boxes:l,scores:u}=n,p=t.dataIdMap.get(l.dataId).id,d=t.dataIdMap.get(u.dataId).id,c=gE(p,d,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=P0(t,c);t.wasm._free(f);let y=t.makeOutput([m],"int32",h),b=t.makeOutput([],"int32",g);return[y,b]}var Eoe={kernelName:iu,backendName:"wasm",setupFunc:_oe,kernelFunc:Coe},yE;function Foe(e){yE=e.wasm.cwrap(ou,"number",["number","number","number","number","number","number"])}function Aoe(e){let{backend:t,inputs:n,attrs:a}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=a,{boxes:l,scores:u}=n,p=t.dataIdMap.get(l.dataId).id,d=t.dataIdMap.get(u.dataId).id,c=yE(p,d,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=P0(t,c);t.wasm._free(g);let y=t.makeOutput([m],"int32",h),b=t.makeOutput([m],"float32",f);return[y,b]}var $oe={kernelName:ou,backendName:"wasm",setupFunc:Foe,kernelFunc:Aoe},Doe=!1,Roe=En(ru,Doe,"bool"),bE;function Moe(e){bE=e.wasm.cwrap(Yi,null,["number","number","number","number","number"])}function Poe(e){let{inputs:t,backend:n,attrs:a}=e,{indices:r}=t,{depth:s,onValue:i,offValue:o}=a,l=n.makeOutput([...r.shape,s],"int32"),u=n.dataIdMap.get(l.dataId).id,p=n.dataIdMap.get(r.dataId).id;return bE(p,s,i,o,u),l}var Ooe={kernelName:Yi,backendName:"wasm",setupFunc:Moe,kernelFunc:Poe};function Loe(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(a).fill(1),a}var zoe={kernelName:lu,backendName:"wasm",kernelFunc:Loe};function Boe(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a;if(t.length===1)return yx({inputs:{input:t[0]},backend:n,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{w.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),w.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let d=yx({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=KC({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeData(p.dataId)),u}var Woe={kernelName:uu,backendName:"wasm",kernelFunc:Boe},xE;function Voe(e){xE=e.wasm.cwrap(Qi,null,["number","array","number","number","array","array","number","number"])}function Uoe(e){let{inputs:{x:t},backend:n,attrs:{paddings:a,constantValue:r}}=e,s=a.map((m,f)=>m[0]+t.shape[f]+m[1]);if(w.sizeFromShape(t.shape)===0)return nE({backend:n,attrs:{shape:s,value:r,dtype:t.dtype}});let i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=a.map(m=>m[0]),d=a.map(m=>m[1]),c=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(d).buffer);return xE(i,u,t.shape.length,$t[t.dtype],c,h,r,l),o}var vE={kernelName:Qi,backendName:"wasm",kernelFunc:Uoe,setupFunc:Voe},Goe=!1,Hoe=En(Ji,Goe),wE;function joe(e){wE=e.wasm.cwrap(Zi,null,["number","number","number"])}function qoe(e){let{inputs:t,backend:n}=e,{x:a,alpha:r}=t,s=n.dataIdMap.get(a.dataId).id,i=n.dataIdMap.get(r.dataId).id,o=s,l=a,u=l;l.dtype!=="float32"&&(u=ud({backend:n,inputs:{x:a},attrs:{dtype:"float32"}}),o=n.dataIdMap.get(u.dataId).id);let p=n.makeOutput(a.shape,"float32"),d=n.dataIdMap.get(p.dataId).id;return wE(o,i,d),l.dtype!=="float32"&&n.disposeData(u.dataId),p}var Koe={kernelName:Zi,backendName:"wasm",setupFunc:joe,kernelFunc:qoe},kE;function Xoe(e){kE=e.wasm.cwrap(eo,null,["number","number","number","number"])}function Yoe(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=Ss(i,r,t),m=d;if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("prod",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=w.sizeFromShape(g),b=t.makeOutput(f,u.dtype);if(w.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;kE(l,y,$t[b.dtype],x)}if(h&&t.disposeData(p.dataId),s){let x=C.expandShapeToKeepDim(b.shape,c);b.shape=x}return b}var Qoe={kernelName:eo,backendName:"wasm",setupFunc:Xoe,kernelFunc:Yoe},Joe=e=>{let{backend:t,attrs:n}=e,{start:a,stop:r,step:s,dtype:i}=n,o=y0(a,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},Zoe={kernelName:wc,backendName:"wasm",kernelFunc:Joe},ele=!0,tle=En($i,ele),nle=cn(to),ale=cn(ao),IE;function rle(e){IE=e.wasm.cwrap(no,null,["number","number","number","number","number","number","number","number","number","number"])}function sle(e){let{backend:t,inputs:n,attrs:a}=e,{images:r}=n,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,[p,d,c,h]=r.shape,m=[p,l,u,h],f=t.dataIdMap.get(r.dataId),g;f.dtype!=="float32"&&(g=ud({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(g.dataId));let y=f.id,b=t.makeOutput(m,"float32");if(w.sizeFromShape(r.shape)===0)return b;let x=t.dataIdMap.get(b.dataId).id;return IE(y,p,d,c,h,l,u,s?1:0,i?1:0,x),g!=null&&t.disposeData(g.dataId),b}var ile={kernelName:no,backendName:"wasm",setupFunc:rle,kernelFunc:sle},SE;function ole(e){SE=e.wasm.cwrap(ro,null,["number","array","number","array","number","number"])}function lle(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dims:s}=a,i=w.parseAxisParam(s,r.shape);if(r.shape.length===0)return Yf({inputs:{x:r},backend:n});let o=n.makeOutput(r.shape,r.dtype),l=n.dataIdMap.get(r.dataId).id,u=n.dataIdMap.get(o.dataId).id,p=new Uint8Array(new Int32Array(i).buffer),d=new Uint8Array(new Int32Array(r.shape).buffer);SE(l,p,i.length,d,r.shape.length,u);let c=Bn({inputs:{x:o},attrs:{shape:r.shape},backend:n});return n.disposeData(o.dataId),c}var ule={kernelName:ro,backendName:"wasm",kernelFunc:lle,setupFunc:ole},NE;function ple(e){NE=e.wasm.cwrap(_u,null,["number","number","number","number","number","number","number","number","array","number","number"])}function cle(e){let{inputs:t,backend:n,attrs:a}=e,{image:r}=t,{radians:s,fillValue:i,center:o}=a,l=n.makeOutput(r.shape,r.dtype),u=n.dataIdMap.get(r.dataId).id,p=n.dataIdMap.get(l.dataId).id,[d,c,h,m]=r.shape,[f,g]=C.getImageCenter(o,c,h),y=i===0,b=255,x=typeof i=="number"?[i,i,i,y?0:b]:[...i,b],v=new Uint8Array(new Int32Array(x).buffer);return NE(u,d,c,h,m,s,f,g,v,x.length,p),l}var dle={kernelName:_u,backendName:"wasm",kernelFunc:cle,setupFunc:ple},hle=cn(so),mle=cn(io),TE;function fle(e){TE=e.wasm.cwrap(du,null,["number","number","number","number","number","number","array","number","number"])}function gle(e){let{backend:t,inputs:n,attrs:a}=e,{indices:r,updates:s}=n,{shape:i}=a,o=t.makeOutput(i,s.dtype);if(w.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:p,strides:d,outputSize:c}=Ox.calculateShapes(s,r,i),h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,f=new Uint8Array(new Int32Array(d).buffer),g=t.dataIdMap.get(o.dataId).id;return TE(h,m,$t[s.dtype],l,u,p,f,c,g),o}var yle={kernelName:du,backendName:"wasm",setupFunc:fle,kernelFunc:gle},_E;function ble(e){_E=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function xle(e){let{inputs:t,backend:n}=e,{condition:a,t:r,e:s}=t,i=n.dataIdMap.get(a.dataId).id,o=n.dataIdMap.get(r.dataId).id,l=n.dataIdMap.get(s.dataId).id,u=n.makeOutput(r.shape,r.dtype),p=n.dataIdMap.get(u.dataId).id,d=a.shape.length,c=r.shape.length,h=d===0||d>1||c===1?1:w.sizeFromShape(r.shape.slice(1));return _E(i,o,l,h,p),u}var vle={kernelName:hu,backendName:"wasm",kernelFunc:xle,setupFunc:ble},CE;function wle(e){CE=e.wasm.cwrap(lo,null,["number","number"])}function kle(e){let{backend:t,inputs:{x:n}}=e,a=t.dataIdMap.get(n.dataId).id,r=t.makeOutput(n.shape,n.dtype),s=t.dataIdMap.get(r.dataId).id;return w.sizeFromShape(r.shape)===0||CE(a,s),r}var Ile={kernelName:"Sigmoid",backendName:"wasm",setupFunc:wle,kernelFunc:kle},Sle=cn(oo),EE;function Nle(e){EE=e.wasm.cwrap(co,null,["number","number","number","number"])}function Tle(e){let{backend:t,inputs:{logits:n},attrs:{dim:a}}=e,r=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),i=t.dataIdMap.get(s.dataId).id,o=n.shape[a],l=w.sizeFromShape(n.shape)/o;return w.sizeFromShape(s.shape)===0||EE(r,i,o,l),s}var _le={kernelName:co,backendName:"wasm",setupFunc:Nle,kernelFunc:Tle};function Cle(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,paddings:i}=a,o=w.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let g=1+s.length;g0?l+1:0;if(u<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let p=r.shape.slice();p[0]=u;let d=n.dataIdMap.get(r.dataId).id,c=n.dataIdMap.get(s.dataId).id,h=n.dataIdMap.get(i.dataId).id,m=n.makeOutput(p,r.dtype),f=n.dataIdMap.get(m.dataId).id,g=n.makeOutput([4],"int32"),y=n.dataIdMap.get(g.dataId).id;$E(d,$t[r.dtype],r.shape[0],c,h,f,y,t,0);let b=n.readSync(g.dataId),x;switch(b[0]){case 0:{x=C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{x=C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:x=C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b[1],b[2]);break;case 3:x=C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(b[1],b[2],b[3]);break;default:x=""}if(n.disposeData(g.dataId),x)throw n.disposeData(m.dataId),new Error(x);return m}function Ple(e){return RE(e,!0)}var Ole={kernelName:Sc,backendName:"wasm",setupFunc:DE,kernelFunc:Ple};function Lle(e){return RE(e,!1)}var zle={kernelName:Nc,backendName:"wasm",setupFunc:DE,kernelFunc:Lle};function Ble(e){let{inputs:t,attrs:n,backend:a}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=w.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(d=>{let c=[...p];c[o]=d;let h=yi({inputs:{x:r},attrs:{begin:u,size:c},backend:a});return u[o]+=d,h})}var Wle={kernelName:vu,backendName:"wasm",kernelFunc:Ble},Vle=cn(uo),Ule=cn(Tc),Gle=!0,Hle=En(ho,Gle),ME;function jle(e){ME=e.wasm.cwrap(gs,null,["number","number","number","number"])}function qle(e){let{backend:t,inputs:n,attrs:a}=e,{alpha:r}=a,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return ME(i,r,$t[s.dtype],l),o}var Kle={kernelName:gs,backendName:"wasm",setupFunc:jle,kernelFunc:qle},PE;function Xle(e){PE=e.wasm.cwrap(ku,null,["number","array","number","array","array","array","array","array","number","number"])}function Yle(e){let{backend:t,inputs:n,attrs:a}=e,{x:r}=n,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:d,shrinkAxisMask:c}=a,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:b,end:x,strides:v}=Kt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),k;if(f)k=Bn({inputs:{x:r},backend:t,attrs:{shape:m}});else if(g||y){w.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let T=Kt.computeOutShape(b,x,v),_=yi({inputs:{x:r},backend:t,attrs:{begin:b,size:T}});k=Bn({inputs:{x:_},backend:t,attrs:{shape:m}}),t.disposeData(_.dataId)}else{let T=t.makeOutput(h,"float32"),_=t.dataIdMap.get(r.dataId).id,E=new Uint8Array(new Int32Array(w.computeStrides(r.shape)).buffer),A=new Uint8Array(new Int32Array(b).buffer),M=new Uint8Array(new Int32Array(x).buffer),$=new Uint8Array(new Int32Array(v).buffer),S=new Uint8Array(new Int32Array(h).buffer),P=new Uint8Array(new Int32Array(w.computeStrides(h)).buffer),V=t.dataIdMap.get(T.dataId).id;PE(_,E,r.shape.length,A,M,$,S,P,h.length,V),k=Bn({inputs:{x:T},backend:t,attrs:{shape:m}}),t.disposeData(T.dataId)}return k}var Qle={kernelName:ku,backendName:"wasm",setupFunc:Xle,kernelFunc:Yle},Jle=!0,Zle=En(mo,Jle),OE;function eue(e){OE=e.wasm.cwrap(po,null,["number","number","number","number"])}function tue(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=Ss(i,r,t),m=d;if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("sum",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=w.sizeFromShape(g),b=t.makeOutput(f,u.dtype);if(w.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;OE(l,y,$t[b.dtype],x)}if(h&&t.disposeData(p.dataId),s){let x=C.expandShapeToKeepDim(b.shape,c);b.shape=x}return b}var nue={kernelName:po,backendName:"wasm",setupFunc:eue,kernelFunc:tue},aue=cn(fo),rue=cn(go),LE;function sue(e){LE=e.wasm.cwrap(fs,null,["number","array","number","array","number","number"])}function iue(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,s=n.dataIdMap.get(r.dataId).id,{reps:i}=a,o=new Array(r.shape.length);for(let c=0;c{let{x:a}=e,{k:r,sorted:s}=n,i=t.dataIdMap.get(a.dataId).id,o=new Uint8Array(new Int32Array(a.shape).buffer),l=a.shape.slice();l[l.length-1]=r;let u=t.makeOutput(l,a.dtype),p=t.dataIdMap.get(u.dataId).id,d=t.makeOutput(l,"int32"),c=t.dataIdMap.get(d.dataId).id;return zE(i,o,a.shape.length,$t[a.dtype],r,s,p,c),[u,d]},pue={kernelName:Iu,backendName:"wasm",setupFunc:lue,kernelFunc:uue},BE;function cue(e){BE=e.wasm.cwrap(Su,null,["number","number","bool","number","number","number","number","number","number","array","number","number","number","number","number"])}function due(e){let{backend:t,inputs:n,attrs:a}=e,{image:r,transforms:s}=n,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=a,[p,d,c,h]=r.shape,[m,f]=u!=null?u:[d,c],g=[p,m,f,h],y=new Uint8Array(new Int32Array(w.computeStrides(r.shape)).buffer),b=t.makeOutput(g,r.dtype),x=t.dataIdMap.get(b.dataId).id,v=t.dataIdMap.get(r.dataId).id,k=t.dataIdMap.get(s.dataId).id,T=i==="nearest"?1:2,_;switch(o){case"constant":_=1;break;case"reflect":_=2;break;case"wrap":_=3;break;case"nearest":_=4;break;default:_=1;break}return BE(v,k,s.shape[0]>1,p,m,f,h,c,d,y,r.shape.length-1,T,_,l,x),b}var hue={kernelName:Su,backendName:"wasm",setupFunc:cue,kernelFunc:due};function mue(e){let{inputs:t,backend:n,attrs:a}=e,{value:r}=t,{axis:s}=a;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 fue={kernelName:Nu,backendName:"wasm",kernelFunc:mue};function gue(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(a).fill(0),a}var yue={kernelName:Tu,backendName:"wasm",kernelFunc:gue},bue=[ise,ose,use,dse,vse,Ise,Tse,Ese,Dse,zse,Bse,Wse,Gse,Hse,Kse,Qse,Jse,Zse,nie,sie,lie,cie,mie,fie,yie,bie,xie,vie,Iie,Sie,Tie,Eie,$ie,Mie,Lie,Wie,Uie,Hie,hse,Kie,Yie,Jie,Zie,toe,roe,ioe,uoe,doe,foe,yoe,voe,koe,Ioe,Toe,Eoe,$oe,Roe,Ooe,zoe,Woe,vE,Hoe,Koe,Qoe,Zoe,tle,nle,ale,Fse,ile,ule,dle,hle,mle,yle,vle,Ile,Sle,Ose,_le,Ele,$le,Mle,Ole,zle,Wle,Vle,Ule,Hle,Kle,Qle,Zle,nue,aue,rue,oue,pue,hue,yse,fue,yue];for(let e of bue)Cc(e);var xx=X();xx.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11])));xx.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(xx.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 Kk=bi(p$()),xue=`"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",function(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"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}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.onmessage=(e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["__emscripten_thread_exit"](result)}}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==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else if(e.data.cmd==="processProxyingQueue"){if(Module["_pthread_self"]()){Module["_emscripten_proxy_execute_queue"](e.data.queue)}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}});`,vue=bi(c$()),WE=class extends pc{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(VE),vx=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new rm(this,ar())}write(e,t,n){let a={id:this.dataIdNextNumber++};return this.move(a,e,t,n,1),a}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=w.now();return e(),{kernelMs:w.now()-t}}move(e,t,n,a,r){let s=this.dataIdNextNumber++;if(a==="string"){let u=t;this.dataIdMap.set(e,{id:s,stringBytes:u,shape:n,dtype:a,memoryOffset:null,refCount:r});return}let i=w.sizeFromShape(n),o=i*w.bytesPerElement(a),l=this.wasm._malloc(o);this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:n,dtype:a,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,n){let{memoryOffset:a,dtype:r,shape:s,stringBytes:i}=this.dataIdMap.get(e);if(r==="string")return(t==null||t===0)&&(n==null||n>=i.length)?i:i.slice(t,n);t=t||0,n=n||w.sizeFromShape(s);let o=w.bytesPerElement(r),l=this.wasm.HEAPU8.slice(a+t*o,a+n*o);return Iue(l.buffer,r)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let a;if(n==null)a=this.write(null,e,t);else{let r=this.dataIdNextNumber++;a={id:r},this.dataIdMap.set(a,{id:r,memoryOffset:n,shape:e,dtype:t,refCount:1});let s=w.sizeFromShape(e);this.wasm.tfjs.registerTensor(r,s,n)}return{dataId:a,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let a=this.wasm.HEAPU8.buffer,{memoryOffset:r}=this.dataIdMap.get(n),s=w.sizeFromShape(e);switch(t){case"float32":return new Float32Array(a,r,s);case"int32":return new Int32Array(a,r,s);case"bool":return new Uint8Array(a,r,s);default:throw new Error(`Unknown dtype ${t}`)}}};function wue(e){return(t,n)=>(w.fetch(e,{credentials:"same-origin"}).then(a=>{a.ok||t.env.a(`failed to load wasm binary file at '${e}'`),a.arrayBuffer().then(r=>{WebAssembly.instantiate(r,t).then(s=>{n(s.instance,s.module)})})}),{})}function Xk(e,t,n){if(am!=null)return am;let a="tfjs-backend-wasm.wasm";return e&&t?a="tfjs-backend-wasm-threaded-simd.wasm":e&&(a="tfjs-backend-wasm-simd.wasm"),Hp!=null&&Hp[a]!=null?Hp[a]:n+a}async function kue(){let[e,t]=await Promise.all([X().getAsync("WASM_HAS_SIMD_SUPPORT"),X().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,a)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=xue.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?Xk(e,t,Vp!=null?Vp:l):l+o},O0&&(r.instantiateWasm=wue(Xk(e,t,Vp!=null?Vp:"")));let s=!1;r.onAbort=()=>{s||jp||(jp=!0,a({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&&am==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+Kk.default.toString()],{type:"text/javascript"}),i=(0,Kk.default)(r)):i=(0,vue.default)(r),i.then(o=>{s=!0,jp=!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,[])},n({wasm:o})})})}function Iue(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 Sue=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],am=null,Vp=null,Hp={},jp=!1,O0=!1;function Nue(e,t=!1){if(Mx("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),jp)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");am=e,O0=t}function Tue(e,t=!1){if(jp)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")Vp=e;else{Hp=e;let n=Sue.filter(a=>Hp[a]==null);if(n.length>0)throw new Error(`There were no entries found for the following binaries: ${n.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}O0=t}var VE=-1,vx=-1;function _ue(e){VE=e}function Cue(){if(vx===-1)throw new Error("WASM backend not initialized.");return vx}var Eue="3.18.0",Fue=2;Wm("wasm",async()=>{let{wasm:e}=await kue();return new WE(e)},Fue);var Aue="3.18.0",$ue="3.18.0",Due="3.18.0",Rue="3.18.0",Mue="3.18.0",Pue="3.18.0",Oue="3.18.0",Lue="3.18.0",zue={tfjs:Aue,"tfjs-core":$ue,"tfjs-data":Due,"tfjs-layers":Rue,"tfjs-converter":Mue,"tfjs-backend-cpu":Pue,"tfjs-backend-webgl":Oue,"tfjs-backend-wasm":Lue};var uF={};ob(uF,{AnchorPosition:()=>j0,DrawBox:()=>hd,DrawBoxOptions:()=>tg,DrawFaceLandmarks:()=>hg,DrawFaceLandmarksOptions:()=>dg,DrawTextField:()=>Lr,DrawTextFieldOptions:()=>ep,drawContour:()=>Rr,drawDetections:()=>jue,drawFaceExpressions:()=>que,drawFaceLandmarks:()=>Xue});function Rr(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach(({x:a,y:r},s)=>{let i=t[s];e.moveTo(i.x,i.y),e.lineTo(a,r)}),n){let a=t[t.length-1],r=t[0];if(!a||!r)return;e.moveTo(a.x,a.y),e.lineTo(r.x,r.y)}e.stroke()}var UE={};ob(UE,{computeReshapedDimensions:()=>B0,getCenterPoint:()=>Co,isDimensions:()=>Jf,isEven:()=>Qf,isFloat:()=>z0,isTensor:()=>To,isTensor1D:()=>Bue,isTensor2D:()=>L0,isTensor3D:()=>Mr,isTensor4D:()=>ba,isValidNumber:()=>er,isValidProbablitiy:()=>Ku,range:()=>gr,round:()=>_o});var Fn=class{constructor(t,n){if(!er(t)||!er(n))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:t,height:n})}`);this._width=t,this._height=n}get width(){return this._width}get height(){return this._height}reverse(){return new Fn(1/this.width,1/this.height)}};function To(e,t){return e instanceof Fe&&e.shape.length===t}function Bue(e){return To(e,1)}function L0(e){return To(e,2)}function Mr(e){return To(e,3)}function ba(e){return To(e,4)}function z0(e){return e%1!==0}function Qf(e){return e%2===0}function _o(e,t=2){let n=10**t;return Math.floor(e*n)/n}function Jf(e){return e&&e.width&&e.height}function B0({width:e,height:t},n){let a=n/Math.max(t,e);return new Fn(Math.round(e*a),Math.round(t*a))}function Co(e){return e.reduce((t,n)=>t.add(n),new Oe(0,0)).div(new Oe(e.length,e.length))}function gr(e,t,n){return Array(e).fill(0).map((a,r)=>t+r*n)}function er(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||e===0}function Ku(e){return er(e)&&e>=0&&e<=1}var Oe=class{constructor(t,n){this._x=t,this._y=n}get x(){return this._x}get y(){return this._y}add(t){return new Oe(this.x+t.x,this.y+t.y)}sub(t){return new Oe(this.x-t.x,this.y-t.y)}mul(t){return new Oe(this.x*t.x,this.y*t.y)}div(t){return new Oe(this.x/t.x,this.y/t.y)}abs(){return new Oe(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new Oe(Math.floor(this.x),Math.floor(this.y))}};var pt=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(er)}static assertIsValidBox(t,n,a=!1){if(!pt.isRect(t))throw new Error(`${n} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!a&&(t.width<0||t.height<0))throw new Error(`${n} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,n=!0){let a=t||{},r=[a.left,a.top,a.right,a.bottom].every(er),s=[a.x,a.y,a.width,a.height].every(er);if(!s&&!r)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(a)}`);let[i,o,l,u]=s?[a.x,a.y,a.width,a.height]:[a.left,a.top,a.right-a.left,a.bottom-a.top];pt.assertIsValidBox({x:i,y:o,width:l,height:u},"Box.constructor",n),this._x=i,this._y=o,this._width=l,this._height=u}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new Oe(this.left,this.top)}get topRight(){return new Oe(this.right,this.top)}get bottomLeft(){return new Oe(this.left,this.bottom)}get bottomRight(){return new Oe(this.right,this.bottom)}round(){let[t,n,a,r]=[this.x,this.y,this.width,this.height].map(s=>Math.round(s));return new pt({x:t,y:n,width:a,height:r})}floor(){let[t,n,a,r]=[this.x,this.y,this.width,this.height].map(s=>Math.floor(s));return new pt({x:t,y:n,width:a,height:r})}toSquare(){let{x:t,y:n,width:a,height:r}=this,s=Math.abs(a-r);return an&&(o=-d+n+a,d=n),c>t&&(l=-c+t+r,c=t),u<1&&(l=2-u,u=1),p<1&&(l=2-p,p=1),{dy:i,edy:l,dx:s,edx:o,y:p,ey:c,x:u,ex:d,w:a,h:r}}calibrate(t){return new pt({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Xu=class extends pt{constructor(t,n,a,r,s=!1){super({left:t,top:n,right:a,bottom:r},s)}};var Ns=class{constructor(t,n,a,r,s){this._imageDims=new Fn(s.width,s.height),this._score=t,this._classScore=n,this._className=a,this._box=new pt(r).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new pt(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new Ns(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}};var kt=class extends Ns{constructor(t,n,a){super(t,t,"",n,a)}forSize(t,n){let{score:a,relativeBox:r,imageDims:s}=super.forSize(t,n);return new kt(a,r,s)}};function GE(e,t,n=!0){let a=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),r=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)),s=a*r;return n?s/(e.area+t.area-s):s/Math.min(e.area,t.area)}function HE(e){let t=e.map(o=>o.x),n=e.map(o=>o.y),a=t.reduce((o,l)=>lloo({score:i,boxIndex:o})).sort((i,o)=>i.score-o.score).map(i=>i.boxIndex),s=[];for(;r.length>0;){let i=r.pop();s.push(i);let o=r,l=[];for(let u=0;ul[p]<=n)}return s}function yr(e,t){return O(()=>{let[n,a,r]=t,s=_n([...e.shape.slice(0,3),1],n,"float32"),i=_n([...e.shape.slice(0,3),1],a,"float32"),o=_n([...e.shape.slice(0,3),1],r,"float32"),l=Ze([s,i,o],3);return ce(e,l)})}function qE(e,t=!1){return O(()=>{let[n,a]=e.shape.slice(1);if(n===a)return e;let r=Math.abs(n-a),s=Math.round(r*(t?.5:1)),i=n>a?2:1,o=c=>{let h=e.shape.slice();return h[i]=c,_n(h,0,"float32")},l=o(s),u=r-l.shape[i],d=[t&&u?o(u):null,e,l].filter(c=>!!c).map(c=>oe(c,"float32"));return Ze(d,i)})}function Mge(e){let t=e.slice();for(let n=t.length-1;n>0;n--){let a=Math.floor(Math.random()*(n+1)),r=t[n];t[n]=t[a],t[a]=r}return t}function Zf(e){return 1/(1+Math.exp(-e))}function Oge(e){return Math.log(e/(1-e))}var Yu=class extends pt{constructor(t,n,a,r,s=!1){super({x:t,y:n,width:a,height:r},s)}};var Wue=.5,Vue=.43,Uue=.45,xa=class{constructor(t,n,a=new Oe(0,0)){let{width:r,height:s}=n;this._imgDims=new Fn(r,s),this._shift=a,this._positions=t.map(i=>i.mul(new Oe(r,s)).add(a))}get shift(){return new Oe(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map(t=>t.sub(this._shift).div(new Oe(this.imageWidth,this.imageHeight)))}forSize(t,n){return new this.constructor(this.relativePositions,{width:t,height:n})}shiftBy(t,n){return new this.constructor(this.relativePositions,this._imgDims,new Oe(t,n))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,n={}){if(t){let s=t instanceof kt?t.box.floor():new pt(t);return this.shiftBy(s.x,s.y).align(null,n)}let{useDlibAlignment:a,minBoxPadding:r}={useDlibAlignment:!1,minBoxPadding:.2,...n};return a?this.alignDlib():this.alignMinBbox(r)}alignDlib(){let t=this.getRefPointsForAlignment(),[n,a,r]=t,s=d=>r.sub(d).magnitude(),i=(s(n)+s(a))/2,o=Math.floor(i/Uue),l=Co(t),u=Math.floor(Math.max(0,l.x-Wue*o)),p=Math.floor(Math.max(0,l.y-Vue*o));return new Yu(u,p,Math.min(o,this.imageWidth+u),Math.min(o,this.imageHeight+p))}alignMinBbox(t){let n=HE(this.positions);return n.pad(n.width*t,n.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var KE=class extends xa{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],Co([t[3],t[4]])]}};var Qu=class extends xa{getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(Co)}};var pd=class{constructor(t,n){this._label=t,this._distance=n}get label(){return this._label}get distance(){return this._distance}toString(t=!0){return`${this.label}${t?` (${_o(this.distance)})`:""}`}};var cd=class extends pt{constructor(n,a){super(n);this._label=a}static assertIsValidLabeledBox(n,a){if(pt.assertIsValidBox(n,a),!er(n.label))throw new Error(`${a} - expected property label (${n.label}) to be a number`)}get label(){return this._label}};var Pr=class{constructor(t,n){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(n)||n.some(a=>!(a instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=n}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let n=t.descriptors.map(a=>new Float32Array(a));return new Pr(t.label,n)}};var XE=class extends cd{constructor(n,a,r,s){super(n,a);this._score=r,this._classScore=s}static assertIsValidPredictedBox(n,a){if(cd.assertIsValidLabeledBox(n,a),!Ku(n.score)||!Ku(n.classScore))throw new Error(`${a} - expected properties score (${n.score}) and (${n.classScore}) to be a number between [0, 1]`)}get score(){return this._score}get classScore(){return this._classScore}};function Or(e){return e.detection instanceof kt}function Ju(e,t){return{...e,...{detection:t}}}function W0(){let e=window.fetch;if(!e)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:e,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function dd(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function eg(e){let t="";if(!e&&dd())try{e=OA("fs")}catch(a){t=a.toString()}return{readFile:e?a=>new Promise((r,s)=>{e.readFile(a,(i,o)=>i?s(i):r(o))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function V0(){let e=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,n=global.Video||global.HTMLVideoElement,a=()=>{if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},r=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},s=()=>{if(n)return new n;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},i=global.fetch,o=eg();return{Canvas:e||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:a,createImageElement:r,createVideoElement:s,fetch:i,...o}}function U0(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var on;function Gue(){if(!on)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return on}function G0(e){on=e}function H0(){return U0()?G0(W0()):dd()?G0(V0()):null}function Hue(e){if(on||H0(),!on)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=on.Canvas,Image:n=on.Image}=e;on.Canvas=t,on.Image=n,on.createCanvasElement=e.createCanvasElement||(()=>new t),on.createImageElement=e.createImageElement||(()=>new n),on.ImageData=e.ImageData||on.ImageData,on.Video=e.Video||on.Video,on.fetch=e.fetch||on.fetch,on.readFile=e.readFile||on.readFile}var at={getEnv:Gue,setEnv:G0,initialize:H0,createBrowserEnv:W0,createFileSystem:eg,createNodejsEnv:V0,monkeyPatch:Hue,isBrowser:U0,isNodejs:dd};H0();function Zu(e){return!at.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function aa(e){let{Canvas:t,CanvasRenderingContext2D:n}=at.getEnv();if(e instanceof n)return e;let a=Zu(e);if(!(a instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let r=a.getContext("2d");if(!r)throw new Error("resolveContext2d - canvas 2d context is null");return r}var j0=(r=>(r.TOP_LEFT="TOP_LEFT",r.TOP_RIGHT="TOP_RIGHT",r.BOTTOM_LEFT="BOTTOM_LEFT",r.BOTTOM_RIGHT="BOTTOM_RIGHT",r))(j0||{}),ep=class{constructor(t={}){let{anchorPosition:n,backgroundColor:a,fontColor:r,fontSize:s,fontStyle:i,padding:o}=t;this.anchorPosition=n||"TOP_LEFT",this.backgroundColor=a||"rgba(0, 0, 0, 0.5)",this.fontColor=r||"rgba(255, 255, 255, 1)",this.fontSize=s||14,this.fontStyle=i||"Georgia",this.padding=o||4}},Lr=class{constructor(t,n,a={}){this.text=typeof t=="string"?[t]:t instanceof Lr?t.text:t,this.anchor=n,this.options=new ep(a)}measureWidth(t){let{padding:n}=this.options;return this.text.map(a=>t.measureText(a).width).reduce((a,r)=>a{let m=l+d.x,f=l+d.y+(h+1)*i;a.fillText(c,m,f)})}};var tg=class{constructor(t={}){let{boxColor:n,lineWidth:a,label:r,drawLabelOptions:s}=t;this.boxColor=n||"rgba(0, 0, 255, 1)",this.lineWidth=a||2,this.label=r;let i={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new ep({...i,...s})}},hd=class{constructor(t,n={}){this.box=new pt(t),this.options=new tg(n)}draw(t){let n=aa(t),{boxColor:a,lineWidth:r}=this.options,{x:s,y:i,width:o,height:l}=this.box;n.strokeStyle=a,n.lineWidth=r,n.strokeRect(s,i,o,l);let{label:u}=this.options;u&&new Lr([u],{x:s-r/2,y:i},this.options.drawLabelOptions).draw(t)}};function jue(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof kt?a.score:Or(a)?a.detection.score:void 0,s=a instanceof kt?a.box:Or(a)?a.detection.box:new pt(a),i=r?`${_o(r)}`:void 0;new hd(s,{label:i}).draw(e)})}function ng(e){let{Image:t,Video:n}=at.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function YE(e){return new Promise((t,n)=>{(e instanceof at.getEnv().Canvas||ng(e))&&t(null);function a(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",r),s.currentTarget.removeEventListener("error",a),n(s))}function r(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",r),s.currentTarget.removeEventListener("error",a),t(s))}e.addEventListener("load",r),e.addEventListener("error",a)})}function QE(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToImage - expected buf to be of type: Blob"));let a=new FileReader;a.onload=()=>{typeof a.result!="string"&&n(new Error("bufferToImage - expected reader.result to be a string, in onload"));let r=at.getEnv().createImageElement();r.onload=()=>t(r),r.onerror=n,r.src=a.result},a.onerror=n,a.readAsDataURL(e)})}function tp(e){let{Image:t,Video:n}=at.getEnv();return e instanceof t?new Fn(e.naturalWidth,e.naturalHeight):e instanceof n?new Fn(e.videoWidth,e.videoHeight):new Fn(e.width,e.height)}function np({width:e,height:t}){let{createCanvasElement:n}=at.getEnv(),a=n();return a.width=e,a.height=t,a}function ag(e,t){let{ImageData:n}=at.getEnv();if(!(e instanceof n)&&!ng(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:a,height:r}=t||tp(e),s=np({width:a,height:r});return e instanceof n?aa(s).putImageData(e,0,0):aa(s).drawImage(e,0,0,a,r),s}async function JE(e,t){let n=t||at.getEnv().createCanvasElement(),[a,r,s]=e.shape.slice(ba(e)?1:0),i=O(()=>e.as3D(a,r,s).toInt());return await yo.toPixels(i,n),i.dispose(),n}function q0(e){let{Image:t,Canvas:n,Video:a}=at.getEnv();return e instanceof t||e instanceof n||e instanceof a}function ZE(e,t,n=!1){let{Image:a,Canvas:r}=at.getEnv();if(!(e instanceof a||e instanceof r))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return np({width:1,height:1});let s=tp(e),i=t/Math.max(s.height,s.width),o=i*s.width,l=i*s.height,u=np({width:t,height:t}),p=e instanceof r?e:ag(e),d=Math.abs(o-l)/2,c=n&&o0&&p.height>0&&aa(u).drawImage(p,c,h,o,l),u}var zr=class{constructor(t,n=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=n,this._batchSize=t.length,t.forEach((a,r)=>{if(Mr(a)){this._imageTensors[r]=a,this._inputDimensions[r]=a.shape;return}if(ba(a)){let i=a.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[r]=a,this._inputDimensions[r]=a.shape.slice(1);return}let s=a instanceof at.getEnv().Canvas?a:ag(a);this._canvases[r]=s,this._inputDimensions[r]=[s.height,s.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return gr(this.batchSize,0,1).map((t,n)=>this.getReshapedInputDimensions(n))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let n=this.getInputWidth(t),a=this.getInputHeight(t);return B0({width:n,height:a},this.inputSize)}toBatchTensor(t,n=!0){return this._inputSize=t,O(()=>{let a=gr(this.batchSize,0,1).map(s=>{let i=this.getInput(s);if(i instanceof Fe){let o=ba(i)?i:mn(i);return o=qE(o,n),(o.shape[1]!==t||o.shape[2]!==t)&&(o=Ln.resizeBilinear(o,[t,t],!1,!1)),o.as3D(t,t,3)}if(i instanceof at.getEnv().Canvas)return yo.fromPixels(ZE(i,t,n));throw new Error(`toBatchTensor - at batchIdx ${s}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)});return Mt(a.map(s=>oe(s,"float32"))).as4D(this.batchSize,t,t,3)})}};async function It(e){if(e instanceof zr)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");let n=r=>Array.isArray(e)?` at input index ${r}:`:"",a=t.map(Zu);return a.forEach((r,s)=>{if(!q0(r)&&!Mr(r)&&!ba(r))throw typeof t[s]=="string"?new Error(`toNetInput -${n(s)} string passed, but could not resolve HTMLElement for element id ${t[s]}`):new Error(`toNetInput -${n(s)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(ba(r)){let i=r.shape[0];if(i!==1)throw new Error(`toNetInput -${n(s)} tf.Tensor4D with batchSize ${i} passed, but not supported in input array`)}}),await Promise.all(a.map(r=>q0(r)&&YE(r))),new zr(a,Array.isArray(e))}async function md(e,t){let{Canvas:n}=at.getEnv(),a=e;if(!(e instanceof n)){let i=await It(e);if(i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let o=i.getInput(0);a=o instanceof n?o:await JE(o)}let r=aa(a);return t.map(i=>i instanceof kt?i.forSize(a.width,a.height).box.floor():i).map(i=>i.clipAtImageBorders(a.width,a.height)).map(({x:i,y:o,width:l,height:u})=>{let p=np({width:l,height:u});return l>0&&u>0&&aa(p).putImageData(r.getImageData(i,o,l,u),0,0),p})}async function fd(e,t){if(!Mr(e)&&!ba(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(ba(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return O(()=>{let[n,a,r]=e.shape.slice(ba(e)?1:0);return t.map(o=>o instanceof kt?o.forSize(a,n).box:o).map(o=>o.clipAtImageBorders(a,n)).filter(o=>o.width>0&&o.height>0).map(({x:o,y:l,width:u,height:p})=>Du(e.as3D(n,a,r),[l,o,0],[p,u,r]))})}async function Ts(e,t){let{fetch:n}=at.getEnv(),a=await n(e,t);if(!(a.status<400))throw new Error(`failed to fetch: (${a.status}) ${a.statusText}, from url: ${a.url}`);return a}async function kxe(e){let t=await Ts(e),n=await t.blob();if(!n.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${n.type}, for url: ${t.url}`);return QE(n)}async function eF(e){return(await Ts(e)).json()}async function _xe(e){return new Float32Array(await(await Ts(e)).arrayBuffer())}function tF(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToVideo - expected buf to be of type: Blob"));let a=at.getEnv().createVideoElement();a.oncanplay=()=>t(a),a.onerror=n,a.playsInline=!0,a.muted=!0,a.src=URL.createObjectURL(e),a.play()})}async function Dxe(e){let t=await Ts(e),n=await t.blob();if(!n.type.startsWith("video/"))throw new Error(`fetchVideo - expected blob type to be of type video/*, instead have: ${n.type}, for url: ${t.url}`);return tF(n)}function rg(e,t){let n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if(e==="/")return{modelBaseUri:"/",manifestUri:`/${n}`};let a=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"";e=e.replace(a,"");let r=e.split("/").filter(o=>o),s=e.endsWith(".json")?r[r.length-1]:n,i=a+(e.endsWith(".json")?r.slice(0,r.length-1):r).join("/");return i=e.startsWith("/")?`/${i}`:i,{modelBaseUri:i,manifestUri:i==="/"?`/${s}`:`${i}/${s}`}}async function nF(e,t){let{manifestUri:n,modelBaseUri:a}=rg(e,t),r=await eF(n);return en.loadWeights(r,a)}function Bxe(e,t,n=!1){let{width:a,height:r}=n?tp(t):t;return e.width=a,e.height=r,{width:a,height:r}}var dn=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:n,objProp:a}=this.traversePropertyPath(t);return n[a]}reassignParamFromPath(t,n){let{obj:a,objProp:r}=this.traversePropertyPath(t);a[r].dispose(),a[r]=n}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof as)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof as))}variable(){this.getFrozenParams().forEach(({path:t,tensor:n})=>{this.reassignParamFromPath(t,n.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:n})=>{let a=Qn(n.dataSync());n.dispose(),this.reassignParamFromPath(t,a)})}dispose(t=!0){this.getParamList().forEach(n=>{if(t&&n.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${n.path}`);n.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,n)=>t.concat(n)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let n=await nF(t,this.getDefaultModelName());this.loadFromWeightMap(n)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:n}=at.getEnv(),{manifestUri:a,modelBaseUri:r}=rg(t,this.getDefaultModelName()),s=u=>Promise.all(u.map(p=>n(p).then(d=>d.buffer))),i=en.weightsLoaderFactory(s),o=JSON.parse((await n(a)).toString()),l=await i(o,r);this.loadFromWeightMap(l)}loadFromWeightMap(t){let{paramMappings:n,params:a}=this.extractParamsFromWeightMap(t);this._paramMappings=n,this._params=a}extractWeights(t){let{paramMappings:n,params:a}=this.extractParams(t);this._paramMappings=n,this._params=a}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let n=t.split("/").reduce((s,i)=>{if(!s.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${t}`);return{obj:s.nextObj,objProp:i,nextObj:s.nextObj[i]}},{nextObj:this.params}),{obj:a,objProp:r}=n;if(!a||!r||!(a[r]instanceof Fe))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:a,objProp:r}}};function jn(e,t,n){return O(()=>{let a=xo(e,t.depthwise_filter,t.pointwise_filter,n,"same");return a=J(a,t.bias),a})}function sg(e,t,n=!1){return O(()=>{let a=Xe(n?J(Rt(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):jn(e,t.conv0,[2,2])),r=jn(a,t.conv1,[1,1]),s=Xe(J(a,r)),i=jn(s,t.conv2,[1,1]);return Xe(J(a,J(r,i)))})}function gd(e,t,n=!1,a=!0){return O(()=>{let r=Xe(n?J(Rt(e,t.conv0.filters,a?[2,2]:[1,1],"same"),t.conv0.bias):jn(e,t.conv0,a?[2,2]:[1,1])),s=jn(r,t.conv1,[1,1]),i=Xe(J(r,s)),o=jn(i,t.conv2,[1,1]),l=Xe(J(r,J(s,o))),u=jn(l,t.conv3,[1,1]);return Xe(J(r,J(s,J(o,u))))})}function Eo(e,t,n="same",a=!1){return O(()=>{let r=J(Rt(e,t.filters,[1,1],n),t.bias);return a?Xe(r):r})}function An(e,t){Object.keys(e).forEach(n=>{t.some(a=>a.originalPath===n)||e[n].dispose()})}function ap(e,t){return(n,a,r,s)=>{let i=Ja(e(n*a*r*r),[r,r,n,a]),o=qe(e(a));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:o}}}function ig(e,t){return(n,a,r)=>{let s=Ha(e(n*a),[n,a]),i=qe(e(a));return t.push({paramPath:`${r}/weights`},{paramPath:`${r}/bias`}),{weights:s,bias:i}}}var yd=class{constructor(t,n,a){this.depthwise_filter=t;this.pointwise_filter=n;this.bias=a}};function rp(e,t){return(n,a,r)=>{let s=Ja(e(9*n),[3,3,n,1]),i=Ja(e(n*a),[1,1,n,a]),o=qe(e(a));return t.push({paramPath:`${r}/depthwise_filter`},{paramPath:`${r}/pointwise_filter`},{paramPath:`${r}/bias`}),new yd(s,i,o)}}function sp(e){return t=>{let n=e(`${t}/depthwise_filter`,4),a=e(`${t}/pointwise_filter`,4),r=e(`${t}/bias`,1);return new yd(n,a,r)}}function ra(e,t){return(n,a,r)=>{let s=e[n];if(!To(s,a))throw new Error(`expected weightMap[${n}] to be a Tensor${a}D, instead have ${s}`);return t.push({originalPath:n,paramPath:r||n}),s}}function $n(e){let t=e;function n(r){let s=t.slice(0,r);return t=t.slice(r),s}function a(){return t}return{extractWeights:n,getRemainingWeights:a}}function og(e,t){let n=ap(e,t),a=rp(e,t);function r(i,o,l,u=!1){let p=u?n(i,o,3,`${l}/conv0`):a(i,o,`${l}/conv0`),d=a(o,o,`${l}/conv1`),c=a(o,o,`${l}/conv2`);return{conv0:p,conv1:d,conv2:c}}function s(i,o,l,u=!1){let{conv0:p,conv1:d,conv2:c}=r(i,o,l,u),h=a(o,o,`${l}/conv3`);return{conv0:p,conv1:d,conv2:c,conv3:h}}return{extractDenseBlock3Params:r,extractDenseBlock4Params:s}}function aF(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),{extractDenseBlock4Params:r}=og(n,t),s=r(3,32,"dense0",!0),i=r(32,64,"dense1"),o=r(64,128,"dense2"),l=r(128,256,"dense3");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o,dense3:l}}}function lg(e){return t=>{let n=e(`${t}/filters`,4),a=e(`${t}/bias`,1);return{filters:n,bias:a}}}function ug(e,t){let n=ra(e,t),a=lg(n),r=sp(n);function s(o,l=!1){let u=l?a(`${o}/conv0`):r(`${o}/conv0`),p=r(`${o}/conv1`),d=r(`${o}/conv2`);return{conv0:u,conv1:p,conv2:d}}function i(o,l=!1){let u=l?a(`${o}/conv0`):r(`${o}/conv0`),p=r(`${o}/conv1`),d=r(`${o}/conv2`),c=r(`${o}/conv3`);return{conv0:u,conv1:p,conv2:d,conv3:c}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:i}}function rF(e){let t=[],{extractDenseBlock4Params:n}=ug(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return An(e,t),{params:a,paramMappings:t}}var ip=class extends dn{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(112,!0),"float32"),s=yr(a,[122.782,117.001,104.298]).div(255),i=gd(s,n.dense0,!0);return i=gd(i,n.dense1),i=gd(i,n.dense2),i=gd(i,n.dense3),i=fa(i,[7,7],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await It(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return rF(t)}extractParams(t){return aF(t)}};function bd(e,t){return O(()=>J(De(e,t.weights),t.bias))}function sF(e,t,n){let a=[],{extractWeights:r,getRemainingWeights:s}=$n(e),o=ig(r,a)(t,n,"fc");if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:a,params:{fc:o}}}function iF(e){let t=[],n=ra(e,t);function a(s){let i=n(`${s}/weights`,2),o=n(`${s}/bias`,1);return{weights:i,bias:o}}let r={fc:a("fc")};return An(e,t),{params:r,paramMappings:t}}function pg(e){let t={},n={};return Object.keys(e).forEach(a=>{let r=a.startsWith("fc")?n:t;r[a]=e[a]}),{featureExtractorMap:t,classifierMap:n}}var op=class extends dn{constructor(n,a){super(n);this._faceFeatureExtractor=a}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:a}=this;if(!a)throw new Error(`${this._name} - load model before inference`);return O(()=>{let r=n instanceof zr?this.faceFeatureExtractor.forwardInput(n):n;return bd(r.as2D(r.shape[0],-1),a.fc)})}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:a,paramMappings:r}=this.extractClassifierParams(n);this._params=a,this._paramMappings=r}extractClassifierParams(n){return sF(n,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=pg(n);return this.faceFeatureExtractor.loadFromWeightMap(a),iF(r)}extractParams(n){let a=this.getClassifierChannelsIn(),r=this.getClassifierChannelsOut(),s=r*a+r,i=n.slice(0,n.length-s),o=n.slice(n.length-s);return this.faceFeatureExtractor.extractWeights(i),this.extractClassifierParams(o)}};var oF=["neutral","happy","sad","angry","fearful","disgusted","surprised"],_s=class{constructor(t){this.neutral=0;this.happy=0;this.sad=0;this.angry=0;this.fearful=0;this.disgusted=0;this.surprised=0;if(t.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${t.length}`);oF.forEach((n,a)=>{this[n]=t[a]})}asSortedArray(){return oF.map(t=>({expression:t,probability:this[t]})).sort((t,n)=>n.probability-t.probability)}};var cg=class extends op{constructor(t=new ip){super("FaceExpressionNet",t)}forwardInput(t){return O(()=>Qa(this.runNet(t)))}async forward(t){return this.forwardInput(await It(t))}async predictExpressions(t){let n=await It(t),a=await this.forwardInput(n),r=await Promise.all(ht(a).map(async i=>{let o=i.dataSync();return i.dispose(),o}));a.dispose();let s=r.map(i=>new _s(i));return n.isBatchInput?s:s[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function lF(e){return e.expressions instanceof _s}function K0(e,t){return{...e,...{expressions:t}}}function que(e,t,n=.1,a){(Array.isArray(t)?t:[t]).forEach(s=>{let i=s instanceof _s?s:lF(s)?s.expressions:void 0;if(!i)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let l=i.asSortedArray().filter(d=>d.probability>n),u=Or(s)?s.detection.box.bottomLeft:a||new Oe(0,0);new Lr(l.map(d=>`${d.expression} (${_o(d.probability)})`),u).draw(e)})}function lp(e){return Or(e)&&e.landmarks instanceof xa&&e.unshiftedLandmarks instanceof xa&&e.alignedRect instanceof kt}function Kue(e){let t=(o,l,u,p)=>Math.atan2(p-l,u-o)%Math.PI,n=o=>o*180/Math.PI,a={roll:void 0,pitch:void 0,yaw:void 0};if(!e||!e._positions||e._positions.length!==68)return a;let r=e._positions;a.roll=-t(r[36]._x,r[36]._y,r[45]._x,r[45]._y),a.pitch=t(0,Math.abs(r[0]._x-r[30]._x)/r[30]._x,Math.PI,Math.abs(r[16]._x-r[30]._x)/r[30]._x);let s=r.reduce((o,l)=>oo>l._y?o:l._y,-1/0);return a.yaw=Math.PI*(e._imgDims._height/(i-s)/1.4-1),a}function xd(e,t){let{box:n}=e.detection,a=t.shiftBy(n.x,n.y),r=a.align(),{imageDims:s}=e.detection,i=new kt(e.detection.score,r.rescale(s.reverse()),s),o=Kue(t);return{...e,...{landmarks:a,unshiftedLandmarks:t,alignedRect:i,angle:o}}}var dg=class{constructor(t={}){let{drawLines:n=!0,drawPoints:a=!0,lineWidth:r,lineColor:s,pointSize:i,pointColor:o}=t;this.drawLines=n,this.drawPoints=a,this.lineWidth=r||1,this.pointSize=i||2,this.lineColor=s||"rgba(0, 255, 255, 1)",this.pointColor=o||"rgba(255, 0, 255, 1)"}},hg=class{constructor(t,n={}){this.faceLandmarks=t,this.options=new dg(n)}draw(t){let n=aa(t),{drawLines:a,drawPoints:r,lineWidth:s,lineColor:i,pointSize:o,pointColor:l}=this.options;if(a&&this.faceLandmarks instanceof Qu&&(n.strokeStyle=i,n.lineWidth=s,Rr(n,this.faceLandmarks.getJawOutline()),Rr(n,this.faceLandmarks.getLeftEyeBrow()),Rr(n,this.faceLandmarks.getRightEyeBrow()),Rr(n,this.faceLandmarks.getNose()),Rr(n,this.faceLandmarks.getLeftEye(),!0),Rr(n,this.faceLandmarks.getRightEye(),!0),Rr(n,this.faceLandmarks.getMouth(),!0)),r){n.strokeStyle=l,n.fillStyle=l;let u=p=>{n.beginPath(),n.arc(p.x,p.y,o,0,2*Math.PI),n.fill()};this.faceLandmarks.positions.forEach(u)}}};function Xue(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof xa?a:lp(a)?a.landmarks:void 0;if(!r)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new hg(r).draw(e)})}var pF="1.6.9";function Jue(e,t){let n=ap(e,t),a=rp(e,t);function r(i,o,l){let u=a(i,o,`${l}/separable_conv0`),p=a(o,o,`${l}/separable_conv1`),d=n(i,o,1,`${l}/expansion_conv`);return{separable_conv0:u,separable_conv1:p,expansion_conv:d}}function s(i,o){let l=a(i,i,`${o}/separable_conv0`),u=a(i,i,`${o}/separable_conv1`),p=a(i,i,`${o}/separable_conv2`);return{separable_conv0:l,separable_conv1:u,separable_conv2:p}}return{extractConvParams:n,extractSeparableConvParams:a,extractReductionBlockParams:r,extractMainBlockParams:s}}function cF(e,t){let n=[],{extractWeights:a,getRemainingWeights:r}=$n(e),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:o,extractMainBlockParams:l}=Jue(a,n),u=s(3,32,3,"entry_flow/conv_in"),p=o(32,64,"entry_flow/reduction_block_0"),d=o(64,128,"entry_flow/reduction_block_1"),c={conv_in:u,reduction_block_0:p,reduction_block_1:d},h={};gr(t,0,1).forEach(y=>{h[`main_block_${y}`]=l(128,`middle_flow/main_block_${y}`)});let m=o(128,256,"exit_flow/reduction_block"),f=i(256,512,"exit_flow/separable_conv"),g={reduction_block:m,separable_conv:f};if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:n,params:{entry_flow:c,middle_flow:h,exit_flow:g}}}function Zue(e,t){let n=ra(e,t),a=lg(n),r=sp(n);function s(o){let l=r(`${o}/separable_conv0`),u=r(`${o}/separable_conv1`),p=a(`${o}/expansion_conv`);return{separable_conv0:l,separable_conv1:u,expansion_conv:p}}function i(o){let l=r(`${o}/separable_conv0`),u=r(`${o}/separable_conv1`),p=r(`${o}/separable_conv2`);return{separable_conv0:l,separable_conv1:u,separable_conv2:p}}return{extractConvParams:a,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:i}}function dF(e,t){let n=[],{extractConvParams:a,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:i}=Zue(e,n),o=a("entry_flow/conv_in"),l=s("entry_flow/reduction_block_0"),u=s("entry_flow/reduction_block_1"),p={conv_in:o,reduction_block_0:l,reduction_block_1:u},d={};gr(t,0,1).forEach(f=>{d[`main_block_${f}`]=i(`middle_flow/main_block_${f}`)});let c=s("exit_flow/reduction_block"),h=r("exit_flow/separable_conv"),m={reduction_block:c,separable_conv:h};return An(e,n),{params:{entry_flow:p,middle_flow:d,exit_flow:m},paramMappings:n}}function hF(e,t,n){return J(Rt(e,t.filters,n,"same"),t.bias)}function X0(e,t,n=!0){let a=n?Xe(e):e;return a=jn(a,t.separable_conv0,[1,1]),a=jn(Xe(a),t.separable_conv1,[1,1]),a=Pt(a,[3,3],[2,2],"same"),a=J(a,hF(e,t.expansion_conv,[2,2])),a}function epe(e,t){let n=jn(Xe(e),t.separable_conv0,[1,1]);return n=jn(Xe(n),t.separable_conv1,[1,1]),n=jn(Xe(n),t.separable_conv2,[1,1]),n=J(n,e),n}var mg=class extends dn{constructor(n){super("TinyXception");this._numMainBlocks=n}forwardInput(n){let{params:a}=this;if(!a)throw new Error("TinyXception - load model before inference");return O(()=>{let r=oe(n.toBatchTensor(112,!0),"float32"),i=yr(r,[122.782,117.001,104.298]).div(255),o=Xe(hF(i,a.entry_flow.conv_in,[2,2]));return o=X0(o,a.entry_flow.reduction_block_0,!1),o=X0(o,a.entry_flow.reduction_block_1),gr(this._numMainBlocks,0,1).forEach(l=>{o=epe(o,a.middle_flow[`main_block_${l}`])}),o=X0(o,a.exit_flow.reduction_block),o=Xe(jn(o,a.exit_flow.separable_conv,[1,1])),o})}async forward(n){return this.forwardInput(await It(n))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(n){return dF(n,this._numMainBlocks)}extractParams(n){return cF(n,this._numMainBlocks)}};function mF(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),r=ig(n,t),s=r(512,1,"fc/age"),i=r(512,2,"fc/gender");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{fc:{age:s,gender:i}}}}function fF(e){let t=[],n=ra(e,t);function a(s){let i=n(`${s}/weights`,2),o=n(`${s}/bias`,1);return{weights:i,bias:o}}let r={fc:{age:a("fc/age"),gender:a("fc/gender")}};return An(e,t),{params:r,paramMappings:t}}var Y0=(n=>(n.FEMALE="female",n.MALE="male",n))(Y0||{});var fg=class extends dn{constructor(n=new mg(2)){super("AgeGenderNet");this._faceFeatureExtractor=n}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:a}=this;if(!a)throw new Error(`${this._name} - load model before inference`);return O(()=>{let r=n instanceof zr?this.faceFeatureExtractor.forwardInput(n):n,s=fa(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),i=bd(s,a.fc.age).as1D(),o=bd(s,a.fc.gender);return{age:i,gender:o}})}forwardInput(n){return O(()=>{let{age:a,gender:r}=this.runNet(n);return{age:a,gender:Qa(r)}})}async forward(n){return this.forwardInput(await It(n))}async predictAgeAndGender(n){let a=await It(n),r=await this.forwardInput(a),s=ht(r.age),i=ht(r.gender),o=s.map((u,p)=>({ageTensor:u,genderTensor:i[p]})),l=await Promise.all(o.map(async({ageTensor:u,genderTensor:p})=>{let d=u.dataSync()[0],c=p.dataSync()[0],h=c>.5,m=h?"male":"female",f=h?c:1-c;return u.dispose(),p.dispose(),{age:d,gender:m,genderProbability:f}}));return r.age.dispose(),r.gender.dispose(),a.isBatchInput?l:l[0]}getDefaultModelName(){return"age_gender_model"}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:a,paramMappings:r}=this.extractClassifierParams(n);this._params=a,this._paramMappings=r}extractClassifierParams(n){return mF(n)}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=pg(n);return this.faceFeatureExtractor.loadFromWeightMap(a),fF(r)}extractParams(n){let r=n.slice(0,n.length-1539),s=n.slice(n.length-1539);return this.faceFeatureExtractor.extractWeights(r),this.extractClassifierParams(s)}};var up=class extends op{postProcess(t,n,a){let r=a.map(({width:i,height:o})=>{let l=n/Math.max(o,i);return{width:i*l,height:o*l}}),s=r.length;return O(()=>{let i=(d,c)=>Mt([_n([68],d,"float32"),_n([68],c,"float32")],1).as2D(1,136).as1D(),o=(d,c)=>{let{width:h,height:m}=r[d];return c(h,m)?Math.abs(h-m)/2:0},l=d=>o(d,(c,h)=>co(d,(c,h)=>hi(l(c),u(c))))).div(Mt(Array.from(Array(s),(d,c)=>i(r[c].width,r[c].height))))})}forwardInput(t){return O(()=>{let n=this.runNet(t);return this.postProcess(n,t.inputSize,t.inputDimensions.map(([a,r])=>({height:a,width:r})))})}async forward(t){return this.forwardInput(await It(t))}async detectLandmarks(t){let n=await It(t),a=O(()=>ht(this.forwardInput(n))),r=await Promise.all(a.map(async(s,i)=>{let o=Array.from(s.dataSync()),l=o.filter((p,d)=>Qf(d)),u=o.filter((p,d)=>!Qf(d));return new Qu(Array(68).fill(0).map((p,d)=>new Oe(l[d],u[d])),{height:n.getInputHeight(i),width:n.getInputWidth(i)})}));return a.forEach(s=>s.dispose()),n.isBatchInput?r:r[0]}getClassifierChannelsOut(){return 136}};var pp=class extends up{constructor(t=new ip){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function gF(e){let t=[],{extractDenseBlock3Params:n}=ug(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return An(e,t),{params:a,paramMappings:t}}function yF(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),{extractDenseBlock3Params:r}=og(n,t),s=r(3,32,"dense0",!0),i=r(32,64,"dense1"),o=r(64,128,"dense2");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o}}}var gg=class extends dn{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(112,!0),"float32"),s=yr(a,[122.782,117.001,104.298]).div(255),i=sg(s,n.dense0,!0);return i=sg(i,n.dense1),i=sg(i,n.dense2),i=fa(i,[14,14],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await It(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return gF(t)}extractParams(t){return yF(t)}};var yg=class extends up{constructor(t=new gg){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var bF=class extends pp{};function xF(e,t){return J(B(e,t.weights),t.biases)}function Q0(e,t,n,a,r="same"){let{filters:s,bias:i}=t.conv,o=Rt(e,s,n,r);return o=J(o,i),o=xF(o,t.scale),a?Xe(o):o}function vF(e,t){return Q0(e,t,[1,1],!0)}function J0(e,t){return Q0(e,t,[1,1],!1)}function bg(e,t){return Q0(e,t,[2,2],!0,"valid")}function tpe(e,t){function n(o,l,u){let p=e(o),d=p.length/(l*u*u);if(z0(d))throw new Error(`depth has to be an integer: ${d}, weights.length: ${p.length}, numFilters: ${l}, filterSize: ${u}`);return O(()=>Ae(Ja(p,[l,d,u,u]),[2,3,1,0]))}function a(o,l,u,p){let d=n(o,l,u),c=qe(e(l));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/bias`}),{filters:d,bias:c}}function r(o,l){let u=qe(e(o)),p=qe(e(o));return t.push({paramPath:`${l}/weights`},{paramPath:`${l}/biases`}),{weights:u,biases:p}}function s(o,l,u,p){let d=a(o,l,u,`${p}/conv`),c=r(l,`${p}/scale`);return{conv:d,scale:c}}function i(o,l,u,p,d=!1){let c=s((d?.5:1)*o,l,u,`${p}/conv1`),h=s(o,l,u,`${p}/conv2`);return{conv1:c,conv2:h}}return{extractConvLayerParams:s,extractResidualLayerParams:i}}function wF(e){let{extractWeights:t,getRemainingWeights:n}=$n(e),a=[],{extractConvLayerParams:r,extractResidualLayerParams:s}=tpe(t,a),i=r(4704,32,7,"conv32_down"),o=s(9216,32,3,"conv32_1"),l=s(9216,32,3,"conv32_2"),u=s(9216,32,3,"conv32_3"),p=s(36864,64,3,"conv64_down",!0),d=s(36864,64,3,"conv64_1"),c=s(36864,64,3,"conv64_2"),h=s(36864,64,3,"conv64_3"),m=s(147456,128,3,"conv128_down",!0),f=s(147456,128,3,"conv128_1"),g=s(147456,128,3,"conv128_2"),y=s(589824,256,3,"conv256_down",!0),b=s(589824,256,3,"conv256_1"),x=s(589824,256,3,"conv256_2"),v=s(589824,256,3,"conv256_down_out"),k=O(()=>Ae(Ha(t(256*128),[128,256]),[1,0]));if(a.push({paramPath:"fc"}),n().length!==0)throw new Error(`weights remaing after extract: ${n().length}`);return{params:{conv32_down:i,conv32_1:o,conv32_2:l,conv32_3:u,conv64_down:p,conv64_1:d,conv64_2:c,conv64_3:h,conv128_down:m,conv128_1:f,conv128_2:g,conv256_down:y,conv256_1:b,conv256_2:x,conv256_down_out:v,fc:k},paramMappings:a}}function npe(e,t){let n=ra(e,t);function a(i){let o=n(`${i}/scale/weights`,1),l=n(`${i}/scale/biases`,1);return{weights:o,biases:l}}function r(i){let o=n(`${i}/conv/filters`,4),l=n(`${i}/conv/bias`,1),u=a(i);return{conv:{filters:o,bias:l},scale:u}}function s(i){return{conv1:r(`${i}/conv1`),conv2:r(`${i}/conv2`)}}return{extractConvLayerParams:r,extractResidualLayerParams:s}}function kF(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:a}=npe(e,t),r=n("conv32_down"),s=a("conv32_1"),i=a("conv32_2"),o=a("conv32_3"),l=a("conv64_down"),u=a("conv64_1"),p=a("conv64_2"),d=a("conv64_3"),c=a("conv128_down"),h=a("conv128_1"),m=a("conv128_2"),f=a("conv256_down"),g=a("conv256_1"),y=a("conv256_2"),b=a("conv256_down_out"),{fc:x}=e;if(t.push({originalPath:"fc",paramPath:"fc"}),!L0(x))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${x}`);let v={conv32_down:r,conv32_1:s,conv32_2:i,conv32_3:o,conv64_down:l,conv64_1:u,conv64_2:p,conv64_3:d,conv128_down:c,conv128_1:h,conv128_2:m,conv256_down:f,conv256_1:g,conv256_2:y,conv256_down_out:b,fc:x};return An(e,t),{params:v,paramMappings:t}}function tr(e,t){let n=vF(e,t.conv1);return n=J0(n,t.conv2),n=J(n,e),n=Xe(n),n}function vd(e,t){let n=bg(e,t.conv1);n=J0(n,t.conv2);let a=fa(e,2,2,"valid"),r=St(a.shape),s=a.shape[3]!==n.shape[3];if(a.shape[1]!==n.shape[1]||a.shape[2]!==n.shape[2]){let o=[...n.shape];o[1]=1;let l=St(o);n=Ze([n,l],1);let u=[...n.shape];u[2]=1;let p=St(u);n=Ze([n,p],2)}return a=s?Ze([a,r],3):a,n=J(a,n),n=Xe(n),n}var cp=class extends dn{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(150,!0),"float32"),s=yr(a,[122.782,117.001,104.298]).div(255),i=bg(s,n.conv32_down);i=Pt(i,3,2,"valid"),i=tr(i,n.conv32_1),i=tr(i,n.conv32_2),i=tr(i,n.conv32_3),i=vd(i,n.conv64_down),i=tr(i,n.conv64_1),i=tr(i,n.conv64_2),i=tr(i,n.conv64_3),i=vd(i,n.conv128_down),i=tr(i,n.conv128_1),i=tr(i,n.conv128_2),i=vd(i,n.conv256_down),i=tr(i,n.conv256_1),i=tr(i,n.conv256_2),i=vd(i,n.conv256_down_out);let o=i.mean([1,2]);return De(o,n.fc)})}async forward(t){return this.forwardInput(await It(t))}async computeFaceDescriptor(t){var s;if((s=t==null?void 0:t.shape)!=null&&s.some(i=>i<=0))return new Float32Array(128);let n=await It(t),a=O(()=>ht(this.forwardInput(n))),r=await Promise.all(a.map(i=>i.data()));return a.forEach(i=>i.dispose()),n.isBatchInput?r:r[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return kF(t)}extractParams(t){return wF(t)}};function dke(e){let t=new cp;return t.extractWeights(e),t}function Z0(e,t){return{...e,...{descriptor:t}}}function gke(e){return typeof e.age=="number"}function e1(e,t){return{...e,...{age:t}}}function vke(e){return(e.gender==="male"||e.gender==="female")&&Ku(e.genderProbability)}function t1(e,t,n){return{...e,...{gender:t,genderProbability:n}}}function ape(e,t){function n(l,u){let p=Ja(e(9*l),[3,3,l,1]),d=qe(e(l)),c=qe(e(l)),h=qe(e(l)),m=qe(e(l));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/batch_norm_scale`},{paramPath:`${u}/batch_norm_offset`},{paramPath:`${u}/batch_norm_mean`},{paramPath:`${u}/batch_norm_variance`}),{filters:p,batch_norm_scale:d,batch_norm_offset:c,batch_norm_mean:h,batch_norm_variance:m}}function a(l,u,p,d,c){let h=Ja(e(l*u*p*p),[p,p,l,u]),m=qe(e(u));return t.push({paramPath:`${d}/filters`},{paramPath:`${d}/${c?"batch_norm_offset":"bias"}`}),{filters:h,bias:m}}function r(l,u,p,d){let{filters:c,bias:h}=a(l,u,p,d,!0);return{filters:c,batch_norm_offset:h}}function s(l,u,p){let d=n(l,`${p}/depthwise_conv`),c=r(l,u,1,`${p}/pointwise_conv`);return{depthwise_conv:d,pointwise_conv:c}}function i(){let l=r(3,32,3,"mobilenetv1/conv_0"),u=s(32,64,"mobilenetv1/conv_1"),p=s(64,128,"mobilenetv1/conv_2"),d=s(128,128,"mobilenetv1/conv_3"),c=s(128,256,"mobilenetv1/conv_4"),h=s(256,256,"mobilenetv1/conv_5"),m=s(256,512,"mobilenetv1/conv_6"),f=s(512,512,"mobilenetv1/conv_7"),g=s(512,512,"mobilenetv1/conv_8"),y=s(512,512,"mobilenetv1/conv_9"),b=s(512,512,"mobilenetv1/conv_10"),x=s(512,512,"mobilenetv1/conv_11"),v=s(512,1024,"mobilenetv1/conv_12"),k=s(1024,1024,"mobilenetv1/conv_13");return{conv_0:l,conv_1:u,conv_2:p,conv_3:d,conv_4:c,conv_5:h,conv_6:m,conv_7:f,conv_8:g,conv_9:y,conv_10:b,conv_11:x,conv_12:v,conv_13:k}}function o(){let l=r(1024,256,1,"prediction_layer/conv_0"),u=r(256,512,3,"prediction_layer/conv_1"),p=r(512,128,1,"prediction_layer/conv_2"),d=r(128,256,3,"prediction_layer/conv_3"),c=r(256,128,1,"prediction_layer/conv_4"),h=r(128,256,3,"prediction_layer/conv_5"),m=r(256,64,1,"prediction_layer/conv_6"),f=r(64,128,3,"prediction_layer/conv_7"),g=a(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),y=a(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),b=a(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),x=a(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),v=a(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),k=a(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),T=a(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),_=a(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),E=a(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),A=a(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),M=a(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),$=a(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:l,conv_1:u,conv_2:p,conv_3:d,conv_4:c,conv_5:h,conv_6:m,conv_7:f,box_predictor_0:{box_encoding_predictor:g,class_predictor:y},box_predictor_1:{box_encoding_predictor:b,class_predictor:x},box_predictor_2:{box_encoding_predictor:v,class_predictor:k},box_predictor_3:{box_encoding_predictor:T,class_predictor:_},box_predictor_4:{box_encoding_predictor:E,class_predictor:A},box_predictor_5:{box_encoding_predictor:M,class_predictor:$}}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:o}}function IF(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),{extractMobilenetV1Params:r,extractPredictionLayerParams:s}=ape(n,t),i=r(),o=s(),u={extra_dim:Vm(n(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{params:{mobilenetv1:i,prediction_layer:o,output_layer:u},paramMappings:t}}function rpe(e,t){let n=ra(e,t);function a(u,p,d){let c=n(`${u}/Conv2d_${p}_pointwise/weights`,4,`${d}/filters`),h=n(`${u}/Conv2d_${p}_pointwise/convolution_bn_offset`,1,`${d}/batch_norm_offset`);return{filters:c,batch_norm_offset:h}}function r(u){let p=`mobilenetv1/conv_${u}`,d=`MobilenetV1/Conv2d_${u}_depthwise`,c=`${p}/depthwise_conv`,h=`${p}/pointwise_conv`,m=n(`${d}/depthwise_weights`,4,`${c}/filters`),f=n(`${d}/BatchNorm/gamma`,1,`${c}/batch_norm_scale`),g=n(`${d}/BatchNorm/beta`,1,`${c}/batch_norm_offset`),y=n(`${d}/BatchNorm/moving_mean`,1,`${c}/batch_norm_mean`),b=n(`${d}/BatchNorm/moving_variance`,1,`${c}/batch_norm_variance`);return{depthwise_conv:{filters:m,batch_norm_scale:f,batch_norm_offset:g,batch_norm_mean:y,batch_norm_variance:b},pointwise_conv:a("MobilenetV1",u,h)}}function s(){return{conv_0:a("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:r(1),conv_2:r(2),conv_3:r(3),conv_4:r(4),conv_5:r(5),conv_6:r(6),conv_7:r(7),conv_8:r(8),conv_9:r(9),conv_10:r(10),conv_11:r(11),conv_12:r(12),conv_13:r(13)}}function i(u,p){let d=n(`${u}/weights`,4,`${p}/filters`),c=n(`${u}/biases`,1,`${p}/bias`);return{filters:d,bias:c}}function o(u){let p=i(`Prediction/BoxPredictor_${u}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${u}/box_encoding_predictor`),d=i(`Prediction/BoxPredictor_${u}/ClassPredictor`,`prediction_layer/box_predictor_${u}/class_predictor`);return{box_encoding_predictor:p,class_predictor:d}}function l(){return{conv_0:a("Prediction",0,"prediction_layer/conv_0"),conv_1:a("Prediction",1,"prediction_layer/conv_1"),conv_2:a("Prediction",2,"prediction_layer/conv_2"),conv_3:a("Prediction",3,"prediction_layer/conv_3"),conv_4:a("Prediction",4,"prediction_layer/conv_4"),conv_5:a("Prediction",5,"prediction_layer/conv_5"),conv_6:a("Prediction",6,"prediction_layer/conv_6"),conv_7:a("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:o(0),box_predictor_1:o(1),box_predictor_2:o(2),box_predictor_3:o(3),box_predictor_4:o(4),box_predictor_5:o(5)}}return{extractMobilenetV1Params:s,extractPredictionLayerParams:l}}function SF(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:a}=rpe(e,t),r=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Mr(r))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${r}`);let s={mobilenetv1:n(),prediction_layer:a(),output_layer:{extra_dim:r}};return An(e,t),{params:s,paramMappings:t}}function Fa(e,t,n){return O(()=>{let a=Rt(e,t.filters,n,"same");return a=J(a,t.batch_norm_offset),an(a,0,6)})}var spe=.0010000000474974513;function ipe(e,t,n){return O(()=>{let a=xs(e,t.filters,n,"same");return a=Er(a,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,spe),an(a,0,6)})}function ope(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function NF(e,t){return O(()=>{let n,a=Fa(e,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((s,i)=>{let o=i+1,l=ope(o);a=ipe(a,s.depthwise_conv,l),a=Fa(a,s.pointwise_conv,[1,1]),o===11&&(n=a)}),n===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:a,conv11:n}})}function lpe(e,t,n){let a=e.arraySync(),r=Math.min(a[t][0],a[t][2]),s=Math.min(a[t][1],a[t][3]),i=Math.max(a[t][0],a[t][2]),o=Math.max(a[t][1],a[t][3]),l=Math.min(a[n][0],a[n][2]),u=Math.min(a[n][1],a[n][3]),p=Math.max(a[n][0],a[n][2]),d=Math.max(a[n][1],a[n][3]),c=(i-r)*(o-s),h=(p-l)*(d-u);if(c<=0||h<=0)return 0;let m=Math.max(r,l),f=Math.max(s,u),g=Math.min(i,p),y=Math.min(o,d),b=Math.max(g-m,0)*Math.max(y-f,0);return b/(c+h-b)}function TF(e,t,n,a,r){let s=e.shape[0],i=Math.min(n,s),o=t.map((p,d)=>({score:p,boxIndex:d})).filter(p=>p.score>r).sort((p,d)=>d.score-p.score),l=p=>p<=a?1:0,u=[];return o.forEach(p=>{if(u.length>=i)return;let d=p.score;for(let c=u.length-1;c>=0;--c){let h=lpe(e,p.boxIndex,u[c]);if(h!==0&&(p.score*=l(h),p.score<=r))break}d===p.score&&u.push(p.boxIndex)}),u}function upe(e){let t=ht(Ae(e,[1,0])),n=[ce(t[2],t[0]),ce(t[3],t[1])],a=[J(t[0],fe(n[0],2)),J(t[1],fe(n[1],2))];return{sizes:n,centers:a}}function ppe(e,t){let{sizes:n,centers:a}=upe(e),r=ht(Ae(t,[1,0])),s=fe(B(gn(fe(r[2],5)),n[0]),2),i=J(B(fe(r[0],10),n[0]),a[0]),o=fe(B(gn(fe(r[3],5)),n[1]),2),l=J(B(fe(r[1],10),n[1]),a[1]);return Ae(Mt([ce(i,s),ce(l,o),J(i,s),J(l,o)]),[1,0])}function _F(e,t,n){return O(()=>{let a=e.shape[0],r=ppe(W(On(n.extra_dim,[a,1,1]),[-1,4]),W(e,[-1,4]));r=W(r,[a,r.shape[0]/a,4]);let s=ha(He(t,[0,0,1],[-1,-1,-1])),i=He(s,[0,0,0],[-1,-1,1]);i=W(i,[a,i.shape[1]]);let o=ht(r),l=ht(i);return{boxes:o,scores:l}})}function Fo(e,t){return O(()=>{let n=e.shape[0],a=W(Eo(e,t.box_encoding_predictor),[n,-1,1,4]),r=W(Eo(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:a,classPrediction:r}})}function CF(e,t,n){return O(()=>{let a=Fa(e,n.conv_0,[1,1]),r=Fa(a,n.conv_1,[2,2]),s=Fa(r,n.conv_2,[1,1]),i=Fa(s,n.conv_3,[2,2]),o=Fa(i,n.conv_4,[1,1]),l=Fa(o,n.conv_5,[2,2]),u=Fa(l,n.conv_6,[1,1]),p=Fa(u,n.conv_7,[2,2]),d=Fo(t,n.box_predictor_0),c=Fo(e,n.box_predictor_1),h=Fo(r,n.box_predictor_2),m=Fo(i,n.box_predictor_3),f=Fo(l,n.box_predictor_4),g=Fo(p,n.box_predictor_5),y=Ze([d.boxPredictionEncoding,c.boxPredictionEncoding,h.boxPredictionEncoding,m.boxPredictionEncoding,f.boxPredictionEncoding,g.boxPredictionEncoding],1),b=Ze([d.classPrediction,c.classPrediction,h.classPrediction,m.classPrediction,f.classPrediction,g.classPrediction],1);return{boxPredictions:y,classPredictions:b}})}var Aa=class{constructor({minConfidence:t,maxResults:n}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=t||.5,this._maxResults=n||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if(typeof this._maxResults!="number")throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}};var Ao=class extends dn{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(512,!1),"float32"),r=ce(fe(a,127.5),1),s=NF(r,n.mobilenetv1),{boxPredictions:i,classPredictions:o}=CF(s.out,s.conv11,n.prediction_layer);return _F(i,o,n.output_layer)})}async forward(t){return this.forwardInput(await It(t))}async locateFaces(t,n={}){let{maxResults:a,minConfidence:r}=new Aa(n),s=await It(t),{boxes:i,scores:o}=this.forwardInput(s),l=i[0],u=o[0];for(let x=1;x{let[v,k]=[Math.max(0,y[x][0]),Math.min(1,y[x][2])].map(E=>E*g),[T,_]=[Math.max(0,y[x][1]),Math.min(1,y[x][3])].map(E=>E*f);return new kt(p[x],new Yu(T,v,_-T,k-v),{height:s.getInputHeight(0),width:s.getInputWidth(0)})});return l.dispose(),u.dispose(),b}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return SF(t)}extractParams(t){return IF(t)}};function cpe(e){let t=new Ao;return t.extractWeights(e),t}function dIe(e){return cpe(e)}var EF=class extends Ao{};var FF=.4,AF=[new Oe(.738768,.874946),new Oe(2.42204,2.65704),new Oe(4.30971,7.04493),new Oe(10.246,4.59428),new Oe(12.6868,11.8741)],$F=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],DF=[117.001,114.697,97.404],RF="tiny_yolov2_model",MF="tiny_yolov2_separable_conv_model";var xg=e=>typeof e=="number";function PF(e){if(!e)throw new Error(`invalid config: ${e}`);if(typeof e.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${e.withSeparableConvs}`);if(!xg(e.iouThreshold)||e.iouThreshold<0||e.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${e.iouThreshold}`);if(!Array.isArray(e.classes)||!e.classes.length||!e.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(e.classes)}`);if(!Array.isArray(e.anchors)||!e.anchors.length||!e.anchors.map(t=>t||{}).every(t=>xg(t.x)&&xg(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(e.anchors)}`);if(e.meanRgb&&(!Array.isArray(e.meanRgb)||e.meanRgb.length!==3||!e.meanRgb.every(xg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function dp(e){return O(()=>{let t=B(e,we(.10000000149011612));return J(Xe(ce(e,t)),t)})}function Br(e,t){return O(()=>{let n=ga(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Rt(n,t.conv.filters,[1,1],"valid"),n=ce(n,t.bn.sub),n=B(n,t.bn.truediv),n=J(n,t.conv.bias),dp(n)})}function Wr(e,t){return O(()=>{let n=ga(e,[[0,0],[1,1],[1,1],[0,0]]);return n=xo(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=J(n,t.bias),dp(n)})}function dpe(e,t){let n=ap(e,t);function a(i,o){let l=qe(e(i)),u=qe(e(i));return t.push({paramPath:`${o}/sub`},{paramPath:`${o}/truediv`}),{sub:l,truediv:u}}function r(i,o,l){let u=n(i,o,3,`${l}/conv`),p=a(o,`${l}/bn`);return{conv:u,bn:p}}let s=rp(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}}function OF(e,t,n,a){let{extractWeights:r,getRemainingWeights:s}=$n(e),i=[],{extractConvParams:o,extractConvWithBatchNormParams:l,extractSeparableConvParams:u}=dpe(r,i),p;if(t.withSeparableConvs){let[d,c,h,m,f,g,y,b,x]=a,v=t.isFirstLayerConv2d?o(d,c,3,"conv0"):u(d,c,"conv0"),k=u(c,h,"conv1"),T=u(h,m,"conv2"),_=u(m,f,"conv3"),E=u(f,g,"conv4"),A=u(g,y,"conv5"),M=b?u(y,b,"conv6"):void 0,$=x?u(b,x,"conv7"):void 0,S=o(x||b||y,5*n,1,"conv8");p={conv0:v,conv1:k,conv2:T,conv3:_,conv4:E,conv5:A,conv6:M,conv7:$,conv8:S}}else{let[d,c,h,m,f,g,y,b,x]=a,v=l(d,c,"conv0"),k=l(c,h,"conv1"),T=l(h,m,"conv2"),_=l(m,f,"conv3"),E=l(f,g,"conv4"),A=l(g,y,"conv5"),M=l(y,b,"conv6"),$=l(b,x,"conv7"),S=o(x,5*n,1,"conv8");p={conv0:v,conv1:k,conv2:T,conv3:_,conv4:E,conv5:A,conv6:M,conv7:$,conv8:S}}if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{params:p,paramMappings:i}}function hpe(e,t){let n=ra(e,t);function a(o){let l=n(`${o}/sub`,1),u=n(`${o}/truediv`,1);return{sub:l,truediv:u}}function r(o){let l=n(`${o}/filters`,4),u=n(`${o}/bias`,1);return{filters:l,bias:u}}function s(o){let l=r(`${o}/conv`),u=a(`${o}/bn`);return{conv:l,bn:u}}let i=sp(n);return{extractConvParams:r,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}}function LF(e,t){let n=[],{extractConvParams:a,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}=hpe(e,n),i;if(t.withSeparableConvs){let o=t.filterSizes&&t.filterSizes.length||9;i={conv0:t.isFirstLayerConv2d?a("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:o>7?s("conv6"):void 0,conv7:o>8?s("conv7"):void 0,conv8:a("conv8")}}else i={conv0:r("conv0"),conv1:r("conv1"),conv2:r("conv2"),conv3:r("conv3"),conv4:r("conv4"),conv5:r("conv5"),conv6:r("conv6"),conv7:r("conv7"),conv8:a("conv8")};return An(e,n),{params:i,paramMappings:n}}var br=class{constructor({inputSize:t,scoreThreshold:n}={}){this._name="TinyYolov2Options";if(this._inputSize=t||416,this._scoreThreshold=n||.5,typeof this._inputSize!="number"||this._inputSize%32!==0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}};var n1=class extends dn{constructor(n){super("TinyYolov2");PF(n),this._config=n}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(n,a){let r=Br(n,a.conv0);return r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv1),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv2),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv3),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv4),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv5),r=Pt(r,[2,2],[1,1],"same"),r=Br(r,a.conv6),r=Br(r,a.conv7),Eo(r,a.conv8,"valid",!1)}runMobilenet(n,a){let r=this.config.isFirstLayerConv2d?dp(Eo(n,a.conv0,"valid",!1)):Wr(n,a.conv0);return r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv1),r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv2),r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv3),r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv4),r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv5),r=Pt(r,[2,2],[1,1],"same"),r=a.conv6?Wr(r,a.conv6):r,r=a.conv7?Wr(r,a.conv7):r,Eo(r,a.conv8,"valid",!1)}forwardInput(n,a){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return O(()=>{let s=oe(n.toBatchTensor(a,!1),"float32");return s=this.config.meanRgb?yr(s,this.config.meanRgb):s,s=s.div(255),this.config.withSeparableConvs?this.runMobilenet(s,r):this.runTinyYolov2(s,r)})}async forward(n,a){return this.forwardInput(await It(n),a)}async detect(n,a={}){let{inputSize:r,scoreThreshold:s}=new br(a),i=await It(n),o=await this.forwardInput(i,r),l=O(()=>ht(o)[0].expandDims()),u={width:i.getInputWidth(0),height:i.getInputHeight(0)},p=await this.extractBoxes(l,i.getReshapedInputDimensions(0),s);o.dispose(),l.dispose();let d=p.map(y=>y.box),c=p.map(y=>y.score),h=p.map(y=>y.classScore),m=p.map(y=>this.config.classes[y.label]);return jE(d.map(y=>y.rescale(r)),c,this.config.iouThreshold,!0).map(y=>new Ns(c[y],h[y],m[y],d[y],u))}getDefaultModelName(){return""}extractParamsFromWeightMap(n){return LF(n,this.config)}extractParams(n){let a=this.config.filterSizes||n1.DEFAULT_FILTER_SIZES,r=a?a.length:void 0;if(r!==7&&r!==8&&r!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${r} filterSizes in config`);return OF(n,this.config,this.boxEncodingSize,a)}async extractBoxes(n,a,r){let{width:s,height:i}=a,o=Math.max(s,i),l=o/s,u=o/i,p=n.shape[1],d=this.config.anchors.length,[c,h,m]=O(()=>{let b=n.reshape([p,p,d,this.boxEncodingSize]),x=b.slice([0,0,0,0],[p,p,d,4]),v=b.slice([0,0,0,4],[p,p,d,1]),k=this.withClassScores?Qa(b.slice([0,0,0,5],[p,p,d,this.config.classes.length]),3):we(0);return[x,v,k]}),f=[],g=await h.array(),y=await c.array();for(let b=0;br){let T=(x+Zf(y[b][x][v][0]))/p*l,_=(b+Zf(y[b][x][v][1]))/p*u,E=Math.exp(y[b][x][v][2])*this.config.anchors[v].x/p*l,A=Math.exp(y[b][x][v][3])*this.config.anchors[v].y/p*u,M=T-E/2,$=_-A/2,S={row:b,col:x,anchor:v},{classScore:P,label:V}=this.withClassScores?await this.extractPredictedClass(m,S):{classScore:1,label:0};f.push({box:new Xu(M,$,M+E,$+A),score:k,classScore:k*P,label:V,...S})}}return c.dispose(),h.dispose(),m.dispose(),f}async extractPredictedClass(n,a){let{row:r,col:s,anchor:i}=a,o=await n.array();return Array(this.config.classes.length).fill(0).map((l,u)=>o[r][s][i][u]).map((l,u)=>({classScore:l,label:u})).reduce((l,u)=>l.classScore>u.classScore?l:u)}},$o=n1;$o.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var hp=class extends $o{constructor(t=!0){let n={withSeparableConvs:t,iouThreshold:FF,classes:["face"],...t?{anchors:$F,meanRgb:DF}:{anchors:AF,withClassScores:!0}};super(n)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(r=>new kt(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?MF:RF}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function aSe(e,t=!0){let n=new hp(t);return n.extractWeights(e),n}var vg=class extends br{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var $a=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Do(e,t,n,a,r=({alignedRect:s})=>s){let s=e.map(l=>lp(l)?r(l):l.detection),i=a||(t instanceof Fe?await fd(t,s):await md(t,s)),o=await n(i);return i.forEach(l=>l instanceof Fe&&l.dispose()),o}async function mp(e,t,n,a,r){return Do([e],t,async s=>n(s[0]),a,r)}var zF=.4,BF=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],WF=[117.001,114.697,97.404];var fp=class extends $o{constructor(){let t={withSeparableConvs:!0,iouThreshold:zF,classes:["face"],anchors:BF,meanRgb:WF,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(r=>new kt(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var rt={ssdMobilenetv1:new Ao,tinyFaceDetector:new fp,tinyYolov2:new hp,faceLandmark68Net:new pp,faceLandmark68TinyNet:new yg,faceRecognitionNet:new cp,faceExpressionNet:new cg,ageGenderNet:new fg},mpe=(e,t)=>rt.ssdMobilenetv1.locateFaces(e,t),DSe=(e,t)=>rt.tinyFaceDetector.locateFaces(e,t),RSe=(e,t)=>rt.tinyYolov2.locateFaces(e,t),fpe=e=>rt.faceLandmark68Net.detectLandmarks(e),MSe=e=>rt.faceLandmark68TinyNet.detectLandmarks(e),PSe=e=>rt.faceRecognitionNet.computeFaceDescriptor(e),OSe=e=>rt.faceExpressionNet.predictExpressions(e),LSe=e=>rt.ageGenderNet.predictAgeAndGender(e),gpe=e=>rt.ssdMobilenetv1.load(e),zSe=e=>rt.tinyFaceDetector.load(e),BSe=e=>rt.tinyYolov2.load(e),WSe=e=>rt.faceLandmark68Net.load(e),VSe=e=>rt.faceLandmark68TinyNet.load(e),USe=e=>rt.faceRecognitionNet.load(e),GSe=e=>rt.faceExpressionNet.load(e),HSe=e=>rt.ageGenderNet.load(e),jSe=gpe,qSe=mpe,KSe=fpe;var wg=class extends $a{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},Ro=class extends wg{async run(){let t=await this.parentTask,n=await Do(t,this.input,async a=>Promise.all(a.map(r=>rt.faceExpressionNet.predictExpressions(r))),this.extractedFaces);return t.map((a,r)=>K0(a,n[r]))}withAgeAndGender(){return new Po(this,this.input)}},Mo=class extends wg{async run(){let t=await this.parentTask;if(!t)return;let n=await mp(t,this.input,a=>rt.faceExpressionNet.predictExpressions(a),this.extractedFaces);return K0(t,n)}withAgeAndGender(){return new Oo(this,this.input)}},Cs=class extends Ro{withAgeAndGender(){return new Fs(this,this.input)}withFaceDescriptors(){return new $s(this,this.input)}},Es=class extends Mo{withAgeAndGender(){return new As(this,this.input)}withFaceDescriptor(){return new Ds(this,this.input)}};var kg=class extends $a{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},Po=class extends kg{async run(){let t=await this.parentTask,n=await Do(t,this.input,async a=>Promise.all(a.map(r=>rt.ageGenderNet.predictAgeAndGender(r))),this.extractedFaces);return t.map((a,r)=>{let{age:s,gender:i,genderProbability:o}=n[r];return e1(t1(a,i,o),s)})}withFaceExpressions(){return new Ro(this,this.input)}},Oo=class extends kg{async run(){let t=await this.parentTask;if(!t)return;let{age:n,gender:a,genderProbability:r}=await mp(t,this.input,s=>rt.ageGenderNet.predictAgeAndGender(s),this.extractedFaces);return e1(t1(t,a,r),n)}withFaceExpressions(){return new Mo(this,this.input)}},Fs=class extends Po{withFaceExpressions(){return new Cs(this,this.input)}withFaceDescriptors(){return new $s(this,this.input)}},As=class extends Oo{withFaceExpressions(){return new Es(this,this.input)}withFaceDescriptor(){return new Ds(this,this.input)}};var Ig=class extends $a{constructor(n,a){super();this.parentTask=n;this.input=a}},$s=class extends Ig{async run(){let t=await this.parentTask;return(await Do(t,this.input,a=>Promise.all(a.map(r=>rt.faceRecognitionNet.computeFaceDescriptor(r))),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}))).map((a,r)=>Z0(t[r],a))}withFaceExpressions(){return new Cs(this,this.input)}withAgeAndGender(){return new Fs(this,this.input)}},Ds=class extends Ig{async run(){let t=await this.parentTask;if(!t)return;let n=await mp(t,this.input,a=>rt.faceRecognitionNet.computeFaceDescriptor(a),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}));return Z0(t,n)}withFaceExpressions(){return new Es(this,this.input)}withAgeAndGender(){return new As(this,this.input)}};var Sg=class extends $a{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.useTinyLandmarkNet=r}get landmarkNet(){return this.useTinyLandmarkNet?rt.faceLandmark68TinyNet:rt.faceLandmark68Net}},Ng=class extends Sg{async run(){let t=await this.parentTask,n=t.map(i=>i.detection),a=this.input instanceof Fe?await fd(this.input,n):await md(this.input,n),r=await Promise.all(a.map(i=>this.landmarkNet.detectLandmarks(i)));return a.forEach(i=>i instanceof Fe&&i.dispose()),t.filter((i,o)=>r[o]).map((i,o)=>xd(i,r[o]))}withFaceExpressions(){return new Cs(this,this.input)}withAgeAndGender(){return new Fs(this,this.input)}withFaceDescriptors(){return new $s(this,this.input)}},Tg=class extends Sg{async run(){let t=await this.parentTask;if(!t)return;let{detection:n}=t,a=this.input instanceof Fe?await fd(this.input,[n]):await md(this.input,[n]),r=await this.landmarkNet.detectLandmarks(a[0]);return a.forEach(s=>s instanceof Fe&&s.dispose()),xd(t,r)}withFaceExpressions(){return new Es(this,this.input)}withAgeAndGender(){return new As(this,this.input)}withFaceDescriptor(){return new Ds(this,this.input)}};var _g=class extends $a{constructor(n,a=new Aa){super();this.input=n;this.options=a}},wd=class extends _g{async run(){let{input:t,options:n}=this,a;if(n instanceof vg)a=rt.tinyFaceDetector.locateFaces(t,n);else if(n instanceof Aa)a=rt.ssdMobilenetv1.locateFaces(t,n);else if(n instanceof br)a=rt.tinyYolov2.locateFaces(t,n);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return a}runAndExtendWithFaceDetections(){return new Promise((t,n)=>{this.run().then(a=>t(a.map(r=>Ju({},r)))).catch(a=>n(a))})}withFaceLandmarks(t=!1){return new Ng(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Ro(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Po(this.runAndExtendWithFaceDetections(),this.input)}},Cg=class extends _g{async run(){let t=await new wd(this.input,this.options),n=t[0];return t.forEach(a=>{a.score>n.score&&(n=a)}),n}runAndExtendWithFaceDetection(){return new Promise(async t=>{let n=await this.run();t(n?Ju({},n):void 0)})}withFaceLandmarks(t=!1){return new Tg(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Mo(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Oo(this.runAndExtendWithFaceDetection(),this.input)}};function H2e(e,t=new Aa){return new Cg(e,t)}function a1(e,t=new Aa){return new wd(e,t)}async function ype(e,t){return a1(e,new Aa(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Q2e(e,t={}){return a1(e,new br(t)).withFaceLandmarks().withFaceDescriptors()}var J2e=ype;function VF(e,t){if(e.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let n=Array.from(e),a=Array.from(t);return Math.sqrt(n.map((r,s)=>r-a[s]).reduce((r,s)=>r+s**2,0))}var Eg=class{constructor(t,n=.6){this._distanceThreshold=n;let a=Array.isArray(t)?t:[t];if(!a.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let r=1,s=()=>`person ${r++}`;this._labeledDescriptors=a.map(i=>{if(i instanceof Pr)return i;if(i instanceof Float32Array)return new Pr(s(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new Pr(s(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,n){return n.map(a=>VF(a,t)).reduce((a,r)=>a+r,0)/(n.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:n,label:a})=>new pd(a,this.computeMeanDistance(t,n))).reduce((n,a)=>n.distancet.toJSON())}}static fromJSON(t){let n=t.labeledDescriptors.map(a=>Pr.fromJSON(a));return new Eg(n,t.distanceThreshold)}};function gNe(e){let t=new fp;return t.extractWeights(e),t}function bpe(e,t){let{width:n,height:a}=new Fn(t.width,t.height);if(n<=0||a<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:a})}`);if(Array.isArray(e))return e.map(r=>bpe(r,{width:n,height:a}));if(lp(e)){let r=e.detection.forSize(n,a),s=e.unshiftedLandmarks.forSize(r.box.width,r.box.height);return xd(Ju(e,r),s)}return Or(e)?Ju(e,e.detection.forSize(n,a)):e instanceof xa||e instanceof kt?e.forSize(n,a):e}var _Ne=pF;export{fg as AgeGenderNet,Xu as BoundingBox,pt as Box,$a as ComposableTask,$s as ComputeAllFaceDescriptorsTask,Ig as ComputeFaceDescriptorsTaskBase,Ds as ComputeSingleFaceDescriptorTask,Ng as DetectAllFaceLandmarksTask,wd as DetectAllFacesTask,Sg as DetectFaceLandmarksTaskBase,_g as DetectFacesTaskBase,Tg as DetectSingleFaceLandmarksTask,Cg as DetectSingleFaceTask,Fn as Dimensions,oF as FACE_EXPRESSION_LABELS,kt as FaceDetection,EF as FaceDetectionNet,cg as FaceExpressionNet,_s as FaceExpressions,pp as FaceLandmark68Net,yg as FaceLandmark68TinyNet,bF as FaceLandmarkNet,xa as FaceLandmarks,KE as FaceLandmarks5,Qu as FaceLandmarks68,pd as FaceMatch,Eg as FaceMatcher,cp as FaceRecognitionNet,Y0 as Gender,cd as LabeledBox,Pr as LabeledFaceDescriptors,zr as NetInput,dn as NeuralNetwork,Ns as ObjectDetection,Oe as Point,XE as PredictedBox,Yu as Rect,Ao as SsdMobilenetv1,Aa as SsdMobilenetv1Options,fp as TinyFaceDetector,vg as TinyFaceDetectorOptions,hp as TinyYolov2,br as TinyYolov2Options,J2e as allFaces,ype as allFacesSsdMobilenetv1,Q2e as allFacesTinyYolov2,YE as awaitMediaLoaded,QE as bufferToImage,PSe as computeFaceDescriptor,np as createCanvas,ag as createCanvasFromMedia,dIe as createFaceDetectionNet,dke as createFaceRecognitionNet,cpe as createSsdMobilenetv1,gNe as createTinyFaceDetector,aSe as createTinyYolov2,a1 as detectAllFaces,fpe as detectFaceLandmarks,MSe as detectFaceLandmarksTiny,KSe as detectLandmarks,H2e as detectSingleFace,uF as draw,at as env,VF as euclideanDistance,e1 as extendWithAge,Z0 as extendWithFaceDescriptor,Ju as extendWithFaceDetection,K0 as extendWithFaceExpressions,xd as extendWithFaceLandmarks,t1 as extendWithGender,fd as extractFaceTensors,md as extractFaces,kxe as fetchImage,eF as fetchJson,_xe as fetchNetWeights,Ts as fetchOrThrow,Dxe as fetchVideo,aa as getContext2dOrThrow,tp as getMediaDimensions,JE as imageTensorToCanvas,ZE as imageToSquare,Oge as inverseSigmoid,GE as iou,q0 as isMediaElement,ng as isMediaLoaded,gke as isWithAge,Or as isWithFaceDetection,lF as isWithFaceExpressions,lp as isWithFaceLandmarks,vke as isWithGender,HSe as loadAgeGenderModel,jSe as loadFaceDetectionModel,GSe as loadFaceExpressionModel,WSe as loadFaceLandmarkModel,VSe as loadFaceLandmarkTinyModel,USe as loadFaceRecognitionModel,gpe as loadSsdMobilenetv1Model,zSe as loadTinyFaceDetectorModel,BSe as loadTinyYolov2Model,nF as loadWeightMap,qSe as locateFaces,Bxe as matchDimensions,HE as minBbox,rt as nets,jE as nonMaxSuppression,yr as normalize,qE as padToSquare,LSe as predictAgeAndGender,OSe as recognizeFaceExpressions,bpe as resizeResults,Zu as resolveInput,Mge as shuffleArray,Zf as sigmoid,mpe as ssdMobilenetv1,ze as tf,DSe as tinyFaceDetector,RSe as tinyYolov2,It as toNetInput,UE as utils,PF as validateConfig,_Ne as version}; +");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.onmessage=(e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["__emscripten_thread_exit"](result)}}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==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else if(e.data.cmd==="processProxyingQueue"){if(Module["_pthread_self"]()){Module["_emscripten_proxy_execute_queue"](e.data.queue)}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}});`,vue=bi(c$()),WE=class extends pc{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(VE),vx=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new rm(this,ar())}write(e,t,n){let a={id:this.dataIdNextNumber++};return this.move(a,e,t,n,1),a}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=w.now();return e(),{kernelMs:w.now()-t}}move(e,t,n,a,r){let s=this.dataIdNextNumber++;if(a==="string"){let u=t;this.dataIdMap.set(e,{id:s,stringBytes:u,shape:n,dtype:a,memoryOffset:null,refCount:r});return}let i=w.sizeFromShape(n),o=i*w.bytesPerElement(a),l=this.wasm._malloc(o);this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:n,dtype:a,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,n){let{memoryOffset:a,dtype:r,shape:s,stringBytes:i}=this.dataIdMap.get(e);if(r==="string")return(t==null||t===0)&&(n==null||n>=i.length)?i:i.slice(t,n);t=t||0,n=n||w.sizeFromShape(s);let o=w.bytesPerElement(r),l=this.wasm.HEAPU8.slice(a+t*o,a+n*o);return Iue(l.buffer,r)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let a;if(n==null)a=this.write(null,e,t);else{let r=this.dataIdNextNumber++;a={id:r},this.dataIdMap.set(a,{id:r,memoryOffset:n,shape:e,dtype:t,refCount:1});let s=w.sizeFromShape(e);this.wasm.tfjs.registerTensor(r,s,n)}return{dataId:a,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let a=this.wasm.HEAPU8.buffer,{memoryOffset:r}=this.dataIdMap.get(n),s=w.sizeFromShape(e);switch(t){case"float32":return new Float32Array(a,r,s);case"int32":return new Int32Array(a,r,s);case"bool":return new Uint8Array(a,r,s);default:throw new Error(`Unknown dtype ${t}`)}}};function wue(e){return(t,n)=>(w.fetch(e,{credentials:"same-origin"}).then(a=>{a.ok||t.env.a(`failed to load wasm binary file at '${e}'`),a.arrayBuffer().then(r=>{WebAssembly.instantiate(r,t).then(s=>{n(s.instance,s.module)})})}),{})}function Xk(e,t,n){if(am!=null)return am;let a="tfjs-backend-wasm.wasm";return e&&t?a="tfjs-backend-wasm-threaded-simd.wasm":e&&(a="tfjs-backend-wasm-simd.wasm"),Hp!=null&&Hp[a]!=null?Hp[a]:n+a}async function kue(){let[e,t]=await Promise.all([X().getAsync("WASM_HAS_SIMD_SUPPORT"),X().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,a)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=xue.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?Xk(e,t,Vp!=null?Vp:l):l+o},O0&&(r.instantiateWasm=wue(Xk(e,t,Vp!=null?Vp:"")));let s=!1;r.onAbort=()=>{s||jp||(jp=!0,a({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&&am==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+Kk.default.toString()],{type:"text/javascript"}),i=(0,Kk.default)(r)):i=(0,vue.default)(r),i.then(o=>{s=!0,jp=!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,[])},n({wasm:o})})})}function Iue(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 Sue=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],am=null,Vp=null,Hp={},jp=!1,O0=!1;function Nue(e,t=!1){if(Mx("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),jp)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");am=e,O0=t}function Tue(e,t=!1){if(jp)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")Vp=e;else{Hp=e;let n=Sue.filter(a=>Hp[a]==null);if(n.length>0)throw new Error(`There were no entries found for the following binaries: ${n.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}O0=t}var VE=-1,vx=-1;function _ue(e){VE=e}function Cue(){if(vx===-1)throw new Error("WASM backend not initialized.");return vx}var Eue="3.18.0",Fue=2;Wm("wasm",async()=>{let{wasm:e}=await kue();return new WE(e)},Fue);var Aue="3.18.0",$ue="3.18.0",Due="3.18.0",Rue="3.18.0",Mue="3.18.0",Pue="3.18.0",Oue="3.18.0",Lue="3.18.0",zue={tfjs:Aue,"tfjs-core":$ue,"tfjs-data":Due,"tfjs-layers":Rue,"tfjs-converter":Mue,"tfjs-backend-cpu":Pue,"tfjs-backend-webgl":Oue,"tfjs-backend-wasm":Lue};var uF={};ob(uF,{AnchorPosition:()=>j0,DrawBox:()=>hd,DrawBoxOptions:()=>tg,DrawFaceLandmarks:()=>hg,DrawFaceLandmarksOptions:()=>dg,DrawTextField:()=>Lr,DrawTextFieldOptions:()=>ep,drawContour:()=>Rr,drawDetections:()=>jue,drawFaceExpressions:()=>que,drawFaceLandmarks:()=>Xue});function Rr(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach(({x:a,y:r},s)=>{let i=t[s];e.moveTo(i.x,i.y),e.lineTo(a,r)}),n){let a=t[t.length-1],r=t[0];if(!a||!r)return;e.moveTo(a.x,a.y),e.lineTo(r.x,r.y)}e.stroke()}var UE={};ob(UE,{computeReshapedDimensions:()=>B0,getCenterPoint:()=>Co,isDimensions:()=>Jf,isEven:()=>Qf,isFloat:()=>z0,isTensor:()=>To,isTensor1D:()=>Bue,isTensor2D:()=>L0,isTensor3D:()=>Mr,isTensor4D:()=>ba,isValidNumber:()=>er,isValidProbablitiy:()=>Ku,range:()=>gr,round:()=>_o});var Fn=class{constructor(t,n){if(!er(t)||!er(n))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:t,height:n})}`);this._width=t,this._height=n}get width(){return this._width}get height(){return this._height}reverse(){return new Fn(1/this.width,1/this.height)}};function To(e,t){return e instanceof Fe&&e.shape.length===t}function Bue(e){return To(e,1)}function L0(e){return To(e,2)}function Mr(e){return To(e,3)}function ba(e){return To(e,4)}function z0(e){return e%1!==0}function Qf(e){return e%2===0}function _o(e,t=2){let n=10**t;return Math.floor(e*n)/n}function Jf(e){return e&&e.width&&e.height}function B0({width:e,height:t},n){let a=n/Math.max(t,e);return new Fn(Math.round(e*a),Math.round(t*a))}function Co(e){return e.reduce((t,n)=>t.add(n),new Oe(0,0)).div(new Oe(e.length,e.length))}function gr(e,t,n){return Array(e).fill(0).map((a,r)=>t+r*n)}function er(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||e===0}function Ku(e){return er(e)&&e>=0&&e<=1}var Oe=class{constructor(t,n){this._x=t,this._y=n}get x(){return this._x}get y(){return this._y}add(t){return new Oe(this.x+t.x,this.y+t.y)}sub(t){return new Oe(this.x-t.x,this.y-t.y)}mul(t){return new Oe(this.x*t.x,this.y*t.y)}div(t){return new Oe(this.x/t.x,this.y/t.y)}abs(){return new Oe(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new Oe(Math.floor(this.x),Math.floor(this.y))}};var pt=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(er)}static assertIsValidBox(t,n,a=!1){if(!pt.isRect(t))throw new Error(`${n} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!a&&(t.width<0||t.height<0))throw new Error(`${n} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,n=!0){let a=t||{},r=[a.left,a.top,a.right,a.bottom].every(er),s=[a.x,a.y,a.width,a.height].every(er);if(!s&&!r)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(a)}`);let[i,o,l,u]=s?[a.x,a.y,a.width,a.height]:[a.left,a.top,a.right-a.left,a.bottom-a.top];pt.assertIsValidBox({x:i,y:o,width:l,height:u},"Box.constructor",n),this._x=i,this._y=o,this._width=l,this._height=u}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new Oe(this.left,this.top)}get topRight(){return new Oe(this.right,this.top)}get bottomLeft(){return new Oe(this.left,this.bottom)}get bottomRight(){return new Oe(this.right,this.bottom)}round(){let[t,n,a,r]=[this.x,this.y,this.width,this.height].map(s=>Math.round(s));return new pt({x:t,y:n,width:a,height:r})}floor(){let[t,n,a,r]=[this.x,this.y,this.width,this.height].map(s=>Math.floor(s));return new pt({x:t,y:n,width:a,height:r})}toSquare(){let{x:t,y:n,width:a,height:r}=this,s=Math.abs(a-r);return an&&(o=-d+n+a,d=n),c>t&&(l=-c+t+r,c=t),u<1&&(l=2-u,u=1),p<1&&(l=2-p,p=1),{dy:i,edy:l,dx:s,edx:o,y:p,ey:c,x:u,ex:d,w:a,h:r}}calibrate(t){return new pt({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Xu=class extends pt{constructor(t,n,a,r,s=!1){super({left:t,top:n,right:a,bottom:r},s)}};var Ns=class{constructor(t,n,a,r,s){this._imageDims=new Fn(s.width,s.height),this._score=t,this._classScore=n,this._className=a,this._box=new pt(r).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new pt(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new Ns(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}};var kt=class extends Ns{constructor(t,n,a){super(t,t,"",n,a)}forSize(t,n){let{score:a,relativeBox:r,imageDims:s}=super.forSize(t,n);return new kt(a,r,s)}};function GE(e,t,n=!0){let a=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),r=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)),s=a*r;return n?s/(e.area+t.area-s):s/Math.min(e.area,t.area)}function HE(e){let t=e.map(o=>o.x),n=e.map(o=>o.y),a=t.reduce((o,l)=>lloo({score:i,boxIndex:o})).sort((i,o)=>i.score-o.score).map(i=>i.boxIndex),s=[];for(;r.length>0;){let i=r.pop();s.push(i);let o=r,l=[];for(let u=0;ul[p]<=n)}return s}function yr(e,t){return O(()=>{let[n,a,r]=t,s=_n([...e.shape.slice(0,3),1],n,"float32"),i=_n([...e.shape.slice(0,3),1],a,"float32"),o=_n([...e.shape.slice(0,3),1],r,"float32"),l=Ze([s,i,o],3);return ce(e,l)})}function qE(e,t=!1){return O(()=>{let[n,a]=e.shape.slice(1);if(n===a)return e;let r=Math.abs(n-a),s=Math.round(r*(t?.5:1)),i=n>a?2:1,o=c=>{let h=e.shape.slice();return h[i]=c,_n(h,0,"float32")},l=o(s),u=r-l.shape[i],d=[t&&u?o(u):null,e,l].filter(c=>!!c).map(c=>oe(c,"float32"));return Ze(d,i)})}function Mge(e){let t=e.slice();for(let n=t.length-1;n>0;n--){let a=Math.floor(Math.random()*(n+1)),r=t[n];t[n]=t[a],t[a]=r}return t}function Zf(e){return 1/(1+Math.exp(-e))}function Oge(e){return Math.log(e/(1-e))}var Yu=class extends pt{constructor(t,n,a,r,s=!1){super({x:t,y:n,width:a,height:r},s)}};var Wue=.5,Vue=.43,Uue=.45,xa=class{constructor(t,n,a=new Oe(0,0)){let{width:r,height:s}=n;this._imgDims=new Fn(r,s),this._shift=a,this._positions=t.map(i=>i.mul(new Oe(r,s)).add(a))}get shift(){return new Oe(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map(t=>t.sub(this._shift).div(new Oe(this.imageWidth,this.imageHeight)))}forSize(t,n){return new this.constructor(this.relativePositions,{width:t,height:n})}shiftBy(t,n){return new this.constructor(this.relativePositions,this._imgDims,new Oe(t,n))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,n={}){if(t){let s=t instanceof kt?t.box.floor():new pt(t);return this.shiftBy(s.x,s.y).align(null,n)}let{useDlibAlignment:a,minBoxPadding:r}={useDlibAlignment:!1,minBoxPadding:.2,...n};return a?this.alignDlib():this.alignMinBbox(r)}alignDlib(){let t=this.getRefPointsForAlignment(),[n,a,r]=t,s=d=>r.sub(d).magnitude(),i=(s(n)+s(a))/2,o=Math.floor(i/Uue),l=Co(t),u=Math.floor(Math.max(0,l.x-Wue*o)),p=Math.floor(Math.max(0,l.y-Vue*o));return new Yu(u,p,Math.min(o,this.imageWidth+u),Math.min(o,this.imageHeight+p))}alignMinBbox(t){let n=HE(this.positions);return n.pad(n.width*t,n.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var KE=class extends xa{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],Co([t[3],t[4]])]}};var Qu=class extends xa{getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(Co)}};var pd=class{constructor(t,n){this._label=t,this._distance=n}get label(){return this._label}get distance(){return this._distance}toString(t=!0){return`${this.label}${t?` (${_o(this.distance)})`:""}`}};var cd=class extends pt{constructor(n,a){super(n);this._label=a}static assertIsValidLabeledBox(n,a){if(pt.assertIsValidBox(n,a),!er(n.label))throw new Error(`${a} - expected property label (${n.label}) to be a number`)}get label(){return this._label}};var Pr=class{constructor(t,n){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(n)||n.some(a=>!(a instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=n}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let n=t.descriptors.map(a=>new Float32Array(a));return new Pr(t.label,n)}};var XE=class extends cd{constructor(n,a,r,s){super(n,a);this._score=r,this._classScore=s}static assertIsValidPredictedBox(n,a){if(cd.assertIsValidLabeledBox(n,a),!Ku(n.score)||!Ku(n.classScore))throw new Error(`${a} - expected properties score (${n.score}) and (${n.classScore}) to be a number between [0, 1]`)}get score(){return this._score}get classScore(){return this._classScore}};function Or(e){return e.detection instanceof kt}function Ju(e,t){return{...e,...{detection:t}}}function W0(){let e=window.fetch;if(!e)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:e,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function dd(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function eg(e){let t="";if(!e&&dd())try{e=OA("fs")}catch(a){t=a.toString()}return{readFile:e?a=>new Promise((r,s)=>{e.readFile(a,(i,o)=>i?s(i):r(o))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function V0(){let e=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,n=global.Video||global.HTMLVideoElement,a=()=>{if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},r=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},s=()=>{if(n)return new n;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},i=global.fetch,o=eg();return{Canvas:e||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:a,createImageElement:r,createVideoElement:s,fetch:i,...o}}function U0(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var on;function Gue(){if(!on)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return on}function G0(e){on=e}function H0(){return U0()?G0(W0()):dd()?G0(V0()):null}function Hue(e){if(on||H0(),!on)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=on.Canvas,Image:n=on.Image}=e;on.Canvas=t,on.Image=n,on.createCanvasElement=e.createCanvasElement||(()=>new t),on.createImageElement=e.createImageElement||(()=>new n),on.ImageData=e.ImageData||on.ImageData,on.Video=e.Video||on.Video,on.fetch=e.fetch||on.fetch,on.readFile=e.readFile||on.readFile}var at={getEnv:Gue,setEnv:G0,initialize:H0,createBrowserEnv:W0,createFileSystem:eg,createNodejsEnv:V0,monkeyPatch:Hue,isBrowser:U0,isNodejs:dd};H0();function Zu(e){return!at.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function aa(e){let{Canvas:t,CanvasRenderingContext2D:n}=at.getEnv();if(e instanceof n)return e;let a=Zu(e);if(!(a instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let r=a.getContext("2d");if(!r)throw new Error("resolveContext2d - canvas 2d context is null");return r}var j0=(r=>(r.TOP_LEFT="TOP_LEFT",r.TOP_RIGHT="TOP_RIGHT",r.BOTTOM_LEFT="BOTTOM_LEFT",r.BOTTOM_RIGHT="BOTTOM_RIGHT",r))(j0||{}),ep=class{constructor(t={}){let{anchorPosition:n,backgroundColor:a,fontColor:r,fontSize:s,fontStyle:i,padding:o}=t;this.anchorPosition=n||"TOP_LEFT",this.backgroundColor=a||"rgba(0, 0, 0, 0.5)",this.fontColor=r||"rgba(255, 255, 255, 1)",this.fontSize=s||14,this.fontStyle=i||"Georgia",this.padding=o||4}},Lr=class{constructor(t,n,a={}){this.text=typeof t=="string"?[t]:t instanceof Lr?t.text:t,this.anchor=n,this.options=new ep(a)}measureWidth(t){let{padding:n}=this.options;return this.text.map(a=>t.measureText(a).width).reduce((a,r)=>a{let m=l+d.x,f=l+d.y+(h+1)*i;a.fillText(c,m,f)})}};var tg=class{constructor(t={}){let{boxColor:n,lineWidth:a,label:r,drawLabelOptions:s}=t;this.boxColor=n||"rgba(0, 0, 255, 1)",this.lineWidth=a||2,this.label=r;let i={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new ep({...i,...s})}},hd=class{constructor(t,n={}){this.box=new pt(t),this.options=new tg(n)}draw(t){let n=aa(t),{boxColor:a,lineWidth:r}=this.options,{x:s,y:i,width:o,height:l}=this.box;n.strokeStyle=a,n.lineWidth=r,n.strokeRect(s,i,o,l);let{label:u}=this.options;u&&new Lr([u],{x:s-r/2,y:i},this.options.drawLabelOptions).draw(t)}};function jue(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof kt?a.score:Or(a)?a.detection.score:void 0,s=a instanceof kt?a.box:Or(a)?a.detection.box:new pt(a),i=r?`${_o(r)}`:void 0;new hd(s,{label:i}).draw(e)})}function ng(e){let{Image:t,Video:n}=at.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function YE(e){return new Promise((t,n)=>{(e instanceof at.getEnv().Canvas||ng(e))&&t(null);function a(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",r),s.currentTarget.removeEventListener("error",a),n(s))}function r(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",r),s.currentTarget.removeEventListener("error",a),t(s))}e.addEventListener("load",r),e.addEventListener("error",a)})}function QE(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToImage - expected buf to be of type: Blob"));let a=new FileReader;a.onload=()=>{typeof a.result!="string"&&n(new Error("bufferToImage - expected reader.result to be a string, in onload"));let r=at.getEnv().createImageElement();r.onload=()=>t(r),r.onerror=n,r.src=a.result},a.onerror=n,a.readAsDataURL(e)})}function tp(e){let{Image:t,Video:n}=at.getEnv();return e instanceof t?new Fn(e.naturalWidth,e.naturalHeight):e instanceof n?new Fn(e.videoWidth,e.videoHeight):new Fn(e.width,e.height)}function np({width:e,height:t}){let{createCanvasElement:n}=at.getEnv(),a=n();return a.width=e,a.height=t,a}function ag(e,t){let{ImageData:n}=at.getEnv();if(!(e instanceof n)&&!ng(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:a,height:r}=t||tp(e),s=np({width:a,height:r});return e instanceof n?aa(s).putImageData(e,0,0):aa(s).drawImage(e,0,0,a,r),s}async function JE(e,t){let n=t||at.getEnv().createCanvasElement(),[a,r,s]=e.shape.slice(ba(e)?1:0),i=O(()=>e.as3D(a,r,s).toInt());return await yo.toPixels(i,n),i.dispose(),n}function q0(e){let{Image:t,Canvas:n,Video:a}=at.getEnv();return e instanceof t||e instanceof n||e instanceof a}function ZE(e,t,n=!1){let{Image:a,Canvas:r}=at.getEnv();if(!(e instanceof a||e instanceof r))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return np({width:1,height:1});let s=tp(e),i=t/Math.max(s.height,s.width),o=i*s.width,l=i*s.height,u=np({width:t,height:t}),p=e instanceof r?e:ag(e),d=Math.abs(o-l)/2,c=n&&o0&&p.height>0&&aa(u).drawImage(p,c,h,o,l),u}var zr=class{constructor(t,n=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=n,this._batchSize=t.length,t.forEach((a,r)=>{if(Mr(a)){this._imageTensors[r]=a,this._inputDimensions[r]=a.shape;return}if(ba(a)){let i=a.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[r]=a,this._inputDimensions[r]=a.shape.slice(1);return}let s=a instanceof at.getEnv().Canvas?a:ag(a);this._canvases[r]=s,this._inputDimensions[r]=[s.height,s.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return gr(this.batchSize,0,1).map((t,n)=>this.getReshapedInputDimensions(n))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let n=this.getInputWidth(t),a=this.getInputHeight(t);return B0({width:n,height:a},this.inputSize)}toBatchTensor(t,n=!0){return this._inputSize=t,O(()=>{let a=gr(this.batchSize,0,1).map(s=>{let i=this.getInput(s);if(i instanceof Fe){let o=ba(i)?i:mn(i);return o=qE(o,n),(o.shape[1]!==t||o.shape[2]!==t)&&(o=Ln.resizeBilinear(o,[t,t],!1,!1)),o.as3D(t,t,3)}if(i instanceof at.getEnv().Canvas)return yo.fromPixels(ZE(i,t,n));throw new Error(`toBatchTensor - at batchIdx ${s}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)});return Mt(a.map(s=>oe(s,"float32"))).as4D(this.batchSize,t,t,3)})}};async function It(e){if(e instanceof zr)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");let n=r=>Array.isArray(e)?` at input index ${r}:`:"",a=t.map(Zu);return a.forEach((r,s)=>{if(!q0(r)&&!Mr(r)&&!ba(r))throw typeof t[s]=="string"?new Error(`toNetInput -${n(s)} string passed, but could not resolve HTMLElement for element id ${t[s]}`):new Error(`toNetInput -${n(s)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(ba(r)){let i=r.shape[0];if(i!==1)throw new Error(`toNetInput -${n(s)} tf.Tensor4D with batchSize ${i} passed, but not supported in input array`)}}),await Promise.all(a.map(r=>q0(r)&&YE(r))),new zr(a,Array.isArray(e))}async function md(e,t){let{Canvas:n}=at.getEnv(),a=e;if(!(e instanceof n)){let i=await It(e);if(i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let o=i.getInput(0);a=o instanceof n?o:await JE(o)}let r=aa(a);return t.map(i=>i instanceof kt?i.forSize(a.width,a.height).box.floor():i).map(i=>i.clipAtImageBorders(a.width,a.height)).map(({x:i,y:o,width:l,height:u})=>{let p=np({width:l,height:u});return l>0&&u>0&&aa(p).putImageData(r.getImageData(i,o,l,u),0,0),p})}async function fd(e,t){if(!Mr(e)&&!ba(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(ba(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return O(()=>{let[n,a,r]=e.shape.slice(ba(e)?1:0);return t.map(o=>o instanceof kt?o.forSize(a,n).box:o).map(o=>o.clipAtImageBorders(a,n)).filter(o=>o.width>0&&o.height>0).map(({x:o,y:l,width:u,height:p})=>Du(e.as3D(n,a,r),[l,o,0],[p,u,r]))})}async function Ts(e,t){let{fetch:n}=at.getEnv(),a=await n(e,t);if(!(a.status<400))throw new Error(`failed to fetch: (${a.status}) ${a.statusText}, from url: ${a.url}`);return a}async function kxe(e){let t=await Ts(e),n=await t.blob();if(!n.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${n.type}, for url: ${t.url}`);return QE(n)}async function eF(e){return(await Ts(e)).json()}async function _xe(e){return new Float32Array(await(await Ts(e)).arrayBuffer())}function tF(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToVideo - expected buf to be of type: Blob"));let a=at.getEnv().createVideoElement();a.oncanplay=()=>t(a),a.onerror=n,a.playsInline=!0,a.muted=!0,a.src=URL.createObjectURL(e),a.play()})}async function Dxe(e){let t=await Ts(e),n=await t.blob();if(!n.type.startsWith("video/"))throw new Error(`fetchVideo - expected blob type to be of type video/*, instead have: ${n.type}, for url: ${t.url}`);return tF(n)}function rg(e,t){let n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if(e==="/")return{modelBaseUri:"/",manifestUri:`/${n}`};let a=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"";e=e.replace(a,"");let r=e.split("/").filter(o=>o),s=e.endsWith(".json")?r[r.length-1]:n,i=a+(e.endsWith(".json")?r.slice(0,r.length-1):r).join("/");return i=e.startsWith("/")?`/${i}`:i,{modelBaseUri:i,manifestUri:i==="/"?`/${s}`:`${i}/${s}`}}async function nF(e,t){let{manifestUri:n,modelBaseUri:a}=rg(e,t),r=await eF(n);return en.loadWeights(r,a)}function Bxe(e,t,n=!1){let{width:a,height:r}=n?tp(t):t;return e.width=a,e.height=r,{width:a,height:r}}var dn=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:n,objProp:a}=this.traversePropertyPath(t);return n[a]}reassignParamFromPath(t,n){let{obj:a,objProp:r}=this.traversePropertyPath(t);a[r].dispose(),a[r]=n}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof as)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof as))}variable(){this.getFrozenParams().forEach(({path:t,tensor:n})=>{this.reassignParamFromPath(t,n.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:n})=>{let a=Qn(n.dataSync());n.dispose(),this.reassignParamFromPath(t,a)})}dispose(t=!0){this.getParamList().forEach(n=>{if(t&&n.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${n.path}`);n.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,n)=>t.concat(n)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let n=await nF(t,this.getDefaultModelName());this.loadFromWeightMap(n)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:n}=at.getEnv(),{manifestUri:a,modelBaseUri:r}=rg(t,this.getDefaultModelName()),s=u=>Promise.all(u.map(p=>n(p).then(d=>d.buffer))),i=en.weightsLoaderFactory(s),o=JSON.parse((await n(a)).toString()),l=await i(o,r);this.loadFromWeightMap(l)}loadFromWeightMap(t){let{paramMappings:n,params:a}=this.extractParamsFromWeightMap(t);this._paramMappings=n,this._params=a}extractWeights(t){let{paramMappings:n,params:a}=this.extractParams(t);this._paramMappings=n,this._params=a}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let n=t.split("/").reduce((s,i)=>{if(!s.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${t}`);return{obj:s.nextObj,objProp:i,nextObj:s.nextObj[i]}},{nextObj:this.params}),{obj:a,objProp:r}=n;if(!a||!r||!(a[r]instanceof Fe))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:a,objProp:r}}};function jn(e,t,n){return O(()=>{let a=xo(e,t.depthwise_filter,t.pointwise_filter,n,"same");return a=J(a,t.bias),a})}function sg(e,t,n=!1){return O(()=>{let a=Xe(n?J(Rt(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):jn(e,t.conv0,[2,2])),r=jn(a,t.conv1,[1,1]),s=Xe(J(a,r)),i=jn(s,t.conv2,[1,1]);return Xe(J(a,J(r,i)))})}function gd(e,t,n=!1,a=!0){return O(()=>{let r=Xe(n?J(Rt(e,t.conv0.filters,a?[2,2]:[1,1],"same"),t.conv0.bias):jn(e,t.conv0,a?[2,2]:[1,1])),s=jn(r,t.conv1,[1,1]),i=Xe(J(r,s)),o=jn(i,t.conv2,[1,1]),l=Xe(J(r,J(s,o))),u=jn(l,t.conv3,[1,1]);return Xe(J(r,J(s,J(o,u))))})}function Eo(e,t,n="same",a=!1){return O(()=>{let r=J(Rt(e,t.filters,[1,1],n),t.bias);return a?Xe(r):r})}function An(e,t){Object.keys(e).forEach(n=>{t.some(a=>a.originalPath===n)||e[n].dispose()})}function ap(e,t){return(n,a,r,s)=>{let i=Ja(e(n*a*r*r),[r,r,n,a]),o=qe(e(a));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:o}}}function ig(e,t){return(n,a,r)=>{let s=Ha(e(n*a),[n,a]),i=qe(e(a));return t.push({paramPath:`${r}/weights`},{paramPath:`${r}/bias`}),{weights:s,bias:i}}}var yd=class{constructor(t,n,a){this.depthwise_filter=t;this.pointwise_filter=n;this.bias=a}};function rp(e,t){return(n,a,r)=>{let s=Ja(e(9*n),[3,3,n,1]),i=Ja(e(n*a),[1,1,n,a]),o=qe(e(a));return t.push({paramPath:`${r}/depthwise_filter`},{paramPath:`${r}/pointwise_filter`},{paramPath:`${r}/bias`}),new yd(s,i,o)}}function sp(e){return t=>{let n=e(`${t}/depthwise_filter`,4),a=e(`${t}/pointwise_filter`,4),r=e(`${t}/bias`,1);return new yd(n,a,r)}}function ra(e,t){return(n,a,r)=>{let s=e[n];if(!To(s,a))throw new Error(`expected weightMap[${n}] to be a Tensor${a}D, instead have ${s}`);return t.push({originalPath:n,paramPath:r||n}),s}}function $n(e){let t=e;function n(r){let s=t.slice(0,r);return t=t.slice(r),s}function a(){return t}return{extractWeights:n,getRemainingWeights:a}}function og(e,t){let n=ap(e,t),a=rp(e,t);function r(i,o,l,u=!1){let p=u?n(i,o,3,`${l}/conv0`):a(i,o,`${l}/conv0`),d=a(o,o,`${l}/conv1`),c=a(o,o,`${l}/conv2`);return{conv0:p,conv1:d,conv2:c}}function s(i,o,l,u=!1){let{conv0:p,conv1:d,conv2:c}=r(i,o,l,u),h=a(o,o,`${l}/conv3`);return{conv0:p,conv1:d,conv2:c,conv3:h}}return{extractDenseBlock3Params:r,extractDenseBlock4Params:s}}function aF(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),{extractDenseBlock4Params:r}=og(n,t),s=r(3,32,"dense0",!0),i=r(32,64,"dense1"),o=r(64,128,"dense2"),l=r(128,256,"dense3");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o,dense3:l}}}function lg(e){return t=>{let n=e(`${t}/filters`,4),a=e(`${t}/bias`,1);return{filters:n,bias:a}}}function ug(e,t){let n=ra(e,t),a=lg(n),r=sp(n);function s(o,l=!1){let u=l?a(`${o}/conv0`):r(`${o}/conv0`),p=r(`${o}/conv1`),d=r(`${o}/conv2`);return{conv0:u,conv1:p,conv2:d}}function i(o,l=!1){let u=l?a(`${o}/conv0`):r(`${o}/conv0`),p=r(`${o}/conv1`),d=r(`${o}/conv2`),c=r(`${o}/conv3`);return{conv0:u,conv1:p,conv2:d,conv3:c}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:i}}function rF(e){let t=[],{extractDenseBlock4Params:n}=ug(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return An(e,t),{params:a,paramMappings:t}}var ip=class extends dn{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(112,!0),"float32"),s=yr(a,[122.782,117.001,104.298]).div(255),i=gd(s,n.dense0,!0);return i=gd(i,n.dense1),i=gd(i,n.dense2),i=gd(i,n.dense3),i=fa(i,[7,7],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await It(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return rF(t)}extractParams(t){return aF(t)}};function bd(e,t){return O(()=>J(De(e,t.weights),t.bias))}function sF(e,t,n){let a=[],{extractWeights:r,getRemainingWeights:s}=$n(e),o=ig(r,a)(t,n,"fc");if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:a,params:{fc:o}}}function iF(e){let t=[],n=ra(e,t);function a(s){let i=n(`${s}/weights`,2),o=n(`${s}/bias`,1);return{weights:i,bias:o}}let r={fc:a("fc")};return An(e,t),{params:r,paramMappings:t}}function pg(e){let t={},n={};return Object.keys(e).forEach(a=>{let r=a.startsWith("fc")?n:t;r[a]=e[a]}),{featureExtractorMap:t,classifierMap:n}}var op=class extends dn{constructor(n,a){super(n);this._faceFeatureExtractor=a}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:a}=this;if(!a)throw new Error(`${this._name} - load model before inference`);return O(()=>{let r=n instanceof zr?this.faceFeatureExtractor.forwardInput(n):n;return bd(r.as2D(r.shape[0],-1),a.fc)})}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:a,paramMappings:r}=this.extractClassifierParams(n);this._params=a,this._paramMappings=r}extractClassifierParams(n){return sF(n,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=pg(n);return this.faceFeatureExtractor.loadFromWeightMap(a),iF(r)}extractParams(n){let a=this.getClassifierChannelsIn(),r=this.getClassifierChannelsOut(),s=r*a+r,i=n.slice(0,n.length-s),o=n.slice(n.length-s);return this.faceFeatureExtractor.extractWeights(i),this.extractClassifierParams(o)}};var oF=["neutral","happy","sad","angry","fearful","disgusted","surprised"],_s=class{constructor(t){this.neutral=0;this.happy=0;this.sad=0;this.angry=0;this.fearful=0;this.disgusted=0;this.surprised=0;if(t.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${t.length}`);oF.forEach((n,a)=>{this[n]=t[a]})}asSortedArray(){return oF.map(t=>({expression:t,probability:this[t]})).sort((t,n)=>n.probability-t.probability)}};var cg=class extends op{constructor(t=new ip){super("FaceExpressionNet",t)}forwardInput(t){return O(()=>Qa(this.runNet(t)))}async forward(t){return this.forwardInput(await It(t))}async predictExpressions(t){let n=await It(t),a=await this.forwardInput(n),r=await Promise.all(ht(a).map(async i=>{let o=i.dataSync();return i.dispose(),o}));a.dispose();let s=r.map(i=>new _s(i));return n.isBatchInput?s:s[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function lF(e){return e.expressions instanceof _s}function K0(e,t){return{...e,...{expressions:t}}}function que(e,t,n=.1,a){(Array.isArray(t)?t:[t]).forEach(s=>{let i=s instanceof _s?s:lF(s)?s.expressions:void 0;if(!i)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let l=i.asSortedArray().filter(d=>d.probability>n),u=Or(s)?s.detection.box.bottomLeft:a||new Oe(0,0);new Lr(l.map(d=>`${d.expression} (${_o(d.probability)})`),u).draw(e)})}function lp(e){return Or(e)&&e.landmarks instanceof xa&&e.unshiftedLandmarks instanceof xa&&e.alignedRect instanceof kt}function Kue(e){let t=(o,l,u,p)=>Math.atan2(p-l,u-o)%Math.PI,n=o=>o*180/Math.PI,a={roll:void 0,pitch:void 0,yaw:void 0};if(!e||!e._positions||e._positions.length!==68)return a;let r=e._positions;a.roll=-t(r[36]._x,r[36]._y,r[45]._x,r[45]._y),a.pitch=t(0,Math.abs(r[0]._x-r[30]._x)/r[30]._x,Math.PI,Math.abs(r[16]._x-r[30]._x)/r[30]._x);let s=r.reduce((o,l)=>oo>l._y?o:l._y,-1/0);return a.yaw=Math.PI*(e._imgDims._height/(i-s)/1.4-1),a}function xd(e,t){let{box:n}=e.detection,a=t.shiftBy(n.x,n.y),r=a.align(),{imageDims:s}=e.detection,i=new kt(e.detection.score,r.rescale(s.reverse()),s),o=Kue(t);return{...e,...{landmarks:a,unshiftedLandmarks:t,alignedRect:i,angle:o}}}var dg=class{constructor(t={}){let{drawLines:n=!0,drawPoints:a=!0,lineWidth:r,lineColor:s,pointSize:i,pointColor:o}=t;this.drawLines=n,this.drawPoints=a,this.lineWidth=r||1,this.pointSize=i||2,this.lineColor=s||"rgba(0, 255, 255, 1)",this.pointColor=o||"rgba(255, 0, 255, 1)"}},hg=class{constructor(t,n={}){this.faceLandmarks=t,this.options=new dg(n)}draw(t){let n=aa(t),{drawLines:a,drawPoints:r,lineWidth:s,lineColor:i,pointSize:o,pointColor:l}=this.options;if(a&&this.faceLandmarks instanceof Qu&&(n.strokeStyle=i,n.lineWidth=s,Rr(n,this.faceLandmarks.getJawOutline()),Rr(n,this.faceLandmarks.getLeftEyeBrow()),Rr(n,this.faceLandmarks.getRightEyeBrow()),Rr(n,this.faceLandmarks.getNose()),Rr(n,this.faceLandmarks.getLeftEye(),!0),Rr(n,this.faceLandmarks.getRightEye(),!0),Rr(n,this.faceLandmarks.getMouth(),!0)),r){n.strokeStyle=l,n.fillStyle=l;let u=p=>{n.beginPath(),n.arc(p.x,p.y,o,0,2*Math.PI),n.fill()};this.faceLandmarks.positions.forEach(u)}}};function Xue(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof xa?a:lp(a)?a.landmarks:void 0;if(!r)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new hg(r).draw(e)})}var pF="1.6.10";function Jue(e,t){let n=ap(e,t),a=rp(e,t);function r(i,o,l){let u=a(i,o,`${l}/separable_conv0`),p=a(o,o,`${l}/separable_conv1`),d=n(i,o,1,`${l}/expansion_conv`);return{separable_conv0:u,separable_conv1:p,expansion_conv:d}}function s(i,o){let l=a(i,i,`${o}/separable_conv0`),u=a(i,i,`${o}/separable_conv1`),p=a(i,i,`${o}/separable_conv2`);return{separable_conv0:l,separable_conv1:u,separable_conv2:p}}return{extractConvParams:n,extractSeparableConvParams:a,extractReductionBlockParams:r,extractMainBlockParams:s}}function cF(e,t){let n=[],{extractWeights:a,getRemainingWeights:r}=$n(e),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:o,extractMainBlockParams:l}=Jue(a,n),u=s(3,32,3,"entry_flow/conv_in"),p=o(32,64,"entry_flow/reduction_block_0"),d=o(64,128,"entry_flow/reduction_block_1"),c={conv_in:u,reduction_block_0:p,reduction_block_1:d},h={};gr(t,0,1).forEach(y=>{h[`main_block_${y}`]=l(128,`middle_flow/main_block_${y}`)});let m=o(128,256,"exit_flow/reduction_block"),f=i(256,512,"exit_flow/separable_conv"),g={reduction_block:m,separable_conv:f};if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:n,params:{entry_flow:c,middle_flow:h,exit_flow:g}}}function Zue(e,t){let n=ra(e,t),a=lg(n),r=sp(n);function s(o){let l=r(`${o}/separable_conv0`),u=r(`${o}/separable_conv1`),p=a(`${o}/expansion_conv`);return{separable_conv0:l,separable_conv1:u,expansion_conv:p}}function i(o){let l=r(`${o}/separable_conv0`),u=r(`${o}/separable_conv1`),p=r(`${o}/separable_conv2`);return{separable_conv0:l,separable_conv1:u,separable_conv2:p}}return{extractConvParams:a,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:i}}function dF(e,t){let n=[],{extractConvParams:a,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:i}=Zue(e,n),o=a("entry_flow/conv_in"),l=s("entry_flow/reduction_block_0"),u=s("entry_flow/reduction_block_1"),p={conv_in:o,reduction_block_0:l,reduction_block_1:u},d={};gr(t,0,1).forEach(f=>{d[`main_block_${f}`]=i(`middle_flow/main_block_${f}`)});let c=s("exit_flow/reduction_block"),h=r("exit_flow/separable_conv"),m={reduction_block:c,separable_conv:h};return An(e,n),{params:{entry_flow:p,middle_flow:d,exit_flow:m},paramMappings:n}}function hF(e,t,n){return J(Rt(e,t.filters,n,"same"),t.bias)}function X0(e,t,n=!0){let a=n?Xe(e):e;return a=jn(a,t.separable_conv0,[1,1]),a=jn(Xe(a),t.separable_conv1,[1,1]),a=Pt(a,[3,3],[2,2],"same"),a=J(a,hF(e,t.expansion_conv,[2,2])),a}function epe(e,t){let n=jn(Xe(e),t.separable_conv0,[1,1]);return n=jn(Xe(n),t.separable_conv1,[1,1]),n=jn(Xe(n),t.separable_conv2,[1,1]),n=J(n,e),n}var mg=class extends dn{constructor(n){super("TinyXception");this._numMainBlocks=n}forwardInput(n){let{params:a}=this;if(!a)throw new Error("TinyXception - load model before inference");return O(()=>{let r=oe(n.toBatchTensor(112,!0),"float32"),i=yr(r,[122.782,117.001,104.298]).div(255),o=Xe(hF(i,a.entry_flow.conv_in,[2,2]));return o=X0(o,a.entry_flow.reduction_block_0,!1),o=X0(o,a.entry_flow.reduction_block_1),gr(this._numMainBlocks,0,1).forEach(l=>{o=epe(o,a.middle_flow[`main_block_${l}`])}),o=X0(o,a.exit_flow.reduction_block),o=Xe(jn(o,a.exit_flow.separable_conv,[1,1])),o})}async forward(n){return this.forwardInput(await It(n))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(n){return dF(n,this._numMainBlocks)}extractParams(n){return cF(n,this._numMainBlocks)}};function mF(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),r=ig(n,t),s=r(512,1,"fc/age"),i=r(512,2,"fc/gender");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{fc:{age:s,gender:i}}}}function fF(e){let t=[],n=ra(e,t);function a(s){let i=n(`${s}/weights`,2),o=n(`${s}/bias`,1);return{weights:i,bias:o}}let r={fc:{age:a("fc/age"),gender:a("fc/gender")}};return An(e,t),{params:r,paramMappings:t}}var Y0=(n=>(n.FEMALE="female",n.MALE="male",n))(Y0||{});var fg=class extends dn{constructor(n=new mg(2)){super("AgeGenderNet");this._faceFeatureExtractor=n}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:a}=this;if(!a)throw new Error(`${this._name} - load model before inference`);return O(()=>{let r=n instanceof zr?this.faceFeatureExtractor.forwardInput(n):n,s=fa(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),i=bd(s,a.fc.age).as1D(),o=bd(s,a.fc.gender);return{age:i,gender:o}})}forwardInput(n){return O(()=>{let{age:a,gender:r}=this.runNet(n);return{age:a,gender:Qa(r)}})}async forward(n){return this.forwardInput(await It(n))}async predictAgeAndGender(n){let a=await It(n),r=await this.forwardInput(a),s=ht(r.age),i=ht(r.gender),o=s.map((u,p)=>({ageTensor:u,genderTensor:i[p]})),l=await Promise.all(o.map(async({ageTensor:u,genderTensor:p})=>{let d=u.dataSync()[0],c=p.dataSync()[0],h=c>.5,m=h?"male":"female",f=h?c:1-c;return u.dispose(),p.dispose(),{age:d,gender:m,genderProbability:f}}));return r.age.dispose(),r.gender.dispose(),a.isBatchInput?l:l[0]}getDefaultModelName(){return"age_gender_model"}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:a,paramMappings:r}=this.extractClassifierParams(n);this._params=a,this._paramMappings=r}extractClassifierParams(n){return mF(n)}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=pg(n);return this.faceFeatureExtractor.loadFromWeightMap(a),fF(r)}extractParams(n){let r=n.slice(0,n.length-1539),s=n.slice(n.length-1539);return this.faceFeatureExtractor.extractWeights(r),this.extractClassifierParams(s)}};var up=class extends op{postProcess(t,n,a){let r=a.map(({width:i,height:o})=>{let l=n/Math.max(o,i);return{width:i*l,height:o*l}}),s=r.length;return O(()=>{let i=(d,c)=>Mt([_n([68],d,"float32"),_n([68],c,"float32")],1).as2D(1,136).as1D(),o=(d,c)=>{let{width:h,height:m}=r[d];return c(h,m)?Math.abs(h-m)/2:0},l=d=>o(d,(c,h)=>co(d,(c,h)=>hi(l(c),u(c))))).div(Mt(Array.from(Array(s),(d,c)=>i(r[c].width,r[c].height))))})}forwardInput(t){return O(()=>{let n=this.runNet(t);return this.postProcess(n,t.inputSize,t.inputDimensions.map(([a,r])=>({height:a,width:r})))})}async forward(t){return this.forwardInput(await It(t))}async detectLandmarks(t){let n=await It(t),a=O(()=>ht(this.forwardInput(n))),r=await Promise.all(a.map(async(s,i)=>{let o=Array.from(s.dataSync()),l=o.filter((p,d)=>Qf(d)),u=o.filter((p,d)=>!Qf(d));return new Qu(Array(68).fill(0).map((p,d)=>new Oe(l[d],u[d])),{height:n.getInputHeight(i),width:n.getInputWidth(i)})}));return a.forEach(s=>s.dispose()),n.isBatchInput?r:r[0]}getClassifierChannelsOut(){return 136}};var pp=class extends up{constructor(t=new ip){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function gF(e){let t=[],{extractDenseBlock3Params:n}=ug(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return An(e,t),{params:a,paramMappings:t}}function yF(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),{extractDenseBlock3Params:r}=og(n,t),s=r(3,32,"dense0",!0),i=r(32,64,"dense1"),o=r(64,128,"dense2");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o}}}var gg=class extends dn{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(112,!0),"float32"),s=yr(a,[122.782,117.001,104.298]).div(255),i=sg(s,n.dense0,!0);return i=sg(i,n.dense1),i=sg(i,n.dense2),i=fa(i,[14,14],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await It(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return gF(t)}extractParams(t){return yF(t)}};var yg=class extends up{constructor(t=new gg){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var bF=class extends pp{};function xF(e,t){return J(B(e,t.weights),t.biases)}function Q0(e,t,n,a,r="same"){let{filters:s,bias:i}=t.conv,o=Rt(e,s,n,r);return o=J(o,i),o=xF(o,t.scale),a?Xe(o):o}function vF(e,t){return Q0(e,t,[1,1],!0)}function J0(e,t){return Q0(e,t,[1,1],!1)}function bg(e,t){return Q0(e,t,[2,2],!0,"valid")}function tpe(e,t){function n(o,l,u){let p=e(o),d=p.length/(l*u*u);if(z0(d))throw new Error(`depth has to be an integer: ${d}, weights.length: ${p.length}, numFilters: ${l}, filterSize: ${u}`);return O(()=>Ae(Ja(p,[l,d,u,u]),[2,3,1,0]))}function a(o,l,u,p){let d=n(o,l,u),c=qe(e(l));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/bias`}),{filters:d,bias:c}}function r(o,l){let u=qe(e(o)),p=qe(e(o));return t.push({paramPath:`${l}/weights`},{paramPath:`${l}/biases`}),{weights:u,biases:p}}function s(o,l,u,p){let d=a(o,l,u,`${p}/conv`),c=r(l,`${p}/scale`);return{conv:d,scale:c}}function i(o,l,u,p,d=!1){let c=s((d?.5:1)*o,l,u,`${p}/conv1`),h=s(o,l,u,`${p}/conv2`);return{conv1:c,conv2:h}}return{extractConvLayerParams:s,extractResidualLayerParams:i}}function wF(e){let{extractWeights:t,getRemainingWeights:n}=$n(e),a=[],{extractConvLayerParams:r,extractResidualLayerParams:s}=tpe(t,a),i=r(4704,32,7,"conv32_down"),o=s(9216,32,3,"conv32_1"),l=s(9216,32,3,"conv32_2"),u=s(9216,32,3,"conv32_3"),p=s(36864,64,3,"conv64_down",!0),d=s(36864,64,3,"conv64_1"),c=s(36864,64,3,"conv64_2"),h=s(36864,64,3,"conv64_3"),m=s(147456,128,3,"conv128_down",!0),f=s(147456,128,3,"conv128_1"),g=s(147456,128,3,"conv128_2"),y=s(589824,256,3,"conv256_down",!0),b=s(589824,256,3,"conv256_1"),x=s(589824,256,3,"conv256_2"),v=s(589824,256,3,"conv256_down_out"),k=O(()=>Ae(Ha(t(256*128),[128,256]),[1,0]));if(a.push({paramPath:"fc"}),n().length!==0)throw new Error(`weights remaing after extract: ${n().length}`);return{params:{conv32_down:i,conv32_1:o,conv32_2:l,conv32_3:u,conv64_down:p,conv64_1:d,conv64_2:c,conv64_3:h,conv128_down:m,conv128_1:f,conv128_2:g,conv256_down:y,conv256_1:b,conv256_2:x,conv256_down_out:v,fc:k},paramMappings:a}}function npe(e,t){let n=ra(e,t);function a(i){let o=n(`${i}/scale/weights`,1),l=n(`${i}/scale/biases`,1);return{weights:o,biases:l}}function r(i){let o=n(`${i}/conv/filters`,4),l=n(`${i}/conv/bias`,1),u=a(i);return{conv:{filters:o,bias:l},scale:u}}function s(i){return{conv1:r(`${i}/conv1`),conv2:r(`${i}/conv2`)}}return{extractConvLayerParams:r,extractResidualLayerParams:s}}function kF(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:a}=npe(e,t),r=n("conv32_down"),s=a("conv32_1"),i=a("conv32_2"),o=a("conv32_3"),l=a("conv64_down"),u=a("conv64_1"),p=a("conv64_2"),d=a("conv64_3"),c=a("conv128_down"),h=a("conv128_1"),m=a("conv128_2"),f=a("conv256_down"),g=a("conv256_1"),y=a("conv256_2"),b=a("conv256_down_out"),{fc:x}=e;if(t.push({originalPath:"fc",paramPath:"fc"}),!L0(x))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${x}`);let v={conv32_down:r,conv32_1:s,conv32_2:i,conv32_3:o,conv64_down:l,conv64_1:u,conv64_2:p,conv64_3:d,conv128_down:c,conv128_1:h,conv128_2:m,conv256_down:f,conv256_1:g,conv256_2:y,conv256_down_out:b,fc:x};return An(e,t),{params:v,paramMappings:t}}function tr(e,t){let n=vF(e,t.conv1);return n=J0(n,t.conv2),n=J(n,e),n=Xe(n),n}function vd(e,t){let n=bg(e,t.conv1);n=J0(n,t.conv2);let a=fa(e,2,2,"valid"),r=St(a.shape),s=a.shape[3]!==n.shape[3];if(a.shape[1]!==n.shape[1]||a.shape[2]!==n.shape[2]){let o=[...n.shape];o[1]=1;let l=St(o);n=Ze([n,l],1);let u=[...n.shape];u[2]=1;let p=St(u);n=Ze([n,p],2)}return a=s?Ze([a,r],3):a,n=J(a,n),n=Xe(n),n}var cp=class extends dn{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(150,!0),"float32"),s=yr(a,[122.782,117.001,104.298]).div(255),i=bg(s,n.conv32_down);i=Pt(i,3,2,"valid"),i=tr(i,n.conv32_1),i=tr(i,n.conv32_2),i=tr(i,n.conv32_3),i=vd(i,n.conv64_down),i=tr(i,n.conv64_1),i=tr(i,n.conv64_2),i=tr(i,n.conv64_3),i=vd(i,n.conv128_down),i=tr(i,n.conv128_1),i=tr(i,n.conv128_2),i=vd(i,n.conv256_down),i=tr(i,n.conv256_1),i=tr(i,n.conv256_2),i=vd(i,n.conv256_down_out);let o=i.mean([1,2]);return De(o,n.fc)})}async forward(t){return this.forwardInput(await It(t))}async computeFaceDescriptor(t){var s;if((s=t==null?void 0:t.shape)!=null&&s.some(i=>i<=0))return new Float32Array(128);let n=await It(t),a=O(()=>ht(this.forwardInput(n))),r=await Promise.all(a.map(i=>i.data()));return a.forEach(i=>i.dispose()),n.isBatchInput?r:r[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return kF(t)}extractParams(t){return wF(t)}};function dke(e){let t=new cp;return t.extractWeights(e),t}function Z0(e,t){return{...e,...{descriptor:t}}}function gke(e){return typeof e.age=="number"}function e1(e,t){return{...e,...{age:t}}}function vke(e){return(e.gender==="male"||e.gender==="female")&&Ku(e.genderProbability)}function t1(e,t,n){return{...e,...{gender:t,genderProbability:n}}}function ape(e,t){function n(l,u){let p=Ja(e(9*l),[3,3,l,1]),d=qe(e(l)),c=qe(e(l)),h=qe(e(l)),m=qe(e(l));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/batch_norm_scale`},{paramPath:`${u}/batch_norm_offset`},{paramPath:`${u}/batch_norm_mean`},{paramPath:`${u}/batch_norm_variance`}),{filters:p,batch_norm_scale:d,batch_norm_offset:c,batch_norm_mean:h,batch_norm_variance:m}}function a(l,u,p,d,c){let h=Ja(e(l*u*p*p),[p,p,l,u]),m=qe(e(u));return t.push({paramPath:`${d}/filters`},{paramPath:`${d}/${c?"batch_norm_offset":"bias"}`}),{filters:h,bias:m}}function r(l,u,p,d){let{filters:c,bias:h}=a(l,u,p,d,!0);return{filters:c,batch_norm_offset:h}}function s(l,u,p){let d=n(l,`${p}/depthwise_conv`),c=r(l,u,1,`${p}/pointwise_conv`);return{depthwise_conv:d,pointwise_conv:c}}function i(){let l=r(3,32,3,"mobilenetv1/conv_0"),u=s(32,64,"mobilenetv1/conv_1"),p=s(64,128,"mobilenetv1/conv_2"),d=s(128,128,"mobilenetv1/conv_3"),c=s(128,256,"mobilenetv1/conv_4"),h=s(256,256,"mobilenetv1/conv_5"),m=s(256,512,"mobilenetv1/conv_6"),f=s(512,512,"mobilenetv1/conv_7"),g=s(512,512,"mobilenetv1/conv_8"),y=s(512,512,"mobilenetv1/conv_9"),b=s(512,512,"mobilenetv1/conv_10"),x=s(512,512,"mobilenetv1/conv_11"),v=s(512,1024,"mobilenetv1/conv_12"),k=s(1024,1024,"mobilenetv1/conv_13");return{conv_0:l,conv_1:u,conv_2:p,conv_3:d,conv_4:c,conv_5:h,conv_6:m,conv_7:f,conv_8:g,conv_9:y,conv_10:b,conv_11:x,conv_12:v,conv_13:k}}function o(){let l=r(1024,256,1,"prediction_layer/conv_0"),u=r(256,512,3,"prediction_layer/conv_1"),p=r(512,128,1,"prediction_layer/conv_2"),d=r(128,256,3,"prediction_layer/conv_3"),c=r(256,128,1,"prediction_layer/conv_4"),h=r(128,256,3,"prediction_layer/conv_5"),m=r(256,64,1,"prediction_layer/conv_6"),f=r(64,128,3,"prediction_layer/conv_7"),g=a(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),y=a(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),b=a(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),x=a(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),v=a(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),k=a(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),T=a(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),_=a(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),E=a(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),A=a(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),M=a(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),$=a(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:l,conv_1:u,conv_2:p,conv_3:d,conv_4:c,conv_5:h,conv_6:m,conv_7:f,box_predictor_0:{box_encoding_predictor:g,class_predictor:y},box_predictor_1:{box_encoding_predictor:b,class_predictor:x},box_predictor_2:{box_encoding_predictor:v,class_predictor:k},box_predictor_3:{box_encoding_predictor:T,class_predictor:_},box_predictor_4:{box_encoding_predictor:E,class_predictor:A},box_predictor_5:{box_encoding_predictor:M,class_predictor:$}}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:o}}function IF(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),{extractMobilenetV1Params:r,extractPredictionLayerParams:s}=ape(n,t),i=r(),o=s(),u={extra_dim:Vm(n(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{params:{mobilenetv1:i,prediction_layer:o,output_layer:u},paramMappings:t}}function rpe(e,t){let n=ra(e,t);function a(u,p,d){let c=n(`${u}/Conv2d_${p}_pointwise/weights`,4,`${d}/filters`),h=n(`${u}/Conv2d_${p}_pointwise/convolution_bn_offset`,1,`${d}/batch_norm_offset`);return{filters:c,batch_norm_offset:h}}function r(u){let p=`mobilenetv1/conv_${u}`,d=`MobilenetV1/Conv2d_${u}_depthwise`,c=`${p}/depthwise_conv`,h=`${p}/pointwise_conv`,m=n(`${d}/depthwise_weights`,4,`${c}/filters`),f=n(`${d}/BatchNorm/gamma`,1,`${c}/batch_norm_scale`),g=n(`${d}/BatchNorm/beta`,1,`${c}/batch_norm_offset`),y=n(`${d}/BatchNorm/moving_mean`,1,`${c}/batch_norm_mean`),b=n(`${d}/BatchNorm/moving_variance`,1,`${c}/batch_norm_variance`);return{depthwise_conv:{filters:m,batch_norm_scale:f,batch_norm_offset:g,batch_norm_mean:y,batch_norm_variance:b},pointwise_conv:a("MobilenetV1",u,h)}}function s(){return{conv_0:a("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:r(1),conv_2:r(2),conv_3:r(3),conv_4:r(4),conv_5:r(5),conv_6:r(6),conv_7:r(7),conv_8:r(8),conv_9:r(9),conv_10:r(10),conv_11:r(11),conv_12:r(12),conv_13:r(13)}}function i(u,p){let d=n(`${u}/weights`,4,`${p}/filters`),c=n(`${u}/biases`,1,`${p}/bias`);return{filters:d,bias:c}}function o(u){let p=i(`Prediction/BoxPredictor_${u}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${u}/box_encoding_predictor`),d=i(`Prediction/BoxPredictor_${u}/ClassPredictor`,`prediction_layer/box_predictor_${u}/class_predictor`);return{box_encoding_predictor:p,class_predictor:d}}function l(){return{conv_0:a("Prediction",0,"prediction_layer/conv_0"),conv_1:a("Prediction",1,"prediction_layer/conv_1"),conv_2:a("Prediction",2,"prediction_layer/conv_2"),conv_3:a("Prediction",3,"prediction_layer/conv_3"),conv_4:a("Prediction",4,"prediction_layer/conv_4"),conv_5:a("Prediction",5,"prediction_layer/conv_5"),conv_6:a("Prediction",6,"prediction_layer/conv_6"),conv_7:a("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:o(0),box_predictor_1:o(1),box_predictor_2:o(2),box_predictor_3:o(3),box_predictor_4:o(4),box_predictor_5:o(5)}}return{extractMobilenetV1Params:s,extractPredictionLayerParams:l}}function SF(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:a}=rpe(e,t),r=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Mr(r))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${r}`);let s={mobilenetv1:n(),prediction_layer:a(),output_layer:{extra_dim:r}};return An(e,t),{params:s,paramMappings:t}}function Fa(e,t,n){return O(()=>{let a=Rt(e,t.filters,n,"same");return a=J(a,t.batch_norm_offset),an(a,0,6)})}var spe=.0010000000474974513;function ipe(e,t,n){return O(()=>{let a=xs(e,t.filters,n,"same");return a=Er(a,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,spe),an(a,0,6)})}function ope(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function NF(e,t){return O(()=>{let n,a=Fa(e,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((s,i)=>{let o=i+1,l=ope(o);a=ipe(a,s.depthwise_conv,l),a=Fa(a,s.pointwise_conv,[1,1]),o===11&&(n=a)}),n===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:a,conv11:n}})}function lpe(e,t,n){let a=e.arraySync(),r=Math.min(a[t][0],a[t][2]),s=Math.min(a[t][1],a[t][3]),i=Math.max(a[t][0],a[t][2]),o=Math.max(a[t][1],a[t][3]),l=Math.min(a[n][0],a[n][2]),u=Math.min(a[n][1],a[n][3]),p=Math.max(a[n][0],a[n][2]),d=Math.max(a[n][1],a[n][3]),c=(i-r)*(o-s),h=(p-l)*(d-u);if(c<=0||h<=0)return 0;let m=Math.max(r,l),f=Math.max(s,u),g=Math.min(i,p),y=Math.min(o,d),b=Math.max(g-m,0)*Math.max(y-f,0);return b/(c+h-b)}function TF(e,t,n,a,r){let s=e.shape[0],i=Math.min(n,s),o=t.map((p,d)=>({score:p,boxIndex:d})).filter(p=>p.score>r).sort((p,d)=>d.score-p.score),l=p=>p<=a?1:0,u=[];return o.forEach(p=>{if(u.length>=i)return;let d=p.score;for(let c=u.length-1;c>=0;--c){let h=lpe(e,p.boxIndex,u[c]);if(h!==0&&(p.score*=l(h),p.score<=r))break}d===p.score&&u.push(p.boxIndex)}),u}function upe(e){let t=ht(Ae(e,[1,0])),n=[ce(t[2],t[0]),ce(t[3],t[1])],a=[J(t[0],fe(n[0],2)),J(t[1],fe(n[1],2))];return{sizes:n,centers:a}}function ppe(e,t){let{sizes:n,centers:a}=upe(e),r=ht(Ae(t,[1,0])),s=fe(B(gn(fe(r[2],5)),n[0]),2),i=J(B(fe(r[0],10),n[0]),a[0]),o=fe(B(gn(fe(r[3],5)),n[1]),2),l=J(B(fe(r[1],10),n[1]),a[1]);return Ae(Mt([ce(i,s),ce(l,o),J(i,s),J(l,o)]),[1,0])}function _F(e,t,n){return O(()=>{let a=e.shape[0],r=ppe(W(On(n.extra_dim,[a,1,1]),[-1,4]),W(e,[-1,4]));r=W(r,[a,r.shape[0]/a,4]);let s=ha(He(t,[0,0,1],[-1,-1,-1])),i=He(s,[0,0,0],[-1,-1,1]);i=W(i,[a,i.shape[1]]);let o=ht(r),l=ht(i);return{boxes:o,scores:l}})}function Fo(e,t){return O(()=>{let n=e.shape[0],a=W(Eo(e,t.box_encoding_predictor),[n,-1,1,4]),r=W(Eo(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:a,classPrediction:r}})}function CF(e,t,n){return O(()=>{let a=Fa(e,n.conv_0,[1,1]),r=Fa(a,n.conv_1,[2,2]),s=Fa(r,n.conv_2,[1,1]),i=Fa(s,n.conv_3,[2,2]),o=Fa(i,n.conv_4,[1,1]),l=Fa(o,n.conv_5,[2,2]),u=Fa(l,n.conv_6,[1,1]),p=Fa(u,n.conv_7,[2,2]),d=Fo(t,n.box_predictor_0),c=Fo(e,n.box_predictor_1),h=Fo(r,n.box_predictor_2),m=Fo(i,n.box_predictor_3),f=Fo(l,n.box_predictor_4),g=Fo(p,n.box_predictor_5),y=Ze([d.boxPredictionEncoding,c.boxPredictionEncoding,h.boxPredictionEncoding,m.boxPredictionEncoding,f.boxPredictionEncoding,g.boxPredictionEncoding],1),b=Ze([d.classPrediction,c.classPrediction,h.classPrediction,m.classPrediction,f.classPrediction,g.classPrediction],1);return{boxPredictions:y,classPredictions:b}})}var Aa=class{constructor({minConfidence:t,maxResults:n}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=t||.5,this._maxResults=n||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if(typeof this._maxResults!="number")throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}};var Ao=class extends dn{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(512,!1),"float32"),r=ce(fe(a,127.5),1),s=NF(r,n.mobilenetv1),{boxPredictions:i,classPredictions:o}=CF(s.out,s.conv11,n.prediction_layer);return _F(i,o,n.output_layer)})}async forward(t){return this.forwardInput(await It(t))}async locateFaces(t,n={}){let{maxResults:a,minConfidence:r}=new Aa(n),s=await It(t),{boxes:i,scores:o}=this.forwardInput(s),l=i[0],u=o[0];for(let x=1;x{let[v,k]=[Math.max(0,y[x][0]),Math.min(1,y[x][2])].map(E=>E*g),[T,_]=[Math.max(0,y[x][1]),Math.min(1,y[x][3])].map(E=>E*f);return new kt(p[x],new Yu(T,v,_-T,k-v),{height:s.getInputHeight(0),width:s.getInputWidth(0)})});return l.dispose(),u.dispose(),b}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return SF(t)}extractParams(t){return IF(t)}};function cpe(e){let t=new Ao;return t.extractWeights(e),t}function dIe(e){return cpe(e)}var EF=class extends Ao{};var FF=.4,AF=[new Oe(.738768,.874946),new Oe(2.42204,2.65704),new Oe(4.30971,7.04493),new Oe(10.246,4.59428),new Oe(12.6868,11.8741)],$F=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],DF=[117.001,114.697,97.404],RF="tiny_yolov2_model",MF="tiny_yolov2_separable_conv_model";var xg=e=>typeof e=="number";function PF(e){if(!e)throw new Error(`invalid config: ${e}`);if(typeof e.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${e.withSeparableConvs}`);if(!xg(e.iouThreshold)||e.iouThreshold<0||e.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${e.iouThreshold}`);if(!Array.isArray(e.classes)||!e.classes.length||!e.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(e.classes)}`);if(!Array.isArray(e.anchors)||!e.anchors.length||!e.anchors.map(t=>t||{}).every(t=>xg(t.x)&&xg(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(e.anchors)}`);if(e.meanRgb&&(!Array.isArray(e.meanRgb)||e.meanRgb.length!==3||!e.meanRgb.every(xg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function dp(e){return O(()=>{let t=B(e,we(.10000000149011612));return J(Xe(ce(e,t)),t)})}function Br(e,t){return O(()=>{let n=ga(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Rt(n,t.conv.filters,[1,1],"valid"),n=ce(n,t.bn.sub),n=B(n,t.bn.truediv),n=J(n,t.conv.bias),dp(n)})}function Wr(e,t){return O(()=>{let n=ga(e,[[0,0],[1,1],[1,1],[0,0]]);return n=xo(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=J(n,t.bias),dp(n)})}function dpe(e,t){let n=ap(e,t);function a(i,o){let l=qe(e(i)),u=qe(e(i));return t.push({paramPath:`${o}/sub`},{paramPath:`${o}/truediv`}),{sub:l,truediv:u}}function r(i,o,l){let u=n(i,o,3,`${l}/conv`),p=a(o,`${l}/bn`);return{conv:u,bn:p}}let s=rp(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}}function OF(e,t,n,a){let{extractWeights:r,getRemainingWeights:s}=$n(e),i=[],{extractConvParams:o,extractConvWithBatchNormParams:l,extractSeparableConvParams:u}=dpe(r,i),p;if(t.withSeparableConvs){let[d,c,h,m,f,g,y,b,x]=a,v=t.isFirstLayerConv2d?o(d,c,3,"conv0"):u(d,c,"conv0"),k=u(c,h,"conv1"),T=u(h,m,"conv2"),_=u(m,f,"conv3"),E=u(f,g,"conv4"),A=u(g,y,"conv5"),M=b?u(y,b,"conv6"):void 0,$=x?u(b,x,"conv7"):void 0,S=o(x||b||y,5*n,1,"conv8");p={conv0:v,conv1:k,conv2:T,conv3:_,conv4:E,conv5:A,conv6:M,conv7:$,conv8:S}}else{let[d,c,h,m,f,g,y,b,x]=a,v=l(d,c,"conv0"),k=l(c,h,"conv1"),T=l(h,m,"conv2"),_=l(m,f,"conv3"),E=l(f,g,"conv4"),A=l(g,y,"conv5"),M=l(y,b,"conv6"),$=l(b,x,"conv7"),S=o(x,5*n,1,"conv8");p={conv0:v,conv1:k,conv2:T,conv3:_,conv4:E,conv5:A,conv6:M,conv7:$,conv8:S}}if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{params:p,paramMappings:i}}function hpe(e,t){let n=ra(e,t);function a(o){let l=n(`${o}/sub`,1),u=n(`${o}/truediv`,1);return{sub:l,truediv:u}}function r(o){let l=n(`${o}/filters`,4),u=n(`${o}/bias`,1);return{filters:l,bias:u}}function s(o){let l=r(`${o}/conv`),u=a(`${o}/bn`);return{conv:l,bn:u}}let i=sp(n);return{extractConvParams:r,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}}function LF(e,t){let n=[],{extractConvParams:a,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}=hpe(e,n),i;if(t.withSeparableConvs){let o=t.filterSizes&&t.filterSizes.length||9;i={conv0:t.isFirstLayerConv2d?a("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:o>7?s("conv6"):void 0,conv7:o>8?s("conv7"):void 0,conv8:a("conv8")}}else i={conv0:r("conv0"),conv1:r("conv1"),conv2:r("conv2"),conv3:r("conv3"),conv4:r("conv4"),conv5:r("conv5"),conv6:r("conv6"),conv7:r("conv7"),conv8:a("conv8")};return An(e,n),{params:i,paramMappings:n}}var br=class{constructor({inputSize:t,scoreThreshold:n}={}){this._name="TinyYolov2Options";if(this._inputSize=t||416,this._scoreThreshold=n||.5,typeof this._inputSize!="number"||this._inputSize%32!==0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}};var n1=class extends dn{constructor(n){super("TinyYolov2");PF(n),this._config=n}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(n,a){let r=Br(n,a.conv0);return r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv1),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv2),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv3),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv4),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv5),r=Pt(r,[2,2],[1,1],"same"),r=Br(r,a.conv6),r=Br(r,a.conv7),Eo(r,a.conv8,"valid",!1)}runMobilenet(n,a){let r=this.config.isFirstLayerConv2d?dp(Eo(n,a.conv0,"valid",!1)):Wr(n,a.conv0);return r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv1),r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv2),r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv3),r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv4),r=Pt(r,[2,2],[2,2],"same"),r=Wr(r,a.conv5),r=Pt(r,[2,2],[1,1],"same"),r=a.conv6?Wr(r,a.conv6):r,r=a.conv7?Wr(r,a.conv7):r,Eo(r,a.conv8,"valid",!1)}forwardInput(n,a){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return O(()=>{let s=oe(n.toBatchTensor(a,!1),"float32");return s=this.config.meanRgb?yr(s,this.config.meanRgb):s,s=s.div(255),this.config.withSeparableConvs?this.runMobilenet(s,r):this.runTinyYolov2(s,r)})}async forward(n,a){return this.forwardInput(await It(n),a)}async detect(n,a={}){let{inputSize:r,scoreThreshold:s}=new br(a),i=await It(n),o=await this.forwardInput(i,r),l=O(()=>ht(o)[0].expandDims()),u={width:i.getInputWidth(0),height:i.getInputHeight(0)},p=await this.extractBoxes(l,i.getReshapedInputDimensions(0),s);o.dispose(),l.dispose();let d=p.map(y=>y.box),c=p.map(y=>y.score),h=p.map(y=>y.classScore),m=p.map(y=>this.config.classes[y.label]);return jE(d.map(y=>y.rescale(r)),c,this.config.iouThreshold,!0).map(y=>new Ns(c[y],h[y],m[y],d[y],u))}getDefaultModelName(){return""}extractParamsFromWeightMap(n){return LF(n,this.config)}extractParams(n){let a=this.config.filterSizes||n1.DEFAULT_FILTER_SIZES,r=a?a.length:void 0;if(r!==7&&r!==8&&r!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${r} filterSizes in config`);return OF(n,this.config,this.boxEncodingSize,a)}async extractBoxes(n,a,r){let{width:s,height:i}=a,o=Math.max(s,i),l=o/s,u=o/i,p=n.shape[1],d=this.config.anchors.length,[c,h,m]=O(()=>{let b=n.reshape([p,p,d,this.boxEncodingSize]),x=b.slice([0,0,0,0],[p,p,d,4]),v=b.slice([0,0,0,4],[p,p,d,1]),k=this.withClassScores?Qa(b.slice([0,0,0,5],[p,p,d,this.config.classes.length]),3):we(0);return[x,v,k]}),f=[],g=await h.array(),y=await c.array();for(let b=0;br){let T=(x+Zf(y[b][x][v][0]))/p*l,_=(b+Zf(y[b][x][v][1]))/p*u,E=Math.exp(y[b][x][v][2])*this.config.anchors[v].x/p*l,A=Math.exp(y[b][x][v][3])*this.config.anchors[v].y/p*u,M=T-E/2,$=_-A/2,S={row:b,col:x,anchor:v},{classScore:P,label:V}=this.withClassScores?await this.extractPredictedClass(m,S):{classScore:1,label:0};f.push({box:new Xu(M,$,M+E,$+A),score:k,classScore:k*P,label:V,...S})}}return c.dispose(),h.dispose(),m.dispose(),f}async extractPredictedClass(n,a){let{row:r,col:s,anchor:i}=a,o=await n.array();return Array(this.config.classes.length).fill(0).map((l,u)=>o[r][s][i][u]).map((l,u)=>({classScore:l,label:u})).reduce((l,u)=>l.classScore>u.classScore?l:u)}},$o=n1;$o.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var hp=class extends $o{constructor(t=!0){let n={withSeparableConvs:t,iouThreshold:FF,classes:["face"],...t?{anchors:$F,meanRgb:DF}:{anchors:AF,withClassScores:!0}};super(n)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(r=>new kt(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?MF:RF}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function aSe(e,t=!0){let n=new hp(t);return n.extractWeights(e),n}var vg=class extends br{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var $a=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Do(e,t,n,a,r=({alignedRect:s})=>s){let s=e.map(l=>lp(l)?r(l):l.detection),i=a||(t instanceof Fe?await fd(t,s):await md(t,s)),o=await n(i);return i.forEach(l=>l instanceof Fe&&l.dispose()),o}async function mp(e,t,n,a,r){return Do([e],t,async s=>n(s[0]),a,r)}var zF=.4,BF=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],WF=[117.001,114.697,97.404];var fp=class extends $o{constructor(){let t={withSeparableConvs:!0,iouThreshold:zF,classes:["face"],anchors:BF,meanRgb:WF,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(r=>new kt(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var rt={ssdMobilenetv1:new Ao,tinyFaceDetector:new fp,tinyYolov2:new hp,faceLandmark68Net:new pp,faceLandmark68TinyNet:new yg,faceRecognitionNet:new cp,faceExpressionNet:new cg,ageGenderNet:new fg},mpe=(e,t)=>rt.ssdMobilenetv1.locateFaces(e,t),DSe=(e,t)=>rt.tinyFaceDetector.locateFaces(e,t),RSe=(e,t)=>rt.tinyYolov2.locateFaces(e,t),fpe=e=>rt.faceLandmark68Net.detectLandmarks(e),MSe=e=>rt.faceLandmark68TinyNet.detectLandmarks(e),PSe=e=>rt.faceRecognitionNet.computeFaceDescriptor(e),OSe=e=>rt.faceExpressionNet.predictExpressions(e),LSe=e=>rt.ageGenderNet.predictAgeAndGender(e),gpe=e=>rt.ssdMobilenetv1.load(e),zSe=e=>rt.tinyFaceDetector.load(e),BSe=e=>rt.tinyYolov2.load(e),WSe=e=>rt.faceLandmark68Net.load(e),VSe=e=>rt.faceLandmark68TinyNet.load(e),USe=e=>rt.faceRecognitionNet.load(e),GSe=e=>rt.faceExpressionNet.load(e),HSe=e=>rt.ageGenderNet.load(e),jSe=gpe,qSe=mpe,KSe=fpe;var wg=class extends $a{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},Ro=class extends wg{async run(){let t=await this.parentTask,n=await Do(t,this.input,async a=>Promise.all(a.map(r=>rt.faceExpressionNet.predictExpressions(r))),this.extractedFaces);return t.map((a,r)=>K0(a,n[r]))}withAgeAndGender(){return new Po(this,this.input)}},Mo=class extends wg{async run(){let t=await this.parentTask;if(!t)return;let n=await mp(t,this.input,a=>rt.faceExpressionNet.predictExpressions(a),this.extractedFaces);return K0(t,n)}withAgeAndGender(){return new Oo(this,this.input)}},Cs=class extends Ro{withAgeAndGender(){return new Fs(this,this.input)}withFaceDescriptors(){return new $s(this,this.input)}},Es=class extends Mo{withAgeAndGender(){return new As(this,this.input)}withFaceDescriptor(){return new Ds(this,this.input)}};var kg=class extends $a{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},Po=class extends kg{async run(){let t=await this.parentTask,n=await Do(t,this.input,async a=>Promise.all(a.map(r=>rt.ageGenderNet.predictAgeAndGender(r))),this.extractedFaces);return t.map((a,r)=>{let{age:s,gender:i,genderProbability:o}=n[r];return e1(t1(a,i,o),s)})}withFaceExpressions(){return new Ro(this,this.input)}},Oo=class extends kg{async run(){let t=await this.parentTask;if(!t)return;let{age:n,gender:a,genderProbability:r}=await mp(t,this.input,s=>rt.ageGenderNet.predictAgeAndGender(s),this.extractedFaces);return e1(t1(t,a,r),n)}withFaceExpressions(){return new Mo(this,this.input)}},Fs=class extends Po{withFaceExpressions(){return new Cs(this,this.input)}withFaceDescriptors(){return new $s(this,this.input)}},As=class extends Oo{withFaceExpressions(){return new Es(this,this.input)}withFaceDescriptor(){return new Ds(this,this.input)}};var Ig=class extends $a{constructor(n,a){super();this.parentTask=n;this.input=a}},$s=class extends Ig{async run(){let t=await this.parentTask;return(await Do(t,this.input,a=>Promise.all(a.map(r=>rt.faceRecognitionNet.computeFaceDescriptor(r))),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}))).map((a,r)=>Z0(t[r],a))}withFaceExpressions(){return new Cs(this,this.input)}withAgeAndGender(){return new Fs(this,this.input)}},Ds=class extends Ig{async run(){let t=await this.parentTask;if(!t)return;let n=await mp(t,this.input,a=>rt.faceRecognitionNet.computeFaceDescriptor(a),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}));return Z0(t,n)}withFaceExpressions(){return new Es(this,this.input)}withAgeAndGender(){return new As(this,this.input)}};var Sg=class extends $a{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.useTinyLandmarkNet=r}get landmarkNet(){return this.useTinyLandmarkNet?rt.faceLandmark68TinyNet:rt.faceLandmark68Net}},Ng=class extends Sg{async run(){let t=await this.parentTask,n=t.map(i=>i.detection),a=this.input instanceof Fe?await fd(this.input,n):await md(this.input,n),r=await Promise.all(a.map(i=>this.landmarkNet.detectLandmarks(i)));return a.forEach(i=>i instanceof Fe&&i.dispose()),t.filter((i,o)=>r[o]).map((i,o)=>xd(i,r[o]))}withFaceExpressions(){return new Cs(this,this.input)}withAgeAndGender(){return new Fs(this,this.input)}withFaceDescriptors(){return new $s(this,this.input)}},Tg=class extends Sg{async run(){let t=await this.parentTask;if(!t)return;let{detection:n}=t,a=this.input instanceof Fe?await fd(this.input,[n]):await md(this.input,[n]),r=await this.landmarkNet.detectLandmarks(a[0]);return a.forEach(s=>s instanceof Fe&&s.dispose()),xd(t,r)}withFaceExpressions(){return new Es(this,this.input)}withAgeAndGender(){return new As(this,this.input)}withFaceDescriptor(){return new Ds(this,this.input)}};var _g=class extends $a{constructor(n,a=new Aa){super();this.input=n;this.options=a}},wd=class extends _g{async run(){let{input:t,options:n}=this,a;if(n instanceof vg)a=rt.tinyFaceDetector.locateFaces(t,n);else if(n instanceof Aa)a=rt.ssdMobilenetv1.locateFaces(t,n);else if(n instanceof br)a=rt.tinyYolov2.locateFaces(t,n);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return a}runAndExtendWithFaceDetections(){return new Promise((t,n)=>{this.run().then(a=>t(a.map(r=>Ju({},r)))).catch(a=>n(a))})}withFaceLandmarks(t=!1){return new Ng(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Ro(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Po(this.runAndExtendWithFaceDetections(),this.input)}},Cg=class extends _g{async run(){let t=await new wd(this.input,this.options),n=t[0];return t.forEach(a=>{a.score>n.score&&(n=a)}),n}runAndExtendWithFaceDetection(){return new Promise(async t=>{let n=await this.run();t(n?Ju({},n):void 0)})}withFaceLandmarks(t=!1){return new Tg(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Mo(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Oo(this.runAndExtendWithFaceDetection(),this.input)}};function H2e(e,t=new Aa){return new Cg(e,t)}function a1(e,t=new Aa){return new wd(e,t)}async function ype(e,t){return a1(e,new Aa(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Q2e(e,t={}){return a1(e,new br(t)).withFaceLandmarks().withFaceDescriptors()}var J2e=ype;function VF(e,t){if(e.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let n=Array.from(e),a=Array.from(t);return Math.sqrt(n.map((r,s)=>r-a[s]).reduce((r,s)=>r+s**2,0))}var Eg=class{constructor(t,n=.6){this._distanceThreshold=n;let a=Array.isArray(t)?t:[t];if(!a.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let r=1,s=()=>`person ${r++}`;this._labeledDescriptors=a.map(i=>{if(i instanceof Pr)return i;if(i instanceof Float32Array)return new Pr(s(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new Pr(s(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,n){return n.map(a=>VF(a,t)).reduce((a,r)=>a+r,0)/(n.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:n,label:a})=>new pd(a,this.computeMeanDistance(t,n))).reduce((n,a)=>n.distancet.toJSON())}}static fromJSON(t){let n=t.labeledDescriptors.map(a=>Pr.fromJSON(a));return new Eg(n,t.distanceThreshold)}};function gNe(e){let t=new fp;return t.extractWeights(e),t}function bpe(e,t){let{width:n,height:a}=new Fn(t.width,t.height);if(n<=0||a<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:a})}`);if(Array.isArray(e))return e.map(r=>bpe(r,{width:n,height:a}));if(lp(e)){let r=e.detection.forSize(n,a),s=e.unshiftedLandmarks.forSize(r.box.width,r.box.height);return xd(Ju(e,r),s)}return Or(e)?Ju(e,e.detection.forSize(n,a)):e instanceof xa||e instanceof kt?e.forSize(n,a):e}var _Ne=pF;export{fg as AgeGenderNet,Xu as BoundingBox,pt as Box,$a as ComposableTask,$s as ComputeAllFaceDescriptorsTask,Ig as ComputeFaceDescriptorsTaskBase,Ds as ComputeSingleFaceDescriptorTask,Ng as DetectAllFaceLandmarksTask,wd as DetectAllFacesTask,Sg as DetectFaceLandmarksTaskBase,_g as DetectFacesTaskBase,Tg as DetectSingleFaceLandmarksTask,Cg as DetectSingleFaceTask,Fn as Dimensions,oF as FACE_EXPRESSION_LABELS,kt as FaceDetection,EF as FaceDetectionNet,cg as FaceExpressionNet,_s as FaceExpressions,pp as FaceLandmark68Net,yg as FaceLandmark68TinyNet,bF as FaceLandmarkNet,xa as FaceLandmarks,KE as FaceLandmarks5,Qu as FaceLandmarks68,pd as FaceMatch,Eg as FaceMatcher,cp as FaceRecognitionNet,Y0 as Gender,cd as LabeledBox,Pr as LabeledFaceDescriptors,zr as NetInput,dn as NeuralNetwork,Ns as ObjectDetection,Oe as Point,XE as PredictedBox,Yu as Rect,Ao as SsdMobilenetv1,Aa as SsdMobilenetv1Options,fp as TinyFaceDetector,vg as TinyFaceDetectorOptions,hp as TinyYolov2,br as TinyYolov2Options,J2e as allFaces,ype as allFacesSsdMobilenetv1,Q2e as allFacesTinyYolov2,YE as awaitMediaLoaded,QE as bufferToImage,PSe as computeFaceDescriptor,np as createCanvas,ag as createCanvasFromMedia,dIe as createFaceDetectionNet,dke as createFaceRecognitionNet,cpe as createSsdMobilenetv1,gNe as createTinyFaceDetector,aSe as createTinyYolov2,a1 as detectAllFaces,fpe as detectFaceLandmarks,MSe as detectFaceLandmarksTiny,KSe as detectLandmarks,H2e as detectSingleFace,uF as draw,at as env,VF as euclideanDistance,e1 as extendWithAge,Z0 as extendWithFaceDescriptor,Ju as extendWithFaceDetection,K0 as extendWithFaceExpressions,xd as extendWithFaceLandmarks,t1 as extendWithGender,fd as extractFaceTensors,md as extractFaces,kxe as fetchImage,eF as fetchJson,_xe as fetchNetWeights,Ts as fetchOrThrow,Dxe as fetchVideo,aa as getContext2dOrThrow,tp as getMediaDimensions,JE as imageTensorToCanvas,ZE as imageToSquare,Oge as inverseSigmoid,GE as iou,q0 as isMediaElement,ng as isMediaLoaded,gke as isWithAge,Or as isWithFaceDetection,lF as isWithFaceExpressions,lp as isWithFaceLandmarks,vke as isWithGender,HSe as loadAgeGenderModel,jSe as loadFaceDetectionModel,GSe as loadFaceExpressionModel,WSe as loadFaceLandmarkModel,VSe as loadFaceLandmarkTinyModel,USe as loadFaceRecognitionModel,gpe as loadSsdMobilenetv1Model,zSe as loadTinyFaceDetectorModel,BSe as loadTinyYolov2Model,nF as loadWeightMap,qSe as locateFaces,Bxe as matchDimensions,HE as minBbox,rt as nets,jE as nonMaxSuppression,yr as normalize,qE as padToSquare,LSe as predictAgeAndGender,OSe as recognizeFaceExpressions,bpe as resizeResults,Zu as resolveInput,Mge as shuffleArray,Zf as sigmoid,mpe as ssdMobilenetv1,ze as tf,DSe as tinyFaceDetector,RSe as tinyYolov2,It as toNetInput,UE as utils,PF as validateConfig,_Ne as version}; /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/face-api.esm.js.map b/dist/face-api.esm.js.map index 7180924..218a461 100644 --- a/dist/face-api.esm.js.map +++ b/dist/face-api.esm.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["tfjs.esm.js", "../src/draw/index.ts", "../src/draw/drawContour.ts", "../src/utils/index.ts", "../src/classes/Dimensions.ts", "../src/classes/Point.ts", "../src/classes/Box.ts", "../src/classes/BoundingBox.ts", "../src/classes/ObjectDetection.ts", "../src/classes/FaceDetection.ts", "../src/ops/iou.ts", "../src/ops/minBbox.ts", "../src/ops/nonMaxSuppression.ts", "../src/ops/normalize.ts", "../src/ops/padToSquare.ts", "../src/ops/shuffleArray.ts", "../src/ops/index.ts", "../src/classes/Rect.ts", "../src/classes/FaceLandmarks.ts", "../src/classes/FaceLandmarks5.ts", "../src/classes/FaceLandmarks68.ts", "../src/classes/FaceMatch.ts", "../src/classes/LabeledBox.ts", "../src/classes/LabeledFaceDescriptors.ts", "../src/classes/PredictedBox.ts", "../src/factories/WithFaceDetection.ts", "../src/env/createBrowserEnv.ts", "../src/env/isNodejs.ts", "../src/env/createFileSystem.ts", "../src/env/createNodejsEnv.ts", "../src/env/isBrowser.ts", "../src/env/index.ts", "../src/dom/resolveInput.ts", "../src/dom/getContext2dOrThrow.ts", "../src/draw/DrawTextField.ts", "../src/draw/DrawBox.ts", "../src/draw/drawDetections.ts", "../src/dom/isMediaLoaded.ts", "../src/dom/awaitMediaLoaded.ts", "../src/dom/bufferToImage.ts", "../src/dom/getMediaDimensions.ts", "../src/dom/createCanvas.ts", "../src/dom/imageTensorToCanvas.ts", "../src/dom/isMediaElement.ts", "../src/dom/imageToSquare.ts", "../src/dom/NetInput.ts", "../src/dom/toNetInput.ts", "../src/dom/extractFaces.ts", "../src/dom/extractFaceTensors.ts", "../src/dom/fetchOrThrow.ts", "../src/dom/fetchImage.ts", "../src/dom/fetchJson.ts", "../src/dom/fetchNetWeights.ts", "../src/dom/bufferToVideo.ts", "../src/dom/fetchVideo.ts", "../src/common/getModelUris.ts", "../src/dom/loadWeightMap.ts", "../src/dom/matchDimensions.ts", "../src/NeuralNetwork.ts", "../src/common/depthwiseSeparableConv.ts", "../src/faceFeatureExtractor/denseBlock.ts", "../src/common/convLayer.ts", "../src/common/disposeUnusedWeightTensors.ts", "../src/common/extractConvParamsFactory.ts", "../src/common/extractFCParamsFactory.ts", "../src/common/types.ts", "../src/common/extractSeparableConvParamsFactory.ts", "../src/common/extractWeightEntryFactory.ts", "../src/common/extractWeightsFactory.ts", "../src/faceFeatureExtractor/extractorsFactory.ts", "../src/faceFeatureExtractor/extractParams.ts", "../src/common/loadConvParamsFactory.ts", "../src/faceFeatureExtractor/loadParamsFactory.ts", "../src/faceFeatureExtractor/extractParamsFromWeightMap.ts", "../src/faceFeatureExtractor/FaceFeatureExtractor.ts", "../src/common/fullyConnectedLayer.ts", "../src/faceProcessor/extractParams.ts", "../src/faceProcessor/extractParamsFromWeightMap.ts", "../src/faceProcessor/util.ts", "../src/faceProcessor/FaceProcessor.ts", "../src/faceExpressionNet/FaceExpressions.ts", "../src/faceExpressionNet/FaceExpressionNet.ts", "../src/factories/WithFaceExpressions.ts", "../src/draw/drawFaceExpressions.ts", "../src/factories/WithFaceLandmarks.ts", "../src/draw/DrawFaceLandmarks.ts", "../src/xception/extractParams.ts", "../src/xception/extractParamsFromWeightMap.ts", "../src/xception/TinyXception.ts", "../src/ageGenderNet/extractParams.ts", "../src/ageGenderNet/extractParamsFromWeightMap.ts", "../src/ageGenderNet/types.ts", "../src/ageGenderNet/AgeGenderNet.ts", "../src/faceLandmarkNet/FaceLandmark68NetBase.ts", "../src/faceLandmarkNet/FaceLandmark68Net.ts", "../src/faceFeatureExtractor/extractParamsFromWeightMapTiny.ts", "../src/faceFeatureExtractor/extractParamsTiny.ts", "../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts", "../src/faceLandmarkNet/FaceLandmark68TinyNet.ts", "../src/faceLandmarkNet/index.ts", "../src/faceRecognitionNet/scaleLayer.ts", "../src/faceRecognitionNet/convLayer.ts", "../src/faceRecognitionNet/extractParams.ts", "../src/faceRecognitionNet/extractParamsFromWeightMap.ts", "../src/faceRecognitionNet/residualLayer.ts", "../src/faceRecognitionNet/FaceRecognitionNet.ts", "../src/faceRecognitionNet/index.ts", "../src/factories/WithFaceDescriptor.ts", "../src/factories/WithAge.ts", "../src/factories/WithGender.ts", "../src/ssdMobilenetv1/extractParams.ts", "../src/ssdMobilenetv1/extractParamsFromWeightMap.ts", "../src/ssdMobilenetv1/pointwiseConvLayer.ts", "../src/ssdMobilenetv1/mobileNetV1.ts", "../src/ssdMobilenetv1/nonMaxSuppression.ts", "../src/ssdMobilenetv1/outputLayer.ts", "../src/ssdMobilenetv1/boxPredictionLayer.ts", "../src/ssdMobilenetv1/predictionLayer.ts", "../src/ssdMobilenetv1/SsdMobilenetv1Options.ts", "../src/ssdMobilenetv1/SsdMobilenetv1.ts", "../src/ssdMobilenetv1/index.ts", "../src/tinyYolov2/const.ts", "../src/tinyYolov2/config.ts", "../src/tinyYolov2/leaky.ts", "../src/tinyYolov2/convWithBatchNorm.ts", "../src/tinyYolov2/depthwiseSeparableConv.ts", "../src/tinyYolov2/extractParams.ts", "../src/tinyYolov2/extractParamsFromWeightMap.ts", "../src/tinyYolov2/TinyYolov2Options.ts", "../src/tinyYolov2/TinyYolov2Base.ts", "../src/tinyYolov2/TinyYolov2.ts", "../src/tinyYolov2/index.ts", "../src/tinyFaceDetector/TinyFaceDetectorOptions.ts", "../src/globalApi/ComposableTask.ts", "../src/globalApi/extractFacesAndComputeResults.ts", "../src/tinyFaceDetector/const.ts", "../src/tinyFaceDetector/TinyFaceDetector.ts", "../src/globalApi/nets.ts", "../src/globalApi/PredictFaceExpressionsTask.ts", "../src/globalApi/PredictAgeAndGenderTask.ts", "../src/globalApi/ComputeFaceDescriptorsTasks.ts", "../src/globalApi/DetectFaceLandmarksTasks.ts", "../src/globalApi/DetectFacesTasks.ts", "../src/globalApi/detectFaces.ts", "../src/globalApi/allFaces.ts", "../src/euclideanDistance.ts", "../src/globalApi/FaceMatcher.ts", "../src/tinyFaceDetector/index.ts", "../src/resizeResults.ts", "../src/index.ts"], "sourcesContent": ["/*\n Face-API\n homepage: \n author: '\n*/\n\nvar _U=Object.create;var BC=Object.defineProperty;var EU=Object.getOwnPropertyDescriptor;var AU=Object.getOwnPropertyNames;var $U=Object.getPrototypeOf,DU=Object.prototype.hasOwnProperty;var Oe=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),Zt=(r,t)=>{for(var e in t)BC(r,e,{get:t[e],enumerable:!0})},FU=(r,t,e,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let o of AU(t))!DU.call(r,o)&&o!==e&&BC(r,o,{get:()=>t[o],enumerable:!(n=EU(t,o))||n.enumerable});return r};var Mu=(r,t,e)=>(e=r!=null?_U($U(r)):{},FU(t||!r||!r.__esModule?BC(e,\"default\",{value:r,enumerable:!0}):e,r));var H1=Oe((ilt,U1)=>{U1.exports=je;var po=null;try{po=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 je(r,t,e){this.low=r|0,this.high=t|0,this.unsigned=!!e}je.prototype.__isLong__;Object.defineProperty(je.prototype,\"__isLong__\",{value:!0});function zn(r){return(r&&r.__isLong__)===!0}je.isLong=zn;var O1={},M1={};function Wu(r,t){var e,n,o;return t?(r>>>=0,(o=0<=r&&r<256)&&(n=M1[r],n)?n:(e=Xe(r,(r|0)<0?-1:0,!0),o&&(M1[r]=e),e)):(r|=0,(o=-128<=r&&r<128)&&(n=O1[r],n)?n:(e=Xe(r,r<0?-1:0,!1),o&&(O1[r]=e),e))}je.fromInt=Wu;function mo(r,t){if(isNaN(r))return t?Gu:fo;if(t){if(r<0)return Gu;if(r>=B1)return W1}else{if(r<=-L1)return Ln;if(r+1>=L1)return G1}return r<0?mo(-r,t).neg():Xe(r%pm|0,r/pm|0,t)}je.fromNumber=mo;function Xe(r,t,e){return new je(r,t,e)}je.fromBits=Xe;var vx=Math.pow;function QC(r,t,e){if(r.length===0)throw Error(\"empty string\");if(r===\"NaN\"||r===\"Infinity\"||r===\"+Infinity\"||r===\"-Infinity\")return fo;if(typeof t==\"number\"?(e=t,t=!1):t=!!t,e=e||10,e<2||360)throw Error(\"interior hyphen\");if(n===0)return QC(r.substring(1),t,e).neg();for(var o=mo(vx(e,8)),s=fo,i=0;i>>0:this.low};yt.toNumber=function(){return this.unsigned?(this.high>>>0)*pm+(this.low>>>0):this.high*pm+(this.low>>>0)};yt.toString=function(t){if(t=t||10,t<2||36>>0,c=l.toString(t);if(i=u,i.isZero())return c+a;for(;c.length<6;)c=\"0\"+c;a=\"\"+c+a}};yt.getHighBits=function(){return this.high};yt.getHighBitsUnsigned=function(){return this.high>>>0};yt.getLowBits=function(){return this.low};yt.getLowBitsUnsigned=function(){return this.low>>>0};yt.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Ln)?64:this.neg().getNumBitsAbs();for(var t=this.high!=0?this.high:this.low,e=31;e>0&&(t&1<=0};yt.isOdd=function(){return(this.low&1)===1};yt.isEven=function(){return(this.low&1)===0};yt.equals=function(t){return zn(t)||(t=qs(t)),this.unsigned!==t.unsigned&&this.high>>>31===1&&t.high>>>31===1?!1:this.high===t.high&&this.low===t.low};yt.eq=yt.equals;yt.notEquals=function(t){return!this.eq(t)};yt.neq=yt.notEquals;yt.ne=yt.notEquals;yt.lessThan=function(t){return this.comp(t)<0};yt.lt=yt.lessThan;yt.lessThanOrEqual=function(t){return this.comp(t)<=0};yt.lte=yt.lessThanOrEqual;yt.le=yt.lessThanOrEqual;yt.greaterThan=function(t){return this.comp(t)>0};yt.gt=yt.greaterThan;yt.greaterThanOrEqual=function(t){return this.comp(t)>=0};yt.gte=yt.greaterThanOrEqual;yt.ge=yt.greaterThanOrEqual;yt.compare=function(t){if(zn(t)||(t=qs(t)),this.eq(t))return 0;var e=this.isNegative(),n=t.isNegative();return e&&!n?-1:!e&&n?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};yt.comp=yt.compare;yt.negate=function(){return!this.unsigned&&this.eq(Ln)?Ln:this.not().add(cm)};yt.neg=yt.negate;yt.add=function(t){zn(t)||(t=qs(t));var e=this.high>>>16,n=this.high&65535,o=this.low>>>16,s=this.low&65535,i=t.high>>>16,a=t.high&65535,u=t.low>>>16,l=t.low&65535,c=0,p=0,m=0,f=0;return f+=s+l,m+=f>>>16,f&=65535,m+=o+u,p+=m>>>16,m&=65535,p+=n+a,c+=p>>>16,p&=65535,c+=e+i,c&=65535,Xe(m<<16|f,c<<16|p,this.unsigned)};yt.subtract=function(t){return zn(t)||(t=qs(t)),this.add(t.neg())};yt.sub=yt.subtract;yt.multiply=function(t){if(this.isZero())return fo;if(zn(t)||(t=qs(t)),po){var e=po.mul(this.low,this.high,t.low,t.high);return Xe(e,po.get_high(),this.unsigned)}if(t.isZero())return fo;if(this.eq(Ln))return t.isOdd()?Ln:fo;if(t.eq(Ln))return this.isOdd()?Ln:fo;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(z1)&&t.lt(z1))return mo(this.toNumber()*t.toNumber(),this.unsigned);var n=this.high>>>16,o=this.high&65535,s=this.low>>>16,i=this.low&65535,a=t.high>>>16,u=t.high&65535,l=t.low>>>16,c=t.low&65535,p=0,m=0,f=0,d=0;return d+=i*c,f+=d>>>16,d&=65535,f+=s*c,m+=f>>>16,f&=65535,f+=i*l,m+=f>>>16,f&=65535,m+=o*c,p+=m>>>16,m&=65535,m+=s*l,p+=m>>>16,m&=65535,m+=i*u,p+=m>>>16,m&=65535,p+=n*c+o*l+s*u+i*a,p&=65535,Xe(f<<16|d,p<<16|m,this.unsigned)};yt.mul=yt.multiply;yt.divide=function(t){if(zn(t)||(t=qs(t)),t.isZero())throw Error(\"division by zero\");if(po){if(!this.unsigned&&this.high===-2147483648&&t.low===-1&&t.high===-1)return this;var e=(this.unsigned?po.div_u:po.div_s)(this.low,this.high,t.low,t.high);return Xe(e,po.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Gu:fo;var n,o,s;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return Gu;if(t.gt(this.shru(1)))return V1;s=Gu}else{if(this.eq(Ln)){if(t.eq(cm)||t.eq(JC))return Ln;if(t.eq(Ln))return cm;var i=this.shr(1);return n=i.div(t).shl(1),n.eq(fo)?t.isNegative()?cm:JC:(o=this.sub(t.mul(n)),s=n.add(o.div(t)),s)}else if(t.eq(Ln))return this.unsigned?Gu:fo;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();s=fo}for(o=this;o.gte(t);){n=Math.max(1,Math.floor(o.toNumber()/t.toNumber()));for(var a=Math.ceil(Math.log(n)/Math.LN2),u=a<=48?1:vx(2,a-48),l=mo(n),c=l.mul(t);c.isNegative()||c.gt(o);)n-=u,l=mo(n,this.unsigned),c=l.mul(t);l.isZero()&&(l=cm),s=s.add(l),o=o.sub(c)}return s};yt.div=yt.divide;yt.modulo=function(t){if(zn(t)||(t=qs(t)),po){var e=(this.unsigned?po.rem_u:po.rem_s)(this.low,this.high,t.low,t.high);return Xe(e,po.get_high(),this.unsigned)}return this.sub(this.div(t).mul(t))};yt.mod=yt.modulo;yt.rem=yt.modulo;yt.not=function(){return Xe(~this.low,~this.high,this.unsigned)};yt.and=function(t){return zn(t)||(t=qs(t)),Xe(this.low&t.low,this.high&t.high,this.unsigned)};yt.or=function(t){return zn(t)||(t=qs(t)),Xe(this.low|t.low,this.high|t.high,this.unsigned)};yt.xor=function(t){return zn(t)||(t=qs(t)),Xe(this.low^t.low,this.high^t.high,this.unsigned)};yt.shiftLeft=function(t){return zn(t)&&(t=t.toInt()),(t&=63)===0?this:t<32?Xe(this.low<>>32-t,this.unsigned):Xe(0,this.low<>>t|this.high<<32-t,this.high>>t,this.unsigned):Xe(this.high>>t-32,this.high>=0?0:-1,this.unsigned)};yt.shr=yt.shiftRight;yt.shiftRightUnsigned=function(t){if(zn(t)&&(t=t.toInt()),t&=63,t===0)return this;var e=this.high;if(t<32){var n=this.low;return Xe(n>>>t|e<<32-t,e>>>t,this.unsigned)}else return t===32?Xe(e,0,this.unsigned):Xe(e>>>t-32,0,this.unsigned)};yt.shru=yt.shiftRightUnsigned;yt.shr_u=yt.shiftRightUnsigned;yt.toSigned=function(){return this.unsigned?Xe(this.low,this.high,!1):this};yt.toUnsigned=function(){return this.unsigned?this:Xe(this.low,this.high,!0)};yt.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()};yt.toBytesLE=function(){var t=this.high,e=this.low;return[e&255,e>>>8&255,e>>>16&255,e>>>24,t&255,t>>>8&255,t>>>16&255,t>>>24]};yt.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24,t>>>16&255,t>>>8&255,t&255,e>>>24,e>>>16&255,e>>>8&255,e&255]};je.fromBytes=function(t,e,n){return n?je.fromBytesLE(t,e):je.fromBytesBE(t,e)};je.fromBytesLE=function(t,e){return new je(t[0]|t[1]<<8|t[2]<<16|t[3]<<24,t[4]|t[5]<<8|t[6]<<16|t[7]<<24,e)};je.fromBytesBE=function(t,e){return new je(t[4]<<24|t[5]<<16|t[6]<<8|t[7],t[0]<<24|t[1]<<16|t[2]<<8|t[3],e)}});var N_=Oe(()=>{});var T_=Oe(()=>{});var uE=Oe((lE,pS)=>{(function(r,t,e){function n(a){var u=this,l=i();u.next=function(){var c=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=c-(u.c=c|0)},u.c=1,u.s0=l(\" \"),u.s1=l(\" \"),u.s2=l(\" \"),u.s0-=l(a),u.s0<0&&(u.s0+=1),u.s1-=l(a),u.s1<0&&(u.s1+=1),u.s2-=l(a),u.s2<0&&(u.s2+=1),l=null}function o(a,u){return u.c=a.c,u.s0=a.s0,u.s1=a.s1,u.s2=a.s2,u}function s(a,u){var l=new n(a),c=u&&u.state,p=l.next;return p.int32=function(){return l.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,c&&(typeof c==\"object\"&&o(c,l),p.state=function(){return o(l,{})}),p}function i(){var a=4022871197,u=function(l){l=l.toString();for(var c=0;c>>0,p-=a,p*=a,a=p>>>0,p-=a,a+=p*4294967296}return(a>>>0)*23283064365386963e-26};return u}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.alea=s})(lE,typeof pS==\"object\"&&pS,typeof define==\"function\"&&define)});var pE=Oe((cE,mS)=>{(function(r,t,e){function n(i){var a=this,u=\"\";a.x=0,a.y=0,a.z=0,a.w=0,a.next=function(){var c=a.x^a.x<<11;return a.x=a.y,a.y=a.z,a.z=a.w,a.w^=a.w>>>19^c^c>>>8},i===(i|0)?a.x=i:u+=i;for(var l=0;l>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(typeof l==\"object\"&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor128=s})(cE,typeof mS==\"object\"&&mS,typeof define==\"function\"&&define)});var fE=Oe((mE,fS)=>{(function(r,t,e){function n(i){var a=this,u=\"\";a.next=function(){var c=a.x^a.x>>>2;return a.x=a.y,a.y=a.z,a.z=a.w,a.w=a.v,(a.d=a.d+362437|0)+(a.v=a.v^a.v<<4^(c^c<<1))|0},a.x=0,a.y=0,a.z=0,a.w=0,a.v=0,i===(i|0)?a.x=i:u+=i;for(var l=0;l>>4),a.next()}function o(i,a){return a.x=i.x,a.y=i.y,a.z=i.z,a.w=i.w,a.v=i.v,a.d=i.d,a}function s(i,a){var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(typeof l==\"object\"&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorwow=s})(mE,typeof fS==\"object\"&&fS,typeof define==\"function\"&&define)});var hE=Oe((dE,dS)=>{(function(r,t,e){function n(i){var a=this;a.next=function(){var l=a.x,c=a.i,p,m,f;return p=l[c],p^=p>>>7,m=p^p<<24,p=l[c+1&7],m^=p^p>>>10,p=l[c+3&7],m^=p^p>>>3,p=l[c+4&7],m^=p^p<<7,p=l[c+7&7],p=p^p<<13,m^=p^p<<9,l[c]=m,a.i=c+1&7,m};function u(l,c){var p,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=\"\"+c,p=0;p0;--p)l.next()}u(a,i)}function o(i,a){return a.x=i.x.slice(),a.i=i.i,a}function s(i,a){i==null&&(i=+new Date);var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(l.x&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorshift7=s})(dE,typeof dS==\"object\"&&dS,typeof define==\"function\"&&define)});var xE=Oe((gE,hS)=>{(function(r,t,e){function n(i){var a=this;a.next=function(){var l=a.w,c=a.X,p=a.i,m,f;return a.w=l=l+1640531527|0,f=c[p+34&127],m=c[p=p+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[p]=f^m,a.i=p,f+(l^l>>>16)|0};function u(l,c){var p,m,f,d,h,g=[],y=128;for(c===(c|0)?(m=c,c=null):(c=c+\"\\0\",m=0,y=Math.max(y,c.length)),f=0,d=-32;d>>15,m^=m<<4,m^=m>>>13,d>=0&&(h=h+1640531527|0,p=g[d&127]^=m+h,f=p==0?f+1:0);for(f>=128&&(g[(c&&c.length||0)&127]=-1),f=127,d=4*128;d>0;--d)m=g[f+34&127],p=g[f=f+1&127],m^=m<<13,p^=p<<17,m^=m>>>15,p^=p>>>12,g[f]=m^p;l.w=h,l.X=g,l.i=f}u(a,i)}function o(i,a){return a.i=i.i,a.w=i.w,a.X=i.X.slice(),a}function s(i,a){i==null&&(i=+new Date);var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(l.X&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor4096=s})(gE,typeof hS==\"object\"&&hS,typeof define==\"function\"&&define)});var bE=Oe((yE,gS)=>{(function(r,t,e){function n(i){var a=this,u=\"\";a.next=function(){var c=a.b,p=a.c,m=a.d,f=a.a;return c=c<<25^c>>>7^p,p=p-m|0,m=m<<24^m>>>8^f,f=f-c|0,a.b=c=c<<20^c>>>12^p,a.c=p=p-m|0,a.d=m<<16^p>>>16^f,a.a=f-c|0},a.a=0,a.b=0,a.c=-1640531527,a.d=1367130551,i===Math.floor(i)?(a.a=i/4294967296|0,a.b=i|0):u+=i;for(var l=0;l>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(typeof l==\"object\"&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.tychei=s})(yE,typeof gS==\"object\"&&gS,typeof define==\"function\"&&define)});var xS=Oe(()=>{});var wE=Oe((ESt,Hx)=>{(function(r,t){var e=this,n=256,o=6,s=52,i=\"random\",a=t.pow(n,o),u=t.pow(2,s),l=u*2,c=n-1,p;function m(w,v,k){var _=[];v=v==!0?{entropy:!0}:v||{};var $=g(h(v.entropy?[w,b(r)]:w==null?y():w,3),_),D=new f(_),F=function(){for(var P=D.g(o),B=a,U=0;P=l;)P/=2,B/=2,U>>>=1;return(P+U)/B};return F.int32=function(){return D.g(4)|0},F.quick=function(){return D.g(4)/4294967296},F.double=F,g(b(D.S),r),(v.pass||k||function(P,B,U,q){return q&&(q.S&&d(q,D),P.state=function(){return d(D,{})}),U?(t[i]=P,B):P})(F,$,\"global\"in v?v.global:this==t,v.state)}t[\"seed\"+i]=m;function f(w){var v,k=w.length,_=this,$=0,D=_.i=_.j=0,F=_.S=[];for(k||(w=[k++]);${var uj=uE(),cj=pE(),pj=fE(),mj=hE(),fj=xE(),dj=bE(),lc=wE();lc.alea=uj;lc.xor128=cj;lc.xorwow=pj;lc.xorshift7=mj;lc.xor4096=fj;lc.tychei=dj;vE.exports=lc});var rF=Oe((eF,Tk)=>{(function(r,t,e){function n(a){var u=this,l=i();u.next=function(){var c=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=c-(u.c=c|0)},u.c=1,u.s0=l(\" \"),u.s1=l(\" \"),u.s2=l(\" \"),u.s0-=l(a),u.s0<0&&(u.s0+=1),u.s1-=l(a),u.s1<0&&(u.s1+=1),u.s2-=l(a),u.s2<0&&(u.s2+=1),l=null}function o(a,u){return u.c=a.c,u.s0=a.s0,u.s1=a.s1,u.s2=a.s2,u}function s(a,u){var l=new n(a),c=u&&u.state,p=l.next;return p.int32=function(){return l.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,c&&(typeof c==\"object\"&&o(c,l),p.state=function(){return o(l,{})}),p}function i(){var a=4022871197,u=function(l){l=String(l);for(var c=0;c>>0,p-=a,p*=a,a=p>>>0,p-=a,a+=p*4294967296}return(a>>>0)*23283064365386963e-26};return u}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.alea=s})(eF,typeof Tk==\"object\"&&Tk,typeof define==\"function\"&&define)});var oF=Oe((nF,_k)=>{(function(r,t,e){function n(i){var a=this,u=\"\";a.x=0,a.y=0,a.z=0,a.w=0,a.next=function(){var c=a.x^a.x<<11;return a.x=a.y,a.y=a.z,a.z=a.w,a.w^=a.w>>>19^c^c>>>8},i===(i|0)?a.x=i:u+=i;for(var l=0;l>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(typeof l==\"object\"&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor128=s})(nF,typeof _k==\"object\"&&_k,typeof define==\"function\"&&define)});var iF=Oe((sF,Ek)=>{(function(r,t,e){function n(i){var a=this,u=\"\";a.next=function(){var c=a.x^a.x>>>2;return a.x=a.y,a.y=a.z,a.z=a.w,a.w=a.v,(a.d=a.d+362437|0)+(a.v=a.v^a.v<<4^(c^c<<1))|0},a.x=0,a.y=0,a.z=0,a.w=0,a.v=0,i===(i|0)?a.x=i:u+=i;for(var l=0;l>>4),a.next()}function o(i,a){return a.x=i.x,a.y=i.y,a.z=i.z,a.w=i.w,a.v=i.v,a.d=i.d,a}function s(i,a){var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(typeof l==\"object\"&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorwow=s})(sF,typeof Ek==\"object\"&&Ek,typeof define==\"function\"&&define)});var lF=Oe((aF,Ak)=>{(function(r,t,e){function n(i){var a=this;a.next=function(){var l=a.x,c=a.i,p,m,f;return p=l[c],p^=p>>>7,m=p^p<<24,p=l[c+1&7],m^=p^p>>>10,p=l[c+3&7],m^=p^p>>>3,p=l[c+4&7],m^=p^p<<7,p=l[c+7&7],p=p^p<<13,m^=p^p<<9,l[c]=m,a.i=c+1&7,m};function u(l,c){var p,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=\"\"+c,p=0;p0;--p)l.next()}u(a,i)}function o(i,a){return a.x=i.x.slice(),a.i=i.i,a}function s(i,a){i==null&&(i=+new Date);var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(l.x&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorshift7=s})(aF,typeof Ak==\"object\"&&Ak,typeof define==\"function\"&&define)});var cF=Oe((uF,$k)=>{(function(r,t,e){function n(i){var a=this;a.next=function(){var l=a.w,c=a.X,p=a.i,m,f;return a.w=l=l+1640531527|0,f=c[p+34&127],m=c[p=p+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[p]=f^m,a.i=p,f+(l^l>>>16)|0};function u(l,c){var p,m,f,d,h,g=[],y=128;for(c===(c|0)?(m=c,c=null):(c=c+\"\\0\",m=0,y=Math.max(y,c.length)),f=0,d=-32;d>>15,m^=m<<4,m^=m>>>13,d>=0&&(h=h+1640531527|0,p=g[d&127]^=m+h,f=p==0?f+1:0);for(f>=128&&(g[(c&&c.length||0)&127]=-1),f=127,d=4*128;d>0;--d)m=g[f+34&127],p=g[f=f+1&127],m^=m<<13,p^=p<<17,m^=m>>>15,p^=p>>>12,g[f]=m^p;l.w=h,l.X=g,l.i=f}u(a,i)}function o(i,a){return a.i=i.i,a.w=i.w,a.X=i.X.slice(),a}function s(i,a){i==null&&(i=+new Date);var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(l.X&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor4096=s})(uF,typeof $k==\"object\"&&$k,typeof define==\"function\"&&define)});var mF=Oe((pF,Dk)=>{(function(r,t,e){function n(i){var a=this,u=\"\";a.next=function(){var c=a.b,p=a.c,m=a.d,f=a.a;return c=c<<25^c>>>7^p,p=p-m|0,m=m<<24^m>>>8^f,f=f-c|0,a.b=c=c<<20^c>>>12^p,a.c=p=p-m|0,a.d=m<<16^p>>>16^f,a.a=f-c|0},a.a=0,a.b=0,a.c=-1640531527,a.d=1367130551,i===Math.floor(i)?(a.a=i/4294967296|0,a.b=i|0):u+=i;for(var l=0;l>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(typeof l==\"object\"&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.tychei=s})(pF,typeof Dk==\"object\"&&Dk,typeof define==\"function\"&&define)});var dF=Oe((fF,Rb)=>{(function(r,t,e){var n=256,o=6,s=52,i=\"random\",a=e.pow(n,o),u=e.pow(2,s),l=u*2,c=n-1,p;function m(w,v,k){var _=[];v=v==!0?{entropy:!0}:v||{};var $=g(h(v.entropy?[w,b(t)]:w==null?y():w,3),_),D=new f(_),F=function(){for(var P=D.g(o),B=a,U=0;P=l;)P/=2,B/=2,U>>>=1;return(P+U)/B};return F.int32=function(){return D.g(4)|0},F.quick=function(){return D.g(4)/4294967296},F.double=F,g(b(D.S),t),(v.pass||k||function(P,B,U,q){return q&&(q.S&&d(q,D),P.state=function(){return d(D,{})}),U?(e[i]=P,B):P})(F,$,\"global\"in v?v.global:this==e,v.state)}function f(w){var v,k=w.length,_=this,$=0,D=_.i=_.j=0,F=_.S=[];for(k||(w=[k++]);${var AZ=rF(),$Z=oF(),DZ=iF(),FZ=lF(),RZ=cF(),OZ=mF(),Uc=dF();Uc.alea=AZ;Uc.xor128=$Z;Uc.xorwow=DZ;Uc.xorshift7=FZ;Uc.xor4096=RZ;Uc.tychei=OZ;hF.exports=Uc});var Rk=Oe(()=>{});var Ub=Oe(()=>{});var Og=Oe(()=>{});var kW=Oe(()=>{});var NW=Oe(()=>{});var TW=Oe(()=>{});var _W=Oe((i0,JT)=>{var ZT=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(t){t=t||{};function e(){return Ot.buffer!=gr&&Wo(Ot.buffer),fp}function n(){return Ot.buffer!=gr&&Wo(Ot.buffer),dp}function o(){return Ot.buffer!=gr&&Wo(Ot.buffer),Ad}function s(){return Ot.buffer!=gr&&Wo(Ot.buffer),Bg}function i(){return Ot.buffer!=gr&&Wo(Ot.buffer),Vg}function a(){return Ot.buffer!=gr&&Wo(Ot.buffer),Gg}function u(){return Ot.buffer!=gr&&Wo(Ot.buffer),Wg}var l=typeof t!=\"undefined\"?t:{},c,p;l.ready=new Promise(function(T,O){c=T,p=O});var m;typeof process!=\"undefined\"&&process.listeners&&(m={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var f=Object.assign({},l),d=[],h=\"./this.program\",g=(T,O)=>{throw O},y=typeof window==\"object\",b=typeof importScripts==\"function\",w=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",v=l.ENVIRONMENT_IS_PTHREAD||!1,k=\"\";function _(T){return l.locateFile?l.locateFile(T,k):k+T}var $,D,F,P;function B(T){if(T instanceof Bd)return;X(\"exiting due to exception: \"+T)}var U,q,j;if(w){b?k=Og().dirname(k)+\"/\":k=__dirname+\"/\",j=()=>{q||(U=Ub(),q=Og())},$=function(W,Y){return j(),W=q.normalize(W),U.readFileSync(W,Y?void 0:\"utf8\")},F=O=>{var W=$(O,!0);return W.buffer||(W=new Uint8Array(W)),W},D=(O,W,Y)=>{j(),O=q.normalize(O),U.readFile(O,function(ht,wt){ht?Y(ht):W(wt.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\\\/g,\"/\")),d=process.argv.slice(2),process.on(\"uncaughtException\",function(O){if(!(O instanceof Bd))throw O}),process.on(\"unhandledRejection\",function(O){throw O}),g=(O,W)=>{if($u())throw process.exitCode=O,W;B(W),process.exit(O)},l.inspect=function(){return\"[Emscripten Module object]\"};let T;try{T=kW()}catch(O){throw console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?'),O}global.Worker=T.Worker}else(y||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||($=T=>{var O=new XMLHttpRequest;return O.open(\"GET\",T,!1),O.send(null),O.responseText},b&&(F=T=>{var O=new XMLHttpRequest;return O.open(\"GET\",T,!1),O.responseType=\"arraybuffer\",O.send(null),new Uint8Array(O.response)}),D=(T,O,W)=>{var Y=new XMLHttpRequest;Y.open(\"GET\",T,!0),Y.responseType=\"arraybuffer\",Y.onload=()=>{if(Y.status==200||Y.status==0&&Y.response){O(Y.response);return}W()},Y.onerror=W,Y.send(null)}),P=T=>document.title=T);w&&typeof performance==\"undefined\"&&(global.performance=NW().performance);var K=console.log.bind(console),Q=console.warn.bind(console);w&&(j(),K=T=>U.writeSync(1,T+`\n`),Q=T=>U.writeSync(2,T+`\n`));var rt=l.print||K,X=l.printErr||Q;Object.assign(l,f),f=null,l.arguments&&(d=l.arguments),l.thisProgram&&(h=l.thisProgram),l.quit&&(g=l.quit);var nt=4;function st(T){st.shown||(st.shown={}),st.shown[T]||(st.shown[T]=1,X(T))}function it(T,O){if(typeof WebAssembly.Function==\"function\"){for(var W={i:\"i32\",j:\"i64\",f:\"f32\",d:\"f64\"},Y={parameters:[],results:O[0]==\"v\"?[]:[W[O[0]]]},ht=1;ht{bt=T},At=Atomics.load,Dt=Atomics.store,Kt=Atomics.compareExchange,jt;l.wasmBinary&&(jt=l.wasmBinary);var ce=l.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&gp(\"no native wasm support detected\");var Ot,$e,ke=!1,ae;function Ke(T,O){T||gp(O)}function Re(T){var O=l[\"_\"+T];return O}function rn(T,O,W,Y,ht){var wt={string:function(Mn){var Np=0;if(Mn!=null&&Mn!==0){var S1=(Mn.length<<2)+1;Np=kp(S1),On(Mn,Np,S1)}return Np},array:function(Mn){var Np=kp(Mn.length);return Al(Mn,Np),Np}};function Tt(Mn){return O===\"string\"?jr(Mn):O===\"boolean\"?Boolean(Mn):Mn}var Gt=Re(T),sr=[],Ko=0;if(Y)for(var jo=0;jo(W.buffer instanceof SharedArrayBuffer&&(W=new Uint8Array(W)),O.decode.call(O,W))}var nn=typeof TextDecoder!=\"undefined\"?new Rr(\"utf8\"):void 0;function on(T,O,W){for(var Y=O+W,ht=O;T[ht]&&!(ht>=Y);)++ht;if(ht-O>16&&T.subarray&&nn)return nn.decode(T.subarray(O,ht));for(var wt=\"\";O>10,56320|Ko&1023)}}return wt}function jr(T,O){return T?on(n(),T,O):\"\"}function so(T,O,W,Y){if(!(Y>0))return 0;for(var ht=W,wt=W+Y-1,Tt=0;Tt=55296&&Gt<=57343){var sr=T.charCodeAt(++Tt);Gt=65536+((Gt&1023)<<10)|sr&1023}if(Gt<=127){if(W>=wt)break;O[W++]=Gt}else if(Gt<=2047){if(W+1>=wt)break;O[W++]=192|Gt>>6,O[W++]=128|Gt&63}else if(Gt<=65535){if(W+2>=wt)break;O[W++]=224|Gt>>12,O[W++]=128|Gt>>6&63,O[W++]=128|Gt&63}else{if(W+3>=wt)break;O[W++]=240|Gt>>18,O[W++]=128|Gt>>12&63,O[W++]=128|Gt>>6&63,O[W++]=128|Gt&63}}return O[W]=0,W-ht}function On(T,O,W){return so(T,n(),O,W)}function Go(T){for(var O=0,W=0;W=55296&&Y<=57343&&(Y=65536+((Y&1023)<<10)|T.charCodeAt(++W)&1023),Y<=127?++O:Y<=2047?O+=2:Y<=65535?O+=3:O+=4}return O}var io=typeof TextDecoder!=\"undefined\"?new Rr(\"utf-16le\"):void 0;function Al(T,O){e().set(T,O)}function Eu(T,O,W){for(var Y=0;Y>0]=T.charCodeAt(Y);W||(e()[O>>0]=0)}function mp(T,O){return T%O>0&&(T+=O-T%O),T}var gr,fp,dp,Ad,Bg,Vg,o1,Gg,Wg;v&&(gr=l.buffer);function Wo(T){gr=T,l.HEAP8=fp=new Int8Array(T),l.HEAP16=Ad=new Int16Array(T),l.HEAP32=Vg=new Int32Array(T),l.HEAPU8=dp=new Uint8Array(T),l.HEAPU16=Bg=new Uint16Array(T),l.HEAPU32=o1=new Uint32Array(T),l.HEAPF32=Gg=new Float32Array(T),l.HEAPF64=Wg=new Float64Array(T)}var Ug=l.INITIAL_MEMORY||16777216;if(v)Ot=l.wasmMemory,gr=l.buffer;else if(l.wasmMemory)Ot=l.wasmMemory;else if(Ot=new WebAssembly.Memory({initial:Ug/65536,maximum:32768,shared:!0}),!(Ot.buffer instanceof SharedArrayBuffer))throw X(\"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&&console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\"),Error(\"bad memory\");Ot&&(gr=Ot.buffer),Ug=gr.byteLength,Wo(gr);var qn,hp=[],$l=[],u0=[],Hg=[],Au=!1,c0=!1,qg=0;function $u(){return ce||qg>0}function sn(){if(l.preRun)for(typeof l.preRun==\"function\"&&(l.preRun=[l.preRun]);l.preRun.length;)s1(l.preRun.shift());Yg(hp)}function $d(){Au=!0,!v&&Yg($l)}function p0(){v||(Ut.terminateAllThreads(),c0=!0)}function m0(){if(!v){if(l.postRun)for(typeof l.postRun==\"function\"&&(l.postRun=[l.postRun]);l.postRun.length;)Dd(l.postRun.shift());Yg(Hg)}}function s1(T){hp.unshift(T)}function i1(T){$l.unshift(T)}function Dd(T){Hg.unshift(T)}var Dl=0,Kg=null,Uo=null;function Fd(T){Dl++,l.monitorRunDependencies&&l.monitorRunDependencies(Dl)}function a1(T){if(Dl--,l.monitorRunDependencies&&l.monitorRunDependencies(Dl),Dl==0&&(Kg!==null&&(clearInterval(Kg),Kg=null),Uo)){var O=Uo;Uo=null,O()}}l.preloadedImages={},l.preloadedAudios={};function gp(T){v?postMessage({cmd:\"onAbort\",arg:T}):l.onAbort&&l.onAbort(T),T=\"Aborted(\"+T+\")\",X(T),ke=!0,ae=1,T+=\". Build with -s ASSERTIONS=1 for more info.\";var O=new WebAssembly.RuntimeError(T);throw p(O),O}var f0=\"data:application/octet-stream;base64,\";function Rd(T){return T.startsWith(f0)}function jg(T){return T.startsWith(\"file://\")}var an;an=\"tfjs-backend-wasm-threaded-simd.wasm\",Rd(an)||(an=_(an));function Xg(T){try{if(T==an&&jt)return new Uint8Array(jt);if(F)return F(T);throw\"both async and sync fetching of the wasm failed\"}catch(O){gp(O)}}function xp(){if(!jt&&(y||b)){if(typeof fetch==\"function\"&&!jg(an))return fetch(an,{credentials:\"same-origin\"}).then(function(T){if(!T.ok)throw\"failed to load wasm binary file at '\"+an+\"'\";return T.arrayBuffer()}).catch(function(){return Xg(an)});if(D)return new Promise(function(T,O){D(an,function(W){T(new Uint8Array(W))},O)})}return Promise.resolve().then(function(){return Xg(an)})}function d0(){var T={env:lx,wasi_snapshot_preview1:lx};function O(Tt,Gt){var sr=Tt.exports;if(l.asm=sr,v0(l.asm.emscripten_tls_init),qn=l.asm.__indirect_function_table,i1(l.asm.__wasm_call_ctors),$e=Gt,!v){var Ko=Ut.unusedWorkers.length;Ut.unusedWorkers.forEach(function(jo){Ut.loadWasmModuleToWorker(jo,function(){--Ko||a1(\"wasm-instantiate\")})})}}v||Fd(\"wasm-instantiate\");function W(Tt){O(Tt.instance,Tt.module)}function Y(Tt){return xp().then(function(Gt){return WebAssembly.instantiate(Gt,T)}).then(function(Gt){return Gt}).then(Tt,function(Gt){X(\"failed to asynchronously prepare wasm: \"+Gt),gp(Gt)})}function ht(){return!jt&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Rd(an)&&!jg(an)&&typeof fetch==\"function\"?fetch(an,{credentials:\"same-origin\"}).then(function(Tt){var Gt=WebAssembly.instantiateStreaming(Tt,T);return Gt.then(W,function(sr){return X(\"wasm streaming compile failed: \"+sr),X(\"falling back to ArrayBuffer instantiation\"),Y(W)})}):Y(W)}if(l.instantiateWasm)try{var wt=l.instantiateWasm(T,O);return wt}catch(Tt){return X(\"Module.instantiateWasm callback failed with error: \"+Tt),!1}return ht().catch(p),{}}var l1,u1,h0={};function Yg(T){for(;T.length>0;){var O=T.shift();if(typeof O==\"function\"){O(l);continue}var W=O.func;typeof W==\"number\"?O.arg===void 0?bp(W)():bp(W)(O.arg):W(O.arg===void 0?null:O.arg)}}function yp(T){var O=LC(),W=T();return fx(O),W}function OW(T){return T}function c1(T){var O=/\\b_Z[\\w\\d_]+/g;return T.replace(O,function(W){var Y=W;return W===Y?W:Y+\" [\"+W+\"]\"})}function g0(T){i()[T>>2]=0;var O=Ut.pthreads[T];delete Ut.pthreads[T],O.worker.terminate(),PC(T),Ut.runningWorkers.splice(Ut.runningWorkers.indexOf(O.worker),1),O.worker.pthread=void 0}function x0(T){var O=Ut.pthreads[T];O.worker.postMessage({cmd:\"cancel\"})}function Zg(T){var O=Ut.pthreads[T];if(O){i()[T>>2]=0;var W=O.worker;Ut.returnWorkerToPool(W)}}function Jg(T){SU(T)}function y0(T){if(T instanceof Bd||T==\"unwind\")return ae;g(1,T)}var Ut={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],init:function(){v?Ut.initWorker():Ut.initMainThread()},initMainThread:function(){for(var T=8,O=0;O>2]=0;try{T()}finally{i()[I1>>2]=1}},receiveObjectTransfer:function(T){},threadInit:function(){for(var T in Ut.tlsInitFunctions)Ut.tlsInitFunctions[T]()},loadWasmModuleToWorker:function(T,O){T.onmessage=W=>{var Y=W.data,ht=Y.cmd;if(T.pthread&&(Ut.currentProxiedOperationCallerThread=T.pthread.threadInfoStruct),Y.targetThread&&Y.targetThread!=mx()){var wt=Ut.pthreads[Y.targetThread];wt?wt.worker.postMessage(Y,Y.transferList):X('Internal error! Worker sent a message \"'+ht+'\" to target pthread '+Y.targetThread+\", but that thread no longer exists!\"),Ut.currentProxiedOperationCallerThread=void 0;return}ht===\"processQueuedMainThreadWork\"?y1():ht===\"spawnThread\"?tx(Y):ht===\"cleanupThread\"?Zg(Y.thread):ht===\"killThread\"?g0(Y.thread):ht===\"cancelThread\"?x0(Y.thread):ht===\"loaded\"?(T.loaded=!0,O&&O(T),T.runPthread&&(T.runPthread(),delete T.runPthread)):ht===\"print\"?rt(\"Thread \"+Y.threadId+\": \"+Y.text):ht===\"printErr\"?X(\"Thread \"+Y.threadId+\": \"+Y.text):ht===\"alert\"?alert(\"Thread \"+Y.threadId+\": \"+Y.text):Y.target===\"setimmediate\"?T.postMessage(Y):ht===\"onAbort\"?l.onAbort&&l.onAbort(Y.arg):X(\"worker sent an unknown command \"+ht),Ut.currentProxiedOperationCallerThread=void 0},T.onerror=W=>{var Y=\"worker sent an error!\";throw X(Y+\" \"+W.filename+\":\"+W.lineno+\": \"+W.message),W},w&&(T.on(\"message\",function(W){T.onmessage({data:W})}),T.on(\"error\",function(W){T.onerror(W)}),T.on(\"detachedExit\",function(){})),T.postMessage({cmd:\"load\",urlOrBlob:l.mainScriptUrlOrBlob||r,wasmMemory:Ot,wasmModule:$e})},allocateUnusedWorker:function(){var T=_(\"tfjs-backend-wasm-threaded-simd.worker.js\");Ut.unusedWorkers.push(new Worker(T))},getNewWorker:function(){return Ut.unusedWorkers.length==0&&(Ut.allocateUnusedWorker(),Ut.loadWasmModuleToWorker(Ut.unusedWorkers[0])),Ut.unusedWorkers.pop()}};function b0(){var T=mx(),O=i()[T+44>>2],W=i()[T+48>>2],Y=O-W;C1(O,Y),fx(O)}l.establishStackSpace=b0;function Qg(T){if(v)return Ru(1,0,T);try{Jg(T)}catch(O){y0(O)}}var Du=[];function bp(T){var O=Du[T];return O||(T>=Du.length&&(Du.length=T+1),Du[T]=O=qn.get(T)),O}function w0(T,O){return bp(T)(O)}l.invokeEntryPoint=w0;function p1(){var T=new Error;if(!T.stack){try{throw new Error}catch(O){T=O}if(!T.stack)return\"(no stack trace available)\"}return T.stack.toString()}function v0(T,O,W){Ut.tlsInitFunctions.push(T)}function m1(T,O){qn.set(T,O),Du[T]=O}var Fu;w?Fu=()=>{var T=process.hrtime();return T[0]*1e3+T[1]/1e6}:v?Fu=()=>performance.now()-l.__performance_now_clock_drift:Fu=()=>performance.now();var C0=!0;function I0(T){return i()[x1()>>2]=T,T}function S0(T,O){var W;if(T===0)W=Date.now();else if((T===1||T===4)&&C0)W=Fu();else return I0(28),-1;return i()[O>>2]=W/1e3|0,i()[O+4>>2]=W%1e3*1e3*1e3|0,0}function k0(T,O){return S0(T,O)}function N0(T){b1(T,!b,1,!y),Ut.threadInit()}function T0(T){v?postMessage({cmd:\"cleanupThread\",thread:T}):Zg(T)}function tx(T){var O=Ut.getNewWorker();if(!O)return 6;Ut.runningWorkers.push(O);var W=Ut.pthreads[T.pthread_ptr]={worker:O,threadInfoStruct:T.pthread_ptr};O.pthread=W;var Y={cmd:\"run\",start_routine:T.startRoutine,arg:T.arg,threadInfoStruct:T.pthread_ptr};return O.runPthread=()=>{Y.time=performance.now(),O.postMessage(Y,T.transferList)},O.loaded&&(O.runPthread(),delete O.runPthread),0}function _0(T,O,W,Y){if(typeof SharedArrayBuffer==\"undefined\")return X(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var ht=[],wt=0;if(v&&(ht.length===0||wt))return w1(687865856,T,O,W,Y);if(wt)return wt;var Tt={startRoutine:W,pthread_ptr:T,arg:Y,transferList:ht};return v?(Tt.cmd=\"spawnThread\",postMessage(Tt,ht),0):tx(Tt)}function E0(){return 2097152}function A0(T,O){if(T==O)postMessage({cmd:\"processQueuedMainThreadWork\"});else if(v)postMessage({targetThread:T,cmd:\"processThreadQueue\"});else{var W=Ut.pthreads[T],Y=W&&W.worker;if(!Y)return;Y.postMessage({cmd:\"processThreadQueue\"})}return 1}function $0(){gp(\"\")}function D0(){w||b||st(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")}function ex(){return 2147483648}function F0(T,O,W){n().copyWithin(T,O,O+W)}function R0(){return w?TW().cpus().length:navigator.hardwareConcurrency}function Ru(T,O){var W=arguments.length-2,Y=arguments;return yp(function(){for(var ht=W,wt=kp(ht*8),Tt=wt>>3,Gt=0;Gt>3,ht=0;ht>>16),Wo(Ot.buffer),1}catch(O){}}function P0(T){var O=n().length;if(T=T>>>0,T<=O)return!1;var W=ex();if(T>W)return!1;for(var Y=1;Y<=4;Y*=2){var ht=O*(1+.2/Y);ht=Math.min(ht,T+100663296);var wt=Math.min(W,mp(Math.max(T,ht),65536)),Tt=M0(wt);if(Tt)return!0}return!1}var ne={inEventHandler:0,removeAllEventListeners:function(){for(var T=ne.eventHandlers.length-1;T>=0;--T)ne._removeHandler(T);ne.eventHandlers=[],ne.deferredCalls=[]},registerRemoveEventListeners:function(){ne.removeEventListenersRegistered||(u0.push(ne.removeAllEventListeners),ne.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(T,O,W){function Y(Tt,Gt){if(Tt.length!=Gt.length)return!1;for(var sr in Tt)if(Tt[sr]!=Gt[sr])return!1;return!0}for(var ht in ne.deferredCalls){var wt=ne.deferredCalls[ht];if(wt.targetFunction==T&&Y(wt.argsList,W))return}ne.deferredCalls.push({targetFunction:T,precedence:O,argsList:W}),ne.deferredCalls.sort(function(Tt,Gt){return Tt.precedence>2]=W,i()[wt+4>>2]=Y,i()[wt+8>>2]=ht,MC(T,637534208,O,Y,wt)})},getTargetThreadForEventCallback:function(T){switch(T){case 1:return 0;case 2:return Ut.currentProxiedOperationCallerThread;default:return T}},getNodeNameForTarget:function(T){return T?T==window?\"#window\":T==screen?\"#screen\":T&&T.nodeName?T.nodeName:\"\":\"\"},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function L0(T){var O=Go(T)+1,W=OC(O);return On(T,W,O),W}function z0(T,O,W,Y){yp(function(){var ht=kp(12),wt=0;O&&(wt=L0(O)),i()[ht>>2]=wt,i()[ht+4>>2]=W,i()[ht+8>>2]=Y,MC(T,657457152,0,wt,ht)})}function B0(T,O,W,Y){O=O?jr(O):\"\",z0(T,O,W,Y)}function V0(T){return T>2?jr(T):T}var G0=[0,typeof document!=\"undefined\"?document:0,typeof window!=\"undefined\"?window:0];function W0(T){T=V0(T);var O=G0[T]||(typeof document!=\"undefined\"?document.querySelector(T):void 0);return O}function Md(T){return W0(T)}function rx(T,O,W){var Y=Md(T);if(!Y)return-4;if(Y.canvasSharedPtr&&(i()[Y.canvasSharedPtr>>2]=O,i()[Y.canvasSharedPtr+4>>2]=W),Y.offscreenCanvas||!Y.controlTransferredOffscreen){Y.offscreenCanvas&&(Y=Y.offscreenCanvas);var ht=!1;if(Y.GLctxObject&&Y.GLctxObject.GLctx){var wt=Y.GLctxObject.GLctx.getParameter(2978);ht=wt[0]===0&&wt[1]===0&&wt[2]===Y.width&&wt[3]===Y.height}Y.width=O,Y.height=W,ht&&Y.GLctxObject.GLctx.viewport(0,0,O,W)}else if(Y.canvasSharedPtr){var Tt=i()[Y.canvasSharedPtr+8>>2];return B0(Tt,T,O,W),1}else return-4;return 0}function nx(T,O,W){return v?Ru(2,1,T,O,W):rx(T,O,W)}function U0(T,O,W){var Y=Md(T);return Y?rx(T,O,W):nx(T,O,W)}function H0(){throw\"unwind\"}function q0(T){var O=T.getExtension(\"ANGLE_instanced_arrays\");if(O)return T.vertexAttribDivisor=function(W,Y){O.vertexAttribDivisorANGLE(W,Y)},T.drawArraysInstanced=function(W,Y,ht,wt){O.drawArraysInstancedANGLE(W,Y,ht,wt)},T.drawElementsInstanced=function(W,Y,ht,wt,Tt){O.drawElementsInstancedANGLE(W,Y,ht,wt,Tt)},1}function K0(T){var O=T.getExtension(\"OES_vertex_array_object\");if(O)return T.createVertexArray=function(){return O.createVertexArrayOES()},T.deleteVertexArray=function(W){O.deleteVertexArrayOES(W)},T.bindVertexArray=function(W){O.bindVertexArrayOES(W)},T.isVertexArray=function(W){return O.isVertexArrayOES(W)},1}function j0(T){var O=T.getExtension(\"WEBGL_draw_buffers\");if(O)return T.drawBuffers=function(W,Y){O.drawBuffersWEBGL(W,Y)},1}function X0(T){return!!(T.multiDrawWebgl=T.getExtension(\"WEBGL_multi_draw\"))}var or={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function(O){or.lastError||(or.lastError=O)},getNewId:function(T){for(var O=or.counter++,W=T.length;W>2]:-1;ht+=jr(i()[W+wt*4>>2],Tt<0?void 0:Tt)}return ht},createContext:function(T,O){T.getContextSafariWebGL2Fixed||(T.getContextSafariWebGL2Fixed=T.getContext,T.getContext=function(ht,wt){var Tt=T.getContextSafariWebGL2Fixed(ht,wt);return ht==\"webgl\"==Tt instanceof WebGLRenderingContext?Tt:null});var W=T.getContext(\"webgl\",O);if(!W)return 0;var Y=or.registerContext(W,O);return Y},registerContext:function(T,O){var W=OC(8);i()[W+4>>2]=mx();var Y={handle:W,attributes:O,version:O.majorVersion,GLctx:T};return T.canvas&&(T.canvas.GLctxObject=Y),or.contexts[W]=Y,(typeof O.enableExtensionsByDefault==\"undefined\"||O.enableExtensionsByDefault)&&or.initExtensions(Y),W},makeContextCurrent:function(T){return or.currentContext=or.contexts[T],l.ctx=ax=or.currentContext&&or.currentContext.GLctx,!(T&&!ax)},getContext:function(T){return or.contexts[T]},deleteContext:function(T){or.currentContext===or.contexts[T]&&(or.currentContext=null),typeof ne==\"object\"&&ne.removeAllHandlersOnTarget(or.contexts[T].GLctx.canvas),or.contexts[T]&&or.contexts[T].GLctx.canvas&&(or.contexts[T].GLctx.canvas.GLctxObject=void 0),g1(or.contexts[T].handle),or.contexts[T]=null},initExtensions:function(T){if(T||(T=or.currentContext),!T.initExtensionsDone){T.initExtensionsDone=!0;var O=T.GLctx;q0(O),K0(O),j0(O),O.disjointTimerQueryExt=O.getExtension(\"EXT_disjoint_timer_query\"),X0(O);var W=O.getSupportedExtensions()||[];W.forEach(function(Y){!Y.includes(\"lose_context\")&&!Y.includes(\"debug\")&&O.getExtension(Y)})}}},Y0=[\"default\",\"low-power\",\"high-performance\"];function Z0(T,O){var W=O>>2,Y=i()[W+6],ht={alpha:!!i()[W+0],depth:!!i()[W+1],stencil:!!i()[W+2],antialias:!!i()[W+3],premultipliedAlpha:!!i()[W+4],preserveDrawingBuffer:!!i()[W+5],powerPreference:Y0[Y],failIfMajorPerformanceCaveat:!!i()[W+7],majorVersion:i()[W+8],minorVersion:i()[W+9],enableExtensionsByDefault:i()[W+10],explicitSwapControl:i()[W+11],proxyContextToMainThread:i()[W+12],renderViaOffscreenBackBuffer:i()[W+13]},wt=Md(T);if(!wt||ht.explicitSwapControl)return 0;var Tt=or.createContext(wt,ht);return Tt}function J0(T,O){return Z0(T,O)}var wp={mappings:{},buffers:[null,[],[]],printChar:function(T,O){var W=wp.buffers[T];O===0||O===10?((T===1?rt:X)(on(W,0)),W.length=0):W.push(O)},varargs:void 0,get:function(){wp.varargs+=4;var T=i()[wp.varargs-4>>2];return T},getStr:function(T){var O=jr(T);return O},get64:function(T,O){return T}};function ox(T){return v?Ru(3,1,T):0}function sx(T,O,W,Y,ht){if(v)return Ru(4,1,T,O,W,Y,ht)}function ix(T,O,W,Y){if(v)return Ru(5,1,T,O,W,Y);for(var ht=0,wt=0;wt>2],Gt=i()[O+4>>2];O+=8;for(var sr=0;sr>2]=ht,0}function Q0(T){kt(T)}Ut.init();var ax,tC=[null,Qg,nx,ox,sx,ix],f1=!1,lx={__clock_gettime:k0,__emscripten_init_main_thread_js:N0,__emscripten_thread_cleanup:T0,__pthread_create_js:_0,_emscripten_default_pthread_stack_size:E0,_emscripten_notify_thread_queue:A0,abort:$0,emscripten_check_blocking_allowed:D0,emscripten_get_heap_max:ex,emscripten_get_now:Fu,emscripten_memcpy_big:F0,emscripten_num_logical_cores:R0,emscripten_receive_on_main_thread_js:O0,emscripten_resize_heap:P0,emscripten_set_canvas_element_size:U0,emscripten_unwind_to_js_event_loop:H0,emscripten_webgl_create_context:J0,exit:Jg,fd_close:ox,fd_seek:sx,fd_write:ix,memory:Ot||l.wasmMemory,setTempRet0:Q0},d1=d0(),eC=l.___wasm_call_ctors=function(){return(eC=l.___wasm_call_ctors=l.asm.__wasm_call_ctors).apply(null,arguments)},rC=l._init=function(){return(rC=l._init=l.asm.init).apply(null,arguments)},nC=l._init_with_threads_count=function(){return(nC=l._init_with_threads_count=l.asm.init_with_threads_count).apply(null,arguments)},oC=l._get_threads_count=function(){return(oC=l._get_threads_count=l.asm.get_threads_count).apply(null,arguments)},sC=l._register_tensor=function(){return(sC=l._register_tensor=l.asm.register_tensor).apply(null,arguments)},iC=l._dispose_data=function(){return(iC=l._dispose_data=l.asm.dispose_data).apply(null,arguments)},aC=l._dispose=function(){return(aC=l._dispose=l.asm.dispose).apply(null,arguments)},lC=l._Abs=function(){return(lC=l._Abs=l.asm.Abs).apply(null,arguments)},uC=l._Add=function(){return(uC=l._Add=l.asm.Add).apply(null,arguments)},cC=l._AddN=function(){return(cC=l._AddN=l.asm.AddN).apply(null,arguments)},pC=l._All=function(){return(pC=l._All=l.asm.All).apply(null,arguments)},mC=l._Any=function(){return(mC=l._Any=l.asm.Any).apply(null,arguments)},fC=l._ArgMax=function(){return(fC=l._ArgMax=l.asm.ArgMax).apply(null,arguments)},dC=l._AvgPool=function(){return(dC=l._AvgPool=l.asm.AvgPool).apply(null,arguments)},hC=l._BatchMatMul=function(){return(hC=l._BatchMatMul=l.asm.BatchMatMul).apply(null,arguments)},gC=l._Ceil=function(){return(gC=l._Ceil=l.asm.Ceil).apply(null,arguments)},xC=l._ClipByValue=function(){return(xC=l._ClipByValue=l.asm.ClipByValue).apply(null,arguments)},yC=l._Conv2D=function(){return(yC=l._Conv2D=l.asm.Conv2D).apply(null,arguments)},bC=l._Conv2DBackpropInput=function(){return(bC=l._Conv2DBackpropInput=l.asm.Conv2DBackpropInput).apply(null,arguments)},wC=l._Cos=function(){return(wC=l._Cos=l.asm.Cos).apply(null,arguments)},vC=l._Cosh=function(){return(vC=l._Cosh=l.asm.Cosh).apply(null,arguments)},CC=l._CropAndResize=function(){return(CC=l._CropAndResize=l.asm.CropAndResize).apply(null,arguments)},IC=l._Cumprod=function(){return(IC=l._Cumprod=l.asm.Cumprod).apply(null,arguments)},SC=l._Cumsum=function(){return(SC=l._Cumsum=l.asm.Cumsum).apply(null,arguments)},kC=l._DepthToSpace=function(){return(kC=l._DepthToSpace=l.asm.DepthToSpace).apply(null,arguments)},NC=l._DepthwiseConv2dNative=function(){return(NC=l._DepthwiseConv2dNative=l.asm.DepthwiseConv2dNative).apply(null,arguments)},TC=l._Elu=function(){return(TC=l._Elu=l.asm.Elu).apply(null,arguments)},_C=l._Equal=function(){return(_C=l._Equal=l.asm.Equal).apply(null,arguments)},EC=l._Exp=function(){return(EC=l._Exp=l.asm.Exp).apply(null,arguments)},AC=l._FlipLeftRight=function(){return(AC=l._FlipLeftRight=l.asm.FlipLeftRight).apply(null,arguments)},ux=l._Floor=function(){return(ux=l._Floor=l.asm.Floor).apply(null,arguments)},cx=l._FloorDiv=function(){return(cx=l._FloorDiv=l.asm.FloorDiv).apply(null,arguments)},Pd=l._FusedBatchNorm=function(){return(Pd=l._FusedBatchNorm=l.asm.FusedBatchNorm).apply(null,arguments)},$C=l._FusedConv2D=function(){return($C=l._FusedConv2D=l.asm.FusedConv2D).apply(null,arguments)},DC=l._FusedDepthwiseConv2D=function(){return(DC=l._FusedDepthwiseConv2D=l.asm.FusedDepthwiseConv2D).apply(null,arguments)},vp=l._Gather=function(){return(vp=l._Gather=l.asm.Gather).apply(null,arguments)},Ld=l._GatherNd=function(){return(Ld=l._GatherNd=l.asm.GatherNd).apply(null,arguments)},zd=l._Greater=function(){return(zd=l._Greater=l.asm.Greater).apply(null,arguments)},h1=l._GreaterEqual=function(){return(h1=l._GreaterEqual=l.asm.GreaterEqual).apply(null,arguments)},Cp=l._LeakyRelu=function(){return(Cp=l._LeakyRelu=l.asm.LeakyRelu).apply(null,arguments)},Ip=l._Less=function(){return(Ip=l._Less=l.asm.Less).apply(null,arguments)},FC=l._LessEqual=function(){return(FC=l._LessEqual=l.asm.LessEqual).apply(null,arguments)},H=l._Log=function(){return(H=l._Log=l.asm.Log).apply(null,arguments)},tt=l._LogicalAnd=function(){return(tt=l._LogicalAnd=l.asm.LogicalAnd).apply(null,arguments)},gt=l._Max=function(){return(gt=l._Max=l.asm.Max).apply(null,arguments)},$t=l._MaxPool=function(){return($t=l._MaxPool=l.asm.MaxPool).apply(null,arguments)},de=l._Maximum=function(){return(de=l._Maximum=l.asm.Maximum).apply(null,arguments)},ge=l._Mean=function(){return(ge=l._Mean=l.asm.Mean).apply(null,arguments)},oe=l._Min=function(){return(oe=l._Min=l.asm.Min).apply(null,arguments)},ee=l._Minimum=function(){return(ee=l._Minimum=l.asm.Minimum).apply(null,arguments)},xr=l._MirrorPad=function(){return(xr=l._MirrorPad=l.asm.MirrorPad).apply(null,arguments)},Ho=l._Multiply=function(){return(Ho=l._Multiply=l.asm.Multiply).apply(null,arguments)},qo=l._Neg=function(){return(qo=l._Neg=l.asm.Neg).apply(null,arguments)},Sp=l._NonMaxSuppressionV3=function(){return(Sp=l._NonMaxSuppressionV3=l.asm.NonMaxSuppressionV3).apply(null,arguments)},Ou=l._NonMaxSuppressionV4=function(){return(Ou=l._NonMaxSuppressionV4=l.asm.NonMaxSuppressionV4).apply(null,arguments)},RC=l._NonMaxSuppressionV5=function(){return(RC=l._NonMaxSuppressionV5=l.asm.NonMaxSuppressionV5).apply(null,arguments)},ln=l._NotEqual=function(){return(ln=l._NotEqual=l.asm.NotEqual).apply(null,arguments)},Fl=l._OneHot=function(){return(Fl=l._OneHot=l.asm.OneHot).apply(null,arguments)},px=l._PadV2=function(){return(px=l._PadV2=l.asm.PadV2).apply(null,arguments)},MW=l._Pow=function(){return(MW=l._Pow=l.asm.Pow).apply(null,arguments)},PW=l._Prelu=function(){return(PW=l._Prelu=l.asm.Prelu).apply(null,arguments)},LW=l._Prod=function(){return(LW=l._Prod=l.asm.Prod).apply(null,arguments)},zW=l._RealDiv=function(){return(zW=l._RealDiv=l.asm.RealDiv).apply(null,arguments)},BW=l._Relu=function(){return(BW=l._Relu=l.asm.Relu).apply(null,arguments)},VW=l._Relu6=function(){return(VW=l._Relu6=l.asm.Relu6).apply(null,arguments)},GW=l._ResizeBilinear=function(){return(GW=l._ResizeBilinear=l.asm.ResizeBilinear).apply(null,arguments)},WW=l._Reverse=function(){return(WW=l._Reverse=l.asm.Reverse).apply(null,arguments)},UW=l._RotateWithOffset=function(){return(UW=l._RotateWithOffset=l.asm.RotateWithOffset).apply(null,arguments)},HW=l._Round=function(){return(HW=l._Round=l.asm.Round).apply(null,arguments)},qW=l._Rsqrt=function(){return(qW=l._Rsqrt=l.asm.Rsqrt).apply(null,arguments)},KW=l._ScatterNd=function(){return(KW=l._ScatterNd=l.asm.ScatterNd).apply(null,arguments)},jW=l._SelectV2=function(){return(jW=l._SelectV2=l.asm.SelectV2).apply(null,arguments)},XW=l._Sigmoid=function(){return(XW=l._Sigmoid=l.asm.Sigmoid).apply(null,arguments)},YW=l._Sin=function(){return(YW=l._Sin=l.asm.Sin).apply(null,arguments)},ZW=l._Softmax=function(){return(ZW=l._Softmax=l.asm.Softmax).apply(null,arguments)},JW=l._SparseFillEmptyRows=function(){return(JW=l._SparseFillEmptyRows=l.asm.SparseFillEmptyRows).apply(null,arguments)},QW=l._SparseReshape=function(){return(QW=l._SparseReshape=l.asm.SparseReshape).apply(null,arguments)},tU=l._SparseSegmentReduction=function(){return(tU=l._SparseSegmentReduction=l.asm.SparseSegmentReduction).apply(null,arguments)},eU=l._Sqrt=function(){return(eU=l._Sqrt=l.asm.Sqrt).apply(null,arguments)},rU=l._Square=function(){return(rU=l._Square=l.asm.Square).apply(null,arguments)},nU=l._SquaredDifference=function(){return(nU=l._SquaredDifference=l.asm.SquaredDifference).apply(null,arguments)},oU=l._Step=function(){return(oU=l._Step=l.asm.Step).apply(null,arguments)},sU=l._StridedSlice=function(){return(sU=l._StridedSlice=l.asm.StridedSlice).apply(null,arguments)},iU=l._Sub=function(){return(iU=l._Sub=l.asm.Sub).apply(null,arguments)},aU=l._Sum=function(){return(aU=l._Sum=l.asm.Sum).apply(null,arguments)},lU=l._Tan=function(){return(lU=l._Tan=l.asm.Tan).apply(null,arguments)},uU=l._Tanh=function(){return(uU=l._Tanh=l.asm.Tanh).apply(null,arguments)},cU=l._Tile=function(){return(cU=l._Tile=l.asm.Tile).apply(null,arguments)},pU=l._TopK=function(){return(pU=l._TopK=l.asm.TopK).apply(null,arguments)},mU=l._Transform=function(){return(mU=l._Transform=l.asm.Transform).apply(null,arguments)},fU=l._Transpose=function(){return(fU=l._Transpose=l.asm.Transpose).apply(null,arguments)},dU=l.__FusedMatMul=function(){return(dU=l.__FusedMatMul=l.asm._FusedMatMul).apply(null,arguments)},OC=l._malloc=function(){return(OC=l._malloc=l.asm.malloc).apply(null,arguments)},g1=l._free=function(){return(g1=l._free=l.asm.free).apply(null,arguments)},hU=l._emscripten_tls_init=function(){return(hU=l._emscripten_tls_init=l.asm.emscripten_tls_init).apply(null,arguments)},x1=l.___errno_location=function(){return(x1=l.___errno_location=l.asm.__errno_location).apply(null,arguments)},mx=l._pthread_self=function(){return(mx=l._pthread_self=l.asm.pthread_self).apply(null,arguments)},y1=l._emscripten_main_thread_process_queued_calls=function(){return(y1=l._emscripten_main_thread_process_queued_calls=l.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},gU=l.__emscripten_thread_crashed=function(){return(gU=l.__emscripten_thread_crashed=l.asm._emscripten_thread_crashed).apply(null,arguments)},b1=l.__emscripten_thread_init=function(){return(b1=l.__emscripten_thread_init=l.asm._emscripten_thread_init).apply(null,arguments)},xU=l._emscripten_current_thread_process_queued_calls=function(){return(xU=l._emscripten_current_thread_process_queued_calls=l.asm.emscripten_current_thread_process_queued_calls).apply(null,arguments)},yU=l._emscripten_main_browser_thread_id=function(){return(yU=l._emscripten_main_browser_thread_id=l.asm.emscripten_main_browser_thread_id).apply(null,arguments)},bU=l._emscripten_sync_run_in_main_thread_2=function(){return(bU=l._emscripten_sync_run_in_main_thread_2=l.asm.emscripten_sync_run_in_main_thread_2).apply(null,arguments)},w1=l._emscripten_sync_run_in_main_thread_4=function(){return(w1=l._emscripten_sync_run_in_main_thread_4=l.asm.emscripten_sync_run_in_main_thread_4).apply(null,arguments)},v1=l._emscripten_run_in_main_runtime_thread_js=function(){return(v1=l._emscripten_run_in_main_runtime_thread_js=l.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},MC=l._emscripten_dispatch_to_thread_=function(){return(MC=l._emscripten_dispatch_to_thread_=l.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},PC=l.__emscripten_thread_free_data=function(){return(PC=l.__emscripten_thread_free_data=l.asm._emscripten_thread_free_data).apply(null,arguments)},wU=l.__emscripten_thread_exit=function(){return(wU=l.__emscripten_thread_exit=l.asm._emscripten_thread_exit).apply(null,arguments)},vU=l._memalign=function(){return(vU=l._memalign=l.asm.memalign).apply(null,arguments)},C1=l._emscripten_stack_set_limits=function(){return(C1=l._emscripten_stack_set_limits=l.asm.emscripten_stack_set_limits).apply(null,arguments)},LC=l.stackSave=function(){return(LC=l.stackSave=l.asm.stackSave).apply(null,arguments)},fx=l.stackRestore=function(){return(fx=l.stackRestore=l.asm.stackRestore).apply(null,arguments)},kp=l.stackAlloc=function(){return(kp=l.stackAlloc=l.asm.stackAlloc).apply(null,arguments)},CU=l.dynCall_iijjiiii=function(){return(CU=l.dynCall_iijjiiii=l.asm.dynCall_iijjiiii).apply(null,arguments)},IU=l.dynCall_jiji=function(){return(IU=l.dynCall_jiji=l.asm.dynCall_jiji).apply(null,arguments)},I1=l.__emscripten_allow_main_runtime_queued_calls=21464;l.cwrap=ze,l.keepRuntimeAlive=$u,l.PThread=Ut,l.PThread=Ut,l.wasmMemory=Ot,l.ExitStatus=Bd;var dx;function Bd(T){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+T+\")\",this.status=T}Uo=function T(){dx||zC(),dx||(Uo=T)};function zC(T){if(T=T||d,Dl>0)return;if(v){c(l),$d(),postMessage({cmd:\"loaded\"});return}if(sn(),Dl>0)return;function O(){dx||(dx=!0,l.calledRun=!0,!ke&&($d(),c(l),l.onRuntimeInitialized&&l.onRuntimeInitialized(),m0()))}l.setStatus?(l.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){l.setStatus(\"\")},1),O()},1)):O()}l.run=zC;function SU(T,O){if(ae=T,!O&&v)throw Qg(T),\"unwind\";$u()||p0(),kU(T)}function kU(T){ae=T,$u()||(Ut.terminateAllThreads(),l.onExit&&l.onExit(T),ke=!0),g(T,new Bd(T))}if(l.preInit)for(typeof l.preInit==\"function\"&&(l.preInit=[l.preInit]);l.preInit.length>0;)l.preInit.pop()();zC();var hx;m&&(hx={uncaughtException:process.listeners(\"uncaughtException\").filter(function(T){return!m.uncaughtException.indexOf(T)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(T){return!m.unhandledRejection.indexOf(T)>-1})});var gx;if(typeof WasmBackendModule!=\"undefined\")gx=WasmBackendModule;else if(typeof t!=\"undefined\")gx=t;else throw new Error(\"Could not find wasm module in post.js\");if(hx){var NU=gx._dispose;gx._dispose=function(){NU(),hx.uncaughtException.forEach(function(T){process.removeListener(\"uncaughtException\",T)}),hx.unhandledRejection.forEach(function(T){process.removeListener(\"unhandledRejection\",T)})}}return t.ready}})();typeof i0==\"object\"&&typeof JT==\"object\"?JT.exports=ZT:typeof define==\"function\"&&define.amd?define([],function(){return ZT}):typeof i0==\"object\"&&(i0.WasmBackendModuleThreadedSimd=ZT)});var AW=Oe((a0,t1)=>{var QT=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(t){t=t||{};var e=typeof t!=\"undefined\"?t:{},n,o;e.ready=new Promise(function(H,tt){n=H,o=tt});var s;typeof process!=\"undefined\"&&process.listeners&&(s={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var i=Object.assign({},e),a=[],u=\"./this.program\",l=(H,tt)=>{throw tt},c=typeof window==\"object\",p=typeof importScripts==\"function\",m=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",f=\"\";function d(H){return e.locateFile?e.locateFile(H,f):f+H}var h,g,y,b;function w(H){if(H instanceof Ld)return;D(\"exiting due to exception: \"+H)}var v,k,_;m?(p?f=Og().dirname(f)+\"/\":f=__dirname+\"/\",_=()=>{k||(v=Ub(),k=Og())},h=function(tt,gt){return _(),tt=k.normalize(tt),v.readFileSync(tt,gt?void 0:\"utf8\")},y=H=>{var tt=h(H,!0);return tt.buffer||(tt=new Uint8Array(tt)),tt},g=(H,tt,gt)=>{_(),H=k.normalize(H),v.readFile(H,function($t,de){$t?gt($t):tt(de.buffer)})},process.argv.length>1&&(u=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),process.on(\"uncaughtException\",function(H){if(!(H instanceof Ld))throw H}),process.on(\"unhandledRejection\",function(H){throw H}),l=(H,tt)=>{if(Ad())throw process.exitCode=H,tt;w(tt),process.exit(H)},e.inspect=function(){return\"[Emscripten Module object]\"}):(c||p)&&(p?f=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(f=document.currentScript.src),r&&(f=r),f.indexOf(\"blob:\")!==0?f=f.substr(0,f.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):f=\"\",h=H=>{var tt=new XMLHttpRequest;return tt.open(\"GET\",H,!1),tt.send(null),tt.responseText},p&&(y=H=>{var tt=new XMLHttpRequest;return tt.open(\"GET\",H,!1),tt.responseType=\"arraybuffer\",tt.send(null),new Uint8Array(tt.response)}),g=(H,tt,gt)=>{var $t=new XMLHttpRequest;$t.open(\"GET\",H,!0),$t.responseType=\"arraybuffer\",$t.onload=()=>{if($t.status==200||$t.status==0&&$t.response){tt($t.response);return}gt()},$t.onerror=gt,$t.send(null)},b=H=>document.title=H);var $=e.print||console.log.bind(console),D=e.printErr||console.warn.bind(console);Object.assign(e,i),i=null,e.arguments&&(a=e.arguments),e.thisProgram&&(u=e.thisProgram),e.quit&&(l=e.quit);var F=4;function P(H){P.shown||(P.shown={}),P.shown[H]||(P.shown[H]=1,D(H))}function B(H,tt){if(typeof WebAssembly.Function==\"function\"){for(var gt={i:\"i32\",j:\"i64\",f:\"f32\",d:\"f64\"},$t={parameters:[],results:tt[0]==\"v\"?[]:[gt[tt[0]]]},de=1;de{Q=H},X;e.wasmBinary&&(X=e.wasmBinary);var nt=e.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&Au(\"no native wasm support detected\");var st,it=!1,ft;function at(H,tt){H||Au(tt)}function xt(H){var tt=e[\"_\"+H];return tt}function dt(H,tt,gt,$t,de){var ge={string:function(ln){var Fl=0;if(ln!=null&&ln!==0){var px=(ln.length<<2)+1;Fl=Pd(px),ce(ln,Fl,px)}return Fl},array:function(ln){var Fl=Pd(ln.length);return ke(ln,Fl),Fl}};function oe(ln){return tt===\"string\"?Kt(ln):tt===\"boolean\"?Boolean(ln):ln}var ee=xt(H),xr=[],Ho=0;if($t)for(var qo=0;qo<$t.length;qo++){var Sp=ge[gt[qo]];Sp?(Ho===0&&(Ho=ux()),xr[qo]=Sp($t[qo])):xr[qo]=$t[qo]}var Ou=ee.apply(null,xr);function RC(ln){return Ho!==0&&cx(Ho),oe(ln)}return Ou=RC(Ou),Ou}function bt(H,tt,gt,$t){gt=gt||[];var de=gt.every(function(oe){return oe===\"number\"}),ge=tt!==\"string\";return ge&&de&&!$t?xt(H):function(){return dt(H,tt,gt,arguments,$t)}}var kt=1,At=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function Dt(H,tt,gt){for(var $t=tt+gt,de=tt;H[de]&&!(de>=$t);)++de;if(de-tt>16&&H.subarray&&At)return At.decode(H.subarray(tt,de));for(var ge=\"\";tt>10,56320|Ho&1023)}}return ge}function Kt(H,tt){return H?Dt(ze,H,tt):\"\"}function jt(H,tt,gt,$t){if(!($t>0))return 0;for(var de=gt,ge=gt+$t-1,oe=0;oe=55296&&ee<=57343){var xr=H.charCodeAt(++oe);ee=65536+((ee&1023)<<10)|xr&1023}if(ee<=127){if(gt>=ge)break;tt[gt++]=ee}else if(ee<=2047){if(gt+1>=ge)break;tt[gt++]=192|ee>>6,tt[gt++]=128|ee&63}else if(ee<=65535){if(gt+2>=ge)break;tt[gt++]=224|ee>>12,tt[gt++]=128|ee>>6&63,tt[gt++]=128|ee&63}else{if(gt+3>=ge)break;tt[gt++]=240|ee>>18,tt[gt++]=128|ee>>12&63,tt[gt++]=128|ee>>6&63,tt[gt++]=128|ee&63}}return tt[gt]=0,gt-de}function ce(H,tt,gt){return jt(H,ze,tt,gt)}function Ot(H){for(var tt=0,gt=0;gt=55296&&$t<=57343&&($t=65536+(($t&1023)<<10)|H.charCodeAt(++gt)&1023),$t<=127?++tt:$t<=2047?tt+=2:$t<=65535?tt+=3:tt+=4}return tt}var $e=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf-16le\"):void 0;function ke(H,tt){rn.set(H,tt)}function ae(H,tt,gt){for(var $t=0;$t>0]=H.charCodeAt($t);gt||(rn[tt>>0]=0)}function Ke(H,tt){return H%tt>0&&(H+=tt-H%tt),H}var Re,rn,ze,Vo,Rr,nn,on,jr,so;function On(H){Re=H,e.HEAP8=rn=new Int8Array(H),e.HEAP16=Vo=new Int16Array(H),e.HEAP32=nn=new Int32Array(H),e.HEAPU8=ze=new Uint8Array(H),e.HEAPU16=Rr=new Uint16Array(H),e.HEAPU32=on=new Uint32Array(H),e.HEAPF32=jr=new Float32Array(H),e.HEAPF64=so=new Float64Array(H)}var Go=e.INITIAL_MEMORY||16777216,io,Al=[],Eu=[],mp=[],gr=!1,fp=!1,dp=0;function Ad(){return nt||dp>0}function Bg(){if(e.preRun)for(typeof e.preRun==\"function\"&&(e.preRun=[e.preRun]);e.preRun.length;)Wg(e.preRun.shift());Dd(Al)}function Vg(){gr=!0,Dd(Eu)}function o1(){fp=!0}function Gg(){if(e.postRun)for(typeof e.postRun==\"function\"&&(e.postRun=[e.postRun]);e.postRun.length;)Ug(e.postRun.shift());Dd(mp)}function Wg(H){Al.unshift(H)}function Wo(H){Eu.unshift(H)}function Ug(H){mp.unshift(H)}var qn=0,hp=null,$l=null;function u0(H){qn++,e.monitorRunDependencies&&e.monitorRunDependencies(qn)}function Hg(H){if(qn--,e.monitorRunDependencies&&e.monitorRunDependencies(qn),qn==0&&(hp!==null&&(clearInterval(hp),hp=null),$l)){var tt=$l;$l=null,tt()}}e.preloadedImages={},e.preloadedAudios={};function Au(H){e.onAbort&&e.onAbort(H),H=\"Aborted(\"+H+\")\",D(H),it=!0,ft=1,H+=\". Build with -s ASSERTIONS=1 for more info.\";var tt=new WebAssembly.RuntimeError(H);throw o(tt),tt}var c0=\"data:application/octet-stream;base64,\";function qg(H){return H.startsWith(c0)}function $u(H){return H.startsWith(\"file://\")}var sn;sn=\"tfjs-backend-wasm.wasm\",qg(sn)||(sn=d(sn));function $d(H){try{if(H==sn&&X)return new Uint8Array(X);if(y)return y(H);throw\"both async and sync fetching of the wasm failed\"}catch(tt){Au(tt)}}function p0(){if(!X&&(c||p)){if(typeof fetch==\"function\"&&!$u(sn))return fetch(sn,{credentials:\"same-origin\"}).then(function(H){if(!H.ok)throw\"failed to load wasm binary file at '\"+sn+\"'\";return H.arrayBuffer()}).catch(function(){return $d(sn)});if(g)return new Promise(function(H,tt){g(sn,function(gt){H(new Uint8Array(gt))},tt)})}return Promise.resolve().then(function(){return $d(sn)})}function m0(){var H={env:yp,wasi_snapshot_preview1:yp};function tt(oe,ee){var xr=oe.exports;e.asm=xr,st=e.asm.memory,On(st.buffer),io=e.asm.__indirect_function_table,Wo(e.asm.__wasm_call_ctors),Hg(\"wasm-instantiate\")}u0(\"wasm-instantiate\");function gt(oe){tt(oe.instance)}function $t(oe){return p0().then(function(ee){return WebAssembly.instantiate(ee,H)}).then(function(ee){return ee}).then(oe,function(ee){D(\"failed to asynchronously prepare wasm: \"+ee),Au(ee)})}function de(){return!X&&typeof WebAssembly.instantiateStreaming==\"function\"&&!qg(sn)&&!$u(sn)&&typeof fetch==\"function\"?fetch(sn,{credentials:\"same-origin\"}).then(function(oe){var ee=WebAssembly.instantiateStreaming(oe,H);return ee.then(gt,function(xr){return D(\"wasm streaming compile failed: \"+xr),D(\"falling back to ArrayBuffer instantiation\"),$t(gt)})}):$t(gt)}if(e.instantiateWasm)try{var ge=e.instantiateWasm(H,tt);return ge}catch(oe){return D(\"Module.instantiateWasm callback failed with error: \"+oe),!1}return de().catch(o),{}}var s1,i1;function Dd(H){for(;H.length>0;){var tt=H.shift();if(typeof tt==\"function\"){tt(e);continue}var gt=tt.func;typeof gt==\"number\"?tt.arg===void 0?Fd(gt)():Fd(gt)(tt.arg):gt(tt.arg===void 0?null:tt.arg)}}function Dl(H){return H}function Kg(H){var tt=/\\b_Z[\\w\\d_]+/g;return H.replace(tt,function(gt){var $t=gt;return gt===$t?gt:$t+\" [\"+gt+\"]\"})}var Uo=[];function Fd(H){var tt=Uo[H];return tt||(H>=Uo.length&&(Uo.length=H+1),Uo[H]=tt=io.get(H)),tt}function a1(){var H=new Error;if(!H.stack){try{throw new Error}catch(tt){H=tt}if(!H.stack)return\"(no stack trace available)\"}return H.stack.toString()}function gp(H,tt){io.set(H,tt),Uo[H]=tt}function f0(){Au(\"\")}function Rd(){return 2147483648}function jg(H,tt,gt){ze.copyWithin(H,tt,tt+gt)}function an(H){try{return st.grow(H-Re.byteLength+65535>>>16),On(st.buffer),1}catch(tt){}}function Xg(H){var tt=ze.length;H=H>>>0;var gt=Rd();if(H>gt)return!1;for(var $t=1;$t<=4;$t*=2){var de=tt*(1+.2/$t);de=Math.min(de,H+100663296);var ge=Math.min(gt,Ke(Math.max(H,de),65536)),oe=an(ge);if(oe)return!0}return!1}var xp={mappings:{},buffers:[null,[],[]],printChar:function(H,tt){var gt=xp.buffers[H];tt===0||tt===10?((H===1?$:D)(Dt(gt,0)),gt.length=0):gt.push(tt)},varargs:void 0,get:function(){xp.varargs+=4;var H=nn[xp.varargs-4>>2];return H},getStr:function(H){var tt=Kt(H);return tt},get64:function(H,tt){return H}};function d0(H){return 0}function l1(H,tt,gt,$t,de){}function u1(H,tt,gt,$t){for(var de=0,ge=0;ge>2],ee=nn[tt+4>>2];tt+=8;for(var xr=0;xr>2]=de,0}function h0(H){rt(H)}var Yg=!1,yp={abort:f0,emscripten_get_heap_max:Rd,emscripten_memcpy_big:jg,emscripten_resize_heap:Xg,fd_close:d0,fd_seek:l1,fd_write:u1,setTempRet0:h0},OW=m0(),c1=e.___wasm_call_ctors=function(){return(c1=e.___wasm_call_ctors=e.asm.__wasm_call_ctors).apply(null,arguments)},g0=e._init=function(){return(g0=e._init=e.asm.init).apply(null,arguments)},x0=e._init_with_threads_count=function(){return(x0=e._init_with_threads_count=e.asm.init_with_threads_count).apply(null,arguments)},Zg=e._get_threads_count=function(){return(Zg=e._get_threads_count=e.asm.get_threads_count).apply(null,arguments)},Jg=e._register_tensor=function(){return(Jg=e._register_tensor=e.asm.register_tensor).apply(null,arguments)},y0=e._dispose_data=function(){return(y0=e._dispose_data=e.asm.dispose_data).apply(null,arguments)},Ut=e._dispose=function(){return(Ut=e._dispose=e.asm.dispose).apply(null,arguments)},b0=e._Abs=function(){return(b0=e._Abs=e.asm.Abs).apply(null,arguments)},Qg=e._Add=function(){return(Qg=e._Add=e.asm.Add).apply(null,arguments)},Du=e._AddN=function(){return(Du=e._AddN=e.asm.AddN).apply(null,arguments)},bp=e._All=function(){return(bp=e._All=e.asm.All).apply(null,arguments)},w0=e._Any=function(){return(w0=e._Any=e.asm.Any).apply(null,arguments)},p1=e._ArgMax=function(){return(p1=e._ArgMax=e.asm.ArgMax).apply(null,arguments)},v0=e._AvgPool=function(){return(v0=e._AvgPool=e.asm.AvgPool).apply(null,arguments)},m1=e._BatchMatMul=function(){return(m1=e._BatchMatMul=e.asm.BatchMatMul).apply(null,arguments)},Fu=e._Ceil=function(){return(Fu=e._Ceil=e.asm.Ceil).apply(null,arguments)},C0=e._ClipByValue=function(){return(C0=e._ClipByValue=e.asm.ClipByValue).apply(null,arguments)},I0=e._Conv2D=function(){return(I0=e._Conv2D=e.asm.Conv2D).apply(null,arguments)},S0=e._Conv2DBackpropInput=function(){return(S0=e._Conv2DBackpropInput=e.asm.Conv2DBackpropInput).apply(null,arguments)},k0=e._Cos=function(){return(k0=e._Cos=e.asm.Cos).apply(null,arguments)},N0=e._Cosh=function(){return(N0=e._Cosh=e.asm.Cosh).apply(null,arguments)},T0=e._CropAndResize=function(){return(T0=e._CropAndResize=e.asm.CropAndResize).apply(null,arguments)},tx=e._Cumprod=function(){return(tx=e._Cumprod=e.asm.Cumprod).apply(null,arguments)},_0=e._Cumsum=function(){return(_0=e._Cumsum=e.asm.Cumsum).apply(null,arguments)},E0=e._DepthToSpace=function(){return(E0=e._DepthToSpace=e.asm.DepthToSpace).apply(null,arguments)},A0=e._DepthwiseConv2dNative=function(){return(A0=e._DepthwiseConv2dNative=e.asm.DepthwiseConv2dNative).apply(null,arguments)},$0=e._Elu=function(){return($0=e._Elu=e.asm.Elu).apply(null,arguments)},D0=e._Equal=function(){return(D0=e._Equal=e.asm.Equal).apply(null,arguments)},ex=e._Exp=function(){return(ex=e._Exp=e.asm.Exp).apply(null,arguments)},F0=e._FlipLeftRight=function(){return(F0=e._FlipLeftRight=e.asm.FlipLeftRight).apply(null,arguments)},R0=e._Floor=function(){return(R0=e._Floor=e.asm.Floor).apply(null,arguments)},Ru=e._FloorDiv=function(){return(Ru=e._FloorDiv=e.asm.FloorDiv).apply(null,arguments)},Od=e._FusedBatchNorm=function(){return(Od=e._FusedBatchNorm=e.asm.FusedBatchNorm).apply(null,arguments)},O0=e._FusedConv2D=function(){return(O0=e._FusedConv2D=e.asm.FusedConv2D).apply(null,arguments)},M0=e._FusedDepthwiseConv2D=function(){return(M0=e._FusedDepthwiseConv2D=e.asm.FusedDepthwiseConv2D).apply(null,arguments)},P0=e._Gather=function(){return(P0=e._Gather=e.asm.Gather).apply(null,arguments)},ne=e._GatherNd=function(){return(ne=e._GatherNd=e.asm.GatherNd).apply(null,arguments)},L0=e._Greater=function(){return(L0=e._Greater=e.asm.Greater).apply(null,arguments)},z0=e._GreaterEqual=function(){return(z0=e._GreaterEqual=e.asm.GreaterEqual).apply(null,arguments)},B0=e._LeakyRelu=function(){return(B0=e._LeakyRelu=e.asm.LeakyRelu).apply(null,arguments)},V0=e._Less=function(){return(V0=e._Less=e.asm.Less).apply(null,arguments)},G0=e._LessEqual=function(){return(G0=e._LessEqual=e.asm.LessEqual).apply(null,arguments)},W0=e._Log=function(){return(W0=e._Log=e.asm.Log).apply(null,arguments)},Md=e._LogicalAnd=function(){return(Md=e._LogicalAnd=e.asm.LogicalAnd).apply(null,arguments)},rx=e._Max=function(){return(rx=e._Max=e.asm.Max).apply(null,arguments)},nx=e._MaxPool=function(){return(nx=e._MaxPool=e.asm.MaxPool).apply(null,arguments)},U0=e._Maximum=function(){return(U0=e._Maximum=e.asm.Maximum).apply(null,arguments)},H0=e._Mean=function(){return(H0=e._Mean=e.asm.Mean).apply(null,arguments)},q0=e._Min=function(){return(q0=e._Min=e.asm.Min).apply(null,arguments)},K0=e._Minimum=function(){return(K0=e._Minimum=e.asm.Minimum).apply(null,arguments)},j0=e._MirrorPad=function(){return(j0=e._MirrorPad=e.asm.MirrorPad).apply(null,arguments)},X0=e._Multiply=function(){return(X0=e._Multiply=e.asm.Multiply).apply(null,arguments)},or=e._Neg=function(){return(or=e._Neg=e.asm.Neg).apply(null,arguments)},Y0=e._NonMaxSuppressionV3=function(){return(Y0=e._NonMaxSuppressionV3=e.asm.NonMaxSuppressionV3).apply(null,arguments)},Z0=e._NonMaxSuppressionV4=function(){return(Z0=e._NonMaxSuppressionV4=e.asm.NonMaxSuppressionV4).apply(null,arguments)},J0=e._NonMaxSuppressionV5=function(){return(J0=e._NonMaxSuppressionV5=e.asm.NonMaxSuppressionV5).apply(null,arguments)},wp=e._NotEqual=function(){return(wp=e._NotEqual=e.asm.NotEqual).apply(null,arguments)},ox=e._OneHot=function(){return(ox=e._OneHot=e.asm.OneHot).apply(null,arguments)},sx=e._PadV2=function(){return(sx=e._PadV2=e.asm.PadV2).apply(null,arguments)},ix=e._Pow=function(){return(ix=e._Pow=e.asm.Pow).apply(null,arguments)},Q0=e._Prelu=function(){return(Q0=e._Prelu=e.asm.Prelu).apply(null,arguments)},ax=e._Prod=function(){return(ax=e._Prod=e.asm.Prod).apply(null,arguments)},tC=e._RealDiv=function(){return(tC=e._RealDiv=e.asm.RealDiv).apply(null,arguments)},f1=e._Relu=function(){return(f1=e._Relu=e.asm.Relu).apply(null,arguments)},lx=e._Relu6=function(){return(lx=e._Relu6=e.asm.Relu6).apply(null,arguments)},d1=e._ResizeBilinear=function(){return(d1=e._ResizeBilinear=e.asm.ResizeBilinear).apply(null,arguments)},eC=e._Reverse=function(){return(eC=e._Reverse=e.asm.Reverse).apply(null,arguments)},rC=e._RotateWithOffset=function(){return(rC=e._RotateWithOffset=e.asm.RotateWithOffset).apply(null,arguments)},nC=e._Round=function(){return(nC=e._Round=e.asm.Round).apply(null,arguments)},oC=e._Rsqrt=function(){return(oC=e._Rsqrt=e.asm.Rsqrt).apply(null,arguments)},sC=e._ScatterNd=function(){return(sC=e._ScatterNd=e.asm.ScatterNd).apply(null,arguments)},iC=e._SelectV2=function(){return(iC=e._SelectV2=e.asm.SelectV2).apply(null,arguments)},aC=e._Sigmoid=function(){return(aC=e._Sigmoid=e.asm.Sigmoid).apply(null,arguments)},lC=e._Sin=function(){return(lC=e._Sin=e.asm.Sin).apply(null,arguments)},uC=e._Softmax=function(){return(uC=e._Softmax=e.asm.Softmax).apply(null,arguments)},cC=e._SparseFillEmptyRows=function(){return(cC=e._SparseFillEmptyRows=e.asm.SparseFillEmptyRows).apply(null,arguments)},pC=e._SparseReshape=function(){return(pC=e._SparseReshape=e.asm.SparseReshape).apply(null,arguments)},mC=e._SparseSegmentReduction=function(){return(mC=e._SparseSegmentReduction=e.asm.SparseSegmentReduction).apply(null,arguments)},fC=e._Sqrt=function(){return(fC=e._Sqrt=e.asm.Sqrt).apply(null,arguments)},dC=e._Square=function(){return(dC=e._Square=e.asm.Square).apply(null,arguments)},hC=e._SquaredDifference=function(){return(hC=e._SquaredDifference=e.asm.SquaredDifference).apply(null,arguments)},gC=e._Step=function(){return(gC=e._Step=e.asm.Step).apply(null,arguments)},xC=e._StridedSlice=function(){return(xC=e._StridedSlice=e.asm.StridedSlice).apply(null,arguments)},yC=e._Sub=function(){return(yC=e._Sub=e.asm.Sub).apply(null,arguments)},bC=e._Sum=function(){return(bC=e._Sum=e.asm.Sum).apply(null,arguments)},wC=e._Tan=function(){return(wC=e._Tan=e.asm.Tan).apply(null,arguments)},vC=e._Tanh=function(){return(vC=e._Tanh=e.asm.Tanh).apply(null,arguments)},CC=e._Tile=function(){return(CC=e._Tile=e.asm.Tile).apply(null,arguments)},IC=e._TopK=function(){return(IC=e._TopK=e.asm.TopK).apply(null,arguments)},SC=e._Transform=function(){return(SC=e._Transform=e.asm.Transform).apply(null,arguments)},kC=e._Transpose=function(){return(kC=e._Transpose=e.asm.Transpose).apply(null,arguments)},NC=e.__FusedMatMul=function(){return(NC=e.__FusedMatMul=e.asm._FusedMatMul).apply(null,arguments)},TC=e._malloc=function(){return(TC=e._malloc=e.asm.malloc).apply(null,arguments)},_C=e._free=function(){return(_C=e._free=e.asm.free).apply(null,arguments)},EC=e.___errno_location=function(){return(EC=e.___errno_location=e.asm.__errno_location).apply(null,arguments)},AC=e._emscripten_main_thread_process_queued_calls=function(){return(AC=e._emscripten_main_thread_process_queued_calls=e.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},ux=e.stackSave=function(){return(ux=e.stackSave=e.asm.stackSave).apply(null,arguments)},cx=e.stackRestore=function(){return(cx=e.stackRestore=e.asm.stackRestore).apply(null,arguments)},Pd=e.stackAlloc=function(){return(Pd=e.stackAlloc=e.asm.stackAlloc).apply(null,arguments)},$C=e.dynCall_iijjiiii=function(){return($C=e.dynCall_iijjiiii=e.asm.dynCall_iijjiiii).apply(null,arguments)},DC=e.dynCall_jiji=function(){return(DC=e.dynCall_jiji=e.asm.dynCall_jiji).apply(null,arguments)};e.cwrap=bt;var vp;function Ld(H){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+H+\")\",this.status=H}$l=function H(){vp||zd(),vp||($l=H)};function zd(H){if(H=H||a,qn>0||(Bg(),qn>0))return;function tt(){vp||(vp=!0,e.calledRun=!0,!it&&(Vg(),n(e),e.onRuntimeInitialized&&e.onRuntimeInitialized(),Gg()))}e.setStatus?(e.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){e.setStatus(\"\")},1),tt()},1)):tt()}e.run=zd;function h1(H){ft=H,Ad()||(e.onExit&&e.onExit(H),it=!0),l(H,new Ld(H))}if(e.preInit)for(typeof e.preInit==\"function\"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.pop()();zd();var Cp;s&&(Cp={uncaughtException:process.listeners(\"uncaughtException\").filter(function(H){return!s.uncaughtException.indexOf(H)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(H){return!s.unhandledRejection.indexOf(H)>-1})});var Ip;if(typeof t!=\"undefined\")Ip=t;else if(typeof WasmBackendModuleThreadedSimd!=\"undefined\")Ip=WasmBackendModuleThreadedSimd;else throw new Error(\"Could not find wasm module in post.js\");if(Cp){var FC=Ip._dispose;Ip._dispose=function(){FC(),Cp.uncaughtException.forEach(function(H){process.removeListener(\"uncaughtException\",H)}),Cp.unhandledRejection.forEach(function(H){process.removeListener(\"unhandledRejection\",H)})}}return t.ready}})();typeof a0==\"object\"&&typeof t1==\"object\"?t1.exports=QT:typeof define==\"function\"&&define.amd?define([],function(){return QT}):typeof a0==\"object\"&&(a0.WasmBackendModule=QT)});var ea=class{constructor(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}get(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)}set(t,e){this.dataIdsCount++,this.data.set(t,e)}has(t){return this.data.has(t)}delete(t){return this.dataIdsCount--,this.data.delete(t)}numDataIds(){return this.dataIdsCount}},Xo=class{refCount(t){return Kn(\"refCount\")}incRef(t){return Kn(\"incRef\")}timerAvailable(){return!0}time(t){return Kn(\"time\")}read(t){return Kn(\"read\")}readSync(t){return Kn(\"readSync\")}readToGPU(t,e){return Kn(\"readToGPU\")}numDataIds(){return Kn(\"numDataIds\")}disposeData(t,e){return Kn(\"disposeData\")}write(t,e,n){return Kn(\"write\")}move(t,e,n,o,s){return Kn(\"move\")}memory(){return Kn(\"memory\")}floatPrecision(){return Kn(\"floatPrecision\")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Kn(\"dispose\")}};function Kn(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 k1(r){let t=r.length,e=0;for(;t>0;)e=Math.random()*t|0,t--,yx(r,t,e)}function RU(r,t){if(r.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${t.length}`);let e=r.length,n=0;for(;e>0;)n=Math.random()*e|0,e--,yx(r,e,n),yx(t,e,n)}function Tp(r,t,e){return Math.max(r,Math.min(t,e))}function OU(r){return r%2===0?r:r+1}function yx(r,t,e){let n=r[t];r[t]=r[e],r[e]=n}function MU(r){let t=0;for(let e=0;ee+` Shapes ${r} and ${t} must match`)}function jn(r){A(r!=null,()=>\"The input to the tensor constructor must be a non-null value.\")}function Yo(r,t=[],e=!1){if(t==null&&(t=[]),Array.isArray(r)||yr(r)&&!e)for(let n=0;n0,e){return new Promise((n,o)=>{let s=0,i=()=>{if(r()){n();return}s++;let a=t(s);if(e!=null&&s>=e){o();return}setTimeout(i,a)};i()})}function UU(r,t){let e=1,n=-1;for(let s=0;s=0)e*=r[s];else if(r[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(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(n===-1){if(t>0&&t!==e)throw Error(`Size(${t}) must match the product of shape ${r}`);return r}if(e===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(t%e!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${e}`);let o=r.slice();return o[n]=t/e,o}function mr(r,t){let e=t.length;return r=r==null?t.map((n,o)=>o):[].concat(r),A(r.every(n=>n>=-e&&n`All values in axis param must be in range [-${e}, ${e}) but got axis ${r}`),A(r.every(n=>ra(n)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(n=>n<0?e+n:n)}function VC(r,t){let e=[],n=[],o=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||o?null:mr(t,r).sort(),i=0;for(let a=0;aa)&&r[a]===1&&(e.push(r[a]),n.push(a)),s[i]<=a&&i++}r[a]!==1&&(e.push(r[a]),n.push(a))}return{newShape:e,keptDims:n}}function GC(r,t){let e=null;if(r==null||r===\"float32\")e=new Float32Array(t);else if(r===\"int32\")e=new Int32Array(t);else if(r===\"bool\")e=new Uint8Array(t);else throw new Error(`Unknown data type ${r}`);return e}function WC(r,t){let e=null;if(r==null||r===\"float32\")e=new Float32Array(t);else if(r===\"int32\")e=new Int32Array(t);else if(r===\"bool\")e=new Uint8Array(t);else if(r===\"string\")e=new Array(t);else throw new Error(`Unknown data type ${r}`);return e}function UC(r,t){for(let e=0;et+=e.length),t}function Zo(r){return typeof r==\"string\"||r instanceof String}function N1(r){return typeof r==\"boolean\"}function T1(r){return typeof r==\"number\"}function _p(r){return Array.isArray(r)?_p(r[0]):r instanceof Float32Array?\"float32\":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?\"int32\":T1(r)?\"float32\":Zo(r)?\"string\":N1(r)?\"bool\":\"float32\"}function yi(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Ep(r,t){for(let e=t;e=0;--n)e[n]=e[n+1]*r[n+1];return e}function _1(r,t,e,n=!1){let o=new Array;if(t.length===1){let s=t[0]*(n?2:1);for(let i=0;iu*l)*(n?2:1);for(let u=0;uo*s)*(e?2:1);if(n===0)return[];if(n!==t.length)throw new Error(`[${r}] does not match the input size ${t.length}${e?\" for a complex tensor\":\"\"}.`);return _1(0,r,t,e)}function Gd(r,t){let e=Ap(r,t);for(let n=0;nn*o,1);if(t==null||t===\"float32\")return Pu(r,new Float32Array(e));if(t===\"int32\")return Pu(r,new Int32Array(e));if(t===\"bool\")return Pu(r,new Uint8Array(e));throw new Error(`Unknown data type ${t}`)}function Wd(r){r.forEach(t=>{A(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function KU(r,t,e){if(t===0)return 0;if(t===1)return r[0];let n=r[r.length-1];for(let o=0;o{let[o,s]=n.split(\":\");this.urlFlags[o]=JU(o,s)})}};function YU(r){let t={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(e,...n)=>(ZU(t,n[0],n[1]),n.join(\"=\"))),t}function ZU(r,t,e){r[decodeURIComponent(t)]=decodeURIComponent(e||\"\")}function JU(r,t){if(t=t.toLowerCase(),t===\"true\"||t===\"false\")return t===\"true\";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${r}.`)}function G(){return KC}var KC=null;function A1(r){KC=r}var jC;function XC(){if(jC==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\");jC=r}return jC}function QU(){let r=XC();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function qd(r,t){let e=QU();if(e.has(r))return e.get(r);{let n=t();return e.set(r,n),e.get(r)}}var wi=\"Abs\",na=\"Acos\",oa=\"Acosh\",Xn=\"Add\",Jo=\"AddN\",sa=\"All\",ia=\"Any\",Qo=\"ArgMax\",Rl=\"ArgMin\",aa=\"Asin\",la=\"Asinh\",ua=\"Atan\",ca=\"Atanh\",pa=\"Atan2\",ts=\"AvgPool\",$p=\"AvgPoolGrad\",Ol=\"AvgPool3D\",Dp=\"AvgPool3DGrad\",es=\"BatchMatMul\",vi=\"BatchToSpaceND\",Fp=\"Bincount\",$1=\"BroadcastTo\",Rp=\"BroadcastArgs\",ao=\"Cast\",rs=\"Ceil\",lo=\"ClipByValue\",Op=\"Complex\",Ml=\"ComplexAbs\",Ci=\"Concat\",ns=\"Conv2D\",Mp=\"Conv2DBackpropFilter\",os=\"Conv2DBackpropInput\",Pl=\"Conv3D\",Pp=\"Conv3DBackpropFilterV2\",Lp=\"Conv3DBackpropInputV2\",ss=\"Cos\",is=\"Cosh\",ma=\"Cumprod\",as=\"Cumsum\",fa=\"CropAndResize\",zp=\"DenseBincount\",da=\"DepthToSpace\",ls=\"DepthwiseConv2dNative\",Bp=\"DepthwiseConv2dNativeBackpropFilter\",Vp=\"DepthwiseConv2dNativeBackpropInput\",Gp=\"Diag\",Ll=\"Dilation2D\",Kd=\"Dilation2DBackpropInput\",jd=\"Dilation2DBackpropFilter\",us=\"RealDiv\",Wp=\"Einsum\",cs=\"Elu\",Up=\"EluGrad\",ha=\"Erf\",ga=\"Equal\",ps=\"Exp\",Ii=\"ExpandDims\",xa=\"Expm1\",Hp=\"FFT\",zl=\"Fill\",ya=\"FlipLeftRight\",ms=\"Floor\",fs=\"FloorDiv\",ds=\"FusedBatchNorm\",Si=\"GatherV2\",ba=\"GatherNd\",wa=\"Greater\",hs=\"GreaterEqual\",uo=\"Identity\",qp=\"IFFT\",Kp=\"Imag\",va=\"IsFinite\",Ca=\"IsInf\",Ia=\"IsNan\",gs=\"LeakyRelu\",Sa=\"Less\",ka=\"LessEqual\",jp=\"LinSpace\",xs=\"Log\",Na=\"Log1p\",Ta=\"LogicalAnd\",zu=\"LogicalNot\",Bu=\"LogicalOr\",D1=\"LogSoftmax\",Xat=\"LowerBound\",Bl=\"LRN\",Xp=\"LRNGrad\",ys=\"Max\",bs=\"Maximum\",ws=\"MaxPool\",Yp=\"MaxPoolGrad\",Vl=\"MaxPool3D\",Zp=\"MaxPool3DGrad\",Jp=\"MaxPoolWithArgmax\",vs=\"Mean\",Cs=\"Min\",Is=\"Minimum\",Ss=\"MirrorPad\",_a=\"Mod\",Qp=\"Multinomial\",ks=\"Multiply\",ki=\"Neg\",Ea=\"NotEqual\",Aa=\"NonMaxSuppressionV3\",$a=\"NonMaxSuppressionV4\",Da=\"NonMaxSuppressionV5\",Ni=\"OnesLike\",Ns=\"OneHot\",Ti=\"Pack\",Ts=\"PadV2\",Yat=\"Pool\",_s=\"Pow\",Es=\"Prelu\",As=\"Prod\",Gl=\"Range\",tm=\"Real\",Fa=\"Reciprocal\",$s=\"Relu\",_i=\"Reshape\",Wl=\"ResizeNearestNeighbor\",em=\"ResizeNearestNeighborGrad\",Ds=\"ResizeBilinear\",rm=\"ResizeBilinearGrad\",Fs=\"Relu6\",Rs=\"Reverse\",Os=\"Round\",Ms=\"Rsqrt\",Ra=\"ScatterNd\",nm=\"SearchSorted\",Ei=\"Select\",Oa=\"Selu\",Ai=\"Slice\",Ps=\"Sin\",Ma=\"Sinh\",Pa=\"Sign\",Ls=\"Sigmoid\",La=\"Softplus\",zs=\"Sqrt\",Bs=\"Sum\",$i=\"SpaceToBatchND\",Di=\"SplitV\",Vs=\"Softmax\",Ul=\"SparseFillEmptyRows\",za=\"SparseReshape\",Hl=\"SparseSegmentMean\",ql=\"SparseSegmentSum\",om=\"SparseToDense\",Gs=\"SquaredDifference\",Kl=\"Square\",Ba=\"StridedSlice\",sm=\"StringNGrams\",im=\"StringSplit\",am=\"StringToHashBucketFast\",Ws=\"Sub\",Us=\"Tan\",Hs=\"Tanh\",Yn=\"Tile\",Va=\"TopK\",Ga=\"Transform\",Zn=\"Transpose\",lm=\"Unique\",Fi=\"Unpack\",jl=\"UnsortedSegmentSum\",Zat=\"UpperBound\",Ri=\"ZerosLike\",co=\"Step\",Xd=\"FromPixels\",Wa=\"RotateWithOffset\",Oi=\"_FusedMatMul\",Mi=\"FusedConv2D\",Pi=\"FusedDepthwiseConv2D\";function Li(...r){G().getBool(\"IS_TEST\")||G().getBool(\"PROD\")||console.warn(...r)}function t4(...r){G().getBool(\"IS_TEST\")||G().getBool(\"PROD\")||console.log(...r)}var um=qd(\"kernelRegistry\",()=>new Map),Yd=qd(\"gradRegistry\",()=>new Map);function Zd(r,t){let e=ZC(r,t);return um.get(e)}function YC(r){return Yd.get(r)}function wx(r){let t=um.entries(),e=[];for(;;){let{done:n,value:o}=t.next();if(n)break;let[s,i]=o,[a]=s.split(\"_\");a===r&&e.push(i)}return e}function Vu(r){let{kernelName:t,backendName:e}=r,n=ZC(t,e);um.has(n)&&Li(`The kernel '${t}' for backend '${e}' is already registered`),um.set(n,r)}function R1(r){let{kernelName:t}=r;Yd.has(t)&&G().getBool(\"DEBUG\")&&Li(`Overriding the gradient for '${t}'`),Yd.set(t,r)}function rlt(r,t){let e=ZC(r,t);if(!um.has(e))throw new Error(`The kernel '${r}' for backend '${t}' is not registered`);um.delete(e)}function nlt(r){if(!Yd.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);Yd.delete(r)}function olt(r,t){wx(r).forEach(n=>{let o=Object.assign({},n,{backendName:t});Vu(o)})}function ZC(r,t){return`${t}_${r}`}var x={};Zt(x,{arraysEqual:()=>Pn,assert:()=>A,assertNonNegativeIntegerDimensions:()=>Wd,assertNonNull:()=>jn,assertShapesMatch:()=>Me,bytesFromStringArray:()=>qC,bytesPerElement:()=>bx,checkConversionForErrors:()=>UC,clamp:()=>Tp,computeStrides:()=>bi,createScalarValue:()=>a4,createShuffledIndices:()=>GU,decodeString:()=>fm,distSquared:()=>LU,encodeString:()=>Yl,fetch:()=>u4,fingerPrint64:()=>i4,flatten:()=>Yo,getArrayFromDType:()=>WC,getTypedArrayFromDType:()=>GC,hasEncodingLoss:()=>HU,hexToLong:()=>Jd,indexToLoc:()=>jU,inferDtype:()=>_p,inferFromImplicitShape:()=>UU,isBoolean:()=>N1,isFunction:()=>yi,isInt:()=>ra,isNumber:()=>T1,isPromise:()=>Ud,isScalarShape:()=>zU,isString:()=>Zo,isTypedArray:()=>yr,isValidDtype:()=>HC,locToIndex:()=>KU,makeOnesTypedArray:()=>Gd,makeZerosNestedTypedArray:()=>qU,makeZerosTypedArray:()=>Ap,nearestDivisor:()=>Ep,nearestLargerEven:()=>OU,now:()=>qu,parseAxisParam:()=>mr,randUniform:()=>PU,repeatedTry:()=>WU,rightPad:()=>Lu,shuffle:()=>k1,shuffleCombo:()=>RU,sizeFromShape:()=>Qt,sizeToSquarishShape:()=>VU,squeezeShape:()=>VC,sum:()=>MU,swap:()=>yx,tanh:()=>BU,toNestedArray:()=>Pu,toTypedArray:()=>mm});var eI=Mu(H1());var Hu=eI.default||eI;function Jd(r){return Hu.fromString(r,!0,16)}var K1=Jd(\"c3a5c85c97cb3127\"),Uu=Jd(\"b492b66fbe98f273\"),un=Jd(\"9ae16a3b2f90404f\");function tI(r){return r.xor(r.shru(47))}function j1(r,t,e){let n=r.slice(t,t+e);return Hu.fromBytes(Array.from(n),!0,!0)}function Be(r,t){return j1(r,t,8)}function q1(r,t){return j1(r,t,4)}function Er(r,t){return t===0?r:r.shru(t).or(r.shl(64-t))}function Xl(r,t,e=Jd(\"9ddfea08eb382d69\")){let n=r.xor(t).mul(e);n=n.xor(n.shru(47));let o=t.xor(n).mul(e);return o=o.xor(o.shru(47)),o=o.mul(e),o}function r4(r,t,e,n,o,s){o=o.add(r),s=Er(s.add(o).add(n),21);let i=o;return o=o.add(t),o=o.add(e),s=s.add(Er(o,44)),[o.add(n),s.add(i)]}function Cx(r,t,e,n){return r4(Be(r,t),Be(r,t+8),Be(r,t+16),Be(r,t+24),e,n)}function n4(r,t=r.length){if(t>=8){let e=un.add(t*2),n=Be(r,0).add(un),o=Be(r,t-8),s=Er(o,37).mul(e).add(n),i=Er(n,25).add(o).mul(e);return Xl(s,i,e)}if(t>=4){let e=un.add(t*2),n=q1(r,0);return Xl(n.shl(3).add(t),q1(r,t-4),e)}if(t>0){let e=r[0],n=r[t>>1],o=r[t-1],s=e+(n<<8),i=t+(o<<2);return tI(un.mul(s).xor(K1.mul(i))).mul(un)}return un}function o4(r,t=r.length){let e=un.add(t*2),n=Be(r,0).mul(Uu),o=Be(r,8),s=Be(r,t-8).mul(e),i=Be(r,t-16).mul(un);return Xl(Er(n.add(o),43).add(Er(s,30)).add(i),n.add(Er(o.add(un),18)).add(s),e)}function s4(r,t=r.length){let e=un.add(t*2),n=Be(r,0).mul(un),o=Be(r,8),s=Be(r,t-8).mul(e),i=Be(r,t-16).mul(un),a=Er(n.add(o),43).add(Er(s,30)).add(i),u=Xl(a,n.add(Er(o.add(un),18)).add(s),e),l=Be(r,16).mul(e),c=Be(r,24),p=a.add(Be(r,t-32)).mul(e),m=u.add(Be(r,t-24)).mul(e);return Xl(Er(l.add(c),43).add(Er(p,30)).add(m),l.add(Er(c.add(n),18)).add(p),e)}function i4(r,t=r.length){let e=Hu.fromNumber(81,!0);if(t<=32)return t<=16?n4(r,t):o4(r,t);if(t<=64)return s4(r,t);let n=e,o=e.mul(Uu).add(113),s=tI(o.mul(un).add(113)).mul(un),i=[Hu.UZERO,Hu.UZERO],a=[Hu.UZERO,Hu.UZERO];n=n.mul(un).add(Be(r,0));let u=0,l=(t-1>>6)*64,c=l+(t-1&63)-63;do n=Er(n.add(o).add(i[0]).add(Be(r,u+8)),37).mul(Uu),o=Er(o.add(i[1]).add(Be(r,u+48)),42).mul(Uu),n=n.xor(a[1]),o=o.add(i[0]).add(Be(r,u+40)),s=Er(s.add(a[0]),33).mul(Uu),i=Cx(r,u,i[1].mul(Uu),n.add(a[0])),a=Cx(r,u+32,s.add(a[1]),o.add(Be(r,u+16))),[s,n]=[n,s],u+=64;while(u!==l);let p=Uu.add(s.and(255).shl(1));return u=c,a[0]=a[0].add(t-1&63),i[0]=i[0].add(a[0]),a[0]=a[0].add(i[0]),n=Er(n.add(o).add(i[0]).add(Be(r,u+8)),37).mul(p),o=Er(o.add(i[1]).add(Be(r,u+48)),42).mul(p),n=n.xor(a[1].mul(9)),o=o.add(i[0].mul(9).add(Be(r,u+40))),s=Er(s.add(a[0]),33).mul(p),i=Cx(r,u,i[1].mul(p),n.add(a[0])),a=Cx(r,u+32,s.add(a[1]),o.add(Be(r,u+16))),[s,n]=[n,s],Xl(Xl(i[0],a[0],p).add(tI(o).mul(K1)).add(s),Xl(i[1],a[1],p).add(n),p)}function a4(r,t){return t===\"string\"?Yl(r):mm([r],t)}function l4(r,t){return r instanceof Float32Array&&t===\"float32\"||r instanceof Int32Array&&t===\"int32\"||r instanceof Uint8Array&&t===\"bool\"}function mm(r,t){if(t===\"string\")throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(r)&&(r=Yo(r)),G().getBool(\"DEBUG\")&&UC(r,t),l4(r,t))return r;if(t==null||t===\"float32\"||t===\"complex64\")return new Float32Array(r);if(t===\"int32\")return new Int32Array(r);if(t===\"bool\"){let e=new Uint8Array(r.length);for(let n=0;n{o=n()},i,a=qu();if(this.backendTimer.timerAvailable())i=this.backendTimer.time(s);else{s();for(let l of o)l.dataSync();i=Promise.resolve({kernelMs:qu()-a})}if(G().getBool(\"CHECK_COMPUTATION_FOR_ERRORS\"))for(let l=0;l{c4(p,c.dtype,t)})}return{kernelName:t,outputs:o,inputs:e,timeMs:i.then(l=>l.kernelMs),extraInfo:i.then(l=>l.getExtraProfileInfo!=null?l.getExtraProfileInfo():\"\")}}logKernelProfile(t){let{kernelName:e,outputs:n,timeMs:o,inputs:s,extraInfo:i}=t;n.forEach(a=>{Promise.all([a.data(),o,i]).then(u=>{this.logger.logKernelProfile(e,a,u[0],u[1],s,u[2])})})}};function c4(r,t,e){if(t!==\"float32\")return!1;for(let n=0;n0?h:\"\"} `}}console.log(`%c${u}\t%c${a}\t%c${l}D ${p}\t%c${c}\t%c${m}\t%c${i}`,\"font-weight:bold\",\"color:red\",\"color:blue\",\"color: orange\",\"color: green\",\"color: steelblue\")}};function X1(r,t,e){let n={},o={};for(let u=0;un[h.id]=!0),f=!0,o[l.id]=!0;break}if(f)break}}let s={};s[e.id]=!0;let i={};for(let u=r.length-1;u>=0;u--){let l=r[u],c=l.inputs;for(let p=0;p=0;o--){let s=t[o],i=[];if(s.outputs.forEach(u=>{let l=r[u.id];l!=null?i.push(l):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let a=s.gradient(i);for(let u in s.inputs){if(!(u in a))throw new Error(`Cannot backprop through input ${u}. Available gradients found: ${Object.keys(a)}.`);let l=e(()=>a[u]());if(l.dtype!==\"float32\")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${u} must have 'float32' dtype, but has '${l.dtype}'`);let c=s.inputs[u];if(!Pn(l.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${u}' has shape '${l.shape}', which does not match the shape of the input '${c.shape}'`);if(r[c.id]==null)r[c.id]=l;else{let p=r[c.id];r[c.id]=n(p,l),p.dispose()}}}}var Z1=20,Qd=3,nI=7;function J1(r,t,e,n){let o=bi(t),s=p4(r,t,e,o),i=t.length,a=Sx(r,t,e,o,s),u=[\"Tensor\"];return n&&(u.push(` dtype: ${e}`),u.push(` rank: ${i}`),u.push(` shape: [${t}]`),u.push(\" values:\")),u.push(a.map(l=>\" \"+l).join(`\n`)),u.join(`\n`)}function p4(r,t,e,n){let o=Qt(t),s=n[n.length-1],i=new Array(s).fill(0),a=t.length,u=e===\"complex64\"?eh(r):r;if(a>1)for(let l=0;lZ1){let g=Qd*i,y=Array.from(r.slice(0,g)),b=Array.from(r.slice((a-Qd)*i,a*i));return e===\"complex64\"&&(y=eh(y),b=eh(b)),[\"[\"+y.map((w,v)=>th(w,o[v],e)).join(\", \")+\", ..., \"+b.map((w,v)=>th(w,o[a-Qd+v],e)).join(\", \")+\"]\"]}let h=e===\"complex64\"?eh(r):Array.from(r);return[\"[\"+h.map((g,y)=>th(g,o[y],e)).join(\", \")+\"]\"]}let l=t.slice(1),c=n.slice(1),p=n[0]*i,m=[];if(a>Z1){for(let h=0;h`Length of values '${o}' does not match the size inferred by the shape '${this.size}'.`)}if(e===\"complex64\")throw new Error(\"complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).\");this.values=n||WC(e,this.size),this.strides=bi(t)}set(t,...e){e.length===0&&(e=[0]),A(e.length===this.rank,()=>`The number of provided coordinates (${e.length}) must match the rank (${this.rank})`);let n=this.locToIndex(e);this.values[n]=t}get(...t){t.length===0&&(t=[0]);let e=0;for(let o of t){if(o<0||o>=this.shape[e]){let s=`Requested out of range element at ${t}. Buffer shape=${this.shape}`;throw new Error(s)}e++}let n=t[t.length-1];for(let o=0;ofm(n))}catch(n){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}}return t}dataToGPU(t){return this.throwIfDisposed(),Ks().readToGPU(this.dataId,t)}dataSync(){this.throwIfDisposed();let t=Ks().readSync(this.dataId);if(this.dtype===\"string\")try{return t.map(e=>fm(e))}catch(e){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}return t}async bytes(){this.throwIfDisposed();let t=await Ks().read(this.dataId);return this.dtype===\"string\"?t:new Uint8Array(t.buffer)}dispose(){this.isDisposed||(Ks().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error(\"Tensor is disposed.\")}print(t=!1){return dm.print(this,t)}clone(){return this.throwIfDisposed(),dm.clone(this)}toString(t=!1){let e=this.dataSync();return J1(e,this.shape,this.dtype,t)}cast(t){return this.throwIfDisposed(),dm.cast(this,t)}variable(t=!0,e,n){return this.throwIfDisposed(),Ks().makeVariable(this,t,e,n)}};Object.defineProperty(zt,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function L(){return qd(\"Tensor\",()=>zt)}L();var Ua=class extends zt{constructor(t,e,n,o){super(t.shape,t.dtype,t.dataId,o),this.trainable=e,this.name=n}assign(t){if(t.dtype!==this.dtype)throw new Error(`dtype of the new value (${t.dtype}) and previous value (${this.dtype}) must match`);if(!Pn(t.shape,this.shape))throw new Error(`shape of the new value (${t.shape}) and previous value (${this.shape}) must match`);Ks().disposeTensor(this),this.dataId=t.dataId,Ks().incRef(this,null)}dispose(){Ks().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(Ua,Symbol.hasInstance,{value:r=>r instanceof zt&&r.assign!=null&&r.assign instanceof Function});var ho={};Zt(ho,{assertTypesMatch:()=>uI,getTensorsInContainer:()=>rh,isTensorInList:()=>d4,makeTypesMatch:()=>Xt});var oI;(function(r){r.R0=\"R0\",r.R1=\"R1\",r.R2=\"R2\",r.R3=\"R3\",r.R4=\"R4\",r.R5=\"R5\",r.R6=\"R6\"})(oI||(oI={}));var sI;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"int32\",r.complex64=\"complex64\"})(sI||(sI={}));var iI;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"bool\",r.complex64=\"complex64\"})(iI||(iI={}));var aI;(function(r){r.float32=\"float32\",r.int32=\"float32\",r.bool=\"float32\",r.complex64=\"complex64\"})(aI||(aI={}));var lI;(function(r){r.float32=\"complex64\",r.int32=\"complex64\",r.bool=\"complex64\",r.complex64=\"complex64\"})(lI||(lI={}));var f4={float32:aI,int32:sI,bool:iI,complex64:lI};function ar(r,t){if(r===\"string\"||t===\"string\"){if(r===\"string\"&&t===\"string\")return\"string\";throw new Error(`Can not upcast ${r} with ${t}`)}return f4[r][t]}function Ku(r){return ar(r,\"int32\")}function Xt(r,t){if(r.dtype===t.dtype)return[r,t];let e=ar(r.dtype,t.dtype);return[r.cast(e),t.cast(e)]}function uI(r,t){A(r.dtype===t.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${t.dtype}) input must match`)}function d4(r,t){return t.some(e=>e.id===r.id)}function rh(r){let t=[];return n_(r,t,new Set),t}function n_(r,t,e){if(r==null)return;if(r instanceof zt){t.push(r);return}if(!h4(r))return;let n=r;for(let o in n){let s=n[o];e.has(s)||(e.add(s),n_(s,t,e))}}function h4(r){return Array.isArray(r)||typeof r==\"object\"}function cI(r){return r.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(t=>t.name)))}}}dispose(){for(let t in this.registeredVariables)this.registeredVariables[t].dispose()}},Zl=class{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 e=0;e{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){wx(t).forEach(n=>{n.disposeFunc!=null&&n.disposeFunc(this.registry[t])})}initializeBackend(t){let e=this.registryFactory[t];if(e==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let n=e.factory();if(n&&!(n instanceof Xo)&&typeof n.then==\"function\"){let o=++this.pendingBackendInitId,s=n.then(i=>o(othis.registryFactory[e].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let e=0;ethis.startScope(n),()=>this.endScope(o),()=>(o=e(),o instanceof Promise&&console.error(\"Cannot return a Promise inside of tidy.\"),o))}scopedRun(t,e,n){t();try{let o=n();return e(),o}catch(o){throw e(),o}}nextTensorId(){return Zl.nextTensorId++}nextVariableId(){return Zl.nextVariableId++}clone(t){let e=E.runKernel(uo,{x:t}),n={x:t},o=i=>({x:()=>{let a=\"float32\",u={x:i},l={dtype:a};return E.runKernel(ao,u,l)}}),s=[];return this.addTapeNode(this.state.activeScope.name,n,[e],o,s,{}),e}runKernel(t,e,n){if(this.backendName==null&&this.backend,!(Zd(t,this.backendName)!=null))throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:e,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool(\"IS_TEST\")}checkKernelForMemLeak(t,e,n){let o=this.backend.numDataIds(),s=0;n.forEach(u=>{s+=u.dtype===\"complex64\"?3:1});let i=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],a=o-e-s-i;if(a>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${a} data ids) after running '${t}'`)}runKernelFunc(t){let e,n=[],o=this.isTapeOn(),s=this.state.numBytes,i=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let a;this.backendName==null&&this.backend;let u,l=cI(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:\"\";if(cI(t)){let{kernelName:d,inputs:h,attrs:g}=t;this.backendName==null&&this.backend;let y=Zd(d,this.backendName);A(y!=null,()=>`Cannot find registered kernel '${d}' for backend '${this.backendName}'`),a=()=>{let b=this.backend.numDataIds();u=y.kernelFunc({inputs:h,attrs:g,backend:this.backend});let w=Array.isArray(u)?u:[u];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(d,b,w);let v=w.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(o){let k=this.getTensorsForGradient(d,h,v);n=this.saveTensorsForBackwardMode(k)}return v}}else{let{forwardFunc:d}=t,h=g=>{!o||(n=g.map(y=>this.keep(this.clone(y))))};a=()=>{let g=this.backend.numDataIds();u=this.tidy(()=>d(this.backend,h));let y=Array.isArray(u)?u:[u];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,g,y),y}}let{inputs:c,attrs:p}=t,m=cI(t)?null:t.backwardsFunc,f;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool(\"DEBUG\")&&!this.state.profiling?e=a():(f=this.profiler.profileKernel(l,c,()=>a()),this.ENV.getBool(\"DEBUG\")&&this.profiler.logKernelProfile(f),e=f.outputs)}),o&&this.addTapeNode(l,c,e,m,n,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-i,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(d=>c[d]!=null?c[d].shape:null),outputShapes:e.map(d=>d.shape),kernelTimeMs:f.timeMs,extraInfo:f.extraInfo}),Array.isArray(u)?e:e[0]}saveTensorsForBackwardMode(t){return t.map(n=>this.keep(this.clone(n)))}getTensorsForGradient(t,e,n){let o=YC(t);if(o!=null){let s=o.inputsToSave||[],i=o.outputsToSave||[],a;o.saveAllInputs?(A(Array.isArray(e),()=>\"saveAllInputs is true, expected inputs to be an array.\"),a=Object.keys(e).map(l=>e[l])):a=s.map(l=>e[l]);let u=n.filter((l,c)=>i[c]);return a.concat(u)}return[]}makeTensor(t,e,n,o){if(t==null)throw new Error(\"Values passed to engine.makeTensor() are null\");n=n||\"float32\",o=o||this.backend;let s=t;n===\"string\"&&Zo(t[0])&&(s=t.map(u=>Yl(u)));let i=o.write(s,e,n),a=new zt(e,n,i,this.nextTensorId());if(this.trackTensor(a,o),n===\"string\"){let u=this.state.tensorInfo.get(i),l=qC(s);this.state.numBytes+=l-u.bytes,u.bytes=l}return a}makeTensorFromDataId(t,e,n,o){n=n||\"float32\";let s={dataId:t,shape:e,dtype:n};return this.makeTensorFromTensorInfo(s,o)}makeTensorFromTensorInfo(t,e){let{dataId:n,shape:o,dtype:s}=t,i=new zt(o,s,n,this.nextTensorId());return this.trackTensor(i,e),i}makeVariable(t,e=!0,n,o){n=n||this.nextVariableId().toString(),o!=null&&o!==t.dtype&&(t=t.cast(o));let s=new Ua(t,e,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,e){this.state.numTensors++,t.dtype===\"string\"&&this.state.numStringTensors++;let n=0;t.dtype!==\"complex64\"&&t.dtype!==\"string\"&&(n=t.size*bx(t.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:n})),t instanceof Ua||this.track(t)}incRef(t,e){this.trackTensor(t,e),this.backend.incRef(t.dataId)}removeDataId(t,e){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===e&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let e=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype===\"string\"&&(this.state.numStringTensors--,this.state.numBytes-=e.bytes),t.dtype!==\"complex64\"&&t.dtype!==\"string\"){let n=t.size*bx(t.dtype);this.state.numBytes-=n}e.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,e.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let e=this.state.registeredVariables[t];this.disposeVariable(e)}}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 e=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(o=>o.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let o of this.state.activeProfile.kernels)o.kernelTimeMs=await o.kernelTimeMs,o.extraInfo=await o.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(t,e,n,o,s,i){let a={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:n,saved:s},u=YC(t);u!=null&&(o=u.gradFunc),o!=null&&(a.gradient=l=>(l=l.map((c,p)=>{if(c==null){let m=n[p],f=Ap(m.size,m.dtype);return this.makeTensor(f,m.shape,m.dtype)}return c}),o(l.length>1?l:l[0],s,i))),this.state.activeTape.push(a)}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 e={track:[],name:\"unnamed scope\",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e}endScope(t){let e=rh(t),n=new Set(e.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===o.id&&this.track(s)})}gradients(t,e,n,o=!1){if(A(e.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));A(s instanceof zt,()=>\"The result y returned by f() must be a tensor.\");let i=X1(this.state.activeTape,e,s);if(!o&&i.length===0&&e.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 a={};a[s.id]=n==null?g4(s.shape):n,Y1(a,i,l=>this.tidy(l),x4);let u=e.map(l=>a[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let c of l.saved)c.dispose()}),this.state.activeTape=null),{value:s,grads:u}})}customGrad(t){return A(yi(t),()=>\"The f passed in customGrad(f) must be a function.\"),(...e)=>{A(e.every(a=>a instanceof zt),()=>\"The args passed in customGrad(f)(x1, x2,...) must all be tensors\");let n,o={};e.forEach((a,u)=>{o[u]=a});let s=(a,u)=>(n=t(...e,u),A(n.value instanceof zt,()=>\"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor\"),A(yi(n.gradFunc),()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function.\"),n.value),i=(a,u)=>{let l=n.gradFunc(a,u),c=Array.isArray(l)?l:[l];A(c.length===e.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(...).\"),A(c.every(m=>m instanceof zt),()=>\"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 p={};return c.forEach((m,f)=>{p[f]=()=>m}),p};return this.runKernelFunc({forwardFunc:s,backwardsFunc:i,inputs:o})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,e){return this.state.tensorInfo.get(t).backend.readToGPU(t,e)}async time(t){let e=qu(),n=await this.backend.time(t);return n.wallMs=qu()-e,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}};Zl.nextTensorId=0;Zl.nextVariableId=0;function g4(r){let t=Gd(Qt(r),\"float32\");return E.makeTensor(t,r,\"float32\")}function pI(){let r=XC();if(r._tfengine==null){let t=new Hd(r);r._tfengine=new Zl(t)}return A1(r._tfengine.ENV),t_(()=>r._tfengine),r._tfengine}var E=pI();function x4(r,t){let e={a:r,b:t};return E.runKernel(Xn,e)}var Jl={};Zt(Jl,{isBrowser:()=>fI,isMobile:()=>w4,mockIsMobile:()=>b4});function y4(){return typeof navigator!=\"undefined\"&&navigator!=null}var mI;function b4(r){mI=r}function w4(r){if(mI!==void 0)return mI;if(r||y4()){if(r||(r=navigator),r.product===\"ReactNative\")return!0;let t=r.userAgent||r.vendor||(typeof window!=\"undefined\"?window.opera:\"\");if(!t){let e=r;return e.userAgentData&&e.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 fI(){return typeof window!=\"undefined\"&&window.document!=null||typeof WorkerGlobalScope!=\"undefined\"}var go=G();go.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.\")});go.registerFlag(\"IS_BROWSER\",()=>fI());go.registerFlag(\"IS_NODE\",()=>typeof process!=\"undefined\"&&typeof process.versions!=\"undefined\"&&typeof process.versions.node!=\"undefined\");go.registerFlag(\"IS_CHROME\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));go.registerFlag(\"PROD\",()=>!1);go.registerFlag(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\",()=>go.getBool(\"DEBUG\"));go.registerFlag(\"DEPRECATION_WARNINGS_ENABLED\",()=>!0);go.registerFlag(\"IS_TEST\",()=>!1);go.registerFlag(\"CHECK_COMPUTATION_FOR_ERRORS\",()=>!0);go.registerFlag(\"WRAP_TO_IMAGEBITMAP\",()=>!1);go.registerFlag(\"ENGINE_COMPILE_ONLY\",()=>!1);function Or(r,t){let e=r;if(yr(r))return t===\"string\"?[]:[r.length];if(!Array.isArray(r))return[];let n=[];for(;Array.isArray(e)||yr(e)&&t!==\"string\";)n.push(e.length),e=e[0];return Array.isArray(r)&&G().getBool(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\")&&s_(r,n,[]),n}function s_(r,t,e){if(e=e||[],!Array.isArray(r)&&!yr(r)){A(t.length===0,()=>`Element arr[${e.join(\"][\")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}A(t.length>0,()=>`Element arr[${e.join(\"][\")}] should be a primitive, but is an array of ${r.length} elements`),A(r.length===t[0],()=>`Element arr[${e.join(\"][\")}] should have ${t[0]} elements, but has ${r.length} elements`);let n=t.slice(1);for(let o=0;o=0&&(o=n),o_(n,o,t,e),r==null||!yr(r)&&!Array.isArray(r)&&typeof r!=\"number\"&&typeof r!=\"boolean\"&&typeof r!=\"string\"){let u=r==null?\"null\":r.constructor.name;throw new Error(`Argument '${t}' passed to '${e}' must be a Tensor or TensorLike, but got '${u}'`)}let s=Or(r,o);!yr(r)&&!Array.isArray(r)&&(r=[r]);let a=o!==\"string\"?mm(r,o):Yo(r,[],!0);return E.makeTensor(a,s,o)}function Ha(r,t,e,n=\"numeric\"){if(!Array.isArray(r))throw new Error(`Argument ${t} passed to ${e} must be a \\`Tensor[]\\` or \\`TensorLike[]\\``);return r.map((s,i)=>C(s,`${t}[${i}]`,e,n))}var i_=\"__op\";function N(r){let t=Object.keys(r);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 e=t[0],n=r[e];e.endsWith(\"_\")&&(e=e.substring(0,e.length-1)),e=e+i_;let o=(...s)=>{E.startScope(e);try{let i=n(...s);return Ud(i)&&console.error(\"Cannot return a Promise inside of tidy.\"),E.endScope(i),i}catch(i){throw E.endScope(null),i}};return Object.defineProperty(o,\"name\",{value:e,configurable:!0}),o}function v4(r,t){let e=C(r,\"real\",\"complex\"),n=C(t,\"imag\",\"complex\");Me(e.shape,n.shape,`real and imag shapes, ${e.shape} and ${n.shape}, must match in call to tf.complex().`);let o={real:e,imag:n};return E.runKernel(Op,o)}var cn=N({complex_:v4});function pn(r,t,e,n){if(n==null&&(n=_p(r)),n===\"complex64\")throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(!yr(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(t!=null){Wd(t);let o=Qt(t),s=Qt(e);A(o===s,()=>`Based on the provided shape, [${t}], the tensor should have ${o} values but has ${s}`);for(let i=0;i`Error creating a new Tensor. Inferred shape (${e}) does not match the provided shape (${t}). `)}}return!yr(r)&&!Array.isArray(r)&&(r=[r]),t=t||e,r=n!==\"string\"?mm(r,n):Yo(r,[],!0),E.makeTensor(r,t,n)}function Ar(r,t,e){let n=Or(r,e);return pn(r,t,n,e)}var nh={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var Nx=4;async function l_(r,t){let e=[],n=[],o=Array.isArray(r)?r.map(i=>i.name):Object.keys(r);for(let i=0;i{let m=await u.bytes(),f=m.reduce((g,y)=>g+y.length,0)+Nx*m.length,d=new Uint8Array(f),h=0;for(let g=0;g{if(t+=s.byteLength,e.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),o=0;return e.forEach(s=>{n.set(new Uint8Array(s.buffer),o),o+=s.byteLength}),n.buffer}var dI=typeof Buffer!=\"undefined\"&&(typeof Blob==\"undefined\"||typeof atob==\"undefined\"||typeof btoa==\"undefined\");function a_(r){return dI?Buffer.byteLength(r):new Blob([r]).size}function u_(r){if(dI)return Buffer.from(r).toString(\"base64\");let t=new Uint8Array(r),e=\"\";for(let n=0,o=t.length;n{t+=o.byteLength});let e=new Uint8Array(t),n=0;return r.forEach(o=>{e.set(new Uint8Array(o),n),n+=o.byteLength}),e.buffer}function hI(r){let t=\"/\";for(r=r.trim();r.endsWith(t);)r=r.slice(0,r.length-1);let e=r.split(t);return e[e.length-1]}function _x(r,t){let e={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy,weightsManifest:t};return r.signature!=null&&(e.signature=r.signature),r.userDefinedMetadata!=null&&(e.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(e.modelInitializer=r.modelInitializer),r.trainingConfig!=null&&(e.trainingConfig=r.trainingConfig),e}async function gm(r,t){let e={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy};if(r.trainingConfig!=null&&(e.trainingConfig=r.trainingConfig),r.weightsManifest!=null){let[n,o]=await t(r.weightsManifest);e.weightSpecs=n,e.weightData=o}return r.signature!=null&&(e.signature=r.signature),r.userDefinedMetadata!=null&&(e.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(e.modelInitializer=r.modelInitializer),e}function zi(r){if(r.modelTopology instanceof ArrayBuffer)throw new Error(\"Expected JSON model topology, received ArrayBuffer.\");return{dateSaved:new Date,modelTopologyType:\"JSON\",modelTopologyBytes:r.modelTopology==null?0:a_(JSON.stringify(r.modelTopology)),weightSpecsBytes:r.weightSpecs==null?0:a_(JSON.stringify(r.weightSpecs)),weightDataBytes:r.weightData==null?0:r.weightData.byteLength}}function I4(){let r=e=>{let n=e<<13,o=0;for(;(n&8388608)===0;)o-=8388608,n<<=1;return n&=-8388609,o+=947912704,n|o},t=new Uint32Array(2048);t[0]=0;for(let e=1;e<1024;e++)t[e]=r(e);for(let e=1024;e<2048;e++)t[e]=939524096+(e-1024<<13);return t}function S4(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let t=1;t<31;t++)r[t]=t<<23;for(let t=33;t<63;t++)r[t]=2147483648+(t-32<<23);return r}function k4(){let r=new Uint32Array(64);for(let t=0;t<64;t++)r[t]=1024;return r[0]=r[32]=0,r}function N4(){let r=I4(),t=S4(),e=k4();return n=>{let o=new ArrayBuffer(4*n.length),s=new Uint32Array(o);for(let i=0;i>10]+(a&1023)]+t[a>>10];s[i]=u}return new Float32Array(o)}}var Ne=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Ne.instance==null&&(Ne.instance=new Ne),Ne.instance}static registerSaveRouter(t){Ne.getInstance().saveRouters.push(t)}static registerLoadRouter(t){Ne.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return Ne.getHandlers(t,\"save\")}static getLoadHandlers(t,e){return Ne.getHandlers(t,\"load\",e)}static getHandlers(t,e,n){let o=[];return(e===\"load\"?Ne.getInstance().loadRouters:Ne.getInstance().saveRouters).forEach(i=>{let a=i(t,n);a!==null&&o.push(a)}),o}},p_=r=>Ne.registerSaveRouter(r),m_=r=>Ne.registerLoadRouter(r),f_=r=>Ne.getSaveHandlers(r),d_=(r,t)=>Ne.getLoadHandlers(r,t);var gI=\"tensorflowjs\",xI=1,ju=\"models_store\",Ql=\"model_info_store\";function h_(){if(!G().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,t=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(t==null)throw new Error(\"The current browser does not appear to support IndexedDB.\");return t}function yI(r){let t=r.result;t.createObjectStore(ju,{keyPath:\"modelPath\"}),t.createObjectStore(Ql,{keyPath:\"modelPath\"})}var Bi=class{constructor(t){if(this.indexedDB=h_(),t==null||!t)throw new Error(\"For IndexedDB, modelPath must not be null, undefined or empty.\");this.modelPath=t}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");return this.databaseAction(this.modelPath,t)}async load(){return this.databaseAction(this.modelPath)}databaseAction(t,e){return new Promise((n,o)=>{let s=this.indexedDB.open(gI,xI);s.onupgradeneeded=()=>yI(s),s.onsuccess=()=>{let i=s.result;if(e==null){let a=i.transaction(ju,\"readonly\"),l=a.objectStore(ju).get(this.modelPath);l.onsuccess=()=>{if(l.result==null)return i.close(),o(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(l.result.modelArtifacts)},l.onerror=c=>(i.close(),o(l.error)),a.oncomplete=()=>i.close()}else{let a=zi(e),u=i.transaction(Ql,\"readwrite\"),l=u.objectStore(Ql),c=l.put({modelPath:this.modelPath,modelArtifactsInfo:a}),p;c.onsuccess=()=>{p=i.transaction(ju,\"readwrite\");let f=p.objectStore(ju).put({modelPath:this.modelPath,modelArtifacts:e,modelArtifactsInfo:a});f.onsuccess=()=>n({modelArtifactsInfo:a}),f.onerror=d=>{l=u.objectStore(Ql);let h=l.delete(this.modelPath);h.onsuccess=()=>(i.close(),o(f.error)),h.onerror=g=>(i.close(),o(f.error))}},c.onerror=m=>(i.close(),o(c.error)),u.oncomplete=()=>{p==null?i.close():p.oncomplete=()=>i.close()}}},s.onerror=i=>o(s.error)})}};Bi.URL_SCHEME=\"indexeddb://\";var g_=r=>G().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Bi.URL_SCHEME)?T4(r.slice(Bi.URL_SCHEME.length)):null;Ne.registerSaveRouter(g_);Ne.registerLoadRouter(g_);function T4(r){return new Bi(r)}function _4(r){return r.startsWith(Bi.URL_SCHEME)?r.slice(Bi.URL_SCHEME.length):r}var Ex=class{constructor(){this.indexedDB=h_()}async listModels(){return new Promise((t,e)=>{let n=this.indexedDB.open(gI,xI);n.onupgradeneeded=()=>yI(n),n.onsuccess=()=>{let o=n.result,s=o.transaction(Ql,\"readonly\"),a=s.objectStore(Ql).getAll();a.onsuccess=()=>{let u={};for(let l of a.result)u[l.modelPath]=l.modelArtifactsInfo;t(u)},a.onerror=u=>(o.close(),e(a.error)),s.oncomplete=()=>o.close()},n.onerror=o=>e(n.error)})}async removeModel(t){return t=_4(t),new Promise((e,n)=>{let o=this.indexedDB.open(gI,xI);o.onupgradeneeded=()=>yI(o),o.onsuccess=()=>{let s=o.result,i=s.transaction(Ql,\"readwrite\"),a=i.objectStore(Ql),u=a.get(t),l;u.onsuccess=()=>{if(u.result==null)return s.close(),n(new Error(`Cannot find model with path '${t}' in IndexedDB.`));{let c=a.delete(t),p=()=>{l=s.transaction(ju,\"readwrite\");let f=l.objectStore(ju).delete(t);f.onsuccess=()=>e(u.result.modelArtifactsInfo),f.onerror=d=>n(u.error)};c.onsuccess=p,c.onerror=m=>(p(),s.close(),n(u.error))}},u.onerror=c=>(s.close(),n(u.error)),i.oncomplete=()=>{l==null?s.close():l.oncomplete=()=>s.close()}},o.onerror=s=>n(o.error)})}};var qa=\"/\",xm=\"tensorflowjs_models\",x_=\"info\",E4=\"model_topology\",A4=\"weight_specs\",$4=\"weight_data\",D4=\"model_metadata\";function y_(r){return{info:[xm,r,x_].join(qa),topology:[xm,r,E4].join(qa),weightSpecs:[xm,r,A4].join(qa),weightData:[xm,r,$4].join(qa),modelMetadata:[xm,r,D4].join(qa)}}function b_(r){for(let t of Object.values(r))window.localStorage.removeItem(t)}function F4(r){let t=r.split(qa);if(t.length<3)throw new Error(`Invalid key format: ${r}`);return t.slice(1,t.length-1).join(qa)}function R4(r){return r.startsWith(Vi.URL_SCHEME)?r.slice(Vi.URL_SCHEME.length):r}var Vi=class{constructor(t){if(!G().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,t==null||!t)throw new Error(\"For local storage, modelPath must not be null, undefined or empty.\");this.modelPath=t,this.keys=y_(this.modelPath)}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");{let e=JSON.stringify(t.modelTopology),n=JSON.stringify(t.weightSpecs),o=zi(t);try{this.LS.setItem(this.keys.info,JSON.stringify(o)),this.LS.setItem(this.keys.topology,e),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,u_(t.weightData));let s={format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,signature:t.signature!=null?t.signature:void 0,userDefinedMetadata:t.userDefinedMetadata!=null?t.userDefinedMetadata:void 0,modelInitializer:t.modelInitializer!=null?t.modelInitializer:void 0,trainingConfig:t.trainingConfig!=null?t.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:o}}catch(s){throw b_(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=${o.modelTopologyBytes}, weightSpecsBytes=${o.weightSpecsBytes}, weightDataBytes=${o.weightDataBytes}.`)}}}async load(){let t=JSON.parse(this.LS.getItem(this.keys.info));if(t==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(t.modelTopologyType!==\"JSON\")throw new Error(\"BrowserLocalStorage does not support loading non-JSON model topology yet.\");let e={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(n==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);e.modelTopology=n;let o=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(o==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);e.weightSpecs=o;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let a=JSON.parse(s);e.format=a.format,e.generatedBy=a.generatedBy,e.convertedBy=a.convertedBy,a.signature!=null&&(e.signature=a.signature),a.userDefinedMetadata!=null&&(e.userDefinedMetadata=a.userDefinedMetadata),a.modelInitializer!=null&&(e.modelInitializer=a.modelInitializer),a.trainingConfig!=null&&(e.trainingConfig=a.trainingConfig)}let i=this.LS.getItem(this.keys.weightData);if(i==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return e.weightData=c_(i),e}};Vi.URL_SCHEME=\"localstorage://\";var w_=r=>G().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Vi.URL_SCHEME)?O4(r.slice(Vi.URL_SCHEME.length)):null;Ne.registerSaveRouter(w_);Ne.registerLoadRouter(w_);function O4(r){return new Vi(r)}var Ax=class{constructor(){A(G().getBool(\"IS_BROWSER\"),()=>\"Current environment is not a web browser\"),A(typeof window==\"undefined\"||typeof window.localStorage!=\"undefined\",()=>\"Current browser does not appear to support localStorage\"),this.LS=window.localStorage}async listModels(){let t={},e=xm+qa,n=qa+x_;for(let o=0;o\"scheme must not be undefined or null.\"),t.endsWith(ym)&&(t=t.slice(0,t.indexOf(ym))),A(t.length>0,()=>\"scheme must not be an empty string.\");let n=Xr.getInstance();A(n.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),n.managers[t]=e}static getManager(t){let e=this.getInstance().managers[t];if(e==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return e}static getSchemes(){return Object.keys(this.getInstance().managers)}};function $x(r){if(r.indexOf(ym)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Xr.getSchemes().join(\",\")}`);return{scheme:r.split(ym)[0],path:r.split(ym)[1]}}async function v_(r,t,e=!1){A(r!==t,()=>`Old path and new path are the same: '${r}'`);let n=Ne.getLoadHandlers(r);A(n.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),A(n.length<2,()=>`Copying failed because more than one (${n.length}) load handlers for source URL ${r}.`);let o=n[0],s=Ne.getSaveHandlers(t);A(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),A(s.length<2,()=>`Copying failed because more than one (${n.length}) save handlers for destination URL ${t}.`);let i=s[0],a=$x(r).scheme,u=$x(r).path,l=a===$x(r).scheme,c=await o.load();e&&l&&await Xr.getManager(a).removeModel(u);let p=await i.save(c);return e&&!l&&await Xr.getManager(a).removeModel(u),p.modelArtifactsInfo}async function C_(){let r=Xr.getSchemes(),t={};for(let e of r){let n=await Xr.getManager(e).listModels();for(let o in n){let s=e+ym+o;t[s]=n[o]}}return t}async function I_(r){let t=$x(r);return Xr.getManager(t.scheme).removeModel(t.path)}async function S_(r,t){return v_(r,t,!1)}async function k_(r,t){return v_(r,t,!0)}var bI=class{fetch(t,e){return fetch(t,e)}now(){return performance.now()}encode(t,e){if(e!==\"utf-8\"&&e!==\"utf8\")throw new Error(`Browser's encoder only supports utf-8, but got ${e}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(t)}decode(t,e){return new TextDecoder(e).decode(t)}};if(G().get(\"IS_BROWSER\")){G().setPlatform(\"browser\",new bI);try{Xr.registerManager(Vi.URL_SCHEME,new Ax)}catch(r){}try{Xr.registerManager(Bi.URL_SCHEME,new Ex)}catch(r){}}var M4={importFetch:()=>N_()},wI;var vI=class{constructor(){this.util=T_(),this.textEncoder=new this.util.TextEncoder}fetch(t,e){return G().global.fetch!=null?G().global.fetch(t,e):(wI==null&&(wI=M4.importFetch()),wI(t,e))}now(){let t=process.hrtime();return t[0]*1e3+t[1]/1e6}encode(t,e){if(e!==\"utf-8\"&&e!==\"utf8\")throw new Error(`Node built-in encoder only supports utf-8, but got ${e}`);return this.textEncoder.encode(t)}decode(t,e){return t.length===0?\"\":new this.util.TextDecoder(e).decode(t)}};G().get(\"IS_NODE\")&&!G().get(\"IS_BROWSER\")&&G().setPlatform(\"node\",new vI);function Ct(r,t=\"float32\",e){return t=t||\"float32\",Wd(r),new pe(r,t,e)}function P4(r,t){let e=C(r,\"x\",\"cast\");if(!HC(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t===\"string\"&&e.dtype!==\"string\"||t!==\"string\"&&e.dtype===\"string\")throw new Error(\"Only strings can be casted to strings\");let n={x:e},o={dtype:t};return E.runKernel(ao,n,o)}var Z=N({cast_:P4});function L4(r){let e={x:C(r,\"x\",\"clone\",\"string_or_numeric\")};return E.runKernel(uo,e)}var Nn=N({clone_:L4});function CI(r,t=!1){console.log(r.toString(t))}pI();var z4={buffer:Ct,cast:Z,clone:Nn,print:CI};e_(z4);var Mr={};Zt(Mr,{browserFiles:()=>E_,browserHTTPRequest:()=>D_,concatenateArrayBuffers:()=>hm,copyModel:()=>S_,decodeWeights:()=>Tx,encodeWeights:()=>l_,fromMemory:()=>F_,fromMemorySync:()=>_I,getLoadHandlers:()=>d_,getModelArtifactsForJSON:()=>gm,getModelArtifactsInfoForJSON:()=>zi,getSaveHandlers:()=>f_,http:()=>Fx,isHTTPScheme:()=>Dx,listModels:()=>C_,loadWeights:()=>A_,moveModel:()=>k_,registerLoadRouter:()=>m_,registerSaveRouter:()=>p_,removeModel:()=>I_,weightsLoaderFactory:()=>NI,withSaveHandler:()=>R_,withSaveHandlerSync:()=>O_});var B4=\"model\",V4=\".json\",G4=\".weights.bin\";function __(r){return new Promise(t=>setTimeout(t)).then(r)}var Ka=class{constructor(t){if(!G().getBool(\"IS_BROWSER\"))throw new Error(\"browserDownloads() cannot proceed because the current environment is not a browser.\");t.startsWith(Ka.URL_SCHEME)&&(t=t.slice(Ka.URL_SCHEME.length)),(t==null||t.length===0)&&(t=B4),this.modelJsonFileName=t+V4,this.weightDataFileName=t+G4}async save(t){if(typeof document==\"undefined\")throw new Error(\"Browser downloads are not supported in this environment since `document` is not present\");let e=window.URL.createObjectURL(new Blob([t.weightData],{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 n=[{paths:[\"./\"+this.weightDataFileName],weights:t.weightSpecs}],o=_x(t,n),s=window.URL.createObjectURL(new Blob([JSON.stringify(o)],{type:\"application/json\"})),i=this.modelJsonAnchor==null?document.createElement(\"a\"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=s,await __(()=>i.dispatchEvent(new MouseEvent(\"click\"))),t.weightData!=null){let a=this.weightDataAnchor==null?document.createElement(\"a\"):this.weightDataAnchor;a.download=this.weightDataFileName,a.href=e,await __(()=>a.dispatchEvent(new MouseEvent(\"click\")))}return{modelArtifactsInfo:zi(t)}}}};Ka.URL_SCHEME=\"downloads://\";var II=class{constructor(t){if(t==null||t.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${t}`);this.jsonFile=t[0],this.weightsFiles=t.slice(1)}async load(){return new Promise((t,e)=>{let n=new FileReader;n.onload=o=>{let s=JSON.parse(o.target.result),i=s.modelTopology;if(i==null){e(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){e(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){t({modelTopology:i});return}let u=gm(s,l=>this.loadWeights(l));t(u)},n.onerror=o=>e(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),n.readAsText(this.jsonFile)})}loadWeights(t){let e=[],n=[];for(let i of t)e.push(...i.weights),n.push(...i.paths);let o=this.checkManifestAndWeightFiles(t),s=n.map(i=>this.loadWeightsFile(i,o[i]));return Promise.all(s).then(i=>[e,hm(i)])}loadWeightsFile(t,e){return new Promise((n,o)=>{let s=new FileReader;s.onload=i=>{let a=i.target.result;n(a)},s.onerror=i=>o(`Failed to weights data from file of path '${t}'.`),s.readAsArrayBuffer(e)})}checkManifestAndWeightFiles(t){let e=[],n=this.weightsFiles.map(s=>hI(s.name)),o={};for(let s of t)s.paths.forEach(i=>{let a=hI(i);if(e.indexOf(a)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${a}'`);if(e.push(a),n.indexOf(a)===-1)throw new Error(`Weight file with basename '${a}' is not provided.`);o[i]=this.weightsFiles[n.indexOf(a)]});if(e.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${e.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return o}},W4=r=>G().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Ka.URL_SCHEME)?U4(r.slice(Ka.URL_SCHEME.length)):null;Ne.registerSaveRouter(W4);function U4(r=\"model\"){return new Ka(r)}function E_(r){return new II(r)}function SI(r,t,e,n){i(r),e=e==null?0:e,n=n==null?1:n,a(e,n);let o=0,s=u=>(u.then(l=>{let c=e+ ++o/r.length*(n-e);return t(c),l}),u);function i(u){A(u!=null&&Array.isArray(u)&&u.length>0,()=>\"promises must be a none empty array\")}function a(u,l){A(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${u}`),A(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${l}`),A(l>=u,()=>`startFraction must be no more than endFraction, but got startFraction ${u} and endFraction ${l}`)}return Promise.all(r.map(s))}async function kI(r,t){t==null&&(t={});let e=t.fetchFunc==null?G().platform.fetch:t.fetchFunc,n=r.map(p=>e(p,t.requestInit,{isBinary:!0})),o=0,s=.5,a=(t.onProgress==null?await Promise.all(n):await SI(n,t.onProgress,o,s)).map(p=>p.arrayBuffer()),u=.5,l=1;return t.onProgress==null?await Promise.all(a):await SI(a,t.onProgress,u,l)}async function A_(r,t=\"\",e,n){return NI(i=>kI(i,{requestInit:n}))(r,t,e)}function NI(r){return async(t,e=\"\",n)=>{let o=t.map(()=>!1),s={},i=n!=null?n.map(()=>!1):[],a=[];if(t.forEach((f,d)=>{let h=0;f.weights.forEach(g=>{let y=\"quantization\"in g?g.quantization.dtype:g.dtype,b=nh[y]*Qt(g.shape),w=()=>{o[d]=!0,s[d]==null&&(s[d]=[]),s[d].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};n!=null?n.forEach((v,k)=>{v===g.name&&(w(),i[k]=!0)}):w(),a.push(g.name),h+=b})}),!i.every(f=>f)){let f=n.filter((d,h)=>!i[h]);throw new Error(`Could not find weights in manifest with names: ${f.join(\", \")}. \nManifest JSON has weights with names: ${a.join(\", \")}.`)}let u=o.reduce((f,d,h)=>(d&&f.push(h),f),[]),l=[];u.forEach(f=>{t[f].paths.forEach(d=>{let h=e+(e.endsWith(\"/\")?\"\":\"/\")+d;l.push(h)})});let c=await r(l),p={},m=0;return u.forEach(f=>{let d=t[f].paths.length,h=0;for(let v=0;v{let k=g.slice(v.groupOffset,v.groupOffset+v.sizeBytes),_=Tx(k,[v.manifestEntry]);for(let $ in _)p[$]=_[$]}),m+=d}),p}}var H4=\"application/octet-stream\",q4=\"application/json\",oh=class{constructor(t,e){if(this.DEFAULT_METHOD=\"POST\",e==null&&(e={}),this.weightPathPrefix=e.weightPathPrefix,this.onProgress=e.onProgress,this.weightUrlConverter=e.weightUrlConverter,e.fetchFunc!=null?(A(typeof e.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=e.fetchFunc):this.fetch=G().platform.fetch,A(t!=null&&t.length>0,()=>\"URL path for http must not be null, undefined or empty.\"),Array.isArray(t)&&A(t.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${t.length}).`),this.path=t,e.requestInit!=null&&e.requestInit.body!=null)throw new Error(\"requestInit is expected to have no pre-existing body, but has one.\");this.requestInit=e.requestInit||{}}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.\");let e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);e.body=new FormData;let n=[{paths:[\"./model.weights.bin\"],weights:t.weightSpecs}],o=_x(t,n);e.body.append(\"model.json\",new Blob([JSON.stringify(o)],{type:q4}),\"model.json\"),t.weightData!=null&&e.body.append(\"model.weights.bin\",new Blob([t.weightData],{type:H4}),\"model.weights.bin\");let s=await this.fetch(this.path,e);if(s.ok)return{modelArtifactsInfo:zi(t),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let t=await this.fetch(this.path,this.requestInit);if(!t.ok)throw new Error(`Request to ${this.path} failed with status code ${t.status}. Please verify this URL points to the model JSON of the model to load.`);let e;try{e=await t.json()}catch(s){let i=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(\".pb\")?i+=\" 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.\":i+=\" Please make sure the server is serving valid JSON for this request.\",new Error(i)}let n=e.modelTopology,o=e.weightsManifest;if(n==null&&o==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return gm(e,s=>this.loadWeights(s))}async loadWeights(t){let e=Array.isArray(this.path)?this.path[1]:this.path,[n,o]=K4(e),s=this.weightPathPrefix||n,i=[];for(let c of t)i.push(...c.weights);let a=[],u=[];for(let c of t)for(let p of c.paths)this.weightUrlConverter!=null?u.push(this.weightUrlConverter(p)):a.push(s+p+o);this.weightUrlConverter&&a.push(...await Promise.all(u));let l=await kI(a,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[i,hm(l)]}};oh.URL_SCHEME_REGEX=/^https?:\\/\\//;function K4(r){let t=r.lastIndexOf(\"/\"),e=r.lastIndexOf(\"?\"),n=r.substring(0,t),o=e>t?r.substring(e):\"\";return[n+\"/\",o]}function Dx(r){return r.match(oh.URL_SCHEME_REGEX)!=null}var $_=(r,t)=>{if(typeof fetch==\"undefined\"&&(t==null||t.fetchFunc==null))return null;{let e=!0;if(Array.isArray(r)?e=r.every(n=>Dx(n)):e=Dx(r),e)return Fx(r,t)}return null};Ne.registerSaveRouter($_);Ne.registerLoadRouter($_);function Fx(r,t){return new oh(r,t)}function D_(r,t){return Fx(r,t)}var sh=class{constructor(t){this.modelArtifacts=t}load(){return this.modelArtifacts}},Rx=class{constructor(t){this.saveHandler=t}save(t){return this.saveHandler(t)}},TI=class{constructor(t){t.load&&(this.load=()=>Promise.resolve(t.load())),t.save&&(this.save=e=>Promise.resolve(t.save(e)))}};function F_(r,t,e,n){let o=arguments;return new TI(_I(...o))}function _I(r,t,e,n){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new sh(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 sh({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 sh({modelTopology:r,weightSpecs:t,weightData:e,trainingConfig:n}))}function R_(r){return new Rx(r)}function O_(r){return new Rx(r)}var L_={};Zt(L_,{confusionMatrix:()=>P_});function j4(r,t,e=!1,n=!1){let o=C(r,\"a\",\"matMul\"),s=C(t,\"b\",\"matMul\");[o,s]=Xt(o,s);let i={a:o,b:s},a={transposeA:e,transposeB:n};return E.runKernel(es,i,a)}var Bt=N({matMul_:j4});function X4(r,t,e=1,n=0){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let s={indices:C(r,\"indices\",\"oneHot\",\"int32\")},i={depth:t,onValue:e,offValue:n};return E.runKernel(Ns,s,i)}var js=N({oneHot_:X4});function qct(){G().set(\"PROD\",!0)}function Kct(){G().set(\"DEBUG\",!0)}function jct(){G().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function EI(r){G().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(r+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}r_(EI);function Xct(){E.disposeVariables()}function xo(){return E}function ih(){return E.memory()}function Yct(r){return E.profile(r)}function V(r,t){return E.tidy(r,t)}function _t(r){rh(r).forEach(e=>e.dispose())}function Pe(r){return E.keep(r)}function Zct(r){return E.time(r)}function Y4(r){return E.setBackend(r)}function Jct(){return E.ready()}function Qct(){return E.backendName}function tpt(r){E.removeBackend(r)}function ept(r){return E.findBackend(r)}function rpt(r){return E.findBackendFactory(r)}function bm(r,t,e=1){return E.registerBackend(r,t,e)}function M_(){return E.backend}function npt(r,t){G().setPlatform(r,t)}function Z4(r){let e={input:C(r,\"input\",\"imag\")};return E.runKernel(Kp,e)}var ja=N({imag_:Z4});function J4(r){let e={x:C(r,\"x\",\"neg\")};return E.runKernel(ki,e)}var qt=N({neg_:J4});function Q4(r){let e={input:C(r,\"input\",\"real\")};return E.runKernel(tm,e)}var Gi=N({real_:Q4});function tH(r,t,e){let n=C(r,\"x\",\"transpose\");if(t==null&&(t=n.shape.map((i,a)=>a).reverse()),A(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(i=>{A(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 o={x:n},s={perm:t};return n.dtype===\"complex64\"?V(()=>{let i=Gi(n),a=ja(n);return i=E.runKernel(Zn,{x:i},s),a=E.runKernel(Zn,{x:a},s),e&&(a=qt(a)),cn(i,a)}):E.runKernel(Zn,o,s)}var Mt=N({transpose_:tH});function eH(r,t,e){let n=C(r,\"labels\",\"confusionMatrix\"),o=C(t,\"predictions\",\"confusionMatrix\");A(e==null||e>0&&Number.isInteger(e),()=>`If provided, numClasses must be a positive integer, but got ${e}`),A(n.rank===1,()=>`Expected the rank of labels to be 1, but got ${n.rank}`),A(o.rank===1,()=>`Expected the rank of predictions to be 1, but got ${o.rank}`),A(n.shape[0]===o.shape[0],()=>`Mismatch in the number of examples: ${n.shape[0]} vs. ${o.shape[0]}. Labels and predictions should have the same number of elements.`),A(e>0&&Number.isInteger(e),()=>`numClasses is required to be a positive integer, but got ${e}`);let s=js(Z(n,\"int32\"),e),i=js(Z(o,\"int32\"),e),a=Mt(s),u=Bt(a,i);return Z(u,\"int32\")}var P_=N({confusionMatrix_:eH});var Pr={};Zt(Pr,{assertAndGetBroadcastShape:()=>Lt,getBroadcastDims:()=>z_,getReductionAxes:()=>xe});function z_(r,t){let e=r.length,n=[];for(let o=0;o1&&i===1&&n.unshift(s)}return n}function xe(r,t){let e=[];for(let n=0;n1)&&e.unshift(s)}return e}function Lt(r,t){let e=[],n=Math.max(r.length,t.length);for(let o=0;olH,fromPixelsAsync:()=>iH,toPixels:()=>aH});function AI(r,t,e){if(jn(r),t!=null&&t.length!==3)throw new Error(\"tensor3d() requires shape to have three numbers\");let n=Or(r,e);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 pn(r,t,n,e)}var Xu;function B_(r,t=3){if(t>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 e=!1,n=!1,o=!1,s=!1,i=!1,a=!1;if(r.data instanceof Uint8Array)e=!0;else if(typeof ImageData!=\"undefined\"&&r instanceof ImageData)n=!0;else if(typeof HTMLVideoElement!=\"undefined\"&&r instanceof HTMLVideoElement)o=!0;else if(typeof HTMLImageElement!=\"undefined\"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)i=!0;else if(typeof ImageBitmap!=\"undefined\"&&r instanceof ImageBitmap)a=!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(o&&o&&r.readyState<2)throw new Error(\"The video element has not loaded data yet. Please wait for `loadeddata` event on the