diff --git "a/assets/embedding.worker-B71vtDqE.js" "b/assets/embedding.worker-B71vtDqE.js" new file mode 100644--- /dev/null +++ "b/assets/embedding.worker-B71vtDqE.js" @@ -0,0 +1,2889 @@ +var ap=(()=>{var A=import.meta.url;return async function(g={}){var e,I=g,i,t,o=new Promise((l,S)=>{i=l,t=S}),C=Object.assign({},I),s="./this.program",Q="",r,B;typeof document<"u"&&document.currentScript&&(Q=document.currentScript.src),A&&(Q=A),Q.startsWith("blob:")?Q="":Q=Q.substr(0,Q.replace(/[?#].*/,"").lastIndexOf("/")+1),r=async l=>{var S=await fetch(l,{credentials:"same-origin"});if(S.ok)return S.arrayBuffer();throw new Error(S.status+" : "+S.url)};var a=I.print||console.log.bind(console),d=I.printErr||console.error.bind(console);Object.assign(I,C),C=null,I.arguments&&I.arguments,I.thisProgram&&(s=I.thisProgram);for(var c=I.wasmBinary,F,L=!1,u,h,R,w,y,D,f="data:application/octet-stream;base64,",G=l=>l.startsWith(f),J=new Uint8Array(123),T=25;T>=0;--T)J[48+T]=52+T,J[65+T]=T,J[97+T]=26+T;J[43]=62,J[47]=63;function X(l){for(var S,K,O=0,iA=0,aA=l.length,uA=new Uint8Array((aA*3>>2)-(l[aA-2]=="=")-(l[aA-1]=="="));O>4,uA[iA+1]=S<<4|K>>2,uA[iA+2]=K<<6|J[l.charCodeAt(O+3)];return uA}function gA(l){if(G(l))return X(l.slice(f.length))}function x(){var l=F.buffer;I.HEAP8=u=new Int8Array(l),I.HEAP16=R=new Int16Array(l),I.HEAPU8=h=new Uint8Array(l),I.HEAPU16=new Uint16Array(l),I.HEAP32=w=new Int32Array(l),I.HEAPU32=y=new Uint32Array(l),I.HEAPF32=new Float32Array(l),I.HEAPF64=new Float64Array(l),I.HEAP64=D=new BigInt64Array(l),I.HEAPU64=new BigUint64Array(l)}var tA=[],Z=[],IA=[];function oA(){if(I.preRun)for(typeof I.preRun=="function"&&(I.preRun=[I.preRun]);I.preRun.length;)cA(I.preRun.shift());FA(tA)}function CA(){!I.noFSInit&&!k.initialized&&k.init(),k.ignorePermissions=!1,FA(Z)}function DA(){if(I.postRun)for(typeof I.postRun=="function"&&(I.postRun=[I.postRun]);I.postRun.length;)U(I.postRun.shift());FA(IA)}function cA(l){tA.unshift(l)}function q(l){Z.unshift(l)}function U(l){IA.unshift(l)}var z=0,H=null;function EA(l){z++,I.monitorRunDependencies?.(z)}function xA(l){if(z--,I.monitorRunDependencies?.(z),z==0&&H){var S=H;H=null,S()}}function RA(l){I.onAbort?.(l),l="Aborted("+l+")",d(l),L=!0,l+=". Build with -sASSERTIONS for more info.";var S=new WebAssembly.RuntimeError(l);throw t(S),S}var YA="data:application/octet-stream;base64,AGFzbQEAAAABvARIYAF/AX9gAX8AYAJ/fwBgAn9/AX9gA39/fwF/YAN/f38AYAR/f39/AGAGf39/f39/AX9gBX9/f39/AGAFf39/f38Bf2AEf39/fwF/YAN/f38BfWAIf39/f39/f38Bf2AGf39/f39/AGAAAGAHf39/f39/fwF/YAV/fn5+fgBgAAF/YAN/fn8BfmAHf39/f39/fwBgBX9/f31/AGAFf399f38Bf2AFf39+f38AYAV/f39/fgF/YAN/fn8Bf2AEf35+fwBgCH9/f39/f39/AGAFf39/f3wBf2ABfAF8YAJ/fwF9YAF/AX5gAnx/AXxgCn9/f39/f39/f38Bf2ACfHwBfGABfQF9YAx/f39/f39/f39/f38Bf2APf39/f39/f39/f39/f39/AGAKf39/f39/f39/fwBgC39/f39/f39/f39/AX9gBH9/f38BfmAHf39/f39+fgF/YAZ/f39/fn4Bf2ADf398AX9gAn5/AGAEf35/fwF/YAp/f39/f398f39/AGAGf39/f398AGAHf39/f39/fABgAn9+AGACf3wAYAR+fn5+AX9gBH9/f34BfmACfn8Bf2ALf39/f39/f39/fH8AYAN8fH8BfGAGfH9/f398AXxgAn99AX9gAX8BfWACfn4BfGAFf39/f30AYAN/f38BfGAGf3x/f39/AX9gA39/fgBgAn5+AX1gAn9/AX5gBH9+fn4AYAN+fn4Bf2AAAX5gAn19AX1gAX4Bf2ACfH8Bf2AGf39/fX9/AAJnEQFhAWEABgFhAWIABQFhAWMABAFhAWQAAAFhAWUACgFhAWYABAFhAWcACgFhAWgADgFhAWkAGAFhAWoAAAFhAWsAKwFhAWwABgFhAW0AEQFhAW4AAwFhAW8AAwFhAXAACgFhAXEALAO0BrIGAQAOAAMAAAECBAYBBAUODgACAgMDERAABQQGAAMtAgAAAgQABRAOCQYIGQIuBAMFEAYEAgQFBAACAAAeAgUvAgoFBQMwAAEBCQkKADEBBQwMBwcCAgMCBgABAAICAAYADgADBQMCBQQyGQAfBQYIBAICBSAgMzQBAgMCAgEAAAMAIQM1BQYAGgkCBQMFCgACAgAFNiE3BQYIAAgBCAgRAgIABgAAAhMEEw8IDwoDAgMDAAAAAAA4AwADAAADAgAEAAIDHCI5BAIGCAIGBgAF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KAIAaiICKAIEQbABcUEgRhshCCACKAIYIQMCQCACLQBQQQFGBEAgAigATCEFDAELIAdBDGoiBiACKAIcIgQ2AgAgBEGsjgNHBEAgBCAEKAIEQQFqNgIECyAGQeSPAxAVIgRBICAEKAIAKAIcEQMAIQUgBhAYIAIgBTYATCACQQE6AFALAn8gASEEIAIhBiAFwCEMQQAhAiMAQRBrIgUkAAJAAkAgAyIBRQ0AIAYoAgwhAyAIIARrIgpBAEoEQCABIAQgCiABKAIAKAIwEQQAIApHDQELIAMgCSAEayIEa0EAIAMgBEobIgNBAEoEQCADQfj///8HTw0CAkAgA0ELTwRAIANBB3IiAkEBahASIQQgBSACQf////8HazYCDCAFIAQ2AgQgBSADNgIIDAELIAUgAzoADyAFQQRqIQQLIAMEQCAEIAwgA/wLAAtBACECIAMgBGpBADoAACABIAUoAgQgBUEEaiAFLAAPQQBIGyADIAEoAgAoAjARBAAhBCAFLAAPQQBIBEAgBSgCDBogBSgCBBARCyADIARHDQELAkAgCSAIayIDQQBMDQAgASAIIAMgASgCACgCMBEEACADRg0ADAELIAZBADYCDCABIQILIAVBEGokACACDAELEHEACw0AIAAgACgCAEEMaygCAGoiASABKAIQQQVyEKABCyALEF4gB0EQaiQAIAALlwEBAX8CQCAAKAIIIAAoAgRsIAFHBEAgACgCACIEBEAgBEEEaygCABARCyAAIAFBAEwEf0EABSABQYCAgIACTw0CIAFBA3RBEGoQFiIBRQ0CIAFBcHEiBCABNgIMIARBEGoLNgIACyAAIAM2AgggACACNgIEDwtBBBAXIgBBiOECNgIAIABB4OACNgIAIABBrOECQQIQAQALBgAgABARC4EBAQJ/AkACQCACQQRPBEAgACABckEDcQ0BA0AgACgCACABKAIARw0CIAFBBGohASAAQQRqIQAgAkEEayICQQNLDQALCyACRQ0BCwNAIAAtAAAiAyABLQAAIgRGBEAgAUEBaiEBIABBAWohACACQQFrIgINAQwCCwsgAyAEaw8LQQALigEBAX8CQCAAKAIEIAFHBEAgACgCACIDBEAgA0EEaygCABARCyAAIAFBAEwEf0EABSABQYCAgIACTw0CIAFBA3RBEGoQFiIBRQ0CIAFBcHEiAyABNgIMIANBEGoLNgIACyAAIAI2AgQPC0EEEBciAEGI4QI2AgAgAEHg4AI2AgAgAEGs4QJBAhABAAsuAQF/QQQQFyIAQYjhAjYCACAAQeDgAjYCACAAQfTgAjYCACAAQcjhAkECEAEACwYAEIEGAAvUAQIDfwJ+AkAgACkDcCIEQgBSIAQgACkDeCAAKAIEIgEgACgCLCICa6x8IgVXcUUEQCAAEMIBIgNBAE4NASAAKAIsIQIgACgCBCEBCyAAQn83A3AgACABNgJoIAAgBSACIAFrrHw3A3hBfw8LIAVCAXwhBSAAKAIEIQEgACgCCCECAkAgACkDcCIEUA0AIAQgBX0iBCACIAFrrFkNACABIASnaiECCyAAIAI2AmggACAFIAAoAiwiACABa6x8NwN4IAAgAU8EQCABQQFrIAM6AAALIAML6gEBA38CQCABEMMCIQIgAC0AC0EHdgR/IAAoAghB/////wdxQQFrBUEBCyEDAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIQQgAiADTQRAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshAwJAIAJFDQAgAkECdCIERQ0AIAMgASAE/AoAAAsjAEEQayIBJAACfyAALQALQQd2BEAgACgCBAwBCyAALQALCxogACACEGwgAUEANgIMIAMgAkECdGogASgCDDYCACABQRBqJAAMAQsgACADIAIgA2sgBEEAIAQgAiABELwCCwumAQEDfwJAIAEQSyECIAAtAAtBB3YEfyAAKAIIQf////8HcUEBawVBCgshAwJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxCyEEIAIgA00EQAJ/IAAtAAtBB3YEQCAAKAIADAELIAALIQMCQCACRSIEDQAgBA0AIAMgASAC/AoAAAsgACADIAIQygIMAQsgACADIAIgA2sgBEEAIAQgAiABEJgBCwsQACAAELEDIAEQsQNzQQFzCxAAIAAQsgMgARCyA3NBAXMLygIBBH9BqI4DLQAABEBBpI4DKAIADwsjAEEgayIBJAACQAJAA0AgAUEIaiICIABBAnRqIABBoytBmswAQQEgAHRB/////wdxGxCaAyIDNgIAIANBf0YNASAAQQFqIgBBBkcNAAtBuPkBIQAgAkG4+QFBGBAdRQ0BQdD5ASEAIAJB0PkBQRgQHUUNAUEAIQBBtIwDLQAARQRAA0AgAEECdEGEjANqIABBmswAEJoDNgIAIABBAWoiAEEGRw0AC0G0jANBAToAAEGcjANBhIwDKAIANgIAC0GEjAMhACABQQhqIgJBhIwDQRgQHUUNAUGcjAMhACACQZyMA0EYEB1FDQFBGBAWIgBFDQAgACABKQIINwIAIAAgASkCGDcCECAAIAEpAhA3AggMAQtBACEACyABQSBqJABBqI4DQQE6AABBpI4DIAA2AgAgAAu7CgIFfw9+IwBB4ABrIgUkACAEQv///////z+DIQwgAiAEhUKAgICAgICAgIB/gyEKIAJC////////P4MiDUIgiCEOIARCMIinQf//AXEhBwJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAdB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiC0KAgICAgIDA//8AVCALQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQoMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCiADIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhCkIAIQEMAwsgCkKAgICAgIDA//8AhCEKQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgC4RCACEBUARAQoCAgICAgOD//wAhCgwDCyAKQoCAgICAgMD//wCEIQoMAgsgASALhFAEQEIAIQEMAgsgAiADhFAEQEIAIQEMAgsgC0L///////8/WARAIAVB0ABqIAEgDSABIA0gDVAiBht5IAZBBnStfKciBkEPaxA7QRAgBmshBiAFKQNYIg1CIIghDiAFKQNQIQELIAJC////////P1YNACAFQUBrIAMgDCADIAwgDFAiCBt5IAhBBnStfKciCEEPaxA7IAYgCGtBEGohBiAFKQNIIQwgBSkDQCEDCyADQg+GIgtCgID+/w+DIgIgAUIgiCIEfiIQIAtCIIgiEyABQv////8PgyIBfnwiD0IghiIRIAEgAn58IgsgEVStIAIgDUL/////D4MiDX4iFSAEIBN+fCIRIAxCD4YiEiADQjGIhEL/////D4MiAyABfnwiFCAPIBBUrUIghiAPQiCI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ASACbCABIAIQGyAAKAIEIQMgACgCCAsgASADRw0CIAJHDQIPC0GRwgBB/iBBlQJB3yQQAAALQQQQFyIAQYjhAjYCACAAQeDgAjYCACAAQazhAkECEAEAC0HGD0HXHEH9BUGhJhAAAAvTAQEFfyMAQRBrIgUkAAJAIAIgAC0AC0EHdgR/IAAoAghB/////wdxQQFrBUEKCyIDAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIgRrTQRAIAJFIgMNAQJ/IAAtAAtBB3YEQCAAKAIADAELIAALIgYgBGohBwJAIAMNACADDQAgByABIAL8CgAACyAAIAIgBGoiARBsIAVBADoADyABIAZqIAUtAA86AAAMAQsgACADIAIgA2sgBGogBCAEQQAgAiABEJgBCyAFQRBqJAAgAAsEAEEACxgAIAAtAABBIHFFBEAgASACIAAQ0AEaCwt1AQF+IAAgASAEfiACIAN+fCADQiCIIgIgAUIgiCIEfnwgA0L/////D4MiAyABQv////8PgyIBfiIFQiCIIAMgBH58IgNCIIh8IAEgAn4gA0L/////D4N8IgFCIIh8NwMIIAAgBUL/////D4MgAUIghoQ3AwALBQAQIAALaAEBfyMAQRBrIgUkACAFIAI2AgwgBSAENgIIIAVBBGogBUEMahBUIAAgASADIAUoAggQvQEhASgCACIABEBBoIMDKAIAGiAABEBBoIMDQfjxAiAAIABBf0YbNgIACwsgBUEQaiQAIAEL7QEBAn8CfyAALQALQQd2BEAgACgCBAwBCyAALQALQf8AcQshBAJAIAIgAWtBBUgNACAERQ0AIAEgAhC2ASACQQRrIQQCfyAALQALQQd2BEAgACgCBAwBCyAALQALQf8AcQsCfyAALQALQQd2BEAgACgCAAwBCyAACyICaiEFAkADQAJAIAIsAAAhACABIARPDQACQCAAQQBMDQAgAEH/AE4NACAAIAEoAgBHDQMLIAFBBGohASACIAUgAmtBAUpqIQIMAQsLIABBAEwNASAAQf8ATg0BIAIsAAAgBCgCAEEBa0sNAQsgA0EENgIACwtrAQF/IwBBgAJrIgUkAAJAIAIgA0wNACAEQYDABHENACAFIAEgAiADayIDQYACIANBgAJJIgEbEKMBIAFFBEADQCAAIAVBgAIQNSADQYACayIDQf8B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NgIEQQEhBEF/QQFBgX9BACACKgIAIgUgBlwbIAUgBl4bIAUgBl0bIgBFBEAgAigCBCIAIANKIAAgA0hrIQALIABBgX9GDQEgAEEATg0BIAEgBTgCACACIAY4AgAgASACKAIENgIEIAIgAzYCBAtBAiEECyAECzYBA38gACgCBCAALAALIgIgAkEASCICGyIEIAEQS0YEfyAAKAIAIAAgAhsgASAEEB0FQQELRQtyAQJ/IwBBEGsiAyQAIANBCGogABBmGiADLQAIIQQCQCACRQ0AIARFDQAgACAAKAIAQQxrKAIAaigCGCIEIAEgAiAEKAIAKAIwEQQAIAJGDQAgACAAKAIAQQxrKAIAakEBEGcLIANBCGoQXiADQRBqJAALyAkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCUKAgICAgIDA//8AVCAJQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAKQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBRshBEIAIAEgBRshAwwCCyADIAlCgICAgICAwP//AIWEUA0BIAEgCoRQBEAgAyAJhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAJhEIAUg0AIAEhAyACIQQMAQsgAyABIAEgA1QgCSAKViAJIApRGyIIGyEKIAQgAiAIGyIMQv///////z+DIQkgAiAEIAgbIgtCMIinQf//AXEhByAMQjCIp0H//wFxIgVFBEAgBkHgAGogCiAJIAogCSAJUCIFG3kgBUEGdK18pyIFQQ9rEDsgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAtC////////P4MhASAHBH4gAQUgBkHQAGogAyABIAMgASABUCIHG3kgB0EGdK18pyIHQQ9rEDtBECAHayEHIAYpA1Ah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AwRAIARB/wEgA/wLAAsgAEEANgIwIABCADcCKCAAIAI2AiQgACABNgIgIAAgBDYCHCAAIAc2AhQgACADEBIiBDYCKCAAIAMgBGoiATYCMCAEIQICQCAFQQFrQf////8DcSIDQQNPBEAgAiADQQFqIgVB/P///wdxIgNBAnRqIQIDQCAEIAZBAnRq/Qz//39///9/f///f3///39//QsCACAGQQRqIgYgA0cNAAsgAyAFRg0BCwNAIAJD//9/fzgCACACQQRqIgIgAUcNAAsLIAAgATYCLAsgAEIANwI4IAAgBDYCNCAAQUBr/QwAAAAAAAAAAAAAAAAAAAAA/QsCACAADwsQEwALGQEBfyABEMsCIQIgACABNgIEIAAgAjYCAAubAgEEfyMAQRBrIgUkACABEMMCIQIjAEEQayIDJAACQCACQff///8DTQRAAkAgAkECSQRAIAAgAC0AC0GAAXEgAkH/AHFyOgALIAAgAC0AC0H/AHE6AAsgACEEDAELIANBCGogAkECTwR/IAJBAmpBfnEiBCAEQQFrIgQgBEECRhsFQQELQQFqEIEBIAMoAgwaIAAgAygCCCIENgIAIAAgACgCCEGAgICAeHEgAygCDEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggACACNgIECwJAIAJFDQAgAkECdCIARQ0AIAQgASAA/AoAAAsgA0EANgIEIAQgAkECdGogAygCBDYCACADQRBqJAAMAQsQNwALIAVBEGokAAvkAQEGfyMAQRBrIgUkACAAKAIEIQMCfyACKAIAIAAoAgBrIgRB/////wdJBEAgBEEBdAwBC0F/CyIEQQQgBBshBCABKAIAIQcgACgCACEIIANB+AFGBH9BAAUgACgCAAsgBBDTASIGBEAgA0H4AUcEQCAAKAIAGiAAQQA2AgALIAVB9wE2AgQgACAFQQhqIAYgBUEEahAqIgMQ7QIgAygCACEGIANBADYCACAGBEAgBiADKAIEEQEACyABIAAoAgAgByAIa2o2AgAgAiAAKAIAIARBfHFqNgIAIAVBEGokAA8LECAAC4sDAQJ/IwBBEGsiCiQAIAogADYCDAJAAkACQCADKAIAIgsgAkcNACAJKAJgIABGBH9BKwUgACAJKAJkRw0BQS0LIQAgAyALQQFqNgIAIAsgADoAAAwBCwJAAn8gBi0A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IAJBCGpBeHEiBCAEQQFrIgQgBEELRhsFQQoLQQFqEIsBIAMoAgwaIAAgAygCCCIENgIAIAAgACgCCEGAgICAeHEgAygCDEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggACACNgIECwJAIAJFIgANACAADQAgBCABIAL8CgAACyADQQA6AAcgAiAEaiADLQAHOgAAIANBEGokAAwBCxA3AAsgBUEQaiQAC3wBAn8gACAAKAJIIgFBAWsgAXI2AkggACgCFCAAKAIcRwRAIABBAEEAIAAoAiQRBAAaCyAAQQA2AhwgAEIANwMQIAAoAgAiAUEEcQRAIAAgAUEgcjYCAEF/DwsgACAAKAIsIAAoAjBqIgI2AgggACACNgIEIAFBG3RBH3UL8AICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgA2AgAgAyACIARrQXxxIgJqIgFBBGsgADYCACACQQlJDQAgAyAANgIIIAMgADYCBCABQQhrIAA2AgAgAUEMayAANgIAIAJBGUkNACADIAA2AhggAyAANgIUIAMgADYCECADIAA2AgwgAUEQayAANgIAIAFBFGsgADYCACABQRhrIAA2AgAgAUEcayAANgIAIAIgA0EEcUEYciIBayICQSBJDQAgAK1CgYCAgBB+IQUgASADaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLC5kBAQN8IAAgAKIiAyADIAOioiADRHzVz1o62eU9okTrnCuK5uVavqCiIAMgA0R9/rFX4x3HPqJE1WHBGaABKr+gokSm+BARERGBP6CgIQUgACADoiEEIAJFBEAgBCADIAWiRElVVVVVVcW/oKIgAKAPCyAAIAMgAUQAAAAAAADgP6IgBCAFoqGiIAGhIARESVVVVVVVxT+ioKELkgEBA3xEAAAAAAAA8D8gACAAoiICRAAAAAAAAOA/oiIDoSIERAAAAAAAAPA/IAShIAOhIAIgAiACIAJEkBXLGaAB+j6iRHdRwRZswVa/oKJETFVVVVVVpT+goiACIAKiIgMgA6IgAiACRNQ4iL7p+qi9okTEsbS9nu4hPqCiRK1SnIBPfpK+oKKgoiAAIAGioaCgC+wBAgJ8Bn8CQAJAIAMoAggiCEEATARARAAAAAAAAPA/IQYMAQsgAigCACEJIAQoAgAhCiACKAIEIQIgBCgCBCELIAEoAgAhDCABKAIEIQ0gAygCACEDRAAAAAAAAPA/IQZBACEEAkADQAJAIAMgBEECdGooAgAiAUEASA0AIAEgDU4NACABIAtODQQgASACTg0CIAwgAUEDdCIBaisDACIHIAEgCmorAwAgAKGjIAcgACAFIAEgCWorAwCgoKOiIAagIQYgCCAEQQFqIgRHDQEMAwsLDAILDAELIAYPC0HbOkGxIUG1AUGUOhAAAAuKAQEBfwJAIAAoAgQgAUcEQCAAKAIAIgMEQCADQQRrKAIAEBELIAAgAUEATAR/QQAFIAFBgICAgARPDQIgAUECdEEQahAWIgFFDQIgAUFwcSIDIAE2AgwgA0EQags2AgALIAAgAjYCBA8LQQQQFyIAQYjhAjYCACAAQeDgAjYCACAAQazhAkECEAEAC8cJAgt/AnwjAEHgAGsiBSQAAkACQAJAAkAgACgCBCIEIAJyIgZBAEhBACAAKAIAIggbRQRAIAZBAEgNAyAAKAIIIAJIDQMgBSAENgIYIAVCADcCECAFIAA2AgwgBSACNgIIIAUgBDYCBCAFIAg2AgAgBSABNgIcIAQgASgCBEcNASADKAIEIQQgBSADKAIAIgY2AjggBSACNgI8IAJBAEgiCEEAIAYbDQQgBSAENgJQIAUgAzYCRCAFQQA2AkggCA0DIAIgBEoNAwJAIAJFDQAgAkEDdCIERQ0AIAZBACAE/AsACyAFQoCAgICAgID4PzcDWCAFQThqIQwjAEEgayIIJAACQAJAAkACQCAFKAIIQQFGBEAgBSsDWCEQIAUoAgAiBkEAIAUoAgQiBEEASBsNCSABKAIAIgdBACABKAIEIglBAEgbDQkgBCAJRw0CAkAgBEUNACAEQQBMDQQgBisDACAHKwMAoiEPQQEhCSAEQQFGDQAgBEEBayIKQQNxIQ0gBEECa0EDTwRAIApBfHEhDkEAIQoDQCAPIAYgCUEDdCIEaisDACAEIAdqKwMAoqAgBiAEQQhqIgtqKwMAIAcgC2orAwCioCAGIARBEGoiC2orAwAgByALaisDAKKgIAYgBEEYaiIEaisDACAEIAdqKwMAoqAhDyAJQQRqIQkgCkEEaiIKIA5HDQALCyANRQ0AQQAhBANAIA8gBiAJQQN0IgpqKwMAIAcgCmorAwCioCEPIAlBAWohCSAEQQFqIgQgDUcNAAsLIAwoAgAiBCAQIA+iIAQrAwCgOQMADAELIAggBSgCGDYCGCAIIAUpAhA3AxAgCCAF/QACAP0LAwAjAEEQayIHJAACQCABKAIEIglBgICAgAJJBEACQCAFKwNYIQ8gCCgCDCENIAgoAgggCCgCBCAIKAIAIQtBACEGIAEoAgAiBEUEQCAJQQN0IQQCQCAJQYCAAU0EQCAHIARBHmpBcHFrIgYkAAwBCyAEQRBqEBYiBEUNAiAEQXBxIgYgBDYCDCAGQRBqIQYLIAYhBAsgByANKAIENgIMIAcgCzYCCCAHQQE2AgQgByAENgIAIAwoAgAiBARAIAwoAgRBAEgNDAsgB0EIaiAHIARBASAPEE8CQCAJQYGAAUkNACAGRQ0AIAZBBGsoAgAQEQsgB0EQaiQADAILC0EEEBciAEGI4QI2AgAgAEHg4AI2AgAgAEGs4QJBAhABAAsLIAhBIGokAAwCC0HEOkHQG0HSAEGIDBAAAAtB+jpBshpBmwNBmQkQAAALIAAoAgQiBCACciIGQQBIQQAgACgCACIIGw0EIAZBAEgNAyAAKAIIIAJIDQMgAygCBCIGIAJIDQMgAygCACEHIAUgBjYCNCAFQQA2AiwgBSADNgIoIAUgAjYCICAFIAc2AhwgBSAENgIYIAVCADcCECAFIAA2AgwgBSACNgIIIAUgBDYCBCAFIAg2AgAgASgCBCAERw0CIAVCgICAgICAgPi/fzcDOCABIAUgBUEcaiAMEJwCIAVB4ABqJAAPCwwDC0G+O0H3G0HiAEGQDRAAAAtBqjlBohxBsAFBhRYQAAALQfUPQYIgQZMBQcoZEAAAC0GoNEHkIUGyAUGpJRAAAAvVBAIGfwJ9IwBBEGsiByQAAkAgACgCBCIFQQBMBEAMAQsgBUEDcSEJIAAoAhAgACgCDCABbEECdGohBgJAIAVBBEkEQCACIQUMAQsgBUH8////B3EhCiACIQUDQCAGKgIMIAUqAgyTIgwgDJQgBioCCCAFKgIIkyIMIAyUIAYqAgQgBSoCBJMiDCAMlCAGKgIAIAUqAgCTIgwgDJQgC5KSkpIhCyAFQRBqIQUgBkEQaiEGIAhBBGoiCCAKRw0ACwsgCUUNAEEAIQgDQCAGKgIAIAUqAgCTIgwgDJQgC5IhCyAGQQRqIQYgBUEEaiEFIAhBAWoiCCAJRw0ACwsgACgCHCABQQR0aiEBAkAgC5EiCyADKgIAX0UNACAHIAEoAgQ2AgggByALOAIEIAQtAAQhBSAEQQhqIAdBBGogB0EIahCIBAJAIAVFBEAgBCgCACAEKAIMIAQoAghrQQN1Rw0BIARBAToABAwBCyAEKAIIIgUgBCgCDCIGIAYgBWtBA3UQUiAEIAQoAgxBCGs2AgwLIAQtAARBAUcNACADIAQoAggqAgA4AgALAkACQCABKgIAIgwgC14EQAJAIAEoAggiBUUNACALIAMqAgCTIAxfRQ0AIAAgBSACIAMgBBCpAQsgASgCDCIFRQ0CIAEqAgAgCyADKgIAkl8NAQwCCwJAIAEoAgwiBUUNACALIAMqAgCSIAxgRQ0AIAAgBSACIAMgBBCpAQsgASgCCCIFRQ0BIAEqAgAgCyADKgIAk2BFDQELIAAgBSACIAMgBBCpAQsgB0EQaiQACwQAQQEL3QQCBn8CfSMAQRBrIgckACAAKAIEIgVBAEwEfUMAAAAABSAFQQNxIQkgACgCECAAKAIMIAFsQQJ0aiEGAkAgBUEESQRAIAIhBQwBCyAFQfz///8HcSEKIAIhBQNAIAYqAgwgBSoCDJMiDCAMlCAGKgIIIAUqAgiTIgwgDJQgBioCBCAFKgIEkyIMIAyUIAYqAgAgBSoCAJMiDCAMlCALkpKSkiELIAVBEGohBSAGQRBqIQYgCEEEaiIIIApHDQALCyAJBEBBACEIA0AgBioCACAFKgIAkyIMIAyUIAuSIQsgBkEEaiEGIAVBBGohBSAIQQFqIgggCUcNAAsLIAtDAAAAP5QLIQsgACgCHCABQQR0aiEBAkAgCyADKgIAX0UNACAHIAEoAgQ2AgggByALOAIEIAQtAAQhBSAEQQhqIAdBBGogB0EIahCIBAJAIAVFBEAgBCgCACAEKAIMIAQoAghrQQN1Rw0BIARBAToABAwBCyAEKAIIIgUgBCgCDCIGIAYgBWtBA3UQUiAEIAQoAgxBCGs2AgwLIAQtAARBAUcNACADIAQoAggqAgA4AgALAkACQCABKgIAIgwgC14EQAJAIAEoAggiBUUNACALIAMqAgCTIAxfRQ0AIAAgBSACIAMgBBCrAQsgASgCDCIFRQ0CIAEqAgAgCyADKgIAkl8NAQwCCwJAIAEoAgwiBUUNACALIAMqAgCSIAxgRQ0AIAAgBSACIAMgBBCrAQsgASgCCCIFRQ0BIAEqAgAgCyADKgIAk2BFDQELIAAgBSACIAMgBBCrAQsgB0EQaiQAC4IHAQd/IwBBoAFrIgEkAAJAIAAtABBBAUcNACAAIAAoAgRBAWoiAjYCBCAAKAIAIAJHBEAgAiAAKAIMbw0BCyABQQA2AmggAUHU9AE2AkwgAUHA9AE2AhQgAUHk9AEoAgAiBDYCDCABQQxqIgUiAiAEQQxrKAIAakHo9AEoAgA2AgAgAUEANgIQIAIgASgCDEEMaygCAGoiAiABQRhqIgQQigIgAkEAOgBQIAJBADYCSCABQez0ASgCACICNgIUIAFBFGoiBiACQQxrKAIAakHw9AEoAgA2AgAgAUHg9AEoAgAiAjYCDCAFIAJBDGsoAgBqQfT0ASgCADYCACABQdT0ATYCTCABQaz0ATYCDCABQcD0ATYCFCAEEM8BIgdBkO0BNgIAIAH9DAAAAAAAAAAAAAAAAAAAAAD9CwI4IAFBGDYCSCAGIAAoAhQgAEEUaiAALAAfIgRBAEgiAhsgACgCGCAEIAIbEBpBlypBARAaGiAAKAIIIgIgACgCBGwgACgCAG0hBCACQQBKBEADQCAGQc4tQckrQfrLACADIARGGyADIARIG0EBEBoaIANBAWoiAyAAKAIISA0ACwsgBkHsywBBAhAaIAAoAgRB5ABsIAAoAgBtEHNB/MsAQQMQGhoCQAJ/IAEoAkgiAkEQcQRAIAEoAkQiAyABKAIwIgJJBEAgASACNgJEIAIhAwsgAUEsagwBCyACQQhxRQRAQQAhAyABQQA6AAsgASECDAILIAEoAighAyABQSBqCyECAkAgAyACKAIAIgVrIgNB+P///wdJBEAgA0ELTwRAIANBB3IiBEEBahASIQIgASAEQf////8HazYCCCABIAI2AgAgASADNgIEDAILIAEgAzoACyABIQIgAw0BQQAhAwwCCxBxAAsgA0UNACACIAUgA/wKAAALIAIgA2pBADoAAEGAhQMgASgCACABIAEsAAsiA0EASCICGyABKAIEIAMgAhsQGhCNASABLAALQQBIBEAgASgCCBogASgCABARCyAAKAIEIAAoAgBGBEBBgIUDQYTMAEEBEBoaCyABQdz0ASgCACIANgIMIABBDGsoAgAgAUEMampB/PQBKAIANgIAIAFBgPUBKAIANgIUIAdBkO0BNgIAIAEsAENBAEgEQCABKAJAGiABKAI4EBELIAcQjgEaIAFBzABqEFYaCyABQaABaiQAC6j+AwVRfw98BHsDfgV9IwBBsAFrIh8kACAEKAJoIQUgBCgCWCEHIAEgASgCACgCABEAACEGIB9CADcCkAEgH0EANgKYASAfIAcgBkEBayIJQQAgBiAJTxsgBiAHShs2ApwBAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAYEQCAGQdaq1aoBTw0BIB8gBkEMbCIJEBIiBzYCkAEgHyAHIAlqNgKYASAJQQxrIgkgCUEMcGtBDGoiCQRAIAdBACAJ/AsACyAfIAcgCWo2ApQBCyAfIAE2AqABIB8gH0GQAWoiATYCqAEgHyABNgKAASAfIB9BnAFqNgKkASAfIB8pA6ABNwN4IAUhASAfQfgAaiEJIwBBQGoiByQAAkAgBkUNAAJAIAFBAk4EQEEBIQUgBkEBRw0BCyAJQQAgBhCEBAwBCwJ/IAEgBk4EQCAGIQFBAAwBCyAGIAYgAW4iBSABbGsLIQMgB0EANgI8IAdCADcCNAJAIAFBgICAgARJBEAgByABQQJ0IgAQEiICNgI0IAcgACACaiIENgI8IAAEQCACQQAgAPwLAAsgByAENgI4IAdBADYCMCAHQQA2AiwgB0IANwIkIAdBJGogARDgASAHQQA2AiAgBygCKCAHIAUgA0EASmo2AhwgByAJNgIQIAcoAiwgByAHQTRqNgIUSQRAQQQQEhBpIQFBGBASIgAgATYCACAAIAcpAxA3AgQgACAHKAIgNgIMIAAgBygCMDYCECAAIAcoAhw2AhQMAgsCQCAHKAIoIAcoAiQiAWtBAnVBAWoiAEGAgICABEkEQEH/////AyAHKAIsIAFrIgFBAXUiAiAAIAAgAkkbIAFB/P///wdPGyIABEAgAEGAgICABE8NByAAQQJ0EBIaC0EEEBIQaSEBQRgQEiIAIAE2AgAgACAHKQIQNwIEIAAgBygCIDYCDCAAIAcoAjA2AhAgACAHKAIcNgIUDAELDAQLECAACwwCCxAgAAsgB0FAayQAIB8oApABIQEgH0EANgKQASAfIAE2AoQBIB8pApQBIWkgH0IANwKUASAfIGk3AogBIB9BCGoiLCAEQfAA/AoAACMAQcAUayIjJAAgI0HvpIzUAzYCYCAjICwrAwC2Imw4AlggIyAsKwMItjgCXCAjICwoAmgiBDYCZCAfQYQBaiIBKAIAIQUgHygCiAEhBiAjIGyO/AAiBzYCbCAjIGwgB7KTOAJoICMgI0HoAGo2AnggIyABNgJwICMgI0HYAGo2AnwgIyAjQewAajYCdCAjICP9AANw/QsDACAEIQEjAEFAaiIHJAACQCAGIAVrQQxtIgVFDQACQCABQQJOBEBBASEGIAVBAUcNAQsgI0EAIAUQgwQMAQsCfyABIAVPBEAgBSEBQQAMAQsgBSAFIAFuIgYgAWxrCyEDIAdBADYCPCAHQgA3AjQCQCABQYCAgIAESQRAIAcgAUECdCIAEBIiAjYCNCAHIAAgAmoiBDYCPCAABEAgAkEAIAD8CwALIAcgBDYCOCAHQQA2AjAgB0EANgIsIAdCADcCJCAHQSRqIAEQ4AEgB0EANgIgIAcoAiggByAGIANBAEpqNgIcIAcgIzYCECAHKAIsIAcgB0E0ajYCFEkEQEEEEBIQaSEBQRgQEiIAIAE2AgAgACAHKQMQNwIEIAAgBygCIDYCDCAAIAcoAjA2AhAgACAHKAIcNgIUDAILAkAgBygCKCAHKAIkIgFrQQJ1QQFqIgBBgICAgARJBEBB/////wMgBygCLCABayIBQQF1IgIgACAAIAJJGyABQfz///8HTxsiAARAIABBgICAgARPDQcgAEECdBASGgtBBBASEGkhAUEYEBIiACABNgIAIAAgBykCEDcCBCAAIAcoAiA2AgwgACAHKAIwNgIQIAAgBygCHDYCFAwBCwwECxAgAAsMAgsQIAALIAdBQGskACAsKwMQtiFtIwBBIGsiASQAIB8oAoQBIQogHygCiAEhCSABQQA2AhwgAUIANwIUIAkgCmtBDG0hBQJAIAkgCkYNACAFQYCAgIAESQRAIAEgBUECdCIFEBIiGzYCFCABIAUgG2oiBzYCHEEAIQYgBUUiCUUEQCAbQQAgBfwLAAsgASAHNgIYIAUQEiEIIAlFBEAgCEEAIAX8CwALA0AgCiAGQQxsIglqIgcoAgAiBSAHKAIEIgcgAUEIakE+IAcgBWtBA3VnQQF0a0EAIAUgB0cbQQEQqQIgCCAGQQJ0aiAfKAKEASIKIAlqIgUoAgQgBSgCAGtBA3U2AgAgBkEBaiIGIB8oAogBIgkgCmtBDG1JDQALDAELDAELAkAgCSAKRg0AQwAAgD8gbZMhcANAIAogEUEMbGoiBSgCACIXIAUoAgQiFEcEQAJAA0ACQCAfKAKEASAXKAIAIgdBDGxqIQUCQAJAIBsgB0ECdCIJaiIKKAIAIgYgCCAJaiIcKAIATw0AIAUoAgAhDANAIBEgDCAGQQN0aiIJKAIAIg1KBEAgCiAGQQFqIgY2AgAgBiAcKAIASQ0BDAILCyANIBFHDQAgByARTA0BIBcqAgQibiAJKgIEIm+UIWwCQCBtQwAAgD9bBEAgbiBvkiBskyFsDAELIG1DAAAAAFsNACBtIG4gb5IgbJOUIHAgbJSSIWwLIBcgbDgCBCAJIGw4AgQMAQsgbUMAAIA/WwRAIAUoAgQiBiAFKAIIIgpJBEAgBiARNgIAIAYgFyoCBDgCBCAFIAZBCGo2AgQMAgsgBiAFKAIAIgZrIgdBA3UiHEEBaiIJQYCAgIACTw0CIAdB/////wEgCiAGayIKQQJ1IgwgCSAJIAxJGyAKQfj///8HTxsiCQR/IAlBgICAgAJPDQogCUEDdBASBUEACyIMaiIKIBE2AgAgCiAXKgIEOAIEIAogHEEDdGshHCAHBEAgHCAGIAf8CgAACyAFIAwgCUEDdGo2AgggBSAKQQhqIgc2AgQgBSAcNgIAIAYEQCAGEBELIAUgBzYCBAwBCyBtQwAAAABbBEAgF0EANgIEDAELIBcgbSAXKgIElCJsOAIEAkAgBSgCBCIGIAUoAggiCkkEQCAGIGw4AgQgBiARNgIAIAZBCGohBgwBCyAGIAUoAgAiB2siCUEDdSIMQQFqIgZBgICAgAJPDQICQEH/////ASAKIAdrIgpBAnUiHCAGIAYgHEkbIApB+P///wdPGyIKRQRAQQAhBgwBCyAKQYCAgIACTw0KIApBA3QQEiEGIBcqAgQhbAsgBiAJaiIcIGw4AgQgHCARNgIAIBwgDEEDdGshDCAJBEAgDCAHIAn8CgAACyAFIAYgCkEDdGo2AgggBSAcQQhqIgY2AgQgBSAMNgIAIAdFDQAgBxARCyAFIAY2AgQLIBQgF0EIaiIXRw0BDAILCwwECyAfKAKEASEKIB8oAogBIQkLIBFBAWoiESAJIAprQQxtSQ0ACwJAIG1DAAAAAFwNACAJIApGDQADQEEAIREgAUEANgIQIAFCADcCCCAKKAIEIhcgCigCACIGRwRAIBcgBmsiBUEASA0EIAEgBRASIhE2AgwgASARNgIIIAEgBSARajYCECAKKAIEIRcgCigCACEGCyAGIBdHBEADQCAGKgIEQwAAAABcBEACQCABKAIQIhwgEUsEQCARIAYpAgA3AgAgEUEIaiERDAELIBEgASgCCCIFayIHQQN1IgxBAWoiG0GAgICAAk8NByAHQf////8BIBwgBWsiEUECdSIcIBsgGyAcSRsgEUH4////B08bIhsEfyAbQYCAgIACTw0JIBtBA3QQEgVBAAsiFGoiESAGKQIANwIAIBEgDEEDdGshHCAHBEAgHCAFIAf8CgAACyABIBQgG0EDdGo2AhAgASARQQhqIhE2AgwgASAcNgIIIAVFDQAgBRARCyABIBE2AgwLIBcgBkEIaiIGRw0ACyABKAIIIREgCigCACEGCyAKIBE2AgAgASAGNgIIIAogASgCDDYCBCAKKAIIIQUgCiABKAIQNgIIIAEgBTYCECAGBEAgASAGNgIMIAYQEQsgCkEMaiIKIAlHDQALIB8oAogBIQkgHygChAEhCgsgCSAKRg0AA0AgCigCACIFIAooAgQiBiABQQhqQT4gBiAFa0EDdWdBAXRrQQAgBSAGRxtBARCpAiAKQQxqIgogCUcNAAsLIAgEQCAIEBELIAEoAhQiBQRAIAEoAhwaIAUQEQsgAUEgaiQAAkAgLC0AQCI9QQFNBEACQAJ/IwBBIGsiCSQAIB8oAogBIgEgHygChAEiBmsiB0EMbSEFAkAgASAGRgR/QQAFIAlBBBASIgg2AhQgCSAIQQRqIgE2AhwgCEEANgIAIAlBADYCECAJQgA3AgggB0EASA0BIAUQEiEcIAUEQCAcQQAgBfwLAAsgHEEBOgAAIAEhBUEBIRcDQCAFQQRrIgUoAgAhBiAJIAU2AhggHygChAEgBkEMbGoiBigCACIRIAYoAgQiFEcEQCAJKAIYIQcgCSgCHCEbIAkoAhQhBgJAAkADQAJAIBwgESgCACIKai0AAEUEQAJAIAEgBUsEQCAFIAo2AgAgBUEEaiEHDAELIAUgCGsiBUECdSINQQFqIgxBgICAgARPDQICQEH/////AyABIAhrIgFBAXUiEyAMIAwgE0kbIAFB/P///wdPGyIBRQRAQQAhGwwBCyABQYCAgIAETw0FIAFBAnQQEiEbIBEoAgAhCgsgBSAbaiIHIAo2AgAgByANQQJ0ayEGIAUEQCAGIAggBfwKAAALIAdBBGohByAbIAFBAnRqIRsgCARAIAgQEQsgBiEIIBshAQsgHCARKAIAakEBOgAAIBdBAWohFyAHIQULIBQgEUEIaiIRRw0BDAMLCyAJIBs2AhwgCSAGNgIUIAkgBzYCGAwKCyAJIBs2AhwgCSAGNgIUIAkgBzYCGAwKCyAJIBs2AhwgCSAGNgIUIAkgBzYCGAsgBSAIRw0ACyAfKAKEASEBIB8oAogBIBwQESAIBEAgCBARCyABa0EMbSAXRwsgCUEgaiQADAELDAQLRQRAAn8gAyEbIAQhAUEAIQgjAEGQAmsiFiQAIB8oAoQBIQQgHygCiAEhBSAWQQA2AoQCIBZCADcC/AEgBSAEayI+QQxtITACQAJAAkACfyAEIAVHBEAgMEGAgICAAk8NCiAWIDBBA3QiBBASIg42AvwBIBYgBCAOaiIFNgKEAiAEBEAgDkEAIAT8CwALIBYgBTYCgAILIDBBAnRBBGoiBBASIgpBADYCACAEIApqIQwgCkEEaiERID5BAEoEQEEBIDAgMEEBTRshF0EAIQQDQCAIIB8oAoQBIARBDGxqIgYoAgQgBigCAGtBA3VqQQFqIQgCQAJAAkAgDCARSwRAIBEgCDYCACARQQRqIREMAQsgESAKayIHQQJ1IhxBAWoiBUGAgICABE8NASAHQf////8DIAwgCmsiCUEBdSIRIAUgBSARSRsgCUH8////B08bIgkEfyAJQYCAgIAETw0QIAlBAnQQEgVBAAsiDGoiESAINgIAIBEgHEECdGshBSAHBEAgBSAKIAf8CgAACyARQQRqIREgDCAJQQJ0aiEMIAoEQCAKEBELIAUhCgsgDiAEQQN0aiIFKwMAIVYgBigCACIJIAYoAgQiBkYNAQNAIFYgCSoCBLugIVYgCUEIaiIJIAZHDQALDAELIBYgDDYC+AEgFiARNgL0ASAWIAo2AvABDAwLIAUgVp85AwAgBEEBaiIEIBdHDQALCyAWIAw2AvgBIBYgETYC9AEgFiAKNgLwAUEAIQkgFkEANgLsASAWQgA3AuQBAn8CQCAIBEAgCEGAgICAAkkNAQwMCyAWQgA3AtwBQQAhBEEAIQhBAAwBCyAIQQN0IgUQEiEEIBYgCEECdCIGEBIiCDYC3AEgFiAGIAhqIgk2AuABIAQgBWoLIRcgPkEATARAIAQhByAIDAELQQEgMCAwQQFMGyELIAQhBwNAAkAgHygChAEgD0EMbGoiHCgCACIJIBwoAgQiEEYNACAWKAL8ASISIA9BA3RqIRkDQCAJKAIAIg4gD04NAQJAIBYoAtwBIgUgFigC4AEiBkkEQCAFIA42AgAgBUEEaiEFDAELIAUgCGsiFEECdSIaQQFqIgVBgICAgARPDQYCQEH/////AyAGIAhrIgZBAXUiDSAFIAUgDUkbIAZB/P///wdPGyINRQRAQQAhBQwBCyANQYCAgIAETw0PIA1BAnQQEiEFIAkoAgAhDgsgBSAUaiITIA42AgAgEyAaQQJ0ayEGIBQEQCAGIAggFPwKAAALIBYgBSANQQJ0ajYC4AEgFiATQQRqIgU2AtwBIAgEQCAIEBELIAYhCAsgFiAFNgLcASAJKgIEuyASIAkoAgBBA3RqKwMAoyAZKwMAoyFWAkAgByAXSQRAIAcgVjkDACAHQQhqIQcMAQsgByAEayIGQQN1IhRBAWoiBUGAgICAAk8NBSAGQf////8BIBcgBGsiB0ECdSIOIAUgBSAOSRsgB0H4////B08bIg4EfyAOQYCAgIACTw0PIA5BA3QQEgVBAAsiF2oiByBWOQMAIAcgFEEDdGshBSAGBEAgBSAEIAb8CgAACyAHQQhqIQcgFyAOQQN0aiEXIAQEQCAEEBELIAUhBAsgCUEIaiIJIBBHDQALCyAWIBc2AuwBIBYgBzYC6AEgFiAINgLYASAWIAQ2AuQBAkAgFigC3AEiBSAWKALgASIOSQRAIAUgDzYCACAFQQRqIQUMAQsgBSAIayIFQQJ1IhRBAWoiBkGAgICABE8NCyAFQf////8DIA4gCGsiDkEBdSINIAYgBiANSRsgDkH8////B08bIgYEfyAGQYCAgIAETw0NIAZBAnQQEgVBAAsiDWoiDiAPNgIAIA4gFEECdGshFCAFBEAgFCAIIAX8CgAACyAWIA0gBkECdGo2AuABIBYgDkEEaiIFNgLcASAWIBQ2AtgBIAhFDQAgCBARCyAWIAU2AtwBAkAgByAXSQRAIAdCgICAgICAgPg/NwMAIAdBCGohByAWKALkASEFIBYoAuwBIRcMAQsgByAEayIGQQN1Ig5BAWoiBUGAgICAAk8NCyAGQf////8BIBcgBGsiB0ECdSIIIAUgBSAISRsgB0H4////B08bIggEfyAIQYCAgIACTw0NIAhBA3QQEgVBAAsiF2oiB0KAgICAgICA+D83AwAgByAOQQN0ayEFIAYEQCAFIAQgBvwKAAALIAdBCGohByAXIAhBA3RqIRcgBEUNACAEEBELIBYoAtgBIQgCQCAcKAIEIAlGBEAgBSEEDAELIBYoAvwBIg0gD0EDdGohEyAFIQQDQAJAIBYoAtwBIgUgFigC4AEiDkkEQCAFIAkoAgA2AgAgBUEEaiEFDAELIAUgCGsiBUECdSIQQQFqIgZBgICAgARPDQYgBUH/////AyAOIAhrIg5BAXUiFCAGIAYgFEkbIA5B/P///wdPGyIOBH8gDkGAgICABE8NDyAOQQJ0EBIFQQALIhJqIhQgCSgCADYCACAUIBBBAnRrIQYgBQRAIAYgCCAF/AoAAAsgFiASIA5BAnRqNgLgASAWIBRBBGoiBTYC3AEgCARAIAgQEQsgBiEICyAWIAU2AtwBIAkqAgS7IA0gCSgCAEEDdGorAwCjIBMrAwCjIVYCQCAHIBdJBEAgByBWOQMAIAdBCGohBwwBCyAHIARrIgZBA3UiFEEBaiIFQYCAgIACTw0FIAZB/////wEgFyAEayIHQQJ1Ig4gBSAFIA5JGyAHQfj///8HTxsiDgR/IA5BgICAgAJPDQ8gDkEDdBASBUEACyIXaiIHIFY5AwAgByAUQQN0ayEFIAYEQCAFIAQgBvwKAAALIAdBCGohByAXIA5BA3RqIRcgBARAIAQQEQsgBSEECyAJQQhqIgkgHCgCBEcNAAsLIBYgFzYC7AEgFiAHNgLoASAWIAg2AtgBIBYgBDYC5AEgCyAPQQFqIg9HDQALIBYoAuABIQkgFigC3AELIQUgFkEANgLsASAWQgA3AuQBIBZBADYC4AEgFkIANwLYASAWQQE6AKQBIBYgDDYCoAEgFiARNgKcASAWIAo2ApgBIBYgCTYClAEgFiAFNgKQASAWIAg2AowBIBYgFzYCiAEgFiAHNgKEASAWIAQ2AoABIBYgMDYCeCAWIDA2AnQgFiABNgJ8IBb9DAAAAAAAAAAAAAAAAAAAAAD9CwLIASAW/QwAAAAAAAAAAAAAAAAAAAAA/QsCuAEgFv0MAAAAAAAAAAAAAAAAAAAAAP0LAqgBIAFBAk4EQCMAQRBrIhEkACAWQfQAaiIKKAIkIAooAgBBAnRqKAIAIgggCCAKKAIIIgluIgYgCWxrIApBNGohAQJAIAooAjggCigCNCIHa0ECdSIEIAlJBEAgASAJIARrEC8gCigCCCEJDAELIAQgCU0NACAKIAcgCUECdGo2AjgLQQBHIQcgCkFAayEEAkAgCigCRCAKKAJAIg5rQQJ1IgUgCUkEQCAEIAkgBWsQLyAKKAIIIQkMAQsgBSAJTQ0AIAogDiAJQQJ0ajYCRAsgBiAHaiEFIAlBAEoEQCAEKAIAIRcgASgCACEcQQAhASAFIQZBACEOA0AgHCAOQQJ0Ig9qIAE2AgAgASAKKAIAIgQgASAEShshByAKKAIkIQwgASEEA0ACQCAHIAQiAUYEQCAHIQEMAQsgDCABQQFqIgRBAnRqKAIAIAZNDQELCyAPIBdqIAE2AgAgBSAGaiEGIA5BAWoiDiAJRw0ACwsgCkHMAGohFwJAIAlBAWoiBCAKKAJQIAooAkwiBmtBAnUiAUsEQCAXIAQgAWsQLyAKKAIIQQFqIQQMAQsgASAETQ0AIAogBiAEQQJ0ajYCUAsgCigCACEBQQAhBiARQQA2AgwgEUIANwIEIAEEQCABQYCAgIAETw0KIBEgAUECdCIBEBIiBjYCBCARIAEgBmoiBzYCDCABBEAgBkEAIAH8CwALIBEgBzYCCAsCQCAKKAJcIgEgCigCWCIJa0EMbSIHIARJBEACQAJAAkACQAJAIAQgB2siBCAKKAJgIg4gASIGa0EMbU0EQCAKIAQEfyABIARBDGxqIQcDQCAGQQA2AgggBkIANwIAIBEoAggiASARKAIEIglHBEAgASAJayIBQQBIDQQgBiABEBIiBDYCBCAGIAQ2AgAgBiABIARqIg42AgggAQRAIAQgCSAB/AoAAAsgBiAONgIECyAGQQxqIgYgB0cNAAsgBwUgBgs2AlwMBQsgBiAKKAJYIgdrIglBDG0gBGoiAUHWqtWqAU8NAUEAIQZB1arVqgEgDiAHa0EMbSIOQQF0IhwgASABIBxJGyAOQarVqtUATxsiDgRAIA5B1qrVqgFPDQMgDkEMbBASIQYLIAYgCWoiASAEQQxsaiEcIAYgDkEMbGohDCABIQYDQCAGQQA2AgggBkIANwIAIBEoAggiBCARKAIEIg9HBEAgBCAPayIEQQBIDQUgBiAEEBIiDjYCBCAGIA42AgAgBiAEIA5qIhQ2AgggBARAIA4gDyAE/AoAAAsgBiAUNgIECyAGQQxqIgYgHEcNAAsgASAJQXRtQQxsaiEBIAkEQCABIAcgCfwKAAALIAogDDYCYCAKIBw2AlwgCiABNgJYIAcEQCAHEBELDAQLEBMACxATAAsQHwALEBMACyARKAIEIQYMAQsgBCAHTw0AIAEgCSAEQQxsaiIHRwRAA0AgAUEMayIEKAIAIgkEQCABQQhrIAk2AgAgAUEEaygCABogCRARCyAEIgEgB0cNAAsLIAogBzYCXAsgBgRAIBEgBjYCCCARKAIMGiAGEBELIAooAgQhByARQQA2AgwgEUIANwIEAkAgB0UEQEEAIQkMAQsgB0GAgICABE8NCiAHQQJ0IgEQEiEJIAEEQCAJQQAgAfwLAAsLAkAgCEUNACAKKAIYIRxBACEGQQAhASAIQQRPBEAgCEF8cSEPQQAhDgNAIAkgHCABQQJ0aiIEKAIAQQJ0aiIMIAwoAgBBAWo2AgAgCSAEKAIEQQJ0aiIMIAwoAgBBAWo2AgAgCSAEKAIIQQJ0aiIMIAwoAgBBAWo2AgAgCSAEKAIMQQJ0aiIEIAQoAgBBAWo2AgAgAUEEaiEBIA5BBGoiDiAPRw0ACwsgCEEDcSIERQ0AA0AgCSAcIAFBAnRqKAIAQQJ0aiIIIAgoAgBBAWo2AgAgAUEBaiEBIAZBAWoiBiAERw0ACwsgCigCCCIOQQBKBEAgFygCACEXQQAhCEEAIQQgBSEGQQAhAQNAAkAgASAHTg0AIAQgBksNAANAIAkgAUECdGooAgAgBGohBCABQQFqIgEgB04NASAEIAZNDQALCyAXIAhBAWoiCEECdGogATYCACAFIAZqIQYgCCAKKAIIIg5IDQALCwJAIAooAgBBAEwNACAKKAIkIQYgCigCWCIcKAIAIQdBACEBIA5BAEoEQCAKKAJMIQ8DQCAGIAFBAWoiBUECdGooAgAhBCAHIAFBAnQiF2ogBiAXaigCACIBNgIAIAooAhghDEEAIQgDQCAIQQFqIQgCQCABIARPDQAgDyAIQQJ0aigCACEUA0AgDCABQQJ0aigCACAUTg0BIAFBAWoiASAERw0ACyAEIQELIBwgCEEMbGooAgAgF2ogATYCACAIIA5HDQALIAUiASAKKAIASA0ACwwBCwNAIAcgAUECdCIEaiAEIAZqKAIANgIAIAFBAWoiASAKKAIASA0ACwsgCQRAIAkQEQsgEUEQaiQACyAWQQA2AmAgFkLxKjcDWCAWQQA6AFIgFkGBAjsBUCAWQoeAgICA/QA3A0ggFkKAgICAgICA+L9/NwNAIBb9DAAAAAAAAPC/8WjjiLX45D79CwQwIBb9DAAAAAAAAAAAAAAAAAAAAAD9CwMYIBb9DAAAAAAAAAAAAAAAAAAAAAD9CwMIIBZBCGohNSAWQRRqITYgFkEgaiEOIBZBMGohFEEAIQRBACEPIwBB4BdrIhAkAAJAAkACQAJAAkACQAJAIAJBAWoiCEEAQQQgFkH0AGoiBS0AMCIBGyAFaigCACIGIAVBBEEAIAEbaigCACIBIAEgBkobIgFKBEAgASEIIBQtACINAUEIEBdBqxcQLUGg4wJBBBABAAsgASAIRw0AIBQtACFFDQELAkACQCABQQVMBEAgFC0AIEEBcQ0BCyAULQAhQQFHDQEgCEEBdCABSA0BCyAIIREgDiEcQQAhDiMAQcABayIgJAAgBUEAQQQgBS0AMCIBG2ooAgAhBCAFQQRBACABG2ooAgAhASAg/QwAAAAAAAAAAAAAAAAAAAAA/QsDMCAgQUBr/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAgQQA2AE8gIP0MAAAAAAAAAAAAAAAAAAAAAP0LA4ABICBBADYCkAEgIEIANwMoICBBADYCVCAgQQA2AmQgIEJ/NwJcICD9DAAAAAAAAAAAAAAAAAAAAAD9CwNwICD9DAAAAAAAAAAAAAAAAAAAAAD9CwOYASAgQQA2ArABICBBEDYCqAEgIEEoaiIaIAEgBEEoEPsDIwBBIGsiDyQAIAVBAEEEIAUiFy0AMCIBG2ooAgAhCSAFQQRBACABG2ooAgAhCiAgQQxqIghBADYCCCAIQgA3AgACQAJAAkACQAJAIAkgCnJBAE4EQAJAIApFDQAgCUUNACAKQf////8HIAltSg0cCyAIIAkgCmwgCiAJEBsgCCgCBCEBIAgoAgghBCAPQgA3AxAgDyAENgIMIA8gATYCCCABIARyQQBOBEAgCCAPQQhqEDICQCAIKAIEIg0gCCgCCGwiBkEATA0AIA8rAxAhViAIKAIAIQUCQCAGQQFGBEAgBSEEDAELIAUgBkH+////B3EiB0EDdGohBCBW/RQhZUEAIQEDQCAFIAFBA3RqIGX9CwMAIAFBAmoiASAHRw0ACyAGIAdGDQELIAQgVjkDAAsgFy0AMEUEQCAKQQBMDQQgCCgCACEUIBcoAhghCSAXKAIMIQwgFygCJCITKAIAIQVBACEEDAMLIAlBAEwNAyAIKAIAIRMgFygCGCEKIBcoAgwhDCAXKAIkIgsoAgAhBUEAIQYDQAJAIAUiBCALIAYiAUEBaiIGQQJ0aigCACIFTw0AIBMgASANbEEDdGohFEEAIQcgBSAEIgFrQQNxIhIEQANAIBQgCiABQQJ0aigCAEEDdGogDCABQQN0aisDADkDACABQQFqIQEgB0EBaiIHIBJHDQALCyAEIAVrQXxLDQADQCAUIAogAUECdGooAgBBA3RqIAwgAUEDdGorAwA5AwAgFCAKIAFBAWoiBEECdGooAgBBA3RqIAwgBEEDdGorAwA5AwAgFCAKIAFBAmoiBEECdGooAgBBA3RqIAwgBEEDdGorAwA5AwAgFCAKIAFBA2oiBEECdGooAgBBA3RqIAwgBEEDdGorAwA5AwAgAUEEaiIBIAVHDQALCyAGIAlHDQALDAMLDCYLDCgLA0ACQCAFIgEgEyAEIgdBAWoiBEECdGooAgAiBU8NACABQQFqIQYgFCAHQQN0aiEHIAUgAWtBAXEEQCAHIAkgAUECdGooAgAgDWxBA3RqIAwgAUEDdGorAwA5AwAgBiEBCyAFIAZGDQADQCAHIAkgAUECdGooAgAgDWxBA3RqIAwgAUEDdGorAwA5AwAgByAJIAFBAWoiBkECdGooAgAgDWxBA3RqIAwgBkEDdGorAwA5AwAgAUECaiIBIAVHDQALCyAEIApHDQALCyAPQSBqJAAgICgCVCEBQQAhBSMAQYADayIZJAAgGiAIKAIEIAgoAgggARD7AwJAAkACQAJAAkACQAJAAkAgCCgCCCIEIBooAoABSARAIBn9DAAAAAAAAAAAAAAAAAAAAAD9CwNQIBn9DAAAAAAAAAAAAAAAAAAAAAD9CwNgIBlBADYAbyAZ/QwAAAAAAAAAAAAAAAAAAAAA/QsDqAEgGf0MAAAAAAAAAAAAAAAAAAAAAP0LA7gBIBn9DAAAAAAAAAAAAAAAAAAAAAD9CwPIASAZQgA3AdYBIBlBADYCiAIgGf0MAAAAAAAAAAAAAAAAAAAAAP0LA7ACIBn9DAAAAAAAAAAAAAAAAAAAAAD9CwOgAiAZQgA3AcYCIBlCADcDwAIgGUEANgL4AiAZQgA3A0ggGUEANgJ0IBlCADcDoAEgGUEANgKYASAZQgA3A5ABIBlBADYChAEgGUJ/NwJ8IBn9DAAAAAAAAAAAAAAAAAAAAAD9CwP4ASAZ/QwAAAAAAAAAAAAAAAAAAAAA/QsDkAIgGf0MAAAAAAAAAAAAAAAAAAAAAP0LA+gCIBlByABqIAggARDfASAaQQE6ACQgGS0AbCIBRQ0BIBogGSgCaCIENgIgAkACQCAEDgMAAQABCwJAIBotACdFBEAgGi0AKEEBcUUNAQsgGS0Ab0UEQCAZLQBwQQFxRQ0gCyAZKAJIIQYgGiAZQcgAahBNAkAgGigCCCAaKAIEbCIIQQBMDQAgGigCACEHQQAhBAJAIAhBBEkNACAHIAZrQRBJDQAgCEH+////B3EhBEEAIQEDQCAHIAFBA3QiCWogBiAJav0AAwD9CwMAIAFBAmoiASAERw0ACyAEIAhGDQELIAggBCIBa0EDcSIJBEADQCAHIAFBA3QiCmogBiAKaisDADkDACABQQFqIQEgBUEBaiIFIAlHDQALCyAEIAhrQXxLDQADQCAHIAFBA3QiBGogBCAGaisDADkDACAHIARBCGoiBWogBSAGaisDADkDACAHIARBEGoiBWogBSAGaisDADkDACAHIARBGGoiBGogBCAGaisDADkDACABQQRqIgEgCEcNAAsLIBktAGwhAQsCQAJAIBotAClFBEAgGi0AKkEBcUUNAQsgAUEBcUUNIyAZLQBxRQRAIBktAHJBAXFFDSILIBkoAlQhBiAaQQxqIBlB1ABqEE0CQCAaKAIUIBooAhBsIghBAEwNACAaKAIMIQdBACEFQQAhBAJAIAhBBEkNACAHIAZrQRBJDQAgCEH+////B3EhBEEAIQEDQCAHIAFBA3QiCWogBiAJav0AAwD9CwMAIAFBAmoiASAERw0ACyAEIAhGDQELIAggBCIBa0EDcSIJBEADQCAHIAFBA3QiCmogBiAKaisDADkDACABQQFqIQEgBUEBaiIFIAlHDQALCyAEIAhrQXxLDQADQCAHIAFBA3QiBGogBCAGaisDADkDACAHIARBCGoiBWogBSAGaisDADkDACAHIARBEGoiBWogBSAGaisDADkDACAHIARBGGoiBGogBCAGaisDADkDACABQQRqIgEgCEcNAAsLIBktAGxBAXENAQwjCyABQQFxRQ0iCyAaQRhqIQEgGSgCYCEHIBkoAmQiBCAaKAIcRwRAIARBAEgNMSABIAQgBBAeIBooAhwgBEcNIQsCQCAEQQBMDQAgASgCACEIQQAhBUEAIQYCQCAEQQRJDQAgCCAHa0EQSQ0AIARB/v///wdxIQZBACEBA0AgCCABQQN0IglqIAcgCWr9AAMA/QsDACABQQJqIgEgBkcNAAsgBCAGRg0BCyAEIAYiAWtBA3EiCQRAA0AgCCABQQN0IgpqIAcgCmorAwA5AwAgAUEBaiEBIAVBAWoiBSAJRw0ACwsgBiAEa0F8Sw0AA0AgCCABQQN0IgVqIAUgB2orAwA5AwAgCCAFQQhqIgZqIAYgB2orAwA5AwAgCCAFQRBqIgZqIAYgB2orAwA5AwAgCCAFQRhqIgVqIAUgB2orAwA5AwAgAUEEaiIBIARHDQALCyAZLQBsRQ0hIBogGSgCeDYCMAsgGUHIAGoQpwIMBQsgBEEATA0oIAgoAgQiB0EATA0oQQEhASAIKAIAIgkrAwCZIVYCQCAHQQFGDQAgB0EBayIGQQFxIAdBAkcEQCAJQQhqIQ8gBkF+cSEGA0AgViAJIAFBA3QiDGorAwAiV5kiWCBYIFYgViBYYxsgVyBXYhsgViBWYhsiViAMIA9qKwMAIleZIlggWCBWIFYgWGMbIFcgV2IbIFYgVmIbIVYgAUECaiEBIAVBAmoiBSAGRw0ACwtFDQAgViAJIAFBA3RqKwMAIleZIlggWCBWIFYgWGMbIFcgV2IbIFYgVmIbIVYLIARBAUcEQEECIAQgBEECTBshDyAHQf7///8HcSEMIAdBAXEhFEEBIQYDQCAJIAYgB2xBA3RqIQpBACEBQQAhBSAHQQFHBEADQCBWIAogAUEDdGoiDSsDACJXmSJYIFggViBWIFhjGyBXIFdiGyBWIFZiGyJWIA0rAwgiV5kiWCBYIFYgViBYYxsgVyBXYhsgViBWYhshViABQQJqIQEgBUECaiIFIAxHDQALCyAUBEAgViAKIAFBA3RqKwMAIleZIlggWCBWIFYgWGMbIFcgV2IbIFYgVmIbIVYLIAZBAWoiBiAPRw0ACwsgVr1C////////////AINCgICAgICAgPj/AFoEQCAaQQM2AiAgGkEBOgAkDAULIBlBADYCRCAZQgA3AjxEAAAAAAAA8D8gViBWRAAAAAAAAAAAYRshVyAEIAdyIQECQCAaLQCEAUEBRgRAIAFBAEgNLSAZIFc5A1ggGSAINgJIIBkgBK0gB61CIIaENwNQIBlBPGogGUHIAGoQpAIgGSgCRCIPQQBMDQEgGSgCQCIGQQBMDQEgBkEBcSEUIAZB/v///wZxIQQgV/0UIWUgGSgCPCIMIAkgBiAPakEDdGpBCGtJIAkgDCAGIA9sQQN0aklxIAZBgICAgAFxQRx2ciAHQQFGIAZBA0txQX9zckEBcSENA0AgCSAOQQN0aiEIIAwgBiAObEEDdGohCkEAIQVBACEBAkAgDUUEQANAIAogBUEDdCIBaiABIAhq/QADACBl/fMB/QsDACAFQQJqIgUgBEcNAAsgBCIBIAZGDQELIAFBAXIhBSAUBEAgCiABQQN0aiAIIAEgB2xBA3RqKwMAIFejOQMAIAUhAQsgBSAGRg0AA0AgCiABQQN0aiAIIAEgB2xBA3RqKwMAIFejOQMAIAogAUEBaiIFQQN0aiAIIAUgB2xBA3RqKwMAIFejOQMAIAFBAmoiASAGRw0ACwsgDkEBaiIOIA9HDQALDAELIAFBAEgNLCAZIFc5A1ggGSAINgJIIBkgB60gBK1CIIaENwNQIBlBPGogGUHIAGoQpAIgGSgCRCAZKAJAbCIGQQBMDQAgGSgCPCEHQQAhAQJAIAZBBEkNACAHIAlrQRBJDQAgBkH+////B3EhASBX/RQhZUEAIQUDQCAHIAVBA3QiBGogBCAJav0AAwAgZf3zAf0LAwAgBUECaiIFIAFHDQALIAEgBkYNAQsgAUEBciEEIAZBAXEEQCAHIAFBA3QiAWogASAJaisDACBXozkDACAEIQELIAQgBkYNAANAIAcgAUEDdCIEaiAEIAlqKwMAIFejOQMAIAcgBEEIaiIEaiAEIAlqKwMAIFejOQMAIAFBAmoiASAGRw0ACwsCf0EAIQZBACEJIwBBEGsiTSQAIBlBPGoiASgCCCEEIAEoAgQhBSAZQcgAaiIlQQA2AgggJUIANwIAAkACQCAEIAVyQQBOBEACQCAFRQ0AIARFDQAgBUH/////ByAEbUoNDQsgJSAEIAVsIAUgBBAbIAEoAgghBCAlQgA3AgwgBEEASA0CIARBgICAgARPDQwgBEEBdCIFICUoAhBBAXRHBEAgJSgCDCIHBEAgB0EEaygCABARCyAlIAVBAEwEf0EABSAFQYCAgIACTw0OIAVBA3RBEGoQFiIFRQ0OIAVBcHEiByAFNgIMIAdBEGoLNgIMCyAlIAQ2AhAgJUEAOgAcICUgBDYCFCABKAIEIAEoAghIDQEgASgCACEFICUgARBNAkAgJSgCCCAlKAIEbCIIQQBMDQAgJSgCACEHQQAhBAJAIAhBBEkNACAHIAVrQRBJDQAgCEH+////B3EhBEEAIQEDQCAHIAFBA3QiCmogBSAKav0AAwD9CwMAIAFBAmoiASAERw0ACyAEIAhGDQELIAggBCIBa0EDcSIKBEADQCAHIAFBA3QiDmogBSAOaisDADkDACABQQFqIQEgCUEBaiIJIApHDQALCyAEIAhrQXxLDQADQCAHIAFBA3QiBGogBCAFaisDADkDACAHIARBCGoiCWogBSAJaisDADkDACAHIARBEGoiCWogBSAJaisDADkDACAHIARBGGoiBGogBCAFaisDADkDACABQQRqIgEgCEcNAAsLIwBB4ABrIhIkACAlKAIIISYgJSgCBCEyIBJBADYCXCASQgA3AlQCQCAyQSByQQBOBEAgMkEARyAyQf///x9KcQ0OIBJB1ABqIDJBBXQgMkEgEBsgEkEANgJQIBJCADcCSCAmQSByQQBIDQQgJkEARyAmQf///x9KcQ0OIBJByABqICZBBXQgJkEgEBsCQCAmIDIgJiAySBsiOEEATA0AQSAgOCA4QSBOGyE/A0AgJSgCBCEFICUoAgAhByASICYgBmsiBDYCNCASIDIgBmsiATYCMCASIAcgBkEDdCIJaiAFIAZsQQN0ajYCLCABIARyQQBIQQAgBxsNMSASIAU2AkQgEiAGNgJAIBIgBjYCPCASICU2AjggASAGckEASA0rIAQgBnJBAEgNKyAGIAUgAWtKDSsgBiAlKAIIIARrSg0rICUoAgwiBSAlKAIQIghBA3RqIQogCCAlKAIUIgcgByAIShsiDEEATiIUIAVFciEPAkACQAJAIARBME4EQCA/IDggBmsiDiAOID9KGyIOIAZqICZHDQELIA9FDTQgDEEASA0uIAVBACAIQQFrIgEgByABIAdIGyIBQQBIGw00IAFBAE4NAQwuCyAPRQ0zIBRFDS0gBUEAIAhBAWsiCCAHIAcgCEobQQBIIgcbDTMgBw0tIBIoAlghByABIA5yQQBIQQAgEigCVCIIGw0zIAFBAEgNLSAOQQBIDS0gASAHSg0tIBIoAlwgDkgNLSASIAg2AhggEiAONgIgIBIgATYCHCASIAEgByABIAcbIA5BAUYiARs2AiQgBCASKAJMIgdMBEAgEigCUCAOTg0CCwwtCyAKIAZBA3QiAWohKiABIAVBCGpqITIgEigCVCELQQAhByMAQdABayIKJAAgEigCNCEpIBIoAjAhBSAKQgA3AmQgBSEGAkAgC0UEQCAFQQBIDSwgCkHkAGogBSAFEB4gCigCZCELIBIoAjAhBgsCQCASKAIsIghBACAGQQBIG0UEQCASKAI4Ig5BBGohFCAFIAVBH3VBf3NxIS4gCkH4AGohJyAKQUBrIR4gDigCBCEPIAghBCApQQFrIjMhDCAFIQEDQCAKIBIpAiw3AgwgCiASKAI0NgIUIAcgEigCNE4NNyAKIAE2AhwgCiAIIAYgAWsiCUEDdGoiDTYCGCABQQBIQQAgBBsNNiAKIAY2AiggCiAINgIkIAogCv0AAgj9CwIsIAogDjYCPCAeIBIoAkQ2AgggHiASKQI8NwIAIAogDzYCVCAKIAc2AlAgCkEANgJMIAogCTYCWCAKIA4oAgQ2AmAgASAJckEASA0wIBQoAgAhBiAKIAFBAWsiGDYCcCAKIA1BCGo2AmwgAUEATEEAIAQbDTYgJyAKQRhqIg5BzAD8CgAAIApBATYCxAEgCiAKKAKcASgCBDYCzAEgByAuRg0wIA4gCkHsAGoiFCAHQQN0IhMgBCAGIAdsQQN0amogEyAqahCiAiASKAIsIQQgEigCMCEGIBIoAjgiCCgCBCEVIBIoAjQhCSAKIAw2AiAgCiABNgIcIAogBCAGIAFrIg9BA3RqIBUgCSAMayINbEEDdGo2AhggASAMckEASEEAIAQbDTYgCiAS/QACLP0LAiQgCiASKAJENgI8IAogEikCPDcCNCAKIA82AkAgCiANNgJEIAogCigCMCgCBDYCSCABIA9yQQBIDTAgDCANckEASA0wIAgoAgQhASAGQQBIQQAgBBsNNiAKIBIpAiw3AgwgCiASKAI0NgIUIAcgCU4NNyAKIBg2AnAgCiAGNgJ8IAogBCABIAdsQQN0aiIJNgJ4IAogCSAGIBhrIgZBA3RqNgJsIAogCv0AAgj9CwKAASAKIAg2ApABIAogEigCRDYCnAEgCiASKQI8NwKUASAKIAY2AqwBIAogATYCqAEgCiAHNgKkASAKQQA2AqABIAogCCgCBCIBNgK0ASAGIBhyQQBIDTBBACEPIwBBkAJrIggkACAEIAEgB2xBA3RqIBNqIiErAwAhVgJAIA4oAgQiAUEBRgRAIA4oAggiBkEASA06RAAAAAAAAPA/IFahIVYgDigCACEJIA4oAhgoAgQhDUEAIQQCQAJAIAYOAgMBAAsgDUEBRw0AIAZB/v///wdxIQQgVv0UIWVBACEBA0AgCSABQQN0aiIVIGUgFf0AAwD98gH9CwMAIAFBAmoiASAERw0ACyAEIAZGDQILIAYgBCIBa0EDcSIVBEADQCAJIAEgDWxBA3RqIh0gViAdKwMAojkDACABQQFqIQEgD0EBaiIPIBVHDQALCyAEIAZrQXxLDQEDQCAJIAEgDWxBA3RqIgQgViAEKwMAojkDACAJIAFBAWogDWxBA3RqIgQgViAEKwMAojkDACAJIAFBAmogDWxBA3RqIgQgViAEKwMAojkDACAJIAFBA2ogDWxBA3RqIgQgViAEKwMAojkDACABQQRqIgEgBkcNAAsMAQsgVkQAAAAAAAAAAGENACAIIA4oAggiDzYC+AEgCCALNgLwASAPQQBIDTAgDigCACEEIAggAUEBayIdNgKoASAIIARBCGo2AqQBIAggDzYCrAEgDyAdckEASEEAIAQbDTcgCCAOKAIwNgLgASAIIA79AAIg/QsC0AEgCCAOKQIYImk3AsgBIAggDikCEDcCwAEgCCAO/QACAP0LArABIAhCATcC5AEgCCBppygCBDYC7AEgAUEATA0xIBQoAgAhASAUKAIEIQQgCEEQaiAUQQhqQcQA/AoAACAIIAQ2AgwgCCABNgIIIAhB1ABqIgEgCEGkAWpBzAD8CgAAIAQgHUcNMiAIKAJcIA9HDTMCQCAPRQ0AIA9BA3QiBEUNACALQQAgBPwLAAsgCEKAgICAgICA+D83A4ACIAhBCGohCUQAAAAAAAAAACFWQQAhFSMAQbABayIGJAACQCABKAIIQQFGBEAgCCsDgAIhWCAJKAIAIgRBACAJKAIEIglBAEgbDTkgASgCACINQQAgASgCBCIBQQBIGw05IAEgCUcNNwJAIAlFDQAgCUEATA05IAQrAwAgDSsDAKIhVkEBIQEgCUEBRg0AIAlBAWsiJEEDcSEiIAlBAmtBA08EQCAkQXxxISQDQCBWIAQgAUEDdCIJaisDACAJIA1qKwMAoqAgBCAJQQhqIiZqKwMAIA0gJmorAwCioCAEIAlBEGoiJmorAwAgDSAmaisDAKKgIAQgCUEYaiIJaisDACAJIA1qKwMAoqAhViABQQRqIQEgFUEEaiIVICRHDQALCyAiRQ0AQQAhCQNAIFYgBCABQQN0IhVqKwMAIA0gFWorAwCioCFWIAFBAWohASAJQQFqIgkgIkcNAAsLIAgoAvABIgEgWCBWoiABKwMAoDkDAAwBCyAGIAlBzAD8CgAAIAZB0ABqIAFBzAD8CgAAIAYgCCgC+AE2AqgBIAYgCCkC8AE3A6ABIwBBEGsiCSQAAkAgBigCBCINQYCAgIACSQRAAkAgCCsDgAIhViAGKAJ0IRUgBigCWCAGKAJUIAYoAlAhJkEAIQEgBigCACIERQRAIA1BA3QhAQJAIA1BgIABTQRAIAkgAUEeakFwcWsiASQADAELIAFBEGoQFiIBRQ0CIAFBcHEiBCABNgIMIARBEGohAQsgASEECyAJIBUoAgQ2AgwgCSAmNgIIIAlBATYCBCAJIAQ2AgAgBigCoAEiBARAIAYoAqgBQQBIDTwLIAlBCGogCSAEQQEgVhBPAkAgDUGBgAFJDQAgAUUNACABQQRrKAIAEBELIAlBEGokAAwCCwsMMAsLIAZBsAFqJAAgDigCACIJQQAgDigCCCIGQQBIGw03IA4oAgRBAEwNOCAIKAL4ASAGRw06AkAgBkEATA0AIA4oAhgoAgQhFSAIKALwASENQQAhAQJAIAZBCEkNACAVQQFHDQAgCSAGQQN0IgRqIA1LIAkgBCANaklxDQAgBkH+////B3EhAUEAIQQDQCANIARBA3QiImoiJCAJICJq/QADACAk/QADAP3wAf0LAwAgBEECaiIEIAFHDQALIAEgBkYNAQsgAUEBciEEIAZBAXEEQCANIAFBA3RqIiIgCSABIBVsQQN0aisDACAiKwMAoDkDACAEIQELIAQgBkYNAANAIA0gAUEDdGoiBCAJIAEgFWxBA3RqKwMAIAQrAwCgOQMAIA0gAUEBaiIEQQN0aiIiIAkgBCAVbEEDdGorAwAgIisDAKA5AwAgAUECaiIBIAZHDQALCyAGQQBIDTkgDigCBEEATA04IAYgCCgC+AFHDToCQCAGQQBMDQAgISsDACFWIAgoAvABIQ0gDigCGCgCBCEVQQAhAQJAIAZBCEkNACAVQQFHDQAgDSAGQQN0IgRqIAlLIA0gBCAJaklxDQAgBkH+////B3EhASBW/RQhZUEAIQQDQCAJIARBA3QiImoiJCAk/QADACBlIA0gImr9AAMA/fIB/fEB/QsDACAEQQJqIgQgAUcNAAsgASAGRg0BCyABQQFyIQQgBkEBcQRAIAkgASAVbEEDdGoiIiAiKwMAIFYgDSABQQN0aisDAKKhOQMAIAQhAQsgBCAGRg0AA0AgCSABIBVsQQN0aiIEIAQrAwAgViANIAFBA3RqKwMAoqE5AwAgCSABQQFqIgQgFWxBA3RqIiIgIisDACBWIA0gBEEDdGorAwCioTkDACABQQJqIgEgBkcNAAsLIBQoAgQiAUEASA05ICErAwAhViAIQSBqIBRBzAD8CgAAIAggCCgC+AEiBDYCeCAIIFY5AxggCCABNgIQIAggCCkC8AE3A3AgHSAIKAIkRw00IAQgD0cNNEEAIQFBACEPIwBBEGsiBCEiIAQkACAIQQhqIgYoAhxBA3QiCUGAgAhNBEAgBCAJQR5qQXBxayIBJAALIAgoAnAhKCAiIAYgARCgAiIkKAIAIQ0CQCAIKAKsASImQQBMDQAgCCgCyAEoAgQhHSAkKAIEIQkgCCgCpAEiIUEAIAgoAqgBIgFBAEgbDTggCUEASA06IAEgCUcNOyABRQ0AIAlBAXEhLyAJQf7///8HcSEEICEgDSAJQQN0akkEfyANICEgHSAmQQFrbCAJakEDdGpJBUEACyAdQYCAgIABcUEcdnIgCUECSXJBAXEhKwNAIA8gCCgCrAFODTogISAPIB1sQQN0aiEVICggD0EDdGorAwAhVkEAIQECQCArRQRAIFb9FCFlA0AgFSABQQN0IgZqIi0gLf0AAwAgZSAGIA1q/QADAP3yAf3xAf0LAwAgAUECaiIBIARHDQALIAQiASAJRg0BCyABQQFyIQYgLwRAIBUgAUEDdCIBaiItIC0rAwAgViABIA1qKwMAoqE5AwAgBiEBCyAGIAlGDQADQCAVIAFBA3QiBmoiLSAtKwMAIFYgBiANaisDAKKhOQMAIBUgBkEIaiIGaiItIC0rAwAgViAGIA1qKwMAoqE5AwAgAUECaiIBIAlHDQALCyAPQQFqIg8gJkcNAAsLAkAgJC0ADEEBRw0AIA1FDQAgDUEEaygCABARCyAiQRBqJAALIAhBkAJqJAAgByAzRg0CIBIoAiwiAUEAIBIoAjQiBEEASBsNNiAHIBIoAjBODTcgEigCOCIGKAIEIQkgCiAMNgIgIAogASATaiIPIAkgBCAMayIIbEEDdGoiCTYCGCAMQQBIQQAgARsNNiAKIAQ2AiwgCiAPNgIkIAogEigCNDYCOCAKIBIpAiw3AjAgCiAGNgI8IB4gEigCRDYCCCAeIBIpAjw3AgAgCkEBNgJgIApCgICAgBA3AlAgCiAHNgJMIAogCDYCXCAIIAxyQQBIDTAgBigCBCEEIAogDEEBayIiNgJ0IAogCSAEQQN0ajYCbCAMQQBKIgZBASABG0UNNiAnIA5BzAD8CgAAIApCgYCAgBA3AsgBIAZFDTAgASAEIAdBAWoiCWxBA3RqIBNqISYgEyAyaiEkIA4oAiQoAgQhBgJAAnwCQCAOKAIIIg1BAEoiAUEBIA4oAgAiHRsEQCABRQ00IA1BAWsiFUUNAUEBIQEgHSAGQQN0aiIIKwMAIlYgVqIhVgJAIBVBAUYNACANQQJrIg9BA3EhBCANQQNrQQNPBEAgD0F8cSEhQQAhDwNAIFYgCCABIAZsQQN0aisDACJWIFaioCAIIAFBAWogBmxBA3RqKwMAIlYgVqKgIAggAUECaiAGbEEDdGorAwAiViBWoqAgCCABQQNqIAZsQQN0aisDACJWIFaioCFWIAFBBGohASAPQQRqIg8gIUcNAAsLIARFDQBBACEPA0AgViAIIAEgBmxBA3RqKwMAIlYgVqKgIVYgAUEBaiEBIA9BAWoiDyAERw0ACwsgHSsDACJYIFZEAAAAAAAAEABlDQIaICQgViBYIFiioJ8iVpogViBYRAAAAAAAAAAAZhsiVjkDACAVIBQoAghHDTYgWCBWoSFWIBQoAgAhDyAUKAIwKAIEISFBACEEAkACQCANQQlJDQAgIUEBRw0AIAZBAUcNACAPIB1rQQhrQRBJDQAgFUF+cSEEIFb9FCFlQQAhAQNAIA8gAUEDdCIdaiAIIB1q/QADACBl/fMB/QsDACABQQJqIgEgBEcNAAsgBCAVRg0BCyAEIQEgDUEBcUUEQCAPIAEgIWxBA3RqIAggASAGbEEDdGorAwAgVqM5AwAgAUEBciEBCyANQQJrIARGDQADQCAPIAEgIWxBA3RqIAggASAGbEEDdGorAwAgVqM5AwAgDyABQQFqIgQgIWxBA3RqIAggBCAGbEEDdGorAwAgVqM5AwAgAUECaiIBIBVHDQALCyAmICQrAwAiViBYoSBWozkDAAwDCww5CyAdKwMACyFWICZCADcDACAkIFY5AwAgFCgCCCIGQQBOBEAgFCgCACEIIBQoAjAoAgQhDUEAIQ9BACEEAkACQCAGDgIDAQALIA1BAUcNACAGQf7///8HcSEEQQAhAQNAIAggAUEDdGr9DAAAAAAAAAAAAAAAAAAAAAD9CwMAIAFBAmoiASAERw0ACyAEIAZGDQILIAYgBCIBa0EDcSIVBEADQCAIIAEgDWxBA3RqQgA3AwAgAUEBaiEBIA9BAWoiDyAVRw0ACwsgBCAGa0F8Sw0BA0AgCCABIA1sQQN0akIANwMAIAggAUEBaiANbEEDdGpCADcDACAIIAFBAmogDWxBA3RqQgA3AwAgCCABQQNqIA1sQQN0akIANwMAIAFBBGoiASAGRw0ACwwBCww5CyASKAI0IQEgEigCLCEEIBIoAjAhCCASKAI4IgYoAgQhFSAKIAw2AiAgCiAYNgIcIAogBCAIIBhrIg9BA3RqIBUgASAMayINbEEDdGo2AhggCiASKAJENgI8IAogEikCPDcCNCAKIBL9AAIs/QsCJCAKIA02AkQgCiAPNgJAIAogCigCMCgCBDYCSCAPIBhyQQBIDTAgDCANckEASA0wIAFBAEhBACAEGw02IAcgCE4NNyABICJrIgggInJBAEgNMCAGKAIEIQ8gCiABNgKAASAKICI2AnQgCiAEIBNqIgE2AnggCiABIAggD2xBA3RqNgJsIAogEigCNDYCjAEgCiASKQIsNwKEASAKIAY2ApABIAogEigCRDYCnAEgCiASKQI8NwKUASAKQQE2ArQBIAogCDYCsAEgCkKAgICAEDcCpAEgCiAHNgKgASAEIAYoAgQgCWxBA3RqIBNqIRhBACEiIwBBgAJrIggkACAYKwMAIVYCQCAOKAIIIgFBAUYEQCAOKAIEIgRBAEgNOkQAAAAAAADwPyBWoSFWIA4oAgAhDkEAIQYCQAJAIAQOAgMBAAsgBEH+////B3EhBiBW/RQhZUEAIQEDQCAOIAFBA3RqIg8gZSAP/QADAP3yAf0LAwAgAUECaiIBIAZHDQALIAQgBkYNAgsDQCAOIAZBA3RqIgEgViABKwMAojkDACAGQQFqIgYgBEcNAAsMAQsgVkQAAAAAAAAAAGENACAIIA4oAgQiDTYC6AEgCCALNgLkASANQQBIDTAgDigCACEEIA4oAhgoAgQhBiAIIAFBAWsiFTYCoAEgCCAEIAZBA3RqNgKYASAIIA02ApwBIA0gFXJBAEhBACAEGw03IAggDigCMDYC1AEgCCAO/QACIP0LAsQBIAggDikCGCJpNwK8ASAIIA4pAhA3ArQBIAggDv0AAgD9CwKkASAIQoCAgIAQNwLYASAIIGmnKAIENgLgASABQQBMDTEgCCAIQZgBakHMAPwKAAAgCEHMAGogFEHMAPwKAAAgFSAUKAIIRw0yIA0gCCgCBEcNMwJAIA1FDQAgDUEDdCIBRQ0AIAtBACAB/AsACyAIQoCAgICAgID4PzcD8AFEAAAAAAAAAAAhViMAQRBrIgEkAAJAIAgoAgQiBEEBRgRAIAgrA/ABIVggCCgCACIPQQAgCCgCCCIEQQBIGw05IAgoAiQhDCAIKAJMIhNBACAIKAJUIgZBAEgbDTkgBCAGRw03AkAgBEUNACAEQQBMDTkgDysDACATKwMAoiFWQQEhBiAEQQFGDQAgCCgCcCgCBCEdIAwoAgQhISAEQQFrIgxBAXEgBEECRwRAIAxBfnEhBEEAIQwDQCBWIA8gBiAhbEEDdGorAwAgEyAGIB1sQQN0aisDAKKgIA8gBkEBaiImICFsQQN0aisDACATIB0gJmxBA3RqKwMAoqAhViAGQQJqIQYgDEECaiIMIARHDQALC0UNACBWIA8gBiAhbEEDdGorAwAgEyAGIB1sQQN0aisDAKKgIVYLIAgoAuQBIgQgWCBWoiAEKwMAoDkDAAwBCyAIKwPwASFWIAgoAgghBiAIKAJMIQ8gCCgCcCEMIAgoAgAhEyABIAgoAiQoAgQ2AgwgASATNgIIIAEgDCgCBDYCBCABIA82AgAgBCAGIAFBCGogASAIKALkASBWED0LIAFBEGokACAOKAIAIgxBACAOKAIEIg9BAEgbDTcgDigCCEEATA04IAgoAugBIA9HDToCQCAPQQBMDQAgCCgC5AEhBkEAIQQCQCAPQQhJDQAgDCAPQQN0IgFqIAZLIAwgASAGaklxDQAgD0H+////B3EhBEEAIQEDQCAGIAFBA3QiE2oiHSAMIBNq/QADACAd/QADAP3wAf0LAwAgAUECaiIBIARHDQALIAQgD0YNAQsgDyAEIgFrQQNxIhMEQANAIAYgAUEDdCIdaiIhIAwgHWorAwAgISsDAKA5AwAgAUEBaiEBICJBAWoiIiATRw0ACwsgBCAPa0F8Sw0AA0AgBiABQQN0IgRqIhMgBCAMaisDACATKwMAoDkDACAGIARBCGoiE2oiHSAMIBNqKwMAIB0rAwCgOQMAIAYgBEEQaiITaiIdIAwgE2orAwAgHSsDAKA5AwAgBiAEQRhqIgRqIhMgBCAMaisDACATKwMAoDkDACABQQRqIgEgD0cNAAsLIA9BAEgNOSAOKAIIQQBMDTggDyAIKALoAUcNOgJAIA9BAEwNACAYKwMAIVYgCCgC5AEhDkEAIQECQCAPQQZJDQAgDiAPQQN0IgRqIAxLIA4gBCAMaklxDQAgD0H+////B3EhASBW/RQhZUEAIQYDQCAMIAZBA3QiBGoiEyAT/QADACBlIAQgDmr9AAMA/fIB/fEB/QsDACAGQQJqIgYgAUcNAAsgASAPRg0BCyABQQFyIQQgD0EBcQRAIAwgAUEDdCIBaiIGIAYrAwAgViABIA5qKwMAoqE5AwAgBCEBCyAEIA9GDQADQCAMIAFBA3QiBGoiBiAGKwMAIFYgBCAOaisDAKKhOQMAIAwgBEEIaiIEaiIGIAYrAwAgViAEIA5qKwMAoqE5AwAgAUECaiIBIA9HDQALCyAYKwMAIVYgCCAILQDsAToAICAIIAgpAuQBNwMYIAhBKGogFEHMAPwKAAAgCCBWOQMQIAggDzYCCCANIAgoAhwiBkcNNCAVIAgoAjBHDTRBACEEIwBBEGsiASEYIAEkACAIKAJMIAZBA3QiBkGAgAhNBEAgASAGQR5qQXBxayIEJAALIAgoAighISgCBCEiIBggCCAEEKACIhUoAgAhDwJAIAgoAqABIh1BAEwNACAIKAK8ASgCBCENIBUoAgQhDiAIKAKYASITQQAgCCgCnAEiAUEASBsNOCAOQQBIDTogASAORw07IAFFDQAgDkEBcSEkIA5B/v///wdxIQRBACEUIBMgDyAOQQN0akkEfyAPIBMgDSAdQQFrbCAOakEDdGpJBUEACyANQYCAgIABcUEcdnIgDkECSXJBAXEhJgNAIBQgCCgCoAFODTogEyANIBRsQQN0aiEMICEgFCAibEEDdGorAwAhVkEAIQECQCAmRQRAIFb9FCFlA0AgDCABQQN0IgZqIiggKP0AAwAgZSAGIA9q/QADAP3yAf3xAf0LAwAgAUECaiIBIARHDQALIAQiASAORg0BCyABQQFyIQYgJARAIAwgAUEDdCIBaiIoICgrAwAgViABIA9qKwMAoqE5AwAgBiEBCyAGIA5GDQADQCAMIAFBA3QiBmoiKCAoKwMAIFYgBiAPaisDAKKhOQMAIAwgBkEIaiIGaiIoICgrAwAgViAGIA9qKwMAoqE5AwAgAUECaiIBIA5HDQALCyAUQQFqIhQgHUcNAAsLAkAgFS0ADEEBRw0AIA9FDQAgD0EEaygCABARCyAYQRBqJAALIAhBgAJqJAAgBSAJayEBICkgB2tBAmshDCASKAI4Ig5BBGohFCASKAIsIgQgDigCBCIPIAlsQQN0aiEIIBIoAjAhBiAJIQcgBEUNACAGQQBODQALCww0CyAKKAJkIgEEQCABQQRrKAIAEBELIApB0AFqJAAMAAsMAgsgEiAONgIMIBIgEigCSDYCBCASIAQ2AgggEiAEIAcgARs2AhAgCSAKaiEqIAVBCGogCWohLiASQRhqIUYgEkEEaiEnQQAhCUQAAAAAAAAAACFZIwBBoAJrIgskACASKAI0IRggEigCMCEkAkACQAJAAkAgDkEATA0AICRBfyAkICRBf04bayEzAkADQCAkIAlrIg9BAEhBACASKAIYIgQbRQRAIAkgM0YNMiAJIBIoAhwgD2tKDTIgEigCICAJSA0yIBIoAiQhASALIAQgCUEDdCIUajYC9AEgCyAJNgL8ASALIA82AvgBIAsgDyABIA8gARsgCUEBRiIHGzYCgAIgCSASKAIwIgggD2siBUoNMiASKAI0IgogCUgNMiASKAIsIQEgEigCOCAL/QwAAAAAAAAAAAAAAAAAAAAA/QsD4AEoAgQhBCALIAk2AugBIAsgASAUajYC4AEgCyAPNgLkASALIA8gBCAPIAQbIAcbNgLsASABQQAgCEEASBsNOCAJIApODTkgBSAPckEASA0yIAsgDzYC2AEgCyABIAQgCWxBA3RqIAVBA3RqNgLUASASKAIEIgRBACASKAIMIgFBAEgbDTggCSASKAIITg05IAEgCUgNMiALQoCAgIAQNwKwASALQoCAgIAQNwKkASALIAk2AqABIAsgJzYCnAEgCyABNgKYASALIAQgFGoiATYCkAEgCyAJNgKMASALIAE2AoQBIAsgC0HgAWo2AoABIwBBEGsiByQAIAdCADcCAAJAIAsoAoABIgQoAgQiAUUNACABQQBIDT4gByABIAEQHiAHKAIEIgFBAEgNOyALKAKAASEEIAFFDQAgAUEDdCIBRQ0AIAcoAgBBACAB/AsACyAHQoCAgICAgID4PzcDCEQAAAAAAAAAACFWIwBBEGsiASQAAkAgBCgCBCIFQQFGBEAgBysDCCFYIAQoAgAiCkEAIAQoAggiCEEASBsNOiALKAKEASIMQQAgCygCjAEiBUEASBsNOiAFIAhHDTgCQCAIRQ0AIAhBAEwNOiAKKwMAIAwrAwCiIVZBASEFIAhBAUYNACALKAKcASgCDCENIAQoAgwhBCAIQQFrIhNBAXEgCEECRwRAIBNBfnEhE0EAIQgDQCBWIAogBCAFbEEDdGorAwAgDCAFIA1sQQN0aisDAKKgIAogBUEBaiIeIARsQQN0aisDACAMIA0gHmxBA3RqKwMAoqAhViAFQQJqIQUgCEECaiIIIBNHDQALC0UNACBWIAogBCAFbEEDdGorAwAgDCAFIA1sQQN0aisDAKKgIVYLIAcoAgAiBCBYIFaiIAQrAwCgOQMADAELIAQoAgghCCAHKwMIIVYgCygChAEhCiALKAKcASEMIAQoAgAhDSABIAQoAgw2AgwgASANNgIIIAEgDCgCDDYCBCABIAo2AgAgBSAIIAFBCGogASAHKAIAIFYQPQsgAUEQaiQAIAsoAtgBIgogBygCBEcNOyAHKAIAIQgCQAJAIApBAEoEQCALKALUASEMQQAhBEEAIQECQCAKQQhJDQAgCCAKQQN0IgVqIAxLIAggBSAMaklxDQAgCkH+////B3EhAUEAIQUDQCAMIAVBA3QiDWoiEyAT/QADACAIIA1q/QADAP3xAf0LAwAgBUECaiIFIAFHDQALIAEgCkYNAgsgCiABIgVrQQNxIg0EQANAIAwgBUEDdCITaiIVIBUrAwAgCCATaisDAKE5AwAgBUEBaiEFIARBAWoiBCANRw0ACwsgASAKa0F8Sw0BA0AgDCAFQQN0IgFqIgQgBCsDACABIAhqKwMAoTkDACAMIAFBCGoiBGoiDSANKwMAIAQgCGorAwChOQMAIAwgAUEQaiIEaiINIA0rAwAgBCAIaisDAKE5AwAgDCABQRhqIgFqIgQgBCsDACABIAhqKwMAoTkDACAFQQRqIgUgCkcNAAsMAQsgCEUNAQsgCEEEaygCABARCyAHQRBqJAAgCQRAIBIoAjgiBSgCBCEBIBIoAiwiB0EAIBIoAjAiBEEASBsNOSALIBIpAiw3AnQgCyASKAI0NgJ8IAkgEigCNE4NOiAEIAlIDTMgCyAENgKUASALIAcgASAJbEEDdGoiBDYCkAEgCyAENgKEASALIAtB9AFqNgKAASALIAk2AogBIAsgC/0AAnD9CwKYASALIAU2AqgBIAsgEigCRDYCtAEgCyASKQI8NwKsASALIAE2AswBIAv9DAAAAAAAAAAAAAAAAAAAAAAgCf0cASAB/RwC/QsCuAEgCygC/AEgCUcNNCMAQRBrIgckACAHQgA3AgACQCALKAKAASIEKAIEIgFFDQAgAUEASA0/IAcgASABEB4gBygCBCIBQQBIDTwgCygCgAEhBCABRQ0AIAFBA3QiAUUNACAHKAIAQQAgAfwLAAsgB0KAgICAgICA+D83AwhEAAAAAAAAAAAhViMAQRBrIgUkACAEKAIIIQECQCAEKAIEIghBAUYEQCAHKwMIIVggBCgCACIKQQAgAUEASBsNOyALKAKEASIMQQAgCygCiAEiCEEASBsNOyABIAhHDTkCQCABRQ0AIAFBAEwNOyAKKwMAIAwrAwCiIVZBASEIIAFBAUYNACAEKAIMIQQgAUEBayINQQFxIAFBAkcEQCANQX5xIQ1BACEBA0AgViAKIAQgCGxBA3RqKwMAIAwgCEEDdGorAwCioCAKIAhBAWoiFSAEbEEDdGorAwAgDCAVQQN0aisDAKKgIVYgCEECaiEIIAFBAmoiASANRw0ACwtFDQAgViAKIAQgCGxBA3RqKwMAIAwgCEEDdGorAwCioCFWCyAHKAIAIgEgWCBWoiABKwMAoDkDAAwBCyAHKwMIIVYgCygChAEhCiAEKAIAIQwgBSAEKAIMNgIMIAUgDDYCCCAFQQE2AgQgBSAKNgIAIAggASAFQQhqIAUgBygCACBWED0LIAVBEGokACALKALYASIKIAcoAgRHDTwgBygCACEIAkACQCAKQQBKBEAgCygC1AEhDEEAIQRBACEFAkAgCkEISQ0AIAggCkEDdCIBaiAMSyAIIAEgDGpJcQ0AIApB/v///wdxIQVBACEBA0AgDCABQQN0Ig1qIhMgE/0AAwAgCCANav0AAwD98QH9CwMAIAFBAmoiASAFRw0ACyAFIApGDQILIAogBSIBa0EDcSINBEADQCAMIAFBA3QiE2oiFSAVKwMAIAggE2orAwChOQMAIAFBAWohASAEQQFqIgQgDUcNAAsLIAUgCmtBfEsNAQNAIAwgAUEDdCIEaiIFIAUrAwAgBCAIaisDAKE5AwAgDCAEQQhqIgVqIg0gDSsDACAFIAhqKwMAoTkDACAMIARBEGoiBWoiDSANKwMAIAUgCGorAwChOQMAIAwgBEEYaiIEaiIFIAUrAwAgBCAIaisDAKE5AwAgAUEEaiIBIApHDQALDAELIAhFDQELIAhBBGsoAgAQEQsgB0EQaiQACyALIAsoAtgBIgFBAWs2AoQBIAsgCygC1AEiBEEIajYCgAEgAUEASiIFQQEgBBtFDTggC0EBNgKQASALIAE2ApgBIAsgC0HUAWoiDDYCjAEgBUUNMiAMIAtBgAFqIAtBiAJqIBQgKmoQogICQCAYIAlBAWoiB0oEQCAYIAlBf3NqIgpBAEhBACASKAIEIgUbDTogCkEASA00IAkgEigCCCIVIAprIg1ODTQgEigCDCAJTA00IBIoAhAhCCALIAUgB0EDdCIpajYCXCALIAo2AmAgCyAIIAogCBsgCiAJGzYCaCALIAc2AmQgEigCMCITIAlIDTQgCSASKAI0IAprTg00IBIoAjgiBCgCBCEeIBIoAiwhASAL/QwAAAAAAAAAAAAAAAAAAAAA/QsDSCAEKAIEIQQgCyAKNgJQIAsgASAHIB5sQQN0ajYCSCALIAk2AkwgCyAJIAQgCSAEGyAKQQFGIh4bNgJUIAkgE04NPiABIAQgCWxBA3RqIBRqQoCAgICAgID4PzcDACAFQQAgFUEASBsNOiAJIBIoAgxODTsgCiANckEASA00IAsgBSAIIAlsQQN0aiIFIA1BA3RqIgg2AiggCyAKNgIsIAsgBTYCPCALIAk2AkAgCiAPckEASEEAIAEbDTogCSATIA9rSg00IBIoAjgiBSgCBCENIAsgCjYCiAEgCyABIBRqIAQgB2xBA3RqNgKAASALIA82AoQBIAsgEigCNDYClAEgCyASKQIsNwKMASALIAU2ApgBIAsgEigCRDYCpAEgCyASKQI8NwKcASALIA02ArABIAsgBzYCrAEgCyAJNgKoASALKALYASALIAw2ArQBIA9HDTUCQCAKRQ0AIApBA3QiAUUNACAIQQAgAfwLAAsgC0KAgICAgICA+D83AxggC0HUAWoiFSEFRAAAAAAAAAAAIVYjAEFAaiIEJAACQCALKAKIAUEBRgRAIAsrAxghWCALKAKAASIMQQAgCygChAEiAUEASBsNPCAFKAIAIg1BACAFKAIEIgVBAEgbDTwgASAFRw06AkAgAUUNACABQQBMDTwgDCsDACANKwMAoiFWQQEhCCABQQFGDQAgAUEBayIFQQNxIRMgAUECa0EDTwRAIAVBfHEhHUEAIQUDQCBWIAwgCEEDdCIBaisDACABIA1qKwMAoqAgDCABQQhqIiFqKwMAIA0gIWorAwCioCAMIAFBEGoiIWorAwAgDSAhaisDAKKgIAwgAUEYaiIBaisDACABIA1qKwMAoqAhViAIQQRqIQggBUEEaiIFIB1HDQALCyATRQ0AQQAhAQNAIFYgDCAIQQN0IgVqKwMAIAUgDWorAwCioCFWIAhBAWohCCABQQFqIgEgE0cNAAsLIAsoAigiASBYIFaiIAErAwCgOQMADAELIAQgCygCsAE2AjggBCAL/QACoAH9CwMoIAQgC/0AApAB/QsDGCAEIAv9AAKAAf0LAwgjAEEQayIIJAACQCAFKAIEIgxBgICAgAJJBEAgCysDGCFWIAQoAiAhDSAEKAIQIAQoAgwgBCgCCCEhQQAhASAFKAIAIgVFBEAgDEEDdCEBAkAgDEGAgAFNBEAgCCABQR5qQXBxayIBJAAMAQsgAUEQahAWIgFFDTYgAUFwcSIFIAE2AgwgBUEQaiEBCyABIQULIAggDSgCBDYCDCAIICE2AgggCEEBNgIEIAggBTYCACALKAIoIgUEQCALKAIsQQBIDT4LIAhBCGogCCAFQQEgVhBPAkAgDEGBgAFJDQAgAUUNACABQQRrKAIAEBELIAhBEGokAAwBCwwzCwsgBEFAayQAIAsoAtgBIAsoAuQBIAsgFTYCHCALIAtB4AFqNgIYRw01IAsoAugBIgEgCygCQEcNNiABQQBIDTwCQCABRQ0AIAFBA3QiAUUNACALKAI8QQAgAfwLAAsgC0KAgICAgICA+D83A4ABIAtBPGoiBCALQRhqIgUgC0HUAWoiCCALQYABaiIMEJ0CIAsoAmAiAUEASEEAIAsoAlwiDRsNOiABQQBIDTQgCygCZCAJSA00IAsgCygCaDYCmAEgC0IANwKQASALIAE2AoQBIAsgDTYCgAEgCyAJNgKIASALKAJAIQ0gCyAENgKcASALIAtB3ABqNgKMASAJIA1HDTUgCygCLCABRw03IAtCgICAgICAgPi/fzcDGCALQShqIAwgBCAFEOsDIAsoAtgBIAsoAvgBIAsgCDYCHCALIAtB9AFqNgIYRw01IAsoAvwBIgEgCygCQEcNNiABQQBIDTwCQCABRQ0AIAFBA3QiAUUNACALKAI8QQAgAfwLAAsgC0KAgICAgICA+D83A4ABIAtBPGoiASALQRhqIgQgC0HUAWogC0GAAWoiBRCdAiALKAJAIAsoAkwgCyABNgIcIAsgC0HIAGo2AhhHDTUgCygCLCALKAJQRw03IAtCgICAgICAgPi/fzcDgAEgC0EoaiAEIAEgBRCdAiALKAIsIgFBAEgNPCALKwOIAiFWQQAhBCALKAIoIQgCQAJAAkAgAQ4CAgEACyABQf7///8HcSEEIFb9FCFlQQAhBQNAIAggBUEDdGoiDCBlIAz9AAMA/fIB/QsDACAFQQJqIgUgBEcNAAsgASAERg0BCwNAIAggBEEDdGoiBSBWIAUrAwCiOQMAIARBAWoiBCABRw0ACwsgEigCLCIFQQAgEigCNCIBQQBIGw06IAkgEigCME4NOyABIAprIgggCnJBAEgNNCASKAI4KAIEIQQgCyAKNgIwIAtBAUEBIAQgBEEBTRsgHhs2AjggCyAFIBRqIgUgBCAIbEEDdGo2AiggASAJTA00IAsgATYCmAEgCyAFNgKQASALIAU2AoQBIAsgC0HcAGo2AoABIAsgBzYCjAEgCyASKAJENgK0ASALIBIpAjw3AqwBIAsgEv0AAiz9CwKcASALQoCAgIAQNwLIASALQoCAgIAQNwK8ASALIAk2ArgBIAsoAmQgB0cNNSMAQRBrIgwkACAMQgA3AgACQCALKAKAASIFKAIEIgFFDQAgAUEASA1AIAwgASABEB4gDCgCBCIBQQBIDT0gCygCgAEhBSABRQ0AIAFBA3QiAUUNACAMKAIAQQAgAfwLAAsgDEKAgICAgICA+D83AwhEAAAAAAAAAAAhViMAQRBrIgEkAAJAIAUoAgQiBEEBRgRAIAwrAwghWCAFKAIAIg1BACAFKAIIIghBAEgbDTwgCygChAEiE0EAIAsoAowBIgRBAEgbDTwgBCAIRw06AkAgCEUNACAIQQBMDTwgDSsDACATKwMAoiFWQQEhBCAIQQFGDQAgCygCqAEoAgQhFSAFKAIMIQUgCEEBayIeQQFxIAhBAkcEQCAeQX5xIR5BACEIA0AgViANIAQgBWxBA3RqKwMAIBMgBCAVbEEDdGorAwCioCANIARBAWoiISAFbEEDdGorAwAgEyAVICFsQQN0aisDAKKgIVYgBEECaiEEIAhBAmoiCCAeRw0ACwtFDQAgViANIAQgBWxBA3RqKwMAIBMgBCAVbEEDdGorAwCioCFWCyAMKAIAIgQgWCBWoiAEKwMAoDkDAAwBCyAFKAIIIQggDCsDCCFWIAsoAoQBIQ0gCygCqAEhEyAFKAIAIRUgASAFKAIMNgIMIAEgFTYCCCABIBMoAgQ2AgQgASANNgIAIAQgCCABQQhqIAEgDCgCACBWED0LIAFBEGokACALKAIwIgggDCgCBEcNPSAMKAIAIQ0CQAJAIAhBAEoEQCALKAI4IRUgCygCKCETQQAhBQJAIAhBCEkNACAVQQFHDQAgDSAIQQN0IgFqIBNLIA0gASATaklxDQAgCEH+////B3EhBUEAIQQDQCATIARBA3QiAWoiHiAe/QADACABIA1q/QADAP3xAf0LAwAgBEECaiIEIAVHDQALIAUgCEYNAgsgBUEBciEBIAhBAXEEQCATIAUgFWxBA3RqIgQgBCsDACANIAVBA3RqKwMAoTkDACABIQULIAEgCEYNAQNAIBMgBSAVbEEDdGoiASABKwMAIA0gBUEDdGorAwChOQMAIBMgBUEBaiIBIBVsQQN0aiIEIAQrAwAgDSABQQN0aisDAKE5AwAgBUECaiIFIAhHDQALDAELIA1FDQELIA1BBGsoAgAQEQsgDEEQaiQAIAkEQCASKAIYIgRBACASKAIgIgFBAEgbDTsgCSASKAIcTg08IAEgCUgNNSALQoCAgIAQNwKwASALQoCAgIAQNwKkASALIAk2AqABIAsgRjYCnAEgCyABNgKYASALIAQgFGoiATYCkAEgCyAJNgKMASALIAE2AoQBIAsoAkwgCyALQcgAajYCgAEgCUcNNiMAQRBrIgwkACAMQgA3AgACQCALKAKAASgCCCIBRQ0AIAFBAEgNQSAMIAEgARAeIAwoAgQiAUEASA0+IAFFDQAgAUEDdCIBRQ0AIAwoAgBBACAB/AsACyAMQoCAgICAgID4PzcDCEQAAAAAAAAAACFWQQAhIUEAIR0jAEFAaiIEJAACQCALKAKAASIBKAIIQQFGBEAgDCsDCCFYIAEoAgAiCEEAIAEoAgQiAUEASBsNPSALKAKEASINQQAgCygCjAEiBUEASBsNPSABIAVHDTsCQCABRQ0AIAFBAEwNPSAIKwMAIA0rAwCiIVZBASEFIAFBAUYNACALKAKcASgCDCETIAFBAWsiFUEBcSABQQJHBEAgFUF+cSEBA0AgViAIIAVBA3RqKwMAIA0gBSATbEEDdGorAwCioCAIIAVBAWoiFUEDdGorAwAgDSATIBVsQQN0aisDAKKgIVYgBUECaiEFICFBAmoiISABRw0ACwtFDQAgViAIIAVBA3RqKwMAIA0gBSATbEEDdGorAwCioCFWCyAMKAIAIgEgWCBWoiABKwMAoDkDAAwBCyAEIAE2AjwgBCALKAK0ATYCOCAEIAv9AAKkAf0LAyggBCAL/QAClAH9CwMYIAQgC/0AAoQB/QsDCCMAQRBrIhMkAAJAAkAgBCgCECINQYCAgIACSQRAIAwrAwghViAEKAIgIQUgBCgCCCEVIAQoAjwhIiANQQN0IQEgDUGBgAFPBEAgAUEQahAWIgFFDTcgAUFwcSIIIAE2AgwgCEEQaiEIDAILIBMgAUEeakFwcWsiCCQAIA0NAQwCCww1CyANQYCAAUshISAFKAIMIR5BACEFAkAgDUEGSQ0AIB5BAUcNACAIIBVrQRBJDQAgDUH+////AXEhBUEAIQEDQCAIIAFBA3QiKGogFSAoav0AAwD9CwMAIAFBAmoiASAFRw0ACyAFIA1GDQELIA0gBSIBa0EDcSIoBEADQCAIIAFBA3RqIBUgASAebEEDdGorAwA5AwAgAUEBaiEBIB1BAWoiHSAoRw0ACwsgBSANa0F8Sw0AA0AgCCABQQN0aiAVIAEgHmxBA3RqKwMAOQMAIAggAUEBaiIFQQN0aiAVIAUgHmxBA3RqKwMAOQMAIAggAUECaiIFQQN0aiAVIAUgHmxBA3RqKwMAOQMAIAggAUEDaiIFQQN0aiAVIAUgHmxBA3RqKwMAOQMAIAFBBGoiASANRw0ACwsgIigCBCEBICIoAgggIigCACENIBMgIigCDDYCDCATIA02AgggE0EBNgIEIBMgCDYCACAMKAIAIg0EQCAMKAIEQQBIDT0LIAEgE0EIaiATIA1BASBWEE8gIQRAIAhBBGsoAgAQEQsgE0EQaiQACyAEQUBrJAAgCygCMCIIIAwoAgRHDT4gDCgCACENAkACQCAIQQBKBEAgCygCOCEVIAsoAighE0EAIQECQCAIQQhJDQAgFUEBRw0AIA0gCEEDdCIEaiATSyANIAQgE2pJcQ0AIAhB/v///wdxIQFBACEFA0AgEyAFQQN0IgRqIh4gHv0AAwAgBCANav0AAwD98QH9CwMAIAVBAmoiBSABRw0ACyABIAhGDQILIAFBAXIhBCAIQQFxBEAgEyABIBVsQQN0aiIFIAUrAwAgDSABQQN0aisDAKE5AwAgBCEBCyAEIAhGDQEDQCATIAEgFWxBA3RqIgQgBCsDACANIAFBA3RqKwMAoTkDACATIAFBAWoiBCAVbEEDdGoiBSAFKwMAIA0gBEEDdGorAwChOQMAIAFBAmoiASAIRw0ACwwBCyANRQ0BCyANQQRrKAIAEBELIAxBEGokAAsgCyALKAIwIgFBAWs2AogBIAsgCygCKCIEIAsoAjhBA3RqNgKAASABQQBKIgVBASAEG0UNOiALQQE2ApQBIAsgATYCmAEgCyALQShqIiE2AowBIAVFDTQgFCAuaiEdIAsoAjghCAJAAnwCQCALKAIwIg1BAEoiAUEBIAsoAigiFRsEQCABRQ04IA1BAWsiE0UNAUEBIQEgFSAIQQN0aiIMKwMAIlYgVqIhVgJAIBNBAUYNACANQQJrIgRBA3EhBSANQQNrQQNPBEAgBEF8cSEeQQAhBANAIFYgDCABIAhsQQN0aisDACJWIFaioCAMIAFBAWogCGxBA3RqKwMAIlYgVqKgIAwgAUECaiAIbEEDdGorAwAiViBWoqAgDCABQQNqIAhsQQN0aisDACJWIFaioCFWIAFBBGohASAEQQRqIgQgHkcNAAsLIAVFDQBBACEEA0AgViAMIAEgCGxBA3RqKwMAIlYgVqKgIVYgAUEBaiEBIARBAWoiBCAFRw0ACwsgFSsDACJYIFZEAAAAAAAAEABlDQIaIB0gViBYIFiioJ8iVpogViBYRAAAAAAAAAAAZhsiVjkDACATIAsoAogBRw06IFggVqEhViALKAKAASEEIAsoAowBKAIQIR5BACEFAkACQCANQQlJDQAgHkEBRw0AIAhBAUcNACAEIBVrQQhrQRBJDQAgE0F+cSEFIFb9FCFlQQAhAQNAIAQgAUEDdCIVaiAMIBVq/QADACBl/fMB/QsDACABQQJqIgEgBUcNAAsgBSATRg0BCyAFIQEgDUEBcUUEQCAEIAEgHmxBA3RqIAwgASAIbEEDdGorAwAgVqM5AwAgAUEBciEBCyANQQJrIAVGDQADQCAEIAEgHmxBA3RqIAwgASAIbEEDdGorAwAgVqM5AwAgBCABQQFqIgUgHmxBA3RqIAwgBSAIbEEDdGorAwAgVqM5AwAgAUECaiIBIBNHDQALCyALIB0rAwAiViBYoSBWozkDkAIMAwsMPQsgFSsDAAshViALQgA3A5ACIB0gVjkDACALKAKIASIIQQBOBEAgCygCgAEhDCALKAKMASgCECENQQAhBEEAIQUCQAJAIAgOAgMBAAsgDUEBRw0AIAhB/v///wdxIQVBACEBA0AgDCABQQN0av0MAAAAAAAAAAAAAAAAAAAAAP0LAwAgAUECaiIBIAVHDQALIAUgCEYNAgsgCCAFIgFrQQNxIhMEQANAIAwgASANbEEDdGpCADcDACABQQFqIQEgBEEBaiIEIBNHDQALCyAFIAhrQXxLDQEDQCAMIAEgDWxBA3RqQgA3AwAgDCABQQFqIA1sQQN0akIANwMAIAwgAUECaiANbEEDdGpCADcDACAMIAFBA2ogDWxBA3RqQgA3AwAgAUEEaiIBIAhHDQALDAELDD0LIAkgEigCMCIFTg0+IAcgEigCNCIITg0+IBIoAiwiDCASKAI4Ig0oAgQgB2xBA3RqIBRqQoCAgICAgID4PzcDACASKAIkIRMgEigCGCIEQQAgEigCHCIBQQBIGw06IAkgEigCIE4NOyAJICRGIhVBACAEGw06IAEgD0EBayIPayIeIA9yQQBIDTQgCyAPNgJAIAsgBCAJIBNsQQN0aiIEIB5BA3RqIhM2AjwgASAJSA00IAsgBDYCGCALIAk2AhwgASAJTA00IAsgBDYCDCALIAc2AhAgCiAPckEASA06IBUNNCAJIAUgD2tODTQgCSAIIAprTg00IA0oAgQhASASKAI4IgQoAgQhBSALIA82AoQBIAsgDCApaiABIAdsQQN0ajYCgAEgCyAKNgKIASALIBIoAjQ2ApQBIAsgEikCLDcCjAEgCyAENgKYASALIBIoAkQ2AqQBIAsgEikCPDcCnAEgCyAFNgKwASALIAc2AqwBIAsgBzYCqAEgCygCMCALICE2ArQBIApHDTUCQCAPRQ0AIA9BA3QiAUUNACATQQAgAfwLAAsgC0KAgICAgICA+D83A5gCRAAAAAAAAAAAIVYjAEEQayIBJAACQCALKAKEASIFQQFGBEAgCysDmAIhWCALKAKAASIKQQAgCygCiAEiBEEASBsNPCALKAKYASETIAsoArQBIgUoAgghCCAFKAIAIgxBACAIQQBIGw08IAQgCEcNOgJAIARFDQAgBEEATA08IAorAwAgDCsDAKIhVkEBIQggBEEBRg0AIAUoAhAhDSATKAIEIRMgBEEBayIFQQFxIARBAkcEQCAFQX5xIQRBACEFA0AgViAKIAggE2xBA3RqKwMAIAwgCCANbEEDdGorAwCioCAKIAhBAWoiHiATbEEDdGorAwAgDCANIB5sQQN0aisDAKKgIVYgCEECaiEIIAVBAmoiBSAERw0ACwtFDQAgViAKIAggE2xBA3RqKwMAIAwgCCANbEEDdGorAwCioCFWCyALKAI8IgQgWCBWoiAEKwMAoDkDAAwBCyALKwOYAiFWIAsoAogBIQggCygCtAEhBCALKAKAASEKIAEgCygCmAEoAgQ2AgwgASAKNgIIIAQoAgAhCiABIAQoAhA2AgQgASAKNgIAIAUgCCABQQhqIAEgCygCPCBWED0LIAFBEGokACALKAIwIAsoAlAgCyALQShqNgKcAiALIAtByABqNgKYAkcNNSALKAJMIgEgCygCHEcNNiABQQBIDTwCQCABRQ0AIAFBA3QiAUUNACALKAIYQQAgAfwLAAsgC0KAgICAgICA+D83A4ABIAtBGGohCCALQYABaiIVIQFEAAAAAAAAAAAhViMAQRBrIgUkAAJAIAsoAkwiBEEBRgRAIAErAwAhWCALKAJIIgpBACALKAJQIgRBAEgbDTwgCygCnAIiDSgCCCEBIA0oAgAiDEEAIAFBAEgbDTwgASAERw06AkAgBEUNACAEQQBMDTwgCisDACAMKwMAoiFWQQEhASAEQQFGDQAgDSgCECENIAsoAlQhEyAEQQFrIh5BAXEgBEECRwRAIB5BfnEhHkEAIQQDQCBWIAogASATbEEDdGorAwAgDCABIA1sQQN0aisDAKKgIAogAUEBaiIhIBNsQQN0aisDACAMIA0gIWxBA3RqKwMAoqAhViABQQJqIQEgBEECaiIEIB5HDQALC0UNACBWIAogASATbEEDdGorAwAgDCABIA1sQQN0aisDAKKgIVYLIAgoAgAiASBYIFaiIAErAwCgOQMADAELIAsoAlAhCiABKwMAIVYgCygCnAIhASALKAJIIQwgBSALKAJUNgIMIAUgDDYCCCABKAIAIQwgBSABKAIQNgIEIAUgDDYCACAEIAogBUEIaiAFIAgoAgAgVhA9CyAFQRBqJAAgCygC+AEhBCALKAL8ASIBIA9yIgVBAEhBACALKAL0ASIKGw06IAUgBCAPayIEckEASA00IAsgCygCgAI2ApgBIAtBADYClAEgCyAENgKQASALIA82AoQBIAsgCiAEQQN0ajYCgAEgCyABNgKIASALKAIcIQQgCyAINgKcASALIAtB9AFqNgKMASABIARHDTUgCygCQCAPRw03IAtCgICAgICAgPi/fzcDmAIgC0E8aiAVIAggC0GYAmoQ6wMgCygCMCALKAJgIAsgC0EoajYCnAIgCyALQdwAajYCmAJHDTUgCygCZCIBIAsoAhBHDTYgAUEASA08AkAgAUUNACABQQN0IgFFDQAgCygCDEEAIAH8CwALIAtCgICAgICAgPg/NwOAASALQQxqISFEAAAAAAAAAAAhViMAQRBrIhMkAAJAIAsoApgCIgEoAghBAUYEQCALKwOAASFYIAEoAgAiBUEAIAEoAgQiBEEASBsNPCALKAKcAiIKKAIIIQEgCigCACIIQQAgAUEASBsNPCABIARH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cSINBEADQCAGIAFBA3QiGGogCiAYaisDADkDACABQQFqIQEgBEEBaiIEIA1HDQALCyAFIAxrQXxLDQADQCAGIAFBA3QiBGogBCAKaisDADkDACAGIARBCGoiBWogBSAKaisDADkDACAGIARBEGoiBWogBSAKaisDADkDACAGIARBGGoiBGogBCAKaisDADkDACABQQRqIgEgDEcNAAsLIBAoAuABIgFBAEhBACAQKALcASIEGw0rIAFBAEgNFkEBIAcgCGoiBSAXIAUgF0obIgUgEyAFIBNIGyIFIAVBAUwbIhcgECgC5AFKDRYgECABNgJEIBBCADcCPCAQIBk2AjggECAXNgI0IBAgATYCMCAQIAQ2AiwgECgC3BchBCAQIBBB1BdqIgU2AiggASAERw0mIBAgFzYCFCAQIBAoAnAiATYCECAQIBAoAmwiBDYCDCABQQBIQQAgBBsNKyAQQgA3AhwgECABNgIkIBAgEEHsAGo2AhggAUEASA0WIBAoAnQgF0gNFiABIBAoAtgXRw0nIBBBDGogBSASEP0DIBAoAnAiBUEASEEAIBAoAmwiChsNKyAFQQBIDRYgECgCdCAXSA0WIBAoAtgXIgRBAEhBACAQKALUFyIBGw0rIARBAEgNFiAQKALcFyAXSA0WIAQgBUcNJyAFIBdsIQwCQCAFRQ0AQQAhBEEAIQcCQCAMQQJJDQAgASAKa0EQSQ0AIAxBfnEhB0EAIQYDQCABIAZBA3QiDWogCiANav0AAwD9CwMAIAZBAmoiBiAHRw0ACyAHIAxGDQELIAwgByIGa0EDcSINBEADQCABIAZBA3QiGGogCiAYaisDADkDACAGQQFqIQYgBEEBaiIEIA1HDQALCyAHIAxrQXxLDQADQCABIAZBA3QiBGogBCAKaisDADkDACABIARBCGoiB2ogByAKaisDADkDACABIARBEGoiB2ogByAKaisDADkDACABIARBGGoiBGogBCAKaisDADkDACAGQQRqIgYgDEcNAAsLIBwoAgQiBEEASA0tIBcgECgC3BdODSwgBCAFRw0nAkAgBUUNACABIAxBA3RqIQcgHCgCACEKQQAhAQJAIAVBBEkNACAHIAprQRBJDQAgBUH+////B3EhASBW/RQhZUEAIQYDQCAHIAZBA3QiBGogBCAKav0AAwAgZf3zAf0LAwAgBkECaiIGIAFHDQALIAEgBUYNAQsgAUEBciEEIAVBAXEEQCAHIAFBA3QiAWogASAKaisDACBWozkDACAEIQELIAQgBUYNAANAIAcgAUEDdCIEaiAEIApqKwMAIFajOQMAIAcgBEEIaiIEaiAEIApqKwMAIFajOQMAIAFBAmoiASAFRw0ACwsgECgC1AEiAUEASEEAIBAoAtABIgQbDSsgAUEASA0WIBAoAtgBIBdIDRYgECABNgJEIBBCADcCPCAQIBc2AjQgECABNgIwIBAgBDYCLCAQKAKMASEEIBAgEEHQAWo2AjggECAQQYQBaiIFNgIoIAEgBEcNJiAQIBc2AhQgECAQKAJ8IgE2AhAgECAQKAJ4IgQ2AgwgAUEASEEAIAQbDSsgEEIANwIcIBAgATYCJCAQIBBB+ABqNgIYIAFBAEgNFiAQKAKAASAXSA0WIAEgECgCiAFHDScgEEEMaiAFIBIQ/QMgECgCfCIEQQBIQQAgECgCeCIBGw0rIARBAEgNFiAQKAKAASAXSA0WIBAoAogBIgZBAEhBACAQKAKEASIFGw0rIAZBAEgNFiAQKAKMASAXSA0WIAQgBkcNJwJAIAQgF2wiCkEATA0AQQAhBEEAIQcCQCAKQQFGDQAgBSABa0EQSQ0AIApB/v///wdxIQdBACEGA0AgBSAGQQN0IgxqIAEgDGr9AAMA/QsDACAGQQJqIgYgB0cNAAsgByAKRg0BCyAKIAciBmtBA3EiDARAA0AgBSAGQQN0Ig1qIAEgDWorAwA5AwAgBkEBaiEGIARBAWoiBCAMRw0ACwsgByAKa0F8Sw0AA0AgBSAGQQN0IgRqIAEgBGorAwA5AwAgBSAEQQhqIgdqIAEgB2orAwA5AwAgBSAEQRBqIgdqIAEgB2orAwA5AwAgBSAEQRhqIgRqIAEgBGorAwA5AwAgBkEEaiIGIApHDQALCyAQQeAAaiARIBEQ/wMgECgCZCEEIBAoAlwhBSAQKAJgIQcgECgC6AEhCiAQKALsASEGIBcgECgCaCIBTg0DIBAoAlghDCAEIAEgASAEShshDUEAIQEgBUEAIAVBAEobIRggBkEAIAZBAEobIQYgBCAXbEEDdCEgA0AgASAGRg0TIAEgDU4NMCAHIAFBA3QiBWoiFSABIARsQQN0aiAFIApqKwMAOQMAIAEgGEYNEiAVICBqIAUgDGorAwA5AwAgAUEBaiIBIBdHDQALIA9BAWoiDyAUKAIcSA0AC0EACyEFIA9BAWohBwsgCEEASA0gIA4gCCAIEB4gEC0A9AFFDR4gECgC7AEgCEgNEyAQKALoASEKIAggDigCBEcEQCAOIAggCBAeIA4oAgQgCEcNHgsCQCAIRQ0AIA4oAgAhEUEAIQZBACEEAkAgCEEESQ0AIBEgCmtBEEkNACAIQf7///8HcSEEQQAhAQNAIBEgAUEDdCIOaiAKIA5q/QADAP0LAwAgAUECaiIBIARHDQALIAQgCEYNAQsgCCAEIgFrQQNxIg4EQANAIBEgAUEDdCIXaiAKIBdqKwMAOQMAIAFBAWohASAGQQFqIgYgDkcNAAsLIAQgCGtBfEsNAANAIBEgAUEDdCIEaiAEIApqKwMAOQMAIBEgBEEIaiIGaiAGIApqKwMAOQMAIBEgBEEQaiIGaiAGIApqKwMAOQMAIBEgBEEYaiIEaiAEIApqKwMAOQMAIAFBBGoiASAIRw0ACwsgCUEEQQAgCS0AMBtqKAIAIgEgCHJBAEgNLQJAIAhFDQAgAUUNACABQf////8HIAhuSg0gCyA1IAEgCGwgASAIEBsgEC0A9AFFDR4gEC0A9wFFBEAgEC0A+AFBAXFFDRwLIBAoAtQBIgEgCHIiBEEASEEAIBAoAtABIgYbDSggBEEASA0TIBAoAtgBIAhIDRMgECABNgJEIBBCADcCPCAQIAg2AjQgECABNgIwIBAgBjYCLCAQKAKMASEEIBAgEEHQAWo2AjggECAQQYQBajYCKCABIARHDSMgECA1NgIMIBBBDGogEEEoahD8AyAJQQBBBCAJLQAwG2ooAgAiASAIckEASA0tAkAgCEUNACABRQ0AIAFB/////wcgCG5KDSALIDYgASAIbCABIAgQGyAQLQD0AUUNHiAQLQD5AUUEQCAQLQD6AUEBcUUNHQsgECgC4AEiASAIciIEQQBIQQAgECgC3AEiBhsNKCAEQQBIDRMgECgC5AEgCEgNEyAQIAE2AkQgEEIANwI8IBAgEEHcAWo2AjggECAINgI0IBAgATYCMCAQIAY2AiwgECgC3BchBCAQIBBB1BdqNgIoIAEgBEcNASAQIDY2AgwgEEEMaiAQQShqEPwDIBYgBzYCjAIgFiAFOgCIAiAQKAJIIgEEQCABQQRrKAIAEBELIBAoAlAiAQRAIAFBBGsoAgAQEQsgECgCWCIBBEAgAUEEaygCABARCyAQKAJgIgEEQCABQQRrKAIAEBELIBAoAmwiAQRAIAFBBGsoAgAQEQsgECgCeCIBBEAgAUEEaygCABARCyAQKAKEASIBBEAgAUEEaygCABARCyAcKAI0IgUEQCAFIgEgHCgCOCIERwRAA0AgBEEMayIBKAIAIgYEQCAEQQhrIAY2AgAgBEEEaygCABogBhARCyABIgQgBUcNAAsgHCgCNCEBCyAcIAU2AjggHCgCPBogARARCyAcKAIsIgEEQCABQQRrKAIAEBELIBwoAiAiBQRAIAUiASAcKAIkIgRHBEADQCAEQQxrIgEoAgAiBgRAIARBCGsgBjYCACAEQQRrKAIAGiAGEBELIAEiBCAFRw0ACyAcKAIgIQELIBwgBTYCJCAcKAIoGiABEBELIBwoAhgiAQRAIAFBBGsoAgAQEQsgHCgCECIBBEAgAUEEaygCABARCyAcKAIIIgEEQCABQQRrKAIAEBELIBwoAgAiAQRAIAFBBGsoAgAQEQsgEEHQAWoQpwIgECgC1BciAUUNDSABQQRrKAIAEBEMDQsgBkEATA0OIARBAEwNKyABQQBMDSsgByAKKwMAOQMAIAVBAEwNDQwrCwwhCwwdCwwpCwwoCwwnCwwmCwwhCwwfC0EIEBdBoA0QLUGg4wJBBBABAAsMIgtBCBAXQd4OEC1BoOMCQQQQAQALIAkgEEGEAWogEEHUF2ogEEHgAGoiACAQQYgEaiAcQQAgFBD+AyAQQdABaiAAIBAoAvwBEN8BIBAtAPQBQQFHDREgEC0A9wFFBEAgEC0A+AFBAXFFDQ8LIBAtAPkBDR8gEC0A+gFBAXENHwwPCyAQQeAXaiQADAILQds6QbEhQZoDQYwqEAAAC0HbOkGxIUGjAUGMKhAAAAsgFiAWLQCIAjoALCAWIBYoAowCNgIoIBYoAhAhAQJAIBYoAgwiBiACckEASEEAIBYoAggiBBtFBEAgBkEASA0EIAEgAmsiASACckEASA0EIAJBAEwNASAGRQ0BQQEhCSAEIAEgBmxBA3RqIgorAwAiViFaAkAgBkEBRg0AIAZBAWsiAUEDcSEEIAZBAmtBA08EQCAKQRhqIQUgCkEQaiEHIApBCGohESABQXxxIQ5BACEIA0AgBSAJQQN0IgFqKwMAIlcgASAHaisDACJYIAEgEWorAwAiWSABIApqKwMAIlsgWiBaIFtkGyJaIFkgWmMbIlkgWCBZYxsiWCBXIFhjGyFaIAlBBGohCSAIQQRqIgggDkcNAAsLIARFDQBBACEHA0AgCiAJQQN0aisDACJXIFogVyBaYxshWiAJQQFqIQkgB0EBaiIHIARHDQALCyACQQFHBEBBAiACIAJBAkwbIREgBkH8////B3EhFyAGQQNxIQQgBkEESSEcQQEhDgNAIAogBiAObEEDdGohB0EAIQhBACEJQQAhBSAcRQRAA0AgByAJQQN0aiIBKwMYIlcgASsDECJYIAErAwgiWSABKwMAIlsgWiBaIFtkGyJaIFkgWmMbIlkgWCBZYxsiWCBXIFhjGyFaIAlBBGohCSAFQQRqIgUgF0cNAAsLIAQEQANAIAcgCUEDdGorAwAiVyBaIFcgWmMbIVogCUEBaiEJIAhBAWoiCCAERw0ACwsgDkEBaiIOIBFHDQALC0EBIQkCQCAGQQFGDQAgBkEBayIBQQNxIQQgBkECa0EDTwRAIApBGGohBSAKQRBqIQcgCkEIaiERIAFBfHEhDkEAIQgDQCAFIAlBA3QiAWorAwAiVyABIAdqKwMAIlggASARaisDACJZIAEgCmorAwAiWyBWIFYgW2MbIlYgViBZYxsiViBWIFhjGyJWIFYgV2MbIVYgCUEEaiEJIAhBBGoiCCAORw0ACwsgBEUNAEEAIQcDQCAKIAlBA3RqKwMAIlcgViBWIFdjGyFWIAlBAWohCSAHQQFqIgcgBEcNAAsLIAJBAUcEQEECIAIgAkECTBshESAGQfz///8HcSEXIAZBA3EhBCAGQQRJIRxBASEOA0AgCiAGIA5sQQN0aiEHQQAhCEEAIQlBACEFIBxFBEADQCAHIAlBA3RqIgErAxgiVyABKwMQIlggASsDCCJZIAErAwAiWyBWIFYgW2MbIlYgViBZYxsiViBWIFhjGyJWIFYgV2MbIVYgCUEEaiEJIAVBBGoiBSAXRw0ACwsgBARAA0AgByAJQQN0aisDACJXIFYgViBXYxshViAJQQFqIQkgCEEBaiIIIARHDQALCyAOQQFqIg4gEUcNAAsLID5BAEoEQCACQQFKIgEgBkEBRnEhF0EBIDAgMEEBTBshHCACQQEgARsiEUH+////B3EiAUECdCEPRAAAAAAAACRAIFaZIlYgWpkiVyBWIFdkGyJWo0QAAAAAAADwPyBWRAAAAAAAAAAAZBsiVv0UIWVBACEOA0AgCiAOQQN0aiEHAkACQCAXRQRAQQAhBQwBCyAPIBtqQQAhCQNAIBsgCUECdGogZSAHIAlBA3Rq/QADAP3yASJm/SEAtv0TIGb9IQG2/SAB/VsCAAAgCUECaiIJIAFHDQALIRsgASIFIBFGDQELQQAhCCARIAUiCWtBA3EiBARAA0AgGyBWIAcgBiAJbEEDdGorAwCitjgCACAbQQRqIRsgCUEBaiEJIAhBAWoiCCAERw0ACwsgBSARa0F8Sw0AA0AgGyBWIAcgBiAJbEEDdGorAwCitjgCACAbIFYgByAJQQFqIAZsQQN0aisDAKK2OAIEIBsgViAHIAlBAmogBmxBA3RqKwMAorY4AgggGyBWIAcgCUEDaiAGbEEDdGorAwCitjgCDCAbQRBqIRsgCUEEaiIJIBFHDQALCyAOQQFqIg4gHEcNAAsLIBYoAiAiAQRAIAFBBGsoAgAQEQsgFigCFCIBBEAgAUEEaygCABARCyAWKAIIIgEEQCABQQRrKAIAEBELIBYoAswBIgQEQCAEIhsgFigC0AEiAUcEQANAIAFBDGsiBSgCACIGBEAgAUEIayAGNgIAIAFBBGsoAgAaIAYQEQsgBSIBIARHDQALIBYoAswBIRsLIBYgBDYC0AEgFigC1AEaIBsQEQsgFigCwAEiAQRAIBYgATYCxAEgFigCyAEaIAEQEQsgFigCtAEiAQRAIBYgATYCuAEgFigCvAEaIAEQEQsgFigCqAEiAQRAIBYgATYCrAEgFigCsAEaIAEQEQsgFigCmAEiAQRAIBYgATYCnAEgFigCoAEaIAEQEQsgFigCjAEiAQRAIBYgATYCkAEgFigClAEaIAEQEQsgFigCgAEiAQRAIBYgATYChAEgFigCiAEaIAEQEQsgFigC2AEiAQRAIBYgATYC3AEgFigC4AEaIAEQEQsgFigC5AEiAQRAIBYgATYC6AEgFigC7AEaIAEQEQsgFigC/AEiAQRAIAEQEQsgFkGQAmokAEEBDAULDBgLDBYLIBYgFzYC7AEgFiAHNgLoASAWIAg2AtgBIBYgBDYC5AEMBwsgFiAXNgLsASAWIAc2AugBIBYgCDYC2AEgFiAENgLkAQwGCwwOCyA9DQNFDQEMAwsgPQ0CCyAjIB8oAogBIB8oAoQBa0EMbSACbCIErSJqNwNwQgEhaQNAICNB8ABqIgEgaadBA3RqIGpCPoggaoVCrf7V5NSF/ajYAH4gaXwiajcDACBpQgF8ImunQQN0IAFqIGpCPoggaoVCrf7V5NSF/ajYAH4ga3wiajcDACBpQgJ8ImunQQN0IAFqIGpCPoggaoVCrf7V5NSF/ajYAH4ga3wiajcDACBpQgN8ImtCuAJSBEAga6dBA3QgAWogakI+iCBqhUKt/tXk1IX9qNgAfiBrfCJqNwMAIGlCBHwhaQwBCwsgBEUNAUEAIQdBACEBA0AgI0HwAGoiBSABQQN0aiIGIAFBnAFqQbgCcEEDdCAFaikDAELps5jLquubgbV/QgAgAUEBaiIBQQAgAUG4AkcbIgFBA3QgBWopAwAiaadBAXEbhSBpQv7///8HgyAGKQMAQoCAgIB4g4RCAYiFImk3AwAgaUIdiELVqtWq1QCDIGmFImlCEYZCgICY7f7/n+vxAIMgaYUiaUIlhkKAgICAgNz7e4MgaYUiaUIriCBphbVDAACAH5QibEMAAIA/Ww0AIAMgB0ECdGogbEMAAKBBlEMAACDBkjgCACAHQQFqIgcgBEcNAAsMAQsgPUECRw0AICMgHygCiAEgHygChAFrQQxtIAJsIgStImo3A3BCASFpA0AgI0HwAGoiASBpp0EDdGogakI+iCBqhUKt/tXk1IX9qNgAfiBpfCJqNwMAIGlCAXwia6dBA3QgAWogakI+iCBqhUKt/tXk1IX9qNgAfiBrfCJqNwMAIGlCAnwia6dBA3QgAWogakI+iCBqhUKt/tXk1IX9qNgAfiBrfCJqNwMAIGlCA3wia0K4AlIEQCBrp0EDdCABaiBqQj6IIGqFQq3+1eTUhf2o2AB+IGt8Imo3AwAgaUIEfCFpDAELCyAERQ0AQQAhB0EAIQEDQCAjQfAAaiIFIAFBA3RqIgYgAUGcAWpBuAJwQQN0IAVqKQMAQumzmMuq65uBtX9CACABQQFqIgFBACABQbgCRxsiAUEDdCAFaikDACJpp0EBcRuFIGlC/v///weDIAYpAwBCgICAgHiDhEIBiIUiaTcDACBpQh2IQtWq1arVAIMgaYUiaUIRhkKAgJjt/v+f6/EAgyBphSJpQiWGQoCAgICA3Pt7gyBphSJpQiuIIGmFtUMAAIAflCJsQwAAgD9bDQAgAyAHQQJ0aiBsQwAAoEGUQwAAIMGSOAIAIAdBAWoiByAERw0ACwsCQCAsKwMoRAAAAAAAAAAAZUUEQCAsKwMwRAAAAAAAAAAAZUUNAQsgLCsDGCFWICwrAyAhWEEAIQZEAAAAAAAAAAAhWkHgEhASIgVBAEHgEvwLAEHgEhASIgdBAEHgEvwLAEHgEhASIhFBAEHgEvwLACBWRAAAAAAAAAhAokQAAAAAAMByQKMhWwNAIAUgBkEDdCIBaiBbIAZBAWoiBriiIlc5AwAgASARaiBXENQBOQMAIAEgB2ogVyBYZQR8RAAAAAAAAPA/BQJ8AkAgVyBYoZogVqMiV71CNIinQf8PcSIEQckHa0E/SQRAIAQhAQwBCyBXRAAAAAAAAPA/oCJZIARByQdJDQEaQQAhASAEQYkISQ0ARAAAAAAAAAAAIFe9ImlCgICAgICAgHhRDQEaIFkgBEH/D08NARogaUIAUwRAIwBBEGsiAUQAAAAAAAAAEDkDCCABKwMIRAAAAAAAAAAQogwCCyMAQRBrIgFEAAAAAAAAAHA5AwggASsDCEQAAAAAAAAAcKIMAQsgV0Hg/QArAwCiQej9ACsDACJZoCJdIFmhIllB+P0AKwMAoiBZQfD9ACsDAKIgV6CgIlcgV6IiWSBZoiBXQZj+ACsDAKJBkP4AKwMAoKIgWSBXQYj+ACsDAKJBgP4AKwMAoKIgXb0iaqdBBHRB8A9xIgRB0P4AaisDACBXoKCgIVcgBEHY/gBqKQMAIGpCLYZ8IWkgAUUEQAJ8IGpCgICAgAiDUARAIGlCgICAgICAgIg/fb8iWSBXoiBZoEQAAAAAAAAAf6IMAQsgaUKAgICAgICA8D98vyJZIFeiIl0gWaAiV0QAAAAAAADwP2MEfCMAQRBrIgEgAUKAgICAgICACDcDCCABKwMIRAAAAAAAABAAojkDCEQAAAAAAAAAACBXRAAAAAAAAPA/oCJfIF0gWSBXoaAgV0QAAAAAAADwPyBfoaCgoEQAAAAAAADwv6AiVyBXRAAAAAAAAAAAYRsFIFcLRAAAAAAAABAAogsMAQsgab8iWSBXoiBZoAsLOQMAIAZBrAJHDQALQQAhBkHgEhASIgRBAEHgEvwLAEHgEhASIglBAEHgEvwLAEHgEhASIgFBAEHgEvwLAEQAAAAAAADwPyBYIFZE7zn6/kIu5j+ioCJXIFdEAAAAAAAA4D8gVqOiIlYgVqAiVyBXoCJWEJIBoyJY/RQhZQNAIAkgBkEDdCIIaiAFIAhqIhsrAwAgVhCSAf0UIBsrAwggVhCSAf0iASJm/QsDACAEIAhq/QwAAAAAAADwPwAAAAAAAPA//QwAAAAAAADwPwAAAAAAAPA/IGUgZv3yAf3wAf3zASJm/QsDACABIAhqIAcgCGr9AAMAIGb98QH9CwMAIAZBAmoiBkGsAkcNAAsgAUEgaiEbIAFBGGohCiABQRBqIQ4gAUEIaiEXQQAhBgNAIBsgBkEDdCIIaisDACJWIFaiIAggCmorAwAiViBWoiAIIA5qKwMAIlYgVqIgCCAXaisDACJWIFaiIAEgCGorAwAiViBWoiBaoKCgoKAhWiAGQQVqIgZBrAJHDQALIAFBIGohDiABQRhqIRcgAUEQaiEcIAFBCGohD0EAIRsDQCBYIVYgVyFZIFohW0QAAAAAAAAAACFgRAAAAAAAAAAAIWFEAAAAAAAAAAAhV0QAAAAAAAAAACFdRAAAAAAAAAAAIV9BACEGA0AgBCAGQQN0IghqKwMAIlggWCAIIAlqKwMAoqIiWCBYIFYgCCARaisDACJaIFqgoqIiWqIgV6AhVyBYIAEgCGorAwAiYqIgXaAhXSBYIFiiIGCgIWAgWiBioiBfoCFfIFogWqIgYaAhYSAGQQFqIgZBrAJHDQALAkAgXkQAAAAAAACQQGNFDQAgVyBfmqIhYiBXIFeaoiFjIF2aIFeiIWQDQCBZIGQgXyBgIF5EAAAAAAAA8D+gIleiIliioCBYIGEgV6IiWKIgY6AiXKOhIlcgV6AhWiBWIF0gWKIgYqAgXKOhIlj9FCFlQQAhBkEAIQgDQCAJIAhBA3QiCmogBSAKaiIMKwMAIFoQkgH9FCAMKwMIIFoQkgH9IgEiZv0LAwAgBCAKav0MAAAAAAAA8D8AAAAAAADwPyBlIGb98gH9DAAAAAAAAPA/AAAAAAAA8D/98AH98wEiZv0LAwAgASAKaiAHIApq/QADACBm/fEB/QsDACAIQQJqIghBrAJHDQALRAAAAAAAAAAAIVoDQCAOIAZBA3QiCGorAwAiXCBcoiAIIBdqKwMAIlwgXKIgCCAcaisDACJcIFyiIAggD2orAwAiXCBcoiABIAhqKwMAIlwgXKIgWqCgoKCgIVogBkEFaiIGQawCRw0ACyBaIFtjBEAgWyBaoSBbRI3ttaD3xrA+omUNAiBeRAAAAAAAAOA/oiFeIFghViBXIVkgG0EBaiIbQTJGDQIMAwtEAAAAAAAAsDwgXiBeoCBeRAAAAAAAAAAAYRsiXkQAAAAAAACQQGMNAAsLCyAjIFk5A3ggIyBWOQNwIAEQESAJEBEgBBARIBEQESAHEBEgBRARICwgI/0ABHD9CwMoCyAfKAKIASAfKAKEAWtBDG0hBAJAICwoAkQiAUEATg0AQfQDIQEgBEGRzgBJDQBEAAAAAGDjRkEgBLijm/wCQcgBaiEBCyAsIAE2AkQgI0EQaiEbICwrA1C2IW1BACEFQQAhEUMAAAAAIWwCQAJAIB8oAoQBIgQgHygCiAEiCEcEQCAEIQUDQCAFKAIEIgcgBSgCACIGa0EDdSAGIAdHBEADQCAGKgIEIm4gbCBsIG5dGyFsIAZBCGoiBiAHRw0ACwsgEWohESAFQQxqIgUgCEcNAAsgG/0MAAAAAAAAAAAAAAAAAAAAAP0LAgQgG0EIaiEJIAggBGtBDG0iBUGAgICABEkEQCAbIAVBAnQiBhASIgU2AgggGyAFIAZqIgc2AhAgBgRAIAVBACAG/AsACyAbIAc2AgwgG/0MAAAAAAAAAAAAAAAAAAAAAP0LAhQgG/0MAAAAAAAAAAAAAAAAAAAAAP0LAiQgG/0MAAAAAAAAAAAAAAAAAAAAAP0LAjQgGyABNgIAIBtBFGohCiARRQ0CIBFBgICAgARPDQQgGyARQQJ0IgYQEiIHNgIYIBsgBzYCFCAbIAYgB2o2AhwgGyAGEBIiBzYCJCAbIAc2AiAgGyAGIAdqNgIoDAMLDAMLIBv9DAAAAAAAAAAAAAAAAAAAAAD9CwIEIBsgATYCACAb/QwAAAAAAAAAAAAAAAAAAAAA/QsCNCAb/QwAAAAAAAAAAAAAAAAAAAAA/QsCJCAbQRRqIgr9DAAAAAAAAAAAAAAAAAAAAAD9CwIAIBtBCGohCQtBACEHCyAbQSxqIAQgCEYEfyAHBSBsIAGylSFvQQAhEUEAIRcDQCAEIBdBDGxqIgEoAgAiBiABKAIEIhxHBEACQANAAkAgbyAGKgIEXwRAAkAgGygCGCIBIBsoAhwiCEkEQCABIAYoAgA2AgAgAUEEaiEFDAELIAEgCigCACIBayIEQQJ1Ig5BAWoiBUGAgICABE8NCCAEQf////8DIAggAWsiCEEBdSIPIAUgBSAPSRsgCEH8////B08bIgUEfyAFQYCAgIAETw0DIAVBAnQQEgVBAAsiD2oiCCAGKAIANgIAIAggDkECdGshDiAEBEAgDiABIAT8CgAACyAbIA8gBUECdGo2AhwgGyAIQQRqIgU2AhggGyAONgIUIAFFDQAgARARIBsoAiQhBwsgGyAFNgIYIGwgBioCBJUhbgJAIBsoAigiCCAHSwRAIAcgbjgCACAHQQRqIQcMAQsgByAbKAIgIgFrIgRBAnUiDkEBaiIFQYCAgIAETw0IIARB/////wMgCCABayIHQQF1IgggBSAFIAhJGyAHQfz///8HTxsiBQR/IAVBgICAgARPDQMgBUECdBASBUEACyIPaiIHIG44AgAgByAOQQJ0ayEIIAQEQCAIIAEgBPwKAAALIBsgDyAFQQJ0ajYCKCAbIAdBBGoiBzYCJCAbIAg2AiAgAUUNACABEBELIBsgBzYCJCARQQFqIRELIBwgBkEIaiIGRw0BDAILCwwFCyAfKAKIASEIIAkoAgAhBSAfKAKEASEECyAFIBdBAnRqIBE2AgAgF0EBaiIXIAggBGtBDG1JDQALIBsoAiALIgEgByAHIAFrQQJ1ECsgG0E4aiAbKAIgIgEgGygCJCIEIAQgAWtBAnUQKwJAIBsoAjgiASAbKAI8IgRGDQACQCAEIAFrQQRrIgVBDEkEQCABIQYMAQsgASAFQQJ2QQFqIghB/P///wdxIgVBAnRqIQYgbf0TIWVBACEHA0AgASAHQQJ0aiIJIAn9AAIAIGX95wH9CwIAIAdBBGoiByAFRw0ACyAFIAhGDQELA0AgBiAGKgIAIG2VOAIAIAZBBGoiBiAERw0ACwsgGyBtOAJEIABByABqICxB8AD8CgAAIAAgIykDEDcDACAAICP9AAMY/QsDCCAAICP9AAMo/QsDGCAAICP9AAM4/QsDKCAAICMoAkg2AjggACAjKAJMNgI8IAAgIygCUDYCQCAAICMqAlQ4AkQgACAAKQOoASJqNwO4ASAAQbgBaiEBQgEhaQNAIAEgaadBA3RqIGpCPoggaoVCrf7V5NSF/ajYAH4gaXwiajcDACABIGlCAXwia6dBA3RqIGpCPoggaoVCrf7V5NSF/ajYAH4ga3wiajcDACABIGlCAnwia6dBA3RqIGpCPoggaoVCrf7V5NSF/ajYAH4ga3wiajcDACBpQgN8ImtCuAJSBEAgASBrp0EDdGogakI+iCBqhUKt/tXk1IX9qNgAfiBrfCJqNwMAIGlCBHwhaQwBCwsgACADNgKEFSAAIAI2AoAVIABBADYC+BQgI0HAFGokACAfKAKEASICBEAgAiIBIB8oAogBIgBHBEADQCAAQQxrIgEoAgAiAwRAIABBCGsgAzYCACAAQQRrKAIAGiADEBELIAEiACACRw0ACyAfKAKEASEBCyAfIAI2AogBIB8oAowBGiABEBELIB8oApABIgIEQCACIgEgHygClAEiAEcEQANAIABBDGsiASgCACIDBEAgAEEIayADNgIAIABBBGsoAgAaIAMQEQsgASIAIAJHDQALIB8oApABIQELIB8gAjYClAEgHygCmAEaIAEQEQsgH0GwAWokAA8LEBMACxAfAAtBxMEAQbwiQegAQckqEAAAC0H3wABBvCJB+ABBtCoQAAALQcYPQdccQf0FQaEmEAAAC0HZxwBBvCJBggJBxA4QAAALQQQQFyIAQYjhAjYCACAAQeDgAjYCACAAQazhAkECEAEAC0HrLUH+IEGwAkHfJBAAAAtBjC9B5CFBpgFBqSUQAAALQfUPQYIgQZMBQcoZEAAAC0G+O0H3G0HiAEGQDRAAAAtB88UAQY8iQYYCQd8kEAAAC0GqOUGiHEGwAUGFFhAAAAtBxDpB0BtB0gBBiAwQAAALQfo6QbIaQZsDQZkJEAAAC0GoNEHkIUGyAUGpJRAAAAtB0jVBgiBB+gBByhkQAAALQbEyQfYdQcoAQc0VEAAAC0GqOUHXHEHyBUGhJhAAAAtB3zlBsSFB7wJBlDoQAAALQZHCAEH+IEGVAkHfJBAAAAtJAQJ/IAAoAgQiBUEIdSEGIAAoAgAiACABIAVBAXEEfyAGIAIoAgBqKAIABSAGCyACaiADQQIgBUECcRsgBCAAKAIAKAIYEQgAC3wBAn9B9JsDLQAABEBB8JsDKAIADwsCfwNAIABB0OcCaiIBLQAARQRAIAFBAToAACAAQQJ0QdDoAmpBADYCAEHsmwMgADYCAEEADAILIABBAWoiAEGAAUcNAAtBBgsEQBAgAAtB9JsDQQE6AABB8JsDQeybAzYCAEHsmwMLNQEDfyMAQSBrIgIkACACQQxqIAJBFWoiAyACQSBqIgQgARC7AiAAIAMgAigCDBCAAiAEJAAL/AEBA38jAEEQayICJAAgAiABOgAPAkACQAJ/IAAtAAsiA0EHdiIERQRAQQohASADQf8AcQwBCyAAKAIIQf////8HcUEBayEBIAAoAgQLIgMgAUYEQCAAIAFBASABIAEQ9wECfyAALQALQQd2BEAgACgCAAwBC0EACxoMAQsCfyAALQALQQd2BEAgACgCAAwBC0EACxogBA0AIAAiASAALQALQYABcSADQQFqQf8AcXI6AAsgACAALQALQf8AcToACwwBCyAAKAIAIQEgACADQQFqNgIECyABIANqIgAgAi0ADzoAACACQQA6AA4gACACLQAOOgABIAJBEGokAAsEAEEEC8gFAgV/An0gAigCACEGIAACfwJAIAEoAgQiBEUNACABKAIAAn8gBEEBayAGcSAEaSIHQQFNDQAaIAYgBCAGSw0AGiAGIARwCyIFQQJ0aigCACICRQ0AIAIoAgAiAkUNACAHQQFNBEAgBEEBayEHA0ACQCAGIAIoAgQiCEcEQCAHIAhxIAVHDQQMAQsgAigCCCAGRw0AQQAMBAsgAigCACICDQALDAELA0ACQCAGIAIoAgQiB0cEQCAEIAdNBH8gByAEcAUgBwsgBUcNAwwBCyACKAIIIAZHDQBBAAwDCyACKAIAIgINAAsLQQwQEiICIAY2AgQgAkEANgIAIAIgAygCADYCCCABKgIQIQkgASgCDEEBarMhCgJAIAQEQCAJIASzlCAKXUUNAQtBAiEFAkAgBCAEQQFrcUEARyAEQQNJciAEQQF0ciIDIAogCZWN/AEiByADIAdLGyIDQQFGDQAgAyADQQFrcUUEQCADIQUMAQsgAxDRASEFIAEoAgQhBAsCQCAEIAVPBEAgBCAFTQ0BIAEoAgyzIAEqAhCVjfwBIQMgBQJ/AkAgBEEDSQ0AIARpQQFLDQAgA0EBQSAgA0EBa2drdCADQQJJGwwBCyADENEBCyIHIAUgB0sbIgUgBE8NAQsgASAFENsCCyABKAIEIgQgBEEBayIDcUUEQCADIAZxIQUMAQsgBCAGSwRAIAYhBQwBCyAGIARwIQULAkAgASgCACIGIAVBAnRqIgUoAgAiA0UEQCACIAFBCGoiAygCADYCACABIAI2AgggBSADNgIAIAIoAgAiA0UNASADKAIEIQMCQCAEIARBAWsiBXFFBEAgAyAFcSEDDAELIAMgBEkNACADIARwIQMLIAYgA0ECdGogAjYCAAwBCyACIAMoAgA2AgAgAyACNgIACyABIAEoAgxBAWo2AgxBAQs6AAQgACACNgIACwgAQf////8HCwUAQf8AC3YBAX8jAEEQayICJAAgAiAANgIMAkAgACABRg0AA0AgAiABQQRrIgE2AgggACABTw0BIAIoAgwiACgCACEBIAAgAigCCCIAKAIANgIAIAAgATYCACACIAIoAgxBBGoiADYCDCACKAIIIQEMAAsACyACQRBqJAAL/AQBCH8jAEEQayILJAAgBkHcjwMQFSEJIAtBBGoiByAGQaSQAxAVIgggCCgCACgCFBECAAJAAn8gBy0AC0EHdgRAIAcoAgQMAQsgBy0AC0H/AHELRQRAIAkgACACIAMgCSgCACgCMBEKABogBSADIAIgAGtBAnRqIgY2AgAMAQsgBSADNgIAAkACQCAAIgotAAAiBkEraw4DAAEAAQsgCSAGwCAJKAIAKAIsEQMAIQcgBSAFKAIAIgZBBGo2AgAgBiAHNgIAIABBAWohCgsCQCACIAprQQJIDQAgCi0AAEEwRw0AIAotAAFBIHJB+ABHDQAgCUEwIAkoAgAoAiwRAwAhByAFIAUoAgAiBkEEajYCACAGIAc2AgAgCSAKLAABIAkoAgAoAiwRAwAhByAFIAUoAgAiBkEEajYCACAGIAc2AgAgCkECaiEKCyAKIAIQdiAIIAgoAgAoAhARAAAhDkEAIQcgCiEGA38gAiAGTQR/IAMgCiAAa0ECdGogBSgCABC2ASAFKAIABQJAAn8gC0EEaiIILQALQQd2BEAgCCgCAAwBCyAICyAHai0AAEUNACAMAn8gCC0AC0EHdgRAIAgoAgAMAQsgCAsgB2osAABHDQAgBSAFKAIAIg1BBGo2AgAgDSAONgIAIAcgBwJ/IAgtAAtBB3YEQCAIKAIEDAELIAgtAAtB/wBxC0EBa0lqIQdBACEMCyAJIAYsAAAgCSgCACgCLBEDACENIAUgBSgCACIIQQRqNgIAIAggDTYCACAGQQFqIQYgDEEBaiEMDAELCyEGCyAEIAYgAyABIABrQQJ0aiABIAJGGzYCACALQQRqEBQaIAtBEGokAAvQAQECfyACQYAQcQRAIABBKzoAACAAQQFqIQALIAJBgAhxBEAgAEEjOgAAIABBAWohAAsgAkGEAnEiA0GEAkcEQCAAQa7UADsAACAAQQJqIQALIAJBgIABcSECA0AgAS0AACIEBEAgACAEOgAAIABBAWohACABQQFqIQEMAQsLIAACfwJAIANBgAJHBEAgA0EERw0BQcYAQeYAIAIbDAILQcUAQeUAIAIbDAELQcEAQeEAIAIbIANBhAJGDQAaQccAQecAIAIbCzoAACADQYQCRwvyBAEIfyMAQRBrIgskACAGQeSPAxAVIQkgC0EEaiIHIAZBnJADEBUiCCAIKAIAKAIUEQIAAkACfyAHLQALQQd2BEAgBygCBAwBCyAHLQALQf8AcQtFBEAgCSAAIAIgAyAJKAIAKAIgEQoAGiAFIAMgAiAAa2oiBjYCAAwBCyAFIAM2AgACQAJAIAAiCi0AACIGQStrDgMAAQABCyAJIAbAIAkoAgAoAhwRAwAhByAFIAUoAgAiBkEBajYCACAGIAc6AAAgAEEBaiEKCwJAIAIgCmtBAkgNACAKLQAAQTBHDQAgCi0AAUEgckH4AEcNACAJQTAgCSgCACgCHBEDACEHIAUgBSgCACIGQQFqNgIAIAYgBzoAACAJIAosAAEgCSgCACgCHBEDACEHIAUgBSgCACIGQQFqNgIAIAYgBzoAACAKQQJqIQoLIAogAhB2IAggCCgCACgCEBEAACEOQQAhByAKIQYDfyACIAZNBH8gAyAKIABraiAFKAIAEHYgBSgCAAUCQAJ/IAtBBGoiCC0AC0EHdgRAIAgoAgAMAQsgCAsgB2otAABFDQAgDAJ/IAgtAAtBB3YEQCAIKAIADAELIAgLIAdqLAAARw0AIAUgBSgCACINQQFqNgIAIA0gDjoAACAHIAcCfyAILQALQQd2BEAgCCgCBAwBCyAILQALQf8AcQtBAWtJaiEHQQAhDAsgCSAGLAAAIAkoAgAoAhwRAwAhDSAFIAUoAgAiCEEBajYCACAIIA06AAAgBkEBaiEGIAxBAWohDAwBCwshBgsgBCAGIAMgASAAa2ogASACRhs2AgAgC0EEahAUGiALQRBqJAAL4AUBC38jAEGAAWsiCiQAIAogATYCfCAKQfcBNgIQIApBCGpBACAKQRBqIggQKiELAkACQAJAIAMgAmtBDG0iCUHlAE8EQCAJEBYiCEUNASALKAIAIQEgCyAINgIAIAEEQCABIAsoAgQRAQALCyAIIQcgAiEBA0AgASADRgRAA0AgACAKQfwAaiIBECRBASAJGwRAIAAgARAkBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAILQAAQQJGDQcgCEEBaiEIIAJBDGohAgwACwALAn8gACgCACIHKAIMIgEgBygCEEYEQCAHIAcoAgAoAiQRAAAMAQsgASgCAAshDiAGRQRAIAQgDiAEKAIAKAIcEQMAIQ4LIA9BAWohDUEAIRAgCCEHIAIhAQNAIAEgA0YEQCANIQ8gEEUNAiAAEDAaIAghByACIQEgCSAMakECSQ0CA0AgASADRgRADAQFAkAgBy0AAEECRw0AAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELIA9GDQAgB0EAOgAAIAxBAWshDAsgB0EBaiEHIAFBDGohAQwBCwALAAUCQCAHLQAAQQFHDQACfyABLQALQQd2BEAgASgCAAwBCyABCyAPQQJ0aigCACERAkAgBgR/IBEFIAQgESAEKAIAKAIcEQMACyAORgRAQQEhEAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyANRw0CIAdBAjoAACAMQQFqIQwMAQsgB0EAOgAACyAJQQFrIQkLIAdBAWohByABQQxqIQEMAQsACwALAAUgB0ECQQECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtFIg0bOgAAIAdBAWohByABQQxqIQEgDCANaiEMIAkgDWshCQwBCwALAAsQIAALIAUgBSgCAEEEcjYCAAsgCygCACEAIAtBADYCACAABEAgACALKAIEEQEACyAKQYABaiQAIAILgSoDE38DfQF+IwBBEGsiCiQAIABBADYCCCAAQgA3AgACQCABKAIIRQ0AIAIgASgCgAEgASgCjAEgASgCeCIJIAEoAgxsamogASgCqAEgASgCpAERCwAhGSABKAJAIgZBAEoEQANAIAYiCEEBayEGA0ACQCABKAKQASAJQQJ0aigCACABKAIQIAZsaiIFLwEAIQ0gASABKALkAUEBajYC5AEgASANIAEoAuABajYC4AEgDUUNACAFQQRqIRNBACEFQQAhDAJAA0AgEyAFQQJ0aigCACIHIAEoAgRNBEAgAiABKAKAASABKAKMASABKAIMIAdsamogASgCqAEgASgCpAERCwAiGCAZIBggGV0iCxshGSAHIAkgCxshCSALIAxyIQwgDSAFQQFqIgVHDQEMAgsLQQgQF0HbExAtQaDjAkEEEAEACyAMQQFxDQELCyAIQQFKDQALCwJAAkAgBA0AIAEoAhQNACABKAIoIgQgAyADIARJGyEQIwBBIGsiByQAIAcgCTYCHCABKAJEEPgBIhMvAQAhESATKAIEIRQgCkEANgIIIApCADcCACAHQQA2AhQgB0IANwIMIAcgAiIMIAEoAoABIAEoAowBIAEoAgwgCWxqaiABKAKoASABKAKkARELACIZOAIIIAogB0EIaiAHQRxqIgIQRiAHIAcqAgiMOAIEIAdBDGogB0EEaiACEEYgFCAHKAIcQQF0aiAROwEAAkAgBygCDCIGIAcoAhAiC0YNAANAIBkgBioCAIxdDQEgBigCBCEPAkAgCyAGa0EDdSIJQQJIDQAgCUECa0EBdiESIAYpAgAhG0EAIQQgBiECA0AgBEEBdCINQQFyIQUgAiIIIARBA3RqIg5BCGohAgJAIAkgDUECaiINTARAIAUhBAwBCyAFIQQgDioCCCAOQRBqIgUqAgBdRQ0AIAUhAiANIQQLIAggAikCADcCACAEIBJMDQALIAtBCGsiBCACRgRAIAIgGzcCAAwBCyACIAQpAgA3AgAgBCAbNwIAIAIgBmtBCGpBA3UiBEECSA0AIAIqAgAiGCAGIARBAmtBAXYiBEEDdGoiCCoCAF5FDQAgAigCBCEFA0ACQCACIAgiAikCADcCACAERQ0AIAYgBEEBa0EBdiIEQQN0aiIIKgIAIBhdDQELCyACIAU2AgQgAiAYOAIACyAHIAcoAhBBCGsiCzYCECABKAKEASABKAKMASABKAIMIA9samoiEi8BACIVBEBBASEEAkACQAJAA0ACQAJAIBQgEiAEIg1BAnRqKAIAIgZBAXRqIgIvAQAgEUYNACACIBE7AQAgGSAMIAEoAoABIAEoAowBIAEoAgwgBmxqaiABKAKoASABKAKkARELACIYXkUgECAKKAIEIAooAgBrQQN1TXENACAYjCEaAkAgBygCECICIAcoAhQiCEkEQCACIAY2AgQgAiAaOAIAIAJBCGohCAwBCyACIAcoAgwiAmsiBEEDdSIJQQFqIgVBgICAgAJPDQIgBEH/////ASAIIAJrIghBAnUiCyAFIAUgC0kbIAhB+P///wdPGyIFBH8gBUGAgICAAk8NBSAFQQN0EBIFQQALIgtqIgggBjYCBCAIIBo4AgAgCCAJQQN0ayEJIAQEQCAJIAIgBPwKAAALIAcgCyAFQQN0ajYCFCAHIAhBCGoiCDYCECAHIAk2AgwgAkUNACACEBELIAcgCDYCEAJAIAggBygCDCIJa0EDdSICQQJIDQAgCEEIayIFKgIAIhogCSACQQJrQQF2IgRBA3RqIgIqAgBeRQ0AIAhBBGsoAgAhCANAAkAgBSACIgUpAgA3AgAgBEUNACAJIARBAWtBAXYiBEEDdGoiAioCACAaXQ0BCwsgBSAINgIEIAUgGjgCAAsCQCAKKAIEIgIgCigCCCIISQRAIAIgBjYCBCACIBg4AgAgAkEIaiELDAELIAIgCigCACICayIEQQN1IglBAWoiBUGAgICAAk8NBSAEQf////8BIAggAmsiCEECdSILIAUgBSALSRsgCEH4////B08bIgUEfyAFQYCAgIACTw0FIAVBA3QQEgVBAAsiC2oiCCAGNgIEIAggGDgCACAIIAlBA3RrIQYgBARAIAYgAiAE/AoAAAsgCiALIAVBA3RqNgIIIAogCEEIaiILNgIEIAogBjYCACACRQ0AIAIQEQsgCiALNgIEAkAgCyAKKAIAIgZrQQN1IghBAkgNACALQQhrIgUqAgAiGCAGIAhBAmtBAXYiBEEDdGoiAioCAF5FDQAgC0EEaygCACEIA0ACQCAFIAIiBSkCADcCACAERQ0AIAYgBEEBa0EBdiIEQQN0aiICKgIAIBhdDQELCyAFIAg2AgQgBSAYOAIAIAooAgQiCyAKKAIAIgZrQQN1IQgLIAggEEsEQANAAkAgCyAGa0EDdSIOQQJIDQAgDkECa0EBdiEWIAYpAgAhG0EAIQQgBiECA0AgBEEBdCIJQQFyIQUgAiIIIARBA3RqIg9BCGohAgJAIA4gCUECaiIJTARAIAUhBAwBCyAFIQQgDyoCCCAPQRBqIgUqAgBdRQ0AIAUhAiAJIQQLIAggAikCADcCACAEIBZMDQALIAtBCGsiBCACRgRAIAIgGzcCAAwBCyACIAQpAgA3AgAgBCAbNwIAIAIgBmtBCGpBA3UiBEECSA0AIAIqAgAiGCAGIARBAmtBAXYiBEEDdGoiBSoCAF5FDQAgAigCBCEIA0ACQCACIAUiAikCADcCACAERQ0AIAYgBEEBa0EBdiIEQQN0aiIFKgIAIBhdDQELCyACIAg2AgQgAiAYOAIACyAKIAooAgRBCGsiCzYCBCALIAooAgAiBmtBA3UgEEsNAAsLIAYgC0YNACAGKgIAIRkLIA1BAWohBCANIBVHDQEMBAsLEBMACxAfAAsQEwALIAcoAhAhCwsgBygCDCIGIAtHDQALCwwBCyACIQ0gASgCKCICIAMgAiADSxshECAEIQgjAEEgayIHJAAgByAJNgIcIAEoAkQQ+AEiEy8BACERIBMoAgQhFCAKQQA2AgggCkIANwIAIAdBADYCFCAHQgA3AgwCQAJAIAEoAowBIgIgASgCDCAJbCIFaiIEIAEoAoQBai0AAkEBcQ0AIAgEQCAIIAQgASgCiAFqKAAAIAgoAgAoAgARAwBFDQEgASgCDCAJbCEFIAEoAowBIQILIAcgDSABKAKAASACIAVqaiABKAKoASABKAKkARELACIZOAIIIAogB0EIaiAHQRxqIgIQRiAHIAcqAgiMOAIEIAdBDGogB0EEaiACEEYMAQsgB0H///97NgIIIAdBDGogB0EIaiAHQRxqEEZD//9/fyEZCyAUIAcoAhxBAXRqIBE7AQACQCAHKAIMIgYgBygCECILRg0AA0AgBigCBCESIBkgBioCAIxdBEAgCigCBCAKKAIAa0EDdSAQRg0CCwJAIAsgBmtBA3UiDkECSA0AIA5BAmtBAXYhFSAGKQIAIRtBACEEIAYhAgNAIARBAXQiCUEBciEFIAIiDCAEQQN0aiIPQQhqIQICQCAOIAlBAmoiCUwEQCAFIQQMAQsgBSEEIA8qAgggD0EQaiIFKgIAXUUNACAFIQIgCSEECyAMIAIpAgA3AgAgBCAVTA0ACyALQQhrIgQgAkYEQCACIBs3AgAMAQsgAiAEKQIANwIAIAQgGzcCACACIAZrQQhqQQN1IgRBAkgNACACKgIAIhggBiAEQQJrQQF2IgRBA3RqIgUqAgBeRQ0AIAIoAgQhDANAAkAgAiAFIgIpAgA3AgAgBEUNACAGIARBAWtBAXYiBEEDdGoiBSoCACAYXQ0BCwsgAiAMNgIEIAIgGDgCAAsgByAHKAIQQQhrIgs2AhAgASgChAEgASgCjAEgASgCDCASbGpqIhIvAQAiFQRAQQEhCwJAAkADQAJAIAcgEiALQQJ0aigCACICNgIIAkAgFCACQQF0aiIELwEAIBFGDQAgBCAROwEAIAcgDSABKAKAASABKAKMASABKAIMIAJsamogASgCqAEgASgCpAERCwAiGDgCBCAYIBldRSAQIAooAgQgCigCAGtBA3VNcQ0AIBiMIRgCQCAHKAIQIgIgBygCFCIGSQRAIAIgGDgCACACIAcoAgg2AgQgAkEIaiEGDAELIAIgBygCDCICayIEQQN1IgxBAWoiBUGAgICAAk8NAiAEQf////8BIAYgAmsiBkECdSIJIAUgBSAJSRsgBkH4////B08bIgUEfyAFQYCAgIACTw0FIAVBA3QQEgVBAAsiCWoiBiAYOAIAIAYgBygCCDYCBCAGIAxBA3RrIQwgBARAIAwgAiAE/AoAAAsgByAJIAVBA3RqNgIUIAcgBkEIaiIGNgIQIAcgDDYCDCACRQ0AIAIQEQsgByAGNgIQAkAgBiAHKAIMIgxrQQN1IgJBAkgNACAGQQhrIgUqAgAiGCAMIAJBAmtBAXYiBEEDdGoiAioCAF5FDQAgBkEEaygCACEGA0ACQCAFIAIiBSkCADcCACAERQ0AIAwgBEEBa0EBdiIEQQN0aiICKgIAIBhdDQELCyAFIAY2AgQgBSAYOAIACwJAIAEoAowBIAEoAgwgBygCCGxqIgIgASgChAFqLQACQQFxDQAgCARAIAggAiABKAKIAWooAAAgCCgCACgCABEDAEUNAQsgCiAHQQRqIAdBCGoQRgsgECAKKAIEIAooAgAiBmtBA3VJBEADQCAGKAIEGgJAIAooAgQiFiAGa0EDdSIOQQJIDQAgDkECa0EBdiEXIAYpAgAhG0EAIQQgBiECA0AgBEEBdCIJQQFyIQUgAiIMIARBA3RqIg9BCGohAgJAIA4gCUECaiIJTARAIAUhBAwBCyAFIQQgDyoCCCAPQRBqIgUqAgBdRQ0AIAUhAiAJIQQLIAwgAikCADcCACAEIBdMDQALIBZBCGsiBCACRgRAIAIgGzcCAAwBCyACIAQpAgA3AgAgBCAbNwIAIAIgBmtBCGpBA3UiBEECSA0AIAIqAgAiGCAGIARBAmtBAXYiBEEDdGoiBSoCAF5FDQAgAigCBCEMA0ACQCACIAUiAikCADcCACAERQ0AIAYgBEEBa0EBdiIEQQN0aiIFKgIAIBhdDQELCyACIAw2AgQgAiAYOAIACyAKIAooAgRBCGsiAjYCBCACIAooAgAiBmtBA3UgEEsNAAsLIAYgCigCBEYNACAGKgIAIRkLIAsgFUYgC0EBaiELRQ0BDAMLCxATAAsQHwALIAcoAhAhCwsgBygCDCIGIAtHDQALCwsgASgCRCEEIAQoAhAiAkUEQCAEEJYCIAQoAhAhAgsgBCgCBCIFIAJBCHZB/P//B3FqIgYoAgAiCCACQf8HcUECdGpBACAEKAIIIAVHGyIFIAhGBH8gBkEEaygCAEGAIGoFIAULQQRrIBM2AgAgBCACQQFrNgIQIAQgBCgCFEEBajYCFCAHKAIMIgIEQCAHIAI2AhAgBygCFBogAhARCyAHQSBqJAAgCigCCBogAyAKKAIEIgkgCigCACIGa0EDdSIMSQRAA0ACQCAMQQJIDQAgDEECa0EBdiELIAYpAgAhG0EAIQUgBiECA0AgBUEBdCINQQFyIQQgAiIIIAVBA3RqIgdBCGohAgJAIAwgDUECaiINTARAIAQhBQwBCyAEIQUgByoCCCAHQRBqIgQqAgBdRQ0AIAQhAiANIQULIAggAikCADcCACAFIAtMDQALIAlBCGsiBCACRgRAIAIgGzcCAAwBCyACIAQpAgA3AgAgBCAbNwIAIAIgBmtBCGpBA3UiBEECSA0AIAIqAgAiGSAGIARBAmtBAXYiBUEDdGoiBCoCAF5FDQAgAigCBCEIA0ACQCACIAQiAikCADcCACAFRQ0AIAYgBUEBa0EBdiIFQQN0aiIEKgIAIBldDQELCyACIAg2AgQgAiAZOAIACyAJQQhrIgkgBmtBA3UiDCADSw0ACwsgBiAJRwRAA0AgBioCACEZIAogASgCiAEgASgCjAEgASgCDCAGKAIEbGpqKAAANgIEIAogGTgCAAJAAkACQAJAIAAoAgQiAiAAKAIIIgVJBEAgAiAKKQIANwIAIAJBCGohBQwBCyACIAAoAgAiAmsiA0EDdSIIQQFqIgRBgICAgAJPDQEgA0H/////ASAFIAJrIgVBAnUiDSAEIAQgDUkbIAVB+P///wdPGyIEBH8gBEGAgICAAk8NAyAEQQN0EBIFQQALIg1qIgUgCikCADcCACAFIAhBA3RrIQggAwRAIAggAiAD/AoAAAsgACANIARBA3RqNgIIIAAgBUEIaiIFNgIEIAAgCDYCACACRQ0AIAIQEQsgACAFNgIEAkAgBSAAKAIAIg1rQQN1IgJBAkgNAEF/QQFBgX9BACANIAJBAmtBAXYiCEEDdGoiAioCACIYIAVBCGsiAyoCACIZXBsgGCAZXhsgGCAZXRsiBEUEQCACKAIEIgQgBUEEaygCACIMSyAEIAxJayEECyAEQYF/Rg0AIARBAE4NACAFQQRrKAIAIQUDQAJAIAMgAiIDKQIANwIAIAhFDQBBf0EBQYF/QQAgDSAIQQFrQQF2IghBA3RqIgIqAgAiGCAZXBsgGCAZXhsgGCAZXRsiBEUEQCACKAIEIgQgBUsgBCAFSWshBAsgBEGBf0YNACAEQQBIDQELCyADIAU2AgQgAyAZOAIACwwCCxATAAsQHwALAkAgCSAGa0EDdSINQQJIDQAgDUECa0EBdiEHIAYpAgAhG0EAIQUgBiECA0AgBUEBdCIIQQFyIQMgAiIEIAVBA3RqIgxBCGohAgJAIA0gCEECaiIITARAIAMhBQwBCyADIQUgDCoCCCAMQRBqIgMqAgBdRQ0AIAMhAiAIIQULIAQgAikCADcCACAFIAdMDQALIAlBCGsiAyACRgRAIAIgGzcCAAwBCyACIAMpAgA3AgAgAyAbNwIAIAIgBmtBCGpBA3UiA0ECSA0AIAIqAgAiGSAGIANBAmtBAXYiBUEDdGoiBCoCAF5FDQAgAigCBCEDA0ACQCACIAQiAikCADcCACAFRQ0AIAYgBUEBa0EBdiIFQQN0aiIEKgIAIBldDQELCyACIAM2AgQgAiAZOAIACyAJQQhrIgkgBkcNAAsLIAZFDQAgBhARCyAKQRBqJAAL3gUBC38jAEGAAWsiCiQAIAogATYCfCAKQfcBNgIQIApBCGpBACAKQRBqIggQKiELAkACQAJAIAMgAmtBDG0iCUHlAE8EQCAJEBYiCEUNASALKAIAIQEgCyAINgIAIAEEQCABIAsoAgQRAQALCyAIIQcgAiEBA0AgASADRgRAA0AgACAKQfwAaiIBECVBASAJGwRAIAAgARAlBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAILQAAQQJGDQcgCEEBaiEIIAJBDGohAgwACwALAn8gACgCACIHKAIMIgEgBygCEEYEQCAHIAcoAgAoAiQRAAAMAQsgAS0AAAvAIQ4gBkUEQCAEIA4gBCgCACgCDBEDACEOCyAPQQFqIQ1BACEQIAghByACIQEDQCABIANGBEAgDSEPIBBFDQIgABAxGiAIIQcgAiEBIAkgDGpBAkkNAgNAIAEgA0YEQAwEBQJAIActAABBAkcNAAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyAPRg0AIAdBADoAACAMQQFrIQwLIAdBAWohByABQQxqIQEMAQsACwAFAkAgBy0AAEEBRw0AAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsgD2osAAAhEQJAIAYEfyARBSAEIBEgBCgCACgCDBEDAAsgDkYEQEEBIRACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgDUcNAiAHQQI6AAAgDEEBaiEMDAELIAdBADoAAAsgCUEBayEJCyAHQQFqIQcgAUEMaiEBDAELAAsACwAFIAdBAkEBAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELRSINGzoAACAHQQFqIQcgAUEMaiEBIAwgDWohDCAJIA1rIQkMAQsACwALECAACyAFIAUoAgBBBHI2AgALIAsoAgAhACALQQA2AgAgAARAIAAgCygCBBEBAAsgCkGAAWokACACC7UDAQN/IwBBoAFrIgQkACAEIAAgBEGeAWogARsiBjYClAEgBCABQQFrIgBBACAAIAFNGzYCmAEgBEEAQZAB/AsAIARBfzYCTCAEQfYBNgIkIARBfzYCUCAEIARBnwFqNgIsIAQgBEGUAWo2AlQgBkEAOgAAQQAhBiMAQdABayIFJAAgBSADNgLMASAFQaABaiIAQQBBKPwLACAFIAUoAswBNgLIAQJAQQAgAiAFQcgBaiAFQdAAaiAAEJgDQQBIBEBBfyEADAELIAQoAkxBAEggBCAEKAIAIgFBX3E2AgACfwJAAkAgBCgCMEUEQCAEQdAANgIwIARBADYCHCAEQgA3AxAgBCgCLCEGIAQgBTYCLAwBCyAEKAIQDQELQX8gBBCTAg0BGgsgBCACIAVByAFqIAVB0ABqIAVBoAFqEJgDCyECIAYEQCAEQQBBACAEKAIkEQQAGiAEQQA2AjAgBCAGNgIsIARBADYCHCAEKAIUIQAgBEIANwMQIAJBfyAAGyECCyAEIAQoAgAiACABQSBxcjYCAEF/IAIgAEEgcRshAA0ACyAFQdABaiQAIARBoAFqJAAgAAtNAQJ/IAEtAAAhAgJAIAAtAAAiA0UNACACIANHDQADQCABLQABIQIgAC0AASIDRQ0BIAFBAWohASAAQQFqIQAgAiADRg0ACwsgAyACawsXACAAIAEQigIgAEEANgJIIABBADoAUAsSACAARQRAQQAPCyAAIAEQwQELiQIAAkAgAAR/IAFB/wBNDQECQEGggwMoAgAoAgBFBEAgAUGAf3FBgL8DRg0DDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIPCyABQYBAcUGAwANHIAFBgLADT3FFBEAgACABQT9xQYABcjoAAiAAIAFBDHZB4AFyOgAAIAAgAUEGdkE/cUGAAXI6AAFBAw8LIAFBgIAEa0H//z9NBEAgACABQT9xQYABcjoAAyAAIAFBEnZB8AFyOgAAIAAgAUEGdkE/cUGAAXI6AAIgACABQQx2QT9xQYABcjoAAUEEDwsLQeTtAkEZNgIAQX8FQQELDwsgACABOgAAQQELQQECfyMAQRBrIgEkAEF/IQICQCAAEKIBDQAgACABQQ9qQQEgACgCIBEEAEEBRw0AIAEtAA8hAgsgAUEQaiQAIAILRgEBfyAAQdz0ASgCACIBNgIAIAAgAUEMaygCAGpB/PQBKAIANgIAIABBgPUBKAIANgIIIABBDGoQjQIaIABBQGsQVhogAAtOAQF/IABB0O0BNgIAIAAQtgMaAkAgAC0AYEEBRw0AIAAoAiAiAUUNACABEBELAkAgAC0AYUEBRw0AIAAoAjgiAUUNACABEBELIAAQjgELvwMBA38gAEG81AA2AgAgACIBKAKMARARIAFBADYCjAEgASgCCARAA0AgAkECdCIAIAEoApQBaigCAEEASgRAIAEoApABIABqKAIAEBELIAJBAWoiAiABKAIISQ0ACwsgASgCkAEQESABQQA2AgggAUEANgKQASABKAJEIQAgAUEANgJEIAAEQCAAEJUCEBELIAEoAowCIgAEQANAIAAoAgAgABARIgANAAsLIAEoAoQCIQAgAUEANgKEAiAABEAgASgCiAIaIAAQEQsgASgCzAEiAARAA0AgACgCACAAEBEiAA0ACwsgASgCxAEhACABQQA2AsQBIAAEQCABKALIARogABARCyABKAKUASIABEAgASAANgKYASABKAKcARogABARCyABKAJsIgMEQCADIgIgASgCcCIARwRAA0AgAyAAQRhrIgBHDQALIAEoAmwhAgsgASADNgJwIAEoAnQaIAIQEQsgASgCSCIDBEAgAyICIAEoAkwiAEcEQANAIAMgAEEYayIARw0ACyABKAJIIQILIAEgAzYCTCABKAJQGiACEBELIAEoAkQhACABQQA2AkQgAARAIAAQlQIQEQsgAQsMACAAQQxqEFYaIAAL1gEBBX8jAEEQayICJAAgAkEIaiAAEGYaAkAgAi0ACEUNACACQQRqIgQgACAAKAIAQQxrKAIAaigCHCIDNgIAIANBrI4DRwRAIAMgAygCBEEBajYCBAsgBEGkjQMQFSEDIAQQGCACIAAgACgCAEEMaygCAGooAhg2AgAgACAAKAIAQQxrKAIAaiIFEMkBIQYgAiADIAIoAgAgBSAGIAG7IAMoAgAoAiARGwA2AgQgBCgCAA0AIAAgACgCAEEMaygCAGpBBRBnCyACQQhqEF4gAkEQaiQAIAAL1QEBBX8jAEEQayICJAAgAkEIaiAAEGYaAkAgAi0ACEUNACACQQRqIgQgACAAKAIAQQxrKAIAaigCHCIDNgIAIANBrI4DRwRAIAMgAygCBEEBajYCBAsgBEGkjQMQFSEDIAQQGCACIAAgACgCAEEMaygCAGooAhg2AgAgACAAKAIAQQxrKAIAaiIFEMkBIQYgAiADIAIoAgAgBSAGIAEgAygCACgCGBEJADYCBCAEKAIADQAgACAAKAIAQQxrKAIAakEFEGcLIAJBCGoQXiACQRBqJAAgAAt2AQN/IAAtAFBFBEAjAEEQayICJAAgAkEMaiIDIAAoAhwiATYCACABQayOA0cEQCABIAEoAgRBAWo2AgQLIANB5I8DEBUiAUEgIAEoAgAoAhwRAwAhASADEBggAkEQaiQAIAAgATYATCAAQQE6AFALIAAoAEzAC9UBAQV/IwBBEGsiAiQAIAJBCGogABBmGgJAIAItAAhFDQAgAkEEaiIEIAAgACgCAEEMaygCAGooAhwiAzYCACADQayOA0cEQCADIAMoAgRBAWo2AgQLIARBpI0DEBUhAyAEEBggAiAAIAAoAgBBDGsoAgBqKAIYNgIAIAAgACgCAEEMaygCAGoiBRDJASEGIAIgAyACKAIAIAUgBiABIAMoAgAoAgwRCQA2AgQgBCgCAA0AIAAgACgCAEEMaygCAGpBBRBnCyACQQhqEF4gAkEQaiQAIAALDAAgAEEEahBWGiAACwwAIABBCGoQVhogAAsEAEF/CwIACyoAIABB+OkBNgIAIABBBGoQ8wEgAEIANwIYIABCADcCECAAQgA3AgggAAvCAQEDfwJAIAIoAhAiAwR/IAMFIAIQkwINASACKAIQCyACKAIUIgRrIAFJBEAgAiAAIAEgAigCJBEEAA8LAkACQCACKAJQQQBIDQAgAUUNACABIQMDQCAAIANqIgVBAWstAABBCkcEQCADQQFrIgMNAQwCCwsgAiAAIAMgAigCJBEEACIEIANJDQIgASADayEBIAIoAhQhBAwBCyAAIQVBACEDCyAEIAUgARBfIAIgAigCFCABajYCFCABIANqIQQLIAQLtgwBB38jAEEQayIEJAAgBCAANgIMAkAgAEHTAU0EQEHw5gFBsOgBIARBDGoQ0gMoAgAhAAwBCyAAQXxPBEAQIAALIAQgACAAQdIBbiIGQdIBbCIDazYCCEGw6AFB8OkBIARBCGoQ0gNBsOgBa0ECdSEFA0AgBUECdEGw6AFqKAIAIANqIQBBBSEDAkACQANAIAMiAUEvRg0BIAAgAUECdEHw5gFqKAIAIgJuIgcgAkkNBCABQQFqIQMgACACIAdsRw0ACyABQS9JDQELQdMBIQMDQCAAIANuIgEgA0kNAyAAIAEgA2xGDQEgACADQQpqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQQxqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQRBqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQRJqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQRZqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQRxqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQR5qIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQSRqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQShqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQSpqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQS5qIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQTRqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQTpqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQTxqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQcIAaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0HGAGoiAW4iAiABSQ0DIAAgASACbEYNASAAIANByABqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQc4AaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0HSAGoiAW4iAiABSQ0DIAAgASACbEYNASAAIANB2ABqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQeAAaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0HkAGoiAW4iAiABSQ0DIAAgASACbEYNASAAIANB5gBqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQeoAaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0HsAGoiAW4iAiABSQ0DIAAgASACbEYNASAAIANB8ABqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQfgAaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0H+AGoiAW4iAiABSQ0DIAAgASACbEYNASAAIANBggFqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQYgBaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0GKAWoiAW4iAiABSQ0DIAAgASACbEYNASAAIANBjgFqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQZQBaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0GWAWoiAW4iAiABSQ0DIAAgASACbEYNASAAIANBnAFqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQaIBaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0GmAWoiAW4iAiABSQ0DIAAgASACbEYNASAAIANBqAFqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQawBaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0GyAWoiAW4iAiABSQ0DIAAgASACbEYNASAAIANBtAFqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQboBaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0G+AWoiAW4iAiABSQ0DIAAgASACbEYNASAAIANBwAFqIgFuIgIgAUkNAyAAIAEgAmxGDQEgACADQcQBaiIBbiICIAFJDQMgACABIAJsRg0BIAAgA0HGAWoiAW4iAiABSQ0DIAAgASACbEYNASAAIANB0AFqIgFuIgIgAUkNAyADQdIBaiEDIAAgASACbEcNAAsLQQAgBUEBaiIAIABBMEYiABshBSAAIAZqIgZB0gFsIQMMAAsACyAEQRBqJAAgAAuoCwEHfyAAIAFqIQUCQAJAIAAoAgQiAkEBcQ0AIAJBAnFFDQEgACgCACICIAFqIQECQAJAAkAgACACayIAQfztAigCAEcEQCAAKAIMIQMgAkH/AU0EQCADIAAoAggiBEcNAkHo7QJB6O0CKAIAQX4gAkEDdndxNgIADAULIAAoAhghBiAAIANHBEAgACgCCCICIAM2AgwgAyACNgIIDAQLIAAoAhQiBAR/IABBFGoFIAAoAhAiBEUNAyAAQRBqCyECA0AgAiEHIAQiA0EUaiECIAMoAhQiBA0AIANBEGohAiADKAIQIgQNAAsgB0EANgIADAMLIAUoAgQiAkEDcUEDRw0DQfDtAiABNgIAIAUgAkF+cTYCBCAAIAFBAXI2AgQgBSABNgIADwsgBCADNgIMIAMgBDYCCAwCC0EAIQMLIAZFDQACQCAAKAIcIgJBAnRBmPACaiIEKAIAIABGBEAgBCADNgIAIAMNAUHs7QJB7O0CKAIAQX4gAndxNgIADAILAkAgACAGKAIQRgRAIAYgAzYCEAwBCyAGIAM2AhQLIANFDQELIAMgBjYCGCAAKAIQIgIEQCADIAI2AhAgAiADNgIYCyAAKAIUIgJFDQAgAyACNgIUIAIgAzYCGAsCQAJAAkACQCAFKAIEIgJBAnFFBEBBgO4CKAIAIAVGBEBBgO4CIAA2AgBB9O0CQfTtAigCACABaiIBNgIAIAAgAUEBcjYCBCAAQfztAigCAEcNBkHw7QJBADYCAEH87QJBADYCAA8LQfztAigCACIIIAVGBEBB/O0CIAA2AgBB8O0CQfDtAigCACABaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgAPCyACQXhxIAFqIQEgBSgCDCEDIAJB/wFNBEAgBSgCCCIEIANGBEBB6O0CQejtAigCAEF+IAJBA3Z3cTYCAAwFCyAEIAM2AgwgAyAENgIIDAQLIAUoAhghBiADIAVHBEAgBSgCCCICIAM2AgwgAyACNgIIDAMLIAUoAhQiBAR/IAVBFGoFIAUoAhAiBEUNAiAFQRBqCyECA0AgAiEHIAQiA0EUaiECIAMoAhQiBA0AIANBEGohAiADKAIQIgQNAAsgB0EANgIADAILIAUgAkF+cTYCBCAAIAFBAXI2AgQgACABaiABNgIADAMLQQAhAwsgBkUNAAJAIAUoAhwiAkECdEGY8AJqIgQoAgAgBUYEQCAEIAM2AgAgAw0BQeztAkHs7QIoAgBBfiACd3E2AgAMAgsCQCAFIAYoAhBGBEAgBiADNgIQDAELIAYgAzYCFAsgA0UNAQsgAyAGNgIYIAUoAhAiAgRAIAMgAjYCECACIAM2AhgLIAUoAhQiAkUNACADIAI2AhQgAiADNgIYCyAAIAFBAXI2AgQgACABaiABNgIAIAAgCEcNAEHw7QIgATYCAA8LIAFB/wFNBEAgAUF4cUGQ7gJqIQICf0Ho7QIoAgAiA0EBIAFBA3Z0IgFxRQRAQejtAiABIANyNgIAIAIMAQsgAigCCAshASACIAA2AgggASAANgIMIAAgAjYCDCAAIAE2AggPC0EfIQMgAUH///8HTQRAIAFBJiABQQh2ZyICa3ZBAXEgAkEBdGtBPmohAwsgACADNgIcIABCADcCECADQQJ0QZjwAmohAgJAAkBB7O0CKAIAIgRBASADdCIHcUUEQEHs7QIgBCAHcjYCACACIAA2AgAgACACNgIYDAELIAFBGSADQQF2a0EAIANBH0cbdCEDIAIoAgAhAgNAIAIiBCgCBEF4cSABRg0CIANBHXYhAiADQQF0IQMgBCACQQRxaiIHKAIQIgINAAsgByAANgIQIAAgBDYCGAsgACAANgIMIAAgADYCCA8LIAQoAggiASAANgIMIAQgADYCCCAAQQA2AhggACAENgIMIAAgATYCCAsLiggBC38gAEUEQCABEBYPCyABQUBPBEBB5O0CQTA2AgBBAA8LAn9BECABQQtqQXhxIAFBC0kbIQYgAEEIayIEKAIEIglBeHEhCAJAIAlBA3FFBEAgBkGAAkkNASAGQQRqIAhNBEAgBCECIAggBmtByPECKAIAQQF0TQ0CC0EADAILIAQgCGohBwJAIAYgCE0EQCAIIAZrIgNBEEkNASAEIAYgCUEBcXJBAnI2AgQgBCAGaiICIANBA3I2AgQgByAHKAIEQQFyNgIEIAIgAxDSAQwBC0GA7gIoAgAgB0YEQEH07QIoAgAgCGoiCCAGTQ0CIAQgBiAJQQFxckECcjYCBCAEIAZqIgMgCCAGayICQQFyNgIEQfTtAiACNgIAQYDuAiADNgIADAELQfztAigCACAHRgRAQfDtAigCACAIaiIDIAZJDQICQCADIAZrIgJBEE8EQCAEIAYgCUEBcXJBAnI2AgQgBCAGaiIIIAJBAXI2AgQgAyAEaiIDIAI2AgAgAyADKAIEQX5xNgIEDAELIAQgCUEBcSADckECcjYCBCADIARqIgIgAigCBEEBcjYCBEEAIQJBACEIC0H87QIgCDYCAEHw7QIgAjYCAAwBCyAHKAIEIgNBAnENASADQXhxIAhqIgsgBkkNASALIAZrIQwgBygCDCEFAkAgA0H/AU0EQCAHKAIIIgIgBUYEQEHo7QJB6O0CKAIAQX4gA0EDdndxNgIADAILIAIgBTYCDCAFIAI2AggMAQsgBygCGCEKAkAgBSAHRwRAIAcoAggiAiAFNgIMIAUgAjYCCAwBCwJAIAcoAhQiAgR/IAdBFGoFIAcoAhAiAkUNASAHQRBqCyEIA0AgCCEDIAIiBUEUaiEIIAIoAhQiAg0AIAVBEGohCCAFKAIQIgINAAsgA0EANgIADAELQQAhBQsgCkUNAAJAIAcoAhwiA0ECdEGY8AJqIgIoAgAgB0YEQCACIAU2AgAgBQ0BQeztAkHs7QIoAgBBfiADd3E2AgAMAgsCQCAHIAooAhBGBEAgCiAFNgIQDAELIAogBTYCFAsgBUUNAQsgBSAKNgIYIAcoAhAiAgRAIAUgAjYCECACIAU2AhgLIAcoAhQiAkUNACAFIAI2AhQgAiAFNgIYCyAMQQ9NBEAgBCAJQQFxIAtyQQJyNgIEIAQgC2oiAiACKAIEQQFyNgIEDAELIAQgBiAJQQFxckECcjYCBCAEIAZqIgMgDEEDcjYCBCAEIAtqIgIgAigCBEEBcjYCBCADIAwQ0gELIAQhAgsgAgsiAgRAIAJBCGoPCyABEBYiBEUEQEEADwsgBCAAQXxBeCAAQQRrKAIAIgJBA3EbIAJBeHFqIgIgASABIAJLGxBfIAAQESAEC+QEAwF/BnwCfiAAvSIIQjCIpyEBIAhCgICAgICAgPc/fUL//////5/CAVgEQCAIQoCAgICAgID4P1EEQEQAAAAAAAAAAA8LIABEAAAAAAAA8L+gIgAgACAARAAAAAAAAKBBoiICoCACoSICIAKiQeCiASsDACIFoiIGoCIHIAAgACAAoiIDoiIEIAQgBCAEQbCjASsDAKIgA0GoowErAwCiIABBoKMBKwMAokGYowErAwCgoKCiIANBkKMBKwMAoiAAQYijASsDAKJBgKMBKwMAoKCgoiADQfiiASsDAKIgAEHwogErAwCiQeiiASsDAKCgoKIgACACoSAFoiAAIAKgoiAGIAAgB6GgoKCgDwsCQCABQfD/AWtBn4B+TQRAIABEAAAAAAAAAABhBEAjAEEQayIBRAAAAAAAAPC/OQMIIAErAwhEAAAAAAAAAACjDwsgCEKAgICAgICA+P8AUQ0BIAFB8P8BcUHw/wFHIAFB//8BTXFFBEAgACAAoSIAIACjDwsgAEQAAAAAAAAwQ6K9QoCAgICAgICgA30hCAsgCEKAgICAgICA8z99IglCNIentyIDQaiiASsDAKIgCUItiKdB/wBxQQR0IgFBwKMBaisDAKAiBCABQbijAWorAwAgCCAJQoCAgICAgIB4g32/IAFBuLMBaisDAKEgAUHAswFqKwMAoaIiAKAiBSAAIAAgAKIiAqIgAiAAQdiiASsDAKJB0KIBKwMAoKIgAEHIogErAwCiQcCiASsDAKCgoiACQbiiASsDAKIgA0GwogErAwCiIAAgBCAFoaCgoKCgIQALIAAL9AEDAnwBfwF+An0CQCAAvEEUdkH/D3EiA0GrCEkNAEMAAAAAIABDAACA/1sNARogA0H4D08EQCAAIACSDwsgAEMXcrFCXgRAIwBBEGsiA0MAAABwOAIMIAMqAgxDAAAAcJQPCyAAQ7Txz8JdRQ0AIwBBEGsiA0MAAAAQOAIMIAMqAgxDAAAAEJQPC0GAkQErAwBB+JABKwMAIAC7oiIBIAFB8JABKwMAIgGgIgIgAaGhIgGiQYiRASsDAKAgASABoqJBkJEBKwMAIAGiRAAAAAAAAPA/oKAgAr0iBEIvhiAEp0EfcUEDdEHQjgFqKQMAfL+itgsLVwEFfiAAIAApAwAiASAAKQMQhSIDIAApAwgiAoU3AwggACACIAApAxgiBIUiBUItiTcDGCAAIAMgAkIRhoU3AxAgACABIAWFNwMAIAEgBHy1QwAAgB+UC5IDAQV/IABBADYCGCAAQgA3AhAgACACNgIMIAAgATYCCCAAIAI2AgQgACABNgIAAkACQCABIAJsIgVFBEAgAEEANgIwIABCADcCKCAAIAI2AiQgACABNgIgIABBADYCHAwBCyAFQYCAgIAETw0BIAAgBUECdCIDEBIiBDYCECAAIAMgBGoiBzYCGCADBEAgBEH/ASAD/AsACyAAQQA2AjAgAEIANwIoIAAgAjYCJCAAIAE2AiAgACAENgIcIAAgBzYCFCAAIAMQEiIENgIoIAAgAyAEaiIBNgIwIAQhAgJAIAVBAWtB/////wNxIgNBA08EQCACIANBAWoiBUH8////B3EiA0ECdGohAgNAIAQgBkECdGr9DP///3////9/////f////3/9CwIAIAZBBGoiBiADRw0ACyADIAVGDQELA0AgAkH/////BzYCACACQQRqIgIgAUcNAAsLIAAgATYCLAsgAEIANwI4IAAgBDYCNCAAQUBr/QwAAAAAAAAAAAAAAAAAAAAA/QsCACAADwsQEwALuwIBBH8jAEEwayICJAAgAv0MAAAAAAAAAAAAAAAAAAAAAP0LAhwgAkEANgIsIAJB////+wc2AgggAkJ/NwIAIAL9DAAAAAAAAAAAAAAAAAAAAAD9CwIMAkAgASgCBCIDIAEoAgAiBEcEQCADIARrIgFBAEgNASACIAEQEiIDNgIkIAIgASADaiIFNgIsIAEEQCADIAQgAfwKAAALIAIgBTYCKAsgAAJ/IAAoAgwiASAAKAIQSQRAIAEgAhCTAUEwagwBCyAAQQhqIAIQmAILNgIMIAAgACgCBEEBajYCBCACKAIkIgAEQCACIAA2AiggAigCLBogABARCyACKAIYIgAEQCACIAA2AhwgAigCIBogABARCyACKAIMIgAEQCACIAA2AhAgAigCFBogABARCyACQTBqJAAPCxATAAvxBgEDfyAAKAIIIAAoAgAiBGtBMG0gA08EQCADIAAoAgQiBSAEayIGQTBtSwRAIAEgBmohAyAEIAVHBEADQCAEIAEpAgA3AgAgBCABKAIINgIIIAEgBEcEQCAEQQxqIAEoAgwiBiABKAIQIgUgBSAGa0ECdRArIARBGGogASgCGCIGIAEoAhwiBSAFIAZrQQJ1ECsgBEEkaiABKAIkIgYgASgCKCIFIAUgBmtBAnUQKwsgBEEwaiEEIAFBMGoiASADRw0ACyAAKAIEIQULIAUhASACIANH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IQQCQCAGQQRJDQAgBCACa0EQSQ0AIAZB/v///wdxIQEDQCAEIANBA3QiB2ogAiAHav0AAwD9CwMAIANBAmoiAyABRw0ACyABIAZGDQELIAYgASIDa0EDcSIHBEADQCAEIANBA3QiCWogAiAJaisDADkDACADQQFqIQMgBUEBaiIFIAdHDQALCyABIAZrQXxLDQADQCAEIANBA3QiAWogASACaisDADkDACAEIAFBCGoiBWogAiAFaisDADkDACAEIAFBEGoiBWogAiAFaisDADkDACAEIAFBGGoiAWogASACaisDADkDACADQQRqIgMgBkcNAAsLIAoQ9QMgCi0APEUNBiAKKAIEIQIgDygCCCIBQQBIQQAgCigCACIDGw0QIAFBAEgNESABIAJKDREgCigCCCABSA0RIAggAjYCGCAIQgA3AhAgCCAKNgIMIAggATYCCCAIIAE2AgQgCCADNgIAIAEEQCABQf////8HIAFuSw0ICyAAQcgAaiICIAEgAWwgASABEBtBACEFIAgoAgghBiAIKAIAIQ0gCCgCDCgCBCEMAkAgCCgCBCIHIAIoAgRGBEAgAigCCCAGRg0BCyAGIAdyQQBIDQsCQCAHRQ0AIAZFDQAgB0H/////ByAGbUoNDQsgAiAGIAdsIAcgBhAbIAIoAgghBiACKAIEIQcLIAZBAEoEQCACKAIAIQsgDEEDdCERIAdBA3QhEgNAIAsgBSASbGohDkEAIQEgByAFIAUgB0obIgJBAEoEQCANIAUgDGxBA3RqIQQgCyAFIAdsQQN0aiEJQQAhEEEAIQMCQAJAIAJBAkkNACANIAUgEWxqIgEgAkEDdCITaiAOSyABIA4gE2pJcQ0AIAJBfnEhA0EAIQEDQCAJIAFBA3QiE2ogBCATav0AAwD9CwMAIAFBAmoiASADRw0ACyACIANGDQELIAIgAyIBa0EDcSITBEADQCAJIAFBA3QiFGogBCAUaisDADkDACABQQFqIQEgEEEBaiIQIBNHDQALCyADIAJrQXxLDQADQCAJIAFBA3QiA2ogAyAEaisDADkDACAJIANBCGoiEGogBCAQaisDADkDACAJIANBEGoiEGogBCAQaisDADkDACAJIANBGGoiA2ogAyAEaisDADkDACABQQRqIgEgAkcNAAsLIAIhAQsgASAHSARAIAsgAUEDdCICaiAB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Qv8PDAELQYD4AEGB+AAgA1AiBxsiCCAEayIGQfAASgRAQgAhAEIADAELIAVBEGogACACIAJCgICAgICAwACEIAcbIgJBgAEgBmsQOyAFIAAgAiAGEHogBSkDCEIEhiAFKQMAIgJCPIiEIQACQCAEIAhHIAUpAxAgBSkDGIRCAFJxrSACQv//////////D4OEIgJCgYCAgICAgIAIWgRAIABCAXwhAAwBCyACQoCAgICAgICACFINACAAQgGDIAB8IQALIABCgICAgICAgAiFIAAgAEL/////////B1YiBBshACAErQshAiAFQSBqJAAgAUKAgICAgICAgIB/gyACQjSGhCAAhL8LRAEBfyMAQRBrIgUkACAFIAEgAiADIARCgICAgICAgICAf4UQQSAFKQMAIQEgACAFKQMINwMIIAAgATcDACAFQRBqJAALQwEBfyAAQQRqIgJBADYCHCACQcT4ATYCACACQcTxATYCACAAQeTsATYCACACQfjsATYCACAAQdjsASgCAGogARC/AQtDAQF/IABBBGoiAkEANgIcIAJBxPgBNgIAIAJBkO4BNgIAIABB7OoBNgIAIAJBgOsBNgIAIABB4OoBKAIAaiABEL8BCzsAIAAoAkwaIAAoAogBRQRAIABB0PkBQbj5AUGggwMoAgAoAgAbNgKIAQsgACgCSEUEQCAAQQE2AkgLCz8AIABBADYCFCAAIAE2AhggAEEANgIMIABCgqCAgOAANwIEIAAgAUU2AhAgAEEgakEAQSj8CwAgAEEcahDzAQs7AQF/IABBjPcBKAIAIgE2AgAgACABQQxrKAIAakGY9wEoAgA2AgAgAEEEahDEARogAEHoAGoQVhogAAsJACAAEMMBEBELGAAgAEGQ7QE2AgAgAEEgahAUGiAAEI4BC7QBAQJ/IwBBEGsiASQAIAAgACgCAEEMaygCAGooAhgEQCABIAA2AgwgAUEAOgAIIAAgACgCAEEMaygCAGooAhBFBEAgACAAKAIAQQxrKAIAaigCSCICBEAgAhCOAgsgAUEBOgAICwJAIAEtAAhFDQAgACAAKAIAQQxrKAIAaigCGCICIAIoAgAoAhgRAABBf0cNACAAIAAoAgBBDGsoAgBqQQEQZwsgAUEIahBeCyABQRBqJAALFAAgAEHw6wE2AgAgAEEEahAYIAALCQAgABDGARAR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CyAJBEACQCAAKAIQIAlsQQFqIgKtIhSnIgNBfyADIBRCIIinGyACQQFyQYCABEkbIgMQFiICRQ0AIAJBBGstAABBA3FFDQAgAkEAIAMQowELIAAoApABIApBAnRqIAI2AgAgAkUNAgsCQCAHQX9HBEAgByECIAYgCUoEQCABIAAoAoABIAAoAowBIAAoAgwgAmxqaiAAKAKoASAAKAKkARELACESIAYhBANAIARBAWshBANAAkAgACgCbBogACgCkAEgAkECdGooAgAgACgCECAEbGoiAy8BACINRQ0AIANBBGohDkEAIQNBACEIA0AgDiADQQJ0aigCACILIAAoAgRLDQkgASAAKAKAASAAKAKMASAAKAIMIAtsamogACgCqAEgACgCpAERCwAiEyASIBIgE14iDBshEiALIAIgDBshAiAIIAxyIQggA0EBaiIDIA1HDQALIAhBAXENAQsLIAQgCUoNAAsLIAkgBiAGIAlKGyILQQBIDQEgACgChAEgACgCjAEgACgCDCAHbGpqLQACQQFxIQ4DQCAFQQhqIgMgACACIAEgCxD1AgJAIA5FDQAgBSABIAAoAoABIAAoAowBIAAoAgwgBSgCHGxqaiAAKAKoASAAKAKkARELADgCBCADIAVBBGogBUEcahBGIAUoAgwiECAFKAIIIgZrQQN1IgwgACgCJE0NAAJAIAxBAkgNACAMQQJrQQF2IREgBikCACEUQQAhAyAGIQIDQCADQQF0IghBAXIhBCACIgcgA0EDdGoiDUEIaiECAkAgDCAIQQJqIghMBEAgBCEDDAELIAQhAyANKgIIIA1BEGoiBCoCAF1FDQAgBCECIAghAwsgByACKQIANwIAIAMgEUwNAAsgEEEIayIDIAJGBEAgAiAUNwIADAELIAIgAykCADcCACADIBQ3AgAgAiAGa0EIakEDdSIDQQJIDQAgAioCACISIAYgA0ECa0EBdiIDQQN0aiIEKgIAXkUNACACKAIEIQcDQAJAIAIgBCICKQIANwIAIANFDQAgBiADQQFrQQF2IgNBA3RqIgQqAgAgEl0NAQsLIAIgBzYCBCACIBI4AgALIAUgBSgCDEEIazYCDAsgACAKIAVBCGogC0EAEPECIQIgBSgCCCIDBEAgBSADNgIMIAUoAhAaIAMQEQsgC0EASiALQQFrIQsNAAsMAQsgACAJ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CyISaiIIIBA2AgAgCCATQQJ0ayECIBkEQCACIAAgGfwKAAALIAhBBGohCCASIAtBAnRqIRIgAARAIAAQEQsgAiEACyAKIA9JBEAgCiAqOAIAIApBBGohCgwBCyAKIAFrIgtBAnUiEEEBaiICQYCAgIAETw0DIAtB/////wMgDyABayIKQQF1Ig8gAiACIA9JGyAKQfz///8HTxsiDwR/IA9BgICAgARPDREgD0ECdBASBUEACyITaiIKICo4AgAgCiAQQQJ0ayECIAsEQCACIAEgC/wKAAALIApBBGohCiATIA9BAnRqIQ8gAQRAIAEQEQsgAiEBCyAVQQFqIhUgESgCBCILSQ0BDAMLCyAGIBI2AhwgBiAINgIYIAYgADYCFAwMCyAGIA82AhAgBiAKNgIMIAYgATYCCAwLCyAGIBI2AhwgBiAINgIYIAYgADYCFCAGIA82AhAgBiAKNgIMIAYgATYCCCALBEAgCCAAa0ECdSEPIBEoAjQgESgCJCAObEECdGohECARKAIcIBEoAgwgDmxBAnRqIQpBACECA0AgECACQQJ0IghqAn0gAiAPSQRAIAggCmogACAIaigCADYCACABIAhqKgIADAELIAogAkECdGpBfzYCAEP//39/CzgCACACQQFqIgIgC0cNAAsLIAEEQCABEBELIAAEQCAAEBELIA5BAWoiDiARKAIASQ0ACwsgBkEgaiQACwJAIActAKgCQQFHDQACQCARKAIMIBEoAghsIgFFDQAgESgCHCICIQAgAUEBa0H/////A3EiCEEDTwRAIAIgCEEBaiILQfz///8HcSIIQQJ0aiEAA0AgLyACIANBAnRq/QACAP0M//////////////////////04/bEBIS8gA0EEaiIDIAhHDQALIC8gLyAv/Q0ICQoLDA0ODwABAgMAAQID/a4BIi8gLyAv/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQMgCCALRg0BCyACIAFBAnRqIQIDQCADIAAoAgBBf0dqIQMgAEEEaiIAIAJHDQALCyANQeQAaiIAIAEQsAEgDSAAQanLAEEpEEUiACgCCDYCeCANIAApAgA3A3AgAEIANwIAIABBADYCCCANIA1B8ABqQfDKAEEEEDMiACgCCDYCiAEgDSAAKQIANwOAASAAQgA3AgAgAEEANgIIIA1B2ABqIgAgAxCwASANIA1BgAFqIA0oAlggACANLABjIgBBAEgiARsgDSgCXCAAIAEbEDMiACgCCDYCECANIAApAgA3AwggAEIANwIAIABBADYCCCANQQhqQQEQPCANLAATQQBIBEAgDSgCEBogDSgCCBARCyANLABjQQBIBEAgDSgCYBogDSgCWBARCyANLACLAUEASARAIA0oAogBGiANKAKAARARCyANLAB7QQBIBEAgDSgCeBogDSgCcBARCyANLABvQQBODQAgDSgCbBogDSgCZBARCyAHKgKIAiAHKAL8AbKUENQDIQQgByANQQhqIAcoAkwgBPwBEIABIgApAwA3A5gBIAdBmAFqIhYgAEcEQCAHQagBaiAAKAIQIgEgACgCFCICIAIgAWtBAnUQKyAHIAAoAhwgBygCqAEiASABIAcoAqwBRhs2ArQBIAcgACgCCDYCoAEgByAAKAIMNgKkASAHQcABaiAAKAIoIgEgACgCLCICIAIgAWtBAnUQKyAHIAAoAjQgBygCwAEiASABIAcoAsQBRhs2AswBIAcgACgCIDYCuAEgByAAKAIkNgK8ASAHQdgBaiAAKAJAIgEgACgCRCICIAIgAWsQ3gMgByAAKAJMIAcoAtgBIgEgASAHKALcAUYbNgLkASAHIAAoAjg2AtABIAcgACgCPDYC1AELIAAoAkAiAQRAIAAgATYCRCAAKAJIGiABEBELIAAoAigiAQRAIAAgATYCLCAAKAIwGiABEBELIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABEBELAkAgESgCACIZRQ0AIBEoAgQiG0UNACARKAIMIRogESgCHCEUA0AgFCAJIBpsQQJ0aiEXIAcoArQBIhIgBygCpAEiFSAJQQFqIgZsIh5BAnRqIR8gEiAJIBVsIh1BAnRqIQggBygCzAEiICAHKAK8ASIiIAlsQQJ0aiEOIBEoAjQgESgCJCAJbEECdGohHCAHKAKcASEKQQAhEwNAAkAgFyATQQJ0IgBqKAIAIg9Bf0YNAAJAIAAgHGoqAgAiJyAOKgIAYA0AIAghACAdIB5HBEADQCAAKAIAIA9GDQIgAEEEaiIAIB9HDQALC0ECIQFBACEAQQEhAwJAIApBAkkNAANAIAAhAiAOIANBAnRqKgIAIQQCQCABIApPBEAgAyEAIAQgJ14NASACIQAMAwsgDiABQQJ0aioCACIlIARfBEAgAyEAIAQgJ14NASACIQAMAwsgASEAICUiBCAnXg0AIAIhAAwCCyAIIAJBAnQiAWogCCAAQQJ0aigCADYCACABIA5qIAQ4AgAgAEEBdCICQQJqIQEgAkEBciIDIApJDQALCyAIIABBAnQiAGogDzYCACAAIA5qICc4AgALICcgICAPICJsQQJ0aiIQKgIAYA0AIBIgDyAVbCIAQQJ0aiELIAAgFSAPQQFqbCIBRwRAIBIgAUECdGohASALIQADQCAAKAIAIAlGDQIgAEEEaiIAIAFHDQALC0ECIQNBACEAQQEhAQJAIApBAkkNAANAIAAhAiAQIAFBAnRqKgIAIQQCQCADIApPBEAgASEAIAQgJ14NASACIQAMAwsgECADQQJ0aioCACIlIARfBEAgASEAIAQgJ14NASACIQAMAwsgAyEAICUiBCAnXg0AIAIhAAwCCyALIAJBAnQiAWogCyAAQQJ0aigCADYCACABIBBqIAQ4AgAgAEEBdCIBQQJqIQMgAUEBciIBIApJDQALCyALIABBAnQiAGogCTYCACAAIBBqICc4AgALIBNBAWoiEyAbRw0ACyAGIgkgGUcNAAsLIBYQVwJAIActAKgCQQFHDQBBACEDAkAgBygCpAEgBygCoAFsIgJFDQAgBygCtAEiASEAIAJBAWtB/////wNxIglBA08EQCABIAlBAWoiCEH8////B3EiCUECdGohAP0MAAAAAAAAAAAAAAAAAAAAACEvA0AgLyABIANBAnRq/QACAP0M//////////////////////04/bEBIS8gA0EEaiIDIAlHDQALIC8gLyAv/Q0ICQoLDA0ODwABAgMAAQID/a4BIi8gLyAv/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQMgCCAJRg0BCyABIAJBAnRqIQEDQCADIAAoAgBBf0dqIQMgAEEEaiIAIAFHDQALCyANQfAAaiIAIAMQRCANIABB9coAQTMQRSIAKAIINgKIASANIAApAgA3A4ABIABCADcCACAAQQA2AgggDSANQYABakHzL0EcEDMiACgCCDYCECANIAApAgA3AwggAEIANwIAIABBADYCCCANQQhqQQEQPCANLAATQQBIBEAgDSgCEBogDSgCCBARCyANLACLAUEASARAIA0oAogBGiANKAKAARARCyAN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amooAgAiE0F/Rg0AIBEoAjQgESgCJCAPbEECdGogAmoqAgAhJSAKIABrIhlBAnUhGCAAIApHBEBBASAYIBhBAU0bIR4gE0EBaiEfQQAhGwNAIAEgG0ECdCILaioCACEoQwAAAAAhJgJAIAUoAgQiFiATbCICIBYgH2wiHUYNACAFKAIUIhogAkECdGohAiAaIAAgC2ooAgAgFmxBAnRqIQtBACEUIBZBA3EiIARAA0AgAioCACALKgIAkyIqICqUICaSISYgC0EEaiELIAJBBGohAiAUQQFqIhQgIEcNAAsLIBZBAWtB/////wNxQQNJDQAgGiAdQQJ0aiEWA0AgAioCDCALKgIMkyIqICqUIAIqAgggCyoCCJMiKiAqlCACKgIEIAsqAgSTIiogKpQgAioCACALKgIAkyIqICqUICaSkpKSISYgC0EQaiELIAJBEGoiAiAWRw0ACwsCQCAoQwAAADReRQ0AICUgJl5FDQAgFxDWASAnXQ0DCyAbQQFqIhsgHkcNAAsLAkAgCiASSQRAIAogEzYCACAKQQRqIQoMAQsgGEEBaiICQYCAgIAETw0CIBlB/////wMgEiAAayILQQF1IgogAiACIApJGyALQfz///8HTxsiCwR/IAtBgICAgARPDRUgC0ECdBASBUEACyISaiIKIBM2AgAgCiAYQQJ0ayECIBkEQCACIAAgGfwKAAALIApBBGohCiASIAtBAnRqIRIgAARAIAAQEQsgAiEACyAOIBBJBEAgDiAlOAIAIA5BBGohDgwBCyAOIAFrIgtBAnUiE0EBaiICQYCAgIAETw0DIAtB/////wMgECABayIOQQF1IhAgAiACIBBJGyAOQfz///8HTxsiEAR/IBBBgICAgARPDRQgEEECdBASBUEACyIYaiIOICU4AgAgDiATQQJ0ayECIAsEQCACIAEgC/wKAAALIA5BBGohDiAYIBBBAnRqIRAgAQRAIAEQEQsgAiEBCyAVQQFqIhUgESgCBCILSQ0BDAMLCyAIIBI2AhwMBQsgCCAQNgIQIAggDjYCDCAIIAE2AggQEwALIAggEjYCHCAIIAo2AhggCCAANgIUIAggEDYCECAIIA42AgwgCCABNgIIIAsEQCAKIABrQQJ1IRAgESgCNCARKAIkIA9sQQJ0aiESIBEoAhwgESgCDCAPbEECdGohDkEAIQIDQCASIAJBAnQiCmoCfSACIBBJBEAgCiAOaiAAIApqKAIANgIAIAEgCmoqAgAMAQsgDiACQQJ0akF/NgIAQ///f38LOAIAIAJBAWoiAiALRw0ACwsgAQRAIAEQEQsgAARAIAAQEQsgD0EBaiIPIBEoAgBJDQALCwsgCEEgaiQAAkAgBS0AqAJBAUcNAAJAIBEoAgwgESgCCGwiAUUNACARKAIcIgIhACABQQFrQf////8DcSIIQQNPBEAgAiAIQQFqIgtB/P///wdxIghBAnRqIQADQCAvIAIgA0ECdGr9AAIA/Qz//////////////////////Tj9sQEhLyADQQRqIgMgCEcNAAsgLyAvIC/9DQgJCgsMDQ4PAAECAwABAgP9rgEiLyAvIC/9DQQFBgcAAQIDAAECAwABAgP9rgH9GwAhAyAIIAtGDQELIAIgAUECdGohAgNAIAMgACgCAEF/R2ohAyAAQQRqIgAgAkcNAAsLIA1B5ABqIgAgARCwASANIABBqcsAQSkQRSIAKAIINgJ4IA0gACkCADcDcCAAQgA3AgAgAEEANgIIIA0gDUHwAGpB8MoAQQQQMyIAKAIINgKIASANIAApAgA3A4ABIABCADcCACAAQQA2AgggDUHYAGoiACADELABIA0gDUGAAWogDSgCWCAAIA0sAGMiAEEASCIBGyANKAJcIAAgARsQMyIAKAIINgIQIA0gACkCADcDCCAAQgA3AgAgAEEANgIIIA1BCGpBARA8IA0sABNBAEgEQCANKAIQGiANKAIIEBELIA0sAGNBAEgEQCANKAJgGiANKAJYEBELIA0sAIsBQQBIBEAgDSgCiAEaIA0oAoABEBELIA0sAHtBAEgEQCANKAJ4GiANKAJwEBELIA0sAG9BAE4NACANKAJsGiANKAJkEBELIAUqAogCIAUoAvwBspQQ1AMhJiAFIA1BCGogBSgCTCAm/AEQgAEiACkDADcDmAEgBUGYAWoiFiAARwRAIAVBqAFqIAAoAhAiASAAKAIUIgIgAiABa0ECdRArIAUgACgCHCAFKAKoASIBIAEgBSgCrAFGGzYCtAEgBSAAKAIINgKgASAFIAAoAgw2AqQBIAVBwAFqIAAoAigiASAAKAIsIgIgAiABa0ECdRArIAUgACgCNCAFKALAASIBIAEgBSgCxAFGGzYCzAEgBSAAKAIgNgK4ASAFIAAoAiQ2ArwBIAVB2AFqIAAoAkAiASAAKAJEIgIgAiABaxDeAyAFIAAoAkwgBSgC2AEiASABIAUoAtwBRhs2AuQBIAUgACgCODYC0AEgBSAAKAI8NgLUAQsgACgCQCIBBEAgACABNgJEIAAoAkgaIAEQEQsgACgCKCIBBEAgACABNgIsIAAoAjAaIAEQEQsgACgCECIBBEAgACABNgIUIAAoAhgaIAEQEQsCQCARKAIAIhlFDQAgESgCBCIbRQ0AIBEoAgwhGiARKAIcIRQDQCAUIAcgGmxBAnRqIRcgBSgCtAEiFSAFKAKkASIYIAdBAWoiCmwiHkECdGohHyAVIAcgGGwiHUECdGohCCAFKALMASIgIAUoArwBIiIgB2xBAnRqIQ8gESgCNCARKAIkIAdsQQJ0aiEcIAUoApwBIQ5BACETA0ACQCAXIBNBAnQiAGooAgAiEEF/Rg0AAkAgACAcaioCACInIA8qAgBgDQAgCCEAIB0gHkcEQANAIAAoAgAgEEYNAiAAQQRqIgAgH0cNAAsLQQIhAUEAIQBBASEDAkAgDkECSQ0AA0AgACECIA8gA0ECdGoqAgAhJgJAIAEgDk8EQCADIQAgJiAnXg0BIAIhAAwDCyAPIAFBAnRqKgIAIiUgJl8EQCADIQAgJiAnXg0BIAIhAAwDCyABIQAgJSImICdeDQAgAiEADAILIAggAkECdCIBaiAIIABBAnRqKAIANgIAIAEgD2ogJjgCACAAQQF0IgJBAmohASACQQFyIgMgDkkNAAsLIAggAEECdCIAaiAQNgIAIAAgD2ogJzgCAAsgJyAgIBAgImxBAnRqIhIqAgBgDQAgFSAQIBhsIgBBAnRqIQsgACAYIBBBAWpsIgFHBEAgFSABQQJ0aiEBIAshAANAIAAoAgAgB0YNAiAAQQRqIgAgAUcNAAsLQQIhA0EAIQBBASEBAkAgDkECSQ0AA0AgACECIBIgAUECdGoqAgAhJgJAIAMgDk8EQCABIQAgJiAnXg0BIAIhAAwDCyASIANBAnRqKgIAIiUgJl8EQCABIQAgJiAnXg0BIAIhAAwDCyADIQAgJSImICdeDQAgAiEADAILIAsgAkECdCIBaiALIABBAnRqKAIANgIAIAEgEmogJjgCACAAQQF0IgFBAmohAyABQQFyIgEgDkkNAAsLIAsgAEECdCIAaiAHNgIAIAAgEmogJzgCAAsgE0EBaiITIBtHDQALIAoiByAZRw0ACwsgFhBXAkAgBS0AqAJBAUcNAEEAIQMCQCAFKAKkASAFKAKgAWwiAkUNACAFKAK0ASIBIQAgAkEBa0H/////A3EiB0EDTwRAIAEgB0EBaiIIQfz///8HcSIHQQJ0aiEA/QwAAAAAAAAAAAAAAAAAAAAAIS8DQCAvIAEgA0ECdGr9AAIA/Qz//////////////////////Tj9sQEhLyADQQRqIgMgB0cNAAsgLyAvIC/9DQgJCgsMDQ4PAAECAwABAgP9rgEiLyAvIC/9DQQFBgcAAQIDAAECAwABAgP9rgH9GwAhAyAHIAhGDQELIAEgAkECdGohAQNAIAMgACgCAEF/R2ohAyAAQQRqIgAgAUcNAAsLIA1B8ABqIgAgAxBEIA0gAEH1ygBBMxBFIgAoAgg2AogBIA0gACkCADcDgAEgAEIANwIAIABBADYCCCANIA1BgAFqQfMvQRwQMyIAKAIINgIQIA0gACkCADcDCCAAQgA3AgAgAEEANgIIIA1BCGpBARA8IA0sABNBAEgEQCANKAIQGiANKAIIEBELIA0sAIsBQQBIBEAgDSgCiAEaIA0oAoABEBELIA0sAHtBAE4NACANKAJ4GiANKAJwEBELIBEoAkAiAARAIBEgADYCRCARKAJIGiAAEBELIBEoAigiAARAIBEgADYCLCARKAIwGiAAEBELIBEoAhAiAARAIBEgADYCFCARKAIYGiAAEBELIA1B4AFqJAAMAQsgCCAKNgIYIAggADYCFAwJCyAMKAJ4CyAGEIABIgcoAgBFDQAgBEMAAIA/kiEnIAVB2ABqIQ4gBUGEAWohE0EAIQsCQANAAkAgDEEANgIgIAxCADcCGCAFKAJMIQAgDEEANgIUIAxCADcCDCAABEAgAEEASA0LIABBAWtBBXZBAWoiAUECdBASIQIgDCABNgIUIAxBADYCECAMIAI2AgwgDEEMaiAAELECCyAMIBMgDEH4AGogCyAOENwDIAwoAgAiDSEAIAwoAgQiFSANRwRAA0BDAAAAACElAkAgCSgCBCIBIA0oAgAiCGwiACABIAhBAWpsIgpGDQAgCSgCFCIPIABBAnRqIQAgDCgCjAEgDCgCfCALbEECdGohA0EAIQIgAUEDcSIQBEADQCAAKgIAIAMqAgCTIgQgBJQgJZIhJSADQQRqIQMgAEEEaiEAIAJBAWoiAiAQRw0ACwsgAUEBa0H/////A3FBA0kNACAPIApBAnRqIQEDQCAAKgIMIAMqAgyTIgQgBJQgACoCCCADKgIIkyIEIASUIAAqAgQgAyoCBJMiBCAElCAAKgIAIAMqAgCTIgQgBJQgJZKSkpIhJSADQRBqIQMgAEEQaiIAIAFHDQALCyAlIAcoAjQgBygCJCALbEECdGoiCioCAGBFBEAgBygCDCALbCEPIAcoAhwhEEEAIQACQCAHKAIEIhFBAkkNAEECIQIgECAPQQJ0aiESQQEhAQNAIAAhAyAKIAFBAnRqKgIAIQQCQCACIBFPBEAgASEAIAQgJV4NASADIQAMAwsgCiACQQJ0aioCACImIARfBEAgASEAIAQgJV4NASADIQAMAwsgAiEAICYiBCAlXg0AIAMhAAwCCyASIANBAnQiAWogEiAAQQJ0aigCADYCACABIApqIAQ4AgAgAEEBdCIBQQJqIQIgAUEBciIBIBFJDQALCyAAQQJ0IgAgECAPQQJ0amogCDYCACAAIApqICU4AgAgDSgCACEICwJAIAwoAhwiACAMKAIgIgNJBEAgACAlOAIEIAAgCDYCACAAQQhqIQMMAQsgACAMKAIYIgBrIgFBA3UiCkEBaiICQYCAgIACTw0IIAFB/////wEgAyAAayIDQQJ1Ig8gAiACIA9JGyADQfj///8HTxsiAgR/IAJBgICAgAJPDQQgAkEDdBASBUEACyIPaiIDICU4AgQgAyAINgIAIAMgCkEDdGshCCABBEAgCCAAIAH8CgAACyAMIA8gAkEDdGo2AiAgDCADQQhqIgM2AhwgDCAINgIYIABFDQAgABARCyAMIAM2AhwCQCADIAwoAhgiCGtBA3UiAEECSA0AIANBBGsqAgAiBCAIIABBAmtBAXYiAEEDdGoiAioCBF1FDQAgA0EIayIBKAIAIQMDQAJAIAEgAiIBKQIANwIAIABFDQAgCCAAQQFrQQF2IgBBA3RqIgIqAgQgBF4NAQsLIAEgBDgCBCABIAM2AgALIAwoAgwgDSgCACIAQQN2Qfz///8BcWoiASABKAIAQQEgAHRyNgIAIBUgDUEEaiINRw0ACyAMKAIAIQ0gDCgCBCEAC0EAIQgCQCAGIAAgDWtBAnVrIhVBAEwNAANAAkBBASAOEEwgBTUCTIKnIgp0IhggCkEFdkECdCIWIAwoAgxqKAIAcUUEQEMAAAAAISUCQCAJKAIEIgEgCmwiACABIApBAWpsIg1GDQAgCSgCFCIPIABBAnRqIQAgDCgCjAEgDCgCfCALbEECdGohA0EAIQIgAUEDcSIQBEADQCAAKgIAIAMqAgCTIgQgBJQgJZIhJSADQQRqIQMgAEEEaiEAIAJBAWoiAiAQRw0ACwsgAUEBa0H/////A3FBA0kNACAPIA1BAnRqIQEDQCAAKgIMIAMqAgyTIgQgBJQgACoCCCADKgIIkyIEIASUIAAqAgQgAyoCBJMiBCAElCAAKgIAIAMqAgCTIgQgBJQgJZKSkpIhJSADQRBqIQMgAEEQaiIAIAFHDQALCyAlIAcoAjQgBygCJCALbEECdGoiDSoCAGBFBEAgBygCDCALbCEPIAcoAhwhEEEAIQACQCAHKAIEIhFBAkkNAEECIQIgECAPQQJ0aiESQQEhAQNAIAAhAyANIAFBAnRqKgIAIQQCQCACIBFPBEAgASEAIAQgJV4NASADIQAMAwsgDSACQQJ0aioCACImIARfBEAgASEAIAQgJV4NASADIQAMAwsgAiEAICYiBCAlXg0AIAMhAAwCCyASIANBAnQiAWogEiAAQQJ0aigCADYCACABIA1qIAQ4AgAgAEEBdCIBQQJqIQIgAUEBciIBIBFJDQALCyAAQQJ0IgAgECAPQQJ0amogCjYCACAAIA1qICU4AgALAkAgDCgCHCIAIAwoAiAiA0kEQCAAICU4AgQgACAKNgIAIABBCGohAgwBCyAAIAwoAhgiAGsiAUEDdSINQQFqIgJBgICAgAJPDQIgAUH/////ASADIABrIgNBAnUiDyACIAIgD0kbIANB+P///wdPGyICBH8gAkGAgICAAk8NBiACQQN0EBIFQQALIg9qIgMgJTgCBCADIAo2AgAgAyANQQN0ayEKIAEEQCAKIAAgAfwKAAALIAwgDyACQQN0ajYCICAMIANBCGoiAjYCHCAMIAo2AhggAEUNACAAEBELIAwgAjYCHAJAIAIgDCgCGCIKa0EDdSIAQQJIDQAgAkEEayoCACIEIAogAEECa0EBdiIAQQN0aiIDKgIEXUUNACACQQhrIgEoAgAhAgNAAkAgASADIgEpAgA3AgAgAEUNACAKIABBAWtBAXYiAEEDdGoiAyoCBCAEXg0BCwsgASAEOAIEIAEgAjYCAAsgDCgCDCAWaiIAIAAoAgAgGHI2AgALIBUgCEEBaiIIRw0BDAILCwwGCyAMKAIYIgEqAgQhJiABKAIAIQgCQCAMKAIcIg8gAWtBA3UiDUECSA0AIAEpAgAhMCANQQJrQQF2IRBBACEAIAEhAwNAIAMiAiAAQQN0aiIKQQhqIQMCfyAAQQF0IgBBAXIiESANIABBAmoiAEwNABogESAKKgIMIAoqAhReRQ0AGiAKQRBqIQMgAAshACACIAMpAgA3AgAgACAQTA0ACyAPQQhrIgAgA0YEQCADIDA3AgAMAQsgAyAAKQIANwIAIAAgMDcCACADIAFrQQhqQQN1IgBBAkgNACADKgIEIgQgASAAQQJrQQF2IgBBA3RqIgIqAgRdRQ0AIAMoAgAhCgNAAkAgAyACIgMpAgA3AgAgAEUNACABIABBAWtBAXYiAEEDdGoiAioCBCAEXg0BCwsgAyAEOAIEIAMgCjYCAAsgDCAMKAIcQQhrIg02AhwCQCAmICcgBygCNCAHKAIkIAtsQQJ0aioCAJQiBF1FDQADQCAFKAKkASIAIAhsIgEgACAIQQFqIhVsRwRAIAUoArQBIgggAUECdGohCgNAIAooAgAiDUF/RwRAAkAgDCgCDCANQQN2Qfz///8BcWoiACgCACIBQQEgDXQiAnENACAAIAEgAnI2AgBDAAAAACElAkAgCSgCBCIBIA1sIgAgASANQQFqbCIPRg0AIAkoAhQiECAAQQJ0aiEAIAwoAowBIAwoAnwgC2xBAnRqIQNBACECIAFBA3EiEQRAA0AgACoCACADKgIAkyImICaUICWSISUgA0EEaiEDIABBBGohACACQQFqIgIgEUcNAAsLIAFBAWtB/////wNxQQNJDQAgECAPQQJ0aiEBA0AgACoCDCADKgIMkyImICaUIAAqAgggAyoCCJMiJiAmlCAAKgIEIAMqAgSTIiYgJpQgACoCACADKgIAkyImICaUICWSkpKSISUgA0EQaiEDIABBEGoiACABRw0ACwsgBCAlXkUNACAlIAcoAjQgBygCJCALbEECdGoiCCoCAGBFBEAgBygCDCALbCEPIAcoAhwhEEEAIQACQCAHKAIEIhFBAkkNAEECIQIgECAPQQJ0aiESQQEhAQNAIAAhAyAIIAFBAnRqKgIAIQQCQCACIBFPBEAgASEAIAQgJV4NASADIQAMAwsgCCACQQJ0aioCACImIARfBEAgASEAIAQgJV4NASADIQAMAwsgAiEAICYiBCAlXg0AIAMhAAwCCyASIANBAnQiAWogEiAAQQJ0aigCADYCACABIAhqIAQ4AgAgAEEBdCIBQQJqIQIgAUEBciIBIBFJDQALCyAAQQJ0IgAgECAPQQJ0amogDTYCACAAIAhqICU4AgALAkAgDCgCHCIAIAwoAiAiA0kEQCAAICU4AgQgACANNgIAIABBCGohAgwBCyAAIAwoAhgiAGsiAUEDdSIIQQFqIgJBgICAgAJPDQkgAUH/////ASADIABrIgNBAnUiDyACIAIgD0kbIANB+P///wdPGyICBH8gAkGAgICAAk8NCCACQQN0EBIFQQALIg9qIgMgJTgCBCADIA02AgAgAyAIQQN0ayEIIAEEQCAIIAAgAfwKAAALIAwgDyACQQN0ajYCICAMIANBCGoiAjYCHCAMIAg2AhggAEUNACAAEBELIAwgAjYCHAJAIAIgDCgCGCIIa0EDdSIAQQJIDQAgAkEEayoCACIEIAggAEECa0EBdiIAQQN0aiIDKgIEXUUNACACQQhrIgEoAgAhAgNAAkAgASADIgEpAgA3AgAgAEUNACAIIABBAWtBAXYiAEEDdGoiAyoCBCAEXg0BCwsgASAEOAIEIAEgAjYCAAsgJyAHKAI0IAcoAiQgC2xBAnRqKgIAlCEEIAUoArQBIQgLIApBBGoiCiAIIAUoAqQBIBVsQQJ0akcNAQsLIAwoAhwhDQsgDCgCGCIBIA1GDQEgASkCACIwQiCIpyEPAkAgDSABa0EDdSIKQQJIDQAgCkECa0EBdiEQQQAhACABIQMDQCADIgIgAEEDdGoiCEEIaiEDAn8gAEEBdCIAQQFyIhEgCiAAQQJqIgBMDQAaIBEgCCoCDCAIKgIUXkUNABogCEEQaiEDIAALIQAgAiADKQIANwIAIAAgEEwNAAsgDUEIayIAIANGBEAgAyAwNwIADAELIAMgACkCADcCACAAIDA3AgAgAyABa0EIakEDdSIAQQJIDQAgAyoCBCImIAEgAEECa0EBdiIAQQN0aiICKgIEXUUNACADKAIAIQgDQAJAIAMgAiIDKQIANwIAIABFDQAgASAAQQFrQQF2IgBBA3RqIgIqAgQgJl4NAQsLIAMgJjgCBCADIAg2AgALIDCnIQggDCAMKAIcQQhrIg02AhwgBCAPvl4NAAsLIAwoAgAiAARAIAwgADYCBCAMKAIIGiAAEBELIAwoAgwiAARAIAwoAhQaIAAQEQsgDCgCGCIABEAgDCAANgIcIAwoAiAaIAAQEQsgC0EBaiILIAcoAgBJDQEMAwsLDAkLDAILIAcQVyAHQbADayAFRwRAIAVBwANqIAcoAhAiACAHKAIUIgEgASAAa0ECdRArIAUgBygCHCAFKALAAyIAIAAgBSgCxANGGzYCzAMgBSAHKAIINgK4AyAFIAcoAgw2ArwDCwJAIAdBsANrIAVGBEAgBSgC2AMhCCAFKALcAyEDIAUoAtQDIQAgBSgC0AMhDQwBCyAFQdgDaiAHKAIoIgAgBygCLCIBIAEgAGtBAnUQKyAFIAcoAjQgBSgC2AMiCCAIIAUoAtwDIgNGGzYC5AMgBSAHKAIgIg02AtADIAUgBygCJCIANgLUAwsCQCAAIA1sIgAgAyAIa0ECdSIBSwRAIAVB2ANqIAAgAWsQLyAFKALQAyENIAUoAtgDIQgMAQsgACABTw0AIAUgCCAAQQJ0ajYC3AMLIAUgCDYC5AMCQCANRQ0AIAUoAtQDIgJFDQAgAkF8cSEBQQAhCiACQQRJIQsDQCAIIAIgCmxBAnRqIQlBACEDQQAhAAJAIAtFBEADQCAJIANBAnRqIgAgAP0AAgD94wH9CwIAIANBBGoiAyABRw0ACyABIgAgAkYNAQsDQCAJIABBAnRqIgMgAyoCAJE4AgAgAEEBaiIAIAJHDQALCyAKQQFqIgogDUcNAAsLIAcoAkAiAARAIAcgADYCRCAHKAJIGiAAEBELIAcoAigiAARAIAcgADYCLCAHKAIwGiAAEBELIAcoAhAiAEUNACAHIAA2AhQgBygCGBogABARCyAMKAKAASIABEAgDCAANgKEASAMKAKIARogABARCyAMQZABaiQADAQLDAQLIwBBQGoiDCQAAkACQCAAIgUoArACIAAsALcCIgAgAEEASCIAG0ECRw0AIAUoAqwCIAVBrAJqIAAbLwAAQeLMAUcNACMAQSBrIgokACAJIgsoAgAhACAFLQCoAiEBIApBADYCHCAKQQA2AhQgCiABOgAQIAr9DAAAAAAAAAAAMgAAAAAAAAAgAP0cACAAQTJtQQFq/RwD/QsEACAABEADQCAKEKwBIAsoAgAiDgR/IAUoAuwCIAUoAtwCIAhsQQJ0aiEGIAsoAhQiDyALKAIEIg0gCGwiEUECdGohByAPIA0gCEEBaiIWbCISQQJ0aiETAkAgBSgCvAIiFUECTwRAIA1BA3EhGEEAIQkgDUEBa0H/////A3FBA0khGQNAQwAAAAAhJQJAIBEgEkYNACAPIAkgDWxBAnRqIQBBACEDIAchAiAYBEADQCACKgIAIAAqAgCTIgQgBJQgJZIhJSAAQQRqIQAgAkEEaiECIANBAWoiAyAYRw0ACwsgGQ0AA0AgAioCDCAAKgIMkyIEIASUIAIqAgggACoCCJMiBCAElCACKgIEIAAqAgSTIgQgBJQgAioCACAAKgIAkyIEIASUICWSkpKSISUgAEEQaiEAIAJBEGoiAiATRw0ACwsgJSAGKgIAYEUEQEECIQIgBSgC1AIgBSgCxAIgCGxBAnRqIRBBACEAQQEhAwNAAkAgACEBIAYgA0ECdGoqAgAhBAJAIAIgFU8EQCADIQAgBCAlXg0BIAEhAAwCCyAGIAJBAnRqKgIAIiYgBF8EQCADIQAgBCAlXg0BIAEhAAwCCyACIQAgJiIEICVeDQAgASEADAELIBAgAUECdCIBaiAQIABBAnRqKAIANgIAIAEgBmogBDgCACAAQQF0IgFBAmohAiABQQFyIgMgFUkNAQsLIBAgAEECdCIAaiAJNgIAIAAgBmogJTgCAAsgCUEBaiIJIA5HDQALDAELIBEgEkcEQCANQQNxIQlBACEBIA1BAWtB/////wNxQQNJIRADQCAPIAEgDWxBAnRqIQBDAAAAACElIAchAkEAIQMgCQRAA0AgAioCACAAKgIAkyIEIASUICWSISUgAEEEaiEAIAJBBGohAiADQQFqIgMgCUcNAAsLIBBFBEADQCACKgIMIAAqAgyTIgQgBJQgAioCCCAAKgIIkyIEIASUIAIqAgQgACoCBJMiBCAElCACKgIAIAAqAgCTIgQgBJQgJZKSkpIhJSAAQRBqIQAgAkEQaiICIBNHDQALCyAlIAYqAgBgRQRAIAUoAtQCIAUoAsQCIAhsQQJ0aiABNgIAIAYgJTgCAAsgAUEBaiIBIA5HDQALDAELIAYqAgAiJUMAAAAAXw0AQQEhAkEAIQAgDkEBRwRAIA5BfnEhAUEAIQIDQCAlQwAAAABfRQRAIAUoAtQCIAUoAsQCIAhsQQJ0aiAANgIAIAZBADYCAEMAAAAAISULICVDAAAAAF9FBEAgBSgC1AIgBSgCxAIgCGxBAnRqIABBAXI2AgAgBkEANgIAQwAAAAAhJQsgAEECaiEAIAJBAmoiAiABRw0ACyAlQwAAAABfRSECCyAOQQFxRQ0AIAJFDQAgBSgC1AIgBSgCxAIgCGxBAnRqIAA2AgAgBkEANgIACyAWBSAIQQFqCyIIIA5JDQALCyAFQbgCahBXIAVBkANqIAUoAsgCIgAgBSgCzAIiASABIABrQQJ1ECsgBSAFKQPAAjcDiAMgBSAFKALcAiIANgKkAyAFIAUoAtgCIgI2AqADIAUgBSgC1AIgBSgCkAMiASABIAUoApQDRhs2ApwDAkAgACACbCIAIAUoAqwDIAUoAqgDIghrQQJ1IgFLBEAgBUGoA2ogACABaxAvIAUoAtgCIQIgBSgCqAMhCAwBCyAAIAFPDQAgBSAIIABBAnRqNgKsAwsgBSAINgK0AwJAIAJFDQAgBSgC3AIiA0UNACADQQNxIQYgA0F8cSEBQQAhCyAIIAUoAuwCIg0gAiADbEECdGpJIA0gCCAFKAKkAyIPIAJBAWtsIANqQQJ0aklxIAMgD3JBgICAgAJxQR12ciADQQhJciEQA0AgCCALIA9sQQJ0aiEHIA0gAyALbEECdGohBUEAIQBBACEJAkAgEEUEQANAIAcgAEECdCIJaiAFIAlq/QACAP3jAf0LAgAgAEEEaiIAIAFHDQALIAEiCSADRg0BC0EAIQ4gCSEAIAYEQANAIAcgAEECdCIRaiAFIBFqKgIAkTgCACAAQQFqIQAgDkEBaiIOIAZHDQALCyAJIANrQXxLDQADQCAHIABBAnQiCWogBSAJaioCAJE4AgAgByAJQQRqIg5qIAUgDmoqAgCROAIAIAcgCUEIaiIOaiAFIA5qKgIAkTgCACAHIAlBDGoiCWogBSAJaioCAJE4AgAgAEEEaiIAIANHDQALCyALQQFqIgsgAkcNAAsLIAosAB9BAEgEQCAKKAIcGiAKKAIUEBELIApBIGokAAwBCwJAIAUtAJACQQFHDQAgDEEkaiIAIAUoAoACEEQgDCAAQdPLAEEYEEUiACgCCDYCOCAMIAApAgA3AzAgAEIANwIAIABBADYCCCAMIAxBMGpB6BFBBhAzIgAoAgg2AhAgDCAAKQIANwMIIABCADcCACAAQQA2AgggDEEIaiAFLQCoAhA8IAwsABNBAEgEQCAMKAIQGiAMKAIIEBELIAwsADtBAEgEQCAMKAI4GiAMKAIwEBELIAwsAC9BAEgEQCAMKAIsGiAMKAIkEBELIAxBCGogCSAFKAKAAiAFKAKEAiAFQdgAahDaASAFQfgAaiEBIAUoAngiAARAIAAiAyAFKAJ8IgJHBEADQCAMIAJBDGs2AjAgDEEwahBYIAAgAkEUayICRw0ACyABKAIAIQMLIAUgADYCfCAFKAKAARogAxARCyAFIAwoAgg2AnggBSAMKAIMNgJ8IAUgDCgCEDYCgAEgDEEgEBIiADYCCCAMQpqAgICAhICAgH83AgwgAEGFDC8AADsAGCAAQf0LKQAANwAQIABB7Qv9AAAA/QsAACAAQQA6ABogDEEIaiAFLQCoAhA8IAwsABNBAEgEQCAMKAIQGiAMKAIIEBELIAxBCGogARDdAyAFKAKkAiERQQAhAiMAQRBrIhMkACAMKAIMIQ8gDCgCCCEVIBNBADYCDCATQgA3AgQgFSARbSEYAkAgEUHWqtWqAUkEQCARQQxsIgAQEiELIABBDGsiACAAQQxwa0EMaiIZBEAgC0EAIBn8CwALIA9BAEoEQCARQQFrIRRBASARIBFBAU0bIRcDQCACIBhsIgogFSACQQFqIgggGGwgAiAURhsiHkgEQCALIAJBDGxqIQYDQEEAIQMDQCAMKAIcIAwoAgwgCmxBAnRqIANBAnRqKAIAIg5Bf0cEQAJAIANBAWoiAyAPTg0AIA5BAWohHyADIQEDQCAMKAIcIAwoAgwgCmxBAnRqIAFBAnRqKAIAIhBBf0YNAUMAAAAAIQQCQCAJKAIEIhIgDmwiACASIB9sIh1GDQAgCSgCFCIaIABBAnRqIQIgGiAQIBJsQQJ0aiEHQQAhACASQQNxIiAEQANAIAIqAgAgByoCAJMiJiAmlCAEkiEEIAdBBGohByACQQRqIQIgAEEBaiIAICBHDQALCyASQQFrQf////8DcUEDSQ0AIBogHUECdGohAANAIAIqAgwgByoCDJMiJiAmlCACKgIIIAcqAgiTIiYgJpQgAioCBCAHKgIEkyImICaUIAIqAgAgByoCAJMiJiAmlCAEkpKSkiEEIAdBEGohByACQRBqIgIgAEcNAAsLAkAgBCAFKALsAiIAIAUoAtwCIgIgDmxBAnRqKgIAXUUEQCAEIAAgAiAQbEECdGoqAgBdRQ0BCwJAIAYoAgQiACAGKAIIIhJPBEAgACAGKAIAIgBrIgJBDG1BAWoiB0HVqtWqAUsNEiACQdWq1aoBIBIgAGtBDG0iEkEBdCIaIAcgByAaSRsgEkGq1arVAE8bIhIEfyASQdWq1aoBSw0UIBJBDGwQEgVBAAsiGmoiByAEOAIIIAcgEDYCBCAHIA42AgAgByACQXRtQQxsaiEQIAIEQCAQIAAgAvwKAAALIAYgGiASQQxsajYCCCAGIAdBDGoiAjYCBCAGIBA2AgAgAEUNASAAEBEMAQsgACAEOAIIIAAgEDYCBCAAIA42AgAgAEEMaiECCyAGIAI2AgQLIAFBAWoiASAPRw0ACwsgAyAPRw0BCwsgCkEBaiIKIB5HDQALCyAIIgIgF0cNAAsLIAsgGWohCEEBIBEgEUEBTBshGANAIAshBwNAAkAgBygCACISIAcoAgQiGUYNAAJAA0AgEigCACIGQQBOBEAgEigCBCIOQQBIDQIgEioCCCElAkAgBiARcCAWRw0AICUgBSgC7AIiDyAFKALcAiAGbCIQQQJ0aioCAGANACAFKALUAiECIAUoAsQCIgAgBmwiCiAAIAZBAWpsIgBHBEAgAiAAQQJ0aiEBIAIgCkECdGohAANAIAAoAgAgDkYNAiAAQQRqIgAgAUcNAAsLQQEhAUEAIQBBAiEDIAUoArwCIhVBAUsEQAJAA0AgACECIAUoAuwCIg8gBSgC3AIgBmwiEEECdGoiCiABQQJ0aioCACEEAkAgAyAVTwRAIAEhACAEICVeDQEgAiEADAMLIAogA0ECdGoqAgAiJiAEXwRAIAEhACAEICVeDQEgAiEADAMLIAMhACAmIgQgJV4NACACIQAMAgsgBSgC1AIgBSgCxAIgBmxBAnRqIgEgAkECdCIDaiABIABBAnRqKAIANgIAIAMgCmogBDgCACAFKAKEAyAFKAL0AiAGbGoiASACaiAAIAFqLQAAOgAAIABBAXQiAUECaiEDIAFBAXIiASAFKAK8AiIVSQ0ACyAFKALcAiAGbCEQIAUoAuwCIQ8LIAUoAsQCIAZsIQogBSgC1AIhAgsgAEECdCIBIAIgCkECdGpqIA42AgAgDyAQQQJ0aiABaiAlOAIAIAUoAoQDIAUoAvQCIAZsaiAAakExOgAACwJAIA4gEXAgFkcNACAlIAUoAuwCIg8gBSgC3AIgDmwiEEECdGoqAgBgDQAgBSgC1AIhAiAFKALEAiIAIA5sIgogACAOQQFqbCIARwRAIAIgAEECdGohASACIApBAnRqIQADQCAAKAIAIAZGDQIgAEEEaiIAIAFHDQALC0EBIQFBACEAQQIhAyAFKAK8AiIVQQFLBEACQANAIAAhAiAFKALsAiIPIAUoAtwCIA5sIhBBAnRqIgogAUECdGoqAgAhBAJAIAMgFU8EQCABIQAgBCAlXg0BIAIhAAwDCyAKIANBAnRqKgIAIiYgBF8EQCABIQAgBCAlXg0BIAIhAAwDCyADIQAgJiIEICVeDQAgAiEADAILIAUoAtQCIAUoAsQCIA5sQQJ0aiIBIAJBAnQiA2ogASAAQQJ0aigCADYCACADIApqIAQ4AgAgBSgChAMgBSgC9AIgDmxqIgEgAmogACABai0AADoAACAAQQF0IgFBAmohAyABQQFyIgEgBSgCvAIiFUkNAAsgBSgC3AIgDmwhECAFKALsAiEPCyAFKALEAiAObCEKIAUoAtQCIQILIABBAnQiASACIApBAnRqaiAGNgIAIA8gEEECdGogAWogJTgCACAFKAKEAyAFKAL0AiAObGogAGpBMToAAAsgGSASQQxqIhJHDQEMAwsLDA0LDA0LIAdBDGoiByAIRw0ACyAWQQFqIhYgGEcNAAsDQCAIQQxrIgAoAgAiAQRAIAhBCGsgATYCACAIQQRrKAIAGiABEBELIAAiCCALRw0ACyALEBEgE0EQaiQADAELDAYLIAwoAhAiAEUNACAMIAA2AhQgDCgCGBogABARCyAFKAL8ASERIAVB2ABqIR5BACEHIAVBuAJqIg4oAgAiCwRAA0BBACEKAkAgDigCDCIAIAciA2wiASAAIAdBAWoiB2wiCEYNACAOKAIcIgYgAUECdGohAQJAIABBAWtB/////wNxIgBBA0kEQCABIQAMAQsgASAAQQFqIg9B/P///wdxIgJBAnRqIQD9DAAAAAAAAAAAAAAAAAAAAAAhLwNAIC8gASAKQQJ0av0AAgD9DP/////////////////////9OP2xASEvIApBBGoiCiACRw0ACyAvIC8gL/0NCAkKCwwNDg8AAQIDAAECA/2uASIvIC8gL/0NBAUGBwABAgMAAQIDAAECA/2uAf0bACEKIAIgD0YNAQsgBiAIQQJ0aiEBA0AgCiAAKAIAQX9HaiEKIABBBGoiACABRw0ACwtBACEQIBEgCmsiE0EASgRAA0AgHhBMIA41AgCCpyEGQwAAAAAhJQJAIAkoAgQiASADbCIAIAEgB2wiC0YNACAJKAIUIgggAEECdGohACAIIAEgBmxBAnRqIQpBACECIAFBA3EiDwRAA0AgACoCACAKKgIAkyIEIASUICWSISUgCkEEaiEKIABBBGohACACQQFqIgIgD0cNAAsLIAFBAWtB/////wNxQQNJDQAgCCALQQJ0aiEBA0AgACoCDCAKKgIMkyIEIASUIAAqAgggCioCCJMiBCAElCAAKgIEIAoqAgSTIgQgBJQgACoCACAKKgIAkyIEIASUICWSkpKSISUgCkEQaiEKIABBEGoiACABRw0ACwsCQCAlIA4oAjQiDyAOKAIkIANsIgpBAnRqKgIAYA0AIA4oAhwhCyAOKAIMIgAgA2wiASAAIAdsIgBHBEAgCyAAQQJ0aiECIAsgAUECdGohAANAIAAoAgAgBkYNAiAAQQRqIgAgAkcNAAsLQQEhAkEAIQBBAiEIIA4oAgQiEkEBSwRAAkADQCAAIQEgDigCNCIPIA4oAiQgA2wiCkECdGoiCyACQQJ0aioCACEEAkAgCCASTwRAIAIhACAEICVeDQEgASEADAMLIAsgCEECdGoqAgAiJiAEXwRAIAIhACAEICVeDQEgASEADAMLIAghACAmIgQgJV4NACABIQAMAgsgDigCHCAOKAIMIANsQQJ0aiICIAFBAnQiCGogAiAAQQJ0aigCADYCACAIIAtqIAQ4AgAgASAOKAJMIA4oAjwgA2xqIgJqIAAgAmotAAA6AAAgAEEBdCIBQQJqIQggAUEBciICIA4oAgQiEkkNAAsgDigCJCADbCEKIA4oAjQhDwsgDigCHCELIA4oAgwgA2whAQsgAEECdCICIAsgAUECdGpqIAY2AgAgDyAKQQJ0aiACaiAlOAIAIA4oAkwgDigCPCADbGogAGpBMToAAAsgEEEBaiIQIBNHDQALIA4oAgAhCwsgByALSQ0ACwsgBSgC/AEhASAFKAKYAiEfIAUoApwCIRggBSoCoAIhJiAFKAKkAiERIAUtAKgCIRIjAEHgAWsiBiQAAkAgDigCACAJKAIARgRAIAZB0AFqIgAgGBBEIAYgAEG3ygBBDxBFIgAoAgg2AhggBiAAKQIANwMQIABCADcCACAAQQA2AgggBiAGQRBqQboPQQsQMyIAKAIINgJoIAYgACkCADcDYCAAQgA3AgAgAEEANgIIIAZB4ABqIBIQPCAGLABrQQBIBEAgBigCaBogBigCYBARCyAGLAAbQQBIBEAgBigCGBogBigCEBARCyAGLADbAUEASARAIAYoAtgBGiAGKALQARARCwJAIBhBAEwNACABsiElA0AgBkHAAWoiACAbQQFqIhsQRCAGIABBmcwAQQEQRSIAKAIINgLYASAGIAApAgA3A9ABIABCADcCACAAQQA2AgggBiAGQdABakH2ywBBBRAzIgAoAgg2AhggBiAAKQIANwMQIABCADcCACAAQQA2AgggBkGwAWoiACAYEEQgBiAGQRBqIAYoArABIAAgBiwAuwEiAEEASCIBGyAGKAK0ASAAIAEbEDMiACgCCDYCaCAGIAApAgA3A2AgAEIANwIAIABBADYCCCAGQeAAaiASEDwgBiwAa0EASARAIAYoAmgaIAYoAmAQEQsgBiwAuwFBAEgEQCAGKAK4ARogBigCsAEQEQsgBiwAG0EASARAIAYoAhgaIAYoAhAQEQsgBiwA2wFBAEgEQCAGKALYARogBigC0AEQEQsgBiwAywFBAEgEQCAGKALIARogBigCwAEQEQsgDiAGQeAAaiAJKAIAIB8Q1wEiDyAGQRBqIAkoAgAgHxDXASIVIB4gERDjAyAGQdABaiEQQQAhCAJAIAkoAgAiGiAPKAIARgRAIBUoAgAgGkYEQCAQQQA2AgggEEIANwIAAkAgEQRAIBFB1qrVqgFPDQEgECARQQxsIgEQEiIANgIAIBAgACABajYCCCABQQxrIgEgAUEMcGtBDGoiAQRAIABBACAB/AsACyAQIAAgAWo2AgQgGkEEbUEBaiEdA0ACQCAIIgMgHWwiEyAaIANBAWoiCCAdbCIAIAAgGkobIiBPDQBBASEBIA8oAgQiC0UNAANAQQAhAEEAIQcCQCABRQ0AAkADQAJAIAdBAnQhACAHQQFqIQcCQCAAIA8oAhwgDygCDCATbEECdGpqKAIAIgpBf0YNAAJAIAcgC08NACAKQQFqISIgA0EMbCEcIAchAgNAAkACQCAPKAIcIA8oAgwgE2xBAnRqIAJBAnRqKAIAIhZBf0YNAEMAAAAAIQQCQCAJKAIEIhQgCmwiACAUICJsIiFGDQAgCSgCFCIXIABBAnRqIQAgFyAUIBZsQQJ0aiEBQQAhGSAUQQNxIiMEQANAIAAqAgAgASoCAJMiJyAnlCAEkiEEIAFBBGohASAAQQRqIQAgGUEBaiIZICNHDQALCyAUQQFrQf////8DcUEDSQ0AIBcgIUECdGohGQNAIAAqAgwgASoCDJMiJyAnlCAAKgIIIAEqAgiTIicgJ5QgACoCBCABKgIEkyInICeUIAAqAgAgASoCAJMiJyAnlCAEkpKSkiEEIAFBEGohASAAQRBqIgAgGUcNAAsLIAQgDigCNCIAIA4oAiQiASAKbEECdGoqAgBdRQRAIAQgACABIBZsQQJ0aioCAF1FDQELAkAgECgCACAcaiIAKAIEIgEgACgCCCIXSQRAIAEgBDgCCCABIBY2AgQgASAKNgIAIAFBDGohAQwBCyABIAAoAgAiGWsiAUEMbUEBaiIUQdaq1aoBTw0CIAFB1arVqgEgFyAZa0EMbSIXQQF0IiEgFCAUICFJGyAXQarVqtUATxsiFwR/IBdB1qrVqgFPDQcgF0EMbBASBUEACyIhaiIUIAQ4AgggFCAWNgIEIBQgCjYCACAUIAFBdG1BDGxqIRYgAQRAIBYgGSAB/AoAAAsgACAhIBdBDGxqNgIIIAAgFEEMaiIBNgIEIAAgFjYCACAZRQ0AIBkQESAPKAIEIQsLIAAgATYCBAsgAkEBaiICIAtJDQEMAgsLDBYLIBUoAgQiFkUNACAKQQFqISJBACECA0ACQCAVKAIcIBUoAgwgE2xBAnRqIAJBAnRqKAIAIgtBf0YNAEMAAAAAIQQCQCAJKAIEIhQgCmwiACAUICJsIhxGDQAgCSgCFCIXIABBAnRqIQAgFyALIBRsQQJ0aiEBQQAhGSAUQQNxIiEEQANAIAAqAgAgASoCAJMiJyAnlCAEkiEEIAFBBGohASAAQQRqIQAgGUEBaiIZICFHDQALCyAUQQFrQf////8DcUEDSQ0AIBcgHEECdGohGQNAIAAqAgwgASoCDJMiJyAnlCAAKgIIIAEqAgiTIicgJ5QgACoCBCABKgIEkyInICeUIAAqAgAgASoCAJMiJyAnlCAEkpKSkiEEIAFBEGohASAAQRBqIgAgGUcNAAsLIAQgDigCNCIAIA4oAiQiASAKbEECdGoqAgBdRQRAIAQgACABIAtsQQJ0aioCAF1FDQELAkAgECgCACADQQxsaiIAKAIEIgEgACgCCCIXSQRAIAEgBDgCCCABIAs2AgQgASAKNgIAIAFBDGohAQwBCyABIAAoAgAiGWsiAUEMbUEBaiIUQdaq1aoBTw0GIAFB1arVqgEgFyAZa0EMbSIXQQF0IhwgFCAUIBxJGyAXQarVqtUATxsiFwR/IBdB1qrVqgFPDQUgF0EMbBASBUEACyIcaiIUIAQ4AgggFCALNgIEIBQgCjYCACAUIAFBdG1BDGxqIQsgAQRAIAsgGSAB/AoAAAsgACAcIBdBDGxqNgIIIAAgFEEMaiIBNgIEIAAgCzYCACAZRQ0AIBkQESAVKAIEIRYLIAAgATYCBAsgAkEBaiICIBZJDQALIA8oAgQhCwsgByALIgBJDQEMAwsLDBMLDBELIAAhASATQQFqIhMgIEkNAAsLIAggEUcNAAsLDAMLDAsLDA4LDA4LIAZBBGoiACAOIBAgERDiAyIBEEQgBiAAQZjMAEECEEUiACgCCDYCuAEgBiAAKQIANwOwASAAQgA3AgAgAEEANgIIIAYgBkGwAWpB1ihBEBAzIgAoAgg2AsgBIAYgACkCADcDwAEgAEIANwIAIABBADYCCCAGQcABaiASEDwgBiwAywFBAEgEQCAGKALIARogBigCwAEQEQsgBiwAuwFBAEgEQCAGKAK4ARogBigCsAEQEQsgBiwAD0EASARAIAYoAgwaIAYoAgQQEQsgAbIgJiAJKAIAs5QgJZRdBEAgBkEEaiIAIBsQRCAGIABBx8oAQSgQRSIAKAIINgK4ASAGIAApAgA3A7ABIABCADcCACAAQQA2AgggBiAGQbABakG6D0ELEDMiACgCCDYCyAEgBiAAKQIANwPAASAAQgA3AgAgAEEANgIIIAZBwAFqIBIQPCAGLADLAUEASARAIAYoAsgBGiAGKALAARARCyAGLAC7AUEASARAIAYoArgBGiAGKAKwARARCyAGLAAPQQBIBEAgBigCDBogBigCBBARCyAGKALQASICBEAgAiIBIAYoAtQBIgBHBEADQCAAQQxrIgEoAgAiAwRAIABBCGsgAzYCACAAQQRrKAIAGiADEBELIAEiACACRw0ACyAGKALQASEBCyAGIAI2AtQBIAYoAtgBGiABEBELIAYoAlAiAARAIAYgADYCVCAGKAJYGiAAEBELIAYoAjgiAARAIAYgADYCPCAGKAJAGiAAEBELIAYoAiAiAARAIAYgADYCJCAGKAIoGiAAEBELIAYoAqABIgAEQCAGIAA2AqQBIAYoAqgBGiAAEBELIAYoAogBIgAEQCAGIAA2AowBIAYoApABGiAAEBELIAYoAnAiAEUNAiAGIAA2AnQgBigCeBogABARDAILIAYoAtABIgIEQCACIgEgBigC1AEiAEcEQANAIABBDGsiASgCACIDBEAgAEEIayADNgIAIABBBGsoAgAaIAMQEQsgASIAIAJHDQALIAYoAtABIQELIAYgAjYC1AEgBigC2AEaIAEQEQsgBigCUCIABEAgBiAANgJUIAYoAlgaIAAQEQsgBigCOCIABEAgBiAANgI8IAYoAkAaIAAQEQsgBigCICIABEAgBiAANgIkIAYoAigaIAAQEQsgBigCoAEiAARAIAYgADYCpAEgBigCqAEaIAAQEQsgBigCiAEiAARAIAYgADYCjAEgBigCkAEaIAAQEQsgBigCcCIABEAgBiAANgJ0IAYoAngaIAAQEQsgGCAbRw0ACwsgBkEYEBIiADYCYCAGQpCAgICAg4CAgH83AmQgAEHWMP0AAAD9CwAAIABBADoAECAGQeAAaiASEDwgBiwAa0EASARAIAYoAmgaIAYoAmAQEQsgBkHgAWokAAwBCwwLCyAFKAK4AgRAQQAhAgNAIA4gAiACEOQDIAJBAWoiAiAOKAIASQ0ACwsgDhBXIAUgBSgC3AIiADYCpAMgBSAFKALYAiIDNgKgAwJAIAAgA2wiACAFKAKsAyAFKAKoAyIJa0ECdSIBSwRAIAVBqANqIAAgAWsQLyAFKALYAiEDIAUoAqgDIQkMAQsgACABTw0AIAUgCSAAQQJ0ajYCrAMLIAUgCTYCtAMCQCADRQ0AIAUoAtwCIgdFDQAgB0EDcSEGIAdBfHEhASAJIAUoAuwCIg4gAyAHbEECdGpJIA4gCSAFKAKkAyIPIANBAWtsIAdqQQJ0aklxIAcgD3JBgICAgAJxQR12ciAHQQhJciEQA0AgCSANIA9sQQJ0aiEIIA4gByANbEECdGohC0EAIQJBACEAAkAgEEUEQANAIAggAkECdCIAaiAAIAtq/QACAP3jAf0LAgAgAkEEaiICIAFHDQALIAEiACAHRg0BC0EAIQogACECIAYEQANAIAggAkECdCIRaiALIBFqKgIAkTgCACACQQFqIQIgCkEBaiIKIAZHDQALCyAAIAdrQXxLDQADQCAIIAJBAnQiAGogACALaioCAJE4AgAgCCAAQQRqIgpqIAogC2oqAgCROAIAIAggAEEIaiIKaiAKIAtqKgIAkTgCACAIIABBDGoiAGogACALaioCAJE4AgAgAkEEaiICIAdHDQALCyANQQFqIg0gA0cNAAsLIAVBkANqIAUoAsgCIgAgBSgCzAIiASABIABrQQJ1ECsgBSAFKQPAAjcDiAMgBSAFKALUAiAFKAKQAyIAIAAgBSgClANGGzYCnAMLIAxBQGskAAwCC0EIEBdB3CkQwAIiAEG84gI2AgAgAEHI4gJBARABAAsjAEFAaiIGJAACQAJAIAAiBSgCsAIgACwAtwIiACAAQQBIIgAbQQJHDQAgBSgCrAIgBUGsAmogABsvAABB4swBRw0AIwBBIGsiCyQAIBgoAgAhACAFLQCoAiEBIAtBADYCHCALQQA2AhQgCyABOgAQIAv9DAAAAAAAAAAAMgAAAAAAAAAgAP0cACAAQTJtQQFq/RwD/QsEACAABEADQCALEKwBAn8gB0EBaiINIBgoAgAiDkUNABogBSgC7AIgBSgC3AIgB2xBAnRqIQkgGCgCFCIPIBgoAgQiCCAHbCIRQQJ0aiEMIA8gCCANbCISQQJ0aiETIAUoArwCIhVBAU0EQCAMQQRqIQogCEEBcSEQQQAhAiAIQf////8DcUEBRiEVA0BDAAAAACElQwAAAAAhJ0MAAAAAIQRDAAAAACEmAkAgESASRg0AIA8gAiAIbEECdGohAQJ/IBBFBEAgASEAIAwMAQsgAUEEaiEAIAEqAgAiJyAnlEMAAAAAkiEmIAwqAgAiKCAolEMAAAAAkiEEICggJ5RDAAAAAJIhJyAKCyEDIBUNAANAIAMqAgQiKCAAKgIEIiqUIAMqAgAiKSAAKgIAIiuUICeSkiEnIABBCGohACAqICqUICsgK5QgJpKSISYgKCAolCApICmUIASSkiEEIANBCGoiAyATRw0ACwsCQCAEQwAAAABbIgAgJkMAAAAAWyIBcQ0AQwAAgD8hJSAADQAgAQ0AQwAAgD8gJyAEICaUkZWTISULICUgCSoCAGBFBEAgBSgC1AIgBSgCxAIgB2xBAnRqIAI2AgAgCSAlOAIACyACQQFqIgIgDkcNAAsgDQwBCyAMQQRqIRYgCEEBcSEZQQAhCiAIQf////8DcUEBRiEbA0BDAAAAACElQwAAAAAhJ0MAAAAAIQRDAAAAACEmAkAgESASRg0AIA8gCCAKbEECdGohAQJ/IBlFBEAgASEAIAwMAQsgAUEEaiEAIAEqAgAiJyAnlEMAAAAAkiEmIAwqAgAiKCAolEMAAAAAkiEEICggJ5RDAAAAAJIhJyAWCyEDIBsNAANAIAMqAgQiKCAAKgIEIiqUIAMqAgAiKSAAKgIAIiuUICeSkiEnIABBCGohACAqICqUICsgK5QgJpKSISYgKCAolCApICmUIASSkiEEIANBCGoiAyATRw0ACwsCQCAEQwAAAABbIgAgJkMAAAAAWyIBcQ0AQwAAgD8hJSAADQAgAQ0AQwAAgD8gJyAEICaUkZWTISULICUgCSoCAGBFBEBBAiEDIAUoAtQCIAUoAsQCIAdsQQJ0aiEQQQAhAEEBIQIDQAJAIAAhASAJIAJBAnRqKgIAIQQCQCADIBVPBEAgAiEAIAQgJV4NASABIQAMAgsgCSADQQJ0aioCACImIARfBEAgAiEAIAQgJV4NASABIQAMAgsgAyEAICYiBCAlXg0AIAEhAAwBCyAQIAFBAnQiAWogECAAQQJ0aigCADYCACABIAlqIAQ4AgAgAEEBdCIBQQJqIQMgAUEBciICIBVJDQELCyAQIABBAnQiAGogCjYCACAAIAlqICU4AgALIApBAWoiCiAORw0ACyANCyIHIA5JDQALCyAFQbgCahBXIAVBkANqIAUoAsgCIgAgBSgCzAIiASABIABrQQJ1ECsgBSAFKQPAAjcDiAMgBSAFKALcAiIANgKkAyAFIAUoAtgCIgM2AqADIAUgBSgC1AIgBSgCkAMiASABIAUoApQDRhs2ApwDAkAgACADbCIAIAUoAqwDIAUoAqgDIgdrQQJ1IgFLBEAgBUGoA2ogACABaxAvIAUoAtgCIQMgBSgCqAMhBwwBCyAAIAFPDQAgBSAHIABBAnRqNgKsAwsgBSAHNgK0AwJAIANFDQAgBSgC3AIiCEUNACAIQQNxIQ0gCEF8cSEJQQAhCiAHIAUoAuwCIg4gAyAIbEECdGpJIA4gByAFKAKkAyIPIANBAWtsIAhqQQJ0aklxIAggD3JBgICAgAJxQR12ciAIQQhJciEQA0AgByAKIA9sQQJ0aiEFIA4gCCAKbEECdGohDEEAIQBBACEBAkAgEEUEQANAIAUgAEECdCIBaiABIAxq/QACAP0LAgAgAEEEaiIAIAlHDQALIAkiASAIRg0BC0EAIQIgASEAIA0EQANAIAUgAEECdCIRaiAMIBFqKgIAOAIAIABBAWohACACQQFqIgIgDUcNAAsLIAEgCGtBfEsNAANAIAUgAEECdCIBaiABIAxqKgIAOAIAIAUgAUEEaiICaiACIAxqKgIAOAIAIAUgAUEIaiICaiACIAxqKgIAOAIAIAUgAUEMaiIBaiABIAxqKgIAOAIAIABBBGoiACAIRw0ACwsgCkEBaiIKIANHDQALCyALLAAfQQBIBEAgCygCHBogCygCFBARCyALQSBqJAAMAQsCQCAFLQCQAkEBRw0AIAZBJGoiACAFKAKAAhBEIAYgAEHTywBBGBBFIgAoAgg2AjggBiAAKQIANwMwIABCADcCACAAQQA2AgggBiAGQTBqQegRQQYQMyIAKAIINgIQIAYgACkCADcDCCAAQgA3AgAgAEEANgIIIAZBCGogBS0AqAIQPCAGLAATQQBIBEAgBigCEBogBigCCBARCyAGLAA7QQBIBEAgBigCOBogBigCMBARCyAGLAAvQQBIBEAgBigCLBogBigCJBARCyAGQQhqIBggBSgCgAIgBSgChAIgBUHYAGoQ2gEgBUH4AGohASAFKAJ4IgAEQCAAIgMgBSgCfCICRwRAA0AgBiACQQxrNgIwIAZBMGoQWCAAIAJBFGsiAkcNAAsgASgCACEDCyAFIAA2AnwgBSgCgAEaIAMQEQsgBSAGKAIINgJ4IAUgBigCDDYCfCAFIAYoAhA2AoABIAZBIBASIgA2AgggBkKagICAgISAgIB/NwIMIABBhQwvAAA7ABggAEH9CykAADcAECAAQe0L/QAAAP0LAAAgAEEAOgAaIAZBCGogBS0AqAIQPCAGLAATQQBIBEAgBigCEBogBigCCBARCyAGQQhqIAEQ3QMgBSgCpAIhDCMAQRBrIhEkACAGKAIMIQ4gBigCCCETIBFBADYCDCARQgA3AgQgEyAMbSEVAkAgDEHWqtWqAUkEQCAMQQxsIgAQEiEJIABBDGsiACAAQQxwa0EMaiIZBEAgCUEAIBn8CwALIA5BAEoEQCAMQQFrIRpBASAMIAxBAU0bIRRBACEAA0AgACAVbCILIBMgAEEBaiICIBVsIAAgGkYbIhdIBEAgCSAAQQxsaiEIA0BBACEBA0AgBigCHCAGKAIMIAtsQQJ0aiABQQJ0aigCACIKQX9HBEACQCABQQFqIgEgDk4NACAKQQFqIR4gASEHA0AgBigCHCAGKAIMIAtsQQJ0aiAHQQJ0aigCACIPQX9GDQFDAAAAACEmQwAAAAAhJ0MAAAAAIQRDAAAAACElAkAgGCgCBCIQIApsIgAgECAebCIfRg0AIBgoAhQiGyAAQQJ0aiEAIBsgDyAQbEECdGohEgJ/IBBBAXFFBEAgACEDIBIMAQsgAEEEaiEDIBIqAgAiJyAnlEMAAAAAkiElIAAqAgAiKCAolEMAAAAAkiEEICggJ5RDAAAAAJIhJyASQQRqCyEAIBBB/////wNxQQFGDQAgGyAfQQJ0aiEQA0AgAyoCBCIoIAAqAgQiKpQgAyoCACIpIAAqAgAiK5QgJ5KSIScgAEEIaiEAICogKpQgKyArlCAlkpIhJSAoICiUICkgKZQgBJKSIQQgA0EIaiIDIBBHDQALCwJAIARDAAAAAFsiACAlQwAAAABbIgNxDQBDAACAPyEmIAANACADDQBDAACAPyAnIAQgJZSRlZMhJgsCQCAmIAUoAuwCIgAgBSgC3AIiAyAKbEECdGoqAgBdRQRAICYgACADIA9sQQJ0aioCAF1FDQELAkAgCCgCBCIAIAgoAggiEk8EQCAAIAgoAgAiA2siAEEMbUEBaiIQQdWq1aoBSw0QIABB1arVqgEgEiADa0EMbSISQQF0IhsgECAQIBtJGyASQarVqtUATxsiEgR/IBJB1arVqgFLDRIgEkEMbBASBUEACyIbaiIQICY4AgggECAPNgIEIBAgCjYCACAQIABBdG1BDGxqIQ8gAARAIA8gAyAA/AoAAAsgCCAbIBJBDGxqNgIIIAggEEEMaiIANgIEIAggDzYCACADRQ0BIAMQEQwBCyAAICY4AgggACAPNgIEIAAgCjYCACAAQQxqIQALIAggADYCBAsgB0EBaiIHIA5HDQALCyABIA5HDQELCyALQQFqIgsgF0cNAAsLIAIiACAURw0ACwsgCSAZaiEHQQEgDCAMQQFMGyETA0AgCSELA0ACQCALKAIAIhIgCygCBCIZRg0AAkADQCASKAIAIghBAE4EQCASKAIEIgpBAEgNAiASKgIIISUCQCAIIAxwIBZHDQAgJSAFKALsAiIOIAUoAtwCIAhsIg9BAnRqKgIAYA0AIAUoAtQCIQIgBSgCxAIiACAIbCIQIAAgCEEBamwiAEcEQCACIABBAnRqIQEgAiAQQQJ0aiEAA0AgACgCACAKRg0CIABBBGoiACABRw0ACwtBASEBQQAhAEECIQMgBSgCvAIiFUEBSwRAAkADQCAAIQIgBSgC7AIiDiAFKALcAiAIbCIPQQJ0aiIQIAFBAnRqKgIAIQQCQCADIBVPBEAgASEAIAQgJV4NASACIQAMAwsgECADQQJ0aioCACImIARfBEAgASEAIAQgJV4NASACIQAMAwsgAyEAICYiBCAlXg0AIAIhAAwCCyAFKALUAiAFKALEAiAIbEECdGoiASACQQJ0IgNqIAEgAEECdGooAgA2AgAgAyAQaiAEOAIAIAUoAoQDIAUoAvQCIAhsaiIBIAJqIAAgAWotAAA6AAAgAEEBdCIBQQJqIQMgAUEBciIBIAUoArwCIhVJDQALIAUoAtwCIAhsIQ8gBSgC7AIhDgsgBSgCxAIgCGwhECAFKALUAiECCyAAQQJ0IgEgAiAQQQJ0amogCjYCACAOIA9BAnRqIAFqICU4AgAgBSgChAMgBSgC9AIgCGxqIABqQTE6AAALAkAgCiAMcCAWRw0AICUgBSgC7AIiDiAFKALcAiAKbCIPQQJ0aioCAGANACAFKALUAiECIAUoAsQCIgAgCmwiECAAIApBAWpsIgBHBEAgAiAAQQJ0aiEBIAIgEEECdGohAANAIAAoAgAgCEYNAiAAQQRqIgAgAUcNAAsLQQEhAUEAIQBBAiEDIAUoArwCIhVBAUsEQAJAA0AgACECIAUoAuwCIg4gBSgC3AIgCmwiD0ECdGoiECABQQJ0aioCACEEAkAgAyAVTwRAIAEhACAEICVeDQEgAiEADAMLIBAgA0ECdGoqAgAiJiAEXwRAIAEhACAEICVeDQEgAiEADAMLIAMhACAmIgQgJV4NACACIQAMAgsgBSgC1AIgBSgCxAIgCmxBAnRqIgEgAkECdCIDaiABIABBAnRqKAIANgIAIAMgEGogBDgCACAFKAKEAyAFKAL0AiAKbGoiASACaiAAIAFqLQAAOgAAIABBAXQiAUECaiEDIAFBAXIiASAFKAK8AiIVSQ0ACyAFKALcAiAKbCEPIAUoAuwCIQ4LIAUoAsQCIApsIRAgBSgC1AIhAgsgAEECdCIBIAIgEEECdGpqIAg2AgAgDiAPQQJ0aiABaiAlOAIAIAUoAoQDIAUoAvQCIApsaiAAakExOgAACyAZIBJBDGoiEkcNAQwDCwsMCwsMCwsgC0EMaiILIAdHDQALIBZBAWoiFiATRw0ACwNAIAdBDGsiACgCACIBBEAgB0EIayABNgIAIAdBBGsoAgAaIAEQEQsgACIHIAlHDQALIAkQESARQRBqJAAMAQsMBAsgBigCECIARQ0AIAYgADYCFCAGKAIYGiAAEBELIAUoAvwBIREgBUHYAGohHkEAIQcgBUG4AmoiDCgCACIKBEADQEEAIQECQCAMKAIMIgAgByIDbCICIAAgB0EBaiIHbCIIRg0AIAwoAhwiCyACQQJ0aiECAkAgAEEBa0H/////A3EiAEEDSQRAIAIhAAwBCyACIABBAWoiDkH8////B3EiCUECdGohAP0MAAAAAAAAAAAAAAAAAAAAACEvA0AgLyACIAFBAnRq/QACAP0M//////////////////////04/bEBIS8gAUEEaiIBIAlHDQALIC8gLyAv/Q0ICQoLDA0ODwABAgMAAQID/a4BIi8gLyAv/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQEgCSAORg0BCyALIAhBAnRqIQIDQCABIAAoAgBBf0dqIQEgAEEEaiIAIAJHDQALC0EAIRAgESABayITQQBKBEADQCAeEEwgDDUCAIKnIQlDAAAAACElQwAAAAAhJ0MAAAAAIQRDAAAAACEmAkAgGCgCBCICIANsIgAgAiAHbCIKRg0AIBgoAhQiCyAAQQJ0aiEAIAsgAiAJbEECdGohCAJ/IAJBAXFFBEAgACEBIAgMAQsgAEEEaiEBIAgqAgAiJyAnlEMAAAAAkiEmIAAqAgAiKCAolEMAAAAAkiEEICggJ5RDAAAAAJIhJyAIQQRqCyEAIAJB/////wNxQQFGDQAgCyAKQQJ0aiECA0AgASoCBCIoIAAqAgQiKpQgASoCACIpIAAqAgAiK5QgJ5KSIScgAEEIaiEAICogKpQgKyArlCAmkpIhJiAoICiUICkgKZQgBJKSIQQgAUEIaiIBIAJHDQALCwJAIARDAAAAAFsiACAmQwAAAABbIgFxDQBDAACAPyElIAANACABDQBDAACAPyAnIAQgJpSRlZMhJQsCQCAlIAwoAjQiDiAMKAIkIANsIg9BAnRqKgIAYA0AIAwoAhwhCiAMKAIMIgAgA2wiASAAIAdsIgBHBEAgCiAAQQJ0aiECIAogAUECdGohAANAIAAoAgAgCUYNAiAAQQRqIgAgAkcNAAsLQQEhAkEAIQBBAiEIIAwoAgQiEkEBSwRAAkADQCAAIQEgDCgCNCIOIAwoAiQgA2wiD0ECdGoiCyACQQJ0aioCACEEAkAgCCASTwRAIAIhACAEICVeDQEgASEADAMLIAsgCEECdGoqAgAiJiAEXwRAIAIhACAEICVeDQEgASEADAMLIAghACAmIgQgJV4NACABIQAMAgsgDCgCHCAMKAIMIANsQQJ0aiICIAFBAnQiCGogAiAAQQJ0aigCADYCACAIIAtqIAQ4AgAgASAMKAJMIAwoAjwgA2xqIgJqIAAgAmotAAA6AAAgAEEBdCIBQQJqIQggAUEBciICIAwoAgQiEkkNAAsgDCgCJCADbCEPIAwoAjQhDgsgDCgCHCEKIAwoAgwgA2whAQsgAEECdCICIAogAUECdGpqIAk2AgAgDiAPQQJ0aiACaiAlOAIAIAwoAkwgDCgCPCADbGogAGpBMToAAAsgEEEBaiIQIBNHDQALIAwoAgAhCgsgByAKSQ0ACwsgBSgC/AEhASAFKAKYAiEfIAUoApwCIRkgBSoCoAIhLCAFKAKkAiERIAUtAKgCIRJBACEKIwBB4AFrIgkkAAJAIAwoAgAgGCgCAEYEQCAJQdABaiIAIBkQRCAJIABBt8oAQQ8QRSIAKAIINgIYIAkgACkCADcDECAAQgA3AgAgAEEANgIIIAkgCUEQakG6D0ELEDMiACgCCDYCaCAJIAApAgA3A2AgAEIANwIAIABBADYCCCAJQeAAaiASEDwgCSwAa0EASARAIAkoAmgaIAkoAmAQEQsgCSwAG0EASARAIAkoAhgaIAkoAhAQEQsgCSwA2wFBAEgEQCAJKALYARogCSgC0AEQEQsCQCAZQQBMDQAgAbIhLQNAIAlBwAFqIgAgCkEBaiIKEEQgCSAAQZnMAEEBEEUiACgCCDYC2AEgCSAAKQIANwPQASAAQgA3AgAgAEEANgIIIAkgCUHQAWpB9ssAQQUQMyIAKAIINgIYIAkgACkCADcDECAAQgA3AgAgAEEANgIIIAlBsAFqIgAgGRBEIAkgCUEQaiAJKAKwASAAIAksALsBIgBBAEgiARsgCSgCtAEgACABGxAzIgAoAgg2AmggCSAAKQIANwNgIABCADcCACAAQQA2AgggCUHgAGogEhA8IAksAGtBAEgEQCAJKAJoGiAJKAJgEBELIAksALsBQQBIBEAgCSgCuAEaIAkoArABEBELIAksABtBAEgEQCAJKAIYGiAJKAIQEBELIAksANsBQQBIBEAgCSgC2AEaIAkoAtABEBELIAksAMsBQQBIBEAgCSgCyAEaIAkoAsABEBELIAwgCUHgAGogGCgCACAfENcBIg8gCUEQaiAYKAIAIB8Q1wEiFSAeIBEQ4wMgCUHQAWohEEEAIQgCQCAYKAIAIhsgDygCAEYEQCAVKAIAIBtGBEAgEEEANgIIIBBCADcCAAJAIBEEQCARQdaq1aoBTw0BIBAgEUEMbCIBEBIiADYCACAQIAAgAWo2AgggAUEMayIBIAFBDHBrQQxqIgEEQCAAQQAgAfwLAAsgECAAIAFqNgIEIBtBBG1BAWohHQNAAkAgCCIDIB1sIhMgGyADQQFqIgggHWwiACAAIBtKGyIgTw0AQQEhACAPKAIEIgtFDQADQEEAIQFBACEHAkAgAEUNAAJAA0ACQCAHQQJ0IQAgB0EBaiEHAkAgACAPKAIcIA8oAgwgE2xBAnRqaigCACIOQX9GDQACQCAHIAtPDQAgDkEBaiEiIANBDGwhHCAHIQIDQAJAAkAgDygCHCAPKAIMIBNsQQJ0aiACQQJ0aigCACIWQX9GDQBDAAAAACEEQwAAAAAhJ0MAAAAAISZDAAAAACElAkAgGCgCBCIaIA5sIgAgGiAibCIhRg0AIBgoAhQiFyAAQQJ0aiEUIBcgFiAabEECdGohAQJ/IBpBAXFFBEAgASEAIBQMAQsgAUEEaiEAIAEqAgAiJyAnlEMAAAAAkiElIBQqAgAiKCAolEMAAAAAkiEmICggJ5RDAAAAAJIhJyAUQQRqCyEBIBpB/////wNxQQFGDQAgFyAhQQJ0aiEaA0AgASoCBCIoIAAqAgQiKpQgASoCACIpIAAqAgAiK5QgJ5KSIScgAEEIaiEAICogKpQgKyArlCAlkpIhJSAoICiUICkgKZQgJpKSISYgAUEIaiIBIBpHDQALCwJAICZDAAAAAFsiACAlQwAAAABbIgFxDQBDAACAPyEEIAANACABDQBDAACAPyAnICYgJZSRlZMhBAsgBCAMKAI0IgAgDCgCJCIBIA5sQQJ0aioCAF1FBEAgBCAAIAEgFmxBAnRqKgIAXUUNAQsCQCAQKAIAIBxqIgEoAgQiACABKAIIIhdJBEAgACAEOAIIIAAgFjYCBCAAIA42AgAgAEEMaiEADAELIAAgASgCACIaayIAQQxtQQFqIhRB1qrVqgFPDQIgAEHVqtWqASAXIBprQQxtIhdBAXQiISAUIBQgIUkbIBdBqtWq1QBPGyIXBH8gF0HWqtWqAU8NByAXQQxsEBIFQQALIiFqIhQgBDgCCCAUIBY2AgQgFCAONgIAIBQgAEF0bUEMbGohFiAABEAgFiAaIAD8CgAACyABICEgF0EMbGo2AgggASAUQQxqIgA2AgQgASAWNgIAIBpFDQAgGhARIA8oAgQhCwsgASAANgIECyACQQFqIgIgC0kNAQwCCwsMFAsgFSgCBCIWRQ0AIA5BAWohIkEAIQIDQAJAIBUoAhwgFSgCDCATbEECdGogAkECdGooAgAiC0F/Rg0AQwAAAAAhBEMAAAAAISdDAAAAACEmQwAAAAAhJQJAIBgoAgQiGiAObCIAIBogImwiHEYNACAYKAIUIhcgAEECdGohASAXIAsgGmxBAnRqIRQCfyAaQQFxRQRAIAEhACAUDAELIAFBBGohACAUKgIAIicgJ5RDAAAAAJIhJSABKgIAIiggKJRDAAAAAJIhJiAoICeUQwAAAACSIScgFEEEagshASAaQf////8DcUEBRg0AIBcgHEECdGohGgNAIAAqAgQiKCABKgIEIiqUIAAqAgAiKSABKgIAIiuUICeSkiEnIAFBCGohASAqICqUICsgK5QgJZKSISUgKCAolCApICmUICaSkiEmIABBCGoiACAaRw0ACwsCQCAmQwAAAABbIgAgJUMAAAAAWyIBcQ0AQwAAgD8hBCAADQAgAQ0AQwAAgD8gJyAmICWUkZWTIQQLIAQgDCgCNCIAIAwoAiQiASAObEECdGoqAgBdRQRAIAQgACABIAtsQQJ0aioCAF1FDQELAkAgECgCACADQQxsaiIBKAIEIgAgASgCCCIXSQRAIAAgBDgCCCAAIAs2AgQgACAONgIAIABBDGohAAwBCyAAIAEoAgAiGmsiAEEMbUEBaiIUQdaq1aoBTw0GIABB1arVqgEgFyAaa0EMbSIXQQF0IhwgFCAUIBxJGyAXQarVqtUATxsiFwR/IBdB1qrVqgFPDQUgF0EMbBASBUEACyIcaiIUIAQ4AgggFCALNgIEIBQgDjYCACAUIABBdG1BDGxqIQsgAARAIAsgGiAA/AoAAAsgASAcIBdBDGxqNgIIIAEgFEEMaiIANgIEIAEgCzYCACAaRQ0AIBoQESAVKAIEIRYLIAEgADYCBAsgAkEBaiICIBZJDQALIA8oAgQhCwsgByALIgFJDQEMAwsLDBELDA8LIAEhACATQQFqIhMgIEkNAAsLIAggEUcNAAsLDAMLDAkLDAwLDAwLIAlBBGoiACAMIBAgERDiAyIBEEQgCSAAQZjMAEECEEUiACgCCDYCuAEgCSAAKQIANwOwASAAQgA3AgAgAEEANgIIIAkgCUGwAWpB1ihBEBAzIgAoAgg2AsgBIAkgACkCADcDwAEgAEIANwIAIABBADYCCCAJQcABaiASEDwgCSwAywFBAEgEQCAJKALIARogCSgCwAEQEQsgCSwAuwFBAEgEQCAJKAK4ARogCSgCsAEQEQsgCSwAD0EASARAIAkoAgwaIAkoAgQQEQsgAbIgLCAYKAIAs5QgLZRdBEAgCUEEaiIAIAoQRCAJIABBx8oAQSgQRSIAKAIINgK4ASAJIAApAgA3A7ABIABCADcCACAAQQA2AgggCSAJQbABakG6D0ELEDMiACgCCDYCyAEgCSAAKQIANwPAASAAQgA3AgAgAEEANgIIIAlBwAFqIBIQPCAJLADLAUEASARAIAkoAsgBGiAJKALAARARCyAJLAC7AUEASARAIAkoArgBGiAJKAKwARARCyAJLAAPQQBIBEAgCSgCDBogCSgCBBARCyAJKALQASICBEAgAiIBIAkoAtQBIgBHBEADQCAAQQxrIgEoAgAiAwRAIABBCGsgAzYCACAAQQRrKAIAGiADEBELIAEiACACRw0ACyAJKALQASEBCyAJIAI2AtQBIAkoAtgBGiABEBELIAkoAlAiAARAIAkgADYCVCAJKAJYGiAAEBELIAkoAjgiAARAIAkgADYCPCAJKAJAGiAAEBELIAkoAiAiAARAIAkgADYCJCAJKAIoGiAAEBELIAkoAqABIgAEQCAJIAA2AqQBIAkoAqgBGiAAEBELIAkoAogBIgAEQCAJIAA2AowBIAkoApABGiAAEBELIAkoAnAiAEUNAiAJIAA2AnQgCSgCeBogABARDAILIAkoAtABIgIEQCACIgEgCSgC1AEiAEcEQANAIABBDGsiASgCACIDBEAgAEEIayADNgIAIABBBGsoAgAaIAMQEQsgASIAIAJHDQALIAkoAtABIQELIAkgAjYC1AEgCSgC2AEaIAEQEQsgCSgCUCIABEAgCSAANgJUIAkoAlgaIAAQEQsgCSgCOCIABEAgCSAANgI8IAkoAkAaIAAQEQsgCSgCICIABEAgCSAANgIkIAkoAigaIAAQEQsgCSgCoAEiAARAIAkgADYCpAEgCSgCqAEaIAAQEQsgCSgCiAEiAARAIAkgADYCjAEgCSgCkAEaIAAQEQsgCSgCcCIABEAgCSAANgJ0IAkoAngaIAAQEQsgCiAZRw0ACwsgCUEYEBIiADYCYCAJQpCAgICAg4CAgH83AmQgAEHWMP0AAAD9CwAAIABBADoAECAJQeAAaiASEDwgCSwAa0EASARAIAkoAmgaIAkoAmAQEQsgCUHgAWokAAwBCwwJCyAFKAK4AgRAQQAhAgNAIAwgAiACEOQDIAJBAWoiAiAMKAIASQ0ACwsgDBBXIAUgBSgC3AIiADYCpAMgBSAFKALYAiIDNgKgAwJAIAAgA2wiACAFKAKsAyAFKAKoAyIJa0ECdSIBSwRAIAVBqANqIAAgAWsQLyAFKALYAiEDIAUoAqgDIQkMAQsgACABTw0AIAUgCSAAQQJ0ajYCrAMLIAUgCTYCtAMCQCADRQ0AIAUoAtwCIgdFDQAgB0EDcSEMIAdBfHEhASAJIAUoAuwCIg4gAyAHbEECdGpJIA4gCSAFKAKkAyIPIANBAWtsIAdqQQJ0aklxIAcgD3JBgICAgAJxQR12ciAHQQhJciEQA0AgCSANIA9sQQJ0aiEIIA4gByANbEECdGohC0EAIQJBACEAAkAgEEUEQANAIAggAkECdCIAaiAAIAtq/QACAP0LAgAgAkEEaiICIAFHDQALIAEiACAHRg0BC0EAIQogACECIAwEQANAIAggAkECdCIRaiALIBFqKgIAOAIAIAJBAWohAiAKQQFqIgogDEcNAAsLIAAgB2tBfEsNAANAIAggAkECdCIAaiAAIAtqKgIAOAIAIAggAEEEaiIKaiAKIAtqKgIAOAIAIAggAEEIaiIKaiAKIAtqKgIAOAIAIAggAEEMaiIAaiAAIAtqKgIAOAIAIAJBBGoiAiAHRw0ACwsgDUEBaiINIANHDQALCyAFQZADaiAFKALIAiIAIAUoAswCIgEgASAAa0ECdRArIAUgBSkDwAI3A4gDIAUgBSgC1AIgBSgCkAMiACAAIAUoApQDRhs2ApwDCyAGQUBrJAALICRBEGokAA8LEBMACxAfAAtBoy9BmRVBnAFBmhEQAAALQZkvQZkVQZ0BQZoREAAAC0GLOEGZFUGjAkG/ERAAAAtB2jdBmRVBogJBvxEQAAALQfk2QZkVQboDQbUMEAAAC48EAQV/IAMoAgQiCiAAIAAgCkobIQgCQCAFRQ0AAkAgBSgCBCAFKAIAIgdrQQJ1IgAgCEkEQCAFIAggAGsQLwwBCyAAIAhNDQAgBSAHIAhBAnRqNgIEC0EAIQcCQCAIQQBMBEAgBSgCBCAFKAIAIglrQQJ1IQAMAQsgAygCFCADKAIEIAJsQQJ0aiEJQQAhAANAIAEgCSAAQQJ0aigCACILRwRAIAUoAgAgB0ECdGogCzYCACAHQQFqIQcLIAcgCEggCiAAQQFqIgBKcQ0ACyAHIAUoAgQgBSgCACIJa0ECdSIATQ0AIAUgByAAaxAvDAELIAAgB00NACAFIAkgB0ECdGo2AgQLAkAgBkUNAAJAIAYoAgQgBigCACIFa0ECdSIAIAhJBEAgBiAIIABrEC8MAQsgACAITQ0AIAYgBSAIQQJ0ajYCBAtBACEHAkAgCEEATARAIAYoAgQgBigCACIBa0ECdSEADAELIAQoAhQgBCgCBCACbEECdGohBCADKAIUIAMoAgQgAmxBAnRqIQJBACEAA0AgASACIABBAnQiA2ooAgBHBEAgBigCACAHQQJ0aiADIARqKgIAOAIAIAdBAWohBwsgByAISCAKIABBAWoiAEpxDQALIAcgBigCBCAGKAIAIgFrQQJ1IgBNDQAgBiAHIABrEC8PCyAAIAdNDQAgBiABIAdBAnRqNgIECwsVACAAQYziAjYCACAAQQRqELUCIAALKQEBfwJAIAAoAgBBDGsiACAAKAIIQQFrIgE2AgggAUEATg0AIAAQEQsLFQAgAEH44QI2AgAgAEEEahC1AiAAC7kCAQN/IwBBEGsiAyQAAkAgACABRg0AIAEoAhAhAiAAIAAoAhAiBEYEQCABIAJGBEAgBCADIAQoAgAoAgwRAgAgACgCECICIAIoAgAoAhARAQAgAEEANgIQIAEoAhAiAiAAIAIoAgAoAgwRAgAgASgCECICIAIoAgAoAhARAQAgAUEANgIQIAAgADYCECADIAEgAygCACgCDBECACADIAMoAgAoAhARAQAgASABNgIQDAILIAQgASAEKAIAKAIMEQIAIAAoAhAiAiACKAIAKAIQEQEAIAAgASgCEDYCECABIAE2AhAMAQsgASACRgRAIAIgACACKAIAKAIMEQIAIAEoAhAiAiACKAIAKAIQEQEAIAEgACgCEDYCECAAIAA2AhAMAQsgACACNgIQIAEgBDYCEAsgA0EQaiQAC4IBAQN/IAAoAgQiBEEBcSEFAn8gAS0AN0EBRgRAIARBCHUiBiAFRQ0BGiAGIAIoAgBqKAIADAELIARBCHUgBUUNABogASAAKAIAKAIENgI4IAAoAgQhBEEAIQJBAAshBSAAKAIAIgAgASACIAVqIANBAiAEQQJxGyAAKAIAKAIcEQYACy4BAX8jAEEQayIBJAAgAEIANwIAIAFBADYCDCAAQQhqQQA2AgAgAUEQaiQAIAALCwAgACgCABoQIAALjwMBAn8gAAJ/IAIgAWsiBEEJTARAQT0gBEEgIANBAXJna0HRCWxBDHUiBSADIAVBAnRBoNgCaigCAE9qSA0BGgsCfyADQb+EPU0EQCADQY/OAE0EQCADQeMATQRAIANBCU0EQCABIANBMGo6AAAgAUEBagwECyABIAMQdQwDCyADQecHTQRAIAEgA0HkAG4iAkEwajoAACABQQFqIAMgAkHkAGxrEHUMAwsgASADEO0BDAILIANBn40GTQRAIAEgA0GQzgBuIgJBMGo6AAAgAUEBaiADIAJBkM4AbGsQ7QEMAgsgASADEOwBDAELIANB/8HXL00EQCADQf+s4gRNBEAgASADQcCEPW4iAkEwajoAACABQQFqIAMgAkHAhD1saxDsAQwCCyABIAMQ6wEMAQsgA0H/k+vcA00EQCABIANBgMLXL24iAkEwajoAACABQQFqIAMgAkGAwtcvbGsQ6wEMAQsgASADQYDC1y9uIgEQdSADIAFBgMLXL2xrEOsBCyECQQALNgIEIAAgAjYCAAvXAwEFfyMAQRBrIggkACABQX9zQff///8DaiACTwRAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshCiAIQQRqIgkgAUHz////AUkEfyAIIAFBAXQ2AgwgCCABIAJqNgIEIwBBEGsiAiQAIAkoAgAgCEEMaiILKAIASSEMIAJBEGokACALIAkgDBsoAgAiAkECTwR/IAJBAmpBfnEiAiACQQFrIgIgAkECRhsFQQELQQFqBUH3////AwsQgQEgCCgCBCECIAgoAggaIAQEQAJAIARFDQAgBEECdCIJRQ0AIAIgCiAJ/AoAAAsLIAYEQCAEQQJ0IAJqIQkCQCAGRQ0AIAZBAnQiC0UNACAJIAcgC/wKAAALCyADIAQgBWoiCWshByADIAlHBEAgBEECdCIDIAJqIAZBAnRqIQkgAyAKaiAFQQJ0aiEDAkAgB0UNACAHQQJ0IgVFDQAgCSADIAX8CgAACwsgAUEBRwRAIApBBBBkCyAAIAI2AgAgACAAKAIIQYCAgIB4cSAIKAIIQf////8HcXI2AgggACAAKAIIQYCAgIB4cjYCCCAAIAQgBmogB2oiADYCBCAIQQA2AgwgAiAAQQJ0aiAIKAIMNgIAIAhBEGokAA8LEDcAC5ABAQN/IwBBEGsiBCQAIAAtAAsiBUH/AHEhAwJAIAJBCk0EQCAAIAVBgAFxIAJB/wBxcjoACyAAIAAtAAtB/wBxOgALAkAgAkUiAw0AIAMNACAAIAEgAvwKAAALIARBADoADyAAIAJqIAQtAA86AAAMAQsgAEEKIAJBCmsgA0EAIAMgAiABEJgBCyAEQRBqJAALigEBA38jAEEQayIEJAAgACgCBCEDAkAgACgCCEH/////B3EiBSACSwRAIAAoAgAhAyAAIAI2AgQCQCACRSIADQAgAA0AIAMgASAC/AoAAAsgBEEAOgAPIAIgA2ogBC0ADzoAAAwBCyAAIAVBAWsgAiAFa0EBaiADQQAgAyACIAEQmAELIARBEGokAAs9AQF/IwBBEGsiAyQAIAMgAjoADwNAIAEEQCAAIAMtAA86AAAgAUEBayEBIABBAWohAAwBCwsgA0EQaiQACyAAIABBiOECNgIAIABB+OECNgIAIABBBGogARDBAiAAC0YBAn8gARBLIgNBDWoQEiICQQA2AgggAiADNgIEIAIgAzYCACACQQxqIQIgA0EBaiIDBEAgAiABIAP8CgAACyAAIAI2AgALCQAgABAmNgIACyMBAn8gACEBA0AgASICQQRqIQEgAigCAA0ACyACIABrQQJ1Cy4BAX8jAEEQayICJAACQCAAIAFGBEAgAEEAOgB4DAELIAFBBBBkCyACQRBqJAALJgEBfyAAKAIEIQIDQCABIAJHBEAgAkEEayECDAELCyAAIAE2AgQLSQEBfyMAQRBrIgMkAAJAAkAgAkEeSw0AIAEtAHhBAXENACABQQE6AHgMAQsgAhDLAiEBCyADQRBqJAAgACACNgIEIAAgATYCAAtbAQR/IwBBEGsiACQAIABB/////wM2AgwgAEH/////BzYCCCMAQRBrIgEkACAAQQhqIgIoAgAgAEEMaiIDKAIASSEEIAFBEGokACACIAMgBBsoAgAgAEEQaiQAC1YBAn8jAEEQayIEJAAgBCACNgIMAkAgAiABayICRSIFDQAgBQ0AIAMgASAC/AoAAAsgBCACIANqNgIIIAAgBCgCDDYCACAAIAQoAgg2AgQgBEEQaiQACzoBAX8jAEEQayIDJAAgAyABEGs2AgwgAyACEGs2AgggACADKAIMNgIAIAAgAygCCDYCBCADQRBqJAALSQEBfyMAQRBrIgMkAAJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAsLGiAAIAIQbCADQQA6AA8gASACaiADLQAPOgAAIANBEGokAAsbACAAQf////8DSwRAECAACyAAQQJ0QQQQswMLCQAgABDxARARCxQAQQgQF0GzJhAtQaDjAkEEEAEACxUAIABBwKwCNgIAIABBEGoQFBogAAsVACAAQZisAjYCACAAQQxqEBQaIAALjwMBBH8CQCADIAIiAGtBA0gNAAsDQAJAIAAgA08NACAEIAdNDQAgACwAACIBQf8BcSEFAn9BASABQQBODQAaIAFBQkkNASABQV9NBEAgAyAAa0ECSA0CIAAtAAFBwAFxQYABRw0CQQIMAQsgAUFvTQRAIAMgAGtBA0gNAiAALQACIAAsAAEhAQJAAkAgBUHtAUcEQCAFQeABRw0BIAFBYHFBoH9GDQIMBQsgAUGgf04NBAwBCyABQb9/Sg0DC0HAAXFBgAFHDQJBAwwBCyABQXRLDQEgAyAAa0EESA0BIAAtAAMhBiAALQACIQggACwAASEBAkACQAJAAkAgBUHwAWsOBQACAgIBAgsgAUHwAGpB/wFxQTBPDQQMAgsgAUGQf04NAwwBCyABQb9/Sg0CCyAIQcABcUGAAUcNASAGQcABcUGAAUcNASAGQT9xIAhBBnRBwB9xIAVBEnRBgIDwAHEgAUE/cUEMdHJyckH//8MASw0BQQQLIQEgB0EBaiEHIAAgAWohAAwBCwsgACACawvVBAEEfyMAQRBrIgAkACAAIAI2AgwgACAFNgIIAn8gACACNgIMIAAgBTYCCAJAIAMgAmtBA0gNAAsCQAJAA0ACQCACIANPDQAgBSAGTw0AIAIsAAAiCEH/AXEhAQJ/IAhBAE4EQCABQf//wwBLDQVBAQwBCyAIQUJJDQQgCEFfTQRAQQEgAyACa0ECSA0GGkECIQggAi0AASIJQcABcUGAAUcNBCAJQT9xIAFBBnRBwA9xciEBQQIMAQsgCEFvTQRAQQEhCCADIAJrIgpBAkgNBCACLAABIQkCQAJAIAFB7QFHBEAgAUHgAUcNASAJQWBxQaB/Rg0CDAgLIAlBoH9IDQEMBwsgCUG/f0oNBgsgCkECRg0EIAItAAIiCEHAAXFBgAFHDQUgCEE/cSABQQx0QYDgA3EgCUE/cUEGdHJyIQFBAwwBCyAIQXRLDQRBASEIIAMgAmsiCkECSA0DIAIsAAEhCQJAAkACQAJAIAFB8AFrDgUAAgICAQILIAlB8ABqQf8BcUEwTw0HDAILIAlBkH9ODQYMAQsgCUG/f0oNBQsgCkECRg0DIAItAAIiC0HAAXFBgAFHDQQgCkEDRg0DIAItAAMiCkHAAXFBgAFHDQRBAiEIIApBP3EgC0EGdEHAH3EgAUESdEGAgPAAcSAJQT9xQQx0cnJyIgFB///DAEsNA0EECyEIIAUgATYCACAAIAIgCGoiAjYCDCAAIAVBBGoiBTYCCAwBCwsgAiADSSEICyAIDAELQQILIAQgACgCDDYCACAHIAAoAgg2AgAgAEEQaiQAC4QEACMAQRBrIgAkACAAIAI2AgwgACAFNgIIAn8gACACNgIMIAAgBTYCCAJAA0ACQCACIANPBEBBACEFDAELQQIhBSACKAIAIgFB///DAEsNACABQYBwcUGAsANGDQACQCABQf8ATQRAQQEhBSAGIAAoAggiAmtBAEwNAiAAIAJBAWo2AgggAiABOgAADAELIAFB/w9NBEAgBiAAKAIIIgJrQQJIDQQgACACQQFqNgIIIAIgAUEGdkHAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAwBCyAGIAAoAggiAmshBSABQf//A00EQCAFQQNIDQQgACACQQFqNgIIIAIgAUEMdkHgAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQQZ2QT9xQYABcjoAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAADAELIAVBBEgNAyAAIAJBAWo2AgggAiABQRJ2QfABcjoAACAAIAAoAggiAkEBajYCCCACIAFBDHZBP3FBgAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUEGdkE/cUGAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAsgACAAKAIMQQRqIgI2AgwMAQsLIAUMAQtBAQsgBCAAKAIMNgIAIAcgACgCCDYCACAAQRBqJAALogMBBH8CQCADIAIiAGtBA0gNAAsDQAJAIAAgA08NACAEIAZNDQACfyAAQQFqIAAtAAAiAcBBAE4NABogAUHCAUkNASABQd8BTQRAIAMgAGtBAkgNAiAALQABQcABcUGAAUcNAiAAQQJqDAELIAFB7wFNBEAgAyAAa0EDSA0CIAAtAAIgACwAASEFAkACQCABQe0BRwRAIAFB4AFHDQEgBUFgcUGgf0YNAgwFCyAFQaB/Tg0EDAELIAVBv39KDQMLQcABcUGAAUcNAiAAQQNqDAELIAFB9AFLDQEgAyAAa0EESA0BIAQgBmtBAkkNASAALQADIQcgAC0AAiEIIAAsAAEhBQJAAkACQAJAIAFB8AFrDgUAAgICAQILIAVB8ABqQf8BcUEwTw0EDAILIAVBkH9ODQMMAQsgBUG/f0oNAgsgCEHAAXFBgAFHDQEgB0HAAXFBgAFHDQEgB0E/cSAIQQZ0QcAfcSABQRJ0QYCA8ABxIAVBP3FBDHRycnJB///DAEsNASAGQQFqIQYgAEEEagshACAGQQFqIQYMAQsLIAAgAmsLngUBBX8jAEEQayIAJAAgACACNgIMIAAgBTYCCAJ/IAAgAjYCDCAAIAU2AggCQCADIAJrQQNIDQALAkACQANAAkAgAiADTw0AIAUgBk8NAEECIQkgAAJ/IAItAAAiAcBBAE4EQCAFIAE7AQBBAQwBCyABQcIBSQ0EIAFB3wFNBEBBASADIAJrQQJIDQYaIAItAAEiCEHAAXFBgAFHDQQgBSAIQT9xIAFBBnRBwA9xcjsBAEECDAELIAFB7wFNBEBBASEJIAMgAmsiCkECSA0EIAIsAAEhCAJAAkAgAUHtAUcEQCABQeABRw0BIAhBYHFBoH9HDQgMAgsgCEGgf04NBwwBCyAIQb9/Sg0GCyAKQQJGDQQgAi0AAiIJQcABcUGAAUcNBSAFIAlBP3EgCEE/cUEGdCABQQx0cnI7AQBBAwwBCyABQfQBSw0EQQEhCSADIAJrIgpBAkgNAyACLQABIgvAIQgCQAJAAkACQCABQfABaw4FAAICAgECCyAIQfAAakH/AXFBME8NBwwCCyAIQZB/Tg0GDAELIAhBv39KDQULIApBAkYNAyACLQACIghBwAFxQYABRw0EIApBA0YNAyACLQADIgpBwAFxQYABRw0EIAYgBWtBA0gNA0ECIQkgCkE/cSIKIAhBBnQiDEHAH3EgC0EMdEGA4A9xIAFBB3EiAUESdHJyckH//8MASw0DIAUgCiAMQcAHcXJBgLgDcjsBAiAFIAhBBHZBA3EgC0ECdCIJQcABcSABQQh0ciAJQTxxcnJBwP8AakGAsANyOwEAIAVBAmohBUEECyACaiICNgIMIAAgBUECaiIFNgIIDAELCyACIANJIQkLIAkMAQtBAgsgBCAAKAIMNgIAIAcgACgCCDYCACAAQRBqJAAL2QUBAn8jAEEQayIAJAAgACACNgIMIAAgBTYCCAJ/IAAgAjYCDCAAIAU2AggCQAJAA0AgAiADTwRAQQAhBQwCC0ECIQUCQAJAIAIvAQAiAUH/AE0EQEEBIQUgBiAAKAIIIgJrQQBMDQQgACACQQFqNgIIIAIgAToAAAwBCyABQf8PTQRAIAYgACgCCCICa0ECSA0FIAAgAkEBajYCCCACIAFBBnZBwAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUE/cUGAAXI6AAAMAQsgAUH/rwNNBEAgBiAAKAIIIgJrQQNIDQUgACACQQFqNgIIIAIgAUEMdkHgAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQQZ2QT9xQYABcjoAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAADAELIAFB/7cDTQRAQQEhBSADIAJrQQNIDQQgAi8BAiIIQYD4A3FBgLgDRw0CIAYgACgCCCIJa0EESA0EIAhB/wdxIAFBCnRBgPgDcSABQcAHcSIFQQp0cnJB//8/Sw0CIAAgAkECajYCDCAAIAlBAWo2AgggCSAFQQZ2QQFqIgJBAnZB8AFyOgAAIAAgACgCCCIFQQFqNgIIIAUgAkEEdEEwcSABQQJ2QQ9xckGAAXI6AAAgACAAKAIIIgJBAWo2AgggAiAIQQZ2QQ9xIAFBBHRBMHFyQYABcjoAACAAIAAoAggiAUEBajYCCCABIAhBP3FBgAFyOgAADAELIAFBgMADSQ0DIAYgACgCCCICa0EDSA0EIAAgAkEBajYCCCACIAFBDHZB4AFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUEGdkG/AXE6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAsgACAAKAIMQQJqIgI2AgwMAQsLQQIMAgsgBQwBC0EBCyAEIAAoAgw2AgAgByAAKAIINgIAIABBEGokAAtVAQJ/IwBBEGsiASQAIAEgADYCDCABQQhqIAFBDGoQVEEEQQFBoIMDKAIAKAIAGyECKAIAIgAEQEGggwNB+PECIAAgAEF/Rhs2AgALIAFBEGokACACC14BAX8jAEEQayIFJAAgBSAENgIMIAVBCGogBUEMahBUIAAgASACIAMQngEhASgCACIABEBBoIMDKAIAGiAABEBBoIMDQfjxAiAAIABBf0YbNgIACwsgBUEQaiQAIAELEgAgBCACNgIAIAcgBTYCAEEDCyoBAX8gAEGsowI2AgACQCAAKAIIIgFFDQAgAC0ADEEBRw0AIAEQEQsgAAsnAQF/IAAoAgAoAgAoAgBB2I8DQdiPAygCAEEBaiIANgIAIAA2AgQLyAMBBX8CQAJAAkAgAQRAIAFBgICAgARPDQEgAUECdCICEBIhBSAAKAIAIQMgACAFNgIAIAMEQCAAKAIEGiADEBEgACgCACEFCyAAIAE2AgQgAgRAIAVBACAC/AsACyAAKAIIIgJFDQMgAEEIaiEAIAIoAgQhBCABIAFBAWsiA3FFDQIgASAETQRAIAQgAXAhBAsgBSAEQQJ0aiAANgIAA0AgAigCACIDRQ0EIAEgAygCBCIATQRAIAAgAXAhAAsgACAERgRAIAMhAgwBCyAFIABBAnRqIgYoAgAEQCACIAMoAgA2AgAgAyAGKAIAKAIANgIAIAYoAgAgAzYCAAUgBiACNgIAIAMhAiAAIQQLDAALAAsgACgCACEBIABBADYCACABBEAgACgCBBogARARCyAAQQA2AgQMAgsQHwALIAUgAyAEcSIEQQJ0aiAANgIAIAIoAgAiAEUNACABQQFrIQYDQAJAIAQgACgCBCAGcSIBRgRAIAAhAgwBCyAFIAFBAnRqIgMoAgAEQCACIAAoAgA2AgAgACADKAIAKAIANgIAIAMoAgAgADYCAAwBCyADIAI2AgAgACECIAEhBAsgAigCACIADQALCwsuACABIABBCGoiACgCBCAAKAIAIgBrQQJ1SQR/IAFBAnQgAGooAgBBAEcFQQALC8MBAQR/IABBmKMCNgIAIABBCGohAwNAIAIgACgCDCAAKAIIIgFrQQJ1SQRAIAJBAnQgAWooAgAiAQRAIAEgASgCBEEBayIENgIEIARBf0YEQCABIAEoAgAoAggRAQALCyACQQFqIQIMAQsLIABBkAFqEBQaIwBBEGsiASQAIAEgAzYCDCABKAIMIgIoAgAEQCACEN4CIAEoAgwiAigCACEDIAIoAggaIAIoAgAaIAEoAgxBDGogAxDEAgsgAUEQaiQAIAALDAAgACAAKAIAEMUCC3ABAX8jAEEQayICJAAgAiAANgIEIAIgACgCBCIANgIIIAIgACABQQJ0ajYCDCACKAIIIQEgAigCDCEAA0AgACABRgRAIAIoAgQgAigCCDYCBCACQRBqJAAFIAFBADYCACACIAFBBGoiATYCCAwBCwsLIAAgAEHoqwI2AgAgACgCCBAmRwRAIAAoAggQjwMLIAAL6gIBCH8gAigCBCEFAkAgASgCBCIEaSIIQQFNBEAgBEEBayAFcSEFDAELIAQgBUsNACAFIARwIQULIAEoAgAiCSAFQQJ0aiIGKAIAIQMDQCADIgcoAgAiAyACRw0ACwJAIAFBCGoiCiAHRwRAIAcoAgQhAwJAIAhBAU0EQCADIARBAWtxIQMMAQsgAyAESQ0AIAMgBHAhAwsgAyAFRg0BCyACKAIAIgMEQCADKAIEIQMCQCAIQQFNBEAgAyAEQQFrcSEDDAELIAMgBEkNACADIARwIQMLIAMgBUYNAQsgBkEANgIACyAHAn9BACACKAIAIgZFDQAaIAYoAgQhAwJAIAhBAU0EQCADIARBAWtxIQMMAQsgAyAESQ0AIAMgBHAhAwsgBiADIAVGDQAaIAkgA0ECdGogBzYCACACKAIACzYCACACQQA2AgAgASABKAIMQQFrNgIMIABBAToACCAAIAo2AgQgACACNgIACwQAQX8LpAIBB38jAEEQayIFJAAjAEEgayIDJAAgA0EYaiAAIAEQyQIgAygCGCEEIAMoAhwhBiMAQRBrIgEkACABIAY2AgwCQCAGIARrIgZBAnUiB0UNACAHQQJ0IgdFDQAgAiAEIAf8CgAACyABIAIgBmo2AgggAyABKAIMNgIQIAMgASgCCDYCFCABQRBqJAAgAygCECMAQRBrIgEkACABIAA2AgwgAUEMaiIAIQkhCCAAKAIAIQQjAEEQayIAJAAgACAENgIMIAAoAgwhBCAAQRBqJAAgCSAIIARrQQJ1EPUBIQAgAUEQaiQAIAMgADYCDCADIAIgAygCFCACa2o2AgggBSADKAIMNgIIIAUgAygCCDYCDCADQSBqJAAgBSgCDCAFQRBqJAAL6gcBCn8jAEEQayITJAAgAiAANgIAQQRBACAHGyEVIANBgARxIRYDQCAUQQRGBEACfyANLQALQQd2BEAgDSgCBAwBCyANLQALQf8AcQtBAUsEQCATIA0QSDYCDCACIBNBDGpBARD1ASANEG4gAigCABDjAjYCAAsgA0GwAXEiA0EQRwRAIAEgA0EgRgR/IAIoAgAFIAALNgIACyATQRBqJAAFAkACQAJAAkACQAJAIAggFGotAAAOBQABAwIEBQsgASACKAIANgIADAQLIAEgAigCADYCACAGQSAgBigCACgCLBEDACEHIAIgAigCACIPQQRqNgIAIA8gBzYCAAwDCwJ/IA0tAAtBB3YEQCANKAIEDAELIA0tAAtB/wBxC0UNAgJ/IA0tAAtBB3YEQCANKAIADAELIA0LKAIAIQcgAiACKAIAIg9BBGo2AgAgDyAHNgIADAILAn8gDC0AC0EHdgRAIAwoAgQMAQsgDC0AC0H/AHELRSAWRQ0BDQEgAiAMEEggDBBuIAIoAgAQ4wI2AgAMAQsgAigCACAEIBVqIgQhBwNAAkAgBSAHTQ0AIAZBwAAgBygCACAGKAIAKAIMEQQARQ0AIAdBBGohBwwBCwsgDkEASgRAIAIoAgAhDyAOIRADQAJAIAQgB08NACAQRQ0AIBBBAWshECAHQQRrIgcoAgAhESACIA9BBGoiEjYCACAPIBE2AgAgEiEPDAELCyAQBH8gBkEwIAYoAgAoAiwRAwAFQQALIREgAigCACEPA0AgEEEASgRAIAIgD0EEaiISNgIAIA8gETYCACAQQQFrIRAgEiEPDAELCyACIAIoAgAiD0EEajYCACAPIAk2AgALAkAgBCAHRgRAIAZBMCAGKAIAKAIsEQMAIQcgAiACKAIAIg9BBGo2AgAgDyAHNgIADAELAn8gCy0AC0EHdgRAIAsoAgQMAQsgCy0AC0H/AHELBH8CfyALLQALQQd2BEAgCygCAAwBCyALCywAAAVBfwshEUEAIRBBACESA0AgBCAHRg0BAkAgECARRwRAIBAhDwwBCyACIAIoAgAiD0EEajYCACAPIAo2AgBBACEPAn8gCy0AC0EHdgRAIAsoAgQMAQsgCy0AC0H/AHELIBJBAWoiEk0EQCAQIREMAQsCfyALLQALQQd2BEAgCygCAAwBCyALCyASai0AAEH/AEYEQEF/IREMAQsCfyALLQALQQd2BEAgCygCAAwBCyALCyASaiwAACERCyAHQQRrIgcoAgAhECACIAIoAgAiGEEEajYCACAYIBA2AgAgD0EBaiEQDAALAAsgAigCABC2AQsgFEEBaiEUDAELCwuQAgEBfyMAQRBrIgokAAJ/IAAEQCACQeyNAxAVDAELIAJB5I0DEBULIQACQCABBEAgCkEEaiIBIAAgACgCACgCLBECACADIAooAgQ2AAAgASAAIAAoAgAoAiARAgAMAQsgCkEEaiIBIAAgACgCACgCKBECACADIAooAgQ2AAAgASAAIAAoAgAoAhwRAgALIAggARCaASABECwaIAQgACAAKAIAKAIMEQAANgIAIAUgACAAKAIAKAIQEQAANgIAIApBBGoiASAAIAAoAgAoAhQRAgAgBiABEGUgARAUGiABIAAgACgCACgCGBECACAHIAEQmgEgARAsGiAJIAAgACgCACgCJBEAADYCACAKQRBqJAALzAEBBX8jAEEQayIFJAAjAEEgayIDJAAgA0EYaiAAIAEQyQIgA0EQaiADKAIYIAMo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ACgCCEGAgICAeHI2AgggBUEQaiQADAELEDcACyAAIAM2AgQLHwEBfyABKAIAELkDIQIgACABKAIANgIEIAAgAjYCAAvbFgEJfyMAQZAEayILJAAgCyAKNgKIBCALIAE2AowEAkAgACALQYwEahAkBEAgBSAFKAIAQQRyNgIAQQAhAAwBCyALQfgBNgJIIAsgC0HoAGogC0HwAGogC0HIAGoiEBAqIhEoAgAiATYCZCALIAFBkANqNgJgIwBBEGsiASQAIBBCADcCACAQQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBPGoiDkIANwIAIA5BADYCCCABQRBqJAAjAEEQayIBJAAgC0EwaiINQgA3AgAgDUEANgIIIAFBEGokACMAQRBrIgEkACALQSRqIgxCADcCACAMQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBGGoiD0IANwIAIA9BADYCCCABQRBqJAAjAEEQayIBJAACQCACBEAgAUEEaiIKIANB7I0DEBUiAiACKAIAKAIsEQIADAELIAFBBGoiCiADQeSNAxAVIgIgAigCACgCLBECAAsgCyABKAIENgBcIAogAiACKAIAKAIgEQIAIAwgChCaASAKECwaIAogAiACKAIAKAIcEQIAIA0gChCaASAKECwaIAsgAiACKAIAKAIMEQAANgJYIAsgAiACKAIAKAIQEQAANgJUIAogAiACKAIAKAIUEQIAIBAgChBlIAoQFBogCiACIAIoAgAoAhgRAgAgDiAKEJoBIAoQLBogCyACIAIoAgAoAiQRAAA2AhQgAUEQaiQAIAkgCCgCADYCACAEQYAEcSESQQAhA0EAIQEDQCABIQICQAJAAkACQCADQQRGDQAgACALQYwEahAkDQBBACEKAkACQAJAAkACQAJAIAtB3ABqIANqLQAADgUBAAQDBQkLIANBA0YNByAHQQECfyAAKAIAIgEoAgwiBCABKAIQRgRAIAEgASgCACgCJBEAAAwBCyAEKAIACyAHKAIAKAIMEQQABEAgC0EMaiAAEOsCIA8gCygCDBDuAQwCCyAFIAUoAgBBBHI2AgBBACEADAYLIANBA0YNBgsDQCAAIAtBjARqECQNBiAHQQECfyAAKAIAIgEoAgwiBCABKAIQRgRAIAEgASgCACgCJBEAAAwBCyAEKAIACyAHKAIAKAIMEQQARQ0G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An8gACgCACIBKAIMIgMgASgCEEYEQCABIAEoAgAoAiQRAAAMAQsgAygCAAsCfyACLQALQQd2BEAgAigCAAwBCyACCyAKQQJ0aigCAEYNAQsgBSAFKAIAQQRyNgIAQQAhAAwDCyAAEDAaIApBAWohCgwACwALQQEhACARKAIAIAsoAmRGDQBBACEAIAtBADYCDCAQIBEoAgAgCygCZCALQQxqEDkgCygCDARAIAUgBSgCAEEEcjYCAAwBC0EBIQALIA8QLBogDBAsGiANECwaIA4QLBogEBAUGiARKAIAIQEgEUEANgIAIAEEQCABIBEoAgQRAQALDAMLIAIhAQsgA0EBaiEDDAALAAsgC0GQBGokACAACzkBAn8gASgCACEDIAFBADYCACAAKAIAIQIgACADNgIAIAIEQCACIAAoAgQRAQALIAAgASgCBDYCBAvkAQEGfyMAQRBrIgUkACAAKAIEIQNBAQJ/IAIoAgAgACgCAGsiBEH/////B0kEQCAEQQF0DAELQX8LIgQgBEEBTRshBCABKAIAIQcgACgCACEIIANB+AFGBH9BAAUgACgCAAsgBBDTASIGBEAgA0H4AUcEQCAAKAIAGiAAQQA2AgALIAVB9wE2AgQgACAFQQhqIAYgBUEEahAqIgMQ7QIgAygCACEGIANBADYCACAGBEAgBiADKAIEEQEACyABIAAoAgAgByAIa2o2AgAgAiAEIAAoAgBqNgIAIAVBEGokAA8LECAACyABAX8gASgCABC/A8AhAiAAIAEoAgA2AgQgACACOgAAC7AXAQl/IwBBkARrIgskACALIAo2AogEIAsgATYCjAQCQCAAIAtBjARqECUEQCAFIAUoAgBBBHI2AgBBACEADAELIAtB+AE2AkwgCyALQegAaiALQfAAaiALQcwAaiIQECoiESgCACIBNgJkIAsgAUGQA2o2AmAjAEEQayIBJAAgEEIANwIAIBBBADYCCCABQRBqJAAjAEEQayIBJAAgC0FAayIOQgA3AgAgDkEANgIIIAFBEGokACMAQRBrIgEkACALQTRqIg1CADcCACANQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBKGoiDEIANwIAIAxBADYCCCABQRBqJAAjAEEQayIBJAAgC0EcaiIPQgA3AgAgD0EANgIIIAFBEGokACMAQRBrIgEkAAJAIAIE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BCAGEIgDNgIAIABBxAFqIABBEGogACgCDCAEEDkgAEH8AWogAEH4AWoQJQRAIAQgBCgCAEECcjYCAAsgACgC/AEgARAUGiAAQcQBahAUGiAAQYACaiQAC9sBAgN/AX4jAEEQayIEJAACfwJAAkACQCAAIAFHBEACQAJAIAAtAAAiBUEtRw0AIABBAWoiACABRw0ADAELQeTtAigCACEGQeTtAkEANgIAECYaIAAgBEEMaiADQn8QhgEhBwJAQeTtAigCACIABEAgBCgCDCABRw0BIABBxABGDQUMBAtB5O0CIAY2AgAgBCgCDCABRg0DCwsLIAJBBDYCAEEADAMLIAdC//8DWA0BCyACQQQ2AgBB//8DDAELQQAgB6ciAGsgACAFQS1GGwsgBEEQaiQAQf//A3ELwgECAX4CfyMAQRBrIgUkAAJAAkAgACABRwRAQeTtAigCACEGQeTtAkEANgIAECYaIAAgBUEMaiADQoCAgICAgICAgH8QhgEhBAJAQeTtAigCACIABEAgBSgCDCABRw0BIABBxABGDQMMBAtB5O0CIAY2AgAgBSgCDCABRg0DCwsgAkEENgIAQgAhBAwBCyACQQQ2AgAgBEIAVQRAQv///////////wAhBAwBC0KAgICAgICAgIB/IQQLIAVBEGokACAEC8wBAgJ/AX4jAEEQayIEJAACfwJAAkAgACABRwRAQeTtAigCACEFQeTtAkEANgIAECYaIAAgBEEMaiADQoCAgICAgICAgH8QhgEhBgJAQeTtAigCACIABEAgBCgCDCABRw0BIABBxABGDQQMAwtB5O0CIAU2AgAgBCgCDCABRg0CCwsgAkEENgIAQQAMAgsgBkKAgICAeFMNACAGQv////8HVQ0AIAanDAELIAJBBDYCAEH/////ByAGQgBVDQAaQYCAgIB4CyAEQRBqJAAL8QEBA38CQCMAQRBrIgMkACACIAFrQQJ1IgVB9////wNNBEACQCAFQQJJBEAgACAALQALQYABcSAFQf8AcXI6AAsgACAALQALQf8AcToACyAAIQQMAQsgA0EIaiAFQQJPBH8gBUECakF+cSIEIARBAWsiBCAEQQJGGwVBAQtBAWoQgQEgAygCDBogACADKAIIIgQ2AgAgACAAKAIIQYCAgIB4cSADKAIMQf////8HcXI2AgggACAAKAIIQYCA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AEEwIApBEmpBEkEAEDogACASIBEgEmsQNQwCCyAKIQYLIABBMCAGQQlqQQlBABA6CyAAQSAgAiAJIARBgMAAcxA6IAIgCSACIAlKGyENDAELIBQgBUEadEEfdUEJcWohCQJAIANBC0sNAEEMIANrIQZEAAAAAAAAMEAhGANAIBhEAAAAAAAAMECiIRggBkEBayIGDQALIAktAABBLUYEQCAYIAGaIBihoJohAQwBCyABIBigIBihIQELIBEgCygCLCIHIAdBH3UiBnMgBmutIBEQhwEiBkYEQCAGQQFrIgZBMDoAACALKAIsIQcLIBBBAnIhCiAFQSBxIQwgBkECayIOIAVBD2o6AAAgBkEBa0EtQSsgB0EASBs6AAAgBEEIcUUgA0EATHEhCCALQRBqIQcDQCAHIgUgAfwCIgZB4IUCai0AACAMcjoAACABIAa3oUQAAAAAAAAwQKIhAQJAIAdBAWoiByALQRBqa0EBRw0AIAFEAAAAAAAAAABhIAhxDQAgBUEuOgABIAVBAmohBwsgAUQAAAAAAAAAAGINAAtBfyENIANB/f///wcgCiARIA5rIghqIgZrSg0AIABBICACIAYgA0ECaiAHIAtBEGoiBWsiByAHQQJrIANIGyAHIAMbIgNqIgYgBBA6IAAgCSAKEDUgAEEwIAIgBiAEQYCABHMQOiAAIAUgBxA1IABBMCADIAdrQQBBABA6IAAgDiAIEDUgAEEgIAIgBiAEQYDAAHMQOiACIAYgAiAGShshDQsgC0GwBGokACANC7oCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAgJCggJAQIDBAoJCgoICQUGBwsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACEJQDCw8LIAIgAigCACIBQQRqNgIAIAAgATQCADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkD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IRcgFSAYQgBCABB5IQEgFCACIA5qIg5B7gBqTgRAIAggBiAJRyADQQBIcnEgAUEAR3FFDQELQeTtAkHEADYCAAsgBEHwAmogFyAWIA4QogMgBCkD+AIhFSAEKQPwAgshFiAMIBU3AyggDCAWNwMgIARBkMYAaiQAIAwpAyghFSAMKQMgIRYMAgtCACEWDAELQgAhFQsgACAWNwMAIAAgFTcDCCAMQTBqJAALwAYCBH8DfiMAQYABayIFJAACQAJAAkAgAyAEQgBCABB5RQ0AAn8gBEL///////8/gyEKAn8gBEIwiKdB//8BcSIHQf//AUcEQEEEIAcNARpBAkEDIAMgCoRQGwwCCyADIAqEUAsLRQ0AIAJCMIinIghB//8BcSIGQf//AUcNAQsgBUEQaiABIAIgAyAEECcgBSAFKQMQIgIgBSkDGCIBIAIgARChAyAFKQMIIQIgBSkDACEEDAELIAEgAkL///////////8AgyIKIAMgBEL///////////8AgyIJEHlBAEwEQCABIAogAyAJEHkEQCABIQQMAgsgBUHwAGogASACQgBCABAnIAUpA3ghAiAFKQNwIQQMAQsgBEIwiKdB//8BcSEHIAYEfiABBSAFQeAAaiABIApCAEKAgICAgIDAu8AAECcgBSkDaCIKQjCIp0H4AGshBiAFKQNgCyEEIAdFBEAgBUHQAGogAyAJQgBCgICAgICAwLvAABAnIAUpA1giCUIwiKdB+ABrIQcgBSkDUCEDCyAJQv///////z+DQoCAgICAgMAAhCELIApC////////P4NCgICAgICAwACEIQogBiAHSgRAA0ACfiAKIAt9IAMgBFatfSIJQgBZBEAgCSAEIAN9IgSEUARAIAVBIGogASACQgBCABAnIAUpAyghAiAFKQMgIQQMBQsgCUIBhiAEQj+IhAwBCyAKQgGGIARCP4iECyEKIARCAYYhBCAGQQFrIgYgB0oNAAsgByEGCwJAIAogC30gAyAEVq19IglCAFMEQCAKIQkMAQsgCSAEIAN9IgSEQgBSDQAgBUEwaiABIAJCAEIAECcgBSkDOCECIAUpAzAhBAwBCyAJQv///////z9YBEADQCAEQj+IIAZBAWshBiAEQgGGIQQgCUIBhoQiCUKAgICAgIDAAFQNAAsLIAhBgIACcSEHIAZBAEwEQCAFQUBrIAQgCUL///////8/gyAGQfgAaiAHcq1CMIaEQgBCgICAgICAwMM/ECcgBSkDSCECIAUpA0AhBAwBCyAJQv///////z+DIAYgB3KtQjCGhCECCyAAIAQ3AwAgACACNwMIIAVBgAFqJAALqQ8CBX8PfiMAQdACayIFJAAgBEL///////8/gyEKIAJC////////P4MhCyACIASFQoCAgICAgICAgH+DIQwgBEIwiKdB//8BcSEIAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgCEH//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhDAwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEMIAMhAQwCCyABIA1CgICAgICAwP//AIWEUARAIAMgAkKAgICAgIDA//8AhYRQBEBCACEBQoCAgICAgOD//wAhDAwDCyAMQoCAgICAgMD//wCEIQxCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEBCACEBDAILIAEgDYRQBEBCgICAgICA4P//ACAMIAIgA4RQGyEMQgAhAQwCCyACIAOEUARAIAxCgICAgICAwP//AIQhDEIAIQEMAgsgDUL///////8/WARAIAVBwAJqIAEgCyABIAsgC1AiBht5IAZBBnStfKciBkEPaxA7QRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQOyAGIAdqQRBrIQYgBSkDuAIhCiAFKQOwAiEDCyAFQaACaiAKQoCAgICAgMAAhCISQg+GIANCMYiEIgJCAEKAgICAsOa8gvUAIAJ9IgRCABA2IAVBkAJqQgAgBSkDqAJ9QgAgBEIAEDYgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQNiAFQfABaiAEQgBCACAFKQOIAn1CABA2IAVB4AFqIAUpA/gBQgGGIAUpA/ABQj+IhCIEQgAgAkIAEDYgBUHQAWogBEIAQgAgBSkD6AF9QgAQNiAFQcABaiAFKQPYAUIBhiAFKQPQAUI/iIQiBEIAIAJCABA2IAVBsAFqIARCAEIAIAUpA8gBfUIAEDYgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQNiAFQZABaiADQg+GQgAgAkIAEDYgBUHwAGogAkIAQgAgBSkDqAEgBSkDoAEiDSAFKQOYAXwiBCANVK18IARCAVatfH1CABA2IAVBgAFqQgEgBH1CACACQgAQNiAGIAkgCGtqIQYCfyAFKQNwIhNCAYYiDiAFKQOIASIPQgGGIAUpA4ABQj+IhHwiEELn7AB9IhRCIIgiAiALQoCAgICAgMAAhCIVQgGGIhZCIIgiBH4iESABQgGGIg1CIIgiCiAQIBRWrSAOIBBWrSAFKQN4QgGGIBNCP4iEIA9CP4h8fHxCAX0iE0IgiCIQfnwiDiARVK0gDiAOIBNC/////w+DIhMgAUI/iCIXIAtCAYaEQv////8PgyILfnwiDlatfCAEIBB+fCAEIBN+IhEgCyAQfnwiDyARVK1CIIYgD0IgiIR8IA4gDiAPQiCGfCIOVq18IA4gDiAUQv////8PgyIUIAt+IhEgAiAKfnwiDyARVK0gDyAPIBMgDUL+////D4MiEX58Ig9WrXx8Ig5WrXwgDiAEIBR+IhggECARfnwiBCACIAt+fCILIAogE358IhBCIIggCyAQVq0gBCAYVK0gBCALVq18fEIghoR8IgQgDlStfCAEIA8gAiARfiICIAogFH58IgpCIIggAiAKVq1CIIaEfCICIA9UrSACIBBCIIZ8IAJUrXx8IgIgBFStfCIEQv////////8AWARAIBYgF4QhFSAFQdAAaiACIAQgAyASEDYgAUIxhiAFKQNYfSAFKQNQIgFCAFKtfSEKQgAgAX0hCyAGQf7/AGoMAQsgBUHgAGogBEI/hiACQgGIhCICIARCAYgiBCADIBIQNiABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEHogBUEwaiANIBUgBkHwAGoQOyAFQSBqIAMgEiAFKQNAIgIgBSkDSCIKEDYgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIg1UrX0hASAEIA19CyEEIAVBEGogAyASQgNCABA2IAUgAyASQgVCABA2IAogAiACIAMgBCACQgGDIgR8IgNUIAEgAyAEVK18IgEgElYgASASURutfCICVq18IgQgAiACIARCgICAgICAwP//AFQgAyAFKQMQViABIAUpAxgiBFYgASAEURtxrXwiAlatfCIEIAIgBEKAgICAgIDA//8AVCADIAUpAwBWIAEgBSkDCCIDViABIANRG3GtfCIBIAJUrXwgDIQhDAsgACABNwMAIAAgDDcDCCAFQdACaiQAC78CAQF/IwBB0ABrIgQkAAJAIANBgIABTgRAIARBIGogASACQgBCgICAgICAgP//ABAnIAQpAyghAiAEKQMgIQEgA0H//wFJBEAgA0H//wBrIQMMAgsgBEEQaiABIAJCAEKAgICAgICA//8AECdB/f8CIAMgA0H9/wJPG0H+/wFrIQMgBCkDGCECIAQpAxAhAQwBCyADQYGAf0oNACAEQUBrIAEgAkIAQoCAgICAgIA5ECcgBCkDSCECIAQpA0AhASADQfSAfksEQCADQY3/AGohAwwBCyAEQTBqIAEgAkIAQoCAgICAgIA5ECdB6IF9IAMgA0HogX1NG0Ga/gFqIQMgBCkDOCECIAQpAzAhAQsgBCABIAJCACADQf//AGqtQjCGECcgACAEKQMINwMIIAAgBCkDADcDACAEQdAAaiQACzwAIAAgATcDACAAIAJC////////P4MgAkKAgICAgIDA//8Ag0IwiKcgA0IwiKdBgIACcXKtQjCGhDcDCAvAAQIBfwJ+QX8hAwJAIABCAFIgAUL///////////8AgyIEQoCAgICAgMD//wBWIARCgICAgICAwP//AFEbDQAgAkL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFJxDQAgACAEIAWEhFAEQEEADwsgASACg0IAWQRAIAEgAlIgASACU3ENASAAIAEgAoWEQgBSDwsgAEIAUiABIAJVIAEgAlEbDQAgACABIAKFhEIAUiEDCyADC+YBAQV/IwBBEGsiBCQAQaCDAygCACEGIAEoAkwaIAEoAkhBAEwEQCABEIkCC0GggwMgASgCiAE2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ASgCACABQQA2AgAQzgMhBSAAQQA2AkAgAEEAQQAgACgCACgCDBEEABogASgCACEDIAFBADYCACADBEAgAyABQQRqKAIAEQAAGgtBACAAIAQgBXIbBUEACyACQRBqJAALhwIBA38CQCMAQRBrIgMkACACIAFrIgVB9////wdNBEACQCAFQQtJBEAgACAALQALQYABcSAFQf8AcXI6AAsgACAALQALQf8AcToACyAAIQQMAQsgA0EIaiAFQQtPBH8gBUEIakF4cSIEIARBAWsiBCAEQQtGGwVBCgtBAWoQiwEgAygCDBogACADKAIIIgQ2AgAgACAAKAIIQYCAgIB4cSADKAIMQf////8HcXI2AgggACAAKAIIQYCAgIB4cjYCCCAAIAU2AgQLAkAgAiABayIARSICDQAgAg0AIAQgASAA/AoAAAsgA0EAOgAHIAAgBGogAy0ABzoAACADQRBqJAAMAQsQNwALC1QBAn8CQCAAKAIAIgJFDQACfyACKAIYIgMgAigCHEYEQCACIAEgAigCACgCNBEDAAwBCyACIANBBGo2AhggAyABNgIAIAELQX9HDQAgAEEANgIACwsxAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBEAAA8LIAAgAUEEajYCDCABKAIACyoAIABB8OsBNgIAIABBBGoQ8wEgAEIANwIYIABCADcCECAAQgA3AgggAAtrAQJ/IwBBEGsiAiQAIAJBCGogABBmGgJAIAItAAhFDQAgAkEEaiIDIAAgACgCAEEMaygCAGooAhg2AgAgAyABEIwBIAMoAgANACAAIAAoAgBBDGsoAgBqQQEQZwsgAkEIahBeIAJBEGokAAsTACAAIAAoAgBBDGsoAgBqEJECCxMAIAAgACgCAEEMaygCAGoQywELPwEBfyAAKAIYIgIgACgCHEYEQCAAIAFB/wFxIAAoAgAoAjQRAwAPCyAAIAJBAWo2AhggAiABOgAAIAFB/wFxCzEBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIoEQAADwsgACABQQFqNgIMIAEtAAALrSMDFX8CfQF+IwBBQGoiBCQAIAQgAjYCPCAAKAKgASIDBEAgACgCgAEgACgCjAEgACgCDCACbGpqIAEgA/wKAAALIAAoAkAhCgJAIAIgACgCeCILRgRAIAAoAghBAUYNASAE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A0AgBCABQQJ0Ig9qIAMgD2r9AAIA/QsCACABQQRqIgEgAkcNAAsgAiAJRg0BCyACIQEgBUEDcSIPBEADQCAEIAFBAnQiEGogAyAQaigCADYCACABQQFqIQEgC0EBaiILIA9HDQALCyACIAVrQX1PDQADQCAEIAFBAnQiAmogAiADaigCADYCACAEIAJBBGoiBWogAyAFaigCADYCACAEIAJBCGoiBWogAyAFaigCADYCACAEIAJBDGoiAmogAiADaigCADYCACAJIAFBBGoiAUcNAAsLIAdBAWohBwsgAEEwaiIAIA5HDQALCyAGQRRqIgYgDEcNAAsLDwsQEwALtwIBA38gACgCCCIEIAAoAgAiBWsgA08EQCADIAAoAgQiBCAFayIGSwRAIAQgBUcEQCAGBEAgBSABIAb8CgAACyAAKAIEIQQLIAIgASAGaiIDayEBAkAgAiADRg0AIAFFDQAgBCADIAH8CgAACyAAIAEgBGo2AgQPCyACIAFrIQMCQCABIAJGDQAgA0UNACAFIAEgA/wKAAALIAAgAyAFajYCBA8LIAUEQCAAIAU2AgQgBRARIABBADYCCCAAQgA3AgBBACEECyADQQBOBEAgAEH/////ByAEQQF0IgUgAyADIAVJGyAEQf////8DTxsiBBASIgM2AgQgACADNgIAIAAgAyAEajYCCCACIAFrIQQCQCABIAJGDQAgBEUNACADIAEgBPwKAAALIAAgAyAEajYCBA8LEBMAC9EDAQV/IAAgASkCADcCACAAIAEoAgg2AgggASgCDCECIABBADYCGCAAQgA3AhAgACACNgIMQQAhAgJAAkACQCABKAIUIgMgASgCECIGRwRAIAMgBmsiA0EASA0BIAAgAxASIgI2AhQgACACNgIQIAAgAiADaiIENgIYIAMEQCACIAYgA/wKAAALIAAgBDYCFAsgACABKAIcIAIgAiAERhs2AhwgACABKAIgNgIgIAEoAiQhAiAAQQA2AjAgAEIANwIoIAAgAjYCJEEAIQIgASgCLCIEIAEoAigiA0cEQCAEIANrIgRBAEgNAiAAIAQQEiICNgIsIAAgAjYCKCAAIAIgBGoiBTYCMCAEBEAgAiADIAT8CgAACyAAIAU2AiwLIAAgASgCNCACIAIgBUYbNgI0IAAgASgCODYCOCABKAI8IQJBACEEIABBADYC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IAEEQCABIAEoAgRBBGs2AgQLIAJFDQAgAiACKAIEQQRrNgIECyAMQRBqJAAPCxATAAsQEwALEB8AC0UBAX8gAEGI3gA2AgAgACgCICIBBEAgACABNgIkIAAoAigaIAEQEQsgACgCECIBBEAgACABNgIUIAAoAhgaIAEQEQsgAAtEAQF/QSwQEiIBQQA2AiggAUIANwIgIAFBADYCGCABQgA3AhAgAUEAOgAMIAFBATYCCCABIAA2AgQgAUGI3gA2AgAgAQtiAQF/IABBoN0ANgIAIAAoAigiAQRAIAAgATYCLCAAKAIwGiABEBELIAAoAhwiAQRAIAAgATYCICAAKAIkGiABEBELIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABEBELIAAQEQtgAQF/IABBoN0ANgIAIAAoAigiAQRAIAAgATYCLCAAKAIwGiABEBELIAAoAhwiAQRAIAAgATYCICAAKAIkGiABEBELIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABEBELIAALjQEBAn8jAEEgayIFJAAgACgCCCEGIAUgATYCHCAFQQA2AhggBUIANwIQIAUgBjYCDCAFQQE2AgggACgCBEEBIAVBCGogAkPNzMw9ELICIAJBf0EAIAAoAgQiAEG4A2ogAEHQA2ogAyAEELMCIAUoAhAiAARAIAUgADYCFCAFKAIYGiAAEBELIAVBIGokAAsgACACIAEgASAAKAIEIgBBiANqIABBoANqIAMgBBCzAgsUACAAQQxqQQAgASgCBEH12gBGGwsMACAAELQCGiAAEBELBQBB5xkLBQBBiikLBQBBrBYL1gQBBH8gACgCDCIBBEAjAEEQayICJAAgASgC2AMiAARAIAEgADYC3AMgASgC4AMaIAAQEQsgASgCwAMiAARAIAEgADYCxAMgASgCyAMaIAAQEQsgASgCqAMiAARAIAEgADYCrAMgASgCsAMaIAAQEQsgASgCkAMiAARAIAEgADYClAMgASgCmAMaIAAQEQsgASgC+AIiAARAIAEgADYC/AIgASgCgAMaIAAQEQsgASgC4AIiAARAIAEgADYC5AIgASgC6AIaIAAQEQsgASgCyAIiAARAIAEgADYCzAIgASgC0AIaIAAQEQsgASwAtwJBAEgEQCABKAK0AhogASgCrAIQEQsgASwA9wFBAEgEQCABKAL0ARog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ACAAQQhqIgIoAgAgAEEMaiIDKAIASSEEIAFBEGokACACIAMgBBsoAgAgAEEQaiQACzQAA0AgASACRkUEQCAEIAMgASwAACIAIABBAEgbOgAAIARBAWohBCABQQFqIQEMAQsLIAELRwEBfyAAQbTVADYCACAAKAIYIgEEQCAAIAE2AhwgACgCIBogARARCyAAKAIIIgEEQCAAIAE2AgwgACgCEBogARARCyAAEBELDAAgAiABIAFBAEgbCyoAA0AgASACRkUEQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohAQwBCwsgAQs9AANAIAEgAkcEQCABIAEsAAAiAEEATgR/QZCVAigCACAAQQJ0aigCAAUgAAs6AAAgAUEBaiEBDAELCyABCx4AIAFBAE4Ef0GQlQIoAgAgAUECdGooAgAFIAELwAs9AANAIAEgAkcEQCABIAEsAAAiAEEATgR/QYSJAigCACAAQQJ0aigCAAUgAAs6AAAgAUEBaiEBDAELCyABCx4AIAFBAE4Ef0GEiQIoAgAgAUECdGooAgAFIAELwAsJACAAENkCEBELNQADQCABIAJGRQRAIAQgASgCACIAIAMgAEGAAUkbOgAAIARBAWohBCABQQRqIQEMAQsLIAELDgAgASACIAFBgAFJG8ALRQEBfyAAQbTVADYCACAAKAIYIgEEQCAAIAE2AhwgACgCIBogARARCyAAKAIIIgEEQCAAIAE2AgwgACgCEBogARARCyAACyoAA0AgASACRkUEQCADIAEsAAA2AgAgA0EEaiEDIAFBAWohAQwBCwsgAQs+AANAIAEgAkcEQCABIAEoAgAiAEH/AE0Ef0GQlQIoAgAgAEECdGooAgAFIAALNgIAIAFBBGohAQwBCwsgAQseACABQf8ATQR/QZCVAigCACABQQJ0aigCAAUgAQsLPgADQCABIAJHBEAgASABKAIAIgBB/wBNBH9BhIkCKAIAIABBAnRqKAIABSAACzYCACABQQRqIQEMAQsLIAELHgAgAUH/AE0Ef0GEiQIoAgAgAUECdGooAgAFIAELCzoAA0ACQCACIANGDQAgAigCACIAQf8ASw0AIABBAnRB4KMCaigCACABcUUNACACQQRqIQIMAQsLIAILOgADQAJAIAIgA0YNACACKAIAIgBB/wBNBEAgAEECdEHgowJqKAIAIAFxDQEL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BEAgBSgCHCECIAAQFBoFIAVBHGogBSgCDCwAABCMASAFIAUoAgxBAWo2AgwMAQsLCyAFQSBqJAAgAgujBQEDfyMAQcACayIAJAAgACACNgK4AiAAIAE2ArwCIwBBEGsiASQAIABBxAFqIgdCADcCACAHQQA2AgggAUEQaiQAIABBEGoiBiADKAIcIgE2AgAgAUGsjgNHBEAgASABKAIEQQFqNgIECyAGQdyPAxAVIgFBoKECQbqhAiAAQdABaiABKAIAKAIwEQoAGiAGEBgjAEEQayIBJAAgAEG4AWoiAkIANwIAIAJBADYCCCABQRBqJAAgAiACLQALQQd2BH8gAigCCEH/////B3FBAWsFQQoLEBkgAAJ/IAItAAtBB3YEQCACKAIADAELIAILIgE2ArQBIAAgBjYCDCAAQQA2AggDQAJAIABBvAJqIABBuAJqECQNACAAKAK0AQJ/IAItAAtBB3YEQCACKAIEDAELIAItAAtB/wBxCyABakYEQAJ/IAItAAtBB3YEQCACKAIEDAELIAItAAtB/wBxCyEDIAICfyACLQALQQd2BEAgAigCBAwBCyACLQALQf8AcQtBAXQQGSACIAItAAtBB3YEfyACKAIIQf////8HcUEBawVBCgsQGSAAIAMCfyACLQALQQd2BEAgAigCAAwBCyACCyIBajYCtAELAn8gAEG8AmoiBigCACIIKAIMIgMgCCgCEEYEQCAIIAgoAgAoAiQRAAAMAQsgAygCAAtBECABIABBtAFqIABBCGpBACAHIABBEGogAEEMaiAAQdABahCEAQ0AIAYQMBoMAQsLIAIgACgCtAEgAWsQGQJ/IAItAAtBB3YEQCACKAIADAELIAILECYgACAFNgIAIAAQgwNBAUcEQCAEQQQ2AgALIABBvAJqIABBuAJqECQEQCAEIAQoAgBBAnI2AgALIAAoArwCIAIQFBogBxAUGiAAQcACaiQAC9wGAgN/AX4CfyMAQfACayIAJAAgACACNgLoAiAAIAE2AuwCIABB3AFqIAMgAEHwAWogAEHsAWogAEHoAWoQ/AEjAEEQayICJAAgAEHQAWoiAUIANwIAIAFBADYCCCACQRBqJAAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEBkgAAJ/IAEtAAtBB3YEQCABKAIADAELIAELIgI2AswB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3gFqEP8BIwBBEGsiAiQAIABBxAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxAZIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgLAASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWQQAhAwNAAkACQAJAIABBjAJqIABBiAJqECUNACAAKALAAQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEGIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQGSABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQGSAAIAYCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYCwAELAn8gACgCjAIiBigCDCIHIAYoAhBGBEAgBiAGKAIAKAIkEQAADAELIActAAALwCAAQRdqIABBFmogAiAAQcABaiAALADfASAALADeASAAQdABaiAAQSBqIABBHGogAEEYaiAAQeABahD+AQ0AIAMNAUEAIQMgACgCwAEgAmsiB0EATA0CAkACQCACLQAAIgZBK2siCA4DAQABAAsgBkEuRg0CQQEhAyAGQTBrQf8BcUEKSQ0DDAELIAdBAUYNAgJAIAgOAwADAAMLIAItAAEiBkEuRg0BQQEhAyAGQTBrQf8BcUEJTQ0CCwJAAn8gAC0A2wFBB3YEQCAAKALUAQwBCyAALQDbAUH/AHELRQ0AIAAtABdBAUcNACAAKAIcIgMgAEEgamtBnwFKDQAgACADQQRqNgIcIAMgACgCGDYCAAsgACACIAAoAsABIAQQhAMgACkDACEJIAUgACkDCDcDCCAFIAk3AwAgAEHQAWogAEEgaiAAKAIcIAQQOSAAQYwCaiAAQYgCahAlBEAgBCAEKAIAQQJyNgIACyAAKAKMAiABEBQaIABB0AFqEBQaIABBkAJqJAAMAwtBASEDCyAAQYwCahAxGgwACwALC8YGAQN/An8jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcABaiADIABB0AFqIABBzwFqIABBzgFqEP8BIwBBEGsiAiQAIABBtAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxAZIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgKwASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGQQAhAwNAAkACQAJAIABB/AFqIABB+AFqECUNACAAKAKwAQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEGIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQGSABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQGSAAIAYCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYCsAELAn8gACgC/AEiBigCDCIHIAYoAhBGBEAgBiAGKAIAKAIkEQAADAELIActAAALwCAAQQdqIABBBmogAiAAQbABaiAALADPASAALADOASAAQcABaiAAQRBqIABBDGogAEEIaiAAQdABahD+AQ0AIAMNAUEAIQMgACgCsAEgAmsiB0EATA0CAkACQCACLQAAIgZBK2siCA4DAQABAAsgBkEuRg0CQQEhAyAGQTBrQf8BcUEKSQ0DDAELIAdBAUYNAgJAIAgOAwADAAMLIAItAAEiBkEuRg0BQQEhAyAGQTBrQf8BcUEJTQ0CCwJAAn8gAC0AywFBB3YEQCAAKALEAQwBCyAALQDLAUH/AHELRQ0AIAAtAAdBAUcNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArABIAQQhQM5AwAgAEHAAWogAEEQaiAAKAIMIAQQOSAAQfwBaiAAQfgBahAlBEAgBCAEKAIAQQJyNgIACyAAKAL8ASABEBQaIABBwAFqEBQaIABBgAJqJAAMAwtBASEDCyAAQfwBahAxGgwACwALC8YGAQN/An8jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcABaiADIABB0AFqIABBzwFqIABBzgFqEP8BIwBBEGsiAiQAIABBtAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxAZIAACfyABLQALQQd2BEAgASgCAAwBCyAB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fwsgAkEgaiQAC2UBAX8CQCAALQAsRQRAIAJBACACQQBKGyECA0AgAiADRg0CIAAgAS0AACAAKAIAKAI0EQMAQX9GBEAgAw8FIAFBAWohASADQQFqIQMMAQsACwALIAFBASACIAAoAiAQUSECCyACCzEAIAAgACgCACgCGBEAABogACABQeyPAxAVIgE2AiQgACABIAEoAgAoAhwRAAA6ACwLpQIBA38jAEEgayICJAACQCABQX9GBEAgAC0ANA0BIAAgACgCMCIBQX9HOgA0DAELIAAtADQhAwJAAkACQCAALQA1RQRAIANBAXENAQwDCyADQQFxIgMEQCAAKAIwIAAoAiAQqQMNAwwCCyADRQ0CCyACIAAoAjDAOgATAkACQCAAKAIkIgMgACgCKCACQRNqIAJBFGoiBCACQQxqIAJBGGogAkEgaiAEIAMoAgAoAgwRDABBAWsOAwICAAELIAAoAjAhAyACIAJBGWo2AhQgAiADOgAYCwNAIAIoAhQiAyACQRhqTQ0CIAIgA0EBayIDNgIUIAMsAAAgACgCIBCKAUF/Rw0ACwtBfyEBDAELIABBAToANCAAIAE2AjALIAJBIGokACABCwkAIABBARCqAwsZACAAKAIMIgAEQCAAIAAoAgAoAhARAQALCwkAIABBABCqAwtIACAAIAFB7I8DEBUiATYCJCAAIAEgASgCACgCGBEAADYCLCAAIAAoAiQiASABKAIAKAIcEQAAOgA1IAAoAixBCU4EQBAgAAsLHgBBgIUDEI0BQeCHAxCNAUHYhQMQjgJBuIgDEI4CCwQAQgALBwAgAEEMagsIACAAEFYQEQsTACAAIAAoAgBBDGsoAgBqELUDCxMAIAAgACgCAEEMaygCAGoQiwILEwAgACAAKAIAQQxrKAIAahCMAgsTACAAIAAoAgBBDGsoAgBqEMMBCwoAIABBCGsQjAILCgAgAEEIaxDDAQs2AQF/QSQQEiIBQQA2AiAgAUIANwIYIAFBADYCECABQgA3AgggASAANgIEIAFBtNUANgIAIAELGgAgACABIAIpAwhBACADIAEoAgAoAhARFgALCQAgABCNAhARC7ICAQF/IAAgACgCACgCGBEAABogACABQeyPAxAVIgE2AkQgAC0AYiECIAAgASABKAIAKAIcEQAAIgE6AGIgASACRwRAIABBADYCECAA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QGoiByQAIAdBADYCDCAHQgA3AgQCfyAHQRBqIgZBADYCFCAGQgA3AgwgBiADOAIIIAYgAjYCBCAGIAE2AgACQAJAAkAgBCgCBCIBIAQoAgAiBEcEQCABIARrIgFBAEgNASAGIAEQEiICNgIQIAYgAjYCDCAGIAEgAmoiCDYCFCABBEAgAiAEIAH8CgAACyAGIAg2AhALIAZBADYCICAGQgA3AhggBSgCBCIBIAUoAgAiBEcEQCABIARrIgFBAEgNAiAGIAEQEiICNgIcIAYgAjYCGCAGIAEgAmoiBTYCICABBEAgAiAEIAH8CgAACyAGIAU2AhwLIAZBADYCLCAGQgA3AiQgBygCCCIBIAcoAgQiBEcEQCABIARrIgFBAEgNAyAGIAEQEiICNgIoIAYgAjYCJCAGIAEgAmoiBTYCLCABBEAgAiAEIAH8CgAACyAGIAU2AigLIAYMAwsQEwALEBMACxATAAshASAHKAIEIgIEQCAHIAI2AgggBygCDBogAhARCyAAAn8gACgCDCICIAAoAhBJBEAgAiABEJMBQTBqDAELIABBCGogARCYAgs2AgwgASgCJCIABEAgASAANgIoIAEoAiwaIAAQEQsgASgCGCIABEAgASAANgIcIAEoAiAaIAAQEQsgASgCDCIABEAgASAANgIQIAEoAhQaIAAQEQsgB0FAayQAC/kCAQJ/IAAoAgAiAigCACIDBEAgAiADNgIEIAIoAggaIAMQESACQQA2AgggAkIANwIACyACIAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCABQQA2AgggAUIANwIAIAAoAgQiAigCACIDBEAgAiADNgIEIAIoAggaIAMQESACQQA2AgggAkIANwIACyACIAEoAgw2AgAgAiABKAIQNgIEIAIgASgCFDYCCCABQQA2AhQgAUIANwIMIAAoAggiAigCACIDBEAgAiADNgIEIAIoAggaIAMQESACQQA2AgggAkIANwIACyACIAEoAhg2AgAgAiABKAIcNgIEIAIgASgCIDYCCCABQQA2AiAgAUIANwIYIAAoAgwiAigCACIDBEAgAiADNgIEIAIoAggaIAMQESACQQA2AgggAkIANwIACyACIAEoAiQ2AgAgAiABKAIoNgIEIAIgASgCLDYCCCABQQA2AiwgAUIANwIkIAAoAhAgASoCMDgC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AiACIAZrQQN1EFIgACAAKAIUQQhrIgI2AhQgACgCECIGIAJHDQALCyAFQf////sHNgIIIAAoAgRBACABIAVBCGogAEEIaiIAEKkBIAAgAyAEEI8ECyAFQRBqJAALcQEDfyAAQaTMADYCACAAQRhqIQMCQCAAKAJAIgEgAEEwakYEf0EQBSABRQ0BQRQLIQIgASABKAIAIAJqKAIAEQEACwJAIAMgACgCKCIBRgR/QRAFIAFFDQFBFAshAiABIAEoAgAgAmooAgARAQALIAALugEBBH8jAEEQayIGJAAgAEEAOgAMIAAgAkEBajYCCCAAKAIQIgUgACgCFCICRwRAA0AgBSACIAIgBWtBA3UQUiAAIAAoAhRBCGsiAjYCFCAAKAIQIgUgAkcNAAsLIAAoAgQiAigCKCABQQJ0aigCACEFIAIoAhAhByACKAIMIQggBkH////7BzYCCCACQQAgByAFIAhsQQJ0aiAGQQhqIABBCGoiABCpASAAIAMgBCABEJAEIAZBEGokAAtHAQF/IABByOAANgIAIAAoAiAiAQRAIAAgATYCJCAAKAIoGiABEBELIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABEBELIAAQEQtFAQF/IABByOAANgIAIAAoAiAiAQRAIAAgATYCJCAAKAIoGiABEBELIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABEBELIAALRAEBf0EsEBIiAUEANgIoIAFCADcCICABQQA2AhggAUIANwIQIAFBADoADCABQQE2AgggASAANgIEIAFByOAANgIAIAELYgEBfyAAQeTfADYCACAAKAIoIgEEQCAAIAE2AiwgACgCMBogARARCyAAKAIcIgEEQCAAIAE2AiAgACgCJBogARARCyAAKAIQIgEEQCAAIAE2AhQgACgCGBogARARCyAAEBELYAEBfyAAQeTfADYCACAAKAIoIgEEQCAAIAE2AiwgACgCMBogARARCyAAKAIcIgEEQCAAIAE2AiAgACgCJBogARARCyAAKAIQIgEEQCAAIAE2AhQgACgCGBogARARCyAAC6MBAQF/IwBBEGsiBSQAAn8gAyAEckUEQCAFQQA2AgwgACgCBEEAIAEgAiAFQQxqEOQBIAUoAgwMAQsgACAAKAIgNgIkIAAoAgRBACABIAIgAEEgaiIBEOMBAkACQCADRQ0AIARFDQAgASADIAQQiwQMAQsgAwRAIAEgAxCKBAwBCyAERQ0AIAEgBBCJBAsgACgCJCAAKAIga0EDdQsgBUEQaiQAC+UBAQN/IwBBEGsiBiQAIAAoAgQiBSgCECAFKAIMIAUoAiggAUECdGooAgBsQQJ0aiEHAn8gAyAEckUEQCAGQQA2AgwgBUEAIAcgAiAGQQxqEOQBIAYoAgwiAEEBayIBQQAgACABTxsMAQsgACAAKAIgNgIkIAVBACAHIAIgAEEgaiIFEOMBAkACQCADRQ0AIARFDQAgBSADIAQgARCOBAwBCyADBEAgBSADIAEQjQQMAQsgBEUNACAFIAQgARCMBAsgACgCJCAAKAIga0EDdSIAQQFrIgFBACAAIAFPGwsgBkEQaiQAC8YBAQJ/IwBBEGsiBSQAAkAgAkUEQCADBEAgAyADKAIANgIEIARFDQIgBCAEKAIANgIEDAILIARFDQEgBCAEKAIANgIEDAELIABBADoADCAAIAI2AgggACgCECIGIAAoAhQiAkcEQANAIAYgAiACIAZrQQN1EFIgACAAKAIUQQhrIgI2AhQgACgCECIGIAJHDQALCyAFQf////sHNgIIIAAoAgRBACABIAVBCGogAEEIaiIAEKsBIAAgAyAEEI8ECyAFQRBqJAALugEBBH8jAEEQayIGJAAgAEEAOgAMIAAgAkEBajYCCCAAKAIQIgUgACgCFCICRwRAA0AgBSACIAIgBWtBA3UQUiAAIAAoAhRBCGsiAjYCFCAAKAIQIgUgAkcNAAsLIAAoAgQiAigCKCABQQJ0aigCACEFIAIoAhAhByACKAIMIQggBkH////7BzYCCCACQQAgByAFIAhsQQJ0aiAGQQhqIABBCGoiABCrASAAIAMgBCABEJAEIAZBEGokAAtHAQF/IABBiN4ANgIAIAAoAiAiAQRAIAAgATYCJCAAKAIoGiABEBELIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABEBELIAAQEQuBAwEBf0GIAhASIgBCmrPmzJmz5tw/NwMoIAD9DAAAAAAAAPA/AAAAAAAA8D/9CwMYIAD9DAAAAAAAAPA/AAAAAAAA8D/9CwMIIAD9DAAAAAAAAAAAAAAAAAAAAAD9CwMwIABBCToAwwEgAEEANgKwASAAQQA2ApgBIABBCjYCgAEgAP0MAQAAAAAAAAAQAAAAyAAAAP0LA3AgAELShdjMBDcDaCAAQQ82AmAgAP0MAAAAAAAA8D8AAAAAAAAUQP0LA1AgAEF/NgJMIABBADoASCAAQoCAgICAgID4PzcDQCAAQYsYKQAANwC4ASAAQZMYLQAAOgDAASAAQQM6AIMCIABBADoA9AEgAELvpIzUczcC7AEgAEJ/NwLkASAAQQE6ANwBIABCgICA/oOAgMA/NwLUASAAQn83AswBIABCgICA/OMDNwLEASAAQQA6AMEBIABBADoA+wEgAEEqNgLgASAAQgI3AwAgAEGDJi8AADsA+AEgAEGFJi0AADoA+gEgAAsLyMMCtwEAQYAIC7RfbG9jYWxfY29ubmVjdGl2aXR5AGluZmluaXR5AGNoZWNrU2FuaXR5AE5vdCBlbm91Z2ggbWVtb3J5AEZlYnJ1YXJ5AEphbnVhcnkASnVseQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkAJW0vJWQvJXkAd3gAcmVkdXgAc3RhcnRpbmcgdmVjdG9yIG5lYXIgdGhlIG51bGwgc3BhY2Ugb2YgdGhlIGlucHV0IG1hdHJpeAB1bmlxdWVfbG9jazo6bG9jazogcmVmZXJlbmNlcyBudWxsIG11dGV4AHdieAB3K2J4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAdyt4AF9fbmV4dF9wcmltZSBvdmVyZmxvdwBOb3YAVGh1AHVuc3VwcG9ydGVkIGxvY2FsZSBmb3Igc3RhbmRhcmQgaW5wdXQAQXVndXN0AE5vdCBlbm91Z2ggbWVtb3J5OiBhZGRQb2ludCBmYWlsZWQgdG8gYWxsb2NhdGUgbGlua2xpc3QAVGhlIG5ld2x5IGluc2VydGVkIGVsZW1lbnQgc2hvdWxkIGhhdmUgYmxhbmsgbGluayBsaXN0AG1pbl9kaXN0AFVwZGF0ZSBHcmFwaCBieSAgUlAgZm9yZXN0AGRvdABpbnRlcm5hbElkIDwgY3VyX2VsZW1lbnRfY291bnQAbm5kZXNjZW50AG5uX2Rlc2NlbnQAVGhlIG51bWJlciBvZiBlbGVtZW50cyBleGNlZWRzIHRoZSBzcGVjaWZpZWQgbGltaXQAYXBwbHlUcmFuc3Bvc2l0aW9uT25UaGVSaWdodABQcm9kdWN0AE9jdABTYXQAaW5pdGlhbGl6YXRpb24gdmVjdG9yIGRvZXMgbm90IGhhdmUgZXhwZWN0ZWQgbnVtYmVyIG9mIHJvd3MATm90IGVub3VnaCBtZW1vcnk6IEhpZXJhcmNoaWNhbE5TVyBmYWlsZWQgdG8gYWxsb2NhdGUgbGlua2xpc3RzAG5uZGVzY2VudF9uX25laWdoYm9ycwBubmRlc2NlbnRfbl9pdGVycwBfY2hlY2tfY29tcHV0ZV9hc3NlcnRpb25zAHJlcXVlc3RlZCBudW1iZXIgb2Ygc2luZ3VsYXIgdmFsdWVzIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBzbWFsbGVyIG1hdHJpeCBkaW1lbnNpb24gZm9yIElSTEJBIGl0ZXJhdGlvbnMAZHN0LnJvd3MoKSA9PSBkc3RSb3dzICYmIGRzdC5jb2xzKCkgPT0gZHN0Q29scwBzdGFydFJvdyA+PSAwICYmIGJsb2NrUm93cyA+PSAwICYmIHN0YXJ0Um93IDw9IHhwci5yb3dzKCkgLSBibG9ja1Jvd3MgJiYgc3RhcnRDb2wgPj0gMCAmJiBibG9ja0NvbHMgPj0gMCAmJiBzdGFydENvbCA8PSB4cHIuY29scygpIC0gYmxvY2tDb2xzAGhuc3dfbl9saW5rcwBuX2Vwb2NocwB1cGRhdGVfYnlfbGVhdmVzAGFwcGx5X2dyYXBoX3VwZGF0ZXMAZ2VuZXJhdGVfZ3JhcGhfdXBkYXRlcwBubmRlc2NlbnRfbl90cmVlcwAgdHJlZXMAdHJpRmFjdG9yLnJvd3MoKSA9PSBuYlZlY3MgJiYgdHJpRmFjdG9yLmNvbHMoKSA9PSBuYlZlY3MgJiYgdmVjdG9ycy5yb3dzKCk+PW5iVmVjcwAlczolZDogJXMAQXByAFJlcGxhY2VtZW50IG9mIGRlbGV0ZWQgZWxlbWVudHMgaXMgZGlzYWJsZWQgaW4gY29uc3RydWN0b3IAdmVjdG9yAGVzc2VudGlhbFZlY3RvcgBtYWtlX2Jsb2NrX2hvdXNlaG9sZGVyX3RyaWFuZ3VsYXJfZmFjdG9yAG1vbmV5X2dldCBlcnJvcgBjYW5kIGVycm9yAGJsYXNfZGF0YV9tYXBwZXIAQmFkIHZhbHVlIG9mIHN6X2xpbmtfbGlzdF9vdGhlcgBoZWxsaW5nZXIAT2N0b2JlcgBOb3ZlbWJlcgBTZXB0ZW1iZXIARGVjZW1iZXIAaW9zX2Jhc2U6OmNsZWFyAE1hcgAvZW1zZGsvZW1zY3JpcHRlbi9zeXN0ZW0vbGliL2xpYmN4eGFiaS9zcmMvcHJpdmF0ZV90eXBlaW5mby5jcHAAdGhpcmRfcGFydHkvbm5kZXNjZW50L3NyYy9ubmQuY3BwAFNlcABDd2lzZUJpbmFyeU9wAEN3aXNlTnVsbGFyeU9wACVJOiVNOiVTICVwAG1peF9yYXRpbwBpbmZvAHNjYWxlQW5kQWRkVG8AcnVuAFN1bgBKdW4AUG9zc2libGUgbWVtb3J5IGNvcnJ1cHRpb24Ac3RkOjpleGNlcHRpb24AaG5zd19lZl9jb25zdHJ1Y3Rpb24AdW1hcHBwIHdhcyBub3QgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBwYXJhbGxlbCBvcHRpbWl6YXRpb24AY29sc1Blcm11dGF0aW9uAGNvcnJlbGF0aW9uAHJlcXVlc3RlZCBudW1iZXIgb2Ygc2luZ3VsYXIgdmFsdWVzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIHNtYWxsZXIgbWF0cml4IGRpbWVuc2lvbgBNb24AbmFuAGV1Y2xpZGVhbgBKYW4AcmFuZG9tAEp1bABzdGQ6OmJhZF9mdW5jdGlvbl9jYWxsAEFwcmlsAExldmVsIG9mIGl0ZW0gdG8gYmUgdXBkYXRlZCBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gbWF4IGxldmVsAFRyeWluZyB0byBtYWtlIGEgbGluayBvbiBhIG5vbi1leGlzdGVudCBsZXZlbAB1bm1hcmtEZWxldGVkSW50ZXJuYWwARGlhZ29uYWwAQmxvY2sARnJpAHJlcHVsc2lvbl9zdHJlbmd0aABiYWRfYXJyYXlfbmV3X2xlbmd0aABrID49IDAgJiYgayA8IG1fbGVuZ3RoAGJhbmR3aWR0aABobnN3X2VmX3NlYXJjaABNYXJjaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9SZWR1eC5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL3Byb2R1Y3RzL0dlbmVyYWxNYXRyaXhNYXRyaXguaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9QZXJtdXRhdGlvbk1hdHJpeC5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL0RvdC5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL1Byb2R1Y3QuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9Qcm9kdWN0RXZhbHVhdG9ycy5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL0Fzc2lnbkV2YWx1YXRvci5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Ib3VzZWhvbGRlci9CbG9ja0hvdXNlaG9sZGVyLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvQ3dpc2VCaW5hcnlPcC5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL0N3aXNlTnVsbGFyeU9wLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL1NWRC9VcHBlckJpZGlhZ29uYWxpemF0aW9uLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvdXRpbC9CbGFzVXRpbC5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL3Byb2R1Y3RzL0dlbmVyYWxCbG9ja1BhbmVsS2VybmVsLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvRGlhZ29uYWwuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9CbG9jay5oAHRoaXJkX3BhcnR5L2huc3dsaWIvaG5zd2xpYi9obnN3YWxnLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvVHJhbnNwb3NlLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvUGxhaW5PYmplY3RCYXNlLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvRGVuc2VDb2VmZnNCYXNlLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvTWFwQmFzZS5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL0RlbnNlQmFzZS5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9TVkQvU1ZEQmFzZS5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Ib3VzZWhvbGRlci9Ib3VzZWhvbGRlclNlcXVlbmNlLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL1FSL0NvbFBpdkhvdXNlaG9sZGVyUVIuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvU1ZEL0phY29iaVNWRC5oAEF1ZwB0ZXJtaW5hdGluZwBiYXNpY19zdHJpbmcAaGFtbWluZwBpbmYAVHJ5aW5nIHRvIGNvbm5lY3QgYW4gZWxlbWVudCB0byBpdHNlbGYAJS4wTGYAJUxmAHJlc2l6ZQB0cnVlAFR1ZQBjb21wdXRlAGxlYXJuaW5nX3JhdGUAbmVnYXRpdmVfc2FtcGxlX3JhdGUAYWxsb2NhdGUAZmFsc2UATWFwQmFzZQBKdW5lAG5vbmUAY29zaW5lAHZwdHJlZQBkaWNlAGphY2NhcmQAa25uX21ldGhvZABpbml0aWFsaXplX21ldGhvZABMYWJlbCBub3QgZm91bmQAbm5kACUwKmxsZAAlKmxsZAArJWxsZAAlKy40bGQAcmVzaXplX2lmX2FsbG93ZWQAZGlzdGFuY2UtYmFzZWQgc2VhcmNoZXMgbm90IHN1cHBvcnRlZABsb2NhbGUgbm90IHN1cHBvcnRlZABUaGUgcmVxdWVzdGVkIHRvIHVuZGVsZXRlIGVsZW1lbnQgaXMgbm90IGRlbGV0ZWQAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAHRocmVhZCBjb25zdHJ1Y3RvciBmYWlsZWQAX190aHJlYWRfc3BlY2lmaWNfcHRyIGNvbnN0cnVjdGlvbiBmYWlsZWQAdGhyZWFkOjpqb2luIGZhaWxlZABtdXRleCBsb2NrIGZhaWxlZABjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FKSBmYWlsZWQAIHVwZGF0ZXMgYXBwbGllZABubmRlc2NlbnRfc2VlZABXZWQAc3ByZWFkACVZLSVtLSVkAHN0ZDo6YmFkX2FsbG9jAFNob3VsZCBiZSBub3QgYmUgbW9yZSB0aGFuIE1fIGNhbmRpZGF0ZXMgcmV0dXJuZWQgYnkgdGhlIGhldXJpc3RpYwBJbnZhbGlkIG1ldHJpYwBEZWMAd2IAcmIARmViAGFiAHcrYgByK2IAYStiAHJ3YQBvcGVyYXRvcltdAFsAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgAbWF0cml4VgBob3VzZWhvbGRlclYAbWF0cml4VQBob3VzZWhvbGRlclUAJUg6JU06JVMAbWF0cml4UVIAaG91c2Vob2xkZXJRAE5BTgBQTQBBTQAlSDolTQBMQ19BTEwAQVNDSUkATEFORwBJTkYAQwBjYXRjaGluZyBhIGNsYXNzIHdpdGhvdXQgYW4gb2JqZWN0PwA+AHRyZWVfaW5pdD0AY3NyX2RhdGE9Q1NSTWF0cml4PGZsb2F0PihuX3Jvd3M9AGRhdGE9TWF0cml4PGZsb2F0PihuX3Jvd3M9AG5fbmVpZ2hib3JzPQBuX2l0ZXJzPQAsIG5fY29scz0AbWF4X2NhbmRpZGF0ZXM9AGFuZ3VsYXJfdHJlZXM9AG5fdHJlZXM9AG5fdGhyZWFkcz0AcHJ1bmluZ19kZWdyZWVfbXVsdGlwbGllcj0AYWxnb3JpdGhtPQBsZWFmX3NpemU9AGlzX3NwYXJzZT0AdmVyYm9zZT0Ac2VlZD0AcF9tZXRyaWM9AHBydW5pbmdfcHJvYj0AZGVsdGE9ADAxMjM0NTY3ODkAQy5VVEYtOABpbmNyPT0xACgoU2l6ZUF0Q29tcGlsZVRpbWUgPT0gRHluYW1pYyAmJiAoTWF4U2l6ZUF0Q29tcGlsZVRpbWU9PUR5bmFtaWMgfHwgc2l6ZTw9TWF4U2l6ZUF0Q29tcGlsZVRpbWUpKSB8fCBTaXplQXRDb21waWxlVGltZSA9PSBzaXplKSAmJiBzaXplPj0wAHJvd3MgPj0gMCAmJiBjb2xzID49IDAAdmVjU2l6ZSA+PSAwAGlkeDEgPj0gMABpZHgwID49IDAAd2FybmluZzogTSBwYXJhbWV0ZXIgZXhjZWVkcyAxMDAwMCB3aGljaCBtYXkgbGVhZCB0byBhZHZlcnNlIGVmZmVjdHMuACBlZGdlcyBmb3IgdGhlIHNlYXJjaCBncmFwaC4AICAgICAgICAgQ2FwIHRvIDEwMDAwIHdpbGwgYmUgYXBwbGllZCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHByb2Nlc3NpbmcuAE5OIGRlc2NlbnQgZG9uZS4AVGhlIG1vZGVsIHdhcyB0cmFpbmVkIHVzaW5nIGEgc3BhcnNlIG1hdHJpeC4gQXBwbGljYXRpb25zIHVzaW5nIGEgZGVuc2UgbWF0cml4IGFyZSBub3Qgc3VwcG9ydGVkLgBDYW4ndCB1c2UgYWRkUG9pbnQgdG8gdXBkYXRlIGRlbGV0ZWQgZWxlbWVudHMgaWYgcmVwbGFjZW1lbnQgb2YgZGVsZXRlZCBlbGVtZW50cyBpcyBlbmFibGVkLgAtAHcrAHIrAGErAHJvd3MgPj0gMCAmJiAoUm93c0F0Q29tcGlsZVRpbWUgPT0gRHluYW1pYyB8fCBSb3dzQXRDb21waWxlVGltZSA9PSByb3dzKSAmJiBjb2xzID49IDAgJiYgKENvbHNBdENvbXBpbGVUaW1lID09IER5bmFtaWMgfHwgQ29sc0F0Q29tcGlsZVRpbWUgPT0gY29scykAKG51bGwpACgoIVBhbmVsTW9kZSkgJiYgc3RyaWRlPT0wICYmIG9mZnNldD09MCkgfHwgKFBhbmVsTW9kZSAmJiBzdHJpZGU+PWRlcHRoICYmIG9mZnNldDw9c3RyaWRlKQAoZGF0YVB0ciA9PSAwKSB8fCAoIHJvd3MgPj0gMCAmJiAoUm93c0F0Q29tcGlsZVRpbWUgPT0gRHluYW1pYyB8fCBSb3dzQXRDb21waWxlVGltZSA9PSByb3dzKSAmJiBjb2xzID49IDAgJiYgKENvbHNBdENvbXBpbGVUaW1lID09IER5bmFtaWMgfHwgQ29sc0F0Q29tcGlsZVRpbWUgPT0gY29scykpAChpPj0wKSAmJiAoICgoQmxvY2tSb3dzPT0xKSAmJiAoQmxvY2tDb2xzPT1YcHJUeXBlOjpDb2xzQXRDb21waWxlVGltZSkgJiYgaTx4cHIucm93cygpKSB8fCgoQmxvY2tSb3dzPT1YcHJUeXBlOjpSb3dzQXRDb21waWxlVGltZSkgJiYgKEJsb2NrQ29scz09MSkgJiYgaTx4cHIuY29scygpKSkAY3VycmVudF9ncmFwaC5uaGVhcHMoKSA9PSBkYXRhLm5yb3dzKCkAYV9pbmRleCA8PSBtX21hdHJpeC5jb2xzKCkgJiYgLWFfaW5kZXggPD0gbV9tYXRyaXgucm93cygpAGRhdGEubnJvd3MoKSA9PSBuZXdfY2FuZGlkYXRlX25laWdoYm9ycy5uaGVhcHMoKQBkYXRhLm5yb3dzKCkgPT0gb2xkX2NhbmRpZGF0ZV9uZWlnaGJvcnMubmhlYXBzKCkAZHN0LnJvd3MoKT09YV9saHMucm93cygpICYmIGRzdC5jb2xzKCk9PWFfcmhzLmNvbHMoKQBhTGhzLnJvd3MoKSA9PSBhUmhzLnJvd3MoKSAmJiBhTGhzLmNvbHMoKSA9PSBhUmhzLmNvbHMoKQBkc3Qucm93cygpID09IHNyYy5yb3dzKCkgJiYgZHN0LmNvbHMoKSA9PSBzcmMuY29scygpAHJvdyA+PSAwICYmIHJvdyA8IHJvd3MoKSAmJiBjb2wgPj0gMCAmJiBjb2wgPCBjb2xzKCkAb3BlcmF0b3IoKQBpPj0wICYmIGo+PTAgJiYgaTxzaXplKCkgJiYgajxzaXplKCkAc2l6ZSgpID09IG90aGVyLnNpemUoKQBpbmRleCA+PSAwICYmIGluZGV4IDwgc2l6ZSgpACUAdGhpcy0+cm93cygpPjAgJiYgdGhpcy0+Y29scygpPjAgJiYgInlvdSBhcmUgdXNpbmcgYW4gZW1wdHkgbWF0cml4IgBsaHMuY29scygpID09IHJocy5yb3dzKCkgJiYgImludmFsaWQgbWF0cml4IHByb2R1Y3QiICYmICJpZiB5b3Ugd2FudGVkIGEgY29lZmYtd2lzZSBvciBhIGRvdCBwcm9kdWN0IHVzZSB0aGUgcmVzcGVjdGl2ZSBleHBsaWNpdCBmdW5jdGlvbnMiACggKChpbnRlcm5hbDo6VUludFB0cihtX2RhdGEpICUgaW50ZXJuYWw6OnRyYWl0czxEZXJpdmVkPjo6QWxpZ25tZW50KSA9PSAwKSB8fCAoY29scygpICogcm93cygpICogbWluSW5uZXJTdHJpZGUgKiBzaXplb2YoU2NhbGFyKSkgPCBpbnRlcm5hbDo6dHJhaXRzPERlcml2ZWQ+OjpBbGlnbm1lbnQgKSAmJiAiZGF0YSBpcyBub3QgYWxpZ25lZCIAIShtX2NvbXB1dGVGdWxsViAmJiBtX2NvbXB1dGVUaGluVikgJiYgIlNWREJhc2U6IHlvdSBjYW4ndCBhc2sgZm9yIGJvdGggZnVsbCBhbmQgdGhpbiBWIgAhKG1fY29tcHV0ZUZ1bGxWICYmIG1fY29tcHV0ZVRoaW5WKSAmJiAiSmFjb2JpU1ZEOiB5b3UgY2FuJ3QgYXNrIGZvciBib3RoIGZ1bGwgYW5kIHRoaW4gViIAIShtX2NvbXB1dGVGdWxsVSAmJiBtX2NvbXB1dGVUaGluVSkgJiYgIlNWREJhc2U6IHlvdSBjYW4ndCBhc2sgZm9yIGJvdGggZnVsbCBhbmQgdGhpbiBVIgAhKG1fY29tcHV0ZUZ1bGxVICYmIG1fY29tcHV0ZVRoaW5VKSAmJiAiSmFjb2JpU1ZEOiB5b3UgY2FuJ3QgYXNrIGZvciBib3RoIGZ1bGwgYW5kIHRoaW4gVSIAY29tcHV0ZVYoKSAmJiAiVGhpcyBTVkQgZGVjb21wb3NpdGlvbiBkaWRuJ3QgY29tcHV0ZSBWLiBEaWQgeW91IGFzayBmb3IgaXQ/IgBjb21wdXRlVSgpICYmICJUaGlzIFNWRCBkZWNvbXBvc2l0aW9uIGRpZG4ndCBjb21wdXRlIFUuIERpZCB5b3UgYXNrIGZvciBpdD8iACghKFJvd3NBdENvbXBpbGVUaW1lIT1EeW5hbWljKSB8fCAocm93cz09Um93c0F0Q29tcGlsZVRpbWUpKSAmJiAoIShDb2xzQXRDb21waWxlVGltZSE9RHluYW1pYykgfHwgKGNvbHM9PUNvbHNBdENvbXBpbGVUaW1lKSkgJiYgKCEoUm93c0F0Q29tcGlsZVRpbWU9PUR5bmFtaWMgJiYgTWF4Um93c0F0Q29tcGlsZVRpbWUhPUR5bmFtaWMpIHx8IChyb3dzPD1NYXhSb3dzQXRDb21waWxlVGltZSkpICYmICghKENvbHNBdENvbXBpbGVUaW1lPT1EeW5hbWljICYmIE1heENvbHNBdENvbXBpbGVUaW1lIT1EeW5hbWljKSB8fCAoY29sczw9TWF4Q29sc0F0Q29tcGlsZVRpbWUpKSAmJiByb3dzPj0wICYmIGNvbHM+PTAgJiYgIkludmFsaWQgc2l6ZXMgd2hlbiByZXNpemluZyBhIG1hdHJpeCBvciBhcnJheS4iAHJvd3MgPj0gY29scyAmJiAiVXBwZXJCaWRpYWdvbmFsaXphdGlvbiBpcyBvbmx5IGZvciBBcmljZXMgc2F0aXNmeWluZyByb3dzPj1jb2xzLiIAcm93cyA9PSB0aGlzLT5yb3dzKCkgJiYgY29scyA9PSB0aGlzLT5jb2xzKCkgJiYgIkRlbnNlQmFzZTo6cmVzaXplKCkgZG9lcyBub3QgYWN0dWFsbHkgYWxsb3cgdG8gcmVzaXplLiIAbV9pc0luaXRpYWxpemVkICYmICJVcHBlckJpZGlhZ29uYWxpemF0aW9uIGlzIG5vdCBpbml0aWFsaXplZC4iAG1faXNJbml0aWFsaXplZCAmJiAiQ29sUGl2SG91c2Vob2xkZXJRUiBpcyBub3QgaW5pdGlhbGl6ZWQuIgBtX2lzSW5pdGlhbGl6ZWQgJiYgIlNWRCBpcyBub3QgaW5pdGlhbGl6ZWQuIgAoIWNoZWNrX3RyYW5zcG9zZV9hbGlhc2luZ19ydW5fdGltZV9zZWxlY3RvciA8dHlwZW5hbWUgRGVyaXZlZDo6U2NhbGFyLGJsYXNfdHJhaXRzPERlcml2ZWQ+OjpJc1RyYW5zcG9zZWQsT3RoZXJEZXJpdmVkPiA6OnJ1bihleHRyYWN0X2RhdGEoZHN0KSwgb3RoZXIpKSAmJiAiYWxpYXNpbmcgZGV0ZWN0ZWQgZHVyaW5nIHRyYW5zcG9zaXRpb24sIHVzZSB0cmFuc3Bvc2VJblBsYWNlKCkgIiAib3IgZXZhbHVhdGUgdGhlIHJocyBpbnRvIGEgdGVtcG9yYXJ5IHVzaW5nIC5ldmFsKCkiAFB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsZWQhAE5OIGRlc2NlbnQgZm9yIABTdG9wcGluZyB0aHJlc2hvbGQgbWV0IC0tIGV4aXRpbmcgYWZ0ZXIgACB0byAATWVyZ2luZyBwcnVuZWQgZ3JhcGggd2l0aCBpdHMgdHJhbnNwb3NlIHJlc3VsdHMgaW4gAEZvcndhcmQgZ3JhcGggcHJ1bmluZyByZWR1Y2VkIGVkZ2VzIGZyb20gAEJ1aWxkaW5nIFJQIGZvcmVzdCB3aXRoIABdIAAlRiAlVCAAICAvICAAICUNACwKACkKACksCgkATk5EZXNjZW50KAoJAAkJAAAAAAAAMCYAAAsAAAAMAAAADQAAAKivAAA8JgAAgCYAAE4xM2tubmNvbGxlX2huc3cxMUhuc3dCdWlsZGVySU44a25uY29sbGUxMlNpbXBsZU1hdHJpeElpaWZFRWZmRUUAAAAAgK8AAIgmAABOOGtubmNvbGxlN0J1aWxkZXJJTlNfMTJTaW1wbGVNYXRyaXhJaWlmRUVmRUUAAAAAAAAA1CYAAA4AAAAPAAAAEAAAABEAAAASAAAAqK8AAOAmAAAIJwAATjEza25uY29sbGVfaG5zdzEySG5zd1ByZWJ1aWx0SWlpZmZFRQAAAICvAAAQJwAATjhrbm5jb2xsZThQcmVidWlsdElpaWZFRQAAAAAAAABIJwAAEwAAABQAAAAVAAAAFgAAABcAAACorwAAVCcAAGgnAABON2huc3dsaWI3TDJTcGFjZUUAAICvAABwJwAATjdobnN3bGliMTRTcGFjZUludGVyZmFjZUlmRUUAAAAAAAAArCcAABgAAAAZAAAAGgAAABsAAAAcAAAAqK8AALgnAADgqwAATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE43aG5zd2xpYjE0U3BhY2VJbnRlcmZhY2VJZkVFTlNfMTBzaGFyZWRfcHRySVMzX0UyN19fc2hhcmVkX3B0cl9kZWZhdWx0X2RlbGV0ZUlTM19TM19FRU5TXzlhbGxvY2F0b3JJUzNfRUVFRQBOU3QzX18yMTBzaGFyZWRfcHRySU43aG5zd2xpYjE0U3BhY2VJbnRlcmZhY2VJZkVFRTI3X19zaGFyZWRfcHRyX2RlZmF1bHRfZGVsZXRlSVMzX1MzX0VFAAAAAAAAAADMKAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAqK8AANgoAACIKQAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWlpOMTNrbm5jb2xsZV9obnN3MTJIbnN3UHJlYnVpbHRJaWlmZkVDMUlOOGtubmNvbGxlMTJTaW1wbGVNYXRyaXhJaWlmRUVFRVJLVF9SS05TMl8xMUhuc3dPcHRpb25zSWlmRUVFTktVbHZFMF9jbEV2RVVsZkVfTlNfOWFsbG9jYXRvcklTSF9FRUZmZkVFRQAAAACArwAAkCkAAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZmZkVFRQAAAICvAAC8KQAAWlpOMTNrbm5jb2xsZV9obnN3MTJIbnN3UHJlYnVpbHRJaWlmZkVDMUlOOGtubmNvbGxlMTJTaW1wbGVNYXRyaXhJaWlmRUVFRVJLVF9SS05TXzExSG5zd09wdGlvbnNJaWZFRUVOS1VsdkUwX2NsRXZFVWxmRV8AAAAAAFQqAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAACorwAAYCoAAIAqAABON2huc3dsaWIxNUhpZXJhcmNoaWNhbE5TV0lmRUUAAICvAACIKgAATjdobnN3bGliMThBbGdvcml0aG1JbnRlcmZhY2VJZkVFAAAAAAAAANAqAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAqK8AANwqAAAEKwAATjEza25uY29sbGVfaG5zdzEySG5zd1NlYXJjaGVySWlpZmZFRQAAAICvAAAMKwAATjhrbm5jb2xsZThTZWFyY2hlcklpZkVFAAAAAAAAAAA8KwAAMwAAADQAAAA1AAAAqK8AAEgrAACAJgAATjE4a25uY29sbGVfbm5kZXNjZW50MTZOTkRlc2NlbnRCdWlsZGVyRQAAAAAAAAAAkCsAADYAAAA3AAAAOAAAADkAAAA6AAAAqK8AAJwrAAAIJwAATjE4a25uY29sbGVfbm5kZXNjZW50MTdOTkRlc2NlbnRQcmVidWlsdEUAAAAAAAAA5CsAABgAAAA7AAAAPAAAAD0AAAA+AAAAqK8AAPArAADgqwAATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE45bm5kZXNjZW50Nk1hdHJpeElmRUVOU18xMHNoYXJlZF9wdHJJUzNfRTI3X19zaGFyZWRfcHRyX2RlZmF1bHRfZGVsZXRlSVMzX1MzX0VFTlNfOWFsbG9jYXRvcklTM19FRUVFAE5TdDNfXzIxMHNoYXJlZF9wdHJJTjlubmRlc2NlbnQ2TWF0cml4SWZFRUUyN19fc2hhcmVkX3B0cl9kZWZhdWx0X2RlbGV0ZUlTM19TM19FRQAAAAAAAOQsAAAYAAAAPwAAAEAAAABBAAAAQgAAAKivAADwLAAA4KsAAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBOOW5uZGVzY2VudDlOTkRlc2NlbnRFTlNfMTBzaGFyZWRfcHRySVMyX0UyN19fc2hhcmVkX3B0cl9kZWZhdWx0X2RlbGV0ZUlTMl9TMl9FRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBOU3QzX18yMTBzaGFyZWRfcHRySU45bm5kZXNjZW50OU5ORGVzY2VudEVFMjdfX3NoYXJlZF9wdHJfZGVmYXVsdF9kZWxldGVJUzJfUzJfRUUAAAAAAADsLQAAQwAAAEQAAABFAAAARgAAADAAAAAxAAAAMgAAAKivAAD4LQAABCsAAE4xOGtubmNvbGxlX25uZGVzY2VudDE3Tk5EZXNjZW50U2VhcmNoZXJFAAAAAAAAADguAABHAAAASAAAAEkAAACorwAARC4AAIAmAABOOGtubmNvbGxlMTNWcHRyZWVCdWlsZGVySTI4SGFsZlNxdWFyZWRFdWNsaWRlYW5EaXN0YW5jZU5TXzEyU2ltcGxlTWF0cml4SWlpZkVFZkVFAAAAAAAAtC4AAEoAAABLAAAATAAAAE0AAABOAAAAqK8AAMAuAAAIJwAATjhrbm5jb2xsZTE0VnB0cmVlUHJlYnVpbHRJMjhIYWxmU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlaWlmZkVFAAAAAAAkLwAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAAKivAAAwLwAABCsAAE44a25uY29sbGUxNFZwdHJlZVNlYXJjaGVySTI4SGFsZlNxdWFyZWRFdWNsaWRlYW5EaXN0YW5jZWlpZmZFRQAAAAAAhC8AAEcAAABWAAAAVwAAAKivAACQLwAAgCYAAE44a25uY29sbGUxM1ZwdHJlZUJ1aWxkZXJJTlNfMTdFdWNsaWRlYW5EaXN0YW5jZUVOU18xMlNpbXBsZU1hdHJpeElpaWZFRWZFRQAAAAAA+C8AAFgAAABZAAAAWgAAAFsAAABcAAAAqK8AAAQwAAAIJwAATjhrbm5jb2xsZTE0VnB0cmVlUHJlYnVpbHRJTlNfMTdFdWNsaWRlYW5EaXN0YW5jZUVpaWZmRUUAAAAAAAAAAGQwAABdAAAAXgAAAF8AAABgAAAAYQAAAGIAAABjAAAAqK8AAHAwAAAEKwAATjhrbm5jb2xsZTE0VnB0cmVlU2VhcmNoZXJJTlNfMTdFdWNsaWRlYW5EaXN0YW5jZUVpaWZmRUUAAAAAAAAAANgwAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAACorwAA5DAAAFgxAABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laMjN1bWFwX2NvbnRleHRfY3JlYXRlX2YzMkUzJF8wTlNfOWFsbG9jYXRvcklTMl9FRUZQTjdobnN3bGliMTRTcGFjZUludGVyZmFjZUlmRUVpRUVFAAAAAICvAABgMQAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRlBON2huc3dsaWIxNFNwYWNlSW50ZXJmYWNlSWZFRWlFRUUAAAAAAAC8MQAAbQAAAG4AAABvAAAAFgAAAHAAAACorwAAyDEAAGgnAAAzMkhOU1dIYWxmU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlSWZFAAAAgK8AAPgxAABaMjN1bWFwX2NvbnRleHRfY3JlYXRlX2YzMkUzJF8wAAAAAAA0MgAAcQAAAHIAAABzAAAAdAAAAHUAAACorwAAQDIAAGQyAAAxMVVNQVBDb250ZXh0SU42dW1hcHBwNlN0YXR1c0lpZkVFRQCArwAAbDIAADE1VU1BUENvbnRleHRCYXNlAAAAAAAAAKwyAABkAAAAdgAAAHcAAAB4AAAAeQAAAHoAAAB7AAAAfAAAAH0AAACorwAAuDIAAFgxAABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laMjJrbm5fY29udGV4dF9jcmVhdGVfZjMyRTMkXzBOU185YWxsb2NhdG9ySVMyX0VFRlBON2huc3dsaWIxNFNwYWNlSW50ZXJmYWNlSWZFRWlFRUUAgK8AADAzAABaMjJrbm5fY29udGV4dF9jcmVhdGVfZjMyRTMkXzAAAAAAAABoMwAAfgAAAH8AAACAAAAAgQAAAKivAAB0MwAAnDMAADEwS05OQ29udGV4dElOOGtubmNvbGxlOFByZWJ1aWx0SWlpZkVFRQCArwAApDMAADE0S05OQ29udGV4dEJhc2UAQcDnAAvXFQMAAAAEAAAABAAAAAYAAACD+aIARE5uAPwpFQDRVycA3TT1AGLbwAA8mZUAQZBDAGNR/gC73qsAt2HFADpuJADSTUIASQbgAAnqLgAcktEA6x3+ACmxHADoPqcA9TWCAES7LgCc6YQAtCZwAEF+XwDWkTkAU4M5AJz0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//+Sv///AAAAAAAAAAD/////////////////////////////////////////////////////////////////AAECAwQFBgcICf////////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wABAgQHAwYFAAAAAAAAAExDX0NUWVBFAAAAAExDX05VTUVSSUMAAExDX1RJTUUAAAAAAExDX0NPTExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAEGQggILQRkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHhggILIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBm4MCCwEMAEGngwILFRMAAAAAEwAAAAAJDAAAAAAADAAADABB1YMCCwEQAEHhgwILFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABBj4QCCwESAEGbhAILHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBB0oQCCw4aAAAAGhoaAAAAAAAACQBBg4UCCwEUAEGPhQILFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBvYUCCwEWAEHJhQILWBUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgAAAACA3igAgMhNAACndgAANJ4AgBLHAICf7gAAfhcBgFxAAYDpZwEAyJABAFW4AS4AQbCGAgvWAlN1bgBNb24AVHVlAFdlZABUaHUARnJpAFNhdABTdW5kYXkATW9uZGF5AFR1ZXNkYXkAV2VkbmVzZGF5AFRodXJzZGF5AEZyaWRheQBTYXR1cmRheQBKYW4ARmViAE1hcgBBcHIATWF5AEp1bgBKdWwAQXVnAFNlcABPY3QATm92AERlYwBKYW51YXJ5AEZlYnJ1YXJ5AE1hcmNoAEFwcmlsAE1heQBKdW5lAEp1bHkAQXVndXN0AFNlcHRlbWJlcgBPY3RvYmVyAE5vdmVtYmVyAERlY2VtYmVyAEFNAFBNACVhICViICVlICVUICVZACVtLyVkLyV5ACVIOiVNOiVTACVJOiVNOiVTICVwAAAAJW0vJWQvJXkAMDEyMzQ1Njc4OQAlYSAlYiAlZSAlVCAlWQAlSDolTTolUwAAAAAAXlt5WV0AXltuTl0AeWVzAG5vAACQhgBBlI0CC/kDAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABaAAAAWwAAAFwAAABdAAAAXgAAAF8AAABgAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAAB7AAAAfAAAAH0AAAB+AAAAfwBBkJUCCwKgjABBpJkCC/kDAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAWwAAAFwAAABdAAAAXgAAAF8AAABgAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4AAABvAAAAcAAAAHEAAAByAAAAcwAAAHQAAAB1AAAAdgAAAHcAAAB4AAAAeQAAAHoAAAB7AAAAfAAAAH0AAAB+AAAAfwBBoKECCzEwMTIzNDU2Nzg5YWJjZGVmQUJDREVGeFgrLXBQaUluTgAlSTolTTolUyAlcCVIOiVNAEHgoQILgQElAAAAbQAAAC8AAAAlAAAAZAAAAC8AAAAlAAAAeQAAACUAAABZAAAALQAAACUAAABtAAAALQAAACUAAABkAAAAJQAAAEkAAAA6AAAAJQAAAE0AAAA6AAAAJQAAAFMAAAAgAAAAJQAAAHAAAAAAAAAAJQAAAEgAAAA6AAAAJQAAAE0AQfCiAgtmJQAAAEgAAAA6AAAAJQAAAE0AAAA6AAAAJQAAAFMAAAAAAAAA0JoAAAgBAAAJAQAACgEAAAAAAAA0mwAACwEAAAwBAAAKAQAADQEAAA4BAAAPAQAAEAEAABEBAAASAQAAEwEAABQBAEHgowIL/QMEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAFAgAABQAAAAUAAAAFAAAABQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAMCAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAABCAQAAQgEAAEIBAABCAQAAQgEAAEIBAABCAQAAQgEAAEIBAABCAQAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAACoBAAAqAQAAKgEAACoBAAAqAQAAKgEAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAMgEAADIBAAAyAQAAMgEAADIBAAAyAQAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAACCAAAAggAAAIIAAACCAAAABABB5KsCC+0CjJoAABUBAAAWAQAACgEAABcBAAAYAQAAGQEAABoBAAAbAQAAHAEAAB0BAAAAAAAAaJsAAB4BAAAfAQAACgEAACABAAAhAQAAIgEAACMBAAAkAQAAAAAAAIybAAAlAQAAJgEAAAoBAAAnAQAAKAEAACkBAAAqAQAAKwEAAHQAAAByAAAAdQAAAGUAAAAAAAAAZgAAAGEAAABsAAAAcwAAAGUAAAAAAAAAJQAAAG0AAAAvAAAAJQAAAGQAAAAvAAAAJQAAAHkAAAAAAAAAJQAAAEgAAAA6AAAAJQAAAE0AAAA6AAAAJQAAAFMAAAAAAAAAJQAAAGEAAAAgAAAAJQAAAGIAAAAgAAAAJQAAAGQAAAAgAAAAJQAAAEgAAAA6AAAAJQAAAE0AAAA6AAAAJQAAAFMAAAAgAAAAJQAAAFkAAAAAAAAAJQAAAEkAAAA6AAAAJQAAAE0AAAA6AAAAJQAAAFMAAAAgAAAAJQAAAHAAQdyuAgv9J2yXAAAsAQAALQEAAAoBAACorwAAeJcAALyrAABOU3QzX18yNmxvY2FsZTVmYWNldEUAAAAAAAAA1JcAACwBAAAuAQAACgEAAC8BAAAwAQAAMQEAADIBAAAzAQAANAEAADUBAAA2AQAANwEAADgBAAA5AQAAOgEAAASwAAD0lwAAAAAAAAIAAABslwAAAgAAAAiYAAACAAAATlN0M19fMjVjdHlwZUl3RUUAAACArwAAEJgAAE5TdDNfXzIxMGN0eXBlX2Jhc2VFAAAAAAAAAABYmAAALAEAADsBAAAKAQAAPAEAAD0BAAA+AQAAPwEAAEABAABBAQAAQgEAAASwAAB4mAAAAAAAAAIAAABslwAAAgAAAJyYAAACAAAATlN0M19fMjdjb2RlY3Z0SWNjMTFfX21ic3RhdGVfdEVFAAAAgK8AAKSYAABOU3QzX18yMTJjb2RlY3Z0X2Jhc2VFAAAAAAAA7JgAACwBAABDAQAACgEAAEQBAABFAQAARgEAAEcBAABIAQAASQEAAEoBAAAEsAAADJkAAAAAAAACAAAAbJcAAAIAAACcmAAAAgAAAE5TdDNfXzI3Y29kZWN2dElEc2MxMV9fbWJzdGF0ZV90RUUAAAAAAABgmQAALAEAAEsBAAAKAQAATAEAAE0BAABOAQAATwEAAFABAABRAQAAUgEAAASwAACAmQAAAAAAAAIAAABslwAAAgAAAJyYAAACAAAATlN0M19fMjdjb2RlY3Z0SURzRHUxMV9fbWJzdGF0ZV90RUUAAAAAANSZAAAsAQAAUwEAAAoBAABUAQAAVQEAAFYBAABXAQAAWAEAAFkBAABaAQAABLAAAPSZAAAAAAAAAgAAAGyXAAACAAAAnJgAAAIAAABOU3QzX18yN2NvZGVjdnRJRGljMTFfX21ic3RhdGVfdEVFAAAAAAAASJoAACwBAABbAQAACgEAAFwBAABdAQAAXgEAAF8BAABgAQAAYQEAAGIBAAAEsAAAaJoAAAAAAAACAAAAbJcAAAIAAACcmAAAAgAAAE5TdDNfXzI3Y29kZWN2dElEaUR1MTFfX21ic3RhdGVfdEVFAASwAACsmgAAAAAAAAIAAABslwAAAgAAAJyYAAACAAAATlN0M19fMjdjb2RlY3Z0SXdjMTFfX21ic3RhdGVfdEVFAAAAqK8AANyaAABslwAATlN0M19fMjZsb2NhbGU1X19pbXBFAAAAqK8AAACbAABslwAATlN0M19fMjdjb2xsYXRlSWNFRQCorwAAIJsAAGyXAABOU3QzX18yN2NvbGxhdGVJd0VFAASwAABUmwAAAAAAAAIAAABslwAAAgAAAAiYAAACAAAATlN0M19fMjVjdHlwZUljRUUAAACorwAAdJsAAGyXAABOU3QzX18yOG51bXB1bmN0SWNFRQAAAACorwAAmJsAAGyXAABOU3QzX18yOG51bXB1bmN0SXdFRQAAAAAAAAAA9JoAAGMBAABkAQAACgEAAGUBAABmAQAAZwEAAAAAAAAUmwAAaAEAAGkBAAAKAQAAagEAAGsBAABsAQAAAAAAADCcAAAsAQAAbQEAAAoBAABuAQAAbwEAAHABAABxAQAAcgEAAHMBAAB0AQAAdQEAAHYBAAB3AQAAeAEAAASwAABQnAAAAAAAAAIAAABslwAAAgAAAJScAAAAAAAATlN0M19fMjdudW1fZ2V0SWNOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQAEsAAArJwAAAAAAAABAAAAxJwAAAAAAABOU3QzX18yOV9fbnVtX2dldEljRUUAAACArwAAzJwAAE5TdDNfXzIxNF9fbnVtX2dldF9iYXNlRQAAAAAAAAAAKJ0AACwBAAB5AQAACgEAAHoBAAB7AQAAfAEAAH0BAAB+AQAAfwEAAIABAACBAQAAggEAAIMBAACEAQAABLAAAEidAAAAAAAAAgAAAGyXAAACAAAAjJ0AAAAAAABOU3QzX18yN251bV9nZXRJd05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAASwAACknQAAAAAAAAEAAADEnAAAAAAAAE5TdDNfXzI5X19udW1fZ2V0SXdFRQAAAAAAAADwnQAALAEAAIUBAAAKAQAAhgEAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAI0BAAAEsAAAEJ4AAAAAAAACAAAAbJcAAAIAAABUngAAAAAAAE5TdDNfXzI3bnVtX3B1dEljTlNfMTlvc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUABLAAAGyeAAAAAAAAAQAAAISeAAAAAAAATlN0M19fMjlfX251bV9wdXRJY0VFAAAAgK8AAIyeAABOU3QzX18yMTRfX251bV9wdXRfYmFzZUUAAAAAAAAAANyeAAAsAQAAjgEAAAoBAACPAQAAkAEAAJEBAACSAQAAkwEAAJQBAACVAQAAlgEAAASwAAD8ngAAAAAAAAIAAABslwAAAgAAAECfAAAAAAAATlN0M19fMjdudW1fcHV0SXdOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQAEsAAAWJ8AAAAAAAABAAAAhJ4AAAAAAABOU3QzX18yOV9fbnVtX3B1dEl3RUUAAAAAAAAAxJ8AAJcBAACYAQAACgEAAJkBAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAAD4////xJ8AAKABAAChAQAAogEAAKMBAACkAQAApQEAAKYBAAAEsAAA7J8AAAAAAAADAAAAbJcAAAIAAAA0oAAAAgAAAFCgAAAACAAATlN0M19fMjh0aW1lX2dldEljTlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUAAAAAgK8AADygAABOU3QzX18yOXRpbWVfYmFzZUUAAICvAABYoAAATlN0M19fMjIwX190aW1lX2dldF9jX3N0b3JhZ2VJY0VFAAAAAAAAANCgAACnAQAAqAEAAAoBAACpAQAAqgEAAKsBAACsAQAArQEAAK4BAACvAQAA+P///9CgAACwAQAAsQEAALIBAACzAQAAtAEAALUBAAC2AQAABLAAAPigAAAAAAAAAwAAAGyXAAACAAAANKAAAAIAAABAoQAAAAgAAE5TdDNfXzI4dGltZV9nZXRJd05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAAAAAICvAABIoQAATlN0M19fMjIwX190aW1lX2dldF9jX3N0b3JhZ2VJd0VFAAAAAAAAAIShAAC3AQAAuAEAAAoBAAC5AQAABLAAAKShAAAAAAAAAgAAAGyXAAACAAAA7KEAAAAIAABOU3QzX18yOHRpbWVfcHV0SWNOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQAAAACArwAA9KEAAE5TdDNfXzIxMF9fdGltZV9wdXRFAAAAAAAAAAAkogAAugEAALsBAAAKAQAAvAEAAASwAABEogAAAAAAAAIAAABslwAAAgAAAOyhAAAACAAATlN0M19fMjh0aW1lX3B1dEl3TlNfMTlvc3RyZWFtYnVmX2l0ZXJhdG9ySXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFRUUAAAAAAAAAAMSiAAAsAQAAvQEAAAoBAAC+AQAAvwEAAMABAADBAQAAwgEAAMMBAADEAQAAxQEAAMYBAAAEsAAA5KIAAAAAAAACAAAAbJcAAAIAAAAAowAAAgAAAE5TdDNfXzIxMG1vbmV5cHVuY3RJY0xiMEVFRQCArwAACKMAAE5TdDNfXzIxMG1vbmV5X2Jhc2VFAAAAAAAAAABYowAALAEAAMcBAAAKAQAAyAEAAMkBAADKAQAAywEAAMwBAADNAQAAzgEAAM8BAADQAQAABLAAAHijAAAAAAAAAgAAAGyXAAACAAAAAKMAAAIAAABOU3QzX18yMTBtb25leXB1bmN0SWNMYjFFRUUAAAAAAMyjAAAsAQAA0QEAAAoBAADSAQAA0wEAANQBAADVAQAA1gEAANcBAADYAQAA2QEAANoBAAAEsAAA7KMAAAAAAAACAAAAbJcAAAIAAAAAowAAAgAAAE5TdDNfXzIxMG1vbmV5cHVuY3RJd0xiMEVFRQAAAAAAQKQAACwBAADbAQAACgEAANwBAADdAQAA3gEAAN8BAADgAQAA4QEAAOIBAADjAQAA5AEAAASwAABgpAAAAAAAAAIAAABslwAAAgAAAACjAAACAAAATlN0M19fMjEwbW9uZXlwdW5jdEl3TGIxRUVFAAAAAACYpAAALAEAAOUBAAAKAQAA5gEAAOcBAAAEsAAAuKQAAAAAAAACAAAAbJcAAAIAAAAApQAAAAAAAE5TdDNfXzI5bW9uZXlfZ2V0SWNOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQAAAICvAAAIpQAATlN0M19fMjExX19tb25leV9nZXRJY0VFAAAAAAAAAABApQAALAEAAOgBAAAKAQAA6QEAAOoBAAAEsAAAYKUAAAAAAAACAAAAbJcAAAIAAACopQAAAAAAAE5TdDNfXzI5bW9uZXlfZ2V0SXdOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQAAAICvAACwpQAATlN0M19fMjExX19tb25leV9nZXRJd0VFAAAAAAAAAADopQAALAEAAOsBAAAKAQAA7AEAAO0BAAAEsAAACKYAAAAAAAACAAAAbJcAAAIAAABQpgAAAAAAAE5TdDNfXzI5bW9uZXlfcHV0SWNOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQAAAICvAABYpgAATlN0M19fMjExX19tb25leV9wdXRJY0VFAAAAAAAAAACQpgAALAEAAO4BAAAKAQAA7wEAAPABAAAEsAAAsKYAAAAAAAACAAAAbJcAAAIAAAD4pgAAAAAAAE5TdDNfXzI5bW9uZXlfcHV0SXdOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQAAAICvAAAApwAATlN0M19fMjExX19tb25leV9wdXRJd0VFAAAAAAAAAAA8pwAALAEAAPEBAAAKAQAA8gEAAPMBAAD0AQAABLAAAFynAAAAAAAAAgAAAGyXAAACAAAAdKcAAAIAAABOU3QzX18yOG1lc3NhZ2VzSWNFRQAAAACArwAAfKcAAE5TdDNfXzIxM21lc3NhZ2VzX2Jhc2VFAAAAAAC0pwAALAEAAPUBAAAKAQAA9gEAAPcBAAD4AQAABLAAANSnAAAAAAAAAgAAAGyXAAACAAAAdKcAAAIAAABOU3QzX18yOG1lc3NhZ2VzSXdFRQAAAABTAAAAdQAAAG4AAABkAAAAYQAAAHkAAAAAAAAATQAAAG8AAABuAAAAZAAAAGEAAAB5AAAAAAAAAFQAAAB1AAAAZQAAAHMAAABkAAAAYQAAAHkAAAAAAAAAVwAAAGUAAABkAAAAbgAAAGUAAABzAAAAZAAAAGEAAAB5AAAAAAAAAFQAAABoAAAAdQAAAHIAAABzAAAAZAAAAGEAAAB5AAAAAAAAAEYAAAByAAAAaQAAAGQAAABhAAAAeQAAAAAAAABTAAAAYQAAAHQAAAB1AAAAcgAAAGQAAABhAAAAeQAAAAAAAABTAAAAdQAAAG4AAAAAAAAATQAAAG8AAABuAAAAAAAAAFQAAAB1AAAAZQAAAAAAAABXAAAAZQAAAGQAAAAAAAAAVAAAAGgAAAB1AAAAAAAAAEYAAAByAAAAaQAAAAAAAABTAAAAYQAAAHQAAAAAAAAASgAAAGEAAABuAAAAdQAAAGEAAAByAAAAeQAAAAAAAABGAAAAZQAAAGIAAAByAAAAdQAAAGEAAAByAAAAeQAAAAAAAABNAAAAYQAAAHIAAABjAAAAaAAAAAAAAABBAAAAcAAAAHIAAABpAAAAbAAAAAAAAABNAAAAYQAAAHkAAAAAAAAASgAAAHUAAABuAAAAZQAAAAAAAABKAAAAdQAAAGwAAAB5AAAAAAAAAEEAAAB1AAAAZwAAAHUAAABzAAAAdAAAAAAAAABTAAAAZQAAAHAAAAB0AAAAZQAAAG0AAABiAAAAZQAAAHIAAAAAAAAATwAAAGMAAAB0AAAAbwAAAGIAAABlAAAAcgAAAAAAAABOAAAAbwAAAHYAAABlAAAAbQAAAGIAAABlAAAAcgAAAAAAAABEAAAAZQAAAGMAAABlAAAAbQAAAGIAAABlAAAAcgAAAAAAAABKAAAAYQAAAG4AAAAAAAAARgAAAGUAAABiAAAAAAAAAE0AAABhAAAAcgAAAAAAAABBAAAAcAAAAHIAAAAAAAAASgAAAHUAAABuAAAAAAAAAEoAAAB1AAAAbAAAAAAAAABBAAAAdQAAAGcAAAAAAAAAUwAAAGUAAABwAAAAAAAAAE8AAABjAAAAdAAAAAAAAABOAAAAbwAAAHYAAAAAAAAARAAAAGUAAABjAAAAAAAAAEEAAABNAAAAAAAAAFAAAABNAEHk1gILsQFQoAAAoAEAAKEBAACiAQAAowEAAKQBAAClAQAApgEAAAAAAABAoQAAsAEAALEBAACyAQAAswEAALQBAAC1AQAAtgEAAAAAAAC8qwAAGAAAAPkBAAD6AQAAgK8AAMSrAABOU3QzX18yMTRfX3NoYXJlZF9jb3VudEUAAAAABLAAAPirAAAAAAAAAQAAALyrAAAAAAAATlN0M19fMjE5X19zaGFyZWRfd2Vha19jb3VudEUAQaTYAgvmAgoAAABkAAAA6AMAABAnAACghgEAQEIPAICWmAAA4fUFAMqaOwAAAAAAAAAAMDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTkAAAAAAAAAAAL/AARkACAAAAT//xAAAQABAAEA//8B/wH//////wH/Af8B/wH/Af8B/wH/Af//////Cv8gAP//A/8B/wT/HgAAAQX//////2MAAAhjAOgDAgAAAP//////AAAAAf8B//////////////8AQZnbAgsBBABBptsCC0QB/wH//////wABIAAEAIAAAAj//wH/Af////////8B/wb/B/8I/wn//////7wCvAIBAP//AQABAP//AAD//////////wBB+tsCCwEUAEGa3AILHv//AQAK////////////Af8B/wAAAAAAAAH/Af8B/wBBytwCC0gB/wAAAAAAAAH/Af8BAAAAAQAAAAH//////wAAAAAB////AAAAAP////////////8oAAr//////wEACv////8A//////////8AQfbdAgveBQH/Af///wEA//////////////////8K//////8M/w3/AACorwAAJK8AAMCxAABOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQAAAACorwAAVK8AABivAABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAAAAAAAASK8AAP0BAAD+AQAA/wEAAAACAAABAgAAAgIAAAMCAAAEAgAAAAAAAMivAAD9AQAABQIAAP8BAAAAAgAAAQIAAAYCAAAHAgAACAIAAKivAADUrwAASK8AAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQAAAAAAAAAAJLAAAP0BAAAJAgAA/wEAAAACAAABAgAACgIAAAsCAAAMAgAAqK8AADCwAABIrwAATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQAAAAAAAACssAAAAgAAAA0CAAAOAgAAAAAAAMiwAAACAAAADwIAABACAAAAAAAAlLAAAAIAAAARAgAAEgIAAICvAACcsAAAU3Q5ZXhjZXB0aW9uAAAAAKivAAC4sAAAlLAAAFN0OWJhZF9hbGxvYwAAAACorwAA1LAAAKywAABTdDIwYmFkX2FycmF5X25ld19sZW5ndGgAAAAAAAAAABixAAABAAAAEwIAABQCAAAAAAAAoLEAAAQAAAAVAgAAFgIAAKivAAAksQAAlLAAAFN0MTFsb2dpY19lcnJvcgAAAAAASLEAAAEAAAAXAgAAFAIAAKivAABUsQAAGLEAAFN0MTZpbnZhbGlkX2FyZ3VtZW50AAAAAAAAAACAsQAAAQAAABgCAAAUAgAAqK8AAIyxAAAYsQAAU3QxMmxlbmd0aF9lcnJvcgAAAACorwAArLEAAJSwAABTdDEzcnVudGltZV9lcnJvcgAAAICvAADIsQAAU3Q5dHlwZV9pbmZvAEHZ4wILCM4BAAAAAAAJAEHs4wILAYcAQYDkAgsShgAAAAAAAACEAAAAKLkAAAAEAEGs5AILBP////8AQfDkAgsBBQBB/OQCCwHcAEGU5QILDoUAAADdAAAAOL0AAAAEAEGs5QILAQEAQbzlAgsF/////woAQYDmAgsJcLIAAAAAAAAFAEGU5gILAYcAQazmAgsKhQAAAIQAAABAwQBBxOYCCwECAEHU5gILCP//////////AEGY5wILHgizAAAlbS8lZC8leQAAAAglSDolTTolUwAAAAj8AQ==";function ge(l){if(c)return new Uint8Array(c);var S=gA(l);if(S)return S;throw"both async and sync fetching of the wasm failed"}async function hA(l){return ge(l)}async function j(l,S){try{var K=await hA(l),O=await WebAssembly.instantiate(K,S);return O}catch(iA){d(`failed to asynchronously prepare wasm: ${iA}`),RA(iA)}}async function dA(l,S,K){return j(S,K)}function $(){return{a:CI}}async function fA(){function l(aA,uA){return We=aA.exports,F=We.r,x(),q(We.s),xA(),We}EA();function S(aA){return l(aA.instance)}var K=$();if(I.instantiateWasm)try{return I.instantiateWasm(K,l)}catch(aA){d(`Module.instantiateWasm callback failed with error: ${aA}`),t(aA)}try{var O=await dA(c,YA,K),iA=S(O);return iA}catch(aA){return t(aA),Promise.reject(aA)}}var FA=l=>{for(;l.length>0;)l.shift()(I)};I.noExitRuntime;var LA=typeof TextDecoder<"u"?new TextDecoder:void 0,GA=(l,S=0,K=NaN)=>{for(var O=S+K,iA=S;l[iA]&&!(iA>=O);)++iA;if(iA-S>16&&l.buffer&&LA)return LA.decode(l.subarray(S,iA));for(var aA="";S>10,56320|BA&1023)}}return aA},KA=(l,S)=>l?GA(h,l,S):"",vA=(l,S,K,O)=>RA(`Assertion failed: ${KA(l)}, at: `+[S?KA(S):"unknown filename",K,O?KA(O):"unknown function"]);class jA{constructor(S){this.excPtr=S,this.ptr=S-24}set_type(S){y[this.ptr+4>>2]=S}get_type(){return y[this.ptr+4>>2]}set_destructor(S){y[this.ptr+8>>2]=S}get_destructor(){return y[this.ptr+8>>2]}set_caught(S){S=S?1:0,u[this.ptr+12]=S}get_caught(){return u[this.ptr+12]!=0}set_rethrown(S){S=S?1:0,u[this.ptr+13]=S}get_rethrown(){return u[this.ptr+13]!=0}init(S,K){this.set_adjusted_ptr(0),this.set_type(S),this.set_destructor(K)}set_adjusted_ptr(S){y[this.ptr+16>>2]=S}get_adjusted_ptr(){return y[this.ptr+16>>2]}}var Ce=0,Ie=(l,S,K)=>{var O=new jA(l);throw O.init(S,K),Ce=l,Ce},JA=()=>{var l=w[+te.varargs>>2];return te.varargs+=4,l},XA=JA,PA={isAbs:l=>l.charAt(0)==="/",splitPath:l=>{var S=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return S.exec(l).slice(1)},normalizeArray:(l,S)=>{for(var K=0,O=l.length-1;O>=0;O--){var iA=l[O];iA==="."?l.splice(O,1):iA===".."?(l.splice(O,1),K++):K&&(l.splice(O,1),K--)}if(S)for(;K;K--)l.unshift("..");return l},normalize:l=>{var S=PA.isAbs(l),K=l.substr(-1)==="/";return l=PA.normalizeArray(l.split("/").filter(O=>!!O),!S).join("/"),!l&&!S&&(l="."),l&&K&&(l+="/"),(S?"/":"")+l},dirname:l=>{var S=PA.splitPath(l),K=S[0],O=S[1];return!K&&!O?".":(O&&(O=O.substr(0,O.length-1)),K+O)},basename:l=>l&&l.match(/([^\/]+|\/)\/*$/)[1],join:(...l)=>PA.normalize(l.join("/")),join2:(l,S)=>PA.normalize(l+"/"+S)},ie=()=>l=>crypto.getRandomValues(l),he=l=>{(he=ie())(l)},Qe={resolve:(...l)=>{for(var S="",K=!1,O=l.length-1;O>=-1&&!K;O--){var iA=O>=0?l[O]:k.cwd();if(typeof iA!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!iA)return"";S=iA+"/"+S,K=PA.isAbs(iA)}return S=PA.normalizeArray(S.split("/").filter(aA=>!!aA),!K).join("/"),(K?"/":"")+S||"."},relative:(l,S)=>{l=Qe.resolve(l).substr(1),S=Qe.resolve(S).substr(1);function K(BA){for(var N=0;N=0&&BA[P]==="";P--);return N>P?[]:BA.slice(N,P-N+1)}for(var O=K(l.split("/")),iA=K(S.split("/")),aA=Math.min(O.length,iA.length),uA=aA,SA=0;SA{for(var S=0,K=0;K=55296&&O<=57343?(S+=4,++K):S+=3}return S},Se=(l,S,K,O)=>{if(!(O>0))return 0;for(var iA=K,aA=K+O-1,uA=0;uA=55296&&SA<=57343){var se=l.charCodeAt(++uA);SA=65536+((SA&1023)<<10)|se&1023}if(SA<=127){if(K>=aA)break;S[K++]=SA}else if(SA<=2047){if(K+1>=aA)break;S[K++]=192|SA>>6,S[K++]=128|SA&63}else if(SA<=65535){if(K+2>=aA)break;S[K++]=224|SA>>12,S[K++]=128|SA>>6&63,S[K++]=128|SA&63}else{if(K+3>=aA)break;S[K++]=240|SA>>18,S[K++]=128|SA>>12&63,S[K++]=128|SA>>6&63,S[K++]=128|SA&63}}return S[K]=0,K-iA};function Ag(l,S,K){var O=ae(l)+1,iA=new Array(O),aA=Se(l,iA,0,iA.length);return iA.length=aA,iA}var Ye=()=>{if(!bA.length){var l=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(l=window.prompt("Input: "),l!==null&&(l+=` +`)),!l)return null;bA=Ag(l)}return bA.shift()},gg={ttys:[],init(){},shutdown(){},register(l,S){gg.ttys[l]={input:[],output:[],ops:S},k.registerDevice(l,gg.stream_ops)},stream_ops:{open(l){var S=gg.ttys[l.node.rdev];if(!S)throw new k.ErrnoError(43);l.tty=S,l.seekable=!1},close(l){l.tty.ops.fsync(l.tty)},fsync(l){l.tty.ops.fsync(l.tty)},read(l,S,K,O,iA){if(!l.tty||!l.tty.ops.get_char)throw new k.ErrnoError(60);for(var aA=0,uA=0;uA0&&(a(GA(l.output)),l.output=[])},ioctl_tcgets(l){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(l,S,K){return 0},ioctl_tiocgwinsz(l){return[24,80]}},default_tty1_ops:{put_char(l,S){S===null||S===10?(d(GA(l.output)),l.output=[]):S!=0&&l.output.push(S)},fsync(l){l.output&&l.output.length>0&&(d(GA(l.output)),l.output=[])}}},Mg=(l,S)=>Math.ceil(l/S)*S,Fe=l=>{RA()},ye={ops_table:null,mount(l){return ye.createNode(null,"/",16895,0)},createNode(l,S,K,O){if(k.isBlkdev(K)||k.isFIFO(K))throw new k.ErrnoError(63);ye.ops_table||={dir:{node:{getattr:ye.node_ops.getattr,setattr:ye.node_ops.setattr,lookup:ye.node_ops.lookup,mknod:ye.node_ops.mknod,rename:ye.node_ops.rename,unlink:ye.node_ops.unlink,rmdir:ye.node_ops.rmdir,readdir:ye.node_ops.readdir,symlink:ye.node_ops.symlink},stream:{llseek:ye.stream_ops.llseek}},file:{node:{getattr:ye.node_ops.getattr,setattr:ye.node_ops.setattr},stream:{llseek:ye.stream_ops.llseek,read:ye.stream_ops.read,write:ye.stream_ops.write,allocate:ye.stream_ops.allocate,mmap:ye.stream_ops.mmap,msync:ye.stream_ops.msync}},link:{node:{getattr:ye.node_ops.getattr,setattr:ye.node_ops.setattr,readlink:ye.node_ops.readlink},stream:{}},chrdev:{node:{getattr:ye.node_ops.getattr,setattr:ye.node_ops.setattr},stream:k.chrdev_stream_ops}};var iA=k.createNode(l,S,K,O);return k.isDir(iA.mode)?(iA.node_ops=ye.ops_table.dir.node,iA.stream_ops=ye.ops_table.dir.stream,iA.contents={}):k.isFile(iA.mode)?(iA.node_ops=ye.ops_table.file.node,iA.stream_ops=ye.ops_table.file.stream,iA.usedBytes=0,iA.contents=null):k.isLink(iA.mode)?(iA.node_ops=ye.ops_table.link.node,iA.stream_ops=ye.ops_table.link.stream):k.isChrdev(iA.mode)&&(iA.node_ops=ye.ops_table.chrdev.node,iA.stream_ops=ye.ops_table.chrdev.stream),iA.atime=iA.mtime=iA.ctime=Date.now(),l&&(l.contents[S]=iA,l.atime=l.mtime=l.ctime=iA.atime),iA},getFileDataAsTypedArray(l){return l.contents?l.contents.subarray?l.contents.subarray(0,l.usedBytes):new Uint8Array(l.contents):new Uint8Array(0)},expandFileStorage(l,S){var K=l.contents?l.contents.length:0;if(!(K>=S)){var O=1024*1024;S=Math.max(S,K*(K>>0),K!=0&&(S=Math.max(S,256));var iA=l.contents;l.contents=new Uint8Array(S),l.usedBytes>0&&l.contents.set(iA.subarray(0,l.usedBytes),0)}},resizeFileStorage(l,S){if(l.usedBytes!=S)if(S==0)l.contents=null,l.usedBytes=0;else{var K=l.contents;l.contents=new Uint8Array(S),K&&l.contents.set(K.subarray(0,Math.min(S,l.usedBytes))),l.usedBytes=S}},node_ops:{getattr(l){var S={};return S.dev=k.isChrdev(l.mode)?l.id:1,S.ino=l.id,S.mode=l.mode,S.nlink=1,S.uid=0,S.gid=0,S.rdev=l.rdev,k.isDir(l.mode)?S.size=4096:k.isFile(l.mode)?S.size=l.usedBytes:k.isLink(l.mode)?S.size=l.link.length:S.size=0,S.atime=new Date(l.atime),S.mtime=new Date(l.mtime),S.ctime=new Date(l.ctime),S.blksize=4096,S.blocks=Math.ceil(S.size/S.blksize),S},setattr(l,S){for(const K of["mode","atime","mtime","ctime"])S[K]!=null&&(l[K]=S[K]);S.size!==void 0&&ye.resizeFileStorage(l,S.size)},lookup(l,S){throw ye.doesNotExistError},mknod(l,S,K,O){return ye.createNode(l,S,K,O)},rename(l,S,K){var O;try{O=k.lookupNode(S,K)}catch{}if(O){if(k.isDir(l.mode))for(var iA in O.contents)throw new k.ErrnoError(55);k.hashRemoveNode(O)}delete l.parent.contents[l.name],S.contents[K]=l,l.name=K,S.ctime=S.mtime=l.parent.ctime=l.parent.mtime=Date.now()},unlink(l,S){delete l.contents[S],l.ctime=l.mtime=Date.now()},rmdir(l,S){var K=k.lookupNode(l,S);for(var O in K.contents)throw new k.ErrnoError(55);delete l.contents[S],l.ctime=l.mtime=Date.now()},readdir(l){return[".","..",...Object.keys(l.contents)]},symlink(l,S,K){var O=ye.createNode(l,S,41471,0);return O.link=K,O},readlink(l){if(!k.isLink(l.mode))throw new k.ErrnoError(28);return l.link}},stream_ops:{read(l,S,K,O,iA){var aA=l.node.contents;if(iA>=l.node.usedBytes)return 0;var uA=Math.min(l.node.usedBytes-iA,O);if(uA>8&&aA.subarray)S.set(aA.subarray(iA,iA+uA),K);else for(var SA=0;SA0||K+S{var S=await r(l);return new Uint8Array(S)},QA=(l,S,K,O,iA,aA)=>{k.createDataFile(l,S,K,O,iA,aA)},v=I.preloadPlugins||[],sA=(l,S,K,O)=>{typeof Browser<"u"&&Browser.init();var iA=!1;return v.forEach(aA=>{iA||aA.canHandle(S)&&(aA.handle(l,S,K,O),iA=!0)}),iA},wA=(l,S,K,O,iA,aA,uA,SA,se,BA)=>{var N=S?Qe.resolve(PA.join2(l,S)):l;function P(eA){function AA(lA){BA?.(),SA||QA(l,S,lA,O,iA,se),aA?.(),xA()}sA(eA,N,AA,()=>{uA?.(),xA()})||AA(eA)}EA(),typeof K=="string"?b(K).then(P,uA):P(K)},TA=l=>{var S={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},K=S[l];if(typeof K>"u")throw new Error(`Unknown file open mode: ${l}`);return K},mA=(l,S)=>{var K=0;return l&&(K|=365),S&&(K|=146),K},k={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{name="ErrnoError";constructor(l){this.errno=l}},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{shared={};get object(){return this.node}set object(l){this.node=l}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(l){this.shared.flags=l}get position(){return this.shared.position}set position(l){this.shared.position=l}},FSNode:class{node_ops={};stream_ops={};readMode=365;writeMode=146;mounted=null;constructor(l,S,K,O){l||(l=this),this.parent=l,this.mount=l.mount,this.id=k.nextInode++,this.name=S,this.mode=K,this.rdev=O,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(l){l?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(l){l?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return k.isDir(this.mode)}get isDevice(){return k.isChrdev(this.mode)}},lookupPath(l,S={}){if(!l)throw new k.ErrnoError(44);S.follow_mount??=!0,PA.isAbs(l)||(l=k.cwd()+"/"+l);A:for(var K=0;K<40;K++){for(var O=l.split("/").filter(BA=>!!BA),iA=k.root,aA="/",uA=0;uA>>0)%k.nameTable.length},hashAddNode(l){var S=k.hashName(l.parent.id,l.name);l.name_next=k.nameTable[S],k.nameTable[S]=l},hashRemoveNode(l){var S=k.hashName(l.parent.id,l.name);if(k.nameTable[S]===l)k.nameTable[S]=l.name_next;else for(var K=k.nameTable[S];K;){if(K.name_next===l){K.name_next=l.name_next;break}K=K.name_next}},lookupNode(l,S){var K=k.mayLookup(l);if(K)throw new k.ErrnoError(K);for(var O=k.hashName(l.id,S),iA=k.nameTable[O];iA;iA=iA.name_next){var aA=iA.name;if(iA.parent.id===l.id&&aA===S)return iA}return k.lookup(l,S)},createNode(l,S,K,O){var iA=new k.FSNode(l,S,K,O);return k.hashAddNode(iA),iA},destroyNode(l){k.hashRemoveNode(l)},isRoot(l){return l===l.parent},isMountpoint(l){return!!l.mounted},isFile(l){return(l&61440)===32768},isDir(l){return(l&61440)===16384},isLink(l){return(l&61440)===40960},isChrdev(l){return(l&61440)===8192},isBlkdev(l){return(l&61440)===24576},isFIFO(l){return(l&61440)===4096},isSocket(l){return(l&49152)===49152},flagsToPermissionString(l){var S=["r","w","rw"][l&3];return l&512&&(S+="w"),S},nodePermissions(l,S){return k.ignorePermissions?0:S.includes("r")&&!(l.mode&292)||S.includes("w")&&!(l.mode&146)||S.includes("x")&&!(l.mode&73)?2:0},mayLookup(l){if(!k.isDir(l.mode))return 54;var S=k.nodePermissions(l,"x");return S||(l.node_ops.lookup?0:2)},mayCreate(l,S){if(!k.isDir(l.mode))return 54;try{var K=k.lookupNode(l,S);return 20}catch{}return k.nodePermissions(l,"wx")},mayDelete(l,S,K){var O;try{O=k.lookupNode(l,S)}catch(aA){return aA.errno}var iA=k.nodePermissions(l,"wx");if(iA)return iA;if(K){if(!k.isDir(O.mode))return 54;if(k.isRoot(O)||k.getPath(O)===k.cwd())return 10}else if(k.isDir(O.mode))return 31;return 0},mayOpen(l,S){return l?k.isLink(l.mode)?32:k.isDir(l.mode)&&(k.flagsToPermissionString(S)!=="r"||S&576)?31:k.nodePermissions(l,k.flagsToPermissionString(S)):44},checkOpExists(l,S){if(!l)throw new k.ErrnoError(S);return l},MAX_OPEN_FDS:4096,nextfd(){for(var l=0;l<=k.MAX_OPEN_FDS;l++)if(!k.streams[l])return l;throw new k.ErrnoError(33)},getStreamChecked(l){var S=k.getStream(l);if(!S)throw new k.ErrnoError(8);return S},getStream:l=>k.streams[l],createStream(l,S=-1){return l=Object.assign(new k.FSStream,l),S==-1&&(S=k.nextfd()),l.fd=S,k.streams[S]=l,l},closeStream(l){k.streams[l]=null},dupStream(l,S=-1){var K=k.createStream(l,S);return K.stream_ops?.dup?.(K),K},chrdev_stream_ops:{open(l){var S=k.getDevice(l.node.rdev);l.stream_ops=S.stream_ops,l.stream_ops.open?.(l)},llseek(){throw new k.ErrnoError(70)}},major:l=>l>>8,minor:l=>l&255,makedev:(l,S)=>l<<8|S,registerDevice(l,S){k.devices[l]={stream_ops:S}},getDevice:l=>k.devices[l],getMounts(l){for(var S=[],K=[l];K.length;){var O=K.pop();S.push(O),K.push(...O.mounts)}return S},syncfs(l,S){typeof l=="function"&&(S=l,l=!1),k.syncFSRequests++,k.syncFSRequests>1&&d(`warning: ${k.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var K=k.getMounts(k.root.mount),O=0;function iA(uA){return k.syncFSRequests--,S(uA)}function aA(uA){if(uA)return aA.errored?void 0:(aA.errored=!0,iA(uA));++O>=K.length&&iA(null)}K.forEach(uA=>{if(!uA.type.syncfs)return aA(null);uA.type.syncfs(uA,l,aA)})},mount(l,S,K){var O=K==="/",iA=!K,aA;if(O&&k.root)throw new k.ErrnoError(10);if(!O&&!iA){var uA=k.lookupPath(K,{follow_mount:!1});if(K=uA.path,aA=uA.node,k.isMountpoint(aA))throw new k.ErrnoError(10);if(!k.isDir(aA.mode))throw new k.ErrnoError(54)}var SA={type:l,opts:S,mountpoint:K,mounts:[]},se=l.mount(SA);return se.mount=SA,SA.root=se,O?k.root=se:aA&&(aA.mounted=SA,aA.mount&&aA.mount.mounts.push(SA)),se},unmount(l){var S=k.lookupPath(l,{follow_mount:!1});if(!k.isMountpoint(S.node))throw new k.ErrnoError(28);var K=S.node,O=K.mounted,iA=k.getMounts(O);Object.keys(k.nameTable).forEach(uA=>{for(var SA=k.nameTable[uA];SA;){var se=SA.name_next;iA.includes(SA.mount)&&k.destroyNode(SA),SA=se}}),K.mounted=null;var aA=K.mount.mounts.indexOf(O);K.mount.mounts.splice(aA,1)},lookup(l,S){return l.node_ops.lookup(l,S)},mknod(l,S,K){var O=k.lookupPath(l,{parent:!0}),iA=O.node,aA=PA.basename(l);if(!aA)throw new k.ErrnoError(28);if(aA==="."||aA==="..")throw new k.ErrnoError(20);var uA=k.mayCreate(iA,aA);if(uA)throw new k.ErrnoError(uA);if(!iA.node_ops.mknod)throw new k.ErrnoError(63);return iA.node_ops.mknod(iA,aA,S,K)},statfs(l){return k.statfsNode(k.lookupPath(l,{follow:!0}).node)},statfsStream(l){return k.statfsNode(l.node)},statfsNode(l){var S={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:k.nextInode,ffree:k.nextInode-1,fsid:42,flags:2,namelen:255};return l.node_ops.statfs&&Object.assign(S,l.node_ops.statfs(l.mount.opts.root)),S},create(l,S=438){return S&=4095,S|=32768,k.mknod(l,S,0)},mkdir(l,S=511){return S&=1023,S|=16384,k.mknod(l,S,0)},mkdirTree(l,S){for(var K=l.split("/"),O="",iA=0;iA"u"&&(K=S,S=438),S|=8192,k.mknod(l,S,K)},symlink(l,S){if(!Qe.resolve(l))throw new k.ErrnoError(44);var K=k.lookupPath(S,{parent:!0}),O=K.node;if(!O)throw new k.ErrnoError(44);var iA=PA.basename(S),aA=k.mayCreate(O,iA);if(aA)throw new k.ErrnoError(aA);if(!O.node_ops.symlink)throw new k.ErrnoError(63);return O.node_ops.symlink(O,iA,l)},rename(l,S){var K=PA.dirname(l),O=PA.dirname(S),iA=PA.basename(l),aA=PA.basename(S),uA,SA,se;if(uA=k.lookupPath(l,{parent:!0}),SA=uA.node,uA=k.lookupPath(S,{parent:!0}),se=uA.node,!SA||!se)throw new k.ErrnoError(44);if(SA.mount!==se.mount)throw new k.ErrnoError(75);var BA=k.lookupNode(SA,iA),N=Qe.relative(l,O);if(N.charAt(0)!==".")throw new k.ErrnoError(28);if(N=Qe.relative(S,K),N.charAt(0)!==".")throw new k.ErrnoError(55);var P;try{P=k.lookupNode(se,aA)}catch{}if(BA!==P){var eA=k.isDir(BA.mode),AA=k.mayDelete(SA,iA,eA);if(AA)throw new k.ErrnoError(AA);if(AA=P?k.mayDelete(se,aA,eA):k.mayCreate(se,aA),AA)throw new k.ErrnoError(AA);if(!SA.node_ops.rename)throw new k.ErrnoError(63);if(k.isMountpoint(BA)||P&&k.isMountpoint(P))throw new k.ErrnoError(10);if(se!==SA&&(AA=k.nodePermissions(SA,"w"),AA))throw new k.ErrnoError(AA);k.hashRemoveNode(BA);try{SA.node_ops.rename(BA,se,aA),BA.parent=se}catch(lA){throw lA}finally{k.hashAddNode(BA)}}},rmdir(l){var S=k.lookupPath(l,{parent:!0}),K=S.node,O=PA.basename(l),iA=k.lookupNode(K,O),aA=k.mayDelete(K,O,!0);if(aA)throw new k.ErrnoError(aA);if(!K.node_ops.rmdir)throw new k.ErrnoError(63);if(k.isMountpoint(iA))throw new k.ErrnoError(10);K.node_ops.rmdir(K,O),k.destroyNode(iA)},readdir(l){var S=k.lookupPath(l,{follow:!0}),K=S.node,O=k.checkOpExists(K.node_ops.readdir,54);return O(K)},unlink(l){var S=k.lookupPath(l,{parent:!0}),K=S.node;if(!K)throw new k.ErrnoError(44);var O=PA.basename(l),iA=k.lookupNode(K,O),aA=k.mayDelete(K,O,!1);if(aA)throw new k.ErrnoError(aA);if(!K.node_ops.unlink)throw new k.ErrnoError(63);if(k.isMountpoint(iA))throw new k.ErrnoError(10);K.node_ops.unlink(K,O),k.destroyNode(iA)},readlink(l){var S=k.lookupPath(l),K=S.node;if(!K)throw new k.ErrnoError(44);if(!K.node_ops.readlink)throw new k.ErrnoError(28);return K.node_ops.readlink(K)},stat(l,S){var K=k.lookupPath(l,{follow:!S}),O=K.node,iA=k.checkOpExists(O.node_ops.getattr,63);return iA(O)},lstat(l){return k.stat(l,!0)},chmod(l,S,K){var O;if(typeof l=="string"){var iA=k.lookupPath(l,{follow:!K});O=iA.node}else O=l;var aA=k.checkOpExists(O.node_ops.setattr,63);aA(O,{mode:S&4095|O.mode&-4096,ctime:Date.now(),dontFollow:K})},lchmod(l,S){k.chmod(l,S,!0)},fchmod(l,S){var K=k.getStreamChecked(l);k.chmod(K.node,S)},chown(l,S,K,O){var iA;if(typeof l=="string"){var aA=k.lookupPath(l,{follow:!O});iA=aA.node}else iA=l;var uA=k.checkOpExists(iA.node_ops.setattr,63);uA(iA,{timestamp:Date.now(),dontFollow:O})},lchown(l,S,K){k.chown(l,S,K,!0)},fchown(l,S,K){var O=k.getStreamChecked(l);k.chown(O.node,S,K)},truncate(l,S){if(S<0)throw new k.ErrnoError(28);var K;if(typeof l=="string"){var O=k.lookupPath(l,{follow:!0});K=O.node}else K=l;if(k.isDir(K.mode))throw new k.ErrnoError(31);if(!k.isFile(K.mode))throw new k.ErrnoError(28);var iA=k.nodePermissions(K,"w");if(iA)throw new k.ErrnoError(iA);var aA=k.checkOpExists(K.node_ops.setattr,63);aA(K,{size:S,timestamp:Date.now()})},ftruncate(l,S){var K=k.getStreamChecked(l);if((K.flags&2097155)===0)throw new k.ErrnoError(28);k.truncate(K.node,S)},utime(l,S,K){var O=k.lookupPath(l,{follow:!0}),iA=O.node,aA=k.checkOpExists(iA.node_ops.setattr,63);aA(iA,{atime:S,mtime:K})},open(l,S,K=438){if(l==="")throw new k.ErrnoError(44);S=typeof S=="string"?TA(S):S,S&64?K=K&4095|32768:K=0;var O,iA;if(typeof l=="object")O=l;else{iA=l.endsWith("/");var aA=k.lookupPath(l,{follow:!(S&131072),noent_okay:!0});O=aA.node,l=aA.path}var uA=!1;if(S&64)if(O){if(S&128)throw new k.ErrnoError(20)}else{if(iA)throw new k.ErrnoError(31);O=k.mknod(l,K|511,0),uA=!0}if(!O)throw new k.ErrnoError(44);if(k.isChrdev(O.mode)&&(S&=-513),S&65536&&!k.isDir(O.mode))throw new k.ErrnoError(54);if(!uA){var SA=k.mayOpen(O,S);if(SA)throw new k.ErrnoError(SA)}S&512&&!uA&&k.truncate(O,0),S&=-131713;var se=k.createStream({node:O,path:k.getPath(O),flags:S,seekable:!0,position:0,stream_ops:O.stream_ops,ungotten:[],error:!1});return se.stream_ops.open&&se.stream_ops.open(se),uA&&k.chmod(O,K&511),I.logReadFiles&&!(S&1)&&(l in k.readFiles||(k.readFiles[l]=1)),se},close(l){if(k.isClosed(l))throw new k.ErrnoError(8);l.getdents&&(l.getdents=null);try{l.stream_ops.close&&l.stream_ops.close(l)}catch(S){throw S}finally{k.closeStream(l.fd)}l.fd=null},isClosed(l){return l.fd===null},llseek(l,S,K){if(k.isClosed(l))throw new k.ErrnoError(8);if(!l.seekable||!l.stream_ops.llseek)throw new k.ErrnoError(70);if(K!=0&&K!=1&&K!=2)throw new k.ErrnoError(28);return l.position=l.stream_ops.llseek(l,S,K),l.ungotten=[],l.position},read(l,S,K,O,iA){if(O<0||iA<0)throw new k.ErrnoError(28);if(k.isClosed(l))throw new k.ErrnoError(8);if((l.flags&2097155)===1)throw new k.ErrnoError(8);if(k.isDir(l.node.mode))throw new k.ErrnoError(31);if(!l.stream_ops.read)throw new k.ErrnoError(28);var aA=typeof iA<"u";if(!aA)iA=l.position;else if(!l.seekable)throw new k.ErrnoError(70);var uA=l.stream_ops.read(l,S,K,O,iA);return aA||(l.position+=uA),uA},write(l,S,K,O,iA,aA){if(O<0||iA<0)throw new k.ErrnoError(28);if(k.isClosed(l))throw new k.ErrnoError(8);if((l.flags&2097155)===0)throw new k.ErrnoError(8);if(k.isDir(l.node.mode))throw new k.ErrnoError(31);if(!l.stream_ops.write)throw new k.ErrnoError(28);l.seekable&&l.flags&1024&&k.llseek(l,0,2);var uA=typeof iA<"u";if(!uA)iA=l.position;else if(!l.seekable)throw new k.ErrnoError(70);var SA=l.stream_ops.write(l,S,K,O,iA,aA);return uA||(l.position+=SA),SA},allocate(l,S,K){if(k.isClosed(l))throw new k.ErrnoError(8);if(S<0||K<=0)throw new k.ErrnoError(28);if((l.flags&2097155)===0)throw new k.ErrnoError(8);if(!k.isFile(l.node.mode)&&!k.isDir(l.node.mode))throw new k.ErrnoError(43);if(!l.stream_ops.allocate)throw new k.ErrnoError(138);l.stream_ops.allocate(l,S,K)},mmap(l,S,K,O,iA){if((O&2)!==0&&(iA&2)===0&&(l.flags&2097155)!==2)throw new k.ErrnoError(2);if((l.flags&2097155)===1)throw new k.ErrnoError(2);if(!l.stream_ops.mmap)throw new k.ErrnoError(43);if(!S)throw new k.ErrnoError(28);return l.stream_ops.mmap(l,S,K,O,iA)},msync(l,S,K,O,iA){return l.stream_ops.msync?l.stream_ops.msync(l,S,K,O,iA):0},ioctl(l,S,K){if(!l.stream_ops.ioctl)throw new k.ErrnoError(59);return l.stream_ops.ioctl(l,S,K)},readFile(l,S={}){if(S.flags=S.flags||0,S.encoding=S.encoding||"binary",S.encoding!=="utf8"&&S.encoding!=="binary")throw new Error(`Invalid encoding type "${S.encoding}"`);var K,O=k.open(l,S.flags),iA=k.stat(l),aA=iA.size,uA=new Uint8Array(aA);return k.read(O,uA,0,aA,0),S.encoding==="utf8"?K=GA(uA):S.encoding==="binary"&&(K=uA),k.close(O),K},writeFile(l,S,K={}){K.flags=K.flags||577;var O=k.open(l,K.flags,K.mode);if(typeof S=="string"){var iA=new Uint8Array(ae(S)+1),aA=Se(S,iA,0,iA.length);k.write(O,iA,0,aA,void 0,K.canOwn)}else if(ArrayBuffer.isView(S))k.write(O,S,0,S.byteLength,void 0,K.canOwn);else throw new Error("Unsupported data type");k.close(O)},cwd:()=>k.currentPath,chdir(l){var S=k.lookupPath(l,{follow:!0});if(S.node===null)throw new k.ErrnoError(44);if(!k.isDir(S.node.mode))throw new k.ErrnoError(54);var K=k.nodePermissions(S.node,"x");if(K)throw new k.ErrnoError(K);k.currentPath=S.path},createDefaultDirectories(){k.mkdir("/tmp"),k.mkdir("/home"),k.mkdir("/home/web_user")},createDefaultDevices(){k.mkdir("/dev"),k.registerDevice(k.makedev(1,3),{read:()=>0,write:(O,iA,aA,uA,SA)=>uA,llseek:()=>0}),k.mkdev("/dev/null",k.makedev(1,3)),gg.register(k.makedev(5,0),gg.default_tty_ops),gg.register(k.makedev(6,0),gg.default_tty1_ops),k.mkdev("/dev/tty",k.makedev(5,0)),k.mkdev("/dev/tty1",k.makedev(6,0));var l=new Uint8Array(1024),S=0,K=()=>(S===0&&(he(l),S=l.byteLength),l[--S]);k.createDevice("/dev","random",K),k.createDevice("/dev","urandom",K),k.mkdir("/dev/shm"),k.mkdir("/dev/shm/tmp")},createSpecialDirectories(){k.mkdir("/proc");var l=k.mkdir("/proc/self");k.mkdir("/proc/self/fd"),k.mount({mount(){var S=k.createNode(l,"fd",16895,73);return S.stream_ops={llseek:ye.stream_ops.llseek},S.node_ops={lookup(K,O){var iA=+O,aA=k.getStreamChecked(iA),uA={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>aA.path},id:iA+1};return uA.parent=uA,uA},readdir(){return Array.from(k.streams.entries()).filter(([K,O])=>O).map(([K,O])=>K.toString())}},S}},{},"/proc/self/fd")},createStandardStreams(l,S,K){l?k.createDevice("/dev","stdin",l):k.symlink("/dev/tty","/dev/stdin"),S?k.createDevice("/dev","stdout",null,S):k.symlink("/dev/tty","/dev/stdout"),K?k.createDevice("/dev","stderr",null,K):k.symlink("/dev/tty1","/dev/stderr"),k.open("/dev/stdin",0),k.open("/dev/stdout",1),k.open("/dev/stderr",1)},staticInit(){k.nameTable=new Array(4096),k.mount(ye,{},"/"),k.createDefaultDirectories(),k.createDefaultDevices(),k.createSpecialDirectories(),k.filesystems={MEMFS:ye}},init(l,S,K){k.initialized=!0,l??=I.stdin,S??=I.stdout,K??=I.stderr,k.createStandardStreams(l,S,K)},quit(){k.initialized=!1;for(var l=0;lthis.length-1||AA<0)){var lA=AA%this.chunkSize,NA=AA/this.chunkSize|0;return this.getter(NA)[lA]}}setDataGetter(AA){this.getter=AA}cacheLength(){var AA=new XMLHttpRequest;if(AA.open("HEAD",K,!1),AA.send(null),!(AA.status>=200&&AA.status<300||AA.status===304))throw new Error("Couldn't load "+K+". Status: "+AA.status);var lA=Number(AA.getResponseHeader("Content-length")),NA,VA=(NA=AA.getResponseHeader("Accept-Ranges"))&&NA==="bytes",$A=(NA=AA.getResponseHeader("Content-Encoding"))&&NA==="gzip",ZA=1024*1024;VA||(ZA=lA);var qA=(we,He)=>{if(we>He)throw new Error("invalid range ("+we+", "+He+") or no bytes requested!");if(He>lA-1)throw new Error("only "+lA+" bytes available! programmer error!");var be=new XMLHttpRequest;if(be.open("GET",K,!1),lA!==ZA&&be.setRequestHeader("Range","bytes="+we+"-"+He),be.responseType="arraybuffer",be.overrideMimeType&&be.overrideMimeType("text/plain; charset=x-user-defined"),be.send(null),!(be.status>=200&&be.status<300||be.status===304))throw new Error("Couldn't load "+K+". Status: "+be.status);return be.response!==void 0?new Uint8Array(be.response||[]):Ag(be.responseText||"")},Re=this;Re.setDataGetter(we=>{var He=we*ZA,be=(we+1)*ZA-1;if(be=Math.min(be,lA-1),typeof Re.chunks[we]>"u"&&(Re.chunks[we]=qA(He,be)),typeof Re.chunks[we]>"u")throw new Error("doXHR failed!");return Re.chunks[we]}),($A||!lA)&&(ZA=lA=1,lA=this.getter(0).length,ZA=lA,a("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=lA,this._chunkSize=ZA,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var uA,SA}else var SA={isDevice:!1,url:K};var se=k.createFile(l,S,SA,O,iA);SA.contents?se.contents=SA.contents:SA.url&&(se.contents=null,se.url=SA.url),Object.defineProperties(se,{usedBytes:{get:function(){return this.contents.length}}});var BA={},N=Object.keys(se.stream_ops);N.forEach(eA=>{var AA=se.stream_ops[eA];BA[eA]=(...lA)=>(k.forceLoadFile(se),AA(...lA))});function P(eA,AA,lA,NA,VA){var $A=eA.node.contents;if(VA>=$A.length)return 0;var ZA=Math.min($A.length-VA,NA);if($A.slice)for(var qA=0;qA(k.forceLoadFile(se),P(eA,AA,lA,NA,VA)),BA.mmap=(eA,AA,lA,NA,VA)=>{k.forceLoadFile(se);var $A=Fe();if(!$A)throw new k.ErrnoError(48);return P(eA,u,$A,AA,lA),{ptr:$A,allocated:!0}},se.stream_ops=BA,se}},te={DEFAULT_POLLMASK:5,calculateAt(l,S,K){if(PA.isAbs(S))return S;var O;if(l===-100)O=k.cwd();else{var iA=te.getStreamFromFD(l);O=iA.path}if(S.length==0){if(!K)throw new k.ErrnoError(44);return O}return O+"/"+S},writeStat(l,S){w[l>>2]=S.dev,w[l+4>>2]=S.mode,y[l+8>>2]=S.nlink,w[l+12>>2]=S.uid,w[l+16>>2]=S.gid,w[l+20>>2]=S.rdev,D[l+24>>3]=BigInt(S.size),w[l+32>>2]=4096,w[l+36>>2]=S.blocks;var K=S.atime.getTime(),O=S.mtime.getTime(),iA=S.ctime.getTime();return D[l+40>>3]=BigInt(Math.floor(K/1e3)),y[l+48>>2]=K%1e3*1e3*1e3,D[l+56>>3]=BigInt(Math.floor(O/1e3)),y[l+64>>2]=O%1e3*1e3*1e3,D[l+72>>3]=BigInt(Math.floor(iA/1e3)),y[l+80>>2]=iA%1e3*1e3*1e3,D[l+88>>3]=BigInt(S.ino),0},writeStatFs(l,S){w[l+4>>2]=S.bsize,w[l+40>>2]=S.bsize,w[l+8>>2]=S.blocks,w[l+12>>2]=S.bfree,w[l+16>>2]=S.bavail,w[l+20>>2]=S.files,w[l+24>>2]=S.ffree,w[l+28>>2]=S.fsid,w[l+44>>2]=S.flags,w[l+36>>2]=S.namelen},doMsync(l,S,K,O,iA){if(!k.isFile(S.node.mode))throw new k.ErrnoError(43);if(O&2)return 0;var aA=h.slice(l,l+K);k.msync(S,aA,iA,K,O)},getStreamFromFD(l){var S=k.getStreamChecked(l);return S},varargs:void 0,getStr(l){var S=KA(l);return S}};function Be(l,S,K){te.varargs=K;try{var O=te.getStreamFromFD(l);switch(S){case 0:{var iA=JA();if(iA<0)return-28;for(;k.streams[iA];)iA++;var aA;return aA=k.dupStream(O,iA),aA.fd}case 1:case 2:return 0;case 3:return O.flags;case 4:{var iA=JA();return O.flags|=iA,0}case 12:{var iA=XA(),uA=0;return R[iA+uA>>1]=2,0}case 13:case 14:return 0}return-28}catch(SA){if(typeof k>"u"||SA.name!=="ErrnoError")throw SA;return-SA.errno}}function og(l,S,K){te.varargs=K;try{var O=te.getStreamFromFD(l);switch(S){case 21509:return O.tty?0:-59;case 21505:{if(!O.tty)return-59;if(O.tty.ops.ioctl_tcgets){var iA=O.tty.ops.ioctl_tcgets(O),aA=XA();w[aA>>2]=iA.c_iflag||0,w[aA+4>>2]=iA.c_oflag||0,w[aA+8>>2]=iA.c_cflag||0,w[aA+12>>2]=iA.c_lflag||0;for(var uA=0;uA<32;uA++)u[aA+uA+17]=iA.c_cc[uA]||0;return 0}return 0}case 21510:case 21511:case 21512:return O.tty?0:-59;case 21506:case 21507:case 21508:{if(!O.tty)return-59;if(O.tty.ops.ioctl_tcsets){for(var aA=XA(),SA=w[aA>>2],se=w[aA+4>>2],BA=w[aA+8>>2],N=w[aA+12>>2],P=[],uA=0;uA<32;uA++)P.push(u[aA+uA+17]);return O.tty.ops.ioctl_tcsets(O.tty,S,{c_iflag:SA,c_oflag:se,c_cflag:BA,c_lflag:N,c_cc:P})}return 0}case 21519:{if(!O.tty)return-59;var aA=XA();return w[aA>>2]=0,0}case 21520:return O.tty?-28:-59;case 21531:{var aA=XA();return k.ioctl(O,S,aA)}case 21523:{if(!O.tty)return-59;if(O.tty.ops.ioctl_tiocgwinsz){var eA=O.tty.ops.ioctl_tiocgwinsz(O.tty),aA=XA();R[aA>>1]=eA[0],R[aA+2>>1]=eA[1]}return 0}case 21524:return O.tty?0:-59;case 21515:return O.tty?0:-59;default:return-28}}catch(AA){if(typeof k>"u"||AA.name!=="ErrnoError")throw AA;return-AA.errno}}function Je(l,S,K,O){te.varargs=O;try{S=te.getStr(S),S=te.calculateAt(l,S);var iA=O?JA():0;return k.open(S,K,iA).fd}catch(aA){if(typeof k>"u"||aA.name!=="ErrnoError")throw aA;return-aA.errno}}var Bg=()=>RA(""),Xe=l=>l%4===0&&(l%100!==0||l%400===0),Tg=[0,31,60,91,121,152,182,213,244,274,305,335],eg=[0,31,59,90,120,151,181,212,243,273,304,334],Lg=l=>{var S=Xe(l.getFullYear()),K=S?Tg:eg,O=K[l.getMonth()]+l.getDate()-1;return O},eI=9007199254740992,iI=-9007199254740992,$g=l=>leI?NaN:Number(l);function rI(l,S){l=$g(l);var K=new Date(l*1e3);w[S>>2]=K.getSeconds(),w[S+4>>2]=K.getMinutes(),w[S+8>>2]=K.getHours(),w[S+12>>2]=K.getDate(),w[S+16>>2]=K.getMonth(),w[S+20>>2]=K.getFullYear()-1900,w[S+24>>2]=K.getDay();var O=Lg(K)|0;w[S+28>>2]=O,w[S+36>>2]=-(K.getTimezoneOffset()*60);var iA=new Date(K.getFullYear(),0,1),aA=new Date(K.getFullYear(),6,1).getTimezoneOffset(),uA=iA.getTimezoneOffset(),SA=(aA!=uA&&K.getTimezoneOffset()==Math.min(uA,aA))|0;w[S+32>>2]=SA}var Fg=(l,S,K)=>Se(l,h,S,K),EI=(l,S,K,O)=>{var iA=new Date().getFullYear(),aA=new Date(iA,0,1),uA=new Date(iA,6,1),SA=aA.getTimezoneOffset(),se=uA.getTimezoneOffset(),BA=Math.max(SA,se);y[l>>2]=BA*60,w[S>>2]=+(SA!=se);var N=AA=>{var lA=AA>=0?"-":"+",NA=Math.abs(AA),VA=String(Math.floor(NA/60)).padStart(2,"0"),$A=String(NA%60).padStart(2,"0");return`UTC${lA}${VA}${$A}`},P=N(SA),eA=N(se);seperformance.now(),tI=()=>Date.now(),Hg=l=>l>=0&&l<=3;function uI(l,S,K){if(!Hg(l))return 28;var O;l===0?O=tI():O=Xg();var iA=Math.round(O*1e3*1e3);return D[K>>3]=BigInt(iA),0}var Ig=()=>2147483648,gI=()=>Ig(),II=l=>{var S=F.buffer,K=(l-S.byteLength+65535)/65536|0;try{return F.grow(K),x(),1}catch{}},Kg=l=>{var S=h.length;l>>>=0;var K=Ig();if(l>K)return!1;for(var O=1;O<=4;O*=2){var iA=S*(1+.2/O);iA=Math.min(iA,l+100663296);var aA=Math.min(K,Mg(Math.max(l,iA),65536)),uA=II(aA);if(uA)return!0}return!1},Ug={},HA=()=>s||"./this.program",Ae=()=>{if(!Ae.strings){var l=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",S={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:l,_:HA()};for(var K in Ug)Ug[K]===void 0?delete S[K]:S[K]=Ug[K];var O=[];for(var K in S)O.push(`${K}=${S[K]}`);Ae.strings=O}return Ae.strings},le=(l,S)=>{for(var K=0;K{var K=0;return Ae().forEach((O,iA)=>{var aA=S+K;y[l+iA*4>>2]=aA,le(O,aA),K+=O.length+1}),0},Wg=(l,S)=>{var K=Ae();y[l>>2]=K.length;var O=0;return K.forEach(iA=>O+=iA.length+1),y[S>>2]=O,0};function wI(l){try{var S=te.getStreamFromFD(l);return k.close(S),0}catch(K){if(typeof k>"u"||K.name!=="ErrnoError")throw K;return K.errno}}var ag=(l,S,K,O)=>{for(var iA=0,aA=0;aA>2],SA=y[S+4>>2];S+=8;var se=k.read(l,u,uA,SA,O);if(se<0)return-1;if(iA+=se,se>2]=aA,0}catch(uA){if(typeof k>"u"||uA.name!=="ErrnoError")throw uA;return uA.errno}}function pI(l,S,K,O){S=$g(S);try{if(isNaN(S))return 61;var iA=te.getStreamFromFD(l);return k.llseek(iA,S,K),D[O>>3]=BigInt(iA.position),iA.getdents&&S===0&&K===0&&(iA.getdents=null),0}catch(aA){if(typeof k>"u"||aA.name!=="ErrnoError")throw aA;return aA.errno}}var YI=(l,S,K,O)=>{for(var iA=0,aA=0;aA>2],SA=y[S+4>>2];S+=8;var se=k.write(l,u,uA,SA,O);if(se<0)return-1;if(iA+=se,se>2]=aA,0}catch(uA){if(typeof k>"u"||uA.name!=="ErrnoError")throw uA;return uA.errno}}k.createPreloadedFile=wA,k.staticInit(),ye.doesNotExistError=new k.ErrnoError(44),ye.doesNotExistError.stack="";var CI={a:vA,b:Ie,c:Be,f:og,g:Je,h:Bg,k:rI,l:EI,i:uI,m:gI,j:Kg,n:Dg,o:Wg,d:wI,p:Sg,q:pI,e:TI},We=await fA();We.s,I._umap_options_create=We.t,I._umap_options_destroy=We.u,I._umap_options_number=We.w,I._umap_options_string=We.x,I._umap_context_create_f32=We.y,I._umap_context_run=We.z,I._umap_context_n_epochs=We.A,I._umap_context_epoch=We.B,I._umap_context_destroy=We.C,I._knn_options_create=We.D,I._knn_options_destroy=We.E,I._knn_options_number=We.F,I._knn_options_string=We.G,I._knn_context_create_f32=We.H,I._knn_context_query_by_index=We.I,I._knn_context_query_by_vector=We.J,I._knn_context_destroy=We.K,I._memory_allocate=We.L,I._memory_free=We.M;function yI(){if(z>0){H=yI;return}if(oA(),z>0){H=yI;return}function l(){I.calledRun=!0,!L&&(CA(),i(I),I.onRuntimeInitialized?.(),DA())}I.setStatus?(I.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>I.setStatus(""),1),l()},1)):l()}if(I.preInit)for(typeof I.preInit=="function"&&(I.preInit=[I.preInit]);I.preInit.length>0;)I.preInit.pop()();return yI(),e=o,e}})();async function rp(){const A=await ap(),g={memory_allocate:A._memory_allocate,memory_free:A._memory_free,memory_size:()=>A.HEAP32.length/4,u8_array:(e,I)=>A.HEAPU8.subarray(e,e+I),f32_array:(e,I)=>A.HEAPF32.subarray(e/4,e/4+I),i32_array:(e,I)=>A.HEAP32.subarray(e/4,e/4+I)};for(let e in A)e.startsWith("_")&&(g[e.substring(1)]=A[e]);return g}let Ep=rp();function np(A,g,e,I){const t=A.memory_allocate(128),o=t,C=t+64;function s(Q,r){const B=new TextEncoder().encode(r);if(B.length+1>64)throw new Error("invalid parameter "+name);const a=A.u8_array(Q,64);a.fill(0),a.set(B),a[a.length-1]=0}for(const Q in I){s(o,Q);const r=I[Q];if(typeof r=="number"){if(e.number(g,o,r)!=0)throw new Error("invalid parameter "+Q)}else if(typeof r=="string"){if(s(C,r),e.string(g,o,C)!=0)throw new Error("invalid parameter "+Q)}else throw new Error("invalid parameter "+Q)}A.memory_free(o)}async function lp(A,g,e,I,i={}){const t=await Ep,o=t.memory_allocate(A*g*4),C=t.memory_allocate(A*e*4),s=t.umap_options_create();np(t,s,{number:t.umap_options_number,string:t.umap_options_string},i),t.f32_array(o,A*g).set(I,0);let Q=t.umap_context_create_f32(A,g,e,o,C,s);t.umap_options_destroy(s);function r(){if(Q==null)throw new Error("use after destroy")}return{get epoch(){return r(),t.umap_context_epoch(Q)},get n_epochs(){return r(),t.umap_context_n_epochs(Q)},get count(){return A},get output_dim(){return e},get input_dim(){return g},get embedding(){return r(),t.f32_array(C,A*e)},run(B){r(),t.umap_context_run(Q,B??0)},destroy(){Q!=null&&(t.umap_context_destroy(Q),t.memory_free(o),t.memory_free(C),Q=null)}}}const XC=new Map,di=[],cp=(A,g,e)=>{if(g&&typeof g.init=="function"&&typeof g.createInferenceSessionHandler=="function"){const I=XC.get(A);if(I===void 0)XC.set(A,{backend:g,priority:e});else{if(I.priority>e)return;if(I.priority===e&&I.backend!==g)throw new Error(`cannot register backend "${A}" using priority ${e}`)}if(e>=0){const i=di.indexOf(A);i!==-1&&di.splice(i,1);for(let t=0;t{const g=XC.get(A);if(!g)return"backend not found.";if(g.initialized)return g.backend;if(g.aborted)return g.error;{const e=!!g.initPromise;try{return e||(g.initPromise=g.backend.init(A)),await g.initPromise,g.initialized=!0,g.backend}catch(I){return e||(g.error=`${I}`,g.aborted=!0),g.error}finally{delete g.initPromise}}},hp=async A=>{const g=A.executionProviders||[],e=g.map(s=>typeof s=="string"?s:s.name),I=e.length===0?di:e;let i;const t=[],o=new Set;for(const s of I){const Q=await dp(s);typeof Q=="string"?t.push({name:s,err:Q}):(i||(i=Q),i===Q&&o.add(s))}if(!i)throw new Error(`no available backend found. ERR: ${t.map(s=>`[${s.name}] ${s.err}`).join(", ")}`);for(const{name:s,err:Q}of t)e.includes(s)&&console.warn(`removing requested execution provider "${s}" from session options because it is not available: ${Q}`);const C=g.filter(s=>o.has(typeof s=="string"?s:s.name));return[i,new Proxy(A,{get:(s,Q)=>Q==="executionProviders"?C:Reflect.get(s,Q)})]},Dp="1.21.0";let vn="warning";const LI={wasm:{},webgl:{},webgpu:{},versions:{common:Dp},set logLevel(A){if(A!==void 0){if(typeof A!="string"||["verbose","info","warning","error","fatal"].indexOf(A)===-1)throw new Error(`Unsupported logging level: ${A}`);vn=A}},get logLevel(){return vn}};Object.defineProperty(LI,"logLevel",{enumerable:!0});const up=LI,wp=(A,g)=>{const e=typeof document<"u"?document.createElement("canvas"):new OffscreenCanvas(1,1);e.width=A.dims[3],e.height=A.dims[2];const I=e.getContext("2d");if(I!=null){let i,t;g?.tensorLayout!==void 0&&g.tensorLayout==="NHWC"?(i=A.dims[2],t=A.dims[3]):(i=A.dims[3],t=A.dims[2]);const o=g?.format!==void 0?g.format:"RGB",C=g?.norm;let s,Q;C===void 0||C.mean===void 0?s=[255,255,255,255]:typeof C.mean=="number"?s=[C.mean,C.mean,C.mean,C.mean]:(s=[C.mean[0],C.mean[1],C.mean[2],0],C.mean[3]!==void 0&&(s[3]=C.mean[3])),C===void 0||C.bias===void 0?Q=[0,0,0,0]:typeof C.bias=="number"?Q=[C.bias,C.bias,C.bias,C.bias]:(Q=[C.bias[0],C.bias[1],C.bias[2],0],C.bias[3]!==void 0&&(Q[3]=C.bias[3]));const r=t*i;let B=0,a=r,d=r*2,c=-1;o==="RGBA"?(B=0,a=r,d=r*2,c=r*3):o==="RGB"?(B=0,a=r,d=r*2):o==="RBG"&&(B=0,d=r,a=r*2);for(let F=0;F{const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d");let I;if(e!=null){let i,t,o;g?.tensorLayout!==void 0&&g.tensorLayout==="NHWC"?(i=A.dims[2],t=A.dims[1],o=A.dims[3]):(i=A.dims[3],t=A.dims[2],o=A.dims[1]);const C=g!==void 0&&g.format!==void 0?g.format:"RGB",s=g?.norm;let Q,r;s===void 0||s.mean===void 0?Q=[255,255,255,255]:typeof s.mean=="number"?Q=[s.mean,s.mean,s.mean,s.mean]:(Q=[s.mean[0],s.mean[1],s.mean[2],255],s.mean[3]!==void 0&&(Q[3]=s.mean[3])),s===void 0||s.bias===void 0?r=[0,0,0,0]:typeof s.bias=="number"?r=[s.bias,s.bias,s.bias,s.bias]:(r=[s.bias[0],s.bias[1],s.bias[2],0],s.bias[3]!==void 0&&(r[3]=s.bias[3]));const B=t*i;if(g!==void 0&&(g.format!==void 0&&o===4&&g.format!=="RGBA"||o===3&&g.format!=="RGB"&&g.format!=="BGR"))throw new Error("Tensor format doesn't match input tensor dims");const a=4;let d=0,c=1,F=2,L=3,u=0,h=B,R=B*2,w=-1;C==="RGBA"?(u=0,h=B,R=B*2,w=B*3):C==="RGB"?(u=0,h=B,R=B*2):C==="RBG"&&(u=0,R=B,h=B*2),I=e.createImageData(i,t);for(let y=0;y{if(A===void 0)throw new Error("Image buffer must be defined");if(g.height===void 0||g.width===void 0)throw new Error("Image height and width must be defined");if(g.tensorLayout==="NHWC")throw new Error("NHWC Tensor layout is not supported yet");const{height:e,width:I}=g,i=g.norm??{mean:255,bias:0};let t,o;typeof i.mean=="number"?t=[i.mean,i.mean,i.mean,i.mean]:t=[i.mean[0],i.mean[1],i.mean[2],i.mean[3]??255],typeof i.bias=="number"?o=[i.bias,i.bias,i.bias,i.bias]:o=[i.bias[0],i.bias[1],i.bias[2],i.bias[3]??0];const C=g.format!==void 0?g.format:"RGBA",s=g.tensorFormat!==void 0&&g.tensorFormat!==void 0?g.tensorFormat:"RGB",Q=e*I,r=s==="RGBA"?new Float32Array(Q*4):new Float32Array(Q*3);let B=4,a=0,d=1,c=2,F=3,L=0,u=Q,h=Q*2,R=-1;C==="RGB"&&(B=3,a=0,d=1,c=2,F=-1),s==="RGBA"?R=Q*3:s==="RBG"?(L=0,h=Q,u=Q*2):s==="BGR"&&(h=0,u=Q,L=Q*2);for(let y=0;y{const e=typeof HTMLImageElement<"u"&&A instanceof HTMLImageElement,I=typeof ImageData<"u"&&A instanceof ImageData,i=typeof ImageBitmap<"u"&&A instanceof ImageBitmap,t=typeof A=="string";let o,C=g??{};const s=()=>{if(typeof document<"u")return document.createElement("canvas");if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(1,1);throw new Error("Canvas is not supported")},Q=r=>typeof HTMLCanvasElement<"u"&&r instanceof HTMLCanvasElement||r instanceof OffscreenCanvas?r.getContext("2d"):null;if(e){const r=s();r.width=A.width,r.height=A.height;const B=Q(r);if(B!=null){let a=A.height,d=A.width;if(g!==void 0&&g.resizedHeight!==void 0&&g.resizedWidth!==void 0&&(a=g.resizedHeight,d=g.resizedWidth),g!==void 0){if(C=g,g.tensorFormat!==void 0)throw new Error("Image input config format must be RGBA for HTMLImageElement");C.tensorFormat="RGBA",C.height=a,C.width=d}else C.tensorFormat="RGBA",C.height=a,C.width=d;B.drawImage(A,0,0),o=B.getImageData(0,0,d,a).data}else throw new Error("Can not access image data")}else if(I){let r,B;if(g!==void 0&&g.resizedWidth!==void 0&&g.resizedHeight!==void 0?(r=g.resizedHeight,B=g.resizedWidth):(r=A.height,B=A.width),g!==void 0&&(C=g),C.format="RGBA",C.height=r,C.width=B,g!==void 0){const a=s();a.width=B,a.height=r;const d=Q(a);if(d!=null)d.putImageData(A,0,0),o=d.getImageData(0,0,B,r).data;else throw new Error("Can not access image data")}else o=A.data}else if(i){if(g===void 0)throw new Error("Please provide image config with format for Imagebitmap");const r=s();r.width=A.width,r.height=A.height;const B=Q(r);if(B!=null){const a=A.height,d=A.width;return B.drawImage(A,0,0,d,a),o=B.getImageData(0,0,d,a).data,C.height=a,C.width=d,ys(o,C)}else throw new Error("Can not access image data")}else{if(t)return new Promise((r,B)=>{const a=s(),d=Q(a);if(!A||!d)return B();const c=new Image;c.crossOrigin="Anonymous",c.src=A,c.onload=()=>{a.width=c.width,a.height=c.height,d.drawImage(c,0,0,a.width,a.height);const F=d.getImageData(0,0,a.width,a.height);C.height=a.height,C.width=a.width,r(ys(F.data,C))}});throw new Error("Input data provided is not supported - aborted tensor creation")}if(o!==void 0)return ys(o,C);throw new Error("Input data provided is not supported - aborted tensor creation")},fp=(A,g)=>{const{width:e,height:I,download:i,dispose:t}=g,o=[1,I,e,4];return new hI({location:"texture",type:"float32",texture:A,dims:o,download:i,dispose:t})},mp=(A,g)=>{const{dataType:e,dims:I,download:i,dispose:t}=g;return new hI({location:"gpu-buffer",type:e??"float32",gpuBuffer:A,dims:I,download:i,dispose:t})},Mp=(A,g)=>{const{dataType:e,dims:I,download:i,dispose:t}=g;return new hI({location:"ml-tensor",type:e??"float32",mlTensor:A,dims:I,download:i,dispose:t})},Fp=(A,g,e)=>new hI({location:"cpu-pinned",type:A,data:g,dims:e??[g.length]}),Zi=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array],["int4",Uint8Array],["uint4",Uint8Array]]),ZC=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]);let qn=!1;const Sp=()=>{if(!qn){qn=!0;const A=typeof BigInt64Array<"u"&&BigInt64Array.from,g=typeof BigUint64Array<"u"&&BigUint64Array.from,e=globalThis.Float16Array,I=typeof e<"u"&&e.from;A&&(Zi.set("int64",BigInt64Array),ZC.set(BigInt64Array,"int64")),g&&(Zi.set("uint64",BigUint64Array),ZC.set(BigUint64Array,"uint64")),I?(Zi.set("float16",e),ZC.set(e,"float16")):Zi.set("float16",Uint16Array)}},Np=A=>{let g=1;for(let e=0;e{switch(A.location){case"cpu":return new hI(A.type,A.data,g);case"cpu-pinned":return new hI({location:"cpu-pinned",data:A.data,type:A.type,dims:g});case"texture":return new hI({location:"texture",texture:A.texture,type:A.type,dims:g});case"gpu-buffer":return new hI({location:"gpu-buffer",gpuBuffer:A.gpuBuffer,type:A.type,dims:g});case"ml-tensor":return new hI({location:"ml-tensor",mlTensor:A.mlTensor,type:A.type,dims:g});default:throw new Error(`tensorReshape: tensor location ${A.location} is not supported`)}};let hI=class{constructor(g,e,I){Sp();let i,t;if(typeof g=="object"&&"location"in g)switch(this.dataLocation=g.location,i=g.type,t=g.dims,g.location){case"cpu-pinned":{const C=Zi.get(i);if(!C)throw new TypeError(`unsupported type "${i}" to create tensor from pinned buffer`);if(!(g.data instanceof C))throw new TypeError(`buffer should be of type ${C.name}`);this.cpuData=g.data;break}case"texture":{if(i!=="float32")throw new TypeError(`unsupported type "${i}" to create tensor from texture`);this.gpuTextureData=g.texture,this.downloader=g.download,this.disposer=g.dispose;break}case"gpu-buffer":{if(i!=="float32"&&i!=="float16"&&i!=="int32"&&i!=="int64"&&i!=="uint32"&&i!=="uint8"&&i!=="bool"&&i!=="uint4"&&i!=="int4")throw new TypeError(`unsupported type "${i}" to create tensor from gpu buffer`);this.gpuBufferData=g.gpuBuffer,this.downloader=g.download,this.disposer=g.dispose;break}case"ml-tensor":{if(i!=="float32"&&i!=="float16"&&i!=="int32"&&i!=="int64"&&i!=="uint32"&&i!=="uint64"&&i!=="int8"&&i!=="uint8"&&i!=="bool"&&i!=="uint4"&&i!=="int4")throw new TypeError(`unsupported type "${i}" to create tensor from MLTensor`);this.mlTensorData=g.mlTensor,this.downloader=g.download,this.disposer=g.dispose;break}default:throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let C,s;if(typeof g=="string")if(i=g,s=I,g==="string"){if(!Array.isArray(e))throw new TypeError("A string tensor's data must be a string array.");C=e}else{const Q=Zi.get(g);if(Q===void 0)throw new TypeError(`Unsupported tensor type: ${g}.`);if(Array.isArray(e)){if(g==="float16"&&Q===Uint16Array||g==="uint4"||g==="int4")throw new TypeError(`Creating a ${g} tensor from number array is not supported. Please use ${Q.name} as data.`);g==="uint64"||g==="int64"?C=Q.from(e,BigInt):C=Q.from(e)}else if(e instanceof Q)C=e;else if(e instanceof Uint8ClampedArray)if(g==="uint8")C=Uint8Array.from(e);else throw new TypeError("A Uint8ClampedArray tensor's data must be type of uint8");else if(g==="float16"&&e instanceof Uint16Array&&Q!==Uint16Array)C=new globalThis.Float16Array(e.buffer,e.byteOffset,e.length);else throw new TypeError(`A ${i} tensor's data must be type of ${Q}`)}else if(s=e,Array.isArray(g)){if(g.length===0)throw new TypeError("Tensor type cannot be inferred from an empty array.");const Q=typeof g[0];if(Q==="string")i="string",C=g;else if(Q==="boolean")i="bool",C=Uint8Array.from(g);else throw new TypeError(`Invalid element type of data array: ${Q}.`)}else if(g instanceof Uint8ClampedArray)i="uint8",C=Uint8Array.from(g);else{const Q=ZC.get(g.constructor);if(Q===void 0)throw new TypeError(`Unsupported type for tensor data: ${g.constructor}.`);i=Q,C=g}if(s===void 0)s=[C.length];else if(!Array.isArray(s))throw new TypeError("A tensor's dims must be a number array");t=s,this.cpuData=C,this.dataLocation="cpu"}const o=Np(t);if(this.cpuData&&o!==this.cpuData.length&&!((i==="uint4"||i==="int4")&&Math.ceil(o/2)===this.cpuData.length))throw new Error(`Tensor's size(${o}) does not match data length(${this.cpuData.length}).`);this.type=i,this.dims=t,this.size=o}static async fromImage(g,e){return yp(g,e)}static fromTexture(g,e){return fp(g,e)}static fromGpuBuffer(g,e){return mp(g,e)}static fromMLTensor(g,e){return Mp(g,e)}static fromPinnedBuffer(g,e,I){return Fp(g,e,I)}toDataURL(g){return wp(this,g)}toImageData(g){return pp(this,g)}get data(){if(this.ensureValid(),!this.cpuData)throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw new Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw new Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw new Error("The data is not stored as a WebNN MLTensor.");return this.mlTensorData}async getData(g){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":case"ml-tensor":{if(!this.downloader)throw new Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw new Error("The current tensor is being downloaded.");try{this.isDownloading=!0;const e=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=e,g&&this.disposer&&(this.disposer(),this.disposer=void 0),e}finally{this.isDownloading=!1}}default:throw new Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw new Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if(this.dataLocation==="none")throw new Error("The tensor is disposed.")}reshape(g){if(this.ensureValid(),this.downloader||this.disposer)throw new Error("Cannot reshape a tensor that owns GPU resource.");return Rp(this,g)}};const $i=hI,Sh=(A,g)=>{(typeof LI.trace>"u"?!LI.wasm.trace:!LI.trace)||console.timeStamp(`${A}::ORT::${g}`)},Nh=(A,g)=>{const e=new Error().stack?.split(/\r\n|\r|\n/g)||[];let I=!1;for(let i=0;i{(typeof LI.trace>"u"?!LI.wasm.trace:!LI.trace)||Nh("BEGIN",A)},mB=A=>{(typeof LI.trace>"u"?!LI.wasm.trace:!LI.trace)||Nh("END",A)};let Gp=class Rh{constructor(g){this.handler=g}async run(g,e,I){fB();const i={};let t={};if(typeof g!="object"||g===null||g instanceof $i||Array.isArray(g))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let o=!0;if(typeof e=="object"){if(e===null)throw new TypeError("Unexpected argument[1]: cannot be null.");if(e instanceof $i)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(e)){if(e.length===0)throw new TypeError("'fetches' cannot be an empty array.");o=!1;for(const Q of e){if(typeof Q!="string")throw new TypeError("'fetches' must be a string array or an object.");if(this.outputNames.indexOf(Q)===-1)throw new RangeError(`'fetches' contains invalid output name: ${Q}.`);i[Q]=null}if(typeof I=="object"&&I!==null)t=I;else if(typeof I<"u")throw new TypeError("'options' must be an object.")}else{let Q=!1;const r=Object.getOwnPropertyNames(e);for(const B of this.outputNames)if(r.indexOf(B)!==-1){const a=e[B];(a===null||a instanceof $i)&&(Q=!0,o=!1,i[B]=a)}if(Q){if(typeof I=="object"&&I!==null)t=I;else if(typeof I<"u")throw new TypeError("'options' must be an object.")}else t=e}}else if(typeof e<"u")throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(const Q of this.inputNames)if(typeof g[Q]>"u")throw new Error(`input '${Q}' is missing in 'feeds'.`);if(o)for(const Q of this.outputNames)i[Q]=null;const C=await this.handler.run(g,i,t),s={};for(const Q in C)if(Object.hasOwnProperty.call(C,Q)){const r=C[Q];r instanceof $i?s[Q]=r:s[Q]=new $i(r.type,r.data,r.dims)}return mB(),s}async release(){return this.handler.dispose()}static async create(g,e,I,i){fB();let t,o={};if(typeof g=="string"){if(t=g,typeof e=="object"&&e!==null)o=e;else if(typeof e<"u")throw new TypeError("'options' must be an object.")}else if(g instanceof Uint8Array){if(t=g,typeof e=="object"&&e!==null)o=e;else if(typeof e<"u")throw new TypeError("'options' must be an object.")}else if(g instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&g instanceof SharedArrayBuffer){const r=g;let B=0,a=g.byteLength;if(typeof e=="object"&&e!==null)o=e;else if(typeof e=="number"){if(B=e,!Number.isSafeInteger(B))throw new RangeError("'byteOffset' must be an integer.");if(B<0||B>=r.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${r.byteLength}).`);if(a=g.byteLength-B,typeof I=="number"){if(a=I,!Number.isSafeInteger(a))throw new RangeError("'byteLength' must be an integer.");if(a<=0||B+a>r.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${r.byteLength-B}].`);if(typeof i=="object"&&i!==null)o=i;else if(typeof i<"u")throw new TypeError("'options' must be an object.")}else if(typeof I<"u")throw new TypeError("'byteLength' must be a number.")}else if(typeof e<"u")throw new TypeError("'options' must be an object.");t=new Uint8Array(r,B,a)}else throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");const[C,s]=await hp(o),Q=await C.createInferenceSessionHandler(t,s);return mB(),new Rh(Q)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}};const _p=Gp;var kp=Object.freeze({__proto__:null,InferenceSession:_p,TRACE:Sh,TRACE_FUNC_BEGIN:fB,TRACE_FUNC_END:mB,Tensor:$i,env:up,registerBackend:cp});/*! + * ONNX Runtime Web v1.22.0-dev.20250409-89f8206ba4 + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */var HB=Object.defineProperty,Lp=Object.getOwnPropertyDescriptor,Kp=Object.getOwnPropertyNames,Up=Object.prototype.hasOwnProperty,Jp=(A=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(A,{get:(g,e)=>(typeof require<"u"?require:g)[e]}):A)(function(A){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+A+'" is not supported')}),zA=(A,g)=>()=>(A&&(g=A(A=0)),g),It=(A,g)=>{for(var e in g)HB(A,e,{get:g[e],enumerable:!0})},bp=(A,g,e,I)=>{if(g&&typeof g=="object"||typeof g=="function")for(let i of Kp(g))!Up.call(A,i)&&i!==e&&HB(A,i,{get:()=>g[i],enumerable:!(I=Lp(g,i))||I.enumerable});return A},jt=A=>bp(HB({},"__esModule",{value:!0}),A),kt,XI,ui,On,Gh,_h=zA(()=>{kt=new Map,XI=[],ui=(A,g,e)=>{if(g&&typeof g.init=="function"&&typeof g.createInferenceSessionHandler=="function"){let I=kt.get(A);if(I===void 0)kt.set(A,{backend:g,priority:e});else{if(I.priority>e)return;if(I.priority===e&&I.backend!==g)throw new Error(`cannot register backend "${A}" using priority ${e}`)}if(e>=0){let i=XI.indexOf(A);i!==-1&&XI.splice(i,1);for(let t=0;t{let g=kt.get(A);if(!g)return"backend not found.";if(g.initialized)return g.backend;if(g.aborted)return g.error;{let e=!!g.initPromise;try{return e||(g.initPromise=g.backend.init(A)),await g.initPromise,g.initialized=!0,g.backend}catch(I){return e||(g.error=`${I}`,g.aborted=!0),g.error}finally{delete g.initPromise}}},Gh=async A=>{let g=A.executionProviders||[],e=g.map(s=>typeof s=="string"?s:s.name),I=e.length===0?XI:e,i,t=[],o=new Set;for(let s of I){let Q=await On(s);typeof Q=="string"?t.push({name:s,err:Q}):(i||(i=Q),i===Q&&o.add(s))}if(!i)throw new Error(`no available backend found. ERR: ${t.map(s=>`[${s.name}] ${s.err}`).join(", ")}`);for(let{name:s,err:Q}of t)e.includes(s)&&console.warn(`removing requested execution provider "${s}" from session options because it is not available: ${Q}`);let C=g.filter(s=>o.has(typeof s=="string"?s:s.name));return[i,new Proxy(A,{get:(s,Q)=>Q==="executionProviders"?C:Reflect.get(s,Q)})]}}),xp=zA(()=>{_h()}),kh,Yp=zA(()=>{kh="1.22.0-dev.20250409-89f8206ba4"}),fs,dI,Lh=zA(()=>{Yp(),fs="warning",dI={wasm:{},webgl:{},webgpu:{},versions:{common:kh},set logLevel(A){if(A!==void 0){if(typeof A!="string"||["verbose","info","warning","error","fatal"].indexOf(A)===-1)throw new Error(`Unsupported logging level: ${A}`);fs=A}},get logLevel(){return fs}},Object.defineProperty(dI,"logLevel",{enumerable:!0})}),sg,Tp=zA(()=>{Lh(),sg=dI}),Kh,Uh,Hp=zA(()=>{Kh=(A,g)=>{let e=typeof document<"u"?document.createElement("canvas"):new OffscreenCanvas(1,1);e.width=A.dims[3],e.height=A.dims[2];let I=e.getContext("2d");if(I!=null){let i,t;g?.tensorLayout!==void 0&&g.tensorLayout==="NHWC"?(i=A.dims[2],t=A.dims[3]):(i=A.dims[3],t=A.dims[2]);let o=g?.format!==void 0?g.format:"RGB",C=g?.norm,s,Q;C===void 0||C.mean===void 0?s=[255,255,255,255]:typeof C.mean=="number"?s=[C.mean,C.mean,C.mean,C.mean]:(s=[C.mean[0],C.mean[1],C.mean[2],0],C.mean[3]!==void 0&&(s[3]=C.mean[3])),C===void 0||C.bias===void 0?Q=[0,0,0,0]:typeof C.bias=="number"?Q=[C.bias,C.bias,C.bias,C.bias]:(Q=[C.bias[0],C.bias[1],C.bias[2],0],C.bias[3]!==void 0&&(Q[3]=C.bias[3]));let r=t*i,B=0,a=r,d=r*2,c=-1;o==="RGBA"?(B=0,a=r,d=r*2,c=r*3):o==="RGB"?(B=0,a=r,d=r*2):o==="RBG"&&(B=0,d=r,a=r*2);for(let F=0;F{let e=typeof document<"u"?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d"),I;if(e!=null){let i,t,o;g?.tensorLayout!==void 0&&g.tensorLayout==="NHWC"?(i=A.dims[2],t=A.dims[1],o=A.dims[3]):(i=A.dims[3],t=A.dims[2],o=A.dims[1]);let C=g!==void 0&&g.format!==void 0?g.format:"RGB",s=g?.norm,Q,r;s===void 0||s.mean===void 0?Q=[255,255,255,255]:typeof s.mean=="number"?Q=[s.mean,s.mean,s.mean,s.mean]:(Q=[s.mean[0],s.mean[1],s.mean[2],255],s.mean[3]!==void 0&&(Q[3]=s.mean[3])),s===void 0||s.bias===void 0?r=[0,0,0,0]:typeof s.bias=="number"?r=[s.bias,s.bias,s.bias,s.bias]:(r=[s.bias[0],s.bias[1],s.bias[2],0],s.bias[3]!==void 0&&(r[3]=s.bias[3]));let B=t*i;if(g!==void 0&&(g.format!==void 0&&o===4&&g.format!=="RGBA"||o===3&&g.format!=="RGB"&&g.format!=="BGR"))throw new Error("Tensor format doesn't match input tensor dims");let a=4,d=0,c=1,F=2,L=3,u=0,h=B,R=B*2,w=-1;C==="RGBA"?(u=0,h=B,R=B*2,w=B*3):C==="RGB"?(u=0,h=B,R=B*2):C==="RBG"&&(u=0,R=B,h=B*2),I=e.createImageData(i,t);for(let y=0;y{PB(),bC=(A,g)=>{if(A===void 0)throw new Error("Image buffer must be defined");if(g.height===void 0||g.width===void 0)throw new Error("Image height and width must be defined");if(g.tensorLayout==="NHWC")throw new Error("NHWC Tensor layout is not supported yet");let{height:e,width:I}=g,i=g.norm??{mean:255,bias:0},t,o;typeof i.mean=="number"?t=[i.mean,i.mean,i.mean,i.mean]:t=[i.mean[0],i.mean[1],i.mean[2],i.mean[3]??255],typeof i.bias=="number"?o=[i.bias,i.bias,i.bias,i.bias]:o=[i.bias[0],i.bias[1],i.bias[2],i.bias[3]??0];let C=g.format!==void 0?g.format:"RGBA",s=g.tensorFormat!==void 0&&g.tensorFormat!==void 0?g.tensorFormat:"RGB",Q=e*I,r=s==="RGBA"?new Float32Array(Q*4):new Float32Array(Q*3),B=4,a=0,d=1,c=2,F=3,L=0,u=Q,h=Q*2,R=-1;C==="RGB"&&(B=3,a=0,d=1,c=2,F=-1),s==="RGBA"?R=Q*3:s==="RBG"?(L=0,h=Q,u=Q*2):s==="BGR"&&(h=0,u=Q,L=Q*2);for(let w=0;w{let e=typeof HTMLImageElement<"u"&&A instanceof HTMLImageElement,I=typeof ImageData<"u"&&A instanceof ImageData,i=typeof ImageBitmap<"u"&&A instanceof ImageBitmap,t=typeof A=="string",o,C=g??{},s=()=>{if(typeof document<"u")return document.createElement("canvas");if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(1,1);throw new Error("Canvas is not supported")},Q=r=>typeof HTMLCanvasElement<"u"&&r instanceof HTMLCanvasElement||r instanceof OffscreenCanvas?r.getContext("2d"):null;if(e){let r=s();r.width=A.width,r.height=A.height;let B=Q(r);if(B!=null){let a=A.height,d=A.width;if(g!==void 0&&g.resizedHeight!==void 0&&g.resizedWidth!==void 0&&(a=g.resizedHeight,d=g.resizedWidth),g!==void 0){if(C=g,g.tensorFormat!==void 0)throw new Error("Image input config format must be RGBA for HTMLImageElement");C.tensorFormat="RGBA",C.height=a,C.width=d}else C.tensorFormat="RGBA",C.height=a,C.width=d;B.drawImage(A,0,0),o=B.getImageData(0,0,d,a).data}else throw new Error("Can not access image data")}else if(I){let r,B;if(g!==void 0&&g.resizedWidth!==void 0&&g.resizedHeight!==void 0?(r=g.resizedHeight,B=g.resizedWidth):(r=A.height,B=A.width),g!==void 0&&(C=g),C.format="RGBA",C.height=r,C.width=B,g!==void 0){let a=s();a.width=B,a.height=r;let d=Q(a);if(d!=null)d.putImageData(A,0,0),o=d.getImageData(0,0,B,r).data;else throw new Error("Can not access image data")}else o=A.data}else if(i){if(g===void 0)throw new Error("Please provide image config with format for Imagebitmap");let r=s();r.width=A.width,r.height=A.height;let B=Q(r);if(B!=null){let a=A.height,d=A.width;return B.drawImage(A,0,0,d,a),o=B.getImageData(0,0,d,a).data,C.height=a,C.width=d,bC(o,C)}else throw new Error("Can not access image data")}else{if(t)return new Promise((r,B)=>{let a=s(),d=Q(a);if(!A||!d)return B();let c=new Image;c.crossOrigin="Anonymous",c.src=A,c.onload=()=>{a.width=c.width,a.height=c.height,d.drawImage(c,0,0,a.width,a.height);let F=d.getImageData(0,0,a.width,a.height);C.height=a.height,C.width=a.width,r(bC(F.data,C))}});throw new Error("Input data provided is not supported - aborted tensor creation")}if(o!==void 0)return bC(o,C);throw new Error("Input data provided is not supported - aborted tensor creation")},bh=(A,g)=>{let{width:e,height:I,download:i,dispose:t}=g,o=[1,I,e,4];return new QI({location:"texture",type:"float32",texture:A,dims:o,download:i,dispose:t})},xh=(A,g)=>{let{dataType:e,dims:I,download:i,dispose:t}=g;return new QI({location:"gpu-buffer",type:e??"float32",gpuBuffer:A,dims:I,download:i,dispose:t})},Yh=(A,g)=>{let{dataType:e,dims:I,download:i,dispose:t}=g;return new QI({location:"ml-tensor",type:e??"float32",mlTensor:A,dims:I,download:i,dispose:t})},Th=(A,g,e)=>new QI({location:"cpu-pinned",type:A,data:g,dims:e??[g.length]})}),hi,Pt,ms,Hh,vp=zA(()=>{hi=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array],["int4",Uint8Array],["uint4",Uint8Array]]),Pt=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]),ms=!1,Hh=()=>{if(!ms){ms=!0;let A=typeof BigInt64Array<"u"&&BigInt64Array.from,g=typeof BigUint64Array<"u"&&BigUint64Array.from,e=globalThis.Float16Array,I=typeof e<"u"&&e.from;A&&(hi.set("int64",BigInt64Array),Pt.set(BigInt64Array,"int64")),g&&(hi.set("uint64",BigUint64Array),Pt.set(BigUint64Array,"uint64")),I?(hi.set("float16",e),Pt.set(e,"float16")):hi.set("float16",Uint16Array)}}}),Ph,vh,qp=zA(()=>{PB(),Ph=A=>{let g=1;for(let e=0;e{switch(A.location){case"cpu":return new QI(A.type,A.data,g);case"cpu-pinned":return new QI({location:"cpu-pinned",data:A.data,type:A.type,dims:g});case"texture":return new QI({location:"texture",texture:A.texture,type:A.type,dims:g});case"gpu-buffer":return new QI({location:"gpu-buffer",gpuBuffer:A.gpuBuffer,type:A.type,dims:g});case"ml-tensor":return new QI({location:"ml-tensor",mlTensor:A.mlTensor,type:A.type,dims:g});default:throw new Error(`tensorReshape: tensor location ${A.location} is not supported`)}}}),QI,PB=zA(()=>{Hp(),Pp(),vp(),qp(),QI=class{constructor(A,g,e){Hh();let I,i;if(typeof A=="object"&&"location"in A)switch(this.dataLocation=A.location,I=A.type,i=A.dims,A.location){case"cpu-pinned":{let o=hi.get(I);if(!o)throw new TypeError(`unsupported type "${I}" to create tensor from pinned buffer`);if(!(A.data instanceof o))throw new TypeError(`buffer should be of type ${o.name}`);this.cpuData=A.data;break}case"texture":{if(I!=="float32")throw new TypeError(`unsupported type "${I}" to create tensor from texture`);this.gpuTextureData=A.texture,this.downloader=A.download,this.disposer=A.dispose;break}case"gpu-buffer":{if(I!=="float32"&&I!=="float16"&&I!=="int32"&&I!=="int64"&&I!=="uint32"&&I!=="uint8"&&I!=="bool"&&I!=="uint4"&&I!=="int4")throw new TypeError(`unsupported type "${I}" to create tensor from gpu buffer`);this.gpuBufferData=A.gpuBuffer,this.downloader=A.download,this.disposer=A.dispose;break}case"ml-tensor":{if(I!=="float32"&&I!=="float16"&&I!=="int32"&&I!=="int64"&&I!=="uint32"&&I!=="uint64"&&I!=="int8"&&I!=="uint8"&&I!=="bool"&&I!=="uint4"&&I!=="int4")throw new TypeError(`unsupported type "${I}" to create tensor from MLTensor`);this.mlTensorData=A.mlTensor,this.downloader=A.download,this.disposer=A.dispose;break}default:throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let o,C;if(typeof A=="string")if(I=A,C=e,A==="string"){if(!Array.isArray(g))throw new TypeError("A string tensor's data must be a string array.");o=g}else{let s=hi.get(A);if(s===void 0)throw new TypeError(`Unsupported tensor type: ${A}.`);if(Array.isArray(g)){if(A==="float16"&&s===Uint16Array||A==="uint4"||A==="int4")throw new TypeError(`Creating a ${A} tensor from number array is not supported. Please use ${s.name} as data.`);A==="uint64"||A==="int64"?o=s.from(g,BigInt):o=s.from(g)}else if(g instanceof s)o=g;else if(g instanceof Uint8ClampedArray)if(A==="uint8")o=Uint8Array.from(g);else throw new TypeError("A Uint8ClampedArray tensor's data must be type of uint8");else if(A==="float16"&&g instanceof Uint16Array&&s!==Uint16Array)o=new globalThis.Float16Array(g.buffer,g.byteOffset,g.length);else throw new TypeError(`A ${I} tensor's data must be type of ${s}`)}else if(C=g,Array.isArray(A)){if(A.length===0)throw new TypeError("Tensor type cannot be inferred from an empty array.");let s=typeof A[0];if(s==="string")I="string",o=A;else if(s==="boolean")I="bool",o=Uint8Array.from(A);else throw new TypeError(`Invalid element type of data array: ${s}.`)}else if(A instanceof Uint8ClampedArray)I="uint8",o=Uint8Array.from(A);else{let s=Pt.get(A.constructor);if(s===void 0)throw new TypeError(`Unsupported type for tensor data: ${A.constructor}.`);I=s,o=A}if(C===void 0)C=[o.length];else if(!Array.isArray(C))throw new TypeError("A tensor's dims must be a number array");i=C,this.cpuData=o,this.dataLocation="cpu"}let t=Ph(i);if(this.cpuData&&t!==this.cpuData.length&&!((I==="uint4"||I==="int4")&&Math.ceil(t/2)===this.cpuData.length))throw new Error(`Tensor's size(${t}) does not match data length(${this.cpuData.length}).`);this.type=I,this.dims=i,this.size=t}static async fromImage(A,g){return Jh(A,g)}static fromTexture(A,g){return bh(A,g)}static fromGpuBuffer(A,g){return xh(A,g)}static fromMLTensor(A,g){return Yh(A,g)}static fromPinnedBuffer(A,g,e){return Th(A,g,e)}toDataURL(A){return Kh(this,A)}toImageData(A){return Uh(this,A)}get data(){if(this.ensureValid(),!this.cpuData)throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw new Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw new Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw new Error("The data is not stored as a WebNN MLTensor.");return this.mlTensorData}async getData(A){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":case"ml-tensor":{if(!this.downloader)throw new Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw new Error("The current tensor is being downloaded.");try{this.isDownloading=!0;let g=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=g,A&&this.disposer&&(this.disposer(),this.disposer=void 0),g}finally{this.isDownloading=!1}}default:throw new Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw new Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if(this.dataLocation==="none")throw new Error("The tensor is disposed.")}reshape(A){if(this.ensureValid(),this.downloader||this.disposer)throw new Error("Cannot reshape a tensor that owns GPU resource.");return vh(this,A)}}}),kI,qh=zA(()=>{PB(),kI=QI}),Vt,Ms,KI,DI,Oh=zA(()=>{Lh(),Vt=(A,g)=>{(typeof dI.trace>"u"?!dI.wasm.trace:!dI.trace)||console.timeStamp(`${A}::ORT::${g}`)},Ms=(A,g)=>{let e=new Error().stack?.split(/\r\n|\r|\n/g)||[],I=!1;for(let i=0;i{(typeof dI.trace>"u"?!dI.wasm.trace:!dI.trace)||Ms("BEGIN",A)},DI=A=>{(typeof dI.trace>"u"?!dI.wasm.trace:!dI.trace)||Ms("END",A)}}),Wh,Op=zA(()=>{_h(),qh(),Oh(),Wh=class jh{constructor(g){this.handler=g}async run(g,e,I){KI();let i={},t={};if(typeof g!="object"||g===null||g instanceof kI||Array.isArray(g))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let o=!0;if(typeof e=="object"){if(e===null)throw new TypeError("Unexpected argument[1]: cannot be null.");if(e instanceof kI)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(e)){if(e.length===0)throw new TypeError("'fetches' cannot be an empty array.");o=!1;for(let Q of e){if(typeof Q!="string")throw new TypeError("'fetches' must be a string array or an object.");if(this.outputNames.indexOf(Q)===-1)throw new RangeError(`'fetches' contains invalid output name: ${Q}.`);i[Q]=null}if(typeof I=="object"&&I!==null)t=I;else if(typeof I<"u")throw new TypeError("'options' must be an object.")}else{let Q=!1,r=Object.getOwnPropertyNames(e);for(let B of this.outputNames)if(r.indexOf(B)!==-1){let a=e[B];(a===null||a instanceof kI)&&(Q=!0,o=!1,i[B]=a)}if(Q){if(typeof I=="object"&&I!==null)t=I;else if(typeof I<"u")throw new TypeError("'options' must be an object.")}else t=e}}else if(typeof e<"u")throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(let Q of this.inputNames)if(typeof g[Q]>"u")throw new Error(`input '${Q}' is missing in 'feeds'.`);if(o)for(let Q of this.outputNames)i[Q]=null;let C=await this.handler.run(g,i,t),s={};for(let Q in C)if(Object.hasOwnProperty.call(C,Q)){let r=C[Q];r instanceof kI?s[Q]=r:s[Q]=new kI(r.type,r.data,r.dims)}return DI(),s}async release(){return this.handler.dispose()}static async create(g,e,I,i){KI();let t,o={};if(typeof g=="string"){if(t=g,typeof e=="object"&&e!==null)o=e;else if(typeof e<"u")throw new TypeError("'options' must be an object.")}else if(g instanceof Uint8Array){if(t=g,typeof e=="object"&&e!==null)o=e;else if(typeof e<"u")throw new TypeError("'options' must be an object.")}else if(g instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&g instanceof SharedArrayBuffer){let r=g,B=0,a=g.byteLength;if(typeof e=="object"&&e!==null)o=e;else if(typeof e=="number"){if(B=e,!Number.isSafeInteger(B))throw new RangeError("'byteOffset' must be an integer.");if(B<0||B>=r.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${r.byteLength}).`);if(a=g.byteLength-B,typeof I=="number"){if(a=I,!Number.isSafeInteger(a))throw new RangeError("'byteLength' must be an integer.");if(a<=0||B+a>r.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${r.byteLength-B}].`);if(typeof i=="object"&&i!==null)o=i;else if(typeof i<"u")throw new TypeError("'options' must be an object.")}else if(typeof I<"u")throw new TypeError("'byteLength' must be a number.")}else if(typeof e<"u")throw new TypeError("'options' must be an object.");t=new Uint8Array(r,B,a)}else throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");let[C,s]=await Gh(o),Q=await C.createInferenceSessionHandler(t,s);return DI(),new jh(Q)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}get inputMetadata(){return this.handler.inputMetadata}get outputMetadata(){return this.handler.outputMetadata}}}),vB,Wp=zA(()=>{Op(),vB=Wh}),jp=zA(()=>{}),Vp=zA(()=>{}),zp=zA(()=>{}),$p=zA(()=>{}),Vh={};It(Vh,{InferenceSession:()=>vB,TRACE:()=>Vt,TRACE_FUNC_BEGIN:()=>KI,TRACE_FUNC_END:()=>DI,Tensor:()=>kI,env:()=>sg,registerBackend:()=>ui});var UI=zA(()=>{xp(),Tp(),Wp(),qh(),jp(),Vp(),Oh(),zp(),$p()}),qB=zA(()=>{}),zh={};It(zh,{default:()=>$h});var Fs,Ss,$h,Xp=zA(()=>{g0(),fi(),OB(),Fs="ort-wasm-proxy-worker",Ss=globalThis.self?.name===Fs,Ss&&(self.onmessage=A=>{let{type:g,in:e}=A.data;try{switch(g){case"init-wasm":WB(e.wasm).then(()=>{aQ(e).then(()=>{postMessage({type:g})},I=>{postMessage({type:g,err:I})})},I=>{postMessage({type:g,err:I})});break;case"init-ep":{let{epName:I,env:i}=e;rQ(i,I).then(()=>{postMessage({type:g})},t=>{postMessage({type:g,err:t})});break}case"copy-from":{let{buffer:I}=e,i=so(I);postMessage({type:g,out:i});break}case"create":{let{model:I,options:i}=e;EQ(I,i).then(t=>{postMessage({type:g,out:t})},t=>{postMessage({type:g,err:t})});break}case"release":nQ(e),postMessage({type:g});break;case"run":{let{sessionId:I,inputIndices:i,inputs:t,outputIndices:o,options:C}=e;lQ(I,i,t,o,new Array(o.length).fill(null),C).then(s=>{s.some(Q=>Q[3]!=="cpu")?postMessage({type:g,err:"Proxy does not support non-cpu tensor location."}):postMessage({type:g,out:s},dQ([...t,...s]))},s=>{postMessage({type:g,err:s})});break}case"end-profiling":cQ(e),postMessage({type:g});break;default:}}catch(I){postMessage({type:g,err:I})}}),$h=Ss?null:A=>new Worker(A??BI,{type:"module",name:Fs})}),Xh={};It(Xh,{default:()=>Zh});var Ns,Rs,Zh,Wn,Zp=zA(()=>{Rs=(Ns=import.meta.url,async function(A={}){var g,e,I=A,i=new Promise((E,M)=>{g=E,e=M}),t=typeof window=="object",o=typeof WorkerGlobalScope<"u",C=o&&self.name?.startsWith("em-pthread");I.mountExternalData=(E,M)=>{E.startsWith("./")&&(E=E.substring(2)),(I.Eb||(I.Eb=new Map)).set(E,M)},I.unmountExternalData=()=>{delete I.Eb};var s=globalThis.SharedArrayBuffer??new WebAssembly.Memory({initial:0,maximum:0,pc:!0}).buffer.constructor;let Q=E=>async(...M)=>{try{if(I.Fb)throw Error("Session already started");let _=I.Fb={dc:M[0],errors:[]},Y=await E(...M);if(I.Fb!==_)throw Error("Session mismatch");I.Jb?.flush();let V=_.errors;if(0_A),0{if(E==="webgpu"){[I.Jb,I.Ub,I.Yb,I.Kb,I.Xb,I.jb,I.Zb,I.ac,I.Vb,I.Wb,I.$b]=M;let _=I.Jb;I.jsepRegisterBuffer=(Y,V,rA,_A)=>_.registerBuffer(Y,V,rA,_A),I.jsepGetBuffer=Y=>_.getBuffer(Y),I.jsepCreateDownloader=(Y,V,rA)=>_.createDownloader(Y,V,rA),I.jsepOnCreateSession=Y=>{_.onCreateSession(Y)},I.jsepOnReleaseSession=Y=>{_.onReleaseSession(Y)},I.jsepOnRunStart=Y=>_.onRunStart(Y),I.bc=(Y,V)=>{_.upload(Y,V)}}else if(E==="webnn"){let _=M[0];[I.nc,I.Nb,I.webnnEnsureTensor,I.Ob,I.webnnDownloadTensor]=M.slice(1),I.webnnReleaseTensorId=I.Nb,I.webnnUploadTensor=I.Ob,I.webnnOnRunStart=Y=>_.onRunStart(Y),I.webnnOnRunEnd=_.onRunEnd.bind(_),I.webnnRegisterMLContext=(Y,V)=>{_.registerMLContext(Y,V)},I.webnnOnReleaseSession=Y=>{_.onReleaseSession(Y)},I.webnnCreateMLTensorDownloader=(Y,V)=>_.createMLTensorDownloader(Y,V),I.webnnRegisterMLTensor=(Y,V,rA,_A)=>_.registerMLTensor(Y,V,rA,_A),I.webnnCreateMLContext=Y=>_.createMLContext(Y),I.webnnRegisterMLConstant=(Y,V,rA,_A,OA,oe)=>_.registerMLConstant(Y,V,rA,_A,OA,I.Eb,oe),I.webnnRegisterGraphInput=_.registerGraphInput.bind(_),I.webnnIsGraphInput=_.isGraphInput.bind(_),I.webnnCreateTemporaryTensor=_.createTemporaryTensor.bind(_),I.webnnIsInt64Supported=_.isInt64Supported.bind(_)}};let r=()=>{let E=(M,_,Y)=>(...V)=>{let rA=ug,_A=_?.();V=M(...V);let OA=_?.();return _A!==OA&&(M=OA,Y(_A),_=Y=null),ug!=rA?new Promise((oe,Ee)=>{Pg={resolve:oe,reject:Ee}}):V};(()=>{for(let M of["_OrtAppendExecutionProvider","_OrtCreateSession","_OrtRun","_OrtRunWithBinding","_OrtBindInput"])I[M]=E(I[M],()=>I[M],_=>I[M]=_)})(),Q!==void 0&&(I._OrtRun=Q(I._OrtRun),I._OrtRunWithBinding=Q(I._OrtRunWithBinding)),r=void 0};I.asyncInit=()=>{r?.()};var B,a,d=Object.assign({},I),c=(E,M)=>{throw M},F="";(t||o)&&(o?F=self.location.href:typeof document<"u"&&document.currentScript&&(F=document.currentScript.src),Ns&&(F=Ns),F=F.startsWith("blob:")?"":F.slice(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1),o&&(a=E=>{var M=new XMLHttpRequest;return M.open("GET",E,!1),M.responseType="arraybuffer",M.send(null),new Uint8Array(M.response)}),B=async E=>{if(DA(E))return new Promise((_,Y)=>{var V=new XMLHttpRequest;V.open("GET",E,!0),V.responseType="arraybuffer",V.onload=()=>{V.status==200||V.status==0&&V.response?_(V.response):Y(V.status)},V.onerror=Y,V.send(null)});var M=await fetch(E,{credentials:"same-origin"});if(M.ok)return M.arrayBuffer();throw Error(M.status+" : "+M.url)});var L=console.log.bind(console),u=console.error.bind(console),h=L,R=u;Object.assign(I,d),d=null;var w,y,D,f,G,J,T,X,gA,x,tA,Z,IA,oA=I.wasmBinary,CA=!1,DA=E=>E.startsWith("file://");function cA(){return w.buffer!=f.buffer&&hA(),f}function q(){return w.buffer!=f.buffer&&hA(),G}function U(){return w.buffer!=f.buffer&&hA(),J}function z(){return w.buffer!=f.buffer&&hA(),T}function H(){return w.buffer!=f.buffer&&hA(),X}function EA(){return w.buffer!=f.buffer&&hA(),gA}function xA(){return w.buffer!=f.buffer&&hA(),x}function RA(){return w.buffer!=f.buffer&&hA(),IA}if(C){let E=function(M){try{var _=M.data,Y=_.Bb;if(Y==="load"){let V=[];self.onmessage=rA=>V.push(rA),self.startWorker=()=>{postMessage({Bb:"loaded"});for(let rA of V)E(rA);self.onmessage=E};for(let rA of _.Rb)I[rA]&&!I[rA].proxy||(I[rA]=(..._A)=>{postMessage({Bb:"callHandler",Qb:rA,args:_A})},rA=="print"&&(h=I[rA]),rA=="printErr"&&(R=I[rA]));w=_.kc,hA(),YA(_.lc)}else if(Y==="run"){b(_.Ab),Ci(_.Ab,0,0,1,0,0),Mg(),AA(_.Ab),ge||(pt(),ge=!0);try{QA(_.fc,_.Hb)}catch(V){if(V!="unwind")throw V}}else _.target!=="setimmediate"&&(Y==="checkMailbox"?ge&&lA():Y&&(R(`worker: received unknown command ${Y}`),R(_)))}catch(V){throw yt(),V}};var YA,ge=!1;R=function(...M){M=M.join(" "),console.error(M)},self.alert=function(...M){postMessage({Bb:"alert",text:M.join(" "),ic:VI()})},self.onunhandledrejection=M=>{throw M.reason||M},self.onmessage=E}function hA(){var E=w.buffer;I.HEAP8=f=new Int8Array(E),I.HEAP16=J=new Int16Array(E),I.HEAPU8=G=new Uint8Array(E),I.HEAPU16=T=new Uint16Array(E),I.HEAP32=X=new Int32Array(E),I.HEAPU32=gA=new Uint32Array(E),I.HEAPF32=x=new Float32Array(E),I.HEAPF64=IA=new Float64Array(E),I.HEAP64=tA=new BigInt64Array(E),I.HEAPU64=Z=new BigUint64Array(E)}function j(){C?startWorker(I):De.Ca()}C||(w=new WebAssembly.Memory({initial:256,maximum:65536,shared:!0}),hA());var dA,$=0,fA=null;function FA(){if(--$==0&&fA){var E=fA;fA=null,E()}}function LA(E){throw R(E="Aborted("+E+")"),CA=!0,E=new WebAssembly.RuntimeError(E+". Build with -sASSERTIONS for more info."),e(E),E}function GA(){return{a:{L:jA,Aa:vA,b:sA,$:TA,A:Be,pa:og,X:Xe,Z:Tg,qa:eg,na:Lg,ga:eI,ma:iI,J:$g,Y:rI,V:Fg,oa:EI,W:Xg,va:uI,E:HA,Q:le,O:TI,D:We,u:yI,r:l,P:S,z:BA,R:N,ja:P,T:NA,aa:$A,M:ZA,F:qA,ia:AA,sa:Re,t:be,Ba:Eg,w:vg,o:Gg,l:wg,c:wI,n:lI,j:Zt,v:AC,p:OI,f:eC,s:gC,m:IC,e:iC,k:tC,i:tt,g:CC,d:oC,da:Ct,ea:Bt,fa:Bo,ba:Qt,ca:Si,N:at,xa:sC,ua:QC,h:aC,C:Gi,G:Et,ta:BC,x:rC,ra:nt,U:HI,q:Ni,y:EC,K:Qo,S:nC,za:lC,ya:cC,ka:Ii,la:ct,_:bA,B:dt,I:ht,ha:Ui,H:Dt,a:w,wa:he}}}var KA={829644:(E,M,_,Y,V)=>{if(I===void 0||!I.Eb)return 1;if((E=te(Number(E>>>0))).startsWith("./")&&(E=E.substring(2)),!(E=I.Eb.get(E)))return 2;if(M=Number(M>>>0),_=Number(_>>>0),Y=Number(Y>>>0),M+_>E.byteLength)return 3;try{let rA=E.subarray(M,M+_);switch(V){case 0:q().set(rA,Y>>>0);break;case 1:I.mc?I.mc(Y,rA):I.bc(Y,rA);break;default:return 4}return 0}catch{return 4}},830468:(E,M,_)=>{I.Ob(E,q().subarray(M>>>0,M+_>>>0))},830532:()=>I.nc(),830574:E=>{I.Nb(E)},830611:()=>{I.Vb()},830642:()=>{I.Wb()},830671:()=>{I.$b()},830696:E=>I.Ub(E),830729:E=>I.Yb(E),830761:(E,M,_)=>{I.Kb(Number(E),Number(M),Number(_),!0)},830824:(E,M,_)=>{I.Kb(Number(E),Number(M),Number(_))},830881:()=>typeof wasmOffsetConverter<"u",830938:E=>{I.jb("Abs",E,void 0)},830989:E=>{I.jb("Neg",E,void 0)},831040:E=>{I.jb("Floor",E,void 0)},831093:E=>{I.jb("Ceil",E,void 0)},831145:E=>{I.jb("Reciprocal",E,void 0)},831203:E=>{I.jb("Sqrt",E,void 0)},831255:E=>{I.jb("Exp",E,void 0)},831306:E=>{I.jb("Erf",E,void 0)},831357:E=>{I.jb("Sigmoid",E,void 0)},831412:(E,M,_)=>{I.jb("HardSigmoid",E,{alpha:M,beta:_})},831491:E=>{I.jb("Log",E,void 0)},831542:E=>{I.jb("Sin",E,void 0)},831593:E=>{I.jb("Cos",E,void 0)},831644:E=>{I.jb("Tan",E,void 0)},831695:E=>{I.jb("Asin",E,void 0)},831747:E=>{I.jb("Acos",E,void 0)},831799:E=>{I.jb("Atan",E,void 0)},831851:E=>{I.jb("Sinh",E,void 0)},831903:E=>{I.jb("Cosh",E,void 0)},831955:E=>{I.jb("Asinh",E,void 0)},832008:E=>{I.jb("Acosh",E,void 0)},832061:E=>{I.jb("Atanh",E,void 0)},832114:E=>{I.jb("Tanh",E,void 0)},832166:E=>{I.jb("Not",E,void 0)},832217:(E,M,_)=>{I.jb("Clip",E,{min:M,max:_})},832286:E=>{I.jb("Clip",E,void 0)},832338:(E,M)=>{I.jb("Elu",E,{alpha:M})},832396:E=>{I.jb("Gelu",E,void 0)},832448:E=>{I.jb("Relu",E,void 0)},832500:(E,M)=>{I.jb("LeakyRelu",E,{alpha:M})},832564:(E,M)=>{I.jb("ThresholdedRelu",E,{alpha:M})},832634:(E,M)=>{I.jb("Cast",E,{to:M})},832692:E=>{I.jb("Add",E,void 0)},832743:E=>{I.jb("Sub",E,void 0)},832794:E=>{I.jb("Mul",E,void 0)},832845:E=>{I.jb("Div",E,void 0)},832896:E=>{I.jb("Pow",E,void 0)},832947:E=>{I.jb("Equal",E,void 0)},833e3:E=>{I.jb("Greater",E,void 0)},833055:E=>{I.jb("GreaterOrEqual",E,void 0)},833117:E=>{I.jb("Less",E,void 0)},833169:E=>{I.jb("LessOrEqual",E,void 0)},833228:(E,M,_,Y,V)=>{I.jb("ReduceMean",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},833403:(E,M,_,Y,V)=>{I.jb("ReduceMax",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},833577:(E,M,_,Y,V)=>{I.jb("ReduceMin",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},833751:(E,M,_,Y,V)=>{I.jb("ReduceProd",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},833926:(E,M,_,Y,V)=>{I.jb("ReduceSum",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834100:(E,M,_,Y,V)=>{I.jb("ReduceL1",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834273:(E,M,_,Y,V)=>{I.jb("ReduceL2",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834446:(E,M,_,Y,V)=>{I.jb("ReduceLogSum",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834623:(E,M,_,Y,V)=>{I.jb("ReduceSumSquare",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834803:(E,M,_,Y,V)=>{I.jb("ReduceLogSumExp",E,{keepDims:!!M,noopWithEmptyAxes:!!_,axes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834983:E=>{I.jb("Where",E,void 0)},835036:(E,M,_)=>{I.jb("Transpose",E,{perm:M?Array.from(H().subarray(Number(M)>>>0,Number(_)>>>0)):[]})},835160:(E,M,_,Y)=>{I.jb("DepthToSpace",E,{blocksize:M,mode:te(_),format:Y?"NHWC":"NCHW"})},835293:(E,M,_,Y)=>{I.jb("DepthToSpace",E,{blocksize:M,mode:te(_),format:Y?"NHWC":"NCHW"})},835426:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne,xe,je,_g,bI)=>{I.jb("ConvTranspose",E,{format:oe?"NHWC":"NCHW",autoPad:M,dilations:[_],group:Y,kernelShape:[V],pads:[rA,_A],strides:[OA],wIsConst:()=>!!cA()[Ee>>>0],outputPadding:Ne?Array.from(H().subarray(Number(Ne)>>>0,Number(xe)>>>0)):[],outputShape:je?Array.from(H().subarray(Number(je)>>>0,Number(_g)>>>0)):[],activation:te(bI)})},835859:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne,xe,je,_g)=>{I.jb("ConvTranspose",E,{format:OA?"NHWC":"NCHW",autoPad:M,dilations:Array.from(H().subarray(Number(_)>>>0,2+(Number(_)>>>0)>>>0)),group:Y,kernelShape:Array.from(H().subarray(Number(V)>>>0,2+(Number(V)>>>0)>>>0)),pads:Array.from(H().subarray(Number(rA)>>>0,4+(Number(rA)>>>0)>>>0)),strides:Array.from(H().subarray(Number(_A)>>>0,2+(Number(_A)>>>0)>>>0)),wIsConst:()=>!!cA()[oe>>>0],outputPadding:Ee?Array.from(H().subarray(Number(Ee)>>>0,Number(Ne)>>>0)):[],outputShape:xe?Array.from(H().subarray(Number(xe)>>>0,Number(je)>>>0)):[],activation:te(_g)})},836520:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne,xe,je,_g,bI)=>{I.jb("ConvTranspose",E,{format:oe?"NHWC":"NCHW",autoPad:M,dilations:[_],group:Y,kernelShape:[V],pads:[rA,_A],strides:[OA],wIsConst:()=>!!cA()[Ee>>>0],outputPadding:Ne?Array.from(H().subarray(Number(Ne)>>>0,Number(xe)>>>0)):[],outputShape:je?Array.from(H().subarray(Number(je)>>>0,Number(_g)>>>0)):[],activation:te(bI)})},836953:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne,xe,je,_g)=>{I.jb("ConvTranspose",E,{format:OA?"NHWC":"NCHW",autoPad:M,dilations:Array.from(H().subarray(Number(_)>>>0,2+(Number(_)>>>0)>>>0)),group:Y,kernelShape:Array.from(H().subarray(Number(V)>>>0,2+(Number(V)>>>0)>>>0)),pads:Array.from(H().subarray(Number(rA)>>>0,4+(Number(rA)>>>0)>>>0)),strides:Array.from(H().subarray(Number(_A)>>>0,2+(Number(_A)>>>0)>>>0)),wIsConst:()=>!!cA()[oe>>>0],outputPadding:Ee?Array.from(H().subarray(Number(Ee)>>>0,Number(Ne)>>>0)):[],outputShape:xe?Array.from(H().subarray(Number(xe)>>>0,Number(je)>>>0)):[],activation:te(_g)})},837614:(E,M)=>{I.jb("GlobalAveragePool",E,{format:M?"NHWC":"NCHW"})},837705:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne,xe,je,_g)=>{I.jb("AveragePool",E,{format:_g?"NHWC":"NCHW",auto_pad:M,ceil_mode:_,count_include_pad:Y,storage_order:V,dilations:rA?Array.from(H().subarray(Number(rA)>>>0,Number(_A)>>>0)):[],kernel_shape:OA?Array.from(H().subarray(Number(OA)>>>0,Number(oe)>>>0)):[],pads:Ee?Array.from(H().subarray(Number(Ee)>>>0,Number(Ne)>>>0)):[],strides:xe?Array.from(H().subarray(Number(xe)>>>0,Number(je)>>>0)):[]})},838184:(E,M)=>{I.jb("GlobalAveragePool",E,{format:M?"NHWC":"NCHW"})},838275:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne,xe,je,_g)=>{I.jb("AveragePool",E,{format:_g?"NHWC":"NCHW",auto_pad:M,ceil_mode:_,count_include_pad:Y,storage_order:V,dilations:rA?Array.from(H().subarray(Number(rA)>>>0,Number(_A)>>>0)):[],kernel_shape:OA?Array.from(H().subarray(Number(OA)>>>0,Number(oe)>>>0)):[],pads:Ee?Array.from(H().subarray(Number(Ee)>>>0,Number(Ne)>>>0)):[],strides:xe?Array.from(H().subarray(Number(xe)>>>0,Number(je)>>>0)):[]})},838754:(E,M)=>{I.jb("GlobalMaxPool",E,{format:M?"NHWC":"NCHW"})},838841:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne,xe,je,_g)=>{I.jb("MaxPool",E,{format:_g?"NHWC":"NCHW",auto_pad:M,ceil_mode:_,count_include_pad:Y,storage_order:V,dilations:rA?Array.from(H().subarray(Number(rA)>>>0,Number(_A)>>>0)):[],kernel_shape:OA?Array.from(H().subarray(Number(OA)>>>0,Number(oe)>>>0)):[],pads:Ee?Array.from(H().subarray(Number(Ee)>>>0,Number(Ne)>>>0)):[],strides:xe?Array.from(H().subarray(Number(xe)>>>0,Number(je)>>>0)):[]})},839316:(E,M)=>{I.jb("GlobalMaxPool",E,{format:M?"NHWC":"NCHW"})},839403:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne,xe,je,_g)=>{I.jb("MaxPool",E,{format:_g?"NHWC":"NCHW",auto_pad:M,ceil_mode:_,count_include_pad:Y,storage_order:V,dilations:rA?Array.from(H().subarray(Number(rA)>>>0,Number(_A)>>>0)):[],kernel_shape:OA?Array.from(H().subarray(Number(OA)>>>0,Number(oe)>>>0)):[],pads:Ee?Array.from(H().subarray(Number(Ee)>>>0,Number(Ne)>>>0)):[],strides:xe?Array.from(H().subarray(Number(xe)>>>0,Number(je)>>>0)):[]})},839878:(E,M,_,Y,V)=>{I.jb("Gemm",E,{alpha:M,beta:_,transA:Y,transB:V})},839982:E=>{I.jb("MatMul",E,void 0)},840036:(E,M,_,Y)=>{I.jb("ArgMax",E,{keepDims:!!M,selectLastIndex:!!_,axis:Y})},840144:(E,M,_,Y)=>{I.jb("ArgMin",E,{keepDims:!!M,selectLastIndex:!!_,axis:Y})},840252:(E,M)=>{I.jb("Softmax",E,{axis:M})},840315:(E,M)=>{I.jb("Concat",E,{axis:M})},840375:(E,M,_,Y,V)=>{I.jb("Split",E,{axis:M,numOutputs:_,splitSizes:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},840531:E=>{I.jb("Expand",E,void 0)},840585:(E,M)=>{I.jb("Gather",E,{axis:Number(M)})},840656:(E,M)=>{I.jb("GatherElements",E,{axis:Number(M)})},840735:(E,M)=>{I.jb("GatherND",E,{batch_dims:Number(M)})},840814:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne)=>{I.jb("Resize",E,{antialias:M,axes:_?Array.from(H().subarray(Number(_)>>>0,Number(Y)>>>0)):[],coordinateTransformMode:te(V),cubicCoeffA:rA,excludeOutside:_A,extrapolationValue:OA,keepAspectRatioPolicy:te(oe),mode:te(Ee),nearestMode:te(Ne)})},841176:(E,M,_,Y,V,rA,_A)=>{I.jb("Slice",E,{starts:M?Array.from(H().subarray(Number(M)>>>0,Number(_)>>>0)):[],ends:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[],axes:rA?Array.from(H().subarray(Number(rA)>>>0,Number(_A)>>>0)):[]})},841440:E=>{I.jb("Tile",E,void 0)},841492:(E,M,_)=>{I.jb("InstanceNormalization",E,{epsilon:M,format:_?"NHWC":"NCHW"})},841606:(E,M,_)=>{I.jb("InstanceNormalization",E,{epsilon:M,format:_?"NHWC":"NCHW"})},841720:E=>{I.jb("Range",E,void 0)},841773:(E,M)=>{I.jb("Einsum",E,{equation:te(M)})},841854:(E,M,_,Y,V)=>{I.jb("Pad",E,{mode:M,value:_,pads:Y?Array.from(H().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},841997:(E,M,_,Y,V,rA)=>{I.jb("BatchNormalization",E,{epsilon:M,momentum:_,spatial:!!V,trainingMode:!!Y,format:rA?"NHWC":"NCHW"})},842166:(E,M,_,Y,V,rA)=>{I.jb("BatchNormalization",E,{epsilon:M,momentum:_,spatial:!!V,trainingMode:!!Y,format:rA?"NHWC":"NCHW"})},842335:(E,M,_)=>{I.jb("CumSum",E,{exclusive:Number(M),reverse:Number(_)})},842432:(E,M,_)=>{I.jb("DequantizeLinear",E,{axis:M,blockSize:_})},842522:(E,M,_,Y,V)=>{I.jb("GridSample",E,{align_corners:M,mode:te(_),padding_mode:te(Y),format:V?"NHWC":"NCHW"})},842692:(E,M,_,Y,V)=>{I.jb("GridSample",E,{align_corners:M,mode:te(_),padding_mode:te(Y),format:V?"NHWC":"NCHW"})},842862:(E,M)=>{I.jb("ScatterND",E,{reduction:te(M)})},842947:(E,M,_,Y,V,rA,_A,OA,oe)=>{I.jb("Attention",E,{numHeads:M,isUnidirectional:_,maskFilterValue:Y,scale:V,doRotary:rA,qkvHiddenSizes:_A?Array.from(H().subarray(Number(OA)>>>0,Number(OA)+_A>>>0)):[],pastPresentShareBuffer:!!oe})},843219:E=>{I.jb("BiasAdd",E,void 0)},843274:E=>{I.jb("BiasSplitGelu",E,void 0)},843335:E=>{I.jb("FastGelu",E,void 0)},843391:(E,M,_,Y,V,rA,_A,OA,oe,Ee,Ne,xe,je,_g,bI,hC)=>{I.jb("Conv",E,{format:xe?"NHWC":"NCHW",auto_pad:M,dilations:_?Array.from(H().subarray(Number(_)>>>0,Number(Y)>>>0)):[],group:V,kernel_shape:rA?Array.from(H().subarray(Number(rA)>>>0,Number(_A)>>>0)):[],pads:OA?Array.from(H().subarray(Number(OA)>>>0,Number(oe)>>>0)):[],strides:Ee?Array.from(H().subarray(Number(Ee)>>>0,Number(Ne)>>>0)):[],w_is_const:()=>!!cA()[Number(je)>>>0],activation:te(_g),activation_params:bI?Array.from(xA().subarray(Number(bI)>>>0,Number(hC)>>>0)):[]})},843975:E=>{I.jb("Gelu",E,void 0)},844027:(E,M,_,Y,V,rA,_A,OA,oe)=>{I.jb("GroupQueryAttention",E,{numHeads:M,kvNumHeads:_,scale:Y,softcap:V,doRotary:rA,rotaryInterleaved:_A,smoothSoftmax:OA,localWindowSize:oe})},844244:(E,M,_,Y)=>{I.jb("LayerNormalization",E,{axis:M,epsilon:_,simplified:!!Y})},844355:(E,M,_,Y)=>{I.jb("LayerNormalization",E,{axis:M,epsilon:_,simplified:!!Y})},844466:(E,M,_,Y,V,rA)=>{I.jb("MatMulNBits",E,{k:M,n:_,accuracyLevel:Y,bits:V,blockSize:rA})},844593:(E,M,_,Y,V,rA)=>{I.jb("MultiHeadAttention",E,{numHeads:M,isUnidirectional:_,maskFilterValue:Y,scale:V,doRotary:rA})},844752:(E,M)=>{I.jb("QuickGelu",E,{alpha:M})},844816:(E,M,_,Y,V)=>{I.jb("RotaryEmbedding",E,{interleaved:!!M,numHeads:_,rotaryEmbeddingDim:Y,scale:V})},844955:(E,M,_)=>{I.jb("SkipLayerNormalization",E,{epsilon:M,simplified:!!_})},845057:(E,M,_)=>{I.jb("SkipLayerNormalization",E,{epsilon:M,simplified:!!_})},845159:(E,M,_,Y)=>{I.jb("GatherBlockQuantized",E,{gatherAxis:M,quantizeAxis:_,blockSize:Y})},845280:E=>{I.Zb(E)},845314:(E,M)=>I.ac(Number(E),Number(M),I.Fb.dc,I.Fb.errors)};function vA(E,M,_){return nI(async()=>{await I.Xb(Number(E),Number(M),Number(_))})}function jA(){return typeof wasmOffsetConverter<"u"}class Ce{name="ExitStatus";constructor(M){this.message=`Program terminated with exit(${M})`,this.status=M}}var Ie=E=>{E.terminate(),E.onmessage=()=>{}},JA=[],XA=E=>{ae.length==0&&(ye(),Fe(ae[0]));var M=ae.pop();if(!M)return 6;Se.push(M),Ye[E.Ab]=M,M.Ab=E.Ab;var _={Bb:"run",fc:E.ec,Hb:E.Hb,Ab:E.Ab};return M.postMessage(_,E.Mb),0},PA=0,ie=(E,M,..._)=>{for(var Y=2*_.length,V=Ti(),rA=si(8*Y),_A=rA>>>3,OA=0;OA<_.length;OA++){var oe=_[OA];typeof oe=="bigint"?(tA[_A+2*OA]=1n,tA[_A+2*OA+1]=oe):(tA[_A+2*OA]=0n,RA()[_A+2*OA+1>>>0]=oe)}return E=ft(E,0,Y,rA,M),oi(V),E};function he(E){if(C)return ie(0,1,E);if(D=E,!(0{if(D=E,C)throw Qe(E),"unwind";he(E)},ae=[],Se=[],Ag=[],Ye={},gg=E=>{var M=E.Ab;delete Ye[M],ae.push(E),Se.splice(Se.indexOf(E),1),E.Ab=0,bi(M)};function Mg(){Ag.forEach(E=>E())}var Fe=E=>new Promise(M=>{E.onmessage=V=>{var rA=(V=V.data).Bb;if(V.Gb&&V.Gb!=VI()){var _A=Ye[V.Gb];_A?_A.postMessage(V,V.Mb):R(`Internal error! Worker sent a message "${rA}" to target pthread ${V.Gb}, but that thread no longer exists!`)}else rA==="checkMailbox"?lA():rA==="spawnThread"?XA(V):rA==="cleanupThread"?gg(Ye[V.hc]):rA==="loaded"?(E.loaded=!0,M(E)):rA==="alert"?alert(`Thread ${V.ic}: ${V.text}`):V.target==="setimmediate"?E.postMessage(V):rA==="callHandler"?I[V.Qb](...V.args):rA&&R(`worker sent an unknown command ${rA}`)},E.onerror=V=>{throw R(`worker sent an error! ${V.filename}:${V.lineno}: ${V.message}`),V};var _,Y=[];for(_ of[])I.propertyIsEnumerable(_)&&Y.push(_);E.postMessage({Bb:"load",Rb:Y,kc:w,lc:y})});function ye(){var E=new Worker((()=>{let M=URL;return import.meta.url>"file:"&&import.meta.url<"file;"?new M("ort.bundle.min.mjs",import.meta.url):new URL(import.meta.url)})(),{type:"module",workerData:"em-pthread",name:"em-pthread"});ae.push(E)}var b=E=>{hA();var M=EA()[E+52>>>2>>>0];E=EA()[E+56>>>2>>>0],Mt(M,M-E),oi(M)},QA=(E,M)=>{PA=0,E=Ft(E,M),0>>=0);throw M>>>=0,_>>>=0,EA()[Y.Ib+16>>>2>>>0]=0,EA()[Y.Ib+4>>>2>>>0]=M,EA()[Y.Ib+8>>>2>>>0]=_,E}function wA(E,M,_,Y){return C?ie(2,1,E,M,_,Y):TA(E,M,_,Y)}function TA(E,M,_,Y){if(E>>>=0,_>>>=0,Y>>>=0,s===void 0)return 6;var V=[];return C&&V.length===0?wA(E,M>>>=0,_,Y):(E={ec:_,Ab:E,Hb:Y,Mb:V},C?(E.Bb="spawnThread",postMessage(E,V),0):XA(E))}var mA=typeof TextDecoder<"u"?new TextDecoder:void 0,k=(E,M=0,_=NaN)=>{var Y=(M>>>=0)+_;for(_=M;E[_]&&!(_>=Y);)++_;if(16<_-M&&E.buffer&&mA)return mA.decode(E.buffer instanceof ArrayBuffer?E.subarray(M,_):E.slice(M,_));for(Y="";M<_;){var V=E[M++];if(128&V){var rA=63&E[M++];if((224&V)==192)Y+=String.fromCharCode((31&V)<<6|rA);else{var _A=63&E[M++];65536>(V=(240&V)==224?(15&V)<<12|rA<<6|_A:(7&V)<<18|rA<<12|_A<<6|63&E[M++])?Y+=String.fromCharCode(V):(V-=65536,Y+=String.fromCharCode(55296|V>>10,56320|1023&V))}}else Y+=String.fromCharCode(V)}return Y},te=(E,M)=>(E>>>=0)?k(q(),E,M):"";function Be(E,M,_){return C?ie(3,1,E,M,_):0}function og(E,M){if(C)return ie(4,1,E,M)}var Je=E=>{for(var M=0,_=0;_=Y?M++:2047>=Y?M+=2:55296<=Y&&57343>=Y?(M+=4,++_):M+=3}return M},Bg=(E,M,_)=>{var Y=q();if(M>>>=0,0<_){var V=M;_=M+_-1;for(var rA=0;rA=_A&&(_A=65536+((1023&_A)<<10)|1023&E.charCodeAt(++rA)),127>=_A){if(M>=_)break;Y[M++>>>0]=_A}else{if(2047>=_A){if(M+1>=_)break;Y[M++>>>0]=192|_A>>6}else{if(65535>=_A){if(M+2>=_)break;Y[M++>>>0]=224|_A>>12}else{if(M+3>=_)break;Y[M++>>>0]=240|_A>>18,Y[M++>>>0]=128|_A>>12&63}Y[M++>>>0]=128|_A>>6&63}Y[M++>>>0]=128|63&_A}}Y[M>>>0]=0,E=M-V}else E=0;return E};function Xe(E,M){if(C)return ie(5,1,E,M)}function Tg(E,M,_){if(C)return ie(6,1,E,M,_)}function eg(E,M,_){return C?ie(7,1,E,M,_):0}function Lg(E,M){if(C)return ie(8,1,E,M)}function eI(E,M,_){if(C)return ie(9,1,E,M,_)}function iI(E,M,_,Y){if(C)return ie(10,1,E,M,_,Y)}function $g(E,M,_,Y){if(C)return ie(11,1,E,M,_,Y)}function rI(E,M,_,Y){if(C)return ie(12,1,E,M,_,Y)}function Fg(E){if(C)return ie(13,1,E)}function EI(E,M){if(C)return ie(14,1,E,M)}function Xg(E,M,_){if(C)return ie(15,1,E,M,_)}var tI,Hg,uI=()=>LA(""),Ig=E=>{for(var M="";q()[E>>>0];)M+=tI[q()[E++>>>0]];return M},gI={},II={};function Kg(E,M,_={}){return function(Y,V,rA={}){var _A=V.name;if(!Y)throw new Hg(`type "${_A}" must have a positive integer typeid pointer`);if(II.hasOwnProperty(Y)){if(rA.Sb)return;throw new Hg(`Cannot register type '${_A}' twice`)}II[Y]=V,gI.hasOwnProperty(Y)&&(V=gI[Y],delete gI[Y],V.forEach(OA=>OA()))}(E,M,_)}var Ug=(E,M,_)=>{switch(M){case 1:return _?Y=>cA()[Y>>>0]:Y=>q()[Y>>>0];case 2:return _?Y=>U()[Y>>>1>>>0]:Y=>z()[Y>>>1>>>0];case 4:return _?Y=>H()[Y>>>2>>>0]:Y=>EA()[Y>>>2>>>0];case 8:return _?Y=>tA[Y>>>3]:Y=>Z[Y>>>3];default:throw new TypeError(`invalid integer width (${M}): ${E}`)}};function HA(E,M,_){_>>>=0,Kg(E>>>=0,{name:M=Ig(M>>>0),fromWireType:Y=>Y,toWireType:function(Y,V){if(typeof V!="bigint"&&typeof V!="number")throw V=V===null?"null":(Y=typeof V)=="object"||Y==="array"||Y==="function"?V.toString():""+V,new TypeError(`Cannot convert "${V}" to ${this.name}`);return typeof V=="number"&&(V=BigInt(V)),V},Cb:Ae,readValueFromPointer:Ug(M,_,M.indexOf("u")==-1),Db:null})}var Ae=8;function le(E,M,_,Y){Kg(E>>>=0,{name:M=Ig(M>>>0),fromWireType:function(V){return!!V},toWireType:function(V,rA){return rA?_:Y},Cb:Ae,readValueFromPointer:function(V){return this.fromWireType(q()[V>>>0])},Db:null})}var Dg=[],Wg=[];function wI(E){9<(E>>>=0)&&--Wg[E+1]==0&&(Wg[E]=void 0,Dg.push(E))}var ag=E=>{if(!E)throw new Hg("Cannot use deleted val. handle = "+E);return Wg[E]},Sg=E=>{switch(E){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let M=Dg.pop()||Wg.length;return Wg[M]=E,Wg[M+1]=1,M}};function pI(E){return this.fromWireType(EA()[E>>>2>>>0])}var YI={name:"emscripten::val",fromWireType:E=>{var M=ag(E);return wI(E),M},toWireType:(E,M)=>Sg(M),Cb:Ae,readValueFromPointer:pI,Db:null};function TI(E){return Kg(E>>>0,YI)}var CI=(E,M)=>{switch(M){case 4:return function(_){return this.fromWireType(xA()[_>>>2>>>0])};case 8:return function(_){return this.fromWireType(RA()[_>>>3>>>0])};default:throw new TypeError(`invalid float width (${M}): ${E}`)}};function We(E,M,_){_>>>=0,Kg(E>>>=0,{name:M=Ig(M>>>0),fromWireType:Y=>Y,toWireType:(Y,V)=>V,Cb:Ae,readValueFromPointer:CI(M,_),Db:null})}function yI(E,M,_,Y,V){if(E>>>=0,_>>>=0,M=Ig(M>>>0),V===-1&&(V=4294967295),V=OA=>OA,Y===0){var rA=32-8*_;V=OA=>OA<>>rA}var _A=M.includes("unsigned")?function(OA,oe){return oe>>>0}:function(OA,oe){return oe};Kg(E,{name:M,fromWireType:V,toWireType:_A,Cb:Ae,readValueFromPointer:Ug(M,_,Y!==0),Db:null})}function l(E,M,_){function Y(rA){var _A=EA()[rA>>>2>>>0];return rA=EA()[rA+4>>>2>>>0],new V(cA().buffer,rA,_A)}var V=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][M];Kg(E>>>=0,{name:_=Ig(_>>>0),fromWireType:Y,Cb:Ae,readValueFromPointer:Y},{Sb:!0})}function S(E,M){Kg(E>>>=0,{name:M=Ig(M>>>0),fromWireType:function(_){for(var Y,V=EA()[_>>>2>>>0],rA=_+4,_A=rA,OA=0;OA<=V;++OA){var oe=rA+OA;OA!=V&&q()[oe>>>0]!=0||(_A=te(_A,oe-_A),Y===void 0?Y=_A:(Y+="\0",Y+=_A),_A=oe+1)}return sI(_),Y},toWireType:function(_,Y){Y instanceof ArrayBuffer&&(Y=new Uint8Array(Y));var V=typeof Y=="string";if(!(V||Y instanceof Uint8Array||Y instanceof Uint8ClampedArray||Y instanceof Int8Array))throw new Hg("Cannot pass non-string to std::string");var rA=V?Je(Y):Y.length,_A=ti(4+rA+1),OA=_A+4;if(EA()[_A>>>2>>>0]=rA,V)Bg(Y,OA,rA+1);else if(V)for(V=0;V>>0]=oe}else for(V=0;V>>0]=Y[V];return _!==null&&_.push(sI,_A),_A},Cb:Ae,readValueFromPointer:pI,Db(_){sI(_)}})}var K=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,O=(E,M)=>{for(var _=E>>1,Y=_+M/2;!(_>=Y)&&z()[_>>>0];)++_;if(32<(_<<=1)-E&&K)return K.decode(q().slice(E,_));for(_="",Y=0;!(Y>=M/2);++Y){var V=U()[E+2*Y>>>1>>>0];if(V==0)break;_+=String.fromCharCode(V)}return _},iA=(E,M,_)=>{if(_??=2147483647,2>_)return 0;var Y=M;_=(_-=2)<2*E.length?_/2:E.length;for(var V=0;V<_;++V){var rA=E.charCodeAt(V);U()[M>>>1>>>0]=rA,M+=2}return U()[M>>>1>>>0]=0,M-Y},aA=E=>2*E.length,uA=(E,M)=>{for(var _=0,Y="";!(_>=M/4);){var V=H()[E+4*_>>>2>>>0];if(V==0)break;++_,65536<=V?(V-=65536,Y+=String.fromCharCode(55296|V>>10,56320|1023&V)):Y+=String.fromCharCode(V)}return Y},SA=(E,M,_)=>{if(M>>>=0,_??=2147483647,4>_)return 0;var Y=M;_=Y+_-4;for(var V=0;V=rA&&(rA=65536+((1023&rA)<<10)|1023&E.charCodeAt(++V)),H()[M>>>2>>>0]=rA,(M+=4)+4>_)break}return H()[M>>>2>>>0]=0,M-Y},se=E=>{for(var M=0,_=0;_=Y&&++_,M+=4}return M};function BA(E,M,_){if(E>>>=0,M>>>=0,_=Ig(_>>>=0),M===2)var Y=O,V=iA,rA=aA,_A=OA=>z()[OA>>>1>>>0];else M===4&&(Y=uA,V=SA,rA=se,_A=OA=>EA()[OA>>>2>>>0]);Kg(E,{name:_,fromWireType:OA=>{for(var oe,Ee=EA()[OA>>>2>>>0],Ne=OA+4,xe=0;xe<=Ee;++xe){var je=OA+4+xe*M;xe!=Ee&&_A(je)!=0||(Ne=Y(Ne,je-Ne),oe===void 0?oe=Ne:(oe+="\0",oe+=Ne),Ne=je+M)}return sI(OA),oe},toWireType:(OA,oe)=>{if(typeof oe!="string")throw new Hg(`Cannot pass non-string to C++ string type ${_}`);var Ee=rA(oe),Ne=ti(4+Ee+M);return EA()[Ne>>>2>>>0]=Ee/M,V(oe,Ne+4,Ee+M),OA!==null&&OA.push(sI,Ne),Ne},Cb:Ae,readValueFromPointer:pI,Db(OA){sI(OA)}})}function N(E,M){Kg(E>>>=0,{Tb:!0,name:M=Ig(M>>>0),Cb:0,fromWireType:()=>{},toWireType:()=>{}})}function P(E){Ci(E>>>0,!o,1,!t,131072,!1),Mg()}var eA=E=>{if(!CA)try{if(E(),!(0>>=0,typeof Atomics.jc=="function"&&(Atomics.jc(H(),E>>>2,E).value.then(lA),E+=128,Atomics.store(H(),E>>>2,1))}var lA=()=>{var E=VI();E&&(AA(E),eA(Yi))};function NA(E,M){(E>>>=0)==M>>>0?setTimeout(lA):C?postMessage({Gb:E,Bb:"checkMailbox"}):(E=Ye[E])&&E.postMessage({Bb:"checkMailbox"})}var VA=[];function $A(E,M,_,Y,V){for(M>>>=0,Y/=2,VA.length=Y,_=V>>>0>>>3,V=0;V>>0];return(M?KA[M]:ut[E])(...VA)}var ZA=()=>{PA=0};function qA(E){E>>>=0,C?postMessage({Bb:"cleanupThread",hc:E}):gg(Ye[E])}function Re(E){}var we=(E,M)=>{var _=II[E];if(_===void 0)throw E=wt(E),_=Ig(E),sI(E),new Hg(`${M} has unknown type ${_}`);return _},He=(E,M,_)=>{var Y=[];return E=E.toWireType(Y,_),Y.length&&(EA()[M>>>2>>>0]=Sg(Y)),E};function be(E,M,_){return M>>>=0,_>>>=0,E=ag(E>>>0),M=we(M,"emval::as"),He(M,_,E)}function Eg(E,M){return M>>>=0,E=ag(E>>>0),(M=we(M,"emval::as")).toWireType(null,E)}var yg=E=>{try{E()}catch(M){LA(M)}},Ze=0,ug=null,JI=0,Ng=[],fI={},ig={},Rg=0,Pg=null,oI=[];function nI(E){return function(M){if(!CA){if(Ze===0){var _=!1,Y=!1;M((V=0)=>{if(!CA&&(JI=V,_=!0,Y)){Ze=2,yg(()=>Nt(ug)),typeof MainLoop<"u"&&MainLoop.Pb&&MainLoop.resume(),V=!1;try{var rA=function(){var oe=H()[ug+8>>>2>>>0];return oe=De[ig[oe]],--PA,oe()}()}catch(oe){rA=oe,V=!0}var _A=!1;if(!ug){var OA=Pg;OA&&(Pg=null,(V?OA.reject:OA.resolve)(rA),_A=!0)}if(V&&!_A)throw rA}}),Y=!0,_||(Ze=1,ug=function(){var V=ti(65548),rA=V+12;EA()[V>>>2>>>0]=rA,EA()[V+4>>>2>>>0]=rA+65536,rA=Ng[0];var _A=fI[rA];return _A===void 0&&(_A=Rg++,fI[rA]=_A,ig[_A]=rA),rA=_A,H()[V+8>>>2>>>0]=rA,V}(),typeof MainLoop<"u"&&MainLoop.Pb&&MainLoop.pause(),yg(()=>Hi(ug)))}else Ze===2?(Ze=0,yg(Pi),sI(ug),ug=null,oI.forEach(eA)):LA(`invalid state: ${Ze}`);return JI}}(M=>{E().then(M)})}function vg(E){return E>>>=0,nI(async()=>{var M=await ag(E);return Sg(M)})}var Jg=[];function Gg(E,M,_,Y){return _>>>=0,Y>>>=0,(E=Jg[E>>>0])(null,M=ag(M>>>0),_,Y)}var dg={},rg=E=>{var M=dg[E];return M===void 0?Ig(E):M};function wg(E,M,_,Y,V){return _>>>=0,Y>>>=0,V>>>=0,(E=Jg[E>>>0])(M=ag(M>>>0),M[_=rg(_)],Y,V)}var jg=()=>typeof globalThis=="object"?globalThis:Function("return this")();function lI(E){return(E>>>=0)==0?Sg(jg()):(E=rg(E),Sg(jg()[E]))}var Mi=E=>{var M=Jg.length;return Jg.push(E),M},Xt=(E,M)=>{for(var _=Array(E),Y=0;Y>>2>>>0],"parameter "+Y);return _},it=(E,M)=>Object.defineProperty(M,"name",{value:E});function Zt(E,M,_){var Y=(M=Xt(E,M>>>0)).shift();E--;var V=`return function (obj, func, destructorsRef, args) { +`,rA=0,_A=[];_===0&&_A.push("obj");for(var OA=["retType"],oe=[Y],Ee=0;EeNe.name).join(", ")}) => ${Y.name}>`,Mi(it(_,E))}function AC(E){return E=rg(E>>>0),Sg(I[E])}function OI(E,M){return M>>>=0,E=ag(E>>>0),M=ag(M),Sg(E[M])}function eC(E){9<(E>>>=0)&&(Wg[E+1]+=1)}function gC(){return Sg([])}function IC(E){E=ag(E>>>0);for(var M=Array(E.length),_=0;_>>0))}function tC(){return Sg({})}function tt(E){for(var M=ag(E>>>=0);M.length;){var _=M.pop();M.pop()(_)}wI(E)}function CC(E,M,_){M>>>=0,_>>>=0,E=ag(E>>>0),M=ag(M),_=ag(_),E[M]=_}function oC(E,M){return M>>>=0,E=(E=we(E>>>0,"_emval_take_value")).readValueFromPointer(M),Sg(E)}function Ct(E,M){E=-9007199254740992>E||9007199254740992>>=0,E=new Date(1e3*E),H()[M>>>2>>>0]=E.getUTCSeconds(),H()[M+4>>>2>>>0]=E.getUTCMinutes(),H()[M+8>>>2>>>0]=E.getUTCHours(),H()[M+12>>>2>>>0]=E.getUTCDate(),H()[M+16>>>2>>>0]=E.getUTCMonth(),H()[M+20>>>2>>>0]=E.getUTCFullYear()-1900,H()[M+24>>>2>>>0]=E.getUTCDay(),E=(E.getTime()-Date.UTC(E.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,H()[M+28>>>2>>>0]=E}var ot=E=>E%4==0&&(E%100!=0||E%400==0),Fi=[0,31,60,91,121,152,182,213,244,274,305,335],st=[0,31,59,90,120,151,181,212,243,273,304,334];function Bt(E,M){E=-9007199254740992>E||9007199254740992>>=0,E=new Date(1e3*E),H()[M>>>2>>>0]=E.getSeconds(),H()[M+4>>>2>>>0]=E.getMinutes(),H()[M+8>>>2>>>0]=E.getHours(),H()[M+12>>>2>>>0]=E.getDate(),H()[M+16>>>2>>>0]=E.getMonth(),H()[M+20>>>2>>>0]=E.getFullYear()-1900,H()[M+24>>>2>>>0]=E.getDay();var _=(ot(E.getFullYear())?Fi:st)[E.getMonth()]+E.getDate()-1|0;H()[M+28>>>2>>>0]=_,H()[M+36>>>2>>>0]=-60*E.getTimezoneOffset(),_=new Date(E.getFullYear(),6,1).getTimezoneOffset();var Y=new Date(E.getFullYear(),0,1).getTimezoneOffset();E=0|(_!=Y&&E.getTimezoneOffset()==Math.min(Y,_)),H()[M+32>>>2>>>0]=E}function Bo(E){E>>>=0;var M=new Date(H()[E+20>>>2>>>0]+1900,H()[E+16>>>2>>>0],H()[E+12>>>2>>>0],H()[E+8>>>2>>>0],H()[E+4>>>2>>>0],H()[E>>>2>>>0],0),_=H()[E+32>>>2>>>0],Y=M.getTimezoneOffset(),V=new Date(M.getFullYear(),6,1).getTimezoneOffset(),rA=new Date(M.getFullYear(),0,1).getTimezoneOffset(),_A=Math.min(rA,V);return 0>_?H()[E+32>>>2>>>0]=+(V!=rA&&_A==Y):0<_!=(_A==Y)&&(V=Math.max(rA,V),M.setTime(M.getTime()+6e4*((0<_?_A:V)-Y))),H()[E+24>>>2>>>0]=M.getDay(),_=(ot(M.getFullYear())?Fi:st)[M.getMonth()]+M.getDate()-1|0,H()[E+28>>>2>>>0]=_,H()[E>>>2>>>0]=M.getSeconds(),H()[E+4>>>2>>>0]=M.getMinutes(),H()[E+8>>>2>>>0]=M.getHours(),H()[E+12>>>2>>>0]=M.getDate(),H()[E+16>>>2>>>0]=M.getMonth(),H()[E+20>>>2>>>0]=M.getYear(),E=M.getTime(),BigInt(isNaN(E)?-1:E/1e3)}function Qt(E,M,_,Y,V,rA,_A){return C?ie(16,1,E,M,_,Y,V,rA,_A):-52}function Si(E,M,_,Y,V,rA){if(C)return ie(17,1,E,M,_,Y,V,rA)}var WI={},Ni=()=>performance.timeOrigin+performance.now();function at(E,M){if(C)return ie(18,1,E,M);if(WI[E]&&(clearTimeout(WI[E].id),delete WI[E]),!M)return 0;var _=setTimeout(()=>{delete WI[E],eA(()=>mt(E,performance.timeOrigin+performance.now()))},M);return WI[E]={id:_,qc:M},0}function sC(E,M,_,Y){E>>>=0,M>>>=0,_>>>=0,Y>>>=0;var V=new Date().getFullYear(),rA=new Date(V,0,1).getTimezoneOffset();V=new Date(V,6,1).getTimezoneOffset();var _A=Math.max(rA,V);EA()[E>>>2>>>0]=60*_A,H()[M>>>2>>>0]=+(rA!=V),E=(M=OA=>{var oe=Math.abs(OA);return`UTC${0<=OA?"-":"+"}${String(Math.floor(oe/60)).padStart(2,"0")}${String(oe%60).padStart(2,"0")}`})(rA),M=M(V),VDate.now();function QC(E,M,_){return 0<=E&&3>=E?(E===0?E=Date.now():E=performance.timeOrigin+performance.now(),tA[_>>>0>>>3]=BigInt(Math.round(1e6*E)),0):28}var Ri=[],rt=(E,M)=>{Ri.length=0;for(var _;_=q()[E++>>>0];){var Y=_!=105;M+=(Y&=_!=112)&&M%8?4:0,Ri.push(_==112?EA()[M>>>2>>>0]:_==106?tA[M>>>3]:_==105?H()[M>>>2>>>0]:RA()[M>>>3>>>0]),M+=Y?8:4}return Ri};function aC(E,M,_){return E>>>=0,M=rt(M>>>0,_>>>0),KA[E](...M)}function Gi(E,M,_){return E>>>=0,M=rt(M>>>0,_>>>0),KA[E](...M)}var Et=()=>{};function rC(E,M){return R(te(E>>>0,M>>>0))}var nt=()=>{throw PA+=1,"unwind"};function HI(){return 4294901760}var EC=()=>navigator.hardwareConcurrency;function Qo(){return LA("Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER"),0}function nC(E){E>>>=0;var M=q().length;if(E<=M||4294901760=_;_*=2){var Y=M*(1+.2/_);Y=Math.min(Y,E+100663296);A:{Y=(Math.min(4294901760,65536*Math.ceil(Math.max(E,Y)/65536))-w.buffer.byteLength+65535)/65536|0;try{w.grow(Y),hA();var V=1;break A}catch{}V=void 0}if(V)return!0}return!1}var _i=()=>(LA("Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER"),0),jI={},ki=E=>{E.forEach(M=>{_i()})};function lC(){var E=Error().stack.toString().split(` +`);return E[0]=="Error"&&E.shift(),ki(E),jI.Lb=_i(),jI.cc=E,jI.Lb}function cC(E,M,_){if(E>>>=0,M>>>=0,jI.Lb==E)var Y=jI.cc;else(Y=Error().stack.toString().split(` +`))[0]=="Error"&&Y.shift(),ki(Y);for(var V=3;Y[V]&&_i()!=E;)++V;for(E=0;E<_&&Y[E+V];++E)H()[M+4*E>>>2>>>0]=_i();return E}var Li,Ki={},lt=()=>{if(!Li){var E,M={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:"./this.program"};for(E in Ki)Ki[E]===void 0?delete M[E]:M[E]=Ki[E];var _=[];for(E in M)_.push(`${E}=${M[E]}`);Li=_}return Li};function Ii(E,M){if(C)return ie(19,1,E,M);E>>>=0,M>>>=0;var _=0;return lt().forEach((Y,V)=>{var rA=M+_;for(V=EA()[E+4*V>>>2>>>0]=rA,rA=0;rA>>0]=Y.charCodeAt(rA);cA()[V>>>0]=0,_+=Y.length+1}),0}function ct(E,M){if(C)return ie(20,1,E,M);E>>>=0,M>>>=0;var _=lt();EA()[E>>>2>>>0]=_.length;var Y=0;return _.forEach(V=>Y+=V.length+1),EA()[M>>>2>>>0]=Y,0}function dt(E){return C?ie(21,1,E):52}function ht(E,M,_,Y){return C?ie(22,1,E,M,_,Y):52}function Ui(E,M,_,Y){return C?ie(23,1,E,M,_,Y):70}var dC=[null,[],[]];function Dt(E,M,_,Y){if(C)return ie(24,1,E,M,_,Y);M>>>=0,_>>>=0,Y>>>=0;for(var V=0,rA=0;rA<_;rA++){var _A=EA()[M>>>2>>>0],OA=EA()[M+4>>>2>>>0];M+=8;for(var oe=0;oe>>0],Ne=dC[E];Ee===0||Ee===10?((E===1?h:R)(k(Ne)),Ne.length=0):Ne.push(Ee)}V+=OA}return EA()[Y>>>2>>>0]=V,0}C||function(){for(var E=I.numThreads-1;E--;)ye();JA.unshift(()=>{$++,function(M){C?M():Promise.all(ae.map(Fe)).then(M)}(()=>FA())})}();for(var Ji=Array(256),ii=0;256>ii;++ii)Ji[ii]=String.fromCharCode(ii);tI=Ji,Hg=I.BindingError=class extends Error{constructor(E){super(E),this.name="BindingError"}},I.InternalError=class extends Error{constructor(E){super(E),this.name="InternalError"}},Wg.push(0,1,void 0,1,null,1,!0,1,!1,1),I.count_emval_handles=()=>Wg.length/2-5-Dg.length;var De,ut=[he,Qe,wA,Be,og,Xe,Tg,eg,Lg,eI,iI,$g,rI,Fg,EI,Xg,Qt,Si,at,Ii,ct,dt,ht,Ui,Dt];(async function(){function E(Y,V){return De=Y.exports,De=function(){var rA=De,_A={};for(let[OA,oe]of Object.entries(rA))_A[OA]=typeof oe=="function"?(...Ee)=>{Ng.push(OA);try{return oe(...Ee)}finally{CA||(Ng.pop(),ug&&Ze===1&&Ng.length===0&&(Ze=0,PA+=1,yg(St),typeof Fibers<"u"&&Fibers.rc()))}}:oe;return _A}(),De=function(){var rA=De,_A=oe=>Ee=>oe(Ee)>>>0,OA=oe=>()=>oe()>>>0;return(rA=Object.assign({},rA)).Da=_A(rA.Da),rA.fb=OA(rA.fb),rA.hb=_A(rA.hb),rA.tb=_A(rA.tb),rA.ub=OA(rA.ub),rA.__cxa_get_exception_ptr=_A(rA.__cxa_get_exception_ptr),rA}(),Ag.push(De.ib),y=V,FA(),De}$++;var M=GA();if(I.instantiateWasm)return new Promise(Y=>{I.instantiateWasm(M,(V,rA)=>{E(V,rA),Y(V.exports)})});if(C)return new Promise(Y=>{YA=V=>{var rA=new WebAssembly.Instance(V,GA());Y(E(rA,V))}});dA??=I.locateFile?I.locateFile?I.locateFile("ort-wasm-simd-threaded.jsep.wasm",F):F+"ort-wasm-simd-threaded.jsep.wasm":new URL(""+new URL("ort-wasm-simd-threaded.jsep-B0T3yYHD.wasm",import.meta.url).href,import.meta.url).href;try{var _=await async function(Y){var V=dA;if(!oA&&typeof WebAssembly.instantiateStreaming=="function"&&!DA(V))try{var rA=fetch(V,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(rA,Y)}catch(_A){R(`wasm streaming compile failed: ${_A}`),R("falling back to ArrayBuffer instantiation")}return async function(_A,OA){try{var oe=await async function(Ee){if(!oA)try{var Ne=await B(Ee);return new Uint8Array(Ne)}catch{}if(Ee==dA&&oA)Ee=new Uint8Array(oA);else{if(!a)throw"both async and sync fetching of the wasm failed";Ee=a(Ee)}return Ee}(_A);return await WebAssembly.instantiate(oe,OA)}catch(Ee){R(`failed to asynchronously prepare wasm: ${Ee}`),LA(Ee)}}(V,Y)}(M);return E(_.instance,_.module)}catch(Y){return e(Y),Promise.reject(Y)}})();var wt=E=>(wt=De.Da)(E),pt=()=>(pt=De.Ea)();I._OrtInit=(E,M)=>(I._OrtInit=De.Fa)(E,M),I._OrtGetLastError=(E,M)=>(I._OrtGetLastError=De.Ga)(E,M),I._OrtCreateSessionOptions=(E,M,_,Y,V,rA,_A,OA,oe,Ee)=>(I._OrtCreateSessionOptions=De.Ha)(E,M,_,Y,V,rA,_A,OA,oe,Ee),I._OrtAppendExecutionProvider=(E,M,_,Y,V)=>(I._OrtAppendExecutionProvider=De.Ia)(E,M,_,Y,V),I._OrtAddFreeDimensionOverride=(E,M,_)=>(I._OrtAddFreeDimensionOverride=De.Ja)(E,M,_),I._OrtAddSessionConfigEntry=(E,M,_)=>(I._OrtAddSessionConfigEntry=De.Ka)(E,M,_),I._OrtReleaseSessionOptions=E=>(I._OrtReleaseSessionOptions=De.La)(E),I._OrtCreateSession=(E,M,_)=>(I._OrtCreateSession=De.Ma)(E,M,_),I._OrtReleaseSession=E=>(I._OrtReleaseSession=De.Na)(E),I._OrtGetInputOutputCount=(E,M,_)=>(I._OrtGetInputOutputCount=De.Oa)(E,M,_),I._OrtGetInputOutputMetadata=(E,M,_,Y)=>(I._OrtGetInputOutputMetadata=De.Pa)(E,M,_,Y),I._OrtFree=E=>(I._OrtFree=De.Qa)(E),I._OrtCreateTensor=(E,M,_,Y,V,rA)=>(I._OrtCreateTensor=De.Ra)(E,M,_,Y,V,rA),I._OrtGetTensorData=(E,M,_,Y,V)=>(I._OrtGetTensorData=De.Sa)(E,M,_,Y,V),I._OrtReleaseTensor=E=>(I._OrtReleaseTensor=De.Ta)(E),I._OrtCreateRunOptions=(E,M,_,Y)=>(I._OrtCreateRunOptions=De.Ua)(E,M,_,Y),I._OrtAddRunConfigEntry=(E,M,_)=>(I._OrtAddRunConfigEntry=De.Va)(E,M,_),I._OrtReleaseRunOptions=E=>(I._OrtReleaseRunOptions=De.Wa)(E),I._OrtCreateBinding=E=>(I._OrtCreateBinding=De.Xa)(E),I._OrtBindInput=(E,M,_)=>(I._OrtBindInput=De.Ya)(E,M,_),I._OrtBindOutput=(E,M,_,Y)=>(I._OrtBindOutput=De.Za)(E,M,_,Y),I._OrtClearBoundOutputs=E=>(I._OrtClearBoundOutputs=De._a)(E),I._OrtReleaseBinding=E=>(I._OrtReleaseBinding=De.$a)(E),I._OrtRunWithBinding=(E,M,_,Y,V)=>(I._OrtRunWithBinding=De.ab)(E,M,_,Y,V),I._OrtRun=(E,M,_,Y,V,rA,_A,OA)=>(I._OrtRun=De.bb)(E,M,_,Y,V,rA,_A,OA),I._OrtEndProfiling=E=>(I._OrtEndProfiling=De.cb)(E),I._JsepOutput=(E,M,_)=>(I._JsepOutput=De.db)(E,M,_),I._JsepGetNodeName=E=>(I._JsepGetNodeName=De.eb)(E);var VI=()=>(VI=De.fb)(),sI=I._free=E=>(sI=I._free=De.gb)(E),ti=I._malloc=E=>(ti=I._malloc=De.hb)(E),Ci=(E,M,_,Y,V,rA)=>(Ci=De.kb)(E,M,_,Y,V,rA),yt=()=>(yt=De.lb)(),ft=(E,M,_,Y,V)=>(ft=De.mb)(E,M,_,Y,V),bi=E=>(bi=De.nb)(E),xi=E=>(xi=De.ob)(E),mt=(E,M)=>(mt=De.pb)(E,M),Yi=()=>(Yi=De.qb)(),Mt=(E,M)=>(Mt=De.rb)(E,M),oi=E=>(oi=De.sb)(E),si=E=>(si=De.tb)(E),Ti=()=>(Ti=De.ub)(),Ft=I.dynCall_ii=(E,M)=>(Ft=I.dynCall_ii=De.vb)(E,M),Hi=E=>(Hi=De.wb)(E),St=()=>(St=De.xb)(),Nt=E=>(Nt=De.yb)(E),Pi=()=>(Pi=De.zb)();return I.stackSave=()=>Ti(),I.stackRestore=E=>oi(E),I.stackAlloc=E=>si(E),I.setValue=function(E,M,_="i8"){switch(_.endsWith("*")&&(_="*"),_){case"i1":case"i8":cA()[E>>>0]=M;break;case"i16":U()[E>>>1>>>0]=M;break;case"i32":H()[E>>>2>>>0]=M;break;case"i64":tA[E>>>3]=BigInt(M);break;case"float":xA()[E>>>2>>>0]=M;break;case"double":RA()[E>>>3>>>0]=M;break;case"*":EA()[E>>>2>>>0]=M;break;default:LA(`invalid type for setValue: ${_}`)}},I.getValue=function(E,M="i8"){switch(M.endsWith("*")&&(M="*"),M){case"i1":case"i8":return cA()[E>>>0];case"i16":return U()[E>>>1>>>0];case"i32":return H()[E>>>2>>>0];case"i64":return tA[E>>>3];case"float":return xA()[E>>>2>>>0];case"double":return RA()[E>>>3>>>0];case"*":return EA()[E>>>2>>>0];default:LA(`invalid type for getValue: ${M}`)}},I.UTF8ToString=te,I.stringToUTF8=Bg,I.lengthBytesUTF8=Je,function E(){if(0<$)fA=E;else if(C)g(I),j();else{for(;0{qB(),Gs=typeof location>"u"?void 0:location.origin,MB=import.meta.url>"file:"&&import.meta.url<"file;",jn=()=>{{if(MB){let A=URL;return new URL(new A("ort.bundle.min.mjs",import.meta.url).href,Gs).href}return import.meta.url}},BI=jn(),AD=()=>{if(BI&&!BI.startsWith("blob:"))return BI.substring(0,BI.lastIndexOf("/")+1)},xC=(A,g)=>{try{let e=g??BI;return(e?new URL(A,e):new URL(A)).origin===Gs}catch{return!1}},Vn=(A,g)=>{let e=g??BI;try{return(e?new URL(A,e):new URL(A)).href}catch{return}},zn=(A,g)=>`${g??"./"}${A}`,_s=async A=>{let g=await(await fetch(A,{credentials:"same-origin"})).blob();return URL.createObjectURL(g)},$n=async A=>(await import(A)).default,ks=(Xp(),jt(zh)).default,eD=async()=>{if(!BI)throw new Error("Failed to load proxy worker: cannot determine the script source URL.");if(xC(BI))return[void 0,ks()];let A=await _s(BI);return[A,ks(A)]},Ls=(Zp(),jt(Xh)).default,gD=async(A,g,e)=>{if(!A&&!g&&Ls&&BI&&xC(BI))return[void 0,Ls];{let I="ort-wasm-simd-threaded.jsep.mjs",i=A??Vn(I,g),t=e&&i&&!xC(i,g),o=t?await _s(i):i??zn(I,g);return[t?o:void 0,await $n(o)]}}}),Ks,YC,Lt,Us,Xn,Zn,Al,WB,Cg,fi=zA(()=>{OB(),YC=!1,Lt=!1,Us=!1,Xn=()=>{if(typeof SharedArrayBuffer>"u")return!1;try{return typeof MessageChannel<"u"&&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{return!1}},Zn=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch{return!1}},Al=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,19,1,17,0,65,1,253,15,65,2,253,15,65,3,253,15,253,147,2,11]))}catch{return!1}},WB=async A=>{if(YC)return Promise.resolve();if(Lt)throw new Error("multiple calls to 'initializeWebAssembly()' detected.");if(Us)throw new Error("previous call to 'initializeWebAssembly()' failed.");Lt=!0;let g=A.initTimeout,e=A.numThreads;if(A.simd!==!1){if(A.simd==="relaxed"){if(!Al())throw new Error("Relaxed WebAssembly SIMD is not supported in the current environment.")}else if(!Zn())throw new Error("WebAssembly SIMD is not supported in the current environment.")}let I=Xn();e>1&&!I&&(typeof self<"u"&&!self.crossOriginIsolated&&console.warn("env.wasm.numThreads is set to "+e+", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."),console.warn("WebAssembly multi-threading is not supported in the current environment. Falling back to single-threading."),A.numThreads=e=1);let i=A.wasmPaths,t=typeof i=="string"?i:void 0,o=i?.mjs,C=o?.href??o,s=i?.wasm,Q=s?.href??s,r=A.wasmBinary,[B,a]=await gD(C,t,e>1),d=!1,c=[];if(g>0&&c.push(new Promise(F=>{setTimeout(()=>{d=!0,F()},g)})),c.push(new Promise((F,L)=>{let u={numThreads:e};if(r)u.wasmBinary=r;else if(Q||t)u.locateFile=h=>Q??t+h;else if(C&&C.indexOf("blob:")!==0)u.locateFile=h=>new URL(h,C).href;else if(B){let h=AD();h&&(u.locateFile=R=>h+R)}a(u).then(h=>{Lt=!1,YC=!0,Ks=h,F(),B&&URL.revokeObjectURL(B)},h=>{Lt=!1,Us=!0,L(h)})})),await Promise.race(c),d)throw new Error(`WebAssembly backend initializing failed due to timeout: ${g}ms`)},Cg=()=>{if(YC&&Ks)return Ks;throw new Error("WebAssembly is not initialized yet.")}}),_I,go,$e,jB=zA(()=>{fi(),_I=(A,g)=>{let e=Cg(),I=e.lengthBytesUTF8(A)+1,i=e._malloc(I);return e.stringToUTF8(A,i,I),g.push(i),i},go=(A,g,e,I)=>{if(typeof A=="object"&&A!==null){if(e.has(A))throw new Error("Circular reference in options");e.add(A)}Object.entries(A).forEach(([i,t])=>{let o=g?g+i:i;if(typeof t=="object")go(t,o+".",e,I);else if(typeof t=="string"||typeof t=="number")I(o,t.toString());else if(typeof t=="boolean")I(o,t?"1":"0");else throw new Error(`Can't handle extra config type: ${typeof t}`)})},$e=A=>{let g=Cg(),e=g.stackSave();try{let I=g.PTR_SIZE,i=g.stackAlloc(2*I);g._OrtGetLastError(i,i+I);let t=Number(g.getValue(i,I===4?"i32":"i64")),o=g.getValue(i+I,"*"),C=o?g.UTF8ToString(o):"";throw new Error(`${A} ERROR_CODE: ${t}, ERROR_MESSAGE: ${C}`)}finally{g.stackRestore(e)}}}),ID,Ay=zA(()=>{fi(),jB(),ID=A=>{let g=Cg(),e=0,I=[],i=A||{};try{if(A?.logSeverityLevel===void 0)i.logSeverityLevel=2;else if(typeof A.logSeverityLevel!="number"||!Number.isInteger(A.logSeverityLevel)||A.logSeverityLevel<0||A.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${A.logSeverityLevel}`);if(A?.logVerbosityLevel===void 0)i.logVerbosityLevel=0;else if(typeof A.logVerbosityLevel!="number"||!Number.isInteger(A.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${A.logVerbosityLevel}`);A?.terminate===void 0&&(i.terminate=!1);let t=0;return A?.tag!==void 0&&(t=_I(A.tag,I)),e=g._OrtCreateRunOptions(i.logSeverityLevel,i.logVerbosityLevel,!!i.terminate,t),e===0&&$e("Can't create run options."),A?.extra!==void 0&&go(A.extra,"",new WeakSet,(o,C)=>{let s=_I(o,I),Q=_I(C,I);g._OrtAddRunConfigEntry(e,s,Q)!==0&&$e(`Can't set a run config entry: ${o} - ${C}.`)}),[e,I]}catch(t){throw e!==0&&g._OrtReleaseRunOptions(e),I.forEach(o=>g._free(o)),t}}}),el,gl,Il,Kt,il,iD,ey=zA(()=>{fi(),jB(),el=A=>{switch(A){case"disabled":return 0;case"basic":return 1;case"extended":return 2;case"all":return 99;default:throw new Error(`unsupported graph optimization level: ${A}`)}},gl=A=>{switch(A){case"sequential":return 0;case"parallel":return 1;default:throw new Error(`unsupported execution mode: ${A}`)}},Il=A=>{A.extra||(A.extra={}),A.extra.session||(A.extra.session={});let g=A.extra.session;g.use_ort_model_bytes_directly||(g.use_ort_model_bytes_directly="1"),A.executionProviders&&A.executionProviders.some(e=>(typeof e=="string"?e:e.name)==="webgpu")&&(A.enableMemPattern=!1)},Kt=(A,g,e,I)=>{let i=_I(g,I),t=_I(e,I);Cg()._OrtAddSessionConfigEntry(A,i,t)!==0&&$e(`Can't set a session config entry: ${g} - ${e}.`)},il=async(A,g,e)=>{for(let I of g){let i=typeof I=="string"?I:I.name,t=[];switch(i){case"webnn":if(i="WEBNN",typeof I!="string"){let r=I?.deviceType;r&&Kt(A,"deviceType",r,e)}break;case"webgpu":if(i="JS",typeof I!="string"){let r=I;if(r?.preferredLayout){if(r.preferredLayout!=="NCHW"&&r.preferredLayout!=="NHWC")throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${r.preferredLayout}`);Kt(A,"preferredLayout",r.preferredLayout,e)}}break;case"wasm":case"cpu":continue;default:throw new Error(`not supported execution provider: ${i}`)}let o=_I(i,e),C=t.length,s=0,Q=0;if(C>0){s=Cg()._malloc(C*Cg().PTR_SIZE),e.push(s),Q=Cg()._malloc(C*Cg().PTR_SIZE),e.push(Q);for(let r=0;r{let g=Cg(),e=0,I=[],i=A||{};Il(i);try{let t=el(i.graphOptimizationLevel??"all"),o=gl(i.executionMode??"sequential"),C=typeof i.logId=="string"?_I(i.logId,I):0,s=i.logSeverityLevel??2;if(!Number.isInteger(s)||s<0||s>4)throw new Error(`log serverity level is not valid: ${s}`);let Q=i.logVerbosityLevel??0;if(!Number.isInteger(Q)||Q<0||Q>4)throw new Error(`log verbosity level is not valid: ${Q}`);let r=typeof i.optimizedModelFilePath=="string"?_I(i.optimizedModelFilePath,I):0;if(e=g._OrtCreateSessionOptions(t,!!i.enableCpuMemArena,!!i.enableMemPattern,o,!!i.enableProfiling,0,C,s,Q,r),e===0&&$e("Can't create session options."),i.executionProviders&&await il(e,i.executionProviders,I),i.enableGraphCapture!==void 0){if(typeof i.enableGraphCapture!="boolean")throw new Error(`enableGraphCapture must be a boolean value: ${i.enableGraphCapture}`);Kt(e,"enableGraphCapture",i.enableGraphCapture.toString(),I)}if(i.freeDimensionOverrides)for(let[B,a]of Object.entries(i.freeDimensionOverrides)){if(typeof B!="string")throw new Error(`free dimension override name must be a string: ${B}`);if(typeof a!="number"||!Number.isInteger(a)||a<0)throw new Error(`free dimension override value must be a non-negative integer: ${a}`);let d=_I(B,I);g._OrtAddFreeDimensionOverride(e,d,a)!==0&&$e(`Can't set a free dimension override: ${B} - ${a}.`)}return i.extra!==void 0&&go(i.extra,"",new WeakSet,(B,a)=>{Kt(e,B,a,I)}),[e,I]}catch(t){throw e!==0&&g._OrtReleaseSessionOptions(e)!==0&&$e("Can't release session options."),I.forEach(o=>g._free(o)),t}}}),Xi,vI,Di,VB,Io,zB,$B,FB,Me=zA(()=>{Xi=A=>{switch(A){case"int8":return 3;case"uint8":return 2;case"bool":return 9;case"int16":return 5;case"uint16":return 4;case"int32":return 6;case"uint32":return 12;case"float16":return 10;case"float32":return 1;case"float64":return 11;case"string":return 8;case"int64":return 7;case"uint64":return 13;case"int4":return 22;case"uint4":return 21;default:throw new Error(`unsupported data type: ${A}`)}},vI=A=>{switch(A){case 3:return"int8";case 2:return"uint8";case 9:return"bool";case 5:return"int16";case 4:return"uint16";case 6:return"int32";case 12:return"uint32";case 10:return"float16";case 1:return"float32";case 11:return"float64";case 8:return"string";case 7:return"int64";case 13:return"uint64";case 22:return"int4";case 21:return"uint4";default:throw new Error(`unsupported data type: ${A}`)}},Di=(A,g)=>{let e=[-1,4,1,1,2,2,4,8,-1,1,2,8,4,8,-1,-1,-1,-1,-1,-1,-1,.5,.5][A],I=typeof g=="number"?g:g.reduce((i,t)=>i*t,1);return e>0?Math.ceil(I*e):void 0},VB=A=>{switch(A){case"float16":return typeof Float16Array<"u"&&Float16Array.from?Float16Array:Uint16Array;case"float32":return Float32Array;case"uint8":return Uint8Array;case"int8":return Int8Array;case"uint16":return Uint16Array;case"int16":return Int16Array;case"int32":return Int32Array;case"bool":return Uint8Array;case"float64":return Float64Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw new Error(`unsupported type: ${A}`)}},Io=A=>{switch(A){case"verbose":return 0;case"info":return 1;case"warning":return 2;case"error":return 3;case"fatal":return 4;default:throw new Error(`unsupported logging level: ${A}`)}},zB=A=>A==="float32"||A==="float16"||A==="int32"||A==="int64"||A==="uint32"||A==="uint8"||A==="bool"||A==="uint4"||A==="int4",$B=A=>A==="float32"||A==="float16"||A==="int32"||A==="int64"||A==="uint32"||A==="uint64"||A==="int8"||A==="uint8"||A==="bool"||A==="uint4"||A==="int4",FB=A=>{switch(A){case"none":return 0;case"cpu":return 1;case"cpu-pinned":return 2;case"texture":return 3;case"gpu-buffer":return 4;case"ml-tensor":return 5;default:throw new Error(`unsupported data location: ${A}`)}}}),XB,tD=zA(()=>{qB(),XB=async A=>{if(typeof A=="string"){let g=await fetch(A);if(!g.ok)throw new Error(`failed to load external data file: ${A}`);let e=g.headers.get("Content-Length"),I=e?parseInt(e,10):0;if(I<1073741824)return new Uint8Array(await g.arrayBuffer());{if(!g.body)throw new Error(`failed to load external data file: ${A}, no response body.`);let i=g.body.getReader(),t;try{t=new ArrayBuffer(I)}catch(C){if(C instanceof RangeError){let s=Math.ceil(I/65536);t=new WebAssembly.Memory({initial:s,maximum:s}).buffer}else throw C}let o=0;for(;;){let{done:C,value:s}=await i.read();if(C)break;let Q=s.byteLength;new Uint8Array(t,o,Q).set(s),o+=Q}return new Uint8Array(t,0,I)}}else return A instanceof Blob?new Uint8Array(await A.arrayBuffer()):A instanceof Uint8Array?A:new Uint8Array(A)}}),tl,Cl,ol,sl,ZB,Bl,Te,qI=zA(()=>{Me(),tl=["V","I","W","E","F"],Cl=(A,g)=>{console.log(`[${tl[A]},${new Date().toISOString()}]${g}`)},ZB=(A,g)=>{ol=A,sl=g},Bl=(A,g)=>{let e=Io(A),I=Io(ol);e>=I&&Cl(e,typeof g=="function"?g():g)},Te=(...A)=>{sl&&Bl(...A)}}),Ql,et,MA,io,CD,oD,sD,ke=zA(()=>{Ql=class{static calcMatMulShape(A,g){return A[1]!==g[0]?void 0:[A[0],g[1]]}},et=class{static calcShape(A,g,e=!1){let I=A.length,i=g.length;if(I===0)return g;if(i===0)return A;let t=Math.max(A.length,g.length),o=new Array(t);if(e){if(I<2||i<2)return;let C=Ql.calcMatMulShape([A[I-2],A[I-1]],[g[i-2],g[i-1]]);if(C===void 0)return;[o[t-2],o[t-1]]=C}for(let C=e?3:1;C<=t;C++){let s=I-C<0?1:A[I-C],Q=i-C<0?1:g[i-C];if(s!==Q&&s>1&&Q>1)return;let r=Math.max(s,Q);if(s&&Q)o[t-C]=Math.max(s,Q);else{if(r>1)return;o[t-C]=0}}return o}static isValidBroadcast(A,g){let e=A.length,I=g.length;if(e>I)return!1;for(let i=1;i<=e;i++)if(A[e-i]!==1&&A[e-i]!==g[I-i])return!1;return!0}},MA=class Ao{static size(g){return Ao.getSizeFromDimensionRange(g,0,g.length)}static convertShape(g,e=4){let I=g.length;if(I===0)return[];let i=new Array(I),t=I-1;for(;t>=0;){if(g[t]%e===0){i[t]=g[t]/e;break}if(e%g[t]!==0)throw new Error("cannot convert shape");i[t]=1,e/=g[t],t--}for(t--;t>=0;t--)i[t]=g[t];return i}static sizeFromDimension(g,e){if(e<0||e>g.length)throw new Error(`invalid dimension of ${e} for sizeFromDimension as Tensor has ${g.length} dimensions.`);return Ao.getSizeFromDimensionRange(g,e,g.length)}static sizeToDimension(g,e){if(e<0||e>g.length)throw new Error(`invalid dimension of ${e} for sizeToDimension as Tensor has ${g.length} dimensions.`);return Ao.getSizeFromDimensionRange(g,0,e)}static getSizeFromDimensionRange(g,e,I){let i=1;for(let t=e;t=0;--i)I[i]=I[i+1]*g[i+1];return I}static normalizeAxis(g,e){if(g<-e&&g>=e)throw new Error("unsupported axis for this operation.");return g<0?g+e:g}static normalizeAxes(g,e){return g.map(I=>this.normalizeAxis(I,e??g.length))}static sortBasedOnPerm(g,e){return e?e.map(I=>g[I]):g.slice().reverse()}static padShape(g,e){let I=g.length;return g.map((i,t)=>i+e[t]+e[t+I])}static areEqual(g,e){return g.length!==e.length?!1:g.every((I,i)=>I===e[i])}},io=class vt{static adjustPoolAttributes(g,e,I,i,t,o){if(!g&&I.length!==e.length-2)throw new Error("length of specified kernel shapes should be 2 less than length of input dimensions");if(g)for(let C=0;C=I.length?I.push(e[C+2]):I[C]=e[C+2];for(let C=0;C=I[C]||o[C+I.length]>=I[C])throw new Error("pads should be smaller than kernel")}}static adjustPadsBasedOnAutoPad(g,e,I,i,t,o,C){if(C){if(t.length!==2*(g.length-2))throw new Error("length of pads should be twice the length of data dimensions");if(e.length!==g.length-2)throw new Error("length of strides should be the length of data dimensions");if(i.length!==g.length-2)throw new Error("length of kernel shapes should be the length of data dimensions");for(let s=0;s{Me(),AQ=(A,g)=>new(VB(g))(A)}),SB,Js,al,bs,rl,xs,Ys,Ts,El,QD,gy=zA(()=>{qI(),SB=(A,g=!0)=>{if(A.byteLength%8!==0)throw new Error("Invalid Uint8Array length - must be a multiple of 8 (BigInt).");let e=A.byteLength/8,I=new BigInt64Array(A.buffer,A.byteOffset,e),i=new Int32Array(e);for(let t=0;t2147483647n||o<-2147483648n)throw new Error(`Overflow occurred when converting BigInt to Int32 at index ${t}: ${o}`);i[t]=Number(o)}return g?new Uint8Array(i.buffer):i},Js=(A,g=!0)=>{if(A.byteLength%4!==0)throw new Error("Invalid Uint8Array length - must be a multiple of 4 (Int32).");let e=A.byteLength/4,I=new Int32Array(A.buffer,A.byteOffset,e),i=BigInt64Array.from(I,BigInt);return g?new Uint8Array(i.buffer):i},al=1,bs=()=>al++,rl=new Map([["float32",32],["float16",16],["int32",32],["uint32",32],["int64",64],["uint64",64],["int8",8],["uint8",8],["int4",4],["uint4",4]]),xs=(A,g)=>{let e=rl.get(A);if(!e)throw new Error("Unsupported data type.");return g.length>0?Math.ceil(g.reduce((I,i)=>I*i)*e/8):0},Ys=class{constructor(A){this.shouldConvertInt64toInt32=!1,this.isInt64ToInt32Converted=!1;let{sessionId:g,context:e,tensor:I,dataType:i,shape:t,shouldConvertInt64toInt32:o=!1}=A;this.sessionId=g,this.mlContext=e,this.mlTensor=I,this.dataType=i,this.tensorShape=t,this.shouldConvertInt64toInt32=o}get tensor(){return this.mlTensor}get type(){return this.dataType}get shape(){return this.tensorShape}get byteLength(){return xs(this.dataType,this.tensorShape)}destroy(){Te("verbose",()=>"[WebNN] TensorWrapper.destroy"),this.mlTensor.destroy()}write(A){this.mlContext.writeTensor(this.mlTensor,A)}async read(A,g){if(A){let e=await this.mlContext.readTensor(this.mlTensor),I=Js(new Uint8Array(e));if(g){(g instanceof ArrayBuffer?new Uint8Array(g):new Uint8Array(g.buffer,g.byteOffset,g.byteLength)).set(I);return}else return I.buffer}else return g?this.mlContext.readTensor(this.mlTensor,g):this.mlContext.readTensor(this.mlTensor)}canReuseTensor(A,g,e){return this.mlContext===A&&this.dataType===g&&this.tensorShape.length===e.length&&this.tensorShape.every((I,i)=>I===e[i])}setIsInt64ToInt32Converted(A){this.isInt64ToInt32Converted=A}},Ts=class{constructor(A,g){this.tensorManager=A,this.wrapper=g}get tensorWrapper(){return this.wrapper}releaseTensor(){this.tensorWrapper&&(this.tensorManager.releaseTensor(this.tensorWrapper),this.wrapper=void 0)}async ensureTensor(A,g,e,I){let i=g,t=this.tensorManager.getMLContext(A),o=i==="int64"&&!t.opSupportLimits().input.dataTypes.includes("int64");if(o&&(i="int32",Te("verbose",()=>"[WebNN] TensorIdTracker.ensureTensor: convert dataType from int64 to int32")),this.wrapper){if(this.wrapper.canReuseTensor(t,i,e))return this.wrapper.tensor;if(I){if(this.wrapper.byteLength!==xs(i,e))throw new Error("Unable to copy data to tensor with different size.");this.activeUpload=new Uint8Array(await this.wrapper.read())}this.tensorManager.releaseTensor(this.wrapper)}let C=typeof MLTensorUsage>"u"?void 0:MLTensorUsage.READ|MLTensorUsage.WRITE;return this.wrapper=await this.tensorManager.getCachedTensor(A,i,e,C,!0,!0,o),I&&this.activeUpload&&(this.wrapper.write(this.activeUpload),this.activeUpload=void 0),this.wrapper.tensor}upload(A){let g=A;if(this.wrapper)if(this.wrapper.shouldConvertInt64toInt32&&(g=SB(A,!0),this.wrapper.setIsInt64ToInt32Converted(!0)),g.byteLength===this.wrapper.byteLength){this.wrapper.write(g);return}else Te("verbose",()=>"Data size does not match tensor size. Releasing tensor."),this.releaseTensor();this.activeUpload?this.activeUpload.set(g):this.activeUpload=new Uint8Array(g)}async download(A){if(this.activeUpload){let g=this.wrapper?.isInt64ToInt32Converted?Js(this.activeUpload):this.activeUpload;if(A){A instanceof ArrayBuffer?new Uint8Array(A).set(g):new Uint8Array(A.buffer,A.byteOffset,A.byteLength).set(g);return}else return g.buffer}if(!this.wrapper)throw new Error("Tensor has not been created.");return A?this.wrapper.read(this.wrapper?.shouldConvertInt64toInt32,A):this.wrapper.read(this.wrapper?.shouldConvertInt64toInt32)}},El=class{constructor(A){this.backend=A,this.tensorTrackersById=new Map,this.freeTensors=[],this.externalTensors=new Set}getMLContext(A){let g=this.backend.getMLContext(A);if(!g)throw new Error("MLContext not found for session.");return g}reserveTensorId(){let A=bs();return this.tensorTrackersById.set(A,new Ts(this)),A}releaseTensorId(A){let g=this.tensorTrackersById.get(A);g&&(this.tensorTrackersById.delete(A),g.tensorWrapper&&this.releaseTensor(g.tensorWrapper))}async ensureTensor(A,g,e,I,i){Te("verbose",()=>`[WebNN] TensorManager.ensureTensor {tensorId: ${g}, dataType: ${e}, shape: ${I}, copyOld: ${i}}`);let t=this.tensorTrackersById.get(g);if(!t)throw new Error("Tensor not found.");return t.ensureTensor(A,e,I,i)}upload(A,g){let e=this.tensorTrackersById.get(A);if(!e)throw new Error("Tensor not found.");e.upload(g)}async download(A,g){Te("verbose",()=>`[WebNN] TensorManager.download {tensorId: ${A}, dstBuffer: ${g?.byteLength}}`);let e=this.tensorTrackersById.get(A);if(!e)throw new Error("Tensor not found.");return e.download(g)}releaseTensorsForSession(A){for(let g of this.freeTensors)g.sessionId===A&&g.destroy();this.freeTensors=this.freeTensors.filter(g=>g.sessionId!==A)}registerTensor(A,g,e,I){let i=this.getMLContext(A),t=bs(),o=new Ys({sessionId:A,context:i,tensor:g,dataType:e,shape:I});return this.tensorTrackersById.set(t,new Ts(this,o)),this.externalTensors.add(o),t}async getCachedTensor(A,g,e,I,i,t,o=!1){let C=this.getMLContext(A);for(let[Q,r]of this.freeTensors.entries())if(r.canReuseTensor(C,g,e)){Te("verbose",()=>`[WebNN] Reusing tensor {dataType: ${g}, shape: ${e}}`);let B=this.freeTensors.splice(Q,1)[0];return B.sessionId=A,B}Te("verbose",()=>`[WebNN] MLContext.createTensor {dataType: ${g}, shape: ${e}}`);let s=await C.createTensor({dataType:g,shape:e,dimensions:e,usage:I,writable:i,readable:t});return new Ys({sessionId:A,context:C,tensor:s,dataType:g,shape:e,shouldConvertInt64toInt32:o})}releaseTensor(A){this.externalTensors.has(A)&&this.externalTensors.delete(A),this.freeTensors.push(A)}},QD=(...A)=>new El(...A)}),TC,nl,aD,Iy=zA(()=>{Me(),fi(),BD(),gy(),qI(),TC=new Map([[1,"float32"],[10,"float16"],[6,"int32"],[12,"uint32"],[7,"int64"],[13,"uint64"],[22,"int4"],[21,"uint4"],[3,"int8"],[2,"uint8"],[9,"uint8"]]),nl=(A,g)=>{if(A===g)return!0;if(A===void 0||g===void 0)return!1;let e=Object.keys(A).sort(),I=Object.keys(g).sort();return e.length===I.length&&e.every((i,t)=>i===I[t]&&A[i]===g[i])},aD=class{constructor(A){this.tensorManager=QD(this),this.mlContextBySessionId=new Map,this.sessionIdsByMLContext=new Map,this.mlContextCache=[],this.sessionGraphInputs=new Map,this.temporaryGraphInputs=[],this.temporarySessionTensorIds=new Map,ZB(A.logLevel,!!A.debug)}get currentSessionId(){if(this.activeSessionId===void 0)throw new Error("No active session");return this.activeSessionId}onRunStart(A){Te("verbose",()=>`[WebNN] onRunStart {sessionId: ${A}}`),this.activeSessionId=A}onRunEnd(A){Te("verbose",()=>`[WebNN] onRunEnd {sessionId: ${A}}`);let g=this.temporarySessionTensorIds.get(A);if(g){for(let e of g)Te("verbose",()=>`[WebNN] releasing temporary tensor {tensorId: ${e}}`),this.tensorManager.releaseTensorId(e);this.temporarySessionTensorIds.delete(A),this.activeSessionId=void 0}}async createMLContext(A){if(A instanceof GPUDevice){let e=this.mlContextCache.findIndex(I=>I.gpuDevice===A);if(e!==-1)return this.mlContextCache[e].mlContext;{let I=await navigator.ml.createContext(A);return this.mlContextCache.push({gpuDevice:A,mlContext:I}),I}}else if(A===void 0){let e=this.mlContextCache.findIndex(I=>I.options===void 0&&I.gpuDevice===void 0);if(e!==-1)return this.mlContextCache[e].mlContext;{let I=await navigator.ml.createContext();return this.mlContextCache.push({mlContext:I}),I}}let g=this.mlContextCache.findIndex(e=>nl(e.options,A));if(g!==-1)return this.mlContextCache[g].mlContext;{let e=await navigator.ml.createContext(A);return this.mlContextCache.push({options:A,mlContext:e}),e}}registerMLContext(A,g){this.mlContextBySessionId.set(A,g);let e=this.sessionIdsByMLContext.get(g);e||(e=new Set,this.sessionIdsByMLContext.set(g,e)),e.add(A),this.temporaryGraphInputs.length>0&&(this.sessionGraphInputs.set(A,this.temporaryGraphInputs),this.temporaryGraphInputs=[])}onReleaseSession(A){this.sessionGraphInputs.delete(A);let g=this.mlContextBySessionId.get(A);if(!g)return;this.tensorManager.releaseTensorsForSession(A),this.mlContextBySessionId.delete(A);let e=this.sessionIdsByMLContext.get(g);if(e.delete(A),e.size===0){this.sessionIdsByMLContext.delete(g);let I=this.mlContextCache.findIndex(i=>i.mlContext===g);I!==-1&&this.mlContextCache.splice(I,1)}}getMLContext(A){return this.mlContextBySessionId.get(A)}reserveTensorId(){return this.tensorManager.reserveTensorId()}releaseTensorId(A){Te("verbose",()=>`[WebNN] releaseTensorId {tensorId: ${A}}`),this.tensorManager.releaseTensorId(A)}async ensureTensor(A,g,e,I,i){let t=TC.get(e);if(!t)throw new Error(`Unsupported ONNX data type: ${e}`);return this.tensorManager.ensureTensor(A??this.currentSessionId,g,t,I,i)}async createTemporaryTensor(A,g,e){Te("verbose",()=>`[WebNN] createTemporaryTensor {onnxDataType: ${g}, shape: ${e}}`);let I=TC.get(g);if(!I)throw new Error(`Unsupported ONNX data type: ${g}`);let i=this.tensorManager.reserveTensorId();await this.tensorManager.ensureTensor(A,i,I,e,!1);let t=this.temporarySessionTensorIds.get(A);return t?t.push(i):this.temporarySessionTensorIds.set(A,[i]),i}uploadTensor(A,g){if(!Cg().shouldTransferToMLTensor)throw new Error("Trying to upload to a MLTensor while shouldTransferToMLTensor is false");Te("verbose",()=>`[WebNN] uploadTensor {tensorId: ${A}, data: ${g.byteLength}}`),this.tensorManager.upload(A,g)}async downloadTensor(A,g){return this.tensorManager.download(A,g)}createMLTensorDownloader(A,g){return async()=>{let e=await this.tensorManager.download(A);return AQ(e,g)}}registerMLTensor(A,g,e,I){let i=TC.get(e);if(!i)throw new Error(`Unsupported ONNX data type: ${e}`);let t=this.tensorManager.registerTensor(A,g,i,I);return Te("verbose",()=>`[WebNN] registerMLTensor {tensor: ${g}, dataType: ${i}, dimensions: ${I}} -> {tensorId: ${t}}`),t}registerMLConstant(A,g,e,I,i,t,o=!1){if(!t)throw new Error("External mounted files are not available.");let C=A;A.startsWith("./")&&(C=A.substring(2));let s=t.get(C);if(!s)throw new Error(`File with name ${C} not found in preloaded files.`);if(g+e>s.byteLength)throw new Error("Out of bounds: data offset and length exceed the external file data size.");let Q=s.slice(g,g+e).buffer,r;switch(i.dataType){case"float32":r=new Float32Array(Q);break;case"float16":r=typeof Float16Array<"u"&&Float16Array.from?new Float16Array(Q):new Uint16Array(Q);break;case"int32":r=new Int32Array(Q);break;case"uint32":r=new Uint32Array(Q);break;case"int64":o?(r=SB(new Uint8Array(Q),!1),i.dataType="int32"):r=new BigInt64Array(Q);break;case"uint64":r=new BigUint64Array(Q);break;case"int8":r=new Int8Array(Q);break;case"int4":case"uint4":case"uint8":r=new Uint8Array(Q);break;default:throw new Error(`Unsupported data type: ${i.dataType} in creating WebNN Constant from external data.`)}return Te("verbose",()=>`[WebNN] registerMLConstant {dataType: ${i.dataType}, shape: ${i.shape}}} ${o?"(Note: it was int64 data type and registered to int32 as workaround)":""}`),I.constant(i,r)}registerGraphInput(A){this.temporaryGraphInputs.push(A)}isGraphInput(A,g){let e=this.sessionGraphInputs.get(A);return e?e.includes(g):!1}isInt64Supported(A){return!!this.mlContextBySessionId.get(A)?.opSupportLimits().input.dataTypes.includes("int64")}flush(){}}}),eQ=zA(()=>{}),Hs,HC,PC,ll,cl,Ps,NB,dl,rD,iy=zA(()=>{qI(),eQ(),Hs=new Map([[64,250],[128,200],[256,200],[512,200],[2048,230],[4096,200],[8192,50],[16384,50],[32768,50],[65536,50],[131072,50],[262144,50],[524288,50],[1048576,50],[2097152,30],[4194304,20],[8388608,10],[12582912,10],[16777216,10],[26214400,15],[33554432,22],[44236800,2],[58982400,6],[67108864,6],[134217728,6],[167772160,6]]),HC=[],PC=A=>Math.ceil(Number(A)/16)*16,ll=A=>{for(let g=0;gcl++,NB=async(A,g,e,I)=>{let i=PC(e),t=A.device.createBuffer({size:i,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});try{let o=A.getCommandEncoder();A.endComputePass(),o.copyBufferToBuffer(g,0,t,0,i),A.flush(),await t.mapAsync(GPUMapMode.READ);let C=t.getMappedRange();if(I){let s=I();return s.set(new Uint8Array(C,0,e)),s}else return new Uint8Array(C.slice(0,e))}finally{t.destroy()}},dl=class{constructor(A){this.backend=A,this.storageCache=new Map,this.freeBuffers=new Map,this.freeUniformBuffers=new Map,this.buffersPending=[],this.capturedPendingBuffers=new Map;for(let[g]of Hs)HC.push(g),this.freeBuffers.set(g,[]),this.freeUniformBuffers.set(g,[]);this.sessionCount=0}upload(A,g){let e=g.buffer,I=g.byteOffset,i=g.byteLength,t=PC(i),o=this.storageCache.get(A);if(!o)throw new Error("gpu data for uploading does not exist");if(Number(o.originalSize)!==i)throw new Error(`inconsistent data size. gpu data size=${o.originalSize}, data size=${i}`);let C=this.backend.device.createBuffer({mappedAtCreation:!0,size:t,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC}),s=C.getMappedRange();new Uint8Array(s).set(new Uint8Array(e,I,i)),C.unmap();let Q=this.backend.device.createCommandEncoder();Q.copyBufferToBuffer(C,0,o.gpuData.buffer,0,t),this.backend.device.queue.submit([Q.finish()]),C.destroy(),Te("verbose",()=>`[WebGPU] GpuDataManager.upload(id=${A})`)}memcpy(A,g){let e=this.storageCache.get(A);if(!e)throw new Error("source gpu data for memcpy does not exist");let I=this.storageCache.get(g);if(!I)throw new Error("destination gpu data for memcpy does not exist");if(e.originalSize!==I.originalSize)throw new Error("inconsistent source and destination gpu data size");let i=PC(e.originalSize),t=this.backend.getCommandEncoder();this.backend.endComputePass(),t.copyBufferToBuffer(e.gpuData.buffer,0,I.gpuData.buffer,0,i)}registerExternalBuffer(A,g,e){let I;if(e){if(I=e[0],A===e[1])return Te("verbose",()=>`[WebGPU] GpuDataManager.registerExternalBuffer(size=${g}) => id=${I}, buffer is the same, skip.`),I;if(this.backend.capturedCommandList.has(this.backend.currentSessionId))throw new Error(`Registering a different external buffer under graph capture mode is not supported yet. + Please use the previous external buffer!`)}else I=Ps();return this.storageCache.set(I,{gpuData:{id:I,type:0,buffer:A},originalSize:g}),Te("verbose",()=>`[WebGPU] GpuDataManager.registerExternalBuffer(size=${g}) => id=${I}, registered.`),I}unregisterExternalBuffer(A){A!==void 0&&(this.storageCache.delete(A),Te("verbose",()=>`[WebGPU] GpuDataManager.unregisterExternalBuffer() => id=${A}`))}create(A,g=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST){let e=ll(A),I,i=(g&GPUBufferUsage.STORAGE)===GPUBufferUsage.STORAGE,t=(g&GPUBufferUsage.UNIFORM)===GPUBufferUsage.UNIFORM;if(i||t){let C=(i?this.freeBuffers:this.freeUniformBuffers).get(e);C?C.length>0?I=C.pop():I=this.backend.device.createBuffer({size:e,usage:g}):I=this.backend.device.createBuffer({size:e,usage:g})}else I=this.backend.device.createBuffer({size:e,usage:g});let o={id:Ps(),type:0,buffer:I};return this.storageCache.set(o.id,{gpuData:o,originalSize:Number(A)}),Te("verbose",()=>`[WebGPU] GpuDataManager.create(size=${A}) => id=${o.id}`),o}get(A){return this.storageCache.get(A)?.gpuData}release(A){let g=typeof A=="bigint"?Number(A):A,e=this.storageCache.get(g);if(!e){if(this.storageCache.size===0)return 0;throw new Error("releasing data does not exist")}return Te("verbose",()=>`[WebGPU] GpuDataManager.release(id=${g}), gpuDataId=${e.gpuData.id}`),this.storageCache.delete(g),this.buffersPending.push(e.gpuData.buffer),e.originalSize}async download(A,g){let e=this.storageCache.get(Number(A));if(!e)throw new Error("data does not exist");await NB(this.backend,e.gpuData.buffer,e.originalSize,g)}refreshPendingBuffers(){if(this.buffersPending.length!==0)if(this.backend.sessionStatus==="default"){for(let A of this.buffersPending){let g=Hs.get(A.size);if((A.usage&GPUBufferUsage.STORAGE)===GPUBufferUsage.STORAGE){let e=this.freeBuffers.get(A.size)||[];g===void 0||e.length>=g?A.destroy():e.push(A)}else if((A.usage&GPUBufferUsage.UNIFORM)===GPUBufferUsage.UNIFORM){let e=this.freeUniformBuffers.get(A.size)||[];g===void 0||e.length>=g?A.destroy():e.push(A)}else A.destroy()}this.buffersPending=[]}else{let A=this.capturedPendingBuffers.get(this.backend.currentSessionId);A||(A=[],this.capturedPendingBuffers.set(this.backend.currentSessionId,A));for(let g of this.buffersPending)A.push(g);this.buffersPending=[]}}dispose(){this.freeBuffers.forEach(A=>{A.forEach(g=>{g.destroy()})}),this.freeUniformBuffers.forEach(A=>{A.forEach(g=>{g.destroy()})}),this.storageCache.forEach(A=>{A.gpuData.buffer.destroy()}),this.capturedPendingBuffers.forEach(A=>{A.forEach(g=>{g.destroy()})}),this.storageCache=new Map,this.freeBuffers=new Map,this.freeUniformBuffers=new Map,this.capturedPendingBuffers=new Map}onCreateSession(){this.sessionCount+=1}onReleaseSession(A){let g=this.capturedPendingBuffers.get(A);g&&(g.forEach(e=>{e.destroy()}),this.capturedPendingBuffers.delete(A)),this.sessionCount-=1,this.sessionCount===0&&(Te("warning",()=>"[WebGPU] Clearing webgpu buffer cache"),this.storageCache.forEach(e=>{e.gpuData.buffer.destroy()}),this.storageCache=new Map)}},rD=(...A)=>new dl(...A)}),hl,Oe,hg=zA(()=>{hl=class{constructor(A){Object.assign(this,A)}get cacheKey(){return this.key||(this.key=Object.getOwnPropertyNames(this).sort().map(A=>`${this[A]}`).join(";")),this.key}},Oe=A=>new hl(A)}),gt,vC,Yg,zg,de,cg,RB,At,ei,ce,Ut,kA,ne,ED,gQ,Dl,nD,Le=zA(()=>{Me(),ke(),gt=64,vC=(A,g)=>{if(g===3)throw new Error("vec3 has same alignment as vec4, use vec4 instead");switch(Number(A)){case 10:return g>1?`vec${g}`:"f16";case 1:return g>1?`vec${g}`:"f32";case 6:return g>1?`vec${g}`:"i32";case 12:return g>1?`vec${g}`:"u32";case 7:if(g>1)throw new Error("currently not supported vecX of uint64 yet");return["vec2","i32"];case 13:if(g>1)throw new Error("currently not supported vecX of uint64 yet");return["vec2","u32"];case 9:if(g!==4)throw new Error("bool must be vec4");return["u32","vec4"];case 22:return"i32";case 21:return"u32";default:throw new Error(`Unknown data type: ${A}`)}},Yg=(A,g=1)=>{let e=vC(A,g);return typeof e=="string"?e:e[0]},zg=(A,g=1)=>{let e=vC(A,g);return typeof e=="string"?e:e[1]},de=(...A)=>{let g=[];return A.forEach(e=>{e.length!==0&&g.push({type:12,data:e},{type:12,data:MA.computeStrides(e)})}),g},cg=A=>A%4===0?4:A%2===0?2:1,RB=(A="f32",g,e="0")=>!g||g===1?`${A}(${e})`:`vec${g}<${A}>(${e})`,At=(A,g,e)=>A==="f32"?e:g===1?`f32(${e})`:`vec${g}(${e})`,ei=(A,g)=>g===4?`(${A}.x + ${A}.y + ${A}.z + ${A}.w)`:g===2?`(${A}.x + ${A}.y)`:g===3?`(${A}.x + ${A}.y + ${A}.z)`:A,ce=(A,g,e,I)=>A.startsWith("uniforms.")&&e>4?typeof g=="string"?I==="f16"?`${A}[(${g}) / 8][(${g}) % 8 / 4][(${g}) % 8 % 4]`:`${A}[(${g}) / 4][(${g}) % 4]`:I==="f16"?`${A}[${Math.floor(g/8)}][${Math.floor(g%8/4)}][${g%8%4}]`:`${A}[${Math.floor(g/4)}][${g%4}]`:e>1?`${A}[${g}]`:A,Ut=(A,g,e,I,i)=>{let t=typeof e=="number",o=t?e:e.length,C=[...new Array(o).keys()],s=o<2?"u32":o<=4?`vec${o}`:`array`,Q=vC(g,i),r=typeof Q=="string"?Q:Q[1],B=typeof Q=="string"?Q:Q[0],a={indices:s,value:r,storage:B,tensor:g},d=q=>typeof q=="string"?q:`${q}u`,c={offsetToIndices:!1,indicesToOffset:!1,broadcastedIndicesToOffset:!1,set:!1,setByIndices:!1,get:!1,getByIndices:!1},F=t?"uniforms.":"",L=`${F}${A}_shape`,u=`${F}${A}_strides`,h="";for(let q=0;q ${a.indices} { + var indices: ${a.indices}; + var current = offset; + ${h} + return indices; + }`,w=q=>(c.offsetToIndices=!0,o<2?q:`o2i_${A}(${q})`),y=[];if(o>=2)for(let q=o-1;q>=0;q--)y.push(`${ce(u,q,o)} * (indices[${q}])`);let D=o<2?"":` + fn i2o_${A}(indices: ${a.indices}) -> u32 { + return ${y.join("+")}; + }`,f=q=>(c.indicesToOffset=!0,o<2?q:`i2o_${A}(${q})`),G=(...q)=>o===0?"0u":`${a.indices}(${q.map(d).join(",")})`,J=(q,U)=>o<2?`${q}`:`${ce(q,U,o)}`,T=(q,U,z)=>o<2?`${q}=${z};`:`${ce(q,U,o)}=${z};`,X={},gA=(q,U)=>{c.broadcastedIndicesToOffset=!0;let z=`${U.name}broadcastedIndicesTo${A}Offset`;if(z in X)return`${z}(${q})`;let H=[];for(let EA=o-1;EA>=0;EA--){let xA=U.indicesGet("outputIndices",EA+U.rank-o);H.push(`${J(u,EA)} * (${xA} % ${J(L,EA)})`)}return X[z]=`fn ${z}(outputIndices: ${U.type.indices}) -> u32 { + return ${H.length>0?H.join("+"):"0u"}; + }`,`${z}(${q})`},x=(q,U)=>(()=>{if(a.storage===a.value)return`${A}[${q}]=${U};`;if(a.storage==="vec2"&&a.value==="i32")return`${A}[${q}]=vec2(u32(${U}), select(0u, 0xFFFFFFFFu, ${U} < 0));`;if(a.storage==="vec2"&&a.value==="u32")return`${A}[${q}]=vec2(u32(${U}), 0u);`;if(a.storage==="u32"&&a.value==="vec4")return`${A}[${q}]=dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(${U}));`;throw new Error(`not supported combination of storage type ${a.storage} and value type ${a.value} yet`)})(),tA=q=>(()=>{if(a.storage===a.value)return`${A}[${q}]`;if(a.storage==="vec2"&&a.value==="i32")return`i32(${A}[${q}].x)`;if(a.storage==="vec2"&&a.value==="u32")return`u32(${A}[${q}].x)`;if(a.storage==="u32"&&a.value==="vec4")return`vec4(bool(${A}[${q}] & 0xFFu), bool(${A}[${q}] & 0xFF00u), bool(${A}[${q}] & 0xFF0000u), bool(${A}[${q}] & 0xFF000000u))`;throw new Error(`not supported combination of storage type ${a.storage} and value type ${a.value} yet`)})(),Z=o<2?"":` + fn get_${A}ByIndices(indices: ${a.indices}) -> ${r} { + return ${tA(`i2o_${A}(indices)`)}; + }`,IA=o<2?"":(()=>{let q=C.map(z=>`d${z}: u32`).join(", "),U=C.map(z=>`d${z}`).join(", ");return` + fn get_${A}(${q}) -> ${r} { + return get_${A}ByIndices(${G(U)}); + }`})(),oA=(...q)=>{if(q.length!==o)throw new Error(`indices length must be ${o}`);let U=q.map(d).join(",");return o===0?tA("0u"):o===1?tA(U[0]):(c.get=!0,c.getByIndices=!0,c.indicesToOffset=!0,`get_${A}(${U})`)},CA=q=>o<2?tA(q):(c.getByIndices=!0,c.indicesToOffset=!0,`get_${A}ByIndices(${q})`),DA=o<2?"":` + fn set_${A}ByIndices(indices: ${a.indices}, value: ${r}) { + ${x(`i2o_${A}(indices)`,"value")} + }`,cA=o<2?"":(()=>{let q=C.map(z=>`d${z}: u32`).join(", "),U=C.map(z=>`d${z}`).join(", ");return` + fn set_${A}(${q}, value: ${r}) { + set_${A}ByIndices(${G(U)}, value); + }`})();return{impl:()=>{let q=[],U=!1;return c.offsetToIndices&&(q.push(R),U=!0),c.indicesToOffset&&(q.push(D),U=!0),c.broadcastedIndicesToOffset&&(Object.values(X).forEach(z=>q.push(z)),U=!0),c.set&&(q.push(cA),U=!0),c.setByIndices&&(q.push(DA),U=!0),c.get&&(q.push(IA),U=!0),c.getByIndices&&(q.push(Z),U=!0),!t&&U&&q.unshift(`const ${L} = ${a.indices}(${e.join(",")});`,`const ${u} = ${a.indices}(${MA.computeStrides(e).join(",")});`),q.join(` +`)},type:a,offsetToIndices:w,indicesToOffset:f,broadcastedIndicesToOffset:gA,indices:G,indicesGet:J,indicesSet:T,set:(...q)=>{if(q.length!==o+1)throw new Error(`indices length must be ${o}`);let U=q[o];if(typeof U!="string")throw new Error("value must be string");let z=q.slice(0,o).map(d).join(",");return o===0?x("0u",U):o===1?x(z[0],U):(c.set=!0,c.setByIndices=!0,c.indicesToOffset=!0,`set_${A}(${z}, ${U})`)},setByOffset:x,setByIndices:(q,U)=>o<2?x(q,U):(c.setByIndices=!0,c.indicesToOffset=!0,`set_${A}ByIndices(${q}, ${U});`),get:oA,getByOffset:tA,getByIndices:CA,usage:I,name:A,strides:u,shape:L,rank:o}},kA=(A,g,e,I=1)=>Ut(A,g,e,"input",I),ne=(A,g,e,I=1)=>Ut(A,g,e,"output",I),ED=(A,g,e)=>Ut(A,g,e,"atomicOutput",1),gQ=(A,g,e,I=1)=>Ut(A,g,e,"internal",I),Dl=class{constructor(A,g){this.normalizedDispatchGroup=A,this.limits=g,this.internalVariables=[],this.variables=[],this.uniforms=[],this.variableIndex=0}guardAgainstOutOfBoundsWorkgroupSizes(A){return`if (global_idx >= ${typeof A=="number"?`${A}u`:A}) { return; }`}mainStart(A=gt){let g=typeof A=="number"?A:A[0],e=typeof A=="number"?1:A[1],I=typeof A=="number"?1:A[2];if(g>this.limits.maxComputeWorkgroupSizeX||e>this.limits.maxComputeWorkgroupSizeY||I>this.limits.maxComputeWorkgroupSizeZ)throw new Error(`workgroup size [${g}, ${e}, ${I}] exceeds the maximum workgroup size [${this.limits.maxComputeWorkgroupSizeX}, ${this.limits.maxComputeWorkgroupSizeY}, ${this.limits.maxComputeWorkgroupSizeZ}].`);if(g*e*I>this.limits.maxComputeInvocationsPerWorkgroup)throw new Error(`workgroup size [${g}, ${e}, ${I}] exceeds the maximum workgroup invocations ${this.limits.maxComputeInvocationsPerWorkgroup}.`);let i=this.normalizedDispatchGroup[1]===1&&this.normalizedDispatchGroup[2]===1,t=i?`@builtin(global_invocation_id) global_id : vec3, + @builtin(workgroup_id) workgroup_id : vec3, + @builtin(local_invocation_index) local_idx : u32, + @builtin(local_invocation_id) local_id : vec3`:`@builtin(global_invocation_id) global_id : vec3, + @builtin(local_invocation_id) local_id : vec3, + @builtin(local_invocation_index) local_idx : u32, + @builtin(workgroup_id) workgroup_id : vec3, + @builtin(num_workgroups) num_workgroups : vec3`,o=i?`let global_idx = global_id.x; + let workgroup_index = workgroup_id.x;`:`let workgroup_index = workgroup_id.z * num_workgroups[0] * num_workgroups[1] + + workgroup_id.y * num_workgroups[0] + workgroup_id.x; + let global_idx = workgroup_index * ${g*e*I}u + local_idx;`;return`@compute @workgroup_size(${g}, ${e}, ${I}) + fn main(${t}) { + ${o} + `}appendVariableUniforms(A){A.rank!==0&&(A.shape.startsWith("uniforms.")&&this.uniforms.push({name:A.shape.replace("uniforms.",""),type:"u32",length:A.rank}),A.strides.startsWith("uniforms.")&&this.uniforms.push({name:A.strides.replace("uniforms.",""),type:"u32",length:A.rank}))}declareVariable(A,g){if(A.usage==="internal")throw new Error("cannot use internal variable with declareVariable(). use registerInternalVariables() instead.");this.variables.push(A),this.appendVariableUniforms(A);let e=A.usage==="input"?"read":"read_write",I=A.usage==="atomicOutput"?"atomic":A.type.storage;return`@group(0) @binding(${g}) var ${A.name}: array<${I}>;`}declareVariables(...A){return A.map(g=>this.declareVariable(g,this.variableIndex++)).join(` +`)}registerInternalVariable(A){if(A.usage!=="internal")throw new Error("cannot use input or output variable with registerInternalVariable(). use declareVariables() instead.");this.internalVariables.push(A),this.appendVariableUniforms(A)}registerInternalVariables(...A){return A.forEach(g=>this.registerInternalVariable(g)),this}registerUniform(A,g,e=1){return this.uniforms.push({name:A,type:g,length:e}),this}registerUniforms(A){return this.uniforms=this.uniforms.concat(A),this}uniformDeclaration(){if(this.uniforms.length===0)return"";let A=[];for(let{name:g,type:e,length:I}of this.uniforms)if(I&&I>4)e==="f16"?A.push(`@align(16) ${g}:array, ${Math.ceil(I/8)}>`):A.push(`${g}:array, ${Math.ceil(I/4)}>`);else{let i=I==null||I===1?e:`vec${I}<${e}>`;A.push(`${g}:${i}`)}return` + struct Uniforms { ${A.join(", ")} }; + @group(0) @binding(${this.variableIndex}) var uniforms: Uniforms;`}get additionalImplementations(){return this.uniformDeclaration()+this.variables.map(A=>A.impl()).join(` +`)+this.internalVariables.map(A=>A.impl()).join(` +`)}get variablesInfo(){if(this.uniforms.length===0)return;let A=g=>[12,10,1,6][["u32","f16","f32","i32"].indexOf(g)];return this.uniforms.map(g=>[A(g.type),g.length??1])}},nD=(A,g)=>new Dl(A,g)}),ul,vs,wl,pl,yl,fl,aI,lD,cD,gi=zA(()=>{Me(),ke(),hg(),Le(),ul=(A,g)=>{if(!A||A.length!==1)throw new Error("Transpose requires 1 input.");if(g.length!==0&&g.length!==A[0].dims.length)throw new Error(`perm size ${g.length} does not match input rank ${A[0].dims.length}`)},vs=(A,g)=>g.length!==0?g:[...new Array(A).keys()].reverse(),wl=(A,g)=>MA.sortBasedOnPerm(A,vs(A.length,g)),pl=(A,g,e,I)=>{let i=`fn perm(i: ${I.type.indices}) -> ${e.type.indices} { + var a: ${e.type.indices};`;for(let t=0;t{let e=[],I=[];for(let i=0;i{let e=0;for(let I=0;I{let e=A.dataType,I=A.dims.length,i=vs(I,g),t=wl(A.dims,i),o=A.dims,C=t,s=I<2||fl(i,A.dims),Q;if(s)return Q=c=>{let F=kA("input",e,o,4),L=ne("output",e,C,4);return` + ${c.registerUniform("output_size","u32").declareVariables(F,L)} + ${c.mainStart()} + ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + output[global_idx] = input[global_idx]; + }`},{name:"TransposeCopy",shaderCache:{inputDependencies:["type"]},getRunData:()=>{let c=MA.size(t);return{outputs:[{dims:t,dataType:A.dataType}],dispatchGroup:{x:Math.ceil(c/64/4)},programUniforms:[{type:12,data:Math.ceil(c/4)}]}},getShaderSource:Q};let{newShape:r,newPerm:B}=yl(A.dims,i),a=MA.areEqual(B,[2,3,1]),d=MA.areEqual(B,[3,1,2]);if(r.length===2||a||d){o=a?[r[0],r[1]*r[2]]:d?[r[0]*r[1],r[2]]:r,C=[o[1],o[0]];let c=16;return Q=F=>{let L=kA("a",e,o.length),u=ne("output",e,C.length);return` + ${F.registerUniform("output_size","u32").declareVariables(L,u)} + var tile : array, ${c}>; + ${F.mainStart([c,c,1])} + let stride = (uniforms.output_shape[1] - 1) / ${c} + 1; + let workgroup_id_x = workgroup_index % stride; + let workgroup_id_y = workgroup_index / stride; + let input_col = workgroup_id_y * ${c}u + local_id.x; + let input_row = workgroup_id_x * ${c}u + local_id.y; + if (input_row < uniforms.a_shape[0] && input_col < uniforms.a_shape[1]) { + tile[local_id.y][local_id.x] = ${L.getByIndices(`${L.type.indices}(input_row, input_col)`)}; + } + workgroupBarrier(); + + let output_col = workgroup_id_x * ${c}u + local_id.x; + let output_row = workgroup_id_y * ${c}u + local_id.y; + if (output_row < uniforms.output_shape[0] && output_col < uniforms.output_shape[1]) { + ${u.setByIndices(`${u.type.indices}(output_row, output_col)`,"tile[local_id.x][local_id.y]")} + } + }`},{name:"TransposeShared",shaderCache:{inputDependencies:["type"]},getRunData:()=>{let F=MA.size(t);return{outputs:[{dims:t,dataType:A.dataType}],dispatchGroup:{x:Math.ceil(C[1]/c),y:Math.ceil(C[0]/c)},programUniforms:[{type:12,data:F},...de(o,C)]}},getShaderSource:Q}}return Q=c=>{let F=kA("a",e,o.length),L=ne("output",e,C.length);return` + ${c.registerUniform("output_size","u32").declareVariables(F,L)} + + ${pl(i,I,F,L)} + + ${c.mainStart()} + ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let indices = ${L.offsetToIndices("global_idx")}; + let aIndices = perm(indices); + + ${L.setByOffset("global_idx",F.getByIndices("aIndices"))} + }`},{name:"Transpose",shaderCache:{hint:`${g}`,inputDependencies:["rank"]},getRunData:()=>{let c=MA.size(t);return{outputs:[{dims:t,dataType:A.dataType}],dispatchGroup:{x:Math.ceil(c/64)},programUniforms:[{type:12,data:c},...de(o,C)]}},getShaderSource:Q}},lD=(A,g)=>{ul(A.inputs,g.perm),A.compute(aI(A.inputs[0],g.perm))},cD=A=>Oe({perm:A.perm})}),ml,Ml,Fl,Sl,Nl,Rl,Gl,_l,kl,Ll,FI,dD,hD,DD,uD,wD,pD,yD,fD,mD,MD,ty=zA(()=>{Me(),ke(),Le(),IQ(),gi(),ml={max:"select(bestValue, candidate, candidate > bestValue)",min:"select(bestValue, candidate, candidate < bestValue)",mean:"bestValue + candidate",sum:"bestValue + candidate",prod:"bestValue * candidate",sumSquare:"bestValue + candidate * candidate",logSumExp:"bestValue + exp(candidate)",l1:"bestValue + abs(candidate)",l2:"bestValue + candidate * candidate",logSum:"bestValue + candidate"},Ml={max:"select(bestValue, candidate, candidate > bestValue)",min:"select(bestValue, candidate, candidate < bestValue)",mean:"bestValue + candidate",sum:"bestValue + candidate",prod:"bestValue * candidate",sumSquare:"bestValue + candidate",logSumExp:"bestValue + candidate",l1:"bestValue + candidate",l2:"bestValue + candidate",logSum:"bestValue + candidate"},Fl={max:"_A[offset]",min:"_A[offset]",mean:"0",sum:"0",prod:"1",sumSquare:"0",logSumExp:"0",l1:"0",l2:"0",logSum:"0"},Sl={max:"bestValue",min:"bestValue",sum:"bestValue",prod:"bestValue",sumSquare:"bestValue",logSumExp:"log(bestValue)",l1:"bestValue",l2:"sqrt(bestValue)",logSum:"log(bestValue)"},Nl=(A,g)=>{let e=[];for(let I=g-A;I{let e=[],I=A.length;for(let t=0;tA[t]);return[e,i]},Gl=(A,g)=>{let e=A.length+g.length,I=[],i=0;for(let t=0;t{for(let e=0;e{let e=[];if(!_l(A,g)){for(let I=0;Ie.push(I))}return e},Ll=(A,g,e,I,i,t,o)=>{let C=e[0].dims,s=MA.size(t),Q=MA.size(o),r=kA("_A",e[0].dataType,C),B=ne("output",i,t),a=64;s===1&&(a=256);let d=` + var aBestValues : array; + `,c=F=>` + ${F.registerUniform("reduceSize","u32").declareVariables(r,B)} + ${d} + fn DIV_CEIL(a : u32, b : u32) -> u32 { + return ((a - 1u) / b + 1u); + } + ${F.mainStart(a)} + + let outputIndex = global_idx / ${a}; + let offset = outputIndex * uniforms.reduceSize; + + var bestValue = f32(${Fl[I]}); + let Length = uniforms.reduceSize; + for (var k = local_idx; k < Length; k = k + ${a}) { + let candidate = f32(${r.getByOffset("offset + k")}); + bestValue = ${ml[I]}; + } + aBestValues[local_idx] = bestValue; + workgroupBarrier(); + + var reduceSize = min(Length, ${a}u); + for (var currentSize = reduceSize / 2u; reduceSize > 1u; + currentSize = reduceSize / 2u) { + let interval = DIV_CEIL(reduceSize, 2u); + if (local_idx < currentSize) { + let candidate = aBestValues[local_idx + interval]; + bestValue = ${Ml[I]}; + aBestValues[local_idx] = bestValue; + } + reduceSize = interval; + workgroupBarrier(); + } + + if (local_idx == 0u) { + ${B.setByOffset("outputIndex",`${I==="mean"?`${B.type.storage}(bestValue / f32(uniforms.reduceSize))`:`${B.type.storage}(${Sl[I]})`}`)}; + } + }`;return{name:A,shaderCache:{hint:`${g};${a}`,inputDependencies:["type"]},getShaderSource:c,getRunData:()=>({outputs:[{dims:t,dataType:i}],dispatchGroup:{x:s},programUniforms:[{type:12,data:Q}]})}},FI=(A,g,e,I)=>{let i=A.inputs.length===1?e:GB(A.inputs,e),t=i.axes;t.length===0&&!i.noopWithEmptyAxes&&(t=A.inputs[0].dims.map((d,c)=>c));let o=MA.normalizeAxes(t,A.inputs[0].dims.length),C=o,s=A.inputs[0],Q=kl(C,A.inputs[0].dims.length);Q.length>0&&(s=A.compute(aI(A.inputs[0],Q),{inputs:[0],outputs:[-1]})[0],C=Nl(C.length,s.dims.length));let[r,B]=Rl(s.dims,C),a=r;i.keepDims&&(a=Gl(r,o)),A.compute(Ll(g,i.cacheKey,[s],I,A.inputs[0].dataType,a,B),{inputs:[s]})},dD=(A,g)=>{FI(A,"ReduceMeanShared",g,"mean")},hD=(A,g)=>{FI(A,"ReduceL1Shared",g,"l1")},DD=(A,g)=>{FI(A,"ReduceL2Shared",g,"l2")},uD=(A,g)=>{FI(A,"ReduceLogSumExpShared",g,"logSumExp")},wD=(A,g)=>{FI(A,"ReduceMaxShared",g,"max")},pD=(A,g)=>{FI(A,"ReduceMinShared",g,"min")},yD=(A,g)=>{FI(A,"ReduceProdShared",g,"prod")},fD=(A,g)=>{FI(A,"ReduceSumShared",g,"sum")},mD=(A,g)=>{FI(A,"ReduceSumSquareShared",g,"sumSquare")},MD=(A,g)=>{FI(A,"ReduceLogSumShared",g,"logSum")}}),SI,Kl,to,GB,NI,Ul,Jl,bl,xl,Yl,Tl,Hl,Pl,vl,ql,RI,FD,SD,ND,RD,GD,_D,kD,LD,KD,UD,IQ=zA(()=>{Me(),ke(),hg(),Le(),ty(),SI=A=>{if(!A||A.length===0||A.length>2)throw new Error("Reduce op requires 1 or 2 inputs.");if(A.length===2&&A[1].dims.length!==1)throw new Error("Invalid axes input dims.")},Kl=A=>["","",`var value = ${A.getByIndices("input_indices")};`,""],to=(A,g,e,I,i,t,o=!1,C=!1)=>{let s=[],Q=e[0].dims,r=Q.length,B=MA.normalizeAxes(i,r),a=!C&&B.length===0;Q.forEach((F,L)=>{a||B.indexOf(L)>=0?o&&s.push(1):s.push(F)});let d=s.length,c=MA.size(s);return{name:A,shaderCache:g,getShaderSource:F=>{let L=[],u=kA("_A",e[0].dataType,r),h=ne("output",t,d),R=I(u,h,B),w=R[2];for(let y=0,D=0;y=0?(o&&D++,w=`for(var j${y}: u32 = 0; j${y} < ${Q[y]}; j${y}++) { + ${R[2].includes("last_index")?`let last_index = j${y};`:""} + ${u.indicesSet("input_indices",y,`j${y}`)} + ${w} + }`):(L.push(`${u.indicesSet("input_indices",y,h.indicesGet("output_indices",D))};`),D++);return` + + ${F.registerUniform("output_size","u32").declareVariables(u,h)} + + ${F.mainStart()} + ${F.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + var input_indices: ${u.type.indices}; + let output_indices = ${h.offsetToIndices("global_idx")}; + + ${L.join(` +`)} + ${R[0]} // init ops for reduce max/min + ${R[1]} + ${w} + ${R[3]} + ${R.length===4?h.setByOffset("global_idx","value"):R.slice(4).join(` +`)} + }`},getRunData:()=>({outputs:[{dims:s,dataType:t}],dispatchGroup:{x:Math.ceil(c/64)},programUniforms:[{type:12,data:c},...de(Q,s)]})}},GB=(A,g)=>{let e=[];return A[1].dims[0]>0&&A[1].getBigInt64Array().forEach(I=>e.push(Number(I))),Oe({axes:e,keepDims:g.keepDims,noopWithEmptyAxes:g.noopWithEmptyAxes})},NI=(A,g,e,I)=>{let i=A.inputs,t=i.length===1?e:GB(i,e);A.compute(to(g,{hint:t.cacheKey,inputDependencies:["rank"]},[i[0]],t.noopWithEmptyAxes&&t.axes.length===0?Kl:I,t.axes,i[0].dataType,t.keepDims,t.noopWithEmptyAxes),{inputs:[0]})},Ul=(A,g)=>{SI(A.inputs),NI(A,"ReduceLogSum",g,(e,I)=>[`var value = ${I.type.storage}(0);`,"",`value += ${e.getByIndices("input_indices")};`,"value = log(value);"])},Jl=(A,g)=>{SI(A.inputs),NI(A,"ReduceL1",g,(e,I)=>[`var value = ${I.type.storage}(0);`,"",`value += abs(${e.getByIndices("input_indices")});`,""])},bl=(A,g)=>{SI(A.inputs),NI(A,"ReduceL2",g,(e,I)=>[`var t = ${I.type.value}(0); var value = ${I.type.value}(0);`,"",`t = ${e.getByIndices("input_indices")}; value += (t * t);`,"value = sqrt(value);"])},xl=(A,g)=>{SI(A.inputs),NI(A,"ReduceLogSumExp",g,(e,I)=>[`var value = ${I.type.storage}(0);`,"",`value += exp(${e.getByIndices("input_indices")});`,"value = log(value);"])},Yl=(A,g)=>{SI(A.inputs),NI(A,"ReduceMax",g,(e,I,i)=>{let t=[];for(let o=0;o=0||i.length===0)&&t.push(e.indicesSet("input_indices",o,0));return[`${t.join(` +`)}`,`var value = ${e.getByIndices("input_indices")};`,`value = max(value, ${e.getByIndices("input_indices")});`,""]})},Tl=(A,g)=>{SI(A.inputs),NI(A,"ReduceMean",g,(e,I,i)=>{let t=1;for(let o=0;o=0||i.length===0)&&(t*=A.inputs[0].dims[o]);return["var sum = f32(0);","",`sum += f32(${e.getByIndices("input_indices")});`,`let value = ${I.type.value}(sum / ${t});`]})},Hl=(A,g)=>{SI(A.inputs),NI(A,"ReduceMin",g,(e,I,i)=>{let t=[];for(let o=0;o=0||i.length===0)&&t.push(`input_indices[${o}] = 0;`);return[`${t.join(` +`)}`,`var value = ${e.getByIndices("input_indices")};`,`value = min(value, ${e.getByIndices("input_indices")});`,""]})},Pl=(A,g)=>{SI(A.inputs),NI(A,"ReduceProd",g,(e,I)=>[`var value = ${I.type.storage}(1);`,"",`value *= ${e.getByIndices("input_indices")};`,""])},vl=(A,g)=>{SI(A.inputs),NI(A,"ReduceSum",g,(e,I)=>[`var value = ${I.type.storage}(0);`,"",`value += ${e.getByIndices("input_indices")};`,""])},ql=(A,g)=>{SI(A.inputs),NI(A,"ReduceSumSquare",g,(e,I)=>[`var t = ${I.type.value}(0); var value = ${I.type.value}(0);`,"",`t = ${e.getByIndices("input_indices")}; value += t * t;`,""])},RI=(A,g,e)=>{if(g.length===0)return e;let I=1,i=1;for(let t=0;t1024},FD=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?Tl(A,g):dD(A,g)},SD=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?Jl(A,g):hD(A,g)},ND=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?bl(A,g):DD(A,g)},RD=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?xl(A,g):uD(A,g)},GD=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?Yl(A,g):wD(A,g)},_D=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?Hl(A,g):pD(A,g)},kD=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?Pl(A,g):yD(A,g)},LD=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?vl(A,g):fD(A,g)},KD=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?ql(A,g):mD(A,g)},UD=(A,g)=>{RI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?Ul(A,g):MD(A,g)}}),qs,JD,bD,_B,Cy=zA(()=>{Me(),hg(),IQ(),qs=A=>{if(!A||A.length===0||A.length>2)throw new Error("ArgMinMaxOp op requires 1 or 2 inputs.");if(A[0].dataType!==1)throw new Error("Invalid input type.")},JD=(A,g)=>{qs(A.inputs);let e=(I,i,t)=>{let o=[];for(let C=0;C=0||t.length===0)&&o.push(`input_indices[${C}] = 0;`);return[`${o.join(` +`)}`,`var value = ${I.getByIndices("input_indices")}; +var best_index : i32 = 0;`,`if (${I.getByIndices("input_indices")} ${g.selectLastIndex>0?"<=":"<"} value) { + value = ${I.getByIndices("input_indices")}; + best_index = i32(last_index); + }`,"",i.setByOffset("global_idx","best_index")]};A.compute(to("ArgMin",{hint:g.cacheKey,inputDependencies:["rank"]},[A.inputs[0]],e,[g.axis],7,g.keepDims),{inputs:[0]})},bD=(A,g)=>{qs(A.inputs);let e=(I,i,t)=>{let o=[];for(let C=0;C=0||t.length===0)&&o.push(`input_indices[${C}] = 0;`);return[`${o.join(` +`)}`,`var value = ${I.getByIndices("input_indices")}; +var best_index : i32 = 0;`,`if (${I.getByIndices("input_indices")} ${g.selectLastIndex>0?">=":">"} value) { + value = ${I.getByIndices("input_indices")}; + best_index = i32(last_index); + }`,"",i.setByOffset("global_idx","best_index")]};A.compute(to("argMax",{hint:g.cacheKey,inputDependencies:["rank"]},[A.inputs[0]],e,[g.axis],7,g.keepDims),{inputs:[0]})},_B=A=>Oe(A)}),Ol,qC,Wl,jl,Vl,zt,zl,xD,iQ=zA(()=>{Me(),ke(),eQ(),Le(),Ol=(A,g)=>{let e=A[0],I=A[1],i=A[2],t=A[3],o=A[4],C=A[5];if(o&&C)throw new Error("Attention cannot have both past and attention_bias");if(e.dims.length!==3)throw new Error('Input "input" must have 3 dimensions');let s=e.dims[0],Q=e.dims[1],r=e.dims[2];if(i.dims.length!==1)throw new Error('Input "bias" is expected to have 1 dimensions');if(I.dims.length!==2)throw new Error('Input "weights" is expected to have 2 dimensions');if(I.dims[0]!==r)throw new Error("Input 1 dimension 0 should have same length as dimension 2 of input 0");if(i.dims[0]!==I.dims[1])throw new Error('Input "bias" dimension 0 should have same length as dimension 1 of input "weights"');let B=i.dims[0]/3,a=B,d=a;if(g.qkvHiddenSizes.length>0){if(g.qkvHiddenSizes.length!==3)throw new Error("qkv_hidden_sizes attribute should have 3 elements");for(let R of g.qkvHiddenSizes)if(R%g.numHeads!==0)throw new Error("qkv_hidden_sizes should be divisible by num_heads");B=g.qkvHiddenSizes[0],a=g.qkvHiddenSizes[1],d=g.qkvHiddenSizes[2]}let c=Q;if(B!==a)throw new Error("qkv_hidden_sizes first element should be same as the second");if(i.dims[0]!==B+a+d)throw new Error('Input "bias" dimension 0 should have same length as sum of Q/K/V hidden sizes');let F=0;if(o){if(a!==d)throw new Error('Input "past" expect k_hidden_size == v_hidden_size');if(o.dims.length!==5)throw new Error('Input "past" must have 5 dimensions');if(o.dims[0]!==2)throw new Error('Input "past" first dimension must be 2');if(o.dims[1]!==s)throw new Error('Input "past" second dimension must be batch_size');if(o.dims[2]!==g.numHeads)throw new Error('Input "past" third dimension must be num_heads');if(o.dims[4]!==a/g.numHeads)throw new Error('Input "past" fifth dimension must be k_hidden_size / num_heads');g.pastPresentShareBuffer||(F=o.dims[3])}let L=c+F,u=-1,h=0;if(t)throw new Error("Mask not supported");if(o)throw new Error("past is not supported");if(C){if(C.dims.length!==4)throw new Error('Input "attention_bias" must have 4 dimensions');if(C.dims[0]!==s||C.dims[1]!==g.numHeads||C.dims[2]!==Q||C.dims[3]!==L)throw new Error('Expect "attention_bias" shape (batch_size, num_heads, sequence_length, total_sequence_length)')}return{batchSize:s,sequenceLength:Q,pastSequenceLength:F,kvSequenceLength:c,totalSequenceLength:L,maxSequenceLength:u,inputHiddenSize:r,hiddenSize:B,vHiddenSize:d,headSize:Math.floor(B/g.numHeads),vHeadSize:Math.floor(d/g.numHeads),numHeads:g.numHeads,isUnidirectional:!1,pastPresentShareBuffer:!1,maskFilterValue:g.maskFilterValue,maskType:h,scale:g.scale,broadcastResPosBias:!1,passPastInKv:!1,qkvFormat:1}},qC=(A,g,e)=>g&&A?` + let total_sequence_length_input = u32(${g.getByOffset("0")}); + let present_sequence_length = max(total_sequence_length_input, uniforms.past_sequence_length); + let is_subsequent_prompt: bool = sequence_length > 1 && sequence_length != total_sequence_length_input; + let is_first_prompt: bool = is_subsequent_prompt == false && sequence_length == total_sequence_length_input; + total_sequence_length = u32(${A?.getByOffset("batchIdx")}) + 1; + var past_sequence_length: u32 = 0; + if (is_first_prompt == false) { + past_sequence_length = total_sequence_length - sequence_length; + } + `:` + ${e?"let past_sequence_length = uniforms.past_sequence_length":""}; + let present_sequence_length = total_sequence_length; + `,Wl=(A,g,e,I,i,t,o,C)=>{let s=cg(o?1:t),Q=64,r=t/s;r{let h=ne("x",A.dataType,A.dims,s),R=[h],w=o?kA("seq_lens",o.dataType,o.dims):void 0;w&&R.push(w);let y=C?kA("total_sequence_length_input",C.dataType,C.dims):void 0;y&&R.push(y);let D=zg(A.dataType),f=[{name:"batch_size",type:"u32"},{name:"num_heads",type:"u32"},{name:"past_sequence_length",type:"u32"},{name:"sequence_length",type:"u32"},{name:"total_sequence_length",type:"u32"},{name:"elements_per_thread",type:"u32"}];return` + var thread_max: array; + var thread_sum: array; + ${u.registerUniforms(f).declareVariables(...R)} + ${u.mainStart([Q,1,1])} + let batchIdx = workgroup_id.z / uniforms.num_heads; + let headIdx = workgroup_id.z % uniforms.num_heads; + let sequence_length = uniforms.sequence_length; + var total_sequence_length = uniforms.total_sequence_length; + ${qC(w,y,!1)} + let local_offset = local_idx * uniforms.elements_per_thread; + let offset = (global_idx / ${Q}) * uniforms.total_sequence_length + local_offset; + let seq_causal_length = ${o?"u32(past_sequence_length + workgroup_id.y + 1)":"total_sequence_length"}; + var thread_max_vector = ${c}(-3.402823e+38f); + for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) { + thread_max_vector = max(${c}(x[offset + i]), thread_max_vector); + } + thread_max[local_idx] = ${(()=>{switch(s){case 1:return"thread_max_vector";case 2:return"max(thread_max_vector.x, thread_max_vector.y)";case 4:return"max(max(thread_max_vector.x, thread_max_vector.y), max(thread_max_vector.z, thread_max_vector.w))";default:throw new Error(`Unsupported components: ${s}`)}})()}; + workgroupBarrier(); + + var max_value = f32(-3.402823e+38f); + for (var i = 0u; i < ${Q}; i++) { + max_value = max(thread_max[i], max_value); + } + + var sum_vector = ${c}(0); + for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) { + sum_vector += exp(${c}(x[offset + i]) - max_value); + } + thread_sum[local_idx] = ${(()=>{switch(s){case 1:return"sum_vector";case 2:return"sum_vector.x + sum_vector.y";case 4:return"sum_vector.x + sum_vector.y + sum_vector.z + sum_vector.w";default:throw new Error(`Unsupported components: ${s}`)}})()}; + workgroupBarrier(); + + var sum: f32 = 0; + for (var i = 0u; i < ${Q}; i++) { + sum += thread_sum[i]; + } + + if (sum == 0) { + for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) { + x[offset + i] = ${h.type.value}(${D}(1.0) / ${D}(seq_causal_length)); + } + } else { + for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) { + var f32input = ${c}(x[offset + i]); + x[offset + i] = ${h.type.value}(exp(f32input - max_value) / sum); + } + } + ${o?` + for (var total_seq_id: u32 = seq_causal_length; total_seq_id + local_offset < uniforms.total_sequence_length; total_seq_id++) { + x[offset + total_seq_id] = ${h.type.value}(${D}(0)); + }`:""}; + }`};return{name:"AttentionProbsSoftmax",shaderCache:{hint:`${Q};${d};${s}`,inputDependencies:F},getShaderSource:L,getRunData:()=>({outputs:[],dispatchGroup:{x:1,y:i,z:g*e},programUniforms:a})}},jl=(A,g,e,I,i,t,o,C,s)=>{let Q=o+t.kvSequenceLength,r=[t.batchSize,t.numHeads,t.sequenceLength,Q],B=A>1&&I,a=t.kvNumHeads?t.kvNumHeads:t.numHeads,d=B?[t.batchSize,a,Q,t.headSize]:void 0,c=t.nReps?t.nReps:1,F=t.scale===0?1/Math.sqrt(t.headSize):t.scale,L=cg(t.headSize),u=t.headSize/L,h=12,R={x:Math.ceil(Q/h),y:Math.ceil(t.sequenceLength/h),z:t.batchSize*t.numHeads},w=[{type:12,data:t.sequenceLength},{type:12,data:u},{type:12,data:Q},{type:12,data:t.numHeads},{type:12,data:t.headSize},{type:1,data:F},{type:12,data:o},{type:12,data:t.kvSequenceLength},{type:12,data:c}],y=B&&I&&MA.size(I.dims)>0,D=["type","type"];y&&D.push("type"),i&&D.push("type"),C&&D.push("type"),s&&D.push("type");let f=[{dims:r,dataType:g.dataType,gpuDataType:0}];B&&f.push({dims:d,dataType:g.dataType,gpuDataType:0});let G=J=>{let T=kA("q",g.dataType,g.dims,L),X=kA("key",e.dataType,e.dims,L),gA=[T,X];if(y){let DA=kA("past_key",I.dataType,I.dims,L);gA.push(DA)}i&&gA.push(kA("attention_bias",i.dataType,i.dims));let x=C?kA("seq_lens",C.dataType,C.dims):void 0;x&&gA.push(x);let tA=s?kA("total_sequence_length_input",s.dataType,s.dims):void 0;tA&&gA.push(tA);let Z=ne("output",g.dataType,r),IA=[Z];B&&IA.push(ne("present_key",g.dataType,d,L));let oA=zg(1,L),CA=[{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"alpha",type:"f32"},{name:"past_sequence_length",type:"u32"},{name:"kv_sequence_length",type:"u32"},{name:"n_reps",type:"u32"}];return` + const TILE_SIZE = ${h}u; + + var tileQ: array<${T.type.storage}, ${h*h}>; + var tileK: array<${T.type.storage}, ${h*h}>; + ${J.registerUniforms(CA).declareVariables(...gA,...IA)} + ${J.mainStart([h,h,1])} + // x holds the N and y holds the M + let headIdx = workgroup_id.z % uniforms.num_heads; + let kvHeadIdx = ${c===1?"headIdx":"headIdx / uniforms.n_reps"}; + let kv_num_heads = ${c===1?"uniforms.num_heads":"uniforms.num_heads / uniforms.n_reps"}; + let batchIdx = workgroup_id.z / uniforms.num_heads; + let m = workgroup_id.y * TILE_SIZE; + let n = workgroup_id.x * TILE_SIZE; + let sequence_length = uniforms.M; + var total_sequence_length = uniforms.N; + ${qC(x,tA,!0)} + let absKvHeadIdx = batchIdx * kv_num_heads + kvHeadIdx; + let qOffset = workgroup_id.z * uniforms.M * uniforms.K + m * uniforms.K; + ${y&&B?"let pastKeyOffset = absKvHeadIdx * uniforms.past_sequence_length * uniforms.K;":""}; + let kOffset = absKvHeadIdx * uniforms.kv_sequence_length * uniforms.K; + ${B?"let presentKeyOffset = absKvHeadIdx * uniforms.N * uniforms.K;":""} + var value = ${oA}(0); + for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) { + if (global_id.y < uniforms.M && w + local_id.x < uniforms.K) { + tileQ[TILE_SIZE * local_id.y + local_id.x] = q[qOffset + local_id.y * uniforms.K + w + local_id.x]; + } + if (n + local_id.y < uniforms.N && w + local_id.x < uniforms.K) { + var idx = TILE_SIZE * local_id.y + local_id.x; + ${y&&B?` + if (n + local_id.y < past_sequence_length) { + tileK[idx] = past_key[pastKeyOffset + (n + local_id.y) * uniforms.K + w + local_id.x]; + } else if (n + local_id.y - past_sequence_length < uniforms.kv_sequence_length) { + tileK[idx] = key[kOffset + (n + local_id.y - past_sequence_length) * uniforms.K + w + local_id.x]; + }`:` + if (n + local_id.y < uniforms.kv_sequence_length) { + tileK[idx] = key[kOffset + (n + local_id.y) * uniforms.K + w + local_id.x]; + }`} + ${B?`if (n + local_id.y < present_sequence_length) { + present_key[presentKeyOffset + (n + local_id.y) * uniforms.K + w + local_id.x] = tileK[idx]; + }`:""} + } + workgroupBarrier(); + + for (var k: u32 = 0u; k < TILE_SIZE && w+k < uniforms.K; k++) { + value += ${oA}(tileQ[TILE_SIZE * local_id.y + k] * tileK[TILE_SIZE * local_id.x + k]); + } + + workgroupBarrier(); + } + + if (global_id.y < uniforms.M && global_id.x < total_sequence_length) { + let headOffset = workgroup_id.z * uniforms.M * uniforms.N; + let outputIdx = headOffset + global_id.y * uniforms.N + global_id.x; + var sum: f32 = ${(()=>{switch(L){case 1:return"value";case 2:return"value.x + value.y";case 4:return"value.x + value.y + value.z + value.w";default:throw new Error(`Unsupported components: ${L}`)}})()}; + output[outputIdx] = ${Z.type.value} (sum * uniforms.alpha) + ${i?"attention_bias[outputIdx]":"0.0"}; + } + }`};return{name:"AttentionProbs",shaderCache:{hint:`${L};${i!==void 0};${I!==void 0};${A}`,inputDependencies:D},getRunData:()=>({outputs:f,dispatchGroup:R,programUniforms:w}),getShaderSource:G}},Vl=(A,g,e,I,i,t,o=void 0,C=void 0)=>{let s=t+i.kvSequenceLength,Q=i.nReps?i.nReps:1,r=i.vHiddenSize*Q,B=A>1&&I,a=i.kvNumHeads?i.kvNumHeads:i.numHeads,d=B?[i.batchSize,a,s,i.headSize]:void 0,c=[i.batchSize,i.sequenceLength,r],F=12,L={x:Math.ceil(i.vHeadSize/F),y:Math.ceil(i.sequenceLength/F),z:i.batchSize*i.numHeads},u=[{type:12,data:i.sequenceLength},{type:12,data:s},{type:12,data:i.vHeadSize},{type:12,data:i.numHeads},{type:12,data:i.headSize},{type:12,data:r},{type:12,data:t},{type:12,data:i.kvSequenceLength},{type:12,data:Q}],h=B&&I&&MA.size(I.dims)>0,R=["type","type"];h&&R.push("type"),o&&R.push("type"),C&&R.push("type");let w=[{dims:c,dataType:g.dataType,gpuDataType:0}];B&&w.push({dims:d,dataType:g.dataType,gpuDataType:0});let y=D=>{let f=kA("probs",g.dataType,g.dims),G=kA("v",e.dataType,e.dims),J=[f,G];h&&J.push(kA("past_value",I.dataType,I.dims));let T=o?kA("seq_lens",o.dataType,o.dims):void 0;o&&J.push(T);let X=C?kA("total_sequence_length_input",C.dataType,C.dims):void 0;C&&J.push(X);let gA=[ne("output",g.dataType,c)];B&&gA.push(ne("present_value",g.dataType,d));let x=[{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"v_hidden_size",type:"u32"},{name:"past_sequence_length",type:"u32"},{name:"kv_sequence_length",type:"u32"},{name:"n_reps",type:"u32"}];return` + const TILE_SIZE = ${F}u; + var tileQ: array<${f.type.value}, ${F*F}>; + var tileV: array<${f.type.value}, ${F*F}>; + ${D.registerUniforms(x).declareVariables(...J,...gA)} + ${D.mainStart([F,F,1])} + let headIdx = workgroup_id.z % uniforms.num_heads; + let batchIdx = workgroup_id.z / uniforms.num_heads; + let kvHeadIdx = ${Q===1?"headIdx":"headIdx / uniforms.n_reps"}; + let kv_num_heads = ${Q===1?"uniforms.num_heads":"uniforms.num_heads / uniforms.n_reps"}; + let m = global_id.y; + let n = global_id.x; + let sequence_length = uniforms.M; + var total_sequence_length = uniforms.K; + ${qC(T,X,!0)} + let offsetA = workgroup_id.z * uniforms.M * uniforms.K + m * uniforms.K; + let absKvHeadIdx = batchIdx * kv_num_heads + kvHeadIdx; // kvHeadIdx is relative to the batch + ${h&&B?"let pastValueOffset = absKvHeadIdx * uniforms.N * uniforms.past_sequence_length + n;":""}; + let vOffset = absKvHeadIdx * uniforms.N * uniforms.kv_sequence_length + n; + ${B?"let presentValueOffset = absKvHeadIdx * uniforms.N * uniforms.K + n;":""} + var value = ${f.type.storage}(0); + for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) { + if (m < uniforms.M && w + local_id.x < uniforms.K) { + tileQ[TILE_SIZE * local_id.y + local_id.x] = probs[offsetA + w + local_id.x]; + } + if (n < uniforms.N && w + local_id.y < uniforms.K) { + var idx = TILE_SIZE * local_id.y + local_id.x; + ${h&&B?` + if (w + local_id.y < past_sequence_length) { + tileV[idx] = past_value[pastValueOffset + (w + local_id.y) * uniforms.N]; + } else if (w + local_id.y - past_sequence_length < uniforms.kv_sequence_length) { + tileV[idx] = v[vOffset + (w + local_id.y - past_sequence_length) * uniforms.N]; + } + `:` + if (w + local_id.y < uniforms.kv_sequence_length) { + tileV[idx] = v[vOffset + (w + local_id.y) * uniforms.N]; + }`} + ${B?` + if (w + local_id.y < present_sequence_length) { + present_value[presentValueOffset + (w + local_id.y) * uniforms.N] = tileV[idx]; + }`:""} + } + workgroupBarrier(); + for (var k: u32 = 0u; k < TILE_SIZE && w+k < total_sequence_length; k++) { + value += tileQ[TILE_SIZE * local_id.y + k] * tileV[TILE_SIZE * k + local_id.x]; + } + workgroupBarrier(); + } + + // we need to transpose output from BNSH_v to BSND_v + if (m < uniforms.M && n < uniforms.N) { + let outputIdx = batchIdx * uniforms.M * uniforms.v_hidden_size + m * uniforms.v_hidden_size + + headIdx * uniforms.N + n; + output[outputIdx] = value; + } + }`};return{name:"AttentionScore",shaderCache:{hint:`${I!==void 0};${A}`,inputDependencies:R},getRunData:()=>({outputs:w,dispatchGroup:L,programUniforms:u}),getShaderSource:y}},zt=(A,g,e,I,i,t,o,C,s,Q,r=void 0,B=void 0)=>{let a=Math.min(A.outputCount,1+(o?1:0)+(C?1:0)),d=a>1?Q.pastSequenceLength:0,c=d+Q.kvSequenceLength,F=s&&MA.size(s.dims)>0?s:void 0,L=[g,e];a>1&&o&&MA.size(o.dims)>0&&L.push(o),F&&L.push(F),r&&L.push(r),B&&L.push(B);let u=A.compute(jl(a,g,e,o,F,Q,d,r,B),{inputs:L,outputs:a>1?[-1,1]:[-1]})[0];A.compute(Wl(u,Q.batchSize,Q.numHeads,d,Q.sequenceLength,c,r,B),{inputs:r&&B?[u,r,B]:[u],outputs:[]});let h=[u,I];a>1&&C&&MA.size(C.dims)>0&&h.push(C),r&&h.push(r),B&&h.push(B),A.compute(Vl(a,u,I,C,Q,d,r,B),{inputs:h,outputs:a>1?[0,2]:[0]})},zl=(A,g)=>{let e=[g.batchSize,g.numHeads,g.sequenceLength,g.headSize],I=g.sequenceLength,i=g.inputHiddenSize,t=g.headSize,o=12,C={x:Math.ceil(g.headSize/o),y:Math.ceil(g.sequenceLength/o),z:g.batchSize*g.numHeads},s=[A.inputs[0],A.inputs[1],A.inputs[2]],Q=[{type:12,data:I},{type:12,data:i},{type:12,data:t},{type:12,data:g.numHeads},{type:12,data:g.headSize},{type:12,data:g.hiddenSize},{type:12,data:g.hiddenSize+g.hiddenSize+g.vHiddenSize}],r=B=>{let a=ne("output_q",s[0].dataType,e),d=ne("output_k",s[0].dataType,e),c=ne("output_v",s[0].dataType,e),F=kA("input",s[0].dataType,s[0].dims),L=kA("weight",s[1].dataType,s[1].dims),u=kA("bias",s[2].dataType,s[2].dims),h=F.type.storage,R=[{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"hidden_size",type:"u32"},{name:"ldb",type:"u32"}];return` + const TILE_SIZE = ${o}u; + var tileInput: array<${h}, ${o*o}>; + var tileWeightQ: array<${h}, ${o*o}>; + var tileWeightK: array<${h}, ${o*o}>; + var tileWeightV: array<${h}, ${o*o}>; + ${B.registerUniforms(R).declareVariables(F,L,u,a,d,c)} + ${B.mainStart([o,o,1])} + let batchIndex = workgroup_id.z / uniforms.num_heads; + let headNumber = workgroup_id.z % uniforms.num_heads; + let m = global_id.y; + let n = global_id.x; + + let inputOffset = batchIndex * (uniforms.M * uniforms.K) + m * uniforms.K; + let biasOffsetQ = headNumber * uniforms.head_size; + let biasOffsetK = uniforms.hidden_size + biasOffsetQ; + let biasOffsetV = uniforms.hidden_size + biasOffsetK; + + var valueQ = ${h}(0); + var valueK = ${h}(0); + var valueV = ${h}(0); + for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) { + if (m < uniforms.M && w + local_id.x < uniforms.K) { + tileInput[TILE_SIZE * local_id.y + local_id.x] = input[inputOffset + w + local_id.x]; + } + if (n < uniforms.N && w + local_id.y < uniforms.K) { + let offset = n + (w + local_id.y) * uniforms.ldb; + tileWeightQ[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetQ + offset]; + tileWeightK[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetK + offset]; + tileWeightV[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetV + offset]; + } + workgroupBarrier(); + for (var k: u32 = 0u; k({outputs:[{dims:e,dataType:A.inputs[0].dataType,gpuDataType:0},{dims:e,dataType:A.inputs[0].dataType,gpuDataType:0},{dims:e,dataType:A.inputs[0].dataType,gpuDataType:0}],dispatchGroup:C,programUniforms:Q}),getShaderSource:r},{inputs:s,outputs:[-1,-1,-1]})},xD=(A,g)=>{let e=Ol(A.inputs,g),[I,i,t]=zl(A,e);return zt(A,I,i,t,A.inputs[4],void 0,void 0,void 0,A.inputs[5],e)}}),$l,Xl,Zl,YD,oy=zA(()=>{UI(),Me(),ke(),hg(),Le(),$l=(A,g)=>{if(!A||A.length!==5)throw new Error("BatchNormalization requires 5 inputs");let e=(I,i,t)=>{let o=i.length;if(o!==I.length)throw new Error(`${t}: num dimensions != ${o}`);i.forEach((C,s)=>{if(C!==I[s])throw new Error(`${t}: dim[${s}] do not match`)})};if(A[0].dims.length>1){let I=g.format==="NHWC"?g.spatial?A[0].dims.slice(-1):A[0].dims.slice(-1).concat(A[0].dims.slice(1,A[0].dims.length-1)):A[0].dims.slice(1,g.spatial?2:void 0);e(A[1].dims,I,"Invalid input scale"),e(A[2].dims,I,"Invalid input B"),e(A[3].dims,I,"Invalid input mean"),e(A[4].dims,I,"Invalid input var")}else e(A[1].dims,[1],"Invalid input scale"),e(A[2].dims,[1],"Invalid input B"),e(A[3].dims,[1],"Invalid input mean"),e(A[4].dims,[1],"Invalid input var")},Xl=(A,g)=>{let{epsilon:e,spatial:I,format:i}=g,t=A[0].dims,o=I?cg(t[t.length-1]):1,C=i==="NHWC"&&t.length>1?o:1,s=MA.size(t)/o,Q=I,r=Q?t.length:t,B=kA("x",A[0].dataType,A[0].dims,o),a=kA("scale",A[1].dataType,A[1].dims,C),d=kA("bias",A[2].dataType,A[2].dims,C),c=kA("inputMean",A[3].dataType,A[3].dims,C),F=kA("inputVar",A[4].dataType,A[4].dims,C),L=ne("y",A[0].dataType,r,o),u=()=>{let R="";if(I)R=`let cOffset = ${t.length===1?"0u":i==="NHWC"?`outputIndices[${t.length-1}] / ${o}`:"outputIndices[1]"};`;else if(i==="NCHW")R=` + ${L.indicesSet("outputIndices","0","0")} + let cOffset = ${L.indicesToOffset("outputIndices")};`;else{R=`var cIndices = ${a.type.indices}(0); + cIndices[0] = outputIndices[${t.length-1}];`;for(let w=1;w` + const epsilon = ${e}; + ${R.registerUniform("outputSize","u32").declareVariables(B,a,d,c,F,L)} + ${R.mainStart()} + ${R.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + var outputIndices = ${L.offsetToIndices(`global_idx * ${o}`)}; + ${u()} + let scale = ${a.getByOffset("cOffset")}; + let bias = ${d.getByOffset("cOffset")}; + let inputMean = ${c.getByOffset("cOffset")}; + let inputVar = ${F.getByOffset("cOffset")}; + let x = ${B.getByOffset("global_idx")}; + let value = (x - inputMean) * inverseSqrt(inputVar + epsilon) * scale + bias; + ${L.setByOffset("global_idx","value")} + }`;return{name:"BatchNormalization",shaderCache:{hint:`${g.epsilon}_${g.format}_${I}_${o}`,inputDependencies:Q?["rank","type","type","type","type"]:void 0},getShaderSource:h,getRunData:()=>({outputs:[{dims:A[0].dims,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:Q?[{type:12,data:s},...de(t)]:[{type:12,data:s}]})}},Zl=A=>Oe(A),YD=(A,g)=>{let{inputs:e,outputCount:I}=A,i=Zl({...g,outputCount:I});if(sg.webgpu.validateInputContent&&$l(e,i),g.trainingMode)throw new Error("BatchNormalization trainingMode is not supported yet.");A.compute(Xl(e,i))}}),Ac,ec,TD,sy=zA(()=>{ke(),Le(),Ac=A=>{if(A[0].dims.length!==3)throw new Error("input should have 3 dimensions");if(![320,640,1280].includes(A[0].dims[2]))throw new Error("number of channels should be 320, 640 or 1280");if(A[1].dims.length!==1)throw new Error("bias is expected to have 1 dimensions");if(A[0].dims[2]!==A[1].dims[0])throw new Error("last dimension of input and bias are not the same")},ec=A=>{let g=A[0].dims,e=A[0].dims[2],I=MA.size(g)/4,i=A[0].dataType,t=kA("input",i,g,4),o=kA("bias",i,[e],4),C=kA("residual",i,g,4),s=ne("output",i,g,4);return{name:"BiasAdd",getRunData:()=>({outputs:[{dims:g,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(I/64)}}),getShaderSource:Q=>` + const channels = ${e}u / 4; + ${Q.declareVariables(t,o,C,s)} + + ${Q.mainStart()} + ${Q.guardAgainstOutOfBoundsWorkgroupSizes(I)} + let value = ${t.getByOffset("global_idx")} + + ${o.getByOffset("global_idx % channels")} + ${C.getByOffset("global_idx")}; + ${s.setByOffset("global_idx","value")} + }`}},TD=A=>{Ac(A.inputs),A.compute(ec(A.inputs))}}),gc,ve,HD,PD,vD,qD,OD,WD,jD,VD,zD,Ic,$D,XD,ZD,Au,qt,eu,eo,gu,Iu,iu,tu,Cu,ou,su,Bu,Qu,au,ru,Eu,nu,lu,cu,du,Os,hu,kB,LB,Du,uu,wu,ic,tc,pu,tQ=zA(()=>{Me(),ke(),hg(),Le(),gc=(A,g,e,I,i,t,o)=>{let C=Math.ceil(g/4),s="";typeof i=="string"?s=`${i}(a)`:s=i("a");let Q=kA("inputData",e,[C],4),r=ne("outputData",I,[C],4),B=[{name:"vec_size",type:"u32"}];return o&&B.push(...o),` + ${A.registerUniforms(B).declareVariables(Q,r)} + + ${t??""} + + ${A.mainStart()} + ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} + + let a = ${Q.getByOffset("global_idx")}; + ${r.setByOffset("global_idx",s)} + }`},ve=(A,g,e,I,i,t=A.dataType,o,C)=>{let s=[{type:12,data:Math.ceil(MA.size(A.dims)/4)}];return o&&s.push(...o),{name:g,shaderCache:{hint:i,inputDependencies:["type"]},getShaderSource:Q=>gc(Q,MA.size(A.dims),A.dataType,t,e,I,C),getRunData:Q=>({outputs:[{dims:A.dims,dataType:t}],dispatchGroup:{x:Math.ceil(MA.size(Q[0].dims)/64/4)},programUniforms:s})}},HD=A=>{A.compute(ve(A.inputs[0],"Abs","abs"))},PD=A=>{A.compute(ve(A.inputs[0],"Acos","acos"))},vD=A=>{A.compute(ve(A.inputs[0],"Acosh","acosh"))},qD=A=>{A.compute(ve(A.inputs[0],"Asin","asin"))},OD=A=>{A.compute(ve(A.inputs[0],"Asinh","asinh"))},WD=A=>{A.compute(ve(A.inputs[0],"Atan","atan"))},jD=A=>{A.compute(ve(A.inputs[0],"Atanh","atanh"))},VD=A=>Oe(A),zD=(A,g)=>{let e;switch(g.to){case 10:e="vec4";break;case 1:e="vec4";break;case 12:e="vec4";break;case 6:e="vec4";break;case 9:e="vec4";break;default:throw new RangeError(`not supported type (specified in attribute 'to' from 'Cast' operator): ${g.to}`)}A.compute(ve(A.inputs[0],"Cast",e,void 0,g.cacheKey,g.to))},Ic=A=>{let g,e,I=A.length>=2&&A[1].data!==0,i=A.length>=3&&A[2].data!==0;switch(A[0].dataType){case 1:g=I?A[1].getFloat32Array()[0]:-34028234663852886e22,e=i?A[2].getFloat32Array()[0]:34028234663852886e22;break;case 10:g=I?A[1].getUint16Array()[0]:64511,e=i?A[2].getUint16Array()[0]:31743;break;default:throw new Error("Unsupport data type")}return Oe({min:g,max:e})},$D=(A,g)=>{let e=g||Ic(A.inputs),I=zg(A.inputs[0].dataType);A.compute(ve(A.inputs[0],"Clip",i=>`clamp(${i}, vec4<${I}>(uniforms.min), vec4<${I}>(uniforms.max))`,void 0,e.cacheKey,void 0,[{type:A.inputs[0].dataType,data:e.min},{type:A.inputs[0].dataType,data:e.max}],[{name:"min",type:I},{name:"max",type:I}]),{inputs:[0]})},XD=A=>{A.compute(ve(A.inputs[0],"Ceil","ceil"))},ZD=A=>{A.compute(ve(A.inputs[0],"Cos","cos"))},Au=A=>{A.compute(ve(A.inputs[0],"Cosh","cosh"))},qt=A=>Oe(A),eu=(A,g)=>{let e=zg(A.inputs[0].dataType);A.compute(ve(A.inputs[0],"Elu",I=>`elu_vf32(${I})`,` + const elu_alpha_ = ${e}(${g.alpha}); + + fn elu_f32(a: ${e}) -> ${e} { + return select((exp(a) - 1.0) * elu_alpha_, a, a >= 0.0); + } + + fn elu_vf32(v: vec4<${e}>) -> vec4<${e}> { + return vec4(elu_f32(v.x), elu_f32(v.y), elu_f32(v.z), elu_f32(v.w)); + }`,g.cacheKey))},eo=(A="f32")=>` +const r0: ${A} = 0.3275911; +const r1: ${A} = 0.254829592; +const r2: ${A} = -0.284496736; +const r3: ${A} = 1.421413741; +const r4: ${A} = -1.453152027; +const r5: ${A} = 1.061405429; + +fn erf_vf32(v: vec4<${A}>) -> vec4<${A}> { + let absv = abs(v); + let x = 1.0 / (1.0 + r0 * absv); + return sign(v) * (1.0 - ((((r5 * x + r4) * x + r3) * x + r2) * x + r1) * x * exp(-absv * absv)); +}`,gu=A=>{let g=zg(A.inputs[0].dataType);A.compute(ve(A.inputs[0],"Erf",e=>`erf_vf32(${e})`,eo(g)))},Iu=A=>{A.compute(ve(A.inputs[0],"Exp","exp"))},iu=A=>{A.compute(ve(A.inputs[0],"Floor","floor"))},tu=A=>{let g=zg(A.inputs[0].dataType);A.compute(ve(A.inputs[0],"Gelu",e=>`0.5 * ${e} * (1.0 + erf_vf32(${e} * 0.7071067811865475))`,eo(g)))},Cu=(A,g)=>{let e=zg(A.inputs[0].dataType);A.compute(ve(A.inputs[0],"LeakyRelu",I=>`select(leaky_relu_alpha_ * ${I}, ${I}, ${I} >= vec4<${e}>(0.0))`,`const leaky_relu_alpha_ = ${e}(${g.alpha});`,g.cacheKey))},ou=A=>{A.compute(ve(A.inputs[0],"Not",g=>`!${g}`))},su=A=>{A.compute(ve(A.inputs[0],"Neg",g=>`-${g}`))},Bu=A=>{A.compute(ve(A.inputs[0],"Reciprocal",g=>`1.0/${g}`))},Qu=A=>{let g=zg(A.inputs[0].dataType);A.compute(ve(A.inputs[0],"Relu",e=>`select(vec4<${g}>(0.0), ${e}, ${e} > vec4<${g}>(0.0))`))},au=A=>{A.compute(ve(A.inputs[0],"Sigmoid",g=>`(1.0 / (1.0 + exp(-${g})))`))},ru=A=>Oe(A),Eu=(A,g)=>{let e=zg(A.inputs[0].dataType);A.compute(ve(A.inputs[0],"HardSigmoid",I=>`max(vec4<${e}>(0.0), min(vec4<${e}>(1.0), ${g.alpha} * ${I} + vec4<${e}>(${g.beta})))`,void 0,g.cacheKey))},nu=A=>{A.compute(ve(A.inputs[0],"Sin","sin"))},lu=A=>{A.compute(ve(A.inputs[0],"Sinh","sinh"))},cu=A=>{A.compute(ve(A.inputs[0],"Sqrt","sqrt"))},du=A=>{A.compute(ve(A.inputs[0],"Tan","tan"))},Os=A=>`sign(${A}) * (1 - exp(-2 * abs(${A}))) / (1 + exp(-2 * abs(${A})))`,hu=A=>{A.compute(ve(A.inputs[0],"Tanh",Os))},kB=(A="f32")=>` +const fast_gelu_a: ${A} = 0.5; +const fast_gelu_b: ${A} = 0.7978845608028654; +const fast_gelu_c: ${A} = 0.035677408136300125; + +fn tanh_v(v: vec4<${A}>) -> vec4<${A}> { + return ${Os("v")}; +} +`,LB=A=>`(fast_gelu_a + fast_gelu_a * tanh_v(${A} * (fast_gelu_c * ${A} * ${A} + fast_gelu_b))) * ${A}`,Du=A=>{let g=zg(A.inputs[0].dataType);A.compute(ve(A.inputs[0],"FastGelu",LB,kB(g),void 0,A.inputs[0].dataType))},uu=(A,g)=>{let e=zg(A.inputs[0].dataType);return A.compute(ve(A.inputs[0],"ThresholdedRelu",I=>`select(vec4<${e}>(0.0), ${I}, ${I} > thresholded_relu_alpha_)`,`const thresholded_relu_alpha_ = vec4<${e}>(${g.alpha});`,g.cacheKey)),0},wu=A=>{A.compute(ve(A.inputs[0],"Log","log"))},ic=(A,g)=>` +const alpha = vec4<${A}>(${g}); +const one = ${A}(1.0); +const zero = ${A}(0.0); + +fn quick_gelu_impl(x: vec4<${A}>) -> vec4<${A}> { + let v = x *alpha; + var x1 : vec4<${A}>; + for (var i = 0; i < 4; i = i + 1) { + if (v[i] >= zero) { + x1[i] = one / (one + exp(-v[i])); + } else { + x1[i] = one - one / (one + exp(v[i])); + } + } + return x * x1; +} +`,tc=A=>`quick_gelu_impl(${A})`,pu=(A,g)=>{let e=zg(A.inputs[0].dataType);A.compute(ve(A.inputs[0],"QuickGelu",tc,ic(e,g.alpha),g.cacheKey,A.inputs[0].dataType))}}),Cc,oc,yu,By=zA(()=>{ke(),Le(),tQ(),Cc=A=>{if(A[0].dims.length!==3)throw new Error("input should have 3 dimensions");if(![2560,5120,10240].includes(A[0].dims[2]))throw new Error("hidden state should be 2560, 5120 or 10240");if(A[1].dims.length!==1)throw new Error("bias is expected to have 1 dimensions");if(A[0].dims[2]!==A[1].dims[0])throw new Error("last dimension of input and bias are not the same")},oc=A=>{let g=A[0].dims.slice();g[2]=g[2]/2;let e=kA("input",A[0].dataType,A[0].dims,4),I=kA("bias",A[0].dataType,[A[0].dims[2]],4),i=ne("output",A[0].dataType,g,4),t=MA.size(g)/4,o=Yg(A[0].dataType);return{name:"BiasSplitGelu",getRunData:()=>({outputs:[{dims:g,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(t/64)}}),getShaderSource:C=>` + const M_SQRT2 = sqrt(2.0); + const halfChannels = ${A[0].dims[2]/4/2}u; + + ${C.declareVariables(e,I,i)} + + ${eo(o)} + + ${C.mainStart()} + ${C.guardAgainstOutOfBoundsWorkgroupSizes(t)} + let biasIdx = global_idx % halfChannels; + let batchIndex = global_idx / halfChannels; + let inputOffset = biasIdx + batchIndex * halfChannels * 2; + let valueLeft = input[inputOffset] + bias[biasIdx]; + let valueRight = input[inputOffset + halfChannels] + bias[biasIdx + halfChannels]; + let geluRight = valueRight * 0.5 * (erf_vf32(valueRight / M_SQRT2) + 1); + + ${i.setByOffset("global_idx","valueLeft * geluRight")} + }`}},yu=A=>{Cc(A.inputs),A.compute(oc(A.inputs))}}),sc,Bc,GI,fu,mu,Mu,Fu,Su,Nu,Ru,Gu,_u,ku,Qy=zA(()=>{Me(),ke(),Le(),sc=(A,g,e,I,i,t,o,C,s,Q,r,B)=>{let a,d;typeof C=="string"?a=d=(h,R)=>`${C}((${h}),(${R}))`:typeof C=="function"?a=d=C:(a=C.scalar,d=C.vector);let c=ne("outputData",r,I.length,4),F=kA("aData",s,g.length,4),L=kA("bData",Q,e.length,4),u;if(i)if(t){let h=MA.size(g)===1,R=MA.size(e)===1,w=g.length>0&&g[g.length-1]%4===0,y=e.length>0&&e[e.length-1]%4===0;h||R?u=c.setByOffset("global_idx",d(h?`${F.type.value}(${F.getByOffset("0")}.x)`:F.getByOffset("global_idx"),R?`${L.type.value}(${L.getByOffset("0")}.x)`:L.getByOffset("global_idx"))):u=` + let outputIndices = ${c.offsetToIndices("global_idx * 4u")}; + let offsetA = ${F.broadcastedIndicesToOffset("outputIndices",c)}; + let offsetB = ${L.broadcastedIndicesToOffset("outputIndices",c)}; + ${c.setByOffset("global_idx",d(o||w?F.getByOffset("offsetA / 4u"):`${F.type.value}(${F.getByOffset("offsetA / 4u")}[offsetA % 4u])`,o||y?L.getByOffset("offsetB / 4u"):`${L.type.value}(${L.getByOffset("offsetB / 4u")}[offsetB % 4u])`))} + `}else u=c.setByOffset("global_idx",d(F.getByOffset("global_idx"),L.getByOffset("global_idx")));else{if(!t)throw new Error("no necessary to use scalar implementation for element-wise binary op implementation.");let h=(R,w,y="")=>{let D=`aData[indexA${w}][componentA${w}]`,f=`bData[indexB${w}][componentB${w}]`;return` + let outputIndices${w} = ${c.offsetToIndices(`global_idx * 4u + ${w}u`)}; + let offsetA${w} = ${F.broadcastedIndicesToOffset(`outputIndices${w}`,c)}; + let offsetB${w} = ${L.broadcastedIndicesToOffset(`outputIndices${w}`,c)}; + let indexA${w} = offsetA${w} / 4u; + let indexB${w} = offsetB${w} / 4u; + let componentA${w} = offsetA${w} % 4u; + let componentB${w} = offsetB${w} % 4u; + ${R}[${w}] = ${y}(${a(D,f)}); + `};r===9?u=` + var data = vec4(0); + ${h("data",0,"u32")} + ${h("data",1,"u32")} + ${h("data",2,"u32")} + ${h("data",3,"u32")} + outputData[global_idx] = dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(data));`:u=` + ${h("outputData[global_idx]",0)} + ${h("outputData[global_idx]",1)} + ${h("outputData[global_idx]",2)} + ${h("outputData[global_idx]",3)} + `}return` + ${A.registerUniform("vec_size","u32").declareVariables(F,L,c)} + + ${B??""} + + ${A.mainStart()} + ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} + ${u} + }`},Bc=(A,g,e,I,i,t,o=e.dataType)=>{let C=e.dims.map(F=>Number(F)??1),s=I.dims.map(F=>Number(F)??1),Q=!MA.areEqual(C,s),r=C,B=MA.size(C),a=!1,d=!1,c=[Q];if(Q){let F=et.calcShape(C,s,!1);if(!F)throw new Error("Can't perform binary op on the given tensors");r=F.slice(),B=MA.size(r);let L=MA.size(C)===1,u=MA.size(s)===1,h=C.length>0&&C[C.length-1]%4===0,R=s.length>0&&s[s.length-1]%4===0;c.push(L),c.push(u),c.push(h),c.push(R);let w=1;for(let y=1;yF.toString()).join("_"),inputDependencies:["rank","rank"]},getShaderSource:F=>sc(F,C,s,r,a,Q,d,i,e.dataType,I.dataType,o,t),getRunData:()=>({outputs:[{dims:r,dataType:o}],dispatchGroup:{x:Math.ceil(B/64/4)},programUniforms:[{type:12,data:Math.ceil(MA.size(r)/4)},...de(C,s,r)]})}},GI=(A,g,e,I,i,t)=>{A.compute(Bc(g,i??"",A.inputs[0],A.inputs[1],e,I,t))},fu=A=>{GI(A,"Add",(g,e)=>`${g}+${e}`)},mu=A=>{GI(A,"Div",(g,e)=>`${g}/${e}`)},Mu=A=>{GI(A,"Equal",{scalar:(g,e)=>`u32(${g}==${e})`,vector:(g,e)=>`vec4(${g}==${e})`},void 0,void 0,9)},Fu=A=>{GI(A,"Mul",(g,e)=>`${g}*${e}`)},Su=A=>{let g=kA("input",A.inputs[0].dataType,A.inputs[0].dims).type.value;GI(A,"Pow",{scalar:(e,I)=>`pow_custom(${e},${I})`,vector:(e,I)=>`pow_vector_custom(${e},${I})`},` + fn pow_custom(a : ${g}, b : ${g}) -> ${g} { + if (b == ${g}(0.0)) { + return ${g}(1.0); + } else if (a < ${g}(0.0) && f32(b) != floor(f32(b))) { + return ${g}(pow(f32(a), f32(b))); // NaN + } + return select(sign(a), ${g}(1.0), round(f32(abs(b) % ${g}(2.0))) != 1.0) * ${g}(${g==="i32"?"round":""}(pow(f32(abs(a)), f32(b)))); + } + fn pow_vector_custom(a : vec4<${g}>, b : vec4<${g}>) -> vec4<${g}> { + // TODO: implement vectorized pow + return vec4<${g}>(pow_custom(a.x, b.x), pow_custom(a.y, b.y), pow_custom(a.z, b.z), pow_custom(a.w, b.w)); + } + `)},Nu=A=>{GI(A,"Sub",(g,e)=>`${g}-${e}`)},Ru=A=>{GI(A,"Greater",{scalar:(g,e)=>`u32(${g}>${e})`,vector:(g,e)=>`vec4(${g}>${e})`},void 0,void 0,9)},Gu=A=>{GI(A,"Less",{scalar:(g,e)=>`u32(${g}<${e})`,vector:(g,e)=>`vec4(${g}<${e})`},void 0,void 0,9)},_u=A=>{GI(A,"GreaterOrEqual",{scalar:(g,e)=>`u32(${g}>=${e})`,vector:(g,e)=>`vec4(${g}>=${e})`},void 0,void 0,9)},ku=A=>{GI(A,"LessOrEqual",{scalar:(g,e)=>`u32(${g}<=${e})`,vector:(g,e)=>`vec4(${g}<=${e})`},void 0,void 0,9)}}),Qc,ac,rc,Ec,Lu,Ku,ay=zA(()=>{Me(),ke(),hg(),Le(),Qc=(A,g)=>{if(!A||A.length<1)throw new Error("too few inputs");let e=0,I=A[e],i=I.dataType,t=I.dims.length;A.forEach((o,C)=>{if(C!==e){if(o.dataType!==i)throw new Error("input tensors should be one type");if(o.dims.length!==t)throw new Error("input tensors should have the same shape");o.dims.forEach((s,Q)=>{if(Q!==g&&s!==I.dims[Q])throw new Error("non concat dimensions must match")})}})},ac=(A,g)=>` + fn calculateInputIndex(index: u32) -> u32 { + let sizeInConcatAxis = array(${g}); + for (var i: u32 = 0u; i < ${A}; i += 1u ) { + if (index < sizeInConcatAxis[i]) { + return i; + } + } + return ${A}u; + }`,rc=(A,g)=>{let e=A.length,I=[];for(let i=0;i{let i=MA.size(e),t=new Array(A.length),o=new Array(A.length),C=0,s=[],Q=[],r=[{type:12,data:i}];for(let F=0;F`uniforms.sizeInConcatAxis${F}`).join(","),c=F=>` + + ${(()=>{F.registerUniform("outputSize","u32");for(let L=0;L(${d}); + ${a} -= sizeInConcatAxis[inputIndex - 1u]; + } + + ${rc(o,B)} + }`;return{name:"Concat",shaderCache:{hint:`${g}`,inputDependencies:s},getRunData:()=>({outputs:[{dims:e,dataType:I}],dispatchGroup:{x:Math.ceil(i/64)},programUniforms:r}),getShaderSource:c}},Lu=(A,g)=>{let e=A.inputs,I=e[0].dims,i=MA.normalizeAxis(g.axis,I.length);Qc(e,i);let t=I.slice();t[i]=e.reduce((C,s)=>C+(s.dims.length>i?s.dims[i]:0),0);let o=e.filter(C=>MA.size(C.dims)>0);A.compute(Ec(o,i,t,e[0].dataType),{inputs:o})},Ku=A=>Oe({axis:A.axis})}),wi,pi,yi,CQ,mi=zA(()=>{Me(),ke(),wi=(A,g,e="f32")=>{switch(A.activation){case"Relu":return`value = max(value, ${g}(0.0));`;case"Sigmoid":return`value = (${g}(1.0) / (${g}(1.0) + exp(-value)));`;case"Clip":return`value = clamp(value, ${g}(${e}(uniforms.clip_min)), ${g}(${e}(uniforms.clip_max)));`;case"HardSigmoid":return`value = max(${g}(0.0), min(${g}(1.0), ${e}(uniforms.alpha) * value + ${e}(uniforms.beta)));`;case"LeakyRelu":return`value = select(${e}(uniforms.alpha) * value, value, value >= ${g}(0.0));`;case"Tanh":return`let e2x = exp(-2.0 * abs(value)); + value = sign(value) * (1.0 - e2x) / (1.0 + e2x); + `;case"":return"";default:throw new Error(`Unsupported activation ${A.activation}`)}},pi=(A,g)=>{A.activation==="Clip"?g.push({type:1,data:A.clipMax},{type:1,data:A.clipMin}):A.activation==="HardSigmoid"?g.push({type:1,data:A.alpha},{type:1,data:A.beta}):A.activation==="LeakyRelu"&&g.push({type:1,data:A.alpha})},yi=(A,g)=>{A.activation==="Clip"?g.push({name:"clip_max",type:"f32"},{name:"clip_min",type:"f32"}):A.activation==="HardSigmoid"?g.push({name:"alpha",type:"f32"},{name:"beta",type:"f32"}):A.activation==="LeakyRelu"&&g.push({name:"alpha",type:"f32"})},CQ=A=>{let g=A?.activation||"";if(g==="HardSigmoid"){let[e,I]=A?.activation_params||[.2,.5];return{activation:g,alpha:e,beta:I}}else if(g==="Clip"){let[e,I]=A?.activation_params||[oD,sD];return{activation:g,clipMax:I,clipMin:e}}else if(g==="LeakyRelu"){let[e]=A?.activation_params||[.01];return{activation:g,alpha:e}}return{activation:g}}}),Og,Uu,oQ=zA(()=>{Og=(A,g)=>{switch(A){case 1:return g;case 2:return`vec2<${g}>`;case 3:return`vec3<${g}>`;case 4:return`vec4<${g}>`;default:throw new Error(`${A}-component is not supported.`)}},Uu=A=>` + ${A?"value = value + getBiasByOutputCoords(coords);":""} + `}),Ju,ry=zA(()=>{Ju=A=>` +fn getIndexFromCoords4D(coords : vec4, shape : vec4) -> i32 { + return dot(coords, vec4( + shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1)); +} +fn getOutputIndexFromCoords(coords : vec4) -> i32 { + return dot(coords, vec4( + i32(${A}.x), i32(${A}.y), i32(${A}.z), 1)); +} +`}),Wt,sQ,BQ=zA(()=>{Me(),ke(),Le(),mi(),Wt=(A,g,e,I,i)=>{let t=I-e;return` + ${Array.from({length:e}).map((o,C)=>` + if (${ce(g.shape,C,g.rank)} != 1) { + ${g.indicesSet(A,C,ce(i,C+t,I))} + } else { + ${g.indicesSet(A,C,0)} + }`).join("")} +`},sQ=(A,g,e,I,i=!1,t)=>{let o=A[0].dims,C=A[1].dims,s=o[o.length-2],Q=C[C.length-1],r=o[o.length-1],B=cg(Q),a=cg(r),d=cg(s),c=MA.size(e)/B/d,F=A.length>2,L=I?I.slice(0,-2):e.slice(0,-2),u=[MA.size(L),s,Q],h=[{type:12,data:c},{type:12,data:s},{type:12,data:Q},{type:12,data:r}];pi(g,h),h.push(...de(L,o,C)),F&&h.push(...de(A[2].dims)),h.push(...de(u));let R=w=>{let y=gQ("batch_dims",A[0].dataType,L.length),D=kA("a",A[0].dataType,o.length,a),f=kA("b",A[1].dataType,C.length,B),G=ne("output",A[0].dataType,u.length,B),J=Yg(G.type.tensor),T=wi(g,G.type.value,J),X=[D,f],gA="";if(F){let Z=i?B:1;X.push(kA("bias",A[2].dataType,A[2].dims.length,Z)),gA=`${i?`value += bias[col / ${Z}];`:`value += ${G.type.value}(bias[row + i]);`}`}let x=[{name:"output_size",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"}];yi(g,x);let tA=()=>{let Z=`var a_data: ${D.type.value};`;for(let IA=0;IA; + for (var k: u32 = 0u; k < uniforms.K; k = k + ${a}) { + ${tA()} + } + for (var i = 0u; i < ${d}u; i++) { + var value = values[i]; + ${gA} + ${T} + let cur_indices = ${G.type.indices}(batch, row + i, col); + let offset = ${G.indicesToOffset("cur_indices")}; + ${G.setByOffset(`offset / ${B}`,"value")}; + } + } + `};return{name:"MatMulNaive",shaderCache:{hint:`${g.activation};${B};${a};${d};${i}`,inputDependencies:F?["rank","rank","rank"]:["rank","rank"]},getRunData:()=>({outputs:[{dims:t?t(e):e,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(c/64)},programUniforms:h}),getShaderSource:R}}}),nc,lc,KB,Ws,cc,UB,dc,Co,QQ=zA(()=>{Me(),ke(),Le(),mi(),BQ(),oQ(),nc=(A,g)=>A?` + mm_Asub[inputRow][inputCol] = mm_readA(batch, + kStart + inputRow, + globalRowStart / innerElementSize + inputCol${g?", batchIndices":""}); + `:` + mm_Asub[inputRow][inputCol] = mm_readA(batch, + globalRow + innerRow, + kStart / innerElementSize + inputCol${g?", batchIndices":""}); + `,lc=(A,g)=>A?` + let ACached0 = mm_Asub[k * innerElementSize][localRow]; + let ACached1 = mm_Asub[k * innerElementSize + 1][localRow]; + let ACached2 = mm_Asub[k * innerElementSize + 2][localRow]; + ${g===3?"":"let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];"} + for (var i = 0; i < rowPerThread; i = i + 1) { + acc[i] = BCached0 * ACached0[i] + acc[i]; + acc[i] = BCached1 * ACached1[i] + acc[i]; + acc[i] = BCached2 * ACached2[i] + acc[i]; + ${g===3?"":"acc[i] = BCached3 * ACached3[i] + acc[i];"} + }`:` + for (var i = 0; i < rowPerThread; i = i + 1) { + let ACached = mm_Asub[tileRow + i][k]; + acc[i] = BCached0 * ACached.x + acc[i]; + acc[i] = BCached1 * ACached.y + acc[i]; + acc[i] = BCached2 * ACached.z + acc[i]; + ${g===3?"":"acc[i] = BCached3 * ACached.w + acc[i];"} + }`,KB=(A,g,e="f32",I,i=!1,t=32,o=!1,C=32)=>{let s=g[1]*A[1],Q=g[0]*A[0],r=i?s:t,B=i?t:s,a=r/g[0],d=t/g[1];if(!((i&&a===4&&A[1]===4||!i&&(a===3||a===4))&&r%g[0]===0&&t%g[1]===0&&A[0]===4))throw new Error(`If transposeA ${i} is true, innerElementSize ${a} and workPerThread[1] ${A[1]} must be 4. + Otherwise, innerElementSize ${a} must be 3 or 4. + tileAWidth ${r} must be divisible by workgroupSize[0]${g[0]}. tileInner ${t} must be divisible by workgroupSize[1] ${g[1]}. colPerThread ${A[0]} must be 4.`);return` +var mm_Asub: array, ${r/a}>, ${B}>; +var mm_Bsub: array, ${Q/A[0]}>, ${t}>; + +const rowPerThread = ${A[1]}; +const colPerThread = ${A[0]}; +const innerElementSize = ${a}; +const tileInner = ${t}; + +@compute @workgroup_size(${g[0]}, ${g[1]}, ${g[2]}) +fn main(@builtin(local_invocation_id) localId : vec3, + @builtin(global_invocation_id) globalId : vec3, + @builtin(workgroup_id) workgroupId : vec3) { + let localRow = i32(localId.y); + let tileRow = localRow * rowPerThread; + let tileCol = i32(localId.x); + + let globalRow =i32(globalId.y) * rowPerThread; + let globalCol = i32(globalId.x); + let batch = ${o?"0":"i32(globalId.z)"}; + ${I?`let batchIndices = ${I.offsetToIndices("u32(batch)")};`:""} + let globalRowStart = i32(workgroupId.y) * ${s}; + + let num_tiles = ${o?`${Math.ceil(C/t)}`:"(uniforms.dim_inner - 1) / tileInner + 1"}; + var kStart = ${o?`i32(globalId.z) * ${C}`:"0"}; + + var acc: array, rowPerThread>; + + // Loop over shared dimension. + let tileRowB = localRow * ${d}; + for (var t = 0; t < num_tiles; t = t + 1) { + // Load one tile of A into local memory. + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + let inputRow = tileRow + innerRow; + let inputCol = tileCol; + ${nc(i,I)} + } + + // Load one tile of B into local memory. + for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) { + let inputRow = tileRowB + innerRow; + let inputCol = tileCol; + mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol${I?", batchIndices":""}); + } + kStart = kStart + tileInner; + workgroupBarrier(); + + // Compute acc values for a single thread. + for (var k = 0; k < tileInner / innerElementSize; k = k + 1) { + let BCached0 = mm_Bsub[k * innerElementSize][tileCol]; + let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol]; + let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol]; + ${a===3?"":"let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];"} + + ${lc(i,a)} + } + + workgroupBarrier(); + } + + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); + } +}`},Ws=(A,g)=>A?` + mm_Asub[inputRow][inputCol] = mm_readA(batch, + kStart + inputRow, + globalRowStart + inputCol${g?", batchIndices":""}); + `:` + mm_Asub[inputRow][inputCol] = mm_readA(batch, + globalRowStart + inputRow, + kStart + inputCol${g?", batchIndices":""}); + `,cc=A=>A?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];",UB=(A,g,e="f32",I,i=!1,t=32,o=!1,C=32,s=!1)=>{let Q=A[1]*g[1],r=A[0]*g[0],B=i?Q:t,a=i?t:Q;if(!(a%g[1]===0&&B%g[0]===0&&t%g[1]===0))throw new Error(`tileAHight ${a} must be divisible by workgroupSize[1]${g[1]}, tileAWidth ${B} must be divisible by workgroupSize[0]${g[0]}, tileInner ${t} must be divisible by workgroupSize[1]${g[1]}`);let d=a/g[1],c=B/g[0],F=t/g[1],L=s?` + let localRow = i32(localId.y); + let localCol = i32(localId.x); + let globalRowStart = i32(workgroupId.y) * ${Q}; + let globalColStart = i32(workgroupId.x) * ${r}; + + // Loop over shared dimension. + for (var t = 0; t < num_tiles; t = t + 1) { + // Load one tile of A into local memory. + for (var inputRow = localRow; inputRow < ${a}; inputRow = inputRow + ${g[1]}) { + for (var inputCol = localCol; inputCol < ${B}; inputCol = inputCol + ${g[0]}) { + ${Ws(i,I)} + } + } + // Load one tile of B into local memory. + for (var inputRow = localRow; inputRow < ${t}; inputRow = inputRow + ${g[1]}) { + for (var inputCol = localCol; inputCol < ${r}; inputCol = inputCol + ${g[0]}) { + mm_Bsub[inputRow][inputCol] = mm_readB(batch, + kStart + inputRow, + globalColStart + inputCol${I?", batchIndices":""}); + } + } + kStart = kStart + tileInner; + workgroupBarrier(); + + // Compute acc values for a single thread. + var BCached : array<${e}, colPerThread>; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { + BCached[inner] = mm_Bsub[k][localCol + inner * ${g[0]}]; + } + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + let ACached = ${i?`mm_Asub[k][localRow + innerRow * ${g[1]}];`:`mm_Asub[localRow + innerRow * ${g[1]}][k];`} + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + acc[innerRow][innerCol] = acc[innerRow][innerCol] + + ACached * BCached[innerCol]; + } + } + } + workgroupBarrier(); + } + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + let gRow = globalRowStart + localRow + innerRow * ${g[1]}; + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + let gCol = globalColStart + localCol + innerCol * ${g[0]}; + mm_write(batch, gRow, gCol, acc[innerRow][innerCol]); + } + } + `:` +let tileRow = i32(localId.y) * rowPerThread; +let tileCol = i32(localId.x) * colPerThread; + +let globalRow = i32(globalId.y) * rowPerThread; +let globalCol = i32(globalId.x) * colPerThread; +let globalRowStart = i32(workgroupId.y) * ${Q}; + +let tileRowA = i32(localId.y) * ${d}; +let tileColA = i32(localId.x) * ${c}; +let tileRowB = i32(localId.y) * ${F}; +// Loop over shared dimension. +for (var t = 0; t < num_tiles; t = t + 1) { + // Load one tile of A into local memory. + for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < ${c}; innerCol = innerCol + 1) { + let inputRow = tileRowA + innerRow; + let inputCol = tileColA + innerCol; + ${Ws(i,I)} + } + } + + // Load one tile of B into local memory. + for (var innerRow = 0; innerRow < ${F}; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + let inputRow = tileRowB + innerRow; + let inputCol = tileCol + innerCol; + mm_Bsub[inputRow][inputCol] = mm_readB(batch, + kStart + inputRow, + globalCol + innerCol${I?", batchIndices":""}); + } + } + kStart = kStart + tileInner; + workgroupBarrier(); + + // Compute acc values for a single thread. + var BCached : array<${e}, colPerThread>; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { + BCached[inner] = mm_Bsub[k][tileCol + inner]; + } + + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + ${cc(i)} + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; + } + } + } + + workgroupBarrier(); +} + +for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + mm_write(batch, globalRow + innerRow, globalCol + innerCol, + acc[innerRow][innerCol]); + } +} +`;return` + var mm_Asub : array, ${a}>; + var mm_Bsub : array, ${t}>; + const rowPerThread = ${A[1]}; + const colPerThread = ${A[0]}; + const tileInner = ${t}; + +@compute @workgroup_size(${g[0]}, ${g[1]}, ${g[2]}) +fn main(@builtin(local_invocation_id) localId : vec3, + @builtin(global_invocation_id) globalId : vec3, + @builtin(workgroup_id) workgroupId : vec3) { + let batch = ${o?"0":"i32(globalId.z)"}; + ${I?`let batchIndices = ${I.offsetToIndices("u32(batch)")};`:""} + let num_tiles = ${o?`${Math.ceil(C/t)}`:"(uniforms.dim_inner - 1) / tileInner + 1"}; + var kStart = ${o?`i32(globalId.z) * ${C}`:"0"}; + + var acc : array, rowPerThread>; + ${L} + } +`},dc=(A,g,e,I,i=!1)=>{let[t,o,C,s]=I,Q=Yg(I[0].type.tensor);return` + fn mm_readA(batch: i32, row: i32, colIn: i32, batchIndices: ${t.type.indices}) -> ${Og(A,Q)} { + var value = ${Og(A,Q)}(0.0); + let col = colIn * ${A}; + if(row < uniforms.dim_a_outer && col < uniforms.dim_inner) + { + var aIndices: ${o.type.indices}; + ${Wt("aIndices",o,o.rank-2,t.rank,"batchIndices")} + ${o.indicesSet("aIndices",o.rank-2,"u32(row)")} + ${o.indicesSet("aIndices",o.rank-1,"u32(colIn)")} + value = ${o.getByIndices("aIndices")}; + } + return value; + } + + fn mm_readB(batch: i32, row: i32, colIn: i32, batchIndices: ${t.type.indices}) -> ${Og(A,Q)} { + var value = ${Og(A,Q)}(0.0); + let col = colIn * ${A}; + if(row < uniforms.dim_inner && col < uniforms.dim_b_outer) + { + var bIndices: ${C.type.indices}; + ${Wt("bIndices",C,C.rank-2,t.rank,"batchIndices")} + ${C.indicesSet("bIndices",C.rank-2,"u32(row)")} + ${C.indicesSet("bIndices",C.rank-1,"u32(colIn)")} + value = ${C.getByIndices("bIndices")}; + } + return value; + } + + fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${Og(A,Q)}) { + let col = colIn * ${A}; + if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) { + var value = valueIn; + let coords = vec3(batch, row, colIn); + ${g?`value = value + ${i?"bias[colIn]":`${Og(A,Q)}(bias[row])`};`:""} + ${e} + ${s.setByIndices("vec3(coords)","value")} + } + } + `},Co=(A,g,e,I,i=!1,t)=>{let o=A[0].dims,C=A[1].dims,s=o.slice(0,-2),Q=C.slice(0,-2),r=I?I.slice(0,-2):e.slice(0,-2),B=MA.size(r),a=o[o.length-2],d=o[o.length-1],c=C[C.length-1],F=d%4===0&&c%4===0,L=a<=8?[4,1,1]:[4,4,1],u=[8,8,1],h=[Math.ceil(c/u[0]/L[0]),Math.ceil(a/u[1]/L[1]),Math.ceil(B/u[2]/L[2])],R=F?4:1,w=[...s,a,d/R],y=w.length,D=[...Q,d,c/R],f=D.length,G=[B,a,c/R],J=[{type:6,data:a},{type:6,data:c},{type:6,data:d}];pi(g,J),J.push(...de(r,w,D));let T=["rank","rank"],X=A.length>2;X&&(J.push(...de(A[2].dims)),T.push("rank")),J.push(...de(G));let gA=x=>{let tA=r.length,Z=gQ("batchDims",A[0].dataType,tA,1),IA=Yg(A[0].dataType),oA=kA("a",A[0].dataType,y,R),CA=kA("b",A[1].dataType,f,R),DA=ne("result",A[0].dataType,G.length,R),cA=[oA,CA];if(X){let EA=i?R:1;cA.push(kA("bias",A[2].dataType,A[2].dims.length,EA))}let q=[{name:"dim_a_outer",type:"i32"},{name:"dim_b_outer",type:"i32"},{name:"dim_inner",type:"i32"}];yi(g,q);let U=Yg(DA.type.tensor),z=wi(g,DA.type.value,U),H=dc(R,X,z,[Z,oA,CA,DA],i);return` + ${x.registerUniforms(q).registerInternalVariables(Z).declareVariables(...cA,DA)} + ${H} + ${F?KB(L,u,IA,Z):UB(L,u,IA,Z)} + `};return{name:"MatMul",shaderCache:{hint:`${L};${g.activation};${F};${i}`,inputDependencies:T},getRunData:()=>({outputs:[{dims:t?t(e):e,dataType:A[0].dataType}],dispatchGroup:{x:h[0],y:h[1],z:h[2]},programUniforms:J}),getShaderSource:gA}}}),hc,bu,Ey=zA(()=>{Me(),qI(),Le(),mi(),oQ(),ry(),QQ(),hc=(A,g,e,I,i=!1,t,o=4,C=4,s=4,Q="f32")=>{let r=J=>{switch(J){case 1:return"resData = x[xIndex];";case 3:return`resData = vec3<${Q}>(x[xIndex], x[xIndex + 1], x[xIndex + 2]);`;case 4:return"resData = x[xIndex / 4];";default:throw new Error(`innerElementSize ${J} is not supported.`)}},B=J=>{switch(J){case 1:return"return w[row * i32(uniforms.w_shape[3]) + colIn];";case 4:return"return w[row * i32(uniforms.w_shape[3]) / 4 + colIn];";default:throw new Error(`innerElementSize ${J} is not supported.`)}},a=A?` + let coord = vec4(batch, xRow, xCol, xCh); + `:` + let coord = vec4(batch, xCh, xRow, xCol); + `,d=A?` + let coords = vec4( + batch, + row / outWidth, + row % outWidth, + col); + `:` + let coords = vec4( + batch, + row, + col / outWidth, + col % outWidth); + `,c=A?"i32(uniforms.x_shape[1])":"i32(uniforms.x_shape[2])",F=A?"i32(uniforms.x_shape[2])":"i32(uniforms.x_shape[3])",L=A?"row":"col",u=A?"col":"row",h=` + let inChannels = i32(uniforms.w_shape[2]); + let outWidth = ${A?"i32(uniforms.result_shape[2])":"i32(uniforms.result_shape[3])"}; + let outRow = ${L} / outWidth; + let outCol = ${L} % outWidth; + + let WRow = ${u} / (i32(uniforms.w_shape[1]) * inChannels); + let WCol = ${u} / inChannels % i32(uniforms.w_shape[1]); + let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0]; + let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1]; + let xCh = ${u} % inChannels; + var resData = ${Og(o,Q)}(0.0); + // The bounds checking is always needed since we use it to pad zero for + // the 'same' padding type. + if (xRow >= 0 && xRow < ${c} && xCol >= 0 && xCol < ${F}) { + ${a} + let xIndex = getIndexFromCoords4D(coord, vec4(uniforms.x_shape)); + ${r(o)} + } + return resData;`,R=A?g&&I?` + let col = colIn * ${o}; + ${h}`:` + let col = colIn * ${o}; + if (row < uniforms.dim_a_outer && col < uniforms.dim_inner) { + ${h} + } + return ${Og(o,Q)}(0.0);`:I&&e?` + let col = colIn * ${o}; + ${h}`:` + let col = colIn * ${o}; + if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) { + ${h} + } + return ${Og(o,Q)}(0.0);`,w=A?I&&e?B(C):` + let col = colIn * ${C}; + if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) { + ${B(C)} + } + return ${Og(C,Q)}(0.0);`:` + let col = colIn * ${C}; + if (row < uniforms.dim_inner && col < uniforms.dim_a_outer) { + ${B(C)} + } + return ${Og(C,Q)}(0.0);`,y=Og(s,Q),D=Og(A?o:C,Q),f=Og(A?C:o,Q),G=wi(t,y,Q);return` + fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${D} { + ${A?R:w} + } + + fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${f} { + ${A?w:R} + } + + fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${y}) { + let col = colIn * ${s}; + if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) + { + var value = valueIn; + let outWidth = ${A?"i32(uniforms.result_shape[2])":"i32(uniforms.result_shape[3])"}; + ${d} + ${Uu(i)} + ${G} + setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); + } + }`},bu=(A,g,e,I,i,t,o,C,s)=>{let Q=g.format==="NHWC",r=Q?A[0].dims[3]:A[0].dims[1],B=e[0],a=Q?e[2]:e[3],d=Q?e[1]:e[2],c=Q?e[3]:e[1],F=Q&&(r%4===0||r%3===0)&&c%4===0,L=Q?c:a*d,u=Q?a*d:c,h=[8,8,1],R=I<=8?[4,1,1]:[4,4,1],w=[Math.ceil(L/h[0]/R[0]),Math.ceil(u/h[1]/R[1]),Math.ceil(B/h[2]/R[2])];Te("verbose",()=>`[conv2d_mm_webgpu] dispatch = ${w}`);let y=F?Q&&r%4!==0?3:4:1,D=h[1]*R[1],f=h[0]*R[0],G=Math.max(h[0]*y,h[1]),J=I%D===0,T=i%f===0,X=t%G===0,gA=F?[y,4,4]:[1,1,1],x=[{type:6,data:I},{type:6,data:i},{type:6,data:t},{type:6,data:[g.pads[0],g.pads[1]]},{type:6,data:g.strides},{type:6,data:g.dilations}];pi(g,x),x.push(...de(A[0].dims,A[1].dims));let tA=["rank","rank"];o&&(x.push(...de(A[2].dims)),tA.push("rank")),x.push(...de(e));let Z=IA=>{let oA=[{name:"dim_a_outer",type:"i32"},{name:"dim_b_outer",type:"i32"},{name:"dim_inner",type:"i32"},{name:"pad",type:"i32",length:2},{name:"stride",type:"i32",length:2},{name:"dilation",type:"i32",length:2}];yi(g,oA);let CA=F?4:1,DA=Yg(A[0].dataType),cA=` + fn setOutputAtIndex(flatIndex : i32, value : ${F?`vec4<${DA}>`:DA}) { + result[flatIndex] = ${F?`vec4<${DA}>`:DA}(value); + } + fn setOutputAtCoords(d0 : i32, d1 : i32, d2 : i32, d3 : i32, value : ${F?`vec4<${DA}>`:DA}) { + let flatIndex = getOutputIndexFromCoords(vec4(d0, d1, d2, d3)); + setOutputAtIndex(flatIndex ${F?"/ 4":""}, value); + }`,q=kA("x",A[0].dataType,A[0].dims.length,y===3?1:y),U=kA("w",A[1].dataType,A[1].dims.length,CA),z=[q,U],H=ne("result",A[0].dataType,e.length,CA);if(o){let EA=kA("bias",A[2].dataType,A[2].dims.length,CA);z.push(EA),cA+=` + fn getBiasByOutputCoords(coords : vec4) -> ${F?`vec4<${DA}>`:DA} { + return bias[coords.${Q?"w":"y"}${F?"/ 4":""}]; + }`}return` + ${Ju("uniforms.result_strides")} + //struct Uniforms { xShape : vec4, wShape : vec4, outShape : vec4, + // outShapeStrides: vec3, filterDims : vec2, pad : vec2, stride : vec2, + // dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32 }; + ${IA.registerUniforms(oA).declareVariables(...z,H)} + ${cA} + ${hc(Q,J,T,X,o,g,gA[0],gA[1],gA[2],DA)} + ${F?KB(R,h,DA,void 0,!Q,G):UB(R,h,DA,void 0,!Q,G,!1,void 0,C)}`};return{name:"Conv2DMatMul",shaderCache:{hint:`${g.cacheKey};${y};${F};${J};${T};${X};${D};${f};${G}`,inputDependencies:tA},getRunData:()=>({outputs:[{dims:s?s(e):e,dataType:A[0].dataType}],dispatchGroup:{x:w[0],y:w[1],z:w[2]},programUniforms:x}),getShaderSource:Z}}}),Dc,js,Jt,uc,Vs,wc,xu,Yu,ny=zA(()=>{Me(),qI(),ke(),Le(),mi(),oQ(),Dc=A=>{let g=1;for(let e=0;etypeof A=="number"?[A,A,A]:A,Jt=(A,g)=>g<=1?A:A+(A-1)*(g-1),uc=(A,g,e,I=1)=>{let i=Jt(g,I);return Math.floor((A[0]*(e-1)-e+i)/2)},Vs=(A,g,e,I,i)=>{i==null&&(i=uc(A,g[0],I[0]));let t=[0,0,0,e];for(let o=0;o<3;o++)A[o]+2*i>=g[o]&&(t[o]=Math.trunc((A[o]-g[o]+2*i)/I[o]+1));return t},wc=(A,g,e,I,i,t,o,C,s,Q)=>{let r,B,a,d;if(A==="VALID"&&(A=0),typeof A=="number"){r={top:A,bottom:A,left:A,right:A,front:A,back:A};let c=Vs([g,e,I,1],[C,s,Q],1,[i,t,o],A);B=c[0],a=c[1],d=c[2]}else if(Array.isArray(A)){if(!A.every((F,L,u)=>F===u[0]))throw Error(`Unsupported padding parameter: ${A}`);r={top:A[0],bottom:A[1],left:A[2],right:A[3],front:A[4],back:A[5]};let c=Vs([g,e,I,1],[C,s,Q],1,[i,t,o],A[0]);B=c[0],a=c[1],d=c[2]}else if(A==="SAME_UPPER"){B=Math.ceil(g/i),a=Math.ceil(e/t),d=Math.ceil(I/o);let c=(B-1)*i+C-g,F=(a-1)*t+s-e,L=(d-1)*o+Q-I,u=Math.floor(c/2),h=c-u,R=Math.floor(F/2),w=F-R,y=Math.floor(L/2),D=L-y;r={top:R,bottom:w,left:y,right:D,front:u,back:h}}else throw Error(`Unknown padding parameter: ${A}`);return{padInfo:r,outDepth:B,outHeight:a,outWidth:d}},xu=(A,g,e,I,i,t=!1,o="channelsLast")=>{let C,s,Q,r,B;if(o==="channelsLast")[C,s,Q,r,B]=A;else if(o==="channelsFirst")[C,B,s,Q,r]=A;else throw new Error(`Unknown dataFormat ${o}`);let[a,,d,c,F]=g,[L,u,h]=js(e),[R,w,y]=js(I),D=Jt(d,R),f=Jt(c,w),G=Jt(F,y),{padInfo:J,outDepth:T,outHeight:X,outWidth:gA}=wc(i,s,Q,r,L,u,h,D,f,G),x=t?a*B:a,tA=[0,0,0,0,0];return o==="channelsFirst"?tA=[C,x,T,X,gA]:o==="channelsLast"&&(tA=[C,T,X,gA,x]),{batchSize:C,dataFormat:o,inDepth:s,inHeight:Q,inWidth:r,inChannels:B,outDepth:T,outHeight:X,outWidth:gA,outChannels:x,padInfo:J,strideDepth:L,strideHeight:u,strideWidth:h,filterDepth:d,filterHeight:c,filterWidth:F,effectiveFilterDepth:D,effectiveFilterHeight:f,effectiveFilterWidth:G,dilationDepth:R,dilationHeight:w,dilationWidth:y,inShape:A,outShape:tA,filterShape:g}},Yu=(A,g,e,I,i,t)=>{let o=t==="channelsLast";o?A[0].dims[3]:A[0].dims[1];let C=[64,1,1],s={x:e.map((L,u)=>u)},Q=[Math.ceil(Dc(s.x.map(L=>e[L]))/C[0]),1,1];Te("verbose",()=>`[conv3d_naive_webgpu] dispatch = ${Q}`);let r=1,B=MA.size(e),a=[{type:12,data:B},{type:12,data:I},{type:12,data:i},{type:12,data:g.strides},{type:12,data:g.dilations}];pi(g,a),a.push(...de(A[0].dims,A[1].dims));let d=["rank","rank"],c=A.length===3;c&&(a.push(...de(A[2].dims)),d.push("rank")),a.push(...de(e));let F=L=>{let u=[{name:"output_size",type:"u32"},{name:"filter_dims",type:"u32",length:I.length},{name:"pads",type:"u32",length:i.length},{name:"strides",type:"u32",length:g.strides.length},{name:"dilations",type:"u32",length:g.dilations.length}];yi(g,u);let h=1,R=Yg(A[0].dataType),w=kA("x",A[0].dataType,A[0].dims.length,r),y=kA("W",A[1].dataType,A[1].dims.length,h),D=[w,y],f=ne("result",A[0].dataType,e.length,h),G="";if(c){let X=kA("bias",A[2].dataType,A[2].dims.length,h);D.push(X),G+=` + fn getBiasByOutputCoords(coords : array) -> ${R} { + return bias[${o?ce("coords",4,5):ce("coords",1,5)}]; + }`}let J=Og(r,R),T=wi(g,J,R);return` + ${G} + fn getX(d0 : u32, d1 : u32, d2 : u32, d3 : u32, d4 : u32) -> f32 { + let aIndices = array(d0, d1, d2, d3, d4); + return ${w.getByIndices("aIndices")}; + } + fn getW(d0 : u32, d1 : u32, d2 : u32, d3 : u32, d4 : u32) -> f32 { + let aIndices = array(d0, d1, d2, d3, d4); + return ${y.getByIndices("aIndices")}; + } + ${L.registerUniforms(u).declareVariables(...D,f)} + ${L.mainStart()} + ${L.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let coords = ${f.offsetToIndices("global_idx")}; + let batch = ${ce("coords",0,w.rank)}; + let d2 = ${o?ce("coords",w.rank-1,w.rank):ce("coords",1,w.rank)}; + let xFRCCorner = vec3(${o?ce("coords",1,w.rank):ce("coords",2,w.rank)}, + ${o?ce("coords",2,w.rank):ce("coords",3,w.rank)}, + ${o?ce("coords",3,w.rank):ce("coords",4,w.rank)}) * uniforms.strides - uniforms.pads; + let xFCorner = xFRCCorner.x; + let xRCorner = xFRCCorner.y; + let xCCorner = xFRCCorner.z; + let xShapeY = ${o?ce("uniforms.x_shape",1,w.rank):ce("uniforms.x_shape",2,w.rank)}; + let xShapeZ = ${o?ce("uniforms.x_shape",2,w.rank):ce("uniforms.x_shape",3,w.rank)}; + let xShapeW = ${o?ce("uniforms.x_shape",3,w.rank):ce("uniforms.x_shape",4,w.rank)}; + let xShapeU = ${o?ce("uniforms.x_shape",4,w.rank):ce("uniforms.x_shape",1,w.rank)}; + let inputDepthNearestVec4 = (xShapeU / 4) * 4; + let inputDepthVec4Remainder = xShapeU % 4; + + var value = 0.0; + for (var wF = 0u; wF < uniforms.filter_dims[0]; wF++) { + let xF = xFCorner + wF * uniforms.dilations[0]; + if (xF < 0 || xF >= xShapeY) { + continue; + } + + for (var wR = 0u; wR < uniforms.filter_dims[1]; wR++) { + let xR = xRCorner + wR * uniforms.dilations[1]; + if (xR < 0 || xR >= xShapeZ) { + continue; + } + + for (var wC = 0u; wC < uniforms.filter_dims[2]; wC++) { + let xC = xCCorner + wC * uniforms.dilations[2]; + if (xC < 0 || xC >= xShapeW) { + continue; + } + + for (var d1 = 0u; d1 < inputDepthNearestVec4; d1 += 4) { + ${o?`let xValues = vec4( + getX(batch, xF, xR, xC, d1), + getX(batch, xF, xR, xC, d1 + 1), + getX(batch, xF, xR, xC, d1 + 2), + getX(batch, xF, xR, xC, d1 + 3)); + `:`let xValues = vec4( + getX(batch, d1, xF, xR, xC), + getX(batch, d1 + 1, xF, xR, xC), + getX(batch, d1 + 2, xF, xR, xC), + getX(batch, d1 + 3, xF, xR, xC)); + `} + let wValues = vec4( + getW(d2, d1, wF, wR, wC), + getW(d2, d1 + 1, wF, wR, wC), + getW(d2, d1 + 2, wF, wR, wC), + getW(d2, d1 + 3, wF, wR, wC)); + value += dot(xValues, wValues); + } + if (inputDepthVec4Remainder == 1) { + ${o?`value += getX(batch, xF, xR, xC, inputDepthNearestVec4) + * getW(d2, inputDepthNearestVec4, wF, wR, wC);`:`value += getX(batch, inputDepthNearestVec4, xF, xR, xC) + * getW(d2, inputDepthNearestVec4, wF, wR, wC);`} + } else if (inputDepthVec4Remainder == 2) { + ${o?`let xValues = vec2( + getX(batch, xF, xR, xC, inputDepthNearestVec4), + getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1)); + `:`let xValues = vec2( + getX(batch, inputDepthNearestVec4, xF, xR, xC), + getX(batch, inputDepthNearestVec4 + 1, xF, xR, xC)); + `} + let wValues = vec2( + getW(d2, inputDepthNearestVec4, wF, wR, wC), + getW(d2, inputDepthNearestVec4 + 1, wF, wR, wC)); + value += dot(xValues, wValues); + } else if (inputDepthVec4Remainder == 3) { + ${o?`let xValues = vec3( + getX(batch, xF, xR, xC, inputDepthNearestVec4), + getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1), + getX(batch, xF, xR, xC, inputDepthNearestVec4 + 2)); + `:`let xValues = vec3( + getX(batch, inputDepthNearestVec4, xF, xR, xC), + getX(batch, inputDepthNearestVec4 + 1, xF, xR, xC), + getX(batch, inputDepthNearestVec4 + 2, xF, xR, xC)); + `} + let wValues = vec3( + getW(d2, inputDepthNearestVec4, wF, wR, wC), + getW(d2, inputDepthNearestVec4 + 1, wF, wR, wC), + getW(d2, inputDepthNearestVec4 + 2, wF, wR, wC)); + value += dot(xValues, wValues); + } + } + } + } + ${c?"value = value + getBiasByOutputCoords(coords)":""}; + ${T} + result[global_idx] = f32(value); + }`};return{name:"Conv3DNaive",shaderCache:{hint:`${g.cacheKey};${o};${r};${c}`,inputDependencies:d},getRunData:()=>({outputs:[{dims:e,dataType:A[0].dataType}],dispatchGroup:{x:Q[0],y:Q[1],z:Q[2]},programUniforms:a}),getShaderSource:F}}}),Tu,Hu,ly=zA(()=>{Me(),ke(),Le(),mi(),Tu=(A,g,e,I)=>{let i=A.length>2,t=i?"value += b[output_channel];":"",o=A[0].dims,C=A[1].dims,s=g.format==="NHWC",Q=s?e[3]:e[1],r=Q/g.group,B=s&&r>=4?cg(Q):1,a=MA.size(e)/B,d=[{type:12,data:a},{type:12,data:g.dilations},{type:12,data:[g.strides[0],g.strides[1]]},{type:12,data:[g.pads[0],g.pads[1]]},{type:12,data:r}];pi(g,d),d.push(...de(o,[C[0],C[1],C[2],C[3]/B]));let c=i?["rank","rank","rank"]:["rank","rank"];d.push(...de([e[0],e[1],e[2],e[3]/B]));let F=L=>{let u=ne("output",A[0].dataType,e.length,B),h=Yg(u.type.tensor),R=wi(g,u.type.value,h),w=kA("x",A[0].dataType,o.length),y=kA("w",A[1].dataType,C.length,B),D=[w,y];i&&D.push(kA("b",A[2].dataType,A[2].dims,B));let f=[{name:"output_size",type:"u32"},{name:"dilations",type:"u32",length:g.dilations.length},{name:"strides",type:"u32",length:2},{name:"pads",type:"u32",length:2},{name:"output_channels_per_group",type:"u32"}];yi(g,f);let G=s?` + for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[0]; wHeight++) { + let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0]; + + if (xHeight < 0u || xHeight >= uniforms.x_shape[1]) { + continue; + } + + for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[1]; wWidth++) { + let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1]; + if (xWidth < 0u || xWidth >= uniforms.x_shape[2]) { + continue; + } + + for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[2]; wInChannel++) { + let input_channel = in_channel_offset + wInChannel; + let xVal = ${w.get("batch","xHeight","xWidth","input_channel")}; + let wVal = ${y.get("wHeight","wWidth","wInChannel","output_channel")}; + value += xVal * wVal; + } + } + } + `:` + for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[1]; wInChannel++) { + let input_channel = in_channel_offset + wInChannel; + for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[2]; wHeight++) { + let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0]; + + if (xHeight < 0u || xHeight >= uniforms.x_shape[2]) { + continue; + } + + for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[3]; wWidth++) { + let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1]; + if (xWidth < 0u || xWidth >= uniforms.x_shape[3]) { + continue; + } + + let xVal = ${w.get("batch","input_channel","xHeight","xWidth")}; + let wVal = ${y.get("output_channel","wInChannel","wHeight","wWidth")}; + value += xVal * wVal; + } + } + } + `;return` + ${L.registerUniforms(f).declareVariables(...D,u)} + + ${L.mainStart()} + ${L.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let outputIndices = ${u.offsetToIndices("global_idx")}; + let batch: u32 = outputIndices[0]; + let output_channel: u32 = outputIndices[${s?3:1}]; + let xRCCorner: vec2 = vec2(outputIndices[${s?1:2}], outputIndices[${s?2:3}]) * uniforms.strides - uniforms.pads; + let group_id: u32 = output_channel * ${B} / uniforms.output_channels_per_group; + var in_channel_offset = group_id * uniforms.w_shape[${s?2:1}]; + + var value: ${u.type.value} = ${u.type.value}(0); + ${G} + ${t} + ${R} + ${u.setByOffset("global_idx","value")} + }`};return{name:"GroupedConv",shaderCache:{hint:`${g.cacheKey}_${B}`,inputDependencies:c},getRunData:()=>({outputs:[{dims:I?I(e):e,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:d}),getShaderSource:F}},Hu=(A,g,e,I)=>{let i=A.length>2,t=cg(e[3]),o=cg(e[2]),C=MA.size(e)/t/o,s=[A[0].dims[0],A[0].dims[1],A[0].dims[2],A[0].dims[3]/t],Q=[A[1].dims[0],A[1].dims[1],A[1].dims[2],A[1].dims[3]/t],r=[e[0],e[1],e[2],e[3]/t],B=[{type:12,data:C},{type:6,data:[g.strides[0],g.strides[1]]},{type:6,data:[g.pads[0],g.pads[1]]}];pi(g,B),B.push(...de(s,Q,r));let a=(o-1)*g.strides[1]+Q[1],d=c=>{let F=ne("output",A[0].dataType,r.length,t),L=Yg(F.type.tensor),u=wi(g,F.type.value,L),h=kA("x",A[0].dataType,s.length,t),R=kA("w",A[1].dataType,Q.length,t),w=[h,R];i&&w.push(kA("b",A[2].dataType,A[2].dims,t));let y=i?"value += b[output_channel];":"",D=[{name:"output_size",type:"u32"},{name:"strides",type:"i32",length:2},{name:"pads",type:"i32",length:2}];return yi(g,D),` + ${c.registerUniforms(D).declareVariables(...w,F)} + ${c.mainStart()} + ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let width0 = uniforms.output_shape[3]; + let output_channel = global_idx % width0; + var index1 = global_idx / width0; + let width1 = uniforms.output_shape[2] / ${o}u; + let col = (index1 % width1) * ${o}u; + index1 = index1 / width1; + let row = index1 % uniforms.output_shape[1]; + let batch = index1 / uniforms.output_shape[1]; + + let x_corner = vec2(i32(row), i32(col)) * uniforms.strides - uniforms.pads; + + var x_vals: array<${h.type.value}, ${a}>; + var values: array<${F.type.value}, ${o}>; + let input_channel = output_channel; + // Use constant instead of uniform can give better performance for w's height/width. + for (var w_height: u32 = 0u; w_height < ${Q[0]}; w_height++) { + let x_height = x_corner.x + i32(w_height); + if (x_height >= 0 && u32(x_height) < uniforms.x_shape[1]) { + for (var i = 0; i < ${a}; i++) { + let x_width = x_corner.y + i; + if (x_width >= 0 && u32(x_width) < uniforms.x_shape[2]) { + x_vals[i] = ${h.get("batch","u32(x_height)","u32(x_width)","input_channel")}; + } else { + x_vals[i] = ${h.type.value}(0); + } + } + for (var w_width: u32 = 0u; w_width < ${Q[1]}; w_width++) { + let w_val = ${R.get("w_height","w_width","0","output_channel")}; + for (var i = 0u; i < ${o}u; i++) { + values[i] = fma(x_vals[i * u32(uniforms.strides[1]) + w_width], w_val, values[i]); + } + } + } + } + + for (var i = 0u; i < ${o}u; i++) { + var value = values[i]; + ${y} + ${u} + ${F.set("batch","row","col + i","output_channel","value")}; + } + }`};return{name:"GroupedConv-Vectorize",shaderCache:{hint:`${g.cacheKey};${t};${o};${a};${Q[0]};${Q[1]}`,inputDependencies:i?["rank","rank","type"]:["rank","rank"]},getRunData:()=>({outputs:[{dims:I?I(e):e,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(C/64)},programUniforms:B}),getShaderSource:d}}}),pc,OC,yc,WC,JB,zs,fc,mc,bB,cy=zA(()=>{ke(),Ey(),ny(),QQ(),ly(),mi(),BQ(),gi(),pc=(A,g,e,I,i,t)=>{let o=A[0],C=A.slice(t?1:2,t?3:4),s=C.length,Q=g[0],r=g.slice(2).map((a,d)=>a+(a-1)*(e[d]-1)),B=C.map((a,d)=>a+I[d]+I[d+s]).map((a,d)=>Math.floor((a-r[d]+i[d])/i[d]));return B.splice(0,0,o),B.splice(t?3:1,0,Q),B},OC=[2,3,1,0],yc=(A,g)=>{if(!A||A.length!==2&&A.length!==3)throw new Error("Conv requires 2 or 3 inputs");if(A[0].dims.length>5)throw new Error("greater than 5D is not supported");if(A[0].dims.length!==A[1].dims.length)throw new Error("filter does not have same dimension as input");let e=A[0].dims[g.format==="NHWC"?A[0].dims.length-1:1],I=A[1].dims[1]*g.group;if(e!==I)throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");if(A.length===3&&(A[2].dims.length!==1||A[1].dims[0]!==A[2].dims[0]))throw new Error("invalid bias");let i=A[0].dims.length-2;if(g.dilations.length!==i)throw new Error(`dilations should be ${i}D`);if(g.strides.length!==i)throw new Error(`strides should be ${i}D`);if(g.pads.length!==i*2)throw new Error(`pads should be ${i*2}D`);if(g.kernelShape.length!==0&&g.kernelShape.length!==A[1].dims.length-2)throw new Error("invalid kernel shape")},WC=(A,g)=>{let e=A.kernelShape.slice();e.length{let g=CQ(A),e=A.format,I=["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][A.auto_pad],i=A.dilations,t=A.group,o=A.kernel_shape,C=A.pads,s=A.strides,Q=A.w_is_const();return{autoPad:I,format:e,dilations:i,group:t,kernelShape:o,pads:C,strides:s,wIsConst:Q,...g,cacheKey:`${A.format};${g.activation};`}},zs=(A,g,e,I)=>{let i=e.format==="NHWC",t=pc(g[0].dims,g[1].dims,e.dilations,e.pads,e.strides,i);if(e.group!==1){let D=[g[0]];if(i){let f=A.kernelCustomData.wT??A.compute(aI(g[1],OC),{inputs:[1],outputs:[e.wIsConst?-2:-1]})[0];e.wIsConst&&!A.kernelCustomData.wT&&(A.kernelCustomData.wT=f),D.push(f)}else D.push(g[1]);g.length===3&&D.push(g[2]),!A.adapterInfo.isArchitecture("ampere")&&i&&g[1].dims[0]===e.group&&g[1].dims[1]===1&&e.dilations[0]===1&&e.dilations[1]===1?A.compute(Hu(D,e,t,I),{inputs:D}):A.compute(Tu(D,e,t,I),{inputs:D});return}let o=g.length===3,C=g[0].dims[i?1:2],s=g[0].dims[i?2:3],Q=g[0].dims[i?3:1],r=g[1].dims[2],B=g[1].dims[3],a=t[i?1:2],d=t[i?2:3],c=t[i?3:1],F=i&&r===C&&B===s&&e.pads[0]===0&&e.pads[1]===0;if(F||r===1&&B===1&&e.dilations[0]===1&&e.dilations[1]===1&&e.strides[0]===1&&e.strides[1]===1&&e.pads[0]===0&&e.pads[1]===0){let D=t[0],f,G,J,T=[];if(i){let x=A.kernelCustomData.wT??A.compute(aI(g[1],OC),{inputs:[1],outputs:[e.wIsConst?-2:-1]})[0];if(e.wIsConst&&!A.kernelCustomData.wT&&(A.kernelCustomData.wT=x),F){let tA=C*s*Q;f=g[0].reshape([1,D,tA]),G=x.reshape([1,tA,c]),J=[1,D,c]}else f=g[0].reshape([D,C*s,Q]),G=x.reshape([1,Q,c]),J=[D,a*d,c];T.push(f),T.push(G)}else f=g[0].reshape([D,Q,C*s]),G=g[1].reshape([1,c,Q]),J=[D,c,a*d],T.push(G),T.push(f);o&&T.push(g[2]);let X=J[2],gA=T[0].dims[T[0].dims.length-1];X<8&&gA<8?A.compute(sQ(T,e,t,J,i,I),{inputs:T}):A.compute(Co(T,e,t,J,i,I),{inputs:T});return}let L=!0,u=A.kernelCustomData.wT??A.compute(aI(g[1],OC),{inputs:[1],outputs:[e.wIsConst?-2:-1]})[0];e.wIsConst&&!A.kernelCustomData.wT&&(A.kernelCustomData.wT=u);let h=[g[0],u];o&&h.push(g[2]);let R=i?a*d:c,w=i?c:a*d,y=r*B*Q;A.compute(bu(h,e,t,R,w,y,o,L,I),{inputs:h})},fc=(A,g)=>{let e=g.format==="NHWC",I=[A.inputs[0].reshape(e?[A.inputs[0].dims[0],1,A.inputs[0].dims[1],A.inputs[0].dims[2]]:[A.inputs[0].dims[0],A.inputs[0].dims[1],1,A.inputs[0].dims[2]]),A.inputs[1].reshape([A.inputs[1].dims[0],A.inputs[1].dims[1],1,A.inputs[1].dims[2]])];A.inputs.length===3&&I.push(A.inputs[2]);let i=[0,g.pads[0],0,g.pads[1]],t=[1].concat(g.strides),o=[1].concat(g.dilations),C=[1].concat(g.kernelShape),s=WC({...g,pads:i,strides:t,dilations:o,kernelShape:C},I);zs(A,I,s,Q=>e?[Q[0],Q[2],Q[3]]:[Q[0],Q[1],Q[3]])},mc=(A,g,e)=>{let I=e.format==="NHWC"?"channelsLast":"channelsFirst",i=WC(e,g),t=e.autoPad==="NOTSET"?e.pads:e.autoPad,o=xu(g[0].dims,g[1].dims,e.strides,e.dilations,t,!1,I);A.compute(Yu(g,i,o.outShape,[o.filterDepth,o.filterHeight,o.filterWidth],[o.padInfo.front,o.padInfo.top,o.padInfo.left],I))},bB=(A,g)=>{if(yc(A.inputs,g),A.inputs[0].dims.length===3)fc(A,g);else if(A.inputs[0].dims.length===5)mc(A,A.inputs,g);else{let e=WC(g,A.inputs);zs(A,A.inputs,e)}}}),Pu,dy=zA(()=>{Me(),qI(),ke(),Le(),Pu=(A,g,e)=>{let I=A.length>2,i=g.outputShape,t=g.format==="NHWC",o=g.group,C=A[1].dims,s=C[2]/o,Q=C[3],r=t?cg(s):1,B=t&&Q===1&&s>=4,a=B?Math.floor(s/4)*4:Math.floor(s/r)*r,d=s-a,c=t?cg(Q):1,F=t?Q===1?r:c:1,L=MA.size(i)/c,u=[Math.ceil(L/64),1,1];Te("verbose",()=>`[conv2d_backprop_webgpu] dispatch = ${u}`);let h=["rank","rank"],R=[g.strides[0],g.strides[1]],w=[g.kernelShape[t?1:2],g.kernelShape[t?2:3]],y=[g.dilations[0],g.dilations[1]],D=[w[0]+(g.dilations[0]<=1?0:(g.kernelShape[t?1:2]-1)*(g.dilations[0]-1)),w[1]+(g.dilations[1]<=1?0:(g.kernelShape[t?2:3]-1)*(g.dilations[1]-1))],f=[D[0]-1-Math.floor((g.pads[0]+g.pads[2])/2),D[1]-1-Math.floor((g.pads[1]+g.pads[3])/2)],G=[{type:12,data:L},{type:12,data:R},{type:12,data:w},{type:12,data:y},{type:12,data:D},{type:6,data:f},{type:12,data:a},{type:12,data:s},{type:12,data:Q},...de(A[0].dims,A[1].dims)];I&&(G.push(...de(A[2].dims)),h.push("rank")),G.push(...de(i));let J=T=>{let X=[{name:"output_size",type:"u32"},{name:"strides",type:"u32",length:R.length},{name:"filter_dims",type:"u32",length:w.length},{name:"dilations",type:"u32",length:w.length},{name:"effective_filter_dims",type:"u32",length:D.length},{name:"pads",type:"i32",length:f.length},{name:"input_channels_per_group_int",type:"u32"},{name:"input_channels_per_group",type:"u32"},{name:"output_channels_per_group",type:"u32"}],gA=Yg(A[0].dataType),x=t?1:2,tA=t?2:3,Z=t?3:1,IA=kA("W",A[1].dataType,A[1].dims.length,F),oA=kA("Dy",A[0].dataType,A[0].dims.length,r),CA=[oA,IA];I&&CA.push(kA("bias",A[2].dataType,[i[Z]].length,c));let DA=ne("result",A[0].dataType,i.length,c),cA=()=>{let z="";if(B)r===4?z+=` + let xValue = ${oA.getByOffset("x_offset")}; + let wValue = ${IA.getByOffset("w_offset")}; + dotProd = dotProd + dot(xValue, wValue); + x_offset += 1u; + w_offset += 1u;`:r===2?z+=` + dotProd = dotProd + dot(vec4<${gA}>(${oA.getByOffset("x_offset")}, ${oA.getByOffset("x_offset + 1u")}), vec4<${gA}>(${IA.getByOffset("w_offset")}, ${IA.getByOffset("w_offset + 1u")})); + x_offset += 2u; + w_offset += 2u;`:r===1&&(z+=` + dotProd = dotProd + dot(vec4<${gA}>(${oA.getByOffset("x_offset")}, ${oA.getByOffset("x_offset + 1u")}, ${oA.getByOffset("x_offset + 2u")}, ${oA.getByOffset("x_offset + 3u")}), vec4<${gA}>(${IA.getByOffset("w_offset")}, ${IA.getByOffset("w_offset + 1u")}, ${IA.getByOffset("w_offset + 2u")}, ${IA.getByOffset("w_offset + 3u")})); + x_offset += 4u; + w_offset += 4u;`);else if(z+=` + let xValue = ${t?oA.getByOffset(`${oA.indicesToOffset(`${oA.type.indices}(batch, idyR, idyC, inputChannel)`)} / ${r}`):oA.get("batch","inputChannel","idyR","idyC")}; + `,r===1)z+=` + let w_offset = ${IA.indicesToOffset(`${IA.type.indices}(u32(wRPerm), u32(wCPerm), inputChannel, wOutChannel)`)}; + let wValue = ${IA.getByOffset(`w_offset / ${F}`)}; + dotProd = dotProd + xValue * wValue;`;else for(let H=0;H{if(d===0)return"";if(!B)throw new Error(`packInputAs4 ${B} is not true.`);let z="";if(r===1){z+="dotProd = dotProd";for(let H=0;H(i32(r), i32(c)) - uniforms.pads; + let dyRCorner = dyCorner.x; + let dyCCorner = dyCorner.y; + let groupId = d1 / uniforms.output_channels_per_group; + let wOutChannel = d1 - groupId * uniforms.output_channels_per_group; + // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). + // ? = to be determined. : = across all values in that axis. + var dotProd = ${DA.type.value}(0.0); + var wR: u32 = 0; + if (uniforms.dilations.x == 1) { + // Minimum wR >= 0 that satisfies (dyRCorner + wR) % (uniforms.strides.x) == 0 + wR = u32(((dyRCorner + i32(uniforms.strides.x) - 1) / i32(uniforms.strides.x)) * i32(uniforms.strides.x) - dyRCorner); + } + for (; wR < uniforms.effective_filter_dims.x; wR = wR + 1) { + if (wR % uniforms.dilations.x != 0) { + continue; + } + let dyR = (${gA}(dyRCorner) + ${gA}(wR)) / ${gA}(uniforms.strides[0]); + let wRPerm = uniforms.filter_dims.x - 1 - wR / uniforms.dilations.x; + if (dyR < 0.0 || dyR >= ${gA}(uniforms.Dy_shape[${x}]) || fract(dyR) > 0.0 || + wRPerm < 0) { + continue; + } + let idyR: u32 = u32(dyR); + var wC: u32 = 0; + if (uniforms.dilations.y == 1) { + // Minimum wC >= 0 that satisfies (dyCCorner + wC) % (uniforms.strides.y) == 0 + wC = u32(((dyCCorner + i32(uniforms.strides.y) - 1) / i32(uniforms.strides.y)) * i32(uniforms.strides.y) - dyCCorner); + } + for (; wC < uniforms.effective_filter_dims.y; wC = wC + 1) { + if (wC % uniforms.dilations.y != 0) { + continue; + } + let dyC = (${gA}(dyCCorner) + ${gA}(wC)) / ${gA}(uniforms.strides.y); + let wCPerm = uniforms.filter_dims.y - 1 - wC / uniforms.dilations.y; + if (dyC < 0.0 || dyC >= ${gA}(uniforms.Dy_shape[${tA}]) || + fract(dyC) > 0.0 || wCPerm < 0) { + continue; + } + let idyC: u32 = u32(dyC); + var inputChannel = groupId * uniforms.input_channels_per_group; + ${B?` + var x_offset = ${oA.indicesToOffset(`${oA.type.indices}(batch, idyR, idyC, inputChannel)`)} / ${r}; + var w_offset = ${IA.indicesToOffset(`${IA.type.indices}(wRPerm, wCPerm, inputChannel, wOutChannel)`)} / ${F}; + `:""} + for (var d2: u32 = 0; d2 < uniforms.input_channels_per_group_int; d2 = d2 + ${B?4:r}) { + ${cA()} + inputChannel = inputChannel + ${B?4:r}; + } + ${q()} + wC = wC + uniforms.strides.y - 1; + } + wR = wR + uniforms.strides[0] - 1; + } + let value = dotProd${I?` + bias[d1 / ${c}]`:""}; + ${DA.setByOffset("global_idx","value")}; + `;return` + ${T.registerUniforms(X).declareVariables(...CA,DA)} + ${T.mainStart()} + ${T.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}; + ${U}}`};return{name:"ConvTranspose2D",shaderCache:{hint:`${g.cacheKey};${r}${F}${c}${B}${d}`,inputDependencies:h},getRunData:()=>({dispatchGroup:{x:u[0],y:u[1],z:u[2]},outputs:[{dims:e?e(i):i,dataType:A[0].dataType}],programUniforms:G}),getShaderSource:J}}}),Mc,Fc,Sc,$s,vu,Nc,Xs,Rc,qu,hy=zA(()=>{dy(),mi(),gi(),Mc=(A,g,e,I,i,t)=>(A-1)*g+e+(I-1)*i+1-t,Fc=(A,g,e,I,i)=>{let t=Math.floor(A/2);g==="SAME_UPPER"?(e[I]=t,e[i]=A-t):g==="SAME_LOWER"&&(e[I]=A-t,e[i]=t)},Sc=(A,g,e,I,i,t,o,C,s,Q)=>{let r=A.length-2,B=Q.length===0;s.length{let e=A.kernelShape.slice();if(A.kernelShape.length===0||A.kernelShape.reduce((B,a)=>B*a,1)===0){e.length=0;for(let B=2;BB+a,0)===0){let B=g[0].dims.length-2;s=new Array(B).fill(1)}let Q=A.strides.slice();if(Q.reduce((B,a)=>B+a,0)===0){let B=g[0].dims.length-2;Q=new Array(B).fill(1)}Sc(C,e,s,A.autoPad,A.group,i,Q,I,o,t);let r=Object.assign({},A);return Object.assign(r,{kernelShape:e,pads:i,outputPadding:o,outputShape:t,dilations:s,strides:Q}),r},vu=A=>{let g=CQ(A),e=A.format,I=["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][typeof A.autoPad>"u"?0:A.autoPad],i=A.dilations,t=A.group,o=A.kernelShape,C=A.pads,s=A.strides,Q=A.wIsConst(),r=A.outputPadding,B=A.outputShape;return{autoPad:I,format:e,dilations:i,group:t,kernelShape:o,outputPadding:r,outputShape:B,pads:C,strides:s,wIsConst:Q,...g,cacheKey:`${A.format};${g.activation};`}},Nc=(A,g)=>{if(!A||A.length!==2&&A.length!==3)throw new Error("Conv requires 2 or 3 inputs");if(A[0].dims.length!==4&&A[0].dims.length!==3)throw new Error("currently only support 2-dimensional conv");if(A[0].dims.length!==A[1].dims.length)throw new Error("filter does not have same dimension as input");let e=A[0].dims[g.format==="NHWC"?A[0].dims.length-1:1],I=A[1].dims[0];if(e!==I)throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");let i=A[1].dims[1]*g.group;if(A.length===3&&(A[2].dims.length!==1||A[2].dims[0]!==i))throw new Error("invalid bias");let t=A[0].dims.length-2;if(g.dilations.reduce((o,C)=>o+C,0)>0&&g.dilations.length!==t)throw new Error(`dilations should be ${t}D`);if(g.strides.reduce((o,C)=>o+C,0)>0&&g.strides.length!==t)throw new Error(`strides should be ${t}D`);if(g.pads.reduce((o,C)=>o+C,0)>0&&g.pads.length!==t*2)throw new Error(`pads should be ${t*2}D`);if(g.outputPadding.length!==t&&g.outputPadding.length!==0)throw new Error(`output_padding should be ${t}D`);if(g.kernelShape.reduce((o,C)=>o+C,0)>0&&g.kernelShape.length!==0&&g.kernelShape.length!==A[1].dims.length-2)throw new Error("invalid kernel shape");if(g.outputShape.length!==0&&g.outputShape.length!==A[0].dims.length-2)throw new Error("invalid output shape")},Xs=(A,g,e,I)=>{let i=A.kernelCustomData.wT??A.compute(aI(g[1],[2,3,0,1]),{inputs:[1],outputs:[e.wIsConst?-2:-1]})[0];e.wIsConst&&!A.kernelCustomData.wT&&(A.kernelCustomData.wT=i);let t=[g[0],i];g.length===3&&t.push(g[2]),A.compute(Pu(t,e,I),{inputs:t})},Rc=(A,g)=>{let e=g.format==="NHWC",I=[A.inputs[0].reshape(e?[A.inputs[0].dims[0],1,A.inputs[0].dims[1],A.inputs[0].dims[2]]:[A.inputs[0].dims[0],A.inputs[0].dims[1],1,A.inputs[0].dims[2]]),A.inputs[1].reshape([A.inputs[1].dims[0],A.inputs[1].dims[1],1,A.inputs[1].dims[2]])];A.inputs.length===3&&I.push(A.inputs[2]);let i=g.kernelShape;(i.length===0||i[0]===0)&&(i=[A.inputs[1].dims[2]]);let t=g.dilations;(t.length===0||t[0]===0)&&(t=[1]);let o=g.strides;(o.length===0||o[0]===0)&&(o=[1]);let C=g.pads;C.length===0&&(C=[0,0]),C=[0,C[0],0,C[1]],o=[1].concat(o),t=[1].concat(t),i=[1].concat(i);let s=g.outputPadding;s=[0].concat(s);let Q=$s({...g,pads:C,strides:o,dilations:t,kernelShape:i,outputPadding:s},I);Xs(A,I,Q,r=>e?[r[0],r[2],r[3]]:[r[0],r[1],r[3]])},qu=(A,g)=>{if(Nc(A.inputs,g),A.inputs[0].dims.length===3)Rc(A,g);else{let e=$s(g,A.inputs);Xs(A,A.inputs,e)}}}),Gc,Ou,Wu,Dy=zA(()=>{Me(),ke(),hg(),Le(),Gc=(A,g,e,I)=>{let i=MA.size(g),t=g.length,o=kA("input",A,t),C=ne("output",A,t),s=e.dataType===6?e.getInt32Array()[0]:Number(e.getBigInt64Array()[0]),Q=MA.normalizeAxis(s,t),r=B=>{let a=` i32(${o.indicesGet("inputIndices","uniforms.axis")}) `,d=ce("uniforms.input_shape","uniforms.axis",t),c=I.reverse?a+(I.exclusive?" + 1":""):"0",F=I.reverse?d:a+(I.exclusive?"":" + 1");return` + ${B.registerUniform("outputSize","u32").registerUniform("axis","u32").declareVariables(o,C)} + ${B.mainStart()} + ${B.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + var inputIndices = ${C.offsetToIndices("global_idx")}; + var sum = ${C.type.value}(0); + let first : i32 = ${c}; + let last : i32 = ${F}; + for (var i : i32 = first; i < last; i++) { + ${o.indicesSet("inputIndices","uniforms.axis","u32(i)")}; + sum = sum + ${o.getByIndices("inputIndices")}; + } + ${C.setByOffset("global_idx","sum")}; + }`};return{name:"CumSum",shaderCache:{hint:I.cacheKey,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:g,dataType:A}],dispatchGroup:{x:Math.ceil(i/64)},programUniforms:[{type:12,data:i},{type:12,data:Q},...de(g,g)]}),getShaderSource:r}},Ou=(A,g)=>{let e=A.inputs[0].dims,I=A.inputs[0].dataType,i=A.inputs[1];A.compute(Gc(I,e,i,g),{inputs:[0]})},Wu=A=>{let g=A.exclusive===1,e=A.reverse===1;return Oe({exclusive:g,reverse:e})}}),_c,kc,Lc,ju,Vu,uy=zA(()=>{Me(),ke(),hg(),Le(),_c=A=>{if(!A||A.length!==1)throw new Error("DepthToSpace requires 1 input.");if(A[0].dims.length!==4)throw new Error("DepthToSpace requires 4D input.")},kc=(A,g,e,I)=>{let i=[];i.push(`fn perm(i: ${I.type.indices}) -> ${e.type.indices} { + var a: ${e.type.indices};`);for(let t=0;t{let e,I,i,t,o,C,s=g.format==="NHWC",Q=g.blocksize,r=g.mode==="DCR";s?([e,I,i,t]=A.dims,o=r?[e,I,i,Q,Q,t/Q**2]:[e,I,i,t/Q**2,Q,Q],C=r?[0,1,3,2,4,5]:[0,1,4,2,5,3]):([e,I,i,t]=[A.dims[0],A.dims[2],A.dims[3],A.dims[1]],o=r?[e,Q,Q,t/Q**2,I,i]:[e,t/Q**2,Q,Q,I,i],C=r?[0,3,4,1,5,2]:[0,1,4,2,5,3]);let B=A.reshape(o),a=B.dims.length,d=A.dataType,c=kA("a",d,a),F=ne("output",d,a),L=u=>` + ${u.registerUniform("output_size","u32").declareVariables(c,F)} + + ${kc(C,a,c,F)} + + ${u.mainStart()} + ${u.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let indices = ${F.offsetToIndices("global_idx")}; + let aIndices = perm(indices); + + ${F.setByOffset("global_idx",c.getByIndices("aIndices"))} + }`;return{name:"DepthToSpace",shaderCache:{hint:`${A.dims};${g.blocksize};${g.mode}`,inputDependencies:["rank"]},getRunData:u=>{let h=s?[e,I*Q,i*Q,t/Q**2]:[e,t/Q**2,I*Q,i*Q],R=MA.size(h),w=B.dims,y=MA.sortBasedOnPerm(w,C);return{outputs:[{dims:h,dataType:u[0].dataType}],dispatchGroup:{x:Math.ceil(R/64)},programUniforms:[{type:12,data:R},...de(w,y)]}},getShaderSource:L}},ju=(A,g)=>{_c(A.inputs),A.compute(Lc(A.inputs[0],g))},Vu=A=>Oe({blocksize:A.blocksize,mode:A.mode,format:A.format})}),jC,bt,Zs,Kc,Uc,Jc,bc,AB,xc,zu,$u,wy=zA(()=>{Me(),ke(),hg(),Le(),jC="[a-zA-Z]|\\.\\.\\.",bt="("+jC+")+",Zs="^"+bt+"$",Kc="("+bt+",)*"+bt,Uc="^"+Kc+"$",Jc=class{constructor(A=-1){this.symbolToIndices=new Map,this.inputIndex=A}addSymbol(A,g){let e=this.symbolToIndices.get(A);e===void 0?e=[g]:e.push(g),this.symbolToIndices.set(A,e)}},bc=class{constructor(A,g){this.equation=g,this.hasEllipsis=!1,this.symbolToInfo=new Map,this.lhs=new Array,this.outputDims=[];let[e,I]=g.includes("->")?g.split("->",2):[g,""];if(!e.match(RegExp(Uc)))throw new Error("Invalid LHS term");if(e.split(",").forEach((i,t)=>{let o=A[t].dims.slice();if(!i.match(RegExp(Zs)))throw new Error("Invalid LHS term");let C=this.processTerm(i,!0,o,t);this.lhs.push(C)}),I==="")I+=[...this.symbolToInfo.entries()].filter(([i,t])=>t.count===1||i==="...").map(([i])=>i).join("");else if(!I.match(RegExp(bt)))throw new Error("Invalid RHS");I.match(RegExp(jC,"g"))?.forEach(i=>{if(i==="...")this.outputDims=this.outputDims.concat(this.ellipsisDims);else{let t=this.symbolToInfo.get(i);if(t===void 0)throw new Error("Invalid RHS symbol");this.outputDims.push(t.dimValue)}}),this.rhs=this.processTerm(I,!1,this.outputDims)}addSymbol(A,g,e){let I=this.symbolToInfo.get(A);if(I!==void 0){if(I.dimValue!==g&&I.count!==1)throw new Error("Dimension mismatch");I.count++,I.inputIndices.push(e)}else I={count:1,dimValue:g,inputIndices:[e]};this.symbolToInfo.set(A,I)}processTerm(A,g,e,I=-1){let i=e.length,t=!1,o=[],C=0;if(!A.match(RegExp(Zs))&&!g&&A!=="")throw new Error("Invalid LHS term");let s=A.match(RegExp(jC,"g")),Q=new Jc(I);return s?.forEach((r,B)=>{if(r==="..."){if(t)throw new Error("Only one ellipsis is allowed per input term");t=!0;let a=i-s.length+1;if(a<0)throw new Error("Ellipsis out of bounds");if(o=e.slice(C,C+a),this.hasEllipsis){if(this.ellipsisDims.length!==o.length||this.ellipsisDims.toString()!==o.toString())throw new Error("Ellipsis dimensions mismatch")}else if(g)this.hasEllipsis=!0,this.ellipsisDims=o;else throw new Error("Ellipsis must be specified in the LHS");for(let d=0;dA+"_max",xc=(A,g,e,I)=>{let i=A.map(Q=>Q.length).map((Q,r)=>kA(`input${r}`,g,Q)),t=MA.size(I),o=ne("output",g,I.length),C=[...e.symbolToInfo.keys()].filter(Q=>!e.rhs.symbolToIndices.has(Q)),s=Q=>{let r=[],B="var prod = 1.0;",a="var sum = 0.0;",d="sum += prod;",c=[],F=[],L=[],u=[],h=e.symbolToInfo.size===e.rhs.symbolToIndices.size;e.symbolToInfo.forEach((w,y)=>{if(e.rhs.symbolToIndices.has(y)){let D=e.rhs.symbolToIndices.get(y)?.[0];D!==void 0&&e.lhs.forEach((f,G)=>{if(w.inputIndices.includes(G)){let J=f.symbolToIndices.get(y);if(J===void 0)throw new Error("Invalid symbol error");J.forEach(T=>{r.push(`${i[G].indicesSet(`input${G}Indices`,T,o.indicesGet("outputIndices",D))}`)})}})}else e.lhs.forEach((D,f)=>{if(w.inputIndices.includes(f)){let G=D.symbolToIndices.get(y);if(G===void 0)throw new Error("Invalid symbol error");G.forEach(J=>{c.push(`${i[f].indicesSet(`input${f}Indices`,J,`${y}`)}`)}),u.push(`prod *= ${i[f].getByIndices(`input${f}Indices`)};`)}}),F.push(`for(var ${y}: u32 = 0; ${y} < uniforms.${AB(y)}; ${y}++) {`),L.push("}")});let R=h?[...r,`let sum = ${i.map((w,y)=>w.getByIndices(`input${y}Indices`)).join(" * ")};`]:[...r,a,...F,...c,B,...u,d,...L];return` + ${Q.registerUniforms(C.map(w=>({name:`${AB(w)}`,type:"u32"}))).registerUniform("outputSize","u32").declareVariables(...i,o)} + + ${Q.mainStart()} + ${Q.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + var outputIndices = ${o.offsetToIndices("global_idx")}; + ${i.map((w,y)=>`var input${y}Indices: ${i[y].type.indices};`).join(` +`)} + ${R.join(` +`)}; + ${o.setByOffset("global_idx","sum")}; + }`};return{name:"Einsum",shaderCache:{hint:e.equation,inputDependencies:A.map(()=>"rank")},getRunData:()=>{let Q=C.filter(B=>e.symbolToInfo.has(B)).map(B=>({type:12,data:e.symbolToInfo.get(B)?.dimValue||0}));Q.push({type:12,data:t});let r=A.map((B,a)=>[...de(B)]).reduce((B,a)=>B.concat(a),Q);return r.push(...de(I)),{outputs:[{dims:I,dataType:g}],dispatchGroup:{x:Math.ceil(t/64)},programUniforms:r}},getShaderSource:s}},zu=(A,g)=>{let e=new bc(A.inputs,g.equation),I=e.outputDims,i=A.inputs.map((t,o)=>t.dims);A.compute(xc(i,A.inputs[0].dataType,e,I))},$u=A=>{let g=A.equation.replace(/\s+/g,"");return Oe({equation:g})}}),Yc,eB,Tc,Hc,Xu,py=zA(()=>{Me(),ke(),Le(),Yc=A=>{if(!A||A.length!==2)throw new Error("Expand requires 2 input.");let g=A[0].dims,e=Array.from(A[1].getBigInt64Array(),Number),I=e.length{let e=A.length-g.length,I=[];for(let i=0;iA.length>g.length?eB(A,g):eB(g,A),Hc=A=>{let g=A[0].dims,e=Array.from(A[1].getBigInt64Array(),Number),I=Tc(g,e),i=A[0].dataType,t=i===9||MA.size(g)===1,o=i===9||g.length>0&&g[g.length-1]%4===0?4:1,C=t||I.length>0&&I[I.length-1]%4===0?4:1,s=Math.ceil(MA.size(I)/C),Q=B=>{let a=kA("input",i,g.length,o),d=ne("output",i,I.length,C),c;if(i===9){let F=(L,u,h="")=>` + let outputIndices${u} = ${d.offsetToIndices(`outputOffset + ${u}u`)}; + let offset${u} = ${a.broadcastedIndicesToOffset(`outputIndices${u}`,d)}; + let index${u} = offset${u} / 4u; + let component${u} = offset${u} % 4u; + ${L}[${u}] = ${h}(${a.getByOffset(`index${u}`)}[component${u}]); + `;c=` + let outputOffset = global_idx * ${C}; + var data = vec4(0); + ${F("data",0,"u32")} + ${F("data",1,"u32")} + ${F("data",2,"u32")} + ${F("data",3,"u32")} + ${d.setByOffset("global_idx","data")} + }`}else c=` + let outputIndices = ${d.offsetToIndices(`global_idx * ${C}`)}; + let inputOffset = ${a.broadcastedIndicesToOffset("outputIndices",d)}; + let data = ${d.type.value}(${a.getByOffset(`inputOffset / ${o}`)}); + ${d.setByOffset("global_idx","data")} + }`;return` + ${B.registerUniform("vec_size","u32").declareVariables(a,d)} + ${B.mainStart()} + ${B.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} + ${c}`},r=[{type:12,data:s},...de(g,I)];return{name:"Expand",shaderCache:{hint:`${I.length};${o}${C}`,inputDependencies:["rank"]},getShaderSource:Q,getRunData:()=>({outputs:[{dims:I,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:r})}},Xu=A=>{Yc(A.inputs),A.compute(Hc(A.inputs),{inputs:[0]})}}),Pc,Zu,yy=zA(()=>{Me(),ke(),Le(),tQ(),Pc=A=>{let g=A[0].dataType,e=MA.size(A[0].dims),I=MA.size(A[1].dims),i=I%4===0,t=o=>{let C=kA("x",g,[1],4),s=kA("bias",g,[1],4),Q=ne("y",g,[1],4),r=[{name:"output_vec_size",type:"u32"},{name:"bias_size",type:"u32"}],B=d=>` + let bias${d}_offset: u32 = (global_idx * 4 + ${d}) % uniforms.bias_size; + let bias${d} = ${s.getByOffset(`bias${d}_offset / 4`)}[bias${d}_offset % 4];`,a=i?` + let bias = ${s.getByOffset("global_idx % (uniforms.bias_size / 4)")};`:`${B(0)}${B(1)}${B(2)}${B(3)} + let bias = ${C.type.value}(bias0, bias1, bias2, bias3);`;return`${o.registerUniforms(r).declareVariables(C,s,Q)} + + ${kB(zg(g))} + + ${o.mainStart(gt)} + ${o.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_vec_size")} + + let x = ${C.getByOffset("global_idx")}; + ${a} + let x_in = x + bias; + ${Q.setByOffset("global_idx",LB("x_in"))} + }`};return{name:"FastGeluWithBias",shaderCache:{hint:`${i}`,inputDependencies:["type","type"]},getShaderSource:t,getRunData:o=>({outputs:[{dims:o[0].dims,dataType:o[0].dataType}],programUniforms:[{type:12,data:Math.ceil(e/4)},{type:12,data:I}],dispatchGroup:{x:Math.ceil(e/gt/4)}})}},Zu=A=>{A.inputs.length<2||MA.size(A.inputs[1].dims)===0?Du(A):A.compute(Pc(A.inputs))}}),vc,qc,Aw,ew,fy=zA(()=>{Me(),ke(),hg(),Le(),vc=A=>{if(!A||A.length!==2)throw new Error("Gather requires 2 inputs.")},qc=(A,g)=>{let e=A[0].dims,I=A[1].dims,i=e.length,t=MA.normalizeAxis(g.axis,i),o=e.slice(0);o.splice(t,1,...I);let C=e[t],s=A[0].dataType===9?4:1,Q=Math.ceil(MA.size(o)/s),r=[{type:12,data:Q},{type:6,data:C},{type:12,data:t},...de(A[0].dims,A[1].dims,o)],B=a=>{let d=kA("data",A[0].dataType,A[0].dims.length,s),c=kA("inputIndices",A[1].dataType,A[1].dims.length),F=ne("output",A[0].dataType,o.length,s),L=h=>{let R=I.length,w=`var indicesIndices${h} = ${c.type.indices}(0);`;for(let y=0;y1?`indicesIndices${h}[${y}]`:`indicesIndices${h}`} = ${o.length>1?`outputIndices${h}[uniforms.axis + ${y}]`:`outputIndices${h}`};`;w+=` + var idx${h} = ${c.getByIndices(`indicesIndices${h}`)}; + if (idx${h} < 0) { + idx${h} = idx${h} + uniforms.axisDimLimit; + } + var dataIndices${h} : ${d.type.indices}; + `;for(let y=0,D=0;y1?`dataIndices${h}[${y}]`:`dataIndices${h}`} = u32(idx${h});`,D+=R):(w+=`${i>1?`dataIndices${h}[${y}]`:`dataIndices${h}`} = ${o.length>1?`outputIndices${h}[${D}]`:`outputIndices${h}`};`,D++);return w},u;if(A[0].dataType===9){let h=(R,w,y="")=>` + let outputIndices${w} = ${F.offsetToIndices(`outputOffset + ${w}u`)}; + ${L(w)}; + let offset${w} = ${d.indicesToOffset(`dataIndices${w}`)}; + let index${w} = offset${w} / 4u; + let component${w} = offset${w} % 4u; + ${R}[${w}] = ${y}(${d.getByOffset(`index${w}`)}[component${w}]); + `;u=` + let outputOffset = global_idx * ${s}; + var value = vec4(0); + ${h("value",0,"u32")} + ${h("value",1,"u32")} + ${h("value",2,"u32")} + ${h("value",3,"u32")} + ${F.setByOffset("global_idx","value")} + `}else u=` + let outputIndices = ${F.offsetToIndices("global_idx")}; + ${L("")}; + let value = ${d.getByIndices("dataIndices")}; + ${F.setByOffset("global_idx","value")}; + `;return` + ${a.registerUniform("outputSize","u32").registerUniform("axisDimLimit","i32").registerUniform("axis","u32").declareVariables(d,c,F)} + ${a.mainStart()} + ${a.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + ${u} + }`};return{name:"Gather",shaderCache:{hint:g.cacheKey,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:o,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(Q/64)},programUniforms:r}),getShaderSource:B}},Aw=A=>Oe({axis:A.axis}),ew=(A,g)=>{let e=A.inputs;vc(e),A.compute(qc(A.inputs,g))}}),Oc,gw,Iw,my=zA(()=>{Me(),ke(),Le(),Oc=(A,g,e,I,i,t,o,C,s)=>{let Q=[{type:12,data:t},{type:12,data:I},{type:12,data:i},{type:12,data:e},{type:12,data:o},{type:12,data:C},{type:12,data:s}],r=[t];Q.push(...de(g.dims,r));let B=a=>{let d=kA("indices_data",g.dataType,g.dims.length),c=ne("input_slice_offsets_data",12,1,1),F=[d,c],L=[{name:"output_size",type:"u32"},{name:"batch_dims",type:"u32"},{name:"input_dims",type:"u32",length:i.length},{name:"sizes_from_slice_dims_data",type:"u32",length:e.length},{name:"num_slices_per_batch",type:"u32"},{name:"input_batch_stride",type:"u32"},{name:"num_slice_dims",type:"u32"}];return` + ${a.registerUniforms(L).declareVariables(...F)} + ${a.mainStart()} + ${a.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let batch_idx = global_idx / uniforms.num_slices_per_batch; + let base_offset = batch_idx * uniforms.input_batch_stride; + + let slice_indices_base_offset = global_idx * uniforms.num_slice_dims; + var relative_slice_offset = 0; + for (var dim_idx = 0u; dim_idx < uniforms.num_slice_dims; dim_idx ++) { + var index = i32(indices_data[dim_idx + slice_indices_base_offset].x); + let input_dim_idx = uniforms.batch_dims + dim_idx; + if (index < 0) { + ${i.length===1?"index += i32(uniforms.input_dims);":"index += i32(uniforms.input_dims[input_dim_idx]);"} + } + ${e.length===1?"relative_slice_offset += index * i32(uniforms.sizes_from_slice_dims_data);":"relative_slice_offset += index * i32(uniforms.sizes_from_slice_dims_data[dim_idx]);"} + } + + input_slice_offsets_data[global_idx] = base_offset + u32(relative_slice_offset); + }`};return A.compute({name:"computeSliceOffsets",shaderCache:{hint:`${i.length}_${e.length}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:r,dataType:A.inputs[1].dataType}],dispatchGroup:{x:Math.ceil(t/64)},programUniforms:Q}),getShaderSource:B},{inputs:[g],outputs:[-1]})[0]},gw=(A,g)=>{let e=A.inputs,I=e[0].dims,i=e[0].dataType,t=e[1].dims,o=t[t.length-1],C=MA.sizeToDimension(t,t.length-1),s=MA.sizeFromDimension(I,g.batchDims+o),Q=MA.sizeToDimension(I,g.batchDims),r=MA.sizeFromDimension(I,g.batchDims),B=C/Q,a=new Array(o),d=s;for(let w=0;wI.length)throw new Error("last dimension of indices must not be larger than rank of input tensor");let L=t.slice(0,-1).concat(I.slice(F)),u=MA.size(L),h=[{type:12,data:u},{type:12,data:s},...de(e[0].dims,c.dims,L)],R=w=>{let y=kA("data",e[0].dataType,e[0].dims.length),D=kA("slice_offsets",12,c.dims.length),f=ne("output",e[0].dataType,L.length);return` + ${w.registerUniform("output_size","u32").registerUniform("slice_size","u32").declareVariables(y,D,f)} + ${w.mainStart()} + ${w.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let slice_offset = slice_offsets[global_idx / uniforms.slice_size]; + output[global_idx] = data[u32(slice_offset) + global_idx % uniforms.slice_size]; + }`};A.compute({name:"GatherND",shaderCache:{hint:g.cacheKey,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:L,dataType:i}],dispatchGroup:{x:Math.ceil(u/64)},programUniforms:h}),getShaderSource:R},{inputs:[e[0],c]})},Iw=A=>({batchDims:A.batch_dims,cacheKey:""})}),Wc,jc,iw,tw,My=zA(()=>{Me(),ke(),hg(),Le(),Wc=(A,g)=>{if(A.length<3||A.length>4)throw new Error("GatherBlockQuantized requires 3 or 4 inputs.");let e=MA.normalizeAxis(g.quantizeAxis,A[0].dims.length),I=g.blockSize,i=A[0],t=A[2],o=A.length===4?A[3]:void 0;if(t.dims.length!==i.dims.length||!i.dims.map((C,s)=>s===e?Math.ceil(C/I)===t.dims[s]:C===t.dims[s]).reduce((C,s)=>C&&s,!0))throw new Error("Scales must have the same rank as the input tensor and the dims should match except on gatherAxis.");if(o){if(o.dataType!==i.dataType)throw new Error("Zero point must have the same data type as the input tensor.");if(o.dims.length!==t.dims.length||!o.dims.map((C,s)=>C===t.dims[s]).reduce((C,s)=>C&&s,!0))throw new Error("Zero point must have the same rank as the input tensor and the dims should match except on quantizeAxis.")}},jc=(A,g)=>{let e=A[0].dims,I=A[1].dims,i=e.length,t=MA.normalizeAxis(g.gatherAxis,i),o=MA.normalizeAxis(g.quantizeAxis,i),C=e.slice(0);C.splice(t,1,...I);let s=MA.size(C),Q=A[2].dataType,r=A[0].dataType===22,B=[{type:12,data:s},{type:12,data:o},{type:12,data:t},{type:12,data:g.blockSize},...de(...A.map((d,c)=>d.dims),C)],a=d=>{let c=kA("data",A[0].dataType,A[0].dims.length),F=kA("inputIndices",A[1].dataType,A[1].dims.length),L=kA("scales",A[2].dataType,A[2].dims.length),u=A.length>3?kA("zeroPoint",A[3].dataType,A[3].dims.length):void 0,h=ne("output",Q,C.length),R=[c,F,L];u&&R.push(u);let w=[{name:"output_size",type:"u32"},{name:"quantize_axis",type:"u32"},{name:"gather_axis",type:"u32"},{name:"block_size",type:"u32"}];return` + ${d.registerUniforms(w).declareVariables(...R,h)} + ${d.mainStart()} + let output_indices = ${h.offsetToIndices("global_idx")}; + var indices_indices = ${F.type.indices}(0); + ${I.length>1?` + for (var i: u32 = 0; i < ${I.length}; i++) { + let index = ${h.indicesGet("output_indices","uniforms.gather_axis + i")}; + ${F.indicesSet("indices_indices","i","index")}; + }`:`indices_indices = ${h.indicesGet("output_indices","uniforms.gather_axis")};`}; + var data_indices = ${c.type.indices}(0); + for (var i: u32 = 0; i < uniforms.gather_axis; i++) { + let index = ${h.indicesGet("output_indices","i")}; + ${c.indicesSet("data_indices","i","index")}; + } + var index_from_indices = ${F.getByIndices("indices_indices")}; + if (index_from_indices < 0) { + index_from_indices += ${e[t]}; + } + ${c.indicesSet("data_indices","uniforms.gather_axis","u32(index_from_indices)")}; + for (var i = uniforms.gather_axis + 1; i < ${C.length}; i++) { + let index = ${h.indicesGet("output_indices",`i + ${I.length} - 1`)}; + ${c.indicesSet("data_indices","i","index")}; + } + let data_offset = ${c.indicesToOffset("data_indices")}; + let data_index = data_offset % 8; + // Convert 4-bit packed data to 8-bit packed data. + let packed_4bit_quantized_data = ${c.getByOffset("data_offset / 8")}; + let packed_8bit_quantized_data = (packed_4bit_quantized_data >> (4 * (data_index % 2))) & 0x0f0f0f0f; + let quantized_data_vec = ${r?"unpack4xI8":"unpack4xU8"}(u32(packed_8bit_quantized_data)); + let quantized_data = quantized_data_vec[data_index / 2]; + var scale_indices = data_indices; + let quantize_axis_index = ${L.indicesGet("data_indices","uniforms.quantize_axis")} / uniforms.block_size; + ${L.indicesSet("scale_indices","uniforms.quantize_axis","quantize_axis_index")}; + var scale = ${L.getByIndices("scale_indices")}; + ${u?` + let zero_point_indices = scale_indices; + let zero_point_offset = ${u.indicesToOffset("zero_point_indices")}; + let zero_point_index = zero_point_offset % 8; + let packed_4bit_zero_points = ${u.getByOffset("zero_point_offset / 8")}; + let packed_8bit_zero_points = (packed_4bit_zero_points >> (4 * (zero_point_index % 2))) & 0x0f0f0f0f; + let zero_point_vec = ${r?"unpack4xI8":"unpack4xU8"}(u32(packed_8bit_zero_points)); + let zero_point = zero_point_vec[zero_point_index / 2];`:"var zero_point = 0"}; + let dequantized_data = ${zg(Q)}(quantized_data - zero_point) * scale; + ${h.setByOffset("global_idx","dequantized_data")}; + }`};return{name:"GatherBlockQuantized",shaderCache:{hint:`${g.cacheKey};${A.filter((d,c)=>c!==1).map(d=>d.dims.join("_")).join(";")}`,inputDependencies:Array.from({length:A.length},(d,c)=>"rank")},getRunData:()=>({outputs:[{dims:C,dataType:Q}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:B}),getShaderSource:a}},iw=(A,g)=>{let e=A.inputs;Wc(e,g),A.compute(jc(A.inputs,g))},tw=A=>Oe({blockSize:A.blockSize,gatherAxis:A.gatherAxis,quantizeAxis:A.quantizeAxis})}),Vc,zc,Cw,ow,Fy=zA(()=>{Me(),ke(),hg(),Le(),Vc=A=>{if(!A||A.length!==2)throw new Error("GatherElements requires 2 inputs.");if(A[0].dims.length<1)throw new Error("GatherElements requires that the data input be rank >= 1.");if(A[0].dims.length!==A[1].dims.length)throw new Error(`GatherElements requires that the data input and + indices input tensors be of same rank.`)},zc=(A,g)=>{let e=A[0].dims,I=A[0].dataType,i=e.length,t=A[1].dims,o=A[1].dataType,C=MA.normalizeAxis(g.axis,i),s=e[C],Q=t.slice(0),r=MA.size(Q),B=kA("input",I,i),a=kA("indicesInput",o,t.length),d=ne("output",I,Q.length),c=[{type:12,data:r},{type:6,data:s},{type:12,data:C}];return c.push(...de(e,t,Q)),{name:"GatherElements",shaderCache:{inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:Q,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(r/64)},programUniforms:c}),getShaderSource:F=>` + ${F.registerUniform("outputSize","u32").registerUniform("axisDimLimit","i32").registerUniform("axis","u32").declareVariables(B,a,d)} + ${F.mainStart()} + ${F.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + + let outputIndices = ${d.offsetToIndices("global_idx")}; + + var idx = ${a.getByOffset("global_idx")}; + if (idx < 0) { + idx = idx + uniforms.axisDimLimit; + } + var inputIndices = ${B.type.indices}(outputIndices); + ${B.indicesSet("inputIndices","uniforms.axis","u32(idx)")}; + let value = ${B.getByIndices("inputIndices")}; + + ${d.setByOffset("global_idx","value")}; + }`}},Cw=A=>Oe({axis:A.axis}),ow=(A,g)=>{let e=A.inputs;Vc(e),A.compute(zc(A.inputs,g))}}),$c,Xc,sw,Bw,Sy=zA(()=>{Me(),ke(),Le(),$c=A=>{if(!A)throw new Error("Input is missing");if(A.length<2||A.length>3)throw new Error("Invaid input number.");if(A.length===3&&A[2].dims.length>2)throw new Error("Invalid input shape of C");if(A[0].dataType!==A[1].dataType||A.length===3&&A[0].dataType!==A[2].dataType)throw new Error("Input types are mismatched")},Xc=(A,g)=>{let e=A[0].dims.slice(),I=A[1].dims.slice(),[i,t,o]=CD.getShapeOfGemmResult(e,g.transA,I,g.transB,A.length===3?A[2].dims:void 0),C=[i,t];if(!C)throw new Error("Can't use gemm on the given tensors");let s=16,Q=Math.ceil(t/s),r=Math.ceil(i/s),B=!0,a=MA.size(C),d=[{type:12,data:B?Q:a},{type:12,data:i},{type:12,data:t},{type:12,data:o},{type:1,data:g.alpha},{type:1,data:g.beta}],c=["type","type"];A.length===3&&(d.push(...de(A[2].dims)),c.push("rank")),d.push(...de(C));let F=u=>{let h="";g.transA&&g.transB?h="value += a[k * uniforms.M + m] * b[n * uniforms.K + k];":g.transA&&!g.transB?h="value += a[k * uniforms.M + m] * b[k * uniforms.N + n];":!g.transA&&g.transB?h="value += a[m * uniforms.K + k] * b[n * uniforms.K + k];":!g.transA&&!g.transB&&(h="value += a[m * uniforms.K + k] * b[k * uniforms.N + n];");let R=g.alpha===1?"":"value *= uniforms.alpha;",w=kA("a",A[0].dataType,A[0].dims),y=kA("b",A[1].dataType,A[1].dims),D=w.type.value,f=null,G=[w,y];A.length===3&&(f=kA("c",A[2].dataType,A[2].dims.length),G.push(f));let J=ne("output",A[0].dataType,C.length);G.push(J);let T=[{name:"output_size",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"},{name:"alpha",type:"f32"},{name:"beta",type:"f32"}];return` + ${u.registerUniforms(T).declareVariables(...G)} + + ${u.mainStart()} + ${u.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let m = global_idx / uniforms.N; + let n = global_idx % uniforms.N; + + var value = ${D}(0); + for (var k: u32 = 0u; k < uniforms.K; k++) { + ${h} + } + + ${R} + ${f!=null?`let cOffset = ${f.broadcastedIndicesToOffset("vec2(m, n)",J)}; value += ${D}(uniforms.beta) * ${f.getByOffset("cOffset")};`:""} + output[global_idx] = value; + }`},L=u=>{let h=kA("a",A[0].dataType,A[0].dims),R=kA("b",A[1].dataType,A[1].dims),w=null,y=[h,R];A.length===3&&(w=kA("c",A[2].dataType,A[2].dims.length),y.push(w));let D=ne("output",A[0].dataType,C.length);y.push(D);let f=[{name:"num_tile_n",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"},{name:"alpha",type:"f32"},{name:"beta",type:"f32"}],G="",J="";g.transA&&g.transB?(J=` + var col = tile_row_start + local_id.x; + var row = k_start + local_id.y; + if (col < uniforms.M && row < uniforms.K) { + tile_a[local_id.y][local_id.x] = a[row * uniforms.M + col]; + } else { + tile_a[local_id.y][local_id.x] = ${h.type.value}(0); + } + + col = k_start + local_id.x; + row = tile_col_start + local_id.y; + if (col < uniforms.K && row < uniforms.N) { + tile_b[local_id.y][local_id.x] = b[row * uniforms.K + col]; + } else { + tile_b[local_id.y][local_id.x] = ${R.type.value}(0); + } + `,G="value += tile_a[k][local_id.y] * tile_b[local_id.x][k];"):g.transA&&!g.transB?(J=` + var col = tile_row_start + local_id.x; + var row = k_start + local_id.y; + if (col < uniforms.M && row < uniforms.K) { + tile_a[local_id.y][local_id.x] = a[row * uniforms.M + col]; + } else { + tile_a[local_id.y][local_id.x] = ${h.type.value}(0); + } + + col = tile_col_start + local_id.x; + row = k_start + local_id.y; + if (col < uniforms.N && row < uniforms.K) { + tile_b[local_id.y][local_id.x] = b[row * uniforms.N + col]; + } else { + tile_b[local_id.y][local_id.x] = ${R.type.value}(0); + } + `,G="value += tile_a[k][local_id.y] * tile_b[k][local_id.x];"):!g.transA&&g.transB?(J=` + var col = k_start + local_id.x; + var row = tile_row_start + local_id.y; + if (col < uniforms.K && row < uniforms.M) { + tile_a[local_id.y][local_id.x] = a[row * uniforms.K + col]; + } else { + tile_a[local_id.y][local_id.x] = ${h.type.value}(0); + } + + col = k_start + local_id.x; + row = tile_col_start + local_id.y; + if (col < uniforms.K && row < uniforms.N) { + tile_b[local_id.y][local_id.x] = b[row * uniforms.K + col]; + } else { + tile_b[local_id.y][local_id.x] = ${R.type.value}(0); + } + `,G="value += tile_a[local_id.y][k] * tile_b[local_id.x][k];"):!g.transA&&!g.transB&&(J=` + var col = k_start + local_id.x; + var row = tile_row_start + local_id.y; + if (col < uniforms.K && row < uniforms.M) { + tile_a[local_id.y][local_id.x] = a[row * uniforms.K + col]; + } else { + tile_a[local_id.y][local_id.x] = ${h.type.value}(0); + } + + col = tile_col_start + local_id.x; + row = k_start + local_id.y; + if (col < uniforms.N && row < uniforms.K) { + tile_b[local_id.y][local_id.x] = b[row * uniforms.N + col]; + } else { + tile_b[local_id.y][local_id.x] = ${R.type.value}(0); + } + `,G="value += tile_a[local_id.y][k] * tile_b[k][local_id.x];");let T=g.alpha===1?"":"value *= uniforms.alpha;";return` + ${u.registerUniforms(f).declareVariables(...y)} + var tile_a: array, ${s}>; + var tile_b: array, ${s}>; + ${u.mainStart([s,s,1])} + let tile_col_start = (workgroup_index % uniforms.num_tile_n) * ${s}; + let tile_row_start = (workgroup_index / uniforms.num_tile_n) * ${s}; + let num_tiles = (uniforms.K - 1) / ${s} + 1; + var k_start = 0u; + var value = ${D.type.value}(0); + for (var t: u32 = 0u; t < num_tiles; t++) { + ${J} + k_start = k_start + ${s}; + workgroupBarrier(); + + for (var k: u32 = 0u; k < ${s}; k++) { + ${G} + } + workgroupBarrier(); + } + + ${T} + let m = tile_row_start + local_id.y; + let n = tile_col_start + local_id.x; + ${w!=null?`let cOffset = ${w.broadcastedIndicesToOffset("vec2(m, n)",D)}; value += ${D.type.value}(uniforms.beta) * ${w.getByOffset("cOffset")};`:""} + if (m < uniforms.M && n < uniforms.N) { + output[m * uniforms.N + n] = value; + } + }`};return B?{name:"GemmShared",shaderCache:{hint:`${g.cacheKey}`,inputDependencies:c},getRunData:()=>({outputs:[{dims:C,dataType:A[0].dataType}],dispatchGroup:{x:Q*r},programUniforms:d}),getShaderSource:L}:{name:"Gemm",shaderCache:{hint:`${g.cacheKey}`,inputDependencies:c},getRunData:()=>({outputs:[{dims:C,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:d}),getShaderSource:F}},sw=A=>{let g=A.transA,e=A.transB,I=A.alpha,i=A.beta;return{transA:g,transB:e,alpha:I,beta:i,cacheKey:`${A.transA};${A.transB};${A.alpha===1}`}},Bw=(A,g)=>{$c(A.inputs),A.compute(Xc(A.inputs,g))}}),xI,PI,Ei,ni,Zc,Ad,ed,gd,Id,id,td,Cd,Qw,aw,Ny=zA(()=>{Me(),ke(),hg(),Le(),[xI,PI,Ei,ni]=[0,1,2,3],Zc=A=>{if(A[0].dims.length!==4)throw new Error("only 4-D tensor is supported.");if(A[0].dims.length!==A[1].dims.length)throw new Error("input dimensions must be equal to grid dimensions");if(A[0].dims.length-2!==A[1].dims[A[1].dims.length-1])throw new Error(`last dimension of grid must be equal to ${A[0].dims.length-2}`);if(A[0].dims[0]!==A[1].dims[0])throw new Error("grid batch size must match input batch size")},Ad=` + fn gs_get_cubic_coeffs(x: f32) -> vec4 { + let cubic_alpha = -0.75f; + let x_abs = abs(x); + var coeffs: vec4; + coeffs[0] = (((cubic_alpha * (x_abs + 1) - 5 * cubic_alpha) * (x_abs + 1) + 8 * cubic_alpha) * (x_abs + 1) - 4 * cubic_alpha); + coeffs[1] = (((cubic_alpha + 2) * x_abs - (cubic_alpha + 3)) * x_abs * x_abs + 1); + coeffs[2] = (((cubic_alpha + 2) * (1 - x_abs) - (cubic_alpha + 3)) * (1 - x_abs) * (1 - x_abs) + 1); + coeffs[3] = (((cubic_alpha * (2 - x_abs) - 5 * cubic_alpha) * (2 - x_abs) + 8 * cubic_alpha) * (2 - x_abs) - 4 * cubic_alpha); + return coeffs; + } +`,ed=A=>` + fn gs_bicubic_interpolate(p: mat4x4<${A}>, x: f32, y: f32) -> ${A} { + var v: vec4; + var coeffs = gs_get_cubic_coeffs(x); + for (var i = 0; i < 4; i++) { + v[i] = coeffs[0] * p[i][0] + coeffs[1] * p[i][1] + coeffs[2] * p[i][2] + coeffs[3] * p[i][3]; + } + coeffs = gs_get_cubic_coeffs(y); + let pixel = ${A}(coeffs[0] * v[0] + coeffs[1] * v[1] + coeffs[2] * v[2] + coeffs[3] * v[3]); + return pixel; + } +`,gd=A=>` + fn gs_denormalize(n: f32, length: i32) -> f32 { + ${A.alignCorners===0?` + // alignCorners: false => [-1, 1] to [-0.5, length - 0.5] + return ((n + 1.0) * f32(length) - 1.0) / 2.0; + `:` + // alignCorners: true => [-1, 1] to [0, length - 1] + return (n + 1.0) / 2.0 * (f32(length - 1)); + `} + } +`,Id=A=>` + ${A.paddingMode==="reflection"?` + fn gs_reflect(x: i32, x_min: f32, x_max: f32) -> u32 { + var dx = 0.0; + var fx = f32(x); + let range = x_max - x_min; + if (fx < x_min) { + dx = x_min - fx; + let n = u32(dx / range); + let r = dx - f32(n) * range; + if (n % 2 == 0) { + fx = x_min + r; + } else { + fx = x_max - r; + } + } else if (fx > x_max) { + dx = fx - x_max; + let n = u32(dx / range); + let r = dx - f32(n) * range; + if (n % 2 == 0) { + fx = x_max - r; + } else { + fx = x_min + r; + } + } + return u32(fx); + }`:""} +`,id=(A,g,e)=>` + fn pixel_at_grid(r: i32, c: i32, H: i32, W: i32, batch: u32, channel: u32, border: vec4) -> ${g} { + var pixel = ${g}(0); + var indices = vec4(0); + indices[${xI}] = batch; + indices[${PI}] = channel;`+(()=>{switch(e.paddingMode){case"zeros":return` + if (r >= 0 && r < H && c >=0 && c < W) { + indices[${Ei}] = u32(r); + indices[${ni}] = u32(c); + } else { + return ${g}(0); + } + `;case"border":return` + indices[${Ei}] = u32(clamp(r, 0, H - 1)); + indices[${ni}] = u32(clamp(c, 0, W - 1)); + `;case"reflection":return` + indices[${Ei}] = gs_reflect(r, border[1], border[3]); + indices[${ni}] = gs_reflect(c, border[0], border[2]); + `;default:throw new Error(`padding mode ${e.paddingMode} is not supported`)}})()+` + return ${A.getByIndices("indices")}; + } +`,td=(A,g,e)=>(()=>{switch(e.mode){case"nearest":return` + let result = pixel_at_grid(i32(round(y)), i32(round(x)), H_in, W_in, indices[${xI}], indices[${PI}], border); + `;case"bilinear":return` + let x1 = i32(floor(x)); + let y1 = i32(floor(y)); + let x2 = x1 + 1; + let y2 = y1 + 1; + + let p11 = pixel_at_grid(y1, x1, H_in, W_in, indices[${xI}], indices[${PI}], border); + let p12 = pixel_at_grid(y1, x2, H_in, W_in, indices[${xI}], indices[${PI}], border); + let p21 = pixel_at_grid(y2, x1, H_in, W_in, indices[${xI}], indices[${PI}], border); + let p22 = pixel_at_grid(y2, x2, H_in, W_in, indices[${xI}], indices[${PI}], border); + + let dx2 = ${g}(f32(x2) - x); + let dx1 = ${g}(x - f32(x1)); + let dy2 = ${g}(f32(y2) - y); + let dy1 = ${g}(y - f32(y1)); + let result = dy2 * (dx2 * p11 + dx1 * p12) + dy1 * (dx2 * p21 + dx1 * p22); + `;case"bicubic":return` + let x0 = i32(floor(x)) - 1; + let y0 = i32(floor(y)) - 1; + var p: mat4x4<${g}>; + for (var h = 0; h < 4; h++) { + for (var w = 0; w < 4; w++) { + p[h][w] = pixel_at_grid(h + y0, w + x0, H_in, W_in, indices[${xI}], indices[${PI}], border); + } + } + + let dx = x - f32(x0 + 1); + let dy = y - f32(y0 + 1); + let result = gs_bicubic_interpolate(p, dx, dy); + `;default:throw new Error(`mode ${e.mode} is not supported`)}})()+`${A.setByOffset("global_idx","result")}`,Cd=(A,g)=>{let e=kA("x",A[0].dataType,A[0].dims.length),I=[A[1].dims[0],A[1].dims[1],A[1].dims[2]],i=kA("grid",A[1].dataType,I.length,2),t=[A[0].dims[0],A[0].dims[1],A[1].dims[1],A[1].dims[2]];g.format==="NHWC"&&(t=[A[0].dims[0],A[1].dims[1],A[1].dims[2],A[0].dims[3]],[xI,PI,Ei,ni]=[0,3,1,2]);let o=ne("output",A[0].dataType,t.length),C=e.type.value,s=MA.size(t),Q=[{type:12,data:s},...de(A[0].dims,I,t)],r=B=>` + ${B.registerUniform("output_size","u32").declareVariables(e,i,o)} + ${Ad} + ${ed(C)} + ${gd(g)} + ${Id(g)} + ${id(e,C,g)} + + ${B.mainStart()} + ${B.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let H_in = i32(uniforms.x_shape[${Ei}]); + let W_in = i32(uniforms.x_shape[${ni}]); + + ${g.alignCorners===0?` + let x_min = -0.5; + let x_max = f32(W_in) - 0.5; + let y_min = -0.5; + let y_max = f32(H_in) - 0.5; + `:` + let x_min = 0.0; + let x_max = f32(W_in) - 1.0; + let y_min = 0.0; + let y_max = f32(H_in) - 1.0; + `}; + let border = vec4(x_min, y_min, x_max, y_max); + + let indices = ${o.offsetToIndices("global_idx")}; + var grid_indices = vec3(indices[${xI}], indices[${Ei}], indices[${ni}]); + let nxy = ${i.getByIndices("grid_indices")}; + var x = gs_denormalize(f32(nxy[0]), W_in); + var y = gs_denormalize(f32(nxy[1]), H_in); + + ${td(o,C,g)} + }`;return{name:"GridSample",shaderCache:{hint:`${g.cacheKey}`,inputDependencies:["type","type"]},getRunData:B=>{let a=MA.size(t);return{outputs:[{dims:t,dataType:B[0].dataType}],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:Q}},getShaderSource:r}},Qw=(A,g)=>{Zc(A.inputs),A.compute(Cd(A.inputs,g))},aw=A=>Oe({alignCorners:A.align_corners,mode:A.mode,paddingMode:A.padding_mode,format:A.format})}),AI,od,rw,gB,sd,Ot,Ew,nw=zA(()=>{Me(),ke(),hg(),eQ(),iQ(),Le(),gi(),AI=(A,g)=>A.length>g&&A[g].dims.length>0?A[g]:void 0,od=(A,g)=>{let e=A[0],I=AI(A,1),i=AI(A,2),t=AI(A,3),o=AI(A,4),C=AI(A,5),s=AI(A,6),Q=AI(A,7);if(e.dims.length!==3&&e.dims.length!==5)throw new Error("Input query is expected to have 3 or 5 dimensions");let r=e.dims[0],B=e.dims[1],a=e.dims.length===3?e.dims[2]:g.numHeads*e.dims[4],d=B,c=0,F=0,L=Math.floor(a/g.numHeads);if(s&&Q&&MA.size(s.dims)&&MA.size(Q.dims)){if(s.dims.length!==4)throw new Error('Input "past_key" is expected to have 4 dimensions');if(s.dims[0]!==r||s.dims[1]!==g.numHeads||s.dims[3]!==L)throw new Error('Input "past_key" shape (batch_size, num_heads, past_sequence_length, head_size)');if(Q.dims[0]!==r||Q.dims[1]!==g.numHeads||Q.dims[3]!==L)throw new Error('Input "past_value" shape (batch_size, num_heads, past_sequence_length, head_size)');if(s.dims[2]!==Q.dims[2])throw new Error('Input "past_key" and "past_value" shall have same dim 2 (past_sequence_length)');if(Q.dims.length!==4)throw new Error('Input "past_value" is expected to have 4 dimensions');c=s.dims[2],F=s.dims[2]}else if(s&&MA.size(s.dims)||Q&&MA.size(Q.dims))throw new Error('Input "past_key" and "past_value" shall be both present or both absent');let u;if(I&&MA.size(I.dims)>0){if(e.dims.length!==3)throw new Error('Input "query" is expected to have 3 dimensions when key is given');if(I.dims.length<3||I.dims.length>5)throw new Error('Input "key" is expected to have 3, 4, or 5 dimensions');if(e.dims[0]!==I.dims[0])throw new Error('Input "query" and "key" shall have same dim 0 (batch size)');if(I.dims.length===3){if(I.dims[2]!==e.dims[2])throw new Error('Input "query" and "key" shall have same dim 2 (hidden_size)');u=2,d=I.dims[1]}else if(I.dims.length===5){if(I.dims[2]!==g.numHeads||I.dims[3]!==2||I.dims[4]!==L)throw new Error('Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv');if(i)throw new Error('Expect "value" be none when "key" has packed kv format.');u=5,d=I.dims[1]}else{if(I.dims[1]!==g.numHeads||I.dims[3]!==L)throw new Error('Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key');u=0,d=I.dims[2]}}else{if(e.dims.length!==5)throw new Error('Input "query" is expected to have 5 dimensions when key is empty');if(e.dims[2]!==g.numHeads||e.dims[3]!==3)throw new Error('Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv');u=3}if(t&&MA.size(t.dims)>0){if(t.dims.length!==1)throw new Error('Input "bias" is expected to have 1 dimension');if(I&&I.dims.length===5&&I.dims[3]===2)throw new Error("bias is not allowed for packed kv.")}let h=c+d,R=0;if(o&&MA.size(o.dims)>0){R=8;let f=o.dims;throw f.length===1?f[0]===r?R=1:f[0]===3*r+2&&(R=3):f.length===2&&f[0]===r&&f[1]===h&&(R=5),R===8?new Error('Input "key_padding_mask" shape shall be (batch_size) or (batch_size, total_sequence_length)'):new Error("Mask not supported")}let w=!1,y=a;if(i&&MA.size(i.dims)>0){if(i.dims.length!==3&&i.dims.length!==4)throw new Error('Input "value" is expected to have 3 or 4 dimensions');if(e.dims[0]!==i.dims[0])throw new Error('Input "query" and "value" shall have same dim 0 (batch_size)');if(i.dims.length===3){if(d!==i.dims[1])throw new Error('Input "key" and "value" shall have the same dim 1 (kv_sequence_length)');y=i.dims[2]}else{if(d!==i.dims[2])throw new Error('Input "key" and "value" shall have the same dim 2 (kv_sequence_length)');y=i.dims[1]*i.dims[3],w=!0}}let D=!1;if(o&&MA.size(o.dims)>0)throw new Error("Key padding mask is not supported");if(C&&MA.size(C.dims)>0){if(C.dims.length!==4)throw new Error('Input "attention_bias" is expected to have 4 dimensions');if(C.dims[0]!==r||C.dims[1]!==g.numHeads||C.dims[2]!==B||C.dims[3]!==h)throw new Error('Expect "attention_bias" shape (batch_size, num_heads, sequence_length, total_sequence_length)')}return{batchSize:r,sequenceLength:B,pastSequenceLength:c,kvSequenceLength:d,totalSequenceLength:h,maxSequenceLength:F,inputHiddenSize:0,hiddenSize:a,vHiddenSize:y,headSize:L,vHeadSize:Math.floor(y/g.numHeads),numHeads:g.numHeads,isUnidirectional:!1,pastPresentShareBuffer:!1,maskFilterValue:g.maskFilterValue,maskType:R,scale:g.scale,broadcastResPosBias:D,passPastInKv:w,qkvFormat:u}},rw=A=>Oe({...A}),gB=Oe({perm:[0,2,1,3]}),sd=(A,g,e,I,i,t,o)=>{let C=[I,i,t],s=MA.size(C),Q=[{type:12,data:s},{type:12,data:o},{type:12,data:t}],r=B=>{let a=ne("qkv_with_bias",g.dataType,C),d=kA("qkv",g.dataType,C),c=kA("bias",e.dataType,C),F=[{name:"output_size",type:"u32"},{name:"bias_offset",type:"u32"},{name:"hidden_size",type:"u32"}];return` + ${B.registerUniforms(F).declareVariables(d,c,a)} + ${B.mainStart()} + ${B.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let bias_offset_idx = (global_idx % uniforms.hidden_size) + uniforms.bias_offset; + + qkv_with_bias[global_idx] = qkv[global_idx] + bias[bias_offset_idx]; + }`};return A.compute({name:"MultiHeadAttentionAddBias",shaderCache:{inputDependencies:["type","type"]},getRunData:()=>({outputs:[{dims:C,dataType:g.dataType,gpuDataType:0}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:Q}),getShaderSource:r},{inputs:[g,e],outputs:[-1]})[0]},Ot=(A,g,e,I,i,t,o,C)=>{let s=t;if(o&&MA.size(o.dims)>0){if(I===1)throw new Error("AddBiasReshape is not implemented. Please export your model with packed QKV or KV");return s=sd(A,t,o,g,I,e*i,C),s=s.reshape([g,I,e,i]),e===1||I===1?s:A.compute(aI(s,gB.perm),{inputs:[s],outputs:[-1]})[0]}else return t.dims.length===3&&(s=t.reshape([g,I,e,i])),e===1||I===1?s:A.compute(aI(s,gB.perm),{inputs:[s],outputs:[-1]})[0]},Ew=(A,g)=>{let e=od(A.inputs,g),I=A.inputs[0],i=AI(A.inputs,1),t=AI(A.inputs,2),o=AI(A.inputs,3),C=AI(A.inputs,4),s=AI(A.inputs,5),Q=AI(A.inputs,6),r=AI(A.inputs,7);if(I.dims.length===5)throw new Error("Packed QKV is not implemented");if(i?.dims.length===5)throw new Error("Packed KV is not implemented");let B=i&&t&&i.dims.length===4&&t.dims.length===4,a=Ot(A,e.batchSize,e.numHeads,e.sequenceLength,e.headSize,I,o,0);if(B)return zt(A,a,i,t,C,void 0,Q,r,s,e);if(!i||!t)throw new Error("key and value must be provided");let d=Ot(A,e.batchSize,e.numHeads,e.kvSequenceLength,e.headSize,i,o,e.hiddenSize),c=Ot(A,e.batchSize,e.numHeads,e.kvSequenceLength,e.vHeadSize,t,o,2*e.hiddenSize);zt(A,a,d,c,C,void 0,Q,r,s,e)}}),Bd,Qd,ad,rd,xB,lw,cw,dw=zA(()=>{Me(),ke(),hg(),Le(),Bd=A=>{if(!A||A.length<1)throw new Error("too few inputs")},Qd=(A,g)=>{let e=[],I=g.numOutputs;return A[1].dims[0]>0&&(A[1].getBigInt64Array().forEach(i=>e.push(Number(i))),I=e.length),Oe({numOutputs:I,axis:g.axis,splitSizes:e})},ad=A=>` +fn calculateOutputIndex(index: u32) -> u32 { + for (var i: u32 = 0u; i < ${A}u; i += 1u ) { + if (index < ${ce("uniforms.size_in_split_axis","i",A)}) { + return i; + } + } + return ${A}u; +}`,rd=A=>{let g=A.length,e=[];for(let I=0;I{let e=A[0].dims,I=MA.size(e),i=A[0].dataType,t=MA.normalizeAxis(g.axis,e.length),o=new Array(g.numOutputs),C=kA("input",i,e.length),s=new Array(g.numOutputs),Q=[],r=[],B=0,a=[{type:12,data:I}];for(let c=0;c` + ${c.registerUniform("input_size","u32").registerUniform("size_in_split_axis","u32",s.length).declareVariables(C,...o)} + ${ad(s.length)} + ${rd(o)} + + ${c.mainStart()} + ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.input_size")} + + var indices = ${C.offsetToIndices("global_idx")}; + var index = ${C.indicesGet("indices",t)}; + let output_number = calculateOutputIndex(index); + if (output_number != 0) { + index -= ${ce("uniforms.size_in_split_axis","output_number - 1u",s.length)}; + ${C.indicesSet("indices",t,"index")}; + } + writeBufferData(output_number, indices, global_idx); + }`;return{name:"Split",shaderCache:{hint:g.cacheKey,inputDependencies:["rank"]},getShaderSource:d,getRunData:()=>({outputs:Q,dispatchGroup:{x:Math.ceil(I/64)},programUniforms:a})}},lw=(A,g)=>{Bd(A.inputs);let e=A.inputs.length===1?g:Qd(A.inputs,g);A.compute(xB(A.inputs,e),{inputs:[0]})},cw=A=>{let g=A.axis,e=A.splitSizes,I=A.numOutputs<0?e.length:A.numOutputs;if(I!==e.length)throw new Error("numOutputs and splitSizes lengh must be equal");return Oe({axis:g,numOutputs:I,splitSizes:e})}}),Ed,oo,hw,Dw=zA(()=>{Me(),ke(),hg(),Le(),Ed=(A,g)=>{let[e,I,i,t]=A,{numHeads:o,rotaryEmbeddingDim:C}=g;if(e.dims.length!==3&&e.dims.length!==4)throw new Error(`Input 'x' is expected to have 3 or 4 dimensions, got ${e.dims.length}`);if(!MA.areEqual(I.dims,[])&&!MA.areEqual(I.dims,[1])&&I.dims.length!==2)throw new Error(`Input 'position_ids' is expected to have 0, 1, or 2 dimensions, got ${I.dims.length}`);if(i.dims.length!==2)throw new Error(`Input 'cos_cache' is expected to have 2 dimensions, got ${i.dims.length}`);if(t.dims.length!==2)throw new Error(`Input 'sin_cache' is expected to have 2 dimensions, got ${t.dims.length}`);if(!MA.areEqual(i.dims,t.dims))throw new Error("Inputs 'cos_cache' and 'sin_cache' are expected to have the same shape");if(C>0&&o===0)throw new Error("num_heads must be provided if rotary_embedding_dim is specified");let s=e.dims[0],Q=e.dims[e.dims.length-2],r=i.dims[0],B=MA.sizeFromDimension(e.dims,1)/Q,a=C===0?i.dims[1]*2:B/o;if(C>a)throw new Error("rotary_embedding_dim must be less than or equal to head_size");if(I.dims.length===2){if(s!==I.dims[0])throw new Error(`Input 'position_ids' dimension 0 should be of size batch_size, got ${I.dims[0]}`);if(Q!==I.dims[1])throw new Error(`Input 'position_ids' dimension 1 should be of size sequence_length, got ${I.dims[1]}`)}if(a/2!==i.dims[1]&&C/2!==i.dims[1])throw new Error(`Input 'cos_cache' dimension 1 should be same as head_size / 2 or rotary_embedding_dim / 2, got ${i.dims[1]}`);if(Q>r)throw new Error("Updating cos_cache and sin_cache in RotaryEmbedding is not currently supported")},oo=(A,g)=>{let{interleaved:e,numHeads:I,rotaryEmbeddingDim:i,scale:t}=g,o=A[0].dims[0],C=MA.sizeFromDimension(A[0].dims,1),s=A[0].dims[A[0].dims.length-2],Q=C/s,r=A[2].dims[1],B=i===0?r*2:Q/I,a=new Array(o,s,Q/B,B-r),d=MA.computeStrides(a),c=[{type:1,data:t},{type:12,data:a},{type:12,data:d},...A[0].dims.length===3?new Array({type:12,data:[C,Q,B,1]}):[],...A[0].dims.length===4?new Array({type:12,data:[C,B,s*B,1]}):[],...de(A[0].dims,A[1].dims,A[2].dims,A[3].dims,A[0].dims)],F=L=>{let u=kA("input",A[0].dataType,A[0].dims.length),h=kA("position_ids",A[1].dataType,A[1].dims.length),R=kA("cos_cache",A[2].dataType,A[2].dims.length),w=kA("sin_cache",A[3].dataType,A[3].dims.length),y=ne("output",A[0].dataType,A[0].dims.length);return L.registerUniforms([{name:"scale",type:"f32"},{name:"global_shape",type:"u32",length:a.length},{name:"global_strides",type:"u32",length:d.length},{name:"input_output_strides",type:"u32",length:d.length}]),` + ${L.declareVariables(u,h,R,w,y)} + + ${L.mainStart(gt)} + let half_rotary_emb_dim = uniforms.${R.name}_shape[1]; + let bsnh = global_idx / uniforms.global_strides % uniforms.global_shape; + let size = uniforms.global_shape[0] * uniforms.global_strides[0]; + ${L.guardAgainstOutOfBoundsWorkgroupSizes("size")} + + if (bsnh[3] < half_rotary_emb_dim) { + let position_ids_idx = + ${h.broadcastedIndicesToOffset("bsnh.xy",ne("",h.type.tensor,2))}; + let position_id = + u32(${h.getByOffset("position_ids_idx")}) + select(0, bsnh[1], position_ids_idx == 0); + let i = dot(bsnh, uniforms.input_output_strides) + select(0, bsnh[3], ${e}); + let j = i + select(half_rotary_emb_dim, 1, ${e}); + let re = ${u.getByOffset("i")} * ${R.get("position_id","bsnh[3]")} - + ${u.getByOffset("j")} * ${w.get("position_id","bsnh[3]")}; + ${y.setByOffset("i","re")} + let im = ${u.getByOffset("i")} * ${w.get("position_id","bsnh[3]")} + + ${u.getByOffset("j")} * ${R.get("position_id","bsnh[3]")}; + ${y.setByOffset("j","im")} + } else { + let k = dot(bsnh, uniforms.input_output_strides) + half_rotary_emb_dim; + ${y.setByOffset("k",u.getByOffset("k"))} + } + }`};return{name:"RotaryEmbedding",shaderCache:{hint:Oe({interleaved:e}).cacheKey,inputDependencies:["rank","rank","rank","rank"]},getShaderSource:F,getRunData:()=>({outputs:[{dims:A[0].dims,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(MA.size(a)/gt)},programUniforms:c})}},hw=(A,g)=>{Ed(A.inputs,g),A.compute(oo(A.inputs,g))}}),nd,ld,IB,cd,uw,Ry=zA(()=>{hg(),Me(),iQ(),nw(),dw(),gi(),Dw(),Le(),nd=(A,g)=>{if(g.doRotary&&A.length<=7)throw new Error("cos_cache and sin_cache inputs are required if do_rotary is specified");let e=A[0],I=A[1],i=A[2],t=A[3],o=A[4];if(g.doRotary!==0&&A.length<=7)throw new Error("cos_cast and sin_cache are expected if do_rotary attribute is non-zero");if(g.localWindowSize!==-1)throw new Error("Local attention is not supported");if(g.softcap!==0)throw new Error("Softcap is not supported");if(g.rotaryInterleaved!==0)throw new Error("Rotary interleaved is not supported");if(g.smoothSoftmax)throw new Error("Smooth softmax is not supported");if(e.dims.length!==3&&e.dims.length!==5)throw new Error("Input query is expected to have 3 or 5 dimensions");let C=!1,s=e.dims[0],Q=e.dims[1],r=e.dims.length===3?C?e.dims[2]/3:e.dims[2]:g.numHeads*e.dims[4],B=Q,a=0,d=!I||I.dims.length===0,c=Math.floor(d?r/(g.numHeads+2*g.kvNumHeads):r/g.numHeads);d&&(r=c*g.numHeads);let F=t&&t.dims.length!==0,L=o&&o.dims.length!==0;if(F&&t.dims.length===4&&t.dims[0]===s&&t.dims[1]!==g.kvNumHeads&&t.dims[2]===g.kvNumHeads&&t.dims[3]===c)throw new Error("BSNH pastKey/pastValue is not supported");if(F&&L){if(t.dims.length!==4)throw new Error('Input "past_key" is expected to have 4 dimensions');if(o.dims.length!==4)throw new Error('Input "past_value" is expected to have 4 dimensions');a=t.dims[2]}else if(F||L)throw new Error('Input "past_key" and "past_value" shall be both present or both absent');let u=1;if(I&&I.dims.length>0){if(e.dims.length!==3)throw new Error('Input "query" is expected to have 3 dimensions when key is given');if(I.dims.length<3||I.dims.length>5)throw new Error('Input "key" is expected to have 3, 4, or 5 dimensions');if(e.dims[0]!==I.dims[0])throw new Error('Input "query" and "key" shall have same dim 0 (batch size)');if(I.dims.length===3){if(e.dims[2]%I.dims[2]!==0)throw new Error('Dimension 2 of "query" should be a multiple of "key"');B=I.dims[1]}else if(I.dims.length===5){if(I.dims[2]!==g.numHeads||I.dims[3]!==2||I.dims[4]!==c)throw new Error('Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv');if(i)throw new Error('Expect "value" be none when "key" has packed kv format.');B=I.dims[1]}else{if(I.dims[1]!==g.numHeads||I.dims[3]!==c)throw new Error('Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key');B=I.dims[2]}}else{if(e.dims.length!==3&&e.dims.length!==5)throw new Error('Input "query" is expected to have 3 or 5 dimensions when key is empty');if(e.dims.length===5&&(e.dims[2]!==g.numHeads||e.dims[3]!==3))throw new Error('Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv');u=3}let h=0,R=!1,w=g.kvNumHeads?c*g.kvNumHeads:r;if(i&&i.dims.length>0){if(i.dims.length!==3&&i.dims.length!==4)throw new Error('Input "value" is expected to have 3 or 4 dimensions');if(e.dims[0]!==i.dims[0])throw new Error('Input "query" and "value" shall have same dim 0 (batch_size)');if(i.dims.length===3){if(B!==i.dims[1])throw new Error('Input "key" and "value" shall have the same dim 1 (kv_sequence_length)');w=i.dims[2]}else{if(B!==i.dims[2])throw new Error('Input "past_key" and "past_value" shall have the same dim 2 (kv_sequence_length)');w=i.dims[1]*i.dims[3],R=!0}}let y=A.length>4?A[5]:void 0;if(y&&y.dims.length!==1&&y.dims[0]!==s)throw new Error('Input "seqlens" is expected to have 1 dimension and the same dim 0 as batch_size');return{batchSize:s,sequenceLength:Q,pastSequenceLength:a,kvSequenceLength:B,totalSequenceLength:-1,maxSequenceLength:-1,inputHiddenSize:0,hiddenSize:r,vHiddenSize:w,headSize:c,vHeadSize:Math.floor(w/g.kvNumHeads),numHeads:g.numHeads,kvNumHeads:g.kvNumHeads,nReps:g.numHeads/g.kvNumHeads,pastPresentShareBuffer:!1,maskType:h,scale:g.scale,broadcastResPosBias:!1,passPastInKv:R,qkvFormat:u}},ld=Oe({perm:[0,2,1,3]}),IB=(A,g,e)=>{let I=g,i=e.kvNumHeads;return g.dims.length===3&&e.kvSequenceLength!==0&&(I=g.reshape([e.batchSize,e.kvSequenceLength,i,e.headSize]),I=A.compute(aI(I,ld.perm),{inputs:[I],outputs:[-1]})[0]),I},cd=(A,g,e,I)=>{let i=7,t=["type","type"],o=[A*g],C=A*g,s=[{type:12,data:C},{type:12,data:g},{type:12,data:A}],Q=r=>{let B=kA("seq_lens",e.dataType,e.dims),a=kA("total_seq_lens",I.dataType,I.dims),d=ne("pos_ids",i,o),c=[{name:"output_size",type:"u32"},{name:"sequence_length",type:"u32"},{name:"batch_size",type:"u32"}];return` + ${r.registerUniforms(c).declareVariables(B,a,d)} + ${r.mainStart()} + ${r.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let total_sequence_length = u32(${a.getByOffset("0")}); + let is_subsequent_prompt = uniforms.sequence_length > 1 && uniforms.sequence_length != total_sequence_length; + let is_first_prompt = !is_subsequent_prompt && uniforms.sequence_length == total_sequence_length; + let batch_idx = global_idx / uniforms.sequence_length; + let sequence_idx = i32(global_idx % uniforms.sequence_length); + var pos_id: i32 = 0; + let seqlen = ${B.getByOffset("batch_idx")}; + let total_seqlen = seqlen + 1; + if (is_first_prompt) { + if (sequence_idx < total_seqlen) { + pos_id = sequence_idx; + } else { + pos_id = 1; + } + ${d.setByOffset("global_idx","pos_id")} + } else if (is_subsequent_prompt) { + let past_seqlen = total_seqlen - i32(uniforms.sequence_length); + if (past_seqlen + sequence_idx < total_seqlen) { + pos_id = past_seqlen + sequence_idx; + } else { + pos_id = 1; + } + ${d.setByOffset("global_idx","pos_id")} + } else if (global_idx < uniforms.batch_size) { + ${d.setByOffset("global_idx","seqlen")} + }; + } + `};return{name:"GeneratePositionIds",shaderCache:{hint:`${A};${g}`,inputDependencies:t},getRunData:()=>({outputs:[{dims:o,dataType:i}],dispatchGroup:{x:Math.ceil(C/64)},programUniforms:s}),getShaderSource:Q}},uw=(A,g)=>{let e=nd(A.inputs,g);if(A.inputs[0].dims.length===5)throw new Error("Packed QKV is not implemented");if(A.inputs[1]?.dims.length===5)throw new Error("Packed KV is not implemented");let I=A.inputs[0],i=A.inputs[1]&&A.inputs[1].dims.length>0?A.inputs[1]:void 0,t=A.inputs[2]&&A.inputs[2].dims.length>0?A.inputs[2]:void 0,o=A.inputs[3]&&A.inputs[3].dims.length!==0?A.inputs[3]:void 0,C=A.inputs[4]&&A.inputs[4].dims.length!==0?A.inputs[4]:void 0,s=A.inputs.length>4?A.inputs[5]:void 0,Q=A.inputs.length>5?A.inputs[6]:void 0,r=e.kvNumHeads?e.kvNumHeads:e.numHeads,B=Oe({axis:2,numOutputs:3,splitSizes:[e.numHeads*e.headSize,r*e.headSize,r*e.headSize]}),[a,d,c]=!i&&!t?A.compute(xB([I],B),{inputs:[I],outputs:[-1,-1,-1]}):[I,i,t],F,L;if(g.doRotary){let w=A.compute(cd(e.batchSize,e.sequenceLength,s,Q),{inputs:[s,Q],outputs:[-1]})[0],y=A.inputs[7],D=A.inputs[8],f=Oe({interleaved:g.rotaryInterleaved!==0,numHeads:e.numHeads,rotaryEmbeddingDim:0,scale:g.scale}),G=[a,w,y,D],J=[-1];F=A.compute(oo(G,f),{inputs:G,outputs:J})[0],G.splice(0,1,d);let T=Oe({interleaved:g.rotaryInterleaved!==0,numHeads:e.kvNumHeads,rotaryEmbeddingDim:0,scale:g.scale});L=A.compute(oo(G,T),{inputs:G,outputs:J})[0]}let u=Ot(A,e.batchSize,e.numHeads,e.sequenceLength,e.headSize,g.doRotary?F:a,void 0,0),h=IB(A,g.doRotary?L:d,e),R=IB(A,c,e);zt(A,u,h,R,void 0,void 0,o,C,void 0,e,s,Q)}}),iB,dd,hd,ww,Gy=zA(()=>{Me(),ke(),gi(),Le(),iB=(A,g,e,I,i,t,o,C)=>{let s=cg(t),Q=s===1?"f32":`vec${s}f`,r=s===1?"vec2f":`mat2x${s}f`,B=i*o,a=64;B===1&&(a=256);let d=[i,o,t/s],c=[i,o,2],F=["rank","type","type"],L=[];L.push(...de(d,c));let u=h=>{let R=kA("x",g.dataType,3,s),w=kA("scale",e.dataType,e.dims),y=kA("bias",I.dataType,I.dims),D=ne("output",1,3,2),f=[R,w,y,D];return` + var workgroup_shared : array<${r}, ${a}>; + const workgroup_size = ${a}u; + ${h.declareVariables(...f)} + ${h.mainStart(a)} + let batch = workgroup_index / uniforms.x_shape[1]; + let channel = workgroup_index % uniforms.x_shape[1]; + let hight = uniforms.x_shape[2]; + // initialize workgroup memory + var sum = ${Q}(0); + var squared_sum = ${Q}(0); + for (var h = local_idx; h < hight; h += workgroup_size) { + let value = ${Q}(${R.get("batch","channel","h")}); + sum += value; + squared_sum += value * value; + } + workgroup_shared[local_idx] = ${r}(sum, squared_sum); + workgroupBarrier(); + + for (var currSize = workgroup_size >> 1; currSize > 0; currSize = currSize >> 1) { + if (local_idx < currSize) { + workgroup_shared[local_idx] = workgroup_shared[local_idx] + workgroup_shared[local_idx + currSize]; + } + workgroupBarrier(); + } + if (local_idx == 0) { + let sum_final = ${ei("workgroup_shared[0][0]",s)} / f32(hight * ${s}); + let squared_sum_final = ${ei("workgroup_shared[0][1]",s)} / f32(hight * ${s}); + + let inv_std_dev = inverseSqrt(squared_sum_final - sum_final * sum_final + f32(${C})); + let channel_scale = inv_std_dev * f32(scale[channel]); + let channel_shift = f32(bias[channel]) - sum_final * channel_scale; + output[workgroup_index] = vec2f(channel_scale, channel_shift); + } + }`};return A.compute({name:"InstanceNormComputeChannelScaleShift",shaderCache:{hint:`${s};${C};${a}`,inputDependencies:F},getRunData:()=>({outputs:[{dims:c,dataType:1}],dispatchGroup:{x:B},programUniforms:L}),getShaderSource:u},{inputs:[g,e,I],outputs:[-1]})[0]},dd=(A,g,e)=>{let I=g[0].dims,i=I,t=2,o=I[0],C=I[1],s=MA.sizeFromDimension(I,t),Q=cg(s),r=MA.size(i)/Q,B=iB(A,g[0],g[1],g[2],o,s,C,e.epsilon),a=[o,C,s/Q],d=[o,C],c=["type","none"],F=L=>{let u=kA("x",g[0].dataType,a.length,Q),h=kA("scale_shift",1,d.length,2),R=ne("output",g[0].dataType,a.length,Q),w=[u,h,R];return` + ${L.registerUniform("output_size","u32").declareVariables(...w)} + ${L.mainStart()} + ${L.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let outputIndices = ${R.offsetToIndices("global_idx")}; + let batch = outputIndices[0]; + let channel = outputIndices[1]; + let scale_shift = ${h.getByIndices("vec2(batch, channel)")}; + let value = ${u.getByOffset("global_idx")} * ${R.type.value}(scale_shift.x) + ${R.type.value}(scale_shift.y); + ${R.setByOffset("global_idx","value")}; + }`};A.compute({name:"InstanceNormalization",shaderCache:{hint:`${Q}`,inputDependencies:c},getRunData:()=>({outputs:[{dims:i,dataType:g[0].dataType}],dispatchGroup:{x:Math.ceil(r/64)},programUniforms:[{type:12,data:r},...de(a,d,a)]}),getShaderSource:F},{inputs:[g[0],B]})},hd=(A,g,e)=>{let I=g[0].dims,i=I,t=I[0],o=I[I.length-1],C=MA.sizeFromDimension(I,1)/o,s=cg(o),Q=MA.size(i)/s,r=[{type:12,data:C},{type:12,data:Math.floor(o/s)}],B=["type","type"],a=!1,d=[0,I.length-1];for(let u=0;uI[d[h]])),F=iB(A,c,g[1],g[2],t,C,o,e.epsilon),L=u=>{let h=Yg(g[0].dataType),R=s===1?"vec2f":`mat${s}x2f`,w=f=>{let G=f===0?"x":"y",J=s===1?"f32":`vec${s}f`;switch(s){case 1:return`${h}(${J}(scale.${G}))`;case 2:return`vec2<${h}>(${J}(scale[0].${G}, scale[1].${G}))`;case 4:return`vec4<${h}>(${J}(scale[0].${G}, scale[1].${G}, scale[2].${G}, scale[3].${G}))`;default:throw new Error(`Not supported compoents ${s}`)}},y=kA("input",g[0].dataType,g[0].dims,s),D=ne("output",g[0].dataType,i,s);return` + @group(0) @binding(0) var input : array<${y.type.storage}>; + @group(0) @binding(1) var scale_input : array<${R}>; + @group(0) @binding(2) var output : array<${D.type.storage}>; + struct Uniforms {H: u32, C : u32}; + @group(0) @binding(3) var uniforms: Uniforms; + + ${u.mainStart()} + let current_image_number = global_idx / (uniforms.C * uniforms.H); + let current_channel_number = global_idx % uniforms.C; + + let scale_offset = current_image_number * uniforms.C + current_channel_number; + let scale = scale_input[scale_offset]; + output[global_idx] = fma(input[global_idx], ${w(0)}, ${w(1)}); + }`};A.compute({name:"InstanceNormalizationNHWC",shaderCache:{hint:`${s}`,inputDependencies:B},getRunData:()=>({outputs:[{dims:i,dataType:g[0].dataType}],dispatchGroup:{x:Math.ceil(Q/64)},programUniforms:r}),getShaderSource:L},{inputs:[g[0],F]})},ww=(A,g)=>{g.format==="NHWC"?hd(A,A.inputs,g):dd(A,A.inputs,g)}}),Dd,ud,pw,_y=zA(()=>{Me(),ke(),Le(),Dd=A=>{if(!A||A.length<2)throw new Error("layerNorm requires at least 2 inputs.")},ud=(A,g,e)=>{let I=g.simplified,i=A[0].dims,t=A[1],o=!I&&A[2],C=i,s=MA.normalizeAxis(g.axis,i.length),Q=MA.sizeToDimension(i,s),r=MA.sizeFromDimension(i,s),B=MA.size(t.dims),a=o?MA.size(o.dims):0;if(B!==r||o&&a!==r)throw new Error(`Size of X.shape()[axis:] == ${r}. + Size of scale and bias (if provided) must match this. + Got scale size of ${B} and bias size of ${a}`);let d=[];for(let y=0;y1,h=e>2,R=y=>{let D=Yg(A[0].dataType),f=[kA("x",A[0].dataType,A[0].dims,c),kA("scale",t.dataType,t.dims,c)];o&&f.push(kA("bias",o.dataType,o.dims,c)),f.push(ne("output",A[0].dataType,C,c)),u&&f.push(ne("mean_data_output",1,d)),h&&f.push(ne("inv_std_output",1,d));let G=[{name:"norm_count",type:"u32"},{name:"norm_size",type:"f32"},{name:"norm_size_vectorized",type:"u32"},{name:"epsilon",type:"f32"}];return` + ${y.registerUniforms(G).declareVariables(...f)} + ${y.mainStart()} + ${y.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.norm_count")} + let offset = global_idx * uniforms.norm_size_vectorized; + var mean_vector = ${RB("f32",c)}; + var mean_square_vector = ${RB("f32",c)}; + + for (var h: u32 = 0u; h < uniforms.norm_size_vectorized; h++) { + let value = ${At(D,c,"x[h + offset]")}; + mean_vector += value; + mean_square_vector += value * value; + } + let mean = ${ei("mean_vector",c)} / uniforms.norm_size; + let inv_std_dev = inverseSqrt(${ei("mean_square_vector",c)} / uniforms.norm_size ${I?"":"- mean * mean"} + uniforms.epsilon); + + for (var j: u32 = 0; j < uniforms.norm_size_vectorized; j++) { + let f32input = ${At(D,c,"x[j + offset]")}; + let f32scale = ${At(D,c,"scale[j]")}; + output[j + offset] = ${f[0].type.value}((f32input ${I?"":"- mean"}) * inv_std_dev * f32scale + ${o?`+ ${At(D,c,"bias[j]")}`:""} + ); + } + + ${u?"mean_data_output[global_idx] = mean":""}; + ${h?"inv_std_output[global_idx] = inv_std_dev":""}; + }`},w=[{dims:C,dataType:A[0].dataType}];return u&&w.push({dims:d,dataType:1}),h&&w.push({dims:d,dataType:1}),{name:"LayerNormalization",shaderCache:{hint:`${c};${e};${I}`,inputDependencies:F},getRunData:()=>({outputs:w,dispatchGroup:{x:Math.ceil(Q/64)},programUniforms:L}),getShaderSource:R}},pw=(A,g)=>{Dd(A.inputs),A.compute(ud(A.inputs,g,A.outputCount))}}),wd,yw,ky=zA(()=>{ke(),BQ(),QQ(),wd=A=>{if(!A||A.length!==2)throw new Error("MatMul requires 2 inputs.");if(A[0].dims[A[0].dims.length-1]!==A[1].dims[A[1].dims.length-2])throw new Error("shared dimension does not match.")},yw=A=>{wd(A.inputs);let g=et.calcShape(A.inputs[0].dims,A.inputs[1].dims,!0);if(!g)throw new Error("Can't use matmul on the given tensors");let e=g[g.length-1],I=A.inputs[0].dims[A.inputs[0].dims.length-1];if(e<8&&I<8)A.compute(sQ(A.inputs,{activation:""},g));else{let i=g[g.length-2],t=MA.size(A.inputs[0].dims.slice(0,-2)),o=MA.size(A.inputs[1].dims.slice(0,-2));if(t!==1&&i===1&&o===1){let C=A.inputs[0].reshape([1,t,I]),s=A.inputs[1].reshape([1,I,e]),Q=[1,t,e],r=[C,s];A.compute(Co(r,{activation:""},g,Q),{inputs:r})}else A.compute(Co(A.inputs,{activation:""},g))}}}),pd,yd,fd,fw,mw,Ly=zA(()=>{Me(),ke(),hg(),Le(),pd=(A,g)=>{if(A.length<3||A.length>4)throw new Error("MatMulNBits requires 3 or 4 inputs");let e=A[0],I=e.dims.length;if(e.dims[I-1]!==g.k)throw new Error("The last dim of input shape does not match the k value");let i=Math.floor((g.k+g.blockSize-1)/g.blockSize),t=g.blockSize/8*g.bits,o=A[1];if(!MA.areEqual(o.dims,[g.n,i,t]))throw new Error("The second inputs must be 3D tensor with shape N X nBlocksPerCol X blobSize");let C=A[2].dims;if(MA.size(C)!==g.n*i)throw new Error("scales input size error.");if(A.length===4){let s=A[3].dims,Q=g.bits>4?g.n*i:g.n*Math.floor((i+1)/2);if(MA.size(s)!==Q)throw new Error("zeroPoints input size error.")}},yd=(A,g)=>{let e=A[0].dims,I=e.length,i=e[I-2],t=g.k,o=g.n,C=e.slice(0,I-2),s=MA.size(C),Q=A[1].dims[2]/4,r=A[0].dataType,B=cg(g.k),a=cg(Q),d=cg(o),c=C.concat([i,o]),F=i>1&&o/d%2===0?2:1,L=MA.size(c)/d/F,u=64,h=[],R=[s,i,t/B],w=MA.convertShape(A[1].dims).slice();w.splice(-1,1,Q/a),h.push(...de(R)),h.push(...de(w)),h.push(...de(A[2].dims)),A.length===4&&h.push(...de(MA.convertShape(A[3].dims)));let y=[s,i,o/d];h.push(...de(y));let D=f=>{let G=R.length,J=kA("a",A[0].dataType,G,B),T=kA("b",12,w.length,a),X=kA("scales",A[2].dataType,A[2].dims.length),gA=[J,T,X],x=A.length===4?kA("zero_points",12,A[3].dims.length):void 0;x&&gA.push(x);let tA=y.length,Z=ne("output",A[0].dataType,tA,d),IA=Yg(A[0].dataType),oA=(()=>{switch(B){case 1:return`array<${IA}, 8>`;case 2:return`mat4x2<${IA}>`;case 4:return`mat2x4<${IA}>`;default:throw new Error(`${B}-component is not supported.`)}})(),CA=()=>{let q=` + // reuse a data + var input_offset = ${J.indicesToOffset(`${J.type.indices}(batch, row, word_offset)`)}; + var a_data: ${oA}; + for (var j: u32 = 0; j < ${8/B}; j++) { + a_data[j] = ${J.getByOffset("input_offset")}; + input_offset++; + } + `;for(let U=0;U> 4) & b_mask); + b_quantized_values = ${oA}(${Array.from({length:4},(z,H)=>`${IA}(b_value_lower[${H}]), ${IA}(b_value_upper[${H}])`).join(", ")}); + b_dequantized_values = ${B===1?`${oA}(${Array.from({length:8},(z,H)=>`(b_quantized_values[${H}] - ${x?`zero_point${U}`:"zero_point"}) * scale${U}`).join(", ")});`:`(b_quantized_values - ${oA}(${Array(8).fill(`${x?`zero_point${U}`:"zero_point"}`).join(",")})) * scale${U};`}; + workgroup_shared[local_id.x * ${F} + ${Math.floor(U/d)}]${d>1?`[${U%d}]`:""} += ${Array.from({length:8/B},(z,H)=>`${B===1?`a_data[${H}] * b_dequantized_values[${H}]`:`dot(a_data[${H}], b_dequantized_values[${H}])`}`).join(" + ")}; + `;return q},DA=()=>{let q=` + var col_index = col * ${d}; + ${x?` + let zero_point_bytes_per_col = (nBlocksPerCol + 1) / 2; + var zero_point_byte_count: u32; + var zero_point_word_index: u32; + var zero_point_byte_offset: u32; + let zero_point_nibble_offset: u32 = block & 0x1u; + var zero_point_bits_offset: u32; + var zero_point_word: u32;`:` + // The default zero point is 8 for unsigned 4-bit quantization. + let zero_point = ${IA}(8);`} + `;for(let U=0;U> 0x1u); + zero_point_word_index = zero_point_byte_count >> 0x2u; + zero_point_byte_offset = zero_point_byte_count & 0x3u; + zero_point_bits_offset = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2); + zero_point_word = ${x.getByOffset("zero_point_word_index")} >> zero_point_bits_offset; + let zero_point${U} = ${IA}((zero_point_word) & 0xFu);`:""} + col_index += 1;`;return q},cA=()=>{let q=`col_index = col * ${d};`;for(let U=0;U; + var b_value_upper: vec4; + var b_quantized_values: ${oA}; + var b_dequantized_values: ${oA};`,q};return` + var workgroup_shared: array<${Z.type.value}, ${F*u}>; + ${f.declareVariables(...gA,Z)} + ${f.mainStart([u,1,1])} + let output_indices = ${Z.offsetToIndices(`(global_idx / ${u}) * ${F}`)}; + let col = output_indices[2]; + let row = output_indices[1]; + let batch = output_indices[0]; + let nBlocksPerCol = uniforms.b_shape[1]; + + for (var block = local_id.x; block < nBlocksPerCol; block += ${u}) { + //process one block + var word_offset: u32 = block * ${g.blockSize/B}; + ${DA()} + for (var word: u32 = 0; word < ${Q}; word += ${a}) { + ${cA()} + for (var i: u32 = 0; i < ${a}; i++) { + ${CA()} + word_offset += ${8/B}; + } + } + } + workgroupBarrier(); + + if (local_id.x < ${F}) { + var output_value: ${Z.type.value} = ${Z.type.value}(0); + var workgroup_shared_offset: u32 = local_id.x; + for (var b: u32 = 0u; b < ${u}u; b++) { + output_value += workgroup_shared[workgroup_shared_offset]; + workgroup_shared_offset += ${F}; + } + ${Z.setByIndices(`${Z.type.indices}(batch, row, col + local_id.x)`,"output_value")}; + } + }`};return{name:"MatMulNBits",shaderCache:{hint:`${g.blockSize};${g.bits};${B};${a};${d};${F};${u}`,inputDependencies:Array(A.length).fill("rank")},getRunData:()=>({outputs:[{dims:c,dataType:r}],dispatchGroup:{x:L},programUniforms:h}),getShaderSource:D}},fd=(A,g)=>{let e=A[0].dims,I=e.length,i=e[I-2],t=g.k,o=g.n,C=e.slice(0,I-2),s=MA.size(C),Q=A[1].dims[2]/4,r=A[0].dataType,B=cg(g.k),a=cg(Q),d=C.concat([i,o]),c=128,F=o%8===0?8:o%4===0?4:1,L=c/F,u=L*a*8,h=u/B,R=u/g.blockSize,w=MA.size(d)/F,y=[],D=[s,i,t/B],f=MA.convertShape(A[1].dims).slice();f.splice(-1,1,Q/a),y.push(...de(D)),y.push(...de(f)),y.push(...de(A[2].dims)),A.length===4&&y.push(...de(MA.convertShape(A[3].dims)));let G=[s,i,o];y.push(...de(G));let J=T=>{let X=D.length,gA=kA("a",A[0].dataType,X,B),x=kA("b",12,f.length,a),tA=kA("scales",A[2].dataType,A[2].dims.length),Z=[gA,x,tA],IA=A.length===4?kA("zero_points",12,A[3].dims.length):void 0;IA&&Z.push(IA);let oA=G.length,CA=ne("output",A[0].dataType,oA),DA=Yg(A[0].dataType),cA=()=>{switch(B){case 1:return` + let a_data0 = vec4<${DA}>(sub_a[word_offset], sub_a[word_offset + 1], sub_a[word_offset + 2], sub_a[word_offset + 3]); + let a_data1 = vec4<${DA}>(sub_a[word_offset + 4], sub_a[word_offset + 5], sub_a[word_offset + 6], sub_a[word_offset + 7]);`;case 2:return` + let a_data0 = vec4<${DA}>(sub_a[word_offset], sub_a[word_offset + 1]); + let a_data1 = vec4<${DA}>(sub_a[word_offset + 2], sub_a[word_offset + 3]);`;case 4:return` + let a_data0 = sub_a[word_offset]; + let a_data1 = sub_a[word_offset + 1];`;default:throw new Error(`${B}-component is not supported.`)}};return` + var sub_a: array<${gA.type.value}, ${h}>; + var inter_results: array, ${F}>; + ${T.declareVariables(...Z,CA)} + ${T.mainStart([L,F,1])} + let output_indices = ${CA.offsetToIndices(`workgroup_index * ${F}`)}; + let col = output_indices[2]; + let row = output_indices[1]; + let batch = output_indices[0]; + let n_blocks_per_col = uniforms.b_shape[1]; + let num_tiles = (n_blocks_per_col - 1) / ${R} + 1; + + // Loop over shared dimension. + for (var tile: u32 = 0; tile < num_tiles; tile += 1) { + let a_col_start = tile * ${h}; + // load one tile A data into shared memory. + for (var a_offset = local_idx; a_offset < ${h}; a_offset += ${c}) + { + let a_col = a_col_start + a_offset; + if (a_col < uniforms.a_shape[2]) + { + sub_a[a_offset] = ${gA.getByIndices(`${gA.type.indices}(batch, row, a_col)`)}; + } else { + sub_a[a_offset] = ${gA.type.value}(0); + } + } + workgroupBarrier(); + + // each thread process one block + let b_row = col + local_id.y; + let block = tile * ${R} + local_id.x; + ${IA?` + let zero_point_bytes_per_col = (n_blocks_per_col + 1) / 2; + let zero_point_byte_count = b_row * zero_point_bytes_per_col + (block >> 0x1u); + let zero_point_word_index = zero_point_byte_count >> 0x2u; + let zero_point_byte_offset = zero_point_byte_count & 0x3u; + let zero_point_nibble_offset: u32 = block & 0x1u; + let zero_point_bits_offset = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2); + let zero_point_word = ${IA.getByOffset("zero_point_word_index")} >> zero_point_bits_offset; + let zero_point = ${DA}((zero_point_word) & 0xFu);`:` + // The default zero point is 8 for unsigned 4-bit quantization. + let zero_point = ${DA}(8);`} + let scale = ${tA.getByOffset("b_row * n_blocks_per_col + block")}; + let b_data = ${x.getByIndices(`${x.type.indices}(b_row, block, 0)`)}; + var word_offset = local_id.x * ${g.blockSize/B}; + for (var i: u32 = 0; i < ${a}; i++) { + ${cA()} + let b_value = ${a===1?"b_data":"b_data[i]"}; + let b_value_lower = unpack4xU8(b_value & 0x0F0F0F0Fu); + let b_value_upper = unpack4xU8((b_value >> 4) & 0x0F0F0F0Fu); + let b_quantized_values = mat2x4<${DA}>(${Array.from({length:4},(q,U)=>`${DA}(b_value_lower[${U}]), ${DA}(b_value_upper[${U}])`).join(", ")}); + let b_dequantized_values = (b_quantized_values - mat2x4<${DA}>(${Array(8).fill("zero_point").join(",")})) * scale; + inter_results[local_id.y][local_id.x] += ${Array.from({length:2},(q,U)=>`${`dot(a_data${U}, b_dequantized_values[${U}])`}`).join(" + ")}; + word_offset += ${8/B}; + } + workgroupBarrier(); + } + + if (local_idx < ${F}) { + var output_value: ${CA.type.value} = ${CA.type.value}(0); + for (var b = 0u; b < ${L}; b++) { + output_value += inter_results[local_idx][b]; + } + if (col + local_idx < uniforms.output_shape[2]) + { + ${CA.setByIndices(`${CA.type.indices}(batch, row, col + local_idx)`,"output_value")} + } + } + }`};return{name:"BlockwiseMatMulNBits32",shaderCache:{hint:`${g.blockSize};${B};${a};${L};${F}`,inputDependencies:Array(A.length).fill("rank")},getRunData:()=>({outputs:[{dims:d,dataType:r}],dispatchGroup:{x:w},programUniforms:y}),getShaderSource:J}},fw=(A,g)=>{pd(A.inputs,g),g.blockSize===32&&A.adapterInfo.isVendor("intel")&&A.adapterInfo.isArchitecture("gen-12lp")?A.compute(fd(A.inputs,g)):A.compute(yd(A.inputs,g))},mw=A=>Oe(A)}),md,Md,Fd,Sd,Nd,Rd,Gd,_d,Mw,Ky=zA(()=>{Me(),ke(),Le(),md=A=>{if(!A||A.length<1)throw new Error("Too few inputs");if(A[0].dataType!==1&&A[0].dataType!==10)throw new Error("Input type must be float or float16.");if(A.length>=2){let g=A[0].dims.length*2===A[1].dims[0];if(A.length===4&&(g=A[3].dims[0]*2===A[1].dims[0]),!g)throw new Error("The pads should be a 1D tensor of shape [2 * input_rank] or [2 * num_axes].")}},Md=(A,g,e)=>{let I="";for(let i=g-1;i>=0;--i)I+=` + k = i32(${A.indicesGet("indices",i)}) - ${ce("uniforms.pads",i,e)}; + if (k < 0) { + break; + } + if (k >= i32(${ce("uniforms.x_shape",i,g)})) { + break; + } + offset += k * i32(${ce("uniforms.x_strides",i,g)}); + `;return` + value = ${A.type.value}(uniforms.constant_value); + for (var i = 0; i < 1; i++) { + var offset = 0; + var k = 0; + ${I} + value = x[offset]; + } + `},Fd=(A,g,e)=>{let I="";for(let i=g-1;i>=0;--i)I+=` + k = i32(${A.indicesGet("indices",i)}) - ${ce("uniforms.pads",i,e)}; + if (k < 0) { + k = -k; + } + { + let _2n_1 = 2 * (i32(${ce("uniforms.x_shape",i,g)}) - 1); + k = k % _2n_1; + if(k >= i32(${ce("uniforms.x_shape",i,g)})) { + k = _2n_1 - k; + } + } + offset += k * i32(${ce("uniforms.x_strides",i,g)}); + `;return` + var offset = 0; + var k = 0; + ${I} + value = x[offset]; + `},Sd=(A,g,e)=>{let I="";for(let i=g-1;i>=0;--i)I+=` + k = i32(${A.indicesGet("indices",i)}) - ${ce("uniforms.pads",i,e)}; + if (k < 0) { + k = 0; + } + if (k >= i32(${ce("uniforms.x_shape",i,g)})) { + k = i32(${ce("uniforms.x_shape",i,g)}) - 1; + } + offset += k * i32(${ce("uniforms.x_strides",i,g)}); + `;return` + var offset = 0; + var k = 0; + ${I} + value = x[offset]; + `},Nd=(A,g,e)=>{let I="";for(let i=g-1;i>=0;--i)I+=` + k = i32(${A.indicesGet("indices",i)}) - ${ce("uniforms.pads",i,e)}; + if (k < 0) { + k += i32(${ce("uniforms.x_shape",i,g)}]); + } + if (k >= i32(${ce("uniforms.x_shape",i,g)})) { + k -= i32(${ce("uniforms.x_shape",i,g)}); + } + offset += k * i32(${ce("uniforms.x_strides",i,g)}); + `;return` + var offset = 0; + var k = 0; + ${I} + value = x[offset]; + `},Rd=(A,g,e)=>{switch(e.mode){case 0:return Md(A,g,e.pads.length);case 1:return Fd(A,g,e.pads.length);case 2:return Sd(A,g,e.pads.length);case 3:return Nd(A,g,e.pads.length);default:throw new Error("Invalid mode")}},Gd=(A,g)=>{let e=MA.padShape(A[0].dims.slice(),g.pads),I=A[0].dims,i=MA.size(e),t=[{type:12,data:i},{type:6,data:g.pads}],o=A.length>=3&&A[2].data;g.mode===0&&t.push({type:o?A[2].dataType:1,data:g.value}),t.push(...de(A[0].dims,e));let C=["rank"],s=Q=>{let r=ne("output",A[0].dataType,e.length),B=kA("x",A[0].dataType,I.length),a=B.type.value,d=Rd(r,I.length,g),c=[{name:"output_size",type:"u32"},{name:"pads",type:"i32",length:g.pads.length}];return g.mode===0&&c.push({name:"constant_value",type:o?a:"f32"}),` + ${Q.registerUniforms(c).declareVariables(B,r)} + ${Q.mainStart()} + ${Q.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let indices = ${r.offsetToIndices("global_idx")}; + + var value = ${a}(0); + ${d} + output[global_idx] = value; + }`};return{name:"Pad",shaderCache:{hint:`${g.mode}${o}`,inputDependencies:C},getRunData:()=>({outputs:[{dims:e,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(MA.size(e)/64)},programUniforms:t}),getShaderSource:s}},_d=(A,g)=>{if(A.length>1){let e=A[1].getBigInt64Array(),I=A.length>=3&&A[2].data?A[2].dataType===10?A[2].getUint16Array()[0]:A[2].getFloat32Array()[0]:0,i=A[0].dims.length,t=new Int32Array(2*i).fill(0);if(A.length>=4){let C=A[3].getBigInt64Array();for(let s=0;st[Number(s)]=Number(C));let o=[];return t.forEach(C=>o.push(C)),{mode:g.mode,value:I,pads:o}}else return g},Mw=(A,g)=>{md(A.inputs);let e=_d(A.inputs,g);A.compute(Gd(A.inputs,e),{inputs:[0]})}}),xt,tB,CB,oB,sB,kd,Ld,BB,QB,Fw,Sw,aB,Nw,Rw,rB,Gw,_w,kw,Lw,Uy=zA(()=>{UI(),Me(),ke(),Le(),xt=A=>{if(sg.webgpu.validateInputContent&&(!A||A.length!==1))throw new Error("Pool ops requires 1 input.")},tB=(A,g,e)=>{let I=g.format==="NHWC",i=A.dims.slice();I&&i.splice(1,0,i.pop());let t=Object.hasOwnProperty.call(g,"dilations"),o=g.kernelShape.slice(),C=g.strides.slice(),s=t?g.dilations.slice():[],Q=g.pads.slice();io.adjustPoolAttributes(e,i,o,C,s,Q);let r=io.computePoolOutputShape(e,i,C,s,o,Q,g.autoPad),B=Object.assign({},g);t?Object.assign(B,{kernelShape:o,strides:C,pads:Q,dilations:s,cacheKey:g.cacheKey}):Object.assign(B,{kernelShape:o,strides:C,pads:Q,cacheKey:g.cacheKey});let a=r.slice();return a.push(a.splice(1,1)[0]),[B,I?a:r]},CB=(A,g)=>{let e=g.format==="NHWC",I=MA.size(A),i=MA.size(g.kernelShape),t=[{type:12,data:I},{type:12,data:i}],o=[{name:"outputSize",type:"u32"},{name:"kernelSize",type:"u32"}];if(g.kernelShape.length<=2){let C=g.kernelShape[g.kernelShape.length-1],s=g.strides[g.strides.length-1],Q=g.pads[g.pads.length/2-1],r=g.pads[g.pads.length-1],B=!!(Q+r);t.push({type:12,data:C},{type:12,data:s},{type:12,data:Q},{type:12,data:r}),o.push({name:"kw",type:"u32"},{name:"sw",type:"u32"},{name:"pwStart",type:"u32"},{name:"pwEnd",type:"u32"});let a=!1;if(g.kernelShape.length===2){let d=g.kernelShape[g.kernelShape.length-2],c=g.strides[g.strides.length-2],F=g.pads[g.pads.length/2-2],L=g.pads[g.pads.length-2];a=!!(F+L),t.push({type:12,data:d},{type:12,data:c},{type:12,data:F},{type:12,data:L}),o.push({name:"kh",type:"u32"},{name:"sh",type:"u32"},{name:"phStart",type:"u32"},{name:"phEnd",type:"u32"})}return[t,o,!0,B,a]}else{if(e)throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");let C=MA.computeStrides(g.kernelShape);t.push({type:12,data:C},{type:12,data:g.pads},{type:12,data:g.strides}),o.push({name:"kernelStrides",type:"u32",length:C.length},{name:"pads",type:"u32",length:g.pads.length},{name:"strides",type:"u32",length:g.strides.length});let s=g.pads.reduce((Q,r)=>Q+r);return[t,o,!!s,!1,!1]}},oB=(A,g,e,I,i,t,o,C,s,Q,r,B)=>{let a=i.format==="NHWC",d=g.type.value,c=ne("output",g.type.tensor,I);if(i.kernelShape.length<=2){let F="",L="",u="",h=e-(a?2:1);if(r?F=` + for (var i: u32 = 0u; i < uniforms.kw; i++) { + xIndices[${h}] = indices[${h}] * uniforms.sw - uniforms.pwStart + i; + if (xIndices[${h}] < 0 || xIndices[${h}] + >= uniforms.x_shape[${h}]) { + pad++; + continue; + } + let x_val = x[${g.indicesToOffset("xIndices")}]; + ${t} + }`:F=` + for (var i: u32 = 0u; i < uniforms.kw; i++) { + xIndices[${h}] = indices[${h}] * uniforms.sw - uniforms.pwStart + i; + let x_val = x[${g.indicesToOffset("xIndices")}]; + ${t} + }`,i.kernelShape.length===2){let R=e-(a?3:2);B?L=` + for (var j: u32 = 0u; j < uniforms.kh; j++) { + xIndices[${R}] = indices[${R}] * uniforms.sh - uniforms.phStart + j; + if (xIndices[${R}] < 0 || xIndices[${R}] >= uniforms.x_shape[${R}]) { + pad += i32(uniforms.kw); + continue; + } + `:L=` + for (var j: u32 = 0u; j < uniforms.kh; j++) { + xIndices[${R}] = indices[${R}] * uniforms.sh - uniforms.phStart + j; + `,u=` + } + `}return` + ${A.registerUniforms(s).declareVariables(g,c)} + + ${A.mainStart()} + ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + + let indices = ${c.offsetToIndices("global_idx")}; + var xIndices = ${c.offsetToIndices("global_idx")}; + + var value = ${d}(${C}); + var pad = 0; + ${L} + ${F} + ${u} + ${o} + + output[global_idx] = value; + }`}else{if(a)throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");let F=i.kernelShape.length,L=i.pads.length,u="";return Q?u=` + if (xIndices[j] >= uniforms.x_shape[j]) { + pad++; + isPad = true; + break; + } + } + if (!isPad) { + let x_val = x[${g.indicesToOffset("xIndices")}]; + ${t} + }`:u=` + } + let x_val = x[${g.indicesToOffset("xIndices")}]; + ${t} + `,` + ${A.registerUniforms(s).declareVariables(g,c)} + + ${A.mainStart()} + ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + let indices = ${c.offsetToIndices("global_idx")}; + var xIndices = ${c.offsetToIndices("global_idx")}; + + var offsets: array; + + var value = ${d}(${C}); + var pad = 0; + var isPad = false; + + for (var i: u32 = 0u; i < uniforms.kernelSize; i++) { + var offset = i; + for (var j = 0u; j < ${F-1}u; j++) { + offsets[j] = offset / ${ce("uniforms.kernelStrides","j",F)}; + offset -= offsets[j] * ${ce("uniforms.kernelStrides","j",F)}; + } + offsets[${F-1}] = offset; + + isPad = false; + for (var j = ${e-F}u; j < ${e}u; j++) { + xIndices[j] = indices[j] * ${ce("uniforms.strides",`j - ${e-F}u`,F)} + + offsets[j - ${e-F}u] - ${ce("uniforms.pads","j - 2u",L)}; + ${u} + } + ${o} + + output[global_idx] = value; + }`}},sB=A=>`${A.format};${A.ceilMode};${A.autoPad};${A.kernelShape.length}`,kd=A=>`${sB(A)};${A.countIncludePad}`,Ld=A=>`${sB(A)};${A.storageOrder};${A.dilations}`,BB=A=>({format:A.format,autoPad:["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][A.auto_pad],ceilMode:A.ceil_mode,kernelShape:A.kernel_shape,strides:A.strides,pads:A.pads}),QB=(A,g,e,I)=>{let[i,t]=tB(g,I,e),o=kA("x",g.dataType,g.dims.length),C=o.type.value,s="value += x_val;",Q="";i.countIncludePad?Q+=`value /= ${C}(uniforms.kernelSize);`:Q+=`value /= ${C}(i32(uniforms.kernelSize) - pad);`;let[r,B,a,d,c]=CB(t,i);r.push(...de(g.dims,t));let F=["rank"];return{name:A,shaderCache:{hint:`${I.cacheKey};${a};${d};${c}`,inputDependencies:F},getRunData:()=>({outputs:[{dims:t,dataType:g.dataType}],dispatchGroup:{x:Math.ceil(MA.size(t)/64)},programUniforms:r}),getShaderSource:L=>oB(L,o,g.dims.length,t.length,i,s,Q,0,B,a,d,c)}},Fw=A=>{let g=A.count_include_pad!==0,e=BB(A);if(e.ceilMode!==0)throw new Error("using ceil() in shape computation is not yet supported for AveragePool");let I={countIncludePad:g,...e,cacheKey:""};return{...I,cacheKey:kd(I)}},Sw=(A,g)=>{xt(A.inputs),A.compute(QB("AveragePool",A.inputs[0],!1,g))},aB={autoPad:"",ceilMode:0,countIncludePad:!1,kernelShape:[],strides:[],pads:[],storageOrder:0,dilations:[]},Nw=A=>{let g=A.format;return{format:g,...aB,cacheKey:g}},Rw=(A,g)=>{xt(A.inputs),A.compute(QB("GlobalAveragePool",A.inputs[0],!0,g))},rB=(A,g,e,I)=>{let[i,t]=tB(g,I,e),o=` + value = max(x_val, value); + `,C="",s=kA("x",g.dataType,g.dims.length),Q=["rank"],[r,B,a,d,c]=CB(t,i);return r.push(...de(g.dims,t)),{name:A,shaderCache:{hint:`${I.cacheKey};${a};${d};${c}`,inputDependencies:Q},getRunData:()=>({outputs:[{dims:t,dataType:g.dataType}],dispatchGroup:{x:Math.ceil(MA.size(t)/64)},programUniforms:r}),getShaderSource:F=>oB(F,s,g.dims.length,t.length,i,o,C,g.dataType===10?-65504:-1e5,B,a,d,c)}},Gw=(A,g)=>{xt(A.inputs),A.compute(rB("MaxPool",A.inputs[0],!1,g))},_w=A=>{let g=A.storage_order,e=A.dilations,I=BB(A);if(g!==0)throw new Error("column major storage order is not yet supported for MaxPool");if(I.ceilMode!==0)throw new Error("using ceil() in shape computation is not yet supported for MaxPool");let i={storageOrder:g,dilations:e,...I,cacheKey:""};return{...i,cacheKey:Ld(i)}},kw=A=>{let g=A.format;return{format:g,...aB,cacheKey:g}},Lw=(A,g)=>{xt(A.inputs),A.compute(rB("GlobalMaxPool",A.inputs[0],!0,g))}}),Kd,Ud,Kw,Uw,Jy=zA(()=>{Me(),ke(),hg(),Le(),Kd=(A,g)=>{if(A.length<2||A.length>3)throw new Error("DequantizeLinear requires 2 or 3 inputs.");if(A.length===3&&A[1].dims===A[2].dims)throw new Error("x-scale and x-zero-point must have the same shape.");if(A.length===3&&A[0].dataType!==A[2].dataType)throw new Error("x and x-zero-point must have the same data type.");if(A[0].dataType===6&&A.length>2)throw new Error("In the case of dequantizing int32 there is no zero point.");if(A[1].dims.length!==0&&A[1].dims.length!==1&&A[1].dims.length!==A[0].dims.length)throw new Error("scale input must be a scalar, a 1D tensor, or have the same rank as the input tensor.");if(A.length>2){if(A[0].dataType!==A[2].dataType)throw new Error("x and x-zero-point must have the same data type.");if(A[1].dims.length!==A[2].dims.length)throw new Error("scale and zero-point inputs must have the same rank.");if(!A[1].dims.map((e,I)=>e===A[2].dims[I]).reduce((e,I)=>e&&I,!0))throw new Error("scale and zero-point inputs must have the same shape.")}if(g.blockSize>0){if(A[1].dims.length===0||A[1].dims.length===1&&A[1].dims[0]===1)throw new Error("blockSize must be set only for block quantization.");if(!A[1].dims.map((i,t)=>t===g.axis||i===A[0].dims[t]).reduce((i,t)=>i&&t,!0))throw new Error("For block qunatization, scale input shape to match the input shape except for the axis");if(A[1].dims.length!==A[0].dims.length)throw new Error("For block qunatization the scale input rank must be the same as the x rank.");let e=A[0].dims[g.axis],I=A[1].dims[g.axis];if(g.blockSizeMath.ceil(e/(I-1)-1))throw new Error("blockSize must be with in the range [ceil(dI / Si), ceil(dI / (Si - 1) - 1)].")}},Ud=(A,g)=>{let e=MA.normalizeAxis(g.axis,A[0].dims.length),I=A[0].dataType,i=I===3,t=A[0].dims,o=A[1].dataType,C=MA.size(t),s=I===3||I===2,Q=s?[Math.ceil(MA.size(A[0].dims)/4)]:A[0].dims,r=A[1].dims,B=A.length>2?A[2]:void 0,a=B?s?[Math.ceil(MA.size(B.dims)/4)]:B.dims:void 0,d=r.length===0||r.length===1&&r[0]===1,c=d===!1&&r.length===1,F=cg(C),L=d&&(!s||F===4),u=L?F:1,h=L&&!s?F:1,R=kA("input",s?12:I,Q.length,h),w=kA("scale",o,r.length),y=B?kA("zero_point",s?12:I,a.length):void 0,D=ne("output",o,t.length,u),f=[R,w];y&&f.push(y);let G=[Q,r];B&&G.push(a);let J=[{type:12,data:C/u},{type:12,data:e},{type:12,data:g.blockSize},...de(...G,t)],T=X=>{let gA=[{name:"output_size",type:"u32"},{name:"axis",type:"u32"},{name:"block_size",type:"u32"}];return` + ${X.registerUniforms(gA).declareVariables(...f,D)} + ${X.mainStart()} + ${X.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let output_indices = ${D.offsetToIndices("global_idx")}; + + // Set input x + ${s?` + let input = ${R.getByOffset("global_idx / 4")}; + let x_vec = ${i?"unpack4xI8(input)":"unpack4xU8(input)"}; + let x_value = ${u===1?"x_vec[global_idx % 4]":"x_vec"};`:`let x_value = ${R.getByOffset("global_idx")};`}; + + // Set scale input + ${d?`let scale_value= ${w.getByOffset("0")}`:c?` + let scale_index = ${D.indicesGet("output_indices","uniforms.axis")}; + let scale_value= ${w.getByOffset("scale_index")};`:` + var scale_indices: ${w.type.indices} = output_indices; + let index = ${w.indicesGet("scale_indices","uniforms.axis")} / uniforms.block_size; + ${w.indicesSet("scale_indices","uniforms.axis","index")}; + let scale_value= ${w.getByIndices("scale_indices")};`}; + + // Set zero-point input + ${y?d?s?` + let zero_point_input = ${y.getByOffset("0")}; + let zero_point_vec = ${i?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"}; + let zero_point_value= zero_point_vec[0]`:`let zero_point_value = ${y.getByOffset("0")}`:c?s?` + let zero_point_index = ${D.indicesGet("output_indices","uniforms.axis")}; + let zero_point_input = ${y.getByOffset("zero_point_index / 4")}; + let zero_point_vec = ${i?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"}; + let zero_point_value = zero_point_vec[zero_point_index % 4]`:` + let zero_point_index = ${D.indicesGet("output_indices","uniforms.axis")}; + let zero_point_value = ${y.getByOffset("zero_point_index")};`:s?` + let zero_point_offset = ${w.indicesToOffset("scale_indices")}; + let zero_point_input = ${y.getByOffset("zero_point_offset / 4")}; + let zero_point_vec = ${i?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"}; + let zero_point_value = zero_point_vec[zero_point_offset % 4];`:`let zero_point_value = ${y.getByIndices("scale_indices")};`:`let zero_point_value = ${s?i?"i32":"u32":R.type.value}(0);`}; + // Compute and write output + ${D.setByOffset("global_idx",`${D.type.value}(x_value - zero_point_value) * scale_value`)}; + }`};return{name:"DequantizeLinear",shaderCache:{hint:g.cacheKey,inputDependencies:y?["rank","rank","rank"]:["rank","rank"]},getShaderSource:T,getRunData:()=>({outputs:[{dims:t,dataType:o}],dispatchGroup:{x:Math.ceil(C/u/64),y:1,z:1},programUniforms:J})}},Kw=(A,g)=>{Kd(A.inputs,g),A.compute(Ud(A.inputs,g))},Uw=A=>Oe({axis:A.axis,blockSize:A.blockSize})}),Jd,bd,Jw,by=zA(()=>{UI(),Me(),Le(),Jd=(A,g,e)=>{let I=A===g,i=Ag&&e>0;if(I||i||t)throw new Error("Range these inputs' contents are invalid.")},bd=(A,g,e,I)=>{let i=Math.abs(Math.ceil((g-A)/e)),t=[i],o=i,C=[{type:12,data:o},{type:I,data:A},{type:I,data:e},...de(t)],s=Q=>{let r=ne("output",I,t.length),B=r.type.value,a=[{name:"outputSize",type:"u32"},{name:"start",type:B},{name:"delta",type:B}];return` + ${Q.registerUniforms(a).declareVariables(r)} + ${Q.mainStart()} + ${Q.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + output[global_idx] = uniforms.start + ${B}(global_idx) * uniforms.delta; + }`};return{name:"Range",shaderCache:{hint:`${I}`},getShaderSource:s,getRunData:()=>({outputs:[{dims:t,dataType:I}],dispatchGroup:{x:Math.ceil(o/64)},programUniforms:C})}},Jw=A=>{let g=0,e=0,I=0;A.inputs[0].dataType===6?(g=A.inputs[0].getInt32Array()[0],e=A.inputs[1].getInt32Array()[0],I=A.inputs[2].getInt32Array()[0]):A.inputs[0].dataType===1&&(g=A.inputs[0].getFloat32Array()[0],e=A.inputs[1].getFloat32Array()[0],I=A.inputs[2].getFloat32Array()[0]),sg.webgpu.validateInputContent&&Jd(g,e,I),A.compute(bd(g,e,I,A.inputs[0].dataType),{inputs:[]})}}),xd,EB,nB,Yd,bw,xw,xy=zA(()=>{Me(),ke(),hg(),Le(),xd=(A,g,e,I)=>{if(A!=="none"&&I!=="i32"&&I!=="u32"&&I!=="f32")throw new Error(`Input ${I} is not supported with reduction ${A}.`);let i=`{ + var oldValue = 0; + loop { + let newValueF32 =`,t=`; + let newValue = bitcast(newValueF32); + let res = atomicCompareExchangeWeak(&${g}, oldValue, newValue); + if res.exchanged { + break; + } + oldValue = res.old_value; + } + }`;switch(A){case"none":return`${g}=${e};`;case"add":return I==="i32"||I==="u32"?`atomicAdd(&${g}, bitcast<${I}>(${e}));`:` + ${i}bitcast<${I}>(oldValue) + (${e})${t}`;case"max":return I==="i32"||I==="u32"?`atomicMax(&${g}, bitcast<${I}>(${e}));`:` + ${i}max(bitcast(oldValue), (${e}))${t}`;case"min":return I==="i32"||I==="u32"?`atomicMin(&${g}, bitcast<${I}>(${e}));`:`${i}min(bitcast<${I}>(oldValue), (${e}))${t}`;case"mul":return`${i}(bitcast<${I}>(oldValue) * (${e}))${t}`;default:throw new Error(`Reduction ${A} is not supported.`)}},EB=(A,g)=>`${A===1?` + let element_count_dim = uniforms.output_strides; + let dim_value = uniforms.output_shape;`:` + let element_count_dim = uniforms.output_strides[${g?"i - indices_start":"i"}]; + let dim_value = uniforms.output_shape[${g?"i - indices_start":"i"} + uniforms.last_index_dimension];`} + + if (index >= 0) { + if (index >= i32(dim_value)) { + index = i32(dim_value - 1); + } + } else { + if (index < -i32(dim_value)) { + index = 0; + } else { + index += i32(dim_value); + } + } + data_offset += u32((u32(index) * element_count_dim));`,nB=(A,g,e)=>`for (var i = 0u; i < uniforms.num_updates_elements; i++) { + let value = updates[uniforms.num_updates_elements * ${e?"global_idx":"idx"} + i]; + ${xd(A.reduction,"output[data_offset + i]","value",g)} + }`,Yd=(A,g)=>{let e=A[0].dims,I=A[1].dims,i=e,t=1,o=Math.ceil(MA.size(I)/t),C=I[I.length-1],s=MA.sizeFromDimension(e,C),Q=MA.sizeFromDimension(I,0)/C,r=[{type:12,data:o},{type:12,data:C},{type:12,data:s},...de(A[1].dims,A[2].dims,i)],B=a=>{let d=kA("indices",A[1].dataType,A[1].dims.length),c=kA("updates",A[2].dataType,A[2].dims.length,t),F=g.reduction!=="none"&&g.reduction!==""?ED("output",A[0].dataType,i.length):ne("output",A[0].dataType,i.length,t);return` + ${a.registerUniform("output_size","u32").registerUniform("last_index_dimension","u32").registerUniform("num_updates_elements","u32").declareVariables(d,c,F)} + ${a.mainStart()} + ${a.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + var hasDuplicates = false; + if (${g.reduction==="none"}) { + for (var i = 0; i < ${Q}; i = i + 1) { + for (var j = i + 1; j < ${Q}; j = j + 1) { + var index_i = i32(indices[i].x); + var index_j = i32(indices[j].x); + if (index_i == index_j) { + hasDuplicates = true; + break; + } + } + if (hasDuplicates) { + break; + } + } + } + + if (${g.reduction==="none"} && hasDuplicates) { + if (global_idx != 0u) { + return; + } + // Process each index-update pair individually when duplicates exist + for (var idx = 0u; idx < ${Q}u; idx++) { + var data_offset = 0u; + for (var i = 0u; i < uniforms.last_index_dimension; i++) { + var index = i32(indices[idx * uniforms.last_index_dimension + i].x); + ${EB(e.length,!1)} + } + ${nB(g,F.type.value,!1)} + } + return; + } + + var data_offset = 0u; + var indices_start = uniforms.last_index_dimension * global_idx; + var indices_end = indices_start + uniforms.last_index_dimension; + for (var i = indices_start; i < indices_end; i++) { + var index = i32(indices[i].x); + ${EB(e.length,!0)} + } + ${nB(g,F.type.value,!0)} + }`};return{name:"ScatterND",shaderCache:{hint:`${g.cacheKey}_${g.reduction}`,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:i,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(o/64)},programUniforms:r}),getShaderSource:B}},bw=A=>Oe({reduction:A.reduction}),xw=(A,g)=>{A.compute(Yd(A.inputs,g),{inputs:[A.inputs[1],A.inputs[2]],outputs:[]})}}),Td,Hd,Pd,lB,vd,qd,Od,Wd,jd,Vd,zd,$d,cB,Xd,Zd,Ah,eh,gh,Yw,Tw,Yy=zA(()=>{Me(),ke(),hg(),Le(),Td=(A,g)=>{if(A.every(e=>e>0||(()=>{throw new Error("Resize requires scales input values to be positive")})),A.length>0){if(g.mode==="linear"){if(!(A.length===2||A.length===3||A.length===4&&A[0]===1&&A[1]===1||A.length===4&&A[0]===1&&A[3]===1||A.length===5&&A[0]===1&&A[1]===1))throw new Error(`For linear mode, Resize requires scales to be 2D, 3D, 4D with either two outermost or one innermost and + one outermost scale values equal to 1, or 5D with two outermost scale values equal to 1`)}else if(g.mode==="cubic"&&!(A.length===2||A.length===4&&A[0]===1&&A[1]===1||A.length===4&&A[0]===1&&A[3]===1))throw new Error("Resize requires scales input size to be 2 or 4 for cubic mode")}},Hd=(A,g,e)=>{g.every(i=>i>=0&&i{throw new Error("Resize requires axes input values to be positive and less than rank")}));let I=new Array(e).fill(1);return g.forEach((i,t)=>I[i]=A[t]),I},Pd=(A,g,e,I,i,t)=>{let[o,C,s]=e>10?[1,2,3]:[-1,A.length>1?1:-1,-1],Q=A[0].dims.length;if(o>0&&A.length>o&&A[o].dims.length>0)A[o].getFloat32Array().forEach(r=>t.push(r));else if(g.coordinateTransformMode==="tf_crop_and_resize")throw new Error("Resize requires RoI input to be specified when coordinateTransformMode is tfCropAndResize");if(C>0&&A.length>C&&A[C].dims.length===1&&A[C].dims[0]>0){if(A[C].getFloat32Array().forEach(r=>I.push(r)),I.length!==0&&I.length!==Q&&e>=18&&I.length!==g.axes.length)throw new Error("Resize requires scales input size to be same as input rank or axes size for opset 18 and up");Td(I,g),g.axes.length>0&&Hd(I,g.axes,Q).forEach((r,B)=>I[B]=r)}if(s>0&&A.length>s&&A[s].dims.length===1&&A[s].dims[0]>0&&(A[s].getBigInt64Array().forEach(r=>i.push(Number(r))),i.length!==0&&i.length!==Q&&e>=18&&i.length!==g.axes.length))throw new Error("Resize requires sizes input size to be same as input rank or axes size for opset 18 and up");if(g.axes.length>0){if(I.length!==0&&I.length!==g.axes.length)throw new Error('Resize requires "scales" input size to be of axes rank when axes attributes is specified');if(i.length!==0&&i.length!==g.axes.length)throw new Error('Resize requires "sizes" input size to be of rank axes rank when axes attributes is specified')}if(typeof I<"u"&&typeof i<"u"&&I.length>0&&i.length>Q)throw new Error("Resize requires only of scales or sizes to be specified")},lB=(A,g,e,I)=>` + // The whole part and the fractional part are calculated separately due to inaccuracy of floating + // point division. As an example, f32(21) / f32(7) may evaluate to 2.99... instead of 3, causing an + // offset-by-one error later in floor(). + let big = (${A}) * (${g}); + let whole = ${I}(big / (${e})); + let fract = ${I}(big % (${e})) / ${I}(${e}); + return whole + fract; +`,vd=(A,g)=>`fn getOriginalCoordinateFromResizedCoordinate(xResized: u32, xScale: f32, lengthResized: u32, + lengthOriginal: u32, roiStart: f32, roiEnd: f32) -> ${g} { `+(()=>{switch(A){case"asymmetric":return` + if (xScale < 1.0 || floor(xScale) != xScale) { + return ${g}(xResized) / ${g}(xScale); + } else { + ${lB("xResized","lengthOriginal","lengthResized",g)} + } + `;case"pytorch_half_pixel":return`if (lengthResized > 1) { + return (${g}(xResized) + 0.5) / ${g}(xScale) - 0.5; + } else { + return 0.0; + }`;case"tf_half_pixel_for_nn":return`return (${g}(xResized) + 0.5) / ${g}(xScale);`;case"align_corners":return`if (lengthResized == 1) { + return 0.0; + } else { + ${lB("xResized","lengthOriginal - 1","lengthResized - 1",g)} + }`;case"tf_crop_and_resize":return`if (lengthResized > 1) { + return ${g}(roiStart) * ${g}(lengthOriginal - 1) + + (${g}(xResized) * ${g}(roiEnd - roiStart) * ${g}(lengthOriginal - 1)) / + ${g}(lengthResized - 1); + } else { + return 0.5 * ${g}(roiStart + roiEnd) * ${g}(lengthOriginal - 1); + }`;case"half_pixel_symmetric":return`const outputWidth = ${g}xScale * ${g}(lengthResized); + const adjustment = ${g}(lengthResized) / outputWidth; + const center = ${g}(lengthOriginal) / 2; + const offset = center * (1 - adjustment); + return offset + ((${g}(xResized) + 0.5) / ${g}(xScale)) - 0.5;`;case"half_pixel":return`return ((${g}(xResized) + 0.5) / ${g}(xScale)) - 0.5;`;default:throw new Error(`Coordinate transform mode ${A} is not supported`)}})()+"}",qd=(A,g,e)=>`fn getNearestPixelFromOriginal(xOriginal: ${e}, isDownSample: bool) -> ${e} {`+(()=>{switch(A){case"round_prefer_ceil":return"if (fract(xOriginal) == 0.5) { return ceil(xOriginal); } else { return round(xOriginal); }";case"floor":return"return floor(xOriginal);";case"ceil":return"return ceil(xOriginal);";case"round_prefer_floor":return"if (fract(xOriginal) == 0.5) { return floor(xOriginal); } else { return round(xOriginal); }";case"simple":default:if(g<11)return"if (isDownSample) { return ceil(xOriginal); } else { return xOriginal; }";throw new Error(`Nearest mode ${A} is not supported`)}})()+"}",Od=(A,g,e)=>{let I=new Array(e).fill(0).concat(new Array(e).fill(1)),i=A.length===0?I:A.slice();return g.length>0?(g.forEach((t,o)=>{I[t]=i[o],I[o+e]=i[g.length+o]}),I):i},Wd=(A,g,e,I)=>{let i=[];if(e.length>0)if(I.length>0){if(A.forEach(t=>i.push(t)),Math.max(...I)>A.length)throw new Error("axes is out of bound");I.forEach((t,o)=>i[t]=e[o])}else e.forEach(t=>i.push(t));else{if(g.length===0)throw new Error("Resize requires either scales or sizes.");i=A.map((t,o)=>Math.round(t*g[o]))}return i},jd=(A,g,e)=>{let I=(()=>{switch(e.keepAspectRatioPolicy){case"not_larger":return e.axes.length>0?Math.min(...e.axes.map(t=>g[t]),Number.MAX_VALUE):Math.min(...g,Number.MAX_VALUE);case"not_smaller":return e.axes.length>0?Math.max(...e.axes.map(t=>g[t]),Number.MIN_VALUE):Math.max(...g,Number.MIN_VALUE);default:throw new Error(`Keep aspect ratio policy ${e.keepAspectRatioPolicy} is not supported`)}})();g.fill(1,0,g.length);let i=A.slice();return e.axes.length>0?(e.axes.forEach(t=>g[t]=I),e.axes.forEach(t=>i[t]=Math.round(A[t]*g[t]))):(g.fill(I,0,g.length),i.forEach((t,o)=>i[o]=Math.round(t*g[o]))),i},Vd=(A,g,e,I,i)=>` + fn calculateOriginalIndicesFromOutputIndices(output_indices: ${A.type.indices}) -> array<${A.type.value}, ${e.length}> { + var original_indices: array<${A.type.value}, ${e.length}>; + for (var i:u32 = 0; i < ${e.length}; i++) { + var output_index = ${A.indicesGet("output_indices","i")}; + var scale = ${ce("uniforms.scales","i",I)}; + var roi_low = ${ce("uniforms.roi","i",i)}; + var roi_hi = ${ce("uniforms.roi",`i + ${g.length}`,i)}; + if (scale == 1.0) { + original_indices[i] = ${A.type.value}(output_index); + } else { + var input_shape_i = ${ce("uniforms.input_shape","i",g.length)}; + var output_shape_i = ${ce("uniforms.output_shape","i",e.length)}; + original_indices[i] = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i, + input_shape_i, roi_low, roi_hi); + } + } + return original_indices; + }`,zd=(A,g,e,I,i,t,o)=>` + fn calculateInputIndicesFromOutputIndices(output_indices: ${g.type.indices}) -> ${A.type.indices} { + var input_indices: ${A.type.indices}; + for (var i:u32 = 0; i < ${I.length}; i++) { + var output_index = ${g.indicesGet("output_indices","i")}; + var input_index: u32; + var scale = ${ce("uniforms.scales","i",i)}; + if (scale == 1.0) { + input_index = output_index; + } else { + var roi_low = ${ce("uniforms.roi","i",t)}; + var roi_hi = ${ce("uniforms.roi",`i + ${e.length}`,t)}; + var input_shape_i = ${ce("uniforms.input_shape","i",e.length)}; + var output_shape_i = ${ce("uniforms.output_shape","i",I.length)}; + var original_idx = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i, + input_shape_i, roi_low, roi_hi); + if (!${o} || (original_idx >= 0 && original_idx < ${g.type.value}(input_shape_i))) { + if (original_idx < 0) { + input_index = 0; + } else if (original_idx > ${g.type.value}(input_shape_i - 1)) { + input_index = input_shape_i - 1; + } else { + input_index = u32(getNearestPixelFromOriginal(original_idx, scale < 1)); + } + } else { + input_index = u32(original_idx); + } + } + ${A.indicesSet("input_indices","i","input_index")} + } + return input_indices; + }`,$d=(A,g)=>` + fn checkInputIndices(input_indices: ${A.type.indices}) -> bool { + for (var i:u32 = 0; i < ${g.length}; i++) { + var input_index = ${A.indicesGet("input_indices","i")}; + if (input_index < 0 || input_index >= ${ce("uniforms.input_shape","i",g.length)}) { + return false; + } + } + return true; + }`,cB=(A,g,e,I)=>A.rank>I?` + ${A.indicesSet("input_indices",g,"channel")}; + ${A.indicesSet("input_indices",e,"batch")}; +`:"",Xd=(A,g,e,I,i)=>{let[t,o,C,s]=e.length===2?[-1,0,1,-1]:[0,2,3,1],Q=A.type.value;return` + fn getInputValue(batch: u32, channel: u32, row: u32, col: u32) -> ${Q} { + var input_indices: ${A.type.indices}; + ${A.indicesSet("input_indices",o,`max(0, min(row, ${e[o]} - 1))`)}; + ${A.indicesSet("input_indices",C,`max(0, min(col, ${e[C]} - 1))`)}; + ${cB(A,s,t,2)} + return ${A.getByIndices("input_indices")}; + } + + fn bilinearInterpolation(output_indices: ${g.type.indices}) -> ${Q} { + var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices); + var row:${Q} = originalIndices[${o}]; + var col:${Q} = originalIndices[${C}]; + ${I?`if (row < 0 || row > (${e[o]} - 1) || col < 0 || col > (${e[C]} - 1)) { + return ${i}; + }`:""}; + row = max(0, min(row, ${e[o]} - 1)); + col = max(0, min(col, ${e[C]} - 1)); + var row1: u32 = u32(row); + var col1: u32 = u32(col); + var row2: u32 = u32(row + 1); + var col2: u32 = u32(col + 1); + var channel: u32 = ${e.length>2?`u32(originalIndices[${s}])`:"0"}; + var batch: u32 = ${e.length>2?`u32(originalIndices[${t}])`:"0"}; + var x11: ${Q} = getInputValue(batch, channel, row1, col1); + var x12: ${Q} = getInputValue(batch, channel, row1, col2); + var x21: ${Q} = getInputValue(batch, channel, row2, col1); + var x22: ${Q} = getInputValue(batch, channel, row2, col2); + var dx1: ${Q} = abs(row - ${Q}(row1)); + var dx2: ${Q} = abs(${Q}(row2) - row); + var dy1: ${Q} = abs(col - ${Q}(col1)); + var dy2: ${Q} = abs(${Q}(col2) - col); + if (row1 == row2) { + dx1 = 0.5; + dx2 = 0.5; + } + if (col1 == col2) { + dy1 = 0.5; + dy2 = 0.5; + } + return (x11 * dx2 * dy2 + x12 * dx2 * dy1 + x21 * dx1 * dy2 + x22 * dx1 * dy1); + }`},Zd=(A,g,e,I,i,t,o,C,s,Q)=>{let r=e.length===2,[B,a]=r?[0,1]:[2,3],d=A.type.value,c=F=>{let L=F===B?"row":"col";return` + fn ${L}CubicInterpolation(input_indices: ${A.type.indices}, output_indices: ${g.type.indices}) -> ${d} { + var output_index = ${g.indicesGet("output_indices",F)}; + var originalIdx: ${d} = getOriginalCoordinateFromResizedCoordinate(output_index, ${i[F]}, + ${I[F]}, ${e[F]}, ${t[F]}, ${t[F]} + ${e.length}); + var fractOriginalIdx: ${d} = originalIdx - floor(originalIdx); + var coefs = getCubicInterpolationCoefs(fractOriginalIdx); + + if (${C} && (originalIdx < 0 || originalIdx > (${e[F]} - 1))) { + return ${s}; + } + var data: array<${d}, 4> = array<${d}, 4>(0.0, 0.0, 0.0, 0.0); + for (var i: i32 = -1; i < 3; i++) { + var ${L}: ${d} = originalIdx + ${d}(i); + if (${L} < 0 || ${L} >= ${e[F]}) { + ${Q?`coefs[i + 1] = 0.0; + continue;`:C?`return ${s};`:`${L} = max(0, min(${L}, ${e[F]} - 1));`}; + } + var input_indices_copy: ${A.type.indices} = input_indices; + ${A.indicesSet("input_indices_copy",F,`u32(${L})`)}; + data[i + 1] = ${F===B?A.getByIndices("input_indices_copy"):"rowCubicInterpolation(input_indices_copy, output_indices)"}; + } + return cubicInterpolation1D(data, coefs); + }`};return` + ${c(B)}; + ${c(a)}; + fn getCubicInterpolationCoefs(s: ${d}) -> array<${d}, 4> { + var absS = abs(s); + var coeffs: array<${d}, 4> = array<${d}, 4>(0.0, 0.0, 0.0, 0.0); + var oneMinusAbsS: ${d} = 1.0 - absS; + var twoMinusAbsS: ${d} = 2.0 - absS; + var onePlusAbsS: ${d} = 1.0 + absS; + coeffs[0] = ((${o} * onePlusAbsS - 5 * ${o}) * onePlusAbsS + 8 * ${o}) * onePlusAbsS - 4 * ${o}; + coeffs[1] = ((${o} + 2) * absS - (${o} + 3)) * absS * absS + 1; + coeffs[2] = ((${o} + 2) * oneMinusAbsS - (${o} + 3)) * oneMinusAbsS * oneMinusAbsS + 1; + coeffs[3] = ((${o} * twoMinusAbsS - 5 * ${o}) * twoMinusAbsS + 8 * ${o}) * twoMinusAbsS - 4 * ${o}; + return coeffs; + } + + fn cubicInterpolation1D(x: array<${d}, 4>, coefs: array<${d}, 4>) -> ${d} { + var coefsSum: ${d} = coefs[0] + coefs[1] + coefs[2] + coefs[3]; + return (x[0] * coefs[0] + x[1] * coefs[1]+ x[2] * coefs[2]+ x[3] * coefs[3]) / coefsSum; + } + + fn bicubicInterpolation(output_indices: ${g.type.indices}) -> ${d} { + var input_indices: ${A.type.indices} = output_indices; + return colCubicInterpolation(input_indices, output_indices); + } + `},Ah=(A,g,e,I,i)=>{let[t,o,C,s,Q]=e.length===3?[-1,0,1,2,-1]:[0,2,3,4,1],r=A.type.value;return` + fn getInputValue(batch: u32, channel: u32, depth:u32, height: u32, width: u32) -> ${r} { + var input_indices: ${A.type.indices}; + ${A.indicesSet("input_indices",o,`max(0, min(depth, ${e[o]} - 1))`)}; + ${A.indicesSet("input_indices",C,`max(0, min(height, ${e[C]} - 1))`)}; + ${A.indicesSet("input_indices",s,`max(0, min(width, ${e[s]} - 1))`)}; + ${cB(A,Q,t,3)} + return ${A.getByIndices("input_indices")}; + } + + fn trilinearInterpolation(output_indices: ${g.type.indices}) -> ${r} { + var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices); + var depth:${r} = originalIndices[${o}]; + var height:${r} = originalIndices[${C}]; + var width:${r} = originalIndices[${s}]; + ${I?`if (depth < 0 || depth > (${e[o]} - 1) || height < 0 || height > (${e[C]} - 1) || width < 0 || (width > ${e[s]} - 1)) { + return ${i}; + }`:""}; + + depth = max(0, min(depth, ${e[o]} - 1)); + height = max(0, min(height, ${e[C]} - 1)); + width = max(0, min(width, ${e[s]} - 1)); + var depth1: u32 = u32(depth); + var height1: u32 = u32(height); + var width1: u32 = u32(width); + var depth2: u32 = u32(depth + 1); + var height2: u32 = u32(height + 1); + var width2: u32 = u32(width + 1); + var channel: u32 = ${e.length>3?`u32(originalIndices[${Q}])`:"0"}; + var batch: u32 = ${e.length>3?`u32(originalIndices[${t}])`:"0"}; + + var x111: ${r} = getInputValue(batch, channel, depth1, height1, width1); + var x112: ${r} = getInputValue(batch, channel, depth1, height1, width2); + var x121: ${r} = getInputValue(batch, channel, depth1, height2, width1); + var x122: ${r} = getInputValue(batch, channel, depth1, height2, width2); + var x211: ${r} = getInputValue(batch, channel, depth2, height1, width1); + var x212: ${r} = getInputValue(batch, channel, depth2, height1, width2); + var x221: ${r} = getInputValue(batch, channel, depth2, height2, width1); + var x222: ${r} = getInputValue(batch, channel, depth2, height2, width2); + var dx1: ${r} = abs(depth - ${r}(depth1)); + var dx2: ${r} = abs(${r}(depth2) - depth); + var dy1: ${r} = abs(height - ${r}(height1)); + var dy2: ${r} = abs(${r}(height2) - height); + var dz1: ${r} = abs(width - ${r}(width1)); + var dz2: ${r} = abs(${r}(width2) - width); + if (depth1 == depth2) { + dx1 = 0.5; + dx2 = 0.5; + } + if (height1 == height2) { + dy1 = 0.5; + dy2 = 0.5; + } + if (width1 == width2) { + dz1 = 0.5; + dz2 = 0.5; + } + return (x111 * dx2 * dy2 * dz2 + x112 * dx2 * dy2 * dz1 + x121 * dx2 * dy1 *dz2 + x122 * dx2 * dy1 * dz1 + + x211 * dx1 * dy2 * dz2 + x212 * dx1 * dy2 * dz1 + x221 * dx1 * dy1 *dz2 + x222 * dx1 * dy1 * dz1); + }`},eh=(A,g,e,I,i,t)=>{let o=A.dims,C=Od(t,g.axes,o.length),s=Wd(o,I,i,g.axes),Q=I.slice();I.length===0&&(Q=o.map((h,R)=>h===0?1:s[R]/h),g.keepAspectRatioPolicy!=="stretch"&&(s=jd(o,Q,g)));let r=ne("output",A.dataType,s.length),B=kA("input",A.dataType,o.length),a=MA.size(s),d=o.length===s.length&&o.every((h,R)=>h===s[R]),c=g.coordinateTransformMode==="tf_crop_and_resize",F=g.extrapolationValue,L=B.type.value,u=h=>` + ${d?"":` + ${vd(g.coordinateTransformMode,L)}; + ${(()=>{switch(g.mode){case"nearest":return` + ${$d(B,o)}; + ${qd(g.nearestMode,e,L)}; + ${zd(B,r,o,s,Q.length,C.length,c)}; + `;case"linear":return` + ${Vd(r,o,s,Q.length,C.length)}; + ${(()=>{if(o.length===2||o.length===4)return`${Xd(B,r,o,c,F)}`;if(o.length===3||o.length===5)return`${Ah(B,r,o,c,F)}`;throw Error("Linear mode only supports input dims 2, 3, 4 and 5 are supported in linear mode.")})()}; + `;case"cubic":return` + ${(()=>{if(o.length===2||o.length===4)return`${Zd(B,r,o,s,Q,C,g.cubicCoeffA,c,g.extrapolationValue,g.excludeOutside)}`;throw Error("Cubic mode only supports input dims 2 and 4 are supported in linear mode.")})()}; + `;default:throw Error("Invalid resize mode")}})()}; + `} + ${h.registerUniform("output_size","u32").registerUniform("scales","f32",Q.length).registerUniform("roi","f32",C.length).declareVariables(B,r)} + ${h.mainStart()} + ${h.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + ${d?"output[global_idx] = input[global_idx];":` + let output_indices = ${r.offsetToIndices("global_idx")}; + var input_indices: ${B.type.indices}; + ${(()=>{switch(g.mode){case"nearest":return`input_indices = calculateInputIndicesFromOutputIndices(output_indices); + if (checkInputIndices(input_indices)) { + output[global_idx] = ${B.getByIndices("input_indices")}; + } else { + output[global_idx] = ${g.extrapolationValue}; + }`;case"linear":return`output[global_idx] = ${o.length===2||o.length===4?"bilinearInterpolation":"trilinearInterpolation"}(output_indices);`;case"cubic":return"output[global_idx] = bicubicInterpolation(output_indices);";default:throw Error(`Unsupported resize mode: ${g.mode}`)}})()}; +`} + }`;return{name:"Resize",shaderCache:{hint:`${g.cacheKey}|${e}|${Q.length>0?g.mode==="cubic"?Q:Q.length:""}|${i.length>0?i:""}|${C.length>0?C:""}|${d}|${g.mode==="nearest"?o.length:o}`,inputDependencies:["rank"]},getShaderSource:u,getRunData:()=>({outputs:[{dims:s,dataType:A.dataType}],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:[{type:12,data:a},{type:1,data:Q},{type:1,data:C},...de(o,s)]})}},gh=A=>{let g=A.customDataBuffer;return new Uint32Array(g,g.byteOffset,1)[0]},Yw=(A,g)=>{let e=[],I=[],i=[],t=gh(A);if(g.antialias!==0)throw Error("Only default value (0) for Antialias attribute is supported");Pd(A.inputs,g,t,e,I,i),A.compute(eh(A.inputs[0],g,t,e,I,i),{inputs:[0]})},Tw=A=>{let g=A.antialias,e=A.axes,I=A.coordinateTransformMode,i=A.cubicCoeffA,t=A.excludeOutside!==0,o=A.extrapolationValue,C=A.keepAspectRatioPolicy,s=A.mode,Q=A.nearestMode===""?"simple":A.nearestMode;return Oe({antialias:g,axes:e,coordinateTransformMode:I,cubicCoeffA:i,excludeOutside:t,extrapolationValue:o,keepAspectRatioPolicy:C,mode:s,nearestMode:Q})}}),Ih,ih,Hw,Ty=zA(()=>{Me(),ke(),Le(),Ih=A=>{if(!A||A.length<3)throw new Error("layerNorm requires at least 3 inputs.");let g=A[0],e=A[1],I=A[2];if(g.dataType!==e.dataType||g.dataType!==I.dataType)throw new Error("All inputs must have the same data type");if(g.dims.length!==3&&g.dims.length!==2)throw new Error("Input must be 2D or 3D");if(e.dims.length!==3&&e.dims.length!==2)throw new Error("Skip must be 2D or 3D");let i=g.dims[g.dims.length-1],t=g.dims[g.dims.length-2];if(e.dims[e.dims.length-1]!==i)throw new Error("Skip must have the same hidden size as input");if(e.dims[e.dims.length-2]!==t)throw new Error("Skip must have the same sequence length as input");if(I.dims.length!==1)throw new Error("Gamma must be 1D");if(I.dims[I.dims.length-1]!==i)throw new Error("Gamma must have the same hidden size as input");if(A.length>3){let o=A[3];if(o.dims.length!==1)throw new Error("Beta must be 1D");if(o.dims[o.dims.length-1]!==i)throw new Error("Beta must have the same hidden size as input")}if(A.length>4){let o=A[4];if(o.dims.length!==1)throw new Error("Bias must be 1D");if(o.dims[o.dims.length-1]!==i)throw new Error("Bias must have the same hidden size as input")}},ih=(A,g,e,I)=>{let i=g.simplified,t=A[0].dims,o=MA.size(t),C=t,s=o,Q=t.slice(-1)[0],r=I?t.slice(0,-1).concat(1):[],B=!i&&A.length>3,a=A.length>4,d=I&&e>1,c=I&&e>2,F=e>3,L=64,u=cg(Q),h=[{type:12,data:s},{type:12,data:u},{type:12,data:Q},{type:1,data:g.epsilon}],R=y=>{let D=[{name:"output_size",type:"u32"},{name:"components",type:"u32"},{name:"hidden_size",type:"u32"},{name:"epsilon",type:"f32"}],f=[kA("x",A[0].dataType,A[0].dims,u),kA("skip",A[1].dataType,A[1].dims,u),kA("gamma",A[2].dataType,A[2].dims,u)];B&&f.push(kA("beta",A[3].dataType,A[3].dims,u)),a&&f.push(kA("bias",A[4].dataType,A[4].dims,u)),f.push(ne("output",A[0].dataType,C,u)),d&&f.push(ne("mean_output",1,r)),c&&f.push(ne("inv_std_output",1,r)),F&&f.push(ne("input_skip_bias_sum",A[0].dataType,C,u));let G=Yg(A[0].dataType),J=Yg(1,u);return` + + ${y.registerUniforms(D).declareVariables(...f)} + var sum_shared : array<${J}, ${L}>; + var sum_squared_shared : array<${J}, ${L}>; + + ${y.mainStart([L,1,1])} + let ix = local_id.x; + let iy = global_id.x / ${L}; + + let hidden_size_vectorized: u32 = uniforms.hidden_size / uniforms.components; + var stride = hidden_size_vectorized / ${L}; + let offset = ix * stride + iy * hidden_size_vectorized; + let offset1d = stride * ix; + if (ix == ${L-1}) { + stride = hidden_size_vectorized - stride * ix; + } + for (var i: u32 = 0; i < stride; i++) { + let skip_value = skip[offset + i]; + let bias_value = ${a?"bias[offset1d + i]":G+"(0.0)"}; + let input_value = x[offset + i]; + let value = input_value + skip_value + bias_value; + ${F?"input_skip_bias_sum[offset + i] = value;":""} + output[offset + i] = value; + let f32_value = ${At(G,u,"value")}; + sum_shared[ix] += f32_value; + sum_squared_shared[ix] += f32_value * f32_value; + } + workgroupBarrier(); + + var reduce_size : u32 = ${L}; + for (var curr_size = reduce_size >> 1; curr_size > 0; curr_size = reduce_size >> 1) { + reduce_size = curr_size + (reduce_size & 1); + if (ix < curr_size) { + sum_shared[ix] += sum_shared[ix + reduce_size]; + sum_squared_shared[ix] += sum_squared_shared[ix + reduce_size]; + } + workgroupBarrier(); + } + + let sum = sum_shared[0]; + let square_sum = sum_squared_shared[0]; + let mean = ${ei("sum",u)} / f32(uniforms.hidden_size); + let inv_std_dev = inverseSqrt(${ei("square_sum",u)} / f32(uniforms.hidden_size) ${i?"":"- mean * mean"} + uniforms.epsilon); + ${d?"mean_output[global_idx] = mean;":""} + ${c?"inv_std_output[global_idx] = inv_std_dev;":""} + + for (var i: u32 = 0; i < stride; i++) { + output[offset + i] = (output[offset + i] ${i?"":`- ${G}(mean)`}) * + ${G}(inv_std_dev) * gamma[offset1d + i] + ${B?"+ beta[offset1d + i]":""}; + } + }`},w=[{dims:C,dataType:A[0].dataType}];return e>1&&w.push({dims:r,dataType:1}),e>2&&w.push({dims:r,dataType:1}),e>3&&w.push({dims:t,dataType:A[0].dataType}),{name:"SkipLayerNormalization",shaderCache:{hint:`${u};${d};${c};${F}`,inputDependencies:A.map((y,D)=>"type")},getShaderSource:R,getRunData:()=>({outputs:w,dispatchGroup:{x:Math.ceil(s/Q)},programUniforms:h})}},Hw=(A,g)=>{Ih(A.inputs);let e=[0];A.outputCount>1&&e.push(-3),A.outputCount>2&&e.push(-3),A.outputCount>3&&e.push(3),A.compute(ih(A.inputs,g,A.outputCount,!1),{outputs:e})}}),th,Yt,Ch,dB,oh,sh,Pw,vw,Hy=zA(()=>{Me(),ke(),hg(),Le(),th=(A,g)=>{if(!A||A.length<1)throw new Error("too few inputs");if(g.axes.length!==0){if(g.axes.length!==g.starts.length||g.axes.length!==g.ends.length)throw new Error("axes, starts and ends must have the same length")}else if(g.starts.length!==g.ends.length)throw new Error("starts and ends must have the same length");A.slice(1).forEach((e,I)=>{if(A[I+1].dataType!==6&&A[I+1].dataType!==7)throw new Error(`Input ${I} must be an array of int32 or int64`)})},Yt=(A,g)=>{let e=[];if(A.length>g)if(A[g].dataType===7)A[g].getBigInt64Array().forEach(I=>e.push(Number(I)));else if(A[g].dataType===6)A[g].getInt32Array().forEach(I=>e.push(Number(I)));else throw new Error(`Input ${g} must be an array of int32 or int64`);return e},Ch=(A,g)=>{if(A.length>1){let e=Yt(A,1),I=Yt(A,2),i=Yt(A,3);return i.length===0&&(i=[...Array(A[0].dims.length).keys()]),Oe({starts:e,ends:I,axes:i})}else return g},dB=(A,g,e,I,i)=>{let t=A;return A<0&&(t+=e[I[g]]),i[g]<0?Math.max(0,Math.min(t,e[I[g]]-1)):Math.max(0,Math.min(t,e[I[g]]))},oh=(A,g,e)=>`fn calculateInputIndices(output_indices: ${g.type.indices}) -> ${A.type.indices} { + var input_indices: ${A.type.indices}; + var carry = 0u; + for (var i = ${e.length}; i >= 0; i--) { + let input_shape_i = ${ce("uniforms.input_shape","i",e.length)}; + let steps_i = ${ce("uniforms.steps","i",e.length)}; + let signs_i = ${ce("uniforms.signs","i",e.length)}; + let starts_i = ${ce("uniforms.starts","i",e.length)}; + var output_index = ${g.indicesGet("output_indices","i")}; + var input_index = output_index * steps_i + starts_i + carry; + carry = input_index / input_shape_i; + input_index = input_index % input_shape_i; + if (signs_i < 0) { + input_index = input_shape_i - input_index - 1u + starts_i; + } + ${A.indicesSet("input_indices","i","input_index")}; + } + return input_indices; + }`,sh=(A,g)=>{let e=A[0].dims,I=MA.size(e),i=g.axes.length>0?MA.normalizeAxes(g.axes,e.length):[...Array(e.length).keys()],t=Yt(A,4);t.forEach(u=>u!==0||(()=>{throw new Error("step cannot be 0")})),t.length===0&&(t=Array(i.length).fill(1));let o=g.starts.map((u,h)=>dB(u,h,e,i,t)),C=g.ends.map((u,h)=>dB(u,h,e,i,t));if(i.length!==o.length||i.length!==C.length)throw new Error("start, ends and axes should have the same number of elements");if(i.length!==e.length)for(let u=0;uMath.sign(u));t.forEach((u,h,R)=>{if(u<0){let w=(C[h]-o[h])/u,y=o[h],D=y+w*t[h];o[h]=D,C[h]=y,R[h]=-u}});let Q=e.slice(0);i.forEach((u,h)=>{Q[u]=Math.ceil((C[u]-o[u])/t[u])});let r={dims:Q,dataType:A[0].dataType},B=ne("output",A[0].dataType,Q.length),a=kA("input",A[0].dataType,A[0].dims.length),d=MA.size(Q),c=[{name:"outputSize",type:"u32"},{name:"starts",type:"u32",length:o.length},{name:"signs",type:"i32",length:s.length},{name:"steps",type:"u32",length:t.length}],F=[{type:12,data:d},{type:12,data:o},{type:6,data:s},{type:12,data:t},...de(A[0].dims,Q)],L=u=>` + ${u.registerUniforms(c).declareVariables(a,B)} + ${oh(a,B,e)} + ${u.mainStart()} + ${u.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + let output_indices = ${B.offsetToIndices("global_idx")}; + let input_indices = calculateInputIndices(output_indices); + ${B.setByOffset("global_idx",a.getByIndices("input_indices"))} + }`;return{name:"Slice",shaderCache:{hint:`${s.length}_${o.length}_${t.length}`,inputDependencies:["rank"]},getShaderSource:L,getRunData:()=>({outputs:[r],dispatchGroup:{x:Math.ceil(I/64)},programUniforms:F})}},Pw=(A,g)=>{th(A.inputs,g);let e=Ch(A.inputs,g);A.compute(sh(A.inputs,e),{inputs:[0]})},vw=A=>{let g=A.starts,e=A.ends,I=A.axes;return Oe({starts:g,ends:e,axes:I})}}),Bh,Qh,qw,Ow,Py=zA(()=>{Me(),ke(),hg(),gi(),Le(),Bh=A=>{if(!A||A.length!==1)throw new Error("Softmax op requires 1 input.")},Qh=(A,g)=>{let e=A.inputs[0],I=e.dims,i=MA.size(I),t=I.length,o=MA.normalizeAxis(g.axis,t),C=oG),Q[o]=t-1,Q[t-1]=o,s=A.compute(aI(e,Q),{inputs:[e],outputs:[-1]})[0]):s=e;let r=s.dims,B=r[t-1],a=i/B,d=cg(B),c=B/d,F=64;a===1&&(F=256);let L=(f,G)=>G===4?`max(max(${f}.x, ${f}.y), max(${f}.z, ${f}.w))`:G===2?`max(${f}.x, ${f}.y)`:G===3?`max(max(${f}.x, ${f}.y), ${f}.z)`:f,u=kA("x",s.dataType,s.dims,d),h=ne("result",s.dataType,s.dims,d),R=u.type.value,w=Yg(s.dataType)==="f32"?`var threadMax = ${R}(-3.402823e+38f);`:`var threadMax = ${R}(-65504.0h);`,y=f=>` + var rowMaxShared : ${R}; + var rowSumShared : ${R}; + var threadShared : array<${R}, ${F}>; + + fn getValue(row: i32, col: i32, row_stride: i32) -> ${R} { + let index = row * row_stride + col; + return x[index]; + } + + fn setValue(row: i32, col: i32, row_stride: i32, value: ${R}) { + let index = row * row_stride + col; + result[index] = value; + } + ${f.registerUniform("packedCols","i32").declareVariables(u,h)} + ${f.mainStart(F)} + let gindex = i32(global_idx); + let lindex = i32(local_idx); + const wg = ${F}; + let row = gindex / wg; + let cols = uniforms.packedCols; + let row_stride : i32 = uniforms.packedCols; + + // find the rows max + ${w} + for (var col = lindex; col < cols; col += wg) { + let value = getValue(row, col, row_stride); + threadMax = max(threadMax, value); + } + if (lindex < cols) { + threadShared[lindex] = threadMax; + } + workgroupBarrier(); + + var reduceSize = min(cols, wg); + for (var currSize = reduceSize >> 1; currSize > 0; currSize = reduceSize >> 1) { + reduceSize = currSize + (reduceSize & 1); + if (lindex < currSize) { + threadShared[lindex] = max(threadShared[lindex], threadShared[lindex + reduceSize]); + } + workgroupBarrier(); + } + if (lindex == 0) { + rowMaxShared = ${R}(${L("threadShared[0]",d)}); + } + workgroupBarrier(); + + // find the rows sum + var threadSum = ${R}(0.0); + for (var col = lindex; col < cols; col += wg) { + let subExp = exp(getValue(row, col, row_stride) - rowMaxShared); + threadSum += subExp; + } + threadShared[lindex] = threadSum; + workgroupBarrier(); + + for (var currSize = wg >> 1; currSize > 0; currSize = currSize >> 1) { + if (lindex < currSize) { + threadShared[lindex] = threadShared[lindex] + threadShared[lindex + currSize]; + } + workgroupBarrier(); + } + if (lindex == 0) { + rowSumShared = ${R}(${ei("threadShared[0]",d)}); + } + workgroupBarrier(); + + // calculate final value for each element in the row + for (var col = lindex; col < cols; col += wg) { + let value = exp(getValue(row, col, row_stride) - rowMaxShared) / rowSumShared; + setValue(row, col, row_stride, value); + } + }`,D=A.compute({name:"Softmax",shaderCache:{hint:`${d};${F}`,inputDependencies:["type"]},getRunData:()=>({outputs:[{dims:r,dataType:s.dataType}],dispatchGroup:{x:a},programUniforms:[{type:6,data:c}]}),getShaderSource:y},{inputs:[s],outputs:[C?-1:0]})[0];C&&A.compute(aI(D,Q),{inputs:[D]})},qw=(A,g)=>{Bh(A.inputs),Qh(A,g)},Ow=A=>Oe({axis:A.axis})}),hB,ah,rh,Eh,Ww,vy=zA(()=>{Me(),ke(),Le(),hB=A=>Array.from(A.getBigInt64Array(),Number),ah=A=>{if(!A||A.length!==2)throw new Error("Tile requires 2 inputs.");if(A[0].dataType!==1&&A[0].dataType!==10&&A[0].dataType!==6&&A[0].dataType!==12)throw new Error("Tile only support float, float16, int32, and uint32 data types");if(A[1].dataType!==7)throw new Error("Tile `repeats` input should be of int64 data type");if(A[1].dims.length!==1)throw new Error("Tile `repeats` input should be 1-D");if(hB(A[1]).length!==A[0].dims.length)throw new Error("Tile `repeats` input should have same number of elements as rank of input data tensor")},rh=(A,g)=>{let e=[];for(let I=0;I{let e=A[0].dims,I=g??hB(A[1]),i=rh(e,I),t=MA.size(i),o=A[0].dataType,C=kA("input",o,e.length),s=ne("output",o,i.length),Q=r=>` + const inputShape = ${C.indices(...e)}; + ${r.registerUniform("output_size","u32").declareVariables(C,s)} + ${r.mainStart()} + ${r.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let output_indices = ${s.offsetToIndices("global_idx")}; + var input_indices: ${C.type.indices}; + for (var i = 0; i < ${e.length}; i++) { + let input_dim_i = ${C.indicesGet("uniforms.input_shape","i")}; + let input_dim_value = ${s.indicesGet("output_indices","i")} % input_dim_i; + + ${C.indicesSet("input_indices","i","input_dim_value")} + } + ${s.setByOffset("global_idx",C.getByIndices("input_indices"))} + }`;return{name:"Tile",shaderCache:{hint:`${I}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:i,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(t/64)},programUniforms:[{type:12,data:t},...de(A[0].dims,i)]}),getShaderSource:Q}},Ww=A=>{ah(A.inputs),A.compute(Eh(A.inputs),{inputs:[0]})}}),nh,lh,jw,qy=zA(()=>{Me(),ke(),Le(),nh=(A,g,e,I,i)=>{let t=ne("output_data",i,e.length,4),o=kA("a_data",g[1].dataType,g[1].dims.length,4),C=kA("b_data",g[2].dataType,g[2].dims.length,4),s=kA("c_data",g[0].dataType,g[0].dims.length,4),Q,r=(B,a,d)=>`select(${a}, ${B}, ${d})`;if(!I)Q=t.setByOffset("global_idx",r(o.getByOffset("global_idx"),C.getByOffset("global_idx"),s.getByOffset("global_idx")));else{let B=(a,d,c="")=>{let F=`a_data[index_a${d}][component_a${d}]`,L=`b_data[index_b${d}][component_b${d}]`,u=`bool(c_data[index_c${d}] & (0xffu << (component_c${d} * 8)))`;return` + let output_indices${d} = ${t.offsetToIndices(`global_idx * 4u + ${d}u`)}; + let offset_a${d} = ${o.broadcastedIndicesToOffset(`output_indices${d}`,t)}; + let offset_b${d} = ${C.broadcastedIndicesToOffset(`output_indices${d}`,t)}; + let offset_c${d} = ${s.broadcastedIndicesToOffset(`output_indices${d}`,t)}; + let index_a${d} = offset_a${d} / 4u; + let index_b${d} = offset_b${d} / 4u; + let index_c${d} = offset_c${d} / 4u; + let component_a${d} = offset_a${d} % 4u; + let component_b${d} = offset_b${d} % 4u; + let component_c${d} = offset_c${d} % 4u; + ${a}[${d}] = ${c}(${r(F,L,u)}); + `};i===9?Q=` + var data = vec4(0); + ${B("data",0,"u32")} + ${B("data",1,"u32")} + ${B("data",2,"u32")} + ${B("data",3,"u32")} + output_data[global_idx] = dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(data));`:Q=` + ${B("output_data[global_idx]",0)} + ${B("output_data[global_idx]",1)} + ${B("output_data[global_idx]",2)} + ${B("output_data[global_idx]",3)} + `}return` + ${A.registerUniform("vec_size","u32").declareVariables(s,o,C,t)} + ${A.mainStart()} + ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} + ${Q} + }`},lh=A=>{let g=A[1].dims,e=A[2].dims,I=A[0].dims,i=A[1].dataType,t=!(MA.areEqual(g,e)&&MA.areEqual(e,I)),o=g,C=MA.size(g);if(t){let Q=et.calcShape(et.calcShape(g,e,!1),I,!1);if(!Q)throw new Error("Can't perform where op on the given tensors");o=Q,C=MA.size(o)}let s=Math.ceil(C/4);return{name:"Where",shaderCache:{inputDependencies:["rank","rank","rank"]},getShaderSource:Q=>nh(Q,A,o,t,i),getRunData:()=>({outputs:[{dims:o,dataType:i}],dispatchGroup:{x:Math.ceil(C/64/4)},programUniforms:[{type:12,data:s},...de(I,g,e,o)]})}},jw=A=>{A.compute(lh(A.inputs))}}),Vw,Oy=zA(()=>{Cy(),iQ(),oy(),sy(),By(),Qy(),ay(),cy(),hy(),Dy(),uy(),wy(),py(),yy(),fy(),my(),My(),Fy(),Sy(),Ny(),Ry(),Gy(),_y(),ky(),Ly(),nw(),Ky(),Uy(),Jy(),by(),xy(),IQ(),Yy(),Dw(),Ty(),Hy(),Py(),dw(),vy(),gi(),tQ(),qy(),Vw=new Map([["Abs",[HD]],["Acos",[PD]],["Acosh",[vD]],["Add",[fu]],["ArgMax",[bD,_B]],["ArgMin",[JD,_B]],["Asin",[qD]],["Asinh",[OD]],["Atan",[WD]],["Atanh",[jD]],["Attention",[xD]],["AveragePool",[Sw,Fw]],["BatchNormalization",[YD]],["BiasAdd",[TD]],["BiasSplitGelu",[yu]],["Cast",[zD,VD]],["Ceil",[XD]],["Clip",[$D]],["Concat",[Lu,Ku]],["Conv",[bB,JB]],["ConvTranspose",[qu,vu]],["Cos",[ZD]],["Cosh",[Au]],["CumSum",[Ou,Wu]],["DepthToSpace",[ju,Vu]],["DequantizeLinear",[Kw,Uw]],["Div",[mu]],["Einsum",[zu,$u]],["Elu",[eu,qt]],["Equal",[Mu]],["Erf",[gu]],["Exp",[Iu]],["Expand",[Xu]],["FastGelu",[Zu]],["Floor",[iu]],["FusedConv",[bB,JB]],["Gather",[ew,Aw]],["GatherElements",[ow,Cw]],["GatherBlockQuantized",[iw,tw]],["GatherND",[gw,Iw]],["Gelu",[tu]],["Gemm",[Bw,sw]],["GlobalAveragePool",[Rw,Nw]],["GlobalMaxPool",[Lw,kw]],["Greater",[Ru]],["GreaterOrEqual",[_u]],["GridSample",[Qw,aw]],["GroupQueryAttention",[uw]],["HardSigmoid",[Eu,ru]],["InstanceNormalization",[ww]],["LayerNormalization",[pw]],["LeakyRelu",[Cu,qt]],["Less",[Gu]],["LessOrEqual",[ku]],["Log",[wu]],["MatMul",[yw]],["MatMulNBits",[fw,mw]],["MaxPool",[Gw,_w]],["Mul",[Fu]],["MultiHeadAttention",[Ew,rw]],["Neg",[su]],["Not",[ou]],["Pad",[Mw]],["Pow",[Su]],["QuickGelu",[pu,qt]],["Range",[Jw]],["Reciprocal",[Bu]],["ReduceMin",[_D]],["ReduceMean",[FD]],["ReduceMax",[GD]],["ReduceSum",[LD]],["ReduceProd",[kD]],["ReduceL1",[SD]],["ReduceL2",[ND]],["ReduceLogSum",[UD]],["ReduceLogSumExp",[RD]],["ReduceSumSquare",[KD]],["Relu",[Qu]],["Resize",[Yw,Tw]],["RotaryEmbedding",[hw]],["ScatterND",[xw,bw]],["Sigmoid",[au]],["Sin",[nu]],["Sinh",[lu]],["Slice",[Pw,vw]],["SkipLayerNormalization",[Hw]],["Split",[lw,cw]],["Sqrt",[cu]],["Softmax",[qw,Ow]],["Sub",[Nu]],["Tan",[du]],["Tanh",[hu]],["ThresholdedRelu",[uu,qt]],["Tile",[Ww]],["Transpose",[lD,cD]],["Where",[jw]]])}),zw,Wy=zA(()=>{UI(),qI(),Le(),zw=class{constructor(A){this.backend=A,this.repo=new Map,this.attributesBound=!1}getArtifact(A){return this.repo.get(A)}setArtifact(A,g){this.repo.set(A,g)}run(A,g,e,I,i){KI(A.programInfo.name);let t=this.backend.device,o=this.backend.getComputePassEncoder();this.backend.writeTimestamp(this.backend.pendingDispatchNumber*2);let C=[];for(let Q of g)C.push({binding:C.length,resource:{buffer:Q.buffer}});for(let Q of e)C.push({binding:C.length,resource:{buffer:Q.buffer}});i&&C.push({binding:C.length,resource:i});let s=t.createBindGroup({layout:A.computePipeline.getBindGroupLayout(0),entries:C,label:A.programInfo.name});if(this.backend.sessionStatus==="capturing"){let Q={kernelId:this.backend.currentKernelId,computePipeline:A.computePipeline,bindGroup:s,dispatchGroup:I};this.backend.capturedCommandList.get(this.backend.currentSessionId).push(Q)}o.setPipeline(A.computePipeline),o.setBindGroup(0,s),o.dispatchWorkgroups(...I),this.backend.writeTimestamp(this.backend.pendingDispatchNumber*2+1),this.backend.pendingDispatchNumber++,(this.backend.pendingDispatchNumber>=this.backend.maxDispatchNumber||this.backend.queryType==="at-passes")&&this.backend.endComputePass(),this.backend.pendingDispatchNumber>=this.backend.maxDispatchNumber&&this.backend.flush(),DI(A.programInfo.name)}dispose(){}build(A,g){KI(A.name);let e=this.backend.device,I=[];[{feature:"shader-f16",extension:"f16"},{feature:"subgroups",extension:"subgroups"}].forEach(Q=>{e.features.has(Q.feature)&&I.push(`enable ${Q.extension};`)});let i=nD(g,this.backend.device.limits),t=A.getShaderSource(i),o=`${I.join(` +`)} +${i.additionalImplementations} +${t}`,C=e.createShaderModule({code:o,label:A.name});Te("verbose",()=>`[WebGPU] ${A.name} shader code: ${o}`);let s=e.createComputePipeline({compute:{module:C,entryPoint:"main"},layout:"auto",label:A.name});return DI(A.name),{programInfo:A,computePipeline:s,uniformVariablesInfo:i.variablesInfo}}normalizeDispatchGroupSize(A){let g=typeof A=="number"?A:A.x,e=typeof A=="number"?1:A.y||1,I=typeof A=="number"?1:A.z||1,i=this.backend.device.limits.maxComputeWorkgroupsPerDimension;if(g<=i&&e<=i&&I<=i)return[g,e,I];let t=g*e*I,o=Math.ceil(Math.sqrt(t));if(o>i){if(o=Math.ceil(Math.cbrt(t)),o>i)throw new Error("Total dispatch size exceeds WebGPU maximum.");return[o,o,o]}else return[o,o,1]}}}),$w={};It($w,{WebGpuBackend:()=>Xw});var ch,dh,hh,Xw,jy=zA(()=>{UI(),Me(),qI(),BD(),iy(),Oy(),Wy(),ch=(A,g)=>{if(g.length!==A.length)throw new Error(`inputDependencies length ${g.length} is not equal to inputTensors length ${A.length}.`);let e=[];for(let I=0;I{let I=A.name;return A.shaderCache?.hint&&(I+="["+A.shaderCache.hint+"]"),I+=":"+e+`:${ch(g,A.shaderCache?.inputDependencies??new Array(g.length).fill("dims"))}`,I},hh=class{constructor(A){A&&(this.architecture=A.architecture,this.vendor=A.vendor)}isArchitecture(A){return this.architecture===A}isVendor(A){return this.vendor===A}},Xw=class{constructor(){this.currentSessionId=null,this.currentKernelId=null,this.commandEncoder=null,this.computePassEncoder=null,this.maxDispatchNumber=16,this.pendingDispatchNumber=0,this.pendingKernels=[],this.pendingQueries=new Map,this.sessionStatus="default",this.capturedCommandList=new Map,this.capturedPendingKernels=new Map,this.sessionExternalDataMapping=new Map}get currentKernelCustomData(){if(this.currentKernelId===null)throw new Error("currentKernelCustomData(): currentKernelId is null. (should not happen)");let A=this.kernelCustomData.get(this.currentKernelId);return A||(A={},this.kernelCustomData.set(this.currentKernelId,A)),A}async initialize(A,g){this.env=A;let e=[],I={requiredLimits:{maxComputeWorkgroupStorageSize:g.limits.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:g.limits.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:g.limits.maxStorageBufferBindingSize,maxBufferSize:g.limits.maxBufferSize,maxComputeInvocationsPerWorkgroup:g.limits.maxComputeInvocationsPerWorkgroup,maxComputeWorkgroupSizeX:g.limits.maxComputeWorkgroupSizeX,maxComputeWorkgroupSizeY:g.limits.maxComputeWorkgroupSizeY,maxComputeWorkgroupSizeZ:g.limits.maxComputeWorkgroupSizeZ},requiredFeatures:e},i=t=>g.features.has(t)&&e.push(t)&&!0;i("chromium-experimental-timestamp-query-inside-passes")||i("timestamp-query"),i("shader-f16"),i("subgroups"),this.device=await g.requestDevice(I),this.adapterInfo=new hh(g.info||await g.requestAdapterInfo()),this.gpuDataManager=rD(this),this.programManager=new zw(this),this.kernels=new Map,this.kernelPersistentData=new Map,this.kernelCustomData=new Map,ZB(A.logLevel,!!A.debug),this.device.onuncapturederror=t=>{t.error instanceof GPUValidationError&&console.error(`An uncaught WebGPU validation error was raised: ${t.error.message}`)},Object.defineProperty(this.env.webgpu,"device",{value:this.device,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(this.env.webgpu,"adapter",{value:g,writable:!1,enumerable:!0,configurable:!1}),this.setQueryType()}dispose(){typeof this.querySet<"u"&&this.querySet.destroy(),this.gpuDataManager.dispose()}getCommandEncoder(){return this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder()),this.commandEncoder}getComputePassEncoder(){if(!this.computePassEncoder){let A=this.getCommandEncoder(),g={};this.queryType==="at-passes"&&(g.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:this.pendingDispatchNumber*2,endOfPassWriteIndex:this.pendingDispatchNumber*2+1}),this.computePassEncoder=A.beginComputePass(g)}return this.computePassEncoder}endComputePass(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}flush(){if(!this.commandEncoder)return;KI(),this.endComputePass();let A;this.queryType!=="none"&&(this.commandEncoder.resolveQuerySet(this.querySet,0,this.pendingDispatchNumber*2,this.queryResolveBuffer,0),A=this.device.createBuffer({size:this.pendingDispatchNumber*2*8,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),this.pendingQueries.set(A,this.pendingKernels),this.pendingKernels=[],this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,A,0,this.pendingDispatchNumber*2*8)),this.device.queue.submit([this.commandEncoder.finish()]),this.gpuDataManager.refreshPendingBuffers(),this.commandEncoder=null,this.pendingDispatchNumber=0,this.queryType!=="none"&&A.mapAsync(GPUMapMode.READ).then(()=>{let g=new BigUint64Array(A.getMappedRange()),e=this.pendingQueries.get(A);for(let I=0;I"u"&&(this.queryTimeBase=a);let c=Number(a-this.queryTimeBase),F=Number(d-this.queryTimeBase);if(!Number.isSafeInteger(c)||!Number.isSafeInteger(F))throw new RangeError("incorrect timestamp range");if(this.env.webgpu.profiling?.ondata)this.env.webgpu.profiling.ondata({version:1,inputsMetadata:r.map(L=>({dims:L.dims,dataType:vI(L.dataType)})),outputsMetadata:B.map(L=>({dims:L.dims,dataType:vI(L.dataType)})),kernelId:t,kernelType:C,kernelName:s,programName:Q,startTime:c,endTime:F});else{let L="";r.forEach((h,R)=>{L+=`input[${R}]: [${h.dims}] | ${vI(h.dataType)}, `});let u="";B.forEach((h,R)=>{u+=`output[${R}]: [${h.dims}] | ${vI(h.dataType)}, `}),console.log(`[profiling] kernel "${t}|${C}|${s}|${Q}" ${L}${u}execution time: ${F-c} ns`)}Vt("GPU",`${Q}::${a}::${d}`)}A.unmap(),this.pendingQueries.delete(A)}),DI()}run(A,g,e,I,i,t){KI(A.name);let o=[];for(let h=0;hR):e;if(r.length!==C.length)throw new Error(`Output size ${r.length} must be equal to ${C.length}.`);let B=[],a=[];for(let h=0;h=t)throw new Error(`Invalid output index: ${r[h]}`);if(r[h]===-3)continue;let R=r[h]===-1,w=r[h]===-2,y=R||w?i(C[h].dataType,C[h].dims):I(r[h],C[h].dataType,C[h].dims);if(B.push(y),y.data===0)continue;let D=this.gpuDataManager.get(y.data);if(!D)throw new Error(`no GPU data for output: ${y.data}`);if(R&&this.temporaryData.push(D),w){let f=this.kernelPersistentData.get(this.currentKernelId);f||(f=[],this.kernelPersistentData.set(this.currentKernelId,f)),f.push(D)}a.push(D)}if(o.length!==g.length||a.length!==B.length){if(a.length===0)return DI(A.name),B;throw new Error(`Program ${A.name} has zero-sized tensor(s) in inputs or outputs. This is not supported now.`)}let d;if(Q){let h=0,R=[];Q.forEach(f=>{let G=typeof f.data=="number"?[f.data]:f.data;if(G.length===0)return;let J=f.type===10?2:4,T,X;f.type===10?(X=G.length>4?16:G.length>2?8:G.length*J,T=G.length>4?16:J*G.length):(X=G.length<=2?G.length*J:16,T=16),h=Math.ceil(h/X)*X,R.push(h);let gA=f.type===10?8:4;h+=G.length>4?Math.ceil(G.length/gA)*T:G.length*J});let w=16;h=Math.ceil(h/w)*w;let y=new ArrayBuffer(h);Q.forEach((f,G)=>{let J=R[G],T=typeof f.data=="number"?[f.data]:f.data;if(f.type===6)new Int32Array(y,J,T.length).set(T);else if(f.type===12)new Uint32Array(y,J,T.length).set(T);else if(f.type===10)new Uint16Array(y,J,T.length).set(T);else if(f.type===1)new Float32Array(y,J,T.length).set(T);else throw new Error(`Unsupported uniform type: ${vI(f.type)}`)});let D=this.gpuDataManager.create(h,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.device.queue.writeBuffer(D.buffer,0,y,0,h),this.gpuDataManager.release(D.id),d={offset:0,size:h,buffer:D.buffer}}let c=this.programManager.normalizeDispatchGroupSize(s),F=c[1]===1&&c[2]===1,L=dh(A,g,F),u=this.programManager.getArtifact(L);if(u||(u=this.programManager.build(A,c),this.programManager.setArtifact(L,u),Te("info",()=>`[artifact] key: ${L}, programName: ${A.name}`)),Q&&u.uniformVariablesInfo){if(Q.length!==u.uniformVariablesInfo.length)throw new Error(`Uniform variables count mismatch: expect ${u.uniformVariablesInfo.length}, got ${Q.length} in program "${u.programInfo.name}".`);for(let h=0;h`[ProgramManager] run "${A.name}" (key=${L}) with ${c[0]}x${c[1]}x${c[2]}`),this.queryType!=="none"||this.sessionStatus==="capturing"){let h={kernelId:this.currentKernelId,programName:u.programInfo.name,inputTensorViews:g,outputTensorViews:B};this.pendingKernels.push(h),this.sessionStatus==="capturing"&&this.capturedPendingKernels.get(this.currentSessionId).push(h)}return this.programManager.run(u,o,a,c,d),DI(A.name),B}upload(A,g){this.gpuDataManager.upload(A,g)}memcpy(A,g){this.gpuDataManager.memcpy(A,g)}async download(A,g){await this.gpuDataManager.download(A,g)}alloc(A){return this.gpuDataManager.create(A).id}free(A){return this.gpuDataManager.release(A)}createKernel(A,g,e,I){let i=Vw.get(A);if(!i)throw new Error(`kernel not implemented: ${A}`);let t={kernelType:A,kernelName:I,kernelEntry:i[0],attributes:[i[1],e]};this.kernels.set(g,t)}releaseKernel(A){let g=this.kernelPersistentData.get(A);if(g){for(let e of g)this.gpuDataManager.release(e.id);this.kernelPersistentData.delete(A)}this.kernelCustomData.delete(A),this.kernels.delete(A)}computeKernel(A,g,e){let I=this.kernels.get(A);if(!I)throw new Error(`kernel not created: ${A}`);let i=I.kernelType,t=I.kernelName,o=I.kernelEntry,C=I.attributes;if(this.currentKernelId!==null)throw new Error(`kernel "[${i}] ${t}" is not allowed to be called recursively`);this.currentKernelId=A,C[0]&&(C[1]=C[0](C[1]),C[0]=void 0),Te("info",()=>`[WebGPU] Start to run kernel "[${i}] ${t}"...`);let s=this.env.debug;this.temporaryData=[];try{return s&&this.device.pushErrorScope("validation"),o(g,C[1]),0}catch(Q){return e.push(Promise.resolve(`[WebGPU] Kernel "[${i}] ${t}" failed. ${Q}`)),1}finally{s&&e.push(this.device.popErrorScope().then(Q=>Q?`GPU validation error for kernel "[${i}] ${t}": ${Q.message}`:null));for(let Q of this.temporaryData)this.gpuDataManager.release(Q.id);this.temporaryData=[],this.currentKernelId=null}}registerBuffer(A,g,e,I){let i=this.sessionExternalDataMapping.get(A);i||(i=new Map,this.sessionExternalDataMapping.set(A,i));let t=i.get(g),o=this.gpuDataManager.registerExternalBuffer(e,I,t);return i.set(g,[o,e]),o}unregisterBuffers(A){let g=this.sessionExternalDataMapping.get(A);g&&(g.forEach(e=>this.gpuDataManager.unregisterExternalBuffer(e[0])),this.sessionExternalDataMapping.delete(A))}getBuffer(A){let g=this.gpuDataManager.get(A);if(!g)throw new Error(`no GPU data for buffer: ${A}`);return g.buffer}createDownloader(A,g,e){return async()=>{let I=await NB(this,A,g);return AQ(I.buffer,e)}}writeTimestamp(A){this.queryType==="inside-passes"&&this.computePassEncoder.writeTimestamp(this.querySet,A)}setQueryType(){this.queryType="none",(this.env.webgpu.profiling?.mode==="default"||(typeof this.env.trace>"u"?this.env.wasm.trace:this.env.trace))&&(this.device.features.has("chromium-experimental-timestamp-query-inside-passes")?this.queryType="inside-passes":this.device.features.has("timestamp-query")&&(this.queryType="at-passes"),this.queryType!=="none"&&typeof this.querySet>"u"&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.maxDispatchNumber*2}),this.queryResolveBuffer=this.device.createBuffer({size:this.maxDispatchNumber*2*8,usage:GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE})))}captureBegin(){Te("info","captureBegin"),this.capturedCommandList.get(this.currentSessionId)||this.capturedCommandList.set(this.currentSessionId,[]),this.capturedPendingKernels.get(this.currentSessionId)||this.capturedPendingKernels.set(this.currentSessionId,[]),this.flush(),this.sessionStatus="capturing"}captureEnd(){Te("info","captureEnd"),this.flush(),this.sessionStatus="default"}replay(){Te("info","replay"),this.sessionStatus="replaying";let A=this.capturedCommandList.get(this.currentSessionId),g=this.capturedPendingKernels.get(this.currentSessionId),e=A.length;this.pendingKernels=[];for(let I=0;I=this.maxDispatchNumber||this.queryType==="at-passes")&&this.endComputePass(),this.pendingDispatchNumber>=this.maxDispatchNumber&&this.flush()}this.flush(),this.sessionStatus="default"}onCreateSession(){this.gpuDataManager.onCreateSession()}onReleaseSession(A){this.unregisterBuffers(A),this.capturedCommandList.has(A)&&this.capturedCommandList.delete(A),this.capturedPendingKernels.has(A)&&this.capturedPendingKernels.delete(A),this.gpuDataManager.onReleaseSession(A)}onRunStart(A){this.currentSessionId=A,this.setQueryType()}}}),Zw={};It(Zw,{init:()=>A0});var VC,Dh,A0,Vy=zA(()=>{Me(),qI(),ke(),Iy(),VC=class e0{constructor(g,e,I,i){this.module=g,this.dataType=e,this.data=I,this.dims=i}getFloat32Array(){if(this.dataType!==1)throw new Error("Invalid data type");let g=MA.size(this.dims);return g===0?new Float32Array:new Float32Array(this.module.HEAP8.buffer,this.data,g)}getBigInt64Array(){if(this.dataType!==7)throw new Error("Invalid data type");let g=MA.size(this.dims);return g===0?new BigInt64Array:new BigInt64Array(this.module.HEAP8.buffer,this.data,g)}getInt32Array(){if(this.dataType!==6)throw new Error("Invalid data type");let g=MA.size(this.dims);return g===0?new Int32Array:new Int32Array(this.module.HEAP8.buffer,this.data,g)}getUint16Array(){if(this.dataType!==10&&this.dataType!==4)throw new Error("Invalid data type");let g=MA.size(this.dims);return g===0?new Uint16Array:new Uint16Array(this.module.HEAP8.buffer,this.data,g)}reshape(g){if(MA.size(g)!==MA.size(this.dims))throw new Error("Invalid new shape");return new e0(this.module,this.dataType,this.data,g)}},Dh=class{constructor(A,g,e){this.module=A,this.backend=g,this.customDataOffset=0,this.customDataSize=0,this.adapterInfo=g.adapterInfo;let I=A.PTR_SIZE,i=e/A.PTR_SIZE,t=I===4?"i32":"i64";this.opKernelContext=Number(A.getValue(I*i++,t));let o=Number(A.getValue(I*i++,t));this.outputCount=Number(A.getValue(I*i++,t)),this.customDataOffset=Number(A.getValue(I*i++,"*")),this.customDataSize=Number(A.getValue(I*i++,t));let C=[];for(let s=0;stypeof o=="number"?this.inputs[o]:o)??this.inputs,I=g?.outputs??[],i=(o,C,s)=>new VC(this.module,C,this.output(o,s),s),t=(o,C)=>{let s=Di(o,C);if(!s)throw new Error(`Unsupported data type: ${o}`);let Q=s>0?this.backend.gpuDataManager.create(s).id:0;return new VC(this.module,o,Q,C)};return this.backend.run(A,e,I,i,t,this.outputCount)}output(A,g){let e=this.module.stackSave();try{let I=this.module.PTR_SIZE,i=I===4?"i32":"i64",t=this.module.stackAlloc((1+g.length)*I);this.module.setValue(t,g.length,i);for(let o=0;o{let i=g.jsepInit;if(!i)throw new Error("Failed to initialize JSEP. The WebAssembly module is not built with JSEP support.");if(A==="webgpu"){let t=(jy(),jt($w)).WebGpuBackend,o=new t;await o.initialize(e,I),i("webgpu",[o,C=>o.alloc(Number(C)),C=>o.free(C),(C,s,Q,r=!1)=>{if(r)Te("verbose",()=>`[WebGPU] jsepCopyGpuToGpu: src=${Number(C)}, dst=${Number(s)}, size=${Number(Q)}`),o.memcpy(Number(C),Number(s));else{Te("verbose",()=>`[WebGPU] jsepCopyCpuToGpu: dataOffset=${Number(C)}, gpuDataId=${Number(s)}, size=${Number(Q)}`);let B=g.HEAPU8.subarray(Number(C>>>0),Number(C>>>0)+Number(Q));o.upload(Number(s),B)}},async(C,s,Q)=>{Te("verbose",()=>`[WebGPU] jsepCopyGpuToCpu: gpuDataId=${C}, dataOffset=${s}, size=${Q}`),await o.download(Number(C),()=>g.HEAPU8.subarray(Number(s)>>>0,Number(s+Q)>>>0))},(C,s,Q)=>o.createKernel(C,Number(s),Q,g.UTF8ToString(g._JsepGetNodeName(Number(s)))),C=>o.releaseKernel(C),(C,s,Q,r)=>{Te("verbose",()=>`[WebGPU] jsepRun: sessionHandle=${Q}, kernel=${C}, contextDataOffset=${s}`);let B=new Dh(g,o,Number(s));return o.computeKernel(Number(C),B,r)},()=>o.captureBegin(),()=>o.captureEnd(),()=>o.replay()])}else{let t=new aD(e);i("webnn",[t,()=>t.reserveTensorId(),o=>t.releaseTensorId(o),async(o,C,s,Q,r)=>t.ensureTensor(o,C,s,Q,r),(o,C)=>{t.uploadTensor(o,C)},async(o,C)=>t.downloadTensor(o,C)])}}}),uh,aQ,rQ,ZI,wh,DB,so,EQ,nQ,uB,lQ,cQ,dQ,g0=zA(()=>{Ay(),ey(),Me(),fi(),jB(),tD(),uh=(A,g)=>{Cg()._OrtInit(A,g)!==0&&$e("Can't initialize onnxruntime.")},aQ=async A=>{uh(A.wasm.numThreads,Io(A.logLevel))},rQ=async(A,g)=>{Cg().asyncInit?.();{let e=(Vy(),jt(Zw)).init;if(g==="webgpu"){if(typeof navigator>"u"||!navigator.gpu)throw new Error("WebGPU is not supported in current environment");let I=A.webgpu.adapter;if(I){if(typeof I.limits!="object"||typeof I.features!="object"||typeof I.requestDevice!="function")throw new Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object.")}else{let i=A.webgpu.powerPreference;if(i!==void 0&&i!=="low-power"&&i!=="high-performance")throw new Error(`Invalid powerPreference setting: "${i}"`);let t=A.webgpu.forceFallbackAdapter;if(t!==void 0&&typeof t!="boolean")throw new Error(`Invalid forceFallbackAdapter setting: "${t}"`);if(I=await navigator.gpu.requestAdapter({powerPreference:i,forceFallbackAdapter:t}),!I)throw new Error('Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.')}await e("webgpu",Cg(),A,I)}if(g==="webnn"){if(typeof navigator>"u"||!navigator.ml)throw new Error("WebNN is not supported in current environment");await e("webnn",Cg(),A)}}},ZI=new Map,wh=A=>{let g=Cg(),e=g.stackSave();try{let I=g.PTR_SIZE,i=g.stackAlloc(2*I);g._OrtGetInputOutputCount(A,i,i+I)!==0&&$e("Can't get session input/output count.");let t=I===4?"i32":"i64";return[Number(g.getValue(i,t)),Number(g.getValue(i+I,t))]}finally{g.stackRestore(e)}},DB=(A,g)=>{let e=Cg(),I=e.stackSave(),i=0;try{let t=e.PTR_SIZE,o=e.stackAlloc(2*t);e._OrtGetInputOutputMetadata(A,g,o,o+t)!==0&&$e("Can't get session input/output metadata.");let C=Number(e.getValue(o,"*"));i=Number(e.getValue(o+t,"*"));let s=e.HEAP32[i/4];if(s===0)return[C,0];let Q=e.HEAPU32[i/4+1],r=[];for(let B=0;B{let g=Cg(),e=g._malloc(A.byteLength);if(e===0)throw new Error(`Can't create a session. failed to allocate a buffer of size ${A.byteLength}.`);return g.HEAPU8.set(A,e),[e,A.byteLength]},EQ=async(A,g)=>{let e,I,i=Cg();Array.isArray(A)?[e,I]=A:A.buffer===i.HEAPU8.buffer?[e,I]=[A.byteOffset,A.byteLength]:[e,I]=so(A);let t=0,o=0,C=0,s=[],Q=[],r=[];try{if([o,s]=await iD(g),g?.externalData&&i.mountExternalData){let w=[];for(let y of g.externalData){let D=typeof y=="string"?y:y.path;w.push(XB(typeof y=="string"?y:y.data).then(f=>{i.mountExternalData(D,f)}))}await Promise.all(w)}for(let w of g?.executionProviders??[])if((typeof w=="string"?w:w.name)==="webnn"){if(i.shouldTransferToMLTensor=!1,typeof w!="string"){let y=w,D=y?.context,f=y?.gpuDevice,G=y?.deviceType,J=y?.powerPreference;D?i.currentContext=D:f?i.currentContext=await i.webnnCreateMLContext(f):i.currentContext=await i.webnnCreateMLContext({deviceType:G,powerPreference:J})}else i.currentContext=await i.webnnCreateMLContext();break}t=await i._OrtCreateSession(e,I,o),i.webgpuOnCreateSession?.(t),t===0&&$e("Can't create a session."),i.jsepOnCreateSession?.(),i.currentContext&&(i.webnnRegisterMLContext(t,i.currentContext),i.currentContext=void 0,i.shouldTransferToMLTensor=!0);let[B,a]=wh(t),d=!!g?.enableGraphCapture,c=[],F=[],L=[],u=[],h=[];for(let w=0;ww==="gpu-buffer"||w==="ml-tensor")&&(C=i._OrtCreateBinding(t),C===0&&$e("Can't create IO binding."),R={handle:C,outputPreferredLocations:h,outputPreferredLocationsEncoded:h.map(w=>FB(w))}),ZI.set(t,[t,Q,r,R,d,!1]),[t,c,F,L,u]}catch(B){throw Q.forEach(a=>i._OrtFree(a)),r.forEach(a=>i._OrtFree(a)),C!==0&&i._OrtReleaseBinding(C)!==0&&$e("Can't release IO binding."),t!==0&&i._OrtReleaseSession(t)!==0&&$e("Can't release session."),B}finally{i._free(e),o!==0&&i._OrtReleaseSessionOptions(o)!==0&&$e("Can't release session options."),s.forEach(B=>i._free(B)),i.unmountExternalData?.()}},nQ=A=>{let g=Cg(),e=ZI.get(A);if(!e)throw new Error(`cannot release session. invalid session id: ${A}`);let[I,i,t,o,C]=e;o&&(C&&g._OrtClearBoundOutputs(o.handle)!==0&&$e("Can't clear bound outputs."),g._OrtReleaseBinding(o.handle)!==0&&$e("Can't release IO binding.")),g.jsepOnReleaseSession?.(A),g.webnnOnReleaseSession?.(A),g.webgpuOnReleaseSession?.(A),i.forEach(s=>g._OrtFree(s)),t.forEach(s=>g._OrtFree(s)),g._OrtReleaseSession(I)!==0&&$e("Can't release session."),ZI.delete(A)},uB=async(A,g,e,I,i,t,o=!1)=>{if(!A){g.push(0);return}let C=Cg(),s=C.PTR_SIZE,Q=A[0],r=A[1],B=A[3],a=B,d,c;if(Q==="string"&&(B==="gpu-buffer"||B==="ml-tensor"))throw new Error("String tensor is not supported on GPU.");if(o&&B!=="gpu-buffer")throw new Error(`External buffer must be provided for input/output index ${t} when enableGraphCapture is true.`);if(B==="gpu-buffer"){let u=A[2].gpuBuffer;c=Di(Xi(Q),r);{let h=C.jsepRegisterBuffer;if(!h)throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.');d=h(I,t,u,c)}}else if(B==="ml-tensor"){let u=A[2].mlTensor;c=Di(Xi(Q),r);let h=C.webnnRegisterMLTensor;if(!h)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');d=h(I,u,Xi(Q),r)}else{let u=A[2];if(Array.isArray(u)){c=s*u.length,d=C._malloc(c),e.push(d);for(let h=0;hC.setValue(L+R*s,h,s===4?"i32":"i64"));let u=C._OrtCreateTensor(Xi(Q),d,c,L,r.length,FB(a));u===0&&$e(`Can't create tensor for input/output. session=${I}, index=${t}.`),g.push(u)}finally{C.stackRestore(F)}},lQ=async(A,g,e,I,i,t)=>{let o=Cg(),C=o.PTR_SIZE,s=ZI.get(A);if(!s)throw new Error(`cannot run inference. invalid session id: ${A}`);let Q=s[0],r=s[1],B=s[2],a=s[3],d=s[4],c=s[5],F=g.length,L=I.length,u=0,h=[],R=[],w=[],y=[],D=o.stackSave(),f=o.stackAlloc(F*C),G=o.stackAlloc(F*C),J=o.stackAlloc(L*C),T=o.stackAlloc(L*C);try{[u,h]=ID(t);for(let x=0;xRA*YA,1);CA=vI(q);let xA=a?.outputPreferredLocations[I[x]];if(CA==="string"){if(xA==="gpu-buffer"||xA==="ml-tensor")throw new Error("String tensor is not supported on GPU.");let RA=[];for(let YA=0;YA0){let RA=o.jsepGetBuffer;if(!RA)throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.');let YA=RA(DA),ge=Di(q,EA);if(ge===void 0||!zB(CA))throw new Error(`Unsupported data type: ${CA}`);oA=!0,gA.push([CA,H,{gpuBuffer:YA,download:o.jsepCreateDownloader(YA,ge,CA),dispose:()=>{o._OrtReleaseTensor(tA)!==0&&$e("Can't release tensor.")}},"gpu-buffer"])}else if(xA==="ml-tensor"&&EA>0){let RA=o.webnnEnsureTensor,YA=o.webnnIsInt64Supported;if(!RA||!YA)throw new Error('preferredLocation "ml-tensor" is not supported without using WebNN.');if(Di(q,EA)===void 0||!$B(CA))throw new Error(`Unsupported data type: ${CA}`);if(CA==="int64"&&!YA(A))throw new Error('preferredLocation "ml-tensor" for int64 output is not supported by current WebNN Context.');let ge=await RA(A,DA,q,H,!1);oA=!0,gA.push([CA,H,{mlTensor:ge,download:o.webnnCreateMLTensorDownloader(DA,CA),dispose:()=>{o.webnnReleaseTensorId(DA),o._OrtReleaseTensor(tA)}},"ml-tensor"])}else{let RA=VB(CA),YA=new RA(EA);new Uint8Array(YA.buffer,YA.byteOffset,YA.byteLength).set(o.HEAPU8.subarray(DA,DA+YA.byteLength)),gA.push([CA,H,YA,"cpu"])}}finally{o.stackRestore(Z),CA==="string"&&DA&&o._free(DA),oA||o._OrtReleaseTensor(tA),o.webnnOnRunEnd?.(Q)}}return a&&!d&&(o._OrtClearBoundOutputs(a.handle)!==0&&$e("Can't clear bound outputs."),ZI.set(A,[Q,r,B,a,d,!1])),gA}finally{o.stackRestore(D),R.forEach(X=>o._OrtReleaseTensor(X)),w.forEach(X=>o._OrtReleaseTensor(X)),y.forEach(X=>o._free(X)),u!==0&&o._OrtReleaseRunOptions(u),h.forEach(X=>o._free(X))}},cQ=A=>{let g=Cg(),e=ZI.get(A);if(!e)throw new Error("invalid session id");let I=e[0],i=g._OrtEndProfiling(I);i===0&&$e("Can't get an profile file name."),g._OrtFree(i)},dQ=A=>{let g=[];for(let e of A){let I=e[2];!Array.isArray(I)&&"buffer"in I&&g.push(I.buffer)}return g}}),Ai,cI,Vi,Tt,Ht,zC,wB,$C,li,ci,ph,I0,i0,t0,C0,o0,s0,B0,Q0=zA(()=>{UI(),g0(),fi(),OB(),Ai=()=>!!sg.wasm.proxy&&typeof document<"u",Vi=!1,Tt=!1,Ht=!1,$C=new Map,li=(A,g)=>{let e=$C.get(A);e?e.push(g):$C.set(A,[g])},ci=()=>{if(Vi||!Tt||Ht||!cI)throw new Error("worker not ready")},ph=A=>{switch(A.data.type){case"init-wasm":Vi=!1,A.data.err?(Ht=!0,wB[1](A.data.err)):(Tt=!0,wB[0]()),zC&&(URL.revokeObjectURL(zC),zC=void 0);break;case"init-ep":case"copy-from":case"create":case"release":case"run":case"end-profiling":{let g=$C.get(A.data.type);A.data.err?g.shift()[1](A.data.err):g.shift()[0](A.data.out);break}}},I0=async()=>{if(!Tt){if(Vi)throw new Error("multiple calls to 'initWasm()' detected.");if(Ht)throw new Error("previous call to 'initWasm()' failed.");if(Vi=!0,Ai())return new Promise((A,g)=>{cI?.terminate(),eD().then(([e,I])=>{try{cI=I,cI.onerror=t=>g(t),cI.onmessage=ph,wB=[A,g];let i={type:"init-wasm",in:sg};!i.in.wasm.wasmPaths&&(e||MB)&&(i.in.wasm.wasmPaths={wasm:new URL(""+new URL("ort-wasm-simd-threaded.jsep-B0T3yYHD.wasm",import.meta.url).href,import.meta.url).href}),cI.postMessage(i),zC=e}catch(i){g(i)}},g)});try{await WB(sg.wasm),await aQ(sg),Tt=!0}catch(A){throw Ht=!0,A}finally{Vi=!1}}},i0=async A=>{if(Ai())return ci(),new Promise((g,e)=>{li("init-ep",[g,e]);let I={type:"init-ep",in:{epName:A,env:sg}};cI.postMessage(I)});await rQ(sg,A)},t0=async A=>Ai()?(ci(),new Promise((g,e)=>{li("copy-from",[g,e]);let I={type:"copy-from",in:{buffer:A}};cI.postMessage(I,[A.buffer])})):so(A),C0=async(A,g)=>{if(Ai()){if(g?.preferredOutputLocation)throw new Error('session option "preferredOutputLocation" is not supported for proxy.');return ci(),new Promise((e,I)=>{li("create",[e,I]);let i={type:"create",in:{model:A,options:{...g}}},t=[];A instanceof Uint8Array&&t.push(A.buffer),cI.postMessage(i,t)})}else return EQ(A,g)},o0=async A=>{if(Ai())return ci(),new Promise((g,e)=>{li("release",[g,e]);let I={type:"release",in:A};cI.postMessage(I)});nQ(A)},s0=async(A,g,e,I,i,t)=>{if(Ai()){if(e.some(o=>o[3]!=="cpu"))throw new Error("input tensor on GPU is not supported for proxy.");if(i.some(o=>o))throw new Error("pre-allocated output tensor is not supported for proxy.");return ci(),new Promise((o,C)=>{li("run",[o,C]);let s=e,Q={type:"run",in:{sessionId:A,inputIndices:g,inputs:s,outputIndices:I,options:t}};cI.postMessage(Q,dQ(s))})}else return lQ(A,g,e,I,i,t)},B0=async A=>{if(Ai())return ci(),new Promise((g,e)=>{li("end-profiling",[g,e]);let I={type:"end-profiling",in:A};cI.postMessage(I)});cQ(A)}}),pB,yh,a0,zy=zA(()=>{UI(),Q0(),Me(),qB(),tD(),pB=(A,g)=>{switch(A.location){case"cpu":return[A.type,A.dims,A.data,"cpu"];case"gpu-buffer":return[A.type,A.dims,{gpuBuffer:A.gpuBuffer},"gpu-buffer"];case"ml-tensor":return[A.type,A.dims,{mlTensor:A.mlTensor},"ml-tensor"];default:throw new Error(`invalid data location: ${A.location} for ${g()}`)}},yh=A=>{switch(A[3]){case"cpu":return new kI(A[0],A[2],A[1]);case"gpu-buffer":{let g=A[0];if(!zB(g))throw new Error(`not supported data type: ${g} for deserializing GPU tensor`);let{gpuBuffer:e,download:I,dispose:i}=A[2];return kI.fromGpuBuffer(e,{dataType:g,dims:A[1],download:I,dispose:i})}case"ml-tensor":{let g=A[0];if(!$B(g))throw new Error(`not supported data type: ${g} for deserializing MLTensor tensor`);let{mlTensor:e,download:I,dispose:i}=A[2];return kI.fromMLTensor(e,{dataType:g,dims:A[1],download:I,dispose:i})}default:throw new Error(`invalid data location: ${A[3]}`)}},a0=class{async fetchModelAndCopyToWasmMemory(A){return t0(await XB(A))}async loadModel(A,g){KI();let e;typeof A=="string"?e=await this.fetchModelAndCopyToWasmMemory(A):e=A,[this.sessionId,this.inputNames,this.outputNames,this.inputMetadata,this.outputMetadata]=await C0(e,g),DI()}async dispose(){return o0(this.sessionId)}async run(A,g,e){KI();let I=[],i=[];Object.entries(A).forEach(B=>{let a=B[0],d=B[1],c=this.inputNames.indexOf(a);if(c===-1)throw new Error(`invalid input '${a}'`);I.push(d),i.push(c)});let t=[],o=[];Object.entries(g).forEach(B=>{let a=B[0],d=B[1],c=this.outputNames.indexOf(a);if(c===-1)throw new Error(`invalid output '${a}'`);t.push(d),o.push(c)});let C=I.map((B,a)=>pB(B,()=>`input "${this.inputNames[i[a]]}"`)),s=t.map((B,a)=>B?pB(B,()=>`output "${this.outputNames[o[a]]}"`):null),Q=await s0(this.sessionId,i,C,o,s,e),r={};for(let B=0;BTB,initializeFlags:()=>YB,wasmBackend:()=>E0});var YB,TB,E0,$y=zA(()=>{UI(),Q0(),zy(),YB=()=>{(typeof sg.wasm.initTimeout!="number"||sg.wasm.initTimeout<0)&&(sg.wasm.initTimeout=0);let A=sg.wasm.simd;if(typeof A!="boolean"&&A!==void 0&&A!=="fixed"&&A!=="relaxed"&&(console.warn(`Property "env.wasm.simd" is set to unknown value "${A}". Reset it to \`false\` and ignore SIMD feature checking.`),sg.wasm.simd=!1),typeof sg.wasm.proxy!="boolean"&&(sg.wasm.proxy=!1),typeof sg.wasm.trace!="boolean"&&(sg.wasm.trace=!1),typeof sg.wasm.numThreads!="number"||!Number.isInteger(sg.wasm.numThreads)||sg.wasm.numThreads<=0)if(typeof self<"u"&&!self.crossOriginIsolated)sg.wasm.numThreads=1;else{let g=typeof navigator>"u"?Jp("node:os").cpus().length:navigator.hardwareConcurrency;sg.wasm.numThreads=Math.min(4,Math.ceil((g||1)/2))}},TB=class{async init(A){YB(),await I0(),await i0(A)}async createInferenceSessionHandler(A,g){let e=new a0;return await e.loadModel(A,g),e}},E0=new TB});UI();UI();UI();var Xy="1.22.0-dev.20250409-89f8206ba4",Zy=Vh;{let A=($y(),jt(r0)).wasmBackend;ui("webgpu",A,5),ui("webnn",A,5),ui("cpu",A,10),ui("wasm",A,10)}Object.defineProperty(sg.versions,"web",{value:Xy,enumerable:!0});/** +* @license +* Copyright 2021 Google LLC. All Rights Reserved. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ============================================================================= +*//** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + *//** + * @license + * Copyright 2019 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */var Af=Object.freeze({__proto__:null,get InferenceSession(){return vB},get TRACE(){return Vt},get TRACE_FUNC_BEGIN(){return KI},get TRACE_FUNC_END(){return DI},get Tensor(){return kI},default:Zy,get env(){return sg},get registerBackend(){return ui}}),yB={},ef={"onnxruntime-common":A=>{A.exports=kp},"onnxruntime-web":A=>{A.exports=Af},"?2ce3":()=>{},"?7a2c":()=>{},"?a42a":()=>{},"?2b25":()=>{},"?569f":()=>{},"?3f59":()=>{},"?154a":()=>{},"./node_modules/@huggingface/jinja/dist/index.js":(A,g,e)=>{e.r(g),e.d(g,{Environment:()=>jA,Interpreter:()=>Ce,Template:()=>ye,parse:()=>z,tokenize:()=>B});var I=Object.freeze({Text:"Text",NumericLiteral:"NumericLiteral",BooleanLiteral:"BooleanLiteral",NullLiteral:"NullLiteral",StringLiteral:"StringLiteral",Identifier:"Identifier",Equals:"Equals",OpenParen:"OpenParen",CloseParen:"CloseParen",OpenStatement:"OpenStatement",CloseStatement:"CloseStatement",OpenExpression:"OpenExpression",CloseExpression:"CloseExpression",OpenSquareBracket:"OpenSquareBracket",CloseSquareBracket:"CloseSquareBracket",OpenCurlyBracket:"OpenCurlyBracket",CloseCurlyBracket:"CloseCurlyBracket",Comma:"Comma",Dot:"Dot",Colon:"Colon",Pipe:"Pipe",CallOperator:"CallOperator",AdditiveBinaryOperator:"AdditiveBinaryOperator",MultiplicativeBinaryOperator:"MultiplicativeBinaryOperator",ComparisonBinaryOperator:"ComparisonBinaryOperator",UnaryOperator:"UnaryOperator",Set:"Set",If:"If",For:"For",In:"In",Is:"Is",NotIn:"NotIn",Else:"Else",EndSet:"EndSet",EndIf:"EndIf",ElseIf:"ElseIf",EndFor:"EndFor",And:"And",Or:"Or",Not:"UnaryOperator",Macro:"Macro",EndMacro:"EndMacro",Break:"Break",Continue:"Continue"}),i=Object.freeze({set:I.Set,for:I.For,in:I.In,is:I.Is,if:I.If,else:I.Else,endset:I.EndSet,endif:I.EndIf,elif:I.ElseIf,endfor:I.EndFor,and:I.And,or:I.Or,not:I.Not,"not in":I.NotIn,macro:I.Macro,endmacro:I.EndMacro,break:I.Break,continue:I.Continue,true:I.BooleanLiteral,false:I.BooleanLiteral,none:I.NullLiteral,True:I.BooleanLiteral,False:I.BooleanLiteral,None:I.NullLiteral}),t=class{constructor(b,QA){this.value=b,this.type=QA}};function o(b){return/\w/.test(b)}function C(b){return/[0-9]/.test(b)}var s=[["{%",I.OpenStatement],["%}",I.CloseStatement],["{{",I.OpenExpression],["}}",I.CloseExpression],["(",I.OpenParen],[")",I.CloseParen],["{",I.OpenCurlyBracket],["}",I.CloseCurlyBracket],["[",I.OpenSquareBracket],["]",I.CloseSquareBracket],[",",I.Comma],[".",I.Dot],[":",I.Colon],["|",I.Pipe],["<=",I.ComparisonBinaryOperator],[">=",I.ComparisonBinaryOperator],["==",I.ComparisonBinaryOperator],["!=",I.ComparisonBinaryOperator],["<",I.ComparisonBinaryOperator],[">",I.ComparisonBinaryOperator],["+",I.AdditiveBinaryOperator],["-",I.AdditiveBinaryOperator],["*",I.MultiplicativeBinaryOperator],["/",I.MultiplicativeBinaryOperator],["%",I.MultiplicativeBinaryOperator],["=",I.Equals]],Q=new Map([["n",` +`],["t"," "],["r","\r"],["b","\b"],["f","\f"],["v","\v"],["'","'"],['"','"'],["\\","\\"]]);function r(b,QA={}){return b.endsWith(` +`)&&(b=b.slice(0,-1)),b=b.replace(/{#.*?#}/gs,"{##}"),QA.lstrip_blocks&&(b=b.replace(/^[ \t]*({[#%])/gm,"$1")),QA.trim_blocks&&(b=b.replace(/([#%]})\n/g,"$1")),b.replace(/{##}/g,"").replace(/-%}\s*/g,"%}").replace(/\s*{%-/g,"{%").replace(/-}}\s*/g,"}}").replace(/\s*{{-/g,"{{")}function B(b,QA={}){const v=[],sA=r(b,QA);let wA=0;const TA=mA=>{let k="";for(;mA(sA[wA]);){if(sA[wA]==="\\"){if(++wA,wA>=sA.length)throw new SyntaxError("Unexpected end of input");const te=sA[wA++],Be=Q.get(te);if(Be===void 0)throw new SyntaxError(`Unexpected escaped character: ${te}`);k+=Be;continue}if(k+=sA[wA++],wA>=sA.length)throw new SyntaxError("Unexpected end of input")}return k};A:for(;wA0){v.push(new t(te,I.Text));continue}}TA(te=>/\s/.test(te));const k=sA[wA];if(k==="-"||k==="+"){const te=v.at(-1)?.type;if(te===I.Text||te===void 0)throw new SyntaxError(`Unexpected character: ${k}`);switch(te){case I.Identifier:case I.NumericLiteral:case I.BooleanLiteral:case I.NullLiteral:case I.StringLiteral:case I.CloseParen:case I.CloseSquareBracket:break;default:{++wA;const Be=TA(C);v.push(new t(`${k}${Be}`,Be.length>0?I.NumericLiteral:I.UnaryOperator));continue}}}for(const[te,Be]of s)if(sA.slice(wA,wA+te.length)===te){v.push(new t(te,Be)),wA+=te.length;continue A}if(k==="'"||k==='"'){++wA;const te=TA(Be=>Be!==k);v.push(new t(te,I.StringLiteral)),++wA;continue}if(C(k)){const te=TA(C);v.push(new t(te,I.NumericLiteral));continue}if(o(k)){const te=TA(o),Be=Object.hasOwn(i,te)?i[te]:I.Identifier;Be===I.In&&v.at(-1)?.type===I.Not?(v.pop(),v.push(new t("not in",I.NotIn))):v.push(new t(te,Be));continue}throw new SyntaxError(`Unexpected character: ${k}`)}return v}var a=class{type="Statement"},d=class extends a{constructor(b){super(),this.body=b}type="Program"},c=class extends a{constructor(b,QA,v){super(),this.test=b,this.body=QA,this.alternate=v}type="If"},F=class extends a{constructor(b,QA,v,sA){super(),this.loopvar=b,this.iterable=QA,this.body=v,this.defaultBlock=sA}type="For"},L=class extends a{type="Break"},u=class extends a{type="Continue"},h=class extends a{constructor(b,QA,v){super(),this.assignee=b,this.value=QA,this.body=v}type="Set"},R=class extends a{constructor(b,QA,v){super(),this.name=b,this.args=QA,this.body=v}type="Macro"},w=class extends a{type="Expression"},y=class extends w{constructor(b,QA,v){super(),this.object=b,this.property=QA,this.computed=v}type="MemberExpression"},D=class extends w{constructor(b,QA){super(),this.callee=b,this.args=QA}type="CallExpression"},f=class extends w{constructor(b){super(),this.value=b}type="Identifier"},G=class extends w{constructor(b){super(),this.value=b}type="Literal"},J=class extends G{type="NumericLiteral"},T=class extends G{type="StringLiteral"},X=class extends G{type="BooleanLiteral"},gA=class extends G{type="NullLiteral"},x=class extends G{type="ArrayLiteral"},tA=class extends G{type="TupleLiteral"},Z=class extends G{type="ObjectLiteral"},IA=class extends w{constructor(b,QA,v){super(),this.operator=b,this.left=QA,this.right=v}type="BinaryExpression"},oA=class extends w{constructor(b,QA){super(),this.operand=b,this.filter=QA}type="FilterExpression"},CA=class extends w{constructor(b,QA){super(),this.iterable=b,this.test=QA}type="SelectExpression"},DA=class extends w{constructor(b,QA,v){super(),this.operand=b,this.negate=QA,this.test=v}type="TestExpression"},cA=class extends w{constructor(b,QA){super(),this.operator=b,this.argument=QA}type="UnaryExpression"},q=class extends w{constructor(b=void 0,QA=void 0,v=void 0){super(),this.start=b,this.stop=QA,this.step=v}type="SliceExpression"},U=class extends w{constructor(b,QA){super(),this.key=b,this.value=QA}type="KeywordArgumentExpression"};function z(b){const QA=new d([]);let v=0;function sA(HA,Ae){const le=b[v++];if(!le||le.type!==HA)throw new Error(`Parser Error: ${Ae}. ${le.type} !== ${HA}.`);return le}function wA(){switch(b[v].type){case I.Text:return k();case I.OpenStatement:return te();case I.OpenExpression:return Be();default:throw new SyntaxError(`Unexpected token type: ${b[v].type}`)}}function TA(...HA){return v+HA.length<=b.length&&HA.some((Ae,le)=>Ae!==b[v+le].type)}function mA(...HA){return v+HA.length<=b.length&&HA.every((Ae,le)=>Ae===b[v+le].type)}function k(){return new T(sA(I.Text,"Expected text token").value)}function te(){sA(I.OpenStatement,"Expected opening statement token");let HA;switch(b[v].type){case I.Set:++v,HA=og(),sA(I.CloseStatement,"Expected closing statement token");break;case I.If:++v,HA=Je(),sA(I.OpenStatement,"Expected {% token"),sA(I.EndIf,"Expected endif token"),sA(I.CloseStatement,"Expected %} token");break;case I.Macro:++v,HA=Bg(),sA(I.OpenStatement,"Expected {% token"),sA(I.EndMacro,"Expected endmacro token"),sA(I.CloseStatement,"Expected %} token");break;case I.For:++v,HA=Tg(),sA(I.OpenStatement,"Expected {% token"),sA(I.EndFor,"Expected endfor token"),sA(I.CloseStatement,"Expected %} token");break;case I.Break:++v,sA(I.CloseStatement,"Expected closing statement token"),HA=new L;break;case I.Continue:++v,sA(I.CloseStatement,"Expected closing statement token"),HA=new u;break;default:throw new SyntaxError(`Unknown statement type: ${b[v].type}`)}return HA}function Be(){sA(I.OpenExpression,"Expected opening expression token");const HA=eg();return sA(I.CloseExpression,"Expected closing expression token"),HA}function og(){const HA=eg();if(mA(I.Equals)){++v;const Ae=eg();return new h(HA,Ae,[])}else{const Ae=[];for(sA(I.CloseStatement,"Expected %} token");!(b[v]?.type===I.OpenStatement&&b[v+1]?.type===I.EndSet);){const le=wA();Ae.push(le)}return sA(I.OpenStatement,"Expected {% token"),sA(I.EndSet,"Expected endset token"),new h(HA,null,Ae)}}function Je(){const HA=eg();sA(I.CloseStatement,"Expected closing statement token");const Ae=[],le=[];for(;!(b[v]?.type===I.OpenStatement&&(b[v+1]?.type===I.ElseIf||b[v+1]?.type===I.Else||b[v+1]?.type===I.EndIf));)Ae.push(wA());if(b[v]?.type===I.OpenStatement&&b[v+1]?.type!==I.EndIf)if(++v,mA(I.ElseIf))sA(I.ElseIf,"Expected elseif token"),le.push(Je());else for(sA(I.Else,"Expected else token"),sA(I.CloseStatement,"Expected closing statement token");!(b[v]?.type===I.OpenStatement&&b[v+1]?.type===I.EndIf);)le.push(wA());return new c(HA,Ae,le)}function Bg(){const HA=Ug();if(HA.type!=="Identifier")throw new SyntaxError("Expected identifier following macro statement");const Ae=tI();sA(I.CloseStatement,"Expected closing statement token");const le=[];for(;TA(I.OpenStatement,I.EndMacro);)le.push(wA());return new R(HA,Ae,le)}function Xe(HA=!1){const Ae=HA?Ug:eg,le=[Ae()],Dg=mA(I.Comma);for(;Dg&&(++v,le.push(Ae()),!!mA(I.Comma)););return Dg?new tA(le):le[0]}function Tg(){const HA=Xe(!0);if(!(HA instanceof f||HA instanceof tA))throw new SyntaxError(`Expected identifier/tuple for the loop variable, got ${HA.type} instead`);sA(I.In,"Expected `in` keyword following loop variable");const Ae=eg();sA(I.CloseStatement,"Expected closing statement token");const le=[];for(;TA(I.OpenStatement,I.EndFor)&&TA(I.OpenStatement,I.Else);)le.push(wA());const Dg=[];if(mA(I.OpenStatement,I.Else))for(++v,++v,sA(I.CloseStatement,"Expected closing statement token");TA(I.OpenStatement,I.EndFor);)Dg.push(wA());return new F(HA,Ae,le,Dg)}function eg(){return Lg()}function Lg(){const HA=eI();if(mA(I.If)){++v;const Ae=eI();if(mA(I.Else)){++v;const le=eI();return new c(Ae,[HA],[le])}else return new CA(HA,Ae)}return HA}function eI(){let HA=iI();for(;mA(I.Or);){const Ae=b[v];++v;const le=iI();HA=new IA(Ae,HA,le)}return HA}function iI(){let HA=$g();for(;mA(I.And);){const Ae=b[v];++v;const le=$g();HA=new IA(Ae,HA,le)}return HA}function $g(){let HA;for(;mA(I.Not);){const Ae=b[v];++v;const le=$g();HA=new cA(Ae,le)}return HA??rI()}function rI(){let HA=Fg();for(;mA(I.ComparisonBinaryOperator)||mA(I.In)||mA(I.NotIn);){const Ae=b[v];++v;const le=Fg();HA=new IA(Ae,HA,le)}return HA}function Fg(){let HA=gI();for(;mA(I.AdditiveBinaryOperator);){const Ae=b[v];++v;const le=gI();HA=new IA(Ae,HA,le)}return HA}function EI(){const HA=Ig(Ug());return mA(I.OpenParen)?Xg(HA):HA}function Xg(HA){let Ae=new D(HA,tI());return Ae=Ig(Ae),mA(I.OpenParen)&&(Ae=Xg(Ae)),Ae}function tI(){sA(I.OpenParen,"Expected opening parenthesis for arguments list");const HA=Hg();return sA(I.CloseParen,"Expected closing parenthesis for arguments list"),HA}function Hg(){const HA=[];for(;!mA(I.CloseParen);){let Ae=eg();if(mA(I.Equals)){if(++v,!(Ae instanceof f))throw new SyntaxError("Expected identifier for keyword argument");const le=eg();Ae=new U(Ae,le)}HA.push(Ae),mA(I.Comma)&&++v}return HA}function uI(){const HA=[];let Ae=!1;for(;!mA(I.CloseSquareBracket);)mA(I.Colon)?(HA.push(void 0),++v,Ae=!0):(HA.push(eg()),mA(I.Colon)&&(++v,Ae=!0));if(HA.length===0)throw new SyntaxError("Expected at least one argument for member/slice expression");if(Ae){if(HA.length>3)throw new SyntaxError("Expected 0-3 arguments for slice expression");return new q(...HA)}return HA[0]}function Ig(HA){for(;mA(I.Dot)||mA(I.OpenSquareBracket);){const Ae=b[v];++v;let le;const Dg=Ae.type!==I.Dot;if(Dg)le=uI(),sA(I.CloseSquareBracket,"Expected closing square bracket");else if(le=Ug(),le.type!=="Identifier")throw new SyntaxError("Expected identifier following dot operator");HA=new y(HA,le,Dg)}return HA}function gI(){let HA=II();for(;mA(I.MultiplicativeBinaryOperator);){const Ae=b[v];++v;const le=II();HA=new IA(Ae,HA,le)}return HA}function II(){let HA=Kg();for(;mA(I.Is);){++v;const Ae=mA(I.Not);Ae&&++v;let le=Ug();if(le instanceof X?le=new f(le.value.toString()):le instanceof gA&&(le=new f("none")),!(le instanceof f))throw new SyntaxError("Expected identifier for the test");HA=new DA(HA,Ae,le)}return HA}function Kg(){let HA=EI();for(;mA(I.Pipe);){++v;let Ae=Ug();if(!(Ae instanceof f))throw new SyntaxError("Expected identifier for the filter");mA(I.OpenParen)&&(Ae=Xg(Ae)),HA=new oA(HA,Ae)}return HA}function Ug(){const HA=b[v];switch(HA.type){case I.NumericLiteral:return++v,new J(Number(HA.value));case I.StringLiteral:return++v,new T(HA.value);case I.BooleanLiteral:return++v,new X(HA.value.toLowerCase()==="true");case I.NullLiteral:return++v,new gA(null);case I.Identifier:return++v,new f(HA.value);case I.OpenParen:{++v;const Ae=Xe();if(b[v].type!==I.CloseParen)throw new SyntaxError(`Expected closing parenthesis, got ${b[v].type} instead`);return++v,Ae}case I.OpenSquareBracket:{++v;const Ae=[];for(;!mA(I.CloseSquareBracket);)Ae.push(eg()),mA(I.Comma)&&++v;return++v,new x(Ae)}case I.OpenCurlyBracket:{++v;const Ae=new Map;for(;!mA(I.CloseCurlyBracket);){const le=eg();sA(I.Colon,"Expected colon between key and value in object literal");const Dg=eg();Ae.set(le,Dg),mA(I.Comma)&&++v}return++v,new Z(Ae)}default:throw new SyntaxError(`Unexpected token: ${HA.type}`)}}for(;v=0?(QA=(QA??=0)<0?Math.max(b.length+QA,0):Math.min(QA,b.length),v=(v??=b.length)<0?Math.max(b.length+v,0):Math.min(v,b.length)):(QA=(QA??=b.length-1)<0?Math.max(b.length+QA,-1):Math.min(QA,b.length-1),v=(v??=-1)<-1?Math.max(b.length+v,-1):Math.min(v,b.length-1));const TA=[];for(let mA=QA;wA*mAQA.toUpperCase())}var RA=class extends Error{},YA=class extends Error{},ge=class{type="RuntimeValue";value;builtins=new Map;constructor(b=void 0){this.value=b}__bool__(){return new dA(!!this.value)}},hA=class extends ge{type="NumericValue"},j=class extends ge{type="StringValue";builtins=new Map([["upper",new GA(()=>new j(this.value.toUpperCase()))],["lower",new GA(()=>new j(this.value.toLowerCase()))],["strip",new GA(()=>new j(this.value.trim()))],["title",new GA(()=>new j(xA(this.value)))],["length",new hA(this.value.length)],["rstrip",new GA(()=>new j(this.value.trimEnd()))],["lstrip",new GA(()=>new j(this.value.trimStart()))],["startswith",new GA(b=>{if(b.length===0)throw new Error("startswith() requires at least one argument");const QA=b[0];if(!(QA instanceof j))throw new Error("startswith() argument must be a string");return new dA(this.value.startsWith(QA.value))})],["endswith",new GA(b=>{if(b.length===0)throw new Error("endswith() requires at least one argument");const QA=b[0];if(!(QA instanceof j))throw new Error("endswith() argument must be a string");return new dA(this.value.endsWith(QA.value))})],["split",new GA(b=>{const QA=b[0]??new KA;if(!(QA instanceof j||QA instanceof KA))throw new Error("sep argument must be a string or null");const v=b[1]??new hA(-1);if(!(v instanceof hA))throw new Error("maxsplit argument must be a number");let sA=[];if(QA instanceof KA){const wA=this.value.trimStart();for(const{0:TA,index:mA}of wA.matchAll(/\S+/g)){if(v.value!==-1&&sA.length>=v.value&&mA!==void 0){sA.push(TA+wA.slice(mA+TA.length));break}sA.push(TA)}}else{if(QA.value==="")throw new Error("empty separator");sA=this.value.split(QA.value),v.value!==-1&&sA.length>v.value&&sA.push(sA.splice(v.value).join(QA.value))}return new FA(sA.map(wA=>new j(wA)))})]])},dA=class extends ge{type="BooleanValue"},$=class extends ge{type="ObjectValue";__bool__(){return new dA(this.value.size>0)}builtins=new Map([["get",new GA(([b,QA])=>{if(!(b instanceof j))throw new Error(`Object key must be a string: got ${b.type}`);return this.value.get(b.value)??QA??new KA})],["items",new GA(()=>new FA(Array.from(this.value.entries()).map(([b,QA])=>new FA([new j(b),QA]))))]])},fA=class extends ${type="KeywordArgumentsValue"},FA=class extends ge{type="ArrayValue";builtins=new Map([["length",new hA(this.value.length)]]);__bool__(){return new dA(this.value.length>0)}},LA=class extends FA{type="TupleValue"},GA=class extends ge{type="FunctionValue"},KA=class extends ge{type="NullValue"},vA=class extends ge{type="UndefinedValue"},jA=class{constructor(b){this.parent=b}variables=new Map([["namespace",new GA(b=>{if(b.length===0)return new $(new Map);if(b.length!==1||!(b[0]instanceof $))throw new Error("`namespace` expects either zero arguments or a single object argument");return b[0]})]]);tests=new Map([["boolean",b=>b.type==="BooleanValue"],["callable",b=>b instanceof GA],["odd",b=>{if(b.type!=="NumericValue")throw new Error(`Cannot apply test "odd" to type: ${b.type}`);return b.value%2!==0}],["even",b=>{if(b.type!=="NumericValue")throw new Error(`Cannot apply test "even" to type: ${b.type}`);return b.value%2===0}],["false",b=>b.type==="BooleanValue"&&!b.value],["true",b=>b.type==="BooleanValue"&&b.value],["none",b=>b.type==="NullValue"],["string",b=>b.type==="StringValue"],["number",b=>b.type==="NumericValue"],["integer",b=>b.type==="NumericValue"&&Number.isInteger(b.value)],["iterable",b=>b.type==="ArrayValue"||b.type==="StringValue"],["mapping",b=>b.type==="ObjectValue"],["lower",b=>{const QA=b.value;return b.type==="StringValue"&&QA===QA.toLowerCase()}],["upper",b=>{const QA=b.value;return b.type==="StringValue"&&QA===QA.toUpperCase()}],["none",b=>b.type==="NullValue"],["defined",b=>b.type!=="UndefinedValue"],["undefined",b=>b.type==="UndefinedValue"],["equalto",(b,QA)=>b.value===QA.value],["eq",(b,QA)=>b.value===QA.value]]);set(b,QA){return this.declareVariable(b,Ie(QA))}declareVariable(b,QA){if(this.variables.has(b))throw new SyntaxError(`Variable already declared: ${b}`);return this.variables.set(b,QA),QA}setVariable(b,QA){return this.variables.set(b,QA),QA}resolve(b){if(this.variables.has(b))return this;if(this.parent)return this.parent.resolve(b);throw new Error(`Unknown variable: ${b}`)}lookupVariable(b){try{return this.resolve(b).variables.get(b)??new vA}catch{return new vA}}},Ce=class{global;constructor(b){this.global=b??new jA}run(b){return this.evaluate(b,this.global)}evaluateBinaryExpression(b,QA){const v=this.evaluate(b.left,QA);switch(b.operator.value){case"and":return v.__bool__().value?this.evaluate(b.right,QA):v;case"or":return v.__bool__().value?v:this.evaluate(b.right,QA)}const sA=this.evaluate(b.right,QA);switch(b.operator.value){case"==":return new dA(v.value==sA.value);case"!=":return new dA(v.value!=sA.value)}if(v instanceof vA||sA instanceof vA)throw new Error("Cannot perform operation on undefined values");if(v instanceof KA||sA instanceof KA)throw new Error("Cannot perform operation on null values");if(v instanceof hA&&sA instanceof hA)switch(b.operator.value){case"+":return new hA(v.value+sA.value);case"-":return new hA(v.value-sA.value);case"*":return new hA(v.value*sA.value);case"/":return new hA(v.value/sA.value);case"%":return new hA(v.value%sA.value);case"<":return new dA(v.value":return new dA(v.value>sA.value);case">=":return new dA(v.value>=sA.value);case"<=":return new dA(v.value<=sA.value)}else if(v instanceof FA&&sA instanceof FA)switch(b.operator.value){case"+":return new FA(v.value.concat(sA.value))}else if(sA instanceof FA){const wA=sA.value.find(TA=>TA.value===v.value)!==void 0;switch(b.operator.value){case"in":return new dA(wA);case"not in":return new dA(!wA)}}if(v instanceof j||sA instanceof j)switch(b.operator.value){case"+":return new j(v.value.toString()+sA.value.toString())}if(v instanceof j&&sA instanceof j)switch(b.operator.value){case"in":return new dA(sA.value.includes(v.value));case"not in":return new dA(!sA.value.includes(v.value))}if(v instanceof j&&sA instanceof $)switch(b.operator.value){case"in":return new dA(sA.value.has(v.value));case"not in":return new dA(!sA.value.has(v.value))}throw new SyntaxError(`Unknown operator "${b.operator.value}" between ${v.type} and ${sA.type}`)}evaluateArguments(b,QA){const v=[],sA=new Map;for(const wA of b)if(wA.type==="KeywordArgumentExpression"){const TA=wA;sA.set(TA.key.value,this.evaluate(TA.value,QA))}else{if(sA.size>0)throw new Error("Positional arguments must come before keyword arguments");v.push(this.evaluate(wA,QA))}return[v,sA]}evaluateFilterExpression(b,QA){const v=this.evaluate(b.operand,QA);if(b.filter.type==="Identifier"){const sA=b.filter;if(sA.value==="tojson")return new j(JA(v));if(v instanceof FA)switch(sA.value){case"list":return v;case"first":return v.value[0];case"last":return v.value[v.value.length-1];case"length":return new hA(v.value.length);case"reverse":return new FA(v.value.reverse());case"sort":return new FA(v.value.sort((wA,TA)=>{if(wA.type!==TA.type)throw new Error(`Cannot compare different types: ${wA.type} and ${TA.type}`);switch(wA.type){case"NumericValue":return wA.value-TA.value;case"StringValue":return wA.value.localeCompare(TA.value);default:throw new Error(`Cannot compare type: ${wA.type}`)}}));case"join":return new j(v.value.map(wA=>wA.value).join(""));case"string":return new j(JA(v));default:throw new Error(`Unknown ArrayValue filter: ${sA.value}`)}else if(v instanceof j)switch(sA.value){case"length":return new hA(v.value.length);case"upper":return new j(v.value.toUpperCase());case"lower":return new j(v.value.toLowerCase());case"title":return new j(xA(v.value));case"capitalize":return new j(v.value.charAt(0).toUpperCase()+v.value.slice(1));case"trim":return new j(v.value.trim());case"indent":return new j(v.value.split(` +`).map((wA,TA)=>TA===0||wA.length===0?wA:" "+wA).join(` +`));case"join":case"string":return v;default:throw new Error(`Unknown StringValue filter: ${sA.value}`)}else if(v instanceof hA)switch(sA.value){case"abs":return new hA(Math.abs(v.value));default:throw new Error(`Unknown NumericValue filter: ${sA.value}`)}else if(v instanceof $)switch(sA.value){case"items":return new FA(Array.from(v.value.entries()).map(([wA,TA])=>new FA([new j(wA),TA])));case"length":return new hA(v.value.size);default:throw new Error(`Unknown ObjectValue filter: ${sA.value}`)}throw new Error(`Cannot apply filter "${sA.value}" to type: ${v.type}`)}else if(b.filter.type==="CallExpression"){const sA=b.filter;if(sA.callee.type!=="Identifier")throw new Error(`Unknown filter: ${sA.callee.type}`);const wA=sA.callee.value;if(wA==="tojson"){const[,TA]=this.evaluateArguments(sA.args,QA),mA=TA.get("indent")??new KA;if(!(mA instanceof hA||mA instanceof KA))throw new Error("If set, indent must be a number");return new j(JA(v,mA.value))}else if(wA==="join"){let TA;if(v instanceof j)TA=Array.from(v.value);else if(v instanceof FA)TA=v.value.map(Be=>Be.value);else throw new Error(`Cannot apply filter "${wA}" to type: ${v.type}`);const[mA,k]=this.evaluateArguments(sA.args,QA),te=mA.at(0)??k.get("separator")??new j("");if(!(te instanceof j))throw new Error("separator must be a string");return new j(TA.join(te.value))}if(v instanceof FA){switch(wA){case"selectattr":case"rejectattr":{const TA=wA==="selectattr";if(v.value.some(Je=>!(Je instanceof $)))throw new Error(`\`${wA}\` can only be applied to array of objects`);if(sA.args.some(Je=>Je.type!=="StringLiteral"))throw new Error(`arguments of \`${wA}\` must be strings`);const[mA,k,te]=sA.args.map(Je=>this.evaluate(Je,QA));let Be;if(k){const Je=QA.tests.get(k.value);if(!Je)throw new Error(`Unknown test: ${k.value}`);Be=Je}else Be=(...Je)=>Je[0].__bool__().value;const og=v.value.filter(Je=>{const Bg=Je.value.get(mA.value),Xe=Bg?Be(Bg,te):!1;return TA?Xe:!Xe});return new FA(og)}case"map":{const[,TA]=this.evaluateArguments(sA.args,QA);if(TA.has("attribute")){const mA=TA.get("attribute");if(!(mA instanceof j))throw new Error("attribute must be a string");const k=TA.get("default"),te=v.value.map(Be=>{if(!(Be instanceof $))throw new Error("items in map must be an object");return Be.value.get(mA.value)??k??new vA});return new FA(te)}else throw new Error("`map` expressions without `attribute` set are not currently supported.")}}throw new Error(`Unknown ArrayValue filter: ${wA}`)}else if(v instanceof j){switch(wA){case"indent":{const[TA,mA]=this.evaluateArguments(sA.args,QA),k=TA.at(0)??mA.get("width")??new hA(4);if(!(k instanceof hA))throw new Error("width must be a number");const te=TA.at(1)??mA.get("first")??new dA(!1),Be=TA.at(2)??mA.get("blank")??new dA(!1),og=v.value.split(` +`),Je=" ".repeat(k.value),Bg=og.map((Xe,Tg)=>!te.value&&Tg===0||!Be.value&&Xe.length===0?Xe:Je+Xe);return new j(Bg.join(` +`))}}throw new Error(`Unknown StringValue filter: ${wA}`)}else throw new Error(`Cannot apply filter "${wA}" to type: ${v.type}`)}throw new Error(`Unknown filter: ${b.filter.type}`)}evaluateTestExpression(b,QA){const v=this.evaluate(b.operand,QA),sA=QA.tests.get(b.test.value);if(!sA)throw new Error(`Unknown test: ${b.test.value}`);const wA=sA(v);return new dA(b.negate?!wA:wA)}evaluateUnaryExpression(b,QA){const v=this.evaluate(b.argument,QA);switch(b.operator.value){case"not":return new dA(!v.value);default:throw new SyntaxError(`Unknown operator: ${b.operator.value}`)}}evalProgram(b,QA){return this.evaluateBlock(b.body,QA)}evaluateBlock(b,QA){let v="";for(const sA of b){const wA=this.evaluate(sA,QA);wA.type!=="NullValue"&&wA.type!=="UndefinedValue"&&(v+=wA.value)}return new j(v)}evaluateIdentifier(b,QA){return QA.lookupVariable(b.value)}evaluateCallExpression(b,QA){const[v,sA]=this.evaluateArguments(b.args,QA);sA.size>0&&v.push(new fA(sA));const wA=this.evaluate(b.callee,QA);if(wA.type!=="FunctionValue")throw new Error(`Cannot call something that is not a function: got ${wA.type}`);return wA.value(v,QA)}evaluateSliceExpression(b,QA,v){if(!(b instanceof FA||b instanceof j))throw new Error("Slice object must be an array or string");const sA=this.evaluate(QA.start,v),wA=this.evaluate(QA.stop,v),TA=this.evaluate(QA.step,v);if(!(sA instanceof hA||sA instanceof vA))throw new Error("Slice start must be numeric or undefined");if(!(wA instanceof hA||wA instanceof vA))throw new Error("Slice stop must be numeric or undefined");if(!(TA instanceof hA||TA instanceof vA))throw new Error("Slice step must be numeric or undefined");return b instanceof FA?new FA(EA(b.value,sA.value,wA.value,TA.value)):new j(EA(Array.from(b.value),sA.value,wA.value,TA.value).join(""))}evaluateMemberExpression(b,QA){const v=this.evaluate(b.object,QA);let sA;if(b.computed){if(b.property.type==="SliceExpression")return this.evaluateSliceExpression(v,b.property,QA);sA=this.evaluate(b.property,QA)}else sA=new j(b.property.value);let wA;if(v instanceof $){if(!(sA instanceof j))throw new Error(`Cannot access property with non-string: got ${sA.type}`);wA=v.value.get(sA.value)??v.builtins.get(sA.value)}else if(v instanceof FA||v instanceof j)if(sA instanceof hA)wA=v.value.at(sA.value),v instanceof j&&(wA=new j(v.value.at(sA.value)));else if(sA instanceof j)wA=v.builtins.get(sA.value);else throw new Error(`Cannot access property with non-string/non-number: got ${sA.type}`);else{if(!(sA instanceof j))throw new Error(`Cannot access property with non-string: got ${sA.type}`);wA=v.builtins.get(sA.value)}return wA instanceof ge?wA:new vA}evaluateSet(b,QA){const v=b.value?this.evaluate(b.value,QA):this.evaluateBlock(b.body,QA);if(b.assignee.type==="Identifier"){const sA=b.assignee.value;QA.setVariable(sA,v)}else if(b.assignee.type==="MemberExpression"){const sA=b.assignee,wA=this.evaluate(sA.object,QA);if(!(wA instanceof $))throw new Error("Cannot assign to member of non-object");if(sA.property.type!=="Identifier")throw new Error("Cannot assign to member with non-identifier property");wA.value.set(sA.property.value,v)}else throw new Error(`Invalid LHS inside assignment expression: ${JSON.stringify(b.assignee)}`);return new KA}evaluateIf(b,QA){const v=this.evaluate(b.test,QA);return this.evaluateBlock(v.__bool__().value?b.body:b.alternate,QA)}evaluateFor(b,QA){const v=new jA(QA);let sA,wA;if(b.iterable.type==="SelectExpression"){const Be=b.iterable;wA=this.evaluate(Be.iterable,v),sA=Be.test}else wA=this.evaluate(b.iterable,v);if(!(wA instanceof FA))throw new Error(`Expected iterable type in for loop: got ${wA.type}`);const TA=[],mA=[];for(let Be=0;BeXe.setVariable(b.loopvar.value,Je);else if(b.loopvar.type==="TupleLiteral"){const Xe=b.loopvar;if(Je.type!=="ArrayValue")throw new Error(`Cannot unpack non-iterable type: ${Je.type}`);const Tg=Je;if(Xe.value.length!==Tg.value.length)throw new Error(`Too ${Xe.value.length>Tg.value.length?"few":"many"} items to unpack`);Bg=eg=>{for(let Lg=0;Lg0?TA[Be-1]:new vA],["nextitem",Be{const wA=new jA(sA);v=v.slice();let TA;v.at(-1)?.type==="KeywordArgumentsValue"&&(TA=v.pop());for(let mA=0;mAthis.evaluate(v,QA)));case"TupleLiteral":return new LA(b.value.map(v=>this.evaluate(v,QA)));case"ObjectLiteral":{const v=new Map;for(const[sA,wA]of b.value){const TA=this.evaluate(sA,QA);if(!(TA instanceof j))throw new Error(`Object keys must be strings: got ${TA.type}`);v.set(TA.value,this.evaluate(wA,QA))}return new $(v)}case"Identifier":return this.evaluateIdentifier(b,QA);case"CallExpression":return this.evaluateCallExpression(b,QA);case"MemberExpression":return this.evaluateMemberExpression(b,QA);case"UnaryExpression":return this.evaluateUnaryExpression(b,QA);case"BinaryExpression":return this.evaluateBinaryExpression(b,QA);case"FilterExpression":return this.evaluateFilterExpression(b,QA);case"TestExpression":return this.evaluateTestExpression(b,QA);default:throw new SyntaxError(`Unknown node type: ${b.type}`)}}};function Ie(b){switch(typeof b){case"number":return new hA(b);case"string":return new j(b);case"boolean":return new dA(b);case"undefined":return new vA;case"object":return b===null?new KA:Array.isArray(b)?new FA(b.map(Ie)):new $(new Map(Object.entries(b).map(([QA,v])=>[QA,Ie(v)])));case"function":return new GA((QA,v)=>{const sA=b(...QA.map(wA=>wA.value))??null;return Ie(sA)});default:throw new Error(`Cannot convert to runtime value: ${b}`)}}function JA(b,QA,v){const sA=v??0;switch(b.type){case"NullValue":case"UndefinedValue":return"null";case"NumericValue":case"StringValue":case"BooleanValue":return JSON.stringify(b.value);case"ArrayValue":case"ObjectValue":{const wA=QA?" ".repeat(QA):"",TA=` +`+wA.repeat(sA),mA=TA+wA;if(b.type==="ArrayValue"){const k=b.value.map(te=>JA(te,QA,sA+1));return QA?`[${mA}${k.join(`,${mA}`)}${TA}]`:`[${k.join(", ")}]`}else{const k=Array.from(b.value.entries()).map(([te,Be])=>{const og=`"${te}": ${JA(Be,QA,sA+1)}`;return QA?`${mA}${og}`:og});return QA?`{${k.join(",")}${TA}}`:`{${k.join(", ")}}`}}default:throw new Error(`Cannot convert to JSON: ${b.type}`)}}var XA=` +`,PA="{%- ",ie=" -%}",he={MultiplicativeBinaryOperator:2,AdditiveBinaryOperator:1,ComparisonBinaryOperator:0};function Qe(b,QA=" "){const v=typeof QA=="number"?" ".repeat(QA):QA;return ae(b.body,0,v).replace(/\n$/,"")}function bA(...b){return PA+b.join(" ")+ie}function ae(b,QA,v){return b.map(sA=>Se(sA,QA,v)).join(XA)}function Se(b,QA,v){const sA=v.repeat(QA);switch(b.type){case"Program":return ae(b.body,QA,v);case"If":return Ag(b,QA,v);case"For":return Ye(b,QA,v);case"Set":return gg(b,QA,v);case"Macro":return Mg(b,QA,v);case"Break":return sA+bA("break");case"Continue":return sA+bA("continue");default:return sA+"{{- "+Fe(b)+" -}}"}}function Ag(b,QA,v){const sA=v.repeat(QA),wA=[];let TA=b;for(;TA&&(wA.push({test:TA.test,body:TA.body}),TA.alternate.length===1&&TA.alternate[0].type==="If");)TA=TA.alternate[0];let mA=sA+bA("if",Fe(wA[0].test))+XA+ae(wA[0].body,QA+1,v);for(let k=1;k0&&(mA+=XA+sA+bA("else")+XA+ae(TA.alternate,QA+1,v)),mA+=XA+sA+bA("endif"),mA}function Ye(b,QA,v){const sA=v.repeat(QA);let wA="";if(b.iterable.type==="SelectExpression"){const mA=b.iterable;wA=`${Fe(mA.iterable)} if ${Fe(mA.test)}`}else wA=Fe(b.iterable);let TA=sA+bA("for",Fe(b.loopvar),"in",wA)+XA+ae(b.body,QA+1,v);return b.defaultBlock.length>0&&(TA+=XA+sA+bA("else")+XA+ae(b.defaultBlock,QA+1,v)),TA+=XA+sA+bA("endfor"),TA}function gg(b,QA,v){const sA=v.repeat(QA),wA=Fe(b.assignee),TA=b.value?Fe(b.value):"",mA=sA+bA("set",`${wA}${b.value?" = "+TA:""}`);return b.body.length===0?mA:mA+XA+ae(b.body,QA+1,v)+XA+sA+bA("endset")}function Mg(b,QA,v){const sA=v.repeat(QA),wA=b.args.map(Fe).join(", ");return sA+bA("macro",`${b.name.value}(${wA})`)+XA+ae(b.body,QA+1,v)+XA+sA+bA("endmacro")}function Fe(b,QA=-1){switch(b.type){case"Identifier":return b.value;case"NullLiteral":return"none";case"NumericLiteral":case"BooleanLiteral":return`${b.value}`;case"StringLiteral":return JSON.stringify(b.value);case"BinaryExpression":{const v=b,sA=he[v.operator.type]??0,wA=Fe(v.left,sA),TA=Fe(v.right,sA+1),mA=`${wA} ${v.operator.value} ${TA}`;return sAFe(wA,-1)).join(", ");return`${Fe(v.callee,-1)}(${sA})`}case"MemberExpression":{const v=b;let sA=Fe(v.object,-1);v.object.type!=="Identifier"&&(sA=`(${sA})`);let wA=Fe(v.property,-1);return!v.computed&&v.property.type!=="Identifier"&&(wA=`(${wA})`),v.computed?`${sA}[${wA}]`:`${sA}.${wA}`}case"FilterExpression":{const v=b,sA=Fe(v.operand,1/0);return v.filter.type==="CallExpression"?`${sA} | ${Fe(v.filter,-1)}`:`${sA} | ${v.filter.value}`}case"SelectExpression":{const v=b;return`${Fe(v.iterable,-1)} | select(${Fe(v.test,-1)})`}case"TestExpression":{const v=b;return`${Fe(v.operand,-1)} is${v.negate?" not":""} ${v.test.value}`}case"ArrayLiteral":case"TupleLiteral":{const v=b.value.map(wA=>Fe(wA,-1)),sA=b.type==="ArrayLiteral"?"[]":"()";return`${sA[0]}${v.join(", ")}${sA[1]}`}case"ObjectLiteral":return`{ ${Array.from(b.value.entries()).map(([sA,wA])=>`${Fe(sA,-1)}: ${Fe(wA,-1)}`).join(", ")} }`;case"SliceExpression":{const v=b,sA=v.start?Fe(v.start,-1):"",wA=v.stop?Fe(v.stop,-1):"",TA=v.step?`:${Fe(v.step,-1)}`:"";return`${sA}:${wA}${TA}`}case"KeywordArgumentExpression":{const v=b;return`${v.key.value}=${Fe(v.value,-1)}`}case"If":{const v=b,sA=Fe(v.test,-1),wA=Fe(v.body[0],0),TA=Fe(v.alternate[0],-1);return`${wA} if ${sA} else ${TA}`}default:throw new Error(`Unknown expression type: ${b.type}`)}}var ye=class{parsed;constructor(b){const QA=B(b,{lstrip_blocks:!0,trim_blocks:!0});this.parsed=z(QA)}render(b){const QA=new jA;if(QA.set("false",!1),QA.set("true",!0),QA.set("raise_exception",wA=>{throw new Error(wA)}),QA.set("range",H),b)for(const[wA,TA]of Object.entries(b))QA.set(wA,TA);return new Ce(QA).run(this.parsed).value}format(b){return Qe(this.parsed,b?.indent||" ")}}},"./src/backends/onnx.js":(A,g,e)=>{var I;e.r(g),e.d(g,{Tensor:()=>C.Tensor,createInferenceSession:()=>L,deviceToExecutionProviders:()=>c,isONNXProxy:()=>R,isONNXTensor:()=>u});var i=e("./src/env.js"),t=e("?2ce3"),o=e("onnxruntime-web"),C=e("onnxruntime-common");const s=Object.freeze({auto:null,gpu:null,cpu:"cpu",wasm:"wasm",webgpu:"webgpu",cuda:"cuda",dml:"dml",webnn:{name:"webnn",deviceType:"cpu"},"webnn-npu":{name:"webnn",deviceType:"npu"},"webnn-gpu":{name:"webnn",deviceType:"gpu"},"webnn-cpu":{name:"webnn",deviceType:"cpu"}}),Q=[];let r,B;const a=Symbol.for("onnxruntime");if(a in globalThis)B=globalThis[a];else if(i.apis.IS_NODE_ENV){switch(B=t??(I||(I=e.t(t,2))),process.platform){case"win32":Q.push("dml");break;case"linux":process.arch==="x64"&&Q.push("cuda");break}Q.push("cpu"),r=["cpu"]}else B=o,i.apis.IS_WEBNN_AVAILABLE&&Q.push("webnn-npu","webnn-gpu","webnn-cpu","webnn"),i.apis.IS_WEBGPU_AVAILABLE&&Q.push("webgpu"),Q.push("wasm"),r=["wasm"];const d=B.InferenceSession;function c(w=null){if(!w)return r;switch(w){case"auto":return Q;case"gpu":return Q.filter(y=>["webgpu","cuda","dml","webnn-gpu"].includes(y))}if(Q.includes(w))return[s[w]??w];throw new Error(`Unsupported device: "${w}". Should be one of: ${Q.join(", ")}.`)}let F=null;async function L(w,y,D){F&&await F;const f=d.create(w,y);F??=f;const G=await f;return G.config=D,G}function u(w){return w instanceof B.Tensor}const h=B?.env;h?.wasm&&(!(typeof ServiceWorkerGlobalScope<"u"&&self instanceof ServiceWorkerGlobalScope)&&!h.wasm.wasmPaths&&(h.wasm.wasmPaths=`https://cdn.jsdelivr.net/npm/@huggingface/transformers@${i.env.version}/dist/`),h.wasm.proxy=!1),h?.webgpu&&(h.webgpu.powerPreference="high-performance");function R(){return h?.wasm?.proxy}i.env.backends.onnx=h},"./src/base/feature_extraction_utils.js":(A,g,e)=>{e.r(g),e.d(g,{FeatureExtractor:()=>o,validate_audio_inputs:()=>C});var I=e("./src/utils/constants.js"),i=e("./src/utils/generic.js"),t=e("./src/utils/hub.js");class o extends i.Callable{constructor(Q){super(),this.config=Q}static async from_pretrained(Q,r){const B=await(0,t.getModelJSON)(Q,I.FEATURE_EXTRACTOR_NAME,!0,r);return new this(B)}}function C(s,Q){if(!(s instanceof Float32Array||s instanceof Float64Array))throw new Error(`${Q} expects input to be a Float32Array or a Float64Array, but got ${s?.constructor?.name??typeof s} instead. If using the feature extractor directly, remember to use \`read_audio(url, sampling_rate)\` to obtain the raw audio data of the file/url.`)}},"./src/base/image_processors_utils.js":(A,g,e)=>{e.r(g),e.d(g,{ImageProcessor:()=>w,center_to_corners_format:()=>B,post_process_instance_segmentation:()=>R,post_process_object_detection:()=>a,post_process_panoptic_segmentation:()=>h,post_process_semantic_segmentation:()=>d});var I=e("./src/utils/generic.js"),i=e("./src/utils/tensor.js"),t=e("./src/utils/maths.js");e("./src/utils/image.js");var o=e("./src/utils/core.js"),C=e("./src/utils/hub.js"),s=e("./src/utils/constants.js");function Q(y,D,f=0,G=null){const J=y/D;let T=(0,t.bankers_round)(J)*D;return G!==null&&T>G&&(T=Math.floor(J)*D),TD&&U.push(H)}else{let H=(0,t.max)(q.data)[1];if(H===x-1||(z=(0,t.softmax)(q.data),z[H]xA*IA[(RA+1)%2])),oA.boxes.push(EA),oA.classes.push(H),oA.scores.push(z[H])}}tA.push(oA)}return tA}function d(y,D=null){const f=y.logits,G=f.dims[0];if(D!==null&&D.length!==G)throw Error("Make sure that you pass in as many target sizes as the batch dimension of the logits");const J=[];for(let T=0;TIA[U]&&(IA[U]=q[U],oA[U]=cA)}const CA=new Array(gA.dims[0]);for(let cA=0;cAcA!==void 0);J.push({segmentation:Z,labels:DA})}return J}function c(y,D,f,G){const J=[],T=[],X=[];for(let gA=0;gAf&&(J.push(tA),T.push(oA),X.push(Z))}return[J,T,X]}function F(y,D,f,G=.5,J=.8){const T=[];let X=0,gA=0;const x=D[f].data;for(let Z=0;Z=G&&++gA;let tA=X>0&&gA>0;return tA&&(tA=X/gA>J),[tA,T]}function L(y,D,f,G,J,T=null,X=null){const[gA,x]=X??y[0].dims,tA=new i.Tensor("int32",new Int32Array(gA*x),[gA,x]),Z=[];if(X!==null)for(let cA=0;cAoA[z]&&(IA[z]=cA,oA[z]=U[z])}let CA=0;const DA=tA.data;for(let cA=0;cA200)throw new Error(`absolute aspect ratio must be smaller than 200, got ${Math.max(y,D)/Math.min(y,D)}`);let T=Math.round(y/f)*f,X=Math.round(D/f)*f;if(T*X>J){const gA=Math.sqrt(y*D/J);T=Math.floor(y/gA/f)*f,X=Math.floor(D/gA/f)*f}else if(T*XT?tA=Math.floor(T*x/J):T>J&&(x=Math.floor(J*tA/T)),await D.resize(tA,x,{resample:G}))}async crop_margin(D,f=200){const G=D.clone().grayscale(),J=(0,t.min)(G.data)[0],X=(0,t.max)(G.data)[0]-J;if(X===0)return D;const gA=f/255;let x=G.width,tA=G.height,Z=0,IA=0;const oA=G.data;for(let CA=0;CAthis.preprocess(T)));return{pixel_values:(0,i.stack)(G.map(T=>T.pixel_values),0),original_sizes:G.map(T=>T.original_size),reshaped_input_sizes:G.map(T=>T.reshaped_input_size)}}static async from_pretrained(D,f){const G=await(0,C.getModelJSON)(D,s.IMAGE_PROCESSOR_NAME,!0,f);return new this(G)}}},"./src/base/processing_utils.js":(A,g,e)=>{e.r(g),e.d(g,{Processor:()=>o});var I=e("./src/utils/constants.js"),i=e("./src/utils/generic.js"),t=e("./src/utils/hub.js");class o extends i.Callable{static classes=["image_processor_class","tokenizer_class","feature_extractor_class"];static uses_processor_config=!1;constructor(s,Q){super(),this.config=s,this.components=Q}get image_processor(){return this.components.image_processor}get tokenizer(){return this.components.tokenizer}get feature_extractor(){return this.components.feature_extractor}apply_chat_template(s,Q={}){if(!this.tokenizer)throw new Error("Unable to apply chat template without a tokenizer.");return this.tokenizer.apply_chat_template(s,{tokenize:!1,...Q})}batch_decode(...s){if(!this.tokenizer)throw new Error("Unable to decode without a tokenizer.");return this.tokenizer.batch_decode(...s)}decode(...s){if(!this.tokenizer)throw new Error("Unable to decode without a tokenizer.");return this.tokenizer.decode(...s)}async _call(s,...Q){for(const r of[this.image_processor,this.feature_extractor,this.tokenizer])if(r)return r(s,...Q);throw new Error("No image processor, feature extractor, or tokenizer found.")}static async from_pretrained(s,Q){const[r,B]=await Promise.all([this.uses_processor_config?(0,t.getModelJSON)(s,I.PROCESSOR_NAME,!0,Q):{},Promise.all(this.classes.filter(a=>a in this).map(async a=>{const d=await this[a].from_pretrained(s,Q);return[a.replace(/_class$/,""),d]})).then(Object.fromEntries)]);return new this(r,B)}}},"./src/configs.js":(A,g,e)=>{e.r(g),e.d(g,{AutoConfig:()=>Q,PretrainedConfig:()=>s,getKeyValueShapes:()=>C});var I=e("./src/utils/core.js"),i=e("./src/utils/hub.js");async function t(r,B){return await(0,i.getModelJSON)(r,"config.json",!0,B)}function o(r){const B={};let a={};switch(r.model_type){case"llava":case"paligemma":case"gemma3":case"florence2":case"llava_onevision":case"idefics3":case"ultravox":case"smolvlm":a=o(r.text_config);break;case"moondream1":a=o(r.phi_config);break;case"musicgen":a=o(r.decoder);break;case"multi_modality":a=o(r.language_config);break;case"gpt2":case"gptj":case"jais":case"codegen":case"gpt_bigcode":B.num_heads="n_head",B.num_layers="n_layer",B.hidden_size="n_embd";break;case"gpt_neox":case"stablelm":case"opt":case"falcon":B.num_heads="num_attention_heads",B.num_layers="num_hidden_layers",B.hidden_size="hidden_size";break;case"llama":case"olmo":case"olmo2":case"mobilellm":case"granite":case"cohere":case"mistral":case"starcoder2":case"qwen2":case"qwen2_vl":case"phi":case"phi3":case"phi3_v":B.num_heads="num_key_value_heads",B.num_layers="num_hidden_layers",B.hidden_size="hidden_size",B.num_attention_heads="num_attention_heads";break;case"qwen3":case"gemma":case"gemma2":case"gemma3_text":case"glm":case"helium":B.num_heads="num_key_value_heads",B.num_layers="num_hidden_layers",B.dim_kv="head_dim";break;case"openelm":B.num_heads="num_kv_heads",B.num_layers="num_transformer_layers",B.dim_kv="head_dim";break;case"gpt_neo":case"donut-swin":B.num_heads="num_heads",B.num_layers="num_layers",B.hidden_size="hidden_size";break;case"bloom":B.num_heads="n_head",B.num_layers="n_layer",B.hidden_size="hidden_size";break;case"mpt":B.num_heads="n_heads",B.num_layers="n_layers",B.hidden_size="d_model";break;case"exaone":B.num_heads="num_key_value_heads",B.num_layers="num_layers",B.dim_kv="head_dim",B.num_attention_heads="num_attention_heads";break;case"t5":case"mt5":case"longt5":B.num_decoder_layers="num_decoder_layers",B.num_decoder_heads="num_heads",B.decoder_dim_kv="d_kv",B.num_encoder_layers="num_layers",B.num_encoder_heads="num_heads",B.encoder_dim_kv="d_kv";break;case"bart":case"mbart":case"marian":case"whisper":case"lite-whisper":case"m2m_100":case"blenderbot":case"blenderbot-small":case"florence2_language":B.num_decoder_layers="decoder_layers",B.num_decoder_heads="decoder_attention_heads",B.decoder_hidden_size="d_model",B.num_encoder_layers="encoder_layers",B.num_encoder_heads="encoder_attention_heads",B.encoder_hidden_size="d_model";break;case"speecht5":B.num_decoder_layers="decoder_layers",B.num_decoder_heads="decoder_attention_heads",B.decoder_hidden_size="hidden_size",B.num_encoder_layers="encoder_layers",B.num_encoder_heads="encoder_attention_heads",B.encoder_hidden_size="hidden_size";break;case"trocr":B.num_encoder_layers=B.num_decoder_layers="decoder_layers",B.num_encoder_heads=B.num_decoder_heads="decoder_attention_heads",B.encoder_hidden_size=B.decoder_hidden_size="d_model";break;case"musicgen_decoder":B.num_encoder_layers=B.num_decoder_layers="num_hidden_layers",B.num_encoder_heads=B.num_decoder_heads="num_attention_heads",B.encoder_hidden_size=B.decoder_hidden_size="hidden_size";break;case"moonshine":B.num_decoder_layers="decoder_num_hidden_layers",B.num_decoder_heads="decoder_num_key_value_heads",B.num_encoder_layers="encoder_num_hidden_layers",B.num_encoder_heads="encoder_num_key_value_heads",B.encoder_hidden_size=B.decoder_hidden_size="hidden_size";break;case"vision-encoder-decoder":const c=o(r.decoder),F="num_decoder_layers"in c,L=(0,I.pick)(r,["model_type","is_encoder_decoder"]);return F?(L.num_decoder_layers=c.num_decoder_layers,L.num_decoder_heads=c.num_decoder_heads,L.decoder_hidden_size=c.decoder_hidden_size,L.num_encoder_layers=c.num_encoder_layers,L.num_encoder_heads=c.num_encoder_heads,L.encoder_hidden_size=c.encoder_hidden_size):(L.num_layers=c.num_layers,L.num_heads=c.num_heads,L.hidden_size=c.hidden_size),L}const d={...a,...(0,I.pick)(r,["model_type","multi_query","is_encoder_decoder"])};for(const c in B)d[c]=r[B[c]];return d}function C(r,{prefix:B="past_key_values",batch_size:a=1}={}){const d={},c=r.normalized_config;if(c.is_encoder_decoder&&"num_encoder_heads"in c&&"num_decoder_heads"in c){const F=c.encoder_dim_kv??c.encoder_hidden_size/c.num_encoder_heads,L=c.decoder_dim_kv??c.decoder_hidden_size/c.num_decoder_heads,u=[a,c.num_encoder_heads,0,F],h=[a,c.num_decoder_heads,0,L];for(let R=0;R{e.r(g),e.d(g,{apis:()=>L,env:()=>D});var I=e("?569f"),i=e("?3f59"),t=e("?154a");const o="3.5.1",C=typeof window<"u"&&typeof window.document<"u",s=typeof self<"u"&&self.constructor?.name==="DedicatedWorkerGlobalScope",Q=typeof self<"u"&&"caches"in self,r=typeof navigator<"u"&&"gpu"in navigator,B=typeof navigator<"u"&&"ml"in navigator,a=typeof process<"u",d=a&&process?.release?.name==="node",c=!f(I),F=!f(i),L=Object.freeze({IS_BROWSER_ENV:C,IS_WEBWORKER_ENV:s,IS_WEB_CACHE_AVAILABLE:Q,IS_WEBGPU_AVAILABLE:r,IS_WEBNN_AVAILABLE:B,IS_PROCESS_AVAILABLE:a,IS_NODE_ENV:d,IS_FS_AVAILABLE:c,IS_PATH_AVAILABLE:F}),u=c&&F;let h="./";if(u){const G=Object(import.meta).url;G?h=i.dirname(i.dirname(t.fileURLToPath(G))):typeof __dirname<"u"&&(h=i.dirname(__dirname))}const R=u?i.join(h,"/.cache/"):null,w="/models/",y=u?i.join(h,w):w,D={version:o,backends:{onnx:{}},allowRemoteModels:!0,remoteHost:"https://huggingface.co/",remotePathTemplate:"{model}/resolve/{revision}/",allowLocalModels:!(C||s),localModelPath:y,useFS:c,useBrowserCache:Q,useFSCache:c,cacheDir:R,useCustomCache:!1,customCache:null};function f(G){return Object.keys(G).length===0}},"./src/generation/configuration_utils.js":(A,g,e)=>{e.r(g),e.d(g,{GenerationConfig:()=>i});var I=e("./src/utils/core.js");class i{max_length=20;max_new_tokens=null;min_length=0;min_new_tokens=null;early_stopping=!1;max_time=null;do_sample=!1;num_beams=1;num_beam_groups=1;penalty_alpha=null;use_cache=!0;temperature=1;top_k=50;top_p=1;typical_p=1;epsilon_cutoff=0;eta_cutoff=0;diversity_penalty=0;repetition_penalty=1;encoder_repetition_penalty=1;length_penalty=1;no_repeat_ngram_size=0;bad_words_ids=null;force_words_ids=null;renormalize_logits=!1;constraints=null;forced_bos_token_id=null;forced_eos_token_id=null;remove_invalid_values=!1;exponential_decay_length_penalty=null;suppress_tokens=null;streamer=null;begin_suppress_tokens=null;forced_decoder_ids=null;guidance_scale=null;num_return_sequences=1;output_attentions=!1;output_hidden_states=!1;output_scores=!1;return_dict_in_generate=!1;pad_token_id=null;bos_token_id=null;eos_token_id=null;encoder_no_repeat_ngram_size=0;decoder_start_token_id=null;generation_kwargs={};constructor(o){Object.assign(this,(0,I.pick)(o,Object.getOwnPropertyNames(this)))}}},"./src/generation/logits_process.js":(A,g,e)=>{e.r(g),e.d(g,{ClassifierFreeGuidanceLogitsProcessor:()=>u,ForcedBOSTokenLogitsProcessor:()=>s,ForcedEOSTokenLogitsProcessor:()=>Q,LogitsProcessor:()=>t,LogitsProcessorList:()=>C,LogitsWarper:()=>o,MinLengthLogitsProcessor:()=>c,MinNewTokensLengthLogitsProcessor:()=>F,NoBadWordsLogitsProcessor:()=>L,NoRepeatNGramLogitsProcessor:()=>a,RepetitionPenaltyLogitsProcessor:()=>d,SuppressTokensAtBeginLogitsProcessor:()=>r,TemperatureLogitsWarper:()=>h,TopKLogitsWarper:()=>w,TopPLogitsWarper:()=>R,WhisperTimeStampLogitsProcessor:()=>B});var I=e("./src/utils/generic.js");e("./src/utils/tensor.js");var i=e("./src/utils/maths.js");class t extends I.Callable{_call(D,f){throw Error("`_call` should be implemented in a subclass")}}class o extends I.Callable{_call(D,f){throw Error("`_call` should be implemented in a subclass")}}class C extends I.Callable{constructor(){super(),this.processors=[]}push(D){this.processors.push(D)}extend(D){this.processors.push(...D)}_call(D,f){let G=f;for(const J of this.processors)G=J(D,G);return G}[Symbol.iterator](){return this.processors.values()}}class s extends t{constructor(D){super(),this.bos_token_id=D}_call(D,f){for(let G=0;G=1&&T[T.length-1]>=this.timestamp_begin,gA=T.length<2||T[T.length-2]>=this.timestamp_begin;if(X&&(gA?J.subarray(this.timestamp_begin).fill(-1/0):J.subarray(0,this.eos_token_id).fill(-1/0)),D[G].length===this.begin_index&&this.max_initial_timestamp_index!==null){const IA=this.timestamp_begin+this.max_initial_timestamp_index;J.subarray(IA+1).fill(-1/0)}const x=(0,i.log_softmax)(J),tA=Math.log(x.subarray(this.timestamp_begin).map(Math.exp).reduce((IA,oA)=>IA+oA)),Z=(0,i.max)(x.subarray(0,this.timestamp_begin))[0];tA>Z&&J.subarray(0,this.timestamp_begin).fill(-1/0)}return f}}class a extends t{constructor(D){super(),this.no_repeat_ngram_size=D}getNgrams(D){const f=D.length,G=[];for(let T=0;T1 to use the classifier free guidance processor, got guidance scale ${D}.`);this.guidance_scale=D}_call(D,f){if(f.dims[0]!==2*D.length)throw new Error(`Logits should have twice the batch size of the input ids, the first half of batches corresponding to the conditional inputs, and the second half of batches corresponding to the unconditional inputs. Got batch size ${f.dims[0]} for the logits and ${D.length} for the input ids.`);const G=D.length,J=f.slice([0,G],null),T=f.slice([G,f.dims[0]],null);for(let X=0;X1)throw new Error(`\`top_p\` must be a float > 0 and < 1, but is ${D}`);if(!Number.isInteger(G)||G<1)throw new Error(`\`min_tokens_to_keep\` must be a positive integer, but is ${G}`);this.top_p=D,this.filter_value=f,this.min_tokens_to_keep=G}}class w extends o{constructor(D,{filter_value:f=-1/0,min_tokens_to_keep:G=1}={}){if(super(),!Number.isInteger(D)||D<0)throw new Error(`\`top_k\` must be a positive integer, but is ${D}`);this.top_k=Math.max(D,G),this.filter_value=f}}},"./src/generation/logits_sampler.js":(A,g,e)=>{e.r(g),e.d(g,{LogitsSampler:()=>o});var I=e("./src/utils/generic.js"),i=e("./src/utils/tensor.js"),t=e("./src/utils/maths.js");e("./src/generation/configuration_utils.js");class o extends I.Callable{constructor(B){super(),this.generation_config=B}async _call(B){return this.sample(B)}async sample(B){throw Error("sample should be implemented in subclasses.")}getLogits(B,a){let d=B.dims.at(-1),c=B.data;if(a===-1)c=c.slice(-d);else{let F=a*d;c=c.slice(F,F+d)}return c}randomSelect(B){let a=0;for(let c=0;c1)return new Q(B);if(B.num_return_sequences>1)throw Error(`num_return_sequences has to be 1 when doing greedy search, but is ${B.num_return_sequences}.`);return new C(B)}}class C extends o{async sample(B){const a=(0,t.max)(B.data)[1];return[[BigInt(a),0]]}}class s extends o{async sample(B){let a=B.dims.at(-1);this.generation_config.top_k>0&&(a=Math.min(this.generation_config.top_k,a));const[d,c]=await(0,i.topk)(B,a),F=(0,t.softmax)(d.data);return Array.from({length:this.generation_config.num_beams},()=>{const L=this.randomSelect(F);return[c.data[L],Math.log(F[L])]})}}class Q extends o{async sample(B){let a=B.dims.at(-1);this.generation_config.top_k>0&&(a=Math.min(this.generation_config.top_k,a));const[d,c]=await(0,i.topk)(B,a),F=(0,t.softmax)(d.data);return Array.from({length:this.generation_config.num_beams},(L,u)=>[c.data[u],Math.log(F[u])])}}},"./src/generation/stopping_criteria.js":(A,g,e)=>{e.r(g),e.d(g,{EosTokenCriteria:()=>C,InterruptableStoppingCriteria:()=>s,MaxLengthCriteria:()=>o,StoppingCriteria:()=>i,StoppingCriteriaList:()=>t});var I=e("./src/utils/generic.js");class i extends I.Callable{_call(r,B){throw Error("StoppingCriteria needs to be subclassed")}}class t extends I.Callable{constructor(){super(),this.criteria=[]}push(r){this.criteria.push(r)}extend(r){r instanceof t?r=r.criteria:r instanceof i&&(r=[r]),this.criteria.push(...r)}_call(r,B){const a=new Array(r.length).fill(!1);for(const d of this.criteria){const c=d(r,B);for(let F=0;FB.length>=this.max_length)}}class C extends i{constructor(r){super(),Array.isArray(r)||(r=[r]),this.eos_token_id=r}_call(r,B){return r.map(a=>{const d=a.at(-1);return this.eos_token_id.some(c=>d==c)})}}class s extends i{constructor(){super(),this.interrupted=!1}interrupt(){this.interrupted=!0}reset(){this.interrupted=!1}_call(r,B){return new Array(r.length).fill(this.interrupted)}}},"./src/generation/streamers.js":(A,g,e)=>{e.r(g),e.d(g,{BaseStreamer:()=>o,TextStreamer:()=>s,WhisperTextStreamer:()=>Q});var I=e("./src/utils/core.js"),i=e("./src/tokenizers.js"),t=e("./src/env.js");class o{put(B){throw Error("Not implemented")}end(){throw Error("Not implemented")}}const C=t.apis.IS_PROCESS_AVAILABLE?r=>process.stdout.write(r):r=>console.log(r);class s extends o{constructor(B,{skip_prompt:a=!1,callback_function:d=null,token_callback_function:c=null,skip_special_tokens:F=!0,decode_kwargs:L={},...u}={}){super(),this.tokenizer=B,this.skip_prompt=a,this.callback_function=d??C,this.token_callback_function=c,this.decode_kwargs={skip_special_tokens:F,...L,...u},this.token_cache=[],this.print_len=0,this.next_tokens_are_prompt=!0}put(B){if(B.length>1)throw Error("TextStreamer only supports batch size of 1");const a=this.next_tokens_are_prompt;if(a&&(this.next_tokens_are_prompt=!1,this.skip_prompt))return;const d=B[0];this.token_callback_function?.(d),this.token_cache=(0,I.mergeArrays)(this.token_cache,d);const c=this.tokenizer.decode(this.token_cache,this.decode_kwargs);let F;a||c.endsWith(` +`)?(F=c.slice(this.print_len),this.token_cache=[],this.print_len=0):c.length>0&&(0,i.is_chinese_char)(c.charCodeAt(c.length-1))?(F=c.slice(this.print_len),this.print_len+=F.length):(F=c.slice(this.print_len,c.lastIndexOf(" ")+1),this.print_len+=F.length),this.on_finalized_text(F,!1)}end(){let B;this.token_cache.length>0?(B=this.tokenizer.decode(this.token_cache,this.decode_kwargs).slice(this.print_len),this.token_cache=[],this.print_len=0):B="",this.next_tokens_are_prompt=!0,this.on_finalized_text(B,!0)}on_finalized_text(B,a){B.length>0&&this.callback_function?.(B),a&&this.callback_function===C&&t.apis.IS_PROCESS_AVAILABLE&&this.callback_function?.(` +`)}}class Q extends s{constructor(B,{skip_prompt:a=!1,callback_function:d=null,token_callback_function:c=null,on_chunk_start:F=null,on_chunk_end:L=null,on_finalize:u=null,time_precision:h=.02,skip_special_tokens:R=!0,decode_kwargs:w={}}={}){super(B,{skip_prompt:a,skip_special_tokens:R,callback_function:d,token_callback_function:c,decode_kwargs:w}),this.timestamp_begin=B.timestamp_begin,this.on_chunk_start=F,this.on_chunk_end=L,this.on_finalize=u,this.time_precision=h,this.waiting_for_timestamp=!1}put(B){if(B.length>1)throw Error("WhisperTextStreamer only supports batch size of 1");const a=B[0];if(a.length===1){const d=Number(a[0])-this.timestamp_begin;if(d>=0){const c=d*this.time_precision;this.waiting_for_timestamp?this.on_chunk_end?.(c):this.on_chunk_start?.(c),this.waiting_for_timestamp=!this.waiting_for_timestamp,B=[[]]}}return super.put(B)}end(){super.end(),this.on_finalize?.()}}},"./src/models.js":(A,g,e)=>{e.r(g),e.d(g,{ASTForAudioClassification:()=>oC,ASTModel:()=>CC,ASTPreTrainedModel:()=>tt,AlbertForMaskedLM:()=>eA,AlbertForQuestionAnswering:()=>P,AlbertForSequenceClassification:()=>N,AlbertModel:()=>BA,AlbertPreTrainedModel:()=>se,AutoModel:()=>F0,AutoModelForAudioClassification:()=>O0,AutoModelForAudioFrameClassification:()=>j0,AutoModelForAudioTextToText:()=>Ip,AutoModelForCTC:()=>q0,AutoModelForCausalLM:()=>L0,AutoModelForDepthEstimation:()=>X0,AutoModelForDocumentQuestionAnswering:()=>V0,AutoModelForImageClassification:()=>b0,AutoModelForImageFeatureExtraction:()=>ep,AutoModelForImageMatting:()=>z0,AutoModelForImageSegmentation:()=>x0,AutoModelForImageTextToText:()=>gp,AutoModelForImageToImage:()=>$0,AutoModelForMaskGeneration:()=>v0,AutoModelForMaskedLM:()=>K0,AutoModelForNormalEstimation:()=>Z0,AutoModelForObjectDetection:()=>H0,AutoModelForPoseEstimation:()=>Ap,AutoModelForQuestionAnswering:()=>U0,AutoModelForSemanticSegmentation:()=>Y0,AutoModelForSeq2SeqLM:()=>R0,AutoModelForSequenceClassification:()=>S0,AutoModelForSpeechSeq2Seq:()=>G0,AutoModelForTextToSpectrogram:()=>_0,AutoModelForTextToWaveform:()=>k0,AutoModelForTokenClassification:()=>N0,AutoModelForUniversalSegmentation:()=>T0,AutoModelForVision2Seq:()=>J0,AutoModelForXVector:()=>W0,AutoModelForZeroShotObjectDetection:()=>P0,BartForConditionalGeneration:()=>Eg,BartForSequenceClassification:()=>yg,BartModel:()=>be,BartPretrainedModel:()=>He,BaseModelOutput:()=>FA,BeitForImageClassification:()=>wa,BeitModel:()=>ua,BeitPreTrainedModel:()=>Lo,BertForMaskedLM:()=>KA,BertForQuestionAnswering:()=>Ce,BertForSequenceClassification:()=>vA,BertForTokenClassification:()=>jA,BertModel:()=>GA,BertPreTrainedModel:()=>LA,BlenderbotForConditionalGeneration:()=>Pg,BlenderbotModel:()=>Rg,BlenderbotPreTrainedModel:()=>ig,BlenderbotSmallForConditionalGeneration:()=>vg,BlenderbotSmallModel:()=>nI,BlenderbotSmallPreTrainedModel:()=>oI,BloomForCausalLM:()=>PQ,BloomModel:()=>HQ,BloomPreTrainedModel:()=>po,CLIPModel:()=>EC,CLIPPreTrainedModel:()=>HI,CLIPSegForImageSegmentation:()=>Dt,CLIPSegModel:()=>dC,CLIPSegPreTrainedModel:()=>Ui,CLIPTextModel:()=>Qo,CLIPTextModelWithProjection:()=>nC,CLIPVisionModel:()=>_i,CLIPVisionModelWithProjection:()=>jI,CamembertForMaskedLM:()=>Je,CamembertForQuestionAnswering:()=>Tg,CamembertForSequenceClassification:()=>Bg,CamembertForTokenClassification:()=>Xe,CamembertModel:()=>og,CamembertPreTrainedModel:()=>Be,CausalLMOutput:()=>Bi,CausalLMOutputWithPast:()=>tp,ChineseCLIPModel:()=>lt,ChineseCLIPPreTrainedModel:()=>Ki,ClapAudioModelWithProjection:()=>wE,ClapModel:()=>DE,ClapPreTrainedModel:()=>mC,ClapTextModelWithProjection:()=>uE,CodeGenForCausalLM:()=>Ft,CodeGenModel:()=>Ti,CodeGenPreTrainedModel:()=>si,CohereForCausalLM:()=>yQ,CohereModel:()=>pQ,CoherePreTrainedModel:()=>ro,ConvBertForMaskedLM:()=>ye,ConvBertForQuestionAnswering:()=>v,ConvBertForSequenceClassification:()=>b,ConvBertForTokenClassification:()=>QA,ConvBertModel:()=>Fe,ConvBertPreTrainedModel:()=>Mg,ConvNextForImageClassification:()=>lr,ConvNextModel:()=>nr,ConvNextPreTrainedModel:()=>Vo,ConvNextV2ForImageClassification:()=>dr,ConvNextV2Model:()=>cr,ConvNextV2PreTrainedModel:()=>zo,DFineForObjectDetection:()=>La,DFineModel:()=>ka,DFinePreTrainedModel:()=>Yo,DPTForDepthEstimation:()=>za,DPTModel:()=>Va,DPTPreTrainedModel:()=>Oo,DacDecoderModel:()=>Qn,DacDecoderOutput:()=>on,DacEncoderModel:()=>Bn,DacEncoderOutput:()=>Cn,DacModel:()=>sn,DacPreTrainedModel:()=>_C,DebertaForMaskedLM:()=>eI,DebertaForQuestionAnswering:()=>rI,DebertaForSequenceClassification:()=>iI,DebertaForTokenClassification:()=>$g,DebertaModel:()=>Lg,DebertaPreTrainedModel:()=>eg,DebertaV2ForMaskedLM:()=>Xg,DebertaV2ForQuestionAnswering:()=>uI,DebertaV2ForSequenceClassification:()=>tI,DebertaV2ForTokenClassification:()=>Hg,DebertaV2Model:()=>EI,DebertaV2PreTrainedModel:()=>Fg,DecisionTransformerModel:()=>HE,DecisionTransformerPreTrainedModel:()=>TE,DeiTForImageClassification:()=>xa,DeiTModel:()=>ba,DeiTPreTrainedModel:()=>Ho,DepthAnythingForDepthEstimation:()=>Xa,DepthAnythingPreTrainedModel:()=>$a,DepthProForDepthEstimation:()=>Ir,DepthProPreTrainedModel:()=>gr,DetrForObjectDetection:()=>ya,DetrForSegmentation:()=>Ko,DetrModel:()=>pa,DetrObjectDetectionOutput:()=>Uo,DetrPreTrainedModel:()=>DC,DetrSegmentationOutput:()=>fa,Dinov2ForImageClassification:()=>Dr,Dinov2Model:()=>hr,Dinov2PreTrainedModel:()=>$o,Dinov2WithRegistersForImageClassification:()=>wr,Dinov2WithRegistersModel:()=>ur,Dinov2WithRegistersPreTrainedModel:()=>Xo,DistilBertForMaskedLM:()=>HA,DistilBertForQuestionAnswering:()=>Ug,DistilBertForSequenceClassification:()=>II,DistilBertForTokenClassification:()=>Kg,DistilBertModel:()=>gI,DistilBertPreTrainedModel:()=>Ig,DonutSwinModel:()=>Er,DonutSwinPreTrainedModel:()=>rr,EfficientNetForImageClassification:()=>SE,EfficientNetModel:()=>FE,EfficientNetPreTrainedModel:()=>ss,ElectraForMaskedLM:()=>TA,ElectraForQuestionAnswering:()=>te,ElectraForSequenceClassification:()=>mA,ElectraForTokenClassification:()=>k,ElectraModel:()=>wA,ElectraPreTrainedModel:()=>sA,EsmForMaskedLM:()=>Dg,EsmForSequenceClassification:()=>Wg,EsmForTokenClassification:()=>wI,EsmModel:()=>le,EsmPreTrainedModel:()=>Ae,ExaoneForCausalLM:()=>OA,ExaoneModel:()=>_A,ExaonePreTrainedModel:()=>rA,FalconForCausalLM:()=>hE,FalconModel:()=>dE,FalconPreTrainedModel:()=>ts,FastViTForImageClassification:()=>Ba,FastViTModel:()=>sa,FastViTPreTrainedModel:()=>No,Florence2ForConditionalGeneration:()=>QC,Florence2PreTrainedModel:()=>BC,GLPNForDepthEstimation:()=>ar,GLPNModel:()=>Qr,GLPNPreTrainedModel:()=>jo,GPT2LMHeadModel:()=>De,GPT2Model:()=>ii,GPT2PreTrainedModel:()=>Ji,GPTBigCodeForCausalLM:()=>oi,GPTBigCodeModel:()=>Mt,GPTBigCodePreTrainedModel:()=>Yi,GPTJForCausalLM:()=>mt,GPTJModel:()=>xi,GPTJPreTrainedModel:()=>bi,GPTNeoForCausalLM:()=>ti,GPTNeoModel:()=>sI,GPTNeoPreTrainedModel:()=>VI,GPTNeoXForCausalLM:()=>ft,GPTNeoXModel:()=>yt,GPTNeoXPreTrainedModel:()=>Ci,Gemma2ForCausalLM:()=>FQ,Gemma2Model:()=>MQ,Gemma2PreTrainedModel:()=>no,Gemma3ForCausalLM:()=>NQ,Gemma3Model:()=>SQ,Gemma3PreTrainedModel:()=>lo,GemmaForCausalLM:()=>mQ,GemmaModel:()=>fQ,GemmaPreTrainedModel:()=>Eo,GlmForCausalLM:()=>V,GlmModel:()=>Y,GlmPreTrainedModel:()=>_,GraniteForCausalLM:()=>wQ,GraniteModel:()=>uQ,GranitePreTrainedModel:()=>ao,GroundingDinoForObjectDetection:()=>yr,GroundingDinoPreTrainedModel:()=>pr,GroupViTModel:()=>oa,GroupViTPreTrainedModel:()=>Ca,HeliumForCausalLM:()=>M,HeliumModel:()=>E,HeliumPreTrainedModel:()=>Pi,HieraForImageClassification:()=>Ta,HieraModel:()=>Ya,HieraPreTrainedModel:()=>Po,HubertForCTC:()=>Zr,HubertForSequenceClassification:()=>AE,HubertModel:()=>Xr,HubertPreTrainedModel:()=>n0,IJepaForImageClassification:()=>$Q,IJepaModel:()=>zQ,IJepaPreTrainedModel:()=>Mo,Idefics3ForConditionalGeneration:()=>Gi,Idefics3PreTrainedModel:()=>aC,ImageMattingOutput:()=>Tn,JAISLMHeadModel:()=>pt,JAISModel:()=>wt,JAISPreTrainedModel:()=>ut,JinaCLIPModel:()=>ct,JinaCLIPPreTrainedModel:()=>Ii,JinaCLIPTextModel:()=>dt,JinaCLIPVisionModel:()=>ht,LiteWhisperForConditionalGeneration:()=>st,LlamaForCausalLM:()=>Nt,LlamaModel:()=>St,LlamaPreTrainedModel:()=>Hi,LlavaForConditionalGeneration:()=>Ni,LlavaOnevisionForConditionalGeneration:()=>at,LlavaPreTrainedModel:()=>WI,LongT5ForConditionalGeneration:()=>ZA,LongT5Model:()=>$A,LongT5PreTrainedModel:()=>VA,M2M100ForConditionalGeneration:()=>kr,M2M100Model:()=>_r,M2M100PreTrainedModel:()=>es,MBartForCausalLM:()=>fI,MBartForConditionalGeneration:()=>JI,MBartForSequenceClassification:()=>Ng,MBartModel:()=>ug,MBartPreTrainedModel:()=>Ze,MPNetForMaskedLM:()=>yI,MPNetForQuestionAnswering:()=>K,MPNetForSequenceClassification:()=>l,MPNetForTokenClassification:()=>S,MPNetModel:()=>We,MPNetPreTrainedModel:()=>CI,MT5ForConditionalGeneration:()=>we,MT5Model:()=>Re,MT5PreTrainedModel:()=>qA,MarianMTModel:()=>Gr,MarianModel:()=>Rr,MarianPreTrainedModel:()=>As,MaskFormerForInstanceSegmentation:()=>Br,MaskFormerModel:()=>sr,MaskFormerPreTrainedModel:()=>Wo,MaskedLMOutput:()=>qg,Metric3DForDepthEstimation:()=>tr,Metric3DPreTrainedModel:()=>ir,Metric3Dv2ForDepthEstimation:()=>or,Metric3Dv2PreTrainedModel:()=>Cr,MgpstrForSceneTextRecognition:()=>WE,MgpstrModelOutput:()=>qE,MgpstrPreTrainedModel:()=>OE,MimiDecoderModel:()=>tn,MimiDecoderOutput:()=>en,MimiEncoderModel:()=>In,MimiEncoderOutput:()=>An,MimiModel:()=>gn,MimiPreTrainedModel:()=>GC,MistralForCausalLM:()=>nE,MistralModel:()=>EE,MistralPreTrainedModel:()=>Is,MobileBertForMaskedLM:()=>pI,MobileBertForQuestionAnswering:()=>TI,MobileBertForSequenceClassification:()=>YI,MobileBertModel:()=>Sg,MobileBertPreTrainedModel:()=>ag,MobileLLMForCausalLM:()=>Ne,MobileLLMModel:()=>Ee,MobileLLMPreTrainedModel:()=>oe,MobileNetV1ForImageClassification:()=>RE,MobileNetV1ForSemanticSegmentation:()=>GE,MobileNetV1Model:()=>NE,MobileNetV1PreTrainedModel:()=>FC,MobileNetV2ForImageClassification:()=>kE,MobileNetV2ForSemanticSegmentation:()=>LE,MobileNetV2Model:()=>_E,MobileNetV2PreTrainedModel:()=>SC,MobileNetV3ForImageClassification:()=>UE,MobileNetV3ForSemanticSegmentation:()=>JE,MobileNetV3Model:()=>KE,MobileNetV3PreTrainedModel:()=>NC,MobileNetV4ForImageClassification:()=>xE,MobileNetV4ForSemanticSegmentation:()=>YE,MobileNetV4Model:()=>bE,MobileNetV4PreTrainedModel:()=>RC,MobileViTForImageClassification:()=>Ea,MobileViTModel:()=>ra,MobileViTPreTrainedModel:()=>Ro,MobileViTV2ForImageClassification:()=>la,MobileViTV2Model:()=>na,MobileViTV2PreTrainedModel:()=>Go,ModelOutput:()=>fA,ModernBertForMaskedLM:()=>XA,ModernBertForSequenceClassification:()=>PA,ModernBertForTokenClassification:()=>ie,ModernBertModel:()=>JA,ModernBertPreTrainedModel:()=>Ie,Moondream1ForConditionalGeneration:()=>sC,MoonshineForConditionalGeneration:()=>Qt,MoonshineModel:()=>Bo,MoonshinePreTrainedModel:()=>Bt,MptForCausalLM:()=>qQ,MptModel:()=>vQ,MptPreTrainedModel:()=>yo,MultiModalityCausalLM:()=>vE,MultiModalityPreTrainedModel:()=>PE,MusicgenForCausalLM:()=>h0,MusicgenForConditionalGeneration:()=>Qs,MusicgenModel:()=>d0,MusicgenPreTrainedModel:()=>Bs,NomicBertModel:()=>Qe,NomicBertPreTrainedModel:()=>he,OPTForCausalLM:()=>WQ,OPTModel:()=>OQ,OPTPreTrainedModel:()=>fo,Olmo2ForCausalLM:()=>DQ,Olmo2Model:()=>hC,Olmo2PreTrainedModel:()=>bI,OlmoForCausalLM:()=>_g,OlmoModel:()=>je,OlmoPreTrainedModel:()=>xe,OpenELMForCausalLM:()=>GQ,OpenELMModel:()=>RQ,OpenELMPreTrainedModel:()=>co,OwlViTForObjectDetection:()=>da,OwlViTModel:()=>ca,OwlViTPreTrainedModel:()=>_o,Owlv2ForObjectDetection:()=>Da,Owlv2Model:()=>ha,Owlv2PreTrainedModel:()=>ko,PaliGemmaForConditionalGeneration:()=>rt,PaliGemmaPreTrainedModel:()=>Ri,PatchTSMixerForPrediction:()=>$E,PatchTSMixerModel:()=>zE,PatchTSMixerPreTrainedModel:()=>rs,PatchTSTForPrediction:()=>VE,PatchTSTModel:()=>jE,PatchTSTPreTrainedModel:()=>as,Phi3ForCausalLM:()=>TQ,Phi3Model:()=>YQ,Phi3PreTrainedModel:()=>wo,Phi3VForCausalLM:()=>nt,Phi3VPreTrainedModel:()=>rC,PhiForCausalLM:()=>xQ,PhiModel:()=>bQ,PhiPreTrainedModel:()=>uo,PreTrainedModel:()=>$,PretrainedMixin:()=>Ve,PvtForImageClassification:()=>ea,PvtModel:()=>Aa,PvtPreTrainedModel:()=>Fo,PyAnnoteForAudioFrameClassification:()=>xr,PyAnnoteModel:()=>br,PyAnnotePreTrainedModel:()=>gs,QuestionAnsweringModelOutput:()=>Vg,Qwen2ForCausalLM:()=>kQ,Qwen2Model:()=>_Q,Qwen2PreTrainedModel:()=>ho,Qwen2VLForConditionalGeneration:()=>JQ,Qwen2VLPreTrainedModel:()=>UQ,Qwen3ForCausalLM:()=>KQ,Qwen3Model:()=>LQ,Qwen3PreTrainedModel:()=>Do,RFDetrForObjectDetection:()=>Ga,RFDetrModel:()=>Ra,RFDetrObjectDetectionOutput:()=>_a,RFDetrPreTrainedModel:()=>xo,RTDetrForObjectDetection:()=>Ma,RTDetrModel:()=>ma,RTDetrObjectDetectionOutput:()=>Rt,RTDetrPreTrainedModel:()=>Jo,RTDetrV2ForObjectDetection:()=>Sa,RTDetrV2Model:()=>Fa,RTDetrV2ObjectDetectionOutput:()=>Na,RTDetrV2PreTrainedModel:()=>bo,ResNetForImageClassification:()=>Pa,ResNetModel:()=>Ha,ResNetPreTrainedModel:()=>vo,RoFormerForMaskedLM:()=>Se,RoFormerForQuestionAnswering:()=>gg,RoFormerForSequenceClassification:()=>Ag,RoFormerForTokenClassification:()=>Ye,RoFormerModel:()=>ae,RoFormerPreTrainedModel:()=>bA,RobertaForMaskedLM:()=>dg,RobertaForQuestionAnswering:()=>jg,RobertaForSequenceClassification:()=>rg,RobertaForTokenClassification:()=>wg,RobertaModel:()=>Gg,RobertaPreTrainedModel:()=>Jg,SamImageSegmentationOutput:()=>Nr,SamModel:()=>Sr,SamPreTrainedModel:()=>Fr,SapiensForDepthEstimation:()=>Ar,SapiensForNormalEstimation:()=>er,SapiensForSemanticSegmentation:()=>Za,SapiensPreTrainedModel:()=>wC,SegformerForImageClassification:()=>yE,SegformerForSemanticSegmentation:()=>fE,SegformerModel:()=>c0,SegformerPreTrainedModel:()=>MC,Seq2SeqLMOutput:()=>ip,SequenceClassifierOutput:()=>Ge,SiglipModel:()=>lC,SiglipPreTrainedModel:()=>ki,SiglipTextModel:()=>cC,SiglipVisionModel:()=>Li,SmolVLMForConditionalGeneration:()=>Et,SnacDecoderModel:()=>En,SnacEncoderModel:()=>rn,SnacModel:()=>an,SnacPreTrainedModel:()=>kC,SpeechT5ForSpeechToText:()=>sE,SpeechT5ForTextToSpeech:()=>BE,SpeechT5HifiGan:()=>QE,SpeechT5Model:()=>l0,SpeechT5PreTrainedModel:()=>fC,SqueezeBertForMaskedLM:()=>aA,SqueezeBertForQuestionAnswering:()=>SA,SqueezeBertForSequenceClassification:()=>uA,SqueezeBertModel:()=>iA,SqueezeBertPreTrainedModel:()=>O,StableLmForCausalLM:()=>ME,StableLmModel:()=>mE,StableLmPreTrainedModel:()=>os,Starcoder2ForCausalLM:()=>cE,Starcoder2Model:()=>lE,Starcoder2PreTrainedModel:()=>is,StyleTextToSpeech2Model:()=>oE,StyleTextToSpeech2PreTrainedModel:()=>CE,Swin2SRForImageSuperResolution:()=>ja,Swin2SRModel:()=>Wa,Swin2SRPreTrainedModel:()=>qo,SwinForImageClassification:()=>qa,SwinForSemanticSegmentation:()=>Oa,SwinModel:()=>va,SwinPreTrainedModel:()=>uC,T5ForConditionalGeneration:()=>NA,T5Model:()=>lA,T5PreTrainedModel:()=>AA,TableTransformerForObjectDetection:()=>Ua,TableTransformerModel:()=>Ka,TableTransformerObjectDetectionOutput:()=>Ja,TableTransformerPreTrainedModel:()=>To,TokenClassifierOutput:()=>bg,TrOCRForCausalLM:()=>rE,TrOCRPreTrainedModel:()=>aE,UltravoxModel:()=>ZE,UltravoxPreTrainedModel:()=>XE,UniSpeechForCTC:()=>Pr,UniSpeechForSequenceClassification:()=>vr,UniSpeechModel:()=>Hr,UniSpeechPreTrainedModel:()=>pC,UniSpeechSatForAudioFrameClassification:()=>jr,UniSpeechSatForCTC:()=>Or,UniSpeechSatForSequenceClassification:()=>Wr,UniSpeechSatModel:()=>qr,UniSpeechSatPreTrainedModel:()=>Gt,ViTForImageClassification:()=>VQ,ViTMAEModel:()=>Ia,ViTMAEPreTrainedModel:()=>ga,ViTMSNForImageClassification:()=>ta,ViTMSNModel:()=>ia,ViTMSNPreTrainedModel:()=>So,ViTModel:()=>jQ,ViTPreTrainedModel:()=>mo,VisionEncoderDecoderModel:()=>Si,VitMatteForImageMatting:()=>aa,VitMattePreTrainedModel:()=>Qa,VitPoseForPoseEstimation:()=>ZQ,VitPosePreTrainedModel:()=>XQ,VitsModel:()=>Cs,VitsModelOutput:()=>Hn,VitsPreTrainedModel:()=>pE,Wav2Vec2BertForCTC:()=>zr,Wav2Vec2BertForSequenceClassification:()=>$r,Wav2Vec2BertModel:()=>Vr,Wav2Vec2BertPreTrainedModel:()=>yC,Wav2Vec2ForAudioFrameClassification:()=>Jr,Wav2Vec2ForCTC:()=>Kr,Wav2Vec2ForSequenceClassification:()=>Ur,Wav2Vec2Model:()=>Lr,Wav2Vec2PreTrainedModel:()=>zI,WavLMForAudioFrameClassification:()=>tE,WavLMForCTC:()=>gE,WavLMForSequenceClassification:()=>IE,WavLMForXVector:()=>iE,WavLMModel:()=>eE,WavLMPreTrainedModel:()=>vi,WeSpeakerResNetModel:()=>Tr,WeSpeakerResNetPreTrainedModel:()=>Yr,WhisperForConditionalGeneration:()=>Fi,WhisperModel:()=>ot,WhisperPreTrainedModel:()=>Ct,XLMForQuestionAnswering:()=>AC,XLMForSequenceClassification:()=>it,XLMForTokenClassification:()=>Zt,XLMModel:()=>Mi,XLMPreTrainedModel:()=>lI,XLMRobertaForMaskedLM:()=>gC,XLMRobertaForQuestionAnswering:()=>tC,XLMRobertaForSequenceClassification:()=>IC,XLMRobertaForTokenClassification:()=>iC,XLMRobertaModel:()=>eC,XLMRobertaPreTrainedModel:()=>OI,XLMWithLMHeadModel:()=>Xt,XVectorOutput:()=>Yn,YolosForObjectDetection:()=>mr,YolosModel:()=>fr,YolosObjectDetectionOutput:()=>Mr,YolosPreTrainedModel:()=>Zo});var I=e("./src/configs.js"),i=e("./src/backends/onnx.js"),t=e("./src/utils/dtypes.js"),o=e("./src/utils/generic.js"),C=e("./src/utils/core.js"),s=e("./src/utils/hub.js"),Q=e("./src/utils/constants.js"),r=e("./src/generation/logits_process.js"),B=e("./src/generation/configuration_utils.js"),a=e("./src/utils/tensor.js"),d=e("./src/utils/image.js"),c=e("./src/utils/maths.js"),F=e("./src/generation/stopping_criteria.js"),L=e("./src/generation/logits_sampler.js"),u=e("./src/env.js"),h=e("./src/models/whisper/generation_whisper.js"),R=e("./src/models/whisper/common_whisper.js");const w={EncoderOnly:0,EncoderDecoder:1,Seq2Seq:2,Vision2Seq:3,DecoderOnly:4,MaskGeneration:5,ImageTextToText:6,Musicgen:7,MultiModality:8,Phi3V:9,AudioTextToText:10,AutoEncoder:11},y=new Map,D=new Map,f=new Map;async function G(p,m,W){let nA=W.config?.["transformers.js_config"]??{},pA=W.device??nA.device;pA&&typeof pA!="string"&&(pA.hasOwnProperty(m)?pA=pA[m]:(console.warn(`device not specified for "${m}". Using the default device.`),pA=null));const yA=pA??(u.apis.IS_NODE_ENV?"cpu":"wasm"),UA=(0,i.deviceToExecutionProviders)(yA),WA=nA.device_config??{};WA.hasOwnProperty(yA)&&(nA={...nA,...WA[yA]});let ee=W.dtype??nA.dtype;if(typeof ee!="string"&&(ee&&ee.hasOwnProperty(m)?ee=ee[m]:(ee=t.DEFAULT_DEVICE_DTYPE_MAPPING[yA]??t.DATA_TYPES.fp32,console.warn(`dtype not specified for "${m}". Using the default dtype (${ee}) for this device (${yA}).`))),ee===t.DATA_TYPES.auto){let Ue=nA.dtype;typeof Ue!="string"&&(Ue=Ue?.[m]),Ue&&Ue!==t.DATA_TYPES.auto&&t.DATA_TYPES.hasOwnProperty(Ue)?ee=Ue:ee=t.DEFAULT_DEVICE_DTYPE_MAPPING[yA]??t.DATA_TYPES.fp32}const re=ee;if(t.DEFAULT_DTYPE_SUFFIX_MAPPING.hasOwnProperty(re)){if(re===t.DATA_TYPES.fp16&&yA==="webgpu"&&!await(0,t.isWebGpuFp16Supported)())throw new Error(`The device (${yA}) does not support fp16.`)}else throw new Error(`Invalid dtype: ${re}. Should be one of: ${Object.keys(t.DATA_TYPES).join(", ")}`);const _e=nA.kv_cache_dtype,Ke=_e?typeof _e=="string"?_e:_e[re]??"float32":void 0;if(Ke&&!["float32","float16"].includes(Ke))throw new Error(`Invalid kv_cache_dtype: ${Ke}. Should be one of: float32, float16`);const fe={dtype:re,kv_cache_dtype:Ke,device:yA},pe=t.DEFAULT_DTYPE_SUFFIX_MAPPING[re],ze=`${m}${pe}.onnx`,me=`${W.subfolder??""}/${ze}`,ue={...W.session_options};ue.executionProviders??=UA;const Pe=nA.free_dimension_overrides;Pe?ue.freeDimensionOverrides??=Pe:yA.startsWith("webnn")&&!ue.freeDimensionOverrides&&console.warn(`WebNN does not currently support dynamic shapes and requires 'free_dimension_overrides' to be set in config.json, preferably as a field within config["transformers.js_config"]["device_config"]["${yA}"]. When 'free_dimension_overrides' is not set, you may experience significant performance degradation.`);const tg=u.apis.IS_NODE_ENV&&u.env.useFSCache,ng=(0,s.getModelFile)(p,me,!0,W,tg),fg=W.use_external_data_format??nA.use_external_data_format;let mg=[];if(fg){let Ue;typeof fg=="object"?fg.hasOwnProperty(ze)?Ue=fg[ze]:fg.hasOwnProperty(m)?Ue=fg[m]:Ue=!1:Ue=fg;const lg=+Ue;if(lg>s.MAX_EXTERNAL_DATA_CHUNKS)throw new Error(`The number of external data chunks (${lg}) exceeds the maximum allowed value (${s.MAX_EXTERNAL_DATA_CHUNKS}).`);for(let xg=0;xg{const Wi=await(0,s.getModelFile)(p,Zg,!0,W,tg);mI(Wi instanceof Uint8Array?{path:Qi,data:Wi}:Qi)}))}}else ue.externalData!==void 0&&(mg=ue.externalData.map(async Ue=>{if(typeof Ue.data=="string"){const lg=await(0,s.getModelFile)(p,Ue.data,!0,W);return{...Ue,data:lg}}return Ue}));if(mg.length>0){const Ue=await Promise.all(mg);u.apis.IS_NODE_ENV||(ue.externalData=Ue)}if(yA==="webgpu"){const Ue=(0,I.getKeyValueShapes)(W.config,{prefix:"present"});if(Object.keys(Ue).length>0&&!(0,i.isONNXProxy)()){const lg={};for(const xg in Ue)lg[xg]="gpu-buffer";ue.preferredOutputLocation=lg}}return{buffer_or_path:await ng,session_options:ue,session_config:fe}}async function J(p,m,W){return Object.fromEntries(await Promise.all(Object.keys(m).map(async nA=>{const{buffer_or_path:pA,session_options:yA,session_config:UA}=await G(p,m[nA],W),WA=await(0,i.createInferenceSession)(pA,yA,UA);return[nA,WA]})))}async function T(p,m,W){return Object.fromEntries(await Promise.all(Object.keys(m).map(async nA=>{const pA=await(0,s.getModelJSON)(p,m[nA],!1,W);return[nA,pA]})))}function X(p,m){const W=Object.create(null),nA=[];for(const UA of p.inputNames){const WA=m[UA];if(!(WA instanceof a.Tensor)){nA.push(UA);continue}W[UA]=(0,i.isONNXProxy)()?WA.clone():WA}if(nA.length>0)throw new Error(`An error occurred during model execution: "Missing the following inputs: ${nA.join(", ")}.`);const pA=Object.keys(m).length,yA=p.inputNames.length;if(pA>yA){let UA=Object.keys(m).filter(WA=>!p.inputNames.includes(WA));console.warn(`WARNING: Too many inputs were provided (${pA} > ${yA}). The following inputs will be ignored: "${UA.join(", ")}".`)}return W}let gA=Promise.resolve();async function x(p,m){const W=X(p,m);try{const nA=Object.fromEntries(Object.entries(W).map(([UA,WA])=>[UA,WA.ort_tensor])),pA=()=>p.run(nA),yA=await(u.apis.IS_BROWSER_ENV||u.apis.IS_WEBWORKER_ENV?gA=gA.then(pA):pA());return tA(yA)}catch(nA){const pA=Object.fromEntries(Object.entries(W).map(([yA,UA])=>{const WA={type:UA.type,dims:UA.dims,location:UA.location};return WA.location!=="gpu-buffer"&&(WA.data=UA.data),[yA,WA]}));throw console.error(`An error occurred during model execution: "${nA}".`),console.error("Inputs given to model:",pA),nA}}function tA(p){for(let m in p)(0,i.isONNXTensor)(p[m])?p[m]=new a.Tensor(p[m]):typeof p[m]=="object"&&tA(p[m]);return p}function Z(p){if(p instanceof a.Tensor)return p;if(p.length===0)throw Error("items must be non-empty");if(Array.isArray(p[0])){if(p.some(m=>m.length!==p[0].length))throw Error("Unable to create tensor, you should probably activate truncation and/or padding with 'padding=True' and/or 'truncation=True' to have batched tensors with the same length.");return new a.Tensor("int64",BigInt64Array.from(p.flat().map(m=>BigInt(m))),[p.length,p[0].length])}else return new a.Tensor("int64",BigInt64Array.from(p.map(m=>BigInt(m))),[1,p.length])}function IA(p){return new a.Tensor("bool",[p],[1])}async function oA(p,m){let{encoder_outputs:W,input_ids:nA,decoder_input_ids:pA,...yA}=m;if(!W){const WA=(0,C.pick)(m,p.sessions.model.inputNames);W=(await CA(p,WA)).last_hidden_state}return yA.input_ids=pA,yA.encoder_hidden_states=W,p.sessions.decoder_model_merged.inputNames.includes("encoder_attention_mask")&&(yA.encoder_attention_mask=m.attention_mask),await cA(p,yA,!0)}async function CA(p,m){const W=p.sessions.model,nA=(0,C.pick)(m,W.inputNames);if(W.inputNames.includes("inputs_embeds")&&!nA.inputs_embeds){if(!m.input_ids)throw new Error("Both `input_ids` and `inputs_embeds` are missing in the model inputs.");nA.inputs_embeds=await p.encode_text({input_ids:m.input_ids})}if(W.inputNames.includes("token_type_ids")&&!nA.token_type_ids){if(!nA.input_ids)throw new Error("Both `input_ids` and `token_type_ids` are missing in the model inputs.");nA.token_type_ids=(0,a.zeros_like)(nA.input_ids)}if(W.inputNames.includes("pixel_mask")&&!nA.pixel_mask){if(!nA.pixel_values)throw new Error("Both `pixel_values` and `pixel_mask` are missing in the model inputs.");const pA=nA.pixel_values.dims;nA.pixel_mask=(0,a.ones)([pA[0],pA[2],pA[3]])}return await x(W,nA)}async function DA(p,m){const W=await p.encode(m);return await p.decode(W)}async function cA(p,m,W=!1){const nA=p.sessions[W?"decoder_model_merged":"model"],{past_key_values:pA,...yA}=m;if(nA.inputNames.includes("use_cache_branch")&&(yA.use_cache_branch=IA(!!pA)),nA.inputNames.includes("position_ids")&&yA.attention_mask&&!yA.position_ids){const WA=["paligemma","gemma3_text","gemma3"].includes(p.config.model_type)?1:0;yA.position_ids=YA(yA,pA,WA)}p.addPastKeyValues(yA,pA);const UA=(0,C.pick)(yA,nA.inputNames);return await x(nA,UA)}function q({modality_token_id:p,inputs_embeds:m,modality_features:W,input_ids:nA,attention_mask:pA}){const yA=nA.tolist().map(re=>re.reduce((_e,Ke,fe)=>(Ke==p&&_e.push(fe),_e),[])),UA=yA.reduce((re,_e)=>re+_e.length,0),WA=W.dims[0];if(UA!==WA)throw new Error(`Number of tokens and features do not match: tokens: ${UA}, features ${WA}`);let ee=0;for(let re=0;reyA.dims[1])){if(pAWA==p.config.image_token_index)){const WA=p.config.num_image_tokens;if(!WA)throw new Error("`num_image_tokens` is missing in the model configuration.");const ee=yA.dims[1]-(pA-WA);W.input_ids=yA.slice(null,[-ee,null]),W.attention_mask=(0,a.ones)([1,pA+ee])}}}return W}function hA(p,m,W,nA){return W.past_key_values&&(m=m.map(pA=>[pA.at(-1)])),{...W,decoder_input_ids:Z(m)}}function j(p,...m){return p.config.is_encoder_decoder?hA(p,...m):ge(p,...m)}function dA(p,m,W,nA){const pA=!!W.past_key_values;return nA.guidance_scale!==null&&nA.guidance_scale>1&&(pA?W.input_ids=(0,a.cat)([W.input_ids,W.input_ids],0):(W.input_ids=(0,a.cat)([W.input_ids,(0,a.full_like)(W.input_ids,BigInt(nA.pad_token_id))],0),W.attention_mask=(0,a.cat)([W.attention_mask,(0,a.full_like)(W.attention_mask,0n)],0))),(pA||!W.pixel_values)&&(W.pixel_values=(0,a.full)([0,0,3,384,384],1)),pA&&(W.images_seq_mask=new a.Tensor("bool",new Array(1).fill(!0).fill(!1,0,1),[1,1]),W.images_emb_mask=new a.Tensor("bool",new Array(0).fill(!1),[1,1,0])),W}class $ extends o.Callable{main_input_name="input_ids";forward_params=["input_ids","attention_mask"];constructor(m,W,nA){super(),this.config=m,this.sessions=W,this.configs=nA;const pA=f.get(this.constructor),yA=y.get(pA);switch(this.can_generate=!1,this._forward=null,this._prepare_inputs_for_generation=null,yA){case w.DecoderOnly:this.can_generate=!0,this._forward=cA,this._prepare_inputs_for_generation=ge;break;case w.Seq2Seq:case w.Vision2Seq:case w.Musicgen:this.can_generate=!0,this._forward=oA,this._prepare_inputs_for_generation=hA;break;case w.EncoderDecoder:this._forward=oA;break;case w.ImageTextToText:this.can_generate=!0,this._forward=xA,this._prepare_inputs_for_generation=j;break;case w.AudioTextToText:this.can_generate=!0,this._forward=EA,this._prepare_inputs_for_generation=j;break;case w.Phi3V:this.can_generate=!0,this._prepare_inputs_for_generation=j;break;case w.MultiModality:this.can_generate=!0,this._prepare_inputs_for_generation=dA;break;case w.AutoEncoder:this._forward=DA;break;default:this._forward=CA;break}this.can_generate&&this.forward_params.push("past_key_values"),this.custom_config=this.config["transformers.js_config"]??{}}async dispose(){const m=[];for(const W of Object.values(this.sessions))W?.handler?.dispose&&m.push(W.handler.dispose());return await Promise.all(m)}static async from_pretrained(m,{progress_callback:W=null,config:nA=null,cache_dir:pA=null,local_files_only:yA=!1,revision:UA="main",model_file_name:WA=null,subfolder:ee="onnx",device:re=null,dtype:_e=null,use_external_data_format:Ke=null,session_options:fe={}}={}){let pe={progress_callback:W,config:nA,cache_dir:pA,local_files_only:yA,revision:UA,model_file_name:WA,subfolder:ee,device:re,dtype:_e,use_external_data_format:Ke,session_options:fe};const ze=f.get(this),me=y.get(ze);nA=pe.config=await I.AutoConfig.from_pretrained(m,pe);let ue;if(me===w.DecoderOnly)ue=await Promise.all([J(m,{model:pe.model_file_name??"model"},pe),T(m,{generation_config:"generation_config.json"},pe)]);else if(me===w.Seq2Seq||me===w.Vision2Seq)ue=await Promise.all([J(m,{model:"encoder_model",decoder_model_merged:"decoder_model_merged"},pe),T(m,{generation_config:"generation_config.json"},pe)]);else if(me===w.MaskGeneration)ue=await Promise.all([J(m,{model:"vision_encoder",prompt_encoder_mask_decoder:"prompt_encoder_mask_decoder"},pe)]);else if(me===w.EncoderDecoder)ue=await Promise.all([J(m,{model:"encoder_model",decoder_model_merged:"decoder_model_merged"},pe)]);else if(me===w.ImageTextToText){const Pe={embed_tokens:"embed_tokens",vision_encoder:"vision_encoder",decoder_model_merged:"decoder_model_merged"};nA.is_encoder_decoder&&(Pe.model="encoder_model"),ue=await Promise.all([J(m,Pe,pe),T(m,{generation_config:"generation_config.json"},pe)])}else if(me===w.AudioTextToText){const Pe={embed_tokens:"embed_tokens",audio_encoder:"audio_encoder",decoder_model_merged:"decoder_model_merged"};ue=await Promise.all([J(m,Pe,pe),T(m,{generation_config:"generation_config.json"},pe)])}else if(me===w.Musicgen)ue=await Promise.all([J(m,{model:"text_encoder",decoder_model_merged:"decoder_model_merged",encodec_decode:"encodec_decode"},pe),T(m,{generation_config:"generation_config.json"},pe)]);else if(me===w.MultiModality)ue=await Promise.all([J(m,{prepare_inputs_embeds:"prepare_inputs_embeds",model:"language_model",lm_head:"lm_head",gen_head:"gen_head",gen_img_embeds:"gen_img_embeds",image_decode:"image_decode"},pe),T(m,{generation_config:"generation_config.json"},pe)]);else if(me===w.Phi3V)ue=await Promise.all([J(m,{prepare_inputs_embeds:"prepare_inputs_embeds",model:"model",vision_encoder:"vision_encoder"},pe),T(m,{generation_config:"generation_config.json"},pe)]);else if(me===w.AutoEncoder)ue=await Promise.all([J(m,{encoder_model:"encoder_model",decoder_model:"decoder_model"},pe)]);else{if(me!==w.EncoderOnly){const Pe=ze??nA?.model_type;Pe!=="custom"&&console.warn(`Model type for '${Pe}' not found, assuming encoder-only architecture. Please report this at ${Q.GITHUB_ISSUE_URL}.`)}ue=await Promise.all([J(m,{model:pe.model_file_name??"model"},pe)])}return new this(nA,...ue)}async _call(m){return await this.forward(m)}async forward(m){return await this._forward(this,m)}get generation_config(){return this.configs?.generation_config??null}_get_logits_warper(m){const W=new r.LogitsProcessorList;return m.temperature!==null&&m.temperature!==1&&W.push(new r.TemperatureLogitsWarper(m.temperature)),m.top_k!==null&&m.top_k!==0&&W.push(new r.TopKLogitsWarper(m.top_k)),m.top_p!==null&&m.top_p<1&&W.push(new r.TopPLogitsWarper(m.top_p)),W}_get_logits_processor(m,W,nA=null){const pA=new r.LogitsProcessorList;if(m.repetition_penalty!==null&&m.repetition_penalty!==1&&pA.push(new r.RepetitionPenaltyLogitsProcessor(m.repetition_penalty)),m.no_repeat_ngram_size!==null&&m.no_repeat_ngram_size>0&&pA.push(new r.NoRepeatNGramLogitsProcessor(m.no_repeat_ngram_size)),m.bad_words_ids!==null&&pA.push(new r.NoBadWordsLogitsProcessor(m.bad_words_ids,m.eos_token_id)),m.min_length!==null&&m.eos_token_id!==null&&m.min_length>0&&pA.push(new r.MinLengthLogitsProcessor(m.min_length,m.eos_token_id)),m.min_new_tokens!==null&&m.eos_token_id!==null&&m.min_new_tokens>0&&pA.push(new r.MinNewTokensLengthLogitsProcessor(W,m.min_new_tokens,m.eos_token_id)),m.forced_bos_token_id!==null&&pA.push(new r.ForcedBOSTokenLogitsProcessor(m.forced_bos_token_id)),m.forced_eos_token_id!==null&&pA.push(new r.ForcedEOSTokenLogitsProcessor(m.max_length,m.forced_eos_token_id)),m.begin_suppress_tokens!==null){const yA=W>1||m.forced_bos_token_id===null?W:W+1;pA.push(new r.SuppressTokensAtBeginLogitsProcessor(m.begin_suppress_tokens,yA))}return m.guidance_scale!==null&&m.guidance_scale>1&&pA.push(new r.ClassifierFreeGuidanceLogitsProcessor(m.guidance_scale)),nA!==null&&pA.extend(nA),pA}_prepare_generation_config(m,W,nA=B.GenerationConfig){const pA={...this.config};for(const UA of["decoder","generator","text_config"])UA in pA&&Object.assign(pA,pA[UA]);const yA=new nA(pA);return Object.assign(yA,this.generation_config??{}),m&&Object.assign(yA,m),W&&Object.assign(yA,(0,C.pick)(W,Object.getOwnPropertyNames(yA))),yA}_get_stopping_criteria(m,W=null){const nA=new F.StoppingCriteriaList;return m.max_length!==null&&nA.push(new F.MaxLengthCriteria(m.max_length,this.config.max_position_embeddings??null)),m.eos_token_id!==null&&nA.push(new F.EosTokenCriteria(m.eos_token_id)),W&&nA.extend(W),nA}_validate_model_class(){if(!this.can_generate){const m=[ls,cs,ns,Es],W=f.get(this.constructor),nA=new Set,pA=this.config.model_type;for(const UA of m){const WA=UA.get(pA);WA&&nA.add(WA[0])}let yA=`The current model class (${W}) is not compatible with \`.generate()\`, as it doesn't have a language model head.`;throw nA.size>0&&(yA+=` Please use the following class instead: ${[...nA].join(", ")}`),Error(yA)}}prepare_inputs_for_generation(...m){return this._prepare_inputs_for_generation(this,...m)}_update_model_kwargs_for_generation({generated_input_ids:m,outputs:W,model_inputs:nA,is_encoder_decoder:pA}){return nA.past_key_values=this.getPastKeyValues(W,nA.past_key_values),nA.input_ids=new a.Tensor("int64",m.flat(),[m.length,1]),pA||(nA.attention_mask=(0,a.cat)([nA.attention_mask,(0,a.ones)([nA.attention_mask.dims[0],1])],1)),nA.position_ids=null,nA}_prepare_model_inputs({inputs:m,bos_token_id:W,model_kwargs:nA}){const pA=(0,C.pick)(nA,this.forward_params),yA=this.main_input_name;if(yA in pA){if(m)throw new Error("`inputs`: {inputs}` were passed alongside {input_name} which is not allowed. Make sure to either pass {inputs} or {input_name}=...")}else pA[yA]=m;return{inputs_tensor:pA[yA],model_inputs:pA,model_input_name:yA}}async _prepare_encoder_decoder_kwargs_for_generation({inputs_tensor:m,model_inputs:W,model_input_name:nA,generation_config:pA}){if(this.sessions.model.inputNames.includes("inputs_embeds")&&!W.inputs_embeds&&"_prepare_inputs_embeds"in this){const{input_ids:UA,pixel_values:WA,attention_mask:ee,...re}=W,_e=await this._prepare_inputs_embeds(W);W={...re,...(0,C.pick)(_e,["inputs_embeds","attention_mask"])}}let{last_hidden_state:yA}=await CA(this,W);if(pA.guidance_scale!==null&&pA.guidance_scale>1)yA=(0,a.cat)([yA,(0,a.full_like)(yA,0)],0),"attention_mask"in W&&(W.attention_mask=(0,a.cat)([W.attention_mask,(0,a.zeros_like)(W.attention_mask)],0));else if(W.decoder_input_ids){const UA=Z(W.decoder_input_ids).dims[0];if(UA!==yA.dims[0]){if(yA.dims[0]!==1)throw new Error(`The encoder outputs have a different batch size (${yA.dims[0]}) than the decoder inputs (${UA}).`);yA=(0,a.cat)(Array.from({length:UA},()=>yA),0)}}return W.encoder_outputs=yA,W}_prepare_decoder_input_ids_for_generation({batch_size:m,model_input_name:W,model_kwargs:nA,decoder_start_token_id:pA,bos_token_id:yA,generation_config:UA}){let{decoder_input_ids:WA,...ee}=nA;if(!(WA instanceof a.Tensor)){if(WA)Array.isArray(WA[0])||(WA=Array.from({length:m},()=>WA));else if(pA??=yA,this.config.model_type==="musicgen")WA=Array.from({length:m*this.config.decoder.num_codebooks},()=>[pA]);else if(Array.isArray(pA)){if(pA.length!==m)throw new Error(`\`decoder_start_token_id\` expcted to have length ${m} but got ${pA.length}`);WA=pA}else WA=Array.from({length:m},()=>[pA]);WA=Z(WA)}return nA.decoder_attention_mask=(0,a.ones_like)(WA),{input_ids:WA,model_inputs:ee}}async generate({inputs:m=null,generation_config:W=null,logits_processor:nA=null,stopping_criteria:pA=null,streamer:yA=null,...UA}){this._validate_model_class(),W=this._prepare_generation_config(W,UA);let{inputs_tensor:WA,model_inputs:ee,model_input_name:re}=this._prepare_model_inputs({inputs:m,model_kwargs:UA});const _e=this.config.is_encoder_decoder;_e&&("encoder_outputs"in ee||(ee=await this._prepare_encoder_decoder_kwargs_for_generation({inputs_tensor:WA,model_inputs:ee,model_input_name:re,generation_config:W})));let Ke;_e?{input_ids:Ke,model_inputs:ee}=this._prepare_decoder_input_ids_for_generation({batch_size:ee[re].dims.at(0),model_input_name:re,model_kwargs:ee,decoder_start_token_id:W.decoder_start_token_id,bos_token_id:W.bos_token_id,generation_config:W}):Ke=ee[re];let fe=Ke.dims.at(-1);W.max_new_tokens!==null&&(W.max_length=fe+W.max_new_tokens);const pe=this._get_logits_processor(W,fe,nA),ze=this._get_stopping_criteria(W,pA),me=ee[re].dims.at(0),ue=L.LogitsSampler.getSampler(W),Pe=new Array(me).fill(0),tg=Ke.tolist();yA&&yA.put(tg);let ng,fg={};for(;;){if(ee=this.prepare_inputs_for_generation(tg,ee,W),ng=await this.forward(ee),W.output_attentions&&W.return_dict_in_generate){const Zg=this.getAttentions(ng);for(const mI in Zg)mI in fg||(fg[mI]=[]),fg[mI].push(Zg[mI])}const Ue=ng.logits.slice(null,-1,null),lg=pe(tg,Ue),xg=[];for(let Zg=0;ZgZg))break;ee=this._update_model_kwargs_for_generation({generated_input_ids:xg,outputs:ng,model_inputs:ee,is_encoder_decoder:_e})}yA&&yA.end();const mg=this.getPastKeyValues(ng,ee.past_key_values,!0),pg=new a.Tensor("int64",tg.flat(),[tg.length,tg[0].length]);if(W.return_dict_in_generate)return{sequences:pg,past_key_values:mg,...fg};for(const Ue of Object.values(ng))Ue.location==="gpu-buffer"&&Ue.dispose();return pg}getPastKeyValues(m,W,nA=!1){const pA=Object.create(null);for(const yA in m)if(yA.startsWith("present")){const UA=yA.replace("present","past_key_values"),WA=yA.includes("encoder");if(WA&&W?pA[UA]=W[UA]:pA[UA]=m[yA],W&&(!WA||nA)){const ee=W[UA];ee.location==="gpu-buffer"&&ee.dispose()}}return pA}getAttentions(m){const W={};for(const nA of["cross_attentions","encoder_attentions","decoder_attentions"])for(const pA in m)pA.startsWith(nA)&&(nA in W||(W[nA]=[]),W[nA].push(m[pA]));return W}addPastKeyValues(m,W){if(W)Object.assign(m,W);else{const pA=(this.sessions.decoder_model_merged??this.sessions.model)?.config?.kv_cache_dtype??"float32",yA=pA==="float16"?new a.DataTypeMap.float16:[],UA=(m[this.main_input_name]??m.attention_mask)?.dims?.[0]??1,WA=(0,I.getKeyValueShapes)(this.config,{batch_size:UA});for(const ee in WA)m[ee]=new a.Tensor(pA,yA,WA[ee])}}async encode_image({pixel_values:m}){const W=(await x(this.sessions.vision_encoder,{pixel_values:m})).image_features;return this.config.num_image_tokens||(console.warn(`The number of image tokens was not set in the model configuration. Setting it to the number of features detected by the vision encoder (${W.dims[1]}).`),this.config.num_image_tokens=W.dims[1]),W}async encode_text({input_ids:m}){return(await x(this.sessions.embed_tokens,{input_ids:m})).inputs_embeds}async encode_audio({audio_values:m}){return(await x(this.sessions.audio_encoder,{audio_values:m})).audio_features}}class fA{}class FA extends fA{constructor({last_hidden_state:m,hidden_states:W=null,attentions:nA=null}){super(),this.last_hidden_state=m,this.hidden_states=W,this.attentions=nA}}class LA extends ${}class GA extends LA{}class KA extends LA{async _call(m){return new qg(await super._call(m))}}class vA extends LA{async _call(m){return new Ge(await super._call(m))}}class jA extends LA{async _call(m){return new bg(await super._call(m))}}class Ce extends LA{async _call(m){return new Vg(await super._call(m))}}class Ie extends ${}class JA extends Ie{}class XA extends Ie{async _call(m){return new qg(await super._call(m))}}class PA extends Ie{async _call(m){return new Ge(await super._call(m))}}class ie extends Ie{async _call(m){return new bg(await super._call(m))}}class he extends ${}class Qe extends he{}class bA extends ${}class ae extends bA{}class Se extends bA{async _call(m){return new qg(await super._call(m))}}class Ag extends bA{async _call(m){return new Ge(await super._call(m))}}class Ye extends bA{async _call(m){return new bg(await super._call(m))}}class gg extends bA{async _call(m){return new Vg(await super._call(m))}}class Mg extends ${}class Fe extends Mg{}class ye extends Mg{async _call(m){return new qg(await super._call(m))}}class b extends Mg{async _call(m){return new Ge(await super._call(m))}}class QA extends Mg{async _call(m){return new bg(await super._call(m))}}class v extends Mg{async _call(m){return new Vg(await super._call(m))}}class sA extends ${}class wA extends sA{}class TA extends sA{async _call(m){return new qg(await super._call(m))}}class mA extends sA{async _call(m){return new Ge(await super._call(m))}}class k extends sA{async _call(m){return new bg(await super._call(m))}}class te extends sA{async _call(m){return new Vg(await super._call(m))}}class Be extends ${}class og extends Be{}class Je extends Be{async _call(m){return new qg(await super._call(m))}}class Bg extends Be{async _call(m){return new Ge(await super._call(m))}}class Xe extends Be{async _call(m){return new bg(await super._call(m))}}class Tg extends Be{async _call(m){return new Vg(await super._call(m))}}class eg extends ${}class Lg extends eg{}class eI extends eg{async _call(m){return new qg(await super._call(m))}}class iI extends eg{async _call(m){return new Ge(await super._call(m))}}class $g extends eg{async _call(m){return new bg(await super._call(m))}}class rI extends eg{async _call(m){return new Vg(await super._call(m))}}class Fg extends ${}class EI extends Fg{}class Xg extends Fg{async _call(m){return new qg(await super._call(m))}}class tI extends Fg{async _call(m){return new Ge(await super._call(m))}}class Hg extends Fg{async _call(m){return new bg(await super._call(m))}}class uI extends Fg{async _call(m){return new Vg(await super._call(m))}}class Ig extends ${}class gI extends Ig{}class II extends Ig{async _call(m){return new Ge(await super._call(m))}}class Kg extends Ig{async _call(m){return new bg(await super._call(m))}}class Ug extends Ig{async _call(m){return new Vg(await super._call(m))}}class HA extends Ig{async _call(m){return new qg(await super._call(m))}}class Ae extends ${}class le extends Ae{}class Dg extends Ae{async _call(m){return new qg(await super._call(m))}}class Wg extends Ae{async _call(m){return new Ge(await super._call(m))}}class wI extends Ae{async _call(m){return new bg(await super._call(m))}}class ag extends ${}class Sg extends ag{}class pI extends ag{async _call(m){return new qg(await super._call(m))}}class YI extends ag{async _call(m){return new Ge(await super._call(m))}}class TI extends ag{async _call(m){return new Vg(await super._call(m))}}class CI extends ${}class We extends CI{}class yI extends CI{async _call(m){return new qg(await super._call(m))}}class l extends CI{async _call(m){return new Ge(await super._call(m))}}class S extends CI{async _call(m){return new bg(await super._call(m))}}class K extends CI{async _call(m){return new Vg(await super._call(m))}}class O extends ${}class iA extends O{}class aA extends O{async _call(m){return new qg(await super._call(m))}}class uA extends O{async _call(m){return new Ge(await super._call(m))}}class SA extends O{async _call(m){return new Vg(await super._call(m))}}class se extends ${}class BA extends se{}class N extends se{async _call(m){return new Ge(await super._call(m))}}class P extends se{async _call(m){return new Vg(await super._call(m))}}class eA extends se{async _call(m){return new qg(await super._call(m))}}class AA extends ${forward_params=["input_ids","attention_mask","encoder_outputs","decoder_input_ids","decoder_attention_mask","past_key_values"]}class lA extends AA{}class NA extends AA{}class VA extends ${}class $A extends VA{}class ZA extends VA{}class qA extends ${}class Re extends qA{}class we extends qA{}class He extends ${}class be extends He{}class Eg extends He{}class yg extends He{async _call(m){return new Ge(await super._call(m))}}class Ze extends ${}class ug extends Ze{}class JI extends Ze{}class Ng extends Ze{async _call(m){return new Ge(await super._call(m))}}class fI extends Ze{}class ig extends ${}class Rg extends ig{}class Pg extends ig{}class oI extends ${}class nI extends oI{}class vg extends oI{}class Jg extends ${}class Gg extends Jg{}class dg extends Jg{async _call(m){return new qg(await super._call(m))}}class rg extends Jg{async _call(m){return new Ge(await super._call(m))}}class wg extends Jg{async _call(m){return new bg(await super._call(m))}}class jg extends Jg{async _call(m){return new Vg(await super._call(m))}}class lI extends ${}class Mi extends lI{}class Xt extends lI{async _call(m){return new qg(await super._call(m))}}class it extends lI{async _call(m){return new Ge(await super._call(m))}}class Zt extends lI{async _call(m){return new bg(await super._call(m))}}class AC extends lI{async _call(m){return new Vg(await super._call(m))}}class OI extends ${}class eC extends OI{}class gC extends OI{async _call(m){return new qg(await super._call(m))}}class IC extends OI{async _call(m){return new Ge(await super._call(m))}}class iC extends OI{async _call(m){return new bg(await super._call(m))}}class tC extends OI{async _call(m){return new Vg(await super._call(m))}}class tt extends ${}class CC extends tt{}class oC extends tt{}class Ct extends ${requires_attention_mask=!1;main_input_name="input_features";forward_params=["input_features","attention_mask","decoder_input_ids","decoder_attention_mask","past_key_values"]}class ot extends Ct{}class Fi extends Ct{_prepare_generation_config(m,W){return super._prepare_generation_config(m,W,h.WhisperGenerationConfig)}_retrieve_init_tokens(m){const W=[m.decoder_start_token_id];let nA=m.language;const pA=m.task;if(m.is_multilingual){nA||(console.warn("No language specified - defaulting to English (en)."),nA="en");const UA=`<|${(0,R.whisper_language_to_code)(nA)}|>`;W.push(m.lang_to_id[UA]),W.push(m.task_to_id[pA??"transcribe"])}else if(nA||pA)throw new Error("Cannot specify `task` or `language` for an English-only model. If the model is intended to be multilingual, pass `is_multilingual=true` to generate, or update the generation config.");return!m.return_timestamps&&m.no_timestamps_token_id&&W.at(-1)!==m.no_timestamps_token_id?W.push(m.no_timestamps_token_id):m.return_timestamps&&W.at(-1)===m.no_timestamps_token_id&&(console.warn("<|notimestamps|> prompt token is removed from generation_config since `return_timestamps` is set to `true`."),W.pop()),W.filter(yA=>yA!=null)}async generate({inputs:m=null,generation_config:W=null,logits_processor:nA=null,stopping_criteria:pA=null,...yA}){W=this._prepare_generation_config(W,yA);const UA=yA.decoder_input_ids??this._retrieve_init_tokens(W);if(W.return_timestamps&&(nA??=new r.LogitsProcessorList,nA.push(new r.WhisperTimeStampLogitsProcessor(W,UA))),W.begin_suppress_tokens&&(nA??=new r.LogitsProcessorList,nA.push(new r.SuppressTokensAtBeginLogitsProcessor(W.begin_suppress_tokens,UA.length))),W.return_token_timestamps){if(!W.alignment_heads)throw new Error("Model generation config has no `alignment_heads`, token-level timestamps not available. See https://gist.github.com/hollance/42e32852f24243b748ae6bc1f985b13a on how to add this property to the generation config.");W.task==="translate"&&console.warn("Token-level timestamps may not be reliable for task 'translate'."),W.output_attentions=!0,W.return_dict_in_generate=!0}const WA=await super.generate({inputs:m,generation_config:W,logits_processor:nA,decoder_input_ids:UA,...yA});return W.return_token_timestamps&&(WA.token_timestamps=this._extract_token_timestamps(WA,W.alignment_heads,W.num_frames)),WA}_extract_token_timestamps(m,W,nA=null,pA=.02){if(!m.cross_attentions)throw new Error("Model outputs must contain cross attentions to extract timestamps. This is most likely because the model was not exported with `output_attentions=True`.");nA==null&&console.warn("`num_frames` has not been set, meaning the entire audio will be analyzed. This may lead to inaccurate token-level timestamps for short audios (< 30 seconds).");let yA=this.config.median_filter_width;yA===void 0&&(console.warn("Model config has no `median_filter_width`, using default value of 7."),yA=7);const UA=m.cross_attentions,WA=Array.from({length:this.config.decoder_layers},(me,ue)=>(0,a.cat)(UA.map(Pe=>Pe[ue]),2)),ee=(0,a.stack)(W.map(([me,ue])=>{if(me>=WA.length)throw new Error(`Layer index ${me} is out of bounds for cross attentions (length ${WA.length}).`);return nA?WA[me].slice(null,ue,null,[0,nA]):WA[me].slice(null,ue)})).transpose(1,0,2,3),[re,_e]=(0,a.std_mean)(ee,-2,0,!0),Ke=ee.clone();for(let me=0;mePe[Ue+1]-Pe[Ue]),fg=(0,C.mergeArrays)([1],ng).map(pg=>!!pg),mg=[];for(let pg=0;pgfe.findIndex(pe=>pe==yA)),ee=WA.every(fe=>fe===-1),re=WA.every(fe=>fe!==-1);if(!ee&&!re)throw new Error("Every input should contain either 0 or 1 image token.");if(ee)return{inputs_embeds:m,attention_mask:pA};const _e=[],Ke=[];for(let fe=0;feArray.from({length:m.dims[0]},ng=>Array.from({length:m.dims[1]},fg=>1))),ze=W?W.tolist():[],me=nA?nA.tolist():[];let ue=0,Pe=0;for(let tg=0;tgfe[tg][kg]==1),mg=ng.reduce((Qg,kg,$I)=>(kg==ee&&Qg.push($I),Qg),[]).map(Qg=>ng[Qg+1]),pg=mg.filter(Qg=>Qg==UA).length,Ue=mg.filter(Qg=>Qg==WA).length;let lg=[],xg=0,Qi=pg,Zg=Ue;for(let Qg=0;QgMI>xg&&ri==UA),$I=ng.findIndex((ri,MI)=>MI>xg&&ri==WA),ai=Qi>0&&kg!==-1?kg:ng.length+1,ji=Zg>0&&$I!==-1?$I:ng.length+1;let KC,ds,hs,Ds;ai0?(0,c.max)(lg.at(-1))[0]+1:0;lg.push(Array.from({length:3*ws},(ri,MI)=>Pn+MI%ws));const ps=ws+Pn,JC=op*us*UC,sp=Array.from({length:JC},(ri,MI)=>ps+Math.floor(MI/(us*UC))),Bp=Array.from({length:JC},(ri,MI)=>ps+Math.floor(MI/UC)%us),Qp=Array.from({length:JC},(ri,MI)=>ps+MI%UC);lg.push([sp,Bp,Qp].flat()),xg=KC+JC}if(xg0?(0,c.max)(lg.at(-1))[0]+1:0,kg=ng.length-xg;lg.push(Array.from({length:3*kg},($I,ai)=>Qg+ai%kg))}const mI=lg.reduce((Qg,kg)=>Qg+kg.length,0),Oi=new Array(mI);let Wi=0;for(let Qg=0;Qg<3;++Qg)for(let kg=0;kgKe[ue%Ke.length]),ze=Array.from({length:fe[0]},(me,ue)=>(0,c.max)(Ke.subarray(fe[1]*ue,fe[1]*(ue+1)))[0]+1n+BigInt(fe[1]));return[new a.Tensor("int64",pe,[3,...fe]),new a.Tensor("int64",ze,[ze.length,1])]}else{const[Ke,fe]=m.dims,pe=BigInt64Array.from({length:3*Ke*fe},(ze,me)=>BigInt(Math.floor(me%fe/Ke)));return[new a.Tensor("int64",pe,[3,...m.dims]),(0,a.zeros)([Ke,1])]}}async encode_image({pixel_values:m,image_grid_thw:W}){return(await x(this.sessions.vision_encoder,{pixel_values:m,grid_thw:W})).image_features}_merge_input_ids_with_image_features(m){return U({image_token_id:this.config.image_token_id,...m})}prepare_inputs_for_generation(m,W,nA){if(W.attention_mask&&!W.position_ids)if(!W.past_key_values)[W.position_ids,W.rope_deltas]=this.get_rope_index(W.input_ids,W.image_grid_thw,W.video_grid_thw,W.attention_mask);else{W.pixel_values=null;const pA=BigInt(Object.values(W.past_key_values)[0].dims.at(-2)),yA=W.rope_deltas.map(UA=>pA+UA);W.position_ids=(0,a.stack)([yA,yA,yA],0)}return W}}class uo extends ${}class bQ extends uo{}class xQ extends uo{}class wo extends ${}class YQ extends wo{}class TQ extends wo{}class po extends ${}class HQ extends po{}class PQ extends po{}class yo extends ${}class vQ extends yo{}class qQ extends yo{}class fo extends ${}class OQ extends fo{}class WQ extends fo{}class mo extends ${}class jQ extends mo{}class VQ extends mo{async _call(m){return new Ge(await super._call(m))}}class Mo extends ${}class zQ extends Mo{}class $Q extends Mo{async _call(m){return new Ge(await super._call(m))}}class XQ extends ${}class ZQ extends XQ{}class Fo extends ${}class Aa extends Fo{}class ea extends Fo{async _call(m){return new Ge(await super._call(m))}}class ga extends ${}class Ia extends ga{}class So extends ${}class ia extends So{}class ta extends So{async _call(m){return new Ge(await super._call(m))}}class Ca extends ${}class oa extends Ca{}class No extends ${}class sa extends No{}class Ba extends No{async _call(m){return new Ge(await super._call(m))}}class Qa extends ${}class aa extends Qa{async _call(m){return new Tn(await super._call(m))}}class Ro extends ${}class ra extends Ro{}class Ea extends Ro{async _call(m){return new Ge(await super._call(m))}}class Go extends ${}class na extends Go{}class la extends Go{async _call(m){return new Ge(await super._call(m))}}class _o extends ${}class ca extends _o{}class da extends _o{}class ko extends ${}class ha extends ko{}class Da extends ko{}class Lo extends ${}class ua extends Lo{}class wa extends Lo{async _call(m){return new Ge(await super._call(m))}}class DC extends ${}class pa extends DC{}class ya extends DC{async _call(m){return new Uo(await super._call(m))}}class Ko extends DC{async _call(m){return new fa(await super._call(m))}}class Uo extends fA{constructor({logits:m,pred_boxes:W}){super(),this.logits=m,this.pred_boxes=W}}class fa extends fA{constructor({logits:m,pred_boxes:W,pred_masks:nA}){super(),this.logits=m,this.pred_boxes=W,this.pred_masks=nA}}class Jo extends ${}class ma extends Jo{}class Ma extends Jo{async _call(m){return new Rt(await super._call(m))}}class Rt extends fA{constructor({logits:m,pred_boxes:W}){super(),this.logits=m,this.pred_boxes=W}}class bo extends ${}class Fa extends bo{}class Sa extends bo{async _call(m){return new Na(await super._call(m))}}class Na extends Rt{}class xo extends ${}class Ra extends xo{}class Ga extends xo{async _call(m){return new _a(await super._call(m))}}class _a extends Rt{}class Yo extends ${}class ka extends Yo{}class La extends Yo{async _call(m){return new Rt(await super._call(m))}}class To extends ${}class Ka extends To{}class Ua extends To{async _call(m){return new Ja(await super._call(m))}}class Ja extends Uo{}class Ho extends ${}class ba extends Ho{}class xa extends Ho{async _call(m){return new Ge(await super._call(m))}}class Po extends ${}class Ya extends Po{}class Ta extends Po{async _call(m){return new Ge(await super._call(m))}}class vo extends ${}class Ha extends vo{}class Pa extends vo{async _call(m){return new Ge(await super._call(m))}}class uC extends ${}class va extends uC{}class qa extends uC{async _call(m){return new Ge(await super._call(m))}}class Oa extends uC{}class qo extends ${}class Wa extends qo{}class ja extends qo{}class Oo extends ${}class Va extends Oo{}class za extends Oo{}class $a extends ${}class Xa extends $a{}class wC extends ${}class Za extends wC{}class Ar extends wC{}class er extends wC{}class gr extends ${}class Ir extends gr{}class ir extends ${}class tr extends ir{}class Cr extends ${}class or extends Cr{}class Wo extends ${}class sr extends Wo{}class Br extends Wo{}class jo extends ${}class Qr extends jo{}class ar extends jo{}class rr extends ${}class Er extends rr{}class Vo extends ${}class nr extends Vo{}class lr extends Vo{async _call(m){return new Ge(await super._call(m))}}class zo extends ${}class cr extends zo{}class dr extends zo{async _call(m){return new Ge(await super._call(m))}}class $o extends ${}class hr extends $o{}class Dr extends $o{async _call(m){return new Ge(await super._call(m))}}class Xo extends ${}class ur extends Xo{}class wr extends Xo{async _call(m){return new Ge(await super._call(m))}}class pr extends ${}class yr extends pr{}class Zo extends ${}class fr extends Zo{}class mr extends Zo{async _call(m){return new Mr(await super._call(m))}}class Mr extends fA{constructor({logits:m,pred_boxes:W}){super(),this.logits=m,this.pred_boxes=W}}class Fr extends ${}class Sr extends Fr{async get_image_embeddings({pixel_values:m}){return await CA(this,{pixel_values:m})}async forward(m){if((!m.image_embeddings||!m.image_positional_embeddings)&&(m={...m,...await this.get_image_embeddings(m)}),!m.input_labels&&m.input_points){const nA=m.input_points.dims.slice(0,-1),pA=nA.reduce((yA,UA)=>yA*UA,1);m.input_labels=new a.Tensor("int64",new BigInt64Array(pA).fill(1n),nA)}const W={image_embeddings:m.image_embeddings,image_positional_embeddings:m.image_positional_embeddings};return m.input_points&&(W.input_points=m.input_points),m.input_labels&&(W.input_labels=m.input_labels),m.input_boxes&&(W.input_boxes=m.input_boxes),await x(this.sessions.prompt_encoder_mask_decoder,W)}async _call(m){return new Nr(await super._call(m))}}class Nr extends fA{constructor({iou_scores:m,pred_masks:W}){super(),this.iou_scores=m,this.pred_masks=W}}class As extends ${}class Rr extends As{}class Gr extends As{}class es extends ${}class _r extends es{}class kr extends es{}class zI extends ${}class Lr extends zI{}class Kr extends zI{async _call(m){return new Bi(await super._call(m))}}class Ur extends zI{async _call(m){return new Ge(await super._call(m))}}class Jr extends zI{async _call(m){return new bg(await super._call(m))}}class gs extends ${}class br extends gs{}class xr extends gs{async _call(m){return new bg(await super._call(m))}}class Yr extends ${}class Tr extends Yr{}class pC extends ${}class Hr extends pC{}class Pr extends pC{async _call(m){return new Bi(await super._call(m))}}class vr extends pC{async _call(m){return new Ge(await super._call(m))}}class Gt extends ${}class qr extends Gt{}class Or extends Gt{async _call(m){return new Bi(await super._call(m))}}class Wr extends Gt{async _call(m){return new Ge(await super._call(m))}}class jr extends Gt{async _call(m){return new bg(await super._call(m))}}class yC extends ${}class Vr extends yC{}class zr extends yC{async _call(m){return new Bi(await super._call(m))}}class $r extends yC{async _call(m){return new Ge(await super._call(m))}}class n0 extends ${}class Xr extends zI{}class Zr extends zI{async _call(m){return new Bi(await super._call(m))}}class AE extends zI{async _call(m){return new Ge(await super._call(m))}}class vi extends ${}class eE extends vi{}class gE extends vi{async _call(m){return new Bi(await super._call(m))}}class IE extends vi{async _call(m){return new Ge(await super._call(m))}}class iE extends vi{async _call(m){return new Yn(await super._call(m))}}class tE extends vi{async _call(m){return new bg(await super._call(m))}}class CE extends ${}class oE extends CE{}class fC extends ${}class l0 extends fC{}class sE extends fC{}class BE extends fC{async generate_speech(m,W,{threshold:nA=.5,minlenratio:pA=0,maxlenratio:yA=20,vocoder:UA=null}={}){const WA={input_ids:m},{encoder_outputs:ee,encoder_attention_mask:re}=await CA(this,WA),_e=ee.dims[1]/this.config.reduction_factor,Ke=Math.floor(_e*yA),fe=Math.floor(_e*pA),pe=this.config.num_mel_bins;let ze=[],me=null,ue=null,Pe=0;for(;;){++Pe;const fg=IA(!!ue);let mg;ue?mg=ue.output_sequence_out:mg=new a.Tensor("float32",new Float32Array(pe),[1,1,pe]);let pg={use_cache_branch:fg,output_sequence:mg,encoder_attention_mask:re,speaker_embeddings:W,encoder_hidden_states:ee};this.addPastKeyValues(pg,me),ue=await x(this.sessions.decoder_model_merged,pg),me=this.getPastKeyValues(ue,me);const{prob:Ue,spectrum:lg}=ue;if(ze.push(lg),Pe>=fe&&(Array.from(Ue.data).filter(xg=>xg>=nA).length>0||Pe>=Ke))break}const tg=(0,a.cat)(ze),{waveform:ng}=await x(UA.sessions.model,{spectrogram:tg});return{spectrogram:tg,waveform:ng}}}class QE extends ${main_input_name="spectrogram"}class aE extends ${}class rE extends aE{}class Is extends ${}class EE extends Is{}class nE extends Is{}class is extends ${}class lE extends is{}class cE extends is{}class ts extends ${}class dE extends ts{}class hE extends ts{}class mC extends ${}class DE extends mC{}class uE extends mC{static async from_pretrained(m,W={}){return super.from_pretrained(m,{...W,model_file_name:W.model_file_name??"text_model"})}}class wE extends mC{static async from_pretrained(m,W={}){return super.from_pretrained(m,{...W,model_file_name:W.model_file_name??"audio_model"})}}class pE extends ${}class Cs extends pE{async _call(m){return new Hn(await super._call(m))}}class MC extends ${}class c0 extends MC{}class yE extends MC{}class fE extends MC{}class os extends ${}class mE extends os{}class ME extends os{}class ss extends ${}class FE extends ss{}class SE extends ss{async _call(m){return new Ge(await super._call(m))}}class Bs extends ${}class d0 extends Bs{}class h0 extends Bs{}class Qs extends ${forward_params=["input_ids","attention_mask","encoder_outputs","decoder_input_ids","decoder_attention_mask","past_key_values"];_apply_and_filter_by_delay_pattern_mask(m){const[W,nA]=m.dims,pA=this.config.decoder.num_codebooks,yA=nA-pA;let UA=0;for(let re=0;re0&&fe<=yA&&(m.data[UA++]=m.data[re])}const WA=Math.floor(W/pA),ee=UA/(WA*pA);return new a.Tensor(m.type,m.data.slice(0,UA),[WA,pA,ee])}prepare_inputs_for_generation(m,W,nA){let pA=structuredClone(m);for(let UA=0;UA=WA&&(pA[UA][WA]=BigInt(this.config.decoder.pad_token_id));return nA.guidance_scale!==null&&nA.guidance_scale>1&&(pA=pA.concat(pA)),super.prepare_inputs_for_generation(pA,W,nA)}async generate(m){const W=await super.generate(m),nA=this._apply_and_filter_by_delay_pattern_mask(W).unsqueeze_(0),{audio_values:pA}=await x(this.sessions.encodec_decode,{audio_codes:nA});return pA}}class FC extends ${}class NE extends FC{}class RE extends FC{async _call(m){return new Ge(await super._call(m))}}class GE extends FC{}class SC extends ${}class _E extends SC{}class kE extends SC{async _call(m){return new Ge(await super._call(m))}}class LE extends SC{}class NC extends ${}class KE extends NC{}class UE extends NC{async _call(m){return new Ge(await super._call(m))}}class JE extends NC{}class RC extends ${}class bE extends RC{}class xE extends RC{async _call(m){return new Ge(await super._call(m))}}class YE extends RC{}class TE extends ${}class HE extends TE{}class PE extends ${}class vE extends PE{forward_params=["input_ids","pixel_values","images_seq_mask","images_emb_mask","attention_mask","position_ids","past_key_values"];constructor(...m){super(...m),this._generation_mode="text"}async forward(m){const W=this._generation_mode??"text";let nA;if(W==="text"||!m.past_key_values){const ee=this.sessions.prepare_inputs_embeds,re=(0,C.pick)(m,ee.inputNames);nA=await x(ee,re)}else{const ee=this.sessions.gen_img_embeds,re=(0,C.pick)({image_ids:m.input_ids},ee.inputNames);nA=await x(ee,re)}const pA={...m,...nA},yA=await cA(this,pA),UA=this.sessions[W==="text"?"lm_head":"gen_head"];if(!UA)throw new Error(`Unable to find "${UA}" generation head`);const WA=await x(UA,(0,C.pick)(yA,UA.inputNames));return{...nA,...yA,...WA}}async generate(m){return this._generation_mode="text",super.generate(m)}async generate_images(m){this._generation_mode="image";const W=(m.inputs??m[this.main_input_name]).dims[1],pA=(await super.generate(m)).slice(null,[W,null]),yA=this.sessions.image_decode,{decoded_image:UA}=await x(yA,{generated_tokens:pA}),WA=UA.add_(1).mul_(255/2).clamp_(0,255).to("uint8"),ee=[];for(const re of WA){const _e=d.RawImage.fromTensor(re);ee.push(_e)}return ee}}class qE extends fA{constructor({char_logits:m,bpe_logits:W,wp_logits:nA}){super(),this.char_logits=m,this.bpe_logits=W,this.wp_logits=nA}get logits(){return[this.char_logits,this.bpe_logits,this.wp_logits]}}class OE extends ${}class WE extends OE{async _call(m){return new qE(await super._call(m))}}class as extends ${}class jE extends as{}class VE extends as{}class rs extends ${}class zE extends rs{}class $E extends rs{}class XE extends ${forward_params=["input_ids","attention_mask","position_ids","audio_values","past_key_values"]}class ZE extends XE{_merge_input_ids_with_audio_features(m){const W=m.audio_features.dims.at(-1),nA=m.audio_features.view(-1,W);return z({audio_token_id:this.config.ignore_index,...m,audio_features:nA})}}class GC extends ${main_input_name="input_values";forward_params=["input_values"]}class An extends fA{constructor({audio_codes:m}){super(),this.audio_codes=m}}class en extends fA{constructor({audio_values:m}){super(),this.audio_values=m}}class gn extends GC{async encode(m){return new An(await x(this.sessions.encoder_model,m))}async decode(m){return new en(await x(this.sessions.decoder_model,m))}}class In extends GC{static async from_pretrained(m,W={}){return super.from_pretrained(m,{...W,model_file_name:W.model_file_name??"encoder_model"})}}class tn extends GC{static async from_pretrained(m,W={}){return super.from_pretrained(m,{...W,model_file_name:W.model_file_name??"decoder_model"})}}class _C extends ${main_input_name="input_values";forward_params=["input_values"]}class Cn extends fA{constructor({audio_codes:m}){super(),this.audio_codes=m}}class on extends fA{constructor({audio_values:m}){super(),this.audio_values=m}}class sn extends _C{async encode(m){return new Cn(await x(this.sessions.encoder_model,m))}async decode(m){return new on(await x(this.sessions.decoder_model,m))}}class Bn extends _C{static async from_pretrained(m,W={}){return super.from_pretrained(m,{...W,model_file_name:W.model_file_name??"encoder_model"})}}class Qn extends _C{static async from_pretrained(m,W={}){return super.from_pretrained(m,{...W,model_file_name:W.model_file_name??"decoder_model"})}}class kC extends ${main_input_name="input_values";forward_params=["input_values"]}class an extends kC{async encode(m){return await x(this.sessions.encoder_model,m)}async decode(m){return await x(this.sessions.decoder_model,m)}}class rn extends kC{static async from_pretrained(m,W={}){return super.from_pretrained(m,{...W,model_file_name:W.model_file_name??"encoder_model"})}}class En extends kC{static async from_pretrained(m,W={}){return super.from_pretrained(m,{...W,model_file_name:W.model_file_name??"decoder_model"})}}class Ve{static MODEL_CLASS_MAPPINGS=null;static BASE_IF_FAIL=!1;static async from_pretrained(m,{progress_callback:W=null,config:nA=null,cache_dir:pA=null,local_files_only:yA=!1,revision:UA="main",model_file_name:WA=null,subfolder:ee="onnx",device:re=null,dtype:_e=null,use_external_data_format:Ke=null,session_options:fe={}}={}){const pe={progress_callback:W,config:nA,cache_dir:pA,local_files_only:yA,revision:UA,model_file_name:WA,subfolder:ee,device:re,dtype:_e,use_external_data_format:Ke,session_options:fe};if(pe.config=await I.AutoConfig.from_pretrained(m,pe),!this.MODEL_CLASS_MAPPINGS)throw new Error("`MODEL_CLASS_MAPPINGS` not implemented for this type of `AutoClass`: "+this.name);const ze=pe.config.model_type;for(const me of this.MODEL_CLASS_MAPPINGS){let ue=me.get(ze);if(!ue){for(const Pe of me.values())if(Pe[0]===ze){ue=Pe;break}if(!ue)continue}return await ue[1].from_pretrained(m,pe)}if(this.BASE_IF_FAIL)return xn.has(ze)||console.warn(`Unknown model class "${ze}", attempting to construct from base class.`),await $.from_pretrained(m,pe);throw Error(`Unsupported model type: ${ze}`)}}const D0=new Map([["bert",["BertModel",GA]],["modernbert",["ModernBertModel",JA]],["nomic_bert",["NomicBertModel",Qe]],["roformer",["RoFormerModel",ae]],["electra",["ElectraModel",wA]],["esm",["EsmModel",le]],["convbert",["ConvBertModel",Fe]],["camembert",["CamembertModel",og]],["deberta",["DebertaModel",Lg]],["deberta-v2",["DebertaV2Model",EI]],["mpnet",["MPNetModel",We]],["albert",["AlbertModel",BA]],["distilbert",["DistilBertModel",gI]],["roberta",["RobertaModel",Gg]],["xlm",["XLMModel",Mi]],["xlm-roberta",["XLMRobertaModel",eC]],["clap",["ClapModel",DE]],["clip",["CLIPModel",EC]],["clipseg",["CLIPSegModel",dC]],["chinese_clip",["ChineseCLIPModel",lt]],["siglip",["SiglipModel",lC]],["jina_clip",["JinaCLIPModel",ct]],["mobilebert",["MobileBertModel",Sg]],["squeezebert",["SqueezeBertModel",iA]],["wav2vec2",["Wav2Vec2Model",Lr]],["wav2vec2-bert",["Wav2Vec2BertModel",Vr]],["unispeech",["UniSpeechModel",Hr]],["unispeech-sat",["UniSpeechSatModel",qr]],["hubert",["HubertModel",Xr]],["wavlm",["WavLMModel",eE]],["audio-spectrogram-transformer",["ASTModel",CC]],["vits",["VitsModel",Cs]],["pyannote",["PyAnnoteModel",br]],["wespeaker-resnet",["WeSpeakerResNetModel",Tr]],["detr",["DetrModel",pa]],["rt_detr",["RTDetrModel",ma]],["rt_detr_v2",["RTDetrV2Model",Fa]],["rf_detr",["RFDetrModel",Ra]],["d_fine",["DFineModel",ka]],["table-transformer",["TableTransformerModel",Ka]],["vit",["ViTModel",jQ]],["ijepa",["IJepaModel",zQ]],["pvt",["PvtModel",Aa]],["vit_msn",["ViTMSNModel",ia]],["vit_mae",["ViTMAEModel",Ia]],["groupvit",["GroupViTModel",oa]],["fastvit",["FastViTModel",sa]],["mobilevit",["MobileViTModel",ra]],["mobilevitv2",["MobileViTV2Model",na]],["owlvit",["OwlViTModel",ca]],["owlv2",["Owlv2Model",ha]],["beit",["BeitModel",ua]],["deit",["DeiTModel",ba]],["hiera",["HieraModel",Ya]],["convnext",["ConvNextModel",nr]],["convnextv2",["ConvNextV2Model",cr]],["dinov2",["Dinov2Model",hr]],["dinov2_with_registers",["Dinov2WithRegistersModel",ur]],["resnet",["ResNetModel",Ha]],["swin",["SwinModel",va]],["swin2sr",["Swin2SRModel",Wa]],["donut-swin",["DonutSwinModel",Er]],["yolos",["YolosModel",fr]],["dpt",["DPTModel",Va]],["glpn",["GLPNModel",Qr]],["hifigan",["SpeechT5HifiGan",QE]],["efficientnet",["EfficientNetModel",FE]],["decision_transformer",["DecisionTransformerModel",HE]],["patchtst",["PatchTSTForPrediction",jE]],["patchtsmixer",["PatchTSMixerForPrediction",zE]],["mobilenet_v1",["MobileNetV1Model",NE]],["mobilenet_v2",["MobileNetV2Model",_E]],["mobilenet_v3",["MobileNetV3Model",KE]],["mobilenet_v4",["MobileNetV4Model",bE]],["maskformer",["MaskFormerModel",sr]],["mgp-str",["MgpstrForSceneTextRecognition",WE]],["style_text_to_speech_2",["StyleTextToSpeech2Model",oE]]]),u0=new Map([["t5",["T5Model",lA]],["longt5",["LongT5Model",$A]],["mt5",["MT5Model",Re]],["bart",["BartModel",be]],["mbart",["MBartModel",ug]],["marian",["MarianModel",Rr]],["whisper",["WhisperModel",ot]],["m2m_100",["M2M100Model",_r]],["blenderbot",["BlenderbotModel",Rg]],["blenderbot-small",["BlenderbotSmallModel",nI]]]),w0=new Map([["mimi",["MimiModel",gn]],["dac",["DacModel",sn]],["snac",["SnacModel",an]]]),p0=new Map([["bloom",["BloomModel",HQ]],["jais",["JAISModel",wt]],["gpt2",["GPT2Model",ii]],["gptj",["GPTJModel",xi]],["gpt_bigcode",["GPTBigCodeModel",Mt]],["gpt_neo",["GPTNeoModel",sI]],["gpt_neox",["GPTNeoXModel",yt]],["codegen",["CodeGenModel",Ti]],["llama",["LlamaModel",St]],["exaone",["ExaoneModel",_A]],["olmo",["OlmoModel",je]],["olmo2",["Olmo2Model",hC]],["mobilellm",["MobileLLMModel",Ee]],["granite",["GraniteModel",uQ]],["cohere",["CohereModel",pQ]],["gemma",["GemmaModel",fQ]],["gemma2",["Gemma2Model",MQ]],["gemma3_text",["Gemma3Model",SQ]],["helium",["HeliumModel",E]],["glm",["GlmModel",Y]],["openelm",["OpenELMModel",RQ]],["qwen2",["Qwen2Model",_Q]],["qwen3",["Qwen3Model",LQ]],["phi",["PhiModel",bQ]],["phi3",["Phi3Model",YQ]],["mpt",["MptModel",vQ]],["opt",["OPTModel",OQ]],["mistral",["MistralModel",EE]],["starcoder2",["Starcoder2Model",lE]],["falcon",["FalconModel",dE]],["stablelm",["StableLmModel",mE]]]),Es=new Map([["speecht5",["SpeechT5ForSpeechToText",sE]],["whisper",["WhisperForConditionalGeneration",Fi]],["lite-whisper",["LiteWhisperForConditionalGeneration",st]],["moonshine",["MoonshineForConditionalGeneration",Qt]]]),nn=new Map([["speecht5",["SpeechT5ForTextToSpeech",BE]]]),ln=new Map([["vits",["VitsModel",Cs]],["musicgen",["MusicgenForConditionalGeneration",Qs]]]),cn=new Map([["bert",["BertForSequenceClassification",vA]],["modernbert",["ModernBertForSequenceClassification",PA]],["roformer",["RoFormerForSequenceClassification",Ag]],["electra",["ElectraForSequenceClassification",mA]],["esm",["EsmForSequenceClassification",Wg]],["convbert",["ConvBertForSequenceClassification",b]],["camembert",["CamembertForSequenceClassification",Bg]],["deberta",["DebertaForSequenceClassification",iI]],["deberta-v2",["DebertaV2ForSequenceClassification",tI]],["mpnet",["MPNetForSequenceClassification",l]],["albert",["AlbertForSequenceClassification",N]],["distilbert",["DistilBertForSequenceClassification",II]],["roberta",["RobertaForSequenceClassification",rg]],["xlm",["XLMForSequenceClassification",it]],["xlm-roberta",["XLMRobertaForSequenceClassification",IC]],["bart",["BartForSequenceClassification",yg]],["mbart",["MBartForSequenceClassification",Ng]],["mobilebert",["MobileBertForSequenceClassification",YI]],["squeezebert",["SqueezeBertForSequenceClassification",uA]]]),dn=new Map([["bert",["BertForTokenClassification",jA]],["modernbert",["ModernBertForTokenClassification",ie]],["roformer",["RoFormerForTokenClassification",Ye]],["electra",["ElectraForTokenClassification",k]],["esm",["EsmForTokenClassification",wI]],["convbert",["ConvBertForTokenClassification",QA]],["camembert",["CamembertForTokenClassification",Xe]],["deberta",["DebertaForTokenClassification",$g]],["deberta-v2",["DebertaV2ForTokenClassification",Hg]],["mpnet",["MPNetForTokenClassification",S]],["distilbert",["DistilBertForTokenClassification",Kg]],["roberta",["RobertaForTokenClassification",wg]],["xlm",["XLMForTokenClassification",Zt]],["xlm-roberta",["XLMRobertaForTokenClassification",iC]]]),ns=new Map([["t5",["T5ForConditionalGeneration",NA]],["longt5",["LongT5ForConditionalGeneration",ZA]],["mt5",["MT5ForConditionalGeneration",we]],["bart",["BartForConditionalGeneration",Eg]],["mbart",["MBartForConditionalGeneration",JI]],["marian",["MarianMTModel",Gr]],["m2m_100",["M2M100ForConditionalGeneration",kr]],["blenderbot",["BlenderbotForConditionalGeneration",Pg]],["blenderbot-small",["BlenderbotSmallForConditionalGeneration",vg]]]),ls=new Map([["bloom",["BloomForCausalLM",PQ]],["gpt2",["GPT2LMHeadModel",De]],["jais",["JAISLMHeadModel",pt]],["gptj",["GPTJForCausalLM",mt]],["gpt_bigcode",["GPTBigCodeForCausalLM",oi]],["gpt_neo",["GPTNeoForCausalLM",ti]],["gpt_neox",["GPTNeoXForCausalLM",ft]],["codegen",["CodeGenForCausalLM",Ft]],["llama",["LlamaForCausalLM",Nt]],["exaone",["ExaoneForCausalLM",OA]],["olmo",["OlmoForCausalLM",_g]],["olmo2",["Olmo2ForCausalLM",DQ]],["mobilellm",["MobileLLMForCausalLM",Ne]],["granite",["GraniteForCausalLM",wQ]],["cohere",["CohereForCausalLM",yQ]],["gemma",["GemmaForCausalLM",mQ]],["gemma2",["Gemma2ForCausalLM",FQ]],["gemma3_text",["Gemma3ForCausalLM",NQ]],["helium",["HeliumForCausalLM",M]],["glm",["GlmForCausalLM",V]],["openelm",["OpenELMForCausalLM",GQ]],["qwen2",["Qwen2ForCausalLM",kQ]],["qwen3",["Qwen3ForCausalLM",KQ]],["phi",["PhiForCausalLM",xQ]],["phi3",["Phi3ForCausalLM",TQ]],["mpt",["MptForCausalLM",qQ]],["opt",["OPTForCausalLM",WQ]],["mbart",["MBartForCausalLM",fI]],["mistral",["MistralForCausalLM",nE]],["starcoder2",["Starcoder2ForCausalLM",cE]],["falcon",["FalconForCausalLM",hE]],["trocr",["TrOCRForCausalLM",rE]],["stablelm",["StableLmForCausalLM",ME]],["phi3_v",["Phi3VForCausalLM",nt]]]),y0=new Map([["multi_modality",["MultiModalityCausalLM",vE]]]),hn=new Map([["bert",["BertForMaskedLM",KA]],["modernbert",["ModernBertForMaskedLM",XA]],["roformer",["RoFormerForMaskedLM",Se]],["electra",["ElectraForMaskedLM",TA]],["esm",["EsmForMaskedLM",Dg]],["convbert",["ConvBertForMaskedLM",ye]],["camembert",["CamembertForMaskedLM",Je]],["deberta",["DebertaForMaskedLM",eI]],["deberta-v2",["DebertaV2ForMaskedLM",Xg]],["mpnet",["MPNetForMaskedLM",yI]],["albert",["AlbertForMaskedLM",eA]],["distilbert",["DistilBertForMaskedLM",HA]],["roberta",["RobertaForMaskedLM",dg]],["xlm",["XLMWithLMHeadModel",Xt]],["xlm-roberta",["XLMRobertaForMaskedLM",gC]],["mobilebert",["MobileBertForMaskedLM",pI]],["squeezebert",["SqueezeBertForMaskedLM",aA]]]),Dn=new Map([["bert",["BertForQuestionAnswering",Ce]],["roformer",["RoFormerForQuestionAnswering",gg]],["electra",["ElectraForQuestionAnswering",te]],["convbert",["ConvBertForQuestionAnswering",v]],["camembert",["CamembertForQuestionAnswering",Tg]],["deberta",["DebertaForQuestionAnswering",rI]],["deberta-v2",["DebertaV2ForQuestionAnswering",uI]],["mpnet",["MPNetForQuestionAnswering",K]],["albert",["AlbertForQuestionAnswering",P]],["distilbert",["DistilBertForQuestionAnswering",Ug]],["roberta",["RobertaForQuestionAnswering",jg]],["xlm",["XLMForQuestionAnswering",AC]],["xlm-roberta",["XLMRobertaForQuestionAnswering",tC]],["mobilebert",["MobileBertForQuestionAnswering",TI]],["squeezebert",["SqueezeBertForQuestionAnswering",SA]]]),cs=new Map([["vision-encoder-decoder",["VisionEncoderDecoderModel",Si]],["idefics3",["Idefics3ForConditionalGeneration",Gi]],["smolvlm",["SmolVLMForConditionalGeneration",Et]]]),un=new Map([["llava",["LlavaForConditionalGeneration",Ni]],["llava_onevision",["LlavaOnevisionForConditionalGeneration",at]],["moondream1",["Moondream1ForConditionalGeneration",sC]],["florence2",["Florence2ForConditionalGeneration",QC]],["qwen2-vl",["Qwen2VLForConditionalGeneration",JQ]],["idefics3",["Idefics3ForConditionalGeneration",Gi]],["smolvlm",["SmolVLMForConditionalGeneration",Et]],["paligemma",["PaliGemmaForConditionalGeneration",rt]]]),wn=new Map([["ultravox",["UltravoxModel",ZE]]]),f0=new Map([["vision-encoder-decoder",["VisionEncoderDecoderModel",Si]]]),pn=new Map([["vit",["ViTForImageClassification",VQ]],["ijepa",["IJepaForImageClassification",$Q]],["pvt",["PvtForImageClassification",ea]],["vit_msn",["ViTMSNForImageClassification",ta]],["fastvit",["FastViTForImageClassification",Ba]],["mobilevit",["MobileViTForImageClassification",Ea]],["mobilevitv2",["MobileViTV2ForImageClassification",la]],["beit",["BeitForImageClassification",wa]],["deit",["DeiTForImageClassification",xa]],["hiera",["HieraForImageClassification",Ta]],["convnext",["ConvNextForImageClassification",lr]],["convnextv2",["ConvNextV2ForImageClassification",dr]],["dinov2",["Dinov2ForImageClassification",Dr]],["dinov2_with_registers",["Dinov2WithRegistersForImageClassification",wr]],["resnet",["ResNetForImageClassification",Pa]],["swin",["SwinForImageClassification",qa]],["segformer",["SegformerForImageClassification",yE]],["efficientnet",["EfficientNetForImageClassification",SE]],["mobilenet_v1",["MobileNetV1ForImageClassification",RE]],["mobilenet_v2",["MobileNetV2ForImageClassification",kE]],["mobilenet_v3",["MobileNetV3ForImageClassification",UE]],["mobilenet_v4",["MobileNetV4ForImageClassification",xE]]]),yn=new Map([["detr",["DetrForObjectDetection",ya]],["rt_detr",["RTDetrForObjectDetection",Ma]],["rt_detr_v2",["RTDetrV2ForObjectDetection",Sa]],["rf_detr",["RFDetrForObjectDetection",Ga]],["d_fine",["DFineForObjectDetection",La]],["table-transformer",["TableTransformerForObjectDetection",Ua]],["yolos",["YolosForObjectDetection",mr]]]),fn=new Map([["owlvit",["OwlViTForObjectDetection",da]],["owlv2",["Owlv2ForObjectDetection",Da]],["grounding-dino",["GroundingDinoForObjectDetection",yr]]]),qi=new Map([["detr",["DetrForSegmentation",Ko]],["clipseg",["CLIPSegForImageSegmentation",Dt]]]),mn=new Map([["segformer",["SegformerForSemanticSegmentation",fE]],["sapiens",["SapiensForSemanticSegmentation",Za]],["swin",["SwinForSemanticSegmentation",Oa]],["mobilenet_v1",["MobileNetV1ForSemanticSegmentation",GE]],["mobilenet_v2",["MobileNetV2ForSemanticSegmentation",LE]],["mobilenet_v3",["MobileNetV3ForSemanticSegmentation",JE]],["mobilenet_v4",["MobileNetV4ForSemanticSegmentation",YE]]]),Mn=new Map([["detr",["DetrForSegmentation",Ko]],["maskformer",["MaskFormerForInstanceSegmentation",Br]]]),Fn=new Map([["sam",["SamModel",Sr]]]),Sn=new Map([["wav2vec2",["Wav2Vec2ForCTC",Kr]],["wav2vec2-bert",["Wav2Vec2BertForCTC",zr]],["unispeech",["UniSpeechForCTC",Pr]],["unispeech-sat",["UniSpeechSatForCTC",Or]],["wavlm",["WavLMForCTC",gE]],["hubert",["HubertForCTC",Zr]]]),Nn=new Map([["wav2vec2",["Wav2Vec2ForSequenceClassification",Ur]],["wav2vec2-bert",["Wav2Vec2BertForSequenceClassification",$r]],["unispeech",["UniSpeechForSequenceClassification",vr]],["unispeech-sat",["UniSpeechSatForSequenceClassification",Wr]],["wavlm",["WavLMForSequenceClassification",IE]],["hubert",["HubertForSequenceClassification",AE]],["audio-spectrogram-transformer",["ASTForAudioClassification",oC]]]),Rn=new Map([["wavlm",["WavLMForXVector",iE]]]),Gn=new Map([["unispeech-sat",["UniSpeechSatForAudioFrameClassification",jr]],["wavlm",["WavLMForAudioFrameClassification",tE]],["wav2vec2",["Wav2Vec2ForAudioFrameClassification",Jr]],["pyannote",["PyAnnoteForAudioFrameClassification",xr]]]),_n=new Map([["vitmatte",["VitMatteForImageMatting",aa]]]),m0=new Map([["patchtst",["PatchTSTForPrediction",VE]],["patchtsmixer",["PatchTSMixerForPrediction",$E]]]),kn=new Map([["swin2sr",["Swin2SRForImageSuperResolution",ja]]]),Ln=new Map([["dpt",["DPTForDepthEstimation",za]],["depth_anything",["DepthAnythingForDepthEstimation",Xa]],["glpn",["GLPNForDepthEstimation",ar]],["sapiens",["SapiensForDepthEstimation",Ar]],["depth_pro",["DepthProForDepthEstimation",Ir]],["metric3d",["Metric3DForDepthEstimation",tr]],["metric3dv2",["Metric3Dv2ForDepthEstimation",or]]]),Kn=new Map([["sapiens",["SapiensForNormalEstimation",er]]]),Un=new Map([["vitpose",["VitPoseForPoseEstimation",ZQ]]]),Jn=new Map([["clip",["CLIPVisionModelWithProjection",jI]],["siglip",["SiglipVisionModel",Li]],["jina_clip",["JinaCLIPVisionModel",ht]]]),bn=[[D0,w.EncoderOnly],[u0,w.EncoderDecoder],[p0,w.DecoderOnly],[w0,w.AutoEncoder],[cn,w.EncoderOnly],[dn,w.EncoderOnly],[ns,w.Seq2Seq],[Es,w.Seq2Seq],[ls,w.DecoderOnly],[y0,w.MultiModality],[hn,w.EncoderOnly],[Dn,w.EncoderOnly],[cs,w.Vision2Seq],[un,w.ImageTextToText],[wn,w.AudioTextToText],[pn,w.EncoderOnly],[qi,w.EncoderOnly],[Mn,w.EncoderOnly],[mn,w.EncoderOnly],[_n,w.EncoderOnly],[m0,w.EncoderOnly],[kn,w.EncoderOnly],[Ln,w.EncoderOnly],[Kn,w.EncoderOnly],[Un,w.EncoderOnly],[yn,w.EncoderOnly],[fn,w.EncoderOnly],[Fn,w.MaskGeneration],[Sn,w.EncoderOnly],[Nn,w.EncoderOnly],[nn,w.Seq2Seq],[ln,w.EncoderOnly],[Rn,w.EncoderOnly],[Gn,w.EncoderOnly],[Jn,w.EncoderOnly]];for(const[p,m]of bn)for(const[W,nA]of p.values())y.set(W,m),f.set(nA,W),D.set(W,nA);const M0=[["MusicgenForConditionalGeneration",Qs,w.Musicgen],["Phi3VForCausalLM",nt,w.Phi3V],["CLIPTextModelWithProjection",nC,w.EncoderOnly],["SiglipTextModel",cC,w.EncoderOnly],["JinaCLIPTextModel",dt,w.EncoderOnly],["ClapTextModelWithProjection",uE,w.EncoderOnly],["ClapAudioModelWithProjection",wE,w.EncoderOnly],["DacEncoderModel",Bn,w.EncoderOnly],["DacDecoderModel",Qn,w.EncoderOnly],["MimiEncoderModel",In,w.EncoderOnly],["MimiDecoderModel",tn,w.EncoderOnly],["SnacEncoderModel",rn,w.EncoderOnly],["SnacDecoderModel",En,w.EncoderOnly]];for(const[p,m,W]of M0)y.set(p,W),f.set(m,p),D.set(p,m);const xn=new Map([["modnet",qi],["birefnet",qi],["isnet",qi],["ben",qi]]);for(const[p,m]of xn.entries())m.set(p,["PreTrainedModel",$]),y.set(p,w.EncoderOnly),f.set($,p),D.set(p,$);class F0 extends Ve{static MODEL_CLASS_MAPPINGS=bn.map(m=>m[0]);static BASE_IF_FAIL=!0}class S0 extends Ve{static MODEL_CLASS_MAPPINGS=[cn]}class N0 extends Ve{static MODEL_CLASS_MAPPINGS=[dn]}class R0 extends Ve{static MODEL_CLASS_MAPPINGS=[ns]}class G0 extends Ve{static MODEL_CLASS_MAPPINGS=[Es]}class _0 extends Ve{static MODEL_CLASS_MAPPINGS=[nn]}class k0 extends Ve{static MODEL_CLASS_MAPPINGS=[ln]}class L0 extends Ve{static MODEL_CLASS_MAPPINGS=[ls]}class K0 extends Ve{static MODEL_CLASS_MAPPINGS=[hn]}class U0 extends Ve{static MODEL_CLASS_MAPPINGS=[Dn]}class J0 extends Ve{static MODEL_CLASS_MAPPINGS=[cs]}class b0 extends Ve{static MODEL_CLASS_MAPPINGS=[pn]}class x0 extends Ve{static MODEL_CLASS_MAPPINGS=[qi]}class Y0 extends Ve{static MODEL_CLASS_MAPPINGS=[mn]}class T0 extends Ve{static MODEL_CLASS_MAPPINGS=[Mn]}class H0 extends Ve{static MODEL_CLASS_MAPPINGS=[yn]}class P0 extends Ve{static MODEL_CLASS_MAPPINGS=[fn]}class v0 extends Ve{static MODEL_CLASS_MAPPINGS=[Fn]}class q0 extends Ve{static MODEL_CLASS_MAPPINGS=[Sn]}class O0 extends Ve{static MODEL_CLASS_MAPPINGS=[Nn]}class W0 extends Ve{static MODEL_CLASS_MAPPINGS=[Rn]}class j0 extends Ve{static MODEL_CLASS_MAPPINGS=[Gn]}class V0 extends Ve{static MODEL_CLASS_MAPPINGS=[f0]}class z0 extends Ve{static MODEL_CLASS_MAPPINGS=[_n]}class $0 extends Ve{static MODEL_CLASS_MAPPINGS=[kn]}class X0 extends Ve{static MODEL_CLASS_MAPPINGS=[Ln]}class Z0 extends Ve{static MODEL_CLASS_MAPPINGS=[Kn]}class Ap extends Ve{static MODEL_CLASS_MAPPINGS=[Un]}class ep extends Ve{static MODEL_CLASS_MAPPINGS=[Jn]}class gp extends Ve{static MODEL_CLASS_MAPPINGS=[un]}class Ip extends Ve{static MODEL_CLASS_MAPPINGS=[wn]}class ip extends fA{constructor({logits:m,past_key_values:W,encoder_outputs:nA,decoder_attentions:pA=null,cross_attentions:yA=null}){super(),this.logits=m,this.past_key_values=W,this.encoder_outputs=nA,this.decoder_attentions=pA,this.cross_attentions=yA}}class Ge extends fA{constructor({logits:m,...W}){super(),this.logits=m;const nA=Object.values(W);nA.length>0&&(this.attentions=nA)}}class Yn extends fA{constructor({logits:m,embeddings:W}){super(),this.logits=m,this.embeddings=W}}class bg extends fA{constructor({logits:m}){super(),this.logits=m}}class qg extends fA{constructor({logits:m}){super(),this.logits=m}}class Vg extends fA{constructor({start_logits:m,end_logits:W}){super(),this.start_logits=m,this.end_logits=W}}class Bi extends fA{constructor({logits:m}){super(),this.logits=m}}class tp extends fA{constructor({logits:m,past_key_values:W}){super(),this.logits=m,this.past_key_values=W}}class Tn extends fA{constructor({alphas:m}){super(),this.alphas=m}}class Hn extends fA{constructor({waveform:m,spectrogram:W}){super(),this.waveform=m,this.spectrogram=W}}},"./src/models/audio_spectrogram_transformer/feature_extraction_audio_spectrogram_transformer.js":(A,g,e)=>{e.r(g),e.d(g,{ASTFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js");e("./src/utils/tensor.js");var i=e("./src/utils/audio.js");class t extends I.FeatureExtractor{constructor(C){super(C);const s=this.config.sampling_rate,Q=(0,i.mel_filter_bank)(257,this.config.num_mel_bins,20,Math.floor(s/2),s,null,"kaldi",!0);this.mel_filters=Q,this.window=(0,i.window_function)(400,"hann",{periodic:!1}),this.mean=this.config.mean,this.std=this.config.std}async _extract_fbank_features(C,s){return(0,i.spectrogram)(C,this.window,400,160,{fft_length:512,power:2,center:!1,preemphasis:.97,mel_filters:this.mel_filters,log_mel:"log",mel_floor:1192092955078125e-22,remove_dc_offset:!0,max_num_frames:s,transpose:!0})}async _call(C){(0,I.validate_audio_inputs)(C,"ASTFeatureExtractor");const s=await this._extract_fbank_features(C,this.config.max_length);if(this.config.do_normalize){const Q=this.std*2,r=s.data;for(let B=0;B{e.r(g),e.d(g,{AutoFeatureExtractor:()=>o});var I=e("./src/utils/constants.js"),i=e("./src/utils/hub.js");e("./src/base/feature_extraction_utils.js");var t=e("./src/models/feature_extractors.js");class o{static async from_pretrained(s,Q={}){const r=await(0,i.getModelJSON)(s,I.FEATURE_EXTRACTOR_NAME,!0,Q),B=r.feature_extractor_type,a=t[B];if(!a)throw new Error(`Unknown feature_extractor_type: '${B}'. Please report this at ${I.GITHUB_ISSUE_URL}.`);return new a(r)}}},"./src/models/auto/image_processing_auto.js":(A,g,e)=>{e.r(g),e.d(g,{AutoImageProcessor:()=>C});var I=e("./src/utils/constants.js"),i=e("./src/utils/hub.js"),t=e("./src/base/image_processors_utils.js"),o=e("./src/models/image_processors.js");class C{static async from_pretrained(Q,r={}){const B=await(0,i.getModelJSON)(Q,I.IMAGE_PROCESSOR_NAME,!0,r),a=B.image_processor_type??B.feature_extractor_type;let d=o[a];return d||(a!==void 0&&console.warn(`Image processor type '${a}' not found, assuming base ImageProcessor. Please report this at ${I.GITHUB_ISSUE_URL}.`),d=t.ImageProcessor),new d(B)}}},"./src/models/auto/processing_auto.js":(A,g,e)=>{e.r(g),e.d(g,{AutoProcessor:()=>Q});var I=e("./src/utils/constants.js"),i=e("./src/utils/hub.js"),t=e("./src/base/processing_utils.js"),o=e("./src/models/processors.js"),C=e("./src/models/image_processors.js"),s=e("./src/models/feature_extractors.js");class Q{static async from_pretrained(B,a={}){const d=await(0,i.getModelJSON)(B,I.IMAGE_PROCESSOR_NAME,!0,a),{image_processor_type:c,feature_extractor_type:F,processor_class:L}=d;if(L&&o[L])return o[L].from_pretrained(B,a);if(!c&&!F)throw new Error("No `image_processor_type` or `feature_extractor_type` found in the config.");const u={};if(c){const R=C[c];if(!R)throw new Error(`Unknown image_processor_type: '${c}'.`);u.image_processor=new R(d)}if(F){const R=C[F];if(R)u.image_processor=new R(d);else{const w=s[F];if(!w)throw new Error(`Unknown feature_extractor_type: '${F}'.`);u.feature_extractor=new w(d)}}const h={};return new t.Processor(h,u)}}},"./src/models/beit/image_processing_beit.js":(A,g,e)=>{e.r(g),e.d(g,{BeitFeatureExtractor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}},"./src/models/bit/image_processing_bit.js":(A,g,e)=>{e.r(g),e.d(g,{BitImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}},"./src/models/chinese_clip/image_processing_chinese_clip.js":(A,g,e)=>{e.r(g),e.d(g,{ChineseCLIPFeatureExtractor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}},"./src/models/clap/feature_extraction_clap.js":(A,g,e)=>{e.r(g),e.d(g,{ClapFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js");e("./src/utils/tensor.js");var i=e("./src/utils/audio.js");class t extends I.FeatureExtractor{constructor(C){super(C),this.mel_filters=(0,i.mel_filter_bank)(this.config.nb_frequency_bins,this.config.feature_size,this.config.frequency_min,this.config.frequency_max,this.config.sampling_rate,null,"htk"),this.mel_filters_slaney=(0,i.mel_filter_bank)(this.config.nb_frequency_bins,this.config.feature_size,this.config.frequency_min,this.config.frequency_max,this.config.sampling_rate,"slaney","slaney"),this.window=(0,i.window_function)(this.config.fft_window_size,"hann")}async _get_input_mel(C,s,Q,r){let B;const a=C.length-s;if(a>0)if(Q==="rand_trunc"){const d=Math.floor(Math.random()*(a+1));C=C.subarray(d,d+s),B=await this._extract_fbank_features(C,this.mel_filters_slaney,this.config.nb_max_samples)}else throw new Error(`Truncation strategy "${Q}" not implemented`);else{if(a<0){let d=new Float64Array(s);if(d.set(C),r==="repeat")for(let c=C.length;c{e.r(g),e.d(g,{CLIPFeatureExtractor:()=>t,CLIPImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}},"./src/models/convnext/image_processing_convnext.js":(A,g,e)=>{e.r(g),e.d(g,{ConvNextFeatureExtractor:()=>t,ConvNextImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{constructor(C){super(C),this.crop_pct=this.config.crop_pct??224/256}async resize(C){const s=this.size?.shortest_edge;if(s===void 0)throw new Error("Size dictionary must contain 'shortest_edge' key.");if(s<384){const Q=Math.floor(s/this.crop_pct),[r,B]=this.get_resize_output_image_size(C,{shortest_edge:Q});C=await C.resize(r,B,{resample:this.resample}),C=await C.center_crop(s,s)}else C=await C.resize(s,s,{resample:this.resample});return C}}class t extends i{}},"./src/models/dac/feature_extraction_dac.js":(A,g,e)=>{e.r(g),e.d(g,{DacFeatureExtractor:()=>i});var I=e("./src/models/encodec/feature_extraction_encodec.js");class i extends I.EncodecFeatureExtractor{}},"./src/models/deit/image_processing_deit.js":(A,g,e)=>{e.r(g),e.d(g,{DeiTFeatureExtractor:()=>t,DeiTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}},"./src/models/detr/image_processing_detr.js":(A,g,e)=>{e.r(g),e.d(g,{DetrFeatureExtractor:()=>o,DetrImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{async _call(s){const Q=await super._call(s),r=[Q.pixel_values.dims[0],64,64],B=(0,i.full)(r,1n);return{...Q,pixel_mask:B}}post_process_object_detection(...s){return(0,I.post_process_object_detection)(...s)}post_process_panoptic_segmentation(...s){return(0,I.post_process_panoptic_segmentation)(...s)}post_process_instance_segmentation(...s){return(0,I.post_process_instance_segmentation)(...s)}}class o extends t{}},"./src/models/donut/image_processing_donut.js":(A,g,e)=>{e.r(g),e.d(g,{DonutFeatureExtractor:()=>t,DonutImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{pad_image(C,s,Q,r={}){const[B,a,d]=s;let c=this.image_mean;Array.isArray(this.image_mean)||(c=new Array(d).fill(c));let F=this.image_std;Array.isArray(F)||(F=new Array(d).fill(c));const L=c.map((u,h)=>-u/F[h]);return super.pad_image(C,s,Q,{center:!0,constant_values:L,...r})}}class t extends i{}},"./src/models/dpt/image_processing_dpt.js":(A,g,e)=>{e.r(g),e.d(g,{DPTFeatureExtractor:()=>t,DPTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}},"./src/models/efficientnet/image_processing_efficientnet.js":(A,g,e)=>{e.r(g),e.d(g,{EfficientNetImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{constructor(o){super(o),this.include_top=this.config.include_top??!0,this.include_top&&(this.image_std=this.image_std.map(C=>C*C))}}},"./src/models/encodec/feature_extraction_encodec.js":(A,g,e)=>{e.r(g),e.d(g,{EncodecFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js");class t extends I.FeatureExtractor{async _call(C){(0,I.validate_audio_inputs)(C,"EncodecFeatureExtractor"),C instanceof Float64Array&&(C=new Float32Array(C));const s=this.config.feature_size;if(C.length%s!==0)throw new Error(`The length of the audio data must be a multiple of the number of channels (${s}).`);const Q=[1,s,C.length/s];return{input_values:new i.Tensor("float32",C,Q)}}}},"./src/models/feature_extractors.js":(A,g,e)=>{e.r(g),e.d(g,{ASTFeatureExtractor:()=>I.ASTFeatureExtractor,ClapFeatureExtractor:()=>t.ClapFeatureExtractor,DacFeatureExtractor:()=>o.DacFeatureExtractor,EncodecFeatureExtractor:()=>i.EncodecFeatureExtractor,ImageFeatureExtractor:()=>F.ImageProcessor,MoonshineFeatureExtractor:()=>C.MoonshineFeatureExtractor,PyAnnoteFeatureExtractor:()=>s.PyAnnoteFeatureExtractor,SeamlessM4TFeatureExtractor:()=>Q.SeamlessM4TFeatureExtractor,SnacFeatureExtractor:()=>r.SnacFeatureExtractor,SpeechT5FeatureExtractor:()=>B.SpeechT5FeatureExtractor,Wav2Vec2FeatureExtractor:()=>a.Wav2Vec2FeatureExtractor,WeSpeakerFeatureExtractor:()=>d.WeSpeakerFeatureExtractor,WhisperFeatureExtractor:()=>c.WhisperFeatureExtractor});var I=e("./src/models/audio_spectrogram_transformer/feature_extraction_audio_spectrogram_transformer.js"),i=e("./src/models/encodec/feature_extraction_encodec.js"),t=e("./src/models/clap/feature_extraction_clap.js"),o=e("./src/models/dac/feature_extraction_dac.js"),C=e("./src/models/moonshine/feature_extraction_moonshine.js"),s=e("./src/models/pyannote/feature_extraction_pyannote.js"),Q=e("./src/models/seamless_m4t/feature_extraction_seamless_m4t.js"),r=e("./src/models/snac/feature_extraction_snac.js"),B=e("./src/models/speecht5/feature_extraction_speecht5.js"),a=e("./src/models/wav2vec2/feature_extraction_wav2vec2.js"),d=e("./src/models/wespeaker/feature_extraction_wespeaker.js"),c=e("./src/models/whisper/feature_extraction_whisper.js"),F=e("./src/base/image_processors_utils.js")},"./src/models/florence2/processing_florence2.js":(A,g,e)=>{e.r(g),e.d(g,{Florence2Processor:()=>o});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");class o extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;constructor(s,Q){super(s,Q);const{tasks_answer_post_processing_type:r,task_prompts_without_inputs:B,task_prompts_with_input:a}=this.image_processor.config;this.tasks_answer_post_processing_type=new Map(Object.entries(r??{})),this.task_prompts_without_inputs=new Map(Object.entries(B??{})),this.task_prompts_with_input=new Map(Object.entries(a??{})),this.regexes={quad_boxes:/(.+?)/gm,bboxes:/([^<]+)?/gm},this.size_per_bin=1e3}construct_prompts(s){typeof s=="string"&&(s=[s]);const Q=[];for(const r of s)if(this.task_prompts_without_inputs.has(r))Q.push(this.task_prompts_without_inputs.get(r));else{for(const[B,a]of this.task_prompts_with_input)if(r.includes(B)){Q.push(a.replaceAll("{input}",r).replaceAll(B,""));break}Q.length!==s.length&&Q.push(r)}return Q}post_process_generation(s,Q,r){const B=this.tasks_answer_post_processing_type.get(Q)??"pure_text";s=s.replaceAll("","").replaceAll("","");let a;switch(B){case"pure_text":a=s;break;case"description_with_bboxes":case"bboxes":case"phrase_grounding":case"ocr":const d=B==="ocr"?"quad_boxes":"bboxes",c=s.matchAll(this.regexes[d]),F=[],L=[];for(const[u,h,...R]of c)F.push(h?h.trim():F.at(-1)??""),L.push(R.map((w,y)=>(Number(w)+.5)/this.size_per_bin*r[y%2]));a={labels:F,[d]:L};break;default:throw new Error(`Task "${Q}" (of type "${B}") not yet implemented.`)}return{[Q]:a}}async _call(s,Q=null,r={}){if(!s&&!Q)throw new Error("Either text or images must be provided");const B=await this.image_processor(s,r),a=Q?this.tokenizer(Q,r):{};return{...B,...a}}}},"./src/models/glpn/image_processing_glpn.js":(A,g,e)=>{e.r(g),e.d(g,{GLPNFeatureExtractor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}},"./src/models/grounding_dino/image_processing_grounding_dino.js":(A,g,e)=>{e.r(g),e.d(g,{GroundingDinoImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{async _call(C){const s=await super._call(C),Q=s.pixel_values.dims,r=(0,i.ones)([Q[0],Q[2],Q[3]]);return{...s,pixel_mask:r}}}},"./src/models/grounding_dino/processing_grounding_dino.js":(A,g,e)=>{e.r(g),e.d(g,{GroundingDinoProcessor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js"),o=e("./src/base/image_processors_utils.js");function C(Q,r){const a=Q.dims.at(-1)-1,d=Q.tolist();d.fill(!1,0,1),d.fill(!1,a);const c=r.tolist();return d.map((F,L)=>F?L:null).filter(F=>F!==null).map(F=>c[F])}class s extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;async _call(r,B,a={}){const d=r?await this.image_processor(r,a):{};return{...B?this.tokenizer(B,a):{},...d}}post_process_grounded_object_detection(r,B,{box_threshold:a=.25,text_threshold:d=.25,target_sizes:c=null}={}){const{logits:F,pred_boxes:L}=r,u=F.dims[0];if(c!==null&&c.length!==u)throw Error("Make sure that you pass in as many target sizes as the batch dimension of the logits");const h=F.dims.at(1),R=F.sigmoid(),w=R.max(-1).tolist(),y=L.tolist().map(f=>f.map(G=>(0,o.center_to_corners_format)(G))),D=[];for(let f=0;fx.map((tA,Z)=>tA*G[(Z+1)%2])));const J=w[f],T=[],X=[],gA=[];for(let x=0;x{e.r(g),e.d(g,{Idefics3ImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{constructor(C){super(C),this.do_image_splitting=C.do_image_splitting??!0,this.max_image_size=C.max_image_size}get_resize_for_vision_encoder(C,s){let[Q,r]=C.dims.slice(-2);const B=r/Q;return r>=Q?(r=Math.ceil(r/s)*s,Q=Math.floor(r/B),Q=Math.ceil(Q/s)*s):(Q=Math.ceil(Q/s)*s,r=Math.floor(Q*B),r=Math.ceil(r/s)*s),{height:Q,width:r}}async _call(C,{do_image_splitting:s=null,return_row_col_info:Q=!1}={}){let r;if(!Array.isArray(C))r=[[C]];else{if(C.length===0||!C[0])throw new Error("No images provided.");Array.isArray(C[0])?r=C:r=[C]}let B=[],a=[],d=[];const c=[],F=[];for(const f of r){let G=await Promise.all(f.map(X=>this.preprocess(X)));c.push(...G.map(X=>X.original_size)),F.push(...G.map(X=>X.reshaped_input_size)),G.forEach(X=>X.pixel_values.unsqueeze_(0));const{longest_edge:J}=this.max_image_size;let T;if(s??this.do_image_splitting){let X=new Array(G.length),gA=new Array(G.length);T=await Promise.all(G.map(async(x,tA)=>{const Z=this.get_resize_for_vision_encoder(x.pixel_values,J),IA=await(0,i.interpolate_4d)(x.pixel_values,{size:[Z.height,Z.width]}),{frames:oA,num_splits_h:CA,num_splits_w:DA}=await this.split_image(IA,this.max_image_size);return X[tA]=CA,gA[tA]=DA,(0,i.cat)(oA,0)})),a.push(X),d.push(gA)}else{const X=[J,J];T=await Promise.all(G.map(gA=>(0,i.interpolate_4d)(gA.pixel_values,{size:X}))),a.push(new Array(G.length).fill(0)),d.push(new Array(G.length).fill(0))}B.push((0,i.cat)(T,0))}const L=B.length,[u,h,R,w]=B[0].dims;let y,D;if(L===1)y=B[0].unsqueeze_(0),D=(0,i.full)([L,u,R,w],!0);else{const f=Math.max(...B.map(T=>T.dims.at(0)));D=(0,i.full)([L,f,R,w],!0);const G=D.data,J=f*R*w;for(let T=0;TQ||d>r){c=Math.ceil(a/Q),F=Math.ceil(d/r);const L=Math.ceil(a/c),u=Math.ceil(d/F);for(let w=0;w{e.r(g),e.d(g,{Idefics3Processor:()=>r});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");e("./src/utils/image.js");var o=e("./src/utils/core.js");function C(B,a,d,c,F,L){let u="";for(let h=0;h`+F.repeat(B);u+=` +`}return u+=` +${c}${L}`+F.repeat(B)+`${c}`,u}function s(B,a,d,c){return`${a}${c}`+d.repeat(B)+`${a}`}function Q(B,a,d,c,F,L){return B===0&&a===0?s(d,c,F,L):C(d,B,a,c,F,L)}class r extends I.Processor{static image_processor_class=i.AutoImageProcessor;static tokenizer_class=t.AutoTokenizer;static uses_processor_config=!0;fake_image_token="";image_token="";global_img_token="";async _call(a,d=null,c={}){c.return_row_col_info??=!0;let F;d&&(F=await this.image_processor(d,c)),Array.isArray(a)||(a=[a]);const L=F.rows??[new Array(a.length).fill(0)],u=F.cols??[new Array(a.length).fill(0)],h=this.config.image_seq_len,R=[],w=[];for(let D=0;DQ(x,J[tA],h,this.fake_image_token,this.image_token,this.global_img_token)),X=f.split(this.image_token);if(X.length===0)throw new Error("The image token should be present in the text.");let gA=X[0];for(let x=0;x{e.r(g),e.d(g,{BeitFeatureExtractor:()=>I.BeitFeatureExtractor,BitImageProcessor:()=>i.BitImageProcessor,CLIPFeatureExtractor:()=>o.CLIPFeatureExtractor,CLIPImageProcessor:()=>o.CLIPImageProcessor,ChineseCLIPFeatureExtractor:()=>t.ChineseCLIPFeatureExtractor,ConvNextFeatureExtractor:()=>C.ConvNextFeatureExtractor,ConvNextImageProcessor:()=>C.ConvNextImageProcessor,DPTFeatureExtractor:()=>B.DPTFeatureExtractor,DPTImageProcessor:()=>B.DPTImageProcessor,DeiTFeatureExtractor:()=>s.DeiTFeatureExtractor,DeiTImageProcessor:()=>s.DeiTImageProcessor,DetrFeatureExtractor:()=>Q.DetrFeatureExtractor,DetrImageProcessor:()=>Q.DetrImageProcessor,DonutFeatureExtractor:()=>r.DonutFeatureExtractor,DonutImageProcessor:()=>r.DonutImageProcessor,EfficientNetImageProcessor:()=>a.EfficientNetImageProcessor,GLPNFeatureExtractor:()=>d.GLPNFeatureExtractor,GroundingDinoImageProcessor:()=>c.GroundingDinoImageProcessor,Idefics3ImageProcessor:()=>F.Idefics3ImageProcessor,JinaCLIPImageProcessor:()=>u.JinaCLIPImageProcessor,LlavaOnevisionImageProcessor:()=>h.LlavaOnevisionImageProcessor,Mask2FormerImageProcessor:()=>R.Mask2FormerImageProcessor,MaskFormerFeatureExtractor:()=>w.MaskFormerFeatureExtractor,MaskFormerImageProcessor:()=>w.MaskFormerImageProcessor,MobileNetV1FeatureExtractor:()=>y.MobileNetV1FeatureExtractor,MobileNetV1ImageProcessor:()=>y.MobileNetV1ImageProcessor,MobileNetV2FeatureExtractor:()=>D.MobileNetV2FeatureExtractor,MobileNetV2ImageProcessor:()=>D.MobileNetV2ImageProcessor,MobileNetV3FeatureExtractor:()=>f.MobileNetV3FeatureExtractor,MobileNetV3ImageProcessor:()=>f.MobileNetV3ImageProcessor,MobileNetV4FeatureExtractor:()=>G.MobileNetV4FeatureExtractor,MobileNetV4ImageProcessor:()=>G.MobileNetV4ImageProcessor,MobileViTFeatureExtractor:()=>J.MobileViTFeatureExtractor,MobileViTImageProcessor:()=>J.MobileViTImageProcessor,NougatImageProcessor:()=>T.NougatImageProcessor,OwlViTFeatureExtractor:()=>gA.OwlViTFeatureExtractor,OwlViTImageProcessor:()=>gA.OwlViTImageProcessor,Owlv2ImageProcessor:()=>X.Owlv2ImageProcessor,Phi3VImageProcessor:()=>x.Phi3VImageProcessor,PvtImageProcessor:()=>tA.PvtImageProcessor,Qwen2VLImageProcessor:()=>Z.Qwen2VLImageProcessor,RTDetrImageProcessor:()=>IA.RTDetrImageProcessor,SamImageProcessor:()=>oA.SamImageProcessor,SegformerFeatureExtractor:()=>CA.SegformerFeatureExtractor,SegformerImageProcessor:()=>CA.SegformerImageProcessor,SiglipImageProcessor:()=>DA.SiglipImageProcessor,SmolVLMImageProcessor:()=>cA.SmolVLMImageProcessor,Swin2SRImageProcessor:()=>q.Swin2SRImageProcessor,VLMImageProcessor:()=>L.VLMImageProcessor,ViTFeatureExtractor:()=>U.ViTFeatureExtractor,ViTImageProcessor:()=>U.ViTImageProcessor,VitMatteImageProcessor:()=>z.VitMatteImageProcessor,VitPoseImageProcessor:()=>H.VitPoseImageProcessor,YolosFeatureExtractor:()=>EA.YolosFeatureExtractor,YolosImageProcessor:()=>EA.YolosImageProcessor});var I=e("./src/models/beit/image_processing_beit.js"),i=e("./src/models/bit/image_processing_bit.js"),t=e("./src/models/chinese_clip/image_processing_chinese_clip.js"),o=e("./src/models/clip/image_processing_clip.js"),C=e("./src/models/convnext/image_processing_convnext.js"),s=e("./src/models/deit/image_processing_deit.js"),Q=e("./src/models/detr/image_processing_detr.js"),r=e("./src/models/donut/image_processing_donut.js"),B=e("./src/models/dpt/image_processing_dpt.js"),a=e("./src/models/efficientnet/image_processing_efficientnet.js"),d=e("./src/models/glpn/image_processing_glpn.js"),c=e("./src/models/grounding_dino/image_processing_grounding_dino.js"),F=e("./src/models/idefics3/image_processing_idefics3.js"),L=e("./src/models/janus/image_processing_janus.js"),u=e("./src/models/jina_clip/image_processing_jina_clip.js"),h=e("./src/models/llava_onevision/image_processing_llava_onevision.js"),R=e("./src/models/mask2former/image_processing_mask2former.js"),w=e("./src/models/maskformer/image_processing_maskformer.js"),y=e("./src/models/mobilenet_v1/image_processing_mobilenet_v1.js"),D=e("./src/models/mobilenet_v2/image_processing_mobilenet_v2.js"),f=e("./src/models/mobilenet_v3/image_processing_mobilenet_v3.js"),G=e("./src/models/mobilenet_v4/image_processing_mobilenet_v4.js"),J=e("./src/models/mobilevit/image_processing_mobilevit.js"),T=e("./src/models/nougat/image_processing_nougat.js"),X=e("./src/models/owlv2/image_processing_owlv2.js"),gA=e("./src/models/owlvit/image_processing_owlvit.js"),x=e("./src/models/phi3_v/image_processing_phi3_v.js"),tA=e("./src/models/pvt/image_processing_pvt.js"),Z=e("./src/models/qwen2_vl/image_processing_qwen2_vl.js"),IA=e("./src/models/rt_detr/image_processing_rt_detr.js"),oA=e("./src/models/sam/image_processing_sam.js"),CA=e("./src/models/segformer/image_processing_segformer.js"),DA=e("./src/models/siglip/image_processing_siglip.js"),cA=e("./src/models/smolvlm/image_processing_smolvlm.js"),q=e("./src/models/swin2sr/image_processing_swin2sr.js"),U=e("./src/models/vit/image_processing_vit.js"),z=e("./src/models/vitmatte/image_processing_vitmatte.js"),H=e("./src/models/vitpose/image_processing_vitpose.js"),EA=e("./src/models/yolos/image_processing_yolos.js")},"./src/models/janus/image_processing_janus.js":(A,g,e)=>{e.r(g),e.d(g,{VLMImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{constructor(o){super({do_pad:!0,pad_size:{width:o.image_size,height:o.image_size},...o}),this.constant_values=this.config.background_color.map(C=>C*this.rescale_factor)}pad_image(o,C,s,Q){return super.pad_image(o,C,s,{constant_values:this.constant_values,center:!0,...Q})}}},"./src/models/janus/processing_janus.js":(A,g,e)=>{e.r(g),e.d(g,{VLChatProcessor:()=>Q});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js"),o=e("./src/utils/core.js"),C=e("./src/utils/tensor.js"),s=e("./src/utils/image.js");class Q extends I.Processor{static image_processor_class=i.AutoImageProcessor;static tokenizer_class=t.AutoTokenizer;static uses_processor_config=!0;constructor(B,a){super(B,a),this.image_tag=this.config.image_tag,this.image_start_tag=this.config.image_start_tag,this.image_end_tag=this.config.image_end_tag,this.num_image_tokens=this.config.num_image_tokens}async _call(B,{images:a=null,chat_template:d="default"}={}){a?Array.isArray(a)||(a=[a]):a=await Promise.all(B.filter(T=>T.images).flatMap(T=>T.images).map(T=>s.RawImage.read(T)));const c=this.tokenizer,F=c.apply_chat_template(B,{tokenize:!1,add_generation_prompt:!0,chat_template:d}),L=T=>c.encode(T,{add_special_tokens:!1}),u=F.split(this.image_tag),h=u.length-1;if(a.length!==h)throw new Error(`Number of images provided (${a.length}) does not match number of "${this.image_tag}" image tags (${h})`);const[R,w,y]=c.model.convert_tokens_to_ids([this.image_tag,this.image_start_tag,this.image_end_tag]);let D=L(u[0]),f=new Array(D.length).fill(!1);for(let T=1;T0){const T=await this.image_processor(a);return T.pixel_values.unsqueeze_(0),{...J,...T}}return J}}},"./src/models/jina_clip/image_processing_jina_clip.js":(A,g,e)=>{e.r(g),e.d(g,{JinaCLIPImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{constructor(o){const{resize_mode:C,fill_color:s,interpolation:Q,size:r,...B}=o,a=C==="squash"?{width:r,height:r}:C==="shortest"?{shortest_edge:r}:{longest_edge:r},d=Q==="bicubic"?3:2;super({...B,size:a,resample:d,do_center_crop:!0,crop_size:r,do_normalize:!0})}}},"./src/models/jina_clip/processing_jina_clip.js":(A,g,e)=>{e.r(g),e.d(g,{JinaCLIPProcessor:()=>o});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");class o extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;async _call(s=null,Q=null,r={}){if(!s&&!Q)throw new Error("Either text or images must be provided");const B=s?this.tokenizer(s,r):{},a=Q?await this.image_processor(Q,r):{};return{...B,...a}}}},"./src/models/llava_onevision/image_processing_llava_onevision.js":(A,g,e)=>{e.r(g),e.d(g,{LlavaOnevisionImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}},"./src/models/mask2former/image_processing_mask2former.js":(A,g,e)=>{e.r(g),e.d(g,{Mask2FormerImageProcessor:()=>i});var I=e("./src/models/maskformer/image_processing_maskformer.js");class i extends I.MaskFormerImageProcessor{}},"./src/models/maskformer/image_processing_maskformer.js":(A,g,e)=>{e.r(g),e.d(g,{MaskFormerFeatureExtractor:()=>t,MaskFormerImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_panoptic_segmentation(...C){return(0,I.post_process_panoptic_segmentation)(...C)}post_process_instance_segmentation(...C){return(0,I.post_process_instance_segmentation)(...C)}}class t extends i{}},"./src/models/mgp_str/processing_mgp_str.js":(A,g,e)=>{e.r(g),e.d(g,{MgpstrProcessor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js"),o=e("./src/utils/maths.js");const C={char:["char_decode",1],bpe:["bpe_decode",2],wp:["wp_decode",102]};class s extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;get char_tokenizer(){return this.components.char_tokenizer}get bpe_tokenizer(){return this.components.bpe_tokenizer}get wp_tokenizer(){return this.components.wp_tokenizer}_decode_helper(r,B){if(!C.hasOwnProperty(B))throw new Error(`Format ${B} is not supported.`);const[a,d]=C[B],c=this[a].bind(this),[F,L]=r.dims,u=[],h=[],R=r.tolist();for(let y=0;y0?G.reduce((T,X)=>T*X,1):0;h.push(f),u.push(J)}return[c(h),u]}char_decode(r){return this.char_tokenizer.batch_decode(r).map(B=>B.replaceAll(" ",""))}bpe_decode(r){return this.bpe_tokenizer.batch_decode(r)}wp_decode(r){return this.wp_tokenizer.batch_decode(r).map(B=>B.replaceAll(" ",""))}batch_decode([r,B,a]){const[d,c]=this._decode_helper(r,"char"),[F,L]=this._decode_helper(B,"bpe"),[u,h]=this._decode_helper(a,"wp"),R=[],w=[];for(let y=0;y{e.r(g),e.d(g,{MobileNetV1FeatureExtractor:()=>t,MobileNetV1ImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}},"./src/models/mobilenet_v2/image_processing_mobilenet_v2.js":(A,g,e)=>{e.r(g),e.d(g,{MobileNetV2FeatureExtractor:()=>t,MobileNetV2ImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}},"./src/models/mobilenet_v3/image_processing_mobilenet_v3.js":(A,g,e)=>{e.r(g),e.d(g,{MobileNetV3FeatureExtractor:()=>t,MobileNetV3ImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}},"./src/models/mobilenet_v4/image_processing_mobilenet_v4.js":(A,g,e)=>{e.r(g),e.d(g,{MobileNetV4FeatureExtractor:()=>t,MobileNetV4ImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}},"./src/models/mobilevit/image_processing_mobilevit.js":(A,g,e)=>{e.r(g),e.d(g,{MobileViTFeatureExtractor:()=>t,MobileViTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}},"./src/models/moonshine/feature_extraction_moonshine.js":(A,g,e)=>{e.r(g),e.d(g,{MoonshineFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js");class t extends I.FeatureExtractor{async _call(C){(0,I.validate_audio_inputs)(C,"MoonshineFeatureExtractor"),C instanceof Float64Array&&(C=new Float32Array(C));const s=[1,C.length];return{input_values:new i.Tensor("float32",C,s)}}}},"./src/models/moonshine/processing_moonshine.js":(A,g,e)=>{e.r(g),e.d(g,{MoonshineProcessor:()=>o});var I=e("./src/models/auto/feature_extraction_auto.js"),i=e("./src/tokenizers.js"),t=e("./src/base/processing_utils.js");class o extends t.Processor{static tokenizer_class=i.AutoTokenizer;static feature_extractor_class=I.AutoFeatureExtractor;async _call(s){return await this.feature_extractor(s)}}},"./src/models/nougat/image_processing_nougat.js":(A,g,e)=>{e.r(g),e.d(g,{NougatImageProcessor:()=>i});var I=e("./src/models/donut/image_processing_donut.js");class i extends I.DonutImageProcessor{}},"./src/models/owlv2/image_processing_owlv2.js":(A,g,e)=>{e.r(g),e.d(g,{Owlv2ImageProcessor:()=>i});var I=e("./src/models/owlvit/image_processing_owlvit.js");class i extends I.OwlViTImageProcessor{}},"./src/models/owlvit/image_processing_owlvit.js":(A,g,e)=>{e.r(g),e.d(g,{OwlViTFeatureExtractor:()=>t,OwlViTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_object_detection(...C){return(0,I.post_process_object_detection)(...C)}}class t extends i{}},"./src/models/owlvit/processing_owlvit.js":(A,g,e)=>{e.r(g),e.d(g,{OwlViTProcessor:()=>o});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");class o extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor}},"./src/models/paligemma/processing_paligemma.js":(A,g,e)=>{e.r(g),e.d(g,{PaliGemmaProcessor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");const o="";function C(Q,r,B,a,d){return`${a.repeat(B*d)}${r}${Q} +`}class s extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;static uses_processor_config=!1;async _call(r,B=null,a={}){B||(console.warn("You are using PaliGemma without a text prefix. It will perform as a picture-captioning model."),B=""),Array.isArray(r)||(r=[r]),Array.isArray(B)||(B=[B]);const d=this.tokenizer.bos_token,c=this.image_processor.config.image_seq_length;let F;B.some(h=>h.includes(o))?F=B.map(h=>{const R=h.replaceAll(o,o.repeat(c)),w=R.lastIndexOf(o),y=w===-1?0:w+o.length;return R.slice(0,y)+d+R.slice(y)+` +`}):(console.warn("You are passing both `text` and `images` to `PaliGemmaProcessor`. The processor expects special image tokens in the text, as many tokens as there are images per each text. It is recommended to add `` tokens in the very beginning of your text. For this call, we will infer how many images each text has and add special tokens."),F=B.map(h=>C(h,d,c,o,r.length)));const L=this.tokenizer(F,a);return{...await this.image_processor(r,a),...L}}}},"./src/models/phi3_v/image_processing_phi3_v.js":(A,g,e)=>{e.r(g),e.d(g,{Phi3VImageProcessor:()=>r});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");const t=336,o=[2,3],{ceil:C,floor:s,sqrt:Q}=Math;class r extends I.ImageProcessor{constructor(a){super({...a,do_normalize:!0,do_pad:!0,pad_size:"custom",do_convert_rgb:!0,do_resize:!0}),this._num_crops=a.num_crops}calc_num_image_tokens_from_image_size(a,d){const{num_img_tokens:c}=this.config;return s((s(d/t)*s(a/t)+1)*c+1+(s(d/t)+1)*Q(c))}get_resize_output_image_size(a,d){const c=this._num_crops,[F,L]=a.size;let u=F/L,h=1;for(;h*Math.ceil(h/u)<=c;)h+=1;h-=1;const R=Math.floor(h*336),w=Math.floor(R/u);return[R,w]}pad_image(a,d,c,F={}){const[L,u]=d,h=t*C(L/t),R=t*C(u/t),w=[1,1,1].map((y,D)=>(y-this.image_mean[D])/this.image_std[D]);return super.pad_image(a,d,{width:R,height:h},{center:!0,constant_values:w,...F})}async _call(a,{num_crops:d=null}={}){if(this._num_crops=d??=this.config.num_crops,d<4||Q(d)%1!==0)throw new Error("num_crops must be a square number >= 4");Array.isArray(a)||(a=[a]);const c=a.length,F=await Promise.all(a.map(f=>this.preprocess(f))),L=F.map(f=>f.original_size),u=F.map(f=>f.reshaped_input_size),h=[];for(const{pixel_values:f}of F){f.unsqueeze_(0);const[G,J]=f.dims.slice(-2),T=await(0,i.interpolate_4d)(f,{size:[t,t],mode:"bicubic"});if(d>0){const X=[],gA=Q(d),x=s(J/gA),tA=s(G/gA);for(let IA=0;IAf.map(G=>t*C(G/t))),y=new i.Tensor("int64",w.flat(),[c,2]),D=w.map(([f,G])=>this.calc_num_image_tokens_from_image_size(G,f));return{pixel_values:R,original_sizes:L,reshaped_input_sizes:u,image_sizes:y,num_img_tokens:D}}}},"./src/models/phi3_v/processing_phi3_v.js":(A,g,e)=>{e.r(g),e.d(g,{Phi3VProcessor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");e("./src/utils/image.js");const o="<|image|>",C=/<\|image_\d+\|>/g;class s extends I.Processor{static image_processor_class=i.AutoImageProcessor;static tokenizer_class=t.AutoTokenizer;async _call(r,B=null,{padding:a=!0,truncation:d=!0,num_crops:c=null}={}){Array.isArray(r)||(r=[r]);let F,L;if(B){L=await this.image_processor(B,{num_crops:c});const{num_img_tokens:u}=L,h=r.map((w,y)=>w.split(C).join(o.repeat(u[y])));F=this.tokenizer(h,{padding:a,truncation:d});const R=this.tokenizer.model.convert_tokens_to_ids([o])[0];F.input_ids.map_(w=>w==R?-w:w)}else F=this.tokenizer(r);return{...F,...L}}}},"./src/models/processors.js":(A,g,e)=>{e.r(g),e.d(g,{Florence2Processor:()=>I.Florence2Processor,GroundingDinoProcessor:()=>i.GroundingDinoProcessor,Idefics3Processor:()=>t.Idefics3Processor,JinaCLIPProcessor:()=>C.JinaCLIPProcessor,MgpstrProcessor:()=>s.MgpstrProcessor,MoonshineProcessor:()=>Q.MoonshineProcessor,OwlViTProcessor:()=>r.OwlViTProcessor,PaliGemmaProcessor:()=>a.PaliGemmaProcessor,Phi3VProcessor:()=>B.Phi3VProcessor,PyAnnoteProcessor:()=>d.PyAnnoteProcessor,Qwen2VLProcessor:()=>c.Qwen2VLProcessor,SamProcessor:()=>F.SamProcessor,SmolVLMProcessor:()=>L.SmolVLMProcessor,SpeechT5Processor:()=>u.SpeechT5Processor,UltravoxProcessor:()=>h.UltravoxProcessor,VLChatProcessor:()=>o.VLChatProcessor,Wav2Vec2Processor:()=>R.Wav2Vec2Processor,Wav2Vec2ProcessorWithLM:()=>w.Wav2Vec2ProcessorWithLM,WhisperProcessor:()=>y.WhisperProcessor});var I=e("./src/models/florence2/processing_florence2.js"),i=e("./src/models/grounding_dino/processing_grounding_dino.js"),t=e("./src/models/idefics3/processing_idefics3.js"),o=e("./src/models/janus/processing_janus.js"),C=e("./src/models/jina_clip/processing_jina_clip.js"),s=e("./src/models/mgp_str/processing_mgp_str.js"),Q=e("./src/models/moonshine/processing_moonshine.js"),r=e("./src/models/owlvit/processing_owlvit.js"),B=e("./src/models/phi3_v/processing_phi3_v.js"),a=e("./src/models/paligemma/processing_paligemma.js"),d=e("./src/models/pyannote/processing_pyannote.js"),c=e("./src/models/qwen2_vl/processing_qwen2_vl.js"),F=e("./src/models/sam/processing_sam.js"),L=e("./src/models/smolvlm/processing_smolvlm.js"),u=e("./src/models/speecht5/processing_speecht5.js"),h=e("./src/models/ultravox/processing_ultravox.js"),R=e("./src/models/wav2vec2/processing_wav2vec2.js"),w=e("./src/models/wav2vec2_with_lm/processing_wav2vec2_with_lm.js"),y=e("./src/models/whisper/processing_whisper.js")},"./src/models/pvt/image_processing_pvt.js":(A,g,e)=>{e.r(g),e.d(g,{PvtImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}},"./src/models/pyannote/feature_extraction_pyannote.js":(A,g,e)=>{e.r(g),e.d(g,{PyAnnoteFeatureExtractor:()=>o});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js"),t=e("./src/utils/maths.js");class o extends I.FeatureExtractor{async _call(s){(0,I.validate_audio_inputs)(s,"PyAnnoteFeatureExtractor"),s instanceof Float64Array&&(s=new Float32Array(s));const Q=[1,1,s.length];return{input_values:new i.Tensor("float32",s,Q)}}samples_to_frames(s){return(s-this.config.offset)/this.config.step}post_process_speaker_diarization(s,Q){const r=Q/this.samples_to_frames(Q)/this.config.sampling_rate,B=[];for(const a of s.tolist()){const d=[];let c=-1;for(let F=0;F({id:F,start:L*r,end:u*r,confidence:h/(u-L)})))}return B}}},"./src/models/pyannote/processing_pyannote.js":(A,g,e)=>{e.r(g),e.d(g,{PyAnnoteProcessor:()=>t});var I=e("./src/base/processing_utils.js"),i=e("./src/models/pyannote/feature_extraction_pyannote.js");class t extends I.Processor{static feature_extractor_class=i.PyAnnoteFeatureExtractor;async _call(C){return await this.feature_extractor(C)}post_process_speaker_diarization(...C){return this.feature_extractor.post_process_speaker_diarization(...C)}get sampling_rate(){return this.feature_extractor.config.sampling_rate}}},"./src/models/qwen2_vl/image_processing_qwen2_vl.js":(A,g,e)=>{e.r(g),e.d(g,{Qwen2VLImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{async _call(C,...s){const{pixel_values:Q,original_sizes:r,reshaped_input_sizes:B}=await super._call(C,...s);let a=Q;const{temporal_patch_size:d,merge_size:c,patch_size:F}=this.config;a.dims[0]===1&&(a=(0,i.cat)(Array.from({length:d},()=>a),0));const L=a.dims[0]/d,u=a.dims[1],h=Math.floor(a.dims[2]/F),R=Math.floor(a.dims[3]/F),w=a.view(L,d,u,Math.floor(h/c),c,F,Math.floor(R/c),c,F).permute(0,3,6,4,7,2,1,5,8).view(L*h*R,u*d*F*F),y=new i.Tensor("int64",[L,h,R],[1,3]);return{pixel_values:w,image_grid_thw:y,original_sizes:r,reshaped_input_sizes:B}}}},"./src/models/qwen2_vl/processing_qwen2_vl.js":(A,g,e)=>{e.r(g),e.d(g,{Qwen2VLProcessor:()=>o});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");e("./src/utils/image.js");class o extends I.Processor{static image_processor_class=i.AutoImageProcessor;static tokenizer_class=t.AutoTokenizer;async _call(s,Q=null,...r){Array.isArray(s)||(s=[s]);let B,a;if(Q&&(B=await this.image_processor(Q),a=B.image_grid_thw),a){let c=this.image_processor.config.merge_size**2,F=0;const L=a.tolist();s=s.map(u=>{for(;u.includes("<|image_pad|>");){const h=Number(L[F++].reduce((R,w)=>R*w,1n));u=u.replace("<|image_pad|>","<|placeholder|>".repeat(Math.floor(h/c)))}return u.replaceAll("<|placeholder|>","<|image_pad|>")})}return{...this.tokenizer(s),...B}}}},"./src/models/rt_detr/image_processing_rt_detr.js":(A,g,e)=>{e.r(g),e.d(g,{RTDetrImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_object_detection(...o){return(0,I.post_process_object_detection)(...o)}}},"./src/models/sam/image_processing_sam.js":(A,g,e)=>{e.r(g),e.d(g,{SamImageProcessor:()=>o});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/core.js"),t=e("./src/utils/tensor.js");class o extends I.ImageProcessor{reshape_input_points(s,Q,r,B=!1){s=structuredClone(s);let a=(0,i.calculateDimensions)(s);if(a.length===3)B||(a=[1,...a]),s=[s];else if(a.length!==4)throw Error("The input_points must be a 4D tensor of shape `batch_size`, `point_batch_size`, `nb_points_per_image`, `2`.");for(let d=0;dB!==Q.dims[a]))throw Error(`The first ${r.length} dimensions of 'input_points' and 'input_labels' must be the same.`);return new t.Tensor("int64",s.flat(1/0).map(BigInt),r)}async _call(s,{input_points:Q=null,input_labels:r=null,input_boxes:B=null}={}){const a=await super._call(s);if(Q&&(a.input_points=this.reshape_input_points(Q,a.original_sizes,a.reshaped_input_sizes)),r){if(!a.input_points)throw Error("`input_points` must be provided if `input_labels` are provided.");a.input_labels=this.add_input_labels(r,a.input_points)}return B&&(a.input_boxes=this.reshape_input_points(B,a.original_sizes,a.reshaped_input_sizes,!0)),a}async post_process_masks(s,Q,r,{mask_threshold:B=0,binarize:a=!0,pad_size:d=null}={}){const c=[];d=d??this.pad_size;const F=[d.height,d.width];for(let L=0;LB&&(y[D]=1);R=new t.Tensor("bool",y,R.dims)}c.push(R)}return c}generate_crop_boxes(s,Q,{crop_n_layers:r=0,overlap_ratio:B=512/1500,points_per_crop:a=32,crop_n_points_downscale_factor:d=1}={}){}}},"./src/models/sam/processing_sam.js":(A,g,e)=>{e.r(g),e.d(g,{SamProcessor:()=>t});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js");class t extends I.Processor{static image_processor_class=i.AutoImageProcessor;async _call(...C){return await this.image_processor(...C)}post_process_masks(...C){return this.image_processor.post_process_masks(...C)}reshape_input_points(...C){return this.image_processor.reshape_input_points(...C)}}},"./src/models/seamless_m4t/feature_extraction_seamless_m4t.js":(A,g,e)=>{e.r(g),e.d(g,{SeamlessM4TFeatureExtractor:()=>o});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js"),t=e("./src/utils/audio.js");class o extends I.FeatureExtractor{constructor(s){super(s);const Q=this.config.sampling_rate,r=(0,t.mel_filter_bank)(257,this.config.num_mel_bins,20,Math.floor(Q/2),Q,null,"kaldi",!0);this.mel_filters=r,this.window=(0,t.window_function)(400,"povey",{periodic:!1})}async _extract_fbank_features(s,Q){return s=s.map(r=>r*32768),(0,t.spectrogram)(s,this.window,400,160,{fft_length:512,power:2,center:!1,preemphasis:.97,mel_filters:this.mel_filters,log_mel:"log",mel_floor:1192092955078125e-22,remove_dc_offset:!0,max_num_frames:Q,transpose:!0})}async _call(s,{padding:Q=!0,pad_to_multiple_of:r=2,do_normalize_per_mel_bins:B=!0,return_attention_mask:a=!0}={}){(0,I.validate_audio_inputs)(s,"SeamlessM4TFeatureExtractor");let d=await this._extract_fbank_features(s,this.config.max_length);if(B){const[y,D]=d.dims,f=d.data;for(let G=0;G0){const J=new Float32Array(D*(y+G));J.set(f),J.fill(this.config.padding_value,f.length);const T=y+G;d=new i.Tensor(d.type,J,[T,D]),a&&(c=new i.Tensor("int64",new BigInt64Array(T),[1,T]),c.data.fill(1n,0,y))}}const[F,L]=d.dims,u=this.config.stride;if(F%u!==0)throw new Error(`The number of frames (${F}) must be a multiple of the stride (${u}).`);const R=d.view(1,Math.floor(F/u),L*u),w={input_features:R};if(a){const y=R.dims[1],D=new BigInt64Array(y);if(c){const f=c.data;for(let G=1,J=0;G{e.r(g),e.d(g,{SegformerFeatureExtractor:()=>t,SegformerImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_semantic_segmentation(...C){return(0,I.post_process_semantic_segmentation)(...C)}}class t extends i{}},"./src/models/siglip/image_processing_siglip.js":(A,g,e)=>{e.r(g),e.d(g,{SiglipImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}},"./src/models/smolvlm/image_processing_smolvlm.js":(A,g,e)=>{e.r(g),e.d(g,{SmolVLMImageProcessor:()=>I.Idefics3ImageProcessor});var I=e("./src/models/idefics3/image_processing_idefics3.js")},"./src/models/smolvlm/processing_smolvlm.js":(A,g,e)=>{e.r(g),e.d(g,{SmolVLMProcessor:()=>I.Idefics3Processor});var I=e("./src/models/idefics3/processing_idefics3.js")},"./src/models/snac/feature_extraction_snac.js":(A,g,e)=>{e.r(g),e.d(g,{SnacFeatureExtractor:()=>i});var I=e("./src/models/dac/feature_extraction_dac.js");class i extends I.DacFeatureExtractor{}},"./src/models/speecht5/feature_extraction_speecht5.js":(A,g,e)=>{e.r(g),e.d(g,{SpeechT5FeatureExtractor:()=>i});var I=e("./src/base/feature_extraction_utils.js");class i extends I.FeatureExtractor{}},"./src/models/speecht5/processing_speecht5.js":(A,g,e)=>{e.r(g),e.d(g,{SpeechT5Processor:()=>o});var I=e("./src/base/processing_utils.js"),i=e("./src/tokenizers.js"),t=e("./src/models/auto/feature_extraction_auto.js");class o extends I.Processor{static tokenizer_class=i.AutoTokenizer;static feature_extractor_class=t.AutoFeatureExtractor;async _call(s){return await this.feature_extractor(s)}}},"./src/models/swin2sr/image_processing_swin2sr.js":(A,g,e)=>{e.r(g),e.d(g,{Swin2SRImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{pad_image(o,C,s,Q={}){const[r,B,a]=C;return super.pad_image(o,C,{width:B+(s-B%s)%s,height:r+(s-r%s)%s},{mode:"symmetric",center:!1,constant_values:-1,...Q})}}},"./src/models/ultravox/processing_ultravox.js":(A,g,e)=>{e.r(g),e.d(g,{UltravoxProcessor:()=>o});var I=e("./src/models/auto/feature_extraction_auto.js"),i=e("./src/tokenizers.js"),t=e("./src/base/processing_utils.js");class o extends t.Processor{static tokenizer_class=i.AutoTokenizer;static feature_extractor_class=I.AutoFeatureExtractor;static uses_processor_config=!0;async _call(s,Q=null,r={}){if(Array.isArray(s))throw new Error("Batched inputs are not supported yet.");let B={};if(Q){const d=Q.length,{input_features:c}=await this.feature_extractor(Q,{...r,max_length:d}),F=Math.round(d/this.config.encoder_ds_factor+1e-4),L=1+Math.ceil(F/this.config.stack_factor);B.audio_token_len=[L],B.audio_values=c;const u=this.config.audio_placeholder;if(!s.includes(u))throw new Error(`The input text does not contain the image token ${u}.`);s=s.replaceAll(u,u.repeat(L))}return{...this.tokenizer(s,{add_special_tokens:!1,...r}),...B}}}},"./src/models/vit/image_processing_vit.js":(A,g,e)=>{e.r(g),e.d(g,{ViTFeatureExtractor:()=>t,ViTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}},"./src/models/vitmatte/image_processing_vitmatte.js":(A,g,e)=>{e.r(g),e.d(g,{VitMatteImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{async _call(C,s){Array.isArray(C)||(C=[C]),Array.isArray(s)||(s=[s]);const Q=await Promise.all(C.map(a=>this.preprocess(a))),r=await Promise.all(s.map(a=>this.preprocess(a,{do_normalize:!1,do_convert_rgb:!1,do_convert_grayscale:!0})));return{pixel_values:(0,i.stack)(Q.map((a,d)=>(0,i.cat)([a.pixel_values,r[d].pixel_values],0)),0),original_sizes:Q.map(a=>a.original_size),reshaped_input_sizes:Q.map(a=>a.reshaped_input_size)}}}},"./src/models/vitpose/image_processing_vitpose.js":(A,g,e)=>{e.r(g),e.d(g,{VitPoseImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_pose_estimation(o,C,{threshold:s=null}={}){const Q=o.tolist(),[r,B,a,d]=o.dims,c=[];for(let F=0;F{e.r(g),e.d(g,{Wav2Vec2FeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js");class t extends I.FeatureExtractor{_zero_mean_unit_var_norm(C){const Q=C.reduce((B,a)=>B+a,0)/C.length,r=C.reduce((B,a)=>B+(a-Q)**2,0)/C.length;return C.map(B=>(B-Q)/Math.sqrt(r+1e-7))}async _call(C){(0,I.validate_audio_inputs)(C,"Wav2Vec2FeatureExtractor"),C instanceof Float64Array&&(C=new Float32Array(C));let s=C;this.config.do_normalize&&(s=this._zero_mean_unit_var_norm(s));const Q=[1,s.length];return{input_values:new i.Tensor("float32",s,Q),attention_mask:new i.Tensor("int64",new BigInt64Array(s.length).fill(1n),Q)}}}},"./src/models/wav2vec2/processing_wav2vec2.js":(A,g,e)=>{e.r(g),e.d(g,{Wav2Vec2Processor:()=>o});var I=e("./src/tokenizers.js"),i=e("./src/models/auto/feature_extraction_auto.js"),t=e("./src/base/processing_utils.js");class o extends t.Processor{static tokenizer_class=I.AutoTokenizer;static feature_extractor_class=i.AutoFeatureExtractor;async _call(s){return await this.feature_extractor(s)}}},"./src/models/wav2vec2_with_lm/processing_wav2vec2_with_lm.js":(A,g,e)=>{e.r(g),e.d(g,{Wav2Vec2ProcessorWithLM:()=>o});var I=e("./src/tokenizers.js"),i=e("./src/models/auto/feature_extraction_auto.js"),t=e("./src/base/processing_utils.js");class o extends t.Processor{static tokenizer_class=I.AutoTokenizer;static feature_extractor_class=i.AutoFeatureExtractor;async _call(s){return await this.feature_extractor(s)}}},"./src/models/wespeaker/feature_extraction_wespeaker.js":(A,g,e)=>{e.r(g),e.d(g,{WeSpeakerFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js");e("./src/utils/tensor.js");var i=e("./src/utils/audio.js");class t extends I.FeatureExtractor{constructor(C){super(C);const s=this.config.sampling_rate,Q=(0,i.mel_filter_bank)(257,this.config.num_mel_bins,20,Math.floor(s/2),s,null,"kaldi",!0);this.mel_filters=Q,this.window=(0,i.window_function)(400,"hamming",{periodic:!1}),this.min_num_frames=this.config.min_num_frames}async _extract_fbank_features(C){return C=C.map(s=>s*32768),(0,i.spectrogram)(C,this.window,400,160,{fft_length:512,power:2,center:!1,preemphasis:.97,mel_filters:this.mel_filters,log_mel:"log",mel_floor:1192092955078125e-22,remove_dc_offset:!0,transpose:!0,min_num_frames:this.min_num_frames})}async _call(C){(0,I.validate_audio_inputs)(C,"WeSpeakerFeatureExtractor");const s=(await this._extract_fbank_features(C)).unsqueeze_(0);if(this.config.fbank_centering_span===null){const Q=s.mean(1).data,r=s.data,[B,a,d]=s.dims;for(let c=0;c{e.r(g),e.d(g,{WHISPER_LANGUAGE_MAPPING:()=>i,WHISPER_TO_LANGUAGE_CODE_MAPPING:()=>t,whisper_language_to_code:()=>o});const I=[["en","english"],["zh","chinese"],["de","german"],["es","spanish"],["ru","russian"],["ko","korean"],["fr","french"],["ja","japanese"],["pt","portuguese"],["tr","turkish"],["pl","polish"],["ca","catalan"],["nl","dutch"],["ar","arabic"],["sv","swedish"],["it","italian"],["id","indonesian"],["hi","hindi"],["fi","finnish"],["vi","vietnamese"],["he","hebrew"],["uk","ukrainian"],["el","greek"],["ms","malay"],["cs","czech"],["ro","romanian"],["da","danish"],["hu","hungarian"],["ta","tamil"],["no","norwegian"],["th","thai"],["ur","urdu"],["hr","croatian"],["bg","bulgarian"],["lt","lithuanian"],["la","latin"],["mi","maori"],["ml","malayalam"],["cy","welsh"],["sk","slovak"],["te","telugu"],["fa","persian"],["lv","latvian"],["bn","bengali"],["sr","serbian"],["az","azerbaijani"],["sl","slovenian"],["kn","kannada"],["et","estonian"],["mk","macedonian"],["br","breton"],["eu","basque"],["is","icelandic"],["hy","armenian"],["ne","nepali"],["mn","mongolian"],["bs","bosnian"],["kk","kazakh"],["sq","albanian"],["sw","swahili"],["gl","galician"],["mr","marathi"],["pa","punjabi"],["si","sinhala"],["km","khmer"],["sn","shona"],["yo","yoruba"],["so","somali"],["af","afrikaans"],["oc","occitan"],["ka","georgian"],["be","belarusian"],["tg","tajik"],["sd","sindhi"],["gu","gujarati"],["am","amharic"],["yi","yiddish"],["lo","lao"],["uz","uzbek"],["fo","faroese"],["ht","haitian creole"],["ps","pashto"],["tk","turkmen"],["nn","nynorsk"],["mt","maltese"],["sa","sanskrit"],["lb","luxembourgish"],["my","myanmar"],["bo","tibetan"],["tl","tagalog"],["mg","malagasy"],["as","assamese"],["tt","tatar"],["haw","hawaiian"],["ln","lingala"],["ha","hausa"],["ba","bashkir"],["jw","javanese"],["su","sundanese"]],i=new Map(I),t=new Map([...I.map(([C,s])=>[s,C]),["burmese","my"],["valencian","ca"],["flemish","nl"],["haitian","ht"],["letzeburgesch","lb"],["pushto","ps"],["panjabi","pa"],["moldavian","ro"],["moldovan","ro"],["sinhalese","si"],["castilian","es"]]);function o(C){C=C.toLowerCase();let s=t.get(C);if(s===void 0){const Q=C.match(/^<\|([a-z]{2})\|>$/);if(Q&&(C=Q[1]),i.has(C))s=C;else{const B=C.length===2?i.keys():i.values();throw new Error(`Language "${C}" is not supported. Must be one of: ${JSON.stringify(Array.from(B))}`)}}return s}},"./src/models/whisper/feature_extraction_whisper.js":(A,g,e)=>{e.r(g),e.d(g,{WhisperFeatureExtractor:()=>o});var I=e("./src/base/feature_extraction_utils.js");e("./src/utils/tensor.js");var i=e("./src/utils/audio.js"),t=e("./src/utils/maths.js");class o extends I.FeatureExtractor{constructor(s){super(s),this.config.mel_filters??=(0,i.mel_filter_bank)(Math.floor(1+this.config.n_fft/2),this.config.feature_size,0,8e3,this.config.sampling_rate,"slaney","slaney"),this.window=(0,i.window_function)(this.config.n_fft,"hann")}async _extract_fbank_features(s){const Q=await(0,i.spectrogram)(s,this.window,this.config.n_fft,this.config.hop_length,{power:2,mel_filters:this.config.mel_filters,log_mel:"log10",max_num_frames:Math.min(Math.floor(s.length/this.config.hop_length),this.config.nb_max_frames)}),r=Q.data,B=(0,t.max)(r)[0];for(let a=0;aB?(s.length>this.config.n_samples&&console.warn("Attempting to extract features for audio longer than 30 seconds. If using a pipeline to extract transcript from a long audio clip, remember to specify `chunk_length_s` and/or `stride_length_s`."),r=s.slice(0,B)):(r=new Float32Array(B),r.set(s)),{input_features:(await this._extract_fbank_features(r)).unsqueeze_(0)}}}},"./src/models/whisper/generation_whisper.js":(A,g,e)=>{e.r(g),e.d(g,{WhisperGenerationConfig:()=>i});var I=e("./src/generation/configuration_utils.js");class i extends I.GenerationConfig{return_timestamps=null;return_token_timestamps=null;num_frames=null;alignment_heads=null;task=null;language=null;no_timestamps_token_id=null;prompt_ids=null;is_multilingual=null;lang_to_id=null;task_to_id=null;max_initial_timestamp_index=1}},"./src/models/whisper/processing_whisper.js":(A,g,e)=>{e.r(g),e.d(g,{WhisperProcessor:()=>o});var I=e("./src/models/auto/feature_extraction_auto.js"),i=e("./src/tokenizers.js"),t=e("./src/base/processing_utils.js");class o extends t.Processor{static tokenizer_class=i.AutoTokenizer;static feature_extractor_class=I.AutoFeatureExtractor;async _call(s){return await this.feature_extractor(s)}}},"./src/models/yolos/image_processing_yolos.js":(A,g,e)=>{e.r(g),e.d(g,{YolosFeatureExtractor:()=>t,YolosImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_object_detection(...C){return(0,I.post_process_object_detection)(...C)}}class t extends i{}},"./src/ops/registry.js":(A,g,e)=>{e.r(g),e.d(g,{TensorOpRegistry:()=>s});var I=e("./src/backends/onnx.js"),i=e("./src/utils/tensor.js"),t=e("./src/env.js");const o=t.apis.IS_BROWSER_ENV||t.apis.IS_WEBWORKER_ENV,C=async(Q,r,B)=>{const a=await(0,I.createInferenceSession)(new Uint8Array(Q),r);let d=Promise.resolve();return async c=>{const F=(0,I.isONNXProxy)(),L=Object.fromEntries(Object.entries(c).map(([h,R])=>[h,(F?R.clone():R).ort_tensor])),u=await(d=o?d.then(()=>a.run(L)):a.run(L));return Array.isArray(B)?B.map(h=>new i.Tensor(u[h])):new i.Tensor(u[B])}};class s{static session_options={};static get nearest_interpolate_4d(){return this._nearest_interpolate_4d||(this._nearest_interpolate_4d=C([8,10,18,0,58,129,1,10,41,10,1,120,10,0,10,0,10,1,115,18,1,121,34,6,82,101,115,105,122,101,42,18,10,4,109,111,100,101,34,7,110,101,97,114,101,115,116,160,1,3,18,1,114,90,31,10,1,120,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,90,15,10,1,115,18,10,10,8,8,7,18,4,10,2,8,4,98,31,10,1,121,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,66,2,16,21],this.session_options,"y")),this._nearest_interpolate_4d}static get bilinear_interpolate_4d(){return this._bilinear_interpolate_4d||(this._bilinear_interpolate_4d=C([8,9,18,0,58,128,1,10,40,10,1,120,10,0,10,0,10,1,115,18,1,121,34,6,82,101,115,105,122,101,42,17,10,4,109,111,100,101,34,6,108,105,110,101,97,114,160,1,3,18,1,114,90,31,10,1,120,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,90,15,10,1,115,18,10,10,8,8,7,18,4,10,2,8,4,98,31,10,1,121,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,66,2,16,20],this.session_options,"y")),this._bilinear_interpolate_4d}static get bicubic_interpolate_4d(){return this._bicubic_interpolate_4d||(this._bicubic_interpolate_4d=C([8,9,18,0,58,127,10,39,10,1,120,10,0,10,0,10,1,115,18,1,121,34,6,82,101,115,105,122,101,42,16,10,4,109,111,100,101,34,5,99,117,98,105,99,160,1,3,18,1,114,90,31,10,1,120,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,90,15,10,1,115,18,10,10,8,8,7,18,4,10,2,8,4,98,31,10,1,121,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,66,2,16,20],this.session_options,"y")),this._bicubic_interpolate_4d}static get matmul(){return this._matmul||(this._matmul=C([8,9,18,0,58,55,10,17,10,1,97,10,1,98,18,1,99,34,6,77,97,116,77,117,108,18,1,114,90,9,10,1,97,18,4,10,2,8,1,90,9,10,1,98,18,4,10,2,8,1,98,9,10,1,99,18,4,10,2,8,1,66,2,16,20],this.session_options,"c")),this._matmul}static get stft(){return this._stft||(this._stft=C([8,7,18,0,58,148,1,10,38,10,1,115,10,1,106,10,1,119,10,1,108,18,1,111,34,4,83,84,70,84,42,15,10,8,111,110,101,115,105,100,101,100,24,1,160,1,2,18,1,115,90,26,10,1,115,18,21,10,19,8,1,18,15,10,3,18,1,98,10,3,18,1,115,10,3,18,1,99,90,11,10,1,106,18,6,10,4,8,7,18,0,90,16,10,1,119,18,11,10,9,8,1,18,5,10,3,18,1,119,90,11,10,1,108,18,6,10,4,8,7,18,0,98,31,10,1,111,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,102,10,3,18,1,100,10,3,18,1,99,66,2,16,17],this.session_options,"o")),this._stft}static get rfft(){return this._rfft||(this._rfft=C([8,9,18,0,58,97,10,33,10,1,120,10,0,10,1,97,18,1,121,34,3,68,70,84,42,15,10,8,111,110,101,115,105,100,101,100,24,1,160,1,2,18,1,100,90,21,10,1,120,18,16,10,14,8,1,18,10,10,3,18,1,115,10,3,18,1,99,90,11,10,1,97,18,6,10,4,8,7,18,0,98,21,10,1,121,18,16,10,14,8,1,18,10,10,3,18,1,115,10,3,18,1,99,66,2,16,20],this.session_options,"y")),this._rfft}static get top_k(){return this._top_k||(this._top_k=C([8,10,18,0,58,73,10,18,10,1,120,10,1,107,18,1,118,18,1,105,34,4,84,111,112,75,18,1,116,90,9,10,1,120,18,4,10,2,8,1,90,15,10,1,107,18,10,10,8,8,7,18,4,10,2,8,1,98,9,10,1,118,18,4,10,2,8,1,98,9,10,1,105,18,4,10,2,8,7,66,2,16,21],this.session_options,["v","i"])),this._top_k}static get slice(){return this._slice||(this._slice=C([8,7,18,0,58,96,10,25,10,1,120,10,1,115,10,1,101,10,1,97,10,1,116,18,1,121,34,5,83,108,105,99,101,18,1,114,90,9,10,1,120,18,4,10,2,8,1,90,9,10,1,115,18,4,10,2,8,7,90,9,10,1,101,18,4,10,2,8,7,90,9,10,1,97,18,4,10,2,8,7,90,9,10,1,116,18,4,10,2,8,7,98,9,10,1,121,18,4,10,2,8,1,66,2,16,13],this.session_options,"y")),this._slice}}},"./src/pipelines.js":(A,g,e)=>{e.r(g),e.d(g,{AudioClassificationPipeline:()=>gA,AutomaticSpeechRecognitionPipeline:()=>tA,BackgroundRemovalPipeline:()=>CA,DepthEstimationPipeline:()=>EA,DocumentQuestionAnsweringPipeline:()=>U,FeatureExtractionPipeline:()=>T,FillMaskPipeline:()=>R,ImageClassificationPipeline:()=>IA,ImageFeatureExtractionPipeline:()=>X,ImageSegmentationPipeline:()=>oA,ImageToImagePipeline:()=>H,ImageToTextPipeline:()=>Z,ObjectDetectionPipeline:()=>cA,Pipeline:()=>F,QuestionAnsweringPipeline:()=>h,SummarizationPipeline:()=>y,Text2TextGenerationPipeline:()=>w,TextClassificationPipeline:()=>L,TextGenerationPipeline:()=>G,TextToAudioPipeline:()=>z,TokenClassificationPipeline:()=>u,TranslationPipeline:()=>D,ZeroShotAudioClassificationPipeline:()=>x,ZeroShotClassificationPipeline:()=>J,ZeroShotImageClassificationPipeline:()=>DA,ZeroShotObjectDetectionPipeline:()=>q,pipeline:()=>YA});var I=e("./src/tokenizers.js"),i=e("./src/models.js"),t=e("./src/models/auto/processing_auto.js");e("./src/base/processing_utils.js");var o=e("./src/utils/generic.js"),C=e("./src/utils/core.js"),s=e("./src/utils/maths.js"),Q=e("./src/utils/audio.js"),r=e("./src/utils/tensor.js"),B=e("./src/utils/image.js");async function a(hA){return Array.isArray(hA)||(hA=[hA]),await Promise.all(hA.map(j=>B.RawImage.read(j)))}async function d(hA,j){return Array.isArray(hA)||(hA=[hA]),await Promise.all(hA.map(dA=>typeof dA=="string"||dA instanceof URL?(0,Q.read_audio)(dA,j):dA instanceof Float64Array?new Float32Array(dA):dA))}function c(hA,j){j&&(hA=hA.map(LA=>LA|0));const[dA,$,fA,FA]=hA;return{xmin:dA,ymin:$,xmax:fA,ymax:FA}}class F extends o.Callable{constructor({task:j,model:dA,tokenizer:$=null,processor:fA=null}){super(),this.task=j,this.model=dA,this.tokenizer=$,this.processor=fA}async dispose(){await this.model.dispose()}}class L extends F{constructor(j){super(j)}async _call(j,{top_k:dA=1}={}){const $=this.tokenizer(j,{padding:!0,truncation:!0}),fA=await this.model($),FA=this.model.config.problem_type==="multi_label_classification"?KA=>KA.sigmoid():KA=>new r.Tensor("float32",(0,s.softmax)(KA.data),KA.dims),LA=this.model.config.id2label,GA=[];for(const KA of fA.logits){const vA=FA(KA),jA=await(0,r.topk)(vA,dA),Ce=jA[0].tolist(),JA=jA[1].tolist().map((XA,PA)=>({label:LA?LA[XA]:`LABEL_${XA}`,score:Ce[PA]}));dA===1?GA.push(...JA):GA.push(JA)}return Array.isArray(j)||dA===1?GA:GA[0]}}class u extends F{constructor(j){super(j)}async _call(j,{ignore_labels:dA=["O"]}={}){const $=Array.isArray(j),fA=this.tokenizer($?j:[j],{padding:!0,truncation:!0}),LA=(await this.model(fA)).logits,GA=this.model.config.id2label,KA=[];for(let vA=0;vAbA==this.tokenizer.sep_token_id);KA[Ce].map((bA,ae)=>bA==1&&(ae===0||ae>JA&&vA.findIndex(Se=>Se==Ie[ae])===-1));const XA=FA[Ce].tolist(),PA=LA[Ce].tolist();for(let bA=1;bAae==Ie[bA])!==-1)&&(XA[bA]=-1/0,PA[bA]=-1/0);const ie=(0,s.softmax)(XA).map((bA,ae)=>[bA,ae]),he=(0,s.softmax)(PA).map((bA,ae)=>[bA,ae]);ie[0][0]=0,he[0][0]=0;const Qe=(0,C.product)(ie,he).filter(bA=>bA[0][1]<=bA[1][1]).map(bA=>[bA[0][1],bA[1][1],bA[0][0]*bA[1][0]]).sort((bA,ae)=>ae[2]-bA[2]);for(let bA=0;bAXA==this.tokenizer.mask_token_id);if(vA===-1)throw Error(`Mask token (${this.tokenizer.mask_token}) not found in text.`);const jA=fA[GA][vA],Ce=await(0,r.topk)(new r.Tensor("float32",(0,s.softmax)(jA.data),jA.dims),dA),Ie=Ce[0].tolist(),JA=Ce[1].tolist();FA.push(JA.map((XA,PA)=>{const ie=KA.slice();return ie[vA]=XA,{score:Ie[PA],token:Number(XA),token_str:this.tokenizer.decode([XA]),sequence:this.tokenizer.decode(ie,{skip_special_tokens:!0})}}))}return Array.isArray(j)?FA:FA[0]}}class w extends F{_key="generated_text";constructor(j){super(j)}async _call(j,dA={}){Array.isArray(j)||(j=[j]),this.model.config.prefix&&(j=j.map(KA=>this.model.config.prefix+KA));const $=this.model.config.task_specific_params;$&&$[this.task]&&$[this.task].prefix&&(j=j.map(KA=>$[this.task].prefix+KA));const fA=this.tokenizer,FA={padding:!0,truncation:!0};let LA;this instanceof D&&"_build_translation_inputs"in fA?LA=fA._build_translation_inputs(j,FA,dA):LA=fA(j,FA);const GA=await this.model.generate({...LA,...dA});return fA.batch_decode(GA,{skip_special_tokens:!0}).map(KA=>({[this._key]:KA}))}}class y extends w{_key="summary_text";constructor(j){super(j)}}class D extends w{_key="translation_text";constructor(j){super(j)}}function f(hA){return Array.isArray(hA)&&hA.every(j=>"role"in j&&"content"in j)}class G extends F{constructor(j){super(j)}async _call(j,dA={}){let $=!1,fA=!1,FA;if(typeof j=="string")FA=j=[j];else if(Array.isArray(j)&&j.every(JA=>typeof JA=="string"))$=!0,FA=j;else{if(f(j))j=[j];else if(Array.isArray(j)&&j.every(f))$=!0;else throw new Error("Input must be a string, an array of strings, a Chat, or an array of Chats");fA=!0,FA=j.map(JA=>this.tokenizer.apply_chat_template(JA,{tokenize:!1,add_generation_prompt:!0}))}const LA=dA.add_special_tokens??!1,GA=fA?!1:dA.return_full_text??!0;this.tokenizer.padding_side="left";const KA=this.tokenizer(FA,{add_special_tokens:LA,padding:!0,truncation:!0}),vA=await this.model.generate({...KA,...dA}),jA=this.tokenizer.batch_decode(vA,{skip_special_tokens:!0});let Ce;!GA&&KA.input_ids.dims.at(-1)>0&&(Ce=this.tokenizer.batch_decode(KA.input_ids,{skip_special_tokens:!0}).map(JA=>JA.length));const Ie=Array.from({length:j.length},JA=>[]);for(let JA=0;JA[dA.toLowerCase(),$])),this.entailment_id=this.label2id.entailment,this.entailment_id===void 0&&(console.warn("Could not find 'entailment' in label2id mapping. Using 2 as entailment_id."),this.entailment_id=2),this.contradiction_id=this.label2id.contradiction??this.label2id.not_entailment,this.contradiction_id===void 0&&(console.warn("Could not find 'contradiction' in label2id mapping. Using 0 as contradiction_id."),this.contradiction_id=0)}async _call(j,dA,{hypothesis_template:$="This example is {}.",multi_label:fA=!1}={}){const FA=Array.isArray(j);FA||(j=[j]),Array.isArray(dA)||(dA=[dA]);const LA=dA.map(vA=>$.replace("{}",vA)),GA=fA||dA.length===1,KA=[];for(const vA of j){const jA=[];for(const JA of LA){const XA=this.tokenizer(vA,{text_pair:JA,padding:!0,truncation:!0}),PA=await this.model(XA);GA?jA.push([PA.logits.data[this.contradiction_id],PA.logits.data[this.entailment_id]]):jA.push(PA.logits.data[this.entailment_id])}const Ie=(GA?jA.map(JA=>(0,s.softmax)(JA)[1]):(0,s.softmax)(jA)).map((JA,XA)=>[JA,XA]).sort((JA,XA)=>XA[0]-JA[0]);KA.push({sequence:vA,labels:Ie.map(JA=>dA[JA[1]]),scores:Ie.map(JA=>JA[0])})}return FA?KA:KA[0]}}class T extends F{constructor(j){super(j)}async _call(j,{pooling:dA="none",normalize:$=!1,quantize:fA=!1,precision:FA="binary"}={}){const LA=this.tokenizer(j,{padding:!0,truncation:!0}),GA=await this.model(LA);let KA=GA.last_hidden_state??GA.logits??GA.token_embeddings;if(dA!=="none")if(dA==="mean")KA=(0,r.mean_pooling)(KA,LA.attention_mask);else if(dA==="cls")KA=KA.slice(null,0);else throw Error(`Pooling method '${dA}' not supported.`);return $&&(KA=KA.normalize(2,-1)),fA&&(KA=(0,r.quantize_embeddings)(KA,FA)),KA}}class X extends F{constructor(j){super(j)}async _call(j,{pool:dA=null}={}){const $=await a(j),{pixel_values:fA}=await this.processor($),FA=await this.model({pixel_values:fA});let LA;if(dA){if(!("pooler_output"in FA))throw Error("No pooled output was returned. Make sure the model has a 'pooler' layer when using the 'pool' option.");LA=FA.pooler_output}else LA=FA.last_hidden_state??FA.logits??FA.image_embeds;return LA}}class gA extends F{constructor(j){super(j)}async _call(j,{top_k:dA=5}={}){const $=this.processor.feature_extractor.config.sampling_rate,fA=await d(j,$),FA=this.model.config.id2label,LA=[];for(const GA of fA){const KA=await this.processor(GA),jA=(await this.model(KA)).logits[0],Ce=await(0,r.topk)(new r.Tensor("float32",(0,s.softmax)(jA.data),jA.dims),dA),Ie=Ce[0].tolist(),XA=Ce[1].tolist().map((PA,ie)=>({label:FA?FA[PA]:`LABEL_${PA}`,score:Ie[ie]}));LA.push(XA)}return Array.isArray(j)?LA:LA[0]}}class x extends F{constructor(j){super(j)}async _call(j,dA,{hypothesis_template:$="This is a sound of {}."}={}){const fA=!Array.isArray(j);fA&&(j=[j]);const FA=dA.map(jA=>$.replace("{}",jA)),LA=this.tokenizer(FA,{padding:!0,truncation:!0}),GA=this.processor.feature_extractor.config.sampling_rate,KA=await d(j,GA),vA=[];for(const jA of KA){const Ce=await this.processor(jA),Ie=await this.model({...LA,...Ce}),JA=(0,s.softmax)(Ie.logits_per_audio.data);vA.push([...JA].map((XA,PA)=>({score:XA,label:dA[PA]})))}return fA?vA[0]:vA}}class tA extends F{constructor(j){super(j)}async _call(j,dA={}){switch(this.model.config.model_type){case"whisper":case"lite-whisper":return this._call_whisper(j,dA);case"wav2vec2":case"wav2vec2-bert":case"unispeech":case"unispeech-sat":case"hubert":return this._call_wav2vec2(j,dA);case"moonshine":return this._call_moonshine(j,dA);default:throw new Error(`AutomaticSpeechRecognitionPipeline does not support model type '${this.model.config.model_type}'.`)}}async _call_wav2vec2(j,dA){dA.language&&console.warn('`language` parameter is not yet supported for `wav2vec2` models, defaulting to "English".'),dA.task&&console.warn('`task` parameter is not yet supported for `wav2vec2` models, defaulting to "transcribe".');const $=!Array.isArray(j);$&&(j=[j]);const fA=this.processor.feature_extractor.config.sampling_rate,FA=await d(j,fA),LA=[];for(const GA of FA){const KA=await this.processor(GA),jA=(await this.model(KA)).logits[0],Ce=[];for(const JA of jA)Ce.push((0,s.max)(JA.data)[1]);const Ie=this.tokenizer.decode(Ce);LA.push({text:Ie})}return $?LA[0]:LA}async _call_whisper(j,dA){const $=dA.return_timestamps??!1,fA=dA.chunk_length_s??0,FA=dA.force_full_sequences??!1;let LA=dA.stride_length_s??null;const GA={...dA};$==="word"&&(GA.return_token_timestamps=!0,GA.return_timestamps=!1);const KA=!Array.isArray(j);KA&&(j=[j]);const vA=this.processor.feature_extractor.config.chunk_length/this.model.config.max_source_positions,jA=this.processor.feature_extractor.config.hop_length,Ce=this.processor.feature_extractor.config.sampling_rate,Ie=await d(j,Ce),JA=[];for(const XA of Ie){let PA=[];if(fA>0){if(LA===null)LA=fA/6;else if(fA<=LA)throw Error("`chunk_length_s` must be larger than `stride_length_s`.");const Qe=Ce*fA,bA=Ce*LA,ae=Qe-2*bA;let Se=0;for(;;){const Ag=Se+Qe,Ye=XA.subarray(Se,Ag),gg=await this.processor(Ye),Mg=Se===0,Fe=Ag>=XA.length;if(PA.push({stride:[Ye.length,Mg?0:bA,Fe?0:bA],input_features:gg.input_features,is_last:Fe}),Fe)break;Se+=ae}}else PA=[{stride:[XA.length,0,0],input_features:(await this.processor(XA)).input_features,is_last:!0}];for(const Qe of PA){GA.num_frames=Math.floor(Qe.stride[0]/jA);const bA=await this.model.generate({inputs:Qe.input_features,...GA});$==="word"?(Qe.tokens=bA.sequences.tolist()[0],Qe.token_timestamps=bA.token_timestamps.tolist()[0].map(ae=>(0,s.round)(ae,2))):Qe.tokens=bA[0].tolist(),Qe.stride=Qe.stride.map(ae=>ae/Ce)}const[ie,he]=this.tokenizer._decode_asr(PA,{time_precision:vA,return_timestamps:$,force_full_sequences:FA});JA.push({text:ie,...he})}return KA?JA[0]:JA}async _call_moonshine(j,dA){const $=!Array.isArray(j);$&&(j=[j]);const fA=this.processor.feature_extractor.config.sampling_rate,FA=await d(j,fA),LA=[];for(const GA of FA){const KA=await this.processor(GA),vA=Math.floor(GA.length/fA)*6,jA=await this.model.generate({max_new_tokens:vA,...dA,...KA}),Ce=this.processor.batch_decode(jA,{skip_special_tokens:!0})[0];LA.push({text:Ce})}return $?LA[0]:LA}}class Z extends F{constructor(j){super(j)}async _call(j,dA={}){const $=Array.isArray(j),fA=await a(j),{pixel_values:FA}=await this.processor(fA),LA=[];for(const GA of FA){GA.dims=[1,...GA.dims];const KA=await this.model.generate({inputs:GA,...dA}),vA=this.tokenizer.batch_decode(KA,{skip_special_tokens:!0}).map(jA=>({generated_text:jA.trim()}));LA.push(vA)}return $?LA:LA[0]}}class IA extends F{constructor(j){super(j)}async _call(j,{top_k:dA=5}={}){const $=await a(j),{pixel_values:fA}=await this.processor($),FA=await this.model({pixel_values:fA}),LA=this.model.config.id2label,GA=[];for(const KA of FA.logits){const vA=await(0,r.topk)(new r.Tensor("float32",(0,s.softmax)(KA.data),KA.dims),dA),jA=vA[0].tolist(),Ie=vA[1].tolist().map((JA,XA)=>({label:LA?LA[JA]:`LABEL_${JA}`,score:jA[XA]}));GA.push(Ie)}return Array.isArray(j)?GA:GA[0]}}class oA extends F{constructor(j){super(j),this.subtasks_mapping={panoptic:"post_process_panoptic_segmentation",instance:"post_process_instance_segmentation",semantic:"post_process_semantic_segmentation"}}async _call(j,{threshold:dA=.5,mask_threshold:$=.5,overlap_mask_area_threshold:fA=.8,label_ids_to_fuse:FA=null,target_sizes:LA=null,subtask:GA=null}={}){if(Array.isArray(j)&&j.length!==1)throw Error("Image segmentation pipeline currently only supports a batch size of 1.");const vA=await a(j),jA=vA.map(Qe=>[Qe.height,Qe.width]),Ce=await this.processor(vA),{inputNames:Ie,outputNames:JA}=this.model.sessions.model;if(!Ie.includes("pixel_values")){if(Ie.length!==1)throw Error(`Expected a single input name, but got ${Ie.length} inputs: ${Ie}.`);const Qe=Ie[0];if(Qe in Ce)throw Error(`Input name ${Qe} already exists in the inputs.`);Ce[Qe]=Ce.pixel_values}const XA=await this.model(Ce);let PA=null;if(GA!==null)PA=this.subtasks_mapping[GA];else if(this.processor.image_processor){for(const[Qe,bA]of Object.entries(this.subtasks_mapping))if(bA in this.processor.image_processor){PA=this.processor.image_processor[bA].bind(this.processor.image_processor),GA=Qe;break}}const ie=this.model.config.id2label,he=[];if(GA)if(GA==="panoptic"||GA==="instance"){const Qe=PA(XA,dA,$,fA,FA,LA??jA)[0],bA=Qe.segmentation;for(const ae of Qe.segments_info){const Se=new Uint8ClampedArray(bA.data.length);for(let Ye=0;Yegg<-1e-5||gg>1+1e-5)&&Ag.sigmoid_();const Ye=await B.RawImage.fromTensor(Ag.mul_(255).to("uint8")).resize(Se[1],Se[0]);he.push({label:null,score:null,mask:Ye})}}return he}}class CA extends oA{constructor(j){super(j)}async _call(j,dA={}){if(Array.isArray(j)&&j.length!==1)throw Error("Background removal pipeline currently only supports a batch size of 1.");const fA=await a(j),FA=await super._call(j,dA);return fA.map((GA,KA)=>{const vA=GA.clone();return vA.putAlpha(FA[KA].mask),vA})}}class DA extends F{constructor(j){super(j)}async _call(j,dA,{hypothesis_template:$="This is a photo of {}"}={}){const fA=Array.isArray(j),FA=await a(j),LA=dA.map(Ie=>$.replace("{}",Ie)),GA=this.tokenizer(LA,{padding:this.model.config.model_type==="siglip"?"max_length":!0,truncation:!0}),{pixel_values:KA}=await this.processor(FA),vA=await this.model({...GA,pixel_values:KA}),jA=this.model.config.model_type==="siglip"?Ie=>Ie.sigmoid().data:Ie=>(0,s.softmax)(Ie.data),Ce=[];for(const Ie of vA.logits_per_image){const XA=[...jA(Ie)].map((PA,ie)=>({score:PA,label:dA[ie]}));XA.sort((PA,ie)=>ie.score-PA.score),Ce.push(XA)}return fA?Ce:Ce[0]}}class cA extends F{constructor(j){super(j)}async _call(j,{threshold:dA=.9,percentage:$=!1}={}){const fA=Array.isArray(j);if(fA&&j.length!==1)throw Error("Object detection pipeline currently only supports a batch size of 1.");const FA=await a(j),LA=$?null:FA.map(JA=>[JA.height,JA.width]),{pixel_values:GA,pixel_mask:KA}=await this.processor(FA),vA=await this.model({pixel_values:GA,pixel_mask:KA}),jA=this.processor.image_processor.post_process_object_detection(vA,dA,LA),Ce=this.model.config.id2label,Ie=jA.map(JA=>JA.boxes.map((XA,PA)=>({score:JA.scores[PA],label:Ce[JA.classes[PA]],box:c(XA,!$)})));return fA?Ie:Ie[0]}}class q extends F{constructor(j){super(j)}async _call(j,dA,{threshold:$=.1,top_k:fA=null,percentage:FA=!1}={}){const LA=Array.isArray(j),GA=await a(j),KA=this.tokenizer(dA,{padding:!0,truncation:!0}),vA=await this.processor(GA),jA=[];for(let Ce=0;Ce({score:he.scores[bA],label:he.labels[bA],box:c(Qe,!FA)}))}else{const he=this.processor.image_processor.post_process_object_detection(PA,$,JA,!0)[0];ie=he.boxes.map((Qe,bA)=>({score:he.scores[bA],label:dA[he.classes[bA]],box:c(Qe,!FA)}))}ie.sort((he,Qe)=>Qe.score-he.score),fA!==null&&(ie=ie.slice(0,fA)),jA.push(ie)}return LA?jA:jA[0]}}class U extends F{constructor(j){super(j)}async _call(j,dA,$={}){const fA=(await a(j))[0],{pixel_values:FA}=await this.processor(fA),LA=`${dA}`,GA=this.tokenizer(LA,{add_special_tokens:!1,padding:!0,truncation:!0}).input_ids,KA=await this.model.generate({inputs:FA,max_length:this.model.config.decoder.max_position_embeddings,decoder_input_ids:GA,...$}),jA=this.tokenizer.batch_decode(KA)[0].match(/(.*?)<\/s_answer>/);let Ce=null;return jA&&jA.length>=2&&(Ce=jA[1].trim()),[{answer:Ce}]}}class z extends F{DEFAULT_VOCODER_ID="Xenova/speecht5_hifigan";constructor(j){super(j),this.vocoder=j.vocoder??null}async _call(j,{speaker_embeddings:dA=null}={}){return this.processor?this._call_text_to_spectrogram(j,{speaker_embeddings:dA}):this._call_text_to_waveform(j)}async _call_text_to_waveform(j){const dA=this.tokenizer(j,{padding:!0,truncation:!0}),{waveform:$}=await this.model(dA),fA=this.model.config.sampling_rate;return new Q.RawAudio($.data,fA)}async _call_text_to_spectrogram(j,{speaker_embeddings:dA}){if(this.vocoder||(console.log("No vocoder specified, using default HifiGan vocoder."),this.vocoder=await i.AutoModel.from_pretrained(this.DEFAULT_VOCODER_ID,{dtype:"fp32"})),(typeof dA=="string"||dA instanceof URL)&&(dA=new Float32Array(await(await fetch(dA)).arrayBuffer())),dA instanceof Float32Array)dA=new r.Tensor("float32",dA,[1,dA.length]);else if(!(dA instanceof r.Tensor))throw new Error("Speaker embeddings must be a `Tensor`, `Float32Array`, `string`, or `URL`.");const{input_ids:$}=this.tokenizer(j,{padding:!0,truncation:!0}),{waveform:fA}=await this.model.generate_speech($,dA,{vocoder:this.vocoder}),FA=this.processor.feature_extractor.config.sampling_rate;return new Q.RawAudio(fA.data,FA)}}class H extends F{constructor(j){super(j)}async _call(j){const dA=await a(j),$=await this.processor(dA),fA=await this.model($),FA=[];for(const LA of fA.reconstruction){const GA=LA.squeeze().clamp_(0,1).mul_(255).round_().to("uint8");FA.push(B.RawImage.fromTensor(GA))}return FA.length>1?FA:FA[0]}}class EA extends F{constructor(j){super(j)}async _call(j){const dA=await a(j),$=await this.processor(dA),{predicted_depth:fA}=await this.model($),FA=[];for(let LA=0;LA1?FA:FA[0]}}const xA=Object.freeze({"text-classification":{tokenizer:I.AutoTokenizer,pipeline:L,model:i.AutoModelForSequenceClassification,default:{model:"Xenova/distilbert-base-uncased-finetuned-sst-2-english"},type:"text"},"token-classification":{tokenizer:I.AutoTokenizer,pipeline:u,model:i.AutoModelForTokenClassification,default:{model:"Xenova/bert-base-multilingual-cased-ner-hrl"},type:"text"},"question-answering":{tokenizer:I.AutoTokenizer,pipeline:h,model:i.AutoModelForQuestionAnswering,default:{model:"Xenova/distilbert-base-cased-distilled-squad"},type:"text"},"fill-mask":{tokenizer:I.AutoTokenizer,pipeline:R,model:i.AutoModelForMaskedLM,default:{model:"Xenova/bert-base-uncased"},type:"text"},summarization:{tokenizer:I.AutoTokenizer,pipeline:y,model:i.AutoModelForSeq2SeqLM,default:{model:"Xenova/distilbart-cnn-6-6"},type:"text"},translation:{tokenizer:I.AutoTokenizer,pipeline:D,model:i.AutoModelForSeq2SeqLM,default:{model:"Xenova/t5-small"},type:"text"},"text2text-generation":{tokenizer:I.AutoTokenizer,pipeline:w,model:i.AutoModelForSeq2SeqLM,default:{model:"Xenova/flan-t5-small"},type:"text"},"text-generation":{tokenizer:I.AutoTokenizer,pipeline:G,model:i.AutoModelForCausalLM,default:{model:"Xenova/gpt2"},type:"text"},"zero-shot-classification":{tokenizer:I.AutoTokenizer,pipeline:J,model:i.AutoModelForSequenceClassification,default:{model:"Xenova/distilbert-base-uncased-mnli"},type:"text"},"audio-classification":{pipeline:gA,model:i.AutoModelForAudioClassification,processor:t.AutoProcessor,default:{model:"Xenova/wav2vec2-base-superb-ks"},type:"audio"},"zero-shot-audio-classification":{tokenizer:I.AutoTokenizer,pipeline:x,model:i.AutoModel,processor:t.AutoProcessor,default:{model:"Xenova/clap-htsat-unfused"},type:"multimodal"},"automatic-speech-recognition":{tokenizer:I.AutoTokenizer,pipeline:tA,model:[i.AutoModelForSpeechSeq2Seq,i.AutoModelForCTC],processor:t.AutoProcessor,default:{model:"Xenova/whisper-tiny.en"},type:"multimodal"},"text-to-audio":{tokenizer:I.AutoTokenizer,pipeline:z,model:[i.AutoModelForTextToWaveform,i.AutoModelForTextToSpectrogram],processor:[t.AutoProcessor,null],default:{model:"Xenova/speecht5_tts"},type:"text"},"image-to-text":{tokenizer:I.AutoTokenizer,pipeline:Z,model:i.AutoModelForVision2Seq,processor:t.AutoProcessor,default:{model:"Xenova/vit-gpt2-image-captioning"},type:"multimodal"},"image-classification":{pipeline:IA,model:i.AutoModelForImageClassification,processor:t.AutoProcessor,default:{model:"Xenova/vit-base-patch16-224"},type:"multimodal"},"image-segmentation":{pipeline:oA,model:[i.AutoModelForImageSegmentation,i.AutoModelForSemanticSegmentation,i.AutoModelForUniversalSegmentation],processor:t.AutoProcessor,default:{model:"Xenova/detr-resnet-50-panoptic"},type:"multimodal"},"background-removal":{pipeline:CA,model:[i.AutoModelForImageSegmentation,i.AutoModelForSemanticSegmentation,i.AutoModelForUniversalSegmentation],processor:t.AutoProcessor,default:{model:"Xenova/modnet"},type:"image"},"zero-shot-image-classification":{tokenizer:I.AutoTokenizer,pipeline:DA,model:i.AutoModel,processor:t.AutoProcessor,default:{model:"Xenova/clip-vit-base-patch32"},type:"multimodal"},"object-detection":{pipeline:cA,model:i.AutoModelForObjectDetection,processor:t.AutoProcessor,default:{model:"Xenova/detr-resnet-50"},type:"multimodal"},"zero-shot-object-detection":{tokenizer:I.AutoTokenizer,pipeline:q,model:i.AutoModelForZeroShotObjectDetection,processor:t.AutoProcessor,default:{model:"Xenova/owlvit-base-patch32"},type:"multimodal"},"document-question-answering":{tokenizer:I.AutoTokenizer,pipeline:U,model:i.AutoModelForDocumentQuestionAnswering,processor:t.AutoProcessor,default:{model:"Xenova/donut-base-finetuned-docvqa"},type:"multimodal"},"image-to-image":{pipeline:H,model:i.AutoModelForImageToImage,processor:t.AutoProcessor,default:{model:"Xenova/swin2SR-classical-sr-x2-64"},type:"image"},"depth-estimation":{pipeline:EA,model:i.AutoModelForDepthEstimation,processor:t.AutoProcessor,default:{model:"Xenova/dpt-large"},type:"image"},"feature-extraction":{tokenizer:I.AutoTokenizer,pipeline:T,model:i.AutoModel,default:{model:"Xenova/all-MiniLM-L6-v2"},type:"text"},"image-feature-extraction":{processor:t.AutoProcessor,pipeline:X,model:[i.AutoModelForImageFeatureExtraction,i.AutoModel],default:{model:"Xenova/vit-base-patch16-224-in21k"},type:"image"}}),RA=Object.freeze({"sentiment-analysis":"text-classification",ner:"token-classification",asr:"automatic-speech-recognition","text-to-speech":"text-to-audio",embeddings:"feature-extraction"});async function YA(hA,j=null,{progress_callback:dA=null,config:$=null,cache_dir:fA=null,local_files_only:FA=!1,revision:LA="main",device:GA=null,dtype:KA=null,subfolder:vA="onnx",use_external_data_format:jA=null,model_file_name:Ce=null,session_options:Ie={}}={}){hA=RA[hA]??hA;const JA=xA[hA.split("_",1)[0]];if(!JA)throw Error(`Unsupported pipeline: ${hA}. Must be one of [${Object.keys(xA)}]`);j||(j=JA.default.model,console.log(`No model specified. Using default model: "${j}".`));const XA={progress_callback:dA,config:$,cache_dir:fA,local_files_only:FA,revision:LA,device:GA,dtype:KA,subfolder:vA,use_external_data_format:jA,model_file_name:Ce,session_options:Ie},PA=new Map([["tokenizer",JA.tokenizer],["model",JA.model],["processor",JA.processor]]),ie=await ge(PA,j,XA);ie.task=hA,(0,C.dispatchCallback)(dA,{status:"ready",task:hA,model:j});const he=JA.pipeline;return new he(ie)}async function ge(hA,j,dA){const $=Object.create(null),fA=[];for(const[FA,LA]of hA.entries()){if(!LA)continue;let GA;Array.isArray(LA)?GA=new Promise(async(KA,vA)=>{let jA;for(const Ce of LA){if(Ce===null){KA(null);return}try{KA(await Ce.from_pretrained(j,dA));return}catch(Ie){if(Ie.message?.includes("Unsupported model type"))jA=Ie;else if(Ie.message?.includes("Could not locate file"))jA=Ie;else{vA(Ie);return}}}vA(jA)}):GA=LA.from_pretrained(j,dA),$[FA]=GA,fA.push(GA)}await Promise.all(fA);for(const[FA,LA]of Object.entries($))$[FA]=await LA;return $}},"./src/tokenizers.js":(A,g,e)=>{e.r(g),e.d(g,{AlbertTokenizer:()=>te,AutoTokenizer:()=>se,BartTokenizer:()=>EI,BertTokenizer:()=>k,BlenderbotSmallTokenizer:()=>K,BlenderbotTokenizer:()=>S,BloomTokenizer:()=>uI,CLIPTokenizer:()=>CI,CamembertTokenizer:()=>eI,CodeGenTokenizer:()=>TI,CodeLlamaTokenizer:()=>II,CohereTokenizer:()=>uA,ConvBertTokenizer:()=>Tg,DebertaTokenizer:()=>Je,DebertaV2Tokenizer:()=>Bg,DistilBertTokenizer:()=>Lg,ElectraTokenizer:()=>$g,EsmTokenizer:()=>le,FalconTokenizer:()=>HA,GPT2Tokenizer:()=>Fg,GPTNeoXTokenizer:()=>Ae,GemmaTokenizer:()=>Wg,Grok1Tokenizer:()=>wI,HerbertTokenizer:()=>Xe,LlamaTokenizer:()=>gI,M2M100Tokenizer:()=>pI,MBart50Tokenizer:()=>tI,MBartTokenizer:()=>Xg,MPNetTokenizer:()=>Ug,MarianTokenizer:()=>yI,MgpstrTokenizer:()=>SA,MobileBertTokenizer:()=>Be,NllbTokenizer:()=>Sg,NougatTokenizer:()=>iA,PreTrainedTokenizer:()=>mA,Qwen2Tokenizer:()=>Dg,RoFormerTokenizer:()=>eg,RobertaTokenizer:()=>Hg,SiglipTokenizer:()=>We,SpeechT5Tokenizer:()=>O,SqueezeBertTokenizer:()=>og,T5Tokenizer:()=>rI,TokenizerModel:()=>X,VitsTokenizer:()=>aA,Wav2Vec2CTCTokenizer:()=>l,WhisperTokenizer:()=>YI,XLMRobertaTokenizer:()=>Kg,XLMTokenizer:()=>iI,is_chinese_char:()=>R});var I=e("./src/utils/generic.js"),i=e("./src/utils/core.js"),t=e("./src/utils/hub.js"),o=e("./src/utils/maths.js"),C=e("./src/utils/tensor.js"),s=e("./src/utils/data-structures.js"),Q=e("./node_modules/@huggingface/jinja/dist/index.js"),r=e("./src/models/whisper/common_whisper.js");async function B(BA,N){const P=await Promise.all([(0,t.getModelJSON)(BA,"tokenizer.json",!0,N),(0,t.getModelJSON)(BA,"tokenizer_config.json",!0,N)]);return N.legacy!==null&&(P[1].legacy=N.legacy),P}function a(BA,N){const P=[];let eA=0;for(const AA of BA.matchAll(N)){const lA=AA[0];eA0&&P.push(lA),eA=AA.index+lA.length}return eA=19968&&BA<=40959||BA>=13312&&BA<=19903||BA>=131072&&BA<=173791||BA>=173824&&BA<=177983||BA>=177984&&BA<=178207||BA>=178208&&BA<=183983||BA>=63744&&BA<=64255||BA>=194560&&BA<=195103}function w(BA,N,P){const eA=[];let AA=0;for(;AAthis.tokens_to_ids.get(P)??this.unk_token_id)}convert_ids_to_tokens(N){return N.map(P=>this.vocab[P]??this.unk_token)}}class gA extends X{constructor(N){super(N),this.tokens_to_ids=c(N.vocab),this.unk_token_id=this.tokens_to_ids.get(N.unk_token),this.unk_token=N.unk_token,this.max_input_chars_per_word=N.max_input_chars_per_word??100,this.vocab=new Array(this.tokens_to_ids.size);for(const[P,eA]of this.tokens_to_ids)this.vocab[eA]=P}encode(N){const P=[];for(const eA of N){const AA=[...eA];if(AA.length>this.max_input_chars_per_word){P.push(this.unk_token);continue}let lA=!1,NA=0;const VA=[];for(;NA0&&(qA=this.config.continuing_subword_prefix+qA),this.tokens_to_ids.has(qA)){ZA=qA;break}--$A}if(ZA===null){lA=!0;break}VA.push(ZA),NA=$A}lA?P.push(this.unk_token):P.push(...VA)}return P}}class x extends X{constructor(N,P){super(N);const eA=N.vocab.length;this.vocab=new Array(eA),this.scores=new Array(eA);for(let AA=0;AA[AA,lA])),this.bos_token=" ",this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=P.eos_token,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.unk_token=this.vocab[this.unk_token_id],this.minScore=(0,o.min)(this.scores)[0],this.unk_score=this.minScore-10,this.scores[this.unk_token_id]=this.unk_score,this.trie=new s.CharTrie,this.trie.extend(this.vocab),this.fuse_unk=!0}populateNodes(N){const P=N.chars,eA=1;let AA=0;for(;AA{const BA=[...Array.from({length:94},(AA,lA)=>lA+33),...Array.from({length:12},(AA,lA)=>lA+161),...Array.from({length:82},(AA,lA)=>lA+174)],N=BA.slice();let P=0;for(let AA=0;AA<256;++AA)BA.includes(AA)||(BA.push(AA),N.push(256+P),P+=1);const eA=N.map(AA=>String.fromCharCode(AA));return Object.fromEntries(BA.map((AA,lA)=>[AA,eA[lA]]))})(),Z=(0,i.reverseDictionary)(tA);class IA extends X{constructor(N){super(N),this.tokens_to_ids=c(N.vocab),this.unk_token_id=this.tokens_to_ids.get(N.unk_token),this.unk_token=N.unk_token,this.vocab=new Array(this.tokens_to_ids.size);for(const[eA,AA]of this.tokens_to_ids)this.vocab[AA]=eA;const P=Array.isArray(N.merges[0]);this.merges=P?N.merges:N.merges.map(eA=>eA.split(" ",2)),this.bpe_ranks=new Map(this.merges.map((eA,AA)=>[JSON.stringify(eA),AA])),this.end_of_word_suffix=N.end_of_word_suffix,this.continuing_subword_suffix=N.continuing_subword_suffix??null,this.byte_fallback=this.config.byte_fallback??!1,this.byte_fallback&&(this.text_encoder=new TextEncoder),this.ignore_merges=this.config.ignore_merges??!1,this.max_length_to_cache=256,this.cache_capacity=1e4,this.cache=new s.LRUCache(this.cache_capacity)}clear_cache(){this.cache.clear()}bpe(N){if(N.length===0)return[];const P=this.cache.get(N);if(P!==void 0)return P;const eA=Array.from(N);this.end_of_word_suffix&&(eA[eA.length-1]+=this.end_of_word_suffix);let AA=[];if(eA.length>1){const lA=new s.PriorityQueue(($A,ZA)=>$A.score`<0x${VA.toString(16).toUpperCase().padStart(2,"0")}>`);NA.every(VA=>this.tokens_to_ids.has(VA))?P.push(...NA):P.push(this.unk_token)}else P.push(this.unk_token)}return P}}class oA extends X{constructor(N,P){super(N),this.tokens_to_ids=c(P.target_lang?N.vocab[P.target_lang]:N.vocab),this.bos_token=P.bos_token,this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=P.eos_token,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.pad_token=P.pad_token,this.pad_token_id=this.tokens_to_ids.get(this.pad_token),this.unk_token=P.unk_token,this.unk_token_id=this.tokens_to_ids.get(this.unk_token),this.vocab=new Array(this.tokens_to_ids.size);for(const[eA,AA]of this.tokens_to_ids)this.vocab[AA]=eA}encode(N){return N}}class CA extends I.Callable{constructor(N){super(),this.config=N}static fromConfig(N){if(N===null)return null;switch(N.type){case"BertNormalizer":return new hA(N);case"Precompiled":return new Fe(N);case"Sequence":return new ge(N);case"Replace":return new DA(N);case"NFC":return new q(N);case"NFD":return new U(N);case"NFKC":return new z(N);case"NFKD":return new H(N);case"Strip":return new EA(N);case"StripAccents":return new xA(N);case"Lowercase":return new RA(N);case"Prepend":return new YA(N);default:throw new Error(`Unknown Normalizer type: ${N.type}`)}}normalize(N){throw Error("normalize should be implemented in subclass.")}_call(N){return this.normalize(N)}}class DA extends CA{normalize(N){const P=d(this.config.pattern);return P===null?N:N.replaceAll(P,this.config.content)}}class cA extends CA{form=void 0;normalize(N){return N=N.normalize(this.form),N}}class q extends cA{form="NFC"}class U extends cA{form="NFD"}class z extends cA{form="NFKC"}class H extends cA{form="NFKD"}class EA extends CA{normalize(N){return this.config.strip_left&&this.config.strip_right?N=N.trim():(this.config.strip_left&&(N=N.trimStart()),this.config.strip_right&&(N=N.trimEnd())),N}}class xA extends CA{normalize(N){return N=u(N),N}}class RA extends CA{normalize(N){return N=N.toLowerCase(),N}}class YA extends CA{normalize(N){return N=this.config.prepend+N,N}}class ge extends CA{constructor(N){super(N),this.normalizers=N.normalizers.map(P=>CA.fromConfig(P))}normalize(N){return this.normalizers.reduce((P,eA)=>eA.normalize(P),N)}}class hA extends CA{_tokenize_chinese_chars(N){const P=[];for(let eA=0;eAthis.pre_tokenize_text(eA,P)):this.pre_tokenize_text(N,P)).flat()}_call(N,P){return this.pre_tokenize(N,P)}}class dA extends j{constructor(N){super(),this.pattern=new RegExp(`[^\\s${D}]+|[${D}]`,"gu")}pre_tokenize_text(N,P){return N.trim().match(this.pattern)||[]}}class $ extends j{constructor(N){super(),this.config=N,this.add_prefix_space=this.config.add_prefix_space,this.trim_offsets=this.config.trim_offsets,this.use_regex=this.config.use_regex??!0,this.pattern=/'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+/gu,this.byte_encoder=tA,this.text_encoder=new TextEncoder}pre_tokenize_text(N,P){return this.add_prefix_space&&!N.startsWith(" ")&&(N=" "+N),(this.use_regex?N.match(this.pattern)||[]:[N]).map(AA=>Array.from(this.text_encoder.encode(AA),lA=>this.byte_encoder[lA]).join(""))}}class fA extends j{constructor(N){super(),this.config=N,this.pattern=d(this.config.pattern,this.config.invert)}pre_tokenize_text(N,P){return this.pattern===null?[]:this.config.invert?N.match(this.pattern)||[]:this.config.behavior?.toLowerCase()==="removed"?N.split(this.pattern).filter(eA=>eA):a(N,this.pattern)}}class FA extends j{constructor(N){super(),this.config=N,this.pattern=new RegExp(`[^${D}]+|[${D}]+`,"gu")}pre_tokenize_text(N,P){return N.match(this.pattern)||[]}}class LA extends j{constructor(N){super(),this.config=N;const P=`[^\\d]+|\\d${this.config.individual_digits?"":"+"}`;this.pattern=new RegExp(P,"gu")}pre_tokenize_text(N,P){return N.match(this.pattern)||[]}}class GA extends I.Callable{constructor(N){super(),this.config=N}static fromConfig(N){if(N===null)return null;switch(N.type){case"TemplateProcessing":return new jA(N);case"ByteLevel":return new Ce(N);case"RobertaProcessing":return new vA(N);case"BertProcessing":return new KA(N);case"Sequence":return new Ie(N);default:throw new Error(`Unknown PostProcessor type: ${N.type}`)}}post_process(N,...P){throw Error("post_process should be implemented in subclass.")}_call(N,...P){return this.post_process(N,...P)}}class KA extends GA{constructor(N){super(N),this.cls=N.cls[0],this.sep=N.sep[0]}post_process(N,P=null,{add_special_tokens:eA=!0}={}){eA&&(N=(0,i.mergeArrays)([this.cls],N,[this.sep]));let AA=new Array(N.length).fill(0);if(P!==null){const lA=eA&&this instanceof vA?[this.sep]:[],NA=eA?[this.sep]:[];N=(0,i.mergeArrays)(N,lA,P,NA),AA=(0,i.mergeArrays)(AA,new Array(P.length+lA.length+NA.length).fill(1))}return{tokens:N,token_type_ids:AA}}}class vA extends KA{}class jA extends GA{constructor(N){super(N),this.single=N.single,this.pair=N.pair}post_process(N,P=null,{add_special_tokens:eA=!0}={}){const AA=P===null?this.single:this.pair;let lA=[],NA=[];for(const VA of AA)"SpecialToken"in VA?eA&&(lA.push(VA.SpecialToken.id),NA.push(VA.SpecialToken.type_id)):"Sequence"in VA&&(VA.Sequence.id==="A"?(lA=(0,i.mergeArrays)(lA,N),NA=(0,i.mergeArrays)(NA,new Array(N.length).fill(VA.Sequence.type_id))):VA.Sequence.id==="B"&&(lA=(0,i.mergeArrays)(lA,P),NA=(0,i.mergeArrays)(NA,new Array(P.length).fill(VA.Sequence.type_id))));return{tokens:lA,token_type_ids:NA}}}class Ce extends GA{post_process(N,P=null){return P&&(N=(0,i.mergeArrays)(N,P)),{tokens:N}}}class Ie extends GA{constructor(N){super(N),this.processors=N.processors.map(P=>GA.fromConfig(P))}post_process(N,P=null,eA={}){let AA;for(const lA of this.processors)if(lA instanceof Ce)N=lA.post_process(N).tokens,P&&(P=lA.post_process(P).tokens);else{const NA=lA.post_process(N,P,eA);N=NA.tokens,AA=NA.token_type_ids}return{tokens:N,token_type_ids:AA}}}class JA extends I.Callable{constructor(N){super(),this.config=N,this.added_tokens=[],this.end_of_word_suffix=null,this.trim_offsets=N.trim_offsets}static fromConfig(N){if(N===null)return null;switch(N.type){case"WordPiece":return new Qe(N);case"Metaspace":return new Mg(N);case"ByteLevel":return new bA(N);case"Replace":return new XA(N);case"ByteFallback":return new PA(N);case"Fuse":return new ie(N);case"Strip":return new he(N);case"Sequence":return new Se(N);case"CTC":return new ae(N);case"BPEDecoder":return new Ag(N);default:throw new Error(`Unknown Decoder type: ${N.type}`)}}_call(N){return this.decode(N)}decode(N){return this.decode_chain(N).join("")}decode_chain(N){throw Error("`decode_chain` should be implemented in subclass.")}}class XA extends JA{decode_chain(N){const P=d(this.config.pattern);return P===null?N:N.map(eA=>eA.replaceAll(P,this.config.content))}}class PA extends JA{constructor(N){super(N),this.text_decoder=new TextDecoder}decode_chain(N){const P=[];let eA=[];for(const AA of N){let lA=null;if(AA.length===6&&AA.startsWith("<0x")&&AA.endsWith(">")){const NA=parseInt(AA.slice(3,5),16);isNaN(NA)||(lA=NA)}if(lA!==null)eA.push(lA);else{if(eA.length>0){const NA=this.text_decoder.decode(Uint8Array.from(eA));P.push(NA),eA=[]}P.push(AA)}}if(eA.length>0){const AA=this.text_decoder.decode(Uint8Array.from(eA));P.push(AA),eA=[]}return P}}class ie extends JA{decode_chain(N){return[N.join("")]}}class he extends JA{constructor(N){super(N),this.content=this.config.content,this.start=this.config.start,this.stop=this.config.stop}decode_chain(N){return N.map(P=>{let eA=0;for(let lA=0;lA(eA!==0&&(P.startsWith(this.config.prefix)?P=P.replace(this.config.prefix,""):P=" "+P),this.cleanup&&(P=L(P)),P))}}class bA extends JA{constructor(N){super(N),this.byte_decoder=Z,this.text_decoder=new TextDecoder("utf-8",{fatal:!1,ignoreBOM:!0}),this.end_of_word_suffix=null}convert_tokens_to_string(N){const P=N.join(""),eA=new Uint8Array([...P].map(lA=>this.byte_decoder[lA]));return this.text_decoder.decode(eA)}decode_chain(N){const P=[];let eA=[];for(const AA of N)this.added_tokens.find(lA=>lA.content===AA)!==void 0?(eA.length>0&&(P.push(this.convert_tokens_to_string(eA)),eA=[]),P.push(AA)):eA.push(AA);return eA.length>0&&P.push(this.convert_tokens_to_string(eA)),P}}class ae extends JA{constructor(N){super(N),this.pad_token=this.config.pad_token,this.word_delimiter_token=this.config.word_delimiter_token,this.cleanup=this.config.cleanup}convert_tokens_to_string(N){if(N.length===0)return"";const P=[N[0]];for(let lA=1;lAlA!==this.pad_token).join("");return this.cleanup&&(AA=L(AA).replaceAll(this.word_delimiter_token," ").trim()),AA}decode_chain(N){return[this.convert_tokens_to_string(N)]}}class Se extends JA{constructor(N){super(N),this.decoders=N.decoders.map(P=>JA.fromConfig(P))}decode_chain(N){return this.decoders.reduce((P,eA)=>eA.decode_chain(P),N)}}class Ag extends JA{constructor(N){super(N),this.suffix=this.config.suffix}decode_chain(N){return N.map((P,eA)=>P.replaceAll(this.suffix,eA===N.length-1?"":" "))}}class Ye extends JA{decode_chain(N){let P="";for(let eA=1;eAeA.normalize("NFKC")).join("~"):N=N.normalize("NFKC"),N}}class ye extends j{constructor(N){super(),this.tokenizers=N.pretokenizers.map(P=>j.fromConfig(P))}pre_tokenize_text(N,P){return this.tokenizers.reduce((eA,AA)=>AA.pre_tokenize(eA,P),[N])}}class b extends j{constructor(N){super()}pre_tokenize_text(N,P){return N.match(/\w+|[^\w\s]+/g)||[]}}class QA extends j{constructor(N){super()}pre_tokenize_text(N,P){return y(N)}}class v extends j{constructor(N){super(),this.config=N,this.pattern=d(this.config.pattern),this.content=this.config.content}pre_tokenize_text(N,P){return this.pattern===null?[N]:[N.replaceAll(this.pattern,this.config.content)]}}const sA=["bos_token","eos_token","unk_token","sep_token","pad_token","cls_token","mask_token"];function wA(BA,N,P,eA){for(const AA of Object.keys(BA)){const lA=N-BA[AA].length,NA=P(AA),VA=new Array(lA).fill(NA);BA[AA]=eA==="right"?(0,i.mergeArrays)(BA[AA],VA):(0,i.mergeArrays)(VA,BA[AA])}}function TA(BA,N){for(const P of Object.keys(BA))BA[P].length=N}class mA extends I.Callable{return_token_type_ids=!1;padding_side="right";constructor(N,P){super(),this._tokenizer_config=P,this.normalizer=CA.fromConfig(N.normalizer),this.pre_tokenizer=j.fromConfig(N.pre_tokenizer),this.model=X.fromConfig(N.model,P),this.post_processor=GA.fromConfig(N.post_processor),this.decoder=JA.fromConfig(N.decoder),this.special_tokens=[],this.all_special_ids=[],this.added_tokens=[];for(const eA of N.added_tokens){const AA=new T(eA);this.added_tokens.push(AA),this.model.tokens_to_ids.set(AA.content,AA.id),this.model.vocab[AA.id]=AA.content,AA.special&&(this.special_tokens.push(AA.content),this.all_special_ids.push(AA.id))}if(this.additional_special_tokens=P.additional_special_tokens??[],this.special_tokens.push(...this.additional_special_tokens),this.special_tokens=[...new Set(this.special_tokens)],this.decoder&&(this.decoder.added_tokens=this.added_tokens,this.decoder.end_of_word_suffix=this.model.end_of_word_suffix),this.added_tokens_splitter=new s.DictionarySplitter(this.added_tokens.map(eA=>eA.content)),this.added_tokens_map=new Map(this.added_tokens.map(eA=>[eA.content,eA])),this.mask_token=this.getToken("mask_token"),this.mask_token_id=this.model.tokens_to_ids.get(this.mask_token),this.pad_token=this.getToken("pad_token","eos_token"),this.pad_token_id=this.model.tokens_to_ids.get(this.pad_token),this.sep_token=this.getToken("sep_token"),this.sep_token_id=this.model.tokens_to_ids.get(this.sep_token),this.unk_token=this.getToken("unk_token"),this.unk_token_id=this.model.tokens_to_ids.get(this.unk_token),this.bos_token=this.getToken("bos_token"),this.bos_token_id=this.model.tokens_to_ids.get(this.bos_token),this.eos_token=this.getToken("eos_token"),this.eos_token_id=this.model.tokens_to_ids.get(this.eos_token),this.model_max_length=P.model_max_length,this.remove_space=P.remove_space,this.clean_up_tokenization_spaces=P.clean_up_tokenization_spaces??!0,this.do_lowercase_and_remove_accent=P.do_lowercase_and_remove_accent??!1,P.padding_side&&(this.padding_side=P.padding_side),this.legacy=!1,this.chat_template=P.chat_template??null,Array.isArray(this.chat_template)){const eA=Object.create(null);for(const{name:AA,template:lA}of this.chat_template){if(typeof AA!="string"||typeof lA!="string")throw new Error('Chat template must be a list of objects with "name" and "template" properties');eA[AA]=lA}this.chat_template=eA}this._compiled_template_cache=new Map}getToken(...N){for(const P of N){const eA=this._tokenizer_config[P];if(eA)if(typeof eA=="object"){if(eA.__type==="AddedToken")return eA.content;throw Error(`Unknown token: ${eA}`)}else return eA}return null}static async from_pretrained(N,{progress_callback:P=null,config:eA=null,cache_dir:AA=null,local_files_only:lA=!1,revision:NA="main",legacy:VA=null}={}){const $A=await B(N,{progress_callback:P,config:eA,cache_dir:AA,local_files_only:lA,revision:NA,legacy:VA});return new this(...$A)}_call(N,{text_pair:P=null,add_special_tokens:eA=!0,padding:AA=!1,truncation:lA=null,max_length:NA=null,return_tensor:VA=!0,return_token_type_ids:$A=null}={}){const ZA=Array.isArray(N);let qA;if(ZA){if(N.length===0)throw Error("text array must be non-empty");if(P!==null){if(Array.isArray(P)){if(N.length!==P.length)throw Error("text and text_pair must have the same length")}else throw Error("text_pair must also be an array");qA=N.map((we,He)=>this._encode_plus(we,{text_pair:P[He],add_special_tokens:eA,return_token_type_ids:$A}))}else qA=N.map(we=>this._encode_plus(we,{add_special_tokens:eA,return_token_type_ids:$A}))}else{if(N==null)throw Error("text may not be null or undefined");if(Array.isArray(P))throw Error("When specifying `text_pair`, since `text` is a string, `text_pair` must also be a string (i.e., not an array).");qA=[this._encode_plus(N,{text_pair:P,add_special_tokens:eA,return_token_type_ids:$A})]}if(NA===null?NA=this.model_max_length:lA===null&&(AA===!0?(console.warn("`max_length` is ignored when `padding: true` and there is no truncation strategy. To pad to max length, use `padding: 'max_length'`."),NA=this.model_max_length):AA===!1&&(console.warn("Truncation was not explicitly activated but `max_length` is provided a specific value, please use `truncation: true` to explicitly truncate examples to max length."),lA=!0)),AA===!0&&(NA=Math.min((0,o.max)(qA.map(we=>we.input_ids.length))[0],NA??1/0)),NA=Math.min(NA,this.model_max_length??1/0),AA||lA)for(let we=0;weNA?lA&&TA(qA[we],NA):AA&&wA(qA[we],NA,He=>He==="input_ids"?this.pad_token_id:0,this.padding_side));const Re={};if(VA){if(!(AA&&lA)&&qA.some(He=>{for(const be of Object.keys(He))if(He[be].length!==qA[0][be]?.length)return!0;return!1}))throw Error("Unable to create tensor, you should probably activate truncation and/or padding with 'padding=true' and 'truncation=true' to have batched tensors with the same length.");const we=[qA.length,qA[0].input_ids.length];for(const He of Object.keys(qA[0]))Re[He]=new C.Tensor("int64",BigInt64Array.from(qA.flatMap(be=>be[He]).map(BigInt)),we)}else{for(const we of Object.keys(qA[0]))Re[we]=qA.map(He=>He[we]);if(!ZA)for(const we of Object.keys(Re))Re[we]=Re[we][0]}return Re}_encode_text(N){if(N===null)return null;const P=this.added_tokens_splitter.split(N);for(let AA=0;AA0&&(P[AA-1]=P[AA-1].trimEnd()),lA.rstrip&&AA{if(AA.length===0)return[];if(this.added_tokens_map.has(AA))return[AA];if(this.remove_space===!0&&(AA=AA.trim().split(/\s+/).join(" ")),this.do_lowercase_and_remove_accent&&(AA=h(AA)),this.normalizer!==null&&(AA=this.normalizer(AA)),AA.length===0)return[];const NA=this.pre_tokenizer!==null?this.pre_tokenizer(AA,{section_index:lA}):[AA];return this.model(NA)})}_encode_plus(N,{text_pair:P=null,add_special_tokens:eA=!0,return_token_type_ids:AA=null}={}){const{tokens:lA,token_type_ids:NA}=this._tokenize_helper(N,{pair:P,add_special_tokens:eA}),VA=this.model.convert_tokens_to_ids(lA),$A={input_ids:VA,attention_mask:new Array(VA.length).fill(1)};return(AA??this.return_token_type_ids)&&NA&&($A.token_type_ids=NA),$A}_tokenize_helper(N,{pair:P=null,add_special_tokens:eA=!1}={}){const AA=this._encode_text(N),lA=this._encode_text(P);return this.post_processor?this.post_processor(AA,lA,{add_special_tokens:eA}):{tokens:(0,i.mergeArrays)(AA??[],lA??[])}}tokenize(N,{pair:P=null,add_special_tokens:eA=!1}={}){return this._tokenize_helper(N,{pair:P,add_special_tokens:eA}).tokens}encode(N,{text_pair:P=null,add_special_tokens:eA=!0,return_token_type_ids:AA=null}={}){return this._encode_plus(N,{text_pair:P,add_special_tokens:eA,return_token_type_ids:AA}).input_ids}batch_decode(N,P={}){return N instanceof C.Tensor&&(N=N.tolist()),N.map(eA=>this.decode(eA,P))}decode(N,P={}){if(N instanceof C.Tensor&&(N=F(N)),!Array.isArray(N)||N.length===0||!(0,i.isIntegralNumber)(N[0]))throw Error("token_ids must be a non-empty array of integers.");return this.decode_single(N,P)}decode_single(N,{skip_special_tokens:P=!1,clean_up_tokenization_spaces:eA=null}){let AA=this.model.convert_ids_to_tokens(N);P&&(AA=AA.filter(NA=>!this.special_tokens.includes(NA)));let lA=this.decoder?this.decoder(AA):AA.join(" ");return this.decoder&&this.decoder.end_of_word_suffix&&(lA=lA.replaceAll(this.decoder.end_of_word_suffix," "),P&&(lA=lA.trim())),(eA??this.clean_up_tokenization_spaces)&&(lA=L(lA)),lA}get_chat_template({chat_template:N=null,tools:P=null}={}){if(this.chat_template&&typeof this.chat_template=="object"){const eA=this.chat_template;if(N!==null&&Object.hasOwn(eA,N))N=eA[N];else if(N===null)if(P!==null&&"tool_use"in eA)N=eA.tool_use;else if("default"in eA)N=eA.default;else throw Error(`This model has multiple chat templates with no default specified! Please either pass a chat template or the name of the template you wish to use to the 'chat_template' argument. Available template names are ${Object.keys(eA).sort()}.`)}else if(N===null)if(this.chat_template)N=this.chat_template;else throw Error("Cannot use apply_chat_template() because tokenizer.chat_template is not set and no template argument was passed! For information about writing templates and setting the tokenizer.chat_template attribute, please see the documentation at https://huggingface.co/docs/transformers/main/en/chat_templating");return N}apply_chat_template(N,{tools:P=null,documents:eA=null,chat_template:AA=null,add_generation_prompt:lA=!1,tokenize:NA=!0,padding:VA=!1,truncation:$A=!1,max_length:ZA=null,return_tensor:qA=!0,return_dict:Re=!1,tokenizer_kwargs:we={},...He}={}){if(AA=this.get_chat_template({chat_template:AA,tools:P}),typeof AA!="string")throw Error(`chat_template must be a string, but got ${typeof AA}`);let be=this._compiled_template_cache.get(AA);be===void 0&&(be=new Q.Template(AA),this._compiled_template_cache.set(AA,be));const Eg=Object.create(null);for(const Ze of sA){const ug=this.getToken(Ze);ug&&(Eg[Ze]=ug)}const yg=be.render({messages:N,add_generation_prompt:lA,tools:P,documents:eA,...Eg,...He});if(NA){const Ze=this._call(yg,{add_special_tokens:!1,padding:VA,truncation:$A,max_length:ZA,return_tensor:qA,...we});return Re?Ze:Ze.input_ids}return yg}}class k extends mA{return_token_type_ids=!0}class te extends mA{return_token_type_ids=!0}class Be extends mA{return_token_type_ids=!0}class og extends mA{return_token_type_ids=!0}class Je extends mA{return_token_type_ids=!0}class Bg extends mA{return_token_type_ids=!0}class Xe extends mA{return_token_type_ids=!0}class Tg extends mA{return_token_type_ids=!0}class eg extends mA{return_token_type_ids=!0}class Lg extends mA{}class eI extends mA{}class iI extends mA{return_token_type_ids=!0;constructor(N,P){super(N,P),console.warn('WARNING: `XLMTokenizer` is not yet supported by Hugging Face\'s "fast" tokenizers library. Therefore, you may experience slightly inaccurate results.')}}class $g extends mA{return_token_type_ids=!0}class rI extends mA{}class Fg extends mA{}class EI extends mA{}class Xg extends mA{constructor(N,P){super(N,P),this.languageRegex=/^[a-z]{2}_[A-Z]{2}$/,this.language_codes=this.special_tokens.filter(eA=>this.languageRegex.test(eA)),this.lang_to_token=eA=>eA}_build_translation_inputs(N,P,eA){return ag(this,N,P,eA)}}class tI extends Xg{}class Hg extends mA{}class uI extends mA{}const Ig="▁";class gI extends mA{padding_side="left";constructor(N,P){super(N,P),this.legacy=P.legacy??!0,this.legacy||(this.normalizer=null,this.pre_tokenizer=new gg({replacement:Ig,add_prefix_space:!0,prepend_scheme:"first"}))}_encode_text(N){if(N===null)return null;if(this.legacy||N.length===0)return super._encode_text(N);let P=super._encode_text(Ig+N.replaceAll(Ig," "));return P.length>1&&P[0]===Ig&&this.special_tokens.includes(P[1])&&(P=P.slice(1)),P}}class II extends mA{}class Kg extends mA{}class Ug extends mA{}class HA extends mA{}class Ae extends mA{}class le extends mA{}class Dg extends mA{}class Wg extends mA{}class wI extends mA{}function ag(BA,N,P,eA){if(!("language_codes"in BA)||!Array.isArray(BA.language_codes))throw new Error("Tokenizer must have `language_codes` attribute set and it should be an array of language ids.");if(!("languageRegex"in BA)||!(BA.languageRegex instanceof RegExp))throw new Error("Tokenizer must have `languageRegex` attribute set and it should be a regular expression.");if(!("lang_to_token"in BA)||typeof BA.lang_to_token!="function")throw new Error("Tokenizer must have `lang_to_token` attribute set and it should be a function.");const AA=eA.src_lang,lA=eA.tgt_lang;if(!BA.language_codes.includes(lA))throw new Error(`Target language code "${lA}" is not valid. Must be one of: {${BA.language_codes.join(", ")}}`);if(AA!==void 0){if(!BA.language_codes.includes(AA))throw new Error(`Source language code "${AA}" is not valid. Must be one of: {${BA.language_codes.join(", ")}}`);for(const NA of BA.post_processor.config.single)if("SpecialToken"in NA&&BA.languageRegex.test(NA.SpecialToken.id)){NA.SpecialToken.id=BA.lang_to_token(AA);break}}return eA.forced_bos_token_id=BA.model.convert_tokens_to_ids([BA.lang_to_token(lA)])[0],BA._call(N,P)}class Sg extends mA{constructor(N,P){super(N,P),this.languageRegex=/^[a-z]{3}_[A-Z][a-z]{3}$/,this.language_codes=this.special_tokens.filter(eA=>this.languageRegex.test(eA)),this.lang_to_token=eA=>eA}_build_translation_inputs(N,P,eA){return ag(this,N,P,eA)}}class pI extends mA{constructor(N,P){super(N,P),this.languageRegex=/^__[a-z]{2,3}__$/,this.language_codes=this.special_tokens.filter(eA=>this.languageRegex.test(eA)).map(eA=>eA.slice(2,-2)),this.lang_to_token=eA=>`__${eA}__`}_build_translation_inputs(N,P,eA){return ag(this,N,P,eA)}}class YI extends mA{get timestamp_begin(){return this.model.convert_tokens_to_ids(["<|notimestamps|>"])[0]+1}_decode_asr(N,{return_timestamps:P=!1,return_language:eA=!1,time_precision:AA=null,force_full_sequences:lA=!0}={}){if(AA===null)throw Error("Must specify time_precision");let NA=null;const VA=P==="word";function $A(){return{language:NA,timestamp:[null,null],text:""}}const ZA=[];let qA=$A(),Re=0;const we=this.timestamp_begin,be=we+1500;let Eg=[],yg=[],Ze=!1,ug=null;const JI=new Set(this.all_special_ids);for(const ig of N){const Rg=ig.tokens,Pg=VA?ig.token_timestamps:null;let oI=null,nI=we;if("stride"in ig){const[Gg,dg,rg]=ig.stride;if(Re-=dg,ug=Gg-rg,dg&&(nI=dg/AA+we),rg)for(let wg=Rg.length-1;wg>=0;--wg){const jg=Number(Rg[wg]);if(jg>=we){if(oI!==null&&(jg-we)*AA=we&&dg<=be){const rg=(dg-we)*AA+Re,wg=(0,o.round)(rg,2);if(oI!==null&&dg>=oI)Ze=!0;else if(Ze||Eg.length>0&&dg0?(Eg.push(vg),VA&&yg.push(Jg)):Eg.every(Gg=>Gg.length===0)&&(qA=$A(),Eg=[],vg=[],yg=[],Jg=[])}if(Eg.length>0){if(lA&&P)throw new Error("Whisper did not predict an ending timestamp, which can happen if audio is cut off in the middle of a word. Also make sure WhisperTimeStampLogitsProcessor was used during generation.");const[ig,Rg]=this.findLongestCommonSequence(Eg,yg),Pg=this.decode(ig);qA.text=Pg,VA&&(qA.words=this.collateWordTimestamps(ig,Rg,NA)),ZA.push(qA)}let Ng=Object.create(null);const fI=ZA.map(ig=>ig.text).join("");if(P||eA){for(let ig=0;ig0;let VA=NA?[]:null,$A=NA?P[0]:null;for(let ZA=1;ZAdg===nI[rg]&&$A[fI+rg]<=P[ZA][Pg+rg]).length:vg=Rg.filter((dg,rg)=>dg===nI[rg]).length;const Jg=Ng/1e4,Gg=vg/Ng+Jg;vg>1&&Gg>Re&&(Re=Gg,we=[fI,ig,Pg,oI])}const[be,Eg,yg,Ze]=we,ug=Math.floor((Eg+be)/2),JI=Math.floor((Ze+yg)/2);lA.push(...eA.slice(0,ug)),eA=qA.slice(JI),AA=eA.length,NA&&(VA.push(...$A.slice(0,ug)),$A=P[ZA].slice(JI))}return lA.push(...eA),NA?(VA.push(...$A),[lA,VA]):[lA,[]]}collateWordTimestamps(N,P,eA){const[AA,lA,NA]=this.combineTokensIntoWords(N,eA),VA=[];for(let $A=0;$A=AA){const VA=((NA-AA)*eA).toFixed(2);lA.push(`<|${VA}|>`),lA.push([])}else lA[lA.length-1].push(NA);return lA=lA.map(NA=>typeof NA=="string"?NA:super.decode(NA,P)),lA.join("")}splitTokensOnUnicode(N){const P=this.decode(N,{decode_with_timestamps:!0}),eA="�",AA=[],lA=[],NA=[];let VA=[],$A=[],ZA=0;for(let qA=0;qA=this.model.tokens_to_ids.get("<|endoftext|>"),be=qA.startsWith(" "),Eg=qA.trim(),yg=$A.test(Eg);if(He||be||yg||lA.length===0)lA.push(qA),NA.push(Re),VA.push(we);else{const Ze=lA.length-1;lA[Ze]+=qA,NA[Ze].push(...Re),VA[Ze].push(...we)}}return[lA,NA,VA]}mergePunctuations(N,P,eA,AA,lA){const NA=structuredClone(N),VA=structuredClone(P),$A=structuredClone(eA);let ZA=NA.length-2,qA=NA.length-1;for(;ZA>=0;)NA[ZA].startsWith(" ")&&AA.includes(NA[ZA].trim())?(NA[qA]=NA[ZA]+NA[qA],VA[qA]=(0,i.mergeArrays)(VA[ZA],VA[qA]),$A[qA]=(0,i.mergeArrays)($A[ZA],$A[qA]),NA[ZA]="",VA[ZA]=[],$A[ZA]=[]):qA=ZA,--ZA;for(ZA=0,qA=1;qARe),VA.filter(Re=>Re.length>0),$A.filter(Re=>Re.length>0)]}}class TI extends mA{}class CI extends mA{}class We extends mA{}class yI extends mA{constructor(N,P){super(N,P),this.languageRegex=/^(>>\w+<<)\s*/g,this.supported_language_codes=this.model.vocab.filter(eA=>this.languageRegex.test(eA)),console.warn('WARNING: `MarianTokenizer` is not yet supported by Hugging Face\'s "fast" tokenizers library. Therefore, you may experience slightly inaccurate results.')}_encode_text(N){if(N===null)return null;const[P,...eA]=N.trim().split(this.languageRegex);if(eA.length===0)return super._encode_text(P);if(eA.length===2){const[AA,lA]=eA;return this.supported_language_codes.includes(AA)||console.warn(`Unsupported language code "${AA}" detected, which may lead to unexpected behavior. Should be one of: ${JSON.stringify(this.supported_language_codes)}`),(0,i.mergeArrays)([AA],super._encode_text(lA))}}}class l extends mA{}class S extends mA{}class K extends mA{}class O extends mA{}class iA extends mA{}class aA extends mA{constructor(N,P){super(N,P),this.decoder=new Ye({})}}class uA extends mA{}class SA extends mA{}class se{static TOKENIZER_CLASS_MAPPING={T5Tokenizer:rI,DistilBertTokenizer:Lg,CamembertTokenizer:eI,DebertaTokenizer:Je,DebertaV2Tokenizer:Bg,BertTokenizer:k,HerbertTokenizer:Xe,ConvBertTokenizer:Tg,RoFormerTokenizer:eg,XLMTokenizer:iI,ElectraTokenizer:$g,MobileBertTokenizer:Be,SqueezeBertTokenizer:og,AlbertTokenizer:te,GPT2Tokenizer:Fg,BartTokenizer:EI,MBartTokenizer:Xg,MBart50Tokenizer:tI,RobertaTokenizer:Hg,WhisperTokenizer:YI,CodeGenTokenizer:TI,CLIPTokenizer:CI,SiglipTokenizer:We,MarianTokenizer:yI,BloomTokenizer:uI,NllbTokenizer:Sg,M2M100Tokenizer:pI,LlamaTokenizer:gI,CodeLlamaTokenizer:II,XLMRobertaTokenizer:Kg,MPNetTokenizer:Ug,FalconTokenizer:HA,GPTNeoXTokenizer:Ae,EsmTokenizer:le,Wav2Vec2CTCTokenizer:l,BlenderbotTokenizer:S,BlenderbotSmallTokenizer:K,SpeechT5Tokenizer:O,NougatTokenizer:iA,VitsTokenizer:aA,Qwen2Tokenizer:Dg,GemmaTokenizer:Wg,Grok1Tokenizer:wI,CohereTokenizer:uA,MgpstrTokenizer:SA,PreTrainedTokenizer:mA};static async from_pretrained(N,{progress_callback:P=null,config:eA=null,cache_dir:AA=null,local_files_only:lA=!1,revision:NA="main",legacy:VA=null}={}){const[$A,ZA]=await B(N,{progress_callback:P,config:eA,cache_dir:AA,local_files_only:lA,revision:NA,legacy:VA}),qA=ZA.tokenizer_class?.replace(/Fast$/,"")??"PreTrainedTokenizer";let Re=this.TOKENIZER_CLASS_MAPPING[qA];return Re||(console.warn(`Unknown tokenizer class "${qA}", attempting to construct from base class.`),Re=mA),new Re($A,ZA)}}},"./src/utils/audio.js":(A,g,e)=>{e.r(g),e.d(g,{RawAudio:()=>gA,hamming:()=>a,hanning:()=>B,mel_filter_bank:()=>R,read_audio:()=>Q,spectrogram:()=>G,window_function:()=>J});var I=e("./src/utils/hub.js"),i=e("./src/utils/maths.js"),t=e("./src/utils/core.js"),o=e("./src/env.js"),C=e("?7a2c"),s=e("./src/utils/tensor.js");async function Q(x,tA){if(typeof AudioContext>"u")throw Error("Unable to load audio from path/URL since `AudioContext` is not available in your environment. Instead, audio data should be passed directly to the pipeline/processor. For more information and some example code, see https://huggingface.co/docs/transformers.js/guides/node-audio-processing.");const Z=await(await(0,I.getFile)(x)).arrayBuffer(),IA=new AudioContext({sampleRate:tA});typeof tA>"u"&&console.warn(`No sampling rate provided, using default of ${IA.sampleRate}Hz.`);const oA=await IA.decodeAudioData(Z);let CA;if(oA.numberOfChannels===2){const DA=Math.sqrt(2),cA=oA.getChannelData(0),q=oA.getChannelData(1);CA=new Float32Array(cA.length);for(let U=0;U2595*Math.log10(1+x/700),kaldi:x=>1127*Math.log(1+x/700),slaney:(x,tA=1e3,Z=15,IA=27/Math.log(6.4))=>x>=tA?Z+Math.log(x/tA)*IA:3*x/200};function c(x,tA="htk"){const Z=d[tA];if(!Z)throw new Error('mel_scale should be one of "htk", "slaney" or "kaldi".');return typeof x=="number"?Z(x):x.map(IA=>Z(IA))}const F={htk:x=>700*(10**(x/2595)-1),kaldi:x=>700*(Math.exp(x/1127)-1),slaney:(x,tA=1e3,Z=15,IA=Math.log(6.4)/27)=>x>=Z?tA*Math.exp(IA*(x-Z)):200*x/3};function L(x,tA="htk"){const Z=F[tA];if(!Z)throw new Error('mel_scale should be one of "htk", "slaney" or "kaldi".');return typeof x=="number"?Z(x):x.map(IA=>Z(IA))}function u(x,tA){const Z=Float64Array.from({length:tA.length-1},(DA,cA)=>tA[cA+1]-tA[cA]),IA=Array.from({length:x.length},()=>new Array(tA.length));for(let DA=0;DAnew Array(x.length));for(let DA=0;DAx+IA*CA)}function R(x,tA,Z,IA,oA,CA=null,DA="htk",cA=!1){if(CA!==null&&CA!=="slaney")throw new Error('norm must be one of null or "slaney"');if(x<2)throw new Error(`Require num_frequency_bins: ${x} >= 2`);if(Z>IA)throw new Error(`Require min_frequency: ${Z} <= max_frequency: ${IA}`);const q=c(Z,DA),U=c(IA,DA),z=h(q,U,tA+2);let H=L(z,DA),EA;if(cA){const RA=oA/((x-1)*2);EA=c(Float64Array.from({length:x},(YA,ge)=>ge*RA),DA),H=z}else EA=h(0,Math.floor(oA/2),x);const xA=u(EA,H);if(CA!==null&&CA==="slaney")for(let RA=0;RAoA)throw Error(`frame_length (${Z}) may not be larger than fft_length (${oA})`);if(fA!==Z)throw new Error(`Length of the window (${fA}) must equal frame_length (${Z})`);if(IA<=0)throw new Error("hop_length must be greater than zero");if(CA===null&&z!==null)throw new Error("You have provided `mel_filters` but `power` is `None`. Mel spectrogram computation is not yet supported for complex-valued spectrogram. Specify `power` to fix this issue.");if(DA){if(cA!=="reflect")throw new Error(`pad_mode="${cA}" not implemented yet.`);const ie=Math.floor((oA-1)/2)+1;x=w(x,ie,ie)}let FA=Math.floor(1+Math.floor((x.length-Z)/IA));hA!==null&&FAFA?dA&&(KA=j):KA=GA=j);const vA=new i.FFT(oA),jA=new Float64Array(oA),Ce=new Float64Array(vA.outputBufferSize),Ie=new Float32Array(LA*KA);for(let ie=0;ie=1;--bA)jA[bA]-=U*jA[bA-1];jA[0]*=1-U}for(let bA=0;bAMath.pow(cA,.85));break;default:throw new Error(`Unknown window type ${tA}.`)}if(Z&&(DA=DA.subarray(0,x)),IA===null)return DA;if(x>IA)throw new Error(`Length of the window (${x}) may not be larger than frame_length (${IA})`);return DA}function T(x,tA){let Z=44;const IA=new ArrayBuffer(Z+x.length*4),oA=new DataView(IA);X(oA,0,"RIFF"),oA.setUint32(4,36+x.length*4,!0),X(oA,8,"WAVE"),X(oA,12,"fmt "),oA.setUint32(16,16,!0),oA.setUint16(20,3,!0),oA.setUint16(22,1,!0),oA.setUint32(24,tA,!0),oA.setUint32(28,tA*4,!0),oA.setUint16(32,4,!0),oA.setUint16(34,32,!0),X(oA,36,"data"),oA.setUint32(40,x.length*4,!0);for(let CA=0;CA{let CA=await oA.arrayBuffer();C.writeFileSync(IA,Buffer.from(CA))};else throw new Error("Unable to save because filesystem is disabled in this environment.");await Z(tA,this.toBlob())}}},"./src/utils/constants.js":(A,g,e)=>{e.r(g),e.d(g,{CHAT_TEMPLATE_NAME:()=>s,CONFIG_NAME:()=>i,FEATURE_EXTRACTOR_NAME:()=>t,GENERATION_CONFIG_NAME:()=>Q,GITHUB_ISSUE_URL:()=>I,IMAGE_PROCESSOR_NAME:()=>o,PROCESSOR_NAME:()=>C});const I="https://github.com/huggingface/transformers.js/issues/new/choose",i="config.json",t="preprocessor_config.json",o=t,C="processor_config.json",s="chat_template.json",Q="generation_config.json"},"./src/utils/core.js":(A,g,e)=>{e.r(g),e.d(g,{calculateDimensions:()=>Q,calculateReflectOffset:()=>d,count:()=>u,dispatchCallback:()=>I,escapeRegExp:()=>t,isIntegralNumber:()=>C,isNullishDimension:()=>s,isTypedArray:()=>o,len:()=>L,mergeArrays:()=>B,pick:()=>F,pop:()=>r,product:()=>a,reverseDictionary:()=>i,saveBlob:()=>c});function I(h,R){h&&h(R)}function i(h){return Object.fromEntries(Object.entries(h).map(([R,w])=>[w,R]))}function t(h){return h.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function o(h){return h?.prototype?.__proto__?.constructor?.name==="TypedArray"}function C(h){return Number.isInteger(h)||typeof h=="bigint"}function s(h){return h==null||h===-1}function Q(h){const R=[];let w=h;for(;Array.isArray(w);)R.push(w.length),w=w[0];return R}function r(h,R,w=void 0){const y=h[R];if(y!==void 0)return delete h[R],y;if(w===void 0)throw Error(`Key ${R} does not exist in object.`);return w}function B(...h){return Array.prototype.concat.apply([],h)}function a(...h){return h.reduce((R,w)=>R.flatMap(y=>w.map(D=>[y,D])))}function d(h,R){return Math.abs((h+R)%(2*R)-R)}function c(h,R){const w=URL.createObjectURL(R),y=document.createElement("a");y.href=w,y.download=h,y.click(),y.remove(),URL.revokeObjectURL(w)}function F(h,R){return Object.assign({},...R.map(w=>{if(h[w]!==void 0)return{[w]:h[w]}}))}function L(h){let R=0;for(const w of h)++R;return R}function u(h,R){let w=0;for(const y of h)y===R&&++w;return w}},"./src/utils/data-structures.js":(A,g,e)=>{e.r(g),e.d(g,{CharTrie:()=>i,DictionarySplitter:()=>s,LRUCache:()=>Q,PriorityQueue:()=>I,TokenLattice:()=>o});class I{constructor(B=(d,c)=>d>c,a=1/0){this._heap=[],this._comparator=B,this._maxSize=a}get size(){return this._heap.length}isEmpty(){return this.size===0}peek(){return this._heap[0]}push(...B){return this.extend(B)}extend(B){for(const a of B)if(this.size0&&this._swap(0,a),this._heap.pop(),this._siftDown(),B}replace(B){const a=this.peek();return this._heap[0]=B,this._siftDown(),a}_parent(B){return(B+1>>>1)-1}_left(B){return(B<<1)+1}_right(B){return B+1<<1}_greater(B,a){return this._comparator(this._heap[B],this._heap[a])}_swap(B,a){const d=this._heap[B];this._heap[B]=this._heap[a],this._heap[a]=d}_siftUp(){this._siftUpFrom(this.size-1)}_siftUpFrom(B){for(;B>0&&this._greater(B,this._parent(B));)this._swap(B,this._parent(B)),B=this._parent(B)}_siftDown(){let B=0;for(;this._left(B)[]),this.endNodes=Array.from({length:this.len+1},()=>[]);const c=new C(this.bosTokenId,0,0,0,0),F=new C(this.eosTokenId,1,this.len,0,0);this.nodes.push(c.clone()),this.nodes.push(F.clone()),this.beginNodes[this.len].push(F),this.endNodes[0].push(c)}insert(B,a,d,c){const F=this.nodes.length,L=new C(c,F,B,a,d);this.beginNodes[B].push(L),this.endNodes[B+a].push(L),this.nodes.push(L)}viterbi(){const B=this.len;let a=0;for(;a<=B;){if(this.beginNodes[a].length==0)return[];for(let u of this.beginNodes[a]){u.prev=null;let h=0,R=null;for(let w of this.endNodes[a]){const y=w.backtraceScore+u.score;(R===null||y>h)&&(R=w.clone(),h=y)}if(R!==null)u.prev=R,u.backtraceScore=h;else return[]}++a}const d=[],F=this.beginNodes[B][0].prev;if(F===null)return[];let L=F.clone();for(;L.prev!==null;)d.push(L.clone()),L=L.clone().prev.clone();return d.reverse(),d}piece(B){return this.chars.slice(B.pos,B.pos+B.length).join("")}tokens(){return this.viterbi().map(a=>this.piece(a))}tokenIds(){return this.viterbi().map(a=>a.tokenId)}}class C{constructor(B,a,d,c,F){this.tokenId=B,this.nodeId=a,this.pos=d,this.length=c,this.score=F,this.prev=null,this.backtraceScore=0}clone(){const B=new C(this.tokenId,this.nodeId,this.pos,this.length,this.score);return B.prev=this.prev,B.backtraceScore=this.backtraceScore,B}}class s{constructor(B){this.trie=this._buildTrie(B)}_buildTrie(B){const a=Object.create(null);for(const d of B){let c=a;for(let F=0;Fc&&a.push(B.slice(c,F)),a.push(u),F+=u.length,c=F):++F}return cthis.capacity&&this.cache.delete(this.cache.keys().next().value)}clear(){this.cache.clear()}}},"./src/utils/devices.js":(A,g,e)=>{e.r(g),e.d(g,{DEVICE_TYPES:()=>I});const I=Object.freeze({auto:"auto",gpu:"gpu",cpu:"cpu",wasm:"wasm",webgpu:"webgpu",cuda:"cuda",dml:"dml",webnn:"webnn","webnn-npu":"webnn-npu","webnn-gpu":"webnn-gpu","webnn-cpu":"webnn-cpu"})},"./src/utils/dtypes.js":(A,g,e)=>{e.r(g),e.d(g,{DATA_TYPES:()=>o,DEFAULT_DEVICE_DTYPE_MAPPING:()=>C,DEFAULT_DTYPE_SUFFIX_MAPPING:()=>s,isWebGpuFp16Supported:()=>t});var I=e("./src/env.js"),i=e("./src/utils/devices.js");const t=function(){let Q;return async function(){if(Q===void 0)if(!I.apis.IS_WEBGPU_AVAILABLE)Q=!1;else try{Q=(await navigator.gpu.requestAdapter()).features.has("shader-f16")}catch{Q=!1}return Q}}(),o=Object.freeze({auto:"auto",fp32:"fp32",fp16:"fp16",q8:"q8",int8:"int8",uint8:"uint8",q4:"q4",bnb4:"bnb4",q4f16:"q4f16"}),C=Object.freeze({[i.DEVICE_TYPES.wasm]:o.q8}),s=Object.freeze({[o.fp32]:"",[o.fp16]:"_fp16",[o.int8]:"_int8",[o.uint8]:"_uint8",[o.q8]:"_quantized",[o.q4]:"_q4",[o.q4f16]:"_q4f16",[o.bnb4]:"_bnb4"})},"./src/utils/generic.js":(A,g,e)=>{e.r(g),e.d(g,{Callable:()=>I});const I=class{constructor(){let i=function(...t){return i._call(...t)};return Object.setPrototypeOf(i,new.target.prototype)}_call(...i){throw Error("Must implement _call method in subclass")}}},"./src/utils/hub.js":(A,g,e)=>{e.r(g),e.d(g,{MAX_EXTERNAL_DATA_CHUNKS:()=>C,getFile:()=>d,getModelFile:()=>h,getModelJSON:()=>R});var I=e("?7a2c"),i=e("?a42a"),t=e("./src/env.js"),o=e("./src/utils/core.js");const C=100,s={txt:"text/plain",html:"text/html",css:"text/css",js:"text/javascript",json:"application/json",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif"};class Q{constructor(f){if(this.filePath=f,this.headers=new Headers,this.exists=I.existsSync(f),this.exists){this.status=200,this.statusText="OK";let G=I.statSync(f);this.headers.set("content-length",G.size.toString()),this.updateContentType();const J=I.createReadStream(f);this.body=new ReadableStream({start(T){J.on("data",X=>T.enqueue(X)),J.on("end",()=>T.close()),J.on("error",X=>T.error(X))},cancel(){J.destroy()}})}else this.status=404,this.statusText="Not Found",this.body=null}updateContentType(){const f=this.filePath.toString().split(".").pop().toLowerCase();this.headers.set("content-type",s[f]??"application/octet-stream")}clone(){let f=new Q(this.filePath);return f.exists=this.exists,f.status=this.status,f.statusText=this.statusText,f.headers=new Headers(this.headers),f}async arrayBuffer(){return(await I.promises.readFile(this.filePath)).buffer}async blob(){const f=await I.promises.readFile(this.filePath);return new Blob([f],{type:this.headers.get("content-type")})}async text(){return await I.promises.readFile(this.filePath,"utf8")}async json(){return JSON.parse(await this.text())}}function r(D,f=null,G=null){let J;try{J=new URL(D)}catch{return!1}return!(f&&!f.includes(J.protocol)||G&&!G.includes(J.hostname))}const B=/^(\b[\w\-.]+\b\/)?\b[\w\-.]{1,96}\b$/;function a(D){return!(!B.test(D)||D.includes("..")||D.includes("--")||D.endsWith(".git")||D.endsWith(".ipynb"))}async function d(D){if(t.env.useFS&&!r(D,["http:","https:","blob:"]))return new Q(D instanceof URL?D.protocol==="file:"?D.pathname:D.toString():D);if(typeof process<"u"&&process?.release?.name==="node"){const f=!!yB?.TESTING_REMOTELY,G=t.env.version,J=new Headers;if(J.set("User-Agent",`transformers.js/${G}; is_ci/${f};`),r(D,["http:","https:"],["huggingface.co","hf.co"])){const X=yB?.HF_TOKEN??yB?.HF_ACCESS_TOKEN;X&&J.set("Authorization",`Bearer ${X}`)}return fetch(D,{headers:J})}else return fetch(D)}const c={400:"Bad request error occurred while trying to load file",401:"Unauthorized access to file",403:"Forbidden access to file",404:"Could not locate file",408:"Request timeout error occurred while trying to load file",500:"Internal server error error occurred while trying to load file",502:"Bad gateway error occurred while trying to load file",503:"Service unavailable error occurred while trying to load file",504:"Gateway timeout error occurred while trying to load file"};function F(D,f,G){if(!G)return null;const J=c[D]??`Error (${D}) occurred while trying to load file`;throw Error(`${J}: "${f}".`)}class L{constructor(f){this.path=f}async match(f){let G=i.join(this.path,f),J=new Q(G);if(J.exists)return J}async put(f,G,J=void 0){let T=i.join(this.path,f);try{const X=G.headers.get("Content-Length"),gA=parseInt(X??"0");let x=0;await I.promises.mkdir(i.dirname(T),{recursive:!0});const tA=I.createWriteStream(T),Z=G.body.getReader();for(;;){const{done:IA,value:oA}=await Z.read();if(IA)break;await new Promise((DA,cA)=>{tA.write(oA,q=>{if(q){cA(q);return}DA()})}),x+=oA.length;const CA=gA?x/gA*100:0;J?.({progress:CA,loaded:x,total:gA})}tA.close()}catch(X){try{await I.promises.unlink(T)}catch{}throw X}}}async function u(D,...f){for(let G of f)try{let J=await D.match(G);if(J)return J}catch{continue}}async function h(D,f,G=!0,J={},T=!1){if(!t.env.allowLocalModels){if(J.local_files_only)throw Error("Invalid configuration detected: local models are disabled (`env.allowLocalModels=false`) but you have requested to only use local models (`local_files_only=true`).");if(!t.env.allowRemoteModels)throw Error("Invalid configuration detected: both local and remote models are disabled. Fix by setting `env.allowLocalModels` or `env.allowRemoteModels` to `true`.")}(0,o.dispatchCallback)(J.progress_callback,{status:"initiate",name:D,file:f});let X;if(!X&&t.env.useCustomCache){if(!t.env.customCache)throw Error("`env.useCustomCache=true`, but `env.customCache` is not defined.");if(!t.env.customCache.match||!t.env.customCache.put)throw new Error("`env.customCache` must be an object which implements the `match` and `put` functions of the Web Cache API. For more information, see https://developer.mozilla.org/en-US/docs/Web/API/Cache");X=t.env.customCache}if(!X&&t.env.useBrowserCache){if(typeof caches>"u")throw Error("Browser cache is not available in this environment.");try{X=await caches.open("transformers-cache")}catch(H){console.warn("An error occurred while opening the browser cache:",H)}}if(!X&&t.env.useFSCache){if(!t.apis.IS_FS_AVAILABLE)throw Error("File System Cache is not available in this environment.");X=new L(J.cache_dir??t.env.cacheDir)}const gA=J.revision??"main",x=y(D,f),tA=a(D),Z=tA?y(t.env.localModelPath,x):x,IA=y(t.env.remoteHost,t.env.remotePathTemplate.replaceAll("{model}",D).replaceAll("{revision}",encodeURIComponent(gA)),f);let oA;const CA=X instanceof L?gA==="main"?x:y(D,gA,f):IA;let DA=!1,cA;X&&(cA=await u(X,Z,CA));const q=cA!==void 0;if(cA===void 0){if(t.env.allowLocalModels)if(r(x,["http:","https:"])){if(J.local_files_only)throw new Error(`\`local_files_only=true\`, but attempted to load a remote file from: ${x}.`);if(!t.env.allowRemoteModels)throw new Error(`\`env.allowRemoteModels=false\`, but attempted to load a remote file from: ${x}.`)}else try{cA=await d(Z),oA=Z}catch(EA){console.warn(`Unable to load from local path "${Z}": "${EA}"`)}if(cA===void 0||cA.status===404){if(J.local_files_only||!t.env.allowRemoteModels){if(G)throw Error(`\`local_files_only=true\` or \`env.allowRemoteModels=false\` and file was not found locally at "${Z}".`);return null}if(!tA)throw Error(`Local file missing at "${Z}" and download aborted due to invalid model ID "${D}".`);if(cA=await d(IA),cA.status!==200)return F(cA.status,IA,G);oA=CA}DA=X&&typeof Response<"u"&&cA instanceof Response&&cA.status===200}(0,o.dispatchCallback)(J.progress_callback,{status:"download",name:D,file:f});let U;if(!(t.apis.IS_NODE_ENV&&T)){let H;J.progress_callback?q&&typeof navigator<"u"&&/firefox/i.test(navigator.userAgent)?(H=new Uint8Array(await cA.arrayBuffer()),(0,o.dispatchCallback)(J.progress_callback,{status:"progress",name:D,file:f,progress:100,loaded:H.length,total:H.length})):H=await w(cA,EA=>{(0,o.dispatchCallback)(J.progress_callback,{status:"progress",name:D,file:f,...EA})}):H=new Uint8Array(await cA.arrayBuffer()),U=H}if(DA&&oA&&await X.match(oA)===void 0&&(U?await X.put(oA,new Response(U,{headers:cA.headers})).catch(H=>{console.warn(`Unable to add response to browser cache: ${H}.`)}):await X.put(oA,cA,J.progress_callback)),(0,o.dispatchCallback)(J.progress_callback,{status:"done",name:D,file:f}),U){if(!t.apis.IS_NODE_ENV&&T)throw new Error("Cannot return path in a browser environment.");return U}if(cA instanceof Q)return cA.filePath;const z=await X?.match(oA);if(z instanceof Q)return z.filePath;if(z instanceof Response)return new Uint8Array(await z.arrayBuffer());if(typeof z=="string")return z;throw new Error("Unable to get model file path or buffer.")}async function R(D,f,G=!0,J={}){const T=await h(D,f,G,J,!1);if(T===null)return{};const gA=new TextDecoder("utf-8").decode(T);return JSON.parse(gA)}async function w(D,f){const G=D.headers.get("Content-Length");G===null&&console.warn("Unable to determine content-length from response headers. Will expand buffer when needed.");let J=parseInt(G??"0"),T=new Uint8Array(J),X=0;const gA=D.body.getReader();async function x(){const{done:tA,value:Z}=await gA.read();if(tA)return;const IA=X+Z.length;if(IA>J){J=IA;const CA=new Uint8Array(J);CA.set(T),T=CA}T.set(Z,X),X=IA;const oA=X/J*100;return f({progress:oA,loaded:X,total:J}),x()}return await x(),T}function y(...D){return D=D.map((f,G)=>(G&&(f=f.replace(new RegExp("^/"),"")),G!==D.length-1&&(f=f.replace(new RegExp("/$"),"")),f)),D.join("/")}},"./src/utils/image.js":(A,g,e)=>{e.r(g),e.d(g,{RawImage:()=>c,load_image:()=>F});var I=e("./src/utils/core.js"),i=e("./src/utils/hub.js"),t=e("./src/env.js"),o=e("./src/utils/tensor.js"),C=e("?2b25");let s,Q,r;const B=t.apis.IS_BROWSER_ENV||t.apis.IS_WEBWORKER_ENV;if(B)s=(L,u)=>{if(!self.OffscreenCanvas)throw new Error("OffscreenCanvas not supported by this browser.");return new self.OffscreenCanvas(L,u)},r=self.createImageBitmap,Q=self.ImageData;else if(C)r=async L=>{const h=(await L.metadata()).channels,{data:R,info:w}=await L.rotate().raw().toBuffer({resolveWithObject:!0}),y=new c(new Uint8ClampedArray(R),w.width,w.height,w.channels);return h!==void 0&&h!==w.channels&&y.convert(h),y};else throw new Error("Unable to load image processing library.");const a={0:"nearest",1:"lanczos",2:"bilinear",3:"bicubic",4:"box",5:"hamming"},d=new Map([["png","image/png"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["gif","image/gif"]]);class c{constructor(u,h,R,w){this.data=u,this.width=h,this.height=R,this.channels=w}get size(){return[this.width,this.height]}static async read(u){if(u instanceof c)return u;if(typeof u=="string"||u instanceof URL)return await this.fromURL(u);if(u instanceof Blob)return await this.fromBlob(u);if(typeof HTMLCanvasElement<"u"&&u instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&u instanceof OffscreenCanvas)return this.fromCanvas(u);throw new Error(`Unsupported input type: ${typeof u}`)}static fromCanvas(u){if(!B)throw new Error("fromCanvas() is only supported in browser environments.");const R=u.getContext("2d").getImageData(0,0,u.width,u.height).data;return new c(R,u.width,u.height,4)}static async fromURL(u){const h=await(0,i.getFile)(u);if(h.status!==200)throw new Error(`Unable to read image from "${u}" (${h.status} ${h.statusText})`);const R=await h.blob();return this.fromBlob(R)}static async fromBlob(u){if(B){const h=await r(u),R=s(h.width,h.height).getContext("2d");return R.drawImage(h,0,0),new this(R.getImageData(0,0,h.width,h.height).data,h.width,h.height,4)}else{const h=C(await u.arrayBuffer());return await r(h)}}static fromTensor(u,h="CHW"){if(u.dims.length!==3)throw new Error(`Tensor should have 3 dimensions, but has ${u.dims.length} dimensions.`);if(h==="CHW")u=u.transpose(1,2,0);else if(h!=="HWC")throw new Error(`Unsupported channel format: ${h}`);if(!(u.data instanceof Uint8ClampedArray||u.data instanceof Uint8Array))throw new Error(`Unsupported tensor type: ${u.type}`);switch(u.dims[2]){case 1:case 2:case 3:case 4:return new c(u.data,u.dims[1],u.dims[0],u.dims[2]);default:throw new Error(`Unsupported number of channels: ${u.dims[2]}`)}}grayscale(){if(this.channels===1)return this;const u=new Uint8ClampedArray(this.width*this.height*1);switch(this.channels){case 3:case 4:for(let h=0,R=0;h=0?G=R:T=-R,w>=0?J=w:X=-w,f.drawImage(D,G,J,u,h,T,X,u,h),new c(f.getImageData(0,0,u,h).data,u,h,4).convert(y)}else{let y=this.toSharp();if(R>=0&&w>=0)y=y.extract({left:Math.floor(R),top:Math.floor(w),width:u,height:h});else if(R<=0&&w<=0){const D=Math.floor(-w),f=Math.floor(-R);y=y.extend({top:D,left:f,right:u-this.width-f,bottom:h-this.height-D})}else{let D=[0,0],f=0;w<0?(D[0]=Math.floor(-w),D[1]=h-this.height-D[0]):f=Math.floor(w);let G=[0,0],J=0;R<0?(G[0]=Math.floor(-R),G[1]=u-this.width-G[0]):J=Math.floor(R),y=y.extend({top:D[0],bottom:D[1],left:G[0],right:G[1]}).extract({left:J,top:f,width:u,height:h})}return await r(y)}}async toBlob(u="image/png",h=1){if(!B)throw new Error("toBlob() is only supported in browser environments.");return await this.toCanvas().convertToBlob({type:u,quality:h})}toTensor(u="CHW"){let h=new o.Tensor("uint8",new Uint8Array(this.data),[this.height,this.width,this.channels]);if(u!=="HWC")if(u==="CHW")h=h.permute(2,0,1);else throw new Error(`Unsupported channel format: ${u}`);return h}toCanvas(){if(!B)throw new Error("toCanvas() is only supported in browser environments.");const u=this.clone().rgba(),h=s(u.width,u.height),R=new Q(u.data,u.width,u.height);return h.getContext("2d").putImageData(R,0,0),h}split(){const{data:u,width:h,height:R,channels:w}=this,y=u.constructor,D=u.length/w,f=Array.from({length:w},()=>new y(D));for(let G=0;Gnew c(G,h,R,1))}_update(u,h,R,w=null){return this.data=u,this.width=h,this.height=R,w!==null&&(this.channels=w),this}clone(){return new c(this.data.slice(),this.width,this.height,this.channels)}convert(u){if(this.channels===u)return this;switch(u){case 1:this.grayscale();break;case 3:this.rgb();break;case 4:this.rgba();break;default:throw new Error(`Conversion failed due to unsupported number of channels: ${this.channels}`)}return this}async save(u){if(B){if(t.apis.IS_WEBWORKER_ENV)throw new Error("Unable to save an image from a Web Worker.");const h=u.split(".").pop().toLowerCase(),R=d.get(h)??"image/png",w=await this.toBlob(R);(0,I.saveBlob)(u,w)}else{if(t.apis.IS_FS_AVAILABLE)return await this.toSharp().toFile(u);throw new Error("Unable to save the image because filesystem is disabled in this environment.")}}toSharp(){if(B)throw new Error("toSharp() is only supported in server-side environments.");return C(this.data,{raw:{width:this.width,height:this.height,channels:this.channels}})}}const F=c.read.bind(c)},"./src/utils/maths.js":(A,g,e)=>{e.r(g),e.d(g,{FFT:()=>F,bankers_round:()=>h,cos_sim:()=>s,dot:()=>C,dynamic_time_warping:()=>R,interpolate_data:()=>I,log_softmax:()=>o,magnitude:()=>Q,max:()=>B,medianFilter:()=>L,min:()=>r,permute_data:()=>i,round:()=>u,softmax:()=>t});function I(w,[y,D,f],[G,J],T="bilinear",X=!1){const gA=J/f,x=G/D,tA=new w.constructor(G*J*y),Z=D*f,IA=G*J;for(let oA=0;oA=0;--X)G[X]=gA,f[X]=y[D[X]],gA*=f[X];const J=D.map((X,gA)=>G[D.indexOf(gA)]),T=new w.constructor(w.length);for(let X=0;X=0;--x)gA+=tA%y[x]*J[x],tA=Math.floor(tA/y[x]);T[gA]=w[X]}return[T,f]}function t(w){const y=B(w)[0],D=w.map(J=>Math.exp(J-y)),f=D.reduce((J,T)=>J+T,0);return D.map(J=>J/f)}function o(w){const y=B(w)[0];let D=0;for(let J=0;JJ-y-f)}function C(w,y){let D=0;for(let f=0;fy+D*D,0))}function r(w){if(w.length===0)throw Error("Array must not be empty");let y=w[0],D=0;for(let f=1;fy&&(y=w[f],D=f);return[y,D]}function a(w){return w>0&&(w&w-1)===0}class d{constructor(y){if(this.size=y|0,this.size<=1||!a(this.size))throw new Error("FFT size must be a power of two larger than 1");this._csize=y<<1,this.table=new Float64Array(this.size*2);for(let f=0;ff;f<<=1)++D;this._width=D%2===0?D-1:D,this._bitrev=new Int32Array(1<>>G&3)<>>1);for(let G=0;G>>1]=y[G];return f}toComplexArray(y,D){const f=D||this.createComplexArray();for(let G=0;G>>1],f[G+1]=0;return f}transform(y,D){if(y===D)throw new Error("Input and output buffers must be different");this._transform4(y,D,1)}realTransform(y,D){if(y===D)throw new Error("Input and output buffers must be different");this._realTransform4(y,D,1)}inverseTransform(y,D){if(y===D)throw new Error("Input and output buffers must be different");this._transform4(y,D,-1);for(let f=0;f>=2;T>=2;T>>=2){X=G/T<<1;const IA=X>>>2;for(gA=0;gA>>1,T>>>1)}else for(gA=0,x=0;gA>>1,T>>>1,f)}const Z=this.table;for(T>>=2;T>=2;T>>=2){X=G/T<<1;const oA=X>>>1,CA=oA>>>1,DA=CA>>>1;for(gA=0;gA>>1;for(let oA=2;oA>1;++tA){const Z=(tA+1-y)**2/2,IA=Math.sqrt(gA**2+x**2)**Z,oA=Z*Math.atan2(x,gA),CA=2*tA;J[CA]=IA*Math.cos(oA),J[CA+1]=IA*Math.sin(oA),T[CA]=J[CA],T[CA+1]=-J[CA+1]}this._slicedChirpBuffer=J.subarray(D,f),this._f=new d(G>>1),this._f.transform(this._chirpBuffer,T)}_transform(y,D,f){const G=this._buffer1,J=this._buffer2,T=this._outBuffer1,X=this._outBuffer2,gA=this._chirpBuffer,x=this._slicedChirpBuffer,tA=this._a;if(f)for(let Z=0;Z>1,CA=D[oA];G[Z]=CA*x[Z],G[IA]=CA*x[IA]}else for(let Z=0;Z=w.length&&(gA=2*(w.length-1)-gA),f[T++]=w[gA]}f.sort(),D[J]=f[G]}return D}function u(w,y){const D=Math.pow(10,y);return Math.round(w*D)/D}function h(w){const y=Math.round(w);return Math.abs(w)%1===.5?y%2===0?y:y-1:y}function R(w){const y=w.length,D=w[0].length,f=[y+1,D+1],G=Array.from({length:f[0]},()=>Array(f[1]).fill(1/0));G[0][0]=0;const J=Array.from({length:f[0]},()=>Array(f[1]).fill(-1));for(let tA=1;tA0||X>0;)switch(gA.push(T-1),x.push(X-1),J[T][X]){case 0:--T,--X;break;case 1:--T;break;case 2:--X;break;default:throw new Error(`Internal error in dynamic time warping. Unexpected trace[${T}, ${X}]. Please file a bug report.`)}return gA.reverse(),x.reverse(),[gA,x]}},"./src/utils/tensor.js":(A,g,e)=>{e.r(g),e.d(g,{DataTypeMap:()=>o,Tensor:()=>C,cat:()=>D,full:()=>x,full_like:()=>tA,interpolate:()=>r,interpolate_4d:()=>B,layer_norm:()=>h,matmul:()=>a,mean:()=>T,mean_pooling:()=>u,ones:()=>Z,ones_like:()=>IA,permute:()=>Q,quantize_embeddings:()=>cA,rand:()=>DA,rfft:()=>d,slice:()=>L,stack:()=>f,std_mean:()=>J,topk:()=>c,zeros:()=>oA,zeros_like:()=>CA});var I=e("./src/utils/maths.js"),i=e("./src/backends/onnx.js"),t=e("./src/ops/registry.js");const o=Object.freeze({float32:Float32Array,float16:typeof Float16Array<"u"?Float16Array:Uint16Array,float64:Float64Array,string:Array,int8:Int8Array,uint8:Uint8Array,int16:Int16Array,uint16:Uint16Array,int32:Int32Array,uint32:Uint32Array,int64:BigInt64Array,uint64:BigUint64Array,bool:Uint8Array,uint4:Uint8Array,int4:Int8Array});class C{get dims(){return this.ort_tensor.dims}set dims(U){this.ort_tensor.dims=U}get type(){return this.ort_tensor.type}get data(){return this.ort_tensor.data}get size(){return this.ort_tensor.size}get location(){return this.ort_tensor.location}ort_tensor;constructor(...U){return(0,i.isONNXTensor)(U[0])?this.ort_tensor=U[0]:this.ort_tensor=new i.Tensor(U[0],U[1],U[2]),new Proxy(this,{get:(z,H)=>{if(typeof H=="string"){let EA=Number(H);if(Number.isInteger(EA))return z._getitem(EA)}return z[H]},set:(z,H,EA)=>z[H]=EA})}dispose(){this.ort_tensor.dispose()}*[Symbol.iterator](){const[U,...z]=this.dims;if(z.length>0){const H=z.reduce((EA,xA)=>EA*xA);for(let EA=0;EA0){const EA=H.reduce((xA,RA)=>xA*RA);return this._subarray(U,EA,H)}else return new C(this.type,[this.data[U]],H)}indexOf(U){const z=this.data;for(let H=0;H$)throw new Error(`Invalid slice: ${j}`);const fA=[Math.max(dA,0),Math.min($,this.dims[hA])];H.push(fA),z.push(fA[1]-fA[0])}else throw new Error(`Invalid slice: ${j}`)}const EA=H.map(([hA,j])=>j-hA),xA=EA.reduce((hA,j)=>hA*j),RA=this.data,YA=new RA.constructor(xA),ge=this.stride();for(let hA=0;hA=0;--dA){const fA=EA[dA];j+=($%fA+H[dA][0])*ge[dA],$=Math.floor($/fA)}YA[hA]=RA[j]}return new C(this.type,YA,z)}permute(...U){return Q(this,U)}transpose(...U){return this.permute(...U)}sum(U=null,z=!1){return this.norm(1,U,z)}norm(U="fro",z=null,H=!1){if(U==="fro")U=2;else if(typeof U=="string")throw Error(`Unsupported norm: ${U}`);const EA=this.data,xA=(hA,j)=>hA+j**U;if(z===null){const hA=EA.reduce(xA,0)**(1/U);return new C(this.type,[hA],[])}const[RA,YA,ge]=G(xA,this,z,H);if(U!==1)for(let hA=0;hA=0;--ge){const dA=this.dims[ge];if(ge!==z){const $=hA%dA;YA+=$*j,j*=this.dims[ge]}hA=Math.floor(hA/dA)}EA[RA]/=xA[YA]}return this}normalize(U=2,z=1){return this.clone().normalize_(U,z)}stride(){return X(this.dims)}squeeze(U=null){return new C(this.type,this.data,R(this.dims,U))}squeeze_(U=null){return this.dims=R(this.dims,U),this}unsqueeze(U=null){return new C(this.type,this.data,w(this.dims,U))}unsqueeze_(U=null){return this.dims=w(this.dims,U),this}flatten_(U=0,z=-1){z=(z+this.dims.length)%this.dims.length;let H=this.dims.slice(0,U),EA=this.dims.slice(U,z+1),xA=this.dims.slice(z+1);return this.dims=[...H,EA.reduce((RA,YA)=>RA*YA,1),...xA],this}flatten(U=0,z=-1){return this.clone().flatten_(U,z)}view(...U){let z=-1;for(let EA=0;EAYA!==z?xA*RA:xA,1);U[z]=H.length/EA}return new C(this.type,H,U)}neg_(){const U=this.data;for(let z=0;zU?1:0;return new C("bool",z,this.dims)}lt(U){const z=new Uint8Array(this.data.length),H=this.data;for(let EA=0;EAMath.min(RA,YA),this,U,z,1/0);return new C(H,EA,xA)}max(U=null,z=!1){if(U===null){const RA=(0,I.max)(this.data)[0];return new C(this.type,[RA],[])}const[H,EA,xA]=G((RA,YA)=>Math.max(RA,YA),this,U,z,-1/0);return new C(H,EA,xA)}argmin(U=null,z=!1){if(U!==null)throw new Error("`dim !== null` not yet implemented.");const H=(0,I.min)(this.data)[1];return new C("int64",[BigInt(H)],[])}argmax(U=null,z=!1){if(U!==null)throw new Error("`dim !== null` not yet implemented.");const H=(0,I.max)(this.data)[1];return new C("int64",[BigInt(H)],[])}to(U){if(this.type===U)return this;if(!o.hasOwnProperty(U))throw new Error(`Unsupported type: ${U}`);let z;const H=["int64","uint64"].includes(this.type),EA=["int64","uint64"].includes(U);return H&&!EA?z=Number:!H&&EA&&(z=BigInt),new C(U,o[U].from(this.data,z),this.dims)}}function s(q,U){const z=q.length,H=U.reduce((xA,RA)=>xA*RA);if(z!==H)throw Error(`cannot reshape array of size ${z} into shape (${U})`);let EA=q;for(let xA=U.length-1;xA>=0;xA--)EA=EA.reduce((RA,YA)=>{let ge=RA[RA.length-1];return ge.lengthnew C("int64",q,[q.length]);async function L(q,U,z,H,EA){return await(await t.TensorOpRegistry.slice)({x:q,s:F(U),e:F(z),a:F(H),t:F(EA??new Array(H.length).fill(1))})}function u(q,U){const z=q.data,H=U.data,EA=[q.dims[0],q.dims[2]],xA=new z.constructor(EA[0]*EA[1]),[RA,YA,ge]=q.dims;let hA=0;for(let j=0;jz!==1):typeof U=="number"?q[U]===1&&q.splice(U,1):Array.isArray(U)&&(q=q.filter((z,H)=>z!==1||!U.includes(H))),q}function w(q,U){return U=y(U,q.length+1),q=q.slice(),q.splice(U,0,1),q}function y(q,U,z=null,H=!0){if(q<-U||q>=U){if(H)throw new Error(`IndexError: index ${q} is out of bounds for dimension${z===null?"":" "+z} with size ${U}`);return q<-U?0:U}return q<0&&(q=(q%U+U)%U),q}function D(q,U=0){U=y(U,q[0].dims.length);const z=q[0].dims.slice();z[U]=q.reduce((RA,YA)=>RA+YA.dims[U],0);const H=z.reduce((RA,YA)=>RA*YA,1),EA=new q[0].data.constructor(H),xA=q[0].type;if(U===0){let RA=0;for(const YA of q){const ge=YA.data;EA.set(ge,RA),RA+=ge.length}}else{let RA=0;for(let YA=0;YA=0;--$){const LA=hA[$];let GA=fA%LA;$===U&&(GA+=RA),dA+=GA*FA,FA*=z[$],fA=Math.floor(fA/LA)}EA[dA]=ge[j]}RA+=hA[U]}}return new C(xA,EA,z)}function f(q,U=0){return D(q.map(z=>z.unsqueeze(U)),U)}function G(q,U,z=null,H=!1,EA=null){const xA=U.data,RA=U.dims;z=y(z,RA.length);const YA=RA.slice();YA[z]=1;const ge=new xA.constructor(xA.length/RA[z]);EA!==null&&ge.fill(EA);for(let hA=0;hA=0;--dA){const FA=RA[dA];if(dA!==z){const LA=$%FA;j+=LA*fA,fA*=YA[dA]}$=Math.floor($/FA)}ge[j]=q(ge[j],xA[hA],hA,j)}return H||YA.splice(z,1),[U.type,ge,YA]}function J(q,U=null,z=1,H=!1){const EA=q.data,xA=q.dims;if(U===null){const fA=EA.reduce((KA,vA)=>KA+vA,0)/EA.length,FA=Math.sqrt(EA.reduce((KA,vA)=>KA+(vA-fA)**2,0)/(EA.length-z)),LA=new C(q.type,[fA],[]);return[new C(q.type,[FA],[]),LA]}U=y(U,xA.length);const RA=T(q,U,H),YA=RA.data,[ge,hA,j]=G(($,fA,FA,LA)=>$+(fA-YA[LA])**2,q,U,H);for(let $=0;$hA+j,0);return new C(q.type,[ge/EA.length],[])}U=y(U,H.length);const[xA,RA,YA]=G((ge,hA)=>ge+hA,q,U,z);if(H[U]!==1)for(let ge=0;ge=0;--z)U[z]=H,H*=q[z];return U}function gA(q,U,z,H){const EA=q.reduce((xA,RA)=>xA*RA,1);return new C(z,new H(EA).fill(U),q)}function x(q,U){let z,H;if(typeof U=="number")z="float32",H=Float32Array;else if(typeof U=="bigint")z="int64",H=BigInt64Array;else if(typeof U=="boolean")z="bool",H=Uint8Array;else throw new Error(`Unsupported data type: ${typeof U}`);return gA(q,U,z,H)}function tA(q,U){return x(q.dims,U)}function Z(q){return gA(q,1n,"int64",BigInt64Array)}function IA(q){return Z(q.dims)}function oA(q){return gA(q,0n,"int64",BigInt64Array)}function CA(q){return oA(q.dims)}function DA(q){const U=q.reduce((z,H)=>z*H,1);return new C("float32",Float32Array.from({length:U},()=>Math.random()),q)}function cA(q,U){if(q.dims.length!==2)throw new Error("The tensor must have 2 dimensions");if(q.dims.at(-1)%8!==0)throw new Error("The last dimension of the tensor must be a multiple of 8");if(!["binary","ubinary"].includes(U))throw new Error("The precision must be either 'binary' or 'ubinary'");const z=U==="binary",H=z?"int8":"uint8",EA=z?Int8Array:Uint8Array,xA=q.data,RA=new EA(xA.length/8);for(let YA=0;YA0?1:0,hA=Math.floor(YA/8),j=YA%8;RA[hA]|=ge<<7-j,z&&j===0&&(RA[hA]-=128)}return new C(H,RA,[q.dims[0],q.dims[1]/8])}},"./src/utils/video.js":(A,g,e)=>{e.r(g),e.d(g,{RawVideo:()=>o,RawVideoFrame:()=>t,load_video:()=>C});var I=e("./src/utils/image.js"),i=e("./src/env.js");class t{constructor(Q,r){this.image=Q,this.timestamp=r}}class o{constructor(Q,r){Q.length>0&&Q[0]instanceof I.RawImage&&(Q=Q.map((B,a)=>new t(B,(a+1)/(Q.length+1)*r))),this.frames=Q,this.duration=r}get width(){return this.frames[0].image.width}get height(){return this.frames[0].image.height}get fps(){return this.frames.length/this.duration}}async function C(s,{num_frames:Q=null,fps:r=null}={}){if(!i.apis.IS_BROWSER_ENV)throw new Error("`load_video` is currently only supported in browser environments.");if(Q==null&&r==null)throw new Error("Either num_frames or fps must be provided.");const B=[],a=document.createElement("video");if(a.crossOrigin="anonymous",a.muted=!0,typeof s=="string")a.src=s;else if(s instanceof Blob)a.src=URL.createObjectURL(s);else if(s instanceof HTMLVideoElement)a.src=s.src;else throw new Error("Invalid URL or video element provided.");if(await new Promise(R=>a.onloadedmetadata=R),a.seekable.start(0)===a.seekable.end(0)){const w=await(await fetch(a.src)).blob();a.src=URL.createObjectURL(w),await new Promise(y=>a.onloadedmetadata=y)}const d=a.duration;let c,F;Q!=null?(c=Q,F=Q===1?0:d/(Q-1)):(F=1/r,c=Math.floor(d/F));let L=[];for(let R=0;R{a.onseeked=f}),h.drawImage(a,0,0,u.width,u.height);const w=h.getImageData(0,0,u.width,u.height),y=new I.RawImage(w.data,u.width,u.height,4),D=new t(y,R);B.push(D)}return a.remove(),new o(B,d)}}},fh={};function qe(A){var g=fh[A];if(g!==void 0)return g.exports;var e=fh[A]={exports:{}};return ef[A](e,e.exports,qe),e.exports}(()=>{var A=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,g;qe.t=function(e,I){if(I&1&&(e=this(e)),I&8||typeof e=="object"&&e&&(I&4&&e.__esModule||I&16&&typeof e.then=="function"))return e;var i=Object.create(null);qe.r(i);var t={};g=g||[null,A({}),A([]),A(A)];for(var o=I&2&&e;typeof o=="object"&&!~g.indexOf(o);o=A(o))Object.getOwnPropertyNames(o).forEach(C=>t[C]=()=>e[C]);return t.default=()=>e,qe.d(i,t),i}})();qe.d=(A,g)=>{for(var e in g)qe.o(g,e)&&!qe.o(A,e)&&Object.defineProperty(A,e,{enumerable:!0,get:g[e]})};qe.o=(A,g)=>Object.prototype.hasOwnProperty.call(A,g);qe.r=A=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var n={};(()=>{/*!*****************************!*\ + !*** ./src/transformers.js ***! + \*****************************/qe.r(n),qe.d(n,{ASTFeatureExtractor:()=>B.ASTFeatureExtractor,ASTForAudioClassification:()=>e.ASTForAudioClassification,ASTModel:()=>e.ASTModel,ASTPreTrainedModel:()=>e.ASTPreTrainedModel,AlbertForMaskedLM:()=>e.AlbertForMaskedLM,AlbertForQuestionAnswering:()=>e.AlbertForQuestionAnswering,AlbertForSequenceClassification:()=>e.AlbertForSequenceClassification,AlbertModel:()=>e.AlbertModel,AlbertPreTrainedModel:()=>e.AlbertPreTrainedModel,AlbertTokenizer:()=>I.AlbertTokenizer,AudioClassificationPipeline:()=>g.AudioClassificationPipeline,AutoConfig:()=>i.AutoConfig,AutoFeatureExtractor:()=>a.AutoFeatureExtractor,AutoImageProcessor:()=>F.AutoImageProcessor,AutoModel:()=>e.AutoModel,AutoModelForAudioClassification:()=>e.AutoModelForAudioClassification,AutoModelForAudioFrameClassification:()=>e.AutoModelForAudioFrameClassification,AutoModelForAudioTextToText:()=>e.AutoModelForAudioTextToText,AutoModelForCTC:()=>e.AutoModelForCTC,AutoModelForCausalLM:()=>e.AutoModelForCausalLM,AutoModelForDepthEstimation:()=>e.AutoModelForDepthEstimation,AutoModelForDocumentQuestionAnswering:()=>e.AutoModelForDocumentQuestionAnswering,AutoModelForImageClassification:()=>e.AutoModelForImageClassification,AutoModelForImageFeatureExtraction:()=>e.AutoModelForImageFeatureExtraction,AutoModelForImageMatting:()=>e.AutoModelForImageMatting,AutoModelForImageSegmentation:()=>e.AutoModelForImageSegmentation,AutoModelForImageTextToText:()=>e.AutoModelForImageTextToText,AutoModelForImageToImage:()=>e.AutoModelForImageToImage,AutoModelForMaskGeneration:()=>e.AutoModelForMaskGeneration,AutoModelForMaskedLM:()=>e.AutoModelForMaskedLM,AutoModelForNormalEstimation:()=>e.AutoModelForNormalEstimation,AutoModelForObjectDetection:()=>e.AutoModelForObjectDetection,AutoModelForPoseEstimation:()=>e.AutoModelForPoseEstimation,AutoModelForQuestionAnswering:()=>e.AutoModelForQuestionAnswering,AutoModelForSemanticSegmentation:()=>e.AutoModelForSemanticSegmentation,AutoModelForSeq2SeqLM:()=>e.AutoModelForSeq2SeqLM,AutoModelForSequenceClassification:()=>e.AutoModelForSequenceClassification,AutoModelForSpeechSeq2Seq:()=>e.AutoModelForSpeechSeq2Seq,AutoModelForTextToSpectrogram:()=>e.AutoModelForTextToSpectrogram,AutoModelForTextToWaveform:()=>e.AutoModelForTextToWaveform,AutoModelForTokenClassification:()=>e.AutoModelForTokenClassification,AutoModelForUniversalSegmentation:()=>e.AutoModelForUniversalSegmentation,AutoModelForVision2Seq:()=>e.AutoModelForVision2Seq,AutoModelForXVector:()=>e.AutoModelForXVector,AutoModelForZeroShotObjectDetection:()=>e.AutoModelForZeroShotObjectDetection,AutoProcessor:()=>h.AutoProcessor,AutoTokenizer:()=>I.AutoTokenizer,AutomaticSpeechRecognitionPipeline:()=>g.AutomaticSpeechRecognitionPipeline,BackgroundRemovalPipeline:()=>g.BackgroundRemovalPipeline,BartForConditionalGeneration:()=>e.BartForConditionalGeneration,BartForSequenceClassification:()=>e.BartForSequenceClassification,BartModel:()=>e.BartModel,BartPretrainedModel:()=>e.BartPretrainedModel,BartTokenizer:()=>I.BartTokenizer,BaseModelOutput:()=>e.BaseModelOutput,BaseStreamer:()=>R.BaseStreamer,BeitFeatureExtractor:()=>c.BeitFeatureExtractor,BeitForImageClassification:()=>e.BeitForImageClassification,BeitModel:()=>e.BeitModel,BeitPreTrainedModel:()=>e.BeitPreTrainedModel,BertForMaskedLM:()=>e.BertForMaskedLM,BertForQuestionAnswering:()=>e.BertForQuestionAnswering,BertForSequenceClassification:()=>e.BertForSequenceClassification,BertForTokenClassification:()=>e.BertForTokenClassification,BertModel:()=>e.BertModel,BertPreTrainedModel:()=>e.BertPreTrainedModel,BertTokenizer:()=>I.BertTokenizer,BitImageProcessor:()=>c.BitImageProcessor,BlenderbotForConditionalGeneration:()=>e.BlenderbotForConditionalGeneration,BlenderbotModel:()=>e.BlenderbotModel,BlenderbotPreTrainedModel:()=>e.BlenderbotPreTrainedModel,BlenderbotSmallForConditionalGeneration:()=>e.BlenderbotSmallForConditionalGeneration,BlenderbotSmallModel:()=>e.BlenderbotSmallModel,BlenderbotSmallPreTrainedModel:()=>e.BlenderbotSmallPreTrainedModel,BlenderbotSmallTokenizer:()=>I.BlenderbotSmallTokenizer,BlenderbotTokenizer:()=>I.BlenderbotTokenizer,BloomForCausalLM:()=>e.BloomForCausalLM,BloomModel:()=>e.BloomModel,BloomPreTrainedModel:()=>e.BloomPreTrainedModel,BloomTokenizer:()=>I.BloomTokenizer,CLIPFeatureExtractor:()=>c.CLIPFeatureExtractor,CLIPImageProcessor:()=>c.CLIPImageProcessor,CLIPModel:()=>e.CLIPModel,CLIPPreTrainedModel:()=>e.CLIPPreTrainedModel,CLIPSegForImageSegmentation:()=>e.CLIPSegForImageSegmentation,CLIPSegModel:()=>e.CLIPSegModel,CLIPSegPreTrainedModel:()=>e.CLIPSegPreTrainedModel,CLIPTextModel:()=>e.CLIPTextModel,CLIPTextModelWithProjection:()=>e.CLIPTextModelWithProjection,CLIPTokenizer:()=>I.CLIPTokenizer,CLIPVisionModel:()=>e.CLIPVisionModel,CLIPVisionModelWithProjection:()=>e.CLIPVisionModelWithProjection,CamembertForMaskedLM:()=>e.CamembertForMaskedLM,CamembertForQuestionAnswering:()=>e.CamembertForQuestionAnswering,CamembertForSequenceClassification:()=>e.CamembertForSequenceClassification,CamembertForTokenClassification:()=>e.CamembertForTokenClassification,CamembertModel:()=>e.CamembertModel,CamembertPreTrainedModel:()=>e.CamembertPreTrainedModel,CamembertTokenizer:()=>I.CamembertTokenizer,CausalLMOutput:()=>e.CausalLMOutput,CausalLMOutputWithPast:()=>e.CausalLMOutputWithPast,ChineseCLIPFeatureExtractor:()=>c.ChineseCLIPFeatureExtractor,ChineseCLIPModel:()=>e.ChineseCLIPModel,ChineseCLIPPreTrainedModel:()=>e.ChineseCLIPPreTrainedModel,ClapAudioModelWithProjection:()=>e.ClapAudioModelWithProjection,ClapFeatureExtractor:()=>B.ClapFeatureExtractor,ClapModel:()=>e.ClapModel,ClapPreTrainedModel:()=>e.ClapPreTrainedModel,ClapTextModelWithProjection:()=>e.ClapTextModelWithProjection,ClassifierFreeGuidanceLogitsProcessor:()=>y.ClassifierFreeGuidanceLogitsProcessor,CodeGenForCausalLM:()=>e.CodeGenForCausalLM,CodeGenModel:()=>e.CodeGenModel,CodeGenPreTrainedModel:()=>e.CodeGenPreTrainedModel,CodeGenTokenizer:()=>I.CodeGenTokenizer,CodeLlamaTokenizer:()=>I.CodeLlamaTokenizer,CohereForCausalLM:()=>e.CohereForCausalLM,CohereModel:()=>e.CohereModel,CoherePreTrainedModel:()=>e.CoherePreTrainedModel,CohereTokenizer:()=>I.CohereTokenizer,ConvBertForMaskedLM:()=>e.ConvBertForMaskedLM,ConvBertForQuestionAnswering:()=>e.ConvBertForQuestionAnswering,ConvBertForSequenceClassification:()=>e.ConvBertForSequenceClassification,ConvBertForTokenClassification:()=>e.ConvBertForTokenClassification,ConvBertModel:()=>e.ConvBertModel,ConvBertPreTrainedModel:()=>e.ConvBertPreTrainedModel,ConvBertTokenizer:()=>I.ConvBertTokenizer,ConvNextFeatureExtractor:()=>c.ConvNextFeatureExtractor,ConvNextForImageClassification:()=>e.ConvNextForImageClassification,ConvNextImageProcessor:()=>c.ConvNextImageProcessor,ConvNextModel:()=>e.ConvNextModel,ConvNextPreTrainedModel:()=>e.ConvNextPreTrainedModel,ConvNextV2ForImageClassification:()=>e.ConvNextV2ForImageClassification,ConvNextV2Model:()=>e.ConvNextV2Model,ConvNextV2PreTrainedModel:()=>e.ConvNextV2PreTrainedModel,DFineForObjectDetection:()=>e.DFineForObjectDetection,DFineModel:()=>e.DFineModel,DFinePreTrainedModel:()=>e.DFinePreTrainedModel,DPTFeatureExtractor:()=>c.DPTFeatureExtractor,DPTForDepthEstimation:()=>e.DPTForDepthEstimation,DPTImageProcessor:()=>c.DPTImageProcessor,DPTModel:()=>e.DPTModel,DPTPreTrainedModel:()=>e.DPTPreTrainedModel,DacDecoderModel:()=>e.DacDecoderModel,DacDecoderOutput:()=>e.DacDecoderOutput,DacEncoderModel:()=>e.DacEncoderModel,DacEncoderOutput:()=>e.DacEncoderOutput,DacFeatureExtractor:()=>B.DacFeatureExtractor,DacModel:()=>e.DacModel,DacPreTrainedModel:()=>e.DacPreTrainedModel,DataTypeMap:()=>s.DataTypeMap,DebertaForMaskedLM:()=>e.DebertaForMaskedLM,DebertaForQuestionAnswering:()=>e.DebertaForQuestionAnswering,DebertaForSequenceClassification:()=>e.DebertaForSequenceClassification,DebertaForTokenClassification:()=>e.DebertaForTokenClassification,DebertaModel:()=>e.DebertaModel,DebertaPreTrainedModel:()=>e.DebertaPreTrainedModel,DebertaTokenizer:()=>I.DebertaTokenizer,DebertaV2ForMaskedLM:()=>e.DebertaV2ForMaskedLM,DebertaV2ForQuestionAnswering:()=>e.DebertaV2ForQuestionAnswering,DebertaV2ForSequenceClassification:()=>e.DebertaV2ForSequenceClassification,DebertaV2ForTokenClassification:()=>e.DebertaV2ForTokenClassification,DebertaV2Model:()=>e.DebertaV2Model,DebertaV2PreTrainedModel:()=>e.DebertaV2PreTrainedModel,DebertaV2Tokenizer:()=>I.DebertaV2Tokenizer,DecisionTransformerModel:()=>e.DecisionTransformerModel,DecisionTransformerPreTrainedModel:()=>e.DecisionTransformerPreTrainedModel,DeiTFeatureExtractor:()=>c.DeiTFeatureExtractor,DeiTForImageClassification:()=>e.DeiTForImageClassification,DeiTImageProcessor:()=>c.DeiTImageProcessor,DeiTModel:()=>e.DeiTModel,DeiTPreTrainedModel:()=>e.DeiTPreTrainedModel,DepthAnythingForDepthEstimation:()=>e.DepthAnythingForDepthEstimation,DepthAnythingPreTrainedModel:()=>e.DepthAnythingPreTrainedModel,DepthEstimationPipeline:()=>g.DepthEstimationPipeline,DepthProForDepthEstimation:()=>e.DepthProForDepthEstimation,DepthProPreTrainedModel:()=>e.DepthProPreTrainedModel,DetrFeatureExtractor:()=>c.DetrFeatureExtractor,DetrForObjectDetection:()=>e.DetrForObjectDetection,DetrForSegmentation:()=>e.DetrForSegmentation,DetrImageProcessor:()=>c.DetrImageProcessor,DetrModel:()=>e.DetrModel,DetrObjectDetectionOutput:()=>e.DetrObjectDetectionOutput,DetrPreTrainedModel:()=>e.DetrPreTrainedModel,DetrSegmentationOutput:()=>e.DetrSegmentationOutput,Dinov2ForImageClassification:()=>e.Dinov2ForImageClassification,Dinov2Model:()=>e.Dinov2Model,Dinov2PreTrainedModel:()=>e.Dinov2PreTrainedModel,Dinov2WithRegistersForImageClassification:()=>e.Dinov2WithRegistersForImageClassification,Dinov2WithRegistersModel:()=>e.Dinov2WithRegistersModel,Dinov2WithRegistersPreTrainedModel:()=>e.Dinov2WithRegistersPreTrainedModel,DistilBertForMaskedLM:()=>e.DistilBertForMaskedLM,DistilBertForQuestionAnswering:()=>e.DistilBertForQuestionAnswering,DistilBertForSequenceClassification:()=>e.DistilBertForSequenceClassification,DistilBertForTokenClassification:()=>e.DistilBertForTokenClassification,DistilBertModel:()=>e.DistilBertModel,DistilBertPreTrainedModel:()=>e.DistilBertPreTrainedModel,DistilBertTokenizer:()=>I.DistilBertTokenizer,DocumentQuestionAnsweringPipeline:()=>g.DocumentQuestionAnsweringPipeline,DonutFeatureExtractor:()=>c.DonutFeatureExtractor,DonutImageProcessor:()=>c.DonutImageProcessor,DonutSwinModel:()=>e.DonutSwinModel,DonutSwinPreTrainedModel:()=>e.DonutSwinPreTrainedModel,EfficientNetForImageClassification:()=>e.EfficientNetForImageClassification,EfficientNetImageProcessor:()=>c.EfficientNetImageProcessor,EfficientNetModel:()=>e.EfficientNetModel,EfficientNetPreTrainedModel:()=>e.EfficientNetPreTrainedModel,ElectraForMaskedLM:()=>e.ElectraForMaskedLM,ElectraForQuestionAnswering:()=>e.ElectraForQuestionAnswering,ElectraForSequenceClassification:()=>e.ElectraForSequenceClassification,ElectraForTokenClassification:()=>e.ElectraForTokenClassification,ElectraModel:()=>e.ElectraModel,ElectraPreTrainedModel:()=>e.ElectraPreTrainedModel,ElectraTokenizer:()=>I.ElectraTokenizer,EncodecFeatureExtractor:()=>B.EncodecFeatureExtractor,EosTokenCriteria:()=>w.EosTokenCriteria,EsmForMaskedLM:()=>e.EsmForMaskedLM,EsmForSequenceClassification:()=>e.EsmForSequenceClassification,EsmForTokenClassification:()=>e.EsmForTokenClassification,EsmModel:()=>e.EsmModel,EsmPreTrainedModel:()=>e.EsmPreTrainedModel,EsmTokenizer:()=>I.EsmTokenizer,ExaoneForCausalLM:()=>e.ExaoneForCausalLM,ExaoneModel:()=>e.ExaoneModel,ExaonePreTrainedModel:()=>e.ExaonePreTrainedModel,FFT:()=>Q.FFT,FalconForCausalLM:()=>e.FalconForCausalLM,FalconModel:()=>e.FalconModel,FalconPreTrainedModel:()=>e.FalconPreTrainedModel,FalconTokenizer:()=>I.FalconTokenizer,FastViTForImageClassification:()=>e.FastViTForImageClassification,FastViTModel:()=>e.FastViTModel,FastViTPreTrainedModel:()=>e.FastViTPreTrainedModel,FeatureExtractionPipeline:()=>g.FeatureExtractionPipeline,FeatureExtractor:()=>r.FeatureExtractor,FillMaskPipeline:()=>g.FillMaskPipeline,Florence2ForConditionalGeneration:()=>e.Florence2ForConditionalGeneration,Florence2PreTrainedModel:()=>e.Florence2PreTrainedModel,Florence2Processor:()=>u.Florence2Processor,ForcedBOSTokenLogitsProcessor:()=>y.ForcedBOSTokenLogitsProcessor,ForcedEOSTokenLogitsProcessor:()=>y.ForcedEOSTokenLogitsProcessor,GLPNFeatureExtractor:()=>c.GLPNFeatureExtractor,GLPNForDepthEstimation:()=>e.GLPNForDepthEstimation,GLPNModel:()=>e.GLPNModel,GLPNPreTrainedModel:()=>e.GLPNPreTrainedModel,GPT2LMHeadModel:()=>e.GPT2LMHeadModel,GPT2Model:()=>e.GPT2Model,GPT2PreTrainedModel:()=>e.GPT2PreTrainedModel,GPT2Tokenizer:()=>I.GPT2Tokenizer,GPTBigCodeForCausalLM:()=>e.GPTBigCodeForCausalLM,GPTBigCodeModel:()=>e.GPTBigCodeModel,GPTBigCodePreTrainedModel:()=>e.GPTBigCodePreTrainedModel,GPTJForCausalLM:()=>e.GPTJForCausalLM,GPTJModel:()=>e.GPTJModel,GPTJPreTrainedModel:()=>e.GPTJPreTrainedModel,GPTNeoForCausalLM:()=>e.GPTNeoForCausalLM,GPTNeoModel:()=>e.GPTNeoModel,GPTNeoPreTrainedModel:()=>e.GPTNeoPreTrainedModel,GPTNeoXForCausalLM:()=>e.GPTNeoXForCausalLM,GPTNeoXModel:()=>e.GPTNeoXModel,GPTNeoXPreTrainedModel:()=>e.GPTNeoXPreTrainedModel,GPTNeoXTokenizer:()=>I.GPTNeoXTokenizer,Gemma2ForCausalLM:()=>e.Gemma2ForCausalLM,Gemma2Model:()=>e.Gemma2Model,Gemma2PreTrainedModel:()=>e.Gemma2PreTrainedModel,Gemma3ForCausalLM:()=>e.Gemma3ForCausalLM,Gemma3Model:()=>e.Gemma3Model,Gemma3PreTrainedModel:()=>e.Gemma3PreTrainedModel,GemmaForCausalLM:()=>e.GemmaForCausalLM,GemmaModel:()=>e.GemmaModel,GemmaPreTrainedModel:()=>e.GemmaPreTrainedModel,GemmaTokenizer:()=>I.GemmaTokenizer,GlmForCausalLM:()=>e.GlmForCausalLM,GlmModel:()=>e.GlmModel,GlmPreTrainedModel:()=>e.GlmPreTrainedModel,GraniteForCausalLM:()=>e.GraniteForCausalLM,GraniteModel:()=>e.GraniteModel,GranitePreTrainedModel:()=>e.GranitePreTrainedModel,Grok1Tokenizer:()=>I.Grok1Tokenizer,GroundingDinoForObjectDetection:()=>e.GroundingDinoForObjectDetection,GroundingDinoImageProcessor:()=>c.GroundingDinoImageProcessor,GroundingDinoPreTrainedModel:()=>e.GroundingDinoPreTrainedModel,GroundingDinoProcessor:()=>u.GroundingDinoProcessor,GroupViTModel:()=>e.GroupViTModel,GroupViTPreTrainedModel:()=>e.GroupViTPreTrainedModel,HeliumForCausalLM:()=>e.HeliumForCausalLM,HeliumModel:()=>e.HeliumModel,HeliumPreTrainedModel:()=>e.HeliumPreTrainedModel,HerbertTokenizer:()=>I.HerbertTokenizer,HieraForImageClassification:()=>e.HieraForImageClassification,HieraModel:()=>e.HieraModel,HieraPreTrainedModel:()=>e.HieraPreTrainedModel,HubertForCTC:()=>e.HubertForCTC,HubertForSequenceClassification:()=>e.HubertForSequenceClassification,HubertModel:()=>e.HubertModel,HubertPreTrainedModel:()=>e.HubertPreTrainedModel,IJepaForImageClassification:()=>e.IJepaForImageClassification,IJepaModel:()=>e.IJepaModel,IJepaPreTrainedModel:()=>e.IJepaPreTrainedModel,Idefics3ForConditionalGeneration:()=>e.Idefics3ForConditionalGeneration,Idefics3ImageProcessor:()=>c.Idefics3ImageProcessor,Idefics3PreTrainedModel:()=>e.Idefics3PreTrainedModel,Idefics3Processor:()=>u.Idefics3Processor,ImageClassificationPipeline:()=>g.ImageClassificationPipeline,ImageFeatureExtractionPipeline:()=>g.ImageFeatureExtractionPipeline,ImageFeatureExtractor:()=>B.ImageFeatureExtractor,ImageMattingOutput:()=>e.ImageMattingOutput,ImageProcessor:()=>d.ImageProcessor,ImageSegmentationPipeline:()=>g.ImageSegmentationPipeline,ImageToImagePipeline:()=>g.ImageToImagePipeline,ImageToTextPipeline:()=>g.ImageToTextPipeline,InterruptableStoppingCriteria:()=>w.InterruptableStoppingCriteria,JAISLMHeadModel:()=>e.JAISLMHeadModel,JAISModel:()=>e.JAISModel,JAISPreTrainedModel:()=>e.JAISPreTrainedModel,JinaCLIPImageProcessor:()=>c.JinaCLIPImageProcessor,JinaCLIPModel:()=>e.JinaCLIPModel,JinaCLIPPreTrainedModel:()=>e.JinaCLIPPreTrainedModel,JinaCLIPProcessor:()=>u.JinaCLIPProcessor,JinaCLIPTextModel:()=>e.JinaCLIPTextModel,JinaCLIPVisionModel:()=>e.JinaCLIPVisionModel,LiteWhisperForConditionalGeneration:()=>e.LiteWhisperForConditionalGeneration,LlamaForCausalLM:()=>e.LlamaForCausalLM,LlamaModel:()=>e.LlamaModel,LlamaPreTrainedModel:()=>e.LlamaPreTrainedModel,LlamaTokenizer:()=>I.LlamaTokenizer,LlavaForConditionalGeneration:()=>e.LlavaForConditionalGeneration,LlavaOnevisionForConditionalGeneration:()=>e.LlavaOnevisionForConditionalGeneration,LlavaOnevisionImageProcessor:()=>c.LlavaOnevisionImageProcessor,LlavaPreTrainedModel:()=>e.LlavaPreTrainedModel,LogitsProcessor:()=>y.LogitsProcessor,LogitsProcessorList:()=>y.LogitsProcessorList,LogitsWarper:()=>y.LogitsWarper,LongT5ForConditionalGeneration:()=>e.LongT5ForConditionalGeneration,LongT5Model:()=>e.LongT5Model,LongT5PreTrainedModel:()=>e.LongT5PreTrainedModel,M2M100ForConditionalGeneration:()=>e.M2M100ForConditionalGeneration,M2M100Model:()=>e.M2M100Model,M2M100PreTrainedModel:()=>e.M2M100PreTrainedModel,M2M100Tokenizer:()=>I.M2M100Tokenizer,MBart50Tokenizer:()=>I.MBart50Tokenizer,MBartForCausalLM:()=>e.MBartForCausalLM,MBartForConditionalGeneration:()=>e.MBartForConditionalGeneration,MBartForSequenceClassification:()=>e.MBartForSequenceClassification,MBartModel:()=>e.MBartModel,MBartPreTrainedModel:()=>e.MBartPreTrainedModel,MBartTokenizer:()=>I.MBartTokenizer,MPNetForMaskedLM:()=>e.MPNetForMaskedLM,MPNetForQuestionAnswering:()=>e.MPNetForQuestionAnswering,MPNetForSequenceClassification:()=>e.MPNetForSequenceClassification,MPNetForTokenClassification:()=>e.MPNetForTokenClassification,MPNetModel:()=>e.MPNetModel,MPNetPreTrainedModel:()=>e.MPNetPreTrainedModel,MPNetTokenizer:()=>I.MPNetTokenizer,MT5ForConditionalGeneration:()=>e.MT5ForConditionalGeneration,MT5Model:()=>e.MT5Model,MT5PreTrainedModel:()=>e.MT5PreTrainedModel,MarianMTModel:()=>e.MarianMTModel,MarianModel:()=>e.MarianModel,MarianPreTrainedModel:()=>e.MarianPreTrainedModel,MarianTokenizer:()=>I.MarianTokenizer,Mask2FormerImageProcessor:()=>c.Mask2FormerImageProcessor,MaskFormerFeatureExtractor:()=>c.MaskFormerFeatureExtractor,MaskFormerForInstanceSegmentation:()=>e.MaskFormerForInstanceSegmentation,MaskFormerImageProcessor:()=>c.MaskFormerImageProcessor,MaskFormerModel:()=>e.MaskFormerModel,MaskFormerPreTrainedModel:()=>e.MaskFormerPreTrainedModel,MaskedLMOutput:()=>e.MaskedLMOutput,MaxLengthCriteria:()=>w.MaxLengthCriteria,Metric3DForDepthEstimation:()=>e.Metric3DForDepthEstimation,Metric3DPreTrainedModel:()=>e.Metric3DPreTrainedModel,Metric3Dv2ForDepthEstimation:()=>e.Metric3Dv2ForDepthEstimation,Metric3Dv2PreTrainedModel:()=>e.Metric3Dv2PreTrainedModel,MgpstrForSceneTextRecognition:()=>e.MgpstrForSceneTextRecognition,MgpstrModelOutput:()=>e.MgpstrModelOutput,MgpstrPreTrainedModel:()=>e.MgpstrPreTrainedModel,MgpstrProcessor:()=>u.MgpstrProcessor,MgpstrTokenizer:()=>I.MgpstrTokenizer,MimiDecoderModel:()=>e.MimiDecoderModel,MimiDecoderOutput:()=>e.MimiDecoderOutput,MimiEncoderModel:()=>e.MimiEncoderModel,MimiEncoderOutput:()=>e.MimiEncoderOutput,MimiModel:()=>e.MimiModel,MimiPreTrainedModel:()=>e.MimiPreTrainedModel,MinLengthLogitsProcessor:()=>y.MinLengthLogitsProcessor,MinNewTokensLengthLogitsProcessor:()=>y.MinNewTokensLengthLogitsProcessor,MistralForCausalLM:()=>e.MistralForCausalLM,MistralModel:()=>e.MistralModel,MistralPreTrainedModel:()=>e.MistralPreTrainedModel,MobileBertForMaskedLM:()=>e.MobileBertForMaskedLM,MobileBertForQuestionAnswering:()=>e.MobileBertForQuestionAnswering,MobileBertForSequenceClassification:()=>e.MobileBertForSequenceClassification,MobileBertModel:()=>e.MobileBertModel,MobileBertPreTrainedModel:()=>e.MobileBertPreTrainedModel,MobileBertTokenizer:()=>I.MobileBertTokenizer,MobileLLMForCausalLM:()=>e.MobileLLMForCausalLM,MobileLLMModel:()=>e.MobileLLMModel,MobileLLMPreTrainedModel:()=>e.MobileLLMPreTrainedModel,MobileNetV1FeatureExtractor:()=>c.MobileNetV1FeatureExtractor,MobileNetV1ForImageClassification:()=>e.MobileNetV1ForImageClassification,MobileNetV1ForSemanticSegmentation:()=>e.MobileNetV1ForSemanticSegmentation,MobileNetV1ImageProcessor:()=>c.MobileNetV1ImageProcessor,MobileNetV1Model:()=>e.MobileNetV1Model,MobileNetV1PreTrainedModel:()=>e.MobileNetV1PreTrainedModel,MobileNetV2FeatureExtractor:()=>c.MobileNetV2FeatureExtractor,MobileNetV2ForImageClassification:()=>e.MobileNetV2ForImageClassification,MobileNetV2ForSemanticSegmentation:()=>e.MobileNetV2ForSemanticSegmentation,MobileNetV2ImageProcessor:()=>c.MobileNetV2ImageProcessor,MobileNetV2Model:()=>e.MobileNetV2Model,MobileNetV2PreTrainedModel:()=>e.MobileNetV2PreTrainedModel,MobileNetV3FeatureExtractor:()=>c.MobileNetV3FeatureExtractor,MobileNetV3ForImageClassification:()=>e.MobileNetV3ForImageClassification,MobileNetV3ForSemanticSegmentation:()=>e.MobileNetV3ForSemanticSegmentation,MobileNetV3ImageProcessor:()=>c.MobileNetV3ImageProcessor,MobileNetV3Model:()=>e.MobileNetV3Model,MobileNetV3PreTrainedModel:()=>e.MobileNetV3PreTrainedModel,MobileNetV4FeatureExtractor:()=>c.MobileNetV4FeatureExtractor,MobileNetV4ForImageClassification:()=>e.MobileNetV4ForImageClassification,MobileNetV4ForSemanticSegmentation:()=>e.MobileNetV4ForSemanticSegmentation,MobileNetV4ImageProcessor:()=>c.MobileNetV4ImageProcessor,MobileNetV4Model:()=>e.MobileNetV4Model,MobileNetV4PreTrainedModel:()=>e.MobileNetV4PreTrainedModel,MobileViTFeatureExtractor:()=>c.MobileViTFeatureExtractor,MobileViTForImageClassification:()=>e.MobileViTForImageClassification,MobileViTImageProcessor:()=>c.MobileViTImageProcessor,MobileViTModel:()=>e.MobileViTModel,MobileViTPreTrainedModel:()=>e.MobileViTPreTrainedModel,MobileViTV2ForImageClassification:()=>e.MobileViTV2ForImageClassification,MobileViTV2Model:()=>e.MobileViTV2Model,MobileViTV2PreTrainedModel:()=>e.MobileViTV2PreTrainedModel,ModelOutput:()=>e.ModelOutput,ModernBertForMaskedLM:()=>e.ModernBertForMaskedLM,ModernBertForSequenceClassification:()=>e.ModernBertForSequenceClassification,ModernBertForTokenClassification:()=>e.ModernBertForTokenClassification,ModernBertModel:()=>e.ModernBertModel,ModernBertPreTrainedModel:()=>e.ModernBertPreTrainedModel,Moondream1ForConditionalGeneration:()=>e.Moondream1ForConditionalGeneration,MoonshineFeatureExtractor:()=>B.MoonshineFeatureExtractor,MoonshineForConditionalGeneration:()=>e.MoonshineForConditionalGeneration,MoonshineModel:()=>e.MoonshineModel,MoonshinePreTrainedModel:()=>e.MoonshinePreTrainedModel,MoonshineProcessor:()=>u.MoonshineProcessor,MptForCausalLM:()=>e.MptForCausalLM,MptModel:()=>e.MptModel,MptPreTrainedModel:()=>e.MptPreTrainedModel,MultiModalityCausalLM:()=>e.MultiModalityCausalLM,MultiModalityPreTrainedModel:()=>e.MultiModalityPreTrainedModel,MusicgenForCausalLM:()=>e.MusicgenForCausalLM,MusicgenForConditionalGeneration:()=>e.MusicgenForConditionalGeneration,MusicgenModel:()=>e.MusicgenModel,MusicgenPreTrainedModel:()=>e.MusicgenPreTrainedModel,NllbTokenizer:()=>I.NllbTokenizer,NoBadWordsLogitsProcessor:()=>y.NoBadWordsLogitsProcessor,NoRepeatNGramLogitsProcessor:()=>y.NoRepeatNGramLogitsProcessor,NomicBertModel:()=>e.NomicBertModel,NomicBertPreTrainedModel:()=>e.NomicBertPreTrainedModel,NougatImageProcessor:()=>c.NougatImageProcessor,NougatTokenizer:()=>I.NougatTokenizer,OPTForCausalLM:()=>e.OPTForCausalLM,OPTModel:()=>e.OPTModel,OPTPreTrainedModel:()=>e.OPTPreTrainedModel,ObjectDetectionPipeline:()=>g.ObjectDetectionPipeline,Olmo2ForCausalLM:()=>e.Olmo2ForCausalLM,Olmo2Model:()=>e.Olmo2Model,Olmo2PreTrainedModel:()=>e.Olmo2PreTrainedModel,OlmoForCausalLM:()=>e.OlmoForCausalLM,OlmoModel:()=>e.OlmoModel,OlmoPreTrainedModel:()=>e.OlmoPreTrainedModel,OpenELMForCausalLM:()=>e.OpenELMForCausalLM,OpenELMModel:()=>e.OpenELMModel,OpenELMPreTrainedModel:()=>e.OpenELMPreTrainedModel,OwlViTFeatureExtractor:()=>c.OwlViTFeatureExtractor,OwlViTForObjectDetection:()=>e.OwlViTForObjectDetection,OwlViTImageProcessor:()=>c.OwlViTImageProcessor,OwlViTModel:()=>e.OwlViTModel,OwlViTPreTrainedModel:()=>e.OwlViTPreTrainedModel,OwlViTProcessor:()=>u.OwlViTProcessor,Owlv2ForObjectDetection:()=>e.Owlv2ForObjectDetection,Owlv2ImageProcessor:()=>c.Owlv2ImageProcessor,Owlv2Model:()=>e.Owlv2Model,Owlv2PreTrainedModel:()=>e.Owlv2PreTrainedModel,PaliGemmaForConditionalGeneration:()=>e.PaliGemmaForConditionalGeneration,PaliGemmaPreTrainedModel:()=>e.PaliGemmaPreTrainedModel,PaliGemmaProcessor:()=>u.PaliGemmaProcessor,PatchTSMixerForPrediction:()=>e.PatchTSMixerForPrediction,PatchTSMixerModel:()=>e.PatchTSMixerModel,PatchTSMixerPreTrainedModel:()=>e.PatchTSMixerPreTrainedModel,PatchTSTForPrediction:()=>e.PatchTSTForPrediction,PatchTSTModel:()=>e.PatchTSTModel,PatchTSTPreTrainedModel:()=>e.PatchTSTPreTrainedModel,Phi3ForCausalLM:()=>e.Phi3ForCausalLM,Phi3Model:()=>e.Phi3Model,Phi3PreTrainedModel:()=>e.Phi3PreTrainedModel,Phi3VForCausalLM:()=>e.Phi3VForCausalLM,Phi3VImageProcessor:()=>c.Phi3VImageProcessor,Phi3VPreTrainedModel:()=>e.Phi3VPreTrainedModel,Phi3VProcessor:()=>u.Phi3VProcessor,PhiForCausalLM:()=>e.PhiForCausalLM,PhiModel:()=>e.PhiModel,PhiPreTrainedModel:()=>e.PhiPreTrainedModel,Pipeline:()=>g.Pipeline,PreTrainedModel:()=>e.PreTrainedModel,PreTrainedTokenizer:()=>I.PreTrainedTokenizer,PretrainedConfig:()=>i.PretrainedConfig,PretrainedMixin:()=>e.PretrainedMixin,Processor:()=>L.Processor,PvtForImageClassification:()=>e.PvtForImageClassification,PvtImageProcessor:()=>c.PvtImageProcessor,PvtModel:()=>e.PvtModel,PvtPreTrainedModel:()=>e.PvtPreTrainedModel,PyAnnoteFeatureExtractor:()=>B.PyAnnoteFeatureExtractor,PyAnnoteForAudioFrameClassification:()=>e.PyAnnoteForAudioFrameClassification,PyAnnoteModel:()=>e.PyAnnoteModel,PyAnnotePreTrainedModel:()=>e.PyAnnotePreTrainedModel,PyAnnoteProcessor:()=>u.PyAnnoteProcessor,QuestionAnsweringModelOutput:()=>e.QuestionAnsweringModelOutput,QuestionAnsweringPipeline:()=>g.QuestionAnsweringPipeline,Qwen2ForCausalLM:()=>e.Qwen2ForCausalLM,Qwen2Model:()=>e.Qwen2Model,Qwen2PreTrainedModel:()=>e.Qwen2PreTrainedModel,Qwen2Tokenizer:()=>I.Qwen2Tokenizer,Qwen2VLForConditionalGeneration:()=>e.Qwen2VLForConditionalGeneration,Qwen2VLImageProcessor:()=>c.Qwen2VLImageProcessor,Qwen2VLPreTrainedModel:()=>e.Qwen2VLPreTrainedModel,Qwen2VLProcessor:()=>u.Qwen2VLProcessor,Qwen3ForCausalLM:()=>e.Qwen3ForCausalLM,Qwen3Model:()=>e.Qwen3Model,Qwen3PreTrainedModel:()=>e.Qwen3PreTrainedModel,RFDetrForObjectDetection:()=>e.RFDetrForObjectDetection,RFDetrModel:()=>e.RFDetrModel,RFDetrObjectDetectionOutput:()=>e.RFDetrObjectDetectionOutput,RFDetrPreTrainedModel:()=>e.RFDetrPreTrainedModel,RTDetrForObjectDetection:()=>e.RTDetrForObjectDetection,RTDetrImageProcessor:()=>c.RTDetrImageProcessor,RTDetrModel:()=>e.RTDetrModel,RTDetrObjectDetectionOutput:()=>e.RTDetrObjectDetectionOutput,RTDetrPreTrainedModel:()=>e.RTDetrPreTrainedModel,RTDetrV2ForObjectDetection:()=>e.RTDetrV2ForObjectDetection,RTDetrV2Model:()=>e.RTDetrV2Model,RTDetrV2ObjectDetectionOutput:()=>e.RTDetrV2ObjectDetectionOutput,RTDetrV2PreTrainedModel:()=>e.RTDetrV2PreTrainedModel,RawAudio:()=>t.RawAudio,RawImage:()=>o.RawImage,RawVideo:()=>C.RawVideo,RawVideoFrame:()=>C.RawVideoFrame,RepetitionPenaltyLogitsProcessor:()=>y.RepetitionPenaltyLogitsProcessor,ResNetForImageClassification:()=>e.ResNetForImageClassification,ResNetModel:()=>e.ResNetModel,ResNetPreTrainedModel:()=>e.ResNetPreTrainedModel,RoFormerForMaskedLM:()=>e.RoFormerForMaskedLM,RoFormerForQuestionAnswering:()=>e.RoFormerForQuestionAnswering,RoFormerForSequenceClassification:()=>e.RoFormerForSequenceClassification,RoFormerForTokenClassification:()=>e.RoFormerForTokenClassification,RoFormerModel:()=>e.RoFormerModel,RoFormerPreTrainedModel:()=>e.RoFormerPreTrainedModel,RoFormerTokenizer:()=>I.RoFormerTokenizer,RobertaForMaskedLM:()=>e.RobertaForMaskedLM,RobertaForQuestionAnswering:()=>e.RobertaForQuestionAnswering,RobertaForSequenceClassification:()=>e.RobertaForSequenceClassification,RobertaForTokenClassification:()=>e.RobertaForTokenClassification,RobertaModel:()=>e.RobertaModel,RobertaPreTrainedModel:()=>e.RobertaPreTrainedModel,RobertaTokenizer:()=>I.RobertaTokenizer,SamImageProcessor:()=>c.SamImageProcessor,SamImageSegmentationOutput:()=>e.SamImageSegmentationOutput,SamModel:()=>e.SamModel,SamPreTrainedModel:()=>e.SamPreTrainedModel,SamProcessor:()=>u.SamProcessor,SapiensForDepthEstimation:()=>e.SapiensForDepthEstimation,SapiensForNormalEstimation:()=>e.SapiensForNormalEstimation,SapiensForSemanticSegmentation:()=>e.SapiensForSemanticSegmentation,SapiensPreTrainedModel:()=>e.SapiensPreTrainedModel,SeamlessM4TFeatureExtractor:()=>B.SeamlessM4TFeatureExtractor,SegformerFeatureExtractor:()=>c.SegformerFeatureExtractor,SegformerForImageClassification:()=>e.SegformerForImageClassification,SegformerForSemanticSegmentation:()=>e.SegformerForSemanticSegmentation,SegformerImageProcessor:()=>c.SegformerImageProcessor,SegformerModel:()=>e.SegformerModel,SegformerPreTrainedModel:()=>e.SegformerPreTrainedModel,Seq2SeqLMOutput:()=>e.Seq2SeqLMOutput,SequenceClassifierOutput:()=>e.SequenceClassifierOutput,SiglipImageProcessor:()=>c.SiglipImageProcessor,SiglipModel:()=>e.SiglipModel,SiglipPreTrainedModel:()=>e.SiglipPreTrainedModel,SiglipTextModel:()=>e.SiglipTextModel,SiglipTokenizer:()=>I.SiglipTokenizer,SiglipVisionModel:()=>e.SiglipVisionModel,SmolVLMForConditionalGeneration:()=>e.SmolVLMForConditionalGeneration,SmolVLMImageProcessor:()=>c.SmolVLMImageProcessor,SmolVLMProcessor:()=>u.SmolVLMProcessor,SnacDecoderModel:()=>e.SnacDecoderModel,SnacEncoderModel:()=>e.SnacEncoderModel,SnacFeatureExtractor:()=>B.SnacFeatureExtractor,SnacModel:()=>e.SnacModel,SnacPreTrainedModel:()=>e.SnacPreTrainedModel,SpeechT5FeatureExtractor:()=>B.SpeechT5FeatureExtractor,SpeechT5ForSpeechToText:()=>e.SpeechT5ForSpeechToText,SpeechT5ForTextToSpeech:()=>e.SpeechT5ForTextToSpeech,SpeechT5HifiGan:()=>e.SpeechT5HifiGan,SpeechT5Model:()=>e.SpeechT5Model,SpeechT5PreTrainedModel:()=>e.SpeechT5PreTrainedModel,SpeechT5Processor:()=>u.SpeechT5Processor,SpeechT5Tokenizer:()=>I.SpeechT5Tokenizer,SqueezeBertForMaskedLM:()=>e.SqueezeBertForMaskedLM,SqueezeBertForQuestionAnswering:()=>e.SqueezeBertForQuestionAnswering,SqueezeBertForSequenceClassification:()=>e.SqueezeBertForSequenceClassification,SqueezeBertModel:()=>e.SqueezeBertModel,SqueezeBertPreTrainedModel:()=>e.SqueezeBertPreTrainedModel,SqueezeBertTokenizer:()=>I.SqueezeBertTokenizer,StableLmForCausalLM:()=>e.StableLmForCausalLM,StableLmModel:()=>e.StableLmModel,StableLmPreTrainedModel:()=>e.StableLmPreTrainedModel,Starcoder2ForCausalLM:()=>e.Starcoder2ForCausalLM,Starcoder2Model:()=>e.Starcoder2Model,Starcoder2PreTrainedModel:()=>e.Starcoder2PreTrainedModel,StoppingCriteria:()=>w.StoppingCriteria,StoppingCriteriaList:()=>w.StoppingCriteriaList,StyleTextToSpeech2Model:()=>e.StyleTextToSpeech2Model,StyleTextToSpeech2PreTrainedModel:()=>e.StyleTextToSpeech2PreTrainedModel,SummarizationPipeline:()=>g.SummarizationPipeline,SuppressTokensAtBeginLogitsProcessor:()=>y.SuppressTokensAtBeginLogitsProcessor,Swin2SRForImageSuperResolution:()=>e.Swin2SRForImageSuperResolution,Swin2SRImageProcessor:()=>c.Swin2SRImageProcessor,Swin2SRModel:()=>e.Swin2SRModel,Swin2SRPreTrainedModel:()=>e.Swin2SRPreTrainedModel,SwinForImageClassification:()=>e.SwinForImageClassification,SwinForSemanticSegmentation:()=>e.SwinForSemanticSegmentation,SwinModel:()=>e.SwinModel,SwinPreTrainedModel:()=>e.SwinPreTrainedModel,T5ForConditionalGeneration:()=>e.T5ForConditionalGeneration,T5Model:()=>e.T5Model,T5PreTrainedModel:()=>e.T5PreTrainedModel,T5Tokenizer:()=>I.T5Tokenizer,TableTransformerForObjectDetection:()=>e.TableTransformerForObjectDetection,TableTransformerModel:()=>e.TableTransformerModel,TableTransformerObjectDetectionOutput:()=>e.TableTransformerObjectDetectionOutput,TableTransformerPreTrainedModel:()=>e.TableTransformerPreTrainedModel,TemperatureLogitsWarper:()=>y.TemperatureLogitsWarper,Tensor:()=>s.Tensor,Text2TextGenerationPipeline:()=>g.Text2TextGenerationPipeline,TextClassificationPipeline:()=>g.TextClassificationPipeline,TextGenerationPipeline:()=>g.TextGenerationPipeline,TextStreamer:()=>R.TextStreamer,TextToAudioPipeline:()=>g.TextToAudioPipeline,TokenClassificationPipeline:()=>g.TokenClassificationPipeline,TokenClassifierOutput:()=>e.TokenClassifierOutput,TokenizerModel:()=>I.TokenizerModel,TopKLogitsWarper:()=>y.TopKLogitsWarper,TopPLogitsWarper:()=>y.TopPLogitsWarper,TrOCRForCausalLM:()=>e.TrOCRForCausalLM,TrOCRPreTrainedModel:()=>e.TrOCRPreTrainedModel,TranslationPipeline:()=>g.TranslationPipeline,UltravoxModel:()=>e.UltravoxModel,UltravoxPreTrainedModel:()=>e.UltravoxPreTrainedModel,UltravoxProcessor:()=>u.UltravoxProcessor,UniSpeechForCTC:()=>e.UniSpeechForCTC,UniSpeechForSequenceClassification:()=>e.UniSpeechForSequenceClassification,UniSpeechModel:()=>e.UniSpeechModel,UniSpeechPreTrainedModel:()=>e.UniSpeechPreTrainedModel,UniSpeechSatForAudioFrameClassification:()=>e.UniSpeechSatForAudioFrameClassification,UniSpeechSatForCTC:()=>e.UniSpeechSatForCTC,UniSpeechSatForSequenceClassification:()=>e.UniSpeechSatForSequenceClassification,UniSpeechSatModel:()=>e.UniSpeechSatModel,UniSpeechSatPreTrainedModel:()=>e.UniSpeechSatPreTrainedModel,VLChatProcessor:()=>u.VLChatProcessor,VLMImageProcessor:()=>c.VLMImageProcessor,ViTFeatureExtractor:()=>c.ViTFeatureExtractor,ViTForImageClassification:()=>e.ViTForImageClassification,ViTImageProcessor:()=>c.ViTImageProcessor,ViTMAEModel:()=>e.ViTMAEModel,ViTMAEPreTrainedModel:()=>e.ViTMAEPreTrainedModel,ViTMSNForImageClassification:()=>e.ViTMSNForImageClassification,ViTMSNModel:()=>e.ViTMSNModel,ViTMSNPreTrainedModel:()=>e.ViTMSNPreTrainedModel,ViTModel:()=>e.ViTModel,ViTPreTrainedModel:()=>e.ViTPreTrainedModel,VisionEncoderDecoderModel:()=>e.VisionEncoderDecoderModel,VitMatteForImageMatting:()=>e.VitMatteForImageMatting,VitMatteImageProcessor:()=>c.VitMatteImageProcessor,VitMattePreTrainedModel:()=>e.VitMattePreTrainedModel,VitPoseForPoseEstimation:()=>e.VitPoseForPoseEstimation,VitPoseImageProcessor:()=>c.VitPoseImageProcessor,VitPosePreTrainedModel:()=>e.VitPosePreTrainedModel,VitsModel:()=>e.VitsModel,VitsModelOutput:()=>e.VitsModelOutput,VitsPreTrainedModel:()=>e.VitsPreTrainedModel,VitsTokenizer:()=>I.VitsTokenizer,Wav2Vec2BertForCTC:()=>e.Wav2Vec2BertForCTC,Wav2Vec2BertForSequenceClassification:()=>e.Wav2Vec2BertForSequenceClassification,Wav2Vec2BertModel:()=>e.Wav2Vec2BertModel,Wav2Vec2BertPreTrainedModel:()=>e.Wav2Vec2BertPreTrainedModel,Wav2Vec2CTCTokenizer:()=>I.Wav2Vec2CTCTokenizer,Wav2Vec2FeatureExtractor:()=>B.Wav2Vec2FeatureExtractor,Wav2Vec2ForAudioFrameClassification:()=>e.Wav2Vec2ForAudioFrameClassification,Wav2Vec2ForCTC:()=>e.Wav2Vec2ForCTC,Wav2Vec2ForSequenceClassification:()=>e.Wav2Vec2ForSequenceClassification,Wav2Vec2Model:()=>e.Wav2Vec2Model,Wav2Vec2PreTrainedModel:()=>e.Wav2Vec2PreTrainedModel,Wav2Vec2Processor:()=>u.Wav2Vec2Processor,Wav2Vec2ProcessorWithLM:()=>u.Wav2Vec2ProcessorWithLM,WavLMForAudioFrameClassification:()=>e.WavLMForAudioFrameClassification,WavLMForCTC:()=>e.WavLMForCTC,WavLMForSequenceClassification:()=>e.WavLMForSequenceClassification,WavLMForXVector:()=>e.WavLMForXVector,WavLMModel:()=>e.WavLMModel,WavLMPreTrainedModel:()=>e.WavLMPreTrainedModel,WeSpeakerFeatureExtractor:()=>B.WeSpeakerFeatureExtractor,WeSpeakerResNetModel:()=>e.WeSpeakerResNetModel,WeSpeakerResNetPreTrainedModel:()=>e.WeSpeakerResNetPreTrainedModel,WhisperFeatureExtractor:()=>B.WhisperFeatureExtractor,WhisperForConditionalGeneration:()=>e.WhisperForConditionalGeneration,WhisperModel:()=>e.WhisperModel,WhisperPreTrainedModel:()=>e.WhisperPreTrainedModel,WhisperProcessor:()=>u.WhisperProcessor,WhisperTextStreamer:()=>R.WhisperTextStreamer,WhisperTimeStampLogitsProcessor:()=>y.WhisperTimeStampLogitsProcessor,WhisperTokenizer:()=>I.WhisperTokenizer,XLMForQuestionAnswering:()=>e.XLMForQuestionAnswering,XLMForSequenceClassification:()=>e.XLMForSequenceClassification,XLMForTokenClassification:()=>e.XLMForTokenClassification,XLMModel:()=>e.XLMModel,XLMPreTrainedModel:()=>e.XLMPreTrainedModel,XLMRobertaForMaskedLM:()=>e.XLMRobertaForMaskedLM,XLMRobertaForQuestionAnswering:()=>e.XLMRobertaForQuestionAnswering,XLMRobertaForSequenceClassification:()=>e.XLMRobertaForSequenceClassification,XLMRobertaForTokenClassification:()=>e.XLMRobertaForTokenClassification,XLMRobertaModel:()=>e.XLMRobertaModel,XLMRobertaPreTrainedModel:()=>e.XLMRobertaPreTrainedModel,XLMRobertaTokenizer:()=>I.XLMRobertaTokenizer,XLMTokenizer:()=>I.XLMTokenizer,XLMWithLMHeadModel:()=>e.XLMWithLMHeadModel,XVectorOutput:()=>e.XVectorOutput,YolosFeatureExtractor:()=>c.YolosFeatureExtractor,YolosForObjectDetection:()=>e.YolosForObjectDetection,YolosImageProcessor:()=>c.YolosImageProcessor,YolosModel:()=>e.YolosModel,YolosObjectDetectionOutput:()=>e.YolosObjectDetectionOutput,YolosPreTrainedModel:()=>e.YolosPreTrainedModel,ZeroShotAudioClassificationPipeline:()=>g.ZeroShotAudioClassificationPipeline,ZeroShotClassificationPipeline:()=>g.ZeroShotClassificationPipeline,ZeroShotImageClassificationPipeline:()=>g.ZeroShotImageClassificationPipeline,ZeroShotObjectDetectionPipeline:()=>g.ZeroShotObjectDetectionPipeline,bankers_round:()=>Q.bankers_round,cat:()=>s.cat,cos_sim:()=>Q.cos_sim,dot:()=>Q.dot,dynamic_time_warping:()=>Q.dynamic_time_warping,env:()=>A.env,full:()=>s.full,full_like:()=>s.full_like,getKeyValueShapes:()=>i.getKeyValueShapes,hamming:()=>t.hamming,hanning:()=>t.hanning,interpolate:()=>s.interpolate,interpolate_4d:()=>s.interpolate_4d,interpolate_data:()=>Q.interpolate_data,is_chinese_char:()=>I.is_chinese_char,layer_norm:()=>s.layer_norm,load_image:()=>o.load_image,load_video:()=>C.load_video,log_softmax:()=>Q.log_softmax,magnitude:()=>Q.magnitude,matmul:()=>s.matmul,max:()=>Q.max,mean:()=>s.mean,mean_pooling:()=>s.mean_pooling,medianFilter:()=>Q.medianFilter,mel_filter_bank:()=>t.mel_filter_bank,min:()=>Q.min,ones:()=>s.ones,ones_like:()=>s.ones_like,permute:()=>s.permute,permute_data:()=>Q.permute_data,pipeline:()=>g.pipeline,quantize_embeddings:()=>s.quantize_embeddings,rand:()=>s.rand,read_audio:()=>t.read_audio,rfft:()=>s.rfft,round:()=>Q.round,slice:()=>s.slice,softmax:()=>Q.softmax,spectrogram:()=>t.spectrogram,stack:()=>s.stack,std_mean:()=>s.std_mean,topk:()=>s.topk,window_function:()=>t.window_function,zeros:()=>s.zeros,zeros_like:()=>s.zeros_like});var A=qe("./src/env.js"),g=qe("./src/pipelines.js"),e=qe("./src/models.js"),I=qe("./src/tokenizers.js"),i=qe("./src/configs.js"),t=qe("./src/utils/audio.js"),o=qe("./src/utils/image.js"),C=qe("./src/utils/video.js"),s=qe("./src/utils/tensor.js"),Q=qe("./src/utils/maths.js"),r=qe("./src/base/feature_extraction_utils.js"),B=qe("./src/models/feature_extractors.js"),a=qe("./src/models/auto/feature_extraction_auto.js"),d=qe("./src/base/image_processors_utils.js"),c=qe("./src/models/image_processors.js"),F=qe("./src/models/auto/image_processing_auto.js"),L=qe("./src/base/processing_utils.js"),u=qe("./src/models/processors.js"),h=qe("./src/models/auto/processing_auto.js"),R=qe("./src/generation/streamers.js"),w=qe("./src/generation/stopping_criteria.js"),y=qe("./src/generation/logits_process.js")})();n.ASTFeatureExtractor;n.ASTForAudioClassification;n.ASTModel;n.ASTPreTrainedModel;n.AlbertForMaskedLM;n.AlbertForQuestionAnswering;n.AlbertForSequenceClassification;n.AlbertModel;n.AlbertPreTrainedModel;n.AlbertTokenizer;n.AudioClassificationPipeline;n.AutoConfig;n.AutoFeatureExtractor;n.AutoImageProcessor;n.AutoModel;n.AutoModelForAudioClassification;n.AutoModelForAudioFrameClassification;n.AutoModelForAudioTextToText;n.AutoModelForCTC;n.AutoModelForCausalLM;n.AutoModelForDepthEstimation;n.AutoModelForDocumentQuestionAnswering;n.AutoModelForImageClassification;n.AutoModelForImageFeatureExtraction;n.AutoModelForImageMatting;n.AutoModelForImageSegmentation;n.AutoModelForImageTextToText;n.AutoModelForImageToImage;n.AutoModelForMaskGeneration;n.AutoModelForMaskedLM;n.AutoModelForNormalEstimation;n.AutoModelForObjectDetection;n.AutoModelForPoseEstimation;n.AutoModelForQuestionAnswering;n.AutoModelForSemanticSegmentation;n.AutoModelForSeq2SeqLM;n.AutoModelForSequenceClassification;n.AutoModelForSpeechSeq2Seq;n.AutoModelForTextToSpectrogram;n.AutoModelForTextToWaveform;n.AutoModelForTokenClassification;n.AutoModelForUniversalSegmentation;n.AutoModelForVision2Seq;n.AutoModelForXVector;n.AutoModelForZeroShotObjectDetection;n.AutoProcessor;n.AutoTokenizer;n.AutomaticSpeechRecognitionPipeline;n.BackgroundRemovalPipeline;n.BartForConditionalGeneration;n.BartForSequenceClassification;n.BartModel;n.BartPretrainedModel;n.BartTokenizer;n.BaseModelOutput;n.BaseStreamer;n.BeitFeatureExtractor;n.BeitForImageClassification;n.BeitModel;n.BeitPreTrainedModel;n.BertForMaskedLM;n.BertForQuestionAnswering;n.BertForSequenceClassification;n.BertForTokenClassification;n.BertModel;n.BertPreTrainedModel;n.BertTokenizer;n.BitImageProcessor;n.BlenderbotForConditionalGeneration;n.BlenderbotModel;n.BlenderbotPreTrainedModel;n.BlenderbotSmallForConditionalGeneration;n.BlenderbotSmallModel;n.BlenderbotSmallPreTrainedModel;n.BlenderbotSmallTokenizer;n.BlenderbotTokenizer;n.BloomForCausalLM;n.BloomModel;n.BloomPreTrainedModel;n.BloomTokenizer;n.CLIPFeatureExtractor;n.CLIPImageProcessor;n.CLIPModel;n.CLIPPreTrainedModel;n.CLIPSegForImageSegmentation;n.CLIPSegModel;n.CLIPSegPreTrainedModel;n.CLIPTextModel;n.CLIPTextModelWithProjection;n.CLIPTokenizer;n.CLIPVisionModel;n.CLIPVisionModelWithProjection;n.CamembertForMaskedLM;n.CamembertForQuestionAnswering;n.CamembertForSequenceClassification;n.CamembertForTokenClassification;n.CamembertModel;n.CamembertPreTrainedModel;n.CamembertTokenizer;n.CausalLMOutput;n.CausalLMOutputWithPast;n.ChineseCLIPFeatureExtractor;n.ChineseCLIPModel;n.ChineseCLIPPreTrainedModel;n.ClapAudioModelWithProjection;n.ClapFeatureExtractor;n.ClapModel;n.ClapPreTrainedModel;n.ClapTextModelWithProjection;n.ClassifierFreeGuidanceLogitsProcessor;n.CodeGenForCausalLM;n.CodeGenModel;n.CodeGenPreTrainedModel;n.CodeGenTokenizer;n.CodeLlamaTokenizer;n.CohereForCausalLM;n.CohereModel;n.CoherePreTrainedModel;n.CohereTokenizer;n.ConvBertForMaskedLM;n.ConvBertForQuestionAnswering;n.ConvBertForSequenceClassification;n.ConvBertForTokenClassification;n.ConvBertModel;n.ConvBertPreTrainedModel;n.ConvBertTokenizer;n.ConvNextFeatureExtractor;n.ConvNextForImageClassification;n.ConvNextImageProcessor;n.ConvNextModel;n.ConvNextPreTrainedModel;n.ConvNextV2ForImageClassification;n.ConvNextV2Model;n.ConvNextV2PreTrainedModel;n.DFineForObjectDetection;n.DFineModel;n.DFinePreTrainedModel;n.DPTFeatureExtractor;n.DPTForDepthEstimation;n.DPTImageProcessor;n.DPTModel;n.DPTPreTrainedModel;n.DacDecoderModel;n.DacDecoderOutput;n.DacEncoderModel;n.DacEncoderOutput;n.DacFeatureExtractor;n.DacModel;n.DacPreTrainedModel;n.DataTypeMap;n.DebertaForMaskedLM;n.DebertaForQuestionAnswering;n.DebertaForSequenceClassification;n.DebertaForTokenClassification;n.DebertaModel;n.DebertaPreTrainedModel;n.DebertaTokenizer;n.DebertaV2ForMaskedLM;n.DebertaV2ForQuestionAnswering;n.DebertaV2ForSequenceClassification;n.DebertaV2ForTokenClassification;n.DebertaV2Model;n.DebertaV2PreTrainedModel;n.DebertaV2Tokenizer;n.DecisionTransformerModel;n.DecisionTransformerPreTrainedModel;n.DeiTFeatureExtractor;n.DeiTForImageClassification;n.DeiTImageProcessor;n.DeiTModel;n.DeiTPreTrainedModel;n.DepthAnythingForDepthEstimation;n.DepthAnythingPreTrainedModel;n.DepthEstimationPipeline;n.DepthProForDepthEstimation;n.DepthProPreTrainedModel;n.DetrFeatureExtractor;n.DetrForObjectDetection;n.DetrForSegmentation;n.DetrImageProcessor;n.DetrModel;n.DetrObjectDetectionOutput;n.DetrPreTrainedModel;n.DetrSegmentationOutput;n.Dinov2ForImageClassification;n.Dinov2Model;n.Dinov2PreTrainedModel;n.Dinov2WithRegistersForImageClassification;n.Dinov2WithRegistersModel;n.Dinov2WithRegistersPreTrainedModel;n.DistilBertForMaskedLM;n.DistilBertForQuestionAnswering;n.DistilBertForSequenceClassification;n.DistilBertForTokenClassification;n.DistilBertModel;n.DistilBertPreTrainedModel;n.DistilBertTokenizer;n.DocumentQuestionAnsweringPipeline;n.DonutFeatureExtractor;n.DonutImageProcessor;n.DonutSwinModel;n.DonutSwinPreTrainedModel;n.EfficientNetForImageClassification;n.EfficientNetImageProcessor;n.EfficientNetModel;n.EfficientNetPreTrainedModel;n.ElectraForMaskedLM;n.ElectraForQuestionAnswering;n.ElectraForSequenceClassification;n.ElectraForTokenClassification;n.ElectraModel;n.ElectraPreTrainedModel;n.ElectraTokenizer;n.EncodecFeatureExtractor;n.EosTokenCriteria;n.EsmForMaskedLM;n.EsmForSequenceClassification;n.EsmForTokenClassification;n.EsmModel;n.EsmPreTrainedModel;n.EsmTokenizer;n.ExaoneForCausalLM;n.ExaoneModel;n.ExaonePreTrainedModel;n.FFT;n.FalconForCausalLM;n.FalconModel;n.FalconPreTrainedModel;n.FalconTokenizer;n.FastViTForImageClassification;n.FastViTModel;n.FastViTPreTrainedModel;n.FeatureExtractionPipeline;n.FeatureExtractor;n.FillMaskPipeline;n.Florence2ForConditionalGeneration;n.Florence2PreTrainedModel;n.Florence2Processor;n.ForcedBOSTokenLogitsProcessor;n.ForcedEOSTokenLogitsProcessor;n.GLPNFeatureExtractor;n.GLPNForDepthEstimation;n.GLPNModel;n.GLPNPreTrainedModel;n.GPT2LMHeadModel;n.GPT2Model;n.GPT2PreTrainedModel;n.GPT2Tokenizer;n.GPTBigCodeForCausalLM;n.GPTBigCodeModel;n.GPTBigCodePreTrainedModel;n.GPTJForCausalLM;n.GPTJModel;n.GPTJPreTrainedModel;n.GPTNeoForCausalLM;n.GPTNeoModel;n.GPTNeoPreTrainedModel;n.GPTNeoXForCausalLM;n.GPTNeoXModel;n.GPTNeoXPreTrainedModel;n.GPTNeoXTokenizer;n.Gemma2ForCausalLM;n.Gemma2Model;n.Gemma2PreTrainedModel;n.Gemma3ForCausalLM;n.Gemma3Model;n.Gemma3PreTrainedModel;n.GemmaForCausalLM;n.GemmaModel;n.GemmaPreTrainedModel;n.GemmaTokenizer;n.GlmForCausalLM;n.GlmModel;n.GlmPreTrainedModel;n.GraniteForCausalLM;n.GraniteModel;n.GranitePreTrainedModel;n.Grok1Tokenizer;n.GroundingDinoForObjectDetection;n.GroundingDinoImageProcessor;n.GroundingDinoPreTrainedModel;n.GroundingDinoProcessor;n.GroupViTModel;n.GroupViTPreTrainedModel;n.HeliumForCausalLM;n.HeliumModel;n.HeliumPreTrainedModel;n.HerbertTokenizer;n.HieraForImageClassification;n.HieraModel;n.HieraPreTrainedModel;n.HubertForCTC;n.HubertForSequenceClassification;n.HubertModel;n.HubertPreTrainedModel;n.IJepaForImageClassification;n.IJepaModel;n.IJepaPreTrainedModel;n.Idefics3ForConditionalGeneration;n.Idefics3ImageProcessor;n.Idefics3PreTrainedModel;n.Idefics3Processor;n.ImageClassificationPipeline;n.ImageFeatureExtractionPipeline;n.ImageFeatureExtractor;n.ImageMattingOutput;n.ImageProcessor;n.ImageSegmentationPipeline;n.ImageToImagePipeline;n.ImageToTextPipeline;n.InterruptableStoppingCriteria;n.JAISLMHeadModel;n.JAISModel;n.JAISPreTrainedModel;n.JinaCLIPImageProcessor;n.JinaCLIPModel;n.JinaCLIPPreTrainedModel;n.JinaCLIPProcessor;n.JinaCLIPTextModel;n.JinaCLIPVisionModel;n.LiteWhisperForConditionalGeneration;n.LlamaForCausalLM;n.LlamaModel;n.LlamaPreTrainedModel;n.LlamaTokenizer;n.LlavaForConditionalGeneration;n.LlavaOnevisionForConditionalGeneration;n.LlavaOnevisionImageProcessor;n.LlavaPreTrainedModel;n.LogitsProcessor;n.LogitsProcessorList;n.LogitsWarper;n.LongT5ForConditionalGeneration;n.LongT5Model;n.LongT5PreTrainedModel;n.M2M100ForConditionalGeneration;n.M2M100Model;n.M2M100PreTrainedModel;n.M2M100Tokenizer;n.MBart50Tokenizer;n.MBartForCausalLM;n.MBartForConditionalGeneration;n.MBartForSequenceClassification;n.MBartModel;n.MBartPreTrainedModel;n.MBartTokenizer;n.MPNetForMaskedLM;n.MPNetForQuestionAnswering;n.MPNetForSequenceClassification;n.MPNetForTokenClassification;n.MPNetModel;n.MPNetPreTrainedModel;n.MPNetTokenizer;n.MT5ForConditionalGeneration;n.MT5Model;n.MT5PreTrainedModel;n.MarianMTModel;n.MarianModel;n.MarianPreTrainedModel;n.MarianTokenizer;n.Mask2FormerImageProcessor;n.MaskFormerFeatureExtractor;n.MaskFormerForInstanceSegmentation;n.MaskFormerImageProcessor;n.MaskFormerModel;n.MaskFormerPreTrainedModel;n.MaskedLMOutput;n.MaxLengthCriteria;n.Metric3DForDepthEstimation;n.Metric3DPreTrainedModel;n.Metric3Dv2ForDepthEstimation;n.Metric3Dv2PreTrainedModel;n.MgpstrForSceneTextRecognition;n.MgpstrModelOutput;n.MgpstrPreTrainedModel;n.MgpstrProcessor;n.MgpstrTokenizer;n.MimiDecoderModel;n.MimiDecoderOutput;n.MimiEncoderModel;n.MimiEncoderOutput;n.MimiModel;n.MimiPreTrainedModel;n.MinLengthLogitsProcessor;n.MinNewTokensLengthLogitsProcessor;n.MistralForCausalLM;n.MistralModel;n.MistralPreTrainedModel;n.MobileBertForMaskedLM;n.MobileBertForQuestionAnswering;n.MobileBertForSequenceClassification;n.MobileBertModel;n.MobileBertPreTrainedModel;n.MobileBertTokenizer;n.MobileLLMForCausalLM;n.MobileLLMModel;n.MobileLLMPreTrainedModel;n.MobileNetV1FeatureExtractor;n.MobileNetV1ForImageClassification;n.MobileNetV1ForSemanticSegmentation;n.MobileNetV1ImageProcessor;n.MobileNetV1Model;n.MobileNetV1PreTrainedModel;n.MobileNetV2FeatureExtractor;n.MobileNetV2ForImageClassification;n.MobileNetV2ForSemanticSegmentation;n.MobileNetV2ImageProcessor;n.MobileNetV2Model;n.MobileNetV2PreTrainedModel;n.MobileNetV3FeatureExtractor;n.MobileNetV3ForImageClassification;n.MobileNetV3ForSemanticSegmentation;n.MobileNetV3ImageProcessor;n.MobileNetV3Model;n.MobileNetV3PreTrainedModel;n.MobileNetV4FeatureExtractor;n.MobileNetV4ForImageClassification;n.MobileNetV4ForSemanticSegmentation;n.MobileNetV4ImageProcessor;n.MobileNetV4Model;n.MobileNetV4PreTrainedModel;n.MobileViTFeatureExtractor;n.MobileViTForImageClassification;n.MobileViTImageProcessor;n.MobileViTModel;n.MobileViTPreTrainedModel;n.MobileViTV2ForImageClassification;n.MobileViTV2Model;n.MobileViTV2PreTrainedModel;n.ModelOutput;n.ModernBertForMaskedLM;n.ModernBertForSequenceClassification;n.ModernBertForTokenClassification;n.ModernBertModel;n.ModernBertPreTrainedModel;n.Moondream1ForConditionalGeneration;n.MoonshineFeatureExtractor;n.MoonshineForConditionalGeneration;n.MoonshineModel;n.MoonshinePreTrainedModel;n.MoonshineProcessor;n.MptForCausalLM;n.MptModel;n.MptPreTrainedModel;n.MultiModalityCausalLM;n.MultiModalityPreTrainedModel;n.MusicgenForCausalLM;n.MusicgenForConditionalGeneration;n.MusicgenModel;n.MusicgenPreTrainedModel;n.NllbTokenizer;n.NoBadWordsLogitsProcessor;n.NoRepeatNGramLogitsProcessor;n.NomicBertModel;n.NomicBertPreTrainedModel;n.NougatImageProcessor;n.NougatTokenizer;n.OPTForCausalLM;n.OPTModel;n.OPTPreTrainedModel;n.ObjectDetectionPipeline;n.Olmo2ForCausalLM;n.Olmo2Model;n.Olmo2PreTrainedModel;n.OlmoForCausalLM;n.OlmoModel;n.OlmoPreTrainedModel;n.OpenELMForCausalLM;n.OpenELMModel;n.OpenELMPreTrainedModel;n.OwlViTFeatureExtractor;n.OwlViTForObjectDetection;n.OwlViTImageProcessor;n.OwlViTModel;n.OwlViTPreTrainedModel;n.OwlViTProcessor;n.Owlv2ForObjectDetection;n.Owlv2ImageProcessor;n.Owlv2Model;n.Owlv2PreTrainedModel;n.PaliGemmaForConditionalGeneration;n.PaliGemmaPreTrainedModel;n.PaliGemmaProcessor;n.PatchTSMixerForPrediction;n.PatchTSMixerModel;n.PatchTSMixerPreTrainedModel;n.PatchTSTForPrediction;n.PatchTSTModel;n.PatchTSTPreTrainedModel;n.Phi3ForCausalLM;n.Phi3Model;n.Phi3PreTrainedModel;n.Phi3VForCausalLM;n.Phi3VImageProcessor;n.Phi3VPreTrainedModel;n.Phi3VProcessor;n.PhiForCausalLM;n.PhiModel;n.PhiPreTrainedModel;n.Pipeline;n.PreTrainedModel;n.PreTrainedTokenizer;n.PretrainedConfig;n.PretrainedMixin;n.Processor;n.PvtForImageClassification;n.PvtImageProcessor;n.PvtModel;n.PvtPreTrainedModel;n.PyAnnoteFeatureExtractor;n.PyAnnoteForAudioFrameClassification;n.PyAnnoteModel;n.PyAnnotePreTrainedModel;n.PyAnnoteProcessor;n.QuestionAnsweringModelOutput;n.QuestionAnsweringPipeline;n.Qwen2ForCausalLM;n.Qwen2Model;n.Qwen2PreTrainedModel;n.Qwen2Tokenizer;n.Qwen2VLForConditionalGeneration;n.Qwen2VLImageProcessor;n.Qwen2VLPreTrainedModel;n.Qwen2VLProcessor;n.Qwen3ForCausalLM;n.Qwen3Model;n.Qwen3PreTrainedModel;n.RFDetrForObjectDetection;n.RFDetrModel;n.RFDetrObjectDetectionOutput;n.RFDetrPreTrainedModel;n.RTDetrForObjectDetection;n.RTDetrImageProcessor;n.RTDetrModel;n.RTDetrObjectDetectionOutput;n.RTDetrPreTrainedModel;n.RTDetrV2ForObjectDetection;n.RTDetrV2Model;n.RTDetrV2ObjectDetectionOutput;n.RTDetrV2PreTrainedModel;n.RawAudio;n.RawImage;n.RawVideo;n.RawVideoFrame;n.RepetitionPenaltyLogitsProcessor;n.ResNetForImageClassification;n.ResNetModel;n.ResNetPreTrainedModel;n.RoFormerForMaskedLM;n.RoFormerForQuestionAnswering;n.RoFormerForSequenceClassification;n.RoFormerForTokenClassification;n.RoFormerModel;n.RoFormerPreTrainedModel;n.RoFormerTokenizer;n.RobertaForMaskedLM;n.RobertaForQuestionAnswering;n.RobertaForSequenceClassification;n.RobertaForTokenClassification;n.RobertaModel;n.RobertaPreTrainedModel;n.RobertaTokenizer;n.SamImageProcessor;n.SamImageSegmentationOutput;n.SamModel;n.SamPreTrainedModel;n.SamProcessor;n.SapiensForDepthEstimation;n.SapiensForNormalEstimation;n.SapiensForSemanticSegmentation;n.SapiensPreTrainedModel;n.SeamlessM4TFeatureExtractor;n.SegformerFeatureExtractor;n.SegformerForImageClassification;n.SegformerForSemanticSegmentation;n.SegformerImageProcessor;n.SegformerModel;n.SegformerPreTrainedModel;n.Seq2SeqLMOutput;n.SequenceClassifierOutput;n.SiglipImageProcessor;n.SiglipModel;n.SiglipPreTrainedModel;n.SiglipTextModel;n.SiglipTokenizer;n.SiglipVisionModel;n.SmolVLMForConditionalGeneration;n.SmolVLMImageProcessor;n.SmolVLMProcessor;n.SnacDecoderModel;n.SnacEncoderModel;n.SnacFeatureExtractor;n.SnacModel;n.SnacPreTrainedModel;n.SpeechT5FeatureExtractor;n.SpeechT5ForSpeechToText;n.SpeechT5ForTextToSpeech;n.SpeechT5HifiGan;n.SpeechT5Model;n.SpeechT5PreTrainedModel;n.SpeechT5Processor;n.SpeechT5Tokenizer;n.SqueezeBertForMaskedLM;n.SqueezeBertForQuestionAnswering;n.SqueezeBertForSequenceClassification;n.SqueezeBertModel;n.SqueezeBertPreTrainedModel;n.SqueezeBertTokenizer;n.StableLmForCausalLM;n.StableLmModel;n.StableLmPreTrainedModel;n.Starcoder2ForCausalLM;n.Starcoder2Model;n.Starcoder2PreTrainedModel;n.StoppingCriteria;n.StoppingCriteriaList;n.StyleTextToSpeech2Model;n.StyleTextToSpeech2PreTrainedModel;n.SummarizationPipeline;n.SuppressTokensAtBeginLogitsProcessor;n.Swin2SRForImageSuperResolution;n.Swin2SRImageProcessor;n.Swin2SRModel;n.Swin2SRPreTrainedModel;n.SwinForImageClassification;n.SwinForSemanticSegmentation;n.SwinModel;n.SwinPreTrainedModel;n.T5ForConditionalGeneration;n.T5Model;n.T5PreTrainedModel;n.T5Tokenizer;n.TableTransformerForObjectDetection;n.TableTransformerModel;n.TableTransformerObjectDetectionOutput;n.TableTransformerPreTrainedModel;n.TemperatureLogitsWarper;n.Tensor;n.Text2TextGenerationPipeline;n.TextClassificationPipeline;n.TextGenerationPipeline;n.TextStreamer;n.TextToAudioPipeline;n.TokenClassificationPipeline;n.TokenClassifierOutput;n.TokenizerModel;n.TopKLogitsWarper;n.TopPLogitsWarper;n.TrOCRForCausalLM;n.TrOCRPreTrainedModel;n.TranslationPipeline;n.UltravoxModel;n.UltravoxPreTrainedModel;n.UltravoxProcessor;n.UniSpeechForCTC;n.UniSpeechForSequenceClassification;n.UniSpeechModel;n.UniSpeechPreTrainedModel;n.UniSpeechSatForAudioFrameClassification;n.UniSpeechSatForCTC;n.UniSpeechSatForSequenceClassification;n.UniSpeechSatModel;n.UniSpeechSatPreTrainedModel;n.VLChatProcessor;n.VLMImageProcessor;n.ViTFeatureExtractor;n.ViTForImageClassification;n.ViTImageProcessor;n.ViTMAEModel;n.ViTMAEPreTrainedModel;n.ViTMSNForImageClassification;n.ViTMSNModel;n.ViTMSNPreTrainedModel;n.ViTModel;n.ViTPreTrainedModel;n.VisionEncoderDecoderModel;n.VitMatteForImageMatting;n.VitMatteImageProcessor;n.VitMattePreTrainedModel;n.VitPoseForPoseEstimation;n.VitPoseImageProcessor;n.VitPosePreTrainedModel;n.VitsModel;n.VitsModelOutput;n.VitsPreTrainedModel;n.VitsTokenizer;n.Wav2Vec2BertForCTC;n.Wav2Vec2BertForSequenceClassification;n.Wav2Vec2BertModel;n.Wav2Vec2BertPreTrainedModel;n.Wav2Vec2CTCTokenizer;n.Wav2Vec2FeatureExtractor;n.Wav2Vec2ForAudioFrameClassification;n.Wav2Vec2ForCTC;n.Wav2Vec2ForSequenceClassification;n.Wav2Vec2Model;n.Wav2Vec2PreTrainedModel;n.Wav2Vec2Processor;n.Wav2Vec2ProcessorWithLM;n.WavLMForAudioFrameClassification;n.WavLMForCTC;n.WavLMForSequenceClassification;n.WavLMForXVector;n.WavLMModel;n.WavLMPreTrainedModel;n.WeSpeakerFeatureExtractor;n.WeSpeakerResNetModel;n.WeSpeakerResNetPreTrainedModel;n.WhisperFeatureExtractor;n.WhisperForConditionalGeneration;n.WhisperModel;n.WhisperPreTrainedModel;n.WhisperProcessor;n.WhisperTextStreamer;n.WhisperTimeStampLogitsProcessor;n.WhisperTokenizer;n.XLMForQuestionAnswering;n.XLMForSequenceClassification;n.XLMForTokenClassification;n.XLMModel;n.XLMPreTrainedModel;n.XLMRobertaForMaskedLM;n.XLMRobertaForQuestionAnswering;n.XLMRobertaForSequenceClassification;n.XLMRobertaForTokenClassification;n.XLMRobertaModel;n.XLMRobertaPreTrainedModel;n.XLMRobertaTokenizer;n.XLMTokenizer;n.XLMWithLMHeadModel;n.XVectorOutput;n.YolosFeatureExtractor;n.YolosForObjectDetection;n.YolosImageProcessor;n.YolosModel;n.YolosObjectDetectionOutput;n.YolosPreTrainedModel;n.ZeroShotAudioClassificationPipeline;n.ZeroShotClassificationPipeline;n.ZeroShotImageClassificationPipeline;n.ZeroShotObjectDetectionPipeline;n.bankers_round;n.cat;n.cos_sim;n.dot;n.dynamic_time_warping;n.env;n.full;n.full_like;n.getKeyValueShapes;n.hamming;n.hanning;n.interpolate;n.interpolate_4d;n.interpolate_data;n.is_chinese_char;n.layer_norm;var gf=n.load_image;n.load_video;n.log_softmax;n.magnitude;n.matmul;n.max;n.mean;n.mean_pooling;n.medianFilter;n.mel_filter_bank;n.min;n.ones;n.ones_like;n.permute;n.permute_data;var mh=n.pipeline;n.quantize_embeddings;n.rand;n.read_audio;n.rfft;n.round;n.slice;n.softmax;n.spectrogram;n.stack;n.std_mean;n.topk;n.window_function;n.zeros;n.zeros_like;function If(A){let g="";for(let e=0;ee.charCodeAt(0)))}function zi(A,g){if(A.length{let I=new Map,i=(t,...o)=>new Promise((C,s)=>{let Q=new Date().getTime()+"-"+Math.random();I.set(Q,[C,s]),g.postMessage({rpc:t,id:Q,args:o})});g.postMessage({ready:!0}),g.onmessage=t=>{if(t.data.ready){e(i);return}let o=I.get(t.data.id);o!=null&&(I.delete(t.data.id),t.data.error?o[1](new Error(t.data.error)):o[0](t.data.result))}})}static runtime(){let g=new Map,e=async I=>{if(I.data.ready&&postMessage({ready:!0}),I.data.rpc){let t={id:I.data.id,result:null,error:null};try{t.result=await g.get(I.data.rpc)?.(...I.data.args)}catch(o){t.error=o.toString()}postMessage(t)}};return postMessage({ready:!0}),{handler:e,register:(I,i)=>{g.set(I,i)}}}}let{handler:sf,register:hQ}=of.runtime();onmessage=sf;let $t=new Map;function Fh(A){let g=[];return{async batch(e){g.push(await A(e))},async finalize(){let e=g.reduce((Q,r)=>Q+r.dims[0],0),I=g[0].dims[1],i=2,t=new Float32Array(e*I),o=0;for(let Q=0;Q{let g=new Date().getTime()+"-"+Math.random(),e={device:"webgpu"};if(A.type=="text"){let I=await mh("feature-extraction",A.model,e),i=Fh(async t=>{let o=t.map(s=>s?.toString()??""),C=await I(o,{pooling:"mean",normalize:!0});if(C.dims.length==3&&(C=C.mean(1)),C.dims.length!=2||C.dims[0]!=t.length)throw new Error("output embedding dimension mismatch");return C});return $t.set(g,i),g}else if(A.type=="image"){let I=await mh("image-feature-extraction",A.model,e),i=Fh(async t=>{let o=t.map(s=>Cf(s)??"");o=await Promise.all(o.map(s=>gf(s)));let C=await I(o);if(C.dims.length==3&&(C=C.mean(1)),C.dims.length!=2||C.dims[0]!=o.length)throw new Error("output embedding dimension mismatch");return C});return $t.set(g,i),g}else throw new Error("invalid data type")});hQ("embedding.batch",async(A,g)=>{await $t.get(A)?.batch(g)});hQ("embedding.finalize",async A=>{let g=$t.get(A);if(g)return $t.delete(A),g.finalize()});