UNPKG

dynamsoft-mrz-scanner

Version:

Dynamsoft MRZ Scanner JavaScript Edition is a ready-to-use SDK for web applications that accurately recognizes and parses Machine-Readable Zones on Machine-Readable Travel Documents.

2 lines 693 kB
const t=t=>t&&"object"==typeof t&&"function"==typeof t.then,e=(async()=>{})().constructor;let i=class extends e{get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(i){let n;this._task=i,t(i)?n=i:"function"==typeof i&&(n=new e(i)),n&&(async()=>{try{const t=await n;i===this._task&&this.resolve(t)}catch(t){i===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}constructor(e){let i,n;super((t,e)=>{i=t,n=e}),this._s="pending",this.resolve=e=>{this.isPending&&(t(e)?this.task=e:(this._s="fulfilled",i(e)))},this.reject=t=>{this.isPending&&(this._s="rejected",n(t))},this.task=e}};function n(t,e,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(t):n?n.value:e.get(t)}function s(t,e,i,n,s){if("function"==typeof e||!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,i),i}var r,a,o;"function"==typeof SuppressedError&&SuppressedError,function(t){t[t.BOPM_BLOCK=0]="BOPM_BLOCK",t[t.BOPM_UPDATE=1]="BOPM_UPDATE"}(r||(r={})),function(t){t[t.CCUT_AUTO=0]="CCUT_AUTO",t[t.CCUT_FULL_CHANNEL=1]="CCUT_FULL_CHANNEL",t[t.CCUT_Y_CHANNEL_ONLY=2]="CCUT_Y_CHANNEL_ONLY",t[t.CCUT_RGB_R_CHANNEL_ONLY=3]="CCUT_RGB_R_CHANNEL_ONLY",t[t.CCUT_RGB_G_CHANNEL_ONLY=4]="CCUT_RGB_G_CHANNEL_ONLY",t[t.CCUT_RGB_B_CHANNEL_ONLY=5]="CCUT_RGB_B_CHANNEL_ONLY"}(a||(a={})),function(t){t[t.IPF_BINARY=0]="IPF_BINARY",t[t.IPF_BINARYINVERTED=1]="IPF_BINARYINVERTED",t[t.IPF_GRAYSCALED=2]="IPF_GRAYSCALED",t[t.IPF_NV21=3]="IPF_NV21",t[t.IPF_RGB_565=4]="IPF_RGB_565",t[t.IPF_RGB_555=5]="IPF_RGB_555",t[t.IPF_RGB_888=6]="IPF_RGB_888",t[t.IPF_ARGB_8888=7]="IPF_ARGB_8888",t[t.IPF_RGB_161616=8]="IPF_RGB_161616",t[t.IPF_ARGB_16161616=9]="IPF_ARGB_16161616",t[t.IPF_ABGR_8888=10]="IPF_ABGR_8888",t[t.IPF_ABGR_16161616=11]="IPF_ABGR_16161616",t[t.IPF_BGR_888=12]="IPF_BGR_888",t[t.IPF_BINARY_8=13]="IPF_BINARY_8",t[t.IPF_NV12=14]="IPF_NV12",t[t.IPF_BINARY_8_INVERTED=15]="IPF_BINARY_8_INVERTED"}(o||(o={}));const l="undefined"==typeof self,h="function"==typeof importScripts,c=(()=>{if(!h){if(!l&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})(),d=t=>{if(null==t&&(t="./"),l||h);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t},u=t=>Object.prototype.toString.call(t),f=t=>Array.isArray?Array.isArray(t):"[object Array]"===u(t),g=t=>"number"==typeof t&&!Number.isNaN(t),m=t=>null!==t&&"object"==typeof t&&!Array.isArray(t),p=t=>!(!m(t)||!g(t.x)||!g(t.y)||!g(t.radius)||t.radius<0||!g(t.startAngle)||!g(t.endAngle)),_=t=>!!m(t)&&!!f(t.points)&&0!=t.points.length&&!t.points.some(t=>!T(t)),v=t=>!(!m(t)||!g(t.width)||t.width<=0||!g(t.height)||t.height<=0||!g(t.stride)||t.stride<=0||!("format"in t)||"tag"in t&&!E(t.tag)),y=t=>!(!v(t)||!g(t.bytes.length)&&!g(t.bytes.ptr)),w=t=>!!v(t)&&t.bytes instanceof Uint8Array,C=t=>!(!m(t)||!g(t.left)||t.left<0||!g(t.top)||t.top<0||!g(t.right)||t.right<0||!g(t.bottom)||t.bottom<0||t.left>=t.right||t.top>=t.bottom),E=t=>null===t||!!m(t)&&!!g(t.imageId)&&"type"in t,S=t=>!(!m(t)||!T(t.startPoint)||!T(t.endPoint)||t.startPoint.x==t.endPoint.x&&t.startPoint.y==t.endPoint.y),T=t=>!!m(t)&&!!g(t.x)&&!!g(t.y),b=t=>!!m(t)&&!!f(t.points)&&0!=t.points.length&&!t.points.some(t=>!T(t)),I=t=>!!m(t)&&!!f(t.points)&&0!=t.points.length&&4==t.points.length&&!t.points.some(t=>!T(t)),x=t=>!(!m(t)||!g(t.x)||!g(t.y)||!g(t.width)||t.width<0||!g(t.height)||t.height<0),R=async(t,e,i)=>await new Promise((n,s)=>{let r=new XMLHttpRequest;r.responseType=e,r.onloadstart=()=>{i&&i.loadstartCallback&&i.loadstartCallback()},r.onloadend=async()=>{i&&i.loadendCallback&&i.loadendCallback(),r.status<200||r.status>=300?s(new Error(t+" "+r.status)):n(r.response)},r.onprogress=t=>{i&&i.progressCallback&&i.progressCallback(t)},r.onerror=()=>{s(new Error("Network Error: "+r.statusText))},r.open("GET",t,!0),r.send()}),O=t=>/^(https:\/\/www\.|http:\/\/www\.|https:\/\/|http:\/\/)|^[a-zA-Z0-9]{2,}(\.[a-zA-Z0-9]{2,})(\.[a-zA-Z0-9]{2,})?/.test(t),A=(t,e)=>{let i=t.split("."),n=e.split(".");for(let t=0;t<i.length&&t<n.length;++t){let e=i[t],s=n[t];if(e===s)continue;let r=parseInt(i[t]),a=parseInt(n[t]);return r===a||Number.isNaN(r)&&Number.isNaN(a)?e<s?-1:1:r<a||Number.isNaN(r)&&Number.isInteger(a)?-1:1}return i.length===n.length?0:i.length<n.length?-1:1},D=t=>{const e={};for(let i in t){if("rootDirectory"===i)continue;let n=i,s=t[n],r=s&&"object"==typeof s&&s.path?s.path:s,a=t.rootDirectory;if(a&&!a.endsWith("/")&&(a+="/"),"object"==typeof s&&s.isInternal)a&&(r=t[n].version?`${a}${B[n]}@${t[n].version}/${"dcvData"===n?"":"dist/"}${"ddv"===n?"engine":""}`:`${a}${B[n]}/${"dcvData"===n?"":"dist/"}${"ddv"===n?"engine":""}`);else{const i=/^@engineRootDirectory(\/?)/;if("string"==typeof r&&(r=r.replace(i,a||"")),"object"==typeof r&&"dwt"===n){const s=t[n].resourcesPath,r=t[n].serviceInstallerLocation;e[n]={resourcesPath:s.replace(i,a||""),serviceInstallerLocation:r.replace(i,a||"")};continue}}e[n]=d(r)}return e},M=async(t,e,i)=>await new Promise(async(n,s)=>{try{const s=e.split(".");let r=s[s.length-1];const a=await P(`image/${r}`,t);s.length<=1&&(r="png");const o=new File([a],e,{type:`image/${r}`});if(i){const t=URL.createObjectURL(o),i=document.createElement("a");i.href=t,i.download=e,i.click()}return n(o)}catch(t){return s()}}),L=t=>{w(t)&&(t=k(t));const e=document.createElement("canvas");return e.width=t.width,e.height=t.height,e.getContext("2d",{willReadFrequently:!0}).putImageData(t,0,0),e},F=(t,e)=>{w(e)&&(e=k(e));const i=L(e);let n=new Image,s=i.toDataURL(t);return n.src=s,n},P=async(t,e)=>{w(e)&&(e=k(e));const i=L(e);return new Promise((e,n)=>{i.toBlob(t=>e(t),t)})},k=t=>{let e,i=t.bytes;if(!(i&&i instanceof Uint8Array))throw Error("Parameter type error");if(Number(t.format)===o.IPF_BGR_888){const t=i.length/3;e=new Uint8ClampedArray(4*t);for(let n=0;n<t;++n)e[4*n]=i[3*n],e[4*n+1]=i[3*n+1],e[4*n+2]=i[3*n+2],e[4*n+3]=255}else if(Number(t.format)===o.IPF_RGB_888){const t=i.length/3;e=new Uint8ClampedArray(4*t);for(let n=0;n<t;++n)e[4*n]=i[3*n+2],e[4*n+1]=i[3*n+1],e[4*n+2]=i[3*n],e[4*n+3]=255}else if(Number(t.format)===o.IPF_GRAYSCALED){const t=i.length;e=new Uint8ClampedArray(4*t);for(let n=0;n<t;n++)e[4*n]=e[4*n+1]=e[4*n+2]=i[n],e[4*n+3]=255}else if(Number(t.format)===o.IPF_BINARY_8){const n=i.length,s=t.width,r=t.height,a=t.stride;e=new Uint8ClampedArray(s*r*4);for(let t=0;t<n;t++){let n=i[t],r=t%a,o=Math.floor(t/a);for(let t=0;t<8;t++){let i=r+t,a=4*(o*s+i);if(i>=s)break;e[a]=e[a+1]=e[a+2]=(128&n)/128*255,e[a+3]=255,n<<=1}}}else if(Number(t.format)===o.IPF_ABGR_8888){const t=i.length/4;e=new Uint8ClampedArray(i.length);for(let n=0;n<t;++n)e[4*n]=i[4*n],e[4*n+1]=i[4*n+1],e[4*n+2]=i[4*n+2],e[4*n+3]=i[4*n+3]}else if(Number(t.format)===o.IPF_ARGB_8888){const t=i.length/4;e=new Uint8ClampedArray(i.length);for(let n=0;n<t;++n)e[4*n]=i[4*n+2],e[4*n+1]=i[4*n+1],e[4*n+2]=i[4*n],e[4*n+3]=i[4*n+3]}else if(Number(t.format)===o.IPF_BINARY_8_INVERTED){const n=i.length,s=t.width,r=t.height,a=t.stride;e=new Uint8ClampedArray(s*r*4);for(let t=0;t<n;t++){let n=i[t],r=t%a,o=Math.floor(t/a);for(let t=0;t<8;t++){let i=r+t,a=4*(o*s+i);if(i>=s)break;e[a]=e[a+1]=e[a+2]=128&n?0:255,e[a+3]=255,n<<=1}}}return new ImageData(e,t.width,t.height)},N=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])),B={std:"dynamsoft-capture-vision-std",dip:"dynamsoft-image-processing",core:"dynamsoft-core",dnn:"dynamsoft-capture-vision-dnn",license:"dynamsoft-license",utility:"dynamsoft-utility",cvr:"dynamsoft-capture-vision-router",dbr:"dynamsoft-barcode-reader",dlr:"dynamsoft-label-recognizer",ddn:"dynamsoft-document-normalizer",dcp:"dynamsoft-code-parser",dcvData:"dynamsoft-capture-vision-data",dce:"dynamsoft-camera-enhancer",ddv:"dynamsoft-document-viewer",dwt:"dwt",dbrBundle:"dynamsoft-barcode-reader-bundle",dcvBundle:"dynamsoft-capture-vision-bundle"};var j,V,U,G,W,Y,H,z;let X,q,Z,K,J,$=class t{get _isFetchingStarted(){return n(this,W,"f")}constructor(){j.add(this),V.set(this,[]),U.set(this,1),G.set(this,r.BOPM_BLOCK),W.set(this,!1),Y.set(this,void 0),H.set(this,a.CCUT_AUTO)}setErrorListener(t){}addImageToBuffer(t){var e;if(!w(t))throw new TypeError("Invalid 'image'.");if((null===(e=t.tag)||void 0===e?void 0:e.hasOwnProperty("imageId"))&&"number"==typeof t.tag.imageId&&this.hasImage(t.tag.imageId))throw new Error("Existed imageId.");if(n(this,V,"f").length>=n(this,U,"f"))switch(n(this,G,"f")){case r.BOPM_BLOCK:break;case r.BOPM_UPDATE:if(n(this,V,"f").push(t),m(n(this,Y,"f"))&&g(n(this,Y,"f").imageId)&&1==n(this,Y,"f").keepInBuffer)for(;n(this,V,"f").length>n(this,U,"f");){const t=n(this,V,"f").findIndex(t=>{var e;return(null===(e=t.tag)||void 0===e?void 0:e.imageId)!==n(this,Y,"f").imageId});n(this,V,"f").splice(t,1)}else n(this,V,"f").splice(0,n(this,V,"f").length-n(this,U,"f"))}else n(this,V,"f").push(t)}getImage(){if(0===n(this,V,"f").length)return null;let e;if(n(this,Y,"f")&&g(n(this,Y,"f").imageId)){const t=n(this,j,"m",z).call(this,n(this,Y,"f").imageId);if(t<0)throw new Error(`Image with id ${n(this,Y,"f").imageId} doesn't exist.`);e=n(this,V,"f").slice(t,t+1)[0]}else e=n(this,V,"f").pop();if([o.IPF_RGB_565,o.IPF_RGB_555,o.IPF_RGB_888,o.IPF_ARGB_8888,o.IPF_RGB_161616,o.IPF_ARGB_16161616,o.IPF_ABGR_8888,o.IPF_ABGR_16161616,o.IPF_BGR_888].includes(e.format)){if(n(this,H,"f")===a.CCUT_RGB_R_CHANNEL_ONLY){t._onLog&&t._onLog("only get R channel data.");const i=new Uint8Array(e.width*e.height);for(let t=0;t<i.length;t++)switch(e.format){case o.IPF_RGB_565:case o.IPF_RGB_555:case o.IPF_RGB_888:case o.IPF_RGB_161616:i[t]=e.bytes[3*t+2];break;case o.IPF_ARGB_8888:case o.IPF_ARGB_16161616:i[t]=e.bytes[4*t+2];break;case o.IPF_BGR_888:i[t]=e.bytes[3*t];break;case o.IPF_ABGR_8888:case o.IPF_ABGR_16161616:i[t]=e.bytes[4*t]}e.bytes=i,e.stride=e.width,e.format=o.IPF_GRAYSCALED}else if(n(this,H,"f")===a.CCUT_RGB_G_CHANNEL_ONLY){t._onLog&&t._onLog("only get G channel data.");const i=new Uint8Array(e.width*e.height);for(let t=0;t<i.length;t++)switch(e.format){case o.IPF_RGB_565:case o.IPF_RGB_555:case o.IPF_RGB_888:case o.IPF_RGB_161616:case o.IPF_BGR_888:i[t]=e.bytes[3*t+1];break;case o.IPF_ARGB_8888:case o.IPF_ARGB_16161616:case o.IPF_ABGR_8888:case o.IPF_ABGR_16161616:i[t]=e.bytes[4*t+1]}e.bytes=i,e.stride=e.width,e.format=o.IPF_GRAYSCALED}else if(n(this,H,"f")===a.CCUT_RGB_B_CHANNEL_ONLY){t._onLog&&t._onLog("only get B channel data.");const i=new Uint8Array(e.width*e.height);for(let t=0;t<i.length;t++)switch(e.format){case o.IPF_RGB_565:case o.IPF_RGB_555:case o.IPF_RGB_888:case o.IPF_RGB_161616:i[t]=e.bytes[3*t];break;case o.IPF_ARGB_8888:case o.IPF_ARGB_16161616:i[t]=e.bytes[4*t];break;case o.IPF_BGR_888:i[t]=e.bytes[3*t+2];break;case o.IPF_ABGR_8888:case o.IPF_ABGR_16161616:i[t]=e.bytes[4*t+2]}e.bytes=i,e.stride=e.width,e.format=o.IPF_GRAYSCALED}}else[o.IPF_NV21,o.IPF_NV12].includes(e.format)&&t._onLog&&t._onLog("NV21 or NV12 is not supported.");return e}setNextImageToReturn(t,e){if(!((...t)=>0!==t.length&&t.every(t=>g(t)))(t))throw new TypeError("Invalid 'imageId'.");if(void 0!==e&&"[object Boolean]"!==u(e))throw new TypeError("Invalid 'keepInBuffer'.");s(this,Y,{imageId:t,keepInBuffer:e})}_resetNextReturnedImage(){s(this,Y,null)}hasImage(t){return n(this,j,"m",z).call(this,t)>=0}startFetching(){s(this,W,!0)}stopFetching(){s(this,W,!1)}setMaxImageCount(t){if("number"!=typeof t)throw new TypeError("Invalid 'count'.");if(t<1||Math.round(t)!==t)throw new Error("Invalid 'count'.");for(s(this,U,t);n(this,V,"f")&&n(this,V,"f").length>t;)n(this,V,"f").shift()}getMaxImageCount(){return n(this,U,"f")}getImageCount(){return n(this,V,"f").length}clearBuffer(){n(this,V,"f").length=0}isBufferEmpty(){return 0===n(this,V,"f").length}setBufferOverflowProtectionMode(t){s(this,G,t)}getBufferOverflowProtectionMode(){return n(this,G,"f")}setColourChannelUsageType(t){s(this,H,t)}getColourChannelUsageType(){return n(this,H,"f")}};V=new WeakMap,U=new WeakMap,G=new WeakMap,W=new WeakMap,Y=new WeakMap,H=new WeakMap,j=new WeakSet,z=function(t){if("number"!=typeof t)throw new TypeError("Invalid 'imageId'.");return n(this,V,"f").findIndex(e=>{var i;return(null===(i=e.tag)||void 0===i?void 0:i.imageId)===t})},"undefined"!=typeof navigator&&(X=navigator,q=X.userAgent,Z=X.platform,K=X.mediaDevices),function(){if(!l){const t={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:X.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},e={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:Z,search:"Win"},Mac:{str:Z},Linux:{str:Z}};let i="unknownBrowser",n=0,s="unknownOS";for(let e in t){const s=t[e]||{};let r=s.str||q,a=s.search||e,o=s.verStr||q,l=s.verSearch||e;if(l instanceof Array||(l=[l]),-1!=r.indexOf(a)){i=e;for(let t of l){let e=o.indexOf(t);if(-1!=e){n=parseFloat(o.substring(e+t.length+1));break}}break}}for(let t in e){const i=e[t]||{};let n=i.str||q,r=i.search||t;if(-1!=n.indexOf(r)){s=t;break}}"Linux"==s&&-1!=q.indexOf("Windows NT")&&(s="HarmonyOS"),J={browser:i,version:n,OS:s}}l&&(J={browser:"ssr",version:0,OS:"ssr"})}();const Q="undefined"!=typeof WebAssembly&&q&&!(/Safari/.test(q)&&!/Chrome/.test(q)&&/\(.+\s11_2_([2-6]).*\)/.test(q)),tt=!("undefined"==typeof Worker),et=!(!K||!K.getUserMedia),it=async()=>{let t=!1;if(et)try{(await K.getUserMedia({video:!0})).getTracks().forEach(t=>{t.stop()}),t=!0}catch(t){}return t};var nt,st,rt,at,ot,lt,ht,ct,dt;"Chrome"===J.browser&&J.version>66||"Safari"===J.browser&&J.version>13||"OPR"===J.browser&&J.version>43||"Edge"===J.browser&&J.version,function(t){t[t.CRIT_ORIGINAL_IMAGE=1]="CRIT_ORIGINAL_IMAGE",t[t.CRIT_BARCODE=2]="CRIT_BARCODE",t[t.CRIT_TEXT_LINE=4]="CRIT_TEXT_LINE",t[t.CRIT_DETECTED_QUAD=8]="CRIT_DETECTED_QUAD",t[t.CRIT_DESKEWED_IMAGE=16]="CRIT_DESKEWED_IMAGE",t[t.CRIT_PARSED_RESULT=32]="CRIT_PARSED_RESULT",t[t.CRIT_ENHANCED_IMAGE=64]="CRIT_ENHANCED_IMAGE"}(nt||(nt={})),function(t){t[t.CT_NORMAL_INTERSECTED=0]="CT_NORMAL_INTERSECTED",t[t.CT_T_INTERSECTED=1]="CT_T_INTERSECTED",t[t.CT_CROSS_INTERSECTED=2]="CT_CROSS_INTERSECTED",t[t.CT_NOT_INTERSECTED=3]="CT_NOT_INTERSECTED"}(st||(st={})),function(t){t[t.EC_OK=0]="EC_OK",t[t.EC_UNKNOWN=-1e4]="EC_UNKNOWN",t[t.EC_NO_MEMORY=-10001]="EC_NO_MEMORY",t[t.EC_NULL_POINTER=-10002]="EC_NULL_POINTER",t[t.EC_LICENSE_INVALID=-10003]="EC_LICENSE_INVALID",t[t.EC_LICENSE_EXPIRED=-10004]="EC_LICENSE_EXPIRED",t[t.EC_FILE_NOT_FOUND=-10005]="EC_FILE_NOT_FOUND",t[t.EC_FILE_TYPE_NOT_SUPPORTED=-10006]="EC_FILE_TYPE_NOT_SUPPORTED",t[t.EC_BPP_NOT_SUPPORTED=-10007]="EC_BPP_NOT_SUPPORTED",t[t.EC_INDEX_INVALID=-10008]="EC_INDEX_INVALID",t[t.EC_CUSTOM_REGION_INVALID=-10010]="EC_CUSTOM_REGION_INVALID",t[t.EC_IMAGE_READ_FAILED=-10012]="EC_IMAGE_READ_FAILED",t[t.EC_TIFF_READ_FAILED=-10013]="EC_TIFF_READ_FAILED",t[t.EC_DIB_BUFFER_INVALID=-10018]="EC_DIB_BUFFER_INVALID",t[t.EC_PDF_READ_FAILED=-10021]="EC_PDF_READ_FAILED",t[t.EC_PDF_DLL_MISSING=-10022]="EC_PDF_DLL_MISSING",t[t.EC_PAGE_NUMBER_INVALID=-10023]="EC_PAGE_NUMBER_INVALID",t[t.EC_CUSTOM_SIZE_INVALID=-10024]="EC_CUSTOM_SIZE_INVALID",t[t.EC_TIMEOUT=-10026]="EC_TIMEOUT",t[t.EC_JSON_PARSE_FAILED=-10030]="EC_JSON_PARSE_FAILED",t[t.EC_JSON_TYPE_INVALID=-10031]="EC_JSON_TYPE_INVALID",t[t.EC_JSON_KEY_INVALID=-10032]="EC_JSON_KEY_INVALID",t[t.EC_JSON_VALUE_INVALID=-10033]="EC_JSON_VALUE_INVALID",t[t.EC_JSON_NAME_KEY_MISSING=-10034]="EC_JSON_NAME_KEY_MISSING",t[t.EC_JSON_NAME_VALUE_DUPLICATED=-10035]="EC_JSON_NAME_VALUE_DUPLICATED",t[t.EC_TEMPLATE_NAME_INVALID=-10036]="EC_TEMPLATE_NAME_INVALID",t[t.EC_JSON_NAME_REFERENCE_INVALID=-10037]="EC_JSON_NAME_REFERENCE_INVALID",t[t.EC_PARAMETER_VALUE_INVALID=-10038]="EC_PARAMETER_VALUE_INVALID",t[t.EC_DOMAIN_NOT_MATCH=-10039]="EC_DOMAIN_NOT_MATCH",t[t.EC_LICENSE_KEY_NOT_MATCH=-10043]="EC_LICENSE_KEY_NOT_MATCH",t[t.EC_SET_MODE_ARGUMENT_ERROR=-10051]="EC_SET_MODE_ARGUMENT_ERROR",t[t.EC_GET_MODE_ARGUMENT_ERROR=-10055]="EC_GET_MODE_ARGUMENT_ERROR",t[t.EC_IRT_LICENSE_INVALID=-10056]="EC_IRT_LICENSE_INVALID",t[t.EC_FILE_SAVE_FAILED=-10058]="EC_FILE_SAVE_FAILED",t[t.EC_STAGE_TYPE_INVALID=-10059]="EC_STAGE_TYPE_INVALID",t[t.EC_IMAGE_ORIENTATION_INVALID=-10060]="EC_IMAGE_ORIENTATION_INVALID",t[t.EC_CONVERT_COMPLEX_TEMPLATE_ERROR=-10061]="EC_CONVERT_COMPLEX_TEMPLATE_ERROR",t[t.EC_CALL_REJECTED_WHEN_CAPTURING=-10062]="EC_CALL_REJECTED_WHEN_CAPTURING",t[t.EC_NO_IMAGE_SOURCE=-10063]="EC_NO_IMAGE_SOURCE",t[t.EC_READ_DIRECTORY_FAILED=-10064]="EC_READ_DIRECTORY_FAILED",t[t.EC_MODULE_NOT_FOUND=-10065]="EC_MODULE_NOT_FOUND",t[t.EC_MULTI_PAGES_NOT_SUPPORTED=-10066]="EC_MULTI_PAGES_NOT_SUPPORTED",t[t.EC_FILE_ALREADY_EXISTS=-10067]="EC_FILE_ALREADY_EXISTS",t[t.EC_CREATE_FILE_FAILED=-10068]="EC_CREATE_FILE_FAILED",t[t.EC_IMGAE_DATA_INVALID=-10069]="EC_IMGAE_DATA_INVALID",t[t.EC_IMAGE_SIZE_NOT_MATCH=-10070]="EC_IMAGE_SIZE_NOT_MATCH",t[t.EC_IMAGE_PIXEL_FORMAT_NOT_MATCH=-10071]="EC_IMAGE_PIXEL_FORMAT_NOT_MATCH",t[t.EC_SECTION_LEVEL_RESULT_IRREPLACEABLE=-10072]="EC_SECTION_LEVEL_RESULT_IRREPLACEABLE",t[t.EC_AXIS_DEFINITION_INCORRECT=-10073]="EC_AXIS_DEFINITION_INCORRECT",t[t.EC_RESULT_TYPE_MISMATCH_IRREPLACEABLE=-10074]="EC_RESULT_TYPE_MISMATCH_IRREPLACEABLE",t[t.EC_PDF_LIBRARY_LOAD_FAILED=-10075]="EC_PDF_LIBRARY_LOAD_FAILED",t[t.EC_UNSUPPORTED_JSON_KEY_WARNING=-10077]="EC_UNSUPPORTED_JSON_KEY_WARNING",t[t.EC_MODEL_FILE_NOT_FOUND=-10078]="EC_MODEL_FILE_NOT_FOUND",t[t.EC_PDF_LICENSE_NOT_FOUND=-10079]="EC_PDF_LICENSE_NOT_FOUND",t[t.EC_RECT_INVALID=-10080]="EC_RECT_INVALID",t[t.EC_TEMPLATE_VERSION_INCOMPATIBLE=-10081]="EC_TEMPLATE_VERSION_INCOMPATIBLE",t[t.EC_NO_LICENSE=-2e4]="EC_NO_LICENSE",t[t.EC_LICENSE_BUFFER_FAILED=-20002]="EC_LICENSE_BUFFER_FAILED",t[t.EC_LICENSE_SYNC_FAILED=-20003]="EC_LICENSE_SYNC_FAILED",t[t.EC_DEVICE_NOT_MATCH=-20004]="EC_DEVICE_NOT_MATCH",t[t.EC_BIND_DEVICE_FAILED=-20005]="EC_BIND_DEVICE_FAILED",t[t.EC_INSTANCE_COUNT_OVER_LIMIT=-20008]="EC_INSTANCE_COUNT_OVER_LIMIT",t[t.EC_TRIAL_LICENSE=-20010]="EC_TRIAL_LICENSE",t[t.EC_LICENSE_VERSION_NOT_MATCH=-20011]="EC_LICENSE_VERSION_NOT_MATCH",t[t.EC_LICENSE_CACHE_USED=-20012]="EC_LICENSE_CACHE_USED",t[t.EC_LICENSE_AUTH_QUOTA_EXCEEDED=-20013]="EC_LICENSE_AUTH_QUOTA_EXCEEDED",t[t.EC_LICENSE_RESULTS_LIMIT_EXCEEDED=-20014]="EC_LICENSE_RESULTS_LIMIT_EXCEEDED",t[t.EC_BARCODE_FORMAT_INVALID=-30009]="EC_BARCODE_FORMAT_INVALID",t[t.EC_CUSTOM_MODULESIZE_INVALID=-30025]="EC_CUSTOM_MODULESIZE_INVALID",t[t.EC_TEXT_LINE_GROUP_LAYOUT_CONFLICT=-40101]="EC_TEXT_LINE_GROUP_LAYOUT_CONFLICT",t[t.EC_TEXT_LINE_GROUP_REGEX_CONFLICT=-40102]="EC_TEXT_LINE_GROUP_REGEX_CONFLICT",t[t.EC_QUADRILATERAL_INVALID=-50057]="EC_QUADRILATERAL_INVALID",t[t.EC_PANORAMA_LICENSE_INVALID=-70060]="EC_PANORAMA_LICENSE_INVALID",t[t.EC_RESOURCE_PATH_NOT_EXIST=-90001]="EC_RESOURCE_PATH_NOT_EXIST",t[t.EC_RESOURCE_LOAD_FAILED=-90002]="EC_RESOURCE_LOAD_FAILED",t[t.EC_CODE_SPECIFICATION_NOT_FOUND=-90003]="EC_CODE_SPECIFICATION_NOT_FOUND",t[t.EC_FULL_CODE_EMPTY=-90004]="EC_FULL_CODE_EMPTY",t[t.EC_FULL_CODE_PREPROCESS_FAILED=-90005]="EC_FULL_CODE_PREPROCESS_FAILED",t[t.EC_LICENSE_WARNING=-10076]="EC_LICENSE_WARNING",t[t.EC_BARCODE_READER_LICENSE_NOT_FOUND=-30063]="EC_BARCODE_READER_LICENSE_NOT_FOUND",t[t.EC_LABEL_RECOGNIZER_LICENSE_NOT_FOUND=-40103]="EC_LABEL_RECOGNIZER_LICENSE_NOT_FOUND",t[t.EC_DOCUMENT_NORMALIZER_LICENSE_NOT_FOUND=-50058]="EC_DOCUMENT_NORMALIZER_LICENSE_NOT_FOUND",t[t.EC_CODE_PARSER_LICENSE_NOT_FOUND=-90012]="EC_CODE_PARSER_LICENSE_NOT_FOUND"}(rt||(rt={})),function(t){t[t.GEM_SKIP=0]="GEM_SKIP",t[t.GEM_AUTO=1]="GEM_AUTO",t[t.GEM_GENERAL=2]="GEM_GENERAL",t[t.GEM_GRAY_EQUALIZE=4]="GEM_GRAY_EQUALIZE",t[t.GEM_GRAY_SMOOTH=8]="GEM_GRAY_SMOOTH",t[t.GEM_SHARPEN_SMOOTH=16]="GEM_SHARPEN_SMOOTH",t[t.GEM_REV=-2147483648]="GEM_REV",t[t.GEM_END=-1]="GEM_END"}(at||(at={})),function(t){t[t.GTM_SKIP=0]="GTM_SKIP",t[t.GTM_INVERTED=1]="GTM_INVERTED",t[t.GTM_ORIGINAL=2]="GTM_ORIGINAL",t[t.GTM_AUTO=4]="GTM_AUTO",t[t.GTM_REV=-2147483648]="GTM_REV",t[t.GTM_END=-1]="GTM_END"}(ot||(ot={})),function(t){t[t.ITT_FILE_IMAGE=0]="ITT_FILE_IMAGE",t[t.ITT_VIDEO_FRAME=1]="ITT_VIDEO_FRAME"}(lt||(lt={})),function(t){t[t.PDFRM_VECTOR=1]="PDFRM_VECTOR",t[t.PDFRM_RASTER=2]="PDFRM_RASTER",t[t.PDFRM_REV=-2147483648]="PDFRM_REV"}(ht||(ht={})),function(t){t[t.RDS_RASTERIZED_PAGES=0]="RDS_RASTERIZED_PAGES",t[t.RDS_EXTRACTED_IMAGES=1]="RDS_EXTRACTED_IMAGES"}(ct||(ct={})),function(t){t[t.CVS_NOT_VERIFIED=0]="CVS_NOT_VERIFIED",t[t.CVS_PASSED=1]="CVS_PASSED",t[t.CVS_FAILED=2]="CVS_FAILED"}(dt||(dt={}));const ut={IRUT_NULL:BigInt(0),IRUT_COLOUR_IMAGE:BigInt(1),IRUT_SCALED_COLOUR_IMAGE:BigInt(2),IRUT_GRAYSCALE_IMAGE:BigInt(4),IRUT_TRANSOFORMED_GRAYSCALE_IMAGE:BigInt(8),IRUT_ENHANCED_GRAYSCALE_IMAGE:BigInt(16),IRUT_PREDETECTED_REGIONS:BigInt(32),IRUT_BINARY_IMAGE:BigInt(64),IRUT_TEXTURE_DETECTION_RESULT:BigInt(128),IRUT_TEXTURE_REMOVED_GRAYSCALE_IMAGE:BigInt(256),IRUT_TEXTURE_REMOVED_BINARY_IMAGE:BigInt(512),IRUT_CONTOURS:BigInt(1024),IRUT_LINE_SEGMENTS:BigInt(2048),IRUT_TEXT_ZONES:BigInt(4096),IRUT_TEXT_REMOVED_BINARY_IMAGE:BigInt(8192),IRUT_CANDIDATE_BARCODE_ZONES:BigInt(16384),IRUT_LOCALIZED_BARCODES:BigInt(32768),IRUT_SCALED_BARCODE_IMAGE:BigInt(65536),IRUT_DEFORMATION_RESISTED_BARCODE_IMAGE:BigInt(1<<17),IRUT_COMPLEMENTED_BARCODE_IMAGE:BigInt(1<<18),IRUT_DECODED_BARCODES:BigInt(1<<19),IRUT_LONG_LINES:BigInt(1<<20),IRUT_CORNERS:BigInt(1<<21),IRUT_CANDIDATE_QUAD_EDGES:BigInt(1<<22),IRUT_DETECTED_QUADS:BigInt(1<<23),IRUT_LOCALIZED_TEXT_LINES:BigInt(1<<24),IRUT_RECOGNIZED_TEXT_LINES:BigInt(1<<25),IRUT_DESKEWED_IMAGE:BigInt(1<<26),IRUT_SHORT_LINES:BigInt(1<<27),IRUT_RAW_TEXT_LINES:BigInt(1<<28),IRUT_LOGIC_LINES:BigInt(1<<29),IRUT_ENHANCED_IMAGE:BigInt(Math.pow(2,30)),IRUT_ALL:BigInt("0xFFFFFFFFFFFFFFFF")};var ft,gt,mt,pt,_t,vt;!function(t){t[t.ROET_PREDETECTED_REGION=0]="ROET_PREDETECTED_REGION",t[t.ROET_LOCALIZED_BARCODE=1]="ROET_LOCALIZED_BARCODE",t[t.ROET_DECODED_BARCODE=2]="ROET_DECODED_BARCODE",t[t.ROET_LOCALIZED_TEXT_LINE=3]="ROET_LOCALIZED_TEXT_LINE",t[t.ROET_RECOGNIZED_TEXT_LINE=4]="ROET_RECOGNIZED_TEXT_LINE",t[t.ROET_DETECTED_QUAD=5]="ROET_DETECTED_QUAD",t[t.ROET_DESKEWED_IMAGE=6]="ROET_DESKEWED_IMAGE",t[t.ROET_SOURCE_IMAGE=7]="ROET_SOURCE_IMAGE",t[t.ROET_TARGET_ROI=8]="ROET_TARGET_ROI",t[t.ROET_ENHANCED_IMAGE=9]="ROET_ENHANCED_IMAGE"}(ft||(ft={})),function(t){t[t.ST_NULL=0]="ST_NULL",t[t.ST_REGION_PREDETECTION=1]="ST_REGION_PREDETECTION",t[t.ST_BARCODE_LOCALIZATION=2]="ST_BARCODE_LOCALIZATION",t[t.ST_BARCODE_DECODING=3]="ST_BARCODE_DECODING",t[t.ST_TEXT_LINE_LOCALIZATION=4]="ST_TEXT_LINE_LOCALIZATION",t[t.ST_TEXT_LINE_RECOGNITION=5]="ST_TEXT_LINE_RECOGNITION",t[t.ST_DOCUMENT_DETECTION=6]="ST_DOCUMENT_DETECTION",t[t.ST_DOCUMENT_DESKEWING=7]="ST_DOCUMENT_DESKEWING",t[t.ST_IMAGE_ENHANCEMENT=8]="ST_IMAGE_ENHANCEMENT"}(gt||(gt={})),function(t){t[t.IFF_JPEG=0]="IFF_JPEG",t[t.IFF_PNG=1]="IFF_PNG",t[t.IFF_BMP=2]="IFF_BMP",t[t.IFF_PDF=3]="IFF_PDF"}(mt||(mt={})),function(t){t[t.ICDM_NEAR=0]="ICDM_NEAR",t[t.ICDM_FAR=1]="ICDM_FAR"}(pt||(pt={})),function(t){t.MN_DYNAMSOFT_CAPTURE_VISION_ROUTER="cvr",t.MN_DYNAMSOFT_CORE="core",t.MN_DYNAMSOFT_LICENSE="license",t.MN_DYNAMSOFT_IMAGE_PROCESSING="dip",t.MN_DYNAMSOFT_UTILITY="utility",t.MN_DYNAMSOFT_BARCODE_READER="dbr",t.MN_DYNAMSOFT_DOCUMENT_NORMALIZER="ddn",t.MN_DYNAMSOFT_LABEL_RECOGNIZER="dlr",t.MN_DYNAMSOFT_CAPTURE_VISION_DATA="dcvData",t.MN_DYNAMSOFT_NEURAL_NETWORK="dnn",t.MN_DYNAMSOFT_CODE_PARSER="dcp",t.MN_DYNAMSOFT_CAMERA_ENHANCER="dce",t.MN_DYNAMSOFT_CAPTURE_VISION_STD="std"}(_t||(_t={})),function(t){t[t.TMT_LOCAL_TO_ORIGINAL_IMAGE=0]="TMT_LOCAL_TO_ORIGINAL_IMAGE",t[t.TMT_ORIGINAL_TO_LOCAL_IMAGE=1]="TMT_ORIGINAL_TO_LOCAL_IMAGE",t[t.TMT_LOCAL_TO_SECTION_IMAGE=2]="TMT_LOCAL_TO_SECTION_IMAGE",t[t.TMT_SECTION_TO_LOCAL_IMAGE=3]="TMT_SECTION_TO_LOCAL_IMAGE"}(vt||(vt={}));const yt={},wt=async t=>{let e="string"==typeof t?[t]:t,n=[];for(let t of e)n.push(yt[t]=yt[t]||new i);await Promise.all(n)},Ct=async(t,e)=>{let n,s="string"==typeof t?[t]:t,r=[];for(let t of s){let s;r.push(s=yt[t]=yt[t]||new i(n=n||e())),s.isEmpty&&(s.task=n=n||e())}await Promise.all(r)};let Et,St=0;const Tt=()=>St++,bt={};let It;const xt=t=>{It=t,Et&&Et.postMessage({type:"setBLog",body:{value:!!t}})};let Rt=!1;const Ot=t=>{Rt=t,Et&&Et.postMessage({type:"setBDebug",body:{value:!!t}})},At={},Dt={},Mt={dip:{wasm:!0}},Lt={std:{version:"2.0.0",path:d(c+"../../dynamsoft-capture-vision-std@2.0.0/dist/"),isInternal:!0},core:{version:"4.2.20-dev-20251029130528",path:c,isInternal:!0}};let Ft=5;"undefined"!=typeof navigator&&(Ft=navigator.hardwareConcurrency?navigator.hardwareConcurrency-1:5),bt[-3]=async t=>{Pt.onWasmLoadProgressChanged&&Pt.onWasmLoadProgressChanged(t.resourcesPath,t.tag,{loaded:t.loaded,total:t.total})};class Pt{static get engineResourcePaths(){return Lt}static set engineResourcePaths(t){Object.assign(Lt,t)}static get bSupportDce4Module(){return this._bSupportDce4Module}static get bSupportIRTModule(){return this._bSupportIRTModule}static get versions(){return this._versions}static get _onLog(){return It}static set _onLog(t){xt(t)}static get _bDebug(){return Rt}static set _bDebug(t){Ot(t)}static get _workerName(){return`${Pt._bundleEnv.toLowerCase()}.bundle.worker.js`}static get wasmLoadOptions(){return Pt._wasmLoadOptions}static set wasmLoadOptions(t){Object.assign(Pt._wasmLoadOptions,t)}static isModuleLoaded(t){return t=(t=t||"core").toLowerCase(),!!yt[t]&&yt[t].isFulfilled}static async loadWasm(){return await(async()=>{let t,e;t instanceof Array||(t=t?[t]:[]);let n=yt.core;e=!n||n.isEmpty,e||await wt("core");let s=new Map;const r=t=>{if(t=t.toLowerCase(),_t.MN_DYNAMSOFT_CAPTURE_VISION_STD==t||_t.MN_DYNAMSOFT_CORE==t)return;let e=Mt[t].deps;if(null==e?void 0:e.length)for(let t of e)r(t);let i=yt[t];s.has(t)||s.set(t,!i||i.isEmpty)};for(let e of t)r(e);let a=[];e&&a.push("core"),a.push(...s.keys());const o=[...s.entries()].filter(t=>!t[1]).map(t=>t[0]);await Ct(a,async()=>{const t=[...s.entries()].filter(t=>t[1]).map(t=>t[0]);await wt(o);const n=D(Lt),r={};for(let e of t)r[e]=Mt[e];const a={engineResourcePaths:n,autoResources:r,names:t,_bundleEnv:Pt._bundleEnv,wasmLoadOptions:Pt.wasmLoadOptions};let l=new i;if(e){a.needLoadCore=!0;let t=n[`${Pt._bundleEnv.toLowerCase()}Bundle`]+Pt._workerName;t.startsWith(location.origin)||(t=await fetch(t).then(t=>t.blob()).then(t=>URL.createObjectURL(t))),Et=new Worker(t),Et.onerror=t=>{let e=new Error(t.message);l.reject(e)},Et.addEventListener("message",t=>{let e=t.data?t.data:t,i=e.type,n=e.id,s=e.body;switch(i){case"log":It&&It(e.message);break;case"warning":console.warn(e.message);break;case"task":try{bt[n](s),delete bt[n]}catch(t){throw delete bt[n],t}break;case"event":try{bt[n](s)}catch(t){throw t}break;default:console.log(t)}}),a.bLog=!!It,a.bd=Rt,a.dm=location.origin.startsWith("http")?location.origin:"https://localhost"}else await wt("core");let h=St++;bt[h]=t=>{if(t.success)Object.assign(At,t.versions),"{}"!==JSON.stringify(t.versions)&&(Pt._versions=t.versions),Pt.loadedWasmType=t.loadedWasmType,l.resolve(void 0);else{const e=Error(t.message);t.stack&&(e.stack=t.stack),l.reject(e)}},Et.postMessage({type:"loadWasm",id:h,body:a}),await l})})()}static async detectEnvironment(){return await(async()=>({wasm:Q,worker:tt,getUserMedia:et,camera:await it(),browser:J.browser,version:J.version,OS:J.OS}))()}static async getModuleVersion(){return await new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success)return t(i.versions);{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}},Et.postMessage({type:"getModuleVersion",id:i})})}static getVersion(){return`4.2.20-dev-20251029130528(Worker: ${At.core&&At.core.worker||"Not Loaded"}, Wasm: ${At.core&&At.core.wasm||"Not Loaded"})`}static enableLogging(){$._onLog=console.log,Pt._onLog=console.log}static disableLogging(){$._onLog=null,Pt._onLog=null}static async cfd(t){return await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success)return e();{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}},Et.postMessage({type:"cfd",id:n,body:{count:t}})})}}Pt._bSupportDce4Module=-1,Pt._bSupportIRTModule=-1,Pt._versions=null,Pt._bundleEnv="DCV",Pt._wasmLoadOptions={wasmType:"auto",pthreadPoolSize:Ft},Pt.loadedWasmType="ml-simd-pthread",Pt.browserInfo=J;const kt="undefined"==typeof self,Nt="function"==typeof importScripts,Bt=(()=>{if(!Nt){if(!kt&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})();function jt(t,e,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(t):n?n.value:e.get(t)}function Vt(t,e,i,n,s){if("function"==typeof e||!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,i),i}"function"==typeof SuppressedError&&SuppressedError;const Ut=t=>t&&"object"==typeof t&&"function"==typeof t.then,Gt=(async()=>{})().constructor;let Wt=class extends Gt{get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(t){let e;this._task=t,Ut(t)?e=t:"function"==typeof t&&(e=new Gt(t)),e&&(async()=>{try{const i=await e;t===this._task&&this.resolve(i)}catch(e){t===this._task&&this.reject(e)}})()}get isEmpty(){return null==this._task}constructor(t){let e,i;super((t,n)=>{e=t,i=n}),this._s="pending",this.resolve=t=>{this.isPending&&(Ut(t)?this.task=t:(this._s="fulfilled",e(t)))},this.reject=t=>{this.isPending&&(this._s="rejected",i(t))},this.task=t}},Yt=class{constructor(t){this._cvr=t}async getMaxBufferedItems(){return await new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success)return t(i.count);{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}},Et.postMessage({type:"cvr_getMaxBufferedItems",id:i,instanceID:this._cvr._instanceID})})}async setMaxBufferedItems(t){return await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success)return e();{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}},Et.postMessage({type:"cvr_setMaxBufferedItems",id:n,instanceID:this._cvr._instanceID,body:{count:t}})})}async getBufferedCharacterItemSet(){return await new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success)return t(i.itemSet);{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}},Et.postMessage({type:"cvr_getBufferedCharacterItemSet",id:i,instanceID:this._cvr._instanceID})})}};var Ht={onTaskResultsReceived:!1,onTargetROIResultsReceived:!1,onTaskResultsReceivedForDce:!1,onPredetectedRegionsReceived:!1,onLocalizedBarcodesReceived:!1,onDecodedBarcodesReceived:!1,onLocalizedTextLinesReceived:!1,onRecognizedTextLinesReceived:!1,onDetectedQuadsReceived:!1,onDeskewedImageReceived:!1,onEnhancedImageReceived:!1,onColourImageUnitReceived:!1,onScaledColourImageUnitReceived:!1,onGrayscaleImageUnitReceived:!1,onTransformedGrayscaleImageUnitReceived:!1,onEnhancedGrayscaleImageUnitReceived:!1,onBinaryImageUnitReceived:!1,onTextureDetectionResultUnitReceived:!1,onTextureRemovedGrayscaleImageUnitReceived:!1,onTextureRemovedBinaryImageUnitReceived:!1,onContoursUnitReceived:!1,onLineSegmentsUnitReceived:!1,onTextZonesUnitReceived:!1,onTextRemovedBinaryImageUnitReceived:!1,onRawTextLinesUnitReceived:!1,onLongLinesUnitReceived:!1,onCornersUnitReceived:!1,onCandidateQuadEdgesUnitReceived:!1,onCandidateBarcodeZonesUnitReceived:!1,onScaledBarcodeImageUnitReceived:!1,onDeformationResistedBarcodeImageUnitReceived:!1,onComplementedBarcodeImageUnitReceived:!1,onShortLinesUnitReceived:!1,onLogicLinesUnitReceived:!1};const zt=t=>{for(let e in t._irrRegistryState)t._irrRegistryState[e]=!1;for(let e of t._intermediateResultReceiverSet)if(e.isDce||e.isFilter)t._irrRegistryState.onTaskResultsReceivedForDce=!0;else for(let i in e)t._irrRegistryState[i]||(t._irrRegistryState[i]=!!e[i])};let Xt=class{constructor(t){this._irrRegistryState=Ht,this._intermediateResultReceiverSet=new Set,this._cvr=t}async addResultReceiver(t){if("object"!=typeof t)throw new Error("Invalid receiver.");this._intermediateResultReceiverSet.add(t),zt(this);let e=-1,i={};if(!t.isDce&&!t.isFilter){if(!t._observedResultUnitTypes||!t._observedTaskMap)throw new Error("Invalid Intermediate Result Receiver.");e=t._observedResultUnitTypes,t._observedTaskMap.forEach((t,e)=>{i[e]=t}),t._observedTaskMap.clear()}return await new Promise((t,n)=>{let s=Tt();bt[s]=async e=>{if(e.success)return t();{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}},Et.postMessage({type:"cvr_setIrrRegistry",id:s,instanceID:this._cvr._instanceID,body:{receiverObj:this._irrRegistryState,observedResultUnitTypes:e.toString(),observedTaskMap:i}})})}async removeResultReceiver(t){return this._intermediateResultReceiverSet.delete(t),zt(this),await new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success)return t();{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}},Et.postMessage({type:"cvr_setIrrRegistry",id:i,instanceID:this._cvr._instanceID,body:{receiverObj:this._irrRegistryState}})})}getOriginalImage(){return this._cvr._dsImage}};const qt="undefined"==typeof self,Zt="function"==typeof importScripts,Kt=(()=>{if(!Zt){if(!qt&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})(),Jt=t=>{if(null==t&&(t="./"),qt||Zt);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t};var $t;Pt.engineResourcePaths.cvr={version:"3.2.20-dev-20251030140710",path:Kt,isInternal:!0},Mt.cvr={js:!0,wasm:!0,deps:[_t.MN_DYNAMSOFT_LICENSE,_t.MN_DYNAMSOFT_IMAGE_PROCESSING,_t.MN_DYNAMSOFT_NEURAL_NETWORK]},Mt.dnn={wasm:!0,deps:[_t.MN_DYNAMSOFT_IMAGE_PROCESSING]},Dt.cvr={};const Qt="2.0.0";"string"!=typeof Pt.engineResourcePaths.std&&A(Pt.engineResourcePaths.std.version,Qt)<0&&(Pt.engineResourcePaths.std={version:Qt,path:Jt(Kt+`../../dynamsoft-capture-vision-std@${Qt}/dist/`),isInternal:!0});const te="3.0.10";(!Pt.engineResourcePaths.dip||"string"!=typeof Pt.engineResourcePaths.dip&&A(Pt.engineResourcePaths.dip.version,te)<0)&&(Pt.engineResourcePaths.dip={version:te,path:Jt(Kt+`../../dynamsoft-image-processing@${te}/dist/`),isInternal:!0});const ee="2.0.10";(!Pt.engineResourcePaths.dnn||"string"!=typeof Pt.engineResourcePaths.dnn&&A(Pt.engineResourcePaths.dnn.version,ee)<0)&&(Pt.engineResourcePaths.dnn={version:ee,path:Jt(Kt+`../../dynamsoft-capture-vision-dnn@${ee}/dist/`),isInternal:!0});let ie=class{static getVersion(){return this._version}};var ne,se,re,ae,oe,le,he,ce,de,ue,fe,ge,me,pe,_e,ve,ye,we,Ce,Ee,Se,Te,be,Ie;function xe(t,e){if(t){if(t.sourceLocation){const i=t.sourceLocation.points;for(let t of i)t.x=t.x/e,t.y=t.y/e}if(t.location){const i=t.location.points;for(let t of i)t.x=t.x/e,t.y=t.y/e}xe(t.referencedItem,e)}}function Re(t){if(t.disposed)throw new Error('"CaptureVisionRouter" instance has been disposed')}function Oe(t){return{type:nt.CRIT_ORIGINAL_IMAGE,referenceItem:null,targetROIDefName:"",taskName:"",imageData:t,toCanvas:()=>L(t),toImage:e=>F(e,t),toBlob:e=>P(e,t)}}function Ae(t){const e=[rt.EC_UNSUPPORTED_JSON_KEY_WARNING,rt.EC_LICENSE_AUTH_QUOTA_EXCEEDED,rt.EC_LICENSE_RESULTS_LIMIT_EXCEEDED];if(t.errorCode&&e.includes(t.errorCode))return void console.warn(t.message);let i=new Error(t.errorCode?`[${t.functionName}] [${t.errorCode}] ${t.message}`:`[${t.functionName}] ${t.message}`);if(i.stack&&(i.stack=t.stack),t.isShouleThrow)throw i;return t.rj&&t.rj(i),!0}ie._version=`3.2.20-dev-20251030140710(Worker: ${null===($t=At.cvr)||void 0===$t?void 0:$t.worker}, Wasm: loading...`,function(t){t[t.ISS_BUFFER_EMPTY=0]="ISS_BUFFER_EMPTY",t[t.ISS_EXHAUSTED=1]="ISS_EXHAUSTED"}(ne||(ne={}));const De={onTaskResultsReceived:()=>{},isFilter:!0};bt[-2]=async t=>{Me.onDataLoadProgressChanged&&Me.onDataLoadProgressChanged(t.resourcesPath,t.tag,{loaded:t.loaded,total:t.total})};let Me=class t{constructor(){se.add(this),this.maxImageSideLength=["iPhone","Android","HarmonyOS"].includes(Pt.browserInfo.OS)?2048:4096,this.onCaptureError=null,this._instanceID=void 0,this._dsImage=null,this._isPauseScan=!0,this._isOutputOriginalImage=!1,this._isOpenDetectVerify=!1,this._isOpenNormalizeVerify=!1,this._isOpenBarcodeVerify=!1,this._isOpenLabelVerify=!1,this._minImageCaptureInterval=0,this._averageProcessintTimeArray=[],this._averageFetchImageTimeArray=[],this._currentSettings=null,this._averageTime=999,this._dynamsoft=!0,re.set(this,null),ae.set(this,null),oe.set(this,null),le.set(this,null),he.set(this,null),ce.set(this,new Set),de.set(this,new Set),ue.set(this,new Set),fe.set(this,500),ge.set(this,0),me.set(this,0),pe.set(this,!1),_e.set(this,!1),ve.set(this,!1),ye.set(this,null),this._singleFrameModeCallbackBind=this._singleFrameModeCallback.bind(this)}get disposed(){return jt(this,ve,"f")}static async createInstance(e=!0){if(!Dt.license)throw Error("The `license` module cannot be found.");await Dt.license.dynamsoft(),await Pt.loadWasm();const i=new t,n=new Wt;let s=Tt();return bt[s]=async e=>{e.success?(i._instanceID=e.instanceID,i._currentSettings=JSON.parse(JSON.parse(e.outputSettings).data),t._isNoOnnx=e.isNoOnnx,ie._version=`3.2.20-dev-20251030140710(Worker: ${At.cvr.worker}, Wasm: ${e.version})`,Vt(i,_e,!0),Vt(i,le,i.getIntermediateResultManager()),Vt(i,_e,!1),n.resolve(i)):Ae({message:e.message,rj:n.reject,stack:e.stack,functionName:"createInstance"})},Et.postMessage({type:"cvr_createInstance",id:s,body:{loadPresetTemplates:e,itemCountRecord:localStorage.getItem("dynamsoft")}}),n}static async appendDLModelBuffer(e,i){return await Pt.loadWasm(),t._isNoOnnx?Promise.reject("Model not supported in the current environment."):await new Promise((t,n)=>{let s=Tt();const r=D(Pt.engineResourcePaths);let a;bt[s]=async e=>{if(e.success){const i=JSON.parse(e.response);return 0!==i.errorCode&&Ae({message:i.errorString?i.errorString:"Append Model Buffer Failed.",rj:n,errorCode:i.errorCode,functionName:"appendDLModelBuffer"}),t(i)}Ae({message:e.message,rj:n,stack:e.stack,functionName:"appendDLModelBuffer"})},i?a=i:"DCV"===Pt._bundleEnv?a=r.dcvData+"models/":"DBR"===Pt._bundleEnv&&(a=r.dbrBundle+"models/"),Et.postMessage({type:"cvr_appendDLModelBuffer",id:s,body:{modelName:e,path:a}})})}static async clearDLModelBuffers(){return await new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success)return t();Ae({message:i.message,rj:e,stack:i.stack,functionName:"clearDLModelBuffers"})},Et.postMessage({type:"cvr_clearDLModelBuffers",id:i})})}async _singleFrameModeCallback(t){for(let e of jt(this,ce,"f"))this._isOutputOriginalImage&&e.onOriginalImageResultReceived&&e.onOriginalImageResultReceived(Oe(t));const e={bytes:new Uint8Array(t.bytes),width:t.width,height:t.height,stride:t.stride,format:t.format,tag:t.tag};this._templateName||(this._templateName=this._currentSettings.CaptureVisionTemplates[0].Name);const i=await this.capture(e,this._templateName);i.originalImageTag=t.tag,jt(this,re,"f").cameraView._capturedResultReceiver.onCapturedResultReceived(i,{isDetectVerifyOpen:!1,isNormalizeVerifyOpen:!1,isBarcodeVerifyOpen:!1,isLabelVerifyOpen:!1}),jt(this,se,"m",Ee).call(this,i)}setInput(t){if(Re(this),!t)return jt(this,ye,"f")&&(jt(this,le,"f").removeResultReceiver(jt(this,ye,"f")),Vt(this,ye,null)),void Vt(this,re,null);Vt(this,re,t),t.isCameraEnhancer&&jt(this,le,"f")&&(jt(this,re,"f")._intermediateResultReceiver.isDce=!0,jt(this,le,"f").addResultReceiver(jt(this,re,"f")._intermediateResultReceiver),Vt(this,ye,jt(this,re,"f")._intermediateResultReceiver))}getInput(){return jt(this,re,"f")}addImageSourceStateListener(t){if(Re(this),"object"!=typeof t)return console.warn("Invalid ISA state listener.");t&&Object.keys(t)&&jt(this,de,"f").add(t)}removeImageSourceStateListener(t){return Re(this),jt(this,de,"f").delete(t)}addResultReceiver(t){if(Re(this),"object"!=typeof t)throw new Error("Invalid receiver.");t&&Object.keys(t).length&&(jt(this,ce,"f").add(t),this._setCrrRegistry())}removeResultReceiver(t){Re(this),jt(this,ce,"f").delete(t),this._setCrrRegistry()}async _setCrrRegistry(){const t={onCapturedResultReceived:!1,onDecodedBarcodesReceived:!1,onRecognizedTextLinesReceived:!1,onProcessedDocumentResultReceived:!1,onParsedResultsReceived:!1};for(let e of jt(this,ce,"f"))e.isDce||(t.onCapturedResultReceived=!!e.onCapturedResultReceived,t.onDecodedBarcodesReceived=!!e.onDecodedBarcodesReceived,t.onRecognizedTextLinesReceived=!!e.onRecognizedTextLinesReceived,t.onProcessedDocumentResultReceived=!!e.onProcessedDocumentResultReceived,t.onParsedResultsReceived=!!e.onParsedResultsReceived);const e=new Wt;let i=Tt();return bt[i]=async t=>{t.success?e.resolve():Ae({message:t.message,rj:e.reject,stack:t.stack,functionName:"addResultReceiver"})},Et.postMessage({type:"cvr_setCrrRegistry",id:i,instanceID:this._instanceID,body:{receiver:JSON.stringify(t)}}),e}async addResultFilter(t){if(Re(this),!t._dynamsoft)throw new Error("User defined CapturedResultFilter is not supported.");if(!t||"object"!=typeof t||!Object.keys(t).length)return console.warn("Invalid filter.");jt(this,ue,"f").add(t),t._dynamsoft(),await this._handleFilterUpdate()}async removeResultFilter(t){Re(this),jt(this,ue,"f").delete(t),await this._handleFilterUpdate()}async _handleFilterUpdate(){if(jt(this,le,"f").removeResultReceiver(De),0===jt(this,ue,"f").size){this._isOpenBarcodeVerify=!1,this._isOpenLabelVerify=!1,this._isOpenDetectVerify=!1,this._isOpenNormalizeVerify=!1;const t={[nt.CRIT_BARCODE]:!1,[nt.CRIT_TEXT_LINE]:!1,[nt.CRIT_DETECTED_QUAD]:!1,[nt.CRIT_DESKEWED_IMAGE]:!1,[nt.CRIT_ENHANCED_IMAGE]:!1},e={[nt.CRIT_BARCODE]:!1,[nt.CRIT_TEXT_LINE]:!1,[nt.CRIT_DETECTED_QUAD]:!1,[nt.CRIT_DESKEWED_IMAGE]:!1,[nt.CRIT_ENHANCED_IMAGE]:!1};return await jt(this,se,"m",Se).call(this,t),void await jt(this,se,"m",Te).call(this,e)}for(let t of jt(this,ue,"f"))this._isOpenBarcodeVerify=t.isResultCrossVerificationEnabled(nt.CRIT_BARCODE),this._isOpenLabelVerify=t.isResultCrossVerificationEnabled(nt.CRIT_TEXT_LINE),this._isOpenDetectVerify=t.isResultCrossVerificationEnabled(nt.CRIT_DETECTED_QUAD),this._isOpenNormalizeVerify=t.isResultCrossVerificationEnabled(nt.CRIT_DESKEWED_IMAGE),t.isLatestOverlappingEnabled(nt.CRIT_BARCODE)&&([...jt(this,le,"f")._intermediateResultReceiverSet.values()].find(t=>t.isFilter)||jt(this,le,"f").addResultReceiver(De)),await jt(this,se,"m",Se).call(this,t.verificationEnabled),await jt(this,se,"m",Te).call(this,t.duplicateFilterEnabled),await jt(this,se,"m",be).call(this,t.duplicateForgetTime)}async startCapturing(e){if(Re(this),!this._isPauseScan)return;if(!jt(this,re,"f"))throw new Error("'ImageSourceAdapter' is not set. call 'setInput' before 'startCapturing'");e||(e=t._defaultTemplate);for(let t of jt(this,ue,"f"))await this.addResultFilter(t);const i=D(Pt.engineResourcePaths);return void 0!==jt(this,re,"f").singleFrameMode&&"disabled"!==jt(this,re,"f").singleFrameMode?(this._templateName=e,void jt(this,re,"f").on("singleFrameAcquired",this._singleFrameModeCallbackBind)):jt(this,oe,"f")&&jt(this,oe,"f").isPending?jt(this,oe,"f"):(Vt(this,oe,new Wt((t,n)=>{if(this.disposed)return;let s=Tt();bt[s]=async i=>{jt(this,oe,"f")&&!jt(this,oe,"f").isFulfilled&&(i.success?(this._isPauseScan=!1,this._isOutputOriginalImage=i.isOutputOriginalImage,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout(async()=>{-1!==this._minImageCaptureInterval&&jt(this,re,"f").startFetching(),this._loopReadVideo(e),t()},0)):Ae({message:i.message,rj:n,stack:i.stack,functionName:"startCapturing"}))},Et.postMessage({type:"cvr_startCapturing",id:s,instanceID:this._instanceID,body:{templateName:e,engineResourcePaths:i}})})),await jt(this,oe,"f"))}stopCapturing(){Re(this),jt(this,re,"f")&&(jt(this,re,"f").isCameraEnhancer&&void 0!==jt(this,re,"f").singleFrameMode&&"disabled"!==jt(this,re,"f").singleFrameMode?jt(this,re,"f").off("singleFrameAcquired",this._singleFrameModeCallbackBind):(jt(this,se,"m",Ie).call(this),jt(this,re,"f").stopFetching(),this._averageProcessintTimeArray=[],this._averageTime=999,this._isPauseScan=!0,Vt(this,oe,null),jt(this,re,"f").setColourChannelUsageType(a.CCUT_AUTO)))}async containsTask(t){return Re(this),await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success)return e(JSON.parse(t.tasks));Ae({message:t.message,rj:i,stack:t.stack,functionName:"containsTask"})},Et.postMessage({type:"cvr_containsTask",id:n,instanceID:this._instanceID,body:{templateName:t}})})}async switchCapturingTemplate(t){this.stopCapturing(),await this.startCapturing(t)}async _loopReadVideo(e){if(this.disposed||this._isPauseScan)return;if(Vt(this,pe,!0),jt(this,re,"f").isBufferEmpty())if(jt(this,re,"f").hasNextImageToFetch())for(let t of jt(this,de,"f"))t.onImageSourceStateReceived&&t.onImageSourceStateReceived(ne.ISS_BUFFER_EMPTY);else if(!jt(this,re,"f").hasNextImageToFetch())for(let t of jt(this,de,"f"))t.onImageSourceStateReceived&&t.onImageSourceStateReceived(ne.ISS_EXHAUSTED);if(-1===this._minImageCaptureInterval||jt(this,re,"f").isBufferEmpty()&&jt(this,re,"f").isCameraEnhancer)try{jt(this,re,"f").isBufferEmpty()&&t._onLog&&t._onLog("buffer is empty so fetch image"),t._onLog&&t._onLog(`DCE: start fetching a frame: ${Date.now()}`),this._dsImage=jt(this,re,"f").fetchImage(),t._onLog&&t._onLog(`DCE: finish fetching a frame: ${Date.now()}`),jt(this,re,"f").setImageFetchInterval(this._averageTime)}catch(i){return void this._reRunCurrnetFunc(e)}else if(jt(this,re,"f").isCameraEnhancer&&jt(this,re,"f").setImageFetchInterval(this._averageTime-(this._dsImage&&this._dsImage.tag?this._dsImage.tag.timeSpent:0)),this._dsImage=jt(this,re,"f").getImage(),this._dsImage&&this._dsImage.tag&&Date.now()-this._dsImage.tag.timeStamp>200)return void this._reRunCurrnetFunc(e);if(!this._dsImage)return void this._reRunCurrnetFunc(e);for(let t of jt(this,ce,"f"))this._isOutputOriginalImage&&t.onOriginalImageResultReceived&&t.onOriginalImageResultReceived(Oe(this._dsImage));const i=Date.now();this._captureDsimage(this._dsImage,e).then(async n=>{if(t._onLog&&t._onLog("no js handle time: "+(Date.now()-i)),this._isPauseScan)return void this._reRunCurrnetFunc(e);n.originalImageTag=this._dsImage.tag?this._dsImage.tag:null,jt(this,re,"f").isCameraEnhancer&&jt(this,re,"f").cameraView._capturedResultReceiver.onCapturedResultReceived(n,{isDetectVerifyOpen:this._isOpenDetectVerify,isNormalizeVerifyOpen:this._isOpenNormalizeVerify,isBarcodeVerifyOpen:this._isOpenBarcodeVerify,isLabelVerifyOpen:this._isOpenLabelVerify});for(let t of jt(this,ue,"f")){const e=t;e.onOriginalImageResultReceived(n),e.onDecodedBarcodesReceived(n),e.onRecognizedTextLinesReceived(n),e.onProcessedDocumentResultReceived(n),e.onParsedResultsReceived(n)}jt(this,se,"m",Ee).call(this,n);const s=Date.now();if(this._minImageCaptureInterval>-1&&(5===this._averageProcessintTimeArray.length&&this._averageProcessintTimeArray.shift(),5===this._averageFetchImageTimeArray.length&&this._averageFetchImageTimeArray.shift(),this._averageProcessintTimeArray.push(Date.now()-i),this._averageFetchImageTimeArray.push(this._dsImage&&this._dsImage.tag?this._dsImage.tag.timeSpent:0),this._averageTime=Math.min(...this._averageProcessintTimeArray)-Math.max(...this._averageFetchImageTimeArray),this._averageTime=this._averageTime>0?this._averageTime:0,t._onLog&&(t._onLog(`minImageCaptureInterval: ${this._minImageCaptureInterval}`),t._onLog(`averageProcessintTimeArray: ${this._averageProcessintTimeArray}`),t._onLog(`averageFetchImageTimeArray: ${this._averageFetchImageTimeArray}`),t._onLog(`averageTime: ${this._averageTime}`))),t._onLog){const e=Date.now()-s;e>10&&t._onLog(`fetch image calculate time: ${e}`)}t._onLog&&t._onLog(`time finish decode: ${Date.now()}`),t._onLog&&t._onLog("main time: "+(Date.now()-i)),t._onLog&&t._onLog("===================================================="),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._minImageCaptureInterval>0&&this._minImageCaptureInterval>=this._averageTime?this._loopReadVideoTimeoutId=setTimeout(()=>{this._loopReadVideo(e)},this._minImageCaptureInterval-this._averageTime):this._loopReadVideoTimeoutId=setTimeout(()=>{this._loopReadVideo(e)},Math.max(this._minImageCaptureInterval,0))}).catch(t=>{jt(this,re,"f").stopFetching(),"platform error"!==t.message&&(t.errorCode&&0===t.errorCode&&(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout(()=>{jt(this,re,"f").startFetching(),this._loopReadVideo(e)},Math.max(this._minImageCaptureInterval,1e3))),setTimeout(()=>{if(!this.onCaptureError)throw t;this.onCaptureError(t)},0))})}_reRunCurrnetFunc(t){this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout(()=>{this._loopReadVideo(t)},0)}async getClarity(t,e,i,n,s){const{bytes:r,width:a,height:o,stride:l,format:h}=t;let c=Tt();return new Promise((t,d)=>{bt[c]=async e=>{e.success?t(e.clarity):Ae({message:e.message,rj:d,stack:e.stack,functionName:"getClarity"})},Et.postMessage({type:"cvr_getClarity",id:c,instanceID:this._instanceID,body:{bytes:r,width:a,height:o,stride:l,format:h,bitcount:e,wr:i,hr:n,grayThreshold:s}},[r.buffer])})}async capture(e,i){let n;if(Re(this),i||(i=t._defaultTemplate),Vt(this,pe,!1),w(e))n=await this._captureDsimage(e,i);else if("string"==typeof e)n="data:image/"==e.substring(0,11)?await this._captureBase64(e,i):await this._captureUrl(e,i);else if(e instanceof Blob)n=await this._captureBlob(e,i);else if(e instanceof HTMLImageElement)n=await this._captureImage(e,i);else if(e instanceof HTMLCanvasElement)n=await this._captureCanvas(e,i);else{if(!(e instanceof HTMLVideoElement))throw new TypeError("'capture(imageOrFile, templateName)': Type of 'imageOrFile' should be 'DSImageData', 'Url', 'Base64', 'Blob', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement'.");n=await this._captureVideo(e,i)}return n}async _captureDsimage(t,e){return await this._captureInWorker(t,e)}async _captureUrl(t,e){let i=await R(t,"blob");return await this._captureBlob(i,e)}async _captureBase64(t,e){t=t.substring(t.indexOf(",")+1);let i=atob(t),n=i.length,s=new Uint8Array(n);for(;n--;)s[n]=i.charCodeAt(n);return await this._captureBlob(new Blob([s]),e)}async _captureBlob(t,e){let i=null,n=null;if("undefined"!=typeof createImageBitmap)try{i=await createImageBitmap(t)}catch(t){}i||(n=await async function(e){return await new Promise((i,n)=>{let s=URL.createObjectURL(e),r=new Image;r.src=s,r.onload=()=>{URL.revokeObjectURL(r.dbrObjUrl),i(r)},r.onerror=()=>{let e="Unsupported image format. Please upload files in one of the following formats: .jpg,.jpeg,.ico,.gif,.svg,.webp,.png,.bmp";"image/svg+xml"===t.type&&(e="Invalid SVG file. The file appears to be malformed or contains invalid XML."),n(new Error(e))}})}(t));let s=await this._captureImage(i||n,e);return i&&i.close(),s}async _captureImage(t,e){let i,n,s=t instanceof HTMLImageElement?t.naturalWidth:t.width,r=t instanceof HTMLImageElement?t.naturalHeight:t.height,a=Math.max(s,r);a>this.maxImageSideLength?(Vt(this,me,this.maxImageSideLength/a),i=Math.round(s*jt(this,me,"f")),n=Math.round(r*jt(this,me,"f"))):(i=s,n=r),jt(this,ae,"f")||Vt(this,ae,document.createElement("canvas"));const o=jt(this,ae,"f");return o.width===i&&o.height===n||(o.width=i,o.height=n),o.ctx2d||(o.ctx2d=o.getContext("2d",{willReadFrequently:!0})),o.ctx2d.drawImage(t,0,0,s,r,0,0,i,n),t.dbrObjUrl&&URL.revokeObjectURL(t.dbrObjUrl),await this._captureCanvas(o,e)}async _captureCanvas(t,e){if(t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";if([t.width,t.height].includes(0))throw Error("The width or height of the 'canvas' is 0.");const i=t.ctx2d||t.getContext("2d",{willReadFrequently:!0}),n={bytes:Uint8Array.from(i.getImageData(0,0,t.width,t.height).data),width:t.width,height:t.height,stride:4*t.width,format:10};return await this._captureInWorker(n,e)}async _captureVideo(t,e){if(t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";let i,n,s=t.videoWidth,r=t.videoHeight,a=Math.max(s,r);a>this.maxImageSideLength?(Vt(this,me,this.maxImageSideLength/a),i=Math.round(s*jt(this,me,"f")),n=Math.round(r*jt(this,me,"f"))):(i=s,n=r),jt(this,ae,"f")||Vt(this,ae,document.createElement("canvas"));const o=jt(this,ae,"f");return o.width===i&&o.height===n||(o.width=i,o.height=n),o.ctx2d||(o.ctx2d=o.getContext("2d",{willReadFrequently:!0})),o.ctx2d.drawImage(t,0,0,s,r,0,0,i,n),await this._captureCanvas(o,e)}async _captureInWorker(e,i){const{bytes:n,width:s,height:r,stride:a,format:o}=e;let l=Tt();const h=new Wt;return bt[l]=async i=>{if(i.success){const n=Date.now();t._onLog&&(t._onLog(`get result time from worker: ${n}`),t._onLog("worker to main time consume: "+(n-i.workerReturnMsgTime)));try{const t=i.captureResult;e.bytes=i.bytes,jt(this,se,"m",we).call(this,t,e),i.isScanner||Vt(this,me,0),jt(this,se,"m",Ce).call(this,t,e);const n=Date.now();return n-jt(this,ge,"f")>jt(this,fe,"f")&&(localStorage.setItem("dynamoft",JSON.stringify(i.itemCountRecord)),Vt(this,ge,n)),h.resolve(t)}catch(i){Ae({message:i.message,rj:h.reject,stack:i.stack,functionName:"capture"})}}else Ae({message:i.message,rj:h.reject,stack:i.stack,functionName:"capture"})},t._onLog&&t._onLog(`send buffer to worker: ${Date.now()}`),Et.postMessage({type:"cvr_capture",id:l,instanceID:this._instanceID,body:{bytes:n,width:s,height:r,stride:a,format:o,templateName:i||"",isScanner:jt(this,pe,"f"),dynamsoft:this._dynamsoft}},[n.buffer]),h}async initSettings(e){if(Re(this),e&&["string","object"].includes(typeof e))return"string"==typeof e?e.trimStart().startsWith("{")||(e=await R(e,"text")):"object"==typeof e&&(e=JSON.stringify(e)),await new Promise((i,n)=>{let s=Tt();bt[s]=async s=>{if(s.success){const r=JSON.parse(s.response);if(0!==r.errorCode&&Ae({message:r.errorString?r.errorString:"Init Settings Failed.",rj:n,errorCode:r.errorCode,functionName:"initSettings"}))return;const a=JSON.parse(e);return this._currentSettings=a,this._isOutputOriginalImage=1===this._currentSettings.CaptureVisionTemplates[0].OutputOriginalImage,t._defaultTemplate=this._currentSettings.CaptureVisionTemplates[0].Name,i(r)}Ae({message:s.message,rj:n,stack:s.stack,functionName:"initSettings"})},Et.postMessage({type:"cvr_initSettings",id:s,instanceID:this._instanceID,body:{settings:e}})});console.error("Invalid template.")}async outputSettings(t,e){return Re(this),await new Promise((i,n)=>{let s=Tt();bt[s]=async t=>{if(t.success){const e=JSON.parse(t.response);return 0!==e.errorCode&&Ae({message:e.errorString,rj:n,errorCode:e.errorCode,functionName:"outputSettings"}),i(JSON.parse(e.data))}Ae({message:t.message,rj:n,stack:t.stack,functionName:"outputSettings"})},Et.postMessage({type:"cvr_outputSettings",id:s,instanceID:this._instanceID,body:{templateName:t||"*",includeDefaultValues:!!e}})})}async outputSettingsToFile(t,e,i,n){const s=await this.outputSettings(t,n),r=new Blob([JSON.stringify(s,null,2,function(t,e){return e instanceof Array?JSON.stringify(e):e},2)],{type:"application/json"});if(i){const t=document.createElement("a");t.href=URL.createObjectURL(r),e.endsWith(".json")&&(e=e.replace(".json","")),t.download=`${e}.json`,t.onclick=()=>{setTimeout(()=>{URL.revokeObjectURL(t.href)},500)},t.click()}return r}async getTemplateNames(){return Re(this),await new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success){const n=JSON.parse(i.response);return 0!==n.errorCode&&Ae({message:n.errorString,rj:e,errorCode:n.errorCode,functionName:"getTemplateNames"}),t(JSON.parse(n.data))}Ae({message:i.message,rj:e,stack:i.stack,functionName:"getTemplateNames"})},Et.postMessage({type:"cvr_getTemplateNames",id:i,instanceID:this._instanceID})})}async getSimplifiedSettings(t){return Re(this),t||(t=this._currentSettings.CaptureVisionTemplates[0].Name),await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success){const n=JSON.parse(t.response);0!==n.errorCode&&Ae({message:n.errorString,rj:i,errorCode:n.errorCode,functionName:"getSimplifiedSettings"});const s=JSON.parse(n.data,(t,e)=>"barcodeFormatIds"===t?BigInt(e):e);return s.minImageCaptureInterval=this._minImageCaptureInterval,e(s)}Ae({message:t.message,rj:i,stack:t.stack,functionName:"getSimplifiedSettings"})},Et.postMessage({type:"cvr_getSimplifiedSettings",id:n,instanceID:this._instanceID,body:{templateName:t}})})}async updateSettings(t,e){return Re(this),t||(t=this._currentSettings.CaptureVisionTemplates[0].Name),await new Promise((i,n)=>{let s=Tt();bt[s]=async t=>{if(t.success){const s=JSON.parse(t.response);return e.minImageCaptureInterval&&e.minImageCaptureInterval>=-1&&(this._minImageCaptureInterval=e.minImageCaptureInterval),this._isOutputOriginalImage=t.isOutputOriginalImage,0!==s.errorCode&&Ae({message:s.errorString?s.errorString:"Update Settings Failed.",rj:n,errorCode:s.errorCode,functionName:"updateSettings"}),this._currentSettings=await this.outputSettings("*"),i(s)}Ae({message:t.message,rj:n,stack:t.stack,functionName:"updateSettings"})},Et.postMessage({type:"cvr_updateSettings",id:s,instanceID:this._instanceID,body:{settings:e,templateName:t}})})}async resetSettings(){return Re(this),await new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success){const n=JSON.parse(i.response);return 0!==n.errorCode&&Ae({message:n.errorString?n.errorString:"Reset Settings Failed.",rj:e,errorCode:n.errorCode,functionName:"resetSettings"}),this._currentSettings=await this.outputSettings("*"),t(n)}Ae({message:i.message,rj:e,stack:i.stack,functionName:"resetSettings"})},Et.postMessage({type:"cvr_resetSettings",id:i,instanceID:this._instanceID})})}getBufferedItemsManager(){return jt(this,he,"f")||Vt(this,he,new Yt(this)),jt(this,he,"f")}getIntermediateResultManager(){if(Re(this),!jt(this,_e,"f")&&0!==Pt.bSupportIRTModule)throw new Error("The current license does not support the use of intermediate results.");return jt(this,le,"f")||Vt(this,le,new Xt(this)),jt(this,le,"f")}static async setGlobalIntraOpNumThreads(t=0){return t>4||t<0?Promise.reject(new RangeError("'intraOpNumThreads' should be between 0 and 4.")):(await Pt.loadWasm(),await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success)return e();Ae({message:t.message,rj:i,stack:t.stack,functionName:"setGlobalIntraOpNumThreads"})},Et.postMessage({type:"cvr_setGlobalIntraOpNumThreads",id:n,body:{intraOpNumThreads:t}})}))}async parseRequiredResources(t){return Re(this),await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success)return e(JSON.parse(t.resources));Ae({message:t.message,rj:i,stack:t.stack,functionName:"parseRequiredResources"})},Et.postMessage({type:"cvr_parseRequiredResources",id:n,instanceID:this._instanceID,body:{templateName:t}})})}async dispose(){Re(this),jt(this,oe,"f")&&this.stopCapturing(),Vt(this,re,null),jt(this,ce,"f").clear(),jt(this,de,"f").clear(),jt(this,ue,"f").clear(),jt(this,le,"f")._intermediateResultReceiverSet.clear(),Vt(this,ve,!0);let t=Tt();bt[t]=t=>{t.success||Ae({message:t.message,stack:t.stack,isShouleThrow:!0,functionName:"dispose"})},Et.postMessage({type:"cvr_dispose",id:t,instanceID:this._instanceID})}_getInternalData(){return{isa:jt(this,re,"f"),promiseStartScan:jt(this,oe,"f"),intermediateResultManager:jt(this,le,"f"),bufferdItemsManager:jt(this,he,"f"),resultReceiverSet:jt(this,ce,"f"),isaStateListenerSet:jt(this,de,"f"),resultFilterSet:jt(this,ue,"f"),compressRate:jt(this,me,"f"),canvas:jt(this,ae,"f"),isScanner:jt(this,pe,"f"),innerUseTag:jt(this,_e,"f"),isDestroyed:jt(this,ve,"f")}}async _getWasmFilterState(){return await new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success){const e=JSON.parse(i.response);return t(e)}Ae({message:i.message,rj:e,stack:i.stack,functionName:""})},Et.postMessage({type:"cvr_getWasmFilterState",id:i,instanceID:this._instanceID})})}};re=new WeakMap,ae=new WeakMap,oe=new WeakMap,le=new WeakMap,he=new WeakMap,ce=new WeakMap,de=new WeakMap,ue=new WeakMap,fe=new WeakMap,ge=new WeakMap,me=new WeakMap,pe=new WeakMap,_e=new WeakMap,ve=new WeakMap,ye=new WeakMap,se=new WeakSet,we=function(t,e){var i,n,s,r,a,o,l,h,c,d,u,f;for(let g=0;g<t.items.length;g++){const m=t.items[g];0!==jt(this,me,"f")&&xe(m,jt(this,me,"f")),m.type===nt.CRIT_ORIGINAL_IMAGE?t.items[g]=Oe(e):m.type===nt.CRIT_BARCODE?(null!==(i=(l=t.decodedBarcodesResult).barcodeResultItems)&&void 0!==i||(l.barcodeResultItems=[]),t.decodedBarcodesResult.barcodeResultItems.push(m)):m.type===nt.CRIT_TEXT_LINE?(null!==(n=(h=t.recognizedTextLinesResult).textLineResultItems)&&void 0!==n||(h.textLineResultItems=[]),t.recognizedTextLinesResult.textLineResultItems.push(m)):m.type===nt.CRIT_DETECTED_QUAD?(null!==(s=(c=t.processedDocumentResult).detectedQuadResultItems)&&void 0!==s||(c.detectedQuadResultItems=[]),t.processedDocumentResult.detectedQuadResultItems.push(m)):m.type===nt.CRIT_DESKEWED_IMAGE?(Dt.ddn&&Dt.ddn.handleDeskewedAndEnhancedImageResultItem(m),null!==(r=(d=t.processedDocumentResult).deskewedImageResultItems)&&void 0!==r||(d.deskewedImageResultItems=[]),t.processedDocumentResult.deskewedImageResultItems.push(m)):m.type===nt.CRIT_ENHANCED_IMAGE?(Dt.ddn&&Dt.ddn.handleDeskewedAndEnhancedImageResultItem(m),null!==(a=(u=t.processedDocumentResult).enhancedImageResultItems)&&void 0!==a||(u.enhancedImageResultItems=[]),t.processedDocumentResult.enhancedImageResultItems.push(m)):m.type===nt.CRIT_PARSED_RESULT&&(Dt.dcp&&Dt.dcp.handleParsedResultItem(m),null!==(o=(f=t.parsedResult).parsedResultItems)&&void 0!==o||(f.parsedResultItems=[]),t.parsedResult.parsedResultItems.push(m))}},Ce=function(t,e){const i=t.intermediateResult;if(i){let t=0;for(let n of jt(this,le,"f")._intermediateResultReceiverSet){t++;for(let s of i){if(["onTaskResultsReceived","onTargetROIResultsReceived"].includes(s.info.callbackName)){for(let t of s.intermediateResultUnits)t.originalImageTag=e.tag?e.tag:null;n[s.info.callbackName]&&n[s.info.callbackName]({intermediateResultUnits:s.intermediateResultUnits},s.info)}else n[s.info.callbackName]&&n[s.info.callbackName](s.result,s.info);t===jt(this,le,"f")._intermediateResultReceiverSet.size&&delete s.info.callbackName}}}t&&t.hasOwnProperty("intermediateResult")&&delete t.intermediateResult},Ee=function(t){for(let e of jt(this,ce,"f"))t.decodedBarcodesResult&&e.onDecodedBarcodesReceived&&e.onDecodedBarcodesReceived(t.decodedBarcodesResult),t.recognizedTextLinesResult&&e.onRecognizedTextLinesReceived&&e.onRecognizedTextLinesReceived(t.recognizedTextLinesResult),t.processedDocumentResult&&e.onProcessedDocumentResultReceived&&e.onProcessedDocumentResultReceived(t.processedDocumentResult),t.parsedResult&&e.onParsedResultsReceived&&e.onParsedResultsReceived(t.parsedResult),e.onCapturedResultReceived&&e.onCapturedResultReceived(t)},Se=async function(t){return Re(this),await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success)return e(t.result);Ae({message:t.message,rj:i,stack:t.stack,functionName:"addResultFilter"})},Et.postMessage({type:"cvr_enableResultCrossVerification",id:n,instanceID:this._instanceID,body:{verificationEnabled:t}})})},Te=async function(t){return Re(this),await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success)return e(t.result);Ae({message:t.message,rj:i,stack:t.stack,functionName:"addResultFilter"})},Et.postMessage({type:"cvr_enableResultDeduplication",id:n,instanceID:this._instanceID,body:{duplicateFilterEnabled:t}})})},be=async function(t){return Re(this),await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success)return e(t.result);Ae({message:t.message,rj:i,stack:t.stack,functionName:"addResultFilter"})},Et.postMessage({type:"cvr_setDuplicateForgetTime",id:n,instanceID:this._instanceID,body:{duplicateForgetTime:t}})})},Ie=async function(){let t=Tt();const e=new Wt;return bt[t]=async t=>{if(t.success)return e.resolve();Ae({message:t.message,rj:e.reject,stack:t.stack,functionName:"stopCapturing"})},Et.postMessage({type:"cvr_clearVerifyList",id:t,instanceID:this._instanceID}),e},Me._defaultTemplate="Default",Me._isNoOnnx=!1;let Le=class{constructor(){this.onCapturedResultReceived=null,this.onOriginalImageResultReceived=null}},Fe=class{constructor(){this._observedResultUnitTypes=ut.IRUT_ALL,this._observedTaskMap=new Map,this._parameters={setObservedResultUnitTypes:t=>{this._observedResultUnitTypes=t},getObservedResultUnitTypes:()=>this._observedResultUnitTypes,isResultUnitTypeObserved:t=>!!(t&this._observedResultUnitTypes),addObservedTask:t=>{this._observedTaskMap.set(t,!0)},removeObservedTask:t=>{this._observedTaskMap.set(t,!1)},isTaskObserved:t=>0===this._observedTaskMap.size||!!this._observedTaskMap.get(t)},this.onTaskResultsReceived=null,this.onPredetectedRegionsReceived=null,this.onColourImageUnitReceived=null,this.onScaledColourImageUnitReceived=null,this.onGrayscaleImageUnitReceived=null,this.onTransformedGrayscaleImageUnitReceived=null,this.onEnhancedGrayscaleImageUnitReceived=null,this.onBinaryImageUnitReceived=null,this.onTextureDetectionResultUnitReceived=null,this.onTextureRemovedGrayscaleImageUnitReceived=null,this.onTextureRemovedBinaryImageUnitReceived=null,this.onContoursUnitReceived=null,this.onLineSegmentsUnitReceived=null,this.onTextZonesUnitReceived=null,this.onTextRemovedBinaryImageUnitReceived=null,this.onShortLinesUnitReceived=null}getObservationParameters(){return this._parameters}};var Pe;!function(t){t.PT_DEFAULT="Default",t.PT_READ_BARCODES="ReadBarcodes_Default",t.PT_RECOGNIZE_TEXT_LINES="RecognizeTextLines_Default",t.PT_DETECT_DOCUMENT_BOUNDARIES="DetectDocumentBoundaries_Default",t.PT_DETECT_AND_NORMALIZE_DOCUMENT="DetectAndNormalizeDocument_Default",t.PT_NORMALIZE_DOCUMENT="NormalizeDocument_Default",t.PT_READ_BARCODES_SPEED_FIRST="ReadBarcodes_SpeedFirst",t.PT_READ_BARCODES_READ_RATE_FIRST="ReadBarcodes_ReadRateFirst",t.PT_READ_BARCODES_BALANCE="ReadBarcodes_Balance",t.PT_READ_SINGLE_BARCODE="ReadSingleBarcode",t.PT_READ_DENSE_BARCODES="ReadDenseBarcodes",t.PT_READ_DISTANT_BARCODES="ReadDistantBarcodes",t.PT_RECOGNIZE_NUMBERS="RecognizeNumbers",t.PT_RECOGNIZE_LETTERS="RecognizeLetters",t.PT_RECOGNIZE_NUMBERS_AND_LETTERS="RecognizeNumbersAndLetters",t.PT_RECOGNIZE_NUMBERS_AND_UPPERCASE_LETTERS="RecognizeNumbersAndUppercaseLetters",t.PT_RECOGNIZE_UPPERCASE_LETTERS="RecognizeUppercaseLetters"}(Pe||(Pe={}));const ke="undefined"==typeof self,Ne=ke?{}:self,Be="function"==typeof importScripts,je=(()=>{if(!Be){if(!ke&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})(),Ve=t=>t&&"object"==typeof t&&"function"==typeof t.then,Ue=(async()=>{})().constructor;let Ge=class extends Ue{get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(t){let e;this._task=t,Ve(t)?e=t:"function"==typeof t&&(e=new Ue(t)),e&&(async()=>{try{const i=await e;t===this._task&&this.resolve(i)}catch(e){t===this._task&&this.reject(e)}})()}get isEmpty(){return null==this._task}constructor(t){let e,i;super((t,n)=>{e=t,i=n}),this._s="pending",this.resolve=t=>{this.isPending&&(Ve(t)?this.task=t:(this._s="fulfilled",e(t)))},this.reject=t=>{this.isPending&&(this._s="rejected",i(t))},this.task=t}};const We=" is not allowed to change after `createInstance` or `loadWasm` is called.",Ye=!ke&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",He=(t,e)=>{const i=t;if(i._license!==e){if(!i._pLoad.isEmpty)throw new Error("`license`"+We);i._license=e}};!ke&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword");const ze=t=>{if(null==t)t=[];else{t=t instanceof Array?[...t]:[t];for(let e=0;e<t.length;++e){if(!ke){let i=document.createElement("a");i.href=t[e],t[e]=i.href}t[e].endsWith("/")||(t[e]+="/")}}return t},Xe=(t,e)=>{e=ze(e);const i=t;if(i._licenseServer!==e){if(!i._pLoad.isEmpty)throw new Error("`licenseServer`"+We);i._licenseServer=e}},qe=(t,e)=>{e=e||"";const i=t;if(i._deviceFriendlyName!==e){if(!i._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+We);i._deviceFriendlyName=e}};let Ze,Ke,Je,$e,Qe;"undefined"!=typeof navigator&&(Ze=navigator,Ke=Ze.userAgent,Je=Ze.platform,$e=Ze.mediaDevices),function(){if(!ke){const t={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:Ze.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},e={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:Je,search:"Win"},Mac:{str:Je},Linux:{str:Je}};let i="unknownBrowser",n=0,s="unknownOS";for(let e in t){const s=t[e]||{};let r=s.str||Ke,a=s.search||e,o=s.verStr||Ke,l=s.verSearch||e;if(l instanceof Array||(l=[l]),-1!=r.indexOf(a)){i=e;for(let t of l){let e=o.indexOf(t);if(-1!=e){n=parseFloat(o.substring(e+t.length+1));break}}break}}for(let t in e){const i=e[t]||{};let n=i.str||Ke,r=i.search||t;if(-1!=n.indexOf(r)){s=t;break}}"Linux"==s&&-1!=Ke.indexOf("Windows NT")&&(s="HarmonyOS"),Qe={browser:i,version:n,OS:s}}ke&&(Qe={browser:"ssr",version:0,OS:"ssr"})}(),$e&&$e.getUserMedia,"Chrome"===Qe.browser&&Qe.version>66||"Safari"===Qe.browser&&Qe.version>13||"OPR"===Qe.browser&&Qe.version>43||"Edge"===Qe.browser&&Qe.version;const ti=()=>(Pt.loadWasm(),Ct("dynamsoft_inited",async()=>{let{lt:t,l:e,ls:i,sp:n,rmk:s,cv:r}=((t,e=!1)=>{const i=ii;if(i._pLoad.isEmpty){let n,s,r,a=i._license||"",o=JSON.parse(JSON.stringify(i._licenseServer)),l=i._sessionPassword,h=0;if(a.startsWith("t")||a.startsWith("f"))h=0;else if(0===a.length||a.startsWith("P")||a.startsWith("L")||a.startsWith("Y")||a.startsWith("A"))h=1;else{h=2;const e=a.indexOf(":");-1!=e&&(a=a.substring(e+1));const i=a.indexOf("?");if(-1!=i&&(s=a.substring(i+1),a=a.substring(0,i)),a.startsWith("DLC2"))h=0;else{if(a.startsWith("DLS2")){let e;try{let t=a.substring(4);t=atob(t),e=JSON.parse(t)}catch(t){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(a=e.handshakeCode?e.handshakeCode:e.organizationID?e.organizationID:"","number"==typeof a&&(a=JSON.stringify(a)),0===o.length){let t=[];e.mainServerURL&&(t[0]=e.mainServerURL),e.standbyServerURL&&(t[1]=e.standbyServerURL),o=ze(t)}!l&&e.sessionPassword&&(l=e.sessionPassword),n=e.remark}a&&"200001"!==a&&!a.startsWith("200001-")||(h=1)}}if(h&&(e||(Ne.crypto||(r="Please upgrade your browser to support online key."),Ne.crypto.subtle||(r="Require https to use online key in this browser."))),r)throw new Error(r);return 1===h&&(a="",console.warn("Applying for a public trial license ...")),{lt:h,l:a,ls:o,sp:l,rmk:n,cv:s}}throw new Error("Can't preprocess license again"+We)})(),a=new Ge;ii._pLoad.task=a,(async()=>{try{await ii._pLoad}catch(t){}})();let o=Tt();bt[o]=e=>{if(e.message&&ii._onAuthMessage){let t=ii._onAuthMessage(e.message);null!=t&&(e.message=t)}let i,n=!1;if(1===t&&(n=!0),e.success?(It&&It("init license success"),e.message&&console.warn(e.message),Pt._bSupportIRTModule=e.bSupportIRTModule,Pt._bSupportDce4Module=e.bSupportDce4Module,ii.bPassValidation=!0,[0,-10076].includes(e.initLicenseInfo.errorCode)?[-10076].includes(e.initLicenseInfo.errorCode)&&console.warn(e.initLicenseInfo.errorString):a.reject(new Error(e.initLicenseInfo.errorString))):(i=Error(e.message),e.stack&&(i.stack=e.stack),e.ltsErrorCode&&(i.ltsErrorCode=e.ltsErrorCode),n||111==e.ltsErrorCode&&-1!=e.message.toLowerCase().indexOf("trial license")&&(n=!0)),n){const t=D(Pt.engineResourcePaths),i=("DCV"===Pt._bundleEnv?t.dcvData:t.dbrBundle)+"ui/";(async(t,e,i)=>{if(!t._bNeverShowDialog)try{let n=await fetch(t.engineResourcePath+"dls.license.dialog.html");if(!n.ok)throw Error("Get license dialog fail. Network Error: "+n.statusText);let s=await n.text();if(!s.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let r=document.createElement("div");r.insertAdjacentHTML("beforeend",s);let a=[];for(let t=0;t<r.childElementCount;++t){let e=r.children[t];e instanceof HTMLStyleElement&&(a.push(e),document.head.append(e))}let o=1==r.childElementCount?r.children[0]:r;o.remove();let l,h,c,d,u,f=[o],g=o.children;for(let t of g)f.push(t);for(let t=0;t<f.length;++t)for(let e of f[t].children)f.push(e);for(let t of f)if(!l&&t.classList.contains("dls-license-mask"))l=t,t.addEventListener("click",e=>{if(t==e.target){o.remove();for(let t of a)t.remove()}});else if(!h&&t.classList.contains("dls-license-icon-close"))h=t,t.addEventListener("click",()=>{o.remove();for(let t of a)t.remove()});else if(!c&&t.classList.contains("dls-license-icon-error"))c=t,"error"!=e&&t.remove();else if(!d&&t.classList.contains("dls-license-icon-warn"))d=t,"warn"!=e&&t.remove();else if(!u&&t.classList.contains("dls-license-msg-content")){u=t;let e=i;for(;e;){let i=e.indexOf("["),n=e.indexOf("]",i),s=e.indexOf("(",n),r=e.indexOf(")",s);if(-1==i||-1==n||-1==s||-1==r){t.appendChild(new Text(e));break}i>0&&t.appendChild(new Text(e.substring(0,i)));let a=document.createElement("a"),o=e.substring(i+1,n);a.innerText=o;let l=e.substring(s+1,r);a.setAttribute("href",l),a.setAttribute("target","_blank"),t.appendChild(a),e=e.substring(r+1)}}document.body.appendChild(o)}catch(e){t._onLog&&t._onLog(e.message||e)}})({_bNeverShowDialog:ii._bNeverShowDialog,engineResourcePath:i,_onLog:It},e.success?"warn":"error",e.message)}e.success?a.resolve(void 0):a.reject(i)},await wt("core");const l=await Pt.getModuleVersion();Et.postMessage({type:"license_dynamsoft",body:{v:"DCV"===Pt._bundleEnv?l.CVR.replace(/\.\d+$/,""):l.DBR.replace(/\.\d+$/,""),brtk:!!t,bptk:1===t,l:e,os:Qe,fn:ii.deviceFriendlyName,ls:i,sp:n,rmk:s,cv:r},id:o}),ii.bCallInitLicense=!0,await a}));let ei;Dt.license={},Dt.license.dynamsoft=ti,Dt.license.getAR=async()=>{{let t=yt.dynamsoft_inited;t&&t.isRejected&&await t}return Et?new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success){delete i.success;{let t=ii.license;t&&(t.startsWith("t")||t.startsWith("f"))&&(i.pk=t)}if(Object.keys(i).length){if(i.lem){let t=Error(i.lem);t.ltsErrorCode=i.lec,delete i.lem,delete i.lec,i.ae=t}t(i)}else t(null)}else{let t=Error(i.message);i.stack&&(t.stack=i.stack),e(t)}},Et.postMessage({type:"license_getAR",id:i})}):null};let ii=class t{static setLicenseServer(e){Xe(t,e)}static get license(){return this._license}static set license(e){He(t,e)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){Xe(t,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){qe(t,e)}static initLicense(e,i){if(He(t,e),t.bCallInitLicense=!0,"boolean"==typeof i&&i||"object"==typeof i&&i.executeNow)return ti()}static setDeviceFriendlyName(e){qe(t,e)}static getDeviceFriendlyName(){return t._deviceFriendlyName}static getDeviceUUID(){return(async()=>(await Ct("dynamsoft_uuid",async()=>{await Pt.loadWasm();let t=new Ge,e=Tt();bt[e]=e=>{if(e.success)t.resolve(e.uuid);else{const i=Error(e.message);e.stack&&(i.stack=e.stack),t.reject(i)}},Et.postMessage({type:"license_getDeviceUUID",id:e}),ei=await t}),ei))()}};ii._pLoad=new Ge,ii.bPassValidation=!1,ii.bCallInitLicense=!1,ii._license=Ye,ii._licenseServer=[],ii._deviceFriendlyName="",Pt.engineResourcePaths.license={version:"4.2.20-dev-20251029130543",path:je,isInternal:!0},Mt.license={wasm:!0,js:!0},Dt.license.LicenseManager=ii;const ni="2.0.0";"string"!=typeof Pt.engineResourcePaths.std&&A(Pt.engineResourcePaths.std.version,ni)<0&&(Pt.engineResourcePaths.std={version:ni,path:(t=>{if(null==t&&(t="./"),ke||Be);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t})(je+`../../dynamsoft-capture-vision-std@${ni}/dist/`),isInternal:!0});let si=class{static getVersion(){return`4.2.20-dev-20251029130543(Worker: ${At.license&&At.license.worker||"Not Loaded"}, Wasm: ${At.license&&At.license.wasm||"Not Loaded"})`}};const ri="undefined"==typeof self,ai="function"==typeof importScripts,oi=(()=>{if(!ai){if(!ri&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})();Pt.engineResourcePaths.dce={version:"4.3.3-dev-20251029130621",path:oi,isInternal:!0},Mt.dce={wasm:!1,js:!1},Dt.dce={};let li,hi,ci,di,ui,fi=class{static getVersion(){return"4.3.3-dev-20251029130621"}};function gi(t,e,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(t):n?n.value:e.get(t)}function mi(t,e,i,n,s){if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return s?s.value=i:e.set(t,i),i}"function"==typeof SuppressedError&&SuppressedError,"undefined"!=typeof navigator&&(li=navigator,hi=li.userAgent,ci=li.platform,di=li.mediaDevices),function(){if(!ri){const t={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:li.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},e={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:ci,search:"Win"},Mac:{str:ci},Linux:{str:ci}};let i="unknownBrowser",n=0,s="unknownOS";for(let e in t){const s=t[e]||{};let r=s.str||hi,a=s.search||e,o=s.verStr||hi,l=s.verSearch||e;if(l instanceof Array||(l=[l]),-1!=r.indexOf(a)){i=e;for(let t of l){let e=o.indexOf(t);if(-1!=e){n=parseFloat(o.substring(e+t.length+1));break}}break}}for(let t in e){const i=e[t]||{};let n=i.str||hi,r=i.search||t;if(-1!=n.indexOf(r)){s=t;break}}"Linux"==s&&-1!=hi.indexOf("Windows NT")&&(s="HarmonyOS"),ui={browser:i,version:n,OS:s}}ri&&(ui={browser:"ssr",version:0,OS:"ssr"})}();const pi="undefined"!=typeof WebAssembly&&hi&&!(/Safari/.test(hi)&&!/Chrome/.test(hi)&&/\(.+\s11_2_([2-6]).*\)/.test(hi)),_i=!("undefined"==typeof Worker),vi=!(!di||!di.getUserMedia),yi=async()=>{let t=!1;if(vi)try{(await di.getUserMedia({video:!0})).getTracks().forEach(t=>{t.stop()}),t=!0}catch(t){}return t};"Chrome"===ui.browser&&ui.version>66||"Safari"===ui.browser&&ui.version>13||"OPR"===ui.browser&&ui.version>43||"Edge"===ui.browser&&ui.version;var wi={653:(t,e,i)=>{var n,s,r,a,o,l,h,c,d,u,f,g,m,p,_,v,y,w,C,E,S,T=T||{version:"5.2.1"};if(e.fabric=T,"undefined"!=typeof document&&"undefined"!=typeof window)document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?T.document=document:T.document=document.implementation.createHTMLDocument(""),T.window=window;else{var b=new(i(192).JSDOM)(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;T.document=b.document,T.jsdomImplForWrapper=i(898).implForWrapper,T.nodeCanvas=i(245).Canvas,T.window=b,DOMParser=T.window.DOMParser}function I(t,e){var i=t.canvas,n=e.targetCanvas,s=n.getContext("2d");s.translate(0,n.height),s.scale(1,-1);var r=i.height-n.height;s.drawImage(i,0,r,n.width,n.height,0,0,n.width,n.height)}function x(t,e){var i=e.targetCanvas.getContext("2d"),n=e.destinationWidth,s=e.destinationHeight,r=n*s*4,a=new Uint8Array(this.imageBuffer,0,r),o=new Uint8ClampedArray(this.imageBuffer,0,r);t.readPixels(0,0,n,s,t.RGBA,t.UNSIGNED_BYTE,a);var l=new ImageData(o,n,s);i.putImageData(l,0,0)}T.isTouchSupported="ontouchstart"in T.window||"ontouchstart"in T.document||T.window&&T.window.navigator&&T.window.navigator.maxTouchPoints>0,T.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,T.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],T.DPI=96,T.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",T.commaWsp="(?:\\s+,?\\s*|,\\s*)",T.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,T.reNonWord=/[ \n\.,;!\?\-]/,T.fontPaths={},T.iMatrix=[1,0,0,1,0,0],T.svgNS="http://www.w3.org/2000/svg",T.perfLimitSizeTotal=2097152,T.maxCacheSideLimit=4096,T.minCacheSideLimit=256,T.charWidthsCache={},T.textureSize=2048,T.disableStyleCopyPaste=!1,T.enableGLFiltering=!0,T.devicePixelRatio=T.window.devicePixelRatio||T.window.webkitDevicePixelRatio||T.window.mozDevicePixelRatio||1,T.browserShadowBlurConstant=1,T.arcToSegmentsCache={},T.boundsOfCurveCache={},T.cachesBoundsOfCurve=!0,T.forceGLPutImageData=!1,T.initFilterBackend=function(){return T.enableGLFiltering&&T.isWebglSupported&&T.isWebglSupported(T.textureSize)?(console.log("max texture size: "+T.maxTextureSize),new T.WebglFilterBackend({tileSize:T.textureSize})):T.Canvas2dFilterBackend?new T.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=T),function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:T.util.array.fill(i,!1)}}function e(t,e){var i=function(){e.apply(this,arguments),this.off(t,i)}.bind(this);this.on(t,i)}T.Observable={fire:function(t,e){if(!this.__eventListeners)return this;var i=this.__eventListeners[t];if(!i)return this;for(var n=0,s=i.length;n<s;n++)i[n]&&i[n].call(this,e||{});return this.__eventListeners[t]=i.filter(function(t){return!1!==t}),this},on:function(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this},once:function(t,i){if(1===arguments.length)for(var n in t)e.call(this,n,t[n]);else e.call(this,t,i);return this},off:function(e,i){if(!this.__eventListeners)return this;if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var n in e)t.call(this,n,e[n]);else t.call(this,e,i);return this}}}(),T.Collection={_objects:[],add:function(){if(this._objects.push.apply(this._objects,arguments),this._onObjectAdded)for(var t=0,e=arguments.length;t<e;t++)this._onObjectAdded(arguments[t]);return this.renderOnAddRemove&&this.requestRenderAll(),this},insertAt:function(t,e,i){var n=this._objects;return i?n[e]=t:n.splice(e,0,t),this._onObjectAdded&&this._onObjectAdded(t),this.renderOnAddRemove&&this.requestRenderAll(),this},remove:function(){for(var t,e=this._objects,i=!1,n=0,s=arguments.length;n<s;n++)-1!==(t=e.indexOf(arguments[n]))&&(i=!0,e.splice(t,1),this._onObjectRemoved&&this._onObjectRemoved(arguments[n]));return this.renderOnAddRemove&&i&&this.requestRenderAll(),this},forEachObject:function(t,e){for(var i=this.getObjects(),n=0,s=i.length;n<s;n++)t.call(e,i[n],n,i);return this},getObjects:function(t){return void 0===t?this._objects.concat():this._objects.filter(function(e){return e.type===t})},item:function(t){return this._objects[t]},isEmpty:function(){return 0===this._objects.length},size:function(){return this._objects.length},contains:function(t,e){return this._objects.indexOf(t)>-1||!!e&&this._objects.some(function(e){return"function"==typeof e.contains&&e.contains(t,!0)})},complexity:function(){return this._objects.reduce(function(t,e){return t+(e.complexity?e.complexity():0)},0)}},T.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof T.Gradient||this.set(e,new T.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof T.Pattern?i&&i():this.set(e,new T.Pattern(t,i))},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},n=e,s=Math.sqrt,r=Math.atan2,a=Math.pow,o=Math.PI/180,l=Math.PI/2,T.util={cos:function(t){if(0===t)return 1;switch(t<0&&(t=-t),t/l){case 1:case 3:return 0;case 2:return-1}return Math.cos(t)},sin:function(t){if(0===t)return 0;var e=1;switch(t<0&&(e=-1),t/l){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(t)},removeFromArray:function(t,e){var i=t.indexOf(e);return-1!==i&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*o},radiansToDegrees:function(t){return t/o},rotatePoint:function(t,e,i){var n=new T.Point(t.x-e.x,t.y-e.y),s=T.util.rotateVector(n,i);return new T.Point(s.x,s.y).addEquals(e)},rotateVector:function(t,e){var i=T.util.sin(e),n=T.util.cos(e);return{x:t.x*n-t.y*i,y:t.x*i+t.y*n}},createVector:function(t,e){return new T.Point(e.x-t.x,e.y-t.y)},calcAngleBetweenVectors:function(t,e){return Math.acos((t.x*e.x+t.y*e.y)/(Math.hypot(t.x,t.y)*Math.hypot(e.x,e.y)))},getHatVector:function(t){return new T.Point(t.x,t.y).multiply(1/Math.hypot(t.x,t.y))},getBisector:function(t,e,i){var n=T.util.createVector(t,e),s=T.util.createVector(t,i),r=T.util.calcAngleBetweenVectors(n,s),a=r*(0===T.util.calcAngleBetweenVectors(T.util.rotateVector(n,r),s)?1:-1)/2;return{vector:T.util.getHatVector(T.util.rotateVector(n,a)),angle:r}},projectStrokeOnPoints:function(t,e,i){var n=[],s=e.strokeWidth/2,r=e.strokeUniform?new T.Point(1/e.scaleX,1/e.scaleY):new T.Point(1,1),a=function(t){var e=s/Math.hypot(t.x,t.y);return new T.Point(t.x*e*r.x,t.y*e*r.y)};return t.length<=1||t.forEach(function(o,l){var h,c,d=new T.Point(o.x,o.y);0===l?(c=t[l+1],h=i?a(T.util.createVector(c,d)).addEquals(d):t[t.length-1]):l===t.length-1?(h=t[l-1],c=i?a(T.util.createVector(h,d)).addEquals(d):t[0]):(h=t[l-1],c=t[l+1]);var u,f,g=T.util.getBisector(d,h,c),m=g.vector,p=g.angle;if("miter"===e.strokeLineJoin&&(u=-s/Math.sin(p/2),f=new T.Point(m.x*u*r.x,m.y*u*r.y),Math.hypot(f.x,f.y)/s<=e.strokeMiterLimit))return n.push(d.add(f)),void n.push(d.subtract(f));u=-s*Math.SQRT2,f=new T.Point(m.x*u*r.x,m.y*u*r.y),n.push(d.add(f)),n.push(d.subtract(f))}),n},transformPoint:function(t,e,i){return i?new T.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new T.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t,e){if(e)for(var i=0;i<t.length;i++)t[i]=T.util.transformPoint(t[i],e);var n=[t[0].x,t[1].x,t[2].x,t[3].x],s=T.util.array.min(n),r=T.util.array.max(n)-s,a=[t[0].y,t[1].y,t[2].y,t[3].y],o=T.util.array.min(a);return{left:s,top:o,width:r,height:T.util.array.max(a)-o}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],n=T.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-n.x,i[5]=-n.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),n=parseFloat(t);switch(e||(e=T.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return n*T.DPI/25.4;case"cm":return n*T.DPI/2.54;case"in":return n*T.DPI;case"pt":return n*T.DPI/72;case"pc":return n*T.DPI/72*12;case"em":return n*e;default:return n}},falseFunction:function(){return!1},getKlass:function(t,e){return t=T.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),T.util.resolveNamespace(e)[t]},getSvgAttributes:function(t){var e=["instantiated_by_use","style","id","class"];switch(t){case"linearGradient":e=e.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":e=e.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":e=e.concat(["offset","stop-color","stop-opacity"])}return e},resolveNamespace:function(t){if(!t)return T;var e,i=t.split("."),s=i.length,r=n||T.window;for(e=0;e<s;++e)r=r[i[e]];return r},loadImage:function(t,e,i,n){if(t){var s=T.util.createImage(),r=function(){e&&e.call(i,s,!1),s=s.onload=s.onerror=null};s.onload=r,s.onerror=function(){T.log("Error loading "+s.src),e&&e.call(i,null,!0),s=s.onload=s.onerror=null},0!==t.indexOf("data")&&null!=n&&(s.crossOrigin=n),"data:image/svg"===t.substring(0,14)&&(s.onload=null,T.util.loadImageInDom(s,r)),s.src=t}else e&&e.call(i,t)},loadImageInDom:function(t,e){var i=T.document.createElement("div");i.style.width=i.style.height="1px",i.style.left=i.style.top="-100%",i.style.position="absolute",i.appendChild(t),T.document.querySelector("body").appendChild(i),t.onload=function(){e(),i.parentNode.removeChild(i),i=null}},enlivenObjects:function(t,e,i,n){var s=[],r=0,a=(t=t||[]).length;function o(){++r===a&&e&&e(s.filter(function(t){return t}))}a?t.forEach(function(t,e){t&&t.type?T.util.getKlass(t.type,i).fromObject(t,function(i,r){r||(s[e]=i),n&&n(t,i,r),o()}):o()}):e&&e(s)},enlivenObjectEnlivables:function(t,e,i){var n=T.Object.ENLIVEN_PROPS.filter(function(e){return!!t[e]});T.util.enlivenObjects(n.map(function(e){return t[e]}),function(t){var s={};n.forEach(function(i,n){s[i]=t[n],e&&(e[i]=t[n])}),i&&i(s)})},enlivenPatterns:function(t,e){function i(){++s===r&&e&&e(n)}var n=[],s=0,r=(t=t||[]).length;r?t.forEach(function(t,e){t&&t.source?new T.Pattern(t,function(t){n[e]=t,i()}):(n[e]=t,i())}):e&&e(n)},groupSVGElements:function(t,e,i){var n;return t&&1===t.length?t[0]:(e&&(e.width&&e.height?e.centerPoint={x:e.width/2,y:e.height/2}:(delete e.width,delete e.height)),n=new T.Group(t,e),void 0!==i&&(n.sourcePath=i),n)},populateWithProperties:function(t,e,i){if(i&&Array.isArray(i))for(var n=0,s=i.length;n<s;n++)i[n]in t&&(e[i[n]]=t[i[n]])},createCanvasElement:function(){return T.document.createElement("canvas")},copyCanvasElement:function(t){var e=T.util.createCanvasElement();return e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(t,0,0),e},toDataURL:function(t,e,i){return t.toDataURL("image/"+e,i)},createImage:function(){return T.document.createElement("img")},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var e=r(t[1],t[0]),i=a(t[0],2)+a(t[1],2),n=s(i),l=(t[0]*t[3]-t[2]*t[1])/n,h=r(t[0]*t[2]+t[1]*t[3],i);return{angle:e/o,scaleX:n,scaleY:l,skewX:h/o,skewY:0,translateX:t[4],translateY:t[5]}},calcRotateMatrix:function(t){if(!t.angle)return T.iMatrix.concat();var e=T.util.degreesToRadians(t.angle),i=T.util.cos(e),n=T.util.sin(e);return[i,n,-n,i,0,0]},calcDimensionsMatrix:function(t){var e=void 0===t.scaleX?1:t.scaleX,i=void 0===t.scaleY?1:t.scaleY,n=[t.flipX?-e:e,0,0,t.flipY?-i:i,0,0],s=T.util.multiplyTransformMatrices,r=T.util.degreesToRadians;return t.skewX&&(n=s(n,[1,0,Math.tan(r(t.skewX)),1],!0)),t.skewY&&(n=s(n,[1,Math.tan(r(t.skewY)),0,1],!0)),n},composeMatrix:function(t){var e=[1,0,0,1,t.translateX||0,t.translateY||0],i=T.util.multiplyTransformMatrices;return t.angle&&(e=i(e,T.util.calcRotateMatrix(t))),(1!==t.scaleX||1!==t.scaleY||t.skewX||t.skewY||t.flipX||t.flipY)&&(e=i(e,T.util.calcDimensionsMatrix(t))),e},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.rotate(0)},saveObjectTransform:function(t){return{scaleX:t.scaleX,scaleY:t.scaleY,skewX:t.skewX,skewY:t.skewY,angle:t.angle,left:t.left,flipX:t.flipX,flipY:t.flipY,top:t.top}},isTransparent:function(t,e,i,n){n>0&&(e>n?e-=n:e=0,i>n?i-=n:i=0);var s,r=!0,a=t.getImageData(e,i,2*n||1,2*n||1),o=a.data.length;for(s=3;s<o&&0!=(r=a.data[s]<=0);s+=4);return a=null,r},parsePreserveAspectRatioAttribute:function(t){var e,i="meet",n=t.split(" ");return n&&n.length&&("meet"!==(i=n.pop())&&"slice"!==i?(e=i,i="meet"):n.length&&(e=n.pop())),{meetOrSlice:i,alignX:"none"!==e?e.slice(1,4):"none",alignY:"none"!==e?e.slice(5,8):"none"}},clearFabricFontCache:function(t){(t=(t||"").toLowerCase())?T.charWidthsCache[t]&&delete T.charWidthsCache[t]:T.charWidthsCache={}},limitDimsByArea:function(t,e){var i=Math.sqrt(e*t),n=Math.floor(e/i);return{x:Math.floor(i),y:n}},capValue:function(t,e,i){return Math.max(t,Math.min(e,i))},findScaleToFit:function(t,e){return Math.min(e.width/t.width,e.height/t.height)},findScaleToCover:function(t,e){return Math.max(e.width/t.width,e.height/t.height)},matrixToSVG:function(t){return"matrix("+t.map(function(t){return T.util.toFixed(t,T.Object.NUM_FRACTION_DIGITS)}).join(" ")+")"},removeTransformFromObject:function(t,e){var i=T.util.invertTransform(e),n=T.util.multiplyTransformMatrices(i,t.calcOwnMatrix());T.util.applyTransformToObject(t,n)},addTransformToObject:function(t,e){T.util.applyTransformToObject(t,T.util.multiplyTransformMatrices(e,t.calcOwnMatrix()))},applyTransformToObject:function(t,e){var i=T.util.qrDecompose(e),n=new T.Point(i.translateX,i.translateY);t.flipX=!1,t.flipY=!1,t.set("scaleX",i.scaleX),t.set("scaleY",i.scaleY),t.skewX=i.skewX,t.skewY=i.skewY,t.angle=i.angle,t.setPositionByOrigin(n,"center","center")},sizeAfterTransform:function(t,e,i){var n=t/2,s=e/2,r=[{x:-n,y:-s},{x:n,y:-s},{x:-n,y:s},{x:n,y:s}],a=T.util.calcDimensionsMatrix(i),o=T.util.makeBoundingBoxFromPoints(r,a);return{x:o.width,y:o.height}},mergeClipPaths:function(t,e){var i=t,n=e;i.inverted&&!n.inverted&&(i=e,n=t),T.util.applyTransformToObject(n,T.util.multiplyTransformMatrices(T.util.invertTransform(i.calcTransformMatrix()),n.calcTransformMatrix()));var s=i.inverted&&n.inverted;return s&&(i.inverted=n.inverted=!1),new T.Group([i],{clipPath:n,inverted:s})}},function(){var t=Array.prototype.join,e={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},i={m:"l",M:"L"};function n(t,e,i,n,s,r,a,o,l,h,c){var d=T.util.cos(t),u=T.util.sin(t),f=T.util.cos(e),g=T.util.sin(e),m=i*s*f-n*r*g+a,p=n*s*f+i*r*g+o;return["C",h+l*(-i*s*u-n*r*d),c+l*(-n*s*u+i*r*d),m+l*(i*s*g+n*r*f),p+l*(n*s*g-i*r*f),m,p]}function s(t,e,i,n){var s=Math.atan2(e,t),r=Math.atan2(n,i);return r>=s?r-s:2*Math.PI-(s-r)}function r(t,e,i){for(var r=i[1],a=i[2],o=i[3],l=i[4],h=i[5],c=function(t,e,i,r,a,o,l){var h=Math.PI,c=l*h/180,d=T.util.sin(c),u=T.util.cos(c),f=0,g=0,m=-u*t*.5-d*e*.5,p=-u*e*.5+d*t*.5,_=(i=Math.abs(i))*i,v=(r=Math.abs(r))*r,y=p*p,w=m*m,C=_*v-_*y-v*w,E=0;if(C<0){var S=Math.sqrt(1-C/(_*v));i*=S,r*=S}else E=(a===o?-1:1)*Math.sqrt(C/(_*y+v*w));var b=E*i*p/r,I=-E*r*m/i,x=u*b-d*I+.5*t,R=d*b+u*I+.5*e,O=s(1,0,(m-b)/i,(p-I)/r),A=s((m-b)/i,(p-I)/r,(-m-b)/i,(-p-I)/r);0===o&&A>0?A-=2*h:1===o&&A<0&&(A+=2*h);for(var D=Math.ceil(Math.abs(A/h*2)),M=[],L=A/D,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),P=O+L,k=0;k<D;k++)M[k]=n(O,P,u,d,i,r,x,R,F,f,g),f=M[k][5],g=M[k][6],O=P,P+=L;return M}(i[6]-t,i[7]-e,r,a,l,h,o),d=0,u=c.length;d<u;d++)c[d][1]+=t,c[d][2]+=e,c[d][3]+=t,c[d][4]+=e,c[d][5]+=t,c[d][6]+=e;return c}function a(t,e,i,n){return Math.sqrt((i-t)*(i-t)+(n-e)*(n-e))}function o(t,e,i,n,s,r,a,o){return function(l){var h,c=(h=l)*h*h,d=function(t){return 3*t*t*(1-t)}(l),u=function(t){return 3*t*(1-t)*(1-t)}(l),f=function(t){return(1-t)*(1-t)*(1-t)}(l);return{x:a*c+s*d+i*u+t*f,y:o*c+r*d+n*u+e*f}}}function l(t,e,i,n,s,r,a,o){return function(l){var h=1-l,c=3*h*h*(i-t)+6*h*l*(s-i)+3*l*l*(a-s),d=3*h*h*(n-e)+6*h*l*(r-n)+3*l*l*(o-r);return Math.atan2(d,c)}}function h(t,e,i,n,s,r){return function(a){var o,l=(o=a)*o,h=function(t){return 2*t*(1-t)}(a),c=function(t){return(1-t)*(1-t)}(a);return{x:s*l+i*h+t*c,y:r*l+n*h+e*c}}}function c(t,e,i,n,s,r){return function(a){var o=1-a,l=2*o*(i-t)+2*a*(s-i),h=2*o*(n-e)+2*a*(r-n);return Math.atan2(h,l)}}function d(t,e,i){var n,s,r={x:e,y:i},o=0;for(s=1;s<=100;s+=1)n=t(s/100),o+=a(r.x,r.y,n.x,n.y),r=n;return o}function u(t){for(var e,i,n,s,r=0,u=t.length,f=0,g=0,m=0,p=0,_=[],v=0;v<u;v++){switch(n={x:f,y:g,command:(e=t[v])[0]},e[0]){case"M":n.length=0,m=f=e[1],p=g=e[2];break;case"L":n.length=a(f,g,e[1],e[2]),f=e[1],g=e[2];break;case"C":i=o(f,g,e[1],e[2],e[3],e[4],e[5],e[6]),s=l(f,g,e[1],e[2],e[3],e[4],e[5],e[6]),n.iterator=i,n.angleFinder=s,n.length=d(i,f,g),f=e[5],g=e[6];break;case"Q":i=h(f,g,e[1],e[2],e[3],e[4]),s=c(f,g,e[1],e[2],e[3],e[4]),n.iterator=i,n.angleFinder=s,n.length=d(i,f,g),f=e[3],g=e[4];break;case"Z":case"z":n.destX=m,n.destY=p,n.length=a(f,g,m,p),f=m,g=p}r+=n.length,_.push(n)}return _.push({length:r,x:f,y:g}),_}T.util.joinPath=function(t){return t.map(function(t){return t.join(" ")}).join(" ")},T.util.parsePath=function(t){var n,s,r,a,o,l=[],h=[],c=T.rePathCommand,d="[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?\\s*",u="("+d+")"+T.commaWsp,f="([01])"+T.commaWsp+"?",g=new RegExp(u+"?"+u+"?"+u+f+f+u+"?("+d+")","g");if(!t||!t.match)return l;for(var m,p=0,_=(o=t.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi)).length;p<_;p++){a=(n=o[p]).slice(1).trim(),h.length=0;var v=n.charAt(0);if(m=[v],"a"===v.toLowerCase())for(var y;y=g.exec(a);)for(var w=1;w<y.length;w++)h.push(y[w]);else for(;r=c.exec(a);)h.push(r[0]);w=0;for(var C=h.length;w<C;w++)s=parseFloat(h[w]),isNaN(s)||m.push(s);var E=e[v.toLowerCase()],S=i[v]||v;if(m.length-1>E)for(var b=1,I=m.length;b<I;b+=E)l.push([v].concat(m.slice(b,b+E))),v=S;else l.push(m)}return l},T.util.makePathSimpler=function(t){var e,i,n,s,a,o,l=0,h=0,c=t.length,d=0,u=0,f=[];for(i=0;i<c;++i){switch(n=!1,(e=t[i].slice(0))[0]){case"l":e[0]="L",e[1]+=l,e[2]+=h;case"L":l=e[1],h=e[2];break;case"h":e[1]+=l;case"H":e[0]="L",e[2]=h,l=e[1];break;case"v":e[1]+=h;case"V":e[0]="L",h=e[1],e[1]=l,e[2]=h;break;case"m":e[0]="M",e[1]+=l,e[2]+=h;case"M":l=e[1],h=e[2],d=e[1],u=e[2];break;case"c":e[0]="C",e[1]+=l,e[2]+=h,e[3]+=l,e[4]+=h,e[5]+=l,e[6]+=h;case"C":a=e[3],o=e[4],l=e[5],h=e[6];break;case"s":e[0]="S",e[1]+=l,e[2]+=h,e[3]+=l,e[4]+=h;case"S":"C"===s?(a=2*l-a,o=2*h-o):(a=l,o=h),l=e[3],h=e[4],e[0]="C",e[5]=e[3],e[6]=e[4],e[3]=e[1],e[4]=e[2],e[1]=a,e[2]=o,a=e[3],o=e[4];break;case"q":e[0]="Q",e[1]+=l,e[2]+=h,e[3]+=l,e[4]+=h;case"Q":a=e[1],o=e[2],l=e[3],h=e[4];break;case"t":e[0]="T",e[1]+=l,e[2]+=h;case"T":"Q"===s?(a=2*l-a,o=2*h-o):(a=l,o=h),e[0]="Q",l=e[1],h=e[2],e[1]=a,e[2]=o,e[3]=l,e[4]=h;break;case"a":e[0]="A",e[6]+=l,e[7]+=h;case"A":n=!0,f=f.concat(r(l,h,e)),l=e[6],h=e[7];break;case"z":case"Z":l=d,h=u}n||f.push(e),s=e[0]}return f},T.util.getSmoothPathFromPoints=function(t,e){var i,n=[],s=new T.Point(t[0].x,t[0].y),r=new T.Point(t[1].x,t[1].y),a=t.length,o=1,l=0,h=a>2;for(e=e||0,h&&(o=t[2].x<r.x?-1:t[2].x===r.x?0:1,l=t[2].y<r.y?-1:t[2].y===r.y?0:1),n.push(["M",s.x-o*e,s.y-l*e]),i=1;i<a;i++){if(!s.eq(r)){var c=s.midPointFrom(r);n.push(["Q",s.x,s.y,c.x,c.y])}s=t[i],i+1<t.length&&(r=t[i+1])}return h&&(o=s.x>t[i-2].x?1:s.x===t[i-2].x?0:-1,l=s.y>t[i-2].y?1:s.y===t[i-2].y?0:-1),n.push(["L",s.x+o*e,s.y+l*e]),n},T.util.getPathSegmentsInfo=u,T.util.getBoundsOfCurve=function(e,i,n,s,r,a,o,l){var h;if(T.cachesBoundsOfCurve&&(h=t.call(arguments),T.boundsOfCurveCache[h]))return T.boundsOfCurveCache[h];var c,d,u,f,g,m,p,_,v=Math.sqrt,y=Math.min,w=Math.max,C=Math.abs,E=[],S=[[],[]];d=6*e-12*n+6*r,c=-3*e+9*n-9*r+3*o,u=3*n-3*e;for(var b=0;b<2;++b)if(b>0&&(d=6*i-12*s+6*a,c=-3*i+9*s-9*a+3*l,u=3*s-3*i),C(c)<1e-12){if(C(d)<1e-12)continue;0<(f=-u/d)&&f<1&&E.push(f)}else(p=d*d-4*u*c)<0||(0<(g=(-d+(_=v(p)))/(2*c))&&g<1&&E.push(g),0<(m=(-d-_)/(2*c))&&m<1&&E.push(m));for(var I,x,R,O=E.length,A=O;O--;)I=(R=1-(f=E[O]))*R*R*e+3*R*R*f*n+3*R*f*f*r+f*f*f*o,S[0][O]=I,x=R*R*R*i+3*R*R*f*s+3*R*f*f*a+f*f*f*l,S[1][O]=x;S[0][A]=e,S[1][A]=i,S[0][A+1]=o,S[1][A+1]=l;var D=[{x:y.apply(null,S[0]),y:y.apply(null,S[1])},{x:w.apply(null,S[0]),y:w.apply(null,S[1])}];return T.cachesBoundsOfCurve&&(T.boundsOfCurveCache[h]=D),D},T.util.getPointOnPath=function(t,e,i){i||(i=u(t));for(var n=0;e-i[n].length>0&&n<i.length-2;)e-=i[n].length,n++;var s,r=i[n],o=e/r.length,l=r.command,h=t[n];switch(l){case"M":return{x:r.x,y:r.y,angle:0};case"Z":case"z":return(s=new T.Point(r.x,r.y).lerp(new T.Point(r.destX,r.destY),o)).angle=Math.atan2(r.destY-r.y,r.destX-r.x),s;case"L":return(s=new T.Point(r.x,r.y).lerp(new T.Point(h[1],h[2]),o)).angle=Math.atan2(h[2]-r.y,h[1]-r.x),s;case"C":case"Q":return function(t,e){for(var i,n,s,r=0,o=0,l=t.iterator,h={x:t.x,y:t.y},c=.01,d=t.angleFinder;o<e&&c>1e-4;)i=l(r),s=r,(n=a(h.x,h.y,i.x,i.y))+o>e?(r-=c,c/=2):(h=i,r+=c,o+=n);return i.angle=d(s),i}(r,e)}},T.util.transformPath=function(t,e,i){return i&&(e=T.util.multiplyTransformMatrices(e,[1,0,0,1,-i.x,-i.y])),t.map(function(t){for(var i=t.slice(0),n={},s=1;s<t.length-1;s+=2)n.x=t[s],n.y=t[s+1],n=T.util.transformPoint(n,e),i[s]=n.x,i[s+1]=n.y;return i})}}(),function(){var t=Array.prototype.slice;function e(t,e,i){if(t&&0!==t.length){var n=t.length-1,s=e?t[n][e]:t[n];if(e)for(;n--;)i(t[n][e],s)&&(s=t[n][e]);else for(;n--;)i(t[n],s)&&(s=t[n]);return s}}T.util.array={fill:function(t,e){for(var i=t.length;i--;)t[i]=e;return t},invoke:function(e,i){for(var n=t.call(arguments,2),s=[],r=0,a=e.length;r<a;r++)s[r]=n.length?e[r][i].apply(e[r],n):e[r][i].call(e[r]);return s},min:function(t,i){return e(t,i,function(t,e){return t<e})},max:function(t,i){return e(t,i,function(t,e){return t>=e})}}}(),function(){function t(e,i,n){if(n)if(!T.isLikelyNode&&i instanceof Element)e=i;else if(i instanceof Array){e=[];for(var s=0,r=i.length;s<r;s++)e[s]=t({},i[s],n)}else if(i&&"object"==typeof i)for(var a in i)"canvas"===a||"group"===a?e[a]=null:i.hasOwnProperty(a)&&(e[a]=t({},i[a],n));else e=i;else for(var a in i)e[a]=i[a];return e}T.util.object={extend:t,clone:function(e,i){return t({},e,i)}},T.util.object.extend(T.util,T.Observable)}(),function(){function t(t,e){var i=t.charCodeAt(e);if(isNaN(i))return"";if(i<55296||i>57343)return t.charAt(e);if(55296<=i&&i<=56319){if(t.length<=e+1)throw"High surrogate without following low surrogate";var n=t.charCodeAt(e+1);if(56320>n||n>57343)throw"High surrogate without following low surrogate";return t.charAt(e)+t.charAt(e+1)}if(0===e)throw"Low surrogate without preceding high surrogate";var s=t.charCodeAt(e-1);if(55296>s||s>56319)throw"Low surrogate without preceding high surrogate";return!1}T.util.string={camelize:function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},capitalize:function(t,e){return t.charAt(0).toUpperCase()+(e?t.slice(1):t.slice(1).toLowerCase())},escapeXml:function(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},graphemeSplit:function(e){var i,n=0,s=[];for(n=0;n<e.length;n++)!1!==(i=t(e,n))&&s.push(i);return s}}}(),function(){var t=Array.prototype.slice,e=function(){},i=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),n=function(t,e,n){for(var s in e)s in t.prototype&&"function"==typeof t.prototype[s]&&(e[s]+"").indexOf("callSuper")>-1?t.prototype[s]=function(t){return function(){var i=this.constructor.superclass;this.constructor.superclass=n;var s=e[t].apply(this,arguments);if(this.constructor.superclass=i,"initialize"!==t)return s}}(s):t.prototype[s]=e[s],i&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};function s(){}function r(e){for(var i=null,n=this;n.constructor.superclass;){var s=n.constructor.superclass.prototype[e];if(n[e]!==s){i=s;break}n=n.constructor.superclass.prototype}return i?arguments.length>1?i.apply(this,t.call(arguments,1)):i.call(this):console.log("tried to callSuper "+e+", method not found in prototype chain",this)}T.util.createClass=function(){var i=null,a=t.call(arguments,0);function o(){this.initialize.apply(this,arguments)}"function"==typeof a[0]&&(i=a.shift()),o.superclass=i,o.subclasses=[],i&&(s.prototype=i.prototype,o.prototype=new s,i.subclasses.push(o));for(var l=0,h=a.length;l<h;l++)n(o,a[l],i);return o.prototype.initialize||(o.prototype.initialize=e),o.prototype.constructor=o,o.prototype.callSuper=r,o}}(),h=!!T.document.createElement("div").attachEvent,c=["touchstart","touchmove","touchend"],T.util.addListener=function(t,e,i,n){t&&t.addEventListener(e,i,!h&&n)},T.util.removeListener=function(t,e,i,n){t&&t.removeEventListener(e,i,!h&&n)},T.util.getPointer=function(t){var e=t.target,i=T.util.getScrollLeftTop(e),n=function(t){var e=t.changedTouches;return e&&e[0]?e[0]:t}(t);return{x:n.clientX+i.left,y:n.clientY+i.top}},T.util.isTouchEvent=function(t){return c.indexOf(t.type)>-1||"touch"===t.pointerType},u="string"==typeof(d=T.document.createElement("div")).style.opacity,f="string"==typeof d.style.filter,g=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,m=function(t){return t},u?m=function(t,e){return t.style.opacity=e,t}:f&&(m=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),g.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(g,e)):i.filter+=" alpha(opacity="+100*e+")",t}),T.util.setStyle=function(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?m(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var n in e)"opacity"===n?m(t,e[n]):i["float"===n||"cssFloat"===n?void 0===i.styleFloat?"cssFloat":"styleFloat":n]=e[n];return t},function(){var t,e,i,n,s=Array.prototype.slice,r=function(t){return s.call(t,0)};try{t=r(T.document.childNodes)instanceof Array}catch(t){}function a(t,e){var i=T.document.createElement(t);for(var n in e)"class"===n?i.className=e[n]:"for"===n?i.htmlFor=e[n]:i.setAttribute(n,e[n]);return i}function o(t){for(var e=0,i=0,n=T.document.documentElement,s=T.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&((t=t.parentNode||t.host)===T.document?(e=s.scrollLeft||n.scrollLeft||0,i=s.scrollTop||n.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:e,top:i}}t||(r=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e}),e=T.document.defaultView&&T.document.defaultView.getComputedStyle?function(t,e){var i=T.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},i=T.document.documentElement.style,n="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"",T.util.makeElementUnselectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=T.util.falseFunction),n?t.style[n]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t},T.util.makeElementSelectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=null),n?t.style[n]="":"string"==typeof t.unselectable&&(t.unselectable=""),t},T.util.setImageSmoothing=function(t,e){t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=e},T.util.getById=function(t){return"string"==typeof t?T.document.getElementById(t):t},T.util.toArray=r,T.util.addClass=function(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)},T.util.makeElement=a,T.util.wrapElement=function(t,e,i){return"string"==typeof e&&(e=a(e,i)),t.parentNode&&t.parentNode.replaceChild(e,t),e.appendChild(t),e},T.util.getScrollLeftTop=o,T.util.getElementOffset=function(t){var i,n,s=t&&t.ownerDocument,r={left:0,top:0},a={left:0,top:0},l={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!s)return a;for(var h in l)a[l[h]]+=parseInt(e(t,h),10)||0;return i=s.documentElement,void 0!==t.getBoundingClientRect&&(r=t.getBoundingClientRect()),n=o(t),{left:r.left+n.left-(i.clientLeft||0)+a.left,top:r.top+n.top-(i.clientTop||0)+a.top}},T.util.getNodeCanvas=function(t){var e=T.jsdomImplForWrapper(t);return e._canvas||e._image},T.util.cleanUpJsdomNode=function(t){if(T.isLikelyNode){var e=T.jsdomImplForWrapper(t);e&&(e._image=null,e._canvas=null,e._currentSrc=null,e._attributes=null,e._classList=null)}}}(),function(){function t(){}T.util.request=function(e,i){i||(i={});var n=i.method?i.method.toUpperCase():"GET",s=i.onComplete||function(){},r=new T.window.XMLHttpRequest,a=i.body||i.parameters;return r.onreadystatechange=function(){4===r.readyState&&(s(r),r.onreadystatechange=t)},"GET"===n&&(a=null,"string"==typeof i.parameters&&(e=function(t,e){return t+(/\?/.test(t)?"&":"?")+e}(e,i.parameters))),r.open(n,e,!0),"POST"!==n&&"PUT"!==n||r.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),r.send(a),r}}(),T.log=console.log,T.warn=console.warn,function(){var t=T.util.object.extend,e=T.util.object.clone,i=[];function n(){return!1}function s(t,e,i,n){return-i*Math.cos(t/n*(Math.PI/2))+i+e}T.util.object.extend(i,{cancelAll:function(){var t=this.splice(0);return t.forEach(function(t){t.cancel()}),t},cancelByCanvas:function(t){if(!t)return[];var e=this.filter(function(e){return"object"==typeof e.target&&e.target.canvas===t});return e.forEach(function(t){t.cancel()}),e},cancelByTarget:function(t){var e=this.findAnimationsByTarget(t);return e.forEach(function(t){t.cancel()}),e},findAnimationIndex:function(t){return this.indexOf(this.findAnimation(t))},findAnimation:function(t){return this.find(function(e){return e.cancel===t})},findAnimationsByTarget:function(t){return t?this.filter(function(e){return e.target===t}):[]}});var r=T.window.requestAnimationFrame||T.window.webkitRequestAnimationFrame||T.window.mozRequestAnimationFrame||T.window.oRequestAnimationFrame||T.window.msRequestAnimationFrame||function(t){return T.window.setTimeout(t,1e3/60)},a=T.window.cancelAnimationFrame||T.window.clearTimeout;function o(){return r.apply(T.window,arguments)}T.util.animate=function(i){i||(i={});var r,a=!1,l=function(){var t=T.runningAnimations.indexOf(r);return t>-1&&T.runningAnimations.splice(t,1)[0]};return r=t(e(i),{cancel:function(){return a=!0,l()},currentValue:"startValue"in i?i.startValue:0,completionRate:0,durationRate:0}),T.runningAnimations.push(r),o(function(t){var e,h=t||+new Date,c=i.duration||500,d=h+c,u=i.onChange||n,f=i.abort||n,g=i.onComplete||n,m=i.easing||s,p="startValue"in i&&i.startValue.length>0,_="startValue"in i?i.startValue:0,v="endValue"in i?i.endValue:100,y=i.byValue||(p?_.map(function(t,e){return v[e]-_[e]}):v-_);i.onStart&&i.onStart(),function t(i){var n=(e=i||+new Date)>d?c:e-h,s=n/c,w=p?_.map(function(t,e){return m(n,_[e],y[e],c)}):m(n,_,y,c),C=p?Math.abs((w[0]-_[0])/y[0]):Math.abs((w-_)/y);if(r.currentValue=p?w.slice():w,r.completionRate=C,r.durationRate=s,!a){if(!f(w,C,s))return e>d?(r.currentValue=p?v.slice():v,r.completionRate=1,r.durationRate=1,u(p?v.slice():v,1,1),g(v,1,1),void l()):(u(w,C,s),void o(t));l()}}(h)}),r.cancel},T.util.requestAnimFrame=o,T.util.cancelAnimFrame=function(){return a.apply(T.window,arguments)},T.runningAnimations=i}(),function(){function t(t,e,i){var n="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return(n+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1))+")"}T.util.animateColor=function(e,i,n,s){var r=new T.Color(e).getSource(),a=new T.Color(i).getSource(),o=s.onComplete,l=s.onChange;return s=s||{},T.util.animate(T.util.object.extend(s,{duration:n||500,startValue:r,endValue:a,byValue:a,easing:function(e,i,n,r){return t(i,n,s.colorEasing?s.colorEasing(e,r):1-Math.cos(e/r*(Math.PI/2)))},onComplete:function(e,i,n){if(o)return o(t(a,a,0),i,n)},onChange:function(e,i,n){if(l){if(Array.isArray(e))return l(t(e,e,0),i,n);l(e,i,n)}}}))}}(),function(){function t(t,e,i,n){return t<Math.abs(e)?(t=e,n=i/4):n=0===e&&0===t?i/(2*Math.PI)*Math.asin(1):i/(2*Math.PI)*Math.asin(e/t),{a:t,c:e,p:i,s:n}}function e(t,e,i){return t.a*Math.pow(2,10*(e-=1))*Math.sin((e*i-t.s)*(2*Math.PI)/t.p)}function i(t,e,i,s){return i-n(s-t,0,i,s)+e}function n(t,e,i,n){return(t/=n)<1/2.75?i*(7.5625*t*t)+e:t<2/2.75?i*(7.5625*(t-=1.5/2.75)*t+.75)+e:t<2.5/2.75?i*(7.5625*(t-=2.25/2.75)*t+.9375)+e:i*(7.5625*(t-=2.625/2.75)*t+.984375)+e}T.util.ease={easeInQuad:function(t,e,i,n){return i*(t/=n)*t+e},easeOutQuad:function(t,e,i,n){return-i*(t/=n)*(t-2)+e},easeInOutQuad:function(t,e,i,n){return(t/=n/2)<1?i/2*t*t+e:-i/2*(--t*(t-2)-1)+e},easeInCubic:function(t,e,i,n){return i*(t/=n)*t*t+e},easeOutCubic:function(t,e,i,n){return i*((t=t/n-1)*t*t+1)+e},easeInOutCubic:function(t,e,i,n){return(t/=n/2)<1?i/2*t*t*t+e:i/2*((t-=2)*t*t+2)+e},easeInQuart:function(t,e,i,n){return i*(t/=n)*t*t*t+e},easeOutQuart:function(t,e,i,n){return-i*((t=t/n-1)*t*t*t-1)+e},easeInOutQuart:function(t,e,i,n){return(t/=n/2)<1?i/2*t*t*t*t+e:-i/2*((t-=2)*t*t*t-2)+e},easeInQuint:function(t,e,i,n){return i*(t/=n)*t*t*t*t+e},easeOutQuint:function(t,e,i,n){return i*((t=t/n-1)*t*t*t*t+1)+e},easeInOutQuint:function(t,e,i,n){return(t/=n/2)<1?i/2*t*t*t*t*t+e:i/2*((t-=2)*t*t*t*t+2)+e},easeInSine:function(t,e,i,n){return-i*Math.cos(t/n*(Math.PI/2))+i+e},easeOutSine:function(t,e,i,n){return i*Math.sin(t/n*(Math.PI/2))+e},easeInOutSine:function(t,e,i,n){return-i/2*(Math.cos(Math.PI*t/n)-1)+e},easeInExpo:function(t,e,i,n){return 0===t?e:i*Math.pow(2,10*(t/n-1))+e},easeOutExpo:function(t,e,i,n){return t===n?e+i:i*(1-Math.pow(2,-10*t/n))+e},easeInOutExpo:function(t,e,i,n){return 0===t?e:t===n?e+i:(t/=n/2)<1?i/2*Math.pow(2,10*(t-1))+e:i/2*(2-Math.pow(2,-10*--t))+e},easeInCirc:function(t,e,i,n){return-i*(Math.sqrt(1-(t/=n)*t)-1)+e},easeOutCirc:function(t,e,i,n){return i*Math.sqrt(1-(t=t/n-1)*t)+e},easeInOutCirc:function(t,e,i,n){return(t/=n/2)<1?-i/2*(Math.sqrt(1-t*t)-1)+e:i/2*(Math.sqrt(1-(t-=2)*t)+1)+e},easeInElastic:function(i,n,s,r){var a=0;return 0===i?n:1==(i/=r)?n+s:(a||(a=.3*r),-e(t(s,s,a,1.70158),i,r)+n)},easeOutElastic:function(e,i,n,s){var r=0;if(0===e)return i;if(1==(e/=s))return i+n;r||(r=.3*s);var a=t(n,n,r,1.70158);return a.a*Math.pow(2,-10*e)*Math.sin((e*s-a.s)*(2*Math.PI)/a.p)+a.c+i},easeInOutElastic:function(i,n,s,r){var a=0;if(0===i)return n;if(2==(i/=r/2))return n+s;a||(a=r*(.3*1.5));var o=t(s,s,a,1.70158);return i<1?-.5*e(o,i,r)+n:o.a*Math.pow(2,-10*(i-=1))*Math.sin((i*r-o.s)*(2*Math.PI)/o.p)*.5+o.c+n},easeInBack:function(t,e,i,n,s){return void 0===s&&(s=1.70158),i*(t/=n)*t*((s+1)*t-s)+e},easeOutBack:function(t,e,i,n,s){return void 0===s&&(s=1.70158),i*((t=t/n-1)*t*((s+1)*t+s)+1)+e},easeInOutBack:function(t,e,i,n,s){return void 0===s&&(s=1.70158),(t/=n/2)<1?i/2*(t*t*((1+(s*=1.525))*t-s))+e:i/2*((t-=2)*t*((1+(s*=1.525))*t+s)+2)+e},easeInBounce:i,easeOutBounce:n,easeInOutBounce:function(t,e,s,r){return t<r/2?.5*i(2*t,0,s,r)+e:.5*n(2*t-r,0,s,r)+.5*s+e}}}(),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,n=e.util.object.clone,s=e.util.toFixed,r=e.util.parseUnit,a=e.util.multiplyTransformMatrices,o={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","letter-spacing":"charSpacing","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-dashoffset":"strokeDashOffset","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity","clip-path":"clipPath","clip-rule":"clipRule","vector-effect":"strokeUniform","image-rendering":"imageSmoothing"},l={stroke:"strokeOpacity",fill:"fillOpacity"},h="font-size",c="clip-path";function d(t){return t in o?o[t]:t}function u(t,i,n,s){var o,l=Array.isArray(i);if("fill"!==t&&"stroke"!==t||"none"!==i){if("strokeUniform"===t)return"non-scaling-stroke"===i;if("strokeDashArray"===t)i="none"===i?null:i.replace(/,/g," ").split(/\s+/).map(parseFloat);else if("transformMatrix"===t)i=n&&n.transformMatrix?a(n.transformMatrix,e.parseTransformAttribute(i)):e.parseTransformAttribute(i);else if("visible"===t)i="none"!==i&&"hidden"!==i,n&&!1===n.visible&&(i=!1);else if("opacity"===t)i=parseFloat(i),n&&void 0!==n.opacity&&(i*=n.opacity);else if("textAnchor"===t)i="start"===i?"left":"end"===i?"right":"center";else if("charSpacing"===t)o=r(i,s)/s*1e3;else if("paintFirst"===t){var h=i.indexOf("fill"),c=i.indexOf("stroke");i="fill",(h>-1&&c>-1&&c<h||-1===h&&c>-1)&&(i="stroke")}else{if("href"===t||"xlink:href"===t||"font"===t)return i;if("imageSmoothing"===t)return"optimizeQuality"===i;o=l?i.map(r):r(i,s)}}else i="";return!l&&isNaN(o)?i:o}function f(t){return new RegExp("^("+t.join("|")+")\\b","i")}function g(t,e){var i,n,s,r,a=[];for(s=0,r=e.length;s<r;s++)i=e[s],n=t.getElementsByTagName(i),a=a.concat(Array.prototype.slice.call(n));return a}function m(t,e){var i,n=!0;return(i=p(t,e.pop()))&&e.length&&(n=function(t,e){for(var i,n=!0;t.parentNode&&1===t.parentNode.nodeType&&e.length;)n&&(i=e.pop()),n=p(t=t.parentNode,i);return 0===e.length}(t,e)),i&&n&&0===e.length}function p(t,e){var i,n,s=t.nodeName,r=t.getAttribute("class"),a=t.getAttribute("id");if(i=new RegExp("^"+s,"i"),e=e.replace(i,""),a&&e.length&&(i=new RegExp("#"+a+"(?![a-zA-Z\\-]+)","i"),e=e.replace(i,"")),r&&e.length)for(n=(r=r.split(" ")).length;n--;)i=new RegExp("\\."+r[n]+"(?![a-zA-Z\\-]+)","i"),e=e.replace(i,"");return 0===e.length}function _(t,e){var i;if(t.getElementById&&(i=t.getElementById(e)),i)return i;var n,s,r,a=t.getElementsByTagName("*");for(s=0,r=a.length;s<r;s++)if(e===(n=a[s]).getAttribute("id"))return n}e.svgValidTagNamesRegEx=f(["path","circle","polygon","polyline","ellipse","rect","line","image","text"]),e.svgViewBoxElementsRegEx=f(["symbol","image","marker","pattern","view","svg"]),e.svgInvalidAncestorsRegEx=f(["pattern","defs","symbol","metadata","clipPath","mask","desc"]),e.svgValidParentsRegEx=f(["symbol","g","a","svg","clipPath","defs"]),e.cssRules={},e.gradientDefs={},e.clipPaths={},e.parseTransformAttribute=function(){function t(t,i,n){t[n]=Math.tan(e.util.degreesToRadians(i[0]))}var i=e.iMatrix,n=e.reNum,s=e.commaWsp,r="(?:(?:(matrix)\\s*\\(\\s*("+n+")"+s+"("+n+")"+s+"("+n+")"+s+"("+n+")"+s+"("+n+")"+s+"("+n+")\\s*\\))|(?:(translate)\\s*\\(\\s*("+n+")(?:"+s+"("+n+"))?\\s*\\))|(?:(scale)\\s*\\(\\s*("+n+")(?:"+s+"("+n+"))?\\s*\\))|(?:(rotate)\\s*\\(\\s*("+n+")(?:"+s+"("+n+")"+s+"("+n+"))?\\s*\\))|(?:(skewX)\\s*\\(\\s*("+n+")\\s*\\))|(?:(skewY)\\s*\\(\\s*("+n+")\\s*\\)))",a=new RegExp("^\\s*(?:(?:"+r+"(?:"+s+"*"+r+")*)?)\\s*$"),o=new RegExp(r,"g");return function(n){var s=i.concat(),l=[];if(!n||n&&!a.test(n))return s;n.replace(o,function(n){var a=new RegExp(r).exec(n).filter(function(t){return!!t}),o=a[1],h=a.slice(2).map(parseFloat);switch(o){case"translate":!function(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}(s,h);break;case"rotate":h[0]=e.util.degreesToRadians(h[0]),function(t,i){var n=e.util.cos(i[0]),s=e.util.sin(i[0]),r=0,a=0;3===i.length&&(r=i[1],a=i[2]),t[0]=n,t[1]=s,t[2]=-s,t[3]=n,t[4]=r-(n*r-s*a),t[5]=a-(s*r+n*a)}(s,h);break;case"scale":!function(t,e){var i=e[0],n=2===e.length?e[1]:e[0];t[0]=i,t[3]=n}(s,h);break;case"skewX":t(s,h,2);break;case"skewY":t(s,h,1);break;case"matrix":s=h}l.push(s.concat()),s=i.concat()});for(var h=l[0];l.length>1;)l.shift(),h=e.util.multiplyTransformMatrices(h,l[0]);return h}}();var v=new RegExp("^\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*$");function y(t){if(!e.svgViewBoxElementsRegEx.test(t.nodeName))return{};var i,n,s,a,o,l,h=t.getAttribute("viewBox"),c=1,d=1,u=t.getAttribute("width"),f=t.getAttribute("height"),g=t.getAttribute("x")||0,m=t.getAttribute("y")||0,p=t.getAttribute("preserveAspectRatio")||"",_=!h||!(h=h.match(v)),y=!u||!f||"100%"===u||"100%"===f,w=_&&y,C={},E="",S=0,T=0;if(C.width=0,C.height=0,C.toBeParsed=w,_&&(g||m)&&t.parentNode&&"#document"!==t.parentNode.nodeName&&(E=" translate("+r(g)+" "+r(m)+") ",o=(t.getAttribute("transform")||"")+E,t.setAttribute("transform",o),t.removeAttribute("x"),t.removeAttribute("y")),w)return C;if(_)return C.width=r(u),C.height=r(f),C;if(i=-parseFloat(h[1]),n=-parseFloat(h[2]),s=parseFloat(h[3]),a=parseFloat(h[4]),C.minX=i,C.minY=n,C.viewBoxWidth=s,C.viewBoxHeight=a,y?(C.width=s,C.height=a):(C.width=r(u),C.height=r(f),c=C.width/s,d=C.height/a),"none"!==(p=e.util.parsePreserveAspectRatioAttribute(p)).alignX&&("meet"===p.meetOrSlice&&(d=c=c>d?d:c),"slice"===p.meetOrSlice&&(d=c=c>d?c:d),S=C.width-s*c,T=C.height-a*c,"Mid"===p.alignX&&(S/=2),"Mid"===p.alignY&&(T/=2),"Min"===p.alignX&&(S=0),"Min"===p.alignY&&(T=0)),1===c&&1===d&&0===i&&0===n&&0===g&&0===m)return C;if((g||m)&&"#document"!==t.parentNode.nodeName&&(E=" translate("+r(g)+" "+r(m)+") "),o=E+" matrix("+c+" 0 0 "+d+" "+(i*c+S)+" "+(n*d+T)+") ","svg"===t.nodeName){for(l=t.ownerDocument.createElementNS(e.svgNS,"g");t.firstChild;)l.appendChild(t.firstChild);t.appendChild(l)}else(l=t).removeAttribute("x"),l.removeAttribute("y"),o=l.getAttribute("transform")+o;return l.setAttribute("transform",o),C}function w(t,e){var i="xlink:href",n=_(t,e.getAttribute(i).slice(1));if(n&&n.getAttribute(i)&&w(t,n),["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"].forEach(function(t){n&&!e.hasAttribute(t)&&n.hasAttribute(t)&&e.setAttribute(t,n.getAttribute(t))}),!e.children.length)for(var s=n.cloneNode(!0);s.firstChild;)e.appendChild(s.firstChild);e.removeAttribute(i)}e.parseSVGDocument=function(t,i,s,r){if(t){!function(t){for(var i=g(t,["use","svg:use"]),n=0;i.length&&n<i.length;){var s=i[n],r=s.getAttribute("xlink:href")||s.getAttribute("href");if(null===r)return;var a,o,l,h,c=r.slice(1),d=s.getAttribute("x")||0,u=s.getAttribute("y")||0,f=_(t,c).cloneNode(!0),m=(f.getAttribute("transform")||"")+" translate("+d+", "+u+")",p=i.length,v=e.svgNS;if(y(f),/^svg$/i.test(f.nodeName)){var w=f.ownerDocument.createElementNS(v,"g");for(o=0,h=(l=f.attributes).length;o<h;o++)a=l.item(o),w.setAttributeNS(v,a.nodeName,a.nodeValue);for(;f.firstChild;)w.appendChild(f.firstChild);f=w}for(o=0,h=(l=s.attributes).length;o<h;o++)"x"!==(a=l.item(o)).nodeName&&"y"!==a.nodeName&&"xlink:href"!==a.nodeName&&"href"!==a.nodeName&&("transform"===a.nodeName?m=a.nodeValue+" "+m:f.setAttribute(a.nodeName,a.nodeValue));f.setAttribute("transform",m),f.setAttribute("instantiated_by_use","1"),f.removeAttribute("id"),s.parentNode.replaceChild(f,s),i.length===p&&n++}}(t);var a,o,l=e.Object.__uid++,h=y(t),c=e.util.toArray(t.getElementsByTagName("*"));if(h.crossOrigin=r&&r.crossOrigin,h.svgUid=l,0===c.length&&e.isLikelyNode){var d=[];for(a=0,o=(c=t.selectNodes('//*[name(.)!="svg"]')).length;a<o;a++)d[a]=c[a];c=d}var u=c.filter(function(t){return y(t),e.svgValidTagNamesRegEx.test(t.nodeName.replace("svg:",""))&&!function(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}(t,e.svgInvalidAncestorsRegEx)});if(!u||u&&!u.length)i&&i([],{});else{var f={};c.filter(function(t){return"clipPath"===t.nodeName.replace("svg:","")}).forEach(function(t){var i=t.getAttribute("id");f[i]=e.util.toArray(t.getElementsByTagName("*")).filter(function(t){return e.svgValidTagNamesRegEx.test(t.nodeName.replace("svg:",""))})}),e.gradientDefs[l]=e.getGradientDefs(t),e.cssRules[l]=e.getCSSRules(t),e.clipPaths[l]=f,e.parseElements(u,function(t,n){i&&(i(t,h,n,c),delete e.gradientDefs[l],delete e.cssRules[l],delete e.clipPaths[l])},n(h),s,r)}}};var C=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+e.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+e.reNum+"))?\\s+(.*)");i(e,{parseFontDeclaration:function(t,e){var i=t.match(C);if(i){var n=i[1],s=i[3],a=i[4],o=i[5],l=i[6];n&&(e.fontStyle=n),s&&(e.fontWeight=isNaN(parseFloat(s))?s:parseFloat(s)),a&&(e.fontSize=r(a)),l&&(e.fontFamily=l),o&&(e.lineHeight="normal"===o?1:o)}},getGradientDefs:function(t){var e,i=g(t,["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"]),n=0,s={};for(n=i.length;n--;)(e=i[n]).getAttribute("xlink:href")&&w(t,e),s[e.getAttribute("id")]=e;return s},parseAttributes:function(t,n,a){if(t){var o,f,g,p={};void 0===a&&(a=t.getAttribute("svgUid")),t.parentNode&&e.svgValidParentsRegEx.test(t.parentNode.nodeName)&&(p=e.parseAttributes(t.parentNode,n,a));var _=n.reduce(function(e,i){return(o=t.getAttribute(i))&&(e[i]=o),e},{}),v=i(function(t,i){var n={};for(var s in e.cssRules[i])if(m(t,s.split(" ")))for(var r in e.cssRules[i][s])n[r]=e.cssRules[i][s][r];return n}(t,a),e.parseStyleAttribute(t));_=i(_,v),v[c]&&t.setAttribute(c,v[c]),f=g=p.fontSize||e.Text.DEFAULT_SVG_FONT_SIZE,_[h]&&(_[h]=f=r(_[h],g));var y,w,C={};for(var E in _)w=u(y=d(E),_[E],p,f),C[y]=w;C&&C.font&&e.parseFontDeclaration(C.font,C);var S=i(p,C);return e.svgValidParentsRegEx.test(t.nodeName)?S:function(t){for(var i in l)if(void 0!==t[l[i]]&&""!==t[i]){if(void 0===t[i]){if(!e.Object.prototype[i])continue;t[i]=e.Object.prototype[i]}if(0!==t[i].indexOf("url(")){var n=new e.Color(t[i]);t[i]=n.setAlpha(s(n.getAlpha()*t[l[i]],2)).toRgba()}}return t}(S)}},parseElements:function(t,i,n,s,r){new e.ElementsParser(t,i,n,s,r).parse()},parseStyleAttribute:function(t){var e={},i=t.getAttribute("style");return i?("string"==typeof i?function(t,e){var i,n;t.replace(/;\s*$/,"").split(";").forEach(function(t){var s=t.split(":");i=s[0].trim().toLowerCase(),n=s[1].trim(),e[i]=n})}(i,e):function(t,e){var i,n;for(var s in t)void 0!==t[s]&&(i=s.toLowerCase(),n=t[s],e[i]=n)}(i,e),e):e},parsePointsAttribute:function(t){if(!t)return null;var e,i,n=[];for(e=0,i=(t=(t=t.replace(/,/g," ").trim()).split(/\s+/)).length;e<i;e+=2)n.push({x:parseFloat(t[e]),y:parseFloat(t[e+1])});return n},getCSSRules:function(t){var i,n,s=t.getElementsByTagName("style"),r={};for(i=0,n=s.length;i<n;i++){var a=s[i].textContent;""!==(a=a.replace(/\/\*[\s\S]*?\*\//g,"")).trim()&&a.split("}").filter(function(t){return t.trim()}).forEach(function(t){var s=t.split("{"),a={},o=s[1].trim().split(";").filter(function(t){return t.trim()});for(i=0,n=o.length;i<n;i++){var l=o[i].split(":"),h=l[0].trim(),c=l[1].trim();a[h]=c}(t=s[0].trim()).split(",").forEach(function(t){""!==(t=t.replace(/^svg/i,"").trim())&&(r[t]?e.util.object.extend(r[t],a):r[t]=e.util.object.clone(a))})})}return r},loadSVGFromURL:function(t,i,n,s){t=t.replace(/^\n\s*/,"").trim(),new e.util.request(t,{method:"get",onComplete:function(t){var r=t.responseXML;if(!r||!r.documentElement)return i&&i(null),!1;e.parseSVGDocument(r.documentElement,function(t,e,n,s){i&&i(t,e,n,s)},n,s)}})},loadSVGFromString:function(t,i,n,s){var r=(new e.window.DOMParser).parseFromString(t.trim(),"text/xml");e.parseSVGDocument(r.documentElement,function(t,e,n,s){i(t,e,n,s)},n,s)}})}(e),T.ElementsParser=function(t,e,i,n,s,r){this.elements=t,this.callback=e,this.options=i,this.reviver=n,this.svgUid=i&&i.svgUid||0,this.parsingOptions=s,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=r},(p=T.ElementsParser.prototype).parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},p.createObjects=function(){var t=this;this.elements.forEach(function(e,i){e.setAttribute("svgUid",t.svgUid),t.createObject(e,i)})},p.findTag=function(t){return T[T.util.string.capitalize(t.tagName.replace("svg:",""))]},p.createObject=function(t,e){var i=this.findTag(t);if(i&&i.fromElement)try{i.fromElement(t,this.createCallback(e,t),this.options)}catch(t){T.log(t)}else this.checkIfDone()},p.createCallback=function(t,e){var i=this;return function(n){var s;i.resolveGradient(n,e,"fill"),i.resolveGradient(n,e,"stroke"),n instanceof T.Image&&n._originalElement&&(s=n.parsePreserveAspectRatioAttribute(e)),n._removeTransformMatrix(s),i.resolveClipPath(n,e),i.reviver&&i.reviver(e,n),i.instances[t]=n,i.checkIfDone()}},p.extractPropertyDefinition=function(t,e,i){var n=t[e],s=this.regexUrl;if(s.test(n)){s.lastIndex=0;var r=s.exec(n)[1];return s.lastIndex=0,T[i][this.svgUid][r]}},p.resolveGradient=function(t,e,i){var n=this.extractPropertyDefinition(t,i,"gradientDefs");if(n){var s=e.getAttribute(i+"-opacity"),r=T.Gradient.fromElement(n,t,s,this.options);t.set(i,r)}},p.createClipPathCallback=function(t,e){return function(t){t._removeTransformMatrix(),t.fillRule=t.clipRule,e.push(t)}},p.resolveClipPath=function(t,e){var i,n,s,r,a=this.extractPropertyDefinition(t,"clipPath","clipPaths");if(a){s=[],n=T.util.invertTransform(t.calcTransformMatrix());for(var o=a[0].parentNode,l=e;l.parentNode&&l.getAttribute("clip-path")!==t.clipPath;)l=l.parentNode;l.parentNode.appendChild(o);for(var h=0;h<a.length;h++)i=a[h],this.findTag(i).fromElement(i,this.createClipPathCallback(t,s),this.options);a=1===s.length?s[0]:new T.Group(s),r=T.util.multiplyTransformMatrices(n,a.calcTransformMatrix()),a.clipPath&&this.resolveClipPath(a,l);var c=T.util.qrDecompose(r);a.flipX=!1,a.flipY=!1,a.set("scaleX",c.scaleX),a.set("scaleY",c.scaleY),a.angle=c.angle,a.skewX=c.skewX,a.skewY=0,a.setPositionByOrigin({x:c.translateX,y:c.translateY},"center","center"),t.clipPath=a}else delete t.clipPath},p.checkIfDone=function(){0==--this.numElements&&(this.instances=this.instances.filter(function(t){return null!=t}),this.callback(this.instances,this.elements))},function(t){var e=t.fabric||(t.fabric={});function i(t,e){this.x=t,this.y=e}e.Point?e.warn("fabric.Point is already defined"):(e.Point=i,i.prototype={type:"point",constructor:i,add:function(t){return new i(this.x+t.x,this.y+t.y)},addEquals:function(t){return this.x+=t.x,this.y+=t.y,this},scalarAdd:function(t){return new i(this.x+t,this.y+t)},scalarAddEquals:function(t){return this.x+=t,this.y+=t,this},subtract:function(t){return new i(this.x-t.x,this.y-t.y)},subtractEquals:function(t){return this.x-=t.x,this.y-=t.y,this},scalarSubtract:function(t){return new i(this.x-t,this.y-t)},scalarSubtractEquals:function(t){return this.x-=t,this.y-=t,this},multiply:function(t){return new i(this.x*t,this.y*t)},multiplyEquals:function(t){return this.x*=t,this.y*=t,this},divide:function(t){return new i(this.x/t,this.y/t)},divideEquals:function(t){return this.x/=t,this.y/=t,this},eq:function(t){return this.x===t.x&&this.y===t.y},lt:function(t){return this.x<t.x&&this.y<t.y},lte:function(t){return this.x<=t.x&&this.y<=t.y},gt:function(t){return this.x>t.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,e){return void 0===e&&(e=.5),e=Math.max(Math.min(1,e),0),new i(this.x+(t.x-this.x)*e,this.y+(t.y-this.y)*e)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new i(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new i(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new i(this.x,this.y)}})}(e),function(t){var e=t.fabric||(t.fabric={});function i(t){this.status=t,this.points=[]}e.Intersection?e.warn("fabric.Intersection is already defined"):(e.Intersection=i,e.Intersection.prototype={constructor:i,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},e.Intersection.intersectLineLine=function(t,n,s,r){var a,o=(r.x-s.x)*(t.y-s.y)-(r.y-s.y)*(t.x-s.x),l=(n.x-t.x)*(t.y-s.y)-(n.y-t.y)*(t.x-s.x),h=(r.y-s.y)*(n.x-t.x)-(r.x-s.x)*(n.y-t.y);if(0!==h){var c=o/h,d=l/h;0<=c&&c<=1&&0<=d&&d<=1?(a=new i("Intersection")).appendPoint(new e.Point(t.x+c*(n.x-t.x),t.y+c*(n.y-t.y))):a=new i}else a=new i(0===o||0===l?"Coincident":"Parallel");return a},e.Intersection.intersectLinePolygon=function(t,e,n){var s,r,a,o,l=new i,h=n.length;for(o=0;o<h;o++)s=n[o],r=n[(o+1)%h],a=i.intersectLineLine(t,e,s,r),l.appendPoints(a.points);return l.points.length>0&&(l.status="Intersection"),l},e.Intersection.intersectPolygonPolygon=function(t,e){var n,s=new i,r=t.length;for(n=0;n<r;n++){var a=t[n],o=t[(n+1)%r],l=i.intersectLinePolygon(a,o,e);s.appendPoints(l.points)}return s.points.length>0&&(s.status="Intersection"),s},e.Intersection.intersectPolygonRectangle=function(t,n,s){var r=n.min(s),a=n.max(s),o=new e.Point(a.x,r.y),l=new e.Point(r.x,a.y),h=i.intersectLinePolygon(r,o,t),c=i.intersectLinePolygon(o,a,t),d=i.intersectLinePolygon(a,l,t),u=i.intersectLinePolygon(l,r,t),f=new i;return f.appendPoints(h.points),f.appendPoints(c.points),f.appendPoints(d.points),f.appendPoints(u.points),f.points.length>0&&(f.status="Intersection"),f})}(e),function(t){var e=t.fabric||(t.fabric={});function i(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function n(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}e.Color?e.warn("fabric.Color is already defined."):(e.Color=i,e.Color.prototype={_tryParsingColor:function(t){var e;t in i.colorNameMap&&(t=i.colorNameMap[t]),"transparent"===t&&(e=[255,255,255,0]),e||(e=i.sourceFromHex(t)),e||(e=i.sourceFromRgb(t)),e||(e=i.sourceFromHsl(t)),e||(e=[0,0,0,1]),e&&this.setSource(e)},_rgbToHsl:function(t,i,n){t/=255,i/=255,n/=255;var s,r,a,o=e.util.array.max([t,i,n]),l=e.util.array.min([t,i,n]);if(a=(o+l)/2,o===l)s=r=0;else{var h=o-l;switch(r=a>.5?h/(2-o-l):h/(o+l),o){case t:s=(i-n)/h+(i<n?6:0);break;case i:s=(n-t)/h+2;break;case n:s=(t-i)/h+4}s/=6}return[Math.round(360*s),Math.round(100*r),Math.round(100*a)]},getSource:function(){return this._source},setSource:function(t){this._source=t},toRgb:function(){var t=this.getSource();return"rgb("+t[0]+","+t[1]+","+t[2]+")"},toRgba:function(){var t=this.getSource();return"rgba("+t[0]+","+t[1]+","+t[2]+","+t[3]+")"},toHsl:function(){var t=this.getSource(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsl("+e[0]+","+e[1]+"%,"+e[2]+"%)"},toHsla:function(){var t=this.getSource(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsla("+e[0]+","+e[1]+"%,"+e[2]+"%,"+t[3]+")"},toHex:function(){var t,e,i,n=this.getSource();return t=1===(t=n[0].toString(16)).length?"0"+t:t,e=1===(e=n[1].toString(16)).length?"0"+e:e,i=1===(i=n[2].toString(16)).length?"0"+i:i,t.toUpperCase()+e.toUpperCase()+i.toUpperCase()},toHexa:function(){var t,e=this.getSource();return t=1===(t=(t=Math.round(255*e[3])).toString(16)).length?"0"+t:t,this.toHex()+t.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(t){var e=this.getSource();return e[3]=t,this.setSource(e),this},toGrayscale:function(){var t=this.getSource(),e=parseInt((.3*t[0]+.59*t[1]+.11*t[2]).toFixed(0),10),i=t[3];return this.setSource([e,e,e,i]),this},toBlackWhite:function(t){var e=this.getSource(),i=(.3*e[0]+.59*e[1]+.11*e[2]).toFixed(0),n=e[3];return t=t||127,i=Number(i)<Number(t)?0:255,this.setSource([i,i,i,n]),this},overlayWith:function(t){t instanceof i||(t=new i(t));var e,n=[],s=this.getAlpha(),r=this.getSource(),a=t.getSource();for(e=0;e<3;e++)n.push(Math.round(.5*r[e]+.5*a[e]));return n[3]=s,this.setSource(n),this}},e.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/i,e.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i,e.Color.reHex=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,e.Color.colorNameMap={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"},e.Color.fromRgb=function(t){return i.fromSource(i.sourceFromRgb(t))},e.Color.sourceFromRgb=function(t){var e=t.match(i.reRGBa);if(e){var n=parseInt(e[1],10)/(/%$/.test(e[1])?100:1)*(/%$/.test(e[1])?255:1),s=parseInt(e[2],10)/(/%$/.test(e[2])?100:1)*(/%$/.test(e[2])?255:1),r=parseInt(e[3],10)/(/%$/.test(e[3])?100:1)*(/%$/.test(e[3])?255:1);return[parseInt(n,10),parseInt(s,10),parseInt(r,10),e[4]?parseFloat(e[4]):1]}},e.Color.fromRgba=i.fromRgb,e.Color.fromHsl=function(t){return i.fromSource(i.sourceFromHsl(t))},e.Color.sourceFromHsl=function(t){var e=t.match(i.reHSLa);if(e){var s,r,a,o=(parseFloat(e[1])%360+360)%360/360,l=parseFloat(e[2])/(/%$/.test(e[2])?100:1),h=parseFloat(e[3])/(/%$/.test(e[3])?100:1);if(0===l)s=r=a=h;else{var c=h<=.5?h*(l+1):h+l-h*l,d=2*h-c;s=n(d,c,o+1/3),r=n(d,c,o),a=n(d,c,o-1/3)}return[Math.round(255*s),Math.round(255*r),Math.round(255*a),e[4]?parseFloat(e[4]):1]}},e.Color.fromHsla=i.fromHsl,e.Color.fromHex=function(t){return i.fromSource(i.sourceFromHex(t))},e.Color.sourceFromHex=function(t){if(t.match(i.reHex)){var e=t.slice(t.indexOf("#")+1),n=3===e.length||4===e.length,s=8===e.length||4===e.length,r=n?e.charAt(0)+e.charAt(0):e.substring(0,2),a=n?e.charAt(1)+e.charAt(1):e.substring(2,4),o=n?e.charAt(2)+e.charAt(2):e.substring(4,6),l=s?n?e.charAt(3)+e.charAt(3):e.substring(6,8):"FF";return[parseInt(r,16),parseInt(a,16),parseInt(o,16),parseFloat((parseInt(l,16)/255).toFixed(2))]}},e.Color.fromSource=function(t){var e=new i;return e.setSource(t),e})}(e),function(t){var e=t.fabric||(t.fabric={}),i=["e","se","s","sw","w","nw","n","ne","e"],n=["ns","nesw","ew","nwse"],s={},r="left",a="top",o="right",l="bottom",h="center",c={top:l,bottom:a,left:o,right:r,center:h},d=e.util.radiansToDegrees,u=Math.sign||function(t){return(t>0)-(t<0)||+t};function f(t,e){var i=t.angle+d(Math.atan2(e.y,e.x))+360;return Math.round(i%360/45)}function g(t,i){var n=i.transform.target,s=n.canvas,r=e.util.object.clone(i);r.target=n,s&&s.fire("object:"+t,r),n.fire(t,i)}function m(t,e){var i=e.canvas,n=t[i.uniScaleKey];return i.uniformScaling&&!n||!i.uniformScaling&&n}function p(t){return t.originX===h&&t.originY===h}function _(t,e,i){var n=t.lockScalingX,s=t.lockScalingY;return!((!n||!s)&&(e||!n&&!s||!i)&&(!n||"x"!==e)&&(!s||"y"!==e))}function v(t,e,i,n){return{e:t,transform:e,pointer:{x:i,y:n}}}function y(t){return function(e,i,n,s){var r=i.target,a=r.getCenterPoint(),o=r.translateToOriginPoint(a,i.originX,i.originY),l=t(e,i,n,s);return r.setPositionByOrigin(o,i.originX,i.originY),l}}function w(t,e){return function(i,n,s,r){var a=e(i,n,s,r);return a&&g(t,v(i,n,s,r)),a}}function C(t,i,n,s,r){var a=t.target,o=a.controls[t.corner],l=a.canvas.getZoom(),h=a.padding/l,c=a.toLocalPoint(new e.Point(s,r),i,n);return c.x>=h&&(c.x-=h),c.x<=-h&&(c.x+=h),c.y>=h&&(c.y-=h),c.y<=h&&(c.y+=h),c.x-=o.offsetX,c.y-=o.offsetY,c}function E(t){return t.flipX!==t.flipY}function S(t,e,i,n,s){if(0!==t[e]){var r=s/t._getTransformedDimensions()[n]*t[i];t.set(i,r)}}function T(t,e,i,n){var s,h=e.target,c=h._getTransformedDimensions(0,h.skewY),u=C(e,e.originX,e.originY,i,n),f=Math.abs(2*u.x)-c.x,g=h.skewX;f<2?s=0:(s=d(Math.atan2(f/h.scaleX,c.y/h.scaleY)),e.originX===r&&e.originY===l&&(s=-s),e.originX===o&&e.originY===a&&(s=-s),E(h)&&(s=-s));var m=g!==s;if(m){var p=h._getTransformedDimensions().y;h.set("skewX",s),S(h,"skewY","scaleY","y",p)}return m}function b(t,e,i,n){var s,h=e.target,c=h._getTransformedDimensions(h.skewX,0),u=C(e,e.originX,e.originY,i,n),f=Math.abs(2*u.y)-c.y,g=h.skewY;f<2?s=0:(s=d(Math.atan2(f/h.scaleY,c.x/h.scaleX)),e.originX===r&&e.originY===l&&(s=-s),e.originX===o&&e.originY===a&&(s=-s),E(h)&&(s=-s));var m=g!==s;if(m){var p=h._getTransformedDimensions().x;h.set("skewY",s),S(h,"skewX","scaleX","x",p)}return m}function I(t,e,i,n,s){s=s||{};var r,a,o,l,h,d,f=e.target,g=f.lockScalingX,v=f.lockScalingY,y=s.by,w=m(t,f),E=_(f,y,w),S=e.gestureScale;if(E)return!1;if(S)a=e.scaleX*S,o=e.scaleY*S;else{if(r=C(e,e.originX,e.originY,i,n),h="y"!==y?u(r.x):1,d="x"!==y?u(r.y):1,e.signX||(e.signX=h),e.signY||(e.signY=d),f.lockScalingFlip&&(e.signX!==h||e.signY!==d))return!1;if(l=f._getTransformedDimensions(),w&&!y){var T=Math.abs(r.x)+Math.abs(r.y),b=e.original,I=T/(Math.abs(l.x*b.scaleX/f.scaleX)+Math.abs(l.y*b.scaleY/f.scaleY));a=b.scaleX*I,o=b.scaleY*I}else a=Math.abs(r.x*f.scaleX/l.x),o=Math.abs(r.y*f.scaleY/l.y);p(e)&&(a*=2,o*=2),e.signX!==h&&"y"!==y&&(e.originX=c[e.originX],a*=-1,e.signX=h),e.signY!==d&&"x"!==y&&(e.originY=c[e.originY],o*=-1,e.signY=d)}var x=f.scaleX,R=f.scaleY;return y?("x"===y&&f.set("scaleX",a),"y"===y&&f.set("scaleY",o)):(!g&&f.set("scaleX",a),!v&&f.set("scaleY",o)),x!==f.scaleX||R!==f.scaleY}s.scaleCursorStyleHandler=function(t,e,n){var s=m(t,n),r="";if(0!==e.x&&0===e.y?r="x":0===e.x&&0!==e.y&&(r="y"),_(n,r,s))return"not-allowed";var a=f(n,e);return i[a]+"-resize"},s.skewCursorStyleHandler=function(t,e,i){var s="not-allowed";if(0!==e.x&&i.lockSkewingY)return s;if(0!==e.y&&i.lockSkewingX)return s;var r=f(i,e)%4;return n[r]+"-resize"},s.scaleSkewCursorStyleHandler=function(t,e,i){return t[i.canvas.altActionKey]?s.skewCursorStyleHandler(t,e,i):s.scaleCursorStyleHandler(t,e,i)},s.rotationWithSnapping=w("rotating",y(function(t,e,i,n){var s=e,r=s.target,a=r.translateToOriginPoint(r.getCenterPoint(),s.originX,s.originY);if(r.lockRotation)return!1;var o,l=Math.atan2(s.ey-a.y,s.ex-a.x),h=Math.atan2(n-a.y,i-a.x),c=d(h-l+s.theta);if(r.snapAngle>0){var u=r.snapAngle,f=r.snapThreshold||u,g=Math.ceil(c/u)*u,m=Math.floor(c/u)*u;Math.abs(c-m)<f?c=m:Math.abs(c-g)<f&&(c=g)}return c<0&&(c=360+c),c%=360,o=r.angle!==c,r.angle=c,o})),s.scalingEqually=w("scaling",y(function(t,e,i,n){return I(t,e,i,n)})),s.scalingX=w("scaling",y(function(t,e,i,n){return I(t,e,i,n,{by:"x"})})),s.scalingY=w("scaling",y(function(t,e,i,n){return I(t,e,i,n,{by:"y"})})),s.scalingYOrSkewingX=function(t,e,i,n){return t[e.target.canvas.altActionKey]?s.skewHandlerX(t,e,i,n):s.scalingY(t,e,i,n)},s.scalingXOrSkewingY=function(t,e,i,n){return t[e.target.canvas.altActionKey]?s.skewHandlerY(t,e,i,n):s.scalingX(t,e,i,n)},s.changeWidth=w("resizing",y(function(t,e,i,n){var s=e.target,r=C(e,e.originX,e.originY,i,n),a=s.strokeWidth/(s.strokeUniform?s.scaleX:1),o=p(e)?2:1,l=s.width,h=Math.abs(r.x*o/s.scaleX)-a;return s.set("width",Math.max(h,0)),l!==h})),s.skewHandlerX=function(t,e,i,n){var s,l=e.target,c=l.skewX,d=e.originY;return!l.lockSkewingX&&(0===c?s=C(e,h,h,i,n).x>0?r:o:(c>0&&(s=d===a?r:o),c<0&&(s=d===a?o:r),E(l)&&(s=s===r?o:r)),e.originX=s,w("skewing",y(T))(t,e,i,n))},s.skewHandlerY=function(t,e,i,n){var s,o=e.target,c=o.skewY,d=e.originX;return!o.lockSkewingY&&(0===c?s=C(e,h,h,i,n).y>0?a:l:(c>0&&(s=d===r?a:l),c<0&&(s=d===r?l:a),E(o)&&(s=s===a?l:a)),e.originY=s,w("skewing",y(b))(t,e,i,n))},s.dragHandler=function(t,e,i,n){var s=e.target,r=i-e.offsetX,a=n-e.offsetY,o=!s.get("lockMovementX")&&s.left!==r,l=!s.get("lockMovementY")&&s.top!==a;return o&&s.set("left",r),l&&s.set("top",a),(o||l)&&g("moving",v(t,e,i,n)),o||l},s.scaleOrSkewActionName=function(t,e,i){var n=t[i.canvas.altActionKey];return 0===e.x?n?"skewX":"scaleY":0===e.y?n?"skewY":"scaleX":void 0},s.rotationStyleHandler=function(t,e,i){return i.lockRotation?"not-allowed":e.cursorStyle},s.fireEvent=g,s.wrapWithFixedAnchor=y,s.wrapWithFireEvent=w,s.getLocalPoint=C,e.controlsUtils=s}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.degreesToRadians,n=e.controlsUtils;n.renderCircleControl=function(t,e,i,n,s){n=n||{};var r,a=this.sizeX||n.cornerSize||s.cornerSize,o=this.sizeY||n.cornerSize||s.cornerSize,l=void 0!==n.transparentCorners?n.transparentCorners:s.transparentCorners,h=l?"stroke":"fill",c=!l&&(n.cornerStrokeColor||s.cornerStrokeColor),d=e,u=i;t.save(),t.fillStyle=n.cornerColor||s.cornerColor,t.strokeStyle=n.cornerStrokeColor||s.cornerStrokeColor,a>o?(r=a,t.scale(1,o/a),u=i*a/o):o>a?(r=o,t.scale(a/o,1),d=e*o/a):r=a,t.lineWidth=1,t.beginPath(),t.arc(d,u,r/2,0,2*Math.PI,!1),t[h](),c&&t.stroke(),t.restore()},n.renderSquareControl=function(t,e,n,s,r){s=s||{};var a=this.sizeX||s.cornerSize||r.cornerSize,o=this.sizeY||s.cornerSize||r.cornerSize,l=void 0!==s.transparentCorners?s.transparentCorners:r.transparentCorners,h=l?"stroke":"fill",c=!l&&(s.cornerStrokeColor||r.cornerStrokeColor),d=a/2,u=o/2;t.save(),t.fillStyle=s.cornerColor||r.cornerColor,t.strokeStyle=s.cornerStrokeColor||r.cornerStrokeColor,t.lineWidth=1,t.translate(e,n),t.rotate(i(r.angle)),t[h+"Rect"](-d,-u,a,o),c&&t.strokeRect(-d,-u,a,o),t.restore()}}(e),function(t){var e=t.fabric||(t.fabric={});e.Control=function(t){for(var e in t)this[e]=t[e]},e.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(t,e){return e.cursorStyle},getActionName:function(t,e){return e.actionName},getVisibility:function(t,e){var i=t._controlsVisibility;return i&&void 0!==i[e]?i[e]:this.visible},setVisibility:function(t){this.visible=t},positionHandler:function(t,i){return e.util.transformPoint({x:this.x*t.x+this.offsetX,y:this.y*t.y+this.offsetY},i)},calcCornerCoords:function(t,i,n,s,r){var a,o,l,h,c=r?this.touchSizeX:this.sizeX,d=r?this.touchSizeY:this.sizeY;if(c&&d&&c!==d){var u=Math.atan2(d,c),f=Math.sqrt(c*c+d*d)/2,g=u-e.util.degreesToRadians(t),m=Math.PI/2-u-e.util.degreesToRadians(t);a=f*e.util.cos(g),o=f*e.util.sin(g),l=f*e.util.cos(m),h=f*e.util.sin(m)}else f=.7071067812*(c&&d?c:i),g=e.util.degreesToRadians(45-t),a=l=f*e.util.cos(g),o=h=f*e.util.sin(g);return{tl:{x:n-h,y:s-l},tr:{x:n+a,y:s-o},bl:{x:n-a,y:s+o},br:{x:n+h,y:s+l}}},render:function(t,i,n,s,r){"circle"===((s=s||{}).cornerStyle||r.cornerStyle)?e.controlsUtils.renderCircleControl.call(this,t,i,n,s,r):e.controlsUtils.renderSquareControl.call(this,t,i,n,s,r)}}}(e),function(){function t(t,e){var i,n,s,r,a=t.getAttribute("style"),o=t.getAttribute("offset")||0;if(o=(o=parseFloat(o)/(/%$/.test(o)?100:1))<0?0:o>1?1:o,a){var l=a.split(/\s*;\s*/);for(""===l[l.length-1]&&l.pop(),r=l.length;r--;){var h=l[r].split(/\s*:\s*/),c=h[0].trim(),d=h[1].trim();"stop-color"===c?i=d:"stop-opacity"===c&&(s=d)}}return i||(i=t.getAttribute("stop-color")||"rgb(0,0,0)"),s||(s=t.getAttribute("stop-opacity")),n=(i=new T.Color(i)).getAlpha(),s=isNaN(parseFloat(s))?1:parseFloat(s),s*=n*e,{offset:o,color:i.toRgb(),opacity:s}}var e=T.util.object.clone;T.Gradient=T.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(t){t||(t={}),t.coords||(t.coords={});var e,i=this;Object.keys(t).forEach(function(e){i[e]=t[e]}),this.id?this.id+="_"+T.Object.__uid++:this.id=T.Object.__uid++,e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice()},addColorStop:function(t){for(var e in t){var i=new T.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return T.util.populateWithProperties(this,e,t),e},toSVG:function(t,i){var n,s,r,a,o=e(this.coords,!0),l=(i=i||{},e(this.colorStops,!0)),h=o.r1>o.r2,c=this.gradientTransform?this.gradientTransform.concat():T.iMatrix.concat(),d=-this.offsetX,u=-this.offsetY,f=!!i.additionalTransform,g="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(l.sort(function(t,e){return t.offset-e.offset}),"objectBoundingBox"===g?(d/=t.width,u/=t.height):(d+=t.width/2,u+=t.height/2),"path"===t.type&&"percentage"!==this.gradientUnits&&(d-=t.pathOffset.x,u-=t.pathOffset.y),c[4]-=d,c[5]-=u,a='id="SVGID_'+this.id+'" gradientUnits="'+g+'"',a+=' gradientTransform="'+(f?i.additionalTransform+" ":"")+T.util.matrixToSVG(c)+'" ',"linear"===this.type?r=["<linearGradient ",a,' x1="',o.x1,'" y1="',o.y1,'" x2="',o.x2,'" y2="',o.y2,'">\n']:"radial"===this.type&&(r=["<radialGradient ",a,' cx="',h?o.x1:o.x2,'" cy="',h?o.y1:o.y2,'" r="',h?o.r1:o.r2,'" fx="',h?o.x2:o.x1,'" fy="',h?o.y2:o.y1,'">\n']),"radial"===this.type){if(h)for((l=l.concat()).reverse(),n=0,s=l.length;n<s;n++)l[n].offset=1-l[n].offset;var m=Math.min(o.r1,o.r2);if(m>0){var p=m/Math.max(o.r1,o.r2);for(n=0,s=l.length;n<s;n++)l[n].offset+=p*(1-l[n].offset)}}for(n=0,s=l.length;n<s;n++){var _=l[n];r.push("<stop ",'offset="',100*_.offset+"%",'" style="stop-color:',_.color,void 0!==_.opacity?";stop-opacity: "+_.opacity:";",'"/>\n')}return r.push("linear"===this.type?"</linearGradient>\n":"</radialGradient>\n"),r.join("")},toLive:function(t){var e,i,n,s=T.util.object.clone(this.coords);if(this.type){for("linear"===this.type?e=t.createLinearGradient(s.x1,s.y1,s.x2,s.y2):"radial"===this.type&&(e=t.createRadialGradient(s.x1,s.y1,s.r1,s.x2,s.y2,s.r2)),i=0,n=this.colorStops.length;i<n;i++){var r=this.colorStops[i].color,a=this.colorStops[i].opacity,o=this.colorStops[i].offset;void 0!==a&&(r=new T.Color(r).setAlpha(a).toRgba()),e.addColorStop(o,r)}return e}}}),T.util.object.extend(T.Gradient,{fromElement:function(e,i,n,s){var r=parseFloat(n)/(/%$/.test(n)?100:1);r=r<0?0:r>1?1:r,isNaN(r)&&(r=1);var a,o,l,h,c=e.getElementsByTagName("stop"),d="userSpaceOnUse"===e.getAttribute("gradientUnits")?"pixels":"percentage",u=e.getAttribute("gradientTransform")||"",f=[],g=0,m=0;for("linearGradient"===e.nodeName||"LINEARGRADIENT"===e.nodeName?(a="linear",o=function(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}(e)):(a="radial",o=function(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}(e)),l=c.length;l--;)f.push(t(c[l],r));return h=T.parseTransformAttribute(u),function(t,e,i,n){var s,r;Object.keys(e).forEach(function(t){"Infinity"===(s=e[t])?r=1:"-Infinity"===s?r=0:(r=parseFloat(e[t],10),"string"==typeof s&&/^(\d+\.\d+)%|(\d+)%$/.test(s)&&(r*=.01,"pixels"===n&&("x1"!==t&&"x2"!==t&&"r2"!==t||(r*=i.viewBoxWidth||i.width),"y1"!==t&&"y2"!==t||(r*=i.viewBoxHeight||i.height)))),e[t]=r})}(0,o,s,d),"pixels"===d&&(g=-i.left,m=-i.top),new T.Gradient({id:e.getAttribute("id"),type:a,coords:o,colorStops:f,gradientUnits:d,gradientTransform:h,offsetX:g,offsetY:m})}})}(),_=T.util.toFixed,T.Pattern=T.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(t,e){if(t||(t={}),this.id=T.Object.__uid++,this.setOptions(t),!t.source||t.source&&"string"!=typeof t.source)e&&e(this);else{var i=this;this.source=T.util.createImage(),T.util.loadImage(t.source,function(t,n){i.source=t,e&&e(i,n)},null,this.crossOrigin)}},toObject:function(t){var e,i,n=T.Object.NUM_FRACTION_DIGITS;return"string"==typeof this.source.src?e=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(e=this.source.toDataURL()),i={type:"pattern",source:e,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:_(this.offsetX,n),offsetY:_(this.offsetY,n),patternTransform:this.patternTransform?this.patternTransform.concat():null},T.util.populateWithProperties(this,i,t),i},toSVG:function(t){var e="function"==typeof this.source?this.source():this.source,i=e.width/t.width,n=e.height/t.height,s=this.offsetX/t.width,r=this.offsetY/t.height,a="";return"repeat-x"!==this.repeat&&"no-repeat"!==this.repeat||(n=1,r&&(n+=Math.abs(r))),"repeat-y"!==this.repeat&&"no-repeat"!==this.repeat||(i=1,s&&(i+=Math.abs(s))),e.src?a=e.src:e.toDataURL&&(a=e.toDataURL()),'<pattern id="SVGID_'+this.id+'" x="'+s+'" y="'+r+'" width="'+i+'" height="'+n+'">\n<image x="0" y="0" width="'+e.width+'" height="'+e.height+'" xlink:href="'+a+'"></image>\n</pattern>\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e=this.source;if(!e)return"";if(void 0!==e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.toFixed;e.Shadow?e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(t){for(var i in"string"==typeof t&&(t=this._parseShadow(t)),t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),n=e.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseFloat(n[1],10)||0,offsetY:parseFloat(n[2],10)||0,blur:parseFloat(n[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var n=40,s=40,r=e.Object.NUM_FRACTION_DIGITS,a=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),o=new e.Color(this.color);return t.width&&t.height&&(n=100*i((Math.abs(a.x)+this.blur)/t.width,r)+20,s=100*i((Math.abs(a.y)+this.blur)/t.height,r)+20),t.flipX&&(a.x*=-1),t.flipY&&(a.y*=-1),'<filter id="SVGID_'+this.id+'" y="-'+s+'%" height="'+(100+2*s)+'%" x="-'+n+'%" width="'+(100+2*n)+'%" >\n\t<feGaussianBlur in="SourceAlpha" stdDeviation="'+i(this.blur?this.blur/2:0,r)+'"></feGaussianBlur>\n\t<feOffset dx="'+i(a.x,r)+'" dy="'+i(a.y,r)+'" result="oBlur" ></feOffset>\n\t<feFlood flood-color="'+o.toRgb()+'" flood-opacity="'+o.getAlpha()+'"/>\n\t<feComposite in2="oBlur" operator="in" />\n\t<feMerge>\n\t\t<feMergeNode></feMergeNode>\n\t\t<feMergeNode in="SourceGraphic"></feMergeNode>\n\t</feMerge>\n</filter>\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)}(e),function(){if(T.StaticCanvas)T.warn("fabric.StaticCanvas is already defined.");else{var t=T.util.object.extend,e=T.util.getElementOffset,i=T.util.removeFromArray,n=T.util.toFixed,s=T.util.transformPoint,r=T.util.invertTransform,a=T.util.getNodeCanvas,o=T.util.createCanvasElement,l=new Error("Could not initialize `canvas` element");T.StaticCanvas=T.util.createClass(T.CommonMethods,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:T.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(t,e){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return T.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,T.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var t=T.devicePixelRatio;this.__initRetinaScaling(t,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(t,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(t,e,i){e.setAttribute("width",this.width*t),e.setAttribute("height",this.height*t),i.scale(t,t)},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},__setBgOverlayImage:function(t,e,i,n){return"string"==typeof e?T.util.loadImage(e,function(e,s){if(e){var r=new T.Image(e,n);this[t]=r,r.canvas=this}i&&i(e,s)},this,n&&n.crossOrigin):(n&&e.setOptions(n),this[t]=e,e&&(e.canvas=this),i&&i(e,!1)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(){var t=o();if(!t)throw l;if(t.style||(t.style={}),void 0===t.getContext)throw l;return t},_initOptions:function(t){var e=this.lowerCanvasEl;this._setOptions(t),this.width=this.width||parseInt(e.width,10)||0,this.height=this.height||parseInt(e.height,10)||0,this.lowerCanvasEl.style&&(e.width=this.width,e.height=this.height,e.style.width=this.width+"px",e.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){t&&t.getContext?this.lowerCanvasEl=t:this.lowerCanvasEl=T.util.getById(t)||this._createCanvasElement(),T.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;for(var n in e=e||{},t)i=t[n],e.cssOnly||(this._setBackstoreDimension(n,t[n]),i+="px",this.hasLostContext=!0),e.backstoreOnly||this._setCssDimension(n,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),e.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i,n,s=this._activeObject,r=this.backgroundImage,a=this.overlayImage;for(this.viewportTransform=t,i=0,n=this._objects.length;i<n;i++)(e=this._objects[i]).group||e.setCoords(!0);return s&&s.setCoords(),r&&r.setCoords(!0),a&&a.setCoords(!0),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll(),this},zoomToPoint:function(t,e){var i=t,n=this.viewportTransform.slice(0);t=s(t,r(this.viewportTransform)),n[0]=e,n[3]=e;var a=s(t,n);return n[4]+=i.x-a.x,n[5]+=i.y-a.y,this.setViewportTransform(n)},setZoom:function(t){return this.zoomToPoint(new T.Point(0,0),t),this},absolutePan:function(t){var e=this.viewportTransform.slice(0);return e[4]=-t.x,e[5]=-t.y,this.setViewportTransform(e)},relativePan:function(t){return this.absolutePan(new T.Point(-t.x-this.viewportTransform[4],-t.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},_onObjectAdded:function(t){this.stateful&&t.setupState(),t._set("canvas",this),t.setCoords(),this.fire("object:added",{target:t}),t.fire("added")},_onObjectRemoved:function(t){this.fire("object:removed",{target:t}),t.fire("removed"),delete t.canvas},clearContext:function(t){return t.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this.remove.apply(this,this.getObjects()),this.backgroundImage=null,this.overlayImage=null,this.backgroundColor="",this.overlayColor="",this._hasITextHandlers&&(this.off("mouse:up",this._mouseUpITextHandler),this._iTextInstances=null,this._hasITextHandlers=!1),this.clearContext(this.contextContainer),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll(),this},renderAll:function(){var t=this.contextContainer;return this.renderCanvas(t,this._objects),this},renderAndReset:function(){this.isRendering=0,this.renderAll()},requestRenderAll:function(){return this.isRendering||(this.isRendering=T.util.requestAnimFrame(this.renderAndResetBound)),this},calcViewportBoundaries:function(){var t={},e=this.width,i=this.height,n=r(this.viewportTransform);return t.tl=s({x:0,y:0},n),t.br=s({x:e,y:i},n),t.tr=new T.Point(t.br.x,t.tl.y),t.bl=new T.Point(t.tl.x,t.br.y),this.vptCoords=t,t},cancelRequestedRender:function(){this.isRendering&&(T.util.cancelAnimFrame(this.isRendering),this.isRendering=0)},renderCanvas:function(t,e){var i=this.viewportTransform,n=this.clipPath;this.cancelRequestedRender(),this.calcViewportBoundaries(),this.clearContext(t),T.util.setImageSmoothing(t,this.imageSmoothingEnabled),this.fire("before:render",{ctx:t}),this._renderBackground(t),t.save(),t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this._renderObjects(t,e),t.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),n&&(n.canvas=this,n.shouldCache(),n._transformDone=!0,n.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(t)),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render",{ctx:t})},drawClipPathOnCanvas:function(t){var e=this.viewportTransform,i=this.clipPath;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.globalCompositeOperation="destination-in",i.transform(t),t.scale(1/i.zoomX,1/i.zoomY),t.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),t.restore()},_renderObjects:function(t,e){var i,n;for(i=0,n=e.length;i<n;++i)e[i]&&e[i].render(t)},_renderBackgroundOrOverlay:function(t,e){var i=this[e+"Color"],n=this[e+"Image"],s=this.viewportTransform,r=this[e+"Vpt"];if(i||n){if(i){t.save(),t.beginPath(),t.moveTo(0,0),t.lineTo(this.width,0),t.lineTo(this.width,this.height),t.lineTo(0,this.height),t.closePath(),t.fillStyle=i.toLive?i.toLive(t,this):i,r&&t.transform(s[0],s[1],s[2],s[3],s[4],s[5]),t.transform(1,0,0,1,i.offsetX||0,i.offsetY||0);var a=i.gradientTransform||i.patternTransform;a&&t.transform(a[0],a[1],a[2],a[3],a[4],a[5]),t.fill(),t.restore()}n&&(t.save(),r&&t.transform(s[0],s[1],s[2],s[3],s[4],s[5]),n.render(t),t.restore())}},_renderBackground:function(t){this._renderBackgroundOrOverlay(t,"background")},_renderOverlay:function(t){this._renderBackgroundOrOverlay(t,"overlay")},getCenter:function(){return{top:this.height/2,left:this.width/2}},getCenterPoint:function(){return new T.Point(this.width/2,this.height/2)},centerObjectH:function(t){return this._centerObject(t,new T.Point(this.getCenterPoint().x,t.getCenterPoint().y))},centerObjectV:function(t){return this._centerObject(t,new T.Point(t.getCenterPoint().x,this.getCenterPoint().y))},centerObject:function(t){var e=this.getCenterPoint();return this._centerObject(t,e)},viewportCenterObject:function(t){var e=this.getVpCenter();return this._centerObject(t,e)},viewportCenterObjectH:function(t){var e=this.getVpCenter();return this._centerObject(t,new T.Point(e.x,t.getCenterPoint().y)),this},viewportCenterObjectV:function(t){var e=this.getVpCenter();return this._centerObject(t,new T.Point(t.getCenterPoint().x,e.y))},getVpCenter:function(){var t=this.getCenterPoint(),e=r(this.viewportTransform);return s(t,e)},_centerObject:function(t,e){return t.setPositionByOrigin(e,"center","center"),t.setCoords(),this.renderOnAddRemove&&this.requestRenderAll(),this},toDatalessJSON:function(t){return this.toDatalessObject(t)},toObject:function(t){return this._toObjectMethod("toObject",t)},toDatalessObject:function(t){return this._toObjectMethod("toDatalessObject",t)},_toObjectMethod:function(e,i){var n=this.clipPath,s={version:T.version,objects:this._toObjects(e,i)};return n&&!n.excludeFromExport&&(s.clipPath=this._toObject(this.clipPath,e,i)),t(s,this.__serializeBgOverlay(e,i)),T.util.populateWithProperties(this,s,i),s},_toObjects:function(t,e){return this._objects.filter(function(t){return!t.excludeFromExport}).map(function(i){return this._toObject(i,t,e)},this)},_toObject:function(t,e,i){var n;this.includeDefaultValues||(n=t.includeDefaultValues,t.includeDefaultValues=!1);var s=t[e](i);return this.includeDefaultValues||(t.includeDefaultValues=n),s},__serializeBgOverlay:function(t,e){var i={},n=this.backgroundImage,s=this.overlayImage,r=this.backgroundColor,a=this.overlayColor;return r&&r.toObject?r.excludeFromExport||(i.background=r.toObject(e)):r&&(i.background=r),a&&a.toObject?a.excludeFromExport||(i.overlay=a.toObject(e)):a&&(i.overlay=a),n&&!n.excludeFromExport&&(i.backgroundImage=this._toObject(n,t,e)),s&&!s.excludeFromExport&&(i.overlayImage=this._toObject(s,t,e)),i},svgViewportTransformation:!0,toSVG:function(t,e){t||(t={}),t.reviver=e;var i=[];return this._setSVGPreamble(i,t),this._setSVGHeader(i,t),this.clipPath&&i.push('<g clip-path="url(#'+this.clipPath.clipPathId+')" >\n'),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",e),this._setSVGObjects(i,e),this.clipPath&&i.push("</g>\n"),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",e),i.push("</svg>"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('<?xml version="1.0" encoding="',e.encoding||"UTF-8",'" standalone="no" ?>\n','<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ','"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n')},_setSVGHeader:function(t,e){var i,s=e.width||this.width,r=e.height||this.height,a='viewBox="0 0 '+this.width+" "+this.height+'" ',o=T.Object.NUM_FRACTION_DIGITS;e.viewBox?a='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,a='viewBox="'+n(-i[4]/i[0],o)+" "+n(-i[5]/i[3],o)+" "+n(this.width/i[0],o)+" "+n(this.height/i[3],o)+'" '),t.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',s,'" ','height="',r,'" ',a,'xml:space="preserve">\n',"<desc>Created with Fabric.js ",T.version,"</desc>\n","<defs>\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),"</defs>\n")},createSVGClipPathMarkup:function(t){var e=this.clipPath;return e?(e.clipPathId="CLIPPATH_"+T.Object.__uid++,'<clipPath id="'+e.clipPathId+'" >\n'+this.clipPath.toClipPathSVG(t.reviver)+"</clipPath>\n"):""},createSVGRefElementsMarkup:function(){var t=this;return["background","overlay"].map(function(e){var i=t[e+"Color"];if(i&&i.toLive){var n=t[e+"Vpt"],s=t.viewportTransform,r={width:t.width/(n?s[0]:1),height:t.height/(n?s[3]:1)};return i.toSVG(r,{additionalTransform:n?T.util.matrixToSVG(s):""})}}).join("")},createSVGFontFacesMarkup:function(){var t,e,i,n,s,r,a,o,l="",h={},c=T.fontPaths,d=[];for(this._objects.forEach(function t(e){d.push(e),e._objects&&e._objects.forEach(t)}),a=0,o=d.length;a<o;a++)if(e=(t=d[a]).fontFamily,-1!==t.type.indexOf("text")&&!h[e]&&c[e]&&(h[e]=!0,t.styles))for(s in i=t.styles)for(r in n=i[s])!h[e=n[r].fontFamily]&&c[e]&&(h[e]=!0);for(var u in h)l+=["\t\t@font-face {\n","\t\t\tfont-family: '",u,"';\n","\t\t\tsrc: url('",c[u],"');\n","\t\t}\n"].join("");return l&&(l=['\t<style type="text/css">',"<![CDATA[\n",l,"]]>","</style>\n"].join("")),l},_setSVGObjects:function(t,e){var i,n,s,r=this._objects;for(n=0,s=r.length;n<s;n++)(i=r[n]).excludeFromExport||this._setSVGObject(t,i,e)},_setSVGObject:function(t,e,i){t.push(e.toSVG(i))},_setSVGBgOverlayImage:function(t,e,i){this[e]&&!this[e].excludeFromExport&&this[e].toSVG&&t.push(this[e].toSVG(i))},_setSVGBgOverlayColor:function(t,e){var i=this[e+"Color"],n=this.viewportTransform,s=this.width,r=this.height;if(i)if(i.toLive){var a=i.repeat,o=T.util.invertTransform(n),l=this[e+"Vpt"]?T.util.matrixToSVG(o):"";t.push('<rect transform="'+l+" translate(",s/2,",",r/2,')"',' x="',i.offsetX-s/2,'" y="',i.offsetY-r/2,'" ','width="',"repeat-y"===a||"no-repeat"===a?i.source.width:s,'" height="',"repeat-x"===a||"no-repeat"===a?i.source.height:r,'" fill="url(#SVGID_'+i.id+')"',"></rect>\n")}else t.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',i,'"',"></rect>\n")},sendToBack:function(t){if(!t)return this;var e,n,s,r=this._activeObject;if(t===r&&"activeSelection"===t.type)for(e=(s=r._objects).length;e--;)n=s[e],i(this._objects,n),this._objects.unshift(n);else i(this._objects,t),this._objects.unshift(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,n,s,r=this._activeObject;if(t===r&&"activeSelection"===t.type)for(s=r._objects,e=0;e<s.length;e++)n=s[e],i(this._objects,n),this._objects.push(n);else i(this._objects,t),this._objects.push(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},sendBackwards:function(t,e){if(!t)return this;var n,s,r,a,o,l=this._activeObject,h=0;if(t===l&&"activeSelection"===t.type)for(o=l._objects,n=0;n<o.length;n++)s=o[n],(r=this._objects.indexOf(s))>0+h&&(a=r-1,i(this._objects,s),this._objects.splice(a,0,s)),h++;else 0!==(r=this._objects.indexOf(t))&&(a=this._findNewLowerIndex(t,r,e),i(this._objects,t),this._objects.splice(a,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,i){var n,s;if(i){for(n=e,s=e-1;s>=0;--s)if(t.intersectsWithObject(this._objects[s])||t.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(t)){n=s;break}}else n=e-1;return n},bringForward:function(t,e){if(!t)return this;var n,s,r,a,o,l=this._activeObject,h=0;if(t===l&&"activeSelection"===t.type)for(n=(o=l._objects).length;n--;)s=o[n],(r=this._objects.indexOf(s))<this._objects.length-1-h&&(a=r+1,i(this._objects,s),this._objects.splice(a,0,s)),h++;else(r=this._objects.indexOf(t))!==this._objects.length-1&&(a=this._findNewUpperIndex(t,r,e),i(this._objects,t),this._objects.splice(a,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewUpperIndex:function(t,e,i){var n,s,r;if(i){for(n=e,s=e+1,r=this._objects.length;s<r;++s)if(t.intersectsWithObject(this._objects[s])||t.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(t)){n=s;break}}else n=e+1;return n},moveTo:function(t,e){return i(this._objects,t),this._objects.splice(e,0,t),this.renderOnAddRemove&&this.requestRenderAll()},dispose:function(){return this.isRendering&&(T.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(t){t.dispose&&t.dispose()}),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose&&this.backgroundImage.dispose(),this.backgroundImage=null,this.overlayImage&&this.overlayImage.dispose&&this.overlayImage.dispose(),this.overlayImage=null,this._iTextInstances=null,this.contextContainer=null,this.lowerCanvasEl.classList.remove("lower-canvas"),T.util.setStyle(this.lowerCanvasEl,this._originalCanvasStyle),delete this._originalCanvasStyle,this.lowerCanvasEl.setAttribute("width",this.width),this.lowerCanvasEl.setAttribute("height",this.height),T.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},toString:function(){return"#<fabric.Canvas ("+this.complexity()+"): { objects: "+this._objects.length+" }>"}}),t(T.StaticCanvas.prototype,T.Observable),t(T.StaticCanvas.prototype,T.Collection),t(T.StaticCanvas.prototype,T.DataURLExporter),t(T.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=o();if(!e||!e.getContext)return null;var i=e.getContext("2d");return i&&"setLineDash"===t?void 0!==i.setLineDash:null}}),T.StaticCanvas.prototype.toJSON=T.StaticCanvas.prototype.toObject,T.isLikelyNode&&(T.StaticCanvas.prototype.createPNGStream=function(){var t=a(this.lowerCanvasEl);return t&&t.createPNGStream()},T.StaticCanvas.prototype.createJPEGStream=function(t){var e=a(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}}(),T.BaseBrush=T.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(t){t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.miterLimit=this.strokeMiterLimit,t.lineJoin=this.strokeLineJoin,t.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(t){var e=this.canvas.viewportTransform;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},_setShadow:function(){if(this.shadow){var t=this.canvas,e=this.shadow,i=t.contextTop,n=t.getZoom();t&&t._isRetinaScaling()&&(n*=T.devicePixelRatio),i.shadowColor=e.color,i.shadowBlur=e.blur*n,i.shadowOffsetX=e.offsetX*n,i.shadowOffsetY=e.offsetY*n}},needsFullRender:function(){return new T.Color(this.color).getAlpha()<1||!!this.shadow},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0},_isOutSideCanvas:function(t){return t.x<0||t.x>this.canvas.getWidth()||t.y<0||t.y>this.canvas.getHeight()}}),T.PencilBrush=T.util.createClass(T.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(t){this.canvas=t,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(t,e,i){var n=e.midPointFrom(i);return t.quadraticCurveTo(e.x,e.y,n.x,n.y),n},onMouseDown:function(t,e){this.canvas._isMainEvent(e.e)&&(this.drawStraightLine=e.e[this.straightLineKey],this._prepareForDrawing(t),this._captureDrawingPath(t),this._render())},onMouseMove:function(t,e){if(this.canvas._isMainEvent(e.e)&&(this.drawStraightLine=e.e[this.straightLineKey],(!0!==this.limitedToCanvasSize||!this._isOutSideCanvas(t))&&this._captureDrawingPath(t)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,n=i.length,s=this.canvas.contextTop;this._saveAndTransform(s),this.oldEnd&&(s.beginPath(),s.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(s,i[n-2],i[n-1],!0),s.stroke(),s.restore()}},onMouseUp:function(t){return!this.canvas._isMainEvent(t.e)||(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(t){var e=new T.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){return!(this._points.length>1&&t.eq(this._points[this._points.length-1])||(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(t),0))},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(t){var e=new T.Point(t.x,t.y);return this._addPoint(e)},_render:function(t){var e,i,n=this._points[0],s=this._points[1];if(t=t||this.canvas.contextTop,this._saveAndTransform(t),t.beginPath(),2===this._points.length&&n.x===s.x&&n.y===s.y){var r=this.width/1e3;n=new T.Point(n.x,n.y),s=new T.Point(s.x,s.y),n.x-=r,s.x+=r}for(t.moveTo(n.x,n.y),e=1,i=this._points.length;e<i;e++)this._drawSegment(t,n,s),n=this._points[e],s=this._points[e+1];t.lineTo(n.x,n.y),t.stroke(),t.restore()},convertPointsToSVGPath:function(t){var e=this.width/1e3;return T.util.getSmoothPathFromPoints(t,e)},_isEmptySVGPath:function(t){return"M 0 0 Q 0 0 0 0 L 0 0"===T.util.joinPath(t)},createPath:function(t){var e=new T.Path(t,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray});return this.shadow&&(this.shadow.affectStroke=!0,e.shadow=new T.Shadow(this.shadow)),e},decimatePoints:function(t,e){if(t.length<=2)return t;var i,n=this.canvas.getZoom(),s=Math.pow(e/n,2),r=t.length-1,a=t[0],o=[a];for(i=1;i<r-1;i++)Math.pow(a.x-t[i].x,2)+Math.pow(a.y-t[i].y,2)>=s&&(a=t[i],o.push(a));return o.push(t[r]),o},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var t=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(t))this.canvas.requestRenderAll();else{var e=this.createPath(t);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:e}),this.canvas.add(e),this.canvas.requestRenderAll(),e.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:e})}}}),T.CircleBrush=T.util.createClass(T.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,e),i.restore()},dot:function(t,e){t.fillStyle=e.fill,t.beginPath(),t.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),t.closePath(),t.fill()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},_render:function(){var t,e,i=this.canvas.contextTop,n=this.points;for(this._saveAndTransform(i),t=0,e=n.length;t<e;t++)this.dot(i,n[t]);i.restore()},onMouseMove:function(t){!0===this.limitedToCanvasSize&&this._isOutSideCanvas(t)||(this.needsFullRender()?(this.canvas.clearContext(this.canvas.contextTop),this.addPoint(t),this._render()):this.drawDot(t))},onMouseUp:function(){var t,e,i=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var n=[];for(t=0,e=this.points.length;t<e;t++){var s=this.points[t],r=new T.Circle({radius:s.radius,left:s.x,top:s.y,originX:"center",originY:"center",fill:s.fill});this.shadow&&(r.shadow=new T.Shadow(this.shadow)),n.push(r)}var a=new T.Group(n);a.canvas=this.canvas,this.canvas.fire("before:path:created",{path:a}),this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=i,this.canvas.requestRenderAll()},addPoint:function(t){var e=new T.Point(t.x,t.y),i=T.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,n=new T.Color(this.color).setAlpha(T.util.getRandomInt(0,100)/100).toRgba();return e.radius=i,e.fill=n,this.points.push(e),e}}),T.SprayBrush=T.util.createClass(T.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(t){this.canvas=t,this.sprayChunks=[]},onMouseDown:function(t){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(t),this.render(this.sprayChunkPoints)},onMouseMove:function(t){!0===this.limitedToCanvasSize&&this._isOutSideCanvas(t)||(this.addSprayChunk(t),this.render(this.sprayChunkPoints))},onMouseUp:function(){var t=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var e=[],i=0,n=this.sprayChunks.length;i<n;i++)for(var s=this.sprayChunks[i],r=0,a=s.length;r<a;r++){var o=new T.Rect({width:s[r].width,height:s[r].width,left:s[r].x+1,top:s[r].y+1,originX:"center",originY:"center",fill:this.color});e.push(o)}this.optimizeOverlapping&&(e=this._getOptimizedRects(e));var l=new T.Group(e);this.shadow&&l.set("shadow",new T.Shadow(this.shadow)),this.canvas.fire("before:path:created",{path:l}),this.canvas.add(l),this.canvas.fire("path:created",{path:l}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=t,this.canvas.requestRenderAll()},_getOptimizedRects:function(t){var e,i,n,s={};for(i=0,n=t.length;i<n;i++)s[e=t[i].left+""+t[i].top]||(s[e]=t[i]);var r=[];for(e in s)r.push(s[e]);return r},render:function(t){var e,i,n=this.canvas.contextTop;for(n.fillStyle=this.color,this._saveAndTransform(n),e=0,i=t.length;e<i;e++){var s=t[e];void 0!==s.opacity&&(n.globalAlpha=s.opacity),n.fillRect(s.x,s.y,s.width,s.width)}n.restore()},_render:function(){var t,e,i=this.canvas.contextTop;for(i.fillStyle=this.color,this._saveAndTransform(i),t=0,e=this.sprayChunks.length;t<e;t++)this.render(this.sprayChunks[t]);i.restore()},addSprayChunk:function(t){this.sprayChunkPoints=[];var e,i,n,s,r=this.width/2;for(s=0;s<this.density;s++){e=T.util.getRandomInt(t.x-r,t.x+r),i=T.util.getRandomInt(t.y-r,t.y+r),n=this.dotWidthVariance?T.util.getRandomInt(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):this.dotWidth;var a=new T.Point(e,i);a.width=n,this.randomOpacity&&(a.opacity=T.util.getRandomInt(0,100)/100),this.sprayChunkPoints.push(a)}this.sprayChunks.push(this.sprayChunkPoints)}}),T.PatternBrush=T.util.createClass(T.PencilBrush,{getPatternSrc:function(){var t=T.util.createCanvasElement(),e=t.getContext("2d");return t.width=t.height=25,e.fillStyle=this.color,e.beginPath(),e.arc(10,10,10,0,2*Math.PI,!1),e.closePath(),e.fill(),t},getPatternSrcFunction:function(){return String(this.getPatternSrc).replace("this.color",'"'+this.color+'"')},getPattern:function(t){return t.createPattern(this.source||this.getPatternSrc(),"repeat")},_setBrushStyles:function(t){this.callSuper("_setBrushStyles",t),t.strokeStyle=this.getPattern(t)},createPath:function(t){var e=this.callSuper("createPath",t),i=e._getLeftTopCoords().scalarAdd(e.strokeWidth/2);return e.stroke=new T.Pattern({source:this.source||this.getPatternSrcFunction(),offsetX:-i.x,offsetY:-i.y}),e}}),function(){var t=T.util.getPointer,e=T.util.degreesToRadians,i=T.util.isTouchEvent;for(var n in T.Canvas=T.util.createClass(T.StaticCanvas,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e),this._initInteractive(),this._createCacheCanvas()},uniformScaling:!0,uniScaleKey:"shiftKey",centeredScaling:!1,centeredRotation:!1,centeredKey:"altKey",altActionKey:"shiftKey",interactive:!0,selection:!0,selectionKey:"shiftKey",altSelectionKey:null,selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,selectionFullyContained:!1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",notAllowedCursor:"not-allowed",containerClass:"canvas-container",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,isDrawingMode:!1,preserveObjectStacking:!1,snapAngle:0,snapThreshold:null,stopContextMenu:!1,fireRightClick:!1,fireMiddleClick:!1,targets:[],enablePointerEvents:!1,_hoveredTarget:null,_hoveredTargets:[],_initInteractive:function(){this._currentTransform=null,this._groupSelector=null,this._initWrapperElement(),this._createUpperCanvas(),this._initEventListeners(),this._initRetinaScaling(),this.freeDrawingBrush=T.PencilBrush&&new T.PencilBrush(this),this.calcOffset()},_chooseObjectsToRender:function(){var t,e,i,n=this.getActiveObjects();if(n.length>0&&!this.preserveObjectStacking){e=[],i=[];for(var s=0,r=this._objects.length;s<r;s++)t=this._objects[s],-1===n.indexOf(t)?e.push(t):i.push(t);n.length>1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTopLayer:function(t){t.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(t),this.contextTopDirty=!0),t.restore()},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.renderTopLayer(t),this.fire("after:render"),this},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),n=T.util.invertTransform(i),s=this.restorePointerVpt(e);return T.util.transformPoint(s,n)},isTargetTransparent:function(t,e,i){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var n=this._normalizePointer(t,{x:e,y:i}),s=Math.max(t.cacheTranslationX+n.x*t.zoomX,0),r=Math.max(t.cacheTranslationY+n.y*t.zoomY,0);return T.util.isTransparent(t._cacheContext,Math.round(s),Math.round(r),this.targetFindTolerance)}var a=this.contextCache,o=t.selectionBackgroundColor,l=this.viewportTransform;return t.selectionBackgroundColor="",this.clearContext(a),a.save(),a.transform(l[0],l[1],l[2],l[3],l[4],l[5]),t.render(a),a.restore(),t.selectionBackgroundColor=o,T.util.isTransparent(a,e,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(t){return Array.isArray(this.selectionKey)?!!this.selectionKey.find(function(e){return!0===t[e]}):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),n=this._activeObject;return!e||e&&n&&i.length>1&&-1===i.indexOf(e)&&n!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&n&&n!==e},_shouldCenterTransform:function(t,e,i){var n;if(t)return"scale"===e||"scaleX"===e||"scaleY"===e||"resizing"===e?n=this.centeredScaling||t.centeredScaling:"rotate"===e&&(n=this.centeredRotation||t.centeredRotation),n?!i:i},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":"mr"!==e&&"tr"!==e&&"br"!==e||(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":"bl"!==e&&"mb"!==e&&"br"!==e||(i.y="top"),i},_getActionFromCorner:function(t,e,i,n){if(!e||!t)return"drag";var s=n.controls[e];return s.getActionName(i,s,n)},_setupCurrentTransform:function(t,i,n){if(i){var s=this.getPointer(t),r=i.__corner,a=i.controls[r],o=n&&r?a.getActionHandler(t,i,a):T.controlsUtils.dragHandler,l=this._getActionFromCorner(n,r,t,i),h=this._getOriginFromCorner(i,r),c=t[this.centeredKey],d={target:i,action:l,actionHandler:o,corner:r,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:s.x-i.left,offsetY:s.y-i.top,originX:h.x,originY:h.y,ex:s.x,ey:s.y,lastX:s.x,lastY:s.y,theta:e(i.angle),width:i.width*i.scaleX,shiftKey:t.shiftKey,altKey:c,original:T.util.saveObjectTransform(i)};this._shouldCenterTransform(i,l,c)&&(d.originX="center",d.originY="center"),d.original.originX=h.x,d.original.originY=h.y,this._currentTransform=d,this._beforeTransform(t)}},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var e=this._groupSelector,i=new T.Point(e.ex,e.ey),n=T.util.transformPoint(i,this.viewportTransform),s=new T.Point(e.ex+e.left,e.ey+e.top),r=T.util.transformPoint(s,this.viewportTransform),a=Math.min(n.x,r.x),o=Math.min(n.y,r.y),l=Math.max(n.x,r.x),h=Math.max(n.y,r.y),c=this.selectionLineWidth/2;this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(a,o,l-a,h-o)),this.selectionLineWidth&&this.selectionBorderColor&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,a+=c,o+=c,l-=c,h-=c,T.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(a,o,l-a,h-o))},findTarget:function(t,e){if(!this.skipTargetFind){var n,s,r=this.getPointer(t,!0),a=this._activeObject,o=this.getActiveObjects(),l=i(t),h=o.length>1&&!e||1===o.length;if(this.targets=[],h&&a._findTargetCorner(r,l))return a;if(o.length>1&&!e&&a===this._searchPossibleTargets([a],r))return a;if(1===o.length&&a===this._searchPossibleTargets([a],r)){if(!this.preserveObjectStacking)return a;n=a,s=this.targets,this.targets=[]}var c=this._searchPossibleTargets(this._objects,r);return t[this.altSelectionKey]&&c&&n&&c!==n&&(c=n,this.targets=s),c}},_checkTarget:function(t,e,i){if(e&&e.visible&&e.evented&&e.containsPoint(t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;if(!this.isTargetTransparent(e,i.x,i.y))return!0}},_searchPossibleTargets:function(t,e){for(var i,n,s=t.length;s--;){var r=t[s],a=r.group?this._normalizePointer(r.group,e):e;if(this._checkTarget(a,r,e)){(i=t[s]).subTargetCheck&&i instanceof T.Group&&(n=this._searchPossibleTargets(i._objects,e))&&this.targets.push(n);break}}return i},restorePointerVpt:function(t){return T.util.transformPoint(t,T.util.invertTransform(this.viewportTransform))},getPointer:function(e,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var n,s=t(e),r=this.upperCanvasEl,a=r.getBoundingClientRect(),o=a.width||0,l=a.height||0;o&&l||("top"in a&&"bottom"in a&&(l=Math.abs(a.top-a.bottom)),"right"in a&&"left"in a&&(o=Math.abs(a.right-a.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s));var h=this.getRetinaScaling();return 1!==h&&(s.x/=h,s.y/=h),n=0===o||0===l?{width:1,height:1}:{width:r.width/o,height:r.height/l},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),e=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),T.util.addClass(i,"upper-canvas "+t),this.wrapperEl.appendChild(i),this._copyCanvasStyle(e,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=T.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),T.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),T.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||t.height;T.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=e,t.height=i,T.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),t===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,e){var i=!1,n=this.getActiveObjects(),s=[],r=[];t.forEach(function(t){-1===n.indexOf(t)&&(i=!0,t.fire("deselected",{e,target:t}),r.push(t))}),n.forEach(function(n){-1===t.indexOf(n)&&(i=!0,n.fire("selected",{e,target:n}),s.push(n))}),t.length>0&&n.length>0?i&&this.fire("selection:updated",{e,selected:s,deselected:r}):n.length>0?this.fire("selection:created",{e,selected:s}):t.length>0&&this.fire("selection:cleared",{e,deselected:r})},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject!==t&&!!this._discardActiveObject(e,t)&&!t.onSelect({e})&&(this._activeObject=t,!0)},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects(),i=this.getActiveObject();return e.length&&this.fire("before:selection:cleared",{target:i,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(t){T.util.cleanUpJsdomNode(this[t]),this[t]=void 0}.bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,T.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var n=this._realizeGroupTransformOnObject(t),s=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,n),s},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach(function(i){e[i]=t[i]}),T.util.addTransformToObject(t,this._activeObject.calcOwnMatrix()),e}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var n=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,n)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),T.StaticCanvas.prototype.setViewportTransform.call(this,t)}}),T.StaticCanvas)"prototype"!==n&&(T.Canvas[n]=T.StaticCanvas[n])}(),function(){var t=T.util.addListener,e=T.util.removeListener,i={passive:!1};function n(t,e){return t.button&&t.button===e-1}T.util.object.extend(T.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(t,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(t,e){var n=this.upperCanvasEl,s=this._getEventPrefix();t(T.window,"resize",this._onResize),t(n,s+"down",this._onMouseDown),t(n,s+"move",this._onMouseMove,i),t(n,s+"out",this._onMouseOut),t(n,s+"enter",this._onMouseEnter),t(n,"wheel",this._onMouseWheel),t(n,"contextmenu",this._onContextMenu),t(n,"dblclick",this._onDoubleClick),t(n,"dragover",this._onDragOver),t(n,"dragenter",this._onDragEnter),t(n,"dragleave",this._onDragLeave),t(n,"drop",this._onDrop),this.enablePointerEvents||t(n,"touchstart",this._onTouchStart,i),"undefined"!=typeof eventjs&&e in eventjs&&(eventjs[e](n,"gesture",this._onGesture),eventjs[e](n,"drag",this._onDrag),eventjs[e](n,"orientation",this._onOrientationChange),eventjs[e](n,"shake",this._onShake),eventjs[e](n,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(e,"remove");var t=this._getEventPrefix();e(T.document,t+"up",this._onMouseUp),e(T.document,"touchend",this._onTouchEnd,i),e(T.document,t+"move",this._onMouseMove,i),e(T.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t});var i=this;this._hoveredTargets.forEach(function(n){i.fire("mouse:out",{target:e,e:t}),n&&e.fire("mouseout",{e:t})}),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach(function(t){t.isEditing&&t.hiddenTextarea.focus()})},_onMouseEnter:function(t){this._currentTransform||this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onDragOver:function(t){t.preventDefault();var e=this._simpleEventHandler("dragover",t);this._fireEnterLeaveEvents(e,t)},_onDrop:function(t){return this._simpleEventHandler("drop:before",t),this._simpleEventHandler("drop",t)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"dblclick"),this._resetTransformEventData(t)},getPointerId:function(t){var e=t.changedTouches;return e?e[0]&&e[0].identifier:this.enablePointerEvents?t.pointerId:-1},_isMainEvent:function(t){return!0===t.isPrimary||!1!==t.isPrimary&&("touchend"===t.type&&0===t.touches.length||!t.changedTouches||t.changedTouches[0].identifier===this.mainTouchId)},_onTouchStart:function(n){n.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(n)),this.__onMouseDown(n),this._resetTransformEventData();var s=this.upperCanvasEl,r=this._getEventPrefix();t(T.document,"touchend",this._onTouchEnd,i),t(T.document,"touchmove",this._onMouseMove,i),e(s,r+"down",this._onMouseDown)},_onMouseDown:function(n){this.__onMouseDown(n),this._resetTransformEventData();var s=this.upperCanvasEl,r=this._getEventPrefix();e(s,r+"move",this._onMouseMove,i),t(T.document,r+"up",this._onMouseUp),t(T.document,r+"move",this._onMouseMove,i)},_onTouchEnd:function(n){if(!(n.touches.length>0)){this.__onMouseUp(n),this._resetTransformEventData(),this.mainTouchId=null;var s=this._getEventPrefix();e(T.document,"touchend",this._onTouchEnd,i),e(T.document,"touchmove",this._onMouseMove,i);var r=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(function(){t(r.upperCanvasEl,s+"down",r._onMouseDown),r._willAddMouseDown=0},400)}},_onMouseUp:function(n){this.__onMouseUp(n),this._resetTransformEventData();var s=this.upperCanvasEl,r=this._getEventPrefix();this._isMainEvent(n)&&(e(T.document,r+"up",this._onMouseUp),e(T.document,r+"move",this._onMouseMove,i),t(s,r+"move",this._onMouseMove,i))},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t){var e=this._activeObject;return!!(!!e!=!!t||e&&t&&e!==t)||(e&&e.isEditing,!1)},__onMouseUp:function(t){var e,i=this._currentTransform,s=this._groupSelector,r=!1,a=!s||0===s.left&&0===s.top;if(this._cacheTransformEventData(t),e=this._target,this._handleEvent(t,"up:before"),n(t,3))this.fireRightClick&&this._handleEvent(t,"up",3,a);else{if(n(t,2))return this.fireMiddleClick&&this._handleEvent(t,"up",2,a),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(t);else if(this._isMainEvent(t)){if(i&&(this._finalizeCurrentTransform(t),r=i.actionPerformed),!a){var o=e===this._activeObject;this._maybeGroupObjects(t),r||(r=this._shouldRender(e)||!o&&e===this._activeObject)}var l,h;if(e){if(l=e._findTargetCorner(this.getPointer(t,!0),T.util.isTouchEvent(t)),e.selectable&&e!==this._activeObject&&"up"===e.activeOn)this.setActiveObject(e,t),r=!0;else{var c=e.controls[l],d=c&&c.getMouseUpHandler(t,e,c);d&&d(t,i,(h=this.getPointer(t)).x,h.y)}e.isMoving=!1}if(i&&(i.target!==e||i.corner!==l)){var u=i.target&&i.target.controls[i.corner],f=u&&u.getMouseUpHandler(t,e,c);h=h||this.getPointer(t),f&&f(t,i,h.x,h.y)}this._setCursorFromEvent(t,e),this._handleEvent(t,"up",1,a),this._groupSelector=null,this._currentTransform=null,e&&(e.__corner=0),r?this.requestRenderAll():a||this.renderTop()}}},_simpleEventHandler:function(t,e){var i=this.findTarget(e),n=this.targets,s={e,target:i,subTargets:n};if(this.fire(t,s),i&&i.fire(t,s),!n)return i;for(var r=0;r<n.length;r++)n[r].fire(t,s);return i},_handleEvent:function(t,e,i,n){var s=this._target,r=this.targets||[],a={e:t,target:s,subTargets:r,button:i||1,isClick:n||!1,pointer:this._pointer,absolutePointer:this._absolutePointer,transform:this._currentTransform};"up"===e&&(a.currentTarget=this.findTarget(t),a.currentSubTargets=this.targets),this.fire("mouse:"+e,a),s&&s.fire("mouse"+e,a);for(var o=0;o<r.length;o++)r[o].fire("mouse"+e,a)},_finalizeCurrentTransform:function(t){var e=this._currentTransform,i=e.target,n={e:t,target:i,transform:e,action:e.action};i._scaling&&(i._scaling=!1),i.setCoords(),(e.actionPerformed||this.stateful&&i.hasStateChanged())&&this._fire("modified",n)},_onMouseDownInDrawingMode:function(t){this._isCurrentlyDrawing=!0,this.getActiveObject()&&this.discardActiveObject(t).requestRenderAll();var e=this.getPointer(t);this.freeDrawingBrush.onMouseDown(e,{e:t,pointer:e}),this._handleEvent(t,"down")},_onMouseMoveInDrawingMode:function(t){if(this._isCurrentlyDrawing){var e=this.getPointer(t);this.freeDrawingBrush.onMouseMove(e,{e:t,pointer:e})}this.setCursor(this.freeDrawingCursor),this._handleEvent(t,"move")},_onMouseUpInDrawingMode:function(t){var e=this.getPointer(t);this._isCurrentlyDrawing=this.freeDrawingBrush.onMouseUp({e:t,pointer:e}),this._handleEvent(t,"up")},__onMouseDown:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"down:before");var e=this._target;if(n(t,3))this.fireRightClick&&this._handleEvent(t,"down",3);else if(n(t,2))this.fireMiddleClick&&this._handleEvent(t,"down",2);else if(this.isDrawingMode)this._onMouseDownInDrawingMode(t);else if(this._isMainEvent(t)&&!this._currentTransform){var i=this._pointer;this._previousPointer=i;var s=this._shouldRender(e),r=this._shouldGroup(t,e);if(this._shouldClearSelection(t,e)?this.discardActiveObject(t):r&&(this._handleGrouping(t,e),e=this._activeObject),!this.selection||e&&(e.selectable||e.isEditing||e===this._activeObject)||(this._groupSelector={ex:this._absolutePointer.x,ey:this._absolutePointer.y,top:0,left:0}),e){var a=e===this._activeObject;e.selectable&&"down"===e.activeOn&&this.setActiveObject(e,t);var o=e._findTargetCorner(this.getPointer(t,!0),T.util.isTouchEvent(t));if(e.__corner=o,e===this._activeObject&&(o||!r)){this._setupCurrentTransform(t,e,a);var l=e.controls[o],h=(i=this.getPointer(t),l&&l.getMouseDownHandler(t,e,l));h&&h(t,this._currentTransform,i.x,i.y)}}this._handleEvent(t,"down"),(s||r)&&this.requestRenderAll()}},_resetTransformEventData:function(){this._target=null,this._pointer=null,this._absolutePointer=null},_cacheTransformEventData:function(t){this._resetTransformEventData(),this._pointer=this.getPointer(t,!0),this._absolutePointer=this.restorePointerVpt(this._pointer),this._target=this._currentTransform?this._currentTransform.target:this.findTarget(t)||null},_beforeTransform:function(t){var e=this._currentTransform;this.stateful&&e.target.saveState(),this.fire("before:transform",{e:t,transform:e})},__onMouseMove:function(t){var e,i;if(this._handleEvent(t,"move:before"),this._cacheTransformEventData(t),this.isDrawingMode)this._onMouseMoveInDrawingMode(t);else if(this._isMainEvent(t)){var n=this._groupSelector;n?(i=this._absolutePointer,n.left=i.x-n.ex,n.top=i.y-n.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t)||null,this._setCursorFromEvent(t,e),this._fireOverOutEvents(e,t)),this._handleEvent(t,"move"),this._resetTransformEventData()}},_fireOverOutEvents:function(t,e){var i=this._hoveredTarget,n=this._hoveredTargets,s=this.targets,r=Math.max(n.length,s.length);this.fireSyntheticInOutEvents(t,e,{oldTarget:i,evtOut:"mouseout",canvasEvtOut:"mouse:out",evtIn:"mouseover",canvasEvtIn:"mouse:over"});for(var a=0;a<r;a++)this.fireSyntheticInOutEvents(s[a],e,{oldTarget:n[a],evtOut:"mouseout",evtIn:"mouseover"});this._hoveredTarget=t,this._hoveredTargets=this.targets.concat()},_fireEnterLeaveEvents:function(t,e){var i=this._draggedoverTarget,n=this._hoveredTargets,s=this.targets,r=Math.max(n.length,s.length);this.fireSyntheticInOutEvents(t,e,{oldTarget:i,evtOut:"dragleave",evtIn:"dragenter"});for(var a=0;a<r;a++)this.fireSyntheticInOutEvents(s[a],e,{oldTarget:n[a],evtOut:"dragleave",evtIn:"dragenter"});this._draggedoverTarget=t},fireSyntheticInOutEvents:function(t,e,i){var n,s,r,a=i.oldTarget,o=a!==t,l=i.canvasEvtIn,h=i.canvasEvtOut;o&&(n={e,target:t,previousTarget:a},s={e,target:a,nextTarget:t}),r=t&&o,a&&o&&(h&&this.fire(h,s),a.fire(i.evtOut,s)),r&&(l&&this.fire(l,n),t.fire(i.evtIn,n))},__onMouseWheel:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"wheel"),this._resetTransformEventData()},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._performTransformAction(t,i,e),i.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(t,e,i){var n=i.x,s=i.y,r=e.action,a=!1,o=e.actionHandler;o&&(a=o(t,e,n,s)),"drag"===r&&a&&(e.target.isMoving=!0,this.setCursor(e.target.moveCursor||this.moveCursor)),e.actionPerformed=e.actionPerformed||a},_fire:T.controlsUtils.fireEvent,_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,n=this._activeObject&&"activeSelection"===this._activeObject.type?this._activeObject:null,s=(!n||!n.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));s?this.setCursor(this.getCornerCursor(s,e,t)):(e.subTargetCheck&&this.targets.concat().reverse().map(function(t){i=t.hoverCursor||i}),this.setCursor(i))},getCornerCursor:function(t,e,i){var n=e.controls[t];return n.cursorStyleHandler(i,n,e)}})}(),v=Math.min,y=Math.max,T.util.object.extend(T.Canvas.prototype,{_shouldGroup:function(t,e){var i=this._activeObject;return i&&this._isSelectionKeyPressed(t)&&e&&e.selectable&&this.selection&&(i!==e||"activeSelection"===i.type)&&!e.onSelect({e:t})},_handleGrouping:function(t,e){var i=this._activeObject;i.__corner||(e!==i||(e=this.findTarget(t,!0))&&e.selectable)&&(i&&"activeSelection"===i.type?this._updateActiveSelection(e,t):this._createActiveSelection(e,t))},_updateActiveSelection:function(t,e){var i=this._activeObject,n=i._objects.slice(0);i.contains(t)?(i.removeWithUpdate(t),this._hoveredTarget=t,this._hoveredTargets=this.targets.concat(),1===i.size()&&this._setActiveObject(i.item(0),e)):(i.addWithUpdate(t),this._hoveredTarget=i,this._hoveredTargets=this.targets.concat()),this._fireSelectionEvents(n,e)},_createActiveSelection:function(t,e){var i=this.getActiveObjects(),n=this._createGroup(t);this._hoveredTarget=n,this._setActiveObject(n,e),this._fireSelectionEvents(i,e)},_createGroup:function(t){var e=this._objects,i=e.indexOf(this._activeObject)<e.indexOf(t)?[this._activeObject,t]:[t,this._activeObject];return this._activeObject.isEditing&&this._activeObject.exitEditing(),new T.ActiveSelection(i,{canvas:this})},_groupSelectedObjects:function(t){var e,i=this._collectObjects(t);1===i.length?this.setActiveObject(i[0],t):i.length>1&&(e=new T.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_collectObjects:function(t){for(var e,i=[],n=this._groupSelector.ex,s=this._groupSelector.ey,r=n+this._groupSelector.left,a=s+this._groupSelector.top,o=new T.Point(v(n,r),v(s,a)),l=new T.Point(y(n,r),y(s,a)),h=!this.selectionFullyContained,c=n===r&&s===a,d=this._objects.length;d--&&!((e=this._objects[d])&&e.selectable&&e.visible&&(h&&e.intersectsWithRect(o,l,!0)||e.isContainedWithinRect(o,l,!0)||h&&e.containsPoint(o,null,!0)||h&&e.containsPoint(l,null,!0))&&(i.push(e),c)););return i.length>1&&(i=i.filter(function(e){return!e.onSelect({e:t})})),i},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),this.setCursor(this.defaultCursor),this._groupSelector=null}}),T.util.object.extend(T.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,n=(t.multiplier||1)*(t.enableRetinaScaling?this.getRetinaScaling():1),s=this.toCanvasElement(n,t);return T.util.toDataURL(s,e,i)},toCanvasElement:function(t,e){t=t||1;var i=((e=e||{}).width||this.width)*t,n=(e.height||this.height)*t,s=this.getZoom(),r=this.width,a=this.height,o=s*t,l=this.viewportTransform,h=(l[4]-(e.left||0))*t,c=(l[5]-(e.top||0))*t,d=this.interactive,u=[o,0,0,o,h,c],f=this.enableRetinaScaling,g=T.util.createCanvasElement(),m=this.contextTop;return g.width=i,g.height=n,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=u,this.width=i,this.height=n,this.calcViewportBoundaries(),this.renderCanvas(g.getContext("2d"),this._objects),this.viewportTransform=l,this.width=r,this.height=a,this.calcViewportBoundaries(),this.interactive=d,this.enableRetinaScaling=f,this.contextTop=m,g}}),T.util.object.extend(T.StaticCanvas.prototype,{loadFromJSON:function(t,e,i){if(t){var n="string"==typeof t?JSON.parse(t):T.util.object.clone(t),s=this,r=n.clipPath,a=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete n.clipPath,this._enlivenObjects(n.objects,function(t){s.clear(),s._setBgOverlay(n,function(){r?s._enlivenObjects([r],function(i){s.clipPath=i[0],s.__setupCanvas.call(s,n,t,a,e)}):s.__setupCanvas.call(s,n,t,a,e)})},i),this}},__setupCanvas:function(t,e,i,n){var s=this;e.forEach(function(t,e){s.insertAt(t,e)}),this.renderOnAddRemove=i,delete t.objects,delete t.backgroundImage,delete t.overlayImage,delete t.background,delete t.overlay,this._setOptions(t),this.renderAll(),n&&n()},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(t.backgroundImage||t.overlayImage||t.background||t.overlay){var n=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,n),this.__setBgOverlay("overlayImage",t.overlayImage,i,n),this.__setBgOverlay("backgroundColor",t.background,i,n),this.__setBgOverlay("overlayColor",t.overlay,i,n)}else e&&e()},__setBgOverlay:function(t,e,i,n){var s=this;if(!e)return i[t]=!0,void(n&&n());"backgroundImage"===t||"overlayImage"===t?T.util.enlivenObjects([e],function(e){s[t]=e[0],i[t]=!0,n&&n()}):this["set"+T.util.string.capitalize(t,!0)](e,function(){i[t]=!0,n&&n()})},_enlivenObjects:function(t,e,i){t&&0!==t.length?T.util.enlivenObjects(t,function(t){e&&e(t)},null,i):e&&e([])},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(n){i(n.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=T.util.createCanvasElement();e.width=this.width,e.height=this.height;var i=new T.Canvas(e);this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,n=e.util.object.clone,s=e.util.toFixed,r=e.util.string.capitalize,a=e.util.degreesToRadians,o=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:o,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,n=t.width,s=t.height,r=e.maxCacheSideLimit,a=e.minCacheSideLimit;if(n<=r&&s<=r&&n*s<=i)return n<a&&(t.width=a),s<a&&(t.height=a),t;var o=n/s,l=e.util.limitDimsByArea(o,i),h=e.util.capValue,c=h(a,l.x,r),d=h(a,l.y,r);return n>c&&(t.zoomX/=n/c,t.width=c,t.capped=!0),s>d&&(t.zoomY/=s/d,t.height=d,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.getTotalObjectScaling(),e=this._getTransformedDimensions(0,0),i=e.x*t.scaleX/this.scaleX,n=e.y*t.scaleY/this.scaleY;return{width:i+2,height:n+2,zoomX:t.scaleX,zoomY:t.scaleY,x:i,y:n}},_updateCacheCanvas:function(){var t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){var i=t._currentTransform.target,n=t._currentTransform.action;if(this===i&&n.slice&&"scale"===n.slice(0,5))return!1}var s,r,a=this._cacheCanvas,o=this._limitCacheSize(this._getCacheCanvasDimensions()),l=e.minCacheSideLimit,h=o.width,c=o.height,d=o.zoomX,u=o.zoomY,f=h!==this.cacheWidth||c!==this.cacheHeight,g=this.zoomX!==d||this.zoomY!==u,m=f||g,p=0,_=0,v=!1;if(f){var y=this._cacheCanvas.width,w=this._cacheCanvas.height,C=h>y||c>w;v=C||(h<.9*y||c<.9*w)&&y>l&&w>l,C&&!o.capped&&(h>l||c>l)&&(p=.1*h,_=.1*c)}return this instanceof e.Text&&this.path&&(m=!0,v=!0,p+=this.getHeightOfLine(0)*this.zoomX,_+=this.getHeightOfLine(0)*this.zoomY),!!m&&(v?(a.width=Math.ceil(h+p),a.height=Math.ceil(c+_)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,a.width,a.height)),s=o.x/2,r=o.y/2,this.cacheTranslationX=Math.round(a.width/2-s)+s,this.cacheTranslationY=Math.round(a.height/2-r)+r,this.cacheWidth=h,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(d,u),this.zoomX=d,this.zoomY=u,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t){var e=this.group&&!this.group._transformDone||this.group&&this.canvas&&t===this.canvas.contextTop,i=this.calcTransformMatrix(!e);t.transform(i[0],i[1],i[2],i[3],i[4],i[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,version:e.version,originX:this.originX,originY:this.originY,left:s(this.left,i),top:s(this.top,i),width:s(this.width,i),height:s(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:s(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:s(this.strokeMiterLimit,i),scaleX:s(this.scaleX,i),scaleY:s(this.scaleY,i),angle:s(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:s(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:s(this.skewX,i),skewY:s(this.skewY,i)};return this.clipPath&&!this.clipPath.excludeFromExport&&(n.clipPath=this.clipPath.toObject(t),n.clipPath.inverted=this.clipPath.inverted,n.clipPath.absolutePositioned=this.clipPath.absolutePositioned),e.util.populateWithProperties(this,n,t),this.includeDefaultValues||(n=this._removeDefaultValues(n)),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype;return i.stateProperties.forEach(function(e){"left"!==e&&"top"!==e&&(t[e]===i[e]&&delete t[e],Array.isArray(t[e])&&Array.isArray(i[e])&&0===t[e].length&&0===i[e].length&&delete t[e])}),t},toString:function(){return"#<fabric."+r(this.type)+">"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var t=e.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(t.scaleX),scaleY:Math.abs(t.scaleY)}},getTotalObjectScaling:function(){var t=this.getObjectScaling(),e=t.scaleX,i=t.scaleY;if(this.canvas){var n=this.canvas.getZoom(),s=this.canvas.getRetinaScaling();e*=n*s,i*=n*s}return{scaleX:e,scaleY:i}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var n="scaleX"===t||"scaleY"===t,s=this[t]!==i,r=!1;return n&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,s&&(r=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,r&&this.group.set("dirty",!0)):r&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),t.restore())},renderCache:function(t){t=t||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,t.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!("stroke"!==this.paintFirst||!this.hasFill()||!this.hasStroke()||"object"!=typeof this.shadow)||!!this.clipPath},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(t,i){if(t.save(),i.inverted?t.globalCompositeOperation="destination-out":t.globalCompositeOperation="destination-in",i.absolutePositioned){var n=e.util.invertTransform(this.calcTransformMatrix());t.transform(n[0],n[1],n[2],n[3],n[4],n[5])}i.transform(t),t.scale(1/i.zoomX,1/i.zoomY),t.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),t.restore()},drawObject:function(t,e){var i=this.fill,n=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):this._renderBackground(t),this._render(t),this._drawClipPath(t,this.clipPath),this.fill=i,this.stroke=n},_drawClipPath:function(t,e){e&&(e.canvas=this.canvas,e.shouldCache(),e._transformDone=!0,e.renderCache({forClipping:!0}),this.drawClipPathOnCache(t,e))},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){var i=e.stroke;i&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(t,i):(t.strokeStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,i)):t.strokeStyle=e.stroke)},_setFillStyles:function(t,e){var i=e.fill;i&&(i.toLive?(t.fillStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,e.fill)):t.fillStyle=i)},_setClippingProperties:function(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"},_setLineDash:function(t,e){e&&0!==e.length&&(1&e.length&&e.push.apply(e,e),t.setLineDash(e))},_renderControls:function(t,i){var n,s,r,o=this.getViewportTransform(),l=this.calcTransformMatrix();s=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,r=void 0!==i.hasControls?i.hasControls:this.hasControls,l=e.util.multiplyTransformMatrices(o,l),n=e.util.qrDecompose(l),t.save(),t.translate(n.translateX,n.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(n.angle-=180),t.rotate(a(this.group?n.angle:this.angle)),i.forActiveSelection||this.group?s&&this.drawBordersInGroup(t,n,i):s&&this.drawBorders(t,i),r&&this.drawControls(t,i),t.restore()},_setShadow:function(t){if(this.shadow){var i,n=this.shadow,s=this.canvas,r=s&&s.viewportTransform[0]||1,a=s&&s.viewportTransform[3]||1;i=n.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),s&&s._isRetinaScaling()&&(r*=e.devicePixelRatio,a*=e.devicePixelRatio),t.shadowColor=n.color,t.shadowBlur=n.blur*e.browserShadowBlurConstant*(r+a)*(i.scaleX+i.scaleY)/4,t.shadowOffsetX=n.offsetX*r*i.scaleX,t.shadowOffsetY=n.offsetY*a*i.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,n=-this.width/2+e.offsetX||0,s=-this.height/2+e.offsetY||0;return"percentage"===e.gradientUnits?t.transform(this.width,0,0,this.height,n,s):t.transform(1,0,0,1,n,s),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:n,offsetY:s}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_render:function(){},_renderFill:function(t){this.fill&&(t.save(),this._setFillStyles(t,this),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform&&this.group){var e=this.getObjectScaling();t.scale(1/e.scaleX,1/e.scaleY)}else this.strokeUniform&&t.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(t,this.strokeDashArray),this._setStrokeStyles(t,this),t.stroke(),t.restore()}},_applyPatternForTransformedGradient:function(t,i){var n,s=this._limitCacheSize(this._getCacheCanvasDimensions()),r=e.util.createCanvasElement(),a=this.canvas.getRetinaScaling(),o=s.x/this.scaleX/a,l=s.y/this.scaleY/a;r.width=o,r.height=l,(n=r.getContext("2d")).beginPath(),n.moveTo(0,0),n.lineTo(o,0),n.lineTo(o,l),n.lineTo(0,l),n.closePath(),n.translate(o/2,l/2),n.scale(s.zoomX/this.scaleX/a,s.zoomY/this.scaleY/a),this._applyPatternGradientTransform(n,i),n.fillStyle=i.toLive(t),n.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(a*this.scaleX/s.zoomX,a*this.scaleY/s.zoomY),t.strokeStyle=n.createPattern(r,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY),this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"center","center")},clone:function(t,i){var n=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(n,t):e.Object._fromObject("Object",n,t)},cloneAsImage:function(t,i){var n=this.toCanvasElement(i);return t&&t(new e.Image(n)),this},toCanvasElement:function(t){t||(t={});var i=e.util,n=i.saveObjectTransform(this),s=this.group,r=this.shadow,a=Math.abs,o=(t.multiplier||1)*(t.enableRetinaScaling?e.devicePixelRatio:1);delete this.group,t.withoutTransform&&i.resetObjectTransform(this),t.withoutShadow&&(this.shadow=null);var l,h,c,d,u=e.util.createCanvasElement(),f=this.getBoundingRect(!0,!0),g=this.shadow,m={x:0,y:0};g&&(h=g.blur,l=g.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),m.x=2*Math.round(a(g.offsetX)+h)*a(l.scaleX),m.y=2*Math.round(a(g.offsetY)+h)*a(l.scaleY)),c=f.width+m.x,d=f.height+m.y,u.width=Math.ceil(c),u.height=Math.ceil(d);var p=new e.StaticCanvas(u,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===t.format&&(p.backgroundColor="#fff"),this.setPositionByOrigin(new e.Point(p.width/2,p.height/2),"center","center");var _=this.canvas;p.add(this);var v=p.toCanvasElement(o||1,t);return this.shadow=r,this.set("canvas",_),s&&(this.group=s),this.set(n).setCoords(),p._objects=[],p.dispose(),p=null,v},toDataURL:function(t){return t||(t={}),e.util.toDataURL(this.toCanvasElement(t),t.format||"png",t.quality||1)},isType:function(t){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},rotate:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var n=new e.Point(i.x,i.y),s=this._getLeftTopCoords();return this.angle&&(n=e.util.rotatePoint(n,s,a(-this.angle))),{x:n.x-s.x,y:n.y-s.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){e.runningAnimations&&e.runningAnimations.cancelByTarget(this)}}),e.util.createAccessors&&e.util.createAccessors(e.Object),i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.ENLIVEN_PROPS=["clipPath"],e.Object._fromObject=function(t,i,s,r){var a=e[t];i=n(i,!0),e.util.enlivenPatterns([i.fill,i.stroke],function(t){void 0!==t[0]&&(i.fill=t[0]),void 0!==t[1]&&(i.stroke=t[1]),e.util.enlivenObjectEnlivables(i,i,function(){var t=r?new a(i[r],i):new a(i);s&&s(t)})})},e.Object.__uid=0)}(e),w=T.util.degreesToRadians,C={left:-.5,center:0,right:.5},E={top:-.5,center:0,bottom:.5},T.util.object.extend(T.Object.prototype,{translateToGivenOrigin:function(t,e,i,n,s){var r,a,o,l=t.x,h=t.y;return"string"==typeof e?e=C[e]:e-=.5,"string"==typeof n?n=C[n]:n-=.5,"string"==typeof i?i=E[i]:i-=.5,"string"==typeof s?s=E[s]:s-=.5,a=s-i,((r=n-e)||a)&&(o=this._getTransformedDimensions(),l=t.x+r*o.x,h=t.y+a*o.y),new T.Point(l,h)},translateToCenterPoint:function(t,e,i){var n=this.translateToGivenOrigin(t,e,i,"center","center");return this.angle?T.util.rotatePoint(n,t,w(this.angle)):n},translateToOriginPoint:function(t,e,i){var n=this.translateToGivenOrigin(t,"center","center",e,i);return this.angle?T.util.rotatePoint(n,t,w(this.angle)):n},getCenterPoint:function(){var t=new T.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(t,e,i){var n,s,r=this.getCenterPoint();return n=void 0!==e&&void 0!==i?this.translateToGivenOrigin(r,"center","center",e,i):new T.Point(this.left,this.top),s=new T.Point(t.x,t.y),this.angle&&(s=T.util.rotatePoint(s,r,-w(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var n=this.translateToCenterPoint(t,e,i),s=this.translateToOriginPoint(n,this.originX,this.originY);this.set("left",s.x),this.set("top",s.y)},adjustPosition:function(t){var e,i,n=w(this.angle),s=this.getScaledWidth(),r=T.util.cos(n)*s,a=T.util.sin(n)*s;e="string"==typeof this.originX?C[this.originX]:this.originX-.5,i="string"==typeof t?C[t]:t-.5,this.left+=r*(i-e),this.top+=a*(i-e),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}}),function(){var t=T.util,e=t.degreesToRadians,i=t.multiplyTransformMatrices,n=t.transformPoint;t.object.extend(T.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(t,e){return e?t?this.calcACoords():this.calcLineCoords():(this.aCoords&&this.lineCoords||this.setCoords(!0),t?this.aCoords:this.lineCoords)},getCoords:function(t,e){return i=this._getCoords(t,e),[new T.Point(i.tl.x,i.tl.y),new T.Point(i.tr.x,i.tr.y),new T.Point(i.br.x,i.br.y),new T.Point(i.bl.x,i.bl.y)];var i},intersectsWithRect:function(t,e,i,n){var s=this.getCoords(i,n);return"Intersection"===T.Intersection.intersectPolygonRectangle(s,t,e).status},intersectsWithObject:function(t,e,i){return"Intersection"===T.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i)).status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var n=this.getCoords(e,i),s=e?t.aCoords:t.lineCoords,r=0,a=t._getImageLines(s);r<4;r++)if(!t.containsPoint(n[r],a))return!1;return!0},isContainedWithinRect:function(t,e,i,n){var s=this.getBoundingRect(i,n);return s.left>=t.x&&s.left+s.width<=e.x&&s.top>=t.y&&s.top+s.height<=e.y},containsPoint:function(t,e,i,n){var s=this._getCoords(i,n),r=(e=e||this._getImageLines(s),this._findCrossPoints(t,e));return 0!==r&&r%2==1},isOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.getCoords(!0,t).some(function(t){return t.x<=i.x&&t.x>=e.x&&t.y<=i.y&&t.y>=e.y})||!!this.intersectsWithRect(e,i,!0,t)||this._containsCenterOfCanvas(e,i,t)},_containsCenterOfCanvas:function(t,e,i){var n={x:(t.x+e.x)/2,y:(t.y+e.y)/2};return!!this.containsPoint(n,null,!0,i)},isPartiallyOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.intersectsWithRect(e,i,!0,t)||this.getCoords(!0,t).every(function(t){return(t.x>=i.x||t.x<=e.x)&&(t.y>=i.y||t.y<=e.y)})&&this._containsCenterOfCanvas(e,i,t)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,n,s,r=0;for(var a in e)if(!((s=e[a]).o.y<t.y&&s.d.y<t.y||s.o.y>=t.y&&s.d.y>=t.y||(s.o.x===s.d.x&&s.o.x>=t.x?n=s.o.x:(i=(s.d.y-s.o.y)/(s.d.x-s.o.x),n=-(t.y-0*t.x-(s.o.y-i*s.o.x))/(0-i)),n>=t.x&&(r+=1),2!==r)))break;return r},getBoundingRect:function(e,i){var n=this.getCoords(e,i);return t.makeBoundingBoxFromPoints(n)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)<this.minScaleLimit?t<0?-this.minScaleLimit:this.minScaleLimit:0===t?1e-4:t},scale:function(t){return this._set("scaleX",t),this._set("scaleY",t),this.setCoords()},scaleToWidth:function(t,e){var i=this.getBoundingRect(e).width/this.getScaledWidth();return this.scale(t/this.width/i)},scaleToHeight:function(t,e){var i=this.getBoundingRect(e).height/this.getScaledHeight();return this.scale(t/this.height/i)},calcLineCoords:function(){var i=this.getViewportTransform(),s=this.padding,r=e(this.angle),a=t.cos(r)*s,o=t.sin(r)*s,l=a+o,h=a-o,c=this.calcACoords(),d={tl:n(c.tl,i),tr:n(c.tr,i),bl:n(c.bl,i),br:n(c.br,i)};return s&&(d.tl.x-=h,d.tl.y-=l,d.tr.x+=l,d.tr.y-=h,d.bl.x-=l,d.bl.y+=h,d.br.x+=h,d.br.y+=l),d},calcOCoords:function(){var t=this._calcRotateMatrix(),e=this._calcTranslateMatrix(),n=this.getViewportTransform(),s=i(n,e),r=i(s,t),a=(r=i(r,[1/n[0],0,0,1/n[3],0,0]),this._calculateCurrentDimensions()),o={};return this.forEachControl(function(t,e,i){o[e]=t.positionHandler(a,r,i)}),o},calcACoords:function(){var t=this._calcRotateMatrix(),e=this._calcTranslateMatrix(),s=i(e,t),r=this._getTransformedDimensions(),a=r.x/2,o=r.y/2;return{tl:n({x:-a,y:-o},s),tr:n({x:a,y:-o},s),bl:n({x:-a,y:o},s),br:n({x:a,y:o},s)}},setCoords:function(t){return this.aCoords=this.calcACoords(),this.lineCoords=this.group?this.aCoords:this.calcLineCoords(),t||(this.oCoords=this.calcOCoords(),this._setCornerCoords&&this._setCornerCoords()),this},_calcRotateMatrix:function(){return t.calcRotateMatrix(this)},_calcTranslateMatrix:function(){var t=this.getCenterPoint();return[1,0,0,1,t.x,t.y]},transformMatrixKey:function(t){var e="_",i="";return!t&&this.group&&(i=this.group.transformMatrixKey(t)+e),i+this.top+e+this.left+e+this.scaleX+e+this.scaleY+e+this.skewX+e+this.skewY+e+this.angle+e+this.originX+e+this.originY+e+this.width+e+this.height+e+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(t){var e=this.calcOwnMatrix();if(t||!this.group)return e;var n=this.transformMatrixKey(t),s=this.matrixCache||(this.matrixCache={});return s.key===n?s.value:(this.group&&(e=i(this.group.calcTransformMatrix(!1),e)),s.key=n,s.value=e,e)},calcOwnMatrix:function(){var e=this.transformMatrixKey(!0),i=this.ownMatrixCache||(this.ownMatrixCache={});if(i.key===e)return i.value;var n=this._calcTranslateMatrix(),s={angle:this.angle,translateX:n[4],translateY:n[5],scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY};return i.key=e,i.value=t.composeMatrix(s),i.value},_getNonTransformedDimensions:function(){var t=this.strokeWidth;return{x:this.width+t,y:this.height+t}},_getTransformedDimensions:function(e,i){void 0===e&&(e=this.skewX),void 0===i&&(i=this.skewY);var n,s,r,a=0===e&&0===i;if(this.strokeUniform?(s=this.width,r=this.height):(s=(n=this._getNonTransformedDimensions()).x,r=n.y),a)return this._finalizeDimensions(s*this.scaleX,r*this.scaleY);var o=t.sizeAfterTransform(s,r,{scaleX:this.scaleX,scaleY:this.scaleY,skewX:e,skewY:i});return this._finalizeDimensions(o.x,o.y)},_finalizeDimensions:function(t,e){return this.strokeUniform?{x:t+this.strokeWidth,y:e+this.strokeWidth}:{x:t,y:e}},_calculateCurrentDimensions:function(){var t=this.getViewportTransform(),e=this._getTransformedDimensions();return n(e,t,!0).scalarAdd(2*this.padding)}})}(),T.util.object.extend(T.Object.prototype,{sendToBack:function(){return this.group?T.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas&&this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?T.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas&&this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?T.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas&&this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?T.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas&&this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group&&"activeSelection"!==this.group.type?T.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas&&this.canvas.moveTo(this,t),this}}),function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new T.Color(e),n=t+": "+i.toRgb()+"; ",s=i.getAlpha();return 1!==s&&(n+=t+"-opacity: "+s.toString()+"; "),n}return t+": none; "}var e=T.util.toFixed;T.util.object.extend(T.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule?this.fillRule:"nonzero",n=this.strokeWidth?this.strokeWidth:"0",s=this.strokeDashArray?this.strokeDashArray.join(" "):"none",r=this.strokeDashOffset?this.strokeDashOffset:"0",a=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",l=this.strokeMiterLimit?this.strokeMiterLimit:"4",h=void 0!==this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",d=e?"":this.getSvgFilter(),u=t("fill",this.fill);return[t("stroke",this.stroke),"stroke-width: ",n,"; ","stroke-dasharray: ",s,"; ","stroke-linecap: ",a,"; ","stroke-dashoffset: ",r,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",l,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",d,c].join("")},getSvgSpanStyles:function(e,i){var n="; ",s=e.fontFamily?"font-family: "+(-1===e.fontFamily.indexOf("'")&&-1===e.fontFamily.indexOf('"')?"'"+e.fontFamily+"'":e.fontFamily)+n:"",r=e.strokeWidth?"stroke-width: "+e.strokeWidth+n:"",a=e.fontSize?"font-size: "+e.fontSize+"px"+n:"",o=e.fontStyle?"font-style: "+e.fontStyle+n:"",l=e.fontWeight?"font-weight: "+e.fontWeight+n:"",h=e.fill?t("fill",e.fill):"",c=e.stroke?t("stroke",e.stroke):"",d=this.getSvgTextDecoration(e);return d&&(d="text-decoration: "+d+n),[c,r,s,a,o,l,d,h,e.deltaY?"baseline-shift: "+-e.deltaY+"; ":"",i?"white-space: pre; ":""].join("")},getSvgTextDecoration:function(t){return["overline","underline","line-through"].filter(function(e){return t[e.replace("-","")]}).join(" ")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgCommons:function(){return[this.id?'id="'+this.id+'" ':"",this.clipPath?'clip-path="url(#'+this.clipPath.clipPathId+')" ':""].join("")},getSvgTransform:function(t,e){var i=t?this.calcTransformMatrix():this.calcOwnMatrix();return'transform="'+T.util.matrixToSVG(i)+(e||"")+'" '},_setSVGBg:function(t){if(this.backgroundColor){var i=T.Object.NUM_FRACTION_DIGITS;t.push("\t\t<rect ",this._getFillAttributes(this.backgroundColor),' x="',e(-this.width/2,i),'" y="',e(-this.height/2,i),'" width="',e(this.width,i),'" height="',e(this.height,i),'"></rect>\n')}},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(t),{reviver:t})},toClipPathSVG:function(t){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(t),{reviver:t})},_createBaseClipPathSVGMarkup:function(t,e){var i=(e=e||{}).reviver,n=e.additionalTransform||"",s=[this.getSvgTransform(!0,n),this.getSvgCommons()].join(""),r=t.indexOf("COMMON_PARTS");return t[r]=s,i?i(t.join("")):t.join("")},_createBaseSVGMarkup:function(t,e){var i,n,s=(e=e||{}).noStyle,r=e.reviver,a=s?"":'style="'+this.getSvgStyles()+'" ',o=e.withShadow?'style="'+this.getSvgFilter()+'" ':"",l=this.clipPath,h=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",c=l&&l.absolutePositioned,d=this.stroke,u=this.fill,f=this.shadow,g=[],m=t.indexOf("COMMON_PARTS"),p=e.additionalTransform;return l&&(l.clipPathId="CLIPPATH_"+T.Object.__uid++,n='<clipPath id="'+l.clipPathId+'" >\n'+l.toClipPathSVG(r)+"</clipPath>\n"),c&&g.push("<g ",o,this.getSvgCommons()," >\n"),g.push("<g ",this.getSvgTransform(!1),c?"":o+this.getSvgCommons()," >\n"),i=[a,h,s?"":this.addPaintOrder()," ",p?'transform="'+p+'" ':""].join(""),t[m]=i,u&&u.toLive&&g.push(u.toSVG(this)),d&&d.toLive&&g.push(d.toSVG(this)),f&&g.push(f.toSVG(this)),l&&g.push(n),g.push(t.join("")),g.push("</g>\n"),c&&g.push("</g>\n"),r?r(g.join("")):g.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var t=T.util.object.extend,e="stateProperties";function i(e,i,n){var s={};n.forEach(function(t){s[t]=e[t]}),t(e[i],s,!0)}function n(t,e,i){if(t===e)return!0;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var s=0,r=t.length;s<r;s++)if(!n(t[s],e[s]))return!1;return!0}if(t&&"object"==typeof t){var a,o=Object.keys(t);if(!e||"object"!=typeof e||!i&&o.length!==Object.keys(e).length)return!1;for(s=0,r=o.length;s<r;s++)if("canvas"!==(a=o[s])&&"group"!==a&&!n(t[a],e[a]))return!1;return!0}}T.util.object.extend(T.Object.prototype,{hasStateChanged:function(t){var i="_"+(t=t||e);return Object.keys(this[i]).length<this[t].length||!n(this[i],this,!0)},saveState:function(t){var n=t&&t.propertySet||e,s="_"+n;return this[s]?(i(this,s,this[n]),t&&t.stateProperties&&i(this,s,t.stateProperties),this):this.setupState(t)},setupState:function(t){var i=(t=t||{}).propertySet||e;return t.propertySet=i,this["_"+i]={},this.saveState(t),this}})}(),function(){var t=T.util.degreesToRadians;T.util.object.extend(T.Object.prototype,{_findTargetCorner:function(t,e){if(!this.hasControls||this.group||!this.canvas||this.canvas._activeObject!==this)return!1;var i,n,s,r=t.x,a=t.y,o=Object.keys(this.oCoords),l=o.length-1;for(this.__corner=0;l>=0;l--)if(s=o[l],this.isControlVisible(s)&&(n=this._getImageLines(e?this.oCoords[s].touchCorner:this.oCoords[s].corner),0!==(i=this._findCrossPoints({x:r,y:a},n))&&i%2==1))return this.__corner=s,s;return!1},forEachControl:function(t){for(var e in this.controls)t(this.controls[e],e,this)},_setCornerCoords:function(){var t=this.oCoords;for(var e in t){var i=this.controls[e];t[e].corner=i.calcCornerCoords(this.angle,this.cornerSize,t[e].x,t[e].y,!1),t[e].touchCorner=i.calcCornerCoords(this.angle,this.touchCornerSize,t[e].x,t[e].y,!0)}},drawSelectionBackground:function(e){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;e.save();var i=this.getCenterPoint(),n=this._calculateCurrentDimensions(),s=this.canvas.viewportTransform;return e.translate(i.x,i.y),e.scale(1/s[0],1/s[3]),e.rotate(t(this.angle)),e.fillStyle=this.selectionBackgroundColor,e.fillRect(-n.x/2,-n.y/2,n.x,n.y),e.restore(),this},drawBorders:function(t,e){e=e||{};var i=this._calculateCurrentDimensions(),n=this.borderScaleFactor,s=i.x+n,r=i.y+n,a=void 0!==e.hasControls?e.hasControls:this.hasControls,o=!1;return t.save(),t.strokeStyle=e.borderColor||this.borderColor,this._setLineDash(t,e.borderDashArray||this.borderDashArray),t.strokeRect(-s/2,-r/2,s,r),a&&(t.beginPath(),this.forEachControl(function(e,i,n){e.withConnection&&e.getVisibility(n,i)&&(o=!0,t.moveTo(e.x*s,e.y*r),t.lineTo(e.x*s+e.offsetX,e.y*r+e.offsetY))}),o&&t.stroke()),t.restore(),this},drawBordersInGroup:function(t,e,i){i=i||{};var n=T.util.sizeAfterTransform(this.width,this.height,e),s=this.strokeWidth,r=this.strokeUniform,a=this.borderScaleFactor,o=n.x+s*(r?this.canvas.getZoom():e.scaleX)+a,l=n.y+s*(r?this.canvas.getZoom():e.scaleY)+a;return t.save(),this._setLineDash(t,i.borderDashArray||this.borderDashArray),t.strokeStyle=i.borderColor||this.borderColor,t.strokeRect(-o/2,-l/2,o,l),t.restore(),this},drawControls:function(t,e){e=e||{},t.save();var i,n,s=this.canvas.getRetinaScaling();return t.setTransform(s,0,0,s,0,0),t.strokeStyle=t.fillStyle=e.cornerColor||this.cornerColor,this.transparentCorners||(t.strokeStyle=e.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(t,e.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(i=this.group.calcTransformMatrix()),this.forEachControl(function(s,r,a){n=a.oCoords[r],s.getVisibility(a,r)&&(i&&(n=T.util.transformPoint(n,i)),s.render(t,n.x,n.y,e,a))}),t.restore(),this},isControlVisible:function(t){return this.controls[t]&&this.controls[t].getVisibility(this,t)},setControlVisible:function(t,e){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[t]=e,this},setControlsVisibility:function(t){for(var e in t||(t={}),t)this.setControlVisible(e,t[e]);return this},onDeselect:function(){},onSelect:function(){}})}(),T.util.object.extend(T.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(t,e){var i=function(){},n=(e=e||{}).onComplete||i,s=e.onChange||i,r=this;return T.util.animate({target:this,startValue:t.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(e){t.set("left",e),r.requestRenderAll(),s()},onComplete:function(){t.setCoords(),n()}})},fxCenterObjectV:function(t,e){var i=function(){},n=(e=e||{}).onComplete||i,s=e.onChange||i,r=this;return T.util.animate({target:this,startValue:t.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(e){t.set("top",e),r.requestRenderAll(),s()},onComplete:function(){t.setCoords(),n()}})},fxRemove:function(t,e){var i=function(){},n=(e=e||{}).onComplete||i,s=e.onChange||i,r=this;return T.util.animate({target:this,startValue:t.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(e){t.set("opacity",e),r.requestRenderAll(),s()},onComplete:function(){r.remove(t),n()}})}}),T.util.object.extend(T.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var t,e,i=[],n=[];for(t in arguments[0])i.push(t);for(var s=0,r=i.length;s<r;s++)t=i[s],e=s!==r-1,n.push(this._animate(t,arguments[0][t],arguments[1],e));return n}return this._animate.apply(this,arguments)},_animate:function(t,e,i,n){var s,r=this;e=e.toString(),i=i?T.util.object.clone(i):{},~t.indexOf(".")&&(s=t.split("."));var a=r.colorProperties.indexOf(t)>-1||s&&r.colorProperties.indexOf(s[1])>-1,o=s?this.get(s[0])[s[1]]:this.get(t);"from"in i||(i.from=o),a||(e=~e.indexOf("=")?o+parseFloat(e.replace("=","")):parseFloat(e));var l={target:this,startValue:i.from,endValue:e,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(t,e,n){return i.abort.call(r,t,e,n)},onChange:function(e,a,o){s?r[s[0]][s[1]]=e:r.set(t,e),n||i.onChange&&i.onChange(e,a,o)},onComplete:function(t,e,s){n||(r.setCoords(),i.onComplete&&i.onComplete(t,e,s))}};return a?T.util.animateColor(l.startValue,l.endValue,l.duration,l):T.util.animate(l)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,n=e.util.object.clone,s={x1:1,x2:1,y1:1,y2:1};function r(t,e){var i=t.origin,n=t.axis1,s=t.axis2,r=t.dimension,a=e.nearest,o=e.center,l=e.farthest;return function(){switch(this.get(i)){case a:return Math.min(this.get(n),this.get(s));case o:return Math.min(this.get(n),this.get(s))+.5*this.get(r);case l:return Math.max(this.get(n),this.get(s))}}}e.Line?e.warn("fabric.Line is already defined"):(e.Line=e.util.createClass(e.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:e.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(t,e){t||(t=[0,0,0,0]),this.callSuper("initialize",e),this.set("x1",t[0]),this.set("y1",t[1]),this.set("x2",t[2]),this.set("y2",t[3]),this._setWidthHeight(e)},_setWidthHeight:function(t){t||(t={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in t?t.left:this._getLeftToOriginX(),this.top="top"in t?t.top:this._getTopToOriginY()},_set:function(t,e){return this.callSuper("_set",t,e),void 0!==s[t]&&this._setWidthHeight(),this},_getLeftToOriginX:r({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:r({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(t){t.beginPath();var e=this.calcLinePoints();t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2),t.lineWidth=this.strokeWidth;var i=t.strokeStyle;t.strokeStyle=this.stroke||t.fillStyle,this.stroke&&this._renderStroke(t),t.strokeStyle=i},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(t){return i(this.callSuper("toObject",t),this.calcLinePoints())},_getNonTransformedDimensions:function(){var t=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(t.y-=this.strokeWidth),0===this.height&&(t.x-=this.strokeWidth)),t},calcLinePoints:function(){var t=this.x1<=this.x2?-1:1,e=this.y1<=this.y2?-1:1,i=t*this.width*.5,n=e*this.height*.5;return{x1:i,x2:t*this.width*-.5,y1:n,y2:e*this.height*-.5}},_toSVG:function(){var t=this.calcLinePoints();return["<line ","COMMON_PARTS",'x1="',t.x1,'" y1="',t.y1,'" x2="',t.x2,'" y2="',t.y2,'" />\n']}}),e.Line.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),e.Line.fromElement=function(t,n,s){s=s||{};var r=e.parseAttributes(t,e.Line.ATTRIBUTE_NAMES),a=[r.x1||0,r.y1||0,r.x2||0,r.y2||0];n(new e.Line(a,i(r,s)))},e.Line.fromObject=function(t,i){var s=n(t,!0);s.points=[t.x1,t.y1,t.x2,t.y2],e.Object._fromObject("Line",s,function(t){delete t.points,i&&i(t)},"points")})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.degreesToRadians;e.Circle?e.warn("fabric.Circle is already defined."):(e.Circle=e.util.createClass(e.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:e.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},_toSVG:function(){var t,n=(this.endAngle-this.startAngle)%360;if(0===n)t=["<circle ","COMMON_PARTS",'cx="0" cy="0" ','r="',this.radius,'" />\n'];else{var s=i(this.startAngle),r=i(this.endAngle),a=this.radius;t=['<path d="M '+e.util.cos(s)*a+" "+e.util.sin(s)*a," A "+a+" "+a," 0 ",+(n>180?"1":"0")+" 1"," "+e.util.cos(r)*a+" "+e.util.sin(r)*a,'" ',"COMMON_PARTS"," />\n"]}return t},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,i(this.startAngle),i(this.endAngle),!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),e.Circle.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),e.Circle.fromElement=function(t,i){var n,s=e.parseAttributes(t,e.Circle.ATTRIBUTE_NAMES);if(!("radius"in(n=s)&&n.radius>=0))throw new Error("value of `r` attribute is required and can not be negative");s.left=(s.left||0)-s.radius,s.top=(s.top||0)-s.radius,i(new e.Circle(s))},e.Circle.fromObject=function(t,i){e.Object._fromObject("Circle",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={});e.Triangle?e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",width:100,height:100,_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderPaintInOrder(t)},_toSVG:function(){var t=this.width/2,e=this.height/2;return["<polygon ","COMMON_PARTS",'points="',[-t+" "+e,"0 "+-e,t+" "+e].join(","),'" />']}}),e.Triangle.fromObject=function(t,i){return e.Object._fromObject("Triangle",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={}),i=2*Math.PI;e.Ellipse?e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["<ellipse ","COMMON_PARTS",'cx="0" cy="0" ','rx="',this.rx,'" ry="',this.ry,'" />\n']},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,i,!1),t.restore(),this._renderPaintInOrder(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=(n.left||0)-n.rx,n.top=(n.top||0)-n.ry,i(new e.Ellipse(n))},e.Ellipse.fromObject=function(t,i){e.Object._fromObject("Ellipse",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Rect?e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,r=-this.width/2,a=-this.height/2,o=0!==e||0!==i,l=.4477152502;t.beginPath(),t.moveTo(r+e,a),t.lineTo(r+n-e,a),o&&t.bezierCurveTo(r+n-l*e,a,r+n,a+l*i,r+n,a+i),t.lineTo(r+n,a+s-i),o&&t.bezierCurveTo(r+n,a+s-l*i,r+n-l*e,a+s,r+n-e,a+s),t.lineTo(r+e,a+s),o&&t.bezierCurveTo(r+l*e,a+s,r,a+s-l*i,r,a+s-i),t.lineTo(r,a+i),o&&t.bezierCurveTo(r,a+l*i,r+l*e,a,r+e,a),t.closePath(),this._renderPaintInOrder(t)},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["<rect ","COMMON_PARTS",'x="',-this.width/2,'" y="',-this.height/2,'" rx="',this.rx,'" ry="',this.ry,'" width="',this.width,'" height="',this.height,'" />\n']}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,n,s){if(!t)return n(null);s=s||{};var r=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);r.left=r.left||0,r.top=r.top||0,r.height=r.height||0,r.width=r.width||0;var a=new e.Rect(i(s?e.util.object.clone(s):{},r));a.visible=a.visible&&a.width>0&&a.height>0,n(a)},e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,n=e.util.array.min,s=e.util.array.max,r=e.util.toFixed,a=e.util.projectStrokeOnPoints;e.Polyline?e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._setPositionDimensions(e)},_projectStrokeOnPoints:function(){return a(this.points,this,!0)},_setPositionDimensions:function(t){var e,i=this._calcDimensions(t),n=this.exactBoundingBox?this.strokeWidth:0;this.width=i.width-n,this.height=i.height-n,t.fromSVG||(e=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2+n/2,y:i.top-this.strokeWidth/2+n/2},"left","top",this.originX,this.originY)),void 0===t.left&&(this.left=t.fromSVG?i.left:e.x),void 0===t.top&&(this.top=t.fromSVG?i.top:e.y),this.pathOffset={x:i.left+this.width/2+n/2,y:i.top+this.height/2+n/2}},_calcDimensions:function(){var t=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,e=n(t,"x")||0,i=n(t,"y")||0;return{left:e,top:i,width:(s(t,"x")||0)-e,height:(s(t,"y")||0)-i}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},_toSVG:function(){for(var t=[],i=this.pathOffset.x,n=this.pathOffset.y,s=e.Object.NUM_FRACTION_DIGITS,a=0,o=this.points.length;a<o;a++)t.push(r(this.points[a].x-i,s),",",r(this.points[a].y-n,s)," ");return["<"+this.type+" ","COMMON_PARTS",'points="',t.join(""),'" />\n']},commonRender:function(t){var e,i=this.points.length,n=this.pathOffset.x,s=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var r=0;r<i;r++)e=this.points[r],t.lineTo(e.x-n,e.y-s);return!0},_render:function(t){this.commonRender(t)&&this._renderPaintInOrder(t)},complexity:function(){return this.get("points").length}}),e.Polyline.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(),e.Polyline.fromElementGenerator=function(t){return function(n,s,r){if(!n)return s(null);r||(r={});var a=e.parsePointsAttribute(n.getAttribute("points")),o=e.parseAttributes(n,e[t].ATTRIBUTE_NAMES);o.fromSVG=!0,s(new e[t](a,i(o,r)))}},e.Polyline.fromElement=e.Polyline.fromElementGenerator("Polyline"),e.Polyline.fromObject=function(t,i){return e.Object._fromObject("Polyline",t,i,"points")})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.projectStrokeOnPoints;e.Polygon?e.warn("fabric.Polygon is already defined"):(e.Polygon=e.util.createClass(e.Polyline,{type:"polygon",_projectStrokeOnPoints:function(){return i(this.points,this)},_render:function(t){this.commonRender(t)&&(t.closePath(),this._renderPaintInOrder(t))}}),e.Polygon.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(),e.Polygon.fromElement=e.Polyline.fromElementGenerator("Polygon"),e.Polygon.fromObject=function(t,i){e.Object._fromObject("Polygon",t,i,"points")})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.array.min,n=e.util.array.max,s=e.util.object.extend,r=e.util.object.clone,a=e.util.toFixed;e.Path?e.warn("fabric.Path is already defined"):(e.Path=e.util.createClass(e.Object,{type:"path",path:null,cacheProperties:e.Object.prototype.cacheProperties.concat("path","fillRule"),stateProperties:e.Object.prototype.stateProperties.concat("path"),initialize:function(t,e){delete(e=r(e||{})).path,this.callSuper("initialize",e),this._setPath(t||[],e)},_setPath:function(t,i){this.path=e.util.makePathSimpler(Array.isArray(t)?t:e.util.parsePath(t)),e.Polyline.prototype._setPositionDimensions.call(this,i||{})},_renderPathCommands:function(t){var e,i=0,n=0,s=0,r=0,a=0,o=0,l=-this.pathOffset.x,h=-this.pathOffset.y;t.beginPath();for(var c=0,d=this.path.length;c<d;++c)switch((e=this.path[c])[0]){case"L":s=e[1],r=e[2],t.lineTo(s+l,r+h);break;case"M":i=s=e[1],n=r=e[2],t.moveTo(s+l,r+h);break;case"C":s=e[5],r=e[6],a=e[3],o=e[4],t.bezierCurveTo(e[1]+l,e[2]+h,a+l,o+h,s+l,r+h);break;case"Q":t.quadraticCurveTo(e[1]+l,e[2]+h,e[3]+l,e[4]+h),s=e[3],r=e[4],a=e[1],o=e[2];break;case"z":case"Z":s=i,r=n,t.closePath()}},_render:function(t){this._renderPathCommands(t),this._renderPaintInOrder(t)},toString:function(){return"#<fabric.Path ("+this.complexity()+'): { "top": '+this.top+', "left": '+this.left+" }>"},toObject:function(t){return s(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()})})},toDatalessObject:function(t){var e=this.toObject(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,e},_toSVG:function(){return["<path ","COMMON_PARTS",'d="',e.util.joinPath(this.path),'" stroke-linecap="round" ',"/>\n"]},_getOffsetTransform:function(){var t=e.Object.NUM_FRACTION_DIGITS;return" translate("+a(-this.pathOffset.x,t)+", "+a(-this.pathOffset.y,t)+")"},toClipPathSVG:function(t){var e=this._getOffsetTransform();return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},toSVG:function(t){var e=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var t,s,r=[],a=[],o=0,l=0,h=0,c=0,d=0,u=this.path.length;d<u;++d){switch((t=this.path[d])[0]){case"L":h=t[1],c=t[2],s=[];break;case"M":o=h=t[1],l=c=t[2],s=[];break;case"C":s=e.util.getBoundsOfCurve(h,c,t[1],t[2],t[3],t[4],t[5],t[6]),h=t[5],c=t[6];break;case"Q":s=e.util.getBoundsOfCurve(h,c,t[1],t[2],t[1],t[2],t[3],t[4]),h=t[3],c=t[4];break;case"z":case"Z":h=o,c=l}s.forEach(function(t){r.push(t.x),a.push(t.y)}),r.push(h),a.push(c)}var f=i(r)||0,g=i(a)||0;return{left:f,top:g,width:(n(r)||0)-f,height:(n(a)||0)-g}}}),e.Path.fromObject=function(t,i){if("string"==typeof t.sourcePath){var n=t.sourcePath;e.loadSVGFromURL(n,function(e){var n=e[0];n.setOptions(t),i&&i(n)})}else e.Object._fromObject("Path",t,i,"path")},e.Path.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(["d"]),e.Path.fromElement=function(t,i,n){var r=e.parseAttributes(t,e.Path.ATTRIBUTE_NAMES);r.fromSVG=!0,i(new e.Path(r.d,s(r,n)))})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.array.min,n=e.util.array.max;e.Group||(e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],useSetOnGroup:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var n=this._objects.length;n--;)this._objects[n].group=this;if(i)this._updateObjectsACoords();else{var s=e&&e.centerPoint;void 0!==e.originX&&(this.originX=e.originX),void 0!==e.originY&&(this.originY=e.originY),s||this._calcBounds(),this._updateObjectsCoords(s),delete e.centerPoint,this.callSuper("initialize",e)}this.setCoords()},_updateObjectsACoords:function(){for(var t=this._objects.length;t--;)this._objects[t].setCoords(!0)},_updateObjectsCoords:function(t){t=t||this.getCenterPoint();for(var e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){var i=t.left,n=t.top;t.set({left:i-e.x,top:n-e.y}),t.group=this,t.setCoords(!0)},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},addWithUpdate:function(t){var i=!!this.group;return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(i&&e.util.removeTransformFromObject(t,this.group.calcTransformMatrix()),this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,i){var n=this._objects.length;if(this.useSetOnGroup)for(;n--;)this._objects[n].setOnGroup(t,i);if("canvas"===t)for(;n--;)this._objects[n]._set(t,i);e.Object.prototype._set.call(this,t,i)},toObject:function(t){var i=this.includeDefaultValues,n=this._objects.filter(function(t){return!t.excludeFromExport}).map(function(e){var n=e.includeDefaultValues;e.includeDefaultValues=i;var s=e.toObject(t);return e.includeDefaultValues=n,s}),s=e.Object.prototype.toObject.call(this,t);return s.objects=n,s},toDatalessObject:function(t){var i,n=this.sourcePath;if(n)i=n;else{var s=this.includeDefaultValues;i=this._objects.map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=s;var n=e.toDatalessObject(t);return e.includeDefaultValues=i,n})}var r=e.Object.prototype.toDatalessObject.call(this,t);return r.objects=i,r},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=e.Object.prototype.shouldCache.call(this);if(t)for(var i=0,n=this._objects.length;i<n;i++)if(this._objects[i].willDrawShadow())return this.ownCaching=!1,!1;return t},willDrawShadow:function(){if(e.Object.prototype.willDrawShadow.call(this))return!0;for(var t=0,i=this._objects.length;t<i;t++)if(this._objects[t].willDrawShadow())return!0;return!1},isOnACache:function(){return this.ownCaching||this.group&&this.group.isOnACache()},drawObject:function(t){for(var e=0,i=this._objects.length;e<i;e++)this._objects[e].render(t);this._drawClipPath(t,this.clipPath)},isCacheDirty:function(t){if(this.callSuper("isCacheDirty",t))return!0;if(!this.statefullCache)return!1;for(var e=0,i=this._objects.length;e<i;e++)if(this._objects[e].isCacheDirty(!0)){if(this._cacheCanvas){var n=this.cacheWidth/this.zoomX,s=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-n/2,-s/2,n,s)}return!0}return!1},_restoreObjectsState:function(){var t=this.calcOwnMatrix();return this._objects.forEach(function(i){e.util.addTransformToObject(i,t),delete i.group,i.setCoords()}),this},destroy:function(){return this._objects.forEach(function(t){t.set("dirty",!0)}),this._restoreObjectsState()},dispose:function(){this.callSuper("dispose"),this.forEachObject(function(t){t.dispose&&t.dispose()}),this._objects=[]},toActiveSelection:function(){if(this.canvas){var t=this._objects,i=this.canvas;this._objects=[];var n=this.toObject();delete n.objects;var s=new e.ActiveSelection([]);return s.set(n),s.type="activeSelection",i.remove(this),t.forEach(function(t){t.group=s,t.dirty=!0,i.add(t)}),s.canvas=i,s._objects=t,i._activeObject=s,s.setCoords(),s}},ungroupOnCanvas:function(){return this._restoreObjectsState()},setObjectsCoords:function(){return this.forEachObject(function(t){t.setCoords(!0)}),this},_calcBounds:function(t){for(var e,i,n,s,r=[],a=[],o=["tr","br","bl","tl"],l=0,h=this._objects.length,c=o.length;l<h;++l){for(n=(e=this._objects[l]).calcACoords(),s=0;s<c;s++)i=o[s],r.push(n[i].x),a.push(n[i].y);e.aCoords=n}this._getBounds(r,a,t)},_getBounds:function(t,s,r){var a=new e.Point(i(t),i(s)),o=new e.Point(n(t),n(s)),l=a.y||0,h=a.x||0,c=o.x-a.x||0,d=o.y-a.y||0;this.width=c,this.height=d,r||this.setPositionByOrigin({x:h,y:l},"left","top")},_toSVG:function(t){for(var e=["<g ","COMMON_PARTS"," >\n"],i=0,n=this._objects.length;i<n;i++)e.push("\t\t",this._objects[i].toSVG(t));return e.push("</g>\n"),e},getSvgStyles:function(){var t=void 0!==this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")},toClipPathSVG:function(t){for(var e=[],i=0,n=this._objects.length;i<n;i++)e.push("\t",this._objects[i].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(e,{reviver:t})}}),e.Group.fromObject=function(t,i){var n=t.objects,s=e.util.object.clone(t,!0);delete s.objects,"string"!=typeof n?e.util.enlivenObjects(n,function(n){var s=e.util.object.clone(t,!0);delete s.objects,e.util.enlivenObjectEnlivables(t,s,function(){i&&i(new e.Group(n,s,!0))})}):e.loadSVGFromURL(n,function(r){var a=e.util.groupSVGElements(r,t,n);a.set(s),i&&i(a)})})}(e),function(t){var e=t.fabric||(t.fabric={});e.ActiveSelection||(e.ActiveSelection=e.util.createClass(e.Group,{type:"activeSelection",initialize:function(t,i){i=i||{},this._objects=t||[];for(var n=this._objects.length;n--;)this._objects[n].group=this;i.originX&&(this.originX=i.originX),i.originY&&(this.originY=i.originY),this._calcBounds(),this._updateObjectsCoords(),e.Object.prototype.initialize.call(this,i),this.setCoords()},toGroup:function(){var t=this._objects.concat();this._objects=[];var i=e.Object.prototype.toObject.call(this),n=new e.Group([]);if(delete i.type,n.set(i),t.forEach(function(t){t.canvas.remove(t),t.group=n}),n._objects=t,!this.canvas)return n;var s=this.canvas;return s.add(n),s._activeObject=n,n.setCoords(),n},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#<fabric.ActiveSelection: ("+this.complexity()+")>"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(t,e,i){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",t,e),void 0===(i=i||{}).hasControls&&(i.hasControls=!1),i.forActiveSelection=!0;for(var n=0,s=this._objects.length;n<s;n++)this._objects[n]._renderControls(t,i);t.restore()}}),e.ActiveSelection.fromObject=function(t,i){e.util.enlivenObjects(t.objects,function(n){delete t.objects,i&&i(new e.ActiveSelection(n,t,!0))})})}(e),function(t){var e=T.util.object.extend;t.fabric||(t.fabric={}),t.fabric.Image?T.warn("fabric.Image is already defined."):(T.Image=T.util.createClass(T.Object,{type:"image",strokeWidth:0,srcFromAttribute:!1,_lastScaleX:1,_lastScaleY:1,_filterScalingX:1,_filterScalingY:1,minimumScaleTrigger:.5,stateProperties:T.Object.prototype.stateProperties.concat("cropX","cropY"),cacheProperties:T.Object.prototype.cacheProperties.concat("cropX","cropY"),cacheKey:"",cropX:0,cropY:0,imageSmoothing:!0,initialize:function(t,e){e||(e={}),this.filters=[],this.cacheKey="texture"+T.Object.__uid++,this.callSuper("initialize",e),this._initElement(t,e)},getElement:function(){return this._element||{}},setElement:function(t,e){return this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._element=t,this._originalElement=t,this._initConfig(e),0!==this.filters.length&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters(),this},removeTexture:function(t){var e=T.filterBackend;e&&e.evictCachesForKey&&e.evictCachesForKey(t)},dispose:function(){this.callSuper("dispose"),this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._cacheContext=void 0,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach(function(t){T.util.cleanUpJsdomNode(this[t]),this[t]=void 0}.bind(this))},getCrossOrigin:function(){return this._originalElement&&(this._originalElement.crossOrigin||null)},getOriginalSize:function(){var t=this.getElement();return{width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}},_stroke:function(t){if(this.stroke&&0!==this.strokeWidth){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,-i),t.lineTo(e,-i),t.lineTo(e,i),t.lineTo(-e,i),t.lineTo(-e,-i),t.closePath()}},toObject:function(t){var i=[];this.filters.forEach(function(t){t&&i.push(t.toObject())});var n=e(this.callSuper("toObject",["cropX","cropY"].concat(t)),{src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:i});return this.resizeFilter&&(n.resizeFilter=this.resizeFilter.toObject()),n},hasCrop:function(){return this.cropX||this.cropY||this.width<this._element.width||this.height<this._element.height},_toSVG:function(){var t,e=[],i=[],n=this._element,s=-this.width/2,r=-this.height/2,a="",o="";if(!n)return[];if(this.hasCrop()){var l=T.Object.__uid++;e.push('<clipPath id="imageCrop_'+l+'">\n','\t<rect x="'+s+'" y="'+r+'" width="'+this.width+'" height="'+this.height+'" />\n',"</clipPath>\n"),a=' clip-path="url(#imageCrop_'+l+')" '}if(this.imageSmoothing||(o='" image-rendering="optimizeSpeed'),i.push("\t<image ","COMMON_PARTS",'xlink:href="',this.getSvgSrc(!0),'" x="',s-this.cropX,'" y="',r-this.cropY,'" width="',n.width||n.naturalWidth,'" height="',n.height||n.height,o,'"',a,"></image>\n"),this.stroke||this.strokeDashArray){var h=this.fill;this.fill=null,t=["\t<rect ",'x="',s,'" y="',r,'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),'"/>\n'],this.fill=h}return"fill"!==this.paintFirst?e.concat(t,i):e.concat(i,t)},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src"):e.src:this.src||""},setSrc:function(t,e,i){return T.util.loadImage(t,function(t,n){this.setElement(t,i),this._setWidthHeight(),e&&e(this,n)},this,i&&i.crossOrigin),this},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),n=i.scaleX,s=i.scaleY,r=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||n>e&&s>e)return this._element=r,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=n,void(this._lastScaleY=s);T.filterBackend||(T.filterBackend=T.initFilterBackend());var a=T.util.createCanvasElement(),o=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,l=r.width,h=r.height;a.width=l,a.height=h,this._element=a,this._lastScaleX=t.scaleX=n,this._lastScaleY=t.scaleY=s,T.filterBackend.applyFilters([t],r,l,h,this._element,o),this._filterScalingX=a.width/this._originalElement.width,this._filterScalingY=a.height/this._originalElement.height},applyFilters:function(t){if(t=(t=t||this.filters||[]).filter(function(t){return t&&!t.isNeutralState()}),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===t.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,n=e.naturalHeight||e.height;if(this._element===this._originalElement){var s=T.util.createCanvasElement();s.width=i,s.height=n,this._element=s,this._filteredEl=s}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,n),this._lastScaleX=1,this._lastScaleY=1;return T.filterBackend||(T.filterBackend=T.initFilterBackend()),T.filterBackend.applyFilters(t,this._originalElement,i,n,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){T.util.setImageSmoothing(t,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)},drawCacheOnCanvas:function(t){T.util.setImageSmoothing(t,this.imageSmoothing),T.Object.prototype.drawCacheOnCanvas.call(this,t)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(t){var e=this._element;if(e){var i=this._filterScalingX,n=this._filterScalingY,s=this.width,r=this.height,a=Math.min,o=Math.max,l=o(this.cropX,0),h=o(this.cropY,0),c=e.naturalWidth||e.width,d=e.naturalHeight||e.height,u=l*i,f=h*n,g=a(s*i,c-u),m=a(r*n,d-f),p=-s/2,_=-r/2,v=a(s,c/i-l),y=a(r,d/n-h);e&&t.drawImage(e,u,f,g,m,p,_,v,y)}},_needsResize:function(){var t=this.getTotalObjectScaling();return t.scaleX!==this._lastScaleX||t.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(t,e){this.setElement(T.util.getById(t),e),T.util.addClass(this.getElement(),T.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t)},_initFilters:function(t,e){t&&t.length?T.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){t||(t={});var e=this.getElement();this.width=t.width||e.naturalWidth||e.width||0,this.height=t.height||e.naturalHeight||e.height||0},parsePreserveAspectRatioAttribute:function(){var t,e=T.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,n=this._element.height,s=1,r=1,a=0,o=0,l=0,h=0,c=this.width,d=this.height,u={width:c,height:d};return!e||"none"===e.alignX&&"none"===e.alignY?(s=c/i,r=d/n):("meet"===e.meetOrSlice&&(t=(c-i*(s=r=T.util.findScaleToFit(this._element,u)))/2,"Min"===e.alignX&&(a=-t),"Max"===e.alignX&&(a=t),t=(d-n*r)/2,"Min"===e.alignY&&(o=-t),"Max"===e.alignY&&(o=t)),"slice"===e.meetOrSlice&&(t=i-c/(s=r=T.util.findScaleToCover(this._element,u)),"Mid"===e.alignX&&(l=t/2),"Max"===e.alignX&&(l=t),t=n-d/r,"Mid"===e.alignY&&(h=t/2),"Max"===e.alignY&&(h=t),i=c/s,n=d/r)),{width:i,height:n,scaleX:s,scaleY:r,offsetLeft:a,offsetTop:o,cropX:l,cropY:h}}}),T.Image.CSS_CANVAS="canvas-img",T.Image.prototype.getSvgSrc=T.Image.prototype.getSrc,T.Image.fromObject=function(t,e){var i=T.util.object.clone(t);T.util.loadImage(i.src,function(t,n){n?e&&e(null,!0):T.Image.prototype._initFilters.call(i,i.filters,function(n){i.filters=n||[],T.Image.prototype._initFilters.call(i,[i.resizeFilter],function(n){i.resizeFilter=n[0],T.util.enlivenObjectEnlivables(i,i,function(){var n=new T.Image(t,i);e(n,!1)})})})},null,i.crossOrigin)},T.Image.fromURL=function(t,e,i){T.util.loadImage(t,function(t,n){e&&e(new T.Image(t,i),n)},null,i&&i.crossOrigin)},T.Image.ATTRIBUTE_NAMES=T.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),T.Image.fromElement=function(t,i,n){var s=T.parseAttributes(t,T.Image.ATTRIBUTE_NAMES);T.Image.fromURL(s["xlink:href"],i,e(n?T.util.object.clone(n):{},s))})}(e),T.util.object.extend(T.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(t){var e=function(){},i=(t=t||{}).onComplete||e,n=t.onChange||e,s=this;return T.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){s.rotate(t),n()},onComplete:function(){s.setCoords(),i()}})}}),T.util.object.extend(T.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound})}}),function(){function t(t,e){var i="precision "+e+" float;\nvoid main(){}",n=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(n,i),t.compileShader(n),!!t.getShaderParameter(n,t.COMPILE_STATUS)}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}T.isWebglSupported=function(e){if(T.isLikelyNode)return!1;e=e||T.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),n=i.getContext("webgl")||i.getContext("experimental-webgl"),s=!1;if(n){T.maxTextureSize=n.getParameter(n.MAX_TEXTURE_SIZE),s=T.maxTextureSize>=e;for(var r=["highp","mediump","lowp"],a=0;a<3;a++)if(t(n,r[a])){T.webGlPrecision=r[a];break}}return this.isSupported=s,s},T.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,n=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(t){i=!1}var s="undefined"!=typeof ArrayBuffer,r="undefined"!=typeof Uint8ClampedArray;if(n&&i&&s&&r){var a=T.util.createCanvasElement(),o=new ArrayBuffer(t*e*4);if(T.forceGLPutImageData)return this.imageBuffer=o,void(this.copyGLTo2D=x);var l,h,c={imageBuffer:o,destinationWidth:t,destinationHeight:e,targetCanvas:a};a.width=t,a.height=e,l=window.performance.now(),I.call(c,this.gl,c),h=window.performance.now()-l,l=window.performance.now(),x.call(c,this.gl,c),h>window.performance.now()-l?(this.imageBuffer=o,this.copyGLTo2D=x):this.copyGLTo2D=I}},createWebGLCanvas:function(t,e){var i=T.util.createCanvasElement();i.width=t,i.height=e;var n={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},s=i.getContext("webgl",n);s||(s=i.getContext("experimental-webgl",n)),s&&(s.clearColor(0,0,0,0),this.canvas=i,this.gl=s)},applyFilters:function(t,e,i,n,s,r){var a,o=this.gl;r&&(a=this.getCachedTexture(r,e));var l={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:n,destinationWidth:i,destinationHeight:n,context:o,sourceTexture:this.createTexture(o,i,n,!a&&e),targetTexture:this.createTexture(o,i,n),originalTexture:a||this.createTexture(o,i,n,!a&&e),passes:t.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:s},h=o.createFramebuffer();return o.bindFramebuffer(o.FRAMEBUFFER,h),t.forEach(function(t){t&&t.applyTo(l)}),function(t){var e=t.targetCanvas,i=e.width,n=e.height,s=t.destinationWidth,r=t.destinationHeight;i===s&&n===r||(e.width=s,e.height=r)}(l),this.copyGLTo2D(o,l),o.bindTexture(o.TEXTURE_2D,null),o.deleteTexture(l.sourceTexture),o.deleteTexture(l.targetTexture),o.deleteFramebuffer(h),s.getContext("2d").setTransform(1,0,0,1,0,0),l},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,n){var s=t.createTexture();return t.bindTexture(t.TEXTURE_2D,s),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),n?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),s},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:I,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e={renderer:"",vendor:""};if(!t)return e;var i=t.getExtension("WEBGL_debug_renderer_info");if(i){var n=t.getParameter(i.UNMASKED_RENDERER_WEBGL),s=t.getParameter(i.UNMASKED_VENDOR_WEBGL);n&&(e.renderer=n.toLowerCase()),s&&(e.vendor=s.toLowerCase())}return this.gpuInfo=e,e}}}(),function(){var t=function(){};function e(){}T.Canvas2dFilterBackend=e,e.prototype={evictCachesForKey:t,dispose:t,clearWebGLCaches:t,resources:{},applyFilters:function(t,e,i,n,s){var r=s.getContext("2d");r.drawImage(e,0,0,i,n);var a={sourceWidth:i,sourceHeight:n,imageData:r.getImageData(0,0,i,n),originalEl:e,originalImageData:r.getImageData(0,0,i,n),canvasEl:s,ctx:r,filterBackend:this};return t.forEach(function(t){t.applyTo(a)}),a.imageData.width===i&&a.imageData.height===n||(s.width=a.imageData.width,s.height=a.imageData.height),r.putImageData(a.imageData,0,0),a}}}(),T.Image=T.Image||{},T.Image.filters=T.Image.filters||{},T.Image.filters.BaseFilter=T.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==T.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+T.webGlPrecision+" float"));var n=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(n,i),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+t.getShaderInfoLog(n));var s=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(s,e),t.compileShader(s),!t.getShaderParameter(s,t.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+t.getShaderInfoLog(s));var r=t.createProgram();if(t.attachShader(r,n),t.attachShader(r,s),t.linkProgram(r),!t.getProgramParameter(r,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(r));var a=this.getAttributeLocations(t,r),o=this.getUniformLocations(t,r)||{};return o.uStepW=t.getUniformLocation(r,"uStepW"),o.uStepH=t.getUniformLocation(r,"uStepH"),{program:r,attributeLocations:a,uniformLocations:o}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var n=e.aPosition,s=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,s),t.enableVertexAttribArray(n),t.vertexAttribPointer(n,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,n=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,t.sourceWidth===e&&t.sourceHeight===i||(n.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(n,e,i)),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,t.targetTexture,0)):(n.bindFramebuffer(n.FRAMEBUFFER,null),n.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){var t=this.mainParameter,e=T.Image.filters[this.type].prototype;if(t){if(Array.isArray(e[t])){for(var i=e[t].length;i--;)if(this[t][i]!==e[t][i])return!1;return!0}return e[t]===this[t]}return!1},applyTo:function(t){t.webgl?(this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.aPosition),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.destinationWidth,t.destinationHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},toJSON:function(){return this.toObject()}}),T.Image.filters.BaseFilter.fromObject=function(t,e){var i=new T.Image.filters[t.type](t);return e&&e(i),i},function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.ColorMatrix=n(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var e,i,n,s,r,a=t.imageData.data,o=a.length,l=this.matrix,h=this.colorsOnly;for(r=0;r<o;r+=4)e=a[r],i=a[r+1],n=a[r+2],h?(a[r]=e*l[0]+i*l[1]+n*l[2]+255*l[4],a[r+1]=e*l[5]+i*l[6]+n*l[7]+255*l[9],a[r+2]=e*l[10]+i*l[11]+n*l[12]+255*l[14]):(s=a[r+3],a[r]=e*l[0]+i*l[1]+n*l[2]+s*l[3]+255*l[4],a[r+1]=e*l[5]+i*l[6]+n*l[7]+s*l[8]+255*l[9],a[r+2]=e*l[10]+i*l[11]+n*l[12]+s*l[13]+255*l[14],a[r+3]=e*l[15]+i*l[16]+n*l[17]+s*l[18]+255*l[19])},getUniformLocations:function(t,e){return{uColorMatrix:t.getUniformLocation(e,"uColorMatrix"),uConstants:t.getUniformLocation(e,"uConstants")}},sendUniformData:function(t,e){var i=this.matrix,n=[i[0],i[1],i[2],i[3],i[5],i[6],i[7],i[8],i[10],i[11],i[12],i[13],i[15],i[16],i[17],i[18]],s=[i[4],i[9],i[14],i[19]];t.uniformMatrix4fv(e.uColorMatrix,!1,n),t.uniform4fv(e.uConstants,s)}}),e.Image.filters.ColorMatrix.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Brightness=n(i.BaseFilter,{type:"Brightness",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBrightness;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += uBrightness;\ngl_FragColor = color;\n}",brightness:0,mainParameter:"brightness",applyTo2d:function(t){if(0!==this.brightness){var e,i=t.imageData.data,n=i.length,s=Math.round(255*this.brightness);for(e=0;e<n;e+=4)i[e]=i[e]+s,i[e+1]=i[e+1]+s,i[e+2]=i[e+2]+s}},getUniformLocations:function(t,e){return{uBrightness:t.getUniformLocation(e,"uBrightness")}},sendUniformData:function(t,e){t.uniform1f(e.uBrightness,this.brightness)}}),e.Image.filters.Brightness.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,n=e.Image.filters,s=e.util.createClass;n.Convolute=s(n.BaseFilter,{type:"Convolute",opaque:!1,matrix:[0,0,0,0,1,0,0,0,0],fragmentSource:{Convolute_3_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_3_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_5_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_5_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_7_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_7_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_9_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_9_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}"},retrieveShader:function(t){var e=Math.sqrt(this.matrix.length),i=this.type+"_"+e+"_"+(this.opaque?1:0),n=this.fragmentSource[i];return t.programCache.hasOwnProperty(i)||(t.programCache[i]=this.createProgram(t.context,n)),t.programCache[i]},applyTo2d:function(t){var e,i,n,s,r,a,o,l,h,c,d,u,f,g=t.imageData,m=g.data,p=this.matrix,_=Math.round(Math.sqrt(p.length)),v=Math.floor(_/2),y=g.width,w=g.height,C=t.ctx.createImageData(y,w),E=C.data,S=this.opaque?1:0;for(d=0;d<w;d++)for(c=0;c<y;c++){for(r=4*(d*y+c),e=0,i=0,n=0,s=0,f=0;f<_;f++)for(u=0;u<_;u++)a=c+u-v,(o=d+f-v)<0||o>=w||a<0||a>=y||(l=4*(o*y+a),h=p[f*_+u],e+=m[l]*h,i+=m[l+1]*h,n+=m[l+2]*h,S||(s+=m[l+3]*h));E[r]=e,E[r+1]=i,E[r+2]=n,E[r+3]=S?m[r+3]:s}t.imageData=C},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Grayscale=n(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,n=t.imageData.data,s=n.length,r=this.mode;for(e=0;e<s;e+=4)"average"===r?i=(n[e]+n[e+1]+n[e+2])/3:"lightness"===r?i=(Math.min(n[e],n[e+1],n[e+2])+Math.max(n[e],n[e+1],n[e+2]))/2:"luminosity"===r&&(i=.21*n[e]+.72*n[e+1]+.07*n[e+2]),n[e]=i,n[e+1]=i,n[e+2]=i},retrieveShader:function(t){var e=this.type+"_"+this.mode;if(!t.programCache.hasOwnProperty(e)){var i=this.fragmentSource[this.mode];t.programCache[e]=this.createProgram(t.context,i)}return t.programCache[e]},getUniformLocations:function(t,e){return{uMode:t.getUniformLocation(e,"uMode")}},sendUniformData:function(t,e){t.uniform1i(e.uMode,1)},isNeutralState:function(){return!1}}),e.Image.filters.Grayscale.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Invert=n(i.BaseFilter,{type:"Invert",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uInvert;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nif (uInvert == 1) {\ngl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n} else {\ngl_FragColor = color;\n}\n}",invert:!0,mainParameter:"invert",applyTo2d:function(t){var e,i=t.imageData.data,n=i.length;for(e=0;e<n;e+=4)i[e]=255-i[e],i[e+1]=255-i[e+1],i[e+2]=255-i[e+2]},isNeutralState:function(){return!this.invert},getUniformLocations:function(t,e){return{uInvert:t.getUniformLocation(e,"uInvert")}},sendUniformData:function(t,e){t.uniform1i(e.uInvert,this.invert)}}),e.Image.filters.Invert.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,n=e.Image.filters,s=e.util.createClass;n.Noise=s(n.BaseFilter,{type:"Noise",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uStepH;\nuniform float uNoise;\nuniform float uSeed;\nvarying vec2 vTexCoord;\nfloat rand(vec2 co, float seed, float vScale) {\nreturn fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n}\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\ngl_FragColor = color;\n}",mainParameter:"noise",noise:0,applyTo2d:function(t){if(0!==this.noise){var e,i,n=t.imageData.data,s=n.length,r=this.noise;for(e=0,s=n.length;e<s;e+=4)i=(.5-Math.random())*r,n[e]+=i,n[e+1]+=i,n[e+2]+=i}},getUniformLocations:function(t,e){return{uNoise:t.getUniformLocation(e,"uNoise"),uSeed:t.getUniformLocation(e,"uSeed")}},sendUniformData:function(t,e){t.uniform1f(e.uNoise,this.noise/255),t.uniform1f(e.uSeed,Math.random())},toObject:function(){return i(this.callSuper("toObject"),{noise:this.noise})}}),e.Image.filters.Noise.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Pixelate=n(i.BaseFilter,{type:"Pixelate",blocksize:4,mainParameter:"blocksize",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBlocksize;\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nfloat blockW = uBlocksize * uStepW;\nfloat blockH = uBlocksize * uStepW;\nint posX = int(vTexCoord.x / blockW);\nint posY = int(vTexCoord.y / blockH);\nfloat fposX = float(posX);\nfloat fposY = float(posY);\nvec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\nvec4 color = texture2D(uTexture, squareCoords);\ngl_FragColor = color;\n}",applyTo2d:function(t){var e,i,n,s,r,a,o,l,h,c,d,u=t.imageData,f=u.data,g=u.height,m=u.width;for(i=0;i<g;i+=this.blocksize)for(n=0;n<m;n+=this.blocksize)for(s=f[e=4*i*m+4*n],r=f[e+1],a=f[e+2],o=f[e+3],c=Math.min(i+this.blocksize,g),d=Math.min(n+this.blocksize,m),l=i;l<c;l++)for(h=n;h<d;h++)f[e=4*l*m+4*h]=s,f[e+1]=r,f[e+2]=a,f[e+3]=o},isNeutralState:function(){return 1===this.blocksize},getUniformLocations:function(t,e){return{uBlocksize:t.getUniformLocation(e,"uBlocksize"),uStepW:t.getUniformLocation(e,"uStepW"),uStepH:t.getUniformLocation(e,"uStepH")}},sendUniformData:function(t,e){t.uniform1f(e.uBlocksize,this.blocksize)}}),e.Image.filters.Pixelate.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,n=e.Image.filters,s=e.util.createClass;n.RemoveColor=s(n.BaseFilter,{type:"RemoveColor",color:"#FFFFFF",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\nif(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\ngl_FragColor.a = 0.0;\n}\n}",distance:.02,useAlpha:!1,applyTo2d:function(t){var i,n,s,r,a=t.imageData.data,o=255*this.distance,l=new e.Color(this.color).getSource(),h=[l[0]-o,l[1]-o,l[2]-o],c=[l[0]+o,l[1]+o,l[2]+o];for(i=0;i<a.length;i+=4)n=a[i],s=a[i+1],r=a[i+2],n>h[0]&&s>h[1]&&r>h[2]&&n<c[0]&&s<c[1]&&r<c[2]&&(a[i+3]=0)},getUniformLocations:function(t,e){return{uLow:t.getUniformLocation(e,"uLow"),uHigh:t.getUniformLocation(e,"uHigh")}},sendUniformData:function(t,i){var n=new e.Color(this.color).getSource(),s=parseFloat(this.distance),r=[0+n[0]/255-s,0+n[1]/255-s,0+n[2]/255-s,1],a=[n[0]/255+s,n[1]/255+s,n[2]/255+s,1];t.uniform4fv(i.uLow,r),t.uniform4fv(i.uHigh,a)},toObject:function(){return i(this.callSuper("toObject"),{color:this.color,distance:this.distance})}}),e.Image.filters.RemoveColor.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass,s={Brownie:[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0],Vintage:[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0],Kodachrome:[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0],Technicolor:[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0],Polaroid:[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0],Sepia:[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0],BlackWhite:[1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,0,0,0,1,0]};for(var r in s)i[r]=n(i.ColorMatrix,{type:r,matrix:s[r],mainParameter:!1,colorsOnly:!0}),e.Image.filters[r].fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric,i=e.Image.filters,n=e.util.createClass;i.BlendColor=n(i.BaseFilter,{type:"BlendColor",color:"#F95C63",mode:"multiply",alpha:1,fragmentSource:{multiply:"gl_FragColor.rgb *= uColor.rgb;\n",screen:"gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\n",add:"gl_FragColor.rgb += uColor.rgb;\n",diff:"gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\n",subtract:"gl_FragColor.rgb -= uColor.rgb;\n",lighten:"gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\n",darken:"gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\n",exclusion:"gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\n",overlay:"if (uColor.r < 0.5) {\ngl_FragColor.r *= 2.0 * uColor.r;\n} else {\ngl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\n}\nif (uColor.g < 0.5) {\ngl_FragColor.g *= 2.0 * uColor.g;\n} else {\ngl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\n}\nif (uColor.b < 0.5) {\ngl_FragColor.b *= 2.0 * uColor.b;\n} else {\ngl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\n}\n",tint:"gl_FragColor.rgb *= (1.0 - uColor.a);\ngl_FragColor.rgb += uColor.rgb;\n"},buildSource:function(t){return"precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ngl_FragColor = color;\nif (color.a > 0.0) {\n"+this.fragmentSource[t]+"}\n}"},retrieveShader:function(t){var e,i=this.type+"_"+this.mode;return t.programCache.hasOwnProperty(i)||(e=this.buildSource(this.mode),t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyTo2d:function(t){var i,n,s,r,a,o,l,h=t.imageData.data,c=h.length,d=1-this.alpha;i=(l=new e.Color(this.color).getSource())[0]*this.alpha,n=l[1]*this.alpha,s=l[2]*this.alpha;for(var u=0;u<c;u+=4)switch(r=h[u],a=h[u+1],o=h[u+2],this.mode){case"multiply":h[u]=r*i/255,h[u+1]=a*n/255,h[u+2]=o*s/255;break;case"screen":h[u]=255-(255-r)*(255-i)/255,h[u+1]=255-(255-a)*(255-n)/255,h[u+2]=255-(255-o)*(255-s)/255;break;case"add":h[u]=r+i,h[u+1]=a+n,h[u+2]=o+s;break;case"diff":case"difference":h[u]=Math.abs(r-i),h[u+1]=Math.abs(a-n),h[u+2]=Math.abs(o-s);break;case"subtract":h[u]=r-i,h[u+1]=a-n,h[u+2]=o-s;break;case"darken":h[u]=Math.min(r,i),h[u+1]=Math.min(a,n),h[u+2]=Math.min(o,s);break;case"lighten":h[u]=Math.max(r,i),h[u+1]=Math.max(a,n),h[u+2]=Math.max(o,s);break;case"overlay":h[u]=i<128?2*r*i/255:255-2*(255-r)*(255-i)/255,h[u+1]=n<128?2*a*n/255:255-2*(255-a)*(255-n)/255,h[u+2]=s<128?2*o*s/255:255-2*(255-o)*(255-s)/255;break;case"exclusion":h[u]=i+r-2*i*r/255,h[u+1]=n+a-2*n*a/255,h[u+2]=s+o-2*s*o/255;break;case"tint":h[u]=i+r*d,h[u+1]=n+a*d,h[u+2]=s+o*d}},getUniformLocations:function(t,e){return{uColor:t.getUniformLocation(e,"uColor")}},sendUniformData:function(t,i){var n=new e.Color(this.color).getSource();n[0]=this.alpha*n[0]/255,n[1]=this.alpha*n[1]/255,n[2]=this.alpha*n[2]/255,n[3]=this.alpha,t.uniform4fv(i.uColor,n)},toObject:function(){return{type:this.type,color:this.color,mode:this.mode,alpha:this.alpha}}}),e.Image.filters.BlendColor.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric,i=e.Image.filters,n=e.util.createClass;i.BlendImage=n(i.BaseFilter,{type:"BlendImage",image:null,mode:"multiply",alpha:1,vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nuniform mat3 uTransformMatrix;\nvoid main() {\nvTexCoord = aPosition;\nvTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:{multiply:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.rgba *= color2.rgba;\ngl_FragColor = color;\n}",mask:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.a = color2.a;\ngl_FragColor = color;\n}"},retrieveShader:function(t){var e=this.type+"_"+this.mode,i=this.fragmentSource[this.mode];return t.programCache.hasOwnProperty(e)||(t.programCache[e]=this.createProgram(t.context,i)),t.programCache[e]},applyToWebGL:function(t){var e=t.context,i=this.createTexture(t.filterBackend,this.image);this.bindAdditionalTexture(e,i,e.TEXTURE1),this.callSuper("applyToWebGL",t),this.unbindAdditionalTexture(e,e.TEXTURE1)},createTexture:function(t,e){return t.getCachedTexture(e.cacheKey,e._element)},calculateMatrix:function(){var t=this.image,e=t._element.width,i=t._element.height;return[1/t.scaleX,0,0,0,1/t.scaleY,0,-t.left/e,-t.top/i,1]},applyTo2d:function(t){var i,n,s,r,a,o,l,h,c,d,u,f=t.imageData,g=t.filterBackend.resources,m=f.data,p=m.length,_=f.width,v=f.height,y=this.image;g.blendImage||(g.blendImage=e.util.createCanvasElement()),d=(c=g.blendImage).getContext("2d"),c.width!==_||c.height!==v?(c.width=_,c.height=v):d.clearRect(0,0,_,v),d.setTransform(y.scaleX,0,0,y.scaleY,y.left,y.top),d.drawImage(y._element,0,0,_,v),u=d.getImageData(0,0,_,v).data;for(var w=0;w<p;w+=4)switch(a=m[w],o=m[w+1],l=m[w+2],h=m[w+3],i=u[w],n=u[w+1],s=u[w+2],r=u[w+3],this.mode){case"multiply":m[w]=a*i/255,m[w+1]=o*n/255,m[w+2]=l*s/255,m[w+3]=h*r/255;break;case"mask":m[w+3]=r}},getUniformLocations:function(t,e){return{uTransformMatrix:t.getUniformLocation(e,"uTransformMatrix"),uImage:t.getUniformLocation(e,"uImage")}},sendUniformData:function(t,e){var i=this.calculateMatrix();t.uniform1i(e.uImage,1),t.uniformMatrix3fv(e.uTransformMatrix,!1,i)},toObject:function(){return{type:this.type,image:this.image&&this.image.toObject(),mode:this.mode,alpha:this.alpha}}}),e.Image.filters.BlendImage.fromObject=function(t,i){e.Image.fromObject(t.image,function(n){var s=e.util.object.clone(t);s.image=n,i(new e.Image.filters.BlendImage(s))})}}(e),function(t){var e=t.fabric||(t.fabric={}),i=Math.pow,n=Math.floor,s=Math.sqrt,r=Math.abs,a=Math.round,o=Math.sin,l=Math.ceil,h=e.Image.filters,c=e.util.createClass;h.Resize=c(h.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3,getUniformLocations:function(t,e){return{uDelta:t.getUniformLocation(e,"uDelta"),uTaps:t.getUniformLocation(e,"uTaps")}},sendUniformData:function(t,e){t.uniform2fv(e.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),t.uniform1fv(e.uTaps,this.taps)},retrieveShader:function(t){var e=this.getFilterWindow(),i=this.type+"_"+e;if(!t.programCache.hasOwnProperty(i)){var n=this.generateShader(e);t.programCache[i]=this.createProgram(t.context,n)}return t.programCache[i]},getFilterWindow:function(){var t=this.tempScale;return Math.ceil(this.lanczosLobes/t)},getTaps:function(){for(var t=this.lanczosCreate(this.lanczosLobes),e=this.tempScale,i=this.getFilterWindow(),n=new Array(i),s=1;s<=i;s++)n[s-1]=t(s*e);return n},generateShader:function(t){for(var e=new Array(t),i=this.fragmentSourceTOP,n=1;n<=t;n++)e[n-1]=n+".0 * uDelta";return i+="uniform float uTaps["+t+"];\n",i+="void main() {\n",i+="  vec4 color = texture2D(uTexture, vTexCoord);\n",i+="  float sum = 1.0;\n",e.forEach(function(t,e){i+="  color += texture2D(uTexture, vTexCoord + "+t+") * uTaps["+e+"];\n",i+="  color += texture2D(uTexture, vTexCoord - "+t+") * uTaps["+e+"];\n",i+="  sum += 2.0 * uTaps["+e+"];\n"}),i+="  gl_FragColor = color / sum;\n",i+="}"},fragmentSourceTOP:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\n",applyTo:function(t){t.webgl?(t.passes++,this.width=t.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=t.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),t.destinationWidth=this.dW,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceWidth=t.destinationWidth,this.height=t.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),t.destinationHeight=this.dH,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceHeight=t.destinationHeight):this.applyTo2d(t)},isNeutralState:function(){return 1===this.scaleX&&1===this.scaleY},lanczosCreate:function(t){return function(e){if(e>=t||e<=-t)return 0;if(e<1.1920929e-7&&e>-1.1920929e-7)return 1;var i=(e*=Math.PI)/t;return o(e)/e*o(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,n=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/n;var s,r=e.width,o=e.height,l=a(r*i),h=a(o*n);"sliceHack"===this.resizeType?s=this.sliceByTwo(t,r,o,l,h):"hermite"===this.resizeType?s=this.hermiteFastResize(t,r,o,l,h):"bilinear"===this.resizeType?s=this.bilinearFiltering(t,r,o,l,h):"lanczos"===this.resizeType&&(s=this.lanczosResize(t,r,o,l,h)),t.imageData=s},sliceByTwo:function(t,i,s,r,a){var o,l,h=t.imageData,c=.5,d=!1,u=!1,f=i*c,g=s*c,m=e.filterBackend.resources,p=0,_=0,v=i,y=0;for(m.sliceByTwo||(m.sliceByTwo=document.createElement("canvas")),((o=m.sliceByTwo).width<1.5*i||o.height<s)&&(o.width=1.5*i,o.height=s),(l=o.getContext("2d")).clearRect(0,0,1.5*i,s),l.putImageData(h,0,0),r=n(r),a=n(a);!d||!u;)i=f,s=g,r<n(f*c)?f=n(f*c):(f=r,d=!0),a<n(g*c)?g=n(g*c):(g=a,u=!0),l.drawImage(o,p,_,i,s,v,y,f,g),p=v,_=y,y+=g;return l.getImageData(p,_,r,a)},lanczosResize:function(t,e,a,o,h){var c=t.imageData.data,d=t.ctx.createImageData(o,h),u=d.data,f=this.lanczosCreate(this.lanczosLobes),g=this.rcpScaleX,m=this.rcpScaleY,p=2/this.rcpScaleX,_=2/this.rcpScaleY,v=l(g*this.lanczosLobes/2),y=l(m*this.lanczosLobes/2),w={},C={},E={};return function t(l){var S,T,b,I,x,R,O,A,D,M,L;for(C.x=(l+.5)*g,E.x=n(C.x),S=0;S<h;S++){for(C.y=(S+.5)*m,E.y=n(C.y),x=0,R=0,O=0,A=0,D=0,T=E.x-v;T<=E.x+v;T++)if(!(T<0||T>=e)){M=n(1e3*r(T-C.x)),w[M]||(w[M]={});for(var F=E.y-y;F<=E.y+y;F++)F<0||F>=a||(L=n(1e3*r(F-C.y)),w[M][L]||(w[M][L]=f(s(i(M*p,2)+i(L*_,2))/1e3)),(b=w[M][L])>0&&(x+=b,R+=b*c[I=4*(F*e+T)],O+=b*c[I+1],A+=b*c[I+2],D+=b*c[I+3]))}u[I=4*(S*o+l)]=R/x,u[I+1]=O/x,u[I+2]=A/x,u[I+3]=D/x}return++l<o?t(l):d}(0)},bilinearFiltering:function(t,e,i,s,r){var a,o,l,h,c,d,u,f,g,m=0,p=this.rcpScaleX,_=this.rcpScaleY,v=4*(e-1),y=t.imageData.data,w=t.ctx.createImageData(s,r),C=w.data;for(l=0;l<r;l++)for(h=0;h<s;h++)for(c=p*h-(a=n(p*h)),d=_*l-(o=n(_*l)),g=4*(o*e+a),u=0;u<4;u++)f=y[g+u]*(1-c)*(1-d)+y[g+4+u]*c*(1-d)+y[g+v+u]*d*(1-c)+y[g+v+4+u]*c*d,C[m++]=f;return w},hermiteFastResize:function(t,e,i,a,o){for(var h=this.rcpScaleX,c=this.rcpScaleY,d=l(h/2),u=l(c/2),f=t.imageData.data,g=t.ctx.createImageData(a,o),m=g.data,p=0;p<o;p++)for(var _=0;_<a;_++){for(var v=4*(_+p*a),y=0,w=0,C=0,E=0,S=0,T=0,b=0,I=(p+.5)*c,x=n(p*c);x<(p+1)*c;x++)for(var R=r(I-(x+.5))/u,O=(_+.5)*h,A=R*R,D=n(_*h);D<(_+1)*h;D++){var M=r(O-(D+.5))/d,L=s(A+M*M);L>1&&L<-1||(y=2*L*L*L-3*L*L+1)>0&&(b+=y*f[3+(M=4*(D+x*e))],C+=y,f[M+3]<255&&(y=y*f[M+3]/250),E+=y*f[M],S+=y*f[M+1],T+=y*f[M+2],w+=y)}m[v]=E/w,m[v+1]=S/w,m[v+2]=T/w,m[v+3]=b/C}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Contrast=n(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i=t.imageData.data,n=i.length,s=Math.floor(255*this.contrast),r=259*(s+255)/(255*(259-s));for(e=0;e<n;e+=4)i[e]=r*(i[e]-128)+128,i[e+1]=r*(i[e+1]-128)+128,i[e+2]=r*(i[e+2]-128)+128}},getUniformLocations:function(t,e){return{uContrast:t.getUniformLocation(e,"uContrast")}},sendUniformData:function(t,e){t.uniform1f(e.uContrast,this.contrast)}}),e.Image.filters.Contrast.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Saturation=n(i.BaseFilter,{type:"Saturation",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uSaturation;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat rgMax = max(color.r, color.g);\nfloat rgbMax = max(rgMax, color.b);\ncolor.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\ncolor.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\ncolor.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\ngl_FragColor = color;\n}",saturation:0,mainParameter:"saturation",applyTo2d:function(t){if(0!==this.saturation){var e,i,n=t.imageData.data,s=n.length,r=-this.saturation;for(e=0;e<s;e+=4)i=Math.max(n[e],n[e+1],n[e+2]),n[e]+=i!==n[e]?(i-n[e])*r:0,n[e+1]+=i!==n[e+1]?(i-n[e+1])*r:0,n[e+2]+=i!==n[e+2]?(i-n[e+2])*r:0}},getUniformLocations:function(t,e){return{uSaturation:t.getUniformLocation(e,"uSaturation")}},sendUniformData:function(t,e){t.uniform1f(e.uSaturation,-this.saturation)}}),e.Image.filters.Saturation.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Vibrance=n(i.BaseFilter,{type:"Vibrance",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uVibrance;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat max = max(color.r, max(color.g, color.b));\nfloat avg = (color.r + color.g + color.b) / 3.0;\nfloat amt = (abs(max - avg) * 2.0) * uVibrance;\ncolor.r += max != color.r ? (max - color.r) * amt : 0.00;\ncolor.g += max != color.g ? (max - color.g) * amt : 0.00;\ncolor.b += max != color.b ? (max - color.b) * amt : 0.00;\ngl_FragColor = color;\n}",vibrance:0,mainParameter:"vibrance",applyTo2d:function(t){if(0!==this.vibrance){var e,i,n,s,r=t.imageData.data,a=r.length,o=-this.vibrance;for(e=0;e<a;e+=4)i=Math.max(r[e],r[e+1],r[e+2]),n=(r[e]+r[e+1]+r[e+2])/3,s=2*Math.abs(i-n)/255*o,r[e]+=i!==r[e]?(i-r[e])*s:0,r[e+1]+=i!==r[e+1]?(i-r[e+1])*s:0,r[e+2]+=i!==r[e+2]?(i-r[e+2])*s:0}},getUniformLocations:function(t,e){return{uVibrance:t.getUniformLocation(e,"uVibrance")}},sendUniformData:function(t,e){t.uniform1f(e.uVibrance,-this.vibrance)}}),e.Image.filters.Vibrance.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Blur=n(i.BaseFilter,{type:"Blur",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\nconst float nSamples = 15.0;\nvec3 v3offset = vec3(12.9898, 78.233, 151.7182);\nfloat random(vec3 scale) {\nreturn fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n}\nvoid main() {\nvec4 color = vec4(0.0);\nfloat total = 0.0;\nfloat offset = random(v3offset);\nfor (float t = -nSamples; t <= nSamples; t++) {\nfloat percent = (t + offset - 0.5) / nSamples;\nfloat weight = 1.0 - abs(percent);\ncolor += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\ntotal += weight;\n}\ngl_FragColor = color / total;\n}",blur:0,mainParameter:"blur",applyTo:function(t){t.webgl?(this.aspectRatio=t.sourceWidth/t.sourceHeight,t.passes++,this._setupFrameBuffer(t),this.horizontal=!0,this.applyToWebGL(t),this._swapTextures(t),this._setupFrameBuffer(t),this.horizontal=!1,this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},applyTo2d:function(t){t.imageData=this.simpleBlur(t)},simpleBlur:function(t){var i,n,s=t.filterBackend.resources,r=t.imageData.width,a=t.imageData.height;s.blurLayer1||(s.blurLayer1=e.util.createCanvasElement(),s.blurLayer2=e.util.createCanvasElement()),i=s.blurLayer1,n=s.blurLayer2,i.width===r&&i.height===a||(n.width=i.width=r,n.height=i.height=a);var o,l,h,c,d=i.getContext("2d"),u=n.getContext("2d"),f=.06*this.blur*.5;for(d.putImageData(t.imageData,0,0),u.clearRect(0,0,r,a),c=-15;c<=15;c++)h=f*(l=c/15)*r+(o=(Math.random()-.5)/4),u.globalAlpha=1-Math.abs(l),u.drawImage(i,h,o),d.drawImage(n,0,0),u.globalAlpha=1,u.clearRect(0,0,n.width,n.height);for(c=-15;c<=15;c++)h=f*(l=c/15)*a+(o=(Math.random()-.5)/4),u.globalAlpha=1-Math.abs(l),u.drawImage(i,o,h),d.drawImage(n,0,0),u.globalAlpha=1,u.clearRect(0,0,n.width,n.height);t.ctx.drawImage(i,0,0);var g=t.ctx.getImageData(0,0,i.width,i.height);return d.globalAlpha=1,d.clearRect(0,0,i.width,i.height),g},getUniformLocations:function(t,e){return{delta:t.getUniformLocation(e,"uDelta")}},sendUniformData:function(t,e){var i=this.chooseRightDelta();t.uniform2fv(e.delta,i)},chooseRightDelta:function(){var t,e=1,i=[0,0];return this.horizontal?this.aspectRatio>1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Gamma=n(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var e,i=t.imageData.data,n=this.gamma,s=i.length,r=1/n[0],a=1/n[1],o=1/n[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,s=256;e<s;e++)this.rVals[e]=255*Math.pow(e/255,r),this.gVals[e]=255*Math.pow(e/255,a),this.bVals[e]=255*Math.pow(e/255,o);for(e=0,s=i.length;e<s;e+=4)i[e]=this.rVals[i[e]],i[e+1]=this.gVals[i[e+1]],i[e+2]=this.bVals[i[e+2]]},getUniformLocations:function(t,e){return{uGamma:t.getUniformLocation(e,"uGamma")}},sendUniformData:function(t,e){t.uniform3fv(e.uGamma,this.gamma)}}),e.Image.filters.Gamma.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.Composed=n(i.BaseFilter,{type:"Composed",subFilters:[],initialize:function(t){this.callSuper("initialize",t),this.subFilters=this.subFilters.slice(0)},applyTo:function(t){t.passes+=this.subFilters.length-1,this.subFilters.forEach(function(e){e.applyTo(t)})},toObject:function(){return e.util.object.extend(this.callSuper("toObject"),{subFilters:this.subFilters.map(function(t){return t.toObject()})})},isNeutralState:function(){return!this.subFilters.some(function(t){return!t.isNeutralState()})}}),e.Image.filters.Composed.fromObject=function(t,i){var n=(t.subFilters||[]).map(function(t){return new e.Image.filters[t.type](t)}),s=new e.Image.filters.Composed({subFilters:n});return i&&i(s),s}}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,n=e.util.createClass;i.HueRotation=n(i.ColorMatrix,{type:"HueRotation",rotation:0,mainParameter:"rotation",calculateMatrix:function(){var t=this.rotation*Math.PI,i=e.util.cos(t),n=e.util.sin(t),s=1/3,r=Math.sqrt(s)*n,a=1-i;this.matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix[0]=i+a/3,this.matrix[1]=s*a-r,this.matrix[2]=s*a+r,this.matrix[5]=s*a+r,this.matrix[6]=i+s*a,this.matrix[7]=s*a-r,this.matrix[10]=s*a-r,this.matrix[11]=s*a+r,this.matrix[12]=i+s*a},isNeutralState:function(t){return this.calculateMatrix(),i.BaseFilter.prototype.isNeutralState.call(this,t)},applyTo:function(t){this.calculateMatrix(),i.BaseFilter.prototype.applyTo.call(this,t)}}),e.Image.filters.HueRotation.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.clone;if(e.Text)e.warn("fabric.Text is already defined");else{var n="fontFamily fontWeight fontSize text underline overline linethrough textAlign fontStyle lineHeight textBackgroundColor charSpacing styles direction path pathStartOffset pathSide pathAlign".split(" ");e.Text=e.util.createClass(e.Object,{_dimensionAffectingProps:["fontSize","fontWeight","fontFamily","fontStyle","lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:"left",fontStyle:"normal",lineHeight:1.16,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},textBackgroundColor:"",stateProperties:e.Object.prototype.stateProperties.concat(n),cacheProperties:e.Object.prototype.cacheProperties.concat(n),stroke:null,shadow:null,path:null,pathStartOffset:0,pathSide:"left",pathAlign:"baseline",_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.315,overline:-.88},_fontSizeMult:1.13,charSpacing:0,styles:null,_measuringContext:null,deltaY:0,direction:"ltr",_styleProperties:["stroke","strokeWidth","fill","fontFamily","fontSize","fontWeight","fontStyle","underline","overline","linethrough","deltaY","textBackgroundColor"],__charBounds:[],CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,initialize:function(t,e){this.styles=e&&e.styles||{},this.text=t,this.__skipDimension=!0,this.callSuper("initialize",e),this.path&&this.setPathInfo(),this.__skipDimension=!1,this.initDimensions(),this.setCoords(),this.setupState({propertySet:"_dimensionAffectingProps"})},setPathInfo:function(){var t=this.path;t&&(t.segmentsInfo=e.util.getPathSegmentsInfo(t.path))},getMeasuringContext:function(){return e._measuringContext||(e._measuringContext=this.canvas&&this.canvas.contextCache||e.util.createCanvasElement().getContext("2d")),e._measuringContext},_splitText:function(){var t=this._splitTextIntoLines(this.text);return this.textLines=t.lines,this._textLines=t.graphemeLines,this._unwrappedTextLines=t._unwrappedLines,this._text=t.graphemeText,t},initDimensions:function(){this.__skipDimension||(this._splitText(),this._clearCache(),this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.saveState({propertySet:"_dimensionAffectingProps"}))},enlargeSpaces:function(){for(var t,e,i,n,s,r,a,o=0,l=this._textLines.length;o<l;o++)if(("justify"===this.textAlign||o!==l-1&&!this.isEndOfWrapping(o))&&(n=0,s=this._textLines[o],(e=this.getLineWidth(o))<this.width&&(a=this.textLines[o].match(this._reSpacesAndTabs)))){i=a.length,t=(this.width-e)/i;for(var h=0,c=s.length;h<=c;h++)r=this.__charBounds[o][h],this._reSpaceAndTab.test(s[h])?(r.width+=t,r.kernedWidth+=t,r.left+=n,n+=t):r.left+=n}},isEndOfWrapping:function(t){return t===this._textLines.length-1},missingNewlineOffset:function(){return 1},toString:function(){return"#<fabric.Text ("+this.complexity()+'): { "text": "'+this.text+'", "fontFamily": "'+this.fontFamily+'" }>'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){var e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){if(t.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline="bottom"}t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;e<i;e++){var n=this.getLineWidth(e);n>t&&(t=n)}return t},_renderTextLine:function(t,e,i,n,s,r){this._renderChars(t,e,i,n,s,r)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,n,s,r,a,o,l=t.fillStyle,h=this._getLeftOffset(),c=this._getTopOffset(),d=0,u=0,f=this.path,g=0,m=this._textLines.length;g<m;g++)if(e=this.getHeightOfLine(g),this.textBackgroundColor||this.styleHas("textBackgroundColor",g)){n=this._textLines[g],i=this._getLineLeftOffset(g),u=0,d=0,s=this.getValueOfPropertyAt(g,0,"textBackgroundColor");for(var p=0,_=n.length;p<_;p++)r=this.__charBounds[g][p],a=this.getValueOfPropertyAt(g,p,"textBackgroundColor"),f?(t.save(),t.translate(r.renderLeft,r.renderTop),t.rotate(r.angle),t.fillStyle=a,a&&t.fillRect(-r.width/2,-e/this.lineHeight*(1-this._fontSizeFraction),r.width,e/this.lineHeight),t.restore()):a!==s?(o=h+i+d,"rtl"===this.direction&&(o=this.width-o-u),t.fillStyle=s,s&&t.fillRect(o,c,u,e/this.lineHeight),d=r.left,u=r.width,s=a):u+=r.kernedWidth;a&&!f&&(o=h+i+d,"rtl"===this.direction&&(o=this.width-o-u),t.fillStyle=a,t.fillRect(o,c,u,e/this.lineHeight)),c+=e}else c+=e;t.fillStyle=l,this._removeShadow(t)}},getFontCache:function(t){var i=t.fontFamily.toLowerCase();e.charWidthsCache[i]||(e.charWidthsCache[i]={});var n=e.charWidthsCache[i],s=t.fontStyle.toLowerCase()+"_"+(t.fontWeight+"").toLowerCase();return n[s]||(n[s]={}),n[s]},_measureChar:function(t,e,i,n){var s,r,a,o,l=this.getFontCache(e),h=i+t,c=this._getFontDeclaration(e)===this._getFontDeclaration(n),d=e.fontSize/this.CACHE_FONT_SIZE;if(i&&void 0!==l[i]&&(a=l[i]),void 0!==l[t]&&(o=s=l[t]),c&&void 0!==l[h]&&(o=(r=l[h])-a),void 0===s||void 0===a||void 0===r){var u=this.getMeasuringContext();this._setTextStyles(u,e,!0)}return void 0===s&&(o=s=u.measureText(t).width,l[t]=s),void 0===a&&c&&i&&(a=u.measureText(i).width,l[i]=a),c&&void 0===r&&(r=u.measureText(h).width,l[h]=r,o=r-a),{width:s*d,kernedWidth:o*d}},getHeightOfChar:function(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")},measureLine:function(t){var e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e},_measureLine:function(t){var i,n,s,r,a,o,l=0,h=this._textLines[t],c=new Array(h.length),d=0,u=this.path,f="right"===this.pathSide;for(this.__charBounds[t]=c,i=0;i<h.length;i++)n=h[i],r=this._getGraphemeBox(n,t,i,s),c[i]=r,l+=r.kernedWidth,s=n;if(c[i]={left:r?r.left+r.width:0,width:0,kernedWidth:0,height:this.fontSize},u){switch(o=u.segmentsInfo[u.segmentsInfo.length-1].length,(a=e.util.getPointOnPath(u.path,0,u.segmentsInfo)).x+=u.pathOffset.x,a.y+=u.pathOffset.y,this.textAlign){case"left":d=f?o-l:0;break;case"center":d=(o-l)/2;break;case"right":d=f?0:o-l}for(d+=this.pathStartOffset*(f?-1:1),i=f?h.length-1:0;f?i>=0:i<h.length;f?i--:i++)r=c[i],d>o?d%=o:d<0&&(d+=o),this._setGraphemeOnPath(d,r,a),d+=r.kernedWidth}return{width:l,numOfSpaces:0}},_setGraphemeOnPath:function(t,i,n){var s=t+i.kernedWidth/2,r=this.path,a=e.util.getPointOnPath(r.path,s,r.segmentsInfo);i.renderLeft=a.x-n.x,i.renderTop=a.y-n.y,i.angle=a.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(t,e,i,n,s){var r,a=this.getCompleteStyleDeclaration(e,i),o=n?this.getCompleteStyleDeclaration(e,i-1):{},l=this._measureChar(t,a,n,o),h=l.kernedWidth,c=l.width;0!==this.charSpacing&&(c+=r=this._getWidthOfCharSpacing(),h+=r);var d={width:c,left:0,height:a.fontSize,kernedWidth:h,deltaY:a.deltaY};if(i>0&&!s){var u=this.__charBounds[e][i-1];d.left=u.left+u.width+l.kernedWidth-l.width}return d},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),n=1,s=e.length;n<s;n++)i=Math.max(this.getHeightOfChar(t,n),i);return this.__lineHeights[t]=i*this.lineHeight*this._fontSizeMult},calcTextHeight:function(){for(var t,e=0,i=0,n=this._textLines.length;i<n;i++)t=this.getHeightOfLine(i),e+=i===n-1?t/this.lineHeight:t;return e},_getLeftOffset:function(){return"ltr"===this.direction?-this.width/2:this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextCommon:function(t,e){t.save();for(var i=0,n=this._getLeftOffset(),s=this._getTopOffset(),r=0,a=this._textLines.length;r<a;r++){var o=this.getHeightOfLine(r),l=o/this.lineHeight,h=this._getLineLeftOffset(r);this._renderTextLine(e,t,this._textLines[r],n+h,s+i+l,r),i+=o}t.restore()},_renderTextFill:function(t){(this.fill||this.styleHas("fill"))&&this._renderTextCommon(t,"fillText")},_renderTextStroke:function(t){(this.stroke&&0!==this.strokeWidth||!this.isEmptyStyles())&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())},_renderChars:function(t,e,i,n,s,r){var a,o,l,h,c,d=this.getHeightOfLine(r),u=-1!==this.textAlign.indexOf("justify"),f="",g=0,m=this.path,p=!u&&0===this.charSpacing&&this.isEmptyStyles(r)&&!m,_="ltr"===this.direction,v="ltr"===this.direction?1:-1,y=e.canvas.getAttribute("dir");if(e.save(),y!==this.direction&&(e.canvas.setAttribute("dir",_?"ltr":"rtl"),e.direction=_?"ltr":"rtl",e.textAlign=_?"left":"right"),s-=d*this._fontSizeFraction/this.lineHeight,p)return this._renderChar(t,e,r,0,i.join(""),n,s,d),void e.restore();for(var w=0,C=i.length-1;w<=C;w++)h=w===C||this.charSpacing||m,f+=i[w],l=this.__charBounds[r][w],0===g?(n+=v*(l.kernedWidth-l.width),g+=l.width):g+=l.kernedWidth,u&&!h&&this._reSpaceAndTab.test(i[w])&&(h=!0),h||(a=a||this.getCompleteStyleDeclaration(r,w),o=this.getCompleteStyleDeclaration(r,w+1),h=this._hasStyleChanged(a,o)),h&&(m?(e.save(),e.translate(l.renderLeft,l.renderTop),e.rotate(l.angle),this._renderChar(t,e,r,w,f,-g/2,0,d),e.restore()):(c=n,this._renderChar(t,e,r,w,f,c,s,d)),f="",a=o,n+=v*g,g=0);e.restore()},_applyPatternGradientTransformText:function(t){var i,n=e.util.createCanvasElement(),s=this.width+this.strokeWidth,r=this.height+this.strokeWidth;return n.width=s,n.height=r,(i=n.getContext("2d")).beginPath(),i.moveTo(0,0),i.lineTo(s,0),i.lineTo(s,r),i.lineTo(0,r),i.closePath(),i.translate(s/2,r/2),i.fillStyle=t.toLive(i),this._applyPatternGradientTransform(i,t),i.fill(),i.createPattern(n,"no-repeat")},handleFiller:function(t,e,i){var n,s;return i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?(n=-this.width/2,s=-this.height/2,t.translate(n,s),t[e]=this._applyPatternGradientTransformText(i),{offsetX:n,offsetY:s}):(t[e]=i.toLive(t,this),this._applyPatternGradientTransform(t,i)):(t[e]=i,{offsetX:0,offsetY:0})},_setStrokeStyles:function(t,e){return t.lineWidth=e.strokeWidth,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",e.stroke)},_setFillStyles:function(t,e){return this.handleFiller(t,"fillStyle",e.fill)},_renderChar:function(t,e,i,n,s,r,a){var o,l,h=this._getStyleDeclaration(i,n),c=this.getCompleteStyleDeclaration(i,n),d="fillText"===t&&c.fill,u="strokeText"===t&&c.stroke&&c.strokeWidth;(u||d)&&(e.save(),d&&(o=this._setFillStyles(e,c)),u&&(l=this._setStrokeStyles(e,c)),e.font=this._getFontDeclaration(c),h&&h.textBackgroundColor&&this._removeShadow(e),h&&h.deltaY&&(a+=h.deltaY),d&&e.fillText(s,r-o.offsetX,a-o.offsetY),u&&e.strokeText(s,r-l.offsetX,a-l.offsetY),e.restore())},setSuperscript:function(t,e){return this._setScript(t,e,this.superscript)},setSubscript:function(t,e){return this._setScript(t,e,this.subscript)},_setScript:function(t,e,i){var n=this.get2DCursorLocation(t,!0),s=this.getValueOfPropertyAt(n.lineIndex,n.charIndex,"fontSize"),r=this.getValueOfPropertyAt(n.lineIndex,n.charIndex,"deltaY"),a={fontSize:s*i.size,deltaY:r+s*i.baseline};return this.setSelectionStyles(a,t,e),this},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth||t.fontSize!==e.fontSize||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.deltaY!==e.deltaY},_hasStyleChangedForSvg:function(t,e){return this._hasStyleChanged(t,e)||t.overline!==e.overline||t.underline!==e.underline||t.linethrough!==e.linethrough},_getLineLeftOffset:function(t){var e=this.getLineWidth(t),i=this.width-e,n=this.textAlign,s=this.direction,r=0,a=this.isEndOfWrapping(t);return"justify"===n||"justify-center"===n&&!a||"justify-right"===n&&!a||"justify-left"===n&&!a?0:("center"===n&&(r=i/2),"right"===n&&(r=i),"justify-center"===n&&(r=i/2),"justify-right"===n&&(r=i),"rtl"===s&&(r-=i),r)},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.dirty=!0,this._forceClearCache=!1),t},getLineWidth:function(t){if(void 0!==this.__lineWidths[t])return this.__lineWidths[t];var e=this.measureLine(t).width;return this.__lineWidths[t]=e,e},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},getValueOfPropertyAt:function(t,e,i){var n=this._getStyleDeclaration(t,e);return n&&void 0!==n[i]?n[i]:this[i]},_renderTextDecoration:function(t,e){if(this[e]||this.styleHas(e)){for(var i,n,s,r,a,o,l,h,c,d,u,f,g,m,p,_,v=this._getLeftOffset(),y=this._getTopOffset(),w=this.path,C=this._getWidthOfCharSpacing(),E=this.offsets[e],S=0,T=this._textLines.length;S<T;S++)if(i=this.getHeightOfLine(S),this[e]||this.styleHas(e,S)){l=this._textLines[S],m=i/this.lineHeight,r=this._getLineLeftOffset(S),d=0,u=0,h=this.getValueOfPropertyAt(S,0,e),_=this.getValueOfPropertyAt(S,0,"fill"),c=y+m*(1-this._fontSizeFraction),n=this.getHeightOfChar(S,0),a=this.getValueOfPropertyAt(S,0,"deltaY");for(var b=0,I=l.length;b<I;b++)if(f=this.__charBounds[S][b],g=this.getValueOfPropertyAt(S,b,e),p=this.getValueOfPropertyAt(S,b,"fill"),s=this.getHeightOfChar(S,b),o=this.getValueOfPropertyAt(S,b,"deltaY"),w&&g&&p)t.save(),t.fillStyle=_,t.translate(f.renderLeft,f.renderTop),t.rotate(f.angle),t.fillRect(-f.kernedWidth/2,E*s+o,f.kernedWidth,this.fontSize/15),t.restore();else if((g!==h||p!==_||s!==n||o!==a)&&u>0){var x=v+r+d;"rtl"===this.direction&&(x=this.width-x-u),h&&_&&(t.fillStyle=_,t.fillRect(x,c+E*n+a,u,this.fontSize/15)),d=f.left,u=f.width,h=g,_=p,n=s,a=o}else u+=f.kernedWidth;x=v+r+d,"rtl"===this.direction&&(x=this.width-x-u),t.fillStyle=p,g&&p&&t.fillRect(x,c+E*n+a,u-C,this.fontSize/15),y+=i}else y+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var n=t||this,s=this.fontFamily,r=e.Text.genericFonts.indexOf(s.toLowerCase())>-1,a=void 0===s||s.indexOf("'")>-1||s.indexOf(",")>-1||s.indexOf('"')>-1||r?n.fontFamily:'"'+n.fontFamily+'"';return[e.isLikelyNode?n.fontWeight:n.fontStyle,e.isLikelyNode?n.fontStyle:n.fontWeight,i?this.CACHE_FONT_SIZE+"px":n.fontSize+"px",a].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),n=new Array(i.length),s=["\n"],r=[],a=0;a<i.length;a++)n[a]=e.util.string.graphemeSplit(i[a]),r=r.concat(n[a],s);return r.pop(),{_unwrappedLines:n,lines:i,graphemeText:r,graphemeLines:n}},toObject:function(t){var e=n.concat(t),s=this.callSuper("toObject",e);return s.styles=i(this.styles,!0),s.path&&(s.path=this.path.toObject()),s},set:function(t,e){this.callSuper("set",t,e);var i=!1,n=!1;if("object"==typeof t)for(var s in t)"path"===s&&this.setPathInfo(),i=i||-1!==this._dimensionAffectingProps.indexOf(s),n=n||"path"===s;else i=-1!==this._dimensionAffectingProps.indexOf(t),n="path"===t;return n&&this.setPathInfo(),i&&(this.initDimensions(),this.setCoords()),this},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,n,s){if(!t)return n(null);var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES),a=r.textAnchor||"left";if((s=e.util.object.extend(s?i(s):{},r)).top=s.top||0,s.left=s.left||0,r.textDecoration){var o=r.textDecoration;-1!==o.indexOf("underline")&&(s.underline=!0),-1!==o.indexOf("overline")&&(s.overline=!0),-1!==o.indexOf("line-through")&&(s.linethrough=!0),delete s.textDecoration}"dx"in r&&(s.left+=r.dx),"dy"in r&&(s.top+=r.dy),"fontSize"in s||(s.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE);var l="";"textContent"in t?l=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(l=t.firstChild.data),l=l.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var h=s.strokeWidth;s.strokeWidth=0;var c=new e.Text(l,s),d=c.getScaledHeight()/c.height,u=((c.height+c.strokeWidth)*c.lineHeight-c.height)*d,f=c.getScaledHeight()+u,g=0;"center"===a&&(g=c.getScaledWidth()/2),"right"===a&&(g=c.getScaledWidth()),c.set({left:c.left-g,top:c.top-(f-c.fontSize*(.07+c._fontSizeFraction))/c.lineHeight,strokeWidth:void 0!==h?h:1}),n(c)},e.Text.fromObject=function(t,n){var s=i(t),r=t.path;return delete s.path,e.Object._fromObject("Text",s,function(t){r?e.Object._fromObject("Path",r,function(e){t.set("path",e),n(t)},"path"):n(t)},"text")},e.Text.genericFonts=["sans-serif","serif","cursive","fantasy","monospace"],e.util.createAccessors&&e.util.createAccessors(e.Text)}}(e),T.util.object.extend(T.Text.prototype,{isEmptyStyles:function(t){if(!this.styles)return!0;if(void 0!==t&&!this.styles[t])return!0;var e=void 0===t?this.styles:{line:this.styles[t]};for(var i in e)for(var n in e[i])for(var s in e[i][n])return!1;return!0},styleHas:function(t,e){if(!this.styles||!t||""===t)return!1;if(void 0!==e&&!this.styles[e])return!1;var i=void 0===e?this.styles:{0:this.styles[e]};for(var n in i)for(var s in i[n])if(void 0!==i[n][s][t])return!0;return!1},cleanStyle:function(t){if(!this.styles||!t||""===t)return!1;var e,i,n=this.styles,s=0,r=!0,a=0;for(var o in n){for(var l in e=0,n[o]){var h;s++,(h=n[o][l]).hasOwnProperty(t)?(i?h[t]!==i&&(r=!1):i=h[t],h[t]===this[t]&&delete h[t]):r=!1,0!==Object.keys(h).length?e++:delete n[o][l]}0===e&&delete n[o]}for(var c=0;c<this._textLines.length;c++)a+=this._textLines[c].length;r&&s===a&&(this[t]=i,this.removeStyle(t))},removeStyle:function(t){if(this.styles&&t&&""!==t){var e,i,n,s=this.styles;for(i in s){for(n in e=s[i])delete e[n][t],0===Object.keys(e[n]).length&&delete e[n];0===Object.keys(e).length&&delete s[i]}}},_extendStyles:function(t,e){var i=this.get2DCursorLocation(t);this._getLineStyle(i.lineIndex)||this._setLineStyle(i.lineIndex),this._getStyleDeclaration(i.lineIndex,i.charIndex)||this._setStyleDeclaration(i.lineIndex,i.charIndex,{}),T.util.object.extend(this._getStyleDeclaration(i.lineIndex,i.charIndex),e)},get2DCursorLocation:function(t,e){void 0===t&&(t=this.selectionStart);for(var i=e?this._unwrappedTextLines:this._textLines,n=i.length,s=0;s<n;s++){if(t<=i[s].length)return{lineIndex:s,charIndex:t};t-=i[s].length+this.missingNewlineOffset(s)}return{lineIndex:s-1,charIndex:i[s-1].length<t?i[s-1].length:t}},getSelectionStyles:function(t,e,i){void 0===t&&(t=this.selectionStart||0),void 0===e&&(e=this.selectionEnd||t);for(var n=[],s=t;s<e;s++)n.push(this.getStyleAtPosition(s,i));return n},getStyleAtPosition:function(t,e){var i=this.get2DCursorLocation(t);return(e?this.getCompleteStyleDeclaration(i.lineIndex,i.charIndex):this._getStyleDeclaration(i.lineIndex,i.charIndex))||{}},setSelectionStyles:function(t,e,i){void 0===e&&(e=this.selectionStart||0),void 0===i&&(i=this.selectionEnd||e);for(var n=e;n<i;n++)this._extendStyles(n,t);return this._forceClearCache=!0,this},_getStyleDeclaration:function(t,e){var i=this.styles&&this.styles[t];return i?i[e]:null},getCompleteStyleDeclaration:function(t,e){for(var i,n=this._getStyleDeclaration(t,e)||{},s={},r=0;r<this._styleProperties.length;r++)s[i=this._styleProperties[r]]=void 0===n[i]?this[i]:n[i];return s},_setStyleDeclaration:function(t,e,i){this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){delete this.styles[t][e]},_getLineStyle:function(t){return!!this.styles[t]},_setLineStyle:function(t){this.styles[t]={}},_deleteLineStyle:function(t){delete this.styles[t]}}),function(){function t(t){t.textDecoration&&(t.textDecoration.indexOf("underline")>-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}T.IText=T.util.createClass(T.Text,T.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this._getCursorBoundaries(),e=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(t,e):this.renderSelection(t,e),e.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){void 0===t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),n=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:n.left,topOffset:n.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var e,i,n,s,r=0,a=0,o=this.get2DCursorLocation(t);n=o.charIndex,i=o.lineIndex;for(var l=0;l<i;l++)r+=this.getHeightOfLine(l);e=this._getLineLeftOffset(i);var h=this.__charBounds[i][n];return h&&(a=h.left),0!==this.charSpacing&&n===this._textLines[i].length&&(a-=this._getWidthOfCharSpacing()),s={top:r,left:e+(a>0?a:0)},"rtl"===this.direction&&(s.left*=-1),this.cursorOffsetCache=s,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),n=i.lineIndex,s=i.charIndex>0?i.charIndex-1:0,r=this.getValueOfPropertyAt(n,s,"fontSize"),a=this.scaleX*this.canvas.getZoom(),o=this.cursorWidth/a,l=t.topOffset,h=this.getValueOfPropertyAt(n,s,"deltaY");l+=(1-this._fontSizeFraction)*this.getHeightOfLine(n)/this.lineHeight-r*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.cursorColor||this.getValueOfPropertyAt(n,s,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-o/2,l+t.top+h,o,r)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,n=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,s=-1!==this.textAlign.indexOf("justify"),r=this.get2DCursorLocation(i),a=this.get2DCursorLocation(n),o=r.lineIndex,l=a.lineIndex,h=r.charIndex<0?0:r.charIndex,c=a.charIndex<0?0:a.charIndex,d=o;d<=l;d++){var u,f=this._getLineLeftOffset(d)||0,g=this.getHeightOfLine(d),m=0,p=0;if(d===o&&(m=this.__charBounds[o][h].left),d>=o&&d<l)p=s&&!this.isEndOfWrapping(d)?this.width:this.getLineWidth(d)||5;else if(d===l)if(0===c)p=this.__charBounds[l][c].left;else{var _=this._getWidthOfCharSpacing();p=this.__charBounds[l][c-1].left+this.__charBounds[l][c-1].width-_}u=g,(this.lineHeight<1||d===l&&this.lineHeight>1)&&(g/=this.lineHeight);var v=t.left+f+m,y=p-m,w=g,C=0;this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",w=1,C=g):e.fillStyle=this.selectionColor,"rtl"===this.direction&&(v=this.width-v-y),e.fillRect(v,t.top+t.topOffset+C,y,w),t.topOffset+=u}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),T.IText.fromObject=function(e,i){if(t(e),e.styles)for(var n in e.styles)for(var s in e.styles[n])t(e.styles[n][s]);T.Object._fromObject("IText",e,i,"text")}}(),S=T.util.object.clone,T.util.object.extend(T.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var t=this;this.on("added",function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))})},initRemovedHandler:function(){var t=this;this.on("removed",function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],T.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))})},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach(function(t){t.__isMousedown=!1})},t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,n){var s;return s={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){s.isAborted||t[n]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return s.isAborted}}),s},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){e._tick()},i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i<this._text.length;)e++,i++;return t+e},findLineBoundaryLeft:function(t){for(var e=0,i=t-1;!/\n/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[i])&&i<this._text.length;)e++,i++;return t+e},searchWordBoundary:function(t,e){for(var i=this._text,n=this._reSpace.test(i[t])?t-1:t,s=i[n],r=T.reNonWord;!r.test(s)&&n>0&&n<i.length;)s=i[n+=e];return r.test(s)&&(n+=1===e?0:1),n},selectWord:function(t){t=t||this.selectionStart;var e=this.searchWordBoundary(t,-1),i=this.searchWordBoundary(t,1);this.selectionStart=e,this.selectionEnd=i,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()},selectLine:function(t){t=t||this.selectionStart;var e=this.findLineBoundaryLeft(t),i=this.findLineBoundaryRight(t);return this.selectionStart=e,this.selectionEnd=i,this._fireSelectionChanged(),this._updateTextarea(),this},enterEditing:function(t){if(!this.isEditing&&this.editable)return this.canvas&&(this.canvas.calcOffset(),this.exitEditingOnOthers(this.canvas)),this.isEditing=!0,this.initHiddenTextarea(t),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick(),this.fire("editing:entered"),this._fireSelectionChanged(),this.canvas?(this.canvas.fire("text:editing:entered",{target:this}),this.initMouseMoveHandler(),this.canvas.requestRenderAll(),this):this},exitEditingOnOthers:function(t){t._iTextInstances&&t._iTextInstances.forEach(function(t){t.selected=!1,t.isEditing&&t.exitEditing()})},initMouseMoveHandler:function(){this.canvas.on("mouse:move",this.mouseMoveHandler)},mouseMoveHandler:function(t){if(this.__isMousedown&&this.isEditing){var e=this.getSelectionStartFromPointer(t.e),i=this.selectionStart,n=this.selectionEnd;(e===this.__selectionStartOnMouseDown&&i!==n||i!==e&&n!==e)&&(e>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===n||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(t,e,i){var n=i.slice(0,t),s=T.util.string.graphemeSplit(n).length;if(t===e)return{selectionStart:s,selectionEnd:s};var r=i.slice(t,e);return{selectionStart:s,selectionEnd:s+T.util.string.graphemeSplit(r).length}},fromGraphemeToStringSelection:function(t,e,i){var n=i.slice(0,t).join("").length;return t===e?{selectionStart:n,selectionEnd:n}:{selectionStart:n,selectionEnd:n+i.slice(t,e).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),n=i.lineIndex,s=i.charIndex,r=this.getValueOfPropertyAt(n,s,"fontSize")*this.lineHeight,a=e.leftOffset,o=this.calcTransformMatrix(),l={x:e.left+a,y:e.top+e.topOffset+r},h=this.canvas.getRetinaScaling(),c=this.canvas.upperCanvasEl,d=c.width/h,u=c.height/h,f=d-r,g=u-r,m=c.clientWidth/d,p=c.clientHeight/u;return l=T.util.transformPoint(l,o),(l=T.util.transformPoint(l,this.canvas.viewportTransform)).x*=m,l.y*=p,l.x<0&&(l.x=0),l.x>f&&(l.x=f),l.y<0&&(l.y=0),l.y>g&&(l.y=g),l.x+=this.canvas._offset.left,l.y+=this.canvas._offset.top,{left:l.x+"px",top:l.y+"px",fontSize:r+"px",charHeight:r}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text,e=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,e&&(e.blur&&e.blur(),e.parentNode&&e.parentNode.removeChild(e)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},removeStyleFromTo:function(t,e){var i,n,s=this.get2DCursorLocation(t,!0),r=this.get2DCursorLocation(e,!0),a=s.lineIndex,o=s.charIndex,l=r.lineIndex,h=r.charIndex;if(a!==l){if(this.styles[a])for(i=o;i<this._unwrappedTextLines[a].length;i++)delete this.styles[a][i];if(this.styles[l])for(i=h;i<this._unwrappedTextLines[l].length;i++)(n=this.styles[l][i])&&(this.styles[a]||(this.styles[a]={}),this.styles[a][o+i-h]=n);for(i=a+1;i<=l;i++)delete this.styles[i];this.shiftLineStyles(l,a-l)}else if(this.styles[a]){n=this.styles[a];var c,d,u=h-o;for(i=o;i<h;i++)delete n[i];for(d in this.styles[a])(c=parseInt(d,10))>=h&&(n[c-u]=n[d],delete n[d])}},shiftLineStyles:function(t,e){var i=S(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>t&&(this.styles[s+e]=i[s],i[s-e]||delete this.styles[s])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(t,e,i,n){var s,r={},a=!1,o=this._unwrappedTextLines[t].length===e;for(var l in i||(i=1),this.shiftLineStyles(t,i),this.styles[t]&&(s=this.styles[t][0===e?e:e-1]),this.styles[t]){var h=parseInt(l,10);h>=e&&(a=!0,r[h-e]=this.styles[t][l],o&&0===e||delete this.styles[t][l])}var c=!1;for(a&&!o&&(this.styles[t+i]=r,c=!0),c&&i--;i>0;)n&&n[i-1]?this.styles[t+i]={0:S(n[i-1])}:s?this.styles[t+i]={0:S(s)}:delete this.styles[t+i],i--;this._forceClearCache=!0},insertCharStyleObject:function(t,e,i,n){this.styles||(this.styles={});var s=this.styles[t],r=s?S(s):{};for(var a in i||(i=1),r){var o=parseInt(a,10);o>=e&&(s[o+i]=r[o],r[o-i]||delete s[o])}if(this._forceClearCache=!0,n)for(;i--;)Object.keys(n[i]).length&&(this.styles[t]||(this.styles[t]={}),this.styles[t][e+i]=S(n[i]));else if(s)for(var l=s[e?e-1:1];l&&i--;)this.styles[t][e+i]=S(l)},insertNewStyleBlock:function(t,e,i){for(var n=this.get2DCursorLocation(e,!0),s=[0],r=0,a=0;a<t.length;a++)"\n"===t[a]?s[++r]=0:s[r]++;for(s[0]>0&&(this.insertCharStyleObject(n.lineIndex,n.charIndex,s[0],i),i=i&&i.slice(s[0]+1)),r&&this.insertNewlineStyleObject(n.lineIndex,n.charIndex+s[0],r),a=1;a<r;a++)s[a]>0?this.insertCharStyleObject(n.lineIndex+a,0,s[a],i):i&&this.styles[n.lineIndex+a]&&i[0]&&(this.styles[n.lineIndex+a][0]=i[0]),i=i&&i.slice(s[a]+1);s[a]>0&&this.insertCharStyleObject(n.lineIndex+a,0,s[a],i)},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&i<e?"right"===this._selectionDirection?this.selectionEnd=i:this.selectionStart=i:(e===t?this._selectionDirection="right":"left"===this._selectionDirection&&(this._selectionDirection="right",this.selectionStart=e),this.selectionEnd=i)},setSelectionInBoundaries:function(){var t=this.text.length;this.selectionStart>t?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}}),T.util.object.extend(T.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(t){if(this.canvas){this.__newClickTime=+new Date;var e=t.pointer;this.isTripleClick(e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(t){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(t.e))},tripleClickHandler:function(t){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(t.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(t.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(t){if(this.__isMousedown=!1,!(!this.editable||this.group||t.transform&&t.transform.actionPerformed||t.e.button&&1!==t.e.button)){if(this.canvas){var e=this.canvas._activeObject;if(e&&e!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,n=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,n,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i=this.getLocalPointer(t),n=0,s=0,r=0,a=0,o=0,l=0,h=this._textLines.length;l<h&&r<=i.y;l++)r+=this.getHeightOfLine(l)*this.scaleY,o=l,l>0&&(a+=this._textLines[l-1].length+this.missingNewlineOffset(l-1));s=this._getLineLeftOffset(o)*this.scaleX,e=this._textLines[o],"rtl"===this.direction&&(i.x=this.width*this.scaleX-i.x+s);for(var c=0,d=e.length;c<d&&(n=s,(s+=this.__charBounds[o][c].kernedWidth*this.scaleX)<=i.x);c++)a++;return this._getNewSelectionStartFromOffset(i,n,s,a,d)},_getNewSelectionStartFromOffset:function(t,e,i,n,s){var r=t.x-e,a=i-t.x,o=n+(a>r||a<0?0:1);return this.flipX&&(o=s-o),o>this._text.length&&(o=this._text.length),o}}),T.util.object.extend(T.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=T.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+t.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):T.document.body.appendChild(this.hiddenTextarea),T.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),T.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),T.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),T.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),T.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),T.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),T.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),T.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),T.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(T.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){var e="rtl"===this.direction?this.keysMapRtl:this.keysMap;if(t.keyCode in e)this[e[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown)||!t.ctrlKey&&!t.metaKey)return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(t){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,n,s,r,a,o=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,l=this._text.length,h=o.length,c=h-l,d=this.selectionStart,u=this.selectionEnd,f=d!==u;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),m=d>g.selectionStart;f?(i=this._text.slice(d,u),c+=u-d):h<l&&(i=m?this._text.slice(u+c,u):this._text.slice(d,d-c)),n=o.slice(g.selectionEnd-c,g.selectionEnd),i&&i.length&&(n.length&&(s=this.getSelectionStyles(d,d+1,!1),s=n.map(function(){return s[0]})),f?(r=d,a=u):m?(r=u-i.length,a=u):(r=u,a=u+i.length),this.removeStyleFromTo(r,a)),n.length&&(e&&n.join("")===T.copiedText&&!T.disableStyleCopyPaste&&(s=T.copiedTextStyle),this.insertNewStyleBlock(n,d,s)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){this.compositionStart=t.target.selectionStart,this.compositionEnd=t.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(T.copiedText=this.getSelectedText(),T.disableStyleCopyPaste?T.copiedTextStyle=null:T.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(t){return t&&t.clipboardData||T.window.clipboardData},_getWidthBeforeCursor:function(t,e){var i,n=this._getLineLeftOffset(t);return e>0&&(n+=(i=this.__charBounds[t][e-1]).left+i.width),n},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),n=this.get2DCursorLocation(i),s=n.lineIndex;if(s===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var r=n.charIndex,a=this._getWidthBeforeCursor(s,r),o=this._getIndexOnLine(s+1,a);return this._textLines[s].slice(r).length+o+1+this.missingNewlineOffset(s)},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),n=this.get2DCursorLocation(i),s=n.lineIndex;if(0===s||t.metaKey||33===t.keyCode)return-i;var r=n.charIndex,a=this._getWidthBeforeCursor(s,r),o=this._getIndexOnLine(s-1,a),l=this._textLines[s].slice(0,r),h=this.missingNewlineOffset(s-1);return-this._textLines[s-1].length+o-l.length+(1-h)},_getIndexOnLine:function(t,e){for(var i,n,s=this._textLines[t],r=this._getLineLeftOffset(t),a=0,o=0,l=s.length;o<l;o++)if((r+=i=this.__charBounds[t][o].width)>e){n=!0;var h=r-i,c=r,d=Math.abs(h-e);a=Math.abs(c-e)<d?o:o-1;break}return n||(a=s.length-1),a},moveCursorDown:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i=this["get"+t+"CursorOffset"](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var n;if(t.altKey)n=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;n=this["findLineBoundary"+i](this[e])}if(void 0!==typeof n&&this[e]!==n)return this[e]=n,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,e.shiftKey?i+="Shift":i+="outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t,e){void 0===e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(t,e,i,n){void 0===n&&(n=i),n>i&&this.removeStyleFromTo(i,n);var s=T.util.string.graphemeSplit(t);this.insertNewStyleBlock(s,i,e),this._text=[].concat(this._text.slice(0,i),s,this._text.slice(n)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var t=T.util.toFixed,e=/  +/g;T.util.object.extend(T.Text.prototype,{_toSVG:function(){var t=this._getSVGLeftTopOffsets(),e=this._getSVGTextAndBg(t.textTop,t.textLeft);return this._wrapSVGTextAndBg(e)},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(t){var e=this.getSvgTextDecoration(this);return[t.textBgRects.join(""),'\t\t<text xml:space="preserve" ',this.fontFamily?'font-family="'+this.fontFamily.replace(/"/g,"'")+'" ':"",this.fontSize?'font-size="'+this.fontSize+'" ':"",this.fontStyle?'font-style="'+this.fontStyle+'" ':"",this.fontWeight?'font-weight="'+this.fontWeight+'" ':"",e?'text-decoration="'+e+'" ':"",'style="',this.getSvgStyles(!0),'"',this.addPaintOrder()," >",t.textSpans.join(""),"</text>\n"]},_getSVGTextAndBg:function(t,e){var i,n=[],s=[],r=t;this._setSVGBg(s);for(var a=0,o=this._textLines.length;a<o;a++)i=this._getLineLeftOffset(a),(this.textBackgroundColor||this.styleHas("textBackgroundColor",a))&&this._setSVGTextLineBg(s,a,e+i,r),this._setSVGTextLineText(n,a,e+i,r),r+=this.getHeightOfLine(a);return{textSpans:n,textBgRects:s}},_createTextCharSpan:function(i,n,s,r){var a=i!==i.trim()||i.match(e),o=this.getSvgSpanStyles(n,a),l=o?'style="'+o+'"':"",h=n.deltaY,c="",d=T.Object.NUM_FRACTION_DIGITS;return h&&(c=' dy="'+t(h,d)+'" '),['<tspan x="',t(s,d),'" y="',t(r,d),'" ',c,l,">",T.util.string.escapeXml(i),"</tspan>"].join("")},_setSVGTextLineText:function(t,e,i,n){var s,r,a,o,l,h=this.getHeightOfLine(e),c=-1!==this.textAlign.indexOf("justify"),d="",u=0,f=this._textLines[e];n+=h*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,m=f.length-1;g<=m;g++)l=g===m||this.charSpacing,d+=f[g],a=this.__charBounds[e][g],0===u?(i+=a.kernedWidth-a.width,u+=a.width):u+=a.kernedWidth,c&&!l&&this._reSpaceAndTab.test(f[g])&&(l=!0),l||(s=s||this.getCompleteStyleDeclaration(e,g),r=this.getCompleteStyleDeclaration(e,g+1),l=this._hasStyleChangedForSvg(s,r)),l&&(o=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(d,o,i,n)),d="",s=r,i+=u,u=0)},_pushTextBgRect:function(e,i,n,s,r,a){var o=T.Object.NUM_FRACTION_DIGITS;e.push("\t\t<rect ",this._getFillAttributes(i),' x="',t(n,o),'" y="',t(s,o),'" width="',t(r,o),'" height="',t(a,o),'"></rect>\n')},_setSVGTextLineBg:function(t,e,i,n){for(var s,r,a=this._textLines[e],o=this.getHeightOfLine(e)/this.lineHeight,l=0,h=0,c=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),d=0,u=a.length;d<u;d++)s=this.__charBounds[e][d],(r=this.getValueOfPropertyAt(e,d,"textBackgroundColor"))!==c?(c&&this._pushTextBgRect(t,c,i+h,n,l,o),h=s.left,l=s.width,c=r):l+=s.kernedWidth;r&&this._pushTextBgRect(t,r,i+h,n,l,o)},_getFillAttributes:function(t){var e=t&&"string"==typeof t?new T.Color(t):"";return e&&e.getSource()&&1!==e.getAlpha()?'opacity="'+e.getAlpha()+'" fill="'+e.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_getSVGLineTopOffset:function(t){for(var e,i=0,n=0;n<t;n++)i+=this.getHeightOfLine(n);return e=this.getHeightOfLine(n),{lineTop:i,offset:(this._fontSizeMult-this._fontSizeFraction)*e/(this.lineHeight*this._fontSizeMult)}},getSvgStyles:function(t){return T.Object.prototype.getSvgStyles.call(this,t)+" white-space: pre;"}})}(),function(t){var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingFlip:!0,noScaleCache:!1,_dimensionAffectingProps:e.Text.prototype._dimensionAffectingProps.concat("width"),_wordJoiners:/[ \t\r]/,splitByGrapheme:!1,initDimensions:function(){this.__skipDimension||(this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(t){for(var e=0,i=0,n=0,s={},r=0;r<t.graphemeLines.length;r++)"\n"===t.graphemeText[n]&&r>0?(i=0,n++,e++):!this.splitByGrapheme&&this._reSpaceAndTab.test(t.graphemeText[n])&&r>0&&(i++,n++),s[r]={line:e,offset:i},n+=t.graphemeLines[r].length,i+=t.graphemeLines[r].length;return s},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var n=this._styleMap[i];n&&(i=n.line)}return e.Text.prototype.styleHas.call(this,t,i)},isEmptyStyles:function(t){if(!this.styles)return!0;var e,i,n=0,s=!1,r=this._styleMap[t],a=this._styleMap[t+1];for(var o in r&&(t=r.line,n=r.offset),a&&(s=a.line===t,e=a.offset),i=void 0===t?this.styles:{line:this.styles[t]})for(var l in i[o])if(l>=n&&(!s||l<e))for(var h in i[o][l])return!1;return!0},_getStyleDeclaration:function(t,e){if(this._styleMap&&!this.isWrapping){var i=this._styleMap[t];if(!i)return null;t=i.line,e=i.offset+e}return this.callSuper("_getStyleDeclaration",t,e)},_setStyleDeclaration:function(t,e,i){var n=this._styleMap[t];t=n.line,e=n.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return!!this.styles[e.line]},_setLineStyle:function(t){var e=this._styleMap[t];this.styles[e.line]={}},_wrapText:function(t,e){var i,n=[];for(this.isWrapping=!0,i=0;i<t.length;i++)n=n.concat(this._wrapLine(t[i],i,e));return this.isWrapping=!1,n},_measureWord:function(t,e,i){var n,s=0;i=i||0;for(var r=0,a=t.length;r<a;r++)s+=this._getGraphemeBox(t[r],e,r+i,n,!0).kernedWidth,n=t[r];return s},_wrapLine:function(t,i,n,s){var r=0,a=this.splitByGrapheme,o=[],l=[],h=a?e.util.string.graphemeSplit(t):t.split(this._wordJoiners),c="",d=0,u=a?"":" ",f=0,g=0,m=0,p=!0,_=this._getWidthOfCharSpacing();s=s||0,0===h.length&&h.push([]),n-=s;for(var v=0;v<h.length;v++)c=a?h[v]:e.util.string.graphemeSplit(h[v]),f=this._measureWord(c,i,d),d+=c.length,(r+=g+f-_)>n&&!p?(o.push(l),l=[],r=f,p=!0):r+=_,p||a||l.push(u),l=l.concat(c),g=a?0:this._measureWord([u],i,d),d++,p=!1,f>m&&(m=f);return v&&o.push(l),m+s>this.dynamicMinWidth&&(this.dynamicMinWidth=m-_+s),o},isEndOfWrapping:function(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line},missingNewlineOffset:function(t){return this.splitByGrapheme?this.isEndOfWrapping(t)?1:0:1},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),n=this._wrapText(i.lines,this.width),s=new Array(n.length),r=0;r<n.length;r++)s[r]=n[r].join("");return i.lines=s,i.graphemeLines=n,i},getMinWidth:function(){return Math.max(this.minWidth,this.dynamicMinWidth)},_removeExtraneousStyles:function(){var t={};for(var e in this._styleMap)this._textLines[e]&&(t[this._styleMap[e].line]=1);for(var e in this.styles)t[e]||delete this.styles[e]},toObject:function(t){return this.callSuper("toObject",["minWidth","splitByGrapheme"].concat(t))}}),e.Textbox.fromObject=function(t,i){return e.Object._fromObject("Textbox",t,i,"text")}}(e),function(){var t=T.controlsUtils,e=t.scaleSkewCursorStyleHandler,i=t.scaleCursorStyleHandler,n=t.scalingEqually,s=t.scalingYOrSkewingX,r=t.scalingXOrSkewingY,a=t.scaleOrSkewActionName,o=T.Object.prototype.controls;if(o.ml=new T.Control({x:-.5,y:0,cursorStyleHandler:e,actionHandler:r,getActionName:a}),o.mr=new T.Control({x:.5,y:0,cursorStyleHandler:e,actionHandler:r,getActionName:a}),o.mb=new T.Control({x:0,y:.5,cursorStyleHandler:e,actionHandler:s,getActionName:a}),o.mt=new T.Control({x:0,y:-.5,cursorStyleHandler:e,actionHandler:s,getActionName:a}),o.tl=new T.Control({x:-.5,y:-.5,cursorStyleHandler:i,actionHandler:n}),o.tr=new T.Control({x:.5,y:-.5,cursorStyleHandler:i,actionHandler:n}),o.bl=new T.Control({x:-.5,y:.5,cursorStyleHandler:i,actionHandler:n}),o.br=new T.Control({x:.5,y:.5,cursorStyleHandler:i,actionHandler:n}),o.mtr=new T.Control({x:0,y:-.5,actionHandler:t.rotationWithSnapping,cursorStyleHandler:t.rotationStyleHandler,offsetY:-40,withConnection:!0,actionName:"rotate"}),T.Textbox){var l=T.Textbox.prototype.controls={};l.mtr=o.mtr,l.tr=o.tr,l.br=o.br,l.tl=o.tl,l.bl=o.bl,l.mt=o.mt,l.mb=o.mb,l.mr=new T.Control({x:.5,y:0,actionHandler:t.changeWidth,cursorStyleHandler:e,actionName:"resizing"}),l.ml=new T.Control({x:-.5,y:0,actionHandler:t.changeWidth,cursorStyleHandler:e,actionName:"resizing"})}}()},192:()=>{},898:()=>{},245:()=>{}},Ci={};function Ei(t){var e=Ci[t];if(void 0!==e)return e.exports;var i=Ci[t]={exports:{}};return wi[t](i,i.exports,Ei),i.exports}Ei.d=(t,e)=>{for(var i in e)Ei.o(e,i)&&!Ei.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},Ei.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var Si={};(()=>{let t;Ei.d(Si,{R:()=>t}),t="undefined"!=typeof document&&"undefined"!=typeof window?Ei(653).fabric:{version:"5.2.1"}})();var Ti,bi,Ii,xi,Ri=Si.R;!function(t){t[t.DIMT_RECTANGLE=1]="DIMT_RECTANGLE",t[t.DIMT_QUADRILATERAL=2]="DIMT_QUADRILATERAL",t[t.DIMT_TEXT=4]="DIMT_TEXT",t[t.DIMT_ARC=8]="DIMT_ARC",t[t.DIMT_IMAGE=16]="DIMT_IMAGE",t[t.DIMT_POLYGON=32]="DIMT_POLYGON",t[t.DIMT_LINE=64]="DIMT_LINE",t[t.DIMT_GROUP=128]="DIMT_GROUP"}(Ti||(Ti={})),function(t){t[t.DIS_DEFAULT=1]="DIS_DEFAULT",t[t.DIS_SELECTED=2]="DIS_SELECTED"}(bi||(bi={})),function(t){t[t.EF_ENHANCED_FOCUS=4]="EF_ENHANCED_FOCUS",t[t.EF_AUTO_ZOOM=16]="EF_AUTO_ZOOM",t[t.EF_TAP_TO_FOCUS=64]="EF_TAP_TO_FOCUS"}(Ii||(Ii={})),function(t){t.GREY="grey",t.GREY32="grey32",t.RGBA="rgba",t.RBGA="rbga",t.GRBA="grba",t.GBRA="gbra",t.BRGA="brga",t.BGRA="bgra"}(xi||(xi={}));const Oi=t=>"number"==typeof t&&!Number.isNaN(t),Ai=t=>"string"==typeof t;var Di,Mi,Li,Fi,Pi,ki,Ni,Bi,ji,Vi,Ui;!function(t){t[t.ARC=0]="ARC",t[t.IMAGE=1]="IMAGE",t[t.LINE=2]="LINE",t[t.POLYGON=3]="POLYGON",t[t.QUAD=4]="QUAD",t[t.RECT=5]="RECT",t[t.TEXT=6]="TEXT",t[t.GROUP=7]="GROUP"}(Pi||(Pi={})),function(t){t[t.DEFAULT=0]="DEFAULT",t[t.SELECTED=1]="SELECTED"}(ki||(ki={}));let Gi=class{get mediaType(){return new Map([["rect",Ti.DIMT_RECTANGLE],["quad",Ti.DIMT_QUADRILATERAL],["text",Ti.DIMT_TEXT],["arc",Ti.DIMT_ARC],["image",Ti.DIMT_IMAGE],["polygon",Ti.DIMT_POLYGON],["line",Ti.DIMT_LINE],["group",Ti.DIMT_GROUP]]).get(this._mediaType)}get styleSelector(){switch(gi(this,Mi,"f")){case bi.DIS_DEFAULT:return"default";case bi.DIS_SELECTED:return"selected"}}set drawingStyleId(t){this.styleId=t}get drawingStyleId(){return this.styleId}set coordinateBase(t){if(!["view","image"].includes(t))throw new Error("Invalid 'coordinateBase'.");this._drawingLayer&&("image"===gi(this,Li,"f")&&"view"===t?this.updateCoordinateBaseFromImageToView():"view"===gi(this,Li,"f")&&"image"===t&&this.updateCoordinateBaseFromViewToImage()),mi(this,Li,t)}get coordinateBase(){return gi(this,Li,"f")}get drawingLayerId(){return this._drawingLayerId}constructor(t,e){if(Di.add(this),Mi.set(this,void 0),Li.set(this,"image"),this._zIndex=null,this._drawingLayer=null,this._drawingLayerId=null,this._mapState_StyleId=new Map,this.mapEvent_Callbacks=new Map([["selected",new Map],["deselected",new Map],["mousedown",new Map],["mouseup",new Map],["dblclick",new Map],["mouseover",new Map],["mouseout",new Map]]),this.mapNoteName_Content=new Map([]),this.isDrawingItem=!0,null!=e&&!Oi(e))throw new TypeError("Invalid 'drawingStyleId'.");t&&this._setFabricObject(t),this.setState(bi.DIS_DEFAULT),this.styleId=e}_setFabricObject(t){this._fabricObject=t,this._fabricObject.on("selected",()=>{this.setState(bi.DIS_SELECTED)}),this._fabricObject.on("deselected",()=>{this._fabricObject.canvas&&this._fabricObject.canvas.getActiveObjects().includes(this._fabricObject)?this.setState(bi.DIS_SELECTED):this.setState(bi.DIS_DEFAULT),"textbox"===this._fabricObject.type&&(this._fabricObject.isEditing&&this._fabricObject.exitEditing(),this._fabricObject.selected=!1)}),t.getDrawingItem=()=>this}_getFabricObject(){return this._fabricObject}setState(t){mi(this,Mi,t)}getState(){return gi(this,Mi,"f")}_on(t,e){if(!e)return;const i=t.toLowerCase(),n=this.mapEvent_Callbacks.get(i);if(!n)throw new Error(`Event '${t}' does not exist.`);let s=n.get(e);s||(s=t=>{const i=t.e;if(!i)return void(e&&e.apply(this,[{targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null}]));const n={targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null};if(this._drawingLayer){let t,e,s,r;const a=i.target.getBoundingClientRect();t=a.left,e=a.top,s=t+window.scrollX,r=e+window.scrollY;const{width:o,height:l}=this._drawingLayer.fabricCanvas.lowerCanvasEl.getBoundingClientRect(),h=this._drawingLayer.width,c=this._drawingLayer.height,d=o/l,u=h/c,f=this._drawingLayer._getObjectFit();let g,m,p,_,v=1;if("contain"===f)d<u?(v=o/h,g=t+this.get("x")*v,m=e+this.get("y")*v+(l-c*v)/2,p=s+this.get("x")*v,_=r+this.get("y")*v+(l-c*v)/2):(v=l/c,g=t+this.get("x")*v+(o-h*v)/2,m=e+this.get("y")*v,p=s+this.get("x")*v+(o-h*v)/2,_=r+this.get("y")*v);else if("cover"===f)if(d<u){v=l/c;let i=this.get("x")*v-(h*v-o)/2;i=Math.max(i,0),i=Math.min(i,o),g=t+i,m=e+this.get("y")*v,p=s+i,_=r+this.get("y")*v}else{v=o/h;let i=this.get("y")*v-(c*v-l)/2;i=Math.max(i,0),i=Math.min(i,l),g=t+this.get("x")*v,m=e+i,p=s+this.get("x")*v,_=r+i}n.itemClientX=Math.round(g),n.itemClientY=Math.round(m),n.itemPageX=Math.round(p),n.itemPageY=Math.round(_)}for(let t of Object.getOwnPropertyNames(n))Object.defineProperty(i,t,{value:n[t],writable:!0});e&&e.apply(this,[i])},n.set(e,s),this._fabricObject.on("dblclick"===i?"mousedblclick":i,s))}on(t,e){this._on(t,e)}_off(t,e){const i=t.toLowerCase(),n=this.mapEvent_Callbacks.get(i);if(!n)throw new Error(`Event '${t}' does not exist.`);let s=n.get(e);s&&(n.delete(e),this._fabricObject.off("dblclick"===i?"mousedblclick":i,s))}off(t,e){this._off(t,e)}_setEditable(t){const e=this._fabricObject;t?(e.selectable=!0,e.hasControls=!0,e.hoverCursor=null):(e.selectable=!1,e.hasControls=!1,e.hoverCursor="default")}hasNote(t){return this.mapNoteName_Content.has(t)}addNote(t,e){if(this.hasNote(t.name)&&!e)throw new Error("A note with the same name already exists, please use a different name.");const i=t.content?JSON.parse(JSON.stringify(t.content)):t.content;this.mapNoteName_Content.set(t.name,[i])}getNote(t){const e=this.mapNoteName_Content.get(t);return e?1===e.length?{name:t,content:e[0]?JSON.parse(JSON.stringify(e[0])):e[0]}:{name:t,content:JSON.parse(JSON.stringify(e))}:null}getNotes(){const t=[];for(let e of this.mapNoteName_Content){let i=1===e[1].length?e[1][0]:e[1];i=i?JSON.parse(JSON.stringify(i)):i,t.push({name:e[0],content:i})}return t}updateNote(t,e,i){const n=this.mapNoteName_Content.get(t);if(!n)throw new Error("The note name does not exist.");i||(n.length=0),e=e?JSON.parse(JSON.stringify(e)):e,n.push(e)}deleteNote(t){this.mapNoteName_Content.delete(t)}clearNotes(){this.mapNoteName_Content.clear()}set(t,e){if(!this.extendSet(t,e))if("x"===t){const t=this._fabricObject.group;t?(this._fabricObject.set("left",e-t.left-t.width/2),t.addWithUpdate()):this._fabricObject.set("left",e)}else if("y"===t){const t=this._fabricObject.group;t?(this._fabricObject.set("top",e-t.top-t.height/2),t.addWithUpdate()):this._fabricObject.set("top",e)}else"styleId"===t?this.styleId=e:this._fabricObject.set(t,e);["vertices","startPoint","endPoint","x","y","left","top","width","height","scaleX","scaleY","skewX","skewY","padding","angle","strokeWidth"].includes(t)&&this._fabricObject.setCoords()}get(t){let e=this.extendGet(t);if(void 0===e)if("x"===t){const t=this._fabricObject.group;e=t?this._fabricObject.get("left")+t.left+t.width/2:this._fabricObject.get("left")}else if("y"===t){const t=this._fabricObject.group;e=t?this._fabricObject.get("top")+t.top+t.height/2:this._fabricObject.get("top")}else e="scaledWidth"===t?this._fabricObject.getScaledWidth():"scaledHeight"===t?this._fabricObject.getScaledHeight():["type","mediaType"].includes(t)?this.mediaType:"state"===t?this.getState():"styleId"===t?this.styleId:"drawingLayerId"===t?this.drawingLayerId:this._fabricObject.get(t);return e}remove(){this._drawingLayer&&this._drawingLayer.removeDrawingItems([this])}convertPropFromImageToView(t){if("number"!=typeof t)throw new TypeError("Invalid value.");return t*gi(this,Di,"m",Fi).call(this)}convertPropFromViewToImage(t){if("number"!=typeof t)throw new TypeError("Invalid value.");return t/gi(this,Di,"m",Fi).call(this)}_setLineWidth(t){if(this._drawingLayer)if("view"===this.coordinateBase)this.set("strokeWidth",this.convertPropFromViewToImage(t));else{if("image"!==this.coordinateBase)throw new Error("Invalid 'coordinateBase'.");this.set("strokeWidth",t)}}_getLineWidth(){if(this._drawingLayer){if("view"===this.coordinateBase)return this.convertPropFromImageToView(this.get("strokeWidth"));if("image"===this.coordinateBase)return this.get("strokeWidth");throw new Error("Invalid 'coordinateBase'.")}}_setFontSize(t){if(this._drawingLayer)if("view"===this.coordinateBase)this.set("fontSize",this.convertPropFromViewToImage(t));else{if("image"!==this.coordinateBase)throw new Error("Invalid 'coordinateBase'.");this.set("fontSize",t)}}_getFontSize(){if(this._drawingLayer){if("view"===this.coordinateBase)return this.convertPropFromImageToView(this.get("fontSize"));if("image"===this.coordinateBase)return this.get("fontSize");throw new Error("Invalid 'coordinateBase'.")}}};Mi=new WeakMap,Li=new WeakMap,Di=new WeakSet,Fi=function(){const t=this._drawingLayer;if(!t)return 1;const e=t.width,i=t.height,{width:n,height:s}=t.fabricCanvas.wrapperEl.getBoundingClientRect();if(n<=0||s<=0)throw new Error("Unable to get drawing layer dimensions. Layer may not be rendered on the page.");const r=n/e,a=s/i,o=t._getObjectFit();let l=1;return"contain"===o?l=r<a?n/e:s/i:"cover"===o&&(l=r<a?s/i:n/e),l},Gi.arrMediaTypes=["rect","arc","polygon","image","text","line","quad"],Gi.mapItemType=new Map([[Pi.ARC,"arc"],[Pi.IMAGE,"image"],[Pi.LINE,"line"],[Pi.POLYGON,"polygon"],[Pi.QUAD,"quad"],[Pi.RECT,"rect"],[Pi.TEXT,"text"],[Pi.GROUP,"group"]]),Gi.arrStyleSelectors=["default","selected"],Gi.mapItemState=new Map([[ki.DEFAULT,"default"],[ki.SELECTED,"selected"]]);let Wi=class extends Gi{constructor(t,e){if(super(null,e),Ni.set(this,void 0),!x(t))throw new TypeError("Invalid 'rect'.");this._setFabricObject(new Ri.Rect({left:t.x,top:t.y,width:t.width,height:t.height})),mi(this,Ni,JSON.parse(JSON.stringify(t))),this._mediaType="rect"}extendSet(t,e){return!1}extendGet(t){}updateCoordinateBaseFromImageToView(){this.set("left",this.convertPropFromViewToImage(this.get("left"))),this.set("top",this.convertPropFromViewToImage(this.get("top"))),this.set("width",this.convertPropFromViewToImage(this.get("scaledWidth"))),this.set("height",this.convertPropFromViewToImage(this.get("scaledHeight")))}updateCoordinateBaseFromViewToImage(){this.set("left",this.convertPropFromImageToView(this.get("left"))),this.set("top",this.convertPropFromImageToView(this.get("top"))),this.set("width",this.convertPropFromImageToView(this.get("scaledWidth"))),this.set("height",this.convertPropFromImageToView(this.get("scaledHeight")))}setPosition(t){this.setRect(t)}getPosition(){return this.getRect()}updatePosition(){gi(this,Ni,"f")&&this.setRect(gi(this,Ni,"f"))}setRect(t){if(!x(t))throw new TypeError("Invalid 'rect'.");if(this._drawingLayer){if("view"===this.coordinateBase)this.set("left",this.convertPropFromViewToImage(t.x)),this.set("top",this.convertPropFromViewToImage(t.y)),this.set("width",this.convertPropFromViewToImage(t.width)),this.set("height",this.convertPropFromViewToImage(t.height));else{if("image"!==this.coordinateBase)throw new Error("Invalid 'coordinateBase'.");this.set("left",t.x),this.set("top",t.y),this.set("width",t.width),this.set("height",t.height)}this._drawingLayer.renderAll()}else mi(this,Ni,JSON.parse(JSON.stringify(t)))}getRect(){if(this._drawingLayer){if("view"===this.coordinateBase)return{x:this.convertPropFromImageToView(this.get("left")),y:this.convertPropFromImageToView(this.get("top")),width:this.convertPropFromImageToView(this.get("scaledWidth")),height:this.convertPropFromImageToView(this.get("scaledHeight"))};if("image"===this.coordinateBase)return{x:this.get("left"),y:this.get("top"),width:this.get("scaledWidth"),height:this.get("scaledHeight")};throw new Error("Invalid 'coordinateBase'.")}return gi(this,Ni,"f")?JSON.parse(JSON.stringify(gi(this,Ni,"f"))):null}};function Yi(t,e,i){let n=i.points[this.pointIndex].x-i.pathOffset.x,s=i.points[this.pointIndex].y-i.pathOffset.y;return Ri.util.transformPoint({x:n,y:s},i.calcTransformMatrix())}function Hi(t){let e=new Ri.Point(t.strokeUniform?1/t.scaleX:1,t.strokeUniform?1/t.scaleY:1).multiply(t.strokeWidth);return new Ri.Point(t.width+e.x,t.height+e.y)}function zi(t,e,i,n){let s=e.target,r=s.controls[s.__corner],a=s.toLocalPoint(new Ri.Point(i,n),"center","center"),o=Hi(s),l=s._getTransformedDimensions(0,0),h={x:a.x*o.x/l.x+s.pathOffset.x,y:a.y*o.y/l.y+s.pathOffset.y};return s.points[r.pointIndex]=h,Ri.controlsUtils.fireEvent("scaling",{e:t,transform:e,pointer:{x:i,y:n}}),!0}function Xi(t,e){return function(i,n,s,r){let a=n.target,o=Ri.util.transformPoint({x:a.points[t].x-a.pathOffset.x,y:a.points[t].y-a.pathOffset.y},a.calcTransformMatrix()),l=e(i,n,s,r);a._setPositionDimensions({});let h=Hi(a),c=(a.points[t].x-a.pathOffset.x)/h.x,d=(a.points[t].y-a.pathOffset.y)/h.y;return a.setPositionByOrigin(o,c+.5,d+.5),l}}Ni=new WeakMap;let qi=class extends Gi{constructor(t,e){if(super(null,e),Bi.set(this,void 0),!b(t))throw new TypeError("Invalid 'polygon'.");this._setFabricObject(new Ri.Polygon(t.points,{objectCaching:!1}));const i=this._fabricObject;let n=i.points.length-1;i.controls=i.points.reduce(function(t,e,i){return t["p"+i]=new Ri.Control({positionHandler:Yi,actionHandler:Xi(i>0?i-1:n,zi),actionName:"modifyPolygon",pointIndex:i}),t},{}),mi(this,Bi,JSON.parse(JSON.stringify(t))),this._mediaType="polygon"}extendSet(t,e){if("vertices"===t){const t=this._fabricObject;if(t.group){const i=t.group;t.points=e.map(t=>({x:t.x-i.left-i.width/2,y:t.y-i.top-i.height/2})),i.addWithUpdate()}else t.points=e;const i=t.points.length-1;return t.controls=t.points.reduce(function(t,e,n){return t["p"+n]=new Ri.Control({positionHandler:Yi,actionHandler:Xi(n>0?n-1:i,zi),actionName:"modifyPolygon",pointIndex:n}),t},{}),t._setPositionDimensions({}),!0}}extendGet(t){if("vertices"===t){const t=[],e=this._fabricObject;if(e.selectable&&!e.group)for(let i in e.oCoords)t.push({x:e.oCoords[i].x,y:e.oCoords[i].y});else for(let i of e.points){let n=i.x-e.pathOffset.x,s=i.y-e.pathOffset.y;const r=Ri.util.transformPoint({x:n,y:s},e.calcTransformMatrix());t.push({x:r.x,y:r.y})}return t}}updateCoordinateBaseFromImageToView(){const t=this.get("vertices").map(t=>({x:this.convertPropFromViewToImage(t.x),y:this.convertPropFromViewToImage(t.y)}));this.set("vertices",t)}updateCoordinateBaseFromViewToImage(){const t=this.get("vertices").map(t=>({x:this.convertPropFromImageToView(t.x),y:this.convertPropFromImageToView(t.y)}));this.set("vertices",t)}setPosition(t){this.setPolygon(t)}getPosition(){return this.getPolygon()}updatePosition(){gi(this,Bi,"f")&&this.setPolygon(gi(this,Bi,"f"))}setPolygon(t){if(!b(t))throw new TypeError("Invalid 'polygon'.");if(this._drawingLayer){if("view"===this.coordinateBase){const e=t.points.map(t=>({x:this.convertPropFromViewToImage(t.x),y:this.convertPropFromViewToImage(t.y)}));this.set("vertices",e)}else{if("image"!==this.coordinateBase)throw new Error("Invalid 'coordinateBase'.");this.set("vertices",t.points)}this._drawingLayer.renderAll()}else mi(this,Bi,JSON.parse(JSON.stringify(t)))}getPolygon(){if(this._drawingLayer){if("view"===this.coordinateBase)return{points:this.get("vertices").map(t=>({x:this.convertPropFromImageToView(t.x),y:this.convertPropFromImageToView(t.y)}))};if("image"===this.coordinateBase)return{points:this.get("vertices")};throw new Error("Invalid 'coordinateBase'.")}return gi(this,Bi,"f")?JSON.parse(JSON.stringify(gi(this,Bi,"f"))):null}};Bi=new WeakMap;let Zi=class extends Gi{set maintainAspectRatio(t){t&&this.set("scaleY",this.get("scaleX"))}get maintainAspectRatio(){return gi(this,Vi,"f")}constructor(t,e,i,n){if(super(null,n),ji.set(this,void 0),Vi.set(this,void 0),!x(e))throw new TypeError("Invalid 'rect'.");if(t instanceof HTMLImageElement||t instanceof HTMLCanvasElement||t instanceof HTMLVideoElement)this._setFabricObject(new Ri.Image(t,{left:e.x,top:e.y}));else{if(!w(t))throw new TypeError("Invalid 'image'.");{const i=document.createElement("canvas");let n;if(i.width=t.width,i.height=t.height,t.format===o.IPF_GRAYSCALED){n=new Uint8ClampedArray(t.width*t.height*4);for(let e=0;e<n.length;e+=4)n[e]=t.bytes[e/4],n[e+1]=t.bytes[e/4],n[e+2]=t.bytes[e/4],n[e+3]=255}else n=new Uint8ClampedArray(t.bytes.buffer);i.getContext("2d").putImageData(new ImageData(n,t.width,t.height),0,0),this._setFabricObject(new Ri.Image(i,{left:e.x,top:e.y}))}}if(i){const t=e.width/this.get("width");this.set("scaleX",t),this.set("scaleY",t)}else this.set("scaleX",e.width/this.get("width")),this.set("scaleY",e.height/this.get("height"));this.image=t,mi(this,ji,JSON.parse(JSON.stringify(e))),mi(this,Vi,i),this._mediaType="image"}extendSet(t,e){if("image"===t){if(e instanceof HTMLImageElement)return this._fabricObject.setElement(e),this.image=e,!0;if(e instanceof HTMLCanvasElement){const t=new Image;return t.src=e.toDataURL(),this._fabricObject.setElement(t),this.image=e,!0}throw new Error("Unsupported value.")}}extendGet(t){if("image"===t)return this.image}updateCoordinateBaseFromImageToView(){if(this.set("left",this.convertPropFromViewToImage(this.get("left"))),this.set("top",this.convertPropFromViewToImage(this.get("top"))),gi(this,Vi,"f")){const t=this.convertPropFromViewToImage(this.get("width"))/this.get("width");this.set("scaleX",t),this.set("scaleY",t)}else this.set("scaleX",this.convertPropFromViewToImage(this.get("width"))/this.get("width")),this.set("scaleY",this.convertPropFromViewToImage(this.get("height"))/this.get("height"))}updateCoordinateBaseFromViewToImage(){if(this.set("left",this.convertPropFromImageToView(this.get("left"))),this.set("top",this.convertPropFromImageToView(this.get("top"))),gi(this,Vi,"f")){const t=this.convertPropFromImageToView(this.get("width"))/this.get("width");this.set("scaleX",t),this.set("scaleY",t)}else this.set("scaleX",this.convertPropFromImageToView(this.get("width"))/this.get("width")),this.set("scaleY",this.convertPropFromImageToView(this.get("height"))/this.get("height"))}setPosition(t){this.setImageRect(t)}getPosition(){return this.getImageRect()}updatePosition(){gi(this,ji,"f")&&this.setImageRect(gi(this,ji,"f"))}setImage(t){const e=this.getImageRect();if(t instanceof HTMLImageElement||t instanceof HTMLCanvasElement||t instanceof HTMLVideoElement)this.set("image",t);else{if(!w(t))throw new TypeError("Invalid 'image'.");{const e=document.createElement("canvas");let i;if(e.width=t.width,e.height=t.height,t.format===o.IPF_GRAYSCALED){i=new Uint8ClampedArray(t.width*t.height*4);for(let e=0;e<i.length;e+=4)i[e]=t.bytes[e/4],i[e+1]=t.bytes[e/4],i[e+2]=t.bytes[e/4],i[e+3]=255}else i=new Uint8ClampedArray(t.bytes.buffer);e.getContext("2d").putImageData(new ImageData(i,t.width,t.height),0,0),this.set("image",e)}}if(gi(this,Vi,"f")){const t=e.width/this.get("width");this.set("scaleX",t),this.set("scaleY",t)}else this.set("scaleX",e.width/this.get("width")),this.set("scaleY",e.height/this.get("height"))}getImage(){return this.image}setImageRect(t){if(!x(t))throw new TypeError("Invalid 'rect'.");if(this._drawingLayer){if("view"===this.coordinateBase)if(this.set("left",this.convertPropFromViewToImage(t.x)),this.set("top",this.convertPropFromViewToImage(t.y)),gi(this,Vi,"f")){const e=this.convertPropFromViewToImage(t.width)/this.get("width");this.set("scaleX",e),this.set("scaleY",e)}else this.set("scaleX",this.convertPropFromViewToImage(t.width)/this.get("width")),this.set("scaleY",this.convertPropFromViewToImage(t.height)/this.get("height"));else{if("image"!==this.coordinateBase)throw new Error("Invalid 'coordinateBase'.");if(this.set("left",t.x),this.set("top",t.y),gi(this,Vi,"f")){const e=t.width/this.get("width");this.set("scaleX",e),this.set("scaleY",e)}else this.set("scaleX",t.width/this.get("width")),this.set("scaleY",t.height/this.get("height"))}this._drawingLayer.renderAll()}else mi(this,ji,JSON.parse(JSON.stringify(t)))}getImageRect(){if(this._drawingLayer){if("view"===this.coordinateBase)return{x:this.convertPropFromImageToView(this.get("left")),y:this.convertPropFromImageToView(this.get("top")),width:this.convertPropFromImageToView(this.get("scaledWidth")),height:this.convertPropFromImageToView(this.get("scaledHeight"))};if("image"===this.coordinateBase)return{x:this.get("left"),y:this.get("top"),width:this.get("scaledWidth"),height:this.get("scaledHeight")};throw new Error("Invalid 'coordinateBase'.")}return gi(this,ji,"f")?JSON.parse(JSON.stringify(gi(this,ji,"f"))):null}};ji=new WeakMap,Vi=new WeakMap;const Ki=t=>{let e=(t=>t.split("\n").map(t=>t.split("\t")))(t);return(t=>{for(let e=0;;e++){let i=-1;for(let n=0;n<t.length;n++){let s=t[n][e];void 0!==s&&s.length>i&&(i=s.length)}if(-1===i)break;for(let n=0;n<t.length;n++){if(e>=t[n].length-1)continue;let s=" ".repeat(i+2-t[n][e].length);t[n][e]=t[n][e].concat(s)}}})(e),(t=>{let e="";for(let i=0;i<t.length;i++)e=e.concat(...t[i],i===t.length-1?"":"\n");return e})(e)};let Ji=class extends Gi{constructor(t,e,i){if(super(null,i),Ui.set(this,void 0),!Ai(t))throw new TypeError("Invalid 'text'.");if(!x(e))throw new TypeError("Invalid 'rect'.");this._setFabricObject(new Ri.Textbox(Ki(t),{left:e.x,top:e.y,width:e.width})),this._text=t,mi(this,Ui,JSON.parse(JSON.stringify(e))),this._mediaType="text"}extendSet(t,e){if("text"===t)return this._text=e,this._fabricObject.set("text",Ki(e)),!0}extendGet(t){if("text"===t)return this._text}updateCoordinateBaseFromImageToView(){this.set("left",this.convertPropFromViewToImage(this.get("left"))),this.set("top",this.convertPropFromViewToImage(this.get("top"))),this.set("width",this.convertPropFromViewToImage(this.get("scaledWidth")))}updateCoordinateBaseFromViewToImage(){this.set("left",this.convertPropFromImageToView(this.get("left"))),this.set("top",this.convertPropFromImageToView(this.get("top"))),this.set("width",this.convertPropFromImageToView(this.get("scaledWidth")))}setPosition(t){this.setTextRect(t)}getPosition(){return this.getTextRect()}updatePosition(){gi(this,Ui,"f")&&this.setTextRect(gi(this,Ui,"f"))}setText(t){if(!Ai(t))throw new TypeError("Invalid 'text'.");this.set("text",t)}getText(){return this.get("text")}setTextRect(t){if(!x(t))throw new TypeError("Invalid 'rect'.");if(this._drawingLayer){if("view"===this.coordinateBase)this.set("left",this.convertPropFromViewToImage(t.x)),this.set("top",this.convertPropFromViewToImage(t.y)),this.set("width",this.convertPropFromViewToImage(t.width));else{if("image"!==this.coordinateBase)throw new Error("Invalid 'coordinateBase'.");this.set("left",t.x),this.set("top",t.y),this.set("width",t.width)}this._drawingLayer.renderAll()}else mi(this,Ui,JSON.parse(JSON.stringify(t)))}getTextRect(){if(this._drawingLayer){if("view"===this.coordinateBase)return{x:this.convertPropFromImageToView(this.get("left")),y:this.convertPropFromImageToView(this.get("top")),width:this.convertPropFromImageToView(this.get("scaledWidth")),height:this.convertPropFromImageToView(this.get("scaledHeight"))};if("image"===this.coordinateBase)return{x:this.get("left"),y:this.get("top"),width:this.get("scaledWidth"),height:this.get("scaledHeight")};throw new Error("Invalid 'coordinateBase'.")}return gi(this,Ui,"f")?JSON.parse(JSON.stringify(gi(this,Ui,"f"))):null}};var $i,Qi;Ui=new WeakMap;let tn=class extends qi{constructor(t,e){if(super({points:[null==t?void 0:t.startPoint,null==t?void 0:t.endPoint]},e),$i.set(this,void 0),!S(t))throw new TypeError("Invalid 'line'.");mi(this,$i,JSON.parse(JSON.stringify(t))),this._mediaType="line"}extendSet(t,e){if("startPoint"===t||"endPoint"===t){e="startPoint"===t?[e,this.get("endPoint")]:[this.get("startPoint"),e];const i=this._fabricObject;if(i.group){const t=i.group;i.points=e.map(e=>({x:e.x-t.left-t.width/2,y:e.y-t.top-t.height/2})),t.addWithUpdate()}else i.points=e;const n=i.points.length-1;return i.controls=i.points.reduce(function(t,e,i){return t["p"+i]=new Ri.Control({positionHandler:Yi,actionHandler:Xi(i>0?i-1:n,zi),actionName:"modifyPolygon",pointIndex:i}),t},{}),i._setPositionDimensions({}),!0}}extendGet(t){if("startPoint"===t||"endPoint"===t){const e=[],i=this._fabricObject;if(i.selectable&&!i.group)for(let t in i.oCoords)e.push({x:i.oCoords[t].x,y:i.oCoords[t].y});else for(let t of i.points){let n=t.x-i.pathOffset.x,s=t.y-i.pathOffset.y;const r=Ri.util.transformPoint({x:n,y:s},i.calcTransformMatrix());e.push({x:r.x,y:r.y})}return"startPoint"===t?e[0]:e[1]}}updateCoordinateBaseFromImageToView(){const t=this.get("startPoint"),e=this.get("endPoint");this.set("startPoint",{x:this.convertPropFromViewToImage(t.x),y:this.convertPropFromViewToImage(t.y)}),this.set("endPoint",{x:this.convertPropFromViewToImage(e.x),y:this.convertPropFromViewToImage(e.y)})}updateCoordinateBaseFromViewToImage(){const t=this.get("startPoint"),e=this.get("endPoint");this.set("startPoint",{x:this.convertPropFromImageToView(t.x),y:this.convertPropFromImageToView(t.y)}),this.set("endPoint",{x:this.convertPropFromImageToView(e.x),y:this.convertPropFromImageToView(e.y)})}setPosition(t){this.setLine(t)}getPosition(){return this.getLine()}updatePosition(){gi(this,$i,"f")&&this.setLine(gi(this,$i,"f"))}setPolygon(){}getPolygon(){return null}setLine(t){if(!S(t))throw new TypeError("Invalid 'line'.");if(this._drawingLayer){if("view"===this.coordinateBase)this.set("startPoint",{x:this.convertPropFromViewToImage(t.startPoint.x),y:this.convertPropFromViewToImage(t.startPoint.y)}),this.set("endPoint",{x:this.convertPropFromViewToImage(t.endPoint.x),y:this.convertPropFromViewToImage(t.endPoint.y)});else{if("image"!==this.coordinateBase)throw new Error("Invalid 'coordinateBase'.");this.set("startPoint",t.startPoint),this.set("endPoint",t.endPoint)}this._drawingLayer.renderAll()}else mi(this,$i,JSON.parse(JSON.stringify(t)))}getLine(){if(this._drawingLayer){if("view"===this.coordinateBase)return{startPoint:{x:this.convertPropFromImageToView(this.get("startPoint").x),y:this.convertPropFromImageToView(this.get("startPoint").y)},endPoint:{x:this.convertPropFromImageToView(this.get("endPoint").x),y:this.convertPropFromImageToView(this.get("endPoint").y)}};if("image"===this.coordinateBase)return{startPoint:this.get("startPoint"),endPoint:this.get("endPoint")};throw new Error("Invalid 'coordinateBase'.")}return gi(this,$i,"f")?JSON.parse(JSON.stringify(gi(this,$i,"f"))):null}};$i=new WeakMap;class en extends qi{constructor(t,e){if(super({points:null==t?void 0:t.points},e),Qi.set(this,void 0),!I(t))throw new TypeError("Invalid 'quad'.");mi(this,Qi,JSON.parse(JSON.stringify(t))),this._mediaType="quad"}setPosition(t){this.setQuad(t)}getPosition(){return this.getQuad()}updatePosition(){gi(this,Qi,"f")&&this.setQuad(gi(this,Qi,"f"))}setPolygon(){}getPolygon(){return null}setQuad(t){if(!I(t))throw new TypeError("Invalid 'quad'.");if(this._drawingLayer){if("view"===this.coordinateBase){const e=t.points.map(t=>({x:this.convertPropFromViewToImage(t.x),y:this.convertPropFromViewToImage(t.y)}));this.set("vertices",e)}else{if("image"!==this.coordinateBase)throw new Error("Invalid 'coordinateBase'.");this.set("vertices",t.points)}this._drawingLayer.renderAll()}else mi(this,Qi,JSON.parse(JSON.stringify(t)))}getQuad(){if(this._drawingLayer){if("view"===this.coordinateBase)return{points:this.get("vertices").map(t=>({x:this.convertPropFromImageToView(t.x),y:this.convertPropFromImageToView(t.y)}))};if("image"===this.coordinateBase)return{points:this.get("vertices")};throw new Error("Invalid 'coordinateBase'.")}return gi(this,Qi,"f")?JSON.parse(JSON.stringify(gi(this,Qi,"f"))):null}}Qi=new WeakMap;let nn=class extends Gi{constructor(t){super(new Ri.Group(t.map(t=>t._getFabricObject()))),this._fabricObject.on("selected",()=>{this.setState(bi.DIS_SELECTED);const t=this._fabricObject._objects;for(let e of t)setTimeout(()=>{e&&e.fire("selected")},0);setTimeout(()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())},0)}),this._fabricObject.on("deselected",()=>{this.setState(bi.DIS_DEFAULT);const t=this._fabricObject._objects;for(let e of t)setTimeout(()=>{e&&e.fire("deselected")},0);setTimeout(()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())},0)}),this._mediaType="group"}extendSet(t,e){return!1}extendGet(t){}updateCoordinateBaseFromImageToView(){}updateCoordinateBaseFromViewToImage(){}setPosition(){}getPosition(){}updatePosition(){}getChildDrawingItems(){return this._fabricObject._objects.map(t=>t.getDrawingItem())}setChildDrawingItems(t){if(!t||!t.isDrawingItem)throw TypeError("Illegal drawing item.");this._drawingLayer?this._drawingLayer._updateGroupItem(this,t,"add"):this._fabricObject.addWithUpdate(t._getFabricObject())}removeChildItem(t){t&&t.isDrawingItem&&(this._drawingLayer?this._drawingLayer._updateGroupItem(this,t,"remove"):this._fabricObject.removeWithUpdate(t._getFabricObject()))}};const sn=t=>null!==t&&"object"==typeof t&&!Array.isArray(t),rn=t=>!!Ai(t)&&""!==t,an=t=>!(!sn(t)||"id"in t&&!Oi(t.id)||"lineWidth"in t&&!Oi(t.lineWidth)||"fillStyle"in t&&!rn(t.fillStyle)||"strokeStyle"in t&&!rn(t.strokeStyle)||"paintMode"in t&&!["fill","stroke","strokeAndFill"].includes(t.paintMode)||"fontFamily"in t&&!rn(t.fontFamily)||"fontSize"in t&&!Oi(t.fontSize));class on{static convert(t,e,i,n){const s={x:0,y:0,width:e,height:i};if(!t)return s;const r=n.getVideoFit(),a=n.getVisibleRegionOfVideo({inPixels:!0});if(x(t))t.isMeasuredInPercentage?"contain"===r||null===a?(s.x=t.x/100*e,s.y=t.y/100*i,s.width=t.width/100*e,s.height=t.height/100*i):(s.x=a.x+t.x/100*a.width,s.y=a.y+t.y/100*a.height,s.width=t.width/100*a.width,s.height=t.height/100*a.height):"contain"===r||null===a?(s.x=t.x,s.y=t.y,s.width=t.width,s.height=t.height):(s.x=t.x+a.x,s.y=t.y+a.y,s.width=t.width>a.width?a.width:t.width,s.height=t.height>a.height?a.height:t.height);else{if(!C(t))throw TypeError("Invalid region.");t.isMeasuredInPercentage?"contain"===r||null===a?(s.x=t.left/100*e,s.y=t.top/100*i,s.width=(t.right-t.left)/100*e,s.height=(t.bottom-t.top)/100*i):(s.x=a.x+t.left/100*a.width,s.y=a.y+t.top/100*a.height,s.width=(t.right-t.left)/100*a.width,s.height=(t.bottom-t.top)/100*a.height):"contain"===r||null===a?(s.x=t.left,s.y=t.top,s.width=t.right-t.left,s.height=t.bottom-t.top):(s.x=t.left+a.x,s.y=t.top+a.y,s.width=t.right-t.left>a.width?a.width:t.right-t.left,s.height=t.bottom-t.top>a.height?a.height:t.bottom-t.top)}return s.x=Math.round(s.x),s.y=Math.round(s.y),s.width=Math.round(s.width),s.height=Math.round(s.height),s}}var ln,hn;class cn{constructor(){ln.set(this,new Map),hn.set(this,!1)}get disposed(){return gi(this,hn,"f")}on(t,e){t=t.toLowerCase();const i=gi(this,ln,"f").get(t);if(i){if(i.includes(e))return;i.push(e)}else gi(this,ln,"f").set(t,[e])}off(t,e){t=t.toLowerCase();const i=gi(this,ln,"f").get(t);if(!i)return;const n=i.indexOf(e);-1!==n&&i.splice(n,1)}offAll(t){t=t.toLowerCase();const e=gi(this,ln,"f").get(t);e&&(e.length=0)}fire(t,e=[],i={async:!1,copy:!0}){e||(e=[]),t=t.toLowerCase();const n=gi(this,ln,"f").get(t);if(n&&n.length){i=Object.assign({async:!1,copy:!0},i);for(let s of n){if(!s)continue;let r=[];if(i.copy)for(let i of e){try{i=JSON.parse(JSON.stringify(i))}catch(t){}r.push(i)}else r=e;let a=!1;if(i.async)setTimeout(()=>{this.disposed||n.includes(s)&&s.apply(i.target,r)},0);else try{a=s.apply(i.target,r)}catch(t){}if(!0===a)break}}}dispose(){mi(this,hn,!0)}}function dn(t,e,i){return(i.x-t.x)*(e.y-t.y)==(e.x-t.x)*(i.y-t.y)&&Math.min(t.x,e.x)<=i.x&&i.x<=Math.max(t.x,e.x)&&Math.min(t.y,e.y)<=i.y&&i.y<=Math.max(t.y,e.y)}function un(t){return Math.abs(t)<1e-6?0:t<0?-1:1}function fn(t,e,i,n){let s=t[0]*(i[1]-e[1])+e[0]*(t[1]-i[1])+i[0]*(e[1]-t[1]),r=t[0]*(n[1]-e[1])+e[0]*(t[1]-n[1])+n[0]*(e[1]-t[1]);return!((s^r)>=0&&0!==s&&0!==r||(s=i[0]*(t[1]-n[1])+n[0]*(i[1]-t[1])+t[0]*(n[1]-i[1]),r=i[0]*(e[1]-n[1])+n[0]*(i[1]-e[1])+e[0]*(n[1]-i[1]),(s^r)>=0&&0!==s&&0!==r))}ln=new WeakMap,hn=new WeakMap;const gn=async t=>{if("string"!=typeof t)throw new TypeError("Invalid url.");const e=await fetch(t);if(!e.ok)throw Error("Network Error: "+e.statusText);const i=await e.text();if(!i.trim().startsWith("<"))throw Error("Unable to get valid HTMLElement.");const n=document.createElement("div");if(n.insertAdjacentHTML("beforeend",i),1===n.childElementCount&&n.firstChild instanceof HTMLTemplateElement)return n.firstChild.content;const s=new DocumentFragment;for(let t of n.children)s.append(t);return s};class mn{static multiply(t,e){const i=[];for(let n=0;n<3;n++){const s=e.slice(3*n,3*n+3);for(let e=0;e<3;e++){const n=[t[e],t[e+3],t[e+6]].reduce((t,e,i)=>t+e*s[i],0);i.push(n)}}return i}static identity(){return[1,0,0,0,1,0,0,0,1]}static translate(t,e,i){return mn.multiply(t,[1,0,0,0,1,0,e,i,1])}static rotate(t,e){var i=Math.cos(e),n=Math.sin(e);return mn.multiply(t,[i,-n,0,n,i,0,0,0,1])}static scale(t,e,i){return mn.multiply(t,[e,0,0,0,i,0,0,0,1])}}var pn,_n,vn,yn,wn,Cn,En,Sn,Tn,bn,In,xn,Rn,On,An,Dn,Mn,Ln,Fn,Pn,kn,Nn,Bn,jn,Vn,Un,Gn,Wn,Yn,Hn,zn,Xn,qn,Zn,Kn,Jn,$n,Qn,ts,es,is,ns,ss,rs,as,os,ls,hs,cs,ds,us,fs,gs,ms,ps,_s,vs,ys,ws,Cs,Es,Ss,Ts,bs,Is,xs,Rs,Os,As,Ds,Ms,Ls,Fs,Ps,ks,Ns,Bs,js,Vs,Us,Gs,Ws;class Ys{static createDrawingStyle(t){if(!an(t))throw new Error("Invalid style definition.");let e,i=Ys.USER_START_STYLE_ID;for(;gi(Ys,pn,"f",_n).has(i);)i++;e=i;const n=JSON.parse(JSON.stringify(t));n.id=e;for(let t in gi(Ys,pn,"f",vn))n.hasOwnProperty(t)||(n[t]=gi(Ys,pn,"f",vn)[t]);return gi(Ys,pn,"f",_n).set(e,n),n.id}static _getDrawingStyle(t,e){if("number"!=typeof t)throw new Error("Invalid style id.");const i=gi(Ys,pn,"f",_n).get(t);return i?e?JSON.parse(JSON.stringify(i)):i:null}static getDrawingStyle(t){return this._getDrawingStyle(t,!0)}static getAllDrawingStyles(){return JSON.parse(JSON.stringify(Array.from(gi(Ys,pn,"f",_n).values())))}static _updateDrawingStyle(t,e){if(!an(e))throw new Error("Invalid style definition.");const i=gi(Ys,pn,"f",_n).get(t);if(i)for(let t in e)i.hasOwnProperty(t)&&(i[t]=e[t])}static updateDrawingStyle(t,e){this._updateDrawingStyle(t,e)}}pn=Ys,Ys.STYLE_BLUE_STROKE=1,Ys.STYLE_GREEN_STROKE=2,Ys.STYLE_ORANGE_STROKE=3,Ys.STYLE_YELLOW_STROKE=4,Ys.STYLE_BLUE_STROKE_FILL=5,Ys.STYLE_GREEN_STROKE_FILL=6,Ys.STYLE_ORANGE_STROKE_FILL=7,Ys.STYLE_YELLOW_STROKE_FILL=8,Ys.STYLE_BLUE_STROKE_TRANSPARENT=9,Ys.STYLE_GREEN_STROKE_TRANSPARENT=10,Ys.STYLE_ORANGE_STROKE_TRANSPARENT=11,Ys.USER_START_STYLE_ID=1024,_n={value:new Map([[Ys.STYLE_BLUE_STROKE,{id:Ys.STYLE_BLUE_STROKE,lineWidth:4,fillStyle:"rgba(73, 173, 245, 0.3)",strokeStyle:"rgba(73, 173, 245, 1)",paintMode:"stroke",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_GREEN_STROKE,{id:Ys.STYLE_GREEN_STROKE,lineWidth:2,fillStyle:"rgba(73, 245, 73, 0.3)",strokeStyle:"rgba(73, 245, 73, 0.9)",paintMode:"strokeAndFill",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_ORANGE_STROKE,{id:Ys.STYLE_ORANGE_STROKE,lineWidth:2,fillStyle:"rgba(254, 180, 32, 0.3)",strokeStyle:"rgba(254, 180, 32, 0.9)",paintMode:"strokeAndFill",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_YELLOW_STROKE,{id:Ys.STYLE_YELLOW_STROKE,lineWidth:2,fillStyle:"rgba(245, 236, 73, 0.3)",strokeStyle:"rgba(245, 236, 73, 1)",paintMode:"stroke",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_BLUE_STROKE_FILL,{id:Ys.STYLE_BLUE_STROKE_FILL,lineWidth:4,fillStyle:"rgba(73, 173, 245, 0.3)",strokeStyle:"rgba(73, 173, 245, 1)",paintMode:"strokeAndFill",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_GREEN_STROKE_FILL,{id:Ys.STYLE_GREEN_STROKE_FILL,lineWidth:2,fillStyle:"rgba(73, 245, 73, 0.3)",strokeStyle:"rgba(73, 245, 73, 0.9)",paintMode:"strokeAndFill",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_ORANGE_STROKE_FILL,{id:Ys.STYLE_ORANGE_STROKE_FILL,lineWidth:2,fillStyle:"rgba(254, 180, 32, 0.3)",strokeStyle:"rgba(254, 180, 32, 1)",paintMode:"strokeAndFill",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_YELLOW_STROKE_FILL,{id:Ys.STYLE_YELLOW_STROKE_FILL,lineWidth:2,fillStyle:"rgba(245, 236, 73, 0.3)",strokeStyle:"rgba(245, 236, 73, 1)",paintMode:"strokeAndFill",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_BLUE_STROKE_TRANSPARENT,{id:Ys.STYLE_BLUE_STROKE_TRANSPARENT,lineWidth:4,fillStyle:"rgba(73, 173, 245, 0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_GREEN_STROKE_TRANSPARENT,{id:Ys.STYLE_GREEN_STROKE_TRANSPARENT,lineWidth:2,fillStyle:"rgba(73, 245, 73, 0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill",fontFamily:"consolas",fontSize:40}],[Ys.STYLE_ORANGE_STROKE_TRANSPARENT,{id:Ys.STYLE_ORANGE_STROKE_TRANSPARENT,lineWidth:2,fillStyle:"rgba(254, 180, 32, 0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill",fontFamily:"consolas",fontSize:40}]])},vn={value:{lineWidth:2,fillStyle:"rgba(245, 236, 73, 0.3)",strokeStyle:"rgba(245, 236, 73, 1)",paintMode:"stroke",fontFamily:"consolas",fontSize:40}},"undefined"!=typeof document&&"undefined"!=typeof window&&(Ri.StaticCanvas.prototype.dispose=function(){return this.isRendering&&(Ri.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(t){t.dispose&&t.dispose()}),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose&&this.backgroundImage.dispose(),this.backgroundImage=null,this.overlayImage&&this.overlayImage.dispose&&this.overlayImage.dispose(),this.overlayImage=null,this._iTextInstances=null,this.contextContainer=null,this.lowerCanvasEl.classList.remove("lower-canvas"),delete this._originalCanvasStyle,this.lowerCanvasEl.setAttribute("width",this.width),this.lowerCanvasEl.setAttribute("height",this.height),Ri.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},Ri.Object.prototype.transparentCorners=!1,Ri.Object.prototype.cornerSize=20,Ri.Object.prototype.touchCornerSize=100,Ri.Object.prototype.cornerColor="rgb(254,142,20)",Ri.Object.prototype.cornerStyle="circle",Ri.Object.prototype.strokeUniform=!0,Ri.Object.prototype.hasBorders=!1,Ri.Canvas.prototype.containerClass="",Ri.Canvas.prototype.getPointer=function(t,e){if(this._absolutePointer&&!e)return this._absolutePointer;if(this._pointer&&e)return this._pointer;var i=this.upperCanvasEl;let n,s=Ri.util.getPointer(t,i),r=i.getBoundingClientRect(),a=r.width||0,o=r.height||0;a&&o||("top"in r&&"bottom"in r&&(o=Math.abs(r.top-r.bottom)),"right"in r&&"left"in r&&(a=Math.abs(r.right-r.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,e||(s=this.restorePointerVpt(s));var l=this.getRetinaScaling();if(1!==l&&(s.x/=l,s.y/=l),0!==a&&0!==o){var h=window.getComputedStyle(i).objectFit,c=i.width,d=i.height,u=a,f=o;n={width:c/u,height:d/f};var g,m,p=c/d,_=u/f;return"contain"===h?p>_?(g=u,m=u/p,{x:s.x*n.width,y:(s.y-(f-m)/2)*n.width}):(g=f*p,m=f,{x:(s.x-(u-g)/2)*n.height,y:s.y*n.height}):"cover"===h?p>_?{x:(c-n.height*u)/2+s.x*n.height,y:s.y*n.height}:{x:s.x*n.width,y:(d-n.width*f)/2+s.y*n.width}:{x:s.x*n.width,y:s.y*n.height}}return n={width:1,height:1},{x:s.x*n.width,y:s.y*n.height}},Ri.Canvas.prototype._onTouchStart=function(t){let e;for(let i=0;i<t.touches.length;i++){let n=t.touches[i];if(e=this.findTarget(n),e)break}100===this.id&&!this.allowTouchScrolling&&t.cancelable&&t.preventDefault&&t.preventDefault(),100===this.id&&e&&t.cancelable&&t.preventDefault&&t.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(t)),this.__onMouseDown(t),this._resetTransformEventData();let i=this.upperCanvasEl,n=this._getEventPrefix();Ri.util.addListener(Ri.document,"touchend",this._onTouchEnd,{passive:!1}),Ri.util.addListener(Ri.document,"touchmove",this._onMouseMove,{passive:!1}),Ri.util.removeListener(i,n+"down",this._onMouseDown)},Ri.Textbox.prototype._wrapLine=function(t,e,i,n){const s=t.match(/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/g),r=!(!s||!s.length);var a=0,o=this.splitByGrapheme||r,l=[],h=[],c=o?Ri.util.string.graphemeSplit(t):t.split(this._wordJoiners),d="",u=0,f=o?"":" ",g=0,m=0,p=0,_=!0,v=this._getWidthOfCharSpacing();n=n||0,0===c.length&&c.push([]),i-=n;for(var y=0;y<c.length;y++)d=o?c[y]:Ri.util.string.graphemeSplit(c[y]),g=this._measureWord(d,e,u),u+=d.length,(a+=m+g-v)>i&&!_?(l.push(h),h=[],a=g,_=!0):a+=v,_||o||h.push(f),h=h.concat(d),m=o?0:this._measureWord([f],e,u),u++,_=!1,g>p&&(p=g);return y&&l.push(h),p+n>this.dynamicMinWidth&&(this.dynamicMinWidth=p-v+n),l});class Hs{get width(){return this.fabricCanvas.width}get height(){return this.fabricCanvas.height}set _allowMultiSelect(t){this.fabricCanvas.selection=t,this.fabricCanvas.renderAll()}get _allowMultiSelect(){return this.fabricCanvas.selection}constructor(t,e,i){if(this.mapType_StateAndStyleId=new Map,this.mode="viewer",this.onSelectionChanged=null,this._arrDrwaingItem=[],this._arrFabricObject=[],this._visible=!0,t.hasOwnProperty("getFabricCanvas"))this.fabricCanvas=t.getFabricCanvas();else{let e=this.fabricCanvas=new Ri.Canvas(t,Object.assign(i,{allowTouchScrolling:!0,selection:!1}));e.setDimensions({width:"100%",height:"100%"},{cssOnly:!0}),e.lowerCanvasEl.className="",e.upperCanvasEl.className="",e.on("selection:created",function(t){const e=t.selected,i=[];for(let t of e){const e=t.getDrawingItem()._drawingLayer;e&&!i.includes(e)&&i.push(e)}for(let t of i){const i=[];for(let n of e){const e=n.getDrawingItem();e._drawingLayer===t&&i.push(e)}setTimeout(()=>{t.onSelectionChanged&&t.onSelectionChanged(i,[])},0)}}),e.on("before:selection:cleared",function(t){const e=this.getActiveObjects(),i=[];for(let t of e){const e=t.getDrawingItem()._drawingLayer;e&&!i.includes(e)&&i.push(e)}for(let t of i){const i=[];for(let n of e){const e=n.getDrawingItem();e._drawingLayer===t&&i.push(e)}setTimeout(()=>{const e=[];for(let n of i)t.hasDrawingItem(n)&&e.push(n);e.length>0&&t.onSelectionChanged&&t.onSelectionChanged([],e)},0)}}),e.on("selection:updated",function(t){const e=t.selected,i=t.deselected,n=[];for(let t of e){const e=t.getDrawingItem()._drawingLayer;e&&!n.includes(e)&&n.push(e)}for(let t of i){const e=t.getDrawingItem()._drawingLayer;e&&!n.includes(e)&&n.push(e)}for(let t of n){const n=[],s=[];for(let i of e){const e=i.getDrawingItem();e._drawingLayer===t&&n.push(e)}for(let e of i){const i=e.getDrawingItem();i._drawingLayer===t&&s.push(i)}setTimeout(()=>{t.onSelectionChanged&&t.onSelectionChanged(n,s)},0)}}),e.wrapperEl.style.position="absolute",t.getFabricCanvas=()=>this.fabricCanvas}let n,s;switch(this.fabricCanvas.id=e,this.id=e,e){case Hs.DDN_LAYER_ID:n=Ys.getDrawingStyle(Ys.STYLE_BLUE_STROKE),s=Ys.getDrawingStyle(Ys.STYLE_BLUE_STROKE_FILL);break;case Hs.DBR_LAYER_ID:n=Ys.getDrawingStyle(Ys.STYLE_ORANGE_STROKE),s=Ys.getDrawingStyle(Ys.STYLE_ORANGE_STROKE_FILL);break;case Hs.DLR_LAYER_ID:n=Ys.getDrawingStyle(Ys.STYLE_GREEN_STROKE),s=Ys.getDrawingStyle(Ys.STYLE_GREEN_STROKE_FILL);break;default:n=Ys.getDrawingStyle(Ys.STYLE_YELLOW_STROKE),s=Ys.getDrawingStyle(Ys.STYLE_YELLOW_STROKE_FILL)}for(let t of Gi.arrMediaTypes)this.mapType_StateAndStyleId.set(t,{default:n.id,selected:s.id})}getId(){return this.id}setVisible(t){if(t){for(let t of this._arrFabricObject)t.visible=!0,t.hasControls=!0;this._visible=!0}else{for(let t of this._arrFabricObject)t.visible=!1,t.hasControls=!1;this._visible=!1}this.fabricCanvas.renderAll()}isVisible(){return this._visible}_getItemCurrentStyle(t){return t.styleId?Ys.getDrawingStyle(t.styleId):Ys.getDrawingStyle(t._mapState_StyleId.get(t.styleSelector))||null}_changeMediaTypeCurStyleInStyleSelector(t,e,i,n){const s=this.getDrawingItems(e=>e._mediaType===t);for(let t of s)t.styleSelector===e&&this._changeItemStyle(t,i,!0);n||this.fabricCanvas.renderAll()}_changeItemStyle(t,e,i){if(!t||!e)return;const n=t._getFabricObject();"number"==typeof t.styleId&&(e=Ys.getDrawingStyle(t.styleId)),n.strokeWidth=e.lineWidth,"fill"===e.paintMode?(n.fill=e.fillStyle,n.stroke=e.fillStyle):"stroke"===e.paintMode?(n.fill="transparent",n.stroke=e.strokeStyle):"strokeAndFill"===e.paintMode&&(n.fill=e.fillStyle,n.stroke=e.strokeStyle),n.fontFamily&&(n.fontFamily=e.fontFamily),n.fontSize&&(n.fontSize=e.fontSize),n.group||(n.dirty=!0),i||this.fabricCanvas.renderAll()}_updateGroupItem(t,e,i){if(!t||!e)return;const n=t.getChildDrawingItems();if("add"===i){if(n.includes(e))return;const i=e._getFabricObject();if(this.fabricCanvas.getObjects().includes(i)){if(!this._arrFabricObject.includes(i))throw new Error("Existed in other drawing layers.");e._zIndex=null}else{let i;if(e.styleId)i=Ys.getDrawingStyle(e.styleId);else{const n=this.mapType_StateAndStyleId.get(e._mediaType);i=Ys.getDrawingStyle(n[t.styleSelector]);const s=()=>{this._changeItemStyle(e,Ys.getDrawingStyle(this.mapType_StateAndStyleId.get(e._mediaType).selected),!0)},r=()=>{this._changeItemStyle(e,Ys.getDrawingStyle(this.mapType_StateAndStyleId.get(e._mediaType).default),!0)};e._on("selected",s),e._on("deselected",r),e._funcChangeStyleToSelected=s,e._funcChangeStyleToDefault=r}e._drawingLayer=this,e._drawingLayerId=this.id,this._changeItemStyle(e,i,!0)}t._fabricObject.addWithUpdate(e._getFabricObject())}else{if("remove"!==i)return;if(!n.includes(e))return;e._zIndex=null,e._drawingLayer=null,e._drawingLayerId=null,e._off("selected",e._funcChangeStyleToSelected),e._off("deselected",e._funcChangeStyleToDefault),e._funcChangeStyleToSelected=null,e._funcChangeStyleToDefault=null,t._fabricObject.removeWithUpdate(e._getFabricObject())}this.fabricCanvas.renderAll()}_addDrawingItem(t,e){if(!(t instanceof Gi))throw new TypeError("Invalid 'drawingItem'.");if(t._drawingLayer){if(t._drawingLayer==this)return;throw new Error("This drawing item has existed in other layer.")}let i=t._getFabricObject();const n=this.fabricCanvas.getObjects();let s,r;if(n.includes(i)){if(this._arrFabricObject.includes(i))return;throw new Error("Existed in other drawing layers.")}if("group"===t._mediaType){s=t.getChildDrawingItems();for(let t of s)if(t._drawingLayer&&t._drawingLayer!==this)throw new Error("The childItems of DT_Group have existed in other drawing layers.")}if(e&&"object"==typeof e&&!Array.isArray(e))for(let t in e)i.set(t,e[t]);if(s){for(let t of s){const e=this.mapType_StateAndStyleId.get(t._mediaType);for(let i of Gi.arrStyleSelectors)t._mapState_StyleId.set(i,e[i]);if(t.styleId)r=Ys.getDrawingStyle(t.styleId);else{r=Ys.getDrawingStyle(e.default);const i=()=>{this._changeItemStyle(t,Ys.getDrawingStyle(this.mapType_StateAndStyleId.get(t._mediaType).selected),!0)},n=()=>{this._changeItemStyle(t,Ys.getDrawingStyle(this.mapType_StateAndStyleId.get(t._mediaType).default),!0)};t._on("selected",i),t._on("deselected",n),t._funcChangeStyleToSelected=i,t._funcChangeStyleToDefault=n}t._drawingLayer=this,t._drawingLayerId=this.id,this._changeItemStyle(t,r,!0)}i.dirty=!0,this.fabricCanvas.renderAll()}else{const e=this.mapType_StateAndStyleId.get(t._mediaType);for(let i of Gi.arrStyleSelectors)t._mapState_StyleId.set(i,e[i]);if(t.styleId)r=Ys.getDrawingStyle(t.styleId);else{r=Ys.getDrawingStyle(e.default);const i=()=>{this._changeItemStyle(t,Ys.getDrawingStyle(this.mapType_StateAndStyleId.get(t._mediaType).selected))},n=()=>{this._changeItemStyle(t,Ys.getDrawingStyle(this.mapType_StateAndStyleId.get(t._mediaType).default))};t._on("selected",i),t._on("deselected",n),t._funcChangeStyleToSelected=i,t._funcChangeStyleToDefault=n}this._changeItemStyle(t,r)}t._zIndex=this.id,t._drawingLayer=this,t._drawingLayerId=this.id;const a=this._arrFabricObject.length;let o=n.length;if(a)o=n.indexOf(this._arrFabricObject[a-1])+1;else for(let e=0;e<n.length;e++)if(t._zIndex<n[e].getDrawingItem()._zIndex){o=e;break}this._arrDrwaingItem.push(t),this._arrFabricObject.push(i),this._visible?i.visible=!0:i.visible=!1,this.fabricCanvas.insertAt(i,o,!1)}addDrawingItem(t){if(!t||!t.isDrawingItem)throw TypeError("Illegal drawing item.");if("viewer"===this.mode)t._setEditable(!1);else{if("editor"!==this.mode)throw new Error("Illegal 'mode'.");t._setEditable(!0)}this._addDrawingItem(t),t.updatePosition()}addDrawingItems(t){for(let e of t)this.addDrawingItem(e)}removeDrawingItem(t){if(!t||!t.isDrawingItem)throw TypeError("Illegal drawing item.");if(!this.hasDrawingItem(t))return;if(t._zIndex=null,t._drawingLayer=null,t._drawingLayerId=null,"group"===t._mediaType){const e=t.getChildDrawingItems();for(let t of e)t._zIndex=null,t._drawingLayer=null,t._drawingLayerId=null,t._off("selected",t._funcChangeStyleToSelected),t._off("deselected",t._funcChangeStyleToDefault),t._funcChangeStyleToSelected=null,t._funcChangeStyleToDefault=null,t._mapState_StyleId.clear()}else t._off("selected",t._funcChangeStyleToSelected),t._off("deselected",t._funcChangeStyleToDefault),t._funcChangeStyleToSelected=null,t._funcChangeStyleToDefault=null,t._mapState_StyleId.clear();const e=t._getFabricObject();"selected"===t.styleSelector&&(e.group?e.group.removeWithUpdate(e):this.fabricCanvas._activeObject=null,t.setState(bi.DIS_DEFAULT)),this.fabricCanvas.remove(e),this._arrDrwaingItem.splice(this._arrDrwaingItem.indexOf(t),1),this._arrFabricObject.splice(this._arrFabricObject.indexOf(e),1)}removeDrawingItems(t){for(let e of t)this.removeDrawingItem(e)}setDrawingItems(t){this.clearDrawingItems(),this.addDrawingItems(t)}getDrawingItems(t){return t&&"function"==typeof t?this._arrDrwaingItem.filter(t):Array.from(this._arrDrwaingItem)}getSelectedDrawingItems(){const t=this.fabricCanvas.getActiveObjects(),e=[];for(let i of t)this._arrFabricObject.includes(i)&&e.push(i.getDrawingItem());return e}hasDrawingItem(t){if(!t||!t.isDrawingItem)throw TypeError("Illegal drawing item.");return this._arrDrwaingItem.includes(t)}clearDrawingItems(){this.removeDrawingItems(Array.from(this._arrDrwaingItem))}_setDefaultStyle(t,e,i){e?e.forEach(t=>t.toLowerCase()):e=Gi.arrMediaTypes,i?i.forEach(t=>t.toLowerCase()):i=Gi.arrStyleSelectors;const n=Ys.getDrawingStyle(t);if(!n)throw new Error(`The 'drawingStyle' with id '${t}' doesn't exist.`);let s;for(let r of e)if(s=this.mapType_StateAndStyleId.get(r),s)for(let e of i){this._changeMediaTypeCurStyleInStyleSelector(r,e,n,!0),s[e]=t;for(let i of this._arrDrwaingItem)i._mediaType===r&&i._mapState_StyleId.set(e,t)}this.fabricCanvas.renderAll()}setDefaultStyle(t,e,i){const n=[];i&Ti.DIMT_RECTANGLE&&n.push("rect"),i&Ti.DIMT_QUADRILATERAL&&n.push("quad"),i&Ti.DIMT_TEXT&&n.push("text"),i&Ti.DIMT_ARC&&n.push("arc"),i&Ti.DIMT_IMAGE&&n.push("image"),i&Ti.DIMT_POLYGON&&n.push("polygon"),i&Ti.DIMT_LINE&&n.push("line");const s=[];e&bi.DIS_DEFAULT&&s.push("default"),e&bi.DIS_SELECTED&&s.push("selected"),this._setDefaultStyle(t,n.length?n:null,s.length?s:null)}setMode(t){if("viewer"===(t=t.toLowerCase())){for(let t of this._arrDrwaingItem)t._setEditable(!1);this.fabricCanvas.discardActiveObject(),this.fabricCanvas.renderAll(),this.mode="viewer"}else{if("editor"!==t)throw new RangeError("Invalid value.");for(let t of this._arrDrwaingItem)t._setEditable(!0);this.mode="editor"}this._manager._switchPointerEvent()}getMode(){return this.mode}_setDimensions(t,e){this.fabricCanvas.setDimensions(t,e)}_setObjectFit(t){if(t=t.toLowerCase(),!["contain","cover"].includes(t))throw new Error(`Unsupported value '${t}'.`);this.fabricCanvas.lowerCanvasEl.style.objectFit=t,this.fabricCanvas.upperCanvasEl.style.objectFit=t}_getObjectFit(){return this.fabricCanvas.lowerCanvasEl.style.objectFit}renderAll(){for(let t of this._arrDrwaingItem){const e=this._getItemCurrentStyle(t);this._changeItemStyle(t,e,!0)}this.fabricCanvas.renderAll()}dispose(){this.clearDrawingItems(),1===this._manager._arrDrawingLayer.length&&(this.fabricCanvas.wrapperEl.style.pointerEvents="none",this.fabricCanvas.dispose(),this._arrDrwaingItem.length=0,this._arrFabricObject.length=0)}}Hs.DDN_LAYER_ID=1,Hs.DBR_LAYER_ID=2,Hs.DLR_LAYER_ID=3,Hs.USER_DEFINED_LAYER_BASE_ID=100,Hs.TIP_LAYER_ID=999;class zs{constructor(){this._arrDrawingLayer=[]}createDrawingLayer(t,e){if(this.getDrawingLayer(e))throw new Error("Existed drawing layer id.");const i=new Hs(t,e,{enableRetinaScaling:!1});return i._manager=this,this._arrDrawingLayer.push(i),this._switchPointerEvent(),i}deleteDrawingLayer(t){const e=this.getDrawingLayer(t);if(!e)return;const i=this._arrDrawingLayer;e.dispose(),i.splice(i.indexOf(e),1),this._switchPointerEvent()}clearDrawingLayers(){for(let t of this._arrDrawingLayer)t.dispose();this._arrDrawingLayer.length=0}getDrawingLayer(t){for(let e of this._arrDrawingLayer)if(e.getId()===t)return e;return null}getAllDrawingLayers(){return Array.from(this._arrDrawingLayer)}getSelectedDrawingItems(){if(!this._arrDrawingLayer.length)return;const t=this._getFabricCanvas().getActiveObjects(),e=[];for(let i of t)e.push(i.getDrawingItem());return e}setDimensions(t,e){this._arrDrawingLayer.length&&this._arrDrawingLayer[0]._setDimensions(t,e)}setObjectFit(t){for(let e of this._arrDrawingLayer)e&&e._setObjectFit(t)}getObjectFit(){return this._arrDrawingLayer.length?this._arrDrawingLayer[0]._getObjectFit():null}setVisible(t){this._arrDrawingLayer.length&&(this._getFabricCanvas().wrapperEl.style.display=t?"block":"none")}_getFabricCanvas(){return this._arrDrawingLayer.length?this._arrDrawingLayer[0].fabricCanvas:null}_switchPointerEvent(){if(this._arrDrawingLayer.length)for(let t of this._arrDrawingLayer)t.getMode()}}class Xs extends Ji{constructor(t,e,i,n,s){super(t,{x:e,y:i,width:n,height:0},s),yn.set(this,void 0),wn.set(this,void 0),this._fabricObject.paddingTop=15,this._fabricObject.calcTextHeight=function(){for(var t=0,e=0,i=this._textLines.length;e<i;e++)t+=this.getHeightOfLine(e);return t+2*this.paddingTop},this._fabricObject._getTopOffset=function(){return-this.height/2+this.getHeightOfLine(0)*(1-1/this.lineHeight)/2+this.paddingTop},this.set("backgroundColor","rgba(50, 50, 52, .8)"),this.set("lineHeight",1.3),this.set("textAlign","center")}setDuration(t){mi(this,yn,t),gi(this,wn,"f")&&clearTimeout(gi(this,wn,"f")),gi(this,yn,"f")>=0&&mi(this,wn,setTimeout(()=>{this.set("visible",!1),this._drawingLayer&&this._drawingLayer.renderAll()},gi(this,yn,"f")))}getDuration(){return gi(this,yn,"f")}}yn=new WeakMap,wn=new WeakMap;class qs{constructor(){Cn.add(this),En.set(this,void 0),Sn.set(this,void 0),Tn.set(this,void 0),bn.set(this,!0),this._drawingLayerManager=new zs}createDrawingLayerBaseCvs(t,e,i="contain"){if("number"!=typeof t||t<=1)throw new Error("Invalid 'width'.");if("number"!=typeof e||e<=1)throw new Error("Invalid 'height'.");if(!["contain","cover"].includes(i))throw new Error("Unsupported 'objectFit'.");const n=document.createElement("canvas");return n.width==t&&n.height==e||(n.width=t,n.height=e),n.style.objectFit=i,n}_createDrawingLayer(t,e,i,n){if(!this._layerBaseCvs){let s;try{s=this.getContentDimensions()}catch(t){if("Invalid content dimensions."!==(t.message||t))throw t}e||(e=(null==s?void 0:s.width)||1280),i||(i=(null==s?void 0:s.height)||720),n||(n=(null==s?void 0:s.objectFit)||"contain"),this._layerBaseCvs=this.createDrawingLayerBaseCvs(e,i,n)}const s=this._layerBaseCvs,r=this._drawingLayerManager.createDrawingLayer(s,t);return this._innerComponent.getElement("drawing-layer")||this._innerComponent.setElement("drawing-layer",s.parentElement),r}createDrawingLayer(){let t;for(let e=Hs.USER_DEFINED_LAYER_BASE_ID;;e++)if(!this._drawingLayerManager.getDrawingLayer(e)&&e!==Hs.TIP_LAYER_ID){t=e;break}return this._createDrawingLayer(t)}deleteDrawingLayer(t){var e;this._drawingLayerManager.deleteDrawingLayer(t),this._drawingLayerManager.getAllDrawingLayers().length||(null===(e=this._innerComponent)||void 0===e||e.removeElement("drawing-layer"),this._layerBaseCvs=null)}deleteUserDefinedDrawingLayer(t){if("number"!=typeof t)throw new TypeError("Invalid id.");if(t<Hs.USER_DEFINED_LAYER_BASE_ID)throw new Error(`The drawing layer with id ${t} is not defined by users.`);this.deleteDrawingLayer(t)}_clearDrawingLayers(){const t=this.getAllDrawingLayers();for(let e of t)this.deleteDrawingLayer(e.getId())}clearUserDefinedDrawingLayers(){const t=this.getAllDrawingLayers();for(let e of t){const t=e.getId();t<Hs.USER_DEFINED_LAYER_BASE_ID||this.deleteUserDefinedDrawingLayer(t)}}getDrawingLayer(t){return t==Hs.TIP_LAYER_ID?null:this._drawingLayerManager.getDrawingLayer(t)||([Hs.DDN_LAYER_ID,Hs.DBR_LAYER_ID,Hs.DLR_LAYER_ID].includes(t)?this._createDrawingLayer(t):null)}getAllDrawingLayers(){return this._drawingLayerManager.getAllDrawingLayers().filter(t=>t.getId()>=0&&t.getId()!==Hs.TIP_LAYER_ID)}updateDrawingLayers(t){((t,e,i)=>{if(!(t<=1||e<=1)){if(!["contain","cover"].includes(i))throw new Error("Unsupported 'objectFit'.");this._drawingLayerManager.setDimensions({width:t,height:e},{backstoreOnly:!0}),this._drawingLayerManager.setObjectFit(i)}})(t.width,t.height,t.objectFit)}getSelectedDrawingItems(){return this._drawingLayerManager.getSelectedDrawingItems()}setTipConfig(t){if(!(sn(e=t)&&T(e.topLeftPoint)&&Oi(e.width))||e.width<=0||!Oi(e.duration)||"coordinateBase"in e&&!["view","image"].includes(e.coordinateBase))throw new Error("Invalid tip config.");var e;mi(this,En,JSON.parse(JSON.stringify(t))),gi(this,En,"f").coordinateBase||(gi(this,En,"f").coordinateBase="view"),mi(this,Tn,t.duration),gi(this,Cn,"m",On).call(this)}getTipConfig(){return gi(this,En,"f")?gi(this,En,"f"):null}setTipVisible(t){if("boolean"!=typeof t)throw new TypeError("Invalid value.");this._tip&&(this._tip.set("visible",t),this._drawingLayerOfTip&&this._drawingLayerOfTip.renderAll()),mi(this,bn,t)}isTipVisible(){return gi(this,bn,"f")}updateTipMessage(t){if(!gi(this,En,"f"))throw new Error("Tip config is not set.");this._tipStyleId||(this._tipStyleId=Ys.createDrawingStyle({fillStyle:"#FFFFFF",paintMode:"fill",fontFamily:"Open Sans",fontSize:40})),this._drawingLayerOfTip||(this._drawingLayerOfTip=this._drawingLayerManager.getDrawingLayer(Hs.TIP_LAYER_ID)||this._createDrawingLayer(Hs.TIP_LAYER_ID)),this._tip?this._tip.set("text",t):this._tip=gi(this,Cn,"m",In).call(this,t,gi(this,En,"f").topLeftPoint.x,gi(this,En,"f").topLeftPoint.y,gi(this,En,"f").width,gi(this,En,"f").coordinateBase,this._tipStyleId),gi(this,Cn,"m",xn).call(this,this._tip,this._drawingLayerOfTip),this._tip.set("visible",gi(this,bn,"f")),this._drawingLayerOfTip&&this._drawingLayerOfTip.renderAll(),gi(this,Sn,"f")&&clearTimeout(gi(this,Sn,"f")),gi(this,Tn,"f")>=0&&mi(this,Sn,setTimeout(()=>{gi(this,Cn,"m",Rn).call(this)},gi(this,Tn,"f")))}}En=new WeakMap,Sn=new WeakMap,Tn=new WeakMap,bn=new WeakMap,Cn=new WeakSet,In=function(t,e,i,n,s,r){const a=new Xs(t,e,i,n,r);return a.coordinateBase=s,a},xn=function(t,e){e.hasDrawingItem(t)||e.addDrawingItems([t])},Rn=function(){this._tip&&this._drawingLayerOfTip.removeDrawingItems([this._tip])},On=function(){if(!this._tip)return;const t=gi(this,En,"f");this._tip.coordinateBase=t.coordinateBase,this._tip.setTextRect({x:t.topLeftPoint.x,y:t.topLeftPoint.y,width:t.width,height:0}),this._tip.set("width",this._tip.get("width")),this._tip._drawingLayer&&this._tip._drawingLayer.renderAll()};class Zs extends HTMLElement{constructor(){super(),An.set(this,void 0);const t=new DocumentFragment,e=document.createElement("div");e.setAttribute("class","wrapper"),t.appendChild(e),mi(this,An,e);const i=document.createElement("slot");i.setAttribute("name","single-frame-input-container"),e.append(i);const n=document.createElement("slot");n.setAttribute("name","content"),e.append(n);const s=document.createElement("slot");s.setAttribute("name","drawing-layer"),e.append(s);const r=document.createElement("style");r.textContent='\n.wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n::slotted(canvas[slot="content"]) {\n  object-fit: contain;\n  pointer-events: none;\n}\n::slotted(div[slot="single-frame-input-container"]) {\n  width: 1px;\n  height: 1px;\n  overflow: hidden;\n  pointer-events: none;\n}\n::slotted(*) {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n    ',t.appendChild(r),this.attachShadow({mode:"open"}).appendChild(t)}getWrapper(){return gi(this,An,"f")}setElement(t,e){if(!(e instanceof HTMLElement))throw new TypeError("Invalid 'el'.");if(!["content","single-frame-input-container","drawing-layer"].includes(t))throw new TypeError("Invalid 'slot'.");this.removeElement(t),e.setAttribute("slot",t),this.appendChild(e)}getElement(t){if(!["content","single-frame-input-container","drawing-layer"].includes(t))throw new TypeError("Invalid 'slot'.");return this.querySelector(`[slot="${t}"]`)}removeElement(t){var e;if(!["content","single-frame-input-container","drawing-layer"].includes(t))throw new TypeError("Invalid 'slot'.");null===(e=this.querySelectorAll(`[slot="${t}"]`))||void 0===e||e.forEach(t=>t.remove())}}An=new WeakMap,customElements.get("dce-component")||customElements.define("dce-component",Zs);class Ks extends qs{static get engineResourcePath(){const t=D(Pt.engineResourcePaths);return"DCV"===Pt._bundleEnv?t.dcvData+"ui/":t.dbrBundle+"ui/"}static set defaultUIElementURL(t){Ks._defaultUIElementURL=t}static get defaultUIElementURL(){var t;return null===(t=Ks._defaultUIElementURL)||void 0===t?void 0:t.replace("@engineResourcePath/",Ks.engineResourcePath)}static async createInstance(t){const e=new Ks;return"string"==typeof t&&(t=t.replace("@engineResourcePath/",Ks.engineResourcePath)),await e.setUIElement(t||Ks.defaultUIElementURL),e}static _transformCoordinates(t,e,i,n,s,r,a){const o=r/n,l=a/s;t.x=Math.round(t.x/o+e),t.y=Math.round(t.y/l+i)}set _singleFrameMode(t){if(!["disabled","image","camera"].includes(t))throw new Error("Invalid value.");if(t!==gi(this,Vn,"f")){if(mi(this,Vn,t),gi(this,Dn,"m",Wn).call(this))mi(this,Pn,null),this._videoContainer=null,this._innerComponent.removeElement("content"),this._innerComponent&&(this._innerComponent.addEventListener("click",this._clickIptSingleFrameMode),this._innerComponent.setAttribute("title","Take a photo")),this._bgCamera&&(this._bgCamera.style.display="block");else if(this._innerComponent&&(this._innerComponent.removeEventListener("click",this._clickIptSingleFrameMode),this._innerComponent.removeAttribute("title")),this._bgCamera&&(this._bgCamera.style.display="none"),!gi(this,Pn,"f")){const t=document.createElement("video");t.style.position="absolute",t.style.left="0",t.style.top="0",t.style.width="100%",t.style.height="100%",t.style.objectFit=this.getVideoFit(),t.setAttribute("autoplay","true"),t.setAttribute("playsinline","true"),t.setAttribute("crossOrigin","anonymous"),t.setAttribute("muted","true"),["iPhone","iPad","Mac"].includes(ui.OS)&&t.setAttribute("poster","data:image/gif;base64,R0lGODlhAQABAIEAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAgEAAEEBAA7"),mi(this,Pn,t);const e=document.createElement("div");e.append(t),e.style.overflow="hidden",this._videoContainer=e,this._innerComponent.setElement("content",e)}gi(this,Dn,"m",Wn).call(this)||this._hideDefaultSelection?(this._selCam&&(this._selCam.style.display="none"),this._selRsl&&(this._selRsl.style.display="none"),this._selMinLtr&&(this._selMinLtr.style.display="none")):(this._selCam&&(this._selCam.style.display="block"),this._selRsl&&(this._selRsl.style.display="block"),this._selMinLtr&&(this._selMinLtr.style.display="block"),this._stopLoading())}}get _singleFrameMode(){return gi(this,Vn,"f")}get disposed(){return gi(this,Gn,"f")}constructor(){super(),Dn.add(this),Mn.set(this,void 0),Ln.set(this,void 0),Fn.set(this,void 0),this._poweredByVisible=!0,this.containerClassName="dce-video-container",Pn.set(this,void 0),this.videoFit="contain",this._hideDefaultSelection=!1,this._divScanArea=null,this._divScanLight=null,this._bgLoading=null,this._selCam=null,this._bgCamera=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this._poweredBy=null,kn.set(this,null),this.regionMaskFillStyle="rgba(0,0,0,0.5)",this.regionMaskStrokeStyle="rgb(254,142,20)",this.regionMaskLineWidth=6,Nn.set(this,!1),Bn.set(this,!1),jn.set(this,{width:0,height:0}),this._updateLayersTimeout=500,this._videoResizeListener=()=>{gi(this,Dn,"m",qn).call(this),this._updateLayersTimeoutId&&clearTimeout(this._updateLayersTimeoutId),this._updateLayersTimeoutId=setTimeout(()=>{this.disposed||(this.eventHandler.fire("videoEl:resized",null,{async:!1}),this.eventHandler.fire("content:updated",null,{async:!1}),this.isScanLaserVisible()&&gi(this,Dn,"m",Xn).call(this))},this._updateLayersTimeout)},this._windowResizeListener=()=>{Ks._onLog&&Ks._onLog("window resize event triggered."),gi(this,jn,"f").width===document.documentElement.clientWidth&&gi(this,jn,"f").height===document.documentElement.clientHeight||(gi(this,jn,"f").width=document.documentElement.clientWidth,gi(this,jn,"f").height=document.documentElement.clientHeight,this._videoResizeListener())},Vn.set(this,"disabled"),this._clickIptSingleFrameMode=()=>{if(!gi(this,Dn,"m",Wn).call(this))return;let t;if(this._singleFrameInputContainer)t=this._singleFrameInputContainer.firstElementChild;else{t=document.createElement("input"),t.setAttribute("type","file"),"camera"===this._singleFrameMode?(t.setAttribute("capture",""),t.setAttribute("accept","image/*")):"image"===this._singleFrameMode&&(t.removeAttribute("capture"),t.setAttribute("accept",".jpg,.jpeg,.icon,.gif,.svg,.webp,.png,.bmp")),t.addEventListener("change",async()=>{const e=t.files[0];t.value="";{const t=async t=>{let e=null,i=null;if("undefined"!=typeof createImageBitmap)try{if(e=await createImageBitmap(t),e)return e}catch(t){}var n;return e||(i=await(n=t,new Promise((t,e)=>{let i=URL.createObjectURL(n),s=new Image;s.src=i,s.onload=()=>{URL.revokeObjectURL(s.src),t(s)},s.onerror=t=>{e(new Error("Can't convert blob to image : "+(t instanceof Event?t.type:t)))}}))),i},i=(t,e,i,n)=>{t.width==i&&t.height==n||(t.width=i,t.height=n);const s=t.getContext("2d");s.clearRect(0,0,t.width,t.height),s.drawImage(e,0,0)},n=await t(e),s=n instanceof HTMLImageElement?n.naturalWidth:n.width,r=n instanceof HTMLImageElement?n.naturalHeight:n.height;let a=this._cvsSingleFrameMode;const o=null==a?void 0:a.width,l=null==a?void 0:a.height;a||(a=document.createElement("canvas"),this._cvsSingleFrameMode=a),i(a,n,s,r),this._innerComponent.setElement("content",a),o===a.width&&l===a.height||this.eventHandler.fire("content:updated",null,{async:!1})}this._onSingleFrameAcquired&&setTimeout(()=>{this._onSingleFrameAcquired(this._cvsSingleFrameMode)},0)}),t.style.position="absolute",t.style.top="-9999px",t.style.backgroundColor="transparent",t.style.color="transparent";const e=document.createElement("div");e.append(t),this._innerComponent.setElement("single-frame-input-container",e),this._singleFrameInputContainer=e}null==t||t.click()},Un.set(this,[]),this._capturedResultReceiver={onCapturedResultReceived:(t,e)=>{var i,n,s,r;if(this.disposed)return;if(this.clearAllInnerDrawingItems(),!t)return;const a=t.originalImageTag;if(!a)return;const o=t.items;if(!(null==o?void 0:o.length))return;const l=(null===(i=a.cropRegion)||void 0===i?void 0:i.left)||0,h=(null===(n=a.cropRegion)||void 0===n?void 0:n.top)||0,c=(null===(s=a.cropRegion)||void 0===s?void 0:s.right)?a.cropRegion.right-l:a.originalWidth,d=(null===(r=a.cropRegion)||void 0===r?void 0:r.bottom)?a.cropRegion.bottom-h:a.originalHeight,u=a.currentWidth,f=a.currentHeight,g=(t,e,i,n,s,r,a,o,l=[],h)=>{(e=JSON.parse(JSON.stringify(e))).forEach(t=>Ks._transformCoordinates(t,i,n,s,r,a,o));const c=new en({points:[{x:e[0].x,y:e[0].y},{x:e[1].x,y:e[1].y},{x:e[2].x,y:e[2].y},{x:e[3].x,y:e[3].y}]},h);for(let t of l)c.addNote(t);t.addDrawingItems([c]),gi(this,Un,"f").push(c)};let m,p;for(let t of o)switch(t.type){case nt.CRIT_ORIGINAL_IMAGE:break;case nt.CRIT_BARCODE:m=this.getDrawingLayer(Hs.DBR_LAYER_ID),p=[{name:"format",content:t.formatString},{name:"text",content:t.text}],(null==e?void 0:e.isBarcodeVerifyOpen)?t.verified?g(m,t.location.points,l,h,c,d,u,f,p):g(m,t.location.points,l,h,c,d,u,f,p,Ys.STYLE_ORANGE_STROKE_TRANSPARENT):g(m,t.location.points,l,h,c,d,u,f,p);break;case nt.CRIT_TEXT_LINE:m=this.getDrawingLayer(Hs.DLR_LAYER_ID),p=[{name:"text",content:t.text}],e.isLabelVerifyOpen?t.verified?g(m,t.location.points,l,h,c,d,u,f,p):g(m,t.location.points,l,h,c,d,u,f,p,Ys.STYLE_GREEN_STROKE_TRANSPARENT):g(m,t.location.points,l,h,c,d,u,f,p);break;case nt.CRIT_DETECTED_QUAD:m=this.getDrawingLayer(Hs.DDN_LAYER_ID),(null==e?void 0:e.isDetectVerifyOpen)?t.crossVerificationStatus===dt.CVS_PASSED?g(m,t.location.points,l,h,c,d,u,f,[]):g(m,t.location.points,l,h,c,d,u,f,[],Ys.STYLE_BLUE_STROKE_TRANSPARENT):g(m,t.location.points,l,h,c,d,u,f,[]);break;case nt.CRIT_DESKEWED_IMAGE:m=this.getDrawingLayer(Hs.DDN_LAYER_ID),(null==e?void 0:e.isNormalizeVerifyOpen)?t.crossVerificationStatus===dt.CVS_PASSED?g(m,t.sourceLocation.points,l,h,c,d,u,f,[]):g(m,t.sourceLocation.points,l,h,c,d,u,f,[],Ys.STYLE_BLUE_STROKE_TRANSPARENT):g(m,t.sourceLocation.points,l,h,c,d,u,f,[]);break;case nt.CRIT_PARSED_RESULT:case nt.CRIT_ENHANCED_IMAGE:break;default:throw new Error("Illegal item type.")}}},Gn.set(this,!1),this.eventHandler=new cn,this.eventHandler.on("content:updated",()=>{gi(this,Mn,"f")&&clearTimeout(gi(this,Mn,"f")),mi(this,Mn,setTimeout(()=>{if(this.disposed)return;let t;this._updateVideoContainer();try{t=this.getContentDimensions()}catch(t){if("Invalid content dimensions."===(t.message||t))return;throw t}this.updateDrawingLayers(t),this.updateConvertedRegion(t)},0))}),this.eventHandler.on("videoEl:resized",()=>{gi(this,Ln,"f")&&clearTimeout(gi(this,Ln,"f")),mi(this,Ln,setTimeout(()=>{this.disposed||this._updateVideoContainer()},0))})}_setUIElement(t){this.UIElement=t,this._unbindUI(),this._bindUI()}async setUIElement(t){let e;if("string"==typeof t){let i=await gn(t);e=document.createElement("div"),Object.assign(e.style,{width:"100%",height:"100%"}),e.attachShadow({mode:"open"}).appendChild(i.cloneNode(!0))}else e=t;this._setUIElement(e)}getUIElement(){return this.UIElement}_bindUI(){var t,e;if(!this.UIElement)throw new Error("Need to set 'UIElement'.");if(this._innerComponent)return;let i=this.UIElement;i=i.shadowRoot||i;let n=(null===(t=i.classList)||void 0===t?void 0:t.contains(this.containerClassName))?i:i.querySelector(`.${this.containerClassName}`);if(!n)throw Error(`Can not find the element with class '${this.containerClassName}'.`);if(this._innerComponent=document.createElement("dce-component"),n.appendChild(this._innerComponent),gi(this,Dn,"m",Wn).call(this));else{const t=document.createElement("video");Object.assign(t.style,{position:"absolute",left:"0",top:"0",width:"100%",height:"100%",objectFit:this.getVideoFit()}),t.setAttribute("autoplay","true"),t.setAttribute("playsinline","true"),t.setAttribute("crossOrigin","anonymous"),t.setAttribute("muted","true"),["iPhone","iPad","Mac"].includes(ui.OS)&&t.setAttribute("poster","data:image/gif;base64,R0lGODlhAQABAIEAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAgEAAEEBAA7"),mi(this,Pn,t);const e=document.createElement("div");e.append(t),e.style.overflow="hidden",this._videoContainer=e,this._innerComponent.setElement("content",e)}if(this._selRsl=i.querySelector(".dce-sel-resolution"),this._selMinLtr=i.querySelector(".dlr-sel-minletter"),this._divScanArea=i.querySelector(".dce-scanarea"),this._divScanLight=i.querySelector(".dce-scanlight"),this._bgLoading=i.querySelector(".dce-bg-loading"),this._bgCamera=i.querySelector(".dce-bg-camera"),this._selCam=i.querySelector(".dce-sel-camera"),this._optGotRsl=i.querySelector(".dce-opt-gotResolution"),this._btnClose=i.querySelector(".dce-btn-close"),this._optGotMinLtr=i.querySelector(".dlr-opt-gotMinLtr"),this._poweredBy=i.querySelector(".dce-msg-poweredby"),this._selRsl&&(this._hideDefaultSelection||gi(this,Dn,"m",Wn).call(this)||this._selRsl.options.length||(this._selRsl.innerHTML=['<option class="dce-opt-gotResolution" value="got"></option>','<option data-width="1920" data-height="1080">ask 1920x1080</option>','<option data-width="1280" data-height="720">ask 1280x720</option>','<option data-width="640" data-height="480">ask 640x480</option>'].join(""),this._optGotRsl=this._selRsl.options[0])),this._selMinLtr&&(this._hideDefaultSelection||gi(this,Dn,"m",Wn).call(this)||this._selMinLtr.options.length||(this._selMinLtr.innerHTML=['<option class="dlr-opt-gotMinLtr" value="got"></option>','<option value="0" selected>any letter</option>','<option value="3">3+ letters</option>','<option value="5">5+ letters</option>','<option value="8">8+ letters</option>','<option value="12">12+ letters</option>','<option value="17">17+ letters</option>','<option value="30">30+ letters</option>','<option value="50">50+ letters</option>','<option value="80">80+ letters</option>','<option value="120">120+ letters</option>'].join(""),this._optGotMinLtr=this._selMinLtr.options[0])),this.isScanLaserVisible()||gi(this,Dn,"m",qn).call(this),gi(this,Dn,"m",Wn).call(this)&&(this._innerComponent&&(this._innerComponent.addEventListener("click",this._clickIptSingleFrameMode),this._innerComponent.setAttribute("title","Take a photo")),this._bgCamera&&(this._bgCamera.style.display="block")),gi(this,Dn,"m",Wn).call(this)||this._hideDefaultSelection?(this._selCam&&(this._selCam.style.display="none"),this._selRsl&&(this._selRsl.style.display="none"),this._selMinLtr&&(this._selMinLtr.style.display="none")):(this._selCam&&(this._selCam.style.display="block"),this._selRsl&&(this._selRsl.style.display="block"),this._selMinLtr&&(this._selMinLtr.style.display="block"),this._stopLoading()),window.ResizeObserver){this._resizeObserver||(this._resizeObserver=new ResizeObserver(t=>{var e;Ks._onLog&&Ks._onLog("resize observer triggered.");for(let i of t)i.target===(null===(e=this._innerComponent)||void 0===e?void 0:e.getWrapper())&&this._videoResizeListener()}));const t=null===(e=this._innerComponent)||void 0===e?void 0:e.getWrapper();t&&this._resizeObserver.observe(t)}gi(this,jn,"f").width=document.documentElement.clientWidth,gi(this,jn,"f").height=document.documentElement.clientHeight,window.addEventListener("resize",this._windowResizeListener)}_unbindUI(){var t,e,i,n;gi(this,Dn,"m",Wn).call(this)?(this._innerComponent&&(this._innerComponent.removeEventListener("click",this._clickIptSingleFrameMode),this._innerComponent.removeAttribute("title")),this._bgCamera&&(this._bgCamera.style.display="none")):this._stopLoading(),gi(this,Dn,"m",qn).call(this),null===(t=this._drawingLayerManager)||void 0===t||t.clearDrawingLayers(),null===(e=this._innerComponent)||void 0===e||e.removeElement("drawing-layer"),this._layerBaseCvs=null,this._drawingLayerOfMask=null,this._drawingLayerOfTip=null,null===(i=this._innerComponent)||void 0===i||i.remove(),this._innerComponent=null,mi(this,Pn,null),null===(n=this._videoContainer)||void 0===n||n.remove(),this._videoContainer=null,this._selCam=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this._divScanArea=null,this._divScanLight=null,this._singleFrameInputContainer&&(this._singleFrameInputContainer.remove(),this._singleFrameInputContainer=null),window.ResizeObserver&&this._resizeObserver&&this._resizeObserver.disconnect(),window.removeEventListener("resize",this._windowResizeListener)}_startLoading(){this._bgLoading&&(this._bgLoading.style.display="",this._bgLoading.style.animationPlayState="")}_stopLoading(){this._bgLoading&&(this._bgLoading.style.display="none",this._bgLoading.style.animationPlayState="paused")}_renderCamerasInfo(t,e){if(this._selCam){let i;this._selCam.textContent="";for(let n of e){const e=document.createElement("option");e.value=n.deviceId,e.innerText=n.label,this._selCam.append(e),n.deviceId&&t&&t.deviceId==n.deviceId&&(i=e)}this._selCam.value=i?i.value:""}let i=this.UIElement;if(i=i.shadowRoot||i,i.querySelector(".dce-macro-use-mobile-native-like-ui")){let t=i.querySelector(".dce-mn-cameras");if(t){t.textContent="";for(let i of e){const e=document.createElement("div");e.classList.add("dce-mn-camera-option"),e.setAttribute("data-davice-id",i.deviceId),e.textContent=i.label,t.append(e)}}}}_renderResolutionInfo(t){this._optGotRsl&&(this._optGotRsl.setAttribute("data-width",t.width),this._optGotRsl.setAttribute("data-height",t.height),this._optGotRsl.innerText="got "+t.width+"x"+t.height,this._selRsl&&this._optGotRsl.parentNode==this._selRsl&&(this._selRsl.value="got"));{let e=this.UIElement;e=(null==e?void 0:e.shadowRoot)||e;let i=null==e?void 0:e.querySelector(".dce-mn-resolution-box");if(i){let e="";if(t&&t.width&&t.height){let i=Math.max(t.width,t.height),n=Math.min(t.width,t.height);e=n<=1080?n+"P":i<3e3?"2K":Math.round(i/1e3)+"K"}i.textContent=e}}}getVideoElement(){return gi(this,Pn,"f")}isVideoLoaded(){return this.cameraEnhancer.cameraManager.isVideoLoaded()}setVideoFit(t){if(t=t.toLowerCase(),!["contain","cover"].includes(t))throw new Error(`Unsupported value '${t}'.`);if(this.videoFit=t,!gi(this,Pn,"f"))return;if(gi(this,Pn,"f").style.objectFit=t,gi(this,Dn,"m",Wn).call(this))return;let e;this._updateVideoContainer();try{e=this.getContentDimensions()}catch(t){if("Invalid content dimensions."===(t.message||t))return;throw t}this.updateConvertedRegion(e);const i=this.getConvertedRegion();gi(this,Dn,"m",Zn).call(this,e,i),gi(this,Dn,"m",Yn).call(this,e,i),this.updateDrawingLayers(e)}getVideoFit(){return this.videoFit}getContentDimensions(){var t,e,i,n;let s,r,a;if(gi(this,Dn,"m",Wn).call(this)?(s=null===(i=this._cvsSingleFrameMode)||void 0===i?void 0:i.width,r=null===(n=this._cvsSingleFrameMode)||void 0===n?void 0:n.height,a="contain"):(s=null===(t=gi(this,Pn,"f"))||void 0===t?void 0:t.videoWidth,r=null===(e=gi(this,Pn,"f"))||void 0===e?void 0:e.videoHeight,a=this.getVideoFit()),!s||!r)throw new Error("Invalid content dimensions.");return{width:s,height:r,objectFit:a}}updateConvertedRegion(t){C(this.scanRegion)?this.scanRegion.isMeasuredInPercentage?0===this.scanRegion.top&&100===this.scanRegion.bottom&&0===this.scanRegion.left&&100===this.scanRegion.right&&(this.scanRegion=null):0===this.scanRegion.top&&this.scanRegion.bottom===t.height&&0===this.scanRegion.left&&this.scanRegion.right===t.width&&(this.scanRegion=null):x(this.scanRegion)&&(this.scanRegion.isMeasuredInPercentage?0===this.scanRegion.x&&0===this.scanRegion.y&&100===this.scanRegion.width&&100===this.scanRegion.height&&(this.scanRegion=null):0===this.scanRegion.x&&0===this.scanRegion.y&&this.scanRegion.width===t.width&&this.scanRegion.height===t.height&&(this.scanRegion=null));const e=on.convert(this.scanRegion,t.width,t.height,this);mi(this,kn,e),gi(this,Fn,"f")&&clearTimeout(gi(this,Fn,"f")),mi(this,Fn,setTimeout(()=>{let t;try{t=this.getContentDimensions()}catch(t){if("Invalid content dimensions."===(t.message||t))return;throw t}gi(this,Dn,"m",Yn).call(this,t,e),gi(this,Dn,"m",Zn).call(this,t,e)},0))}getConvertedRegion(){return gi(this,kn,"f")}setScanRegion(t){if(null!=t&&!C(t)&&!x(t))throw TypeError("Invalid 'region'.");let e;this.scanRegion=t?JSON.parse(JSON.stringify(t)):null;try{e=this.getContentDimensions()}catch(t){if("Invalid content dimensions."===(t.message||t))return;throw t}this.updateConvertedRegion(e)}getScanRegion(){return JSON.parse(JSON.stringify(this.scanRegion))}getVisibleRegionOfVideo(t){if("disabled"!==this.cameraEnhancer.singleFrameMode)return null;if(!this.isVideoLoaded())throw new Error("The video is not loaded.");const e=gi(this,Pn,"f").videoWidth,i=gi(this,Pn,"f").videoHeight,n=this.getVideoFit(),{width:s,height:r}=this._innerComponent.getBoundingClientRect();if(s<=0||r<=0)return null;let a;const o={x:0,y:0,width:e,height:i,isMeasuredInPercentage:!1};if("cover"===n&&(s/r<e/i?(a=r/i,o.x=Math.floor((e-s/a)/2),o.y=0,o.width=Math.ceil(s/a),o.height=i):(a=s/e,o.x=0,o.y=Math.floor((i-r/a)/2),o.width=e,o.height=Math.ceil(r/a))),null==t?void 0:t.inPixels)return o;const l=o;return l.x=Math.ceil(l.x/i*100),l.y=Math.ceil(l.y/e*100),l.width=Math.floor(l.width/e*100),l.height=Math.floor(l.height/i*100),l.isMeasuredInPercentage=!0,o}setScanRegionMask(t,e,i,n){this._drawingLayerOfMask||(this._drawingLayerOfMask=this._createDrawingLayer(-2),this.isScanRegionMaskVisible()||gi(this,Dn,"m",zn).call(this)),this.clearScanRegionMask(),this._maskBackRectStyleId||(this._maskBackRectStyleId=Ys.createDrawingStyle({paintMode:"fill",fillStyle:this.regionMaskFillStyle,lineWidth:0})),this._maskCenterRectStyleId||(this._maskCenterRectStyleId=Ys.createDrawingStyle({paintMode:"stroke",strokeStyle:this.regionMaskStrokeStyle,lineWidth:this.regionMaskLineWidth}));const s=this._drawingLayerOfMask.width,r=this._drawingLayerOfMask.height,a=new Wi({x:0,y:0,width:s,height:r},this._maskBackRectStyleId),o=new Wi({x:-s/2,y:-r/2+e,width:t,height:n}),l=new Wi({x:-s/2+t+i,y:-r/2+e,width:s-t-i<0?0:s-t-i,height:n}),h=new Wi({x:-s/2,y:-r/2,width:s,height:e}),c=new Wi({x:-s/2,y:-r/2+e+n,width:s,height:r-e-n<0?0:r-e-n});o.set("strokeWidth",0),l.set("strokeWidth",0),h.set("strokeWidth",0),c.set("strokeWidth",0);const d=new nn([o,l,h,c])._getFabricObject();a.set("clipPath",d);const u=new Wi({x:t,y:e,width:i-this.regionMaskLineWidth,height:n-this.regionMaskLineWidth},this._maskCenterRectStyleId);this._drawingLayerOfMask.addDrawingItems([a,u])}clearScanRegionMask(){this._drawingLayerOfMask&&this._drawingLayerOfMask.clearDrawingItems()}deleteScanRegionMask(){this._drawingLayerOfMask&&this.deleteDrawingLayer(this._drawingLayerOfMask.getId())}_setScanRegionMaskVisible(t){mi(this,Nn,t),t?gi(this,Dn,"m",Hn).call(this):gi(this,Dn,"m",zn).call(this)}setScanRegionMaskVisible(t){this._setScanRegionMaskVisible(t),this._userSetMaskVisible=t}isScanRegionMaskVisible(){return gi(this,Nn,"f")}setScanRegionMaskStyle(t){if(!t)return;let e;t.fillStyle&&(this.regionMaskFillStyle=t.fillStyle),t.strokeStyle&&(this.regionMaskStrokeStyle=t.strokeStyle),t.lineWidth&&(this.regionMaskLineWidth=t.lineWidth),this._maskBackRectStyleId&&Ys.updateDrawingStyle(this._maskBackRectStyleId,{fillStyle:this.regionMaskFillStyle}),this._maskCenterRectStyleId&&Ys.updateDrawingStyle(this._maskCenterRectStyleId,{strokeStyle:this.regionMaskStrokeStyle,lineWidth:this.regionMaskLineWidth});try{e=this.getContentDimensions()}catch(t){if("Invalid content dimensions."===(t.message||t))return;throw t}const i=this.getConvertedRegion();gi(this,Dn,"m",Yn).call(this,e,i),gi(this,Dn,"m",Zn).call(this,e,i)}getScanRegionMaskStyle(){return{fillStyle:this.regionMaskFillStyle,strokeStyle:this.regionMaskStrokeStyle,lineWidth:this.regionMaskLineWidth}}_setScanLaserVisible(t){mi(this,Bn,t),t?gi(this,Dn,"m",Xn).call(this):gi(this,Dn,"m",qn).call(this)}setScanLaserVisible(t){this._setScanLaserVisible(t),this._userSetLaserVisible=t}isScanLaserVisible(){return gi(this,Bn,"f")}_updateVideoContainer(){if(!gi(this,Pn,"f"))return;if(gi(this,Dn,"m",Wn).call(this))return;let t=1;const e=gi(this,Pn,"f").style.transform.match(/scale\((.+)\)/);e&&(t=parseFloat(e[1]));const i=this._videoContainer;if("contain"===this.videoFit&&t>1){const t=gi(this,Pn,"f").videoWidth,e=gi(this,Pn,"f").videoHeight,{width:n,height:s}=this._innerComponent.getBoundingClientRect(),r=t/e;if(n/s<r){let t=n/r;i.style.left="0",i.style.top=(s-t)/2/s*100+"%",i.style.width="100%",i.style.height=t/s*100+"%"}else{let t=s*r;i.style.left=(n-t)/2/n*100+"%",i.style.top="0",i.style.width=t/n*100+"%",i.style.height="100%"}}else i.style.left="0",i.style.top="0",i.style.width="100%",i.style.height="100%"}setPowerByMessageVisible(t){this._poweredBy&&(this._poweredBy.style.display=t?"":"none",this._poweredByVisible=t);let e=this.getUIElement();e=e.shadowRoot||e;const i=e.querySelector(".dce-mn-msg-poweredby");i&&(i.style.display=t?"":"none",this._poweredByVisible=t)}isPowerByMessageVisible(){return this._poweredByVisible}updateLayers(){let t;this._updateVideoContainer();try{t=this.getContentDimensions()}catch(t){if("Invalid content dimensions."===(t.message||t))return;throw t}const e=this.getConvertedRegion();gi(this,Dn,"m",Zn).call(this,t,e),this.updateDrawingLayers(t),gi(this,Dn,"m",Yn).call(this,t,e)}clearAllInnerDrawingItems(){gi(this,Un,"f").forEach(t=>t.remove()),gi(this,Un,"f").length=0}dispose(){this._unbindUI(),mi(this,Gn,!0)}}Mn=new WeakMap,Ln=new WeakMap,Fn=new WeakMap,Pn=new WeakMap,kn=new WeakMap,Nn=new WeakMap,Bn=new WeakMap,jn=new WeakMap,Vn=new WeakMap,Un=new WeakMap,Gn=new WeakMap,Dn=new WeakSet,Wn=function(){return"disabled"!==this._singleFrameMode},Yn=function(t,e){!e||0===e.x&&0===e.y&&e.width===t.width&&e.height===t.height?this.clearScanRegionMask():this.setScanRegionMask(e.x,e.y,e.width,e.height)},Hn=function(){this._drawingLayerOfMask&&this._drawingLayerOfMask.setVisible(!0)},zn=function(){this._drawingLayerOfMask&&this._drawingLayerOfMask.setVisible(!1)},Xn=function(){this._divScanLight&&"none"==this._divScanLight.style.display&&(this._divScanLight.style.display="block")},qn=function(){this._divScanLight&&(this._divScanLight.style.display="none")},Zn=function(t,e){if(!this._divScanArea)return;if(!this._innerComponent.getElement("content"))return;const{width:i,height:n,objectFit:s}=t;e||(e={x:0,y:0,width:i,height:n});const{width:r,height:a}=this._innerComponent.getBoundingClientRect();if(r<=0||a<=0)return;const o=r/a,l=i/n;let h,c,d,u,f=1;if("contain"===s)o<l?(f=r/i,h=0,c=(a-n*f)/2):(f=a/n,h=(r-i*f)/2,c=0),h+=e.x*f,c+=e.y*f,d=e.width*f,u=e.height*f;else if("cover"===s)if(o<l){f=a/n,h=e.x*f-(i*f-r)/2,h=Math.max(h,0),h=Math.min(h,r),c=e.y*f;let t=(e.x+e.width)*f-(i*f-r)/2;t=Math.max(t,0),t=Math.min(t,r),d=t-h,u=e.height*f}else{f=r/i,h=e.x*f,c=e.y*f-(n*f-a)/2,c=Math.max(c,0),c=Math.min(c,a);let t=(e.y+e.height)*f-(n*f-a)/2;t=Math.max(t,0),t=Math.min(t,a),d=e.width*f,u=t-c}else h=0,c=0,d=0,u=0;this.scanRegion?(this._divScanArea.style.left=h+this.regionMaskLineWidth*f+"px",this._divScanArea.style.top=c+this.regionMaskLineWidth*f+"px",this._divScanArea.style.width=d-this.regionMaskLineWidth*f*2+"px",this._divScanArea.style.height=u-this.regionMaskLineWidth*f*2+"px"):(this._divScanArea.style.left=h+.005*d+"px",this._divScanArea.style.top=c+.005*d+"px",this._divScanArea.style.width=d-.01*d+"px",this._divScanArea.style.height=u-.01*d+"px")},Ks._defaultUIElementURL="@engineResourcePath/dce.ui.xml";class Js{static get version(){return"4.3.3-dev-20251029130621"}static get webGLSupported(){return void 0===Js._webGLSupported&&(Js._webGLSupported=!!document.createElement("canvas").getContext("webgl")),Js._webGLSupported}get disposed(){return gi(this,es,"f")}constructor(){Kn.set(this,xi.RGBA),Jn.set(this,null),$n.set(this,null),Qn.set(this,null),this.useWebGLByDefault=!0,this._reusedCvs=null,this._reusedWebGLCvs=null,ts.set(this,null),es.set(this,!1)}sourceIsReady(t){return t instanceof HTMLVideoElement?t.src?0!==t.readyState:4===t.readyState:!(t instanceof HTMLImageElement)||t.complete}drawImage(t,e,i,n,s,r){if(this.disposed)throw Error("The 'ImageDataGetter' instance has been disposed.");if(!i||!n)throw new Error("Invalid 'sourceWidth' or 'sourceHeight'.");if((null==r?void 0:r.bUseWebGL)&&!Js.webGLSupported)throw new Error("Your browser or machine may not support WebGL.");if(!this.sourceIsReady(e))throw new Error("The source is not loaded.");let a;Js._onLog&&(a=Date.now(),Js._onLog("drawImage(), START: "+a));let o=0,l=0,h=i,c=n,d=0,u=0,f=i,g=n;s&&(s.sx&&(o=Math.round(s.sx)),s.sy&&(l=Math.round(s.sy)),s.sWidth&&(h=Math.round(s.sWidth)),s.sHeight&&(c=Math.round(s.sHeight)),s.dx&&(d=Math.round(s.dx)),s.dy&&(u=Math.round(s.dy)),s.dWidth&&(f=Math.round(s.dWidth)),s.dHeight&&(g=Math.round(s.dHeight)));let m,p=xi.RGBA;if((null==r?void 0:r.pixelFormat)&&(p=r.pixelFormat),(null==r?void 0:r.bufferContainer)&&(m=r.bufferContainer,m.length<4*f*g))throw new Error("Unexpected size of the 'bufferContainer'.");const _=t;if(!Js.webGLSupported||!(this.useWebGLByDefault&&null==(null==r?void 0:r.bUseWebGL)||(null==r?void 0:r.bUseWebGL))){Js._onLog&&Js._onLog("drawImage() in context2d."),_.ctx2d||(_.ctx2d=_.getContext("2d",{willReadFrequently:!0}));const t=_.ctx2d;if(!t)throw new Error("Unable to get 'CanvasRenderingContext2D' from canvas.");return(_.width<d+f||_.height<u+g)&&(_.width=d+f,_.height=u+g),t.drawImage(e,o,l,h,c,d,u,f,g),Js._onLog&&Js._onLog("drawImage() in context2d end. Costs: "+(Date.now()-a)),{context:t,pixelFormat:xi.RGBA,bUseWebGL:!1}}Js._onLog&&Js._onLog("drawImage() in WebGL.");try{(_.width<d+f||_.height<u+g)&&(_.width=d+f,_.height=u+g,_.ctxWebGL&&_.ctxWebGL.viewport(0,0,d+f,u+g));const t=_.ctxWebGL||_.getContext("webgl",{antialias:!1})||_.getContext("experimental-webgl",{antialias:!1});if(!t){Js._onLog&&Js._onLog("Browser or machine may not support WebGL, or the canvas has already been set to a different context mode.");const t=new Error("Unable to get 'WebGLRenderingContext'. Your browser or machine may not support WebGL, or the canvas has already been set to a different context mode.");throw t.name="WebGLError",t}if(!_.ctxWebGL||p!==gi(this,Kn,"f")){_.ctxWebGL=t;const e=t=>{const e=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,e),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),t.STATIC_DRAW);const i=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,i),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),t.STATIC_DRAW),{positions:e,texCoords:i}},i=t=>{const e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e},n=(t,e)=>{const i=t.createProgram();if(e.forEach(e=>t.attachShader(i,e)),t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS)){const e=new Error(`An error occured linking the program: ${t.getProgramInfoLog(i)}.`);throw e.name="WebGLError",e}return t.useProgram(i),i},s=(t,e,i)=>{const n=t.createShader(e);if(t.shaderSource(n,i),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){const e=new Error(`An error occured compiling the shader: ${t.getShaderInfoLog(n)}.`);throw e.name="WebGLError",e}return n},r="\n            attribute vec2 a_position;\n            attribute vec2 a_texCoord;\n\n            uniform mat3 u_matrix;\n            uniform mat3 u_textureMatrix;\n\n            varying vec2 v_texCoord;\n            void main(void) {\n              gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1.0);\n              v_texCoord = vec4((u_textureMatrix * vec3(a_texCoord, 1)).xy, 0, 1.0).xy;\n            }\n          ";let a="rgb";["rgba","rbga","grba","gbra","brga","bgra"].includes(p)&&(a=p.slice(0,3));const o=`\n            precision mediump float;\n            varying vec2 v_texCoord;\n            uniform sampler2D u_image;\n            uniform float uColorFactor;\n\n            void main() {\n              vec4 sample = texture2D(u_image, v_texCoord);\n              float grey = 0.3 * sample.r + 0.59 * sample.g + 0.11 * sample.b;\n              gl_FragColor = vec4(sample.${a} * (1.0 - uColorFactor) + (grey * uColorFactor), sample.a);\n            }\n          `,l=n(t,[s(t,t.VERTEX_SHADER,r),s(t,t.FRAGMENT_SHADER,o)]);mi(this,$n,{program:l,attribLocations:{vertexPosition:t.getAttribLocation(l,"a_position"),texPosition:t.getAttribLocation(l,"a_texCoord")},uniformLocations:{uSampler:t.getUniformLocation(l,"u_image"),uColorFactor:t.getUniformLocation(l,"uColorFactor"),uMatrix:t.getUniformLocation(l,"u_matrix"),uTextureMatrix:t.getUniformLocation(l,"u_textureMatrix")}}),mi(this,Qn,e(t)),mi(this,Jn,i(t)),mi(this,Kn,p)}const s=(t,e,i)=>{t.bindBuffer(t.ARRAY_BUFFER,e),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,2,t.FLOAT,!1,0,0)},v=(t,e,i)=>{const n=t.RGBA,s=t.RGBA,r=t.UNSIGNED_BYTE;t.bindTexture(t.TEXTURE_2D,e),t.texImage2D(t.TEXTURE_2D,0,n,s,r,i)},y=(t,e,a,m)=>{t.clearColor(0,0,0,1),t.clearDepth(1),t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),s(t,a.positions,e.attribLocations.vertexPosition),s(t,a.texCoords,e.attribLocations.texPosition),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,m),t.uniform1i(e.uniformLocations.uSampler,0),t.uniform1f(e.uniformLocations.uColorFactor,[xi.GREY,xi.GREY32].includes(p)?1:0);let _,v,y=mn.translate(mn.identity(),-1,-1);y=mn.scale(y,2,2),y=mn.scale(y,1/t.canvas.width,1/t.canvas.height),_=mn.translate(y,d,u),_=mn.scale(_,f,g),t.uniformMatrix3fv(e.uniformLocations.uMatrix,!1,_),r.isEnableMirroring?(v=mn.translate(mn.identity(),1,0),v=mn.scale(v,-1,1),v=mn.translate(v,o/i,l/n),v=mn.scale(v,h/i,c/n)):(v=mn.translate(mn.identity(),o/i,l/n),v=mn.scale(v,h/i,c/n)),t.uniformMatrix3fv(e.uniformLocations.uTextureMatrix,!1,v),t.drawArrays(t.TRIANGLES,0,6)};v(t,gi(this,Jn,"f"),e),y(t,gi(this,$n,"f"),gi(this,Qn,"f"),gi(this,Jn,"f"));const w=m||new Uint8Array(4*f*g);if(t.readPixels(d,u,f,g,t.RGBA,t.UNSIGNED_BYTE,w),255!==w[3]){Js._onLog&&Js._onLog("Incorrect WebGL drawing .");const t=new Error("WebGL error: incorrect drawing.");throw t.name="WebGLError",t}return Js._onLog&&Js._onLog("drawImage() in WebGL end. Costs: "+(Date.now()-a)),{context:t,pixelFormat:p===xi.GREY?xi.GREY32:p,bUseWebGL:!0}}catch(a){if(this.forceLoseContext(),null==(null==r?void 0:r.bUseWebGL))return Js._onLog&&Js._onLog("'drawImage()' in WebGL failed, try again in context2d."),this.useWebGLByDefault=!1,this.drawImage(t,e,i,n,s,Object.assign({},r,{bUseWebGL:!1}));throw a.name="WebGLError",a}}readCvsData(t,e,i){if(!(t instanceof CanvasRenderingContext2D||t instanceof WebGLRenderingContext))throw new Error("Invalid 'context'.");let n,s=0,r=0,a=t.canvas.width,o=t.canvas.height;if(e&&(e.x&&(s=e.x),e.y&&(r=e.y),e.width&&(a=e.width),e.height&&(o=e.height)),(null==i?void 0:i.length)<4*a*o)throw new Error("Unexpected size of the 'bufferContainer'.");if(t instanceof WebGLRenderingContext){const e=t;i?(e.readPixels(s,r,a,o,e.RGBA,e.UNSIGNED_BYTE,i),n=new Uint8Array(i.buffer,0,4*a*o)):(n=new Uint8Array(4*a*o),e.readPixels(s,r,a,o,e.RGBA,e.UNSIGNED_BYTE,n))}else if(t instanceof CanvasRenderingContext2D){let e;e=t.getImageData(s,r,a,o),n=new Uint8Array(e.data.buffer),null==i||i.set(n)}return n}transformPixelFormat(t,e,i,n){let s,r;if(Js._onLog&&(s=Date.now(),Js._onLog("transformPixelFormat(), START: "+s)),e===i)return Js._onLog&&Js._onLog("transformPixelFormat() end. Costs: "+(Date.now()-s)),n?new Uint8Array(t):t;const a=[xi.RGBA,xi.RBGA,xi.GRBA,xi.GBRA,xi.BRGA,xi.BGRA];if(a.includes(e))if(i===xi.GREY){r=new Uint8Array(t.length/4);for(let e=0;e<t.length;e+=4){const i=.3*t[e]+.59*t[e+1]+.11*t[e+2];r[e/4]=i}}else if(i===xi.GREY32){r=n?new Uint8Array(t):t;for(let e=0;e<t.length;e+=4){const i=.3*t[e]+.59*t[e+1]+.11*t[e+2];r[e]=i,r[e+1]=i,r[e+2]=i}}else{if(!a.includes(i))throw new Error("Unable to transform.");if(n){r=new Uint8Array(t);const n=e.indexOf("r"),s=e.indexOf("g"),a=e.indexOf("b"),o=i.indexOf("r"),l=i.indexOf("g"),h=i.indexOf("b");for(let e=0;e<t.length;e+=4)r[e+o]=t[e+n],r[e+l]=t[e+s],r[e+h]=t[e+a]}else{r=t;const n=e.indexOf("r"),s=e.indexOf("g"),a=e.indexOf("b"),o=i.indexOf("r"),l=i.indexOf("g"),h=i.indexOf("b");for(let e=0;e<t.length;e+=4){let i=[t[e],t[e+1],t[e+2]];r[e+o]=i[n],r[e+l]=i[s],r[e+h]=i[a]}}}else if(e===xi.GREY){if(i!==xi.GREY32)throw new Error("Unable to transform.");r=new Uint8Array(4*t.length);for(let e=0;e<t.length;e++)r[4*e]=t[e],r[4*e+1]=t[e],r[4*e+2]=t[e],r[4*e+3]=255}else{if(e!==xi.GREY32)throw new Error("Unable to transform.");if(i!==xi.GREY)throw new Error("Unable to transform.");r=new Uint8Array(t.length/4);for(let e=0;e<t.length;e+=4)r[e/4]=t[e]}return Js._onLog&&Js._onLog("transformPixelFormat() end. Costs: "+(Date.now()-s)),r}getImageData(t,e,i){var n,s,r,a,o;if(this.disposed)throw Error("The 'ImageDataGetter' instance has been disposed.");if(!this.sourceIsReady(t))throw new Error("The source is not loaded.");let l,h;if(t instanceof HTMLImageElement)l=t.naturalWidth,h=t.naturalHeight;else if(t instanceof HTMLCanvasElement)l=t.width,h=t.height;else if(t instanceof HTMLVideoElement)l=t.videoWidth,h=t.videoHeight;else{if(!(t instanceof ImageBitmap))throw Error("The type of 'source' is not supported.");l=t.width,h=t.height}let c,d=Js.webGLSupported&&this.useWebGLByDefault;if(e.sx<0||e.sy<0||e.sx+e.sWidth>l||e.sy+e.sHeight>h)throw new Error("Invalid position.");null===(n=Js._onLog)||void 0===n||n.call(Js,"getImageData(), START: "+(c=Date.now()));const u=Math.round(e.sx),f=Math.round(e.sy),g=Math.round(e.sWidth),m=Math.round(e.sHeight),p=Math.round(e.dWidth),_=Math.round(e.dHeight);let v,y=(null==i?void 0:i.pixelFormat)||xi.RGBA,w=null==i?void 0:i.bufferContainer;if(w&&(xi.GREY===y&&w.length<p*_||xi.RGBA===y&&w.length<p*_*4))throw new Error("Unexpected size of the 'bufferContainer'.");if(d){null===(s=Js._onLog)||void 0===s||s.call(Js,"getImageData() in WebGL.");let a,o=this._reusedWebGLCvs=this._reusedWebGLCvs||document.createElement("canvas");try{if(w)if(y===xi.GREY){if(v=new Uint8Array(4*p*_),a=this.drawImage(o,t,l,h,{sx:u,sy:f,sWidth:g,sHeight:m,dWidth:p,dHeight:_},{pixelFormat:y,bUseWebGL:!0,bufferContainer:v,isEnableMirroring:null==i?void 0:i.isEnableMirroring}),v=this.transformPixelFormat(v,a.pixelFormat,y),w){if(w.length<v.length)throw new Error("Unexpected size of the 'bufferContainer'.");w.set(v)}}else a=this.drawImage(o,t,l,h,{sx:u,sy:f,sWidth:g,sHeight:m,dWidth:p,dHeight:_},{pixelFormat:y,bUseWebGL:!0,bufferContainer:w,isEnableMirroring:null==i?void 0:i.isEnableMirroring}),v=new Uint8Array(w.buffer,0,4*p*_),v=this.transformPixelFormat(v,a.pixelFormat,y);else y===xi.GREY?((!gi(this,ts,"f")||gi(this,ts,"f").length<4*p*_)&&mi(this,ts,new Uint8Array(4*p*_)),v=new Uint8Array(gi(this,ts,"f").buffer,0,4*p*_)):v=new Uint8Array(4*p*_),a=this.drawImage(o,t,l,h,{sx:u,sy:f,sWidth:g,sHeight:m,dWidth:p,dHeight:_},{pixelFormat:y,bUseWebGL:!0,bufferContainer:v,isEnableMirroring:null==i?void 0:i.isEnableMirroring}),v=this.transformPixelFormat(v,a.pixelFormat,y)}catch(n){if("WebGLError"===n.name)return this.forceLoseContext(),console.warn("WebGLError: "+(null==n?void 0:n.message)),null===(r=Js._onLog)||void 0===r||r.call(Js,"getImageData() in WebGL failed, try again in context2d."),Js._webGLSupported=!1,this.getImageData(t,e,i);throw n}}else{null===(a=Js._onLog)||void 0===a||a.call(Js,"getImageData() in context2d.");let e=this._reusedCvs=this._reusedCvs||document.createElement("canvas");e.width!=p&&(e.width=p),e.height!=_&&(e.height=_);let n=e.getContext("2d",{willReadFrequently:!0});if(i.isEnableMirroring?(n.save(),n.translate(p,0),n.scale(-1,1),n.drawImage(t,u,f,g,m,0,0,p,_),n.restore()):n.drawImage(t,u,f,g,m,0,0,p,_),v=new Uint8Array(n.getImageData(0,0,p,_).data.buffer),xi.GREY===y){let t=w||new Uint8Array(p*_);for(let e=0;e<v.length;e+=4)t[e/4]=Math.round((v[e]+v[e+1]+v[e+2])/3);v=t}else null==w||w.set(v)}return null===(o=Js._onLog)||void 0===o||o.call(Js,"getImageData() end. Costs: "+(Date.now()-c)),{data:v,pixelFormat:y,width:p,height:_,bUseWebGL:d}}convertDataToCvs(t,e,i,n){if(!(t instanceof Uint8Array||t instanceof Uint8ClampedArray))throw new TypeError("Invalid 'data'.");if("number"!=typeof e||e<=0)throw new Error("Invalid 'width'.");if("number"!=typeof i||i<=0)throw new Error("Invalid 'height'.");const s=document.createElement("canvas");let r;if(s.width=e,s.height=i,n===xi.GREY){r=new Uint8ClampedArray(4*e*i);for(let e=0;e<r.length;e+=4)r[e]=t[e/4],r[e+1]=t[e/4],r[e+2]=t[e/4],r[e+3]=255}else r=new Uint8ClampedArray(t.buffer);const a=new ImageData(r,e,i);return s.getContext("2d").putImageData(a,0,0),s}forceLoseContext(){var t;if(!this._reusedWebGLCvs)return;const e=this._reusedWebGLCvs.ctxWebGL;e&&!e.isContextLost()&&(null===(t=e.getExtension("WEBGL_lose_context"))||void 0===t||t.loseContext()),mi(this,Jn,null),mi(this,$n,null),mi(this,Qn,null),this._reusedWebGLCvs=null}dispose(){this.forceLoseContext(),mi(this,es,!0)}}Kn=new WeakMap,Jn=new WeakMap,$n=new WeakMap,Qn=new WeakMap,ts=new WeakMap,es=new WeakMap;const $s=(t,e,i,n)=>{if(!i)return t;let s=e+Math.round((t-e)/i)*i;return n&&(s=Math.min(s,n)),s};class Qs{static get version(){return"4.3.3-dev-20251029130621"}static isStorageAvailable(t){let e;try{e=window[t];const i="__storage_test__";return e.setItem(i,i),e.removeItem(i),!0}catch(t){return t instanceof DOMException&&(22===t.code||1014===t.code||"QuotaExceededError"===t.name||"NS_ERROR_DOM_QUOTA_REACHED"===t.name)&&e&&0!==e.length}}static findBestRearCameraInIOS(t,e){if(!t||!t.length)return null;let i=!1;if((null==e?void 0:e.getMainCamera)&&(i=!0),i){const e=["후면 카메라","背面カメラ","後置鏡頭","后置相机","กล้องด้านหลัง","बैक कैमरा","الكاميرا الخلفية","מצלמה אחורית","камера на задней панели","задня камера","задна камера","артқы камера","πίσω κάμερα","zadní fotoaparát","zadná kamera","tylny aparat","takakamera","stražnja kamera","rückkamera","kamera på baksidan","kamera belakang","kamera bak","hátsó kamera","fotocamera (posteriore)","câmera traseira","câmara traseira","cámara trasera","càmera posterior","caméra arrière","cameră spate","camera mặt sau","camera aan achterzijde","bagsidekamera","back camera","arka kamera"],i=t.find(t=>e.includes(t.label.toLowerCase()));return null==i?void 0:i.deviceId}{const e=["후면","背面","後置","后置","านหลัง","बैक","خلفية","אחורית","задняя","задней","задна","πίσω","zadní","zadná","tylny","trasera","traseira","taka","stražnja","spate","sau","rück","posteriore","posterior","hátsó","belakang","baksidan","bakre","bak","bagside","back","aртқы","arrière","arka","achterzijde"],i=["트리플","三镜头","三鏡頭","トリプル","สาม","ट्रिपल","ثلاثية","משולשת","үштік","тройная","тройна","потроєна","τριπλή","üçlü","trójobiektywowy","trostruka","trojný","trojitá","trippelt","trippel","triplă","triple","tripla","tiga","kolmois","ba camera"],n=["듀얼 와이드","雙廣角","双广角","デュアル広角","คู่ด้านหลังมุมกว้าง","ड्युअल वाइड","مزدوجة عريضة","כפולה רחבה","қос кең бұрышты","здвоєна ширококутна","двойная широкоугольная","двойна широкоъгълна","διπλή ευρεία","çift geniş","laajakulmainen kaksois","kép rộng mặt sau","kettős, széles látószögű","grande angular dupla","ganda","dwuobiektywowy","dwikamera","dvostruka široka","duální širokoúhlý","duálna širokouhlá","dupla grande-angular","dublă","dubbel vidvinkel","dual-weitwinkel","dual wide","dual con gran angular","dual","double","doppia con grandangolo","doble","dobbelt vidvinkelkamera"],s=t.filter(t=>{const i=t.label.toLowerCase();return e.some(t=>i.includes(t))});if(!s.length)return null;const r=s.find(t=>{const e=t.label.toLowerCase();return i.some(t=>e.includes(t))});if(r)return r.deviceId;const a=s.find(t=>{const e=t.label.toLowerCase();return n.some(t=>e.includes(t))});return a?a.deviceId:s[0].deviceId}}static findBestRearCamera(t,e){if(!t||!t.length)return null;if(["iPhone","iPad","Mac"].includes(ui.OS))return Qs.findBestRearCameraInIOS(t,{getMainCamera:null==e?void 0:e.getMainCameraInIOS});const i=["후","背面","背置","後面","後置","后面","后置","านหลัง","หลัง","बैक","خلفية","אחורית","задняя","задня","задней","задна","πίσω","zadní","zadná","tylny","trás","trasera","traseira","taka","stražnja","spate","sau","rück","rear","posteriore","posterior","hátsó","darrere","belakang","baksidan","bakre","bak","bagside","back","aртқы","arrière","arka","achterzijde"];for(let e of t){const t=e.label.toLowerCase();if(t&&i.some(e=>t.includes(e))&&/\b0(\b)?/.test(t))return e.deviceId}return["Android","HarmonyOS"].includes(ui.OS)?t[t.length-1].deviceId:null}static findBestCamera(t,e,i){return t&&t.length?"environment"===e?this.findBestRearCamera(t,i):"user"===e?null:e?void 0:null:null}static async playVideo(t,e,i){if(!t)throw new Error("Invalid 'videoEl'.");if(!e)throw new Error("Invalid 'source'.");return new Promise(async(n,s)=>{let r;const a=()=>{t.removeEventListener("loadstart",c),t.removeEventListener("abort",d),t.removeEventListener("play",u),t.removeEventListener("error",f),t.removeEventListener("loadedmetadata",p)};let o=!1;const l=()=>{o=!0,r&&clearTimeout(r),a(),n(t)},h=t=>{r&&clearTimeout(r),a(),s(t)},c=()=>{t.addEventListener("abort",d,{once:!0})},d=()=>{const t=new Error("Video playing was interrupted.");t.name="AbortError",h(t)},u=()=>{l()},f=()=>{h(new Error(`Video error ${t.error.code}: ${t.error.message}.`))};let g;const m=new Promise(t=>{g=t}),p=()=>{g()};if(t.addEventListener("loadstart",c,{once:!0}),t.addEventListener("play",u,{once:!0}),t.addEventListener("error",f,{once:!0}),t.addEventListener("loadedmetadata",p,{once:!0}),"string"==typeof e||e instanceof String?t.src=e:t.srcObject=e,t.autoplay&&await new Promise(t=>{setTimeout(t,1e3)}),!o){i&&(r=setTimeout(()=>{a(),s(new Error("Failed to play video. Timeout."))},i)),await m;try{await t.play(),l()}catch(t){console.warn("1st play error: "+((null==t?void 0:t.message)||t))}if(!o)try{await t.play(),l()}catch(t){console.warn("2rd play error: "+((null==t?void 0:t.message)||t)),h(t)}}})}static async testCameraAccess(t){var e,i;if(!(null===(i=null===(e=null===window||void 0===window?void 0:window.navigator)||void 0===e?void 0:e.mediaDevices)||void 0===i?void 0:i.getUserMedia))return{ok:!1,errorName:"InsecureContext",errorMessage:"Insecure context."};let n;try{n=t?await navigator.mediaDevices.getUserMedia(t):await navigator.mediaDevices.getUserMedia({video:!0})}catch(t){return{ok:!1,errorName:t.name,errorMessage:t.message}}finally{null==n||n.getTracks().forEach(t=>{t.stop()})}return{ok:!0}}get state(){if(!gi(this,ms,"f"))return"closed";if("pending"===gi(this,ms,"f"))return"opening";if("fulfilled"===gi(this,ms,"f"))return"opened";throw new Error("Unknown state.")}set ifSaveLastUsedCamera(t){t?Qs.isStorageAvailable("localStorage")?mi(this,ds,!0):(mi(this,ds,!1),console.warn("Local storage is unavailable")):mi(this,ds,!1)}get ifSaveLastUsedCamera(){return gi(this,ds,"f")}get isVideoPlaying(){return!(!gi(this,ss,"f")||gi(this,ss,"f").paused)&&"opened"===this.state}set tapFocusEventBoundEl(t){var e,i,n;if(!(t instanceof HTMLElement)&&null!=t)throw new TypeError("Invalid 'element'.");null===(e=gi(this,Cs,"f"))||void 0===e||e.removeEventListener("click",gi(this,ws,"f")),null===(i=gi(this,Cs,"f"))||void 0===i||i.removeEventListener("touchend",gi(this,ws,"f")),null===(n=gi(this,Cs,"f"))||void 0===n||n.removeEventListener("touchmove",gi(this,ys,"f")),mi(this,Cs,t),t&&(window.TouchEvent&&["Android","HarmonyOS","iPhone","iPad"].includes(ui.OS)?(t.addEventListener("touchend",gi(this,ws,"f")),t.addEventListener("touchmove",gi(this,ys,"f"))):t.addEventListener("click",gi(this,ws,"f")))}get tapFocusEventBoundEl(){return gi(this,Cs,"f")}get disposed(){return gi(this,As,"f")}constructor(t){var e,i;ns.add(this),ss.set(this,null),rs.set(this,void 0),this._zoomPreSetting=null,as.set(this,()=>{"opened"===this.state&&gi(this,bs,"f").fire("resumed",null,{target:this,async:!1})}),os.set(this,()=>{gi(this,bs,"f").fire("paused",null,{target:this,async:!1})}),ls.set(this,void 0),hs.set(this,void 0),this.cameraOpenTimeout=15e3,this._arrCameras=[],cs.set(this,void 0),ds.set(this,!1),this.ifSkipCameraInspection=!1,this.selectIOSRearMainCameraAsDefault=!1,us.set(this,void 0),fs.set(this,!0),gs.set(this,void 0),ms.set(this,void 0),ps.set(this,!1),this._focusParameters={maxTimeout:400,minTimeout:300,kTimeout:void 0,oldDistance:null,fds:null,isDoingFocus:0,taskBackToContinous:null,curFocusTaskId:0,focusCancelableTime:1500,defaultFocusAreaSizeRatio:6,focusBackToContinousTime:5e3,tapFocusMinDistance:null,tapFocusMaxDistance:null,focusArea:null,tempBufferContainer:null,defaultTempBufferContainerLenRatio:1/4},_s.set(this,!1),this._focusSupported=!0,this.calculateCoordInVideo=(t,e)=>{let i,n;const s=window.getComputedStyle(gi(this,ss,"f")).objectFit,r=this.getResolution(),a=gi(this,ss,"f").getBoundingClientRect(),o=a.left,l=a.top,{width:h,height:c}=gi(this,ss,"f").getBoundingClientRect();if(h<=0||c<=0)throw new Error("Unable to get video dimensions. Video may not be rendered on the page.");const d=h/c,u=r.width/r.height;let f=1;if("contain"===s)u>d?(f=h/r.width,i=(t-o)/f,n=(e-l-(c-h/u)/2)/f):(f=c/r.height,n=(e-l)/f,i=(t-o-(h-c*u)/2)/f);else{if("cover"!==s)throw new Error("Unsupported object-fit.");u>d?(f=c/r.height,n=(e-l)/f,i=(t-o+(c*u-h)/2)/f):(f=h/r.width,i=(t-o)/f,n=(e-l+(h/u-c)/2)/f)}return{x:i,y:n}},vs.set(this,!1),ys.set(this,()=>{mi(this,vs,!0)}),ws.set(this,async t=>{var e;if(gi(this,vs,"f"))return void mi(this,vs,!1);if(!gi(this,_s,"f"))return;if(!this.isVideoPlaying)return;if(!gi(this,rs,"f"))return;if(!this._focusSupported)return;if(!this._focusParameters.fds&&(this._focusParameters.fds=null===(e=this.getCameraCapabilities())||void 0===e?void 0:e.focusDistance,!this._focusParameters.fds))return void(this._focusSupported=!1);if(null==this._focusParameters.kTimeout&&(this._focusParameters.kTimeout=(this._focusParameters.maxTimeout-this._focusParameters.minTimeout)/(1/this._focusParameters.fds.min-1/this._focusParameters.fds.max)),1==this._focusParameters.isDoingFocus)return;let i,n;if(this._focusParameters.taskBackToContinous&&(clearTimeout(this._focusParameters.taskBackToContinous),this._focusParameters.taskBackToContinous=null),t instanceof MouseEvent)i=t.clientX,n=t.clientY;else{if(!(t instanceof TouchEvent))throw new Error("Unknown event type.");if(!t.changedTouches.length)return;i=t.changedTouches[0].clientX,n=t.changedTouches[0].clientY}const s=this.getResolution(),r=2*Math.round(Math.min(s.width,s.height)/this._focusParameters.defaultFocusAreaSizeRatio/2);let a;try{a=this.calculateCoordInVideo(i,n)}catch(t){}if(a.x<0||a.x>s.width||a.y<0||a.y>s.height)return;const o={x:a.x+"px",y:a.y+"px"},l=r+"px",h=l;let c;Qs._onLog&&(c=Date.now());try{await gi(this,ns,"m",Us).call(this,o,l,h,this._focusParameters.tapFocusMinDistance,this._focusParameters.tapFocusMaxDistance)}catch(t){if(Qs._onLog)throw Qs._onLog(t),t}Qs._onLog&&Qs._onLog(`Tap focus costs: ${Date.now()-c} ms`),this._focusParameters.taskBackToContinous=setTimeout(()=>{var t;Qs._onLog&&Qs._onLog("Back to continuous focus."),null===(t=gi(this,rs,"f"))||void 0===t||t.applyConstraints({advanced:[{focusMode:"continuous"}]}).catch(()=>{})},this._focusParameters.focusBackToContinousTime),gi(this,bs,"f").fire("tapfocus",null,{target:this,async:!1})}),Cs.set(this,null),Es.set(this,1),Ss.set(this,{x:0,y:0}),this.updateVideoElWhenSoftwareScaled=()=>{if(!gi(this,ss,"f"))return;const t=gi(this,Es,"f");if(t<1)throw new RangeError("Invalid scale value.");if(1===t)gi(this,ss,"f").style.transform="";else{const e=window.getComputedStyle(gi(this,ss,"f")).objectFit,i=gi(this,ss,"f").videoWidth,n=gi(this,ss,"f").videoHeight,{width:s,height:r}=gi(this,ss,"f").getBoundingClientRect();if(s<=0||r<=0)throw new Error("Unable to get video dimensions. Video may not be rendered on the page.");const a=s/r,o=i/n;let l=1;"contain"===e?l=a<o?s/(i/t):r/(n/t):"cover"===e&&(l=o>a?r/(i/t):s/(n/t));const h=l*(1-1/t)*(i/2-gi(this,Ss,"f").x),c=l*(1-1/t)*(n/2-gi(this,Ss,"f").y);gi(this,ss,"f").style.transform=`translate(${h}px, ${c}px) scale(${t})`}},Ts.set(this,function(){if(!(this.data instanceof Uint8Array||this.data instanceof Uint8ClampedArray))throw new TypeError("Invalid data.");if("number"!=typeof this.width||this.width<=0)throw new Error("Invalid width.");if("number"!=typeof this.height||this.height<=0)throw new Error("Invalid height.");const t=document.createElement("canvas");let e;if(t.width=this.width,t.height=this.height,this.pixelFormat===xi.GREY){e=new Uint8ClampedArray(this.width*this.height*4);for(let t=0;t<e.length;t+=4)e[t]=this.data[t/4],e[t+1]=this.data[t/4],e[t+2]=this.data[t/4],e[t+3]=255}else e=new Uint8ClampedArray(this.data.buffer);const i=new ImageData(e,this.width,this.height);return t.getContext("2d").putImageData(i,0,0),t}),bs.set(this,void 0),Is.set(this,["before:open","opened","before:close","closed","before:camera:change","camera:changed","before:resolution:change","resolution:changed","played","paused","resumed","tapfocus"]),this.detectedResolutions=[{width:160,height:120},{width:320,height:240},{width:480,height:360},{width:640,height:480},{width:800,height:600},{width:960,height:720},{width:1280,height:720},{width:1920,height:1080},{width:2560,height:1440},{width:3840,height:2160}],xs.set(this,new Map),Rs.set(this,!1),Os.set(this,async()=>{var t,e;if("visible"===document.visibilityState){if(Qs._onLog&&Qs._onLog("document visible. video paused: "+(null===(t=gi(this,ss,"f"))||void 0===t?void 0:t.paused)),function(){const t=navigator.userAgent||navigator.vendor||navigator.opera;return!!/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(t)||("ontouchstart"in window||navigator.maxTouchPoints>0)&&window.innerWidth<1024}())"opened"===this.state&&await gi(this,ns,"m",Ns).call(this);else if("opening"==this.state||"opened"==this.state){let e=!1;if(!this.isVideoPlaying){Qs._onLog&&Qs._onLog("document visible. Not auto resume. 1st resume start.");try{await this.resume(),e=!0}catch(t){Qs._onLog&&Qs._onLog("document visible. 1st resume video failed, try open instead.")}e||await gi(this,ns,"m",Ps).call(this)}if(await new Promise(t=>setTimeout(t,300)),!this.isVideoPlaying){Qs._onLog&&Qs._onLog("document visible. 1st open failed. 2rd resume start."),e=!1;try{await this.resume(),e=!0}catch(t){Qs._onLog&&Qs._onLog("document visible. 2rd resume video failed, try open instead.")}e||await gi(this,ns,"m",Ps).call(this)}}}else"hidden"===document.visibilityState&&(Qs._onLog&&Qs._onLog("document hidden. video paused: "+(null===(e=gi(this,ss,"f"))||void 0===e?void 0:e.paused)),"opening"==this.state||"opened"==this.state&&this.isVideoPlaying&&this.pause())}),As.set(this,!1),(null===(i=null===(e=null===window||void 0===window?void 0:window.navigator)||void 0===e?void 0:e.mediaDevices)||void 0===i?void 0:i.getUserMedia)||setTimeout(()=>{Qs.onWarning&&Qs.onWarning("The browser is too old or the page is loaded from an insecure origin.")},0),this.defaultConstraints={video:{facingMode:{ideal:"environment"}}},this.resetMediaStreamConstraints(),t instanceof HTMLVideoElement&&this.setVideoEl(t),mi(this,bs,new cn),this.imageDataGetter=new Js,document.addEventListener("visibilitychange",gi(this,Os,"f"))}setVideoEl(t){if(!(t&&t instanceof HTMLVideoElement))throw new Error("Invalid 'videoEl'.");t.addEventListener("play",gi(this,as,"f")),t.addEventListener("pause",gi(this,os,"f")),mi(this,ss,t)}getVideoEl(){return gi(this,ss,"f")}releaseVideoEl(){var t,e;null===(t=gi(this,ss,"f"))||void 0===t||t.removeEventListener("play",gi(this,as,"f")),null===(e=gi(this,ss,"f"))||void 0===e||e.removeEventListener("pause",gi(this,os,"f")),mi(this,ss,null)}isVideoLoaded(){return!!gi(this,ss,"f")&&(this.videoSrc?0!==gi(this,ss,"f").readyState:4===gi(this,ss,"f").readyState)}async open(){if(gi(this,gs,"f")&&!gi(this,fs,"f")){if("pending"===gi(this,ms,"f"))return gi(this,gs,"f");if("fulfilled"===gi(this,ms,"f"))return}gi(this,bs,"f").fire("before:open",null,{target:this}),await gi(this,ns,"m",Ns).call(this),gi(this,bs,"f").fire("played",null,{target:this,async:!1}),gi(this,bs,"f").fire("opened",null,{target:this,async:!1})}async close(){if("closed"===this.state)return;gi(this,bs,"f").fire("before:close",null,{target:this});const t=gi(this,gs,"f");if(gi(this,ns,"m",Bs).call(this),t&&"pending"===gi(this,ms,"f")){try{await t}catch(t){}if(!1===gi(this,fs,"f")){const t=new Error("'close()' was interrupted.");throw t.name="AbortError",t}}mi(this,gs,null),mi(this,ms,null),gi(this,bs,"f").fire("closed",null,{target:this,async:!1})}pause(){if(!this.isVideoLoaded())throw new Error("Video is not loaded.");if("opened"!==this.state)throw new Error("Camera or video is not open.");gi(this,ss,"f").pause()}async resume(){if(!this.isVideoLoaded())throw new Error("Video is not loaded.");if("opened"!==this.state)throw new Error("Camera or video is not open.");await gi(this,ss,"f").play()}async setCamera(t){if("string"!=typeof t)throw new TypeError("Invalid 'deviceId'.");if("object"!=typeof gi(this,ls,"f").video&&(gi(this,ls,"f").video={}),delete gi(this,ls,"f").video.facingMode,gi(this,ls,"f").video.deviceId={exact:t},!("closed"===this.state||this.videoSrc||"opening"===this.state&&gi(this,fs,"f"))){gi(this,bs,"f").fire("before:camera:change",[],{target:this,async:!1}),await gi(this,ns,"m",ks).call(this);try{this.resetSoftwareScale()}catch(t){}return gi(this,hs,"f")}}async switchToFrontCamera(t){if("object"!=typeof gi(this,ls,"f").video&&(gi(this,ls,"f").video={}),(null==t?void 0:t.resolution)&&(gi(this,ls,"f").video.width={ideal:t.resolution.width},gi(this,ls,"f").video.height={ideal:t.resolution.height}),delete gi(this,ls,"f").video.deviceId,gi(this,ls,"f").video.facingMode={exact:"user"},mi(this,cs,null),!("closed"===this.state||this.videoSrc||"opening"===this.state&&gi(this,fs,"f"))){gi(this,bs,"f").fire("before:camera:change",[],{target:this,async:!1}),gi(this,ns,"m",ks).call(this);try{this.resetSoftwareScale()}catch(t){}return gi(this,hs,"f")}}getCamera(){var t;if(gi(this,hs,"f"))return gi(this,hs,"f");{let e=(null===(t=gi(this,ls,"f").video)||void 0===t?void 0:t.deviceId)||"";if(e){e=e.exact||e.ideal||e;for(let t of this._arrCameras)if(t.deviceId===e)return JSON.parse(JSON.stringify(t))}return{deviceId:"",label:"",_checked:!1}}}async _getCameras(t){var e,i;if(!(null===(i=null===(e=null===window||void 0===window?void 0:window.navigator)||void 0===e?void 0:e.mediaDevices)||void 0===i?void 0:i.getUserMedia))throw new Error("Failed to access the camera because the browser is too old or the page is loaded from an insecure origin.");let n=[];if(t)try{let t=await navigator.mediaDevices.getUserMedia({video:!0});n=(await navigator.mediaDevices.enumerateDevices()).filter(t=>"videoinput"===t.kind),t.getTracks().forEach(t=>{t.stop()})}catch(t){console.error(t.message||t)}else n=(await navigator.mediaDevices.enumerateDevices()).filter(t=>"videoinput"===t.kind);const s=[],r=[];if(this._arrCameras)for(let t of this._arrCameras)t._checked&&r.push(t);for(let t=0;t<n.length;t++){let e,i=n[t];for(let t of r)if(i.deviceId==t.deviceId){e=t;break}e||(e={deviceId:i.deviceId,label:i.label?i.label:"camera "+t,_checked:!1}),e.deviceId&&s.push(e)}return this._arrCameras=s,Qs._onLog&&Qs._onLog(JSON.stringify(this._arrCameras)),s}async getCameras(){var t,e;if(!(null===(e=null===(t=null===window||void 0===window?void 0:window.navigator)||void 0===t?void 0:t.mediaDevices)||void 0===e?void 0:e.enumerateDevices))throw new Error("Failed to access the camera because the browser is too old or the page is loaded from an insecure origin.");const i=(await navigator.mediaDevices.enumerateDevices()).filter(t=>"videoinput"===t.kind);return i&&i.length&&!i[0].deviceId?this._getCameras(!0):this._getCameras(!1)}async getAllCameras(){return this.getCameras()}async setResolution(t,e,i){if("number"!=typeof t||t<=0)throw new TypeError("Invalid 'width'.");if("number"!=typeof e||e<=0)throw new TypeError("Invalid 'height'.");if("object"!=typeof gi(this,ls,"f").video&&(gi(this,ls,"f").video={}),i?(gi(this,ls,"f").video.width={exact:t},gi(this,ls,"f").video.height={exact:e}):(gi(this,ls,"f").video.width={ideal:t},gi(this,ls,"f").video.height={ideal:e}),"closed"===this.state||this.videoSrc||"opening"===this.state&&gi(this,fs,"f"))return null;gi(this,bs,"f").fire("before:resolution:change",[],{target:this,async:!1}),await gi(this,ns,"m",ks).call(this);try{this.resetSoftwareScale()}catch(t){}const n=this.getResolution();return{width:n.width,height:n.height}}getResolution(){if("opened"===this.state&&this.videoSrc&&gi(this,ss,"f"))return{width:gi(this,ss,"f").videoWidth,height:gi(this,ss,"f").videoHeight};if(gi(this,rs,"f")){const t=gi(this,rs,"f").getSettings();return{width:t.width,height:t.height}}if(this.isVideoLoaded())return{width:gi(this,ss,"f").videoWidth,height:gi(this,ss,"f").videoHeight};{const t={width:0,height:0};let e=gi(this,ls,"f").video.width||0,i=gi(this,ls,"f").video.height||0;return e&&(t.width=e.exact||e.ideal||e),i&&(t.height=i.exact||i.ideal||i),t}}async getResolutions(t){var e,i,n,s,r,a,o,l,h,c,d;if(!(null===(i=null===(e=null===window||void 0===window?void 0:window.navigator)||void 0===e?void 0:e.mediaDevices)||void 0===i?void 0:i.getUserMedia))throw new Error("Failed to access the camera because the browser is too old or the page is loaded from an insecure origin.");let u="";const f=(t,e)=>{const i=gi(this,xs,"f").get(t);if(!i||!i.length)return!1;for(let t of i)if(t.width===e.width&&t.height===e.height)return!0;return!1};if(this._mediaStream){u=null===(d=gi(this,hs,"f"))||void 0===d?void 0:d.deviceId;let e=gi(this,xs,"f").get(u);if(e&&!t)return JSON.parse(JSON.stringify(e));e=[],gi(this,xs,"f").set(u,e),mi(this,ps,!0);try{for(let t of this.detectedResolutions){await gi(this,rs,"f").applyConstraints({width:{ideal:t.width},height:{ideal:t.height}}),gi(this,ns,"m",Ms).call(this);const i=gi(this,rs,"f").getSettings(),n={width:i.width,height:i.height};f(u,n)||e.push({width:n.width,height:n.height})}}catch(t){throw gi(this,ns,"m",Bs).call(this),mi(this,ps,!1),t}try{await gi(this,ns,"m",Ps).call(this)}catch(t){if("AbortError"===t.name)return e;throw t}finally{mi(this,ps,!1)}return e}{const e=async(t,e,i)=>{const n={video:{deviceId:{exact:t},width:{ideal:e},height:{ideal:i}}};let s=null;try{s=await navigator.mediaDevices.getUserMedia(n)}catch(t){return null}if(!s)return null;const r=s.getVideoTracks();let a=null;try{const t=r[0].getSettings();a={width:t.width,height:t.height}}catch(t){const e=document.createElement("video");e.srcObject=s,a={width:e.videoWidth,height:e.videoHeight},e.srcObject=null}return r.forEach(t=>{t.stop()}),a};let i=(null===(r=null===(s=null===(n=gi(this,ls,"f"))||void 0===n?void 0:n.video)||void 0===s?void 0:s.deviceId)||void 0===r?void 0:r.exact)||(null===(l=null===(o=null===(a=gi(this,ls,"f"))||void 0===a?void 0:a.video)||void 0===o?void 0:o.deviceId)||void 0===l?void 0:l.ideal)||(null===(c=null===(h=gi(this,ls,"f"))||void 0===h?void 0:h.video)||void 0===c?void 0:c.deviceId);if(!i)return[];let d=gi(this,xs,"f").get(i);if(d&&!t)return JSON.parse(JSON.stringify(d));d=[],gi(this,xs,"f").set(i,d);for(let t of this.detectedResolutions){const n=await e(i,t.width,t.height);n&&!f(i,n)&&d.push({width:n.width,height:n.height})}return d}}async setMediaStreamConstraints(t,e){if(!(t=>{return null!==t&&"[object Object]"===(e=t,Object.prototype.toString.call(e));var e})(t))throw new TypeError("Invalid 'mediaStreamConstraints'.");mi(this,ls,JSON.parse(JSON.stringify(t))),mi(this,cs,null),e&&await gi(this,ns,"m",ks).call(this)}getMediaStreamConstraints(){return JSON.parse(JSON.stringify(gi(this,ls,"f")))}resetMediaStreamConstraints(){mi(this,ls,this.defaultConstraints?JSON.parse(JSON.stringify(this.defaultConstraints)):null)}getCameraCapabilities(){if(!gi(this,rs,"f")||"opened"!==this.state)throw new Error("Camera is not open.");return gi(this,rs,"f").getCapabilities?gi(this,rs,"f").getCapabilities():{}}getCameraSettings(){if(!gi(this,rs,"f")||"opened"!==this.state)throw new Error("Camera is not open.");return gi(this,rs,"f").getSettings()}async turnOnTorch(){if(!gi(this,rs,"f")||"opened"!==this.state)throw new Error("Camera is not open.");const t=this.getCameraCapabilities();if(!(null==t?void 0:t.torch))throw Error("Not supported.");await gi(this,rs,"f").applyConstraints({advanced:[{torch:!0}]})}async turnOffTorch(){if(!gi(this,rs,"f")||"opened"!==this.state)throw new Error("Camera is not open.");const t=this.getCameraCapabilities();if(!(null==t?void 0:t.torch))throw Error("Not supported.");await gi(this,rs,"f").applyConstraints({advanced:[{torch:!1}]})}async setColorTemperature(t,e){var i;if("number"!=typeof t)throw new TypeError("Invalid 'value'.");if(!gi(this,rs,"f")||"opened"!==this.state)throw new Error("Camera is not open.");const n=null===(i=this.getCameraCapabilities())||void 0===i?void 0:i.colorTemperature;if(!n)throw Error("Not supported.");return e&&(t<n.min?t=n.min:t>n.max&&(t=n.max),t=$s(t,n.min,n.step,n.max)),await gi(this,rs,"f").applyConstraints({advanced:[{colorTemperature:t,whiteBalanceMode:"manual"}]}),t}getColorTemperature(){return this.getCameraSettings().colorTemperature||0}async setExposureCompensation(t,e){var i;if("number"!=typeof t)throw new TypeError("Invalid 'value'.");if(!gi(this,rs,"f")||"opened"!==this.state)throw new Error("Camera is not open.");const n=null===(i=this.getCameraCapabilities())||void 0===i?void 0:i.exposureCompensation;if(!n)throw Error("Not supported.");return e&&(t<n.min?t=n.min:t>n.max&&(t=n.max),t=$s(t,n.min,n.step,n.max)),await gi(this,rs,"f").applyConstraints({advanced:[{exposureCompensation:t}]}),t}getExposureCompensation(){return this.getCameraSettings().exposureCompensation||0}async setFrameRate(t,e){var i;if("number"!=typeof t)throw new TypeError("Invalid 'value'.");if(!gi(this,rs,"f")||"opened"!==this.state)throw new Error("Camera is not open.");let n=null===(i=this.getCameraCapabilities())||void 0===i?void 0:i.frameRate;if(!n)throw Error("Not supported.");e&&(t<n.min?t=n.min:t>n.max&&(t=n.max));const s=this.getResolution();return await gi(this,rs,"f").applyConstraints({width:{ideal:Math.max(s.width,s.height)},frameRate:t}),t}getFrameRate(){return this.getCameraSettings().frameRate}async setFocus(t,e){if("object"!=typeof t||Array.isArray(t)||null==t)throw new TypeError("Invalid 'settings'.");if(!gi(this,rs,"f")||"opened"!==this.state)throw new Error("Camera is not open.");const i=this.getCameraCapabilities(),n=null==i?void 0:i.focusMode,s=null==i?void 0:i.focusDistance;if(!n)throw Error("Not supported.");if("string"!=typeof t.mode)throw TypeError("Invalid 'mode'.");const r=t.mode.toLowerCase();if(!n.includes(r))throw Error("Unsupported focus mode.");if("manual"===r){if(!s)throw Error("Manual focus unsupported.");if(t.hasOwnProperty("distance")){let i=t.distance;e&&(i<s.min?i=s.min:i>s.max&&(i=s.max),i=$s(i,s.min,s.step,s.max)),this._focusParameters.focusArea=null,await gi(this,rs,"f").applyConstraints({advanced:[{focusMode:r,focusDistance:i}]})}else{if(!t.area)throw new Error("'distance' or 'area' should be specified in 'manual' mode.");{const e=t.area.centerPoint;let i=t.area.width,n=t.area.height;if(!i||!n){const t=this.getResolution();i||(i=2*Math.round(Math.min(t.width,t.height)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px"),n||(n=2*Math.round(Math.min(t.width,t.height)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px")}this._focusParameters.focusArea={centerPoint:{x:e.x,y:e.y},width:i,height:n},await gi(this,ns,"m",Us).call(this,e,i,n)}}}else this._focusParameters.focusArea=null,await gi(this,rs,"f").applyConstraints({advanced:[{focusMode:r}]})}getFocus(){const t=this.getCameraSettings(),e=t.focusMode;return e?"manual"===e?this._focusParameters.focusArea?{mode:"manual",area:JSON.parse(JSON.stringify(this._focusParameters.focusArea))}:{mode:"manual",distance:t.focusDistance}:{mode:e}:null}enableTapToFocus(){mi(this,_s,!0)}disableTapToFocus(){mi(this,_s,!1)}isTapToFocusEnabled(){return gi(this,_s,"f")}async setZoom(t){if("object"!=typeof t||Array.isArray(t)||null==t)throw new TypeError("Invalid 'settings'.");if("number"!=typeof t.factor)throw new TypeError("Illegal type of 'factor'.");if(t.factor<1)throw new RangeError("Invalid 'factor'.");if("opened"===this.state){t.centerPoint?gi(this,ns,"m",Gs).call(this,t.centerPoint):this.resetScaleCenter();try{if(gi(this,ns,"m",Ws).call(this,gi(this,Ss,"f"))){const e=await this.setHardwareScale(t.factor,!0);let i=this.getHardwareScale();1==i&&1!=e&&(i=e),t.factor>i?this.setSoftwareScale(t.factor/i):this.setSoftwareScale(1)}else await this.setHardwareScale(1),this.setSoftwareScale(t.factor)}catch(e){const i=e.message||e;if("Not supported."!==i&&"Camera is not open."!==i)throw e;this.setSoftwareScale(t.factor)}}else this._zoomPreSetting=t}getZoom(){if("opened"!==this.state)throw new Error("Video is not playing.");let t=1;try{t=this.getHardwareScale()}catch(t){if("Camera is not open."!==(t.message||t))throw t}return{factor:t*gi(this,Es,"f")}}async resetZoom(){await this.setZoom({factor:1})}async setHardwareScale(t,e){var i;if("number"!=typeof t)throw new TypeError("Invalid 'value'.");if(t<1)throw new RangeError("Invalid 'value'.");if(!gi(this,rs,"f")||"opened"!==this.state)throw new Error("Camera is not open.");const n=null===(i=this.getCameraCapabilities())||void 0===i?void 0:i.zoom;if(!n)throw Error("Not supported.");return e&&(t<n.min?t=n.min:t>n.max&&(t=n.max),t=$s(t,n.min,n.step,n.max)),await gi(this,rs,"f").applyConstraints({advanced:[{zoom:t}]}),t}getHardwareScale(){return this.getCameraSettings().zoom||1}setSoftwareScale(t,e){if("number"!=typeof t)throw new TypeError("Invalid 'value'.");if(t<1)throw new RangeError("Invalid 'value'.");if("opened"!==this.state)throw new Error("Video is not playing.");e&&gi(this,ns,"m",Gs).call(this,e),mi(this,Es,t),this.updateVideoElWhenSoftwareScaled()}getSoftwareScale(){return gi(this,Es,"f")}resetScaleCenter(){if("opened"!==this.state)throw new Error("Video is not playing.");const t=this.getResolution();mi(this,Ss,{x:t.width/2,y:t.height/2})}resetSoftwareScale(){this.setSoftwareScale(1),this.resetScaleCenter()}getFrameData(t){if(this.disposed)throw Error("The 'Camera' instance has been disposed.");if(!this.isVideoLoaded())return null;if(gi(this,ps,"f"))return null;const e=Date.now();Qs._onLog&&Qs._onLog("getFrameData() START: "+e);const i=gi(this,ss,"f").videoWidth,n=gi(this,ss,"f").videoHeight;let s={sx:0,sy:0,sWidth:i,sHeight:n,dWidth:i,dHeight:n};(null==t?void 0:t.position)&&(s=JSON.parse(JSON.stringify(t.position)));let r=xi.RGBA;(null==t?void 0:t.pixelFormat)&&(r=t.pixelFormat);let a=gi(this,Es,"f");(null==t?void 0:t.scale)&&(a=t.scale);let o=gi(this,Ss,"f");if(null==t?void 0:t.scaleCenter){if("string"!=typeof t.scaleCenter.x||"string"!=typeof t.scaleCenter.y)throw new Error("Invalid scale center.");let e=0,s=0;if(t.scaleCenter.x.endsWith("px"))e=parseFloat(t.scaleCenter.x);else{if(!t.scaleCenter.x.endsWith("%"))throw new Error("Invalid scale center.");e=parseFloat(t.scaleCenter.x)/100*i}if(t.scaleCenter.y.endsWith("px"))s=parseFloat(t.scaleCenter.y);else{if(!t.scaleCenter.y.endsWith("%"))throw new Error("Invalid scale center.");s=parseFloat(t.scaleCenter.y)/100*n}if(isNaN(e)||isNaN(s))throw new Error("Invalid scale center.");o.x=Math.round(e),o.y=Math.round(s)}let l=null;if((null==t?void 0:t.bufferContainer)&&(l=t.bufferContainer),0==i||0==n)return null;1!==a&&(s.sWidth=Math.round(s.sWidth/a),s.sHeight=Math.round(s.sHeight/a),s.sx=Math.round((1-1/a)*o.x+s.sx/a),s.sy=Math.round((1-1/a)*o.y+s.sy/a));const h=this.imageDataGetter.getImageData(gi(this,ss,"f"),s,{pixelFormat:r,bufferContainer:l,isEnableMirroring:null==t?void 0:t.isEnableMirroring});if(!h)return null;const c=Date.now();return Qs._onLog&&Qs._onLog("getFrameData() END: "+c),{data:h.data,width:h.width,height:h.height,pixelFormat:h.pixelFormat,timeSpent:c-e,timeStamp:c,toCanvas:gi(this,Ts,"f")}}on(t,e){if(!gi(this,Is,"f").includes(t.toLowerCase()))throw new Error(`Event '${t}' does not exist.`);gi(this,bs,"f").on(t,e)}off(t,e){gi(this,bs,"f").off(t,e)}async dispose(){this.tapFocusEventBoundEl=null,await this.close(),this.releaseVideoEl(),gi(this,bs,"f").dispose(),this.imageDataGetter.dispose(),document.removeEventListener("visibilitychange",gi(this,Os,"f")),mi(this,As,!0)}}var tr,er,ir,nr,sr,rr,ar,or,lr,hr,cr,dr,ur,fr,gr,mr,pr,_r,vr,yr,wr,Cr,Er,Sr,Tr,br,Ir,xr,Rr,Or,Ar,Dr,Mr,Lr,Fr,Pr;ss=new WeakMap,rs=new WeakMap,as=new WeakMap,os=new WeakMap,ls=new WeakMap,hs=new WeakMap,cs=new WeakMap,ds=new WeakMap,us=new WeakMap,fs=new WeakMap,gs=new WeakMap,ms=new WeakMap,ps=new WeakMap,_s=new WeakMap,vs=new WeakMap,ys=new WeakMap,ws=new WeakMap,Cs=new WeakMap,Es=new WeakMap,Ss=new WeakMap,Ts=new WeakMap,bs=new WeakMap,Is=new WeakMap,xs=new WeakMap,Rs=new WeakMap,Os=new WeakMap,As=new WeakMap,ns=new WeakSet,Ds=async function(){const t=this.getMediaStreamConstraints();if("boolean"==typeof t.video&&(t.video={}),t.video.deviceId);else if(gi(this,cs,"f"))delete t.video.facingMode,t.video.deviceId={exact:gi(this,cs,"f")};else if(this.ifSaveLastUsedCamera&&Qs.isStorageAvailable&&window.localStorage.getItem("dce_last_camera_id")){delete t.video.facingMode,t.video.deviceId={ideal:window.localStorage.getItem("dce_last_camera_id")};const e=JSON.parse(window.localStorage.getItem("dce_last_apply_width")),i=JSON.parse(window.localStorage.getItem("dce_last_apply_height"));e&&i&&(t.video.width=e,t.video.height=i)}else if(this.ifSkipCameraInspection);else{const e=async t=>{let e=null;return"environment"===t&&["Android","HarmonyOS","iPhone","iPad"].includes(ui.OS)?(await this._getCameras(!1),gi(this,ns,"m",Ms).call(this),e=Qs.findBestCamera(this._arrCameras,"environment",{getMainCameraInIOS:this.selectIOSRearMainCameraAsDefault})):t||["Android","HarmonyOS","iPhone","iPad"].includes(ui.OS)||(await this._getCameras(!1),gi(this,ns,"m",Ms).call(this),e=Qs.findBestCamera(this._arrCameras,null,{getMainCameraInIOS:this.selectIOSRearMainCameraAsDefault})),e};let i=t.video.facingMode;i instanceof Array&&i.length&&(i=i[0]),"object"==typeof i&&(i=i.exact||i.ideal);const n=await e(i);n&&(delete t.video.facingMode,t.video.deviceId={exact:n})}return t},Ms=function(){if(gi(this,fs,"f")){const t=new Error("The operation was interrupted.");throw t.name="AbortError",t}},Ls=async function(t){var e,i;if(!(null===(i=null===(e=null===window||void 0===window?void 0:window.navigator)||void 0===e?void 0:e.mediaDevices)||void 0===i?void 0:i.getUserMedia))throw new Error("Failed to access the camera because the browser is too old or the page is loaded from an insecure origin.");let n;try{Qs._onLog&&Qs._onLog("======try getUserMedia========");let e=[0,500,1e3,2e3],i=null;const s=async t=>{for(let s of e){s&&(await new Promise(t=>setTimeout(t,s)),gi(this,ns,"m",Ms).call(this));try{Qs._onLog&&Qs._onLog("ask "+JSON.stringify(t)),n=await navigator.mediaDevices.getUserMedia(t),gi(this,ns,"m",Ms).call(this);break}catch(t){if("NotFoundError"===t.name||"NotAllowedError"===t.name||"AbortError"===t.name||"OverconstrainedError"===t.name)throw t;i=t,Qs._onLog&&Qs._onLog(t.message||t)}}};if(await s(t),!n&&"object"==typeof t.video&&!n){const e=(await navigator.mediaDevices.enumerateDevices()).filter(t=>"videoinput"===t.kind);for(let i of e)try{n=await navigator.mediaDevices.getUserMedia({video:{deviceId:{exact:i.deviceId}}});break}catch(t){continue}}if(!n)throw i;return n}catch(t){throw null==n||n.getTracks().forEach(t=>{t.stop()}),"NotFoundError"===t.name&&(DOMException?t=new DOMException("No camera available, please use a device with an accessible camera.",t.name):(t=new Error("No camera available, please use a device with an accessible camera.")).name="NotFoundError"),t}},Fs=function(){this._mediaStream&&(this._mediaStream.getTracks().forEach(t=>{t.stop()}),this._mediaStream=null),mi(this,rs,null)},Ps=async function(){mi(this,fs,!1);const t=mi(this,us,Symbol());if(gi(this,gs,"f")&&"pending"===gi(this,ms,"f")){try{await gi(this,gs,"f")}catch(t){}gi(this,ns,"m",Ms).call(this)}if(t!==gi(this,us,"f"))return;const e=mi(this,gs,(async()=>{mi(this,ms,"pending");try{if(this.videoSrc){if(!gi(this,ss,"f"))throw new Error("'videoEl' should be set.");await Qs.playVideo(gi(this,ss,"f"),this.videoSrc,this.cameraOpenTimeout),gi(this,ns,"m",Ms).call(this)}else{let t=await gi(this,ns,"m",Ds).call(this);gi(this,ns,"m",Fs).call(this);let e=await gi(this,ns,"m",Ls).call(this,t);await this._getCameras(!1),gi(this,ns,"m",Ms).call(this);const i=()=>{const t=e.getVideoTracks();let i,n;if(t.length&&(i=t[0]),i){const t=i.getSettings();if(t)for(let e of this._arrCameras)if(t.deviceId===e.deviceId){e._checked=!0,e.label=i.label,n=e;break}}return n},n=gi(this,ls,"f");if("object"==typeof n.video){let s=n.video.facingMode;if(s instanceof Array&&s.length&&(s=s[0]),"object"==typeof s&&(s=s.exact||s.ideal),!(gi(this,cs,"f")||this.ifSaveLastUsedCamera&&Qs.isStorageAvailable&&window.localStorage.getItem("dce_last_camera_id")||this.ifSkipCameraInspection||n.video.deviceId)){const n=i(),r=Qs.findBestCamera(this._arrCameras,s,{getMainCameraInIOS:this.selectIOSRearMainCameraAsDefault});r&&r!=(null==n?void 0:n.deviceId)&&(e.getTracks().forEach(t=>{t.stop()}),t.video.deviceId={exact:r},e=await gi(this,ns,"m",Ls).call(this,t),gi(this,ns,"m",Ms).call(this))}}const s=i();(null==s?void 0:s.deviceId)&&(mi(this,cs,s&&s.deviceId),this.ifSaveLastUsedCamera&&Qs.isStorageAvailable&&(window.localStorage.setItem("dce_last_camera_id",gi(this,cs,"f")),"object"==typeof t.video&&t.video.width&&t.video.height&&(window.localStorage.setItem("dce_last_apply_width",JSON.stringify(t.video.width)),window.localStorage.setItem("dce_last_apply_height",JSON.stringify(t.video.height))))),gi(this,ss,"f")&&(await Qs.playVideo(gi(this,ss,"f"),e,this.cameraOpenTimeout),gi(this,ns,"m",Ms).call(this)),this._mediaStream=e;const r=e.getVideoTracks();(null==r?void 0:r.length)&&mi(this,rs,r[0]),mi(this,hs,s)}}catch(t){throw gi(this,ns,"m",Bs).call(this),mi(this,ms,null),t}mi(this,ms,"fulfilled")})());return e},ks=async function(){var t;if("closed"===this.state||this.videoSrc)return;const e=null===(t=gi(this,hs,"f"))||void 0===t?void 0:t.deviceId,i=this.getResolution();await gi(this,ns,"m",Ps).call(this);const n=this.getResolution();e&&e!==gi(this,hs,"f").deviceId&&gi(this,bs,"f").fire("camera:changed",[gi(this,hs,"f").deviceId,e],{target:this,async:!1}),i.width==n.width&&i.height==n.height||gi(this,bs,"f").fire("resolution:changed",[{width:n.width,height:n.height},{width:i.width,height:i.height}],{target:this,async:!1}),gi(this,bs,"f").fire("played",null,{target:this,async:!1})},Ns=async function(){let t=0;for(;Qs._tryToReopenTime>=t++;){try{await gi(this,ns,"m",Ps).call(this)}catch(t){await new Promise(t=>setTimeout(t,300));continue}break}},Bs=function(){gi(this,ns,"m",Fs).call(this),mi(this,hs,null),gi(this,ss,"f")&&(gi(this,ss,"f").srcObject=null,this.videoSrc&&(gi(this,ss,"f").pause(),gi(this,ss,"f").currentTime=0)),mi(this,fs,!0);try{this.resetSoftwareScale()}catch(t){}},js=async function t(e,i){const n=t=>{if(!gi(this,rs,"f")||!this.isVideoPlaying||t.focusTaskId!=this._focusParameters.curFocusTaskId){gi(this,rs,"f")&&this.isVideoPlaying||(this._focusParameters.isDoingFocus=0);const e=new Error(`Focus task ${t.focusTaskId} canceled.`);throw e.name="DeprecatedTaskError",e}1===this._focusParameters.isDoingFocus&&Date.now()-t.timeStart>this._focusParameters.focusCancelableTime&&(this._focusParameters.isDoingFocus=-1)};let s;i=$s(i,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),await gi(this,rs,"f").applyConstraints({advanced:[{focusMode:"manual",focusDistance:i}]}),n(e),s=null==this._focusParameters.oldDistance?this._focusParameters.kTimeout*Math.max(Math.abs(1/this._focusParameters.fds.min-1/i),Math.abs(1/this._focusParameters.fds.max-1/i))+this._focusParameters.minTimeout:this._focusParameters.kTimeout*Math.abs(1/this._focusParameters.oldDistance-1/i)+this._focusParameters.minTimeout,this._focusParameters.oldDistance=i,await new Promise(t=>{setTimeout(t,s)}),n(e);let r=e.focusL-e.focusW/2,a=e.focusT-e.focusH/2,o=e.focusW,l=e.focusH;const h=this.getResolution();r=Math.round(r),a=Math.round(a),o=Math.round(o),l=Math.round(l),o>h.width&&(o=h.width),l>h.height&&(l=h.height),r<0?r=0:r+o>h.width&&(r=h.width-o),a<0?a=0:a+l>h.height&&(a=h.height-l);const c=4*h.width*h.height*this._focusParameters.defaultTempBufferContainerLenRatio,d=4*o*l;let u=this._focusParameters.tempBufferContainer;if(u){const t=u.length;c>t&&c>=d?u=new Uint8Array(c):d>t&&d>=c&&(u=new Uint8Array(d))}else u=this._focusParameters.tempBufferContainer=new Uint8Array(Math.max(c,d));if(!this.imageDataGetter.getImageData(gi(this,ss,"f"),{sx:r,sy:a,sWidth:o,sHeight:l,dWidth:o,dHeight:l},{pixelFormat:xi.RGBA,bufferContainer:u}))return gi(this,ns,"m",t).call(this,e,i);const f=u;let g=0;for(let t=0,e=d-8;t<e;++t){let e=f[t]-f[t+8];++t;let i=f[t]-f[t+8];++t;let n=f[t]-f[t+8];++t,g+=e*e+i*i+n*n}return-g},Vs=async function t(e,i,n,s,r,a,o){let l;if(i=$s(i,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),s=$s(s,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),a?a=$s(a,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max):(a=$s(Math.sqrt((i||this._focusParameters.fds.step)*(s||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),o=await gi(this,ns,"m",js).call(this,e,a)),o<=n&&o<=r?l=3:n<r&&n<o?l=1:r<n&&r<o&&(l=2),(s-i)/2<=this._focusParameters.fds.step)return 3===l||(1===l?await gi(this,rs,"f").applyConstraints({advanced:[{focusMode:"manual",focusDistance:i}]}):2===l&&await gi(this,rs,"f").applyConstraints({advanced:[{focusMode:"manual",focusDistance:s}]})),!0;if(1===l)return await gi(this,ns,"m",t).call(this,e,i,n,a,o);if(2===l)return await gi(this,ns,"m",t).call(this,e,a,o,s,r);if(3!==l)return n=await gi(this,ns,"m",js).call(this,e,i),r=await gi(this,ns,"m",js).call(this,e,s),await gi(this,ns,"m",t).call(this,e,i,n,s,r);let h=$s(Math.sqrt((i||this._focusParameters.fds.step)*(a||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),c=$s(Math.sqrt((s||this._focusParameters.fds.step)*(a||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max);if(Math.abs(1/this._focusParameters.oldDistance-1/h)<=Math.abs(1/this._focusParameters.oldDistance-1/c)){let l=await gi(this,ns,"m",js).call(this,e,h);if(l<o)return await gi(this,ns,"m",t).call(this,e,i,n,a,o,h,l);if(l==o)return await gi(this,ns,"m",t).call(this,e,h,l,a,o);let d=await gi(this,ns,"m",js).call(this,e,c);if(l>o&&o<d)return await gi(this,ns,"m",t).call(this,e,h,l,c,d,a,o);if(o==d)return await gi(this,ns,"m",t).call(this,e,a,o,c,d);if(o>d)return await gi(this,ns,"m",t).call(this,e,a,o,s,r,c,d)}else{let l=await gi(this,ns,"m",js).call(this,e,c);if(o>l)return await gi(this,ns,"m",t).call(this,e,a,o,s,r,c,l);if(o==l)return await gi(this,ns,"m",t).call(this,e,a,o,c,l);let d=await gi(this,ns,"m",js).call(this,e,h);if(d>o&&o<l)return await gi(this,ns,"m",t).call(this,e,h,d,c,l,a,o);if(d==o)return await gi(this,ns,"m",t).call(this,e,h,d,a,o);if(d<o)return await gi(this,ns,"m",t).call(this,e,i,n,a,o,h,d)}return!1},Us=async function(t,e,i,n,s){var r;if(1==this._focusParameters.isDoingFocus)return!1;if(!t||"string"!=typeof t.x||"string"!=typeof t.y)throw new Error("Invalid 'centerPoint'.");if(!e||"string"!=typeof e)throw new Error("Invalid 'width'.");if(!i||"string"!=typeof i)throw new Error("Invalid 'height'.");const a=this.getResolution();let o=0,l=0;if(t.x.endsWith("px"))o=parseFloat(t.x);else{if(!t.x.endsWith("%"))throw new Error("Invalid 'centerPoint'.");o=parseFloat(t.x)/100*a.width}if(t.y.endsWith("px"))l=parseFloat(t.y);else{if(!t.y.endsWith("%"))throw new Error("Invalid 'centerPoint'.");l=parseFloat(t.y)/100*a.height}if(isNaN(o)||isNaN(l)||o<0||o>a.width||l<0||l>a.height)throw new Error("Invalid 'centerPoint'.");let h=0;if(e.endsWith("px"))h=parseFloat(e);else{if(!e.endsWith("%"))throw new Error("Invalid 'width'.");h=parseFloat(e)/100*a.width}if(isNaN(h)||h<0)throw new Error("Invalid 'width'.");let c=0;if(i.endsWith("px"))c=parseFloat(i);else{if(!i.endsWith("%"))throw new Error("Invalid 'height'.");c=parseFloat(i)/100*a.height}if(isNaN(c)||c<0)throw new Error("Invalid 'height'.");if(1!==gi(this,Es,"f")){const t=gi(this,Es,"f"),e=gi(this,Ss,"f");h/=t,c/=t,o=(1-1/t)*e.x+o/t,l=(1-1/t)*e.y+l/t}if(!this._focusSupported)throw new Error("Manual focus unsupported.");if(!this._focusParameters.fds&&(this._focusParameters.fds=null===(r=this.getCameraCapabilities())||void 0===r?void 0:r.focusDistance,!this._focusParameters.fds))throw this._focusSupported=!1,new Error("Manual focus unsupported.");null==this._focusParameters.kTimeout&&(this._focusParameters.kTimeout=(this._focusParameters.maxTimeout-this._focusParameters.minTimeout)/(1/this._focusParameters.fds.min-1/this._focusParameters.fds.max)),this._focusParameters.isDoingFocus=1;const d={focusL:o,focusT:l,focusW:h,focusH:c,focusTaskId:++this._focusParameters.curFocusTaskId,timeStart:Date.now()},u=async(t,e,i)=>{try{(null==e||e<this._focusParameters.fds.min)&&(e=this._focusParameters.fds.min),(null==i||i>this._focusParameters.fds.max)&&(i=this._focusParameters.fds.max),this._focusParameters.oldDistance=null;let n=$s(Math.sqrt(i*(e||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),s=$s(Math.sqrt((e||this._focusParameters.fds.step)*n),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),r=$s(Math.sqrt(n*i),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),a=await gi(this,ns,"m",js).call(this,t,r),o=await gi(this,ns,"m",js).call(this,t,s),l=await gi(this,ns,"m",js).call(this,t,n);if(o>l&&l<a){const e=await gi(this,ns,"m",Vs).call(this,t,s,o,r,a,n,l);return this._focusParameters.isDoingFocus=0,e}if(o<l&&o<a){let i=await gi(this,ns,"m",js).call(this,t,e);const r=await gi(this,ns,"m",Vs).call(this,t,e,i,n,l,s,o);return this._focusParameters.isDoingFocus=0,r}if(l>a&&o>a){let e=await gi(this,ns,"m",js).call(this,t,i);const s=await gi(this,ns,"m",Vs).call(this,t,n,l,i,e,r,a);return this._focusParameters.isDoingFocus=0,s}if(o==l&&l<a){const e=await gi(this,ns,"m",Vs).call(this,t,s,o,n,l);return this._focusParameters.isDoingFocus=0,e}if(l==a&&o>l){const e=await gi(this,ns,"m",Vs).call(this,t,n,l,r,a);return this._focusParameters.isDoingFocus=0,e}return u(t,e,i)}catch(t){if("DeprecatedTaskError"!==t.name)throw t}};return u(d,n,s)},Gs=function(t){if("opened"!==this.state)throw new Error("Video is not playing.");if(!t||"string"!=typeof t.x||"string"!=typeof t.y)throw new Error("Invalid 'center'.");const e=this.getResolution();let i=0,n=0;if(t.x.endsWith("px"))i=parseFloat(t.x);else{if(!t.x.endsWith("%"))throw new Error("Invalid scale center.");i=parseFloat(t.x)/100*e.width}if(t.y.endsWith("px"))n=parseFloat(t.y);else{if(!t.y.endsWith("%"))throw new Error("Invalid scale center.");n=parseFloat(t.y)/100*e.height}if(isNaN(i)||isNaN(n))throw new Error("Invalid scale center.");mi(this,Ss,{x:i,y:n})},Ws=function(t){if("opened"!==this.state)throw new Error("Video is not playing.");const e=this.getResolution();return t&&t.x==e.width/2&&t.y==e.height/2},Qs.browserInfo=ui,Qs._tryToReopenTime=4,Qs.onWarning=null===(is=null===window||void 0===window?void 0:window.console)||void 0===is?void 0:is.warn;class kr{constructor(t){tr.add(this),er.set(this,void 0),ir.set(this,0),nr.set(this,void 0),sr.set(this,0),rr.set(this,!1),mi(this,er,t)}startCharging(){gi(this,rr,"f")||(kr._onLog&&kr._onLog("start charging."),gi(this,tr,"m",or).call(this),mi(this,rr,!0))}stopCharging(){gi(this,nr,"f")&&clearTimeout(gi(this,nr,"f")),gi(this,rr,"f")&&(kr._onLog&&kr._onLog("stop charging."),mi(this,ir,Date.now()-gi(this,sr,"f")),mi(this,rr,!1))}}er=new WeakMap,ir=new WeakMap,nr=new WeakMap,sr=new WeakMap,rr=new WeakMap,tr=new WeakSet,ar=function(){Pt.cfd(1),kr._onLog&&kr._onLog("charge 1.")},or=function t(){0==gi(this,ir,"f")&&gi(this,tr,"m",ar).call(this),mi(this,sr,Date.now()),gi(this,nr,"f")&&clearTimeout(gi(this,nr,"f")),mi(this,nr,setTimeout(()=>{mi(this,ir,0),gi(this,tr,"m",t).call(this)},gi(this,er,"f")-gi(this,ir,"f")))};class Nr{static beep(){if(!this.allowBeep)return;if(!this.beepSoundSource)return;let t,e=Date.now();if(!(e-gi(this,lr,"f",dr)<100)){if(mi(this,lr,e,0,dr),gi(this,lr,"f",hr).size&&(t=gi(this,lr,"f",hr).values().next().value,this.beepSoundSource==t.src?(gi(this,lr,"f",hr).delete(t),t.play()):t=null),!t)if(gi(this,lr,"f",cr).size<16){t=new Audio(this.beepSoundSource);let e=null,i=()=>{t.removeEventListener("loadedmetadata",i),t.play(),e=setTimeout(()=>{gi(this,lr,"f",cr).delete(t)},2e3*t.duration)};t.addEventListener("loadedmetadata",i),t.addEventListener("ended",()=>{null!=e&&(clearTimeout(e),e=null),t.pause(),t.currentTime=0,gi(this,lr,"f",cr).delete(t),gi(this,lr,"f",hr).add(t)})}else gi(this,lr,"f",ur)||(mi(this,lr,!0,0,ur),console.warn("The requested audio tracks exceed 16 and will not be played."));t&&gi(this,lr,"f",cr).add(t)}}static vibrate(){if(this.allowVibrate){if(!navigator||!navigator.vibrate)throw new Error("Not supported.");navigator.vibrate(Nr.vibrateDuration)}}}lr=Nr,hr={value:new Set},cr={value:new Set},dr={value:0},ur={value:!1},Nr.allowBeep=!0,Nr.beepSoundSource="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",Nr.allowVibrate=!0,Nr.vibrateDuration=300;const Br=new Map([[xi.GREY,o.IPF_GRAYSCALED],[xi.RGBA,o.IPF_ABGR_8888]]),jr="function"==typeof BigInt?t=>BigInt(t):t=>t,Vr=(jr("0x00"),jr("0xFFFFFFFFFFFFFFFF"),jr("0xFE3BFFFF"),jr("0x003007FF")),Ur=(jr("0x0003F800"),jr("0x1"),jr("0x2"),jr("0x4"),jr("0x8"),jr("0x10"),jr("0x20"),jr("0x40"),jr("0x80"),jr("0x100"),jr("0x200"),jr("0x400"),jr("0x800"),jr("0x1000"),jr("0x2000"),jr("0x4000"),jr("0x8000"),jr("0x10000"),jr("0x20000"),jr("0x00040000"),jr("0x01000000"),jr("0x02000000"),jr("0x04000000")),Gr=jr("0x08000000");jr("0x10000000"),jr("0x20000000"),jr("0x40000000"),jr("0x00080000"),jr("0x80000000"),jr("0x100000"),jr("0x200000"),jr("0x400000"),jr("0x800000"),jr("0x1000000000"),jr("0x3F0000000000000"),jr("0x100000000"),jr("0x10000000000000"),jr("0x20000000000000"),jr("0x40000000000000"),jr("0x80000000000000"),jr("0x100000000000000"),jr("0x200000000000000"),jr("0x200000000"),jr("0x400000000"),jr("0x800000000"),jr("0xC00000000"),jr("0x2000000000"),jr("0x4000000000");class Wr extends ${static set _onLog(t){mi(Wr,gr,t,0,mr),Qs._onLog=t,kr._onLog=t}static get _onLog(){return gi(Wr,gr,"f",mr)}static async detectEnvironment(){return await(async()=>({wasm:pi,worker:_i,getUserMedia:vi,camera:await yi(),browser:ui.browser,version:ui.version,OS:ui.OS}))()}static async testCameraAccess(){const t=await Qs.testCameraAccess();return t.ok?{ok:!0,message:"Successfully accessed the camera."}:"InsecureContext"===t.errorName?{ok:!1,message:"Insecure context."}:"OverconstrainedError"===t.errorName||"NotFoundError"===t.errorName?{ok:!1,message:"No camera detected."}:"NotAllowedError"===t.errorName?{ok:!1,message:"No permission to access camera."}:"AbortError"===t.errorName?{ok:!1,message:"Some problem occurred which prevented the device from being used."}:"NotReadableError"===t.errorName?{ok:!1,message:"A hardware error occurred."}:"SecurityError"===t.errorName?{ok:!1,message:"User media support is disabled."}:{ok:!1,message:t.errorMessage}}static async createInstance(t){var e,i;if(t&&!(t instanceof Ks))throw new TypeError("Invalid view.");if(!Wr._isRTU&&(null===(e=Dt.license)||void 0===e?void 0:e.LicenseManager)){if(!(null===(i=Dt.license)||void 0===i?void 0:i.LicenseManager.bCallInitLicense))throw new Error("License is not set.");await Pt.loadWasm(),await Dt.license.dynamsoft()}const n=new Wr(t);return Wr.onWarning&&(location&&"file:"===location.protocol?setTimeout(()=>{Wr.onWarning&&Wr.onWarning({id:1,message:"The page is opened over file:// and Dynamsoft Camera Enhancer may not work properly. Please open the page via https://."})},0):!1!==window.isSecureContext&&navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia||setTimeout(()=>{Wr.onWarning&&Wr.onWarning({id:2,message:"Dynamsoft Camera Enhancer may not work properly in a non-secure context. Please open the page via https://."})},0)),n}get isEnableMirroring(){return this._isEnableMirroring}get video(){return this.cameraManager.getVideoEl()}set videoSrc(t){if(!this.cameraManager)throw new Error("Camera manager is null.");this.cameraView&&(this.cameraView._hideDefaultSelection=!0),this.cameraManager.videoSrc=t}get videoSrc(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.videoSrc}set ifSaveLastUsedCamera(t){if(!this.cameraManager)throw new Error("Camera manager is null.");this.cameraManager.ifSaveLastUsedCamera=t}get ifSaveLastUsedCamera(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.ifSaveLastUsedCamera}set ifSkipCameraInspection(t){if(!this.cameraManager)throw new Error("Camera manager is null.");this.cameraManager.ifSkipCameraInspection=t}get ifSkipCameraInspection(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.ifSkipCameraInspection}set cameraOpenTimeout(t){if(!this.cameraManager)throw new Error("Camera manager is null.");this.cameraManager.cameraOpenTimeout=t}get cameraOpenTimeout(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.cameraOpenTimeout}set singleFrameMode(t){if(!["disabled","image","camera"].includes(t))throw new Error("Invalid value.");if(this.isOpen())throw new Error("It is not allowed to change `singleFrameMode` when the camera is open.");mi(this,yr,t)}get singleFrameMode(){return gi(this,yr,"f")}get _isFetchingStarted(){return gi(this,br,"f")}get disposed(){return gi(this,Ar,"f")}constructor(t){if(super(),fr.add(this),pr.set(this,"closed"),_r.set(this,void 0),vr.set(this,void 0),this._isEnableMirroring=!1,this.isTorchOn=void 0,yr.set(this,void 0),this._onCameraSelChange=async()=>{this.isOpen()&&this.cameraView&&!this.cameraView.disposed&&await this.selectCamera(this.cameraView._selCam.value)},this._onResolutionSelChange=async()=>{if(!this.isOpen())return;if(!this.cameraView||this.cameraView.disposed)return;let t,e;if(this.cameraView._selRsl&&-1!=this.cameraView._selRsl.selectedIndex){let i=this.cameraView._selRsl.options[this.cameraView._selRsl.selectedIndex];t=parseInt(i.getAttribute("data-width")),e=parseInt(i.getAttribute("data-height"))}await this.setResolution({width:t,height:e})},this._onCloseBtnClick=async()=>{this.isOpen()&&this.cameraView&&!this.cameraView.disposed&&this.close()},wr.set(this,(t,e,i,n)=>{const s=Date.now(),r={sx:n.x,sy:n.y,sWidth:n.width,sHeight:n.height,dWidth:n.width,dHeight:n.height},a=Math.max(r.dWidth,r.dHeight);if(this.canvasSizeLimit&&a>this.canvasSizeLimit){const t=this.canvasSizeLimit/a;r.dWidth>r.dHeight?(r.dWidth=this.canvasSizeLimit,r.dHeight=Math.round(r.dHeight*t)):(r.dWidth=Math.round(r.dWidth*t),r.dHeight=this.canvasSizeLimit)}const l=this.cameraManager.imageDataGetter.getImageData(t,r,{pixelFormat:this.getPixelFormat()===o.IPF_GRAYSCALED?xi.GREY:xi.RGBA});let h=null;if(l){const t=Date.now();let a;a=l.pixelFormat===xi.GREY?l.width:4*l.width;let o=!0;0===r.sx&&0===r.sy&&r.sWidth===e&&r.sHeight===i&&(o=!1),h={bytes:l.data,width:l.width,height:l.height,stride:a,format:Br.get(l.pixelFormat),tag:{imageId:this._imageId==Number.MAX_VALUE?this._imageId=0:++this._imageId,type:lt.ITT_FILE_IMAGE,isCropped:o,cropRegion:{left:n.x,top:n.y,right:n.x+n.width,bottom:n.y+n.height,isMeasuredInPercentage:!1},originalWidth:e,originalHeight:i,currentWidth:l.width,currentHeight:l.height,timeSpent:t-s,timeStamp:t},toCanvas:gi(this,Cr,"f"),isDCEFrame:!0}}return h}),this._onSingleFrameAcquired=t=>{let e;e=this.cameraView?this.cameraView.getConvertedRegion():on.convert(gi(this,Sr,"f"),t.width,t.height,this.cameraView),e||(e={x:0,y:0,width:t.width,height:t.height});const i=gi(this,wr,"f").call(this,t,t.width,t.height,e);gi(this,_r,"f").fire("singleFrameAcquired",[i],{async:!1,copy:!1})},Cr.set(this,function(){if(!(this.bytes instanceof Uint8Array||this.bytes instanceof Uint8ClampedArray))throw new TypeError("Invalid bytes.");if("number"!=typeof this.width||this.width<=0)throw new Error("Invalid width.");if("number"!=typeof this.height||this.height<=0)throw new Error("Invalid height.");const t=document.createElement("canvas");let e;if(t.width=this.width,t.height=this.height,this.format===o.IPF_GRAYSCALED){e=new Uint8ClampedArray(this.width*this.height*4);for(let t=0;t<e.length;t+=4)e[t]=this.bytes[t/4],e[t+1]=this.bytes[t/4],e[t+2]=this.bytes[t/4],e[t+3]=255}else e=new Uint8ClampedArray(this.bytes.buffer);return t.getContext("2d").putImageData(new ImageData(e,this.width,this.height),0,0),t}),Er.set(this,void 0),Sr.set(this,{left:0,right:100,top:0,bottom:100,isMeasuredInPercentage:!0}),Tr.set(this,o.IPF_ABGR_8888),br.set(this,!1),this._imageId=-1,Ir.set(this,void 0),this.fetchInterval=0,xr.set(this,{enhancedFocus:!1,autoZoom:!1,tapToFocus:!1}),Rr.set(this,{minValue:1,maxValue:999,autoFocusFrameArray:[],autoFocusFrameLimit:[5,3],autoZoomDetectionArea:.5,autoZoomTargetBorder:.9,autoZoomIdealArea:[0,.05],autoZoomInFrameArray:[],autoZoomInFrameLimit:[5,3],autoZoomInMaxTimes:5,autoZoomInMinStep:Math.pow(10,.2),autoZoomInIdealModuleSize:6,autoZoomOutFrameCount:0,autoZoomOutFrameLimit:3,autoZoomOutStepRate:1/3,autoZoomOutStepRate_2:.05,autoZoomOutMinStep:2,frameArrayInIdealZoom:[],frameLimitInIdealZoom:[5,3]}),Or.set(this,void 0),Ar.set(this,!1),this.isCameraEnhancer=!0,this._taskid4AutoTorch=null,this._delay4AutoTorch=250,this.grayThreshold4AutoTorch=20,this.maxDarkCount4AutoTroch=3,t&&!(t instanceof Ks))throw new TypeError("Invalid view.");mi(this,_r,new cn),this.cameraManager=new Qs,this._imageDataGetter=this.cameraManager.imageDataGetter,this.cameraManager.updateVideoElWhenSoftwareScaled=()=>{if(!this.video)return;const t=this.cameraManager.getSoftwareScale();if(t<1)throw new RangeError("Invalid scale value.");this.cameraView&&!this.cameraView.disposed?(this.video.style.transform=1===t?"":`scale(${t})`,this.cameraView._updateVideoContainer()):this.video.style.transform=1===t?"":`scale(${t})`},["iPhone","iPad","Android","HarmonyOS"].includes(ui.OS)?this.cameraManager.setResolution(1280,720):this.cameraManager.setResolution(1920,1080),navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia?this.singleFrameMode="disabled":this.singleFrameMode="image",t&&(this.setCameraView(t),t.cameraEnhancer=this),this._on("before:camera:change",()=>{gi(this,Or,"f").stopCharging();const t=this.cameraView;t&&!t.disposed&&(t._startLoading(),t.clearAllInnerDrawingItems())}),this._on("camera:changed",()=>{this.clearBuffer()}),this._on("before:resolution:change",()=>{const t=this.cameraView;t&&!t.disposed&&(t._startLoading(),t.clearAllInnerDrawingItems())}),this._on("resolution:changed",()=>{this.clearBuffer(),t.eventHandler.fire("content:updated",null,{async:!1})}),this._on("paused",()=>{gi(this,Or,"f").stopCharging();const t=this.cameraView;t&&t.disposed}),this._on("resumed",()=>{const t=this.cameraView;t&&t.disposed}),this._on("tapfocus",()=>{gi(this,xr,"f").tapToFocus&&gi(this,Or,"f").startCharging()}),this._intermediateResultReceiver={},this._intermediateResultReceiver.onTaskResultsReceived=async(t,e)=>{var i,n,s,r;const a=t.intermediateResultUnits;if(gi(this,fr,"m",Dr).call(this)||!this.isOpen()||this.isPaused()||a[0]&&!a[0].originalImageTag)return;Wr._onLog&&(Wr._onLog("intermediateResultUnits:"),Wr._onLog(a));let o=!1,l=!1;for(let t of a){if(t.unitType===ut.IRUT_DECODED_BARCODES&&t.decodedBarcodes.length){o=!0;break}t.unitType===ut.IRUT_LOCALIZED_BARCODES&&t.localizedBarcodes.length&&(l=!0)}if(Wr._onLog&&(Wr._onLog("hasLocalizedBarcodes:"),Wr._onLog(l)),gi(this,xr,"f").autoZoom||gi(this,xr,"f").enhancedFocus)if(o)gi(this,Rr,"f").autoZoomInFrameArray.length=0,gi(this,Rr,"f").autoZoomOutFrameCount=0,gi(this,Rr,"f").frameArrayInIdealZoom.length=0,gi(this,Rr,"f").autoFocusFrameArray.length=0;else{const e=async t=>{await this.setZoom(t),gi(this,xr,"f").autoZoom&&gi(this,Or,"f").startCharging()},o=async t=>{await this.setFocus(t),gi(this,xr,"f").enhancedFocus&&gi(this,Or,"f").startCharging()};if(l){const l=a[0].originalImageTag,h=(null===(i=l.cropRegion)||void 0===i?void 0:i.left)||0,c=(null===(n=l.cropRegion)||void 0===n?void 0:n.top)||0,d=(null===(s=l.cropRegion)||void 0===s?void 0:s.right)?l.cropRegion.right-h:l.originalWidth,u=(null===(r=l.cropRegion)||void 0===r?void 0:r.bottom)?l.cropRegion.bottom-c:l.originalHeight,f=l.currentWidth,g=l.currentHeight;let m;{let t,e,i,n,s;{const t=this.video.videoWidth*(1-gi(this,Rr,"f").autoZoomDetectionArea)/2,e=this.video.videoWidth*(1+gi(this,Rr,"f").autoZoomDetectionArea)/2,i=e,n=t,r=this.video.videoHeight*(1-gi(this,Rr,"f").autoZoomDetectionArea)/2,a=r,o=this.video.videoHeight*(1+gi(this,Rr,"f").autoZoomDetectionArea)/2;s=[{x:t,y:r},{x:e,y:a},{x:i,y:o},{x:n,y:o}]}Wr._onLog&&(Wr._onLog("detectionArea:"),Wr._onLog(s));const r=[];{const t=(t,e)=>{const i=(t,e)=>{if(!t&&!e)throw new Error("Invalid arguments.");return function(t,e,i){let n=!1;const s=t.length;if(s<=2)return!1;for(let r=0;r<s;r++){const a=t[r],o=t[(r+1)%s];if(dn(a,o,{x:e,y:i}))return!0;un(a.y-i)>0!=un(o.y-i)>0&&un(e-(i-a.y)*(a.x-o.x)/(a.y-o.y)-a.x)<0&&(n=!n)}return n}(e,t.x,t.y)},n=(t,e)=>!!(fn([t[0],t[1]],[t[2],t[3]],[e[0].x,e[0].y],[e[1].x,e[1].y])||fn([t[0],t[1]],[t[2],t[3]],[e[1].x,e[1].y],[e[2].x,e[2].y])||fn([t[0],t[1]],[t[2],t[3]],[e[2].x,e[2].y],[e[3].x,e[3].y])||fn([t[0],t[1]],[t[2],t[3]],[e[3].x,e[3].y],[e[0].x,e[0].y]));return!!(i({x:t[0].x,y:t[0].y},e)||i({x:t[1].x,y:t[1].y},e)||i({x:t[2].x,y:t[2].y},e)||i({x:t[3].x,y:t[3].y},e))||!!(i({x:e[0].x,y:e[0].y},t)||i({x:e[1].x,y:e[1].y},t)||i({x:e[2].x,y:e[2].y},t)||i({x:e[3].x,y:e[3].y},t))||!!(n([e[0].x,e[0].y,e[1].x,e[1].y],t)||n([e[1].x,e[1].y,e[2].x,e[2].y],t)||n([e[2].x,e[2].y,e[3].x,e[3].y],t)||n([e[3].x,e[3].y,e[0].x,e[0].y],t))};for(let e of a)if(e.unitType===ut.IRUT_LOCALIZED_BARCODES)for(let i of e.localizedBarcodes){if(!i)continue;const e=i.location.points;e.forEach(t=>{Ks._transformCoordinates(t,h,c,d,u,f,g)}),t(s,e)&&r.push(i)}if(Wr._debug&&this.cameraView){const t=this.__layer||(this.__layer=this.cameraView._createDrawingLayer(99));t.clearDrawingItems();const e=this.__styleId2||(this.__styleId2=Ys.createDrawingStyle({strokeStyle:"red"}));for(let i of a)if(i.unitType===ut.IRUT_LOCALIZED_BARCODES)for(let n of i.localizedBarcodes){if(!n)continue;const i=n.location.points,s=new qi({points:i},e);t.addDrawingItems([s])}}}if(Wr._onLog&&(Wr._onLog("intersectedResults:"),Wr._onLog(r)),!r.length)return;let o;if(r.length){let t=r.filter(t=>t.possibleFormats==Ur||t.possibleFormats==Gr);if(t.length||(t=r.filter(t=>t.possibleFormats==Vr),t.length||(t=r)),t.length){const e=t=>{const e=t.location.points,i=(e[0].x+e[1].x+e[2].x+e[3].x)/4,n=(e[0].y+e[1].y+e[2].y+e[3].y)/4;return(i-f/2)*(i-f/2)+(n-g/2)*(n-g/2)};o=t[0];let i=e(o);if(1!=t.length)for(let n=1;n<t.length;n++){const s=e(t[n]);(t[n].confidence>1.1*o.confidence||t[n].confidence>.9*o.confidence&&s<i)&&(o=t[n],i=s)}}}if(Wr._onLog&&(Wr._onLog("highPriorityResult:"),Wr._onLog(o)),o){const s=o.location.points;t=Math.min(s[0].x,s[1].x,s[2].x,s[3].x),e=Math.max(s[0].x,s[1].x,s[2].x,s[3].x),i=Math.min(s[0].y,s[1].y,s[2].y,s[3].y),n=Math.max(s[0].y,s[1].y,s[2].y,s[3].y),m={points:[{x:t,y:i},{x:e,y:i},{x:e,y:n},{x:t,y:n}],result:o}}}if(Wr._onLog&&(Wr._onLog("boundingRect:"),Wr._onLog(m)),!m)return;if(Wr._debug&&this.cameraView&&(null==m?void 0:m.points)){const t=this.__layer||(this.__layer=this.cameraView._createDrawingLayer(99)),e=this.__styleId1||(this.__styleId1=Ys.createDrawingStyle({strokeStyle:"blue"})),i=new qi({points:m.points},e);t.addDrawingItems([i])}if(gi(this,Rr,"f").autoZoomOutFrameCount=0,gi(this,xr,"f").autoZoom){const i=gi(this,Rr,"f").autoZoomIdealArea[1];let n=(1-gi(this,Rr,"f").autoZoomTargetBorder)/2;const s=m.points[0].x/d,r=(d-m.points[2].x)/d,a=m.points[0].y/u,l=(u-m.points[2].y)/u;if(s>i&&r>i&&a>i&&l>i&&m.result.moduleSize<gi(this,Rr,"f").autoZoomInIdealModuleSize){if(gi(this,Rr,"f").autoZoomInFrameArray.push(!0),gi(this,Rr,"f").autoZoomInFrameArray.splice(0,gi(this,Rr,"f").autoZoomInFrameArray.length-gi(this,Rr,"f").autoZoomInFrameLimit[0]),gi(this,Rr,"f").frameArrayInIdealZoom.length=0,gi(this,xr,"f").enhancedFocus&&o({mode:"continuous"}).catch(()=>{}),gi(this,Rr,"f").autoZoomInFrameArray.filter(t=>!0===t).length>=gi(this,Rr,"f").autoZoomInFrameLimit[1]){gi(this,Rr,"f").autoZoomInFrameArray.length=0;const i=[(.5-n)/(.5-s),(.5-n)/(.5-r),(.5-n)/(.5-a),(.5-n)/(.5-l)].filter(t=>t>0),o=Math.min(...i,gi(this,Rr,"f").autoZoomInIdealModuleSize/m.result.moduleSize),h=this.getZoomSettings().factor;let c=Math.max(Math.pow(h*o,1/gi(this,Rr,"f").autoZoomInMaxTimes),gi(this,Rr,"f").autoZoomInMinStep);c=Math.min(c,o);let d=h*c;d=Math.max(gi(this,Rr,"f").minValue,d),d=Math.min(gi(this,Rr,"f").maxValue,d);try{await e({factor:d})}catch(t){const e=t.message||t;console.warn(e)}this.clearBuffer()}}else if(gi(this,Rr,"f").autoZoomInFrameArray.length=0,gi(this,Rr,"f").frameArrayInIdealZoom.push(!0),gi(this,Rr,"f").frameArrayInIdealZoom.splice(0,gi(this,Rr,"f").frameArrayInIdealZoom.length-gi(this,Rr,"f").frameLimitInIdealZoom[0]),gi(this,Rr,"f").frameArrayInIdealZoom.filter(t=>!0===t).length>=gi(this,Rr,"f").frameLimitInIdealZoom[1]&&(gi(this,Rr,"f").frameArrayInIdealZoom.length=0,gi(this,xr,"f").enhancedFocus)){const e=m.points;try{await o({mode:"manual",area:{centerPoint:{x:(e[0].x+e[2].x)/2+"px",y:(e[0].y+e[2].y)/2+"px"},width:e[2].x-e[0].x+"px",height:e[2].y-e[0].y+"px"}})}catch(t){const e=t.message||t;console.warn(e)}this.clearBuffer()}}if(!gi(this,xr,"f").autoZoom&&gi(this,xr,"f").enhancedFocus&&(gi(this,Rr,"f").autoFocusFrameArray.push(!0),gi(this,Rr,"f").autoFocusFrameArray.splice(0,gi(this,Rr,"f").autoFocusFrameArray.length-gi(this,Rr,"f").autoFocusFrameLimit[0]),gi(this,Rr,"f").autoFocusFrameArray.filter(t=>!0===t).length>=gi(this,Rr,"f").autoFocusFrameLimit[1])){gi(this,Rr,"f").autoFocusFrameArray.length=0;try{const t=m.points;await o({mode:"manual",area:{centerPoint:{x:(t[0].x+t[2].x)/2+"px",y:(t[0].y+t[2].y)/2+"px"},width:t[2].x-t[0].x+"px",height:t[2].y-t[0].y+"px"}})}catch(t){const e=t.message||t;console.warn(e)}this.clearBuffer()}}else{if(gi(this,xr,"f").autoZoom){if(gi(this,Rr,"f").autoZoomInFrameArray.push(!1),gi(this,Rr,"f").autoZoomInFrameArray.splice(0,gi(this,Rr,"f").autoZoomInFrameArray.length-gi(this,Rr,"f").autoZoomInFrameLimit[0]),gi(this,Rr,"f").autoZoomOutFrameCount++,gi(this,Rr,"f").frameArrayInIdealZoom.push(!1),gi(this,Rr,"f").frameArrayInIdealZoom.splice(0,gi(this,Rr,"f").frameArrayInIdealZoom.length-gi(this,Rr,"f").frameLimitInIdealZoom[0]),gi(this,Rr,"f").autoZoomOutFrameCount>=gi(this,Rr,"f").autoZoomOutFrameLimit){gi(this,Rr,"f").autoZoomOutFrameCount=0;const i=this.getZoomSettings().factor;let n=i-Math.max((i-1)*gi(this,Rr,"f").autoZoomOutStepRate,gi(this,Rr,"f").autoZoomOutMinStep);n=Math.max(gi(this,Rr,"f").minValue,n),n=Math.min(gi(this,Rr,"f").maxValue,n);try{await e({factor:n})}catch(t){const e=t.message||t;console.warn(e)}this.clearBuffer()}gi(this,xr,"f").enhancedFocus&&o({mode:"continuous"}).catch(()=>{})}!gi(this,xr,"f").autoZoom&&gi(this,xr,"f").enhancedFocus&&(gi(this,Rr,"f").autoFocusFrameArray.length=0,o({mode:"continuous"}).catch(()=>{}))}}},mi(this,Or,new kr(1e4)),this.getColourChannelUsageType()===a.CCUT_AUTO&&this.setColourChannelUsageType(a.CCUT_Y_CHANNEL_ONLY),this.setPixelFormat(o.IPF_GRAYSCALED)}setCameraView(t){if(!(t instanceof Ks))throw new TypeError("Invalid view.");if(t.disposed)throw new Error("The camera view has been disposed.");if(this.isOpen())throw new Error("It is not allowed to change camera view when the camera is open.");this.releaseCameraView(),t._singleFrameMode=this.singleFrameMode,t._onSingleFrameAcquired=this._onSingleFrameAcquired,this.videoSrc&&(this.cameraView._hideDefaultSelection=!0),gi(this,fr,"m",Dr).call(this)||this.cameraManager.setVideoEl(t.getVideoElement()),this.cameraView=t,this.addListenerToView()}getCameraView(){return this.cameraView}releaseCameraView(){this.cameraView&&(this.removeListenerFromView(),this.cameraView.disposed||(this.cameraView._singleFrameMode="disabled",this.cameraView._onSingleFrameAcquired=null,this.cameraView._hideDefaultSelection=!1),this.cameraManager.releaseVideoEl(),this.cameraView=null)}addListenerToView(){if(!this.cameraView)return;if(this.cameraView.disposed)throw new Error("'cameraView' has been disposed.");const t=this.cameraView;gi(this,fr,"m",Dr).call(this)||this.videoSrc||(t._innerComponent&&(this.cameraManager.tapFocusEventBoundEl=t._innerComponent),t._selCam&&t._selCam.addEventListener("change",this._onCameraSelChange),t._selRsl&&t._selRsl.addEventListener("change",this._onResolutionSelChange)),t._btnClose&&t._btnClose.addEventListener("click",this._onCloseBtnClick)}removeListenerFromView(){if(!this.cameraView||this.cameraView.disposed)return;const t=this.cameraView;this.cameraManager.tapFocusEventBoundEl=null,t._selCam&&t._selCam.removeEventListener("change",this._onCameraSelChange),t._selRsl&&t._selRsl.removeEventListener("change",this._onResolutionSelChange),t._btnClose&&t._btnClose.removeEventListener("click",this._onCloseBtnClick)}getCameraState(){return gi(this,fr,"m",Dr).call(this)?gi(this,pr,"f"):new Map([["closed","closed"],["opening","opening"],["opened","open"]]).get(this.cameraManager.state)}isOpen(){return"open"===this.getCameraState()}getVideoEl(){return this.video}async open(){var t;const e=this.cameraView;if(null==e?void 0:e.disposed)throw new Error("'cameraView' has been disposed.");e&&(e._singleFrameMode=this.singleFrameMode,gi(this,fr,"m",Dr).call(this)?e._clickIptSingleFrameMode():(this.cameraManager.setVideoEl(e.getVideoElement()),e._startLoading()));let i={width:0,height:0,deviceId:""};if(gi(this,fr,"m",Dr).call(this));else{try{await this.cameraManager.open(),mi(this,vr,this.cameraView.getVisibleRegionOfVideo({inPixels:!0}))}catch(t){throw e&&e._stopLoading(),"NotFoundError"===t.name?new Error("No Camera Found: No camera devices were detected. Please ensure a camera is connected and recognized by your system."):"NotAllowedError"===t.name?new Error("No Camera Access: Camera access is blocked. Please check your browser settings or grant permission to use the camera."):t}const n=!this.cameraManager.videoSrc&&!!(null===(t=this.cameraManager.getCameraCapabilities())||void 0===t?void 0:t.torch);let s,r=e.getUIElement();if(r=r.shadowRoot||r,s=r.querySelector(".dce-macro-use-mobile-native-like-ui")){let t=r.elTorchAuto=r.querySelector(".dce-mn-torch-auto"),e=r.elTorchOn=r.querySelector(".dce-mn-torch-on"),i=r.elTorchOff=r.querySelector(".dce-mn-torch-off");t&&(t.style.display=null==this.isTorchOn?"":"none",n||(t.style.filter="invert(1)",t.style.cursor="not-allowed")),e&&(e.style.display=1==this.isTorchOn?"":"none"),i&&(i.style.display=0==this.isTorchOn?"":"none");let a=r.elBeepOn=r.querySelector(".dce-mn-beep-on"),o=r.elBeepOff=r.querySelector(".dce-mn-beep-off");a&&(a.style.display=Nr.allowBeep?"":"none"),o&&(o.style.display=Nr.allowBeep?"none":"");let l=r.elVibrateOn=r.querySelector(".dce-mn-vibrate-on"),h=r.elVibrateOff=r.querySelector(".dce-mn-vibrate-off");l&&(l.style.display=Nr.allowVibrate?"":"none"),h&&(h.style.display=Nr.allowVibrate?"none":""),r.elResolutionBox=r.querySelector(".dce-mn-resolution-box");let c,d=r.elZoom=r.querySelector(".dce-mn-zoom");d&&(d.style.display="none",c=r.elZoomSpan=d.querySelector("span"));let u=r.elToast=r.querySelector(".dce-mn-toast"),f=r.elCameraClose=r.querySelector(".dce-mn-camera-close"),g=r.elTakePhoto=r.querySelector(".dce-mn-take-photo"),m=r.elCameraSwitch=r.querySelector(".dce-mn-camera-switch"),p=r.elCameraAndResolutionSettings=r.querySelector(".dce-mn-camera-and-resolution-settings");p&&(p.style.display="none");const _=r.dceMnFs={},v=()=>{this.turnOnTorch()};null==t||t.addEventListener("pointerdown",v);const y=()=>{this.turnOffTorch()};null==e||e.addEventListener("pointerdown",y);const w=()=>{this.turnAutoTorch()};null==i||i.addEventListener("pointerdown",w);const C=()=>{Nr.allowBeep=!Nr.allowBeep,a&&(a.style.display=Nr.allowBeep?"":"none"),o&&(o.style.display=Nr.allowBeep?"none":"")};for(let t of[o,a])null==t||t.addEventListener("pointerdown",C);const E=()=>{Nr.allowVibrate=!Nr.allowVibrate,l&&(l.style.display=Nr.allowVibrate?"":"none"),h&&(h.style.display=Nr.allowVibrate?"none":"")};for(let t of[h,l])null==t||t.addEventListener("pointerdown",E);const S=async t=>{let e,i=t.target;if(e=i.closest(".dce-mn-camera-option"))this.selectCamera(e.getAttribute("data-davice-id"));else if(e=i.closest(".dce-mn-resolution-option")){let t,i=parseInt(e.getAttribute("data-width")),n=parseInt(e.getAttribute("data-height")),s=await this.setResolution({width:i,height:n});{let e=Math.max(s.width,s.height),i=Math.min(s.width,s.height);t=i<=1080?i+"P":e<3e3?"2K":Math.round(e/1e3)+"K"}t!=e.textContent&&I(`Fallback to ${t}`)}else i.closest(".dce-mn-camera-and-resolution-settings")||(i.closest(".dce-mn-resolution-box")?p&&(p.style.display=p.style.display?"":"none"):p&&""===p.style.display&&(p.style.display="none"))};r.addEventListener("click",S);let T=null;_.funcInfoZoomChange=(t,e=3e3)=>{d&&c&&(c.textContent=t.toFixed(1),d.style.display="",null!=T&&(clearTimeout(T),T=null),T=setTimeout(()=>{d.style.display="none",T=null},e))};let b=null,I=_.funcShowToast=(t,e=3e3)=>{u&&(u.textContent=t,u.style.display="",null!=b&&(clearTimeout(b),b=null),b=setTimeout(()=>{u.style.display="none",b=null},e))};const x=()=>{this.close()};null==f||f.addEventListener("click",x);const R=()=>{};null==g||g.addEventListener("pointerdown",R);const O=()=>{var t,e;let i,n=this.getVideoSettings(),s=n.video.facingMode,r=null===(e=null===(t=this.cameraManager.getCamera())||void 0===t?void 0:t.label)||void 0===e?void 0:e.toLowerCase(),a=null==r?void 0:r.indexOf("front");-1===a&&(a=null==r?void 0:r.indexOf("前"));let o=null==r?void 0:r.indexOf("back");if(-1===o&&(o=null==r?void 0:r.indexOf("后")),"number"==typeof a&&-1!==a?i=!0:"number"==typeof o&&-1!==o&&(i=!1),void 0===i&&(i="user"===((null==s?void 0:s.ideal)||(null==s?void 0:s.exact)||s)),!i){let t=this.cameraView.getUIElement();t=t.shadowRoot||t,t.elTorchAuto&&(t.elTorchAuto.style.display="none"),t.elTorchOn&&(t.elTorchOn.style.display="none"),t.elTorchOff&&(t.elTorchOff.style.display="")}n.video.facingMode={ideal:i?"environment":"user"},delete n.video.deviceId,this.updateVideoSettings(n)};null==m||m.addEventListener("pointerdown",O);let A=-1/0,D=1;const M=t=>{let e=Date.now();e-A>1e3&&(D=this.getZoomSettings().factor),D-=t.deltaY/200,D>20&&(D=20),D<1&&(D=1),this.setZoom({factor:D}),A=e};s.addEventListener("wheel",M);const L=new Map;let F=!1;const P=async t=>{var e;for(t.touches.length>=2&&"touchmove"==t.type&&t.preventDefault();t.changedTouches.length>1&&2==t.touches.length;){let i=t.touches[0],n=t.touches[1],s=L.get(i.identifier),r=L.get(n.identifier);if(!s||!r)break;let a=Math.pow(Math.pow(s.x-r.x,2)+Math.pow(s.y-r.y,2),.5),o=Math.pow(Math.pow(i.clientX-n.clientX,2)+Math.pow(i.clientY-n.clientY,2),.5),l=Date.now();if(F||l-A<100)return;l-A>1e3&&(D=this.getZoomSettings().factor),D*=o/a,D>20&&(D=20),D<1&&(D=1);let h=!1;"safari"==(null===(e=null==ui?void 0:ui.browser)||void 0===e?void 0:e.toLocaleLowerCase())&&(o/a>1&&D<2?(D=2,h=!0):o/a<1&&D<2&&(D=1,h=!0)),F=!0,h&&I("zooming..."),await this.setZoom({factor:D}),h&&(u.textContent=""),F=!1,A=Date.now();break}L.clear();for(let e of t.touches)L.set(e.identifier,{x:e.clientX,y:e.clientY})};r.addEventListener("touchstart",P),r.addEventListener("touchmove",P),r.addEventListener("touchend",P),r.addEventListener("touchcancel",P),_.unbind=()=>{null==t||t.removeEventListener("pointerdown",v),null==e||e.removeEventListener("pointerdown",y),null==i||i.removeEventListener("pointerdown",w);for(let t of[o,a])null==t||t.removeEventListener("pointerdown",C);for(let t of[h,l])null==t||t.removeEventListener("pointerdown",E);r.removeEventListener("click",S),null==f||f.removeEventListener("click",x),null==g||g.removeEventListener("pointerdown",R),null==m||m.removeEventListener("pointerdown",O),s.removeEventListener("wheel",M),r.removeEventListener("touchstart",P),r.removeEventListener("touchmove",P),r.removeEventListener("touchend",P),r.removeEventListener("touchcancel",P),delete r.dceMnFs,s.style.display="none"},s.style.display="",t&&null==this.isTorchOn&&setTimeout(()=>{this.turnAutoTorch(1e3)},0)}this.isTorchOn&&this.turnOnTorch().catch(()=>{});const a=this.getResolution();i.width=a.width,i.height=a.height,i.deviceId=this.getSelectedCamera().deviceId}return mi(this,pr,"open"),e&&(e._innerComponent.style.display="",gi(this,fr,"m",Dr).call(this)||(e._stopLoading(),e._renderCamerasInfo(this.getSelectedCamera(),this.cameraManager._arrCameras),e._renderResolutionInfo({width:i.width,height:i.height}),e.eventHandler.fire("content:updated",null,{async:!1}),e.eventHandler.fire("videoEl:resized",null,{async:!1}))),this.toggleMirroring(this._isEnableMirroring),gi(this,_r,"f").fire("opened",null,{target:this,async:!1}),this.cameraManager._zoomPreSetting&&(await this.setZoom(this.cameraManager._zoomPreSetting),this.cameraManager._zoomPreSetting=null),i}close(){var t;const e=this.cameraView;if(null==e?void 0:e.disposed)throw new Error("'cameraView' has been disposed.");if(this.stopFetching(),this.clearBuffer(),gi(this,fr,"m",Dr).call(this));else{this.cameraManager.close();let i=e.getUIElement();i=i.shadowRoot||i,i.querySelector(".dce-macro-use-mobile-native-like-ui")&&(null===(t=i.dceMnFs)||void 0===t||t.unbind())}mi(this,pr,"closed"),gi(this,Or,"f").stopCharging(),e&&(e._innerComponent.style.display="none",gi(this,fr,"m",Dr).call(this)&&e._innerComponent.removeElement("content"),e._stopLoading()),gi(this,_r,"f").fire("closed",null,{target:this,async:!1})}pause(){if(gi(this,fr,"m",Dr).call(this))throw new Error("'pause()' is invalid in 'singleFrameMode'.");this.cameraManager.pause()}isPaused(){var t;return!gi(this,fr,"m",Dr).call(this)&&!0===(null===(t=this.video)||void 0===t?void 0:t.paused)}async resume(){if(gi(this,fr,"m",Dr).call(this))throw new Error("'resume()' is invalid in 'singleFrameMode'.");await this.cameraManager.resume()}async selectCamera(t){var e;if(!t)throw new Error("Invalid value.");let i;i="string"==typeof t?t:t.deviceId,await this.cameraManager.setCamera(i),this.isTorchOn=!1;const n=this.getResolution(),s=this.cameraView;if(s&&!s.disposed&&(s._stopLoading(),s._renderCamerasInfo(this.getSelectedCamera(),this.cameraManager._arrCameras),s._renderResolutionInfo({width:n.width,height:n.height})),this.isOpen()){const t=!!(null===(e=this.cameraManager.getCameraCapabilities())||void 0===e?void 0:e.torch);let i=s.getUIElement();if(i=i.shadowRoot||i,i.querySelector(".dce-macro-use-mobile-native-like-ui")){let e=i.elTorchAuto=i.querySelector(".dce-mn-torch-auto");e&&(t?(e.style.filter="none",e.style.cursor="pointer"):(e.style.filter="invert(1)",e.style.cursor="not-allowed"))}}return this.toggleMirroring(this._isEnableMirroring),{width:n.width,height:n.height,deviceId:this.getSelectedCamera().deviceId}}getSelectedCamera(){return this.cameraManager.getCamera()}async getAllCameras(){return this.cameraManager.getCameras()}async setResolution(t){await this.cameraManager.setResolution(t.width,t.height),this.isTorchOn&&this.turnOnTorch().catch(()=>{});const e=this.getResolution(),i=this.cameraView;return i&&!i.disposed&&(i._stopLoading(),i._renderResolutionInfo({width:e.width,height:e.height})),this.toggleMirroring(this._isEnableMirroring),gi(this,Sr,"f")&&this.setScanRegion(gi(this,Sr,"f")),{width:e.width,height:e.height,deviceId:this.getSelectedCamera().deviceId}}getResolution(){return this.cameraManager.getResolution()}getAvailableResolutions(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.getResolutions()}_on(t,e){["opened","closed","singleframeacquired","frameaddedtobuffer"].includes(t.toLowerCase())?gi(this,_r,"f").on(t,e):this.cameraManager.on(t,e)}_off(t,e){["opened","closed","singleframeacquired","frameaddedtobuffer"].includes(t.toLowerCase())?gi(this,_r,"f").off(t,e):this.cameraManager.off(t,e)}on(t,e){const i=t.toLowerCase(),n=new Map([["cameraopen","opened"],["cameraclose","closed"],["camerachange","camera:changed"],["resolutionchange","resolution:changed"],["played","played"],["singleframeacquired","singleFrameAcquired"],["frameaddedtobuffer","frameAddedToBuffer"]]).get(i);if(!n)throw new Error("Invalid event.");this._on(n,e)}off(t,e){const i=t.toLowerCase(),n=new Map([["cameraopen","opened"],["cameraclose","closed"],["camerachange","camera:changed"],["resolutionchange","resolution:changed"],["played","played"],["singleframeacquired","singleFrameAcquired"],["frameaddedtobuffer","frameAddedToBuffer"]]).get(i);if(!n)throw new Error("Invalid event.");this._off(n,e)}getVideoSettings(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.getMediaStreamConstraints()}async updateVideoSettings(t){var e;await(null===(e=this.cameraManager)||void 0===e?void 0:e.setMediaStreamConstraints(t,!0))}getCapabilities(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.getCameraCapabilities()}getCameraSettings(){return this.cameraManager.getCameraSettings()}async turnOnTorch(){var t,e;if(gi(this,fr,"m",Dr).call(this))throw new Error("'turnOnTorch()' is invalid in 'singleFrameMode'.");try{await(null===(t=this.cameraManager)||void 0===t?void 0:t.turnOnTorch())}catch(t){let i=this.cameraView.getUIElement();throw i=i.shadowRoot||i,null===(e=null==i?void 0:i.dceMnFs)||void 0===e||e.funcShowToast("Torch Not Supported"),t}this.isTorchOn=!0;let i=this.cameraView.getUIElement();i=i.shadowRoot||i,i.elTorchAuto&&(i.elTorchAuto.style.display="none"),i.elTorchOn&&(i.elTorchOn.style.display=""),i.elTorchOff&&(i.elTorchOff.style.display="none")}async turnOffTorch(){var t;if(gi(this,fr,"m",Dr).call(this))throw new Error("'turnOffTorch()' is invalid in 'singleFrameMode'.");await(null===(t=this.cameraManager)||void 0===t?void 0:t.turnOffTorch()),this.isTorchOn=!1;let e=this.cameraView.getUIElement();e=e.shadowRoot||e,e.elTorchAuto&&(e.elTorchAuto.style.display="none"),e.elTorchOn&&(e.elTorchOn.style.display="none"),e.elTorchOff&&(e.elTorchOff.style.display="")}async turnAutoTorch(t=250){var e;const i=this.isOpen()&&!this.cameraManager.videoSrc?this.cameraManager.getCameraCapabilities():{};if(!(null==i?void 0:i.torch)){let t=this.cameraView.getUIElement();return t=t.shadowRoot||t,void(null===(e=null==t?void 0:t.dceMnFs)||void 0===e||e.funcShowToast("Torch Not Supported"))}if(null!=this._taskid4AutoTorch){if(!(t<this._delay4AutoTorch))return;clearInterval(this._taskid4AutoTorch),this._taskid4AutoTorch=null}this._delay4AutoTorch=t;let n=!1,s=0,r=0;const a=async()=>{var t,e,i;if(this.disposed||n||null!=this.isTorchOn||!this.isOpen())return clearInterval(this._taskid4AutoTorch),void(this._taskid4AutoTorch=null);if(this.isPaused())return;if(++r>10&&this._delay4AutoTorch<1e3)return clearInterval(this._taskid4AutoTorch),this._taskid4AutoTorch=null,void this.turnAutoTorch(1e3);let a;try{a=this.fetchImage()}catch(t){}if(!a||!a.width||!a.height)return;let l=0;if(o.IPF_GRAYSCALED===a.format){for(let t=0;t<a.bytes.length;++t)l+=a.bytes[t];l/=a.bytes.length}else{if(o.IPF_ABGR_8888!==a.format)return;for(let t=0;t<a.bytes.length;t+=4)l+=a.bytes[t],l+=a.bytes[t+1],l+=a.bytes[t+2];l/=a.bytes.length/4*3}if(l<this.grayThreshold4AutoTorch){if(++s>=this.maxDarkCount4AutoTroch){null===(t=Wr._onLog)||void 0===t||t.call(Wr,`darkCount ${s}`);try{await this.turnOnTorch(),this.isTorchOn=!0;let t=this.cameraView.getUIElement();t=t.shadowRoot||t,null===(e=null==t?void 0:t.dceMnFs)||void 0===e||e.funcShowToast("Torch Auto On")}catch(t){console.warn(t),n=!0;let e=this.cameraView.getUIElement();e=e.shadowRoot||e,null===(i=null==e?void 0:e.dceMnFs)||void 0===i||i.funcShowToast("Torch Not Supported")}}}else s=0};this._taskid4AutoTorch=setInterval(a,t),this.isTorchOn=void 0,a();let l=this.cameraView.getUIElement();l=l.shadowRoot||l,l.elTorchAuto&&(l.elTorchAuto.style.display=""),l.elTorchOn&&(l.elTorchOn.style.display="none"),l.elTorchOff&&(l.elTorchOff.style.display="none")}async setColorTemperature(t){if(gi(this,fr,"m",Dr).call(this))throw new Error("'setColorTemperature()' is invalid in 'singleFrameMode'.");await this.cameraManager.setColorTemperature(t,!0)}getColorTemperature(){return this.cameraManager.getColorTemperature()}async setExposureCompensation(t){var e;if(gi(this,fr,"m",Dr).call(this))throw new Error("'setExposureCompensation()' is invalid in 'singleFrameMode'.");await(null===(e=this.cameraManager)||void 0===e?void 0:e.setExposureCompensation(t,!0))}getExposureCompensation(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.getExposureCompensation()}async _setZoom(t){var e,i,n;if(gi(this,fr,"m",Dr).call(this))throw new Error("'setZoom()' is invalid in 'singleFrameMode'.");await(null===(e=this.cameraManager)||void 0===e?void 0:e.setZoom(t));{let e=null===(i=this.cameraView)||void 0===i?void 0:i.getUIElement();e=(null==e?void 0:e.shadowRoot)||e,null===(n=null==e?void 0:e.dceMnFs)||void 0===n||n.funcInfoZoomChange(t.factor)}}async setZoom(t){await this._setZoom(t)}getZoomSettings(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.getZoom()}async resetZoom(){var t;if(gi(this,fr,"m",Dr).call(this))throw new Error("'resetZoom()' is invalid in 'singleFrameMode'.");await(null===(t=this.cameraManager)||void 0===t?void 0:t.resetZoom())}async setFrameRate(t){var e;if(gi(this,fr,"m",Dr).call(this))throw new Error("'setFrameRate()' is invalid in 'singleFrameMode'.");await(null===(e=this.cameraManager)||void 0===e?void 0:e.setFrameRate(t,!0))}getFrameRate(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.getFrameRate()}async setFocus(t){var e;if(gi(this,fr,"m",Dr).call(this))throw new Error("'setFocus()' is invalid in 'singleFrameMode'.");await(null===(e=this.cameraManager)||void 0===e?void 0:e.setFocus(t,!0))}getFocusSettings(){var t;return null===(t=this.cameraManager)||void 0===t?void 0:t.getFocus()}setAutoZoomRange(t){gi(this,Rr,"f").minValue=t.min,gi(this,Rr,"f").maxValue=t.max}getAutoZoomRange(){return{min:gi(this,Rr,"f").minValue,max:gi(this,Rr,"f").maxValue}}enableEnhancedFeatures(t){var e,i;if(!(null===(i=null===(e=Dt.license)||void 0===e?void 0:e.LicenseManager)||void 0===i?void 0:i.bPassValidation))throw new Error("License is not verified, or license is invalid.");if(0!==Pt.bSupportDce4Module)throw new Error("Please set a license containing the DCE module.");t&Ii.EF_ENHANCED_FOCUS&&(gi(this,xr,"f").enhancedFocus=!0),t&Ii.EF_AUTO_ZOOM&&(gi(this,xr,"f").autoZoom=!0),t&Ii.EF_TAP_TO_FOCUS&&(gi(this,xr,"f").tapToFocus=!0,this.cameraManager.enableTapToFocus())}disableEnhancedFeatures(t){t&Ii.EF_ENHANCED_FOCUS&&(gi(this,xr,"f").enhancedFocus=!1,this.setFocus({mode:"continuous"}).catch(()=>{})),t&Ii.EF_AUTO_ZOOM&&(gi(this,xr,"f").autoZoom=!1,this.resetZoom().catch(()=>{})),t&Ii.EF_TAP_TO_FOCUS&&(gi(this,xr,"f").tapToFocus=!1,this.cameraManager.disableTapToFocus()),gi(this,fr,"m",Lr).call(this)&&gi(this,fr,"m",Mr).call(this)||gi(this,Or,"f").stopCharging()}_setScanRegion(t){if(null!=t&&!C(t)&&!x(t))throw TypeError("Invalid 'region'.");mi(this,Sr,t?JSON.parse(JSON.stringify(t)):null),this.cameraView&&!this.cameraView.disposed&&this.cameraView.setScanRegion(t)}setScanRegion(t){this._setScanRegion(t),this.cameraView&&!this.cameraView.disposed&&(null===t?this.cameraView.setScanRegionMaskVisible(!1):this.cameraView.setScanRegionMaskVisible(!0))}getScanRegion(){return JSON.parse(JSON.stringify(gi(this,Sr,"f")))}setErrorListener(t){if(!t)throw new TypeError("Invalid 'listener'");mi(this,Er,t)}hasNextImageToFetch(){return!("open"!==this.getCameraState()||!this.cameraManager.isVideoLoaded()||gi(this,fr,"m",Dr).call(this))}startFetching(){if(gi(this,fr,"m",Dr).call(this))throw Error("'startFetching()' is unavailable in 'singleFrameMode'.");gi(this,br,"f")||(mi(this,br,!0),gi(this,fr,"m",Fr).call(this))}stopFetching(){gi(this,br,"f")&&(Wr._onLog&&Wr._onLog("DCE: stop fetching loop: "+Date.now()),gi(this,Ir,"f")&&clearTimeout(gi(this,Ir,"f")),mi(this,br,!1))}toggleMirroring(t){this.isOpen()&&(this.video.style.transform=`scaleX(${t?"-1":"1"})`),this._isEnableMirroring=t}fetchImage(t=!1){if(gi(this,fr,"m",Dr).call(this))throw new Error("'fetchImage()' is unavailable in 'singleFrameMode'.");if(!this.video)throw new Error("The video element does not exist.");if(!this.cameraManager.isVideoLoaded())throw new Error("The video is not loaded.");const e=this.getResolution();if(!(null==e?void 0:e.width)||!(null==e?void 0:e.height))throw new Error("The video is not loaded.");let i,n;if(i=on.convert(gi(this,Sr,"f"),e.width,e.height,this.cameraView),i||(i={x:0,y:0,width:e.width,height:e.height}),i.x>e.width||i.y>e.height)throw new Error("Invalid scan region.");if(i.x+i.width>e.width&&(i.width=e.width-i.x),i.y+i.height>e.height&&(i.height=e.height-i.y),gi(this,Sr,"f")&&!t)n={sx:i.x,sy:i.y,sWidth:i.width,sHeight:i.height,dWidth:i.width,dHeight:i.height};else{const t=this.cameraView.getVisibleRegionOfVideo({inPixels:!0});n={sx:t.x,sy:t.y,sWidth:t.width,sHeight:t.height,dWidth:t.width,dHeight:t.height}}const s=Math.max(n.dWidth,n.dHeight);if(this.canvasSizeLimit&&s>this.canvasSizeLimit){const t=this.canvasSizeLimit/s;n.dWidth>n.dHeight?(n.dWidth=this.canvasSizeLimit,n.dHeight=Math.round(n.dHeight*t)):(n.dWidth=Math.round(n.dWidth*t),n.dHeight=this.canvasSizeLimit)}const r=this.cameraManager.getFrameData({position:n,pixelFormat:this.getPixelFormat()===o.IPF_GRAYSCALED?xi.GREY:xi.RGBA,isEnableMirroring:this._isEnableMirroring});if(!r)return null;let a;a=r.pixelFormat===xi.GREY?r.width:4*r.width;let l=!0;return 0===n.sx&&0===n.sy&&n.sWidth===e.width&&n.sHeight===e.height&&(l=!1),{bytes:r.data,width:r.width,height:r.height,stride:a,format:Br.get(r.pixelFormat),tag:{imageId:this._imageId==Number.MAX_VALUE?this._imageId=0:++this._imageId,type:lt.ITT_VIDEO_FRAME,isCropped:l,cropRegion:{left:n.sx,top:n.sy,right:n.sx+n.sWidth,bottom:n.sy+n.sHeight,isMeasuredInPercentage:!1},originalWidth:e.width,originalHeight:e.height,currentWidth:r.width,currentHeight:r.height,timeSpent:r.timeSpent,timeStamp:r.timeStamp},toCanvas:gi(this,Cr,"f"),isDCEFrame:!0}}setImageFetchInterval(t){this.fetchInterval=t,gi(this,br,"f")&&(gi(this,Ir,"f")&&clearTimeout(gi(this,Ir,"f")),mi(this,Ir,setTimeout(()=>{this.disposed||gi(this,fr,"m",Fr).call(this)},t)))}getImageFetchInterval(){return this.fetchInterval}setPixelFormat(t){mi(this,Tr,t)}getPixelFormat(){return gi(this,Tr,"f")}takePhoto(t){if(!this.isOpen())throw new Error("Not open.");if(gi(this,fr,"m",Dr).call(this))throw new Error("'takePhoto()' is unavailable in 'singleFrameMode'.");const e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("accept",".jpg,.jpeg,.icon,.gif,.svg,.webp,.png,.bmp"),e.setAttribute("capture",""),e.style.position="absolute",e.style.top="-9999px",e.style.backgroundColor="transparent",e.style.color="transparent",e.addEventListener("click",()=>{const t=this.isOpen();this.close(),window.addEventListener("focus",()=>{t&&this.open(),e.remove()},{once:!0})}),e.addEventListener("change",async()=>{const i=e.files[0],n=await(async t=>{let e=null,i=null;if("undefined"!=typeof createImageBitmap)try{if(e=await createImageBitmap(t),e)return e}catch(t){}var n;return e||(i=await(n=t,new Promise((t,e)=>{let i=URL.createObjectURL(n),s=new Image;s.src=i,s.onload=()=>{URL.revokeObjectURL(s.src),t(s)},s.onerror=t=>{e(new Error("Can't convert blob to image : "+(t instanceof Event?t.type:t)))}}))),i})(i),s=n instanceof HTMLImageElement?n.naturalWidth:n.width,r=n instanceof HTMLImageElement?n.naturalHeight:n.height;let a=on.convert(gi(this,Sr,"f"),s,r,this.cameraView);a||(a={x:0,y:0,width:s,height:r});const o=gi(this,wr,"f").call(this,n,s,r,a);t&&t(o)}),document.body.appendChild(e),e.click()}convertToPageCoordinates(t){const e=this.convertToContainCoordinates(t),i=gi(this,fr,"m",Pr).call(this,e);return{x:i.pageX,y:i.pageY}}convertToClientCoordinates(t){const e=this.convertToContainCoordinates(t),i=gi(this,fr,"m",Pr).call(this,e);return{x:i.clientX,y:i.clientY}}convertToScanRegionCoordinates(t){if(!gi(this,Sr,"f"))return JSON.parse(JSON.stringify(t));const e=this.convertToContainCoordinates(t);if(this.isOpen()){const t=this.cameraView.getVisibleRegionOfVideo({inPixels:!0});mi(this,vr,t||gi(this,vr,"f"))}let i,n,s=gi(this,Sr,"f").left||gi(this,Sr,"f").x||0,r=gi(this,Sr,"f").top||gi(this,Sr,"f").y||0;if(!gi(this,Sr,"f").isMeasuredInPercentage)return{x:e.x-(s+gi(this,vr,"f").x),y:e.y-(r+gi(this,vr,"f").y)};if(!this.cameraView)throw new Error("Camera view is not set.");if(this.cameraView.disposed)throw new Error("'cameraView' has been disposed.");if(!this.isOpen())throw new Error("Not open.");if(!gi(this,fr,"m",Dr).call(this)&&!this.cameraManager.isVideoLoaded())throw new Error("Video is not loaded.");if(gi(this,fr,"m",Dr).call(this)&&!this.cameraView._cvsSingleFrameMode)throw new Error("No image is selected.");if(gi(this,fr,"m",Dr).call(this)){const t=this.cameraView._innerComponent.getElement("content");i=t.width,n=t.height}else i=gi(this,vr,"f").width,n=gi(this,vr,"f").height;return{x:e.x-(Math.round(s*i/100)+gi(this,vr,"f").x),y:e.y-(Math.round(r*n/100)+gi(this,vr,"f").y)}}convertToContainCoordinates(t){if("contain"===this.cameraView.getVideoFit())return t;const e=this.cameraView.getVisibleRegionOfVideo({inPixels:!0}),i=JSON.parse(JSON.stringify(t));return C(gi(this,Sr,"f"))?gi(this,Sr,"f").isMeasuredInPercentage?(i.x=e.width*(gi(this,Sr,"f").left/100)+e.x+t.x,i.y=e.height*(gi(this,Sr,"f").top/100)+e.y+t.y):(i.x=gi(this,Sr,"f").left+e.x+t.x,i.y=gi(this,Sr,"f").top+e.y+t.y):gi(this,Sr,"f").isMeasuredInPercentage?(i.x=e.width*(gi(this,Sr,"f").x/100)+e.x+t.x,i.y=e.height*(gi(this,Sr,"f").y/100)+e.y+t.y):(i.x=gi(this,Sr,"f").x+e.x+t.x,i.y=gi(this,Sr,"f").y+e.y+t.y),i}dispose(){this.close(),this.cameraManager.dispose(),this.releaseCameraView(),mi(this,Ar,!0)}}var Yr,Hr,zr,Xr,qr,Zr,Kr,Jr;gr=Wr,pr=new WeakMap,_r=new WeakMap,vr=new WeakMap,yr=new WeakMap,wr=new WeakMap,Cr=new WeakMap,Er=new WeakMap,Sr=new WeakMap,Tr=new WeakMap,br=new WeakMap,Ir=new WeakMap,xr=new WeakMap,Rr=new WeakMap,Or=new WeakMap,Ar=new WeakMap,fr=new WeakSet,Dr=function(){return"disabled"!==this.singleFrameMode},Mr=function(){return!this.videoSrc&&"opened"===this.cameraManager.state},Lr=function(){for(let t in gi(this,xr,"f"))if(1==gi(this,xr,"f")[t])return!0;return!1},Fr=function t(){if(this.disposed)return;if("open"!==this.getCameraState()||!gi(this,br,"f"))return gi(this,Ir,"f")&&clearTimeout(gi(this,Ir,"f")),void mi(this,Ir,setTimeout(()=>{this.disposed||gi(this,fr,"m",t).call(this)},this.fetchInterval));const e=()=>{var t;let e;Wr._onLog&&Wr._onLog("DCE: start fetching a frame into buffer: "+Date.now());try{e=this.fetchImage()}catch(e){const i=e.message||e;if("The video is not loaded."===i)return;if(null===(t=gi(this,Er,"f"))||void 0===t?void 0:t.onErrorReceived)return void setTimeout(()=>{var t;null===(t=gi(this,Er,"f"))||void 0===t||t.onErrorReceived(rt.EC_IMAGE_READ_FAILED,i)},0);console.warn(e)}e?(this.addImageToBuffer(e),Wr._onLog&&Wr._onLog("DCE: finish fetching a frame into buffer: "+Date.now()),gi(this,_r,"f").fire("frameAddedToBuffer",null,{async:!1})):Wr._onLog&&Wr._onLog("DCE: get a invalid frame, abandon it: "+Date.now())};if(this.getImageCount()>=this.getMaxImageCount())switch(this.getBufferOverflowProtectionMode()){case r.BOPM_BLOCK:break;case r.BOPM_UPDATE:e()}else e();gi(this,Ir,"f")&&clearTimeout(gi(this,Ir,"f")),mi(this,Ir,setTimeout(()=>{this.disposed||gi(this,fr,"m",t).call(this)},this.fetchInterval))},Pr=function(t){if(!this.cameraView)throw new Error("Camera view is not set.");if(this.cameraView.disposed)throw new Error("'cameraView' has been disposed.");if(!this.isOpen())throw new Error("Not open.");if(!gi(this,fr,"m",Dr).call(this)&&!this.cameraManager.isVideoLoaded())throw new Error("Video is not loaded.");if(gi(this,fr,"m",Dr).call(this)&&!this.cameraView._cvsSingleFrameMode)throw new Error("No image is selected.");const e=this.cameraView._innerComponent.getBoundingClientRect(),i=e.left,n=e.top,s=i+window.scrollX,r=n+window.scrollY,{width:a,height:o}=this.cameraView._innerComponent.getBoundingClientRect();if(a<=0||o<=0)throw new Error("Unable to get content dimensions. Camera view may not be rendered on the page.");let l,h,c;if(gi(this,fr,"m",Dr).call(this)){const t=this.cameraView._innerComponent.getElement("content");l=t.width,h=t.height,c="contain"}else{const t=this.getVideoEl();l=t.videoWidth,h=t.videoHeight,c=this.cameraView.getVideoFit()}const d=a/o,u=l/h;let f,g,m,p,_=1;if("contain"===c)d<u?(_=a/l,f=i+t.x*_,g=n+t.y*_+(o-h*_)/2,m=s+t.x*_,p=r+t.y*_+(o-h*_)/2):(_=o/h,f=i+t.x*_+(a-l*_)/2,g=n+t.y*_,m=s+t.x*_+(a-l*_)/2,p=r+t.y*_);else if("cover"===c)if(d<u){_=o/h;let e=t.x*_-(l*_-a)/2;e=Math.max(e,0),e=Math.min(e,a),f=i+e,g=n+t.y*_,m=s+e,p=r+t.y*_}else{_=a/l;let e=t.y*_-(h*_-o)/2;e=Math.max(e,0),e=Math.min(e,o),f=i+t.x*_,g=n+e,m=s+t.x*_,p=r+e}return{clientX:f,clientY:g,pageX:m,pageY:p}},Wr._debug=!1,Wr._isRTU=!1,mr={value:void 0},Wr.browserInfo=ui;class $r{get magnifierCanvas(){return gi(this,Yr,"f")}constructor(){Yr.set(this,void 0),mi(this,Yr,document.createElement("canvas")),gi(this,Yr,"f").style.borderRadius="50%"}update(t,e,i,n){if(!this.magnifierCanvas)throw new Error("'magnifierCanvas' not created.");const s=this.magnifierCanvas;s.width=s.height=t;let r=e.x-i/2,a=e.y-i/2,o=i,l=i,h=s.width,c=s.height,d=s.getContext("2d");for(let t of n)d.drawImage(t.image,r,a,o,l,0,0,h,c);s.style.width=s.width+"px",s.style.height=s.height+"px"}show(){if(!this.magnifierCanvas)throw new Error("'magnifierCanvas' not created.");this.magnifierCanvas.style.display="block"}hide(){if(!this.magnifierCanvas)throw new Error("'magnifierCanvas' not created.");this.magnifierCanvas.style.display="none"}}Yr=new WeakMap;class Qr extends qs{static async createInstance(t){const e=new Qr;return await e.setUIElement(t||gi(e,Hr,"m",Jr).call(e)),e}get disposed(){return gi(this,Kr,"f")}constructor(){super(),Hr.add(this),this.containerClassName="dce-image-container",zr.set(this,void 0),Xr.set(this,void 0),this.isUseMagnifier=!0,qr.set(this,t=>{var e;if(!this.isUseMagnifier)return;if(gi(this,Xr,"f")||mi(this,Xr,new $r),!gi(this,Xr,"f").magnifierCanvas)return;document.body.contains(gi(this,Xr,"f").magnifierCanvas)||(gi(this,Xr,"f").magnifierCanvas.style.position="fixed",gi(this,Xr,"f").magnifierCanvas.style.boxSizing="content-box",gi(this,Xr,"f").magnifierCanvas.style.border="2px solid #FFFFFF",document.body.append(gi(this,Xr,"f").magnifierCanvas));const i=this._innerComponent.getElement("content");if(!i)return;if(t.pointer.x<0||t.pointer.x>i.width||t.pointer.y<0||t.pointer.y>i.height)return void gi(this,Zr,"f").call(this);const n=null===(e=this._drawingLayerManager._getFabricCanvas())||void 0===e?void 0:e.lowerCanvasEl;if(!n)return;const s=Math.max(i.clientWidth/5/1.5,i.clientHeight/4/1.5),r=1.5*s,a=[{image:i,width:i.width,height:i.height},{image:n,width:n.width,height:n.height}];gi(this,Xr,"f").update(r,t.pointer,s,a);{let e=0,i=0;t.e instanceof MouseEvent?(e=t.e.clientX,i=t.e.clientY):t.e instanceof TouchEvent&&t.e.changedTouches.length&&(e=t.e.changedTouches[0].clientX,i=t.e.changedTouches[0].clientY),e<1.5*r&&i<1.5*r?(gi(this,Xr,"f").magnifierCanvas.style.left="auto",gi(this,Xr,"f").magnifierCanvas.style.top="0",gi(this,Xr,"f").magnifierCanvas.style.right="0"):(gi(this,Xr,"f").magnifierCanvas.style.left="0",gi(this,Xr,"f").magnifierCanvas.style.top="0",gi(this,Xr,"f").magnifierCanvas.style.right="auto")}gi(this,Xr,"f").show()}),Zr.set(this,()=>{gi(this,Xr,"f")&&gi(this,Xr,"f").hide()}),Kr.set(this,!1)}_setUIElement(t){this.UIElement=t,this._unbindUI(),this._bindUI()}async setUIElement(t){let e;if("string"==typeof t){let i=await gn(t);e=document.createElement("div"),Object.assign(e.style,{width:"100%",height:"100%"}),e.attachShadow({mode:"open"}).appendChild(i)}else e=t;this._setUIElement(e)}getUIElement(){return this.UIElement}_bindUI(){if(!this.UIElement)throw new Error("Need to set 'UIElement'.");if(this._innerComponent)return;const t=this.UIElement;let e=t.classList.contains(this.containerClassName)?t:t.querySelector(`.${this.containerClassName}`);e||(e=document.createElement("div"),e.style.width="100%",e.style.height="100%",e.className=this.containerClassName,t.append(e)),this._innerComponent=document.createElement("dce-component"),e.appendChild(this._innerComponent)}_unbindUI(){var t,e,i;null===(t=this._drawingLayerManager)||void 0===t||t.clearDrawingLayers(),null===(e=this._innerComponent)||void 0===e||e.removeElement("drawing-layer"),this._layerBaseCvs=null,null===(i=this._innerComponent)||void 0===i||i.remove(),this._innerComponent=null}setImage(t,e,i){if(!this._innerComponent)throw new Error("Need to set 'UIElement'.");let n=this._innerComponent.getElement("content");n||(n=document.createElement("canvas"),n.style.objectFit="contain",this._innerComponent.setElement("content",n)),n.width===e&&n.height===i||(n.width=e,n.height=i);const s=n.getContext("2d");s.clearRect(0,0,n.width,n.height),t instanceof Uint8Array||t instanceof Uint8ClampedArray?(t instanceof Uint8Array&&(t=new Uint8ClampedArray(t.buffer)),s.putImageData(new ImageData(t,e,i),0,0)):(t instanceof HTMLCanvasElement||t instanceof HTMLImageElement)&&s.drawImage(t,0,0)}getImage(){return this._innerComponent.getElement("content")}clearImage(){if(!this._innerComponent)return;let t=this._innerComponent.getElement("content");t&&t.getContext("2d").clearRect(0,0,t.width,t.height)}removeImage(){this._innerComponent&&this._innerComponent.removeElement("content")}setOriginalImage(t){if(w(t)){mi(this,zr,t);const{width:e,height:i,bytes:n,format:s}=Object.assign({},t);let r;if(s===o.IPF_GRAYSCALED){r=new Uint8ClampedArray(e*i*4);for(let t=0;t<r.length;t+=4)r[t]=n[t/4],r[t+1]=n[t/4],r[t+2]=n[t/4],r[t+3]=255}else r=new Uint8ClampedArray(n.buffer);this.setImage(r,e,i)}else if(t instanceof HTMLCanvasElement)mi(this,zr,t),this.setImage(t,t.width,t.height);else{if(!(t instanceof HTMLImageElement))throw new TypeError("Invalid img.");mi(this,zr,t),this.setImage(t,t.naturalWidth,t.naturalHeight)}let e;try{e=this.getContentDimensions()}catch(t){if("Invalid content dimensions."===(t.message||t))return;throw t}this.updateDrawingLayers(e)}getOriginalImage(){return gi(this,zr,"f")}getContentDimensions(){let t,e,i;if(this._innerComponent){const n=this._innerComponent.getElement("content");t=null==n?void 0:n.width,e=null==n?void 0:n.height,i="contain"}if(!t||!e)throw new Error("Invalid content dimensions.");return{width:t,height:e,objectFit:i}}_createDrawingLayer(t,e,i,n){if(!this._layerBaseCvs){let s;try{s=this.getContentDimensions()}catch(t){if("Invalid content dimensions."!==(t.message||t))throw t}e||(e=(null==s?void 0:s.width)||300),i||(i=(null==s?void 0:s.height)||150),n||(n=(null==s?void 0:s.objectFit)||"contain"),this._layerBaseCvs=this.createDrawingLayerBaseCvs(e,i,n)}const s=this._layerBaseCvs,r=this._drawingLayerManager.createDrawingLayer(s,t);this._innerComponent.getElement("drawing-layer")||this._innerComponent.setElement("drawing-layer",s.parentElement),t!=Hs.TIP_LAYER_ID&&r.setMode("editor");const a=this._drawingLayerManager._getFabricCanvas();return a&&(a.on("object:scaling",gi(this,qr,"f")),a.on("object:rotating",gi(this,qr,"f")),a.on("object:skewing",gi(this,qr,"f")),a.on("mouse:up",gi(this,Zr,"f"))),r}dispose(){this._unbindUI(),this.__proto__=null;for(let t in this)delete this[t];Object.defineProperty(this,"disposed",{value:!0})}}zr=new WeakMap,Xr=new WeakMap,qr=new WeakMap,Zr=new WeakMap,Kr=new WeakMap,Hr=new WeakSet,Jr=function(){const t=document.createElement("div");return t.className=this.containerClassName,t.style.width="100%",t.style.height="100%",t};const ta="undefined"==typeof self,ea="function"==typeof importScripts,ia=(()=>{if(!ea){if(!ta&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})(),na=t=>{if(null==t&&(t="./"),ta||ea);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t};Pt.engineResourcePaths.dbr={version:"11.2.20-dev-20251029130556",path:ia,isInternal:!0},Mt.dbr={js:!1,wasm:!0,deps:[_t.MN_DYNAMSOFT_LICENSE,_t.MN_DYNAMSOFT_IMAGE_PROCESSING]},Dt.dbr={};const sa="2.0.0";"string"!=typeof Pt.engineResourcePaths.std&&A(Pt.engineResourcePaths.std.version,sa)<0&&(Pt.engineResourcePaths.std={version:sa,path:na(ia+`../../dynamsoft-capture-vision-std@${sa}/dist/`),isInternal:!0});const ra="3.0.10";(!Pt.engineResourcePaths.dip||"string"!=typeof Pt.engineResourcePaths.dip&&A(Pt.engineResourcePaths.dip.version,ra)<0)&&(Pt.engineResourcePaths.dip={version:ra,path:na(ia+`../../dynamsoft-image-processing@${ra}/dist/`),isInternal:!0});let aa=class{static getVersion(){const t=At.dbr&&At.dbr.wasm;return`11.2.20-dev-20251029130556(Worker: ${At.dbr&&At.dbr.worker||"Not Loaded"}, Wasm: ${t||"Not Loaded"})`}};const oa={BF_NULL:BigInt(0),BF_ALL:BigInt("0xFFFFFFFEFFFFFFFF"),BF_DEFAULT:BigInt(4265345023),BF_ONED:BigInt(3147775),BF_GS1_DATABAR:BigInt(260096),BF_CODE_39:BigInt(1),BF_CODE_128:BigInt(2),BF_CODE_93:BigInt(4),BF_CODABAR:BigInt(8),BF_ITF:BigInt(16),BF_EAN_13:BigInt(32),BF_EAN_8:BigInt(64),BF_UPC_A:BigInt(128),BF_UPC_E:BigInt(256),BF_INDUSTRIAL_25:BigInt(512),BF_CODE_39_EXTENDED:BigInt(1024),BF_GS1_DATABAR_OMNIDIRECTIONAL:BigInt(2048),BF_GS1_DATABAR_TRUNCATED:BigInt(4096),BF_GS1_DATABAR_STACKED:BigInt(8192),BF_GS1_DATABAR_STACKED_OMNIDIRECTIONAL:BigInt(16384),BF_GS1_DATABAR_EXPANDED:BigInt(32768),BF_GS1_DATABAR_EXPANDED_STACKED:BigInt(65536),BF_GS1_DATABAR_LIMITED:BigInt(131072),BF_PATCHCODE:BigInt(262144),BF_CODE_32:BigInt(16777216),BF_PDF417:BigInt(33554432),BF_QR_CODE:BigInt(67108864),BF_DATAMATRIX:BigInt(134217728),BF_AZTEC:BigInt(268435456),BF_MAXICODE:BigInt(536870912),BF_MICRO_QR:BigInt(1073741824),BF_MICRO_PDF417:BigInt(524288),BF_GS1_COMPOSITE:BigInt(2147483648),BF_MSI_CODE:BigInt(1048576),BF_CODE_11:BigInt(2097152),BF_TWO_DIGIT_ADD_ON:BigInt(4194304),BF_FIVE_DIGIT_ADD_ON:BigInt(8388608),BF_MATRIX_25:BigInt(68719476736),BF_POSTALCODE:BigInt(0x3f0000000000000),BF_NONSTANDARD_BARCODE:BigInt(4294967296),BF_USPSINTELLIGENTMAIL:BigInt(4503599627370496),BF_POSTNET:BigInt(9007199254740992),BF_PLANET:BigInt(0x40000000000000),BF_AUSTRALIANPOST:BigInt(0x80000000000000),BF_RM4SCC:BigInt(72057594037927940),BF_KIX:BigInt(0x200000000000000),BF_DOTCODE:BigInt(8589934592),BF_PHARMACODE_ONE_TRACK:BigInt(17179869184),BF_PHARMACODE_TWO_TRACK:BigInt(34359738368),BF_PHARMACODE:BigInt(51539607552),BF_TELEPEN:BigInt(137438953472),BF_TELEPEN_NUMERIC:BigInt(274877906944)};var la,ha,ca,da;function ua(t,e,i,n){if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(t):n?n.value:e.get(t)}!function(t){t[t.EBRT_STANDARD_RESULT=0]="EBRT_STANDARD_RESULT",t[t.EBRT_CANDIDATE_RESULT=1]="EBRT_CANDIDATE_RESULT",t[t.EBRT_PARTIAL_RESULT=2]="EBRT_PARTIAL_RESULT"}(la||(la={})),function(t){t[t.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",t[t.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",t[t.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",t[t.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q"}(ha||(ha={})),function(t){t[t.LM_AUTO=1]="LM_AUTO",t[t.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",t[t.LM_STATISTICS=4]="LM_STATISTICS",t[t.LM_LINES=8]="LM_LINES",t[t.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",t[t.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",t[t.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",t[t.LM_CENTRE=128]="LM_CENTRE",t[t.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",t[t.LM_NEURAL_NETWORK=512]="LM_NEURAL_NETWORK",t[t.LM_REV=-2147483648]="LM_REV",t[t.LM_SKIP=0]="LM_SKIP",t[t.LM_END=-1]="LM_END"}(ca||(ca={})),function(t){t[t.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",t[t.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",t[t.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",t[t.DM_SMOOTHING=8]="DM_SMOOTHING",t[t.DM_MORPHING=16]="DM_MORPHING",t[t.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",t[t.DM_SHARPENING=64]="DM_SHARPENING",t[t.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",t[t.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING",t[t.DM_NEURAL_NETWORK=512]="DM_NEURAL_NETWORK",t[t.DM_REV=-2147483648]="DM_REV",t[t.DM_SKIP=0]="DM_SKIP",t[t.DM_END=-1]="DM_END"}(da||(da={})),"function"==typeof SuppressedError&&SuppressedError;const fa="undefined"==typeof self,ga=(()=>{if(!fa&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"})(),ma=t=>{if(null==t&&(t="./"),fa);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t};var pa,_a;Pt.engineResourcePaths.dlr={version:"4.2.10-dev-20251029130602",path:ga,isInternal:!0},Mt.dlr={js:!0,wasm:!0,deps:[_t.MN_DYNAMSOFT_LICENSE,_t.MN_DYNAMSOFT_IMAGE_PROCESSING]};const va="2.0.0";"string"!=typeof Pt.engineResourcePaths.std&&A(Pt.engineResourcePaths.std.version,va)<0&&(Pt.engineResourcePaths.std={version:va,path:ma(ga+`../../dynamsoft-capture-vision-std@${va}/dist/`),isInternal:!0});const ya="3.0.10";(!Pt.engineResourcePaths.dip||"string"!=typeof Pt.engineResourcePaths.dip&&A(Pt.engineResourcePaths.dip.version,ya)<0)&&(Pt.engineResourcePaths.dip={version:ya,path:ma(ga+`../../dynamsoft-image-processing@${ya}/dist/`),isInternal:!0});let wa=class t{static getVersion(){const t=At.dlr&&At.dlr.wasm;return`4.2.10-dev-20251029130602(Worker: ${At.dlr&&At.dlr.worker||"Not Loaded"}, Wasm: ${t||"Not Loaded"})`}static async loadConfusableCharsData(e,i){return ua(t,pa,"m",_a).call(t,"confusable",e,i)}static async loadOverlappingCharsData(e,i){return ua(t,pa,"m",_a).call(t,"overlapping",e,i)}};pa=wa,_a=async function(t,e,i){return await Pt.loadWasm(),await new Promise((n,s)=>{let r=Tt();bt[r]=async t=>{if(t.success){const e=JSON.parse(t.result);if(0!==e.errorCode){let t=new Error(e.errorString);return t.errorCode=e.errorCode,s(t)}return n(e)}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,s(e)}},i&&!i.endsWith("/")&&(i+="/");const a=D(Pt.engineResourcePaths);Et.postMessage({type:"dlr_loadData",id:r,body:{type:t,dataName:e,dataPath:i||a.dcvData+"char-resources/"}})})},Dt.dlr={loadConfusableCharsData:wa.loadConfusableCharsData,loadOverlappingCharsData:wa.loadOverlappingCharsData};const Ca={filterVINResult:function(t){let e="";if(18===t.characterResults.length){let e=t.characterResults[9].location.points[0].x-t.characterResults[8].location.points[1].x;e<2&&(e=2);let i=t.characterResults[1].location.points[0].x-t.characterResults[0].location.points[1].x,n=t.characterResults[17].location.points[0].x-t.characterResults[16].location.points[1].x,s=2===e?3:e;i-e>=s&&n-e<s?t.characterResults.shift():n-e>=s&&i-e<s||t.characterResults[0].characterHConfidence>t.characterResults[17].characterHConfidence?t.characterResults.pop():t.characterResults.shift()}else if(19===t.characterResults.length){let e=t.characterResults[10].location.points[0].x-t.characterResults[9].location.points[1].x;e<2&&(e=2);let i,n,s,r=t.characterResults[1].location.points[0].x-t.characterResults[0].location.points[1].x,a=t.characterResults[18].location.points[0].x-t.characterResults[17].location.points[1].x,o=t.characterResults[2].location.points[0].x-t.characterResults[1].location.points[1].x,l=t.characterResults[17].location.points[0].x-t.characterResults[16].location.points[1].x,h=2===e?3:e;if("1"===t.characterResults[1].characterH||"1"===t.characterResults[2].characterH||"1"===t.characterResults[16].characterH||"1"===t.characterResults[17].characterH){for(let e=9;e<t.characterResults.length;e++)if("1"!==t.characterResults[e].characterH){s=t.characterResults[e].location.points[1].x-t.characterResults[e].location.points[0].x;break}"1"===t.characterResults[1].characterH&&(i=s-(t.characterResults[1].location.points[1].x-t.characterResults[1].location.points[0].x)+3),"1"===t.characterResults[2].characterH&&(i=s-(t.characterResults[2].location.points[1].x-t.characterResults[2].location.points[0].x)+3),"1"===t.characterResults[16].characterH&&(n=s-(t.characterResults[16].location.points[1].x-t.characterResults[16].location.points[0].x)+3),"1"===t.characterResults[17].characterH&&(n=s-(t.characterResults[17].location.points[1].x-t.characterResults[17].location.points[0].x)+3)}if(o-e>=(i||h)&&l-e<(n||h))t.characterResults.splice(0,2);else if(l-e>=(n||h)&&o-e<(i||h))t.characterResults.splice(17,2);else if(r>e&&a>e)t.characterResults.pop(),t.characterResults.shift();else{let e=t.characterResults[0].characterHConfidence+t.characterResults[1].characterHConfidence,i=t.characterResults[17].characterHConfidence+t.characterResults[18].characterHConfidence,n=t.characterResults[0].characterHConfidence+t.characterResults[18].characterHConfidence,s=Math.min(e,i,n);s===e?t.characterResults.splice(0,2):s===i?t.characterResults.splice(17,2):s===n&&(t.characterResults.pop(),t.characterResults.shift())}}for(let i of t.characterResults)e+=i.characterH;return e},checkValidVIN:function(t){return!(!t||17!=t.length)&&(t=>{const e=new Map([["A",1],["B",2],["C",3],["D",4],["E",5],["F",6],["G",7],["H",8],["J",1],["K",2],["L",3],["M",4],["N",5],["P",7],["R",9],["S",2],["T",3],["U",4],["V",5],["W",6],["X",7],["Y",8],["Z",9],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9]]),i=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2];let n=0;for(let s=0;s<t.length;s++){let r=e.get(t[s]);r&&(n+=r*i[s])}return n%11})(t).toString()===t[8]},checkValidMRP:function(t){if(!t||44!=t.length)return!1;const e=(t,e,i)=>{const n=new Map([["<",0],["0",0],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9],["A",10],["B",11],["C",12],["D",13],["E",14],["F",15],["G",16],["H",17],["I",18],["J",19],["K",20],["L",21],["M",22],["N",23],["O",24],["P",25],["Q",26],["R",27],["S",28],["T",29],["U",30],["V",31],["W",32],["X",33],["Y",34],["Z",35]]),s=[7,3,1];let r=0;for(let a=e,o=0;a<=i;a++){let e=n.get(t[a]);e&&(r+=e*s[o%3]),o++}return r%10},i=t.slice(0,10)+t.slice(13,20)+t.slice(21,43),n=e(t,0,8).toString(),s=e(t,13,18).toString(),r=e(t,21,26).toString(),a=e(t,28,41).toString(),o=e(i,0,i.length).toString();return n===t[9]&&s===t[19]&&r===t[27]&&a===t[42]&&o===t[43]},checkValidMRV:function(t){if(!t||44!=t.length&&36!=t.length)return!1;const e=(t,e,i)=>{const n=new Map([["<",0],["0",0],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9],["A",10],["B",11],["C",12],["D",13],["E",14],["F",15],["G",16],["H",17],["I",18],["J",19],["K",20],["L",21],["M",22],["N",23],["O",24],["P",25],["Q",26],["R",27],["S",28],["T",29],["U",30],["V",31],["W",32],["X",33],["Y",34],["Z",35]]),s=[7,3,1];let r=0;for(let a=e,o=0;a<=i;a++){let e=n.get(t[a]);e&&(r+=e*s[o%3]),o++}return r%10},i=e(t,0,8).toString(),n=e(t,13,18).toString(),s=e(t,21,26).toString();return i===t[9]&&n===t[19]&&s===t[27]},checkValidIDCard:function(t,e){if(!t||30!=t.length&&36!=t.length)return!1;const i=(t,e,i)=>{const n=new Map([["<",0],["0",0],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9],["A",10],["B",11],["C",12],["D",13],["E",14],["F",15],["G",16],["H",17],["I",18],["J",19],["K",20],["L",21],["M",22],["N",23],["O",24],["P",25],["Q",26],["R",27],["S",28],["T",29],["U",30],["V",31],["W",32],["X",33],["Y",34],["Z",35]]),s=[7,3,1];let r=0;for(let a=e,o=0;a<=i;a++){let e=n.get(t[a]);e&&(r+=e*s[o%3]),o++}return r%10};if(30===t.length){if(e&&t===e)return i(t,5,13).toString()===t[14];if(e&&t!==e){const n=`${e.substring(5,30)}${t.substring(0,7)}${t.substring(8,15)}${t.substring(18,29)}`;return i(n,0,n.length-1).toString()===t[29]}}else if(36===t.length){const e=i(t,0,8).toString(),n=i(t,13,18).toString(),s=i(t,21,26).toString(),r=`${t.substring(0,10)}${t.substring(13,20)}${t.substring(21,28)}`,a=i(r,0,r.length-1).toString();return e===t[9]&&n===t[19]&&s===t[27]&&a===t[35]}}};var Ea,Sa,Ta;function ba(t){delete t.moduleId;const e=JSON.parse(t.jsonString).ResultInfo,i=t.fullCodeString;t.getFieldValue=t=>"fullcodestring"===t.toLowerCase()?i:Ia(e,t,"map"),t.getFieldRawValue=t=>Ia(e,t,"raw"),t.getFieldMappingStatus=t=>xa(e,t),t.getFieldValidationStatus=t=>Ra(e,t),delete t.fullCodeString}function Ia(t,e,i){for(let n of t){if(n.FieldName===e)return"raw"===i&&n.RawValue?n.RawValue:n.Value;if(n.ChildFields&&n.ChildFields.length>0){let t;for(let s of n.ChildFields)t=Ia(s,e,i);if(void 0!==t)return t}}}function xa(t,e){for(let i of t){if(i.FieldName===e)return i.MappingStatus?Number(Sa[i.MappingStatus]):Sa.MS_NONE;if(i.ChildFields&&i.ChildFields.length>0){let t;for(let n of i.ChildFields)t=xa(n,e);if(void 0!==t)return t}}}function Ra(t,e){for(let i of t){if(i.FieldName===e&&i.ValidationStatus)return i.ValidationStatus?Number(Ta[i.ValidationStatus]):Ta.VS_NONE;if(i.ChildFields&&i.ChildFields.length>0){let t;for(let n of i.ChildFields)t=Ra(n,e);if(void 0!==t)return t}}}function Oa(t){if(t.disposed)throw new Error('"CodeParser" instance has been disposed')}!function(t){t[t.RTLS_LOCALIZED=0]="RTLS_LOCALIZED",t[t.RTLS_RECOGNITION_FAILED=1]="RTLS_RECOGNITION_FAILED",t[t.RTLS_RECOGNITION_SUCCEEDED=2]="RTLS_RECOGNITION_SUCCEEDED"}(Ea||(Ea={})),bt[-1]=async t=>{wa.onDataLoadProgressChanged&&wa.onDataLoadProgressChanged(t.resourcesPath,t.tag,{loaded:t.loaded,total:t.total})},function(t){t[t.MS_NONE=0]="MS_NONE",t[t.MS_SUCCEEDED=1]="MS_SUCCEEDED",t[t.MS_FAILED=2]="MS_FAILED"}(Sa||(Sa={})),function(t){t[t.VS_NONE=0]="VS_NONE",t[t.VS_SUCCEEDED=1]="VS_SUCCEEDED",t[t.VS_FAILED=2]="VS_FAILED"}(Ta||(Ta={}));const Aa=t=>t&&"object"==typeof t&&"function"==typeof t.then,Da=(async()=>{})().constructor;let Ma=class extends Da{get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(t){let e;this._task=t,Aa(t)?e=t:"function"==typeof t&&(e=new Da(t)),e&&(async()=>{try{const i=await e;t===this._task&&this.resolve(i)}catch(e){t===this._task&&this.reject(e)}})()}get isEmpty(){return null==this._task}constructor(t){let e,i;super((t,n)=>{e=t,i=n}),this._s="pending",this.resolve=t=>{this.isPending&&(Aa(t)?this.task=t:(this._s="fulfilled",e(t)))},this.reject=t=>{this.isPending&&(this._s="rejected",i(t))},this.task=t}},La=class t{constructor(){this._instanceID=void 0,this.bDestroyed=!1}static async createInstance(){if(!Dt.license)throw Error("Module `license` is not existed.");await Dt.license.dynamsoft(),await Pt.loadWasm();const e=new t,i=new Ma;let n=Tt();return bt[n]=async t=>{if(t.success)e._instanceID=t.instanceID,i.resolve(e);else{const e=Error(t.message);t.stack&&(e.stack=t.stack),i.reject(e)}},Et.postMessage({type:"dcp_createInstance",id:n}),i}async dispose(){Oa(this);let t=Tt();this.bDestroyed=!0,bt[t]=t=>{if(!t.success){let e=new Error(t.message);throw e.stack=t.stack+"\n"+e.stack,e}},Et.postMessage({type:"dcp_dispose",id:t,instanceID:this._instanceID})}get disposed(){return this.bDestroyed}async initSettings(t){if(Oa(this),t&&["string","object"].includes(typeof t))return"string"==typeof t?t.trimStart().startsWith("{")||(t=await R(t,"text")):"object"==typeof t&&(t=JSON.stringify(t)),await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success){const n=JSON.parse(t.response);if(0!==n.errorCode){let t=new Error(n.errorString?n.errorString:"Init Settings Failed.");return t.errorCode=n.errorCode,i(t)}return e(n)}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}},Et.postMessage({type:"dcp_initSettings",id:n,instanceID:this._instanceID,body:{settings:t}})});console.error("Invalid settings.")}async resetSettings(){return Oa(this),await new Promise((t,e)=>{let i=Tt();bt[i]=async i=>{if(i.success)return t();{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}},Et.postMessage({type:"dcp_resetSettings",id:i,instanceID:this._instanceID})})}async parse(t,e=""){if(Oa(this),!t||!(t instanceof Array||t instanceof Uint8Array||"string"==typeof t))throw new Error("`parse` must pass in an Array or Uint8Array or string");return await new Promise((i,n)=>{let s=Tt();t instanceof Array&&(t=Uint8Array.from(t)),"string"==typeof t&&(t=Uint8Array.from(function(t){let e=[];for(let i=0;i<t.length;++i)e.push(t.charCodeAt(i));return e}(t))),bt[s]=async t=>{if(t.success){let e=JSON.parse(t.parseResponse);return e.errorCode?n(new Error(e.errorString)):(ba(e),i(e))}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,n(e)}},Et.postMessage({type:"dcp_parse",id:s,instanceID:this._instanceID,body:{source:t,taskSettingName:e}})})}};const Fa="undefined"==typeof self,Pa="function"==typeof importScripts,ka=(()=>{if(!Pa){if(!Fa&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})();Pt.engineResourcePaths.dcp={version:"3.2.20-dev-20251029130614",path:ka,isInternal:!0},Mt.dcp={js:!0,wasm:!0,deps:[_t.MN_DYNAMSOFT_LICENSE]},Dt.dcp={handleParsedResultItem:ba};const Na="2.0.0";"string"!=typeof Pt.engineResourcePaths.std&&A(Pt.engineResourcePaths.std.version,Na)<0&&(Pt.engineResourcePaths.std={version:Na,path:(t=>{if(null==t&&(t="./"),Fa||Pa);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t})(ka+`../../dynamsoft-capture-vision-std@${Na}/dist/`),isInternal:!0}),bt[-4]=async t=>{Ba.onSpecLoadProgressChanged&&Ba.onSpecLoadProgressChanged(t.resourcesPath,t.tag,{loaded:t.loaded,total:t.total})};let Ba=class{static getVersion(){const t=At.dcp&&At.dcp.wasm;return`3.2.20-dev-20251029130614(Worker: ${At.dcp&&At.dcp.worker||"Not Loaded"}, Wasm: ${t||"Not Loaded"})`}static async loadSpec(t,e){return await Pt.loadWasm(),await new Promise((i,n)=>{let s=Tt();bt[s]=async t=>{if(t.success)return i();{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,n(e)}},e&&!e.endsWith("/")&&(e+="/");const r=t instanceof Array?t:[t],a=D(Pt.engineResourcePaths);Et.postMessage({type:"dcp_appendResourceBuffer",id:s,body:{specificationPath:e||`${"DBR"===Pt._bundleEnv?a.dbrBundle:a.dcvData}parser-resources/`,specificationNames:r}})})}};const ja="undefined"==typeof self,Va="function"==typeof importScripts,Ua=(()=>{if(!Va){if(!ja&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})(),Ga=t=>{if(null==t&&(t="./"),ja||Va);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t};Pt.engineResourcePaths.ddn={version:"4.2.20-dev-20251029130608",path:Ua,isInternal:!0},Mt.ddn={js:!0,wasm:!0,deps:[_t.MN_DYNAMSOFT_LICENSE,_t.MN_DYNAMSOFT_IMAGE_PROCESSING]},Dt.ddn={handleDeskewedAndEnhancedImageResultItem:function(t){let e=t,i=k(e.imageData);e.toCanvas=()=>L(i),e.toImage=t=>F(t,i),e.toBlob=t=>P(t,i)}};const Wa="2.0.0";"string"!=typeof Pt.engineResourcePaths.std&&A(Pt.engineResourcePaths.std.version,Wa)<0&&(Pt.engineResourcePaths.std={version:Wa,path:Ga(Ua+`../../dynamsoft-capture-vision-std@${Wa}/dist/`),isInternal:!0});const Ya="3.0.10";(!Pt.engineResourcePaths.dip||"string"!=typeof Pt.engineResourcePaths.dip&&A(Pt.engineResourcePaths.dip.version,Ya)<0)&&(Pt.engineResourcePaths.dip={version:Ya,path:Ga(Ua+`../../dynamsoft-image-processing@${Ya}/dist/`),isInternal:!0});let Ha=class{static getVersion(){const t=At.ddn&&At.ddn.wasm;return`4.2.20-dev-20251029130608(Worker: ${At.ddn&&At.ddn.worker||"Not Loaded"}, Wasm: ${t||"Not Loaded"})`}};var za;!function(t){t[t.ICM_COLOUR=0]="ICM_COLOUR",t[t.ICM_GRAYSCALE=1]="ICM_GRAYSCALE",t[t.ICM_BINARY=2]="ICM_BINARY"}(za||(za={}));const Xa="undefined"==typeof self,qa="function"==typeof importScripts,Za=(()=>{if(!qa){if(!Xa&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})(),Ka=t=>{if(null==t&&(t="./"),Xa||qa);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t};Pt.engineResourcePaths.utility={version:"2.2.20-dev-20251029130550",path:Za,isInternal:!0},Mt.utility={js:!0,wasm:!0};const Ja="2.0.0";"string"!=typeof Pt.engineResourcePaths.std&&A(Pt.engineResourcePaths.std.version,Ja)<0&&(Pt.engineResourcePaths.std={version:Ja,path:Ka(Za+`../../dynamsoft-capture-vision-std@${Ja}/dist/`),isInternal:!0});const $a="3.0.10";(!Pt.engineResourcePaths.dip||"string"!=typeof Pt.engineResourcePaths.dip&&A(Pt.engineResourcePaths.dip.version,$a)<0)&&(Pt.engineResourcePaths.dip={version:$a,path:Ka(Za+`../../dynamsoft-image-processing@${$a}/dist/`),isInternal:!0});class Qa{static getVersion(){return`2.2.20-dev-20251029130550(Worker: ${At.utility&&At.utility.worker||"Not Loaded"}, Wasm: ${At.utility&&At.utility.wasm||"Not Loaded"})`}}function to(t,e,i,n){if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(t):n?n.value:e.get(t)}"function"==typeof SuppressedError&&SuppressedError;const eo="undefined"==typeof self,io="function"==typeof importScripts,no=(()=>{if(!io){if(!eo&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"}})(),so=t=>{if(null==t&&(t="./"),eo||io);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t};Pt.engineResourcePaths.dbr={version:"11.0.30-dev-20250522174049",path:no,isInternal:!0},Mt.dbr={js:!1,wasm:!0,deps:[_t.MN_DYNAMSOFT_LICENSE,_t.MN_DYNAMSOFT_IMAGE_PROCESSING]},Dt.dbr={};const ro="2.0.0";"string"!=typeof Pt.engineResourcePaths.std&&A(Pt.engineResourcePaths.std.version,ro)<0&&(Pt.engineResourcePaths.std={version:ro,path:so(no+`../../dynamsoft-capture-vision-std@${ro}/dist/`),isInternal:!0});const ao="3.0.10";(!Pt.engineResourcePaths.dip||"string"!=typeof Pt.engineResourcePaths.dip&&A(Pt.engineResourcePaths.dip.version,ao)<0)&&(Pt.engineResourcePaths.dip={version:ao,path:so(no+`../../dynamsoft-image-processing@${ao}/dist/`),isInternal:!0});const oo={BF_NULL:BigInt(0),BF_ALL:BigInt("0xFFFFFFFEFFFFFFFF"),BF_DEFAULT:BigInt(4265345023),BF_ONED:BigInt(3147775),BF_GS1_DATABAR:BigInt(260096),BF_CODE_39:BigInt(1),BF_CODE_128:BigInt(2),BF_CODE_93:BigInt(4),BF_CODABAR:BigInt(8),BF_ITF:BigInt(16),BF_EAN_13:BigInt(32),BF_EAN_8:BigInt(64),BF_UPC_A:BigInt(128),BF_UPC_E:BigInt(256),BF_INDUSTRIAL_25:BigInt(512),BF_CODE_39_EXTENDED:BigInt(1024),BF_GS1_DATABAR_OMNIDIRECTIONAL:BigInt(2048),BF_GS1_DATABAR_TRUNCATED:BigInt(4096),BF_GS1_DATABAR_STACKED:BigInt(8192),BF_GS1_DATABAR_STACKED_OMNIDIRECTIONAL:BigInt(16384),BF_GS1_DATABAR_EXPANDED:BigInt(32768),BF_GS1_DATABAR_EXPANDED_STACKED:BigInt(65536),BF_GS1_DATABAR_LIMITED:BigInt(131072),BF_PATCHCODE:BigInt(262144),BF_CODE_32:BigInt(16777216),BF_PDF417:BigInt(33554432),BF_QR_CODE:BigInt(67108864),BF_DATAMATRIX:BigInt(134217728),BF_AZTEC:BigInt(268435456),BF_MAXICODE:BigInt(536870912),BF_MICRO_QR:BigInt(1073741824),BF_MICRO_PDF417:BigInt(524288),BF_GS1_COMPOSITE:BigInt(2147483648),BF_MSI_CODE:BigInt(1048576),BF_CODE_11:BigInt(2097152),BF_TWO_DIGIT_ADD_ON:BigInt(4194304),BF_FIVE_DIGIT_ADD_ON:BigInt(8388608),BF_MATRIX_25:BigInt(68719476736),BF_POSTALCODE:BigInt(0x3f0000000000000),BF_NONSTANDARD_BARCODE:BigInt(4294967296),BF_USPSINTELLIGENTMAIL:BigInt(4503599627370496),BF_POSTNET:BigInt(9007199254740992),BF_PLANET:BigInt(0x40000000000000),BF_AUSTRALIANPOST:BigInt(0x80000000000000),BF_RM4SCC:BigInt(72057594037927940),BF_KIX:BigInt(0x200000000000000),BF_DOTCODE:BigInt(8589934592),BF_PHARMACODE_ONE_TRACK:BigInt(17179869184),BF_PHARMACODE_TWO_TRACK:BigInt(34359738368),BF_PHARMACODE:BigInt(51539607552),BF_TELEPEN:BigInt(137438953472),BF_TELEPEN_NUMERIC:BigInt(274877906944)};var lo,ho,co,uo,fo;(fo=lo||(lo={}))[fo.EBRT_STANDARD_RESULT=0]="EBRT_STANDARD_RESULT",fo[fo.EBRT_CANDIDATE_RESULT=1]="EBRT_CANDIDATE_RESULT",fo[fo.EBRT_PARTIAL_RESULT=2]="EBRT_PARTIAL_RESULT",function(t){t[t.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",t[t.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",t[t.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",t[t.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q"}(ho||(ho={})),function(t){t[t.LM_AUTO=1]="LM_AUTO",t[t.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",t[t.LM_STATISTICS=4]="LM_STATISTICS",t[t.LM_LINES=8]="LM_LINES",t[t.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",t[t.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",t[t.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",t[t.LM_CENTRE=128]="LM_CENTRE",t[t.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",t[t.LM_REV=-2147483648]="LM_REV",t[t.LM_SKIP=0]="LM_SKIP",t[t.LM_END=4294967295]="LM_END"}(co||(co={})),function(t){t[t.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",t[t.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",t[t.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",t[t.DM_SMOOTHING=8]="DM_SMOOTHING",t[t.DM_MORPHING=16]="DM_MORPHING",t[t.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",t[t.DM_SHARPENING=64]="DM_SHARPENING",t[t.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",t[t.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING",t[t.DM_NEURAL_NETWORK=512]="DM_NEURAL_NETWORK",t[t.DM_REV=-2147483648]="DM_REV",t[t.DM_SKIP=0]="DM_SKIP",t[t.DM_END=4294967295]="DM_END"}(uo||(uo={}));const go=async t=>{let e;await new Promise((i,n)=>{e=new Image,e.onload=()=>i(e),e.onerror=n,e.src=URL.createObjectURL(t)});const i=document.createElement("canvas"),n=i.getContext("2d");return i.width=e.width,i.height=e.height,n.drawImage(e,0,0),{bytes:Uint8Array.from(n.getImageData(0,0,i.width,i.height).data),width:i.width,height:i.height,stride:4*i.width,format:o.IPF_ABGR_8888}};function mo(t,e){let i=!0;for(let a=0;a<t.length;a++){const o=(a+1)%t.length;if(n=t[a],r=e,((s=t[o]).x-n.x)*(r.y-n.y)-(s.y-n.y)*(r.x-n.x)<0){i=!1;break}}var n,s,r;return i}function po(t,e){return Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2)}function _o(t,e){const[i,n]=t,s=i.x,r=i.y,a=n.x,o=n.y,l=e.x,h=e.y,c=(a-s)**2+(o-r)**2;if(0===c)return Math.sqrt((l-s)**2+(h-r)**2);const d=((l-s)*(a-s)+(h-r)*(o-r))/c;if(d<0)return Math.sqrt((l-s)**2+(h-r)**2);if(d>1)return Math.sqrt((l-a)**2+(h-o)**2);{const t=s+d*(a-s),e=r+d*(o-r);return Math.sqrt((l-t)**2+(h-e)**2)}}function vo(t){const e=[];for(let i=0;i<t.length;i++){const n=t[i],s=t[(i+1)%t.length];e.push([n,s])}return e}function yo(t){const[e,i]=t;return{x:(e.x+i.x)/2,y:(e.y+i.y)/2}}function wo(t,e,i,n){const s=e.x-t.x,r=e.y-t.y,a=n.x-i.x,o=n.y-i.y,l=(-r*(t.x-i.x)+s*(t.y-i.y))/(-a*r+s*o),h=(a*(t.y-i.y)-o*(t.x-i.x))/(-a*r+s*o);return l>=0&&l<=1&&h>=0&&h<=1?{x:t.x+h*s,y:t.y+h*r}:null}function Co(t){let e=0;for(let i=0;i<t.length;i++){const n=(i+1)%t.length;e+=t[i].x*t[n].y,e-=t[n].x*t[i].y}return Math.abs(e/2)}function Eo(t,e,i){let n=e.x-t.x,s=e.y-t.y,r=i.x-t.x;return n*(i.y-t.y)-s*r>0}function So(t,e){for(let i=0;i<4;i++)if(!Eo(t.points[i],t.points[(i+1)%4],e))return!1;return!0}function To(t,e,i,n){const s=t.points,r=e.points;let a=8*i;a=Math.max(a,5);const o=vo(s)[3],l=vo(s)[1],h=vo(r)[3],c=vo(r)[1];let d,u=0;if(d=Math.max(Math.abs(_o(o,e.points[0])),Math.abs(_o(o,e.points[3]))),d>u&&(u=d),d=Math.max(Math.abs(_o(l,e.points[1])),Math.abs(_o(l,e.points[2]))),d>u&&(u=d),d=Math.max(Math.abs(_o(h,t.points[0])),Math.abs(_o(h,t.points[3]))),d>u&&(u=d),d=Math.max(Math.abs(_o(c,t.points[1])),Math.abs(_o(c,t.points[2]))),d>u&&(u=d),u>a)return!1;const f=yo(vo(s)[0]),g=yo(vo(s)[2]),m=yo(vo(r)[0]),p=yo(vo(r)[2]),_=po(f,p),v=po(m,g),y=_>v,w=Math.min(_,v),C=po(f,g),E=po(m,p);let S=12*i;return S=Math.max(S,5),S=Math.min(S,C),S=Math.min(S,E),!!(w<S||mo(s,y?m:p)||mo(r,y?g:f))&&(y?(n.points[0]=t.points[0],n.points[1]=t.points[1],n.points[2]=e.points[2],n.points[3]=e.points[3]):(n.points[0]=e.points[0],n.points[1]=e.points[1],n.points[2]=t.points[2],n.points[3]=t.points[3]),n.area=Co(n.points),!0)}class bo{constructor(t,e,i,n){this.overlapCount=t,this.verificationCount=e,this.crossVerificationFrame=5,this.location=n.location,this.locationArea=n.location.area,this.locationAngle=n.angle,this.format=n.format,this.text=n.text,this.isOneD=i,this.item=n,this.locationThreshold=5*n.moduleSize,this.strictLimit=Math.max(this.locationThreshold,1),this.strictLimit=Math.min(this.strictLimit,15)}getCenterPoint(t){const e={x:0,y:0};return t.forEach(({x:t,y:i})=>{e.x+=t,e.y+=i}),e.x/=t.length,e.y/=t.length,e}isProbablySameLocationWithOffset(t,e){const i=this.item.location,n=t.location;if(i.area<=0)return!1;if(Math.abs(i.area-n.area)>.4*i.area)return!1;let s=new Array(4).fill(0),r=new Array(4).fill(0),a=0,o=0;for(let t=0;t<4;++t)s[t]=Math.round(100*(n.points[t].x-i.points[t].x))/100,a+=s[t],r[t]=Math.round(100*(n.points[t].y-i.points[t].y))/100,o+=r[t];a/=4,o/=4;for(let t=0;t<4;++t){if(Math.abs(s[t]-a)>this.strictLimit||Math.abs(a)>.8)return!1;if(Math.abs(r[t]-o)>this.strictLimit||Math.abs(o)>.8)return!1}return e.x=a,e.y=o,!0}isLocationOverlap(t,e){if(this.locationArea>e){for(let e=0;e<4;e++)if(So(this.location,t.points[e]))return!0;const e=this.getCenterPoint(t.points);if(So(this.location,e))return!0}else{for(let e=0;e<4;e++)if(So(t,this.location.points[e]))return!0;if(So(t,this.getCenterPoint(this.location.points)))return!0}return!1}isMatchedLocationWithOffset(t,e={x:0,y:0}){if(this.isOneD){const i=Object.assign({},t.location);for(let t=0;t<4;t++)i.points[t].x-=e.x,i.points[t].y-=e.y;if(!this.isLocationOverlap(i,t.locationArea))return!1;const n=[this.location.points[0],this.location.points[3]],s=[this.location.points[1],this.location.points[2]];for(let t=0;t<4;t++){const e=i.points[t],r=0===t||3===t?n:s;if(Math.abs(_o(r,e))>this.locationThreshold)return!1}}else for(let i=0;i<4;i++){const n=t.location.points[i],s=this.location.points[i];if(!(Math.abs(s.x+e.x-n.x)<this.locationThreshold))return!1;if(Math.abs(s.y+e.y-n.y)>=this.locationThreshold)return!1}return!0}isOverlappedLocationWithOffset(t,e,i=!0){const n=Object.assign({},t.location);for(let t=0;t<4;t++)n.points[t].x-=e.x,n.points[t].y-=e.y;if(!this.isLocationOverlap(n,t.location.area))return!1;if(i){const t=.75;return function(t,e){const i=[];for(let n=0;n<4;n++)for(let s=0;s<4;s++){const r=wo(t[n],t[(n+1)%4],e[s],e[(s+1)%4]);r&&i.push(r)}return t.forEach(t=>{mo(e,t)&&i.push(t)}),e.forEach(e=>{mo(t,e)&&i.push(e)}),Co(function(t){if(t.length<=1)return t;t.sort((t,e)=>t.x-e.x||t.y-e.y);const e=t.shift();return t.sort((t,i)=>Math.atan2(t.y-e.y,t.x-e.x)-Math.atan2(i.y-e.y,i.x-e.x)),[e,...t]}(i))}([...this.location.points],n.points)>this.locationArea*t}return!0}}var Io,xo,Ro,Oo,Ao;const Do={barcode:2,text_line:4,detected_quad:8,deskewed_image:16,enhanced_image:64},Mo=t=>Object.values(Do).includes(t)||Do.hasOwnProperty(t),Lo=(t,e)=>"string"==typeof t?e[Do[t]]:e[t],Fo=(t,e,i)=>{"string"==typeof t?e[Do[t]]=i:e[t]=i},Po=(t,e,i)=>{const n=[{type:nt.CRIT_BARCODE,resultName:"decodedBarcodesResult",itemNames:["barcodeResultItems"]},{type:nt.CRIT_TEXT_LINE,resultName:"recognizedTextLinesResult",itemNames:["textLineResultItems"]}],s=e.items;if(t.isResultCrossVerificationEnabled(i)){for(let t=s.length-1;t>=0;t--)s[t].type!==i||s[t].verified||s.splice(t,1);const t=n.filter(t=>t.type===i)[0];e[t.resultName]&&t.itemNames.forEach(n=>{const s=e[t.resultName][n];e[t.resultName][n]=s.filter(t=>t.type===i&&t.verified)})}if(t.isResultDeduplicationEnabled(i)){for(let t=s.length-1;t>=0;t--)s[t].type===i&&s[t].duplicate&&s.splice(t,1);const t=n.filter(t=>t.type===i)[0];e[t.resultName]&&t.itemNames.forEach(n=>{const s=e[t.resultName][n];e[t.resultName][n]=s.filter(t=>t.type===i&&!t.duplicate)})}};class ko{constructor(){this.verificationEnabled={[nt.CRIT_BARCODE]:!1,[nt.CRIT_TEXT_LINE]:!0,[nt.CRIT_DETECTED_QUAD]:!0,[nt.CRIT_DESKEWED_IMAGE]:!1,[nt.CRIT_ENHANCED_IMAGE]:!1},this.duplicateFilterEnabled={[nt.CRIT_BARCODE]:!1,[nt.CRIT_TEXT_LINE]:!1,[nt.CRIT_DETECTED_QUAD]:!1,[nt.CRIT_DESKEWED_IMAGE]:!1,[nt.CRIT_ENHANCED_IMAGE]:!1},this.duplicateForgetTime={[nt.CRIT_BARCODE]:3e3,[nt.CRIT_TEXT_LINE]:3e3,[nt.CRIT_DETECTED_QUAD]:3e3,[nt.CRIT_DESKEWED_IMAGE]:3e3,[nt.CRIT_ENHANCED_IMAGE]:3e3},Io.set(this,new Map),xo.set(this,new Map),Ro.set(this,new Map),Oo.set(this,new Map),Ao.set(this,new Map),this.overlapSet=[],this.stabilityCount=0,this.crossVerificationFrames=5,this.latestOverlappingEnabled={[nt.CRIT_BARCODE]:!1,[nt.CRIT_TEXT_LINE]:!1,[nt.CRIT_DETECTED_QUAD]:!1,[nt.CRIT_DESKEWED_IMAGE]:!1},this.maxOverlappingFrames={[nt.CRIT_BARCODE]:this.crossVerificationFrames,[nt.CRIT_TEXT_LINE]:this.crossVerificationFrames,[nt.CRIT_DETECTED_QUAD]:this.crossVerificationFrames,[nt.CRIT_DESKEWED_IMAGE]:this.crossVerificationFrames},Object.defineProperties(this,{onOriginalImageResultReceived:{value:t=>{},writable:!1},onDecodedBarcodesReceived:{value:t=>{this.latestOverlappingFilter(t),Po(this,t,nt.CRIT_BARCODE)},writable:!1},onRecognizedTextLinesReceived:{value:t=>{Po(this,t,nt.CRIT_TEXT_LINE)},writable:!1},onProcessedDocumentResultReceived:{value:t=>{},writable:!1},onParsedResultsReceived:{value:t=>{},writable:!1}})}_dynamsoft(){to(this,Io,"f").forEach((t,e)=>{Fo(e,this.verificationEnabled,t)}),to(this,xo,"f").forEach((t,e)=>{Fo(e,this.duplicateFilterEnabled,t)}),to(this,Ro,"f").forEach((t,e)=>{Fo(e,this.duplicateForgetTime,t)}),to(this,Oo,"f").forEach((t,e)=>{Fo(e,this.latestOverlappingEnabled,t)}),to(this,Ao,"f").forEach((t,e)=>{Fo(e,this.maxOverlappingFrames,t)})}enableResultCrossVerification(t,e){Mo(t)&&to(this,Io,"f").set(t,e)}isResultCrossVerificationEnabled(t){return!!Mo(t)&&Lo(t,this.verificationEnabled)}enableResultDeduplication(t,e){Mo(t)&&(e&&this.enableLatestOverlapping(t,!1),to(this,xo,"f").set(t,e))}isResultDeduplicationEnabled(t){return!!Mo(t)&&Lo(t,this.duplicateFilterEnabled)}setDuplicateForgetTime(t,e){Mo(t)&&(e>18e4&&(e=18e4),e<0&&(e=0),to(this,Ro,"f").set(t,e))}getDuplicateForgetTime(t){return Mo(t)?Lo(t,this.duplicateForgetTime):-1}getFilteredResultItemTypes(){let t=0;const e=[nt.CRIT_BARCODE,nt.CRIT_TEXT_LINE,nt.CRIT_DETECTED_QUAD,nt.CRIT_DESKEWED_IMAGE,nt.CRIT_ENHANCED_IMAGE];for(let i=0;i<e.length;i++)(this.verificationEnabled[e[i]]||this.duplicateFilterEnabled[e[i]])&&(t|=e[i]);return t}enableLatestOverlapping(t,e){Mo(t)&&(e&&this.enableResultDeduplication(t,!1),to(this,Oo,"f").set(t,e))}isLatestOverlappingEnabled(t){return!!Mo(t)&&Lo(t,this.latestOverlappingEnabled)}setMaxOverlappingFrames(t,e){Mo(t)&&to(this,Ao,"f").set(t,e)}getMaxOverlappingFrames(t){return Mo(t)?Lo(t,this.maxOverlappingFrames):-1}latestOverlappingFilter(t){var e,i,n;const s=this.isResultCrossVerificationEnabled(nt.CRIT_BARCODE),r=this.isLatestOverlappingEnabled(nt.CRIT_BARCODE);if(r){const a=this.crossVerificationFrames,o=60,l=r?this.getMaxOverlappingFrames(nt.CRIT_BARCODE):this.crossVerificationFrames,h=t.items.length,c=null===(n=null===(i=null===(e=null==t?void 0:t.intermediateResult)||void 0===e?void 0:e[0])||void 0===i?void 0:i.intermediateResultUnits)||void 0===n?void 0:n[1].localizedBarcodes,d=c?c.length:0;let u=[];const f=[],g={x:0,y:0};let m=new Array(h).fill(-1),p=0;const _=t.items.map(t=>{if(1!==t.type){const e=(BigInt(t.format)&BigInt(oo.BF_ONED))!=BigInt(0)||(BigInt(t.format)&BigInt(oo.BF_GS1_DATABAR))!=BigInt(0);return new bo(l,e?1:2,e,t)}}).filter(Boolean);if(this.overlapSet.length>0){const t=new Array(h).fill(new Array(this.overlapSet.length).fill(1));let e=0;for(;e<h;){const i={x:0,y:0},n=new Array(h).fill(-1);let s=!1;for(;e<h;e++){if(!_[e])continue;const r=_[e].item;for(let a=0;a<this.overlapSet.length;a++){if(t[e][a]<1)continue;const o=this.overlapSet[a],l=o.item;if(r.format===l.format&&r.text===l.text){if(s=o.isProbablySameLocationWithOffset(_[e],i),s){n[e]=a,t[e][a]=0;break}}else t[e][a]=0}if(s)break}if(s){for(let s=0;s<h;s++){if(s===e||!_[s])continue;const r=_[s].item;for(let e=0;e<this.overlapSet.length;e++){if(t[s][e]<1)continue;if(n.includes(e))continue;const a=this.overlapSet[e],o=a.item;if(r.format===o.format&&r.text===o.text){if(a.isMatchedLocationWithOffset(_[s],i)){n[s]=e,t[s][e]=0;break}}else t[s][e]=0}}const s=n.filter(t=>-1!==t).length;s>p&&(p=s,m=n,g.x=i.x,g.y=i.y)}}if(0===p){for(let e=0;e<h;e++){const i=_[e].item;for(let n=0;n<this.overlapSet.length;n++){if(t[e][n]<1)continue;if(m.includes(n))continue;const s=this.overlapSet[n],r=s.item;if(i.format===r.format&&i.text===r.text){if(s.isMatchedLocationWithOffset(_[e])){m[e]=n,t[e][n]=0;break}}else t[e][n]=0}}p+=m.filter(t=>-1!=t).length}let i=this.overlapSet.length<=3?p>=1:p>=2;if(!i&&r&&d>0){let t=0;for(let e=0;e<this.overlapSet.length;e++){const i=this.overlapSet[e];for(let e=0;e<d;e++)if(i.isOverlappedLocationWithOffset(c[e],g)){t++;break}}i=this.overlapSet.length<=3?t>=1:t>=3}i||(this.overlapSet=[])}if(0===this.overlapSet.length)this.stabilityCount=0,t.items.forEach((t,e)=>{if(1!==t.type){const i=Object.assign({},t),n=(BigInt(t.format)&BigInt(oo.BF_ONED))!=BigInt(0)||(BigInt(t.format)&BigInt(oo.BF_GS1_DATABAR))!=BigInt(0),r=t.confidence<o,a=new bo(l,n?1:2,n,i);s&&n&&r&&f.push(e),this.overlapSet.push(a)}});else{let e=!0;r?(Math.abs(g.x)>5||Math.abs(g.y)>5)&&(e=!1):e=!1;for(let i=0;i<t.items.length;i++){const t=m[i];if(t<0&&_[i]){const t=_[i].item;let n={points:[{x:0,y:0},{x:0,y:0},{x:0,y:0},{x:0,y:0}]};for(let i=0;i<4;i++)n.points[i].x=e?t.location.points[i].x-g.x:t.location.points[i].x,n.points[i].y=e?t.location.points[i].y-g.y:t.location.points[i].y;for(let s=0;s<this.overlapSet.length;s++){if(m.includes(s))continue;const r=this.overlapSet[s].item.text,a=this.overlapSet[s].item.format;if(t.format===a&&t.text===r){if(this.overlapSet[s].isOverlappedLocationWithOffset(t,g,!1)){const e=Object.assign({},t),n=(BigInt(e.format)&BigInt(oo.BF_ONED))!=BigInt(0)||(BigInt(e.format)&BigInt(oo.BF_GS1_DATABAR))!=BigInt(0),r=n?1:2;this.overlapSet[s]=new bo(l,r,n,e),m[i]=s;break}if(_[i].isOneD){let r={points:[{x:0,y:0},{x:0,y:0},{x:0,y:0},{x:0,y:0}]};for(let t=0;t<4;t++)r.points[t].x=e?this.overlapSet[s].location.points[t].x:this.overlapSet[s].location.points[t].x+g.x,r.points[t].y=e?this.overlapSet[s].location.points[t].y:this.overlapSet[s].location.points[t].y+g.y;let a={points:[{x:0,y:0},{x:0,y:0},{x:0,y:0},{x:0,y:0}],area:0};if(To(n,r,t.moduleSize,a)){t.location=a;const e=Object.assign({},t),n=(BigInt(e.format)&BigInt(oo.BF_ONED))!=BigInt(0)||(BigInt(e.format)&BigInt(oo.BF_GS1_DATABAR))!=BigInt(0),r=n?1:2;this.overlapSet[s]=new bo(l,r,n,e),m[i]=s;break}}}}}else{if(e)_[i]&&(_[i].item.location=this.overlapSet[t].location);else{const e=Object.assign({},_[i].item),n=(BigInt(e.format)&BigInt(oo.BF_ONED))!=BigInt(0)||(BigInt(e.format)&BigInt(oo.BF_GS1_DATABAR))!=BigInt(0),s=n?1:2;this.overlapSet[t]=new bo(l,s,n,e)}this.overlapSet[t]&&(this.overlapSet[t].overlapCount=l,this.overlapSet[t].verificationCount=2,this.overlapSet[t].crossVerificationFrame=a)}}e?this.stabilityCount<15&&this.stabilityCount++:this.stabilityCount=0;let i=!0;for(let t=0;t<this.overlapSet.length;t++){if(m.includes(t))continue;const n=this.overlapSet[t];n.overlapCount--,n.crossVerificationFrame--;const s=n.overlapCount+this.stabilityCount;if(r&&s>0){for(let t=0;t<h;t++)if(n.isOverlappedLocationWithOffset(_[t],g,!1)){i=!1;break}if(!i)break;const t=n.item;if(!e){for(let t=0;t<4;t++)n.location.points[t].x+=g.x,n.location.points[t].y+=g.y;t.location=n.location}2===n.verificationCount&&u.push(t)}}if(r&&!i){u=[];for(let t=0;t<this.overlapSet.length;t++){if(m.includes(t))continue;const e=this.overlapSet[t];e.overlapCount=0-this.stabilityCount,e.crossVerificationFrame=0,e.verificationCount=0}}for(let t=0;t<h;t++){if(-1!==m[t]||!_[t])continue;const i=_[t].item;if(e){for(let e=0;e<4;e++)_[t].location.points[e].x-=g.x,_[t].location.points[e].y-=g.y;i.location=_[t].location}let n=!1;for(let e of this.overlapSet)if(!(e.crossVerificationFrame<=0&&e.verificationCount<=0)&&(n=e.isLocationOverlap(_[t].location,_[t].locationArea),n))break;if(n){f.push(t);continue}const r=Object.assign({},i),a=(BigInt(i.format)&BigInt(oo.BF_ONED))!=BigInt(0)||(BigInt(i.format)&BigInt(oo.BF_GS1_DATABAR))!=BigInt(0),h=i.confidence<o,c=new bo(l,a?1:2,a,r);s&&a&&h?f.push(t):c.verificationCount=2,this.overlapSet.push(c)}this.overlapSet=this.overlapSet.filter(t=>!(t.overlapCount+this.stabilityCount<=0&&t.crossVerificationFrame<=0))}f.sort((t,e)=>e-t).forEach((e,i)=>{t.items.splice(e,1)}),u.forEach(e=>{t.items.push(Object.assign(Object.assign({},e),{overlapped:!0}))})}}}var No,Bo,jo,Vo,Uo,Go,Wo;Io=new WeakMap,xo=new WeakMap,Ro=new WeakMap,Oo=new WeakMap,Ao=new WeakMap;class Yo{async readFromFile(t){return await go(t)}async saveToFile(t,e,i){if(!t||!e)return null;if("string"!=typeof e)throw new TypeError("FileName must be of type string.");const n=k(t);return M(n,e,i)}async readFromMemory(t){if(!to(Yo,No,"f",Bo).has(t))throw new Error("Image data ID does not exist.");const{ptr:e,length:i}=to(Yo,No,"f",Bo).get(t);return await new Promise((t,n)=>{let s=Tt();bt[s]=async e=>{if(e.success)return 0!==e.imageData.errorCode&&n(new Error(`[${e.imageData.errorCode}] ${e.imageData.errorString}`)),t(e.imageData);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}},Et.postMessage({type:"utility_readFromMemory",id:s,body:{ptr:e,length:i}})})}async saveToMemory(t,e){const{bytes:i,width:n,height:s,stride:r,format:a}=await go(t);return await new Promise((t,o)=>{let l=Tt();bt[l]=async e=>{var i,n;if(e.success)return function(t,e,i,n,s){if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");s?s.value=i:e.set(t,i)}(i=Yo,No,(n=to(i,No,"f",jo),++n),0,jo),to(Yo,No,"f",Bo).set(to(Yo,No,"f",jo),JSON.parse(e.memery)),t(to(Yo,No,"f",jo));{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}},Et.postMessage({type:"utility_saveToMemory",id:l,body:{bytes:i,width:n,height:s,stride:r,format:a,fileFormat:e}})})}async readFromBase64String(t){return await new Promise((e,i)=>{let n=Tt();bt[n]=async t=>{if(t.success)return 0!==t.imageData.errorCode&&i(new Error(`[${t.imageData.errorCode}] ${t.imageData.errorString}`)),e(t.imageData);{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}},Et.postMessage({type:"utility_readFromBase64String",id:n,body:{base64String:t}})})}async saveToBase64String(t,e){const{bytes:i,width:n,height:s,stride:r,format:a}=await go(t);return await new Promise((t,o)=>{let l=Tt();bt[l]=async e=>{if(e.success)return 0!==e.base64Data.errorCode&&o(new Error(`[${e.base64Data.errorCode}] ${e.base64Data.errorString}`)),t(e.base64Data.base64String);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}},Et.postMessage({type:"utility_saveToBase64String",id:l,body:{bytes:i,width:n,height:s,stride:r,format:a,fileFormat:e}})})}}No=Yo,Bo={value:new Map},jo={value:0};class Ho{async drawOnImage(t,e,i,n=4294901760,s=1,r="test.png",a){if(!t)throw new Error("Invalid image.");if(!e)throw new Error("Invalid drawingItem.");if(!i)throw new Error("Invalid type.");let o;if(t instanceof Blob)o=await go(t);else if("string"==typeof t){let e=await R(t,"blob");o=await go(e)}else w(t)&&(o=t,"bigint"==typeof o.format&&(o.format=Number(o.format)));return await new Promise((t,l)=>{let h=Tt();bt[h]=async e=>{if(e.success)return a&&(new Yo).saveToFile(e.image,r,a),t(e.image);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,l(t)}},Et.postMessage({type:"utility_drawOnImage",id:h,body:{dsImage:o,drawingItem:Array.isArray(e)?e:[e],color:n,thickness:s,type:i}})})}}class zo{async cropImage(t,e){const{bytes:i,width:n,height:s,stride:r,format:a}=await go(t);return await new Promise((t,o)=>{let l=Tt();bt[l]=async e=>{if(e.success)return t(e.cropImage);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}},Et.postMessage({type:"utility_cropImage",id:l,body:{type:"Rect",bytes:i,width:n,height:s,stride:r,format:a,roi:e}})})}async adjustBrightness(t,e){if(e>100||e<-100)throw new Error("Invalid brightness, range: [-100, 100].");const{bytes:i,width:n,height:s,stride:r,format:a}=await go(t);return await new Promise((t,o)=>{let l=Tt();bt[l]=async e=>{if(e.success)return t(e.adjustBrightness);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}},Et.postMessage({type:"utility_adjustBrightness",id:l,body:{bytes:i,width:n,height:s,stride:r,format:a,brightness:e}})})}async adjustContrast(t,e){if(e>100||e<-100)throw new Error("Invalid contrast, range: [-100, 100].");const{bytes:i,width:n,height:s,stride:r,format:a}=await go(t);return await new Promise((t,o)=>{let l=Tt();bt[l]=async e=>{if(e.success)return t(e.adjustContrast);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}},Et.postMessage({type:"utility_adjustContrast",id:l,body:{bytes:i,width:n,height:s,stride:r,format:a,contrast:e}})})}async filterImage(t,e){if(![0,1,2].includes(e))throw new Error("Invalid filterType.");const{bytes:i,width:n,height:s,stride:r,format:a}=await go(t);return await new Promise((t,o)=>{let l=Tt();bt[l]=async e=>{if(e.success)return t(e.filterImage);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}},Et.postMessage({type:"utility_filterImage",id:l,body:{bytes:i,width:n,height:s,stride:r,format:a,filterType:e}})})}async convertToGray(t,e,i,n){const{bytes:s,width:r,height:a,stride:o,format:l}=await go(t);return await new Promise((t,h)=>{let c=Tt();bt[c]=async e=>{if(e.success)return t(e.convertToGray);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,h(t)}},Et.postMessage({type:"utility_convertToGray",id:c,body:{bytes:s,width:r,height:a,stride:o,format:l,R:e,G:i,B:n}})})}async convertToBinaryGlobal(t,e=-1,i=!1){const{bytes:n,width:s,height:r,stride:a,format:o}=await go(t);return await new Promise((t,l)=>{let h=Tt();bt[h]=async e=>{if(e.success)return t(e.convertToBinaryGlobal);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,l(t)}},Et.postMessage({type:"utility_convertToBinaryGlobal",id:h,body:{bytes:n,width:s,height:r,stride:a,format:o,threshold:e,invert:i}})})}async convertToBinaryLocal(t,e=0,i=0,n=!1){const{bytes:s,width:r,height:a,stride:o,format:l}=await go(t);return await new Promise((t,h)=>{let c=Tt();bt[c]=async e=>{if(e.success)return t(e.convertToBinaryLocal);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,h(t)}},Et.postMessage({type:"utility_convertToBinaryLocal",id:c,body:{bytes:s,width:r,height:a,stride:o,format:l,blockSize:e,compensation:i,invert:n}})})}async cropAndDeskewImage(t,e){const{bytes:i,width:n,height:s,stride:r,format:a}=await go(t);return await new Promise((t,o)=>{let l=Tt();bt[l]=async e=>{if(e.success)return t(e.cropAndDeskewImage);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}},Et.postMessage({type:"utility_cropAndDeskewImage",id:l,body:{bytes:i,width:n,height:s,stride:r,format:a,roi:e}})})}}!function(t){t[t.FT_HIGH_PASS=0]="FT_HIGH_PASS",t[t.FT_SHARPEN=1]="FT_SHARPEN",t[t.FT_SMOOTH=2]="FT_SMOOTH"}(Vo||(Vo={})),Pt.engineResourcePaths.rootDirectory=(t=>{if(null==t&&(t="./"),kt||Nt);else{let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t})(Bt+"../../"),Pt.engineResourcePaths.dcvBundle={version:"3.2.5000",path:Bt,isInternal:!0},Pt.engineResourcePaths.dcvData={version:"1.1.0",path:Bt,isInternal:!0},function(t){t.Passport="passport",t.TD1="td1",t.TD2="td2",t.PassportAndTD1="passportAndTd1",t.PassportAndTD2="passportAndTd2",t.TD1AndTD2="td1AndTd2",t.All="all"}(Uo||(Uo={})),function(t){t.Passport="passport",t.TD1="td1",t.TD2="td2"}(Go||(Go={})),function(t){t.Scanner="scanner",t.Result="scan-result"}(Wo||(Wo={}));const Xo={[Uo.Passport]:"ReadPassport",[Uo.TD1]:"ReadId-TD1",[Uo.TD2]:"ReadId-TD2",[Uo.PassportAndTD1]:"ReadPassportAndId-TD1",[Uo.PassportAndTD2]:"ReadPassportAndId-TD2",[Uo.TD1AndTD2]:"ReadId",[Uo.All]:"ReadPassportAndId"};var qo;function Zo(t){if("string"==typeof t){const e=document.querySelector(t);if(!e)throw new Error("Element not found");return e}return t instanceof HTMLElement?t:null}!function(t){t[t.RS_SUCCESS=0]="RS_SUCCESS",t[t.RS_CANCELLED=1]="RS_CANCELLED",t[t.RS_FAILED=2]="RS_FAILED"}(qo||(qo={}));function Ko(t,e){if(!document.getElementById(t)){const i=document.createElement("style");i.id=t,i.textContent=e,document.head.appendChild(i)}}const Jo=t=>!t||0===Object.keys(t).length;function $o(t){return t?t.charAt(0).toUpperCase()+t.slice(1):""}const Qo={"4k":{width:3840,height:2160},"2k":{width:2560,height:1440},"1080p":{width:1920,height:1080},"720p":{width:1280,height:720},"480p":{width:640,height:480}};function tl(t,e={}){const{message:i,spinnerSize:n=32}=e,s=document.createElement("div");s.className="dynamsoft-mrz-loading-screen";const r=document.createElement("div");r.className="dynamsoft-mrz-loading";const a=document.createElement("div");a.className="dynamsoft-mrz-loading-content";const o=`\n    <svg \n      xmlns="http://www.w3.org/2000/svg" \n      viewBox="0 0 24 24" \n      fill="none" \n      stroke="white" \n      stroke-linecap="round" \n      stroke-linejoin="round" \n      width="${n}" \n      height="${n}" \n      stroke-width="0.75"\n    > \n      <path d="M12 3a9 9 0 1 0 9 9"></path> \n    </svg>\n  `;if(a.innerHTML=o,i){const t=document.createElement("div");t.className="dynamsoft-mrz-loading-message",t.textContent=i,a.appendChild(t)}return r.appendChild(a),s.appendChild(r),t.appendChild(s),{element:s,updateMessage:t=>{let e=r.querySelector(".dynamsoft-mrz-loading-message");null!==t?e?e.textContent=t:(e=document.createElement("div"),e.className="dynamsoft-mrz-loading-message",e.textContent=t,a.appendChild(e)):null==e||e.remove()},hide:()=>{s&&s.parentNode&&(s.classList.add("fade-out"),setTimeout(()=>{var t;null===(t=s.parentNode)||void 0===t||t.removeChild(s)},200))}}}const el='\n  .dynamsoft-mrz-loading-screen {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background-color: #323234;\n    z-index: 998;\n    opacity: 1;\n    transition: opacity 0.2s ease-out;\n  }\n\n  .dynamsoft-mrz-loading-screen.fade-out {\n    opacity: 0;\n  }\n\n  .dynamsoft-mrz-loading {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    color: white;\n    z-index: 999;\n    transform: translate(-50%, -50%);\n  }\n\n  .dynamsoft-mrz-loading-content {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 16px;\n  }\n\n  .dynamsoft-mrz-loading svg {\n    animation: spin 1s linear infinite;\n  }\n\n  .dynamsoft-mrz-loading-message {\n    color: white;\n    font-family: "Verdana";\n    font-size: 14px;\n    text-align: center;\n    max-width: 200px;\n    line-height: 1.4;\n    opacity: 0.9;\n  }\n\n  @keyframes spin {\n    from {\n      transform: rotate(0deg);\n    }\n    to {\n      transform: rotate(360deg);\n    }\n  }\n';var il;!function(t){t.InvalidFields="invalidFields",t.DocumentType="documentType",t.DocumentNumber="documentNumber",t.MRZText="mrzText",t.FirstName="firstName",t.LastName="lastName",t.Age="age",t.Sex="sex",t.IssuingState="issuingState",t.IssuingStateRaw="issuingStateRaw",t.Nationality="nationality",t.NationalityRaw="nationalityRaw",t.DateOfBirth="dateOfBirth",t.DateOfExpiry="dateOfExpiry"}(il||(il={}));const nl={[il.InvalidFields]:"Invalid Fields",[il.DocumentType]:"Document Type",[il.DocumentNumber]:"Document Number",[il.MRZText]:"MRZ Text",[il.FirstName]:"Given Name(s)",[il.LastName]:"Surname",[il.Age]:"Age",[il.Sex]:"Sex",[il.IssuingState]:"Issuing State",[il.IssuingStateRaw]:"Issuing State (Raw Value)",[il.Nationality]:"Nationality",[il.NationalityRaw]:"Nationality State (Raw Value)",[il.DateOfBirth]:"Date Of Birth (YYYY-MM-DD)",[il.DateOfExpiry]:"Date Of Expiry (YYYY-MM-DD)"};function sl(t,e,i,n=!1){const s=parseInt(t,10);let r;if(n)r=s>=60?1900+s:2e3+s;else{r=s>(new Date).getFullYear()%100?1900+s:2e3+s}return{year:r,month:parseInt(e,10),day:parseInt(i,10)}}function rl(t){const e=t=>{var e;return 1===(null===(e=`${t}`)||void 0===e?void 0:e.length)?`0${t}`:t};return`${null==t?void 0:t.year}-${e(null==t?void 0:t.month)}${(null==t?void 0:t.day)&&`-${e(null==t?void 0:t.day)}`}`}function al(t){return"D<<"===t?"D":t}function ol(t,e){const i=[],n=t=>e.getFieldValidationStatus(t)===Ta.VS_FAILED,s=e.codeType,r=function(t){switch(t){case"MRTD_TD1_ID":return Go.TD1;case"MRTD_TD2_ID":case"MRTD_TD2_VISA":case"MRTD_TD2_FRENCH_ID":return Go.TD2;case"MRTD_TD3_PASSPORT":case"MRTD_TD3_VISA":return Go.Passport;default:throw new Error(`Unknown document type: ${t}`)}}(s),a=function(t){switch(t){case"MRTD_TD1_ID":return"ID (TD1)";case"MRTD_TD2_ID":return"ID (TD2)";case"MRTD_TD2_VISA":return"ID (VISA)";case"MRTD_TD2_FRENCH_ID":return"French ID (TD2)";case"MRTD_TD3_PASSPORT":return"Passport (TD3)";case"MRTD_TD3_VISA":return"Visa (TD3)";default:throw new Error(`Unknown document type: ${t}`)}}(s),o=r===Go.Passport&&"MRTD_TD3_PASSPORT"===s?"passportNumber":"documentNumber",l=sl(e.getFieldValue("birthYear"),e.getFieldValue("birthMonth"),e.getFieldValue("birthDay")),h=sl(e.getFieldValue("expiryYear"),e.getFieldValue("expiryMonth"),e.getFieldValue("expiryDay"),!0);["birthYear","birthMonth","birthDay"].forEach(t=>{n(t)&&i.push(il.DateOfBirth)}),["expiryYear","expiryMonth","expiryDay"].forEach(t=>{n(t)&&i.push(il.DateOfExpiry)});const c={[il.LastName]:e.getFieldValue("primaryIdentifier"),[il.FirstName]:e.getFieldValue("secondaryIdentifier"),[il.Nationality]:e.getFieldValue("nationality"),[il.NationalityRaw]:al(e.getFieldRawValue("nationality")),[il.DocumentNumber]:e.getFieldValue(o)||e.getFieldValue("longDocumentNumber"),[il.IssuingState]:e.getFieldValue("issuingState"),[il.IssuingStateRaw]:al(e.getFieldRawValue("issuingState")),[il.Sex]:$o(e.getFieldValue("sex"))};Object.keys(c).forEach(t=>{let e=!1;switch(t){case il.FirstName:e=n("secondaryIdentifier");break;case il.LastName:e=n("primaryIdentifier");break;case il.DocumentNumber:e=n(o)||n("longDocumentNumber");break;default:e=n(t)}e&&i.push(t)});const d=function(t){const e=new Date,i=e.getMonth()+1>t.month||e.getMonth()+1===t.month&&e.getDate()>=t.day;return e.getFullYear()-t.year-(i?0:1)}(l);d<1&&i.push(il.Age);return{[il.InvalidFields]:i,[il.FirstName]:c[il.FirstName],[il.LastName]:c[il.LastName],[il.Age]:d,[il.DateOfBirth]:l,[il.Sex]:c[il.Sex],[il.Nationality]:c[il.Nationality],[il.NationalityRaw]:c[il.NationalityRaw],[il.DocumentNumber]:c[il.DocumentNumber],[il.DateOfExpiry]:h,[il.IssuingState]:c[il.IssuingState],[il.IssuingStateRaw]:c[il.IssuingStateRaw],[il.DocumentType]:$o(a),[il.MRZText]:t}}const ll={[Go.TD1]:{width:85.6,height:53.98},[Go.TD2]:{width:105,height:74},[Go.Passport]:{width:125,height:88}};class hl{showScannerLoadingOverlay(t){const e=Zo(this.config.container);this.loadingScreen=tl(e,{message:t}),e.style.display="block",e.style.position="relative"}hideScannerLoadingOverlay(t=!1){this.loadingScreen&&(this.loadingScreen.hide(),this.loadingScreen=null,t&&(Zo(this.config.container).style.display="none"))}constructor(t,e){this.resources=t,this.config=e,this.isSoundFeedbackOn=!1,this.scanModeManager={[Go.Passport]:!0,[Go.TD1]:!0,[Go.TD2]:!0},this.currentScanMode=Uo.All,this.resizeTimer=null,this.capturedResultItems=[],this.originalImageData=null,this.initialized=!1,this.initializedDCE=!1,this.DCE_ELEMENTS={selectCameraBtn:null,uploadImageBtn:null,soundFeedbackBtn:null,closeScannerBtn:null,scanModeSelectContainer:null,passportModeOption:null,td1ModeOption:null,td2ModeOption:null,toast:null},this.loadingScreen=null,this.handleResize=()=>{this.toggleScanGuide(!1),this.resizeTimer&&window.clearTimeout(this.resizeTimer),this.resizeTimer=window.setTimeout(()=>{this.toggleScanGuide(!0)},500)},this.firstFrame=!0}async initialize(){if(!this.initialized){this.initializeScanModeManager(),this.currentScanMode=this.getScanMode(),Ko("dynamsoft-mrz-loading-screen-style",el);try{const{cameraView:t,cameraEnhancer:e,cvRouter:i}=this.resources;if(t.setScanRegionMaskStyle({strokeStyle:"transparent",fillStyle:"transparent",lineWidth:0}),t.setVideoFit("cover"),i.setInput(e),!0===this.config.enableMultiFrameCrossFilter){const t=new ko;t.enableResultCrossVerification(nt.CRIT_TEXT_LINE,!0),await i.addResultFilter(t)}const n=new Le;n.onCapturedResultReceived=t=>this.handleMRZResult(t),await i.addResultReceiver(n),this.toggleSoundFeedback(!1),!1===this.config.showScanGuide&&this.toggleScanGuide(!1),this.initialized=!0}catch(t){let e=(null==t?void 0:t.message)||t;console.error(e),alert(e),this.closeCamera();const i={status:{code:qo.RS_FAILED,message:"Dynamsoft MRZ Scanner initialize error"}};this.currentScanResolver(i)}}}initializeElements(){var t;const e=Zo(this.config.container),i=e.children[e.children.length-1];if(!(null==i?void 0:i.shadowRoot))throw new Error("Shadow root not found");if(this.DCE_ELEMENTS={selectCameraBtn:i.shadowRoot.querySelector(".dce-mn-select-camera-icon"),uploadImageBtn:i.shadowRoot.querySelector(".dce-mn-upload-image-icon"),soundFeedbackBtn:i.shadowRoot.querySelector(".dce-mn-sound-feedback"),closeScannerBtn:i.shadowRoot.querySelector(".dce-mn-close"),scanModeSelectContainer:i.shadowRoot.querySelector(".dce-mn-scan-mode-select"),passportModeOption:i.shadowRoot.querySelector(".scan-mode-option-passport"),td1ModeOption:i.shadowRoot.querySelector(".scan-mode-option-td1"),td2ModeOption:i.shadowRoot.querySelector(".scan-mode-option-td2"),toast:i.shadowRoot.querySelector(".dce-mn-toast")},this.setupScanModeSelector(),this.assignDCEClickEvents(),this.DCE_ELEMENTS.toast.style.display="none",!1===this.config.showUploadImage&&(this.DCE_ELEMENTS.uploadImageBtn.style.visibility="hidden"),!1===this.config.showSoundToggle&&(this.DCE_ELEMENTS.soundFeedbackBtn.style.visibility="hidden"),!1===(null===(t=this.config)||void 0===t?void 0:t.showPoweredByDynamsoft)){i.shadowRoot.querySelector(".dce-mn-msg-poweredby").style.display="none"}this.initializedDCE=!0}setupScanModeSelector(){if(!1!==this.config.showFormatSelector)switch(this.currentScanMode){case Uo.PassportAndTD1:this.DCE_ELEMENTS.td2ModeOption.style.display="none";break;case Uo.PassportAndTD2:this.DCE_ELEMENTS.td1ModeOption.style.display="none";break;case Uo.TD1AndTD2:this.DCE_ELEMENTS.passportModeOption.style.display="none";break;case Uo.All:break;default:this.DCE_ELEMENTS.scanModeSelectContainer.style.display="none"}else this.DCE_ELEMENTS.scanModeSelectContainer.style.display="none"}assignDCEClickEvents(){if(!Object.values(this.DCE_ELEMENTS).every(Boolean))throw new Error("Camera control elements not found");this.closeCamera=this.closeCamera.bind(this),this.DCE_ELEMENTS.uploadImageBtn.onclick=()=>this.uploadFile(),this.DCE_ELEMENTS.soundFeedbackBtn.onclick=()=>this.toggleSoundFeedback(),this.DCE_ELEMENTS.closeScannerBtn.onclick=()=>this.handleCloseBtn(),this.DCE_ELEMENTS.selectCameraBtn.onclick=t=>{t.stopPropagation(),this.toggleSelectCameraBox()},this.DCE_ELEMENTS.passportModeOption.onclick=async()=>{"none"!==this.DCE_ELEMENTS.passportModeOption.style.display&&await this.toggleScanDocType(Go.Passport)},this.DCE_ELEMENTS.td1ModeOption.onclick=async()=>{"none"!==this.DCE_ELEMENTS.td1ModeOption.style.display&&await this.toggleScanDocType(Go.TD1)},this.DCE_ELEMENTS.td2ModeOption.onclick=async()=>{"none"!==this.DCE_ELEMENTS.td2ModeOption.style.display&&await this.toggleScanDocType(Go.TD2)}}handleCloseBtn(){this.closeCamera(),this.currentScanResolver&&this.currentScanResolver({status:{code:qo.RS_CANCELLED,message:"Cancelled"}})}attachOptionClickListeners(){const t=Zo(this.config.container),e=t.children[t.children.length-1];if(!(null==e?void 0:e.shadowRoot))return;const i=e.shadowRoot.querySelector(".dce-mn-camera-and-resolution-settings");[...e.shadowRoot.querySelectorAll(".dce-mn-camera-option"),...e.shadowRoot.querySelectorAll(".dce-mn-resolution-option")].forEach(t=>{t.addEventListener("click",async e=>{const n=t.getAttribute("data-davice-id"),s=t.getAttribute("data-height"),r=t.getAttribute("data-width");n?this.resources.cameraEnhancer.selectCamera(n).then(()=>{this.toggleScanGuide()}):s&&r&&this.resources.cameraEnhancer.setResolution({width:parseInt(r),height:parseInt(s)}).then(()=>{this.toggleScanGuide()}),"none"!==i.style.display&&this.toggleSelectCameraBox()})})}highlightCameraAndResolutionOption(){const t=Zo(this.config.container),e=t.children[t.children.length-1];if(!(null==e?void 0:e.shadowRoot))return;const i=e.shadowRoot.querySelector(".dce-mn-camera-and-resolution-settings"),n=i.querySelectorAll(".dce-mn-camera-option"),s=i.querySelectorAll(".dce-mn-resolution-option"),r=this.resources.cameraEnhancer.getSelectedCamera(),a=this.resources.cameraEnhancer.getResolution();n.forEach(t=>{const e=t;e.getAttribute("data-davice-id")===(null==r?void 0:r.deviceId)?e.style.border="2px solid #fe814a":e.style.border="none"});const o={"480p":"480","720p":"720","1080p":"1080","2k":"1440","4k":"2160"},l=function(t){const e=t.width*t.height,i=t.width/t.height;let n="480p",s=Number.MAX_VALUE;for(const[t,r]of Object.entries(Qo)){const a=r.width*r.height,o=r.width/r.height,l=.7*Math.abs(a-e)+Math.abs(o-i)*a*.3;l<s&&(s=l,n=t)}return n}(a);s.forEach(t=>{const e=t,i=e.getAttribute("data-height");e.style.border=i===o[l]?"2px solid #fe814a":"none"})}toggleSelectCameraBox(){const t=Zo(this.config.container),e=t.children[t.children.length-1];if(!(null==e?void 0:e.shadowRoot))return;const i=e.shadowRoot.querySelector(".dce-mn-resolution-box");this.highlightCameraAndResolutionOption(),this.attachOptionClickListeners(),i.click()}async relaunch(){}async uploadFile(){var t,e,i,n,s,r;const{cvRouter:a}=this.resources,o=document.createElement("input");o.type="file",o.accept=null!==(t=this.config.uploadAcceptedTypes)&&void 0!==t?t:"image/*",o.style.display="none",document.body.appendChild(o);try{this.showScannerLoadingOverlay("Processing file..."),await this.closeCamera(!1);const t=await new Promise((t,e)=>{o.onchange=i=>{var n;const s=null===(n=i.target.files)||void 0===n?void 0:n[0];s?t(s):e(new Error("No file selected"))},o.addEventListener("cancel",async()=>{this.hideScannerLoadingOverlay(!1),this.showScannerLoadingOverlay("Initializing camera..."),await this.openCamera(),this.toggleScanGuide(),await this.startCapturing(),this.hideScannerLoadingOverlay()}),o.click()});if(!t)return;let l;if(this.config.uploadFileConverter&&!t.type.startsWith("image/"))try{l=await this.config.uploadFileConverter(t)}catch(t){throw new Error(`Error converting file: ${t.message}`)}else{if(!t.type.startsWith("image/"))throw new Error("Unsupported file type. Please provide a converter function for this file type.");l=t}const h=this.config.utilizedTemplateNames[this.currentScanMode];if(!1!==this.config.showScanGuide){const t=await a.getSimplifiedSettings(h);t.roiMeasuredInPercentage=!0,t.roi.points=[{x:0,y:0},{x:100,y:0},{x:100,y:100},{x:0,y:100}],await a.updateSettings(h,t)}const c=await a.capture(l,h);this.capturedResultItems=c.items;const d=this.capturedResultItems.filter(t=>t.type===nt.CRIT_ORIGINAL_IMAGE);if(0===d.length)throw new Error("No image data found in the captured result");const u=d[0].imageData;u.toCanvas=()=>L(u),u.toBlob=async()=>await P("image/png",u),this.originalImageData=u;const f=null===(e=null==c?void 0:c.parsedResult)||void 0===e?void 0:e.parsedResultItems;let g={};if(null==f?void 0:f.length){const t=(null===(n=null===(i=f[0])||void 0===i?void 0:i.referenceItem)||void 0===n?void 0:n.text)||"";g=ol(t,f[0])}const m={status:{code:qo.RS_SUCCESS,message:"Success"},originalImageResult:this.originalImageData,data:g,imageData:!0,_imageData:this.originalImageData};null===(r=(s=this.resources).onResultUpdated)||void 0===r||r.call(s,m),this.currentScanResolver(m)}catch(t){let e=(null==t?void 0:t.message)||t;console.error(e),alert(e),this.closeCamera();const i={status:{code:qo.RS_FAILED,message:`Error processing file: ${e}`}};this.currentScanResolver(i)}finally{this.hideScannerLoadingOverlay(!0),document.body.removeChild(o)}}toggleSoundFeedback(t){this.isSoundFeedbackOn=void 0!==t?t:!this.isSoundFeedbackOn;const e=Zo(this.config.container),i=e.children[e.children.length-1];if(!(null==i?void 0:i.shadowRoot))return;const n=i.shadowRoot.querySelector(".dce-mn-sound-feedback"),s=n.querySelector(".dce-mn-sound-feedback-on");n.querySelector(".dce-mn-sound-feedback-off").style.display=this.isSoundFeedbackOn?"none":"block",s.style.display=this.isSoundFeedbackOn?"block":"none"}calculateScanRegion(t){const{cameraEnhancer:e,cameraView:i}=this.resources;if(!e||!e.isOpen())return;const n=ll[t].width/ll[t].height;let s;const r=i.getVisibleRegionOfVideo({inPixels:!0}),{width:a,height:o}=r;if(r){if(r.width>r.height){const t=.5*o*n,e=Math.round(t/a*100),i=(100-e)/2;s={left:i,right:i+e,top:25,bottom:75,isMeasuredInPercentage:!0}}else{const t=.9*a/n,e=Math.round(t/o*100),i=(100-e)/2;s={left:5,right:95,top:i,bottom:i+e,isMeasuredInPercentage:!0}}null==i||i.setScanRegionMaskVisible(!0),e.setScanRegion(s)}}toggleScanGuide(t){const e=Zo(this.config.container),i=e.children[e.children.length-1];if(!(null==i?void 0:i.shadowRoot))return;const n=i.shadowRoot.querySelector(".dce-scanguide-passport"),s=i.shadowRoot.querySelector(".dce-scanguide-td1"),r=i.shadowRoot.querySelector(".dce-scanguide-td2");if(!1===t||!1===this.config.showScanGuide)return n.style.display="none",s.style.display="none",void(r.style.display="none");switch(this.currentScanMode){case Uo.All:case Uo.Passport:case Uo.PassportAndTD1:case Uo.PassportAndTD2:n.style.display="block",s.style.display="none",r.style.display="none",this.calculateScanRegion(Go.Passport);break;case Uo.TD1:case Uo.TD1AndTD2:n.style.display="none",s.style.display="block",r.style.display="none",this.calculateScanRegion(Go.TD1);break;case Uo.TD2:n.style.display="none",s.style.display="none",r.style.display="block",this.calculateScanRegion(Go.TD2)}}async openCamera(){try{const{cameraEnhancer:t,cameraView:e}=this.resources,i=Zo(this.config.container);if(i.style.display="block",t.isOpen())t.isPaused()&&await t.resume();else{const n=e.getUIElement();n.parentElement||i.append(n),await t.open()}await t.setResolution({width:2560,height:1440}),!this.initializedDCE&&t.isOpen()&&await this.initializeElements(),window.addEventListener("resize",this.handleResize);const n=i.children[i.children.length-1];if(!(null==n?void 0:n.shadowRoot))throw new Error("Shadow root not found");n.shadowRoot.querySelector(".dce-mn-torch-off").style.display="none",n.shadowRoot.querySelector(".dce-mn-torch-on").style.display="none"}catch(t){let e=(null==t?void 0:t.message)||t;console.error(e),alert(e),this.closeCamera();const i={status:{code:qo.RS_FAILED,message:"MRZ Scanner Open Camera Error"}};this.currentScanResolver(i)}}async closeCamera(t=!0){try{window.removeEventListener("resize",this.handleResize),this.resizeTimer&&(window.clearTimeout(this.resizeTimer),this.resizeTimer=null);const{cameraEnhancer:e,cameraView:i}=this.resources,n=Zo(this.config.container);n.style.display=t?"none":"block",(null==i?void 0:i.getUIElement().parentElement)&&n.removeChild(i.getUIElement()),e.close(),this.stopCapturing()}catch(t){let e=(null==t?void 0:t.message)||t;console.error(`Close Camera error: ${e}`)}}pauseCamera(){const{cameraEnhancer:t}=this.resources;t.pause()}stopCapturing(){const{cameraView:t,cvRouter:e}=this.resources;e.stopCapturing(),t.clearAllInnerDrawingItems()}async handleMRZResult(t){var e,i,n;if(this.firstFrame)this.firstFrame=!1;else if(!(t.items.length<=1)){this.capturedResultItems=t.items;try{const{onResultUpdated:s}=this.resources,r=t.items.filter(t=>t.type===nt.CRIT_ORIGINAL_IMAGE)[0].imageData;r.toCanvas=()=>L(r),r.toBlob=async()=>await P("image/png",r),this.originalImageData=r;const a=null===(e=null==t?void 0:t.parsedResult)||void 0===e?void 0:e.parsedResultItems;if(null==a?void 0:a.length){this.isSoundFeedbackOn&&Nr.beep();const t=(null===(n=null===(i=a[0])||void 0===i?void 0:i.referenceItem)||void 0===n?void 0:n.text)||"",e=ol(t,a[0]);this.closeCamera();const r={status:{code:qo.RS_SUCCESS,message:"Success"},originalImageResult:this.originalImageData,data:e,imageData:!0,_imageData:this.originalImageData};null==s||s(r),this.currentScanResolver(r)}}catch(t){let e=(null==t?void 0:t.message)||t;console.error(e),alert(e),this.closeCamera();const i={status:{code:qo.RS_FAILED,message:"Error capturing image"}};this.currentScanResolver(i)}}}initializeScanModeManager(){const{mrzFormatType:t}=this.config;if(this.scanModeManager={[Go.Passport]:!0,[Go.TD1]:!0,[Go.TD2]:!0},!t||Array.isArray(t)&&0===t.length)return;Object.keys(this.scanModeManager).forEach(t=>{this.scanModeManager[t]=!1});(Array.isArray(t)?t:[t]).forEach(t=>{this.scanModeManager[t]=!0})}getScanMode(){const t=Object.entries(this.scanModeManager).filter(([t,e])=>e).map(([t])=>t).sort().join(",");return{[Go.Passport]:Uo.Passport,[Go.TD1]:Uo.TD1,[Go.TD2]:Uo.TD2,[`${Go.Passport},${Go.TD1}`]:Uo.PassportAndTD1,[`${Go.Passport},${Go.TD2}`]:Uo.PassportAndTD2,[`${Go.TD1},${Go.TD2}`]:Uo.TD1AndTD2,[`${Go.Passport},${Go.TD1},${Go.TD2}`]:Uo.All,"":Uo.All}[t]}DCEShowToast(t,e=3e3){this.DCE_ELEMENTS.toast&&(this.DCE_ELEMENTS.toast.textContent=t,this.DCE_ELEMENTS.toast.style.display="",setTimeout(()=>{this.DCE_ELEMENTS.toast.style.display="none"},e))}async startCapturing(){const{cvRouter:t,cameraEnhancer:e}=this.resources,i=this.config.utilizedTemplateNames[this.currentScanMode];try{if(!1!==this.config.showScanGuide){const e=await t.getSimplifiedSettings(i);e.roiMeasuredInPercentage=!0,e.roi.points=[{x:0,y:50},{x:100,y:50},{x:100,y:100},{x:0,y:100}],await t.updateSettings(i,e)}this.firstFrame=!0,await t.startCapturing(i),e.setPixelFormat(o.IPF_ABGR_8888)}catch(t){let e=(null==t?void 0:t.message)||t;console.error("Failed to start capturing:",e),this.closeCamera(),this.currentScanResolver&&this.currentScanResolver({status:{code:qo.RS_FAILED,message:"Failed to start capturing"}})}}async toggleScanDocType(t){try{if(this.scanModeManager[t]&&0===Object.entries(this.scanModeManager).filter(([e,i])=>i&&e!==t).length)return console.warn("MRZ Scanner - At least one mode must be enabled"),void this.DCEShowToast("At least one mode must be enabled");this.scanModeManager[t]=!this.scanModeManager[t],this.currentScanMode=this.getScanMode(),this.stopCapturing(),this.toggleScanGuide(),await this.startCapturing(),this.DCE_ELEMENTS.td1ModeOption.classList.toggle("selected",this.scanModeManager[Go.TD1]),this.DCE_ELEMENTS.td2ModeOption.classList.toggle("selected",this.scanModeManager[Go.TD2]),this.DCE_ELEMENTS.passportModeOption.classList.toggle("selected",this.scanModeManager[Go.Passport])}catch(t){let e=(null==t?void 0:t.message)||t;console.error("MRZ Scanner switch scan mode error: ",e),this.closeCamera();const i={status:{code:qo.RS_FAILED,message:"MRZ Scanner switch scan mode error"}};this.currentScanResolver(i)}}async launch(){try{await this.initialize();const{cvRouter:t,cameraEnhancer:e}=this.resources;return new Promise(async t=>{this.currentScanResolver=t,this.showScannerLoadingOverlay("Initializing camera..."),await this.openCamera(),!this.initializedDCE&&e.isOpen()&&await this.initializeElements(),this.toggleScanGuide(),await this.startCapturing(),this.hideScannerLoadingOverlay()})}catch(t){let e=(null==t?void 0:t.message)||t;console.error("MRZ Scanner launch error: ",e),this.closeCamera();const i={status:{code:qo.RS_FAILED,message:"MRZ Scanner launch error"}};this.currentScanResolver(i)}}}const cl={cancel:'\n<svg id="cancel" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">\n  <defs>\n    <clipPath id="cancelclip-path">\n      <rect id="Rectangle_2774" data-name="Rectangle 2774" width="24" height="24" fill="currentColor"/>\n    </clipPath>\n  </defs>\n  <g id="Group_582" data-name="Group 582" clip-path="url(#cancelclip-path)" transform="rotate(180 12 12)">\n    <path id="Path_1524" data-name="Path 1524" d="M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0m0,23A11,11,0,1,1,23,12,11.013,11.013,0,0,1,12,23" fill="currentColor"/>\n    <path id="Path_1525" data-name="Path 1525" d="M19.862,12a.17.17,0,0,0,0-.024.512.512,0,0,0-.033-.168.532.532,0,0,0-.113-.17l-4.219-4.29a.5.5,0,0,0-.714,0,.51.51,0,0,0,0,.719l3.371,3.428H4.643a.509.509,0,0,0,0,1.018h13.5l-3.373,3.428a.512.512,0,0,0,0,.72.5.5,0,0,0,.714,0l4.224-4.295a.438.438,0,0,0,.056-.086.5.5,0,0,0,.051-.078A.521.521,0,0,0,19.862,12h0" fill="currentColor"/>\n  </g>\n</svg>  \n  ',rescan:'<svg id="re-take" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28.761" height="23" viewBox="0 0 28.761 23">\n<defs>\n<clipPath id="retakeclip-path">\n  <rect id="Rectangle_2773" data-name="Rectangle 2773" width="28.761" height="23" fill="#fff"/>\n</clipPath>\n</defs>\n<g id="Group_580" data-name="Group 580" clip-path="url(#retakeclip-path)">\n<path id="Path_1522" data-name="Path 1522" d="M25.877,3.639H21.663a.7.7,0,0,1-.575-.288l-.575-.764C19.264.961,18.59,0,17.44,0H11.4C10.151,0,9.486.961,8.336,2.588l-.674.764a.7.7,0,0,1-.575.288H2.875C.476,3.639,0,5.077,0,6.227v13.9C0,22.041,1.051,23,2.974,23H25.787c1.914,0,2.974-.961,2.974-2.776v-14c-.008-1.147-.485-2.585-2.884-2.585m-.1,18.411H2.974c-1.339,0-2.013-.575-2.013-1.824v-14c0-.863.189-1.626,1.914-1.626H7.188a1.666,1.666,0,0,0,1.339-.674L9.1,3.162c1.15-1.626,1.536-2.2,2.2-2.2H17.34c.674,0,1.15.575,2.3,2.2l.575.764a1.562,1.562,0,0,0,1.339.674h4.313c1.725,0,1.914.764,1.914,1.626v14h.009c0,1.249-.673,1.824-2.012,1.824" fill="#fff"/>\n<path id="Path_1523" data-name="Path 1523" d="M15.978,9.16H9.462l1.745-1.743A.5.5,0,0,0,10.5,6.71l-2.6,2.6a.484.484,0,0,0-.108.162.5.5,0,0,0,0,.382.479.479,0,0,0,.108.163l2.6,2.6a.5.5,0,0,0,.708-.708L9.462,10.16h6.516a4.028,4.028,0,0,1,0,8.055H10.255a.5.5,0,1,0,0,1h5.723a5.028,5.028,0,0,0,0-10.055" fill="#fff"/>\n</g>\n</svg>\n',complete:'\n<svg id="continue" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">\n<defs>\n<clipPath id="continueclip-path">\n  <rect id="Rectangle_2774" data-name="Rectangle 2774" width="24" height="24" fill="currentColor"/>\n</clipPath>\n</defs>\n<g id="Group_582" data-name="Group 582" clip-path="url(#continueclip-path)">\n<path id="Path_1524" data-name="Path 1524" d="M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0m0,23A11,11,0,1,1,23,12,11.013,11.013,0,0,1,12,23" fill="currentColor"/>\n<path id="Path_1525" data-name="Path 1525" d="M19.862,12a.17.17,0,0,0,0-.024.512.512,0,0,0-.033-.168.532.532,0,0,0-.113-.17l-4.219-4.29a.5.5,0,0,0-.714,0,.51.51,0,0,0,0,.719l3.371,3.428H4.643a.509.509,0,0,0,0,1.018h13.5l-3.373,3.428a.512.512,0,0,0,0,.72.5.5,0,0,0,.714,0l4.224-4.295a.438.438,0,0,0,.056-.086.5.5,0,0,0,.051-.078A.521.521,0,0,0,19.862,12h0" fill="currentColor"/>\n</g>\n</svg>\n',failed:'\n  <svg\n  xmlns="http://www.w3.org/2000/svg"\n  width="20"\n  height="20"\n  viewBox="0 0 20 20"\n  fill="none"\n  stroke="#ef4444"\n  stroke-width="2"\n  stroke-linecap="round"\n  stroke-linejoin="round"\n>\n  <path d="M18 6l-12 12" />\n  <path d="M6 6l12 12" />\n</svg>\n',info:'\n<svg\n  xmlns="http://www.w3.org/2000/svg"\n  width="24"\n  height="24"\n  viewBox="0 0 24 24"\n  fill="none"\n  stroke="white"\n  stroke-width="2"\n  stroke-linecap="round"\n  stroke-linejoin="round"\n>\n  <path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" />\n  <path d="M12 9h.01" />\n  <path d="M11 12h1v4h1" />\n</svg>\n'};class dl{constructor(t,e,i){this.resources=t,this.config=e,this.scannerView=i,this.editedFields={}}async launch(){try{return Zo(this.config.container).textContent="",await this.initialize(),Zo(this.config.container).style.display="flex",new Promise(t=>{this.currentScanResultViewResolver=t})}catch(t){let e=(null==t?void 0:t.message)||t;throw console.error(e),e}}async handleRescan(){var t;try{if(!this.scannerView)return void console.error("Scanner View not initialized");this.hideView();const e=await this.scannerView.launch();if((null===(t=null==e?void 0:e.status)||void 0===t?void 0:t.code)===qo.RS_FAILED)return void(this.currentScanResultViewResolver&&this.currentScanResultViewResolver(e));this.resources.onResultUpdated&&((null==e?void 0:e.status.code)===qo.RS_CANCELLED?this.resources.onResultUpdated(this.resources.result):(null==e?void 0:e.status.code)===qo.RS_SUCCESS&&this.resources.onResultUpdated(e)),this.dispose(!0),await this.initialize(),Zo(this.config.container).style.display="flex"}catch(t){throw console.error("Error in rescan handler:",t),this.currentScanResultViewResolver&&this.currentScanResultViewResolver({status:{code:qo.RS_FAILED,message:(null==t?void 0:t.message)||t}}),t}}async handleCancel(){var t;try{(null===(t=this.config)||void 0===t?void 0:t.onCancel)&&await this.config.onCancel(this.resources.result),this.currentScanResultViewResolver&&this.currentScanResultViewResolver({status:{code:qo.RS_CANCELLED,message:"Upload file cancelled"}}),this.hideView(),this.dispose()}catch(t){throw console.error("Error in cancel handler:",t),this.currentScanResultViewResolver&&this.currentScanResultViewResolver({status:{code:qo.RS_FAILED,message:(null==t?void 0:t.message)||t}}),t}}async handleDone(){var t,e;try{(null===(t=this.resources.result)||void 0===t?void 0:t.data)&&!Jo(this.editedFields)&&(this.resources.result.data=Object.assign(Object.assign({},this.resources.result.data),this.editedFields),this.resources.onResultUpdated&&this.resources.onResultUpdated(this.resources.result)),(null===(e=this.config)||void 0===e?void 0:e.onDone)&&await this.config.onDone(this.resources.result),this.currentScanResultViewResolver&&this.resources.result&&this.currentScanResultViewResolver(this.resources.result),this.hideView(),this.dispose()}catch(t){throw console.error("Error in done handler:",t),this.currentScanResultViewResolver&&this.currentScanResultViewResolver({status:{code:qo.RS_FAILED,message:(null==t?void 0:t.message)||t}}),t}}createControls(){var t,e,i,n,s,r,a,o,l,h,c,d;const{toolbarButtonsConfig:u}=this.config;return function(t){Ko("dynamsoft-mrz-controls-style","\n  .dynamsoft-mrz-controls {\n    display: flex;\n    height: 6rem;\n    background-color: #323234;\n    align-items: center;\n    font-size: 12px;\n    font-family: Verdana;\n    color: white;\n    width: 100%;\n  }\n\n  .dynamsoft-mrz-control-btn {\n    background-color: #323234;\n    color: white;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n    height: 100%;\n    width: 100%;\n    gap: 0.5rem;\n    text-align: center;\n    user-select: none;\n  }\n\n  .dynamsoft-mrz-control-btn.hide {\n    display: none;\n  }\n\n  .dynamsoft-mrz-control-btn.disabled {\n    opacity: 0.4;\n    pointer-events: none;\n    cursor: default;\n  }\n\n  .dynamsoft-mrz-control-icon-wrapper {\n    flex: 0.75;\n    display: flex;\n    align-items: flex-end;\n    justify-content: center;\n    min-height: 40px;\n  }\n\n  .dynamsoft-mrz-control-icon img,\n  .dynamsoft-mrz-control-icon svg {\n    width: 32px;\n    height: 32px;\n    fill: #fe8e14;\n  }\n\n  .dynamsoft-mrz-control-text {\n    flex: 0.5;\n    display: flex;\n    align-items: flex-start;\n    justify-content: center;\n    padding-bottom: 0.5rem;\n  }\n\n  \n    @media screen and (orientation: landscape) and (max-width: 1024px) and (max-height: 600px) {\n    .dynamsoft-mrz-controls {\n      flex-direction: column;\n      height: 100%;\n      width: 5rem;\n    }\n\n    .dynamsoft-mrz-control-text {\n      padding: 0 0.5rem 0.5rem;\n    }\n  }\n");const e=document.createElement("div");return e.className="dynamsoft-mrz-controls",t.forEach(t=>{const i=document.createElement("div");i.className=`dynamsoft-mrz-control-btn ${null==t?void 0:t.className}`;const n=document.createElement("div");if(n.className="dynamsoft-mrz-control-icon-wrapper",(s=t.icon).trim().startsWith("<svg")&&s.trim().endsWith("</svg>"))n.innerHTML=t.icon;else{const e=document.createElement("img");e.src=t.icon,e.alt=t.label,e.width=24,e.height=24,n.appendChild(e)}var s;const r=document.createElement("div");r.className="dynamsoft-mrz-control-text",r.textContent=t.label,t.isDisabled&&i.classList.add("disabled"),t.isHidden&&i.classList.add("hide"),i.appendChild(n),i.appendChild(r),t.onClick&&!t.isDisabled&&i.addEventListener("click",t.onClick),e.appendChild(i)}),e}([this.config._isFileMode?{id:"dynamsoft-mrz-scanResult-cancel",icon:(null===(t=null==u?void 0:u.cancel)||void 0===t?void 0:t.icon)||cl.cancel,label:(null===(e=null==u?void 0:u.cancel)||void 0===e?void 0:e.label)||"Cancel",onClick:()=>this.handleCancel(),className:`${(null===(i=null==u?void 0:u.cancel)||void 0===i?void 0:i.className)||""}`,isHidden:(null===(n=null==u?void 0:u.cancel)||void 0===n?void 0:n.isHidden)||!1}:{id:"dynamsoft-mrz-scanResult-rescan",icon:(null===(s=null==u?void 0:u.rescan)||void 0===s?void 0:s.icon)||cl.rescan,label:(null===(r=null==u?void 0:u.rescan)||void 0===r?void 0:r.label)||"Re-scan",onClick:()=>this.handleRescan(),className:`${(null===(a=null==u?void 0:u.rescan)||void 0===a?void 0:a.className)||""}`,isHidden:(null===(o=null==u?void 0:u.rescan)||void 0===o?void 0:o.isHidden)||!1,isDisabled:!this.scannerView},{id:"dynamsoft-mrz-scanResult-done",icon:(null===(l=null==u?void 0:u.done)||void 0===l?void 0:l.icon)||cl.complete,label:(null===(h=null==u?void 0:u.done)||void 0===h?void 0:h.label)||"Done",className:`${(null===(c=null==u?void 0:u.done)||void 0===c?void 0:c.className)||""}`,isHidden:(null===(d=null==u?void 0:u.done)||void 0===d?void 0:d.isHidden)||!1,onClick:()=>this.handleDone()}])}handleFieldEdit(t,e){if(t===il.DateOfBirth||t===il.DateOfExpiry)try{const[i,n,s]=e.split(/[\/\-\.]/);s&&n&&i&&(this.editedFields[t]={day:parseInt(s,10),month:parseInt(n,10),year:parseInt(i,10)})}catch(t){console.error("Error parsing date",t)}else this.editedFields[t]=e}createMRZDataDisplay(){var t,e,i,n;const s=(null===(t=this.resources.result)||void 0===t?void 0:t.data)||{},r=!!this.config.allowResultEditing,a=s.invalidFields||[],o=[il.InvalidFields,il.IssuingStateRaw,il.NationalityRaw];!1===(null===(e=this.config)||void 0===e?void 0:e.showMRZText)&&o.push(il.MRZText);const l=document.createElement("div");if(l.className="dynamsoft-mrz-data-container",Jo(s)){const t=document.createElement("div");return t.className="dynamsoft-mrz-data-row empty",t.innerText=null!==(n=null===(i=this.config)||void 0===i?void 0:i.emptyResultMessage)&&void 0!==n?n:"The necessary information could not be detected. Please try again.",l.appendChild(t),l}if(a.length>0){const t=document.createElement("div");t.className="dynamsoft-mrz-error-notification",t.innerHTML=`\n          <div class="dynamsoft-mrz-error-icon">${cl.failed}</div>\n          <div class="dynamsoft-mrz-error-message">\n            ${r?"Some fields require correction. Please review highlighted fields.":"Some fields contain invalid information. Please rescan the document."}\n          </div>\n        `,l.appendChild(t)}else if(0===a.length&&r){const t=document.createElement("div");t.className="dynamsoft-mrz-info-notification",t.innerHTML=`\n          <div class="dynamsoft-mrz-info-icon">${cl.info}</div>\n          <div class="dynamsoft-mrz-info-message">\n            Please review all fields to ensure the information is correct.\n          </div>\n        `,l.appendChild(t)}return Object.entries(s).forEach(([t,e])=>{if(o.includes(t)||!e)return;const i=document.createElement("div");i.className="dynamsoft-mrz-data-row";const n=a.includes(t);n&&i.classList.add("invalid-field");const s=[il.MRZText,il.DocumentType,il.IssuingStateRaw,il.NationalityRaw],h=document.createElement("span");if(h.className="dynamsoft-mrz-data-label",h.innerText=nl[t]||t,n){const t=document.createElement("span");if(t.className="dynamsoft-mrz-error-icon",t.innerHTML=cl.failed,h.appendChild(t),r){const t=document.createElement("span");t.className="dynamsoft-mrz-error-hint",t.textContent="Please correct this field",h.appendChild(t)}}const c=document.createElement("div");if(c.className="dynamsoft-mrz-data-value",r&&!s.includes(t)){const s=document.createElement("input");s.className="dynamsoft-mrz-data-input",n&&s.classList.add("invalid"),t===il.DateOfBirth||t===il.DateOfExpiry?(s.value=rl(e),s.setAttribute("placeholder","YYYY-MM-DD")):s.value=e,s.addEventListener("input",e=>{if(this.handleFieldEdit(t,e.target.value),n){s.classList.remove("invalid"),i.classList.remove("invalid-field"),this.editedFields.invalidFields||(this.editedFields.invalidFields=[...a]);const e=this.editedFields.invalidFields.indexOf(t);e>-1&&this.editedFields.invalidFields.splice(e,1)}}),c.appendChild(s)}else t===il.MRZText?(c.classList.add("code"),c.innerText=e):t===il.DateOfBirth||t===il.DateOfExpiry?c.innerText=rl(e):c.innerText=e,n&&c.classList.add("invalid-value");i.appendChild(h),i.appendChild(c),l.appendChild(i)}),l}async initialize(){try{if(!this.resources.result)throw Error("Captured image is missing. Please capture an image first!");if(!this.config.container)throw new Error("Please create a Scan Result View Container element");Ko("dynamsoft-mrz-result-view-style",ul);const t=document.createElement("div");if(t.className="dynamsoft-mrz-result-view-container",!1!==this.config.showOriginalImage){const e=this.resources.result.originalImageResult,i=document.createElement("div");let n;i.className="dynamsoft-mrz-result-view-image-container",(null==e?void 0:e.toCanvas)&&(n=null==e?void 0:e.toCanvas()),Object.assign(n.style,{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"}),i.appendChild(n),t.appendChild(i)}const e=this.createMRZDataDisplay();t.appendChild(e);const i=this.createControls();t.appendChild(i),Zo(this.config.container).appendChild(t)}catch(t){let e=(null==t?void 0:t.message)||t;console.error(e),alert(e)}}hideView(){Zo(this.config.container).style.display="none"}dispose(t=!1){Zo(this.config.container).textContent="",t||(this.currentScanResultViewResolver=void 0)}}const ul="\n .dynamsoft-mrz-result-view-container {\n    display: flex;\n    width: 100%;\n    height: 100%;\n    background-color:#575757;\n    font-size: 12px;\n    flex-direction: column;\n    align-items: center;\n  }\n\n  .dynamsoft-mrz-result-view-image-container {\n      width: 100%;\n          height: 200px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n          background-color: #323234;\n          }\n\n    \n.dynamsoft-mrz-data-container {\n  font-size: 16px;\n  font-family: Verdana;\n  color: white;\n  overflow: auto;\n  width: 100%;\n  height: 100%;\n  min-height: 0;\n  margin: 1rem 0;\n}\n\n.dynamsoft-mrz-data-row {\n  padding: 0.5rem 2rem;\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  transition: background-color 0.3s ease;\n}\n\n.dynamsoft-mrz-data-row.invalid-field {\n  background-color: rgba(231, 76, 60, 0.1);\n  border-left: 3px solid #e74c3c;\n  padding-left: calc(2rem - 3px);\n}\n\n.dynamsoft-mrz-data-label {\n  color: #aaa;\n  display: flex;\n  gap: 0.5rem;\n  align-items: end;\n  flex-wrap: wrap;\n}\n\n.dynamsoft-mrz-error-notification,\n.dynamsoft-mrz-info-notification {\n  color: white;\n  padding: 1rem;\n  margin: 0.5rem 2rem;\n  border-radius: 4px;\n  display: flex;\n  align-items: center;\n  gap: 1rem;\n  text-align: start;\n}\n\n.dynamsoft-mrz-error-notification {\n  background-color: rgba(231, 76, 60, 0.2);\n}\n\n.dynamsoft-mrz-info-notification {\n  background-color: #fe8e14;\n}\n\n.dynamsoft-mrz-edit-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #aaa;\n}\n\n.dynamsoft-mrz-error-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #e74c3c;\n}\n\n.dynamsoft-mrz-info-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: white;\n}\n\n.dynamsoft-mrz-info-message,\n.dynamsoft-mrz-error-message {\n  flex: 1;\n}\n\n.dynamsoft-mrz-error-hint {\n  font-size: 0.8rem;\n  color: #e74c3c;\n}\n\n.dynamsoft-mrz-data-value {\n  word-wrap: break-word;\n  text-align: start;\n}\n\n.dynamsoft-mrz-data-value.code {\n  font-family: monospace;\n}\n\n.dynamsoft-mrz-data-value.invalid-value {\n  color: #e74c3c;\n  text-decoration: wavy underline #e74c3c;\n  text-decoration-skip-ink: none;\n}\n\n.dynamsoft-mrz-data-input {\n  width: 100%;\n  padding: 5px;\n  background-color: rgba(255, 255, 255, 0.1);\n  border: 1px solid rgba(255, 255, 255, 0.3);\n  color: white;\n  border-radius: 4px;\n  font-size: 14px;\n  transition: all 0.3s ease;\n}\n\n.dynamsoft-mrz-data-input.invalid {\n  background-color: rgba(231, 76, 60, 0.1);\n  border-color: #e74c3c;\n}\n\n.dynamsoft-mrz-data-input:focus {\n  background-color: rgba(255, 255, 255, 0.2);\n  border-color: #fe8e14;\n  outline: none;\n}\n\n@media screen and (orientation: landscape) and (max-width: 1024px) and (max-height: 600px) {\n    .dynamsoft-mrz-result-view-container {\n      flex-direction: row;\n    }\n\n    .dynamsoft-mrz-result-view-image-container{\n      flex: 1;\n      height: 100%;\n    }\n\n    .dynamsoft-mrz-data-container{\n      flex: 1;\n    }\n\n    .dynamsoft-mrz-data-row:first-of-type    {\n    padding-top: 2rem;\n    }\n\n    .dynamsoft-mrz-data-row:last-of-type {\n      padding-bottom: 2rem;\n    }\n\n    .dynamsoft-mrz-data-row.empty {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      height: 100%;\n      padding-top: 0;\n      padding-bottom: 0;\n    }\n}\n",fl={rootDirectory:"https://cdn.jsdelivr.net/npm/"};class gl{showLoadingOverlay(t){var e,i;const n=Zo(null===(e=this.config.scannerViewConfig)||void 0===e?void 0:e.container)||Zo(null===(i=this.config.resultViewConfig)||void 0===i?void 0:i.container);this.loadingScreen=tl(n,{message:t}),n.style.display="block",n.style.position="relative"}hideLoadingOverlay(t=!1){var e,i,n;const s=Zo(null===(e=this.config.scannerViewConfig)||void 0===e?void 0:e.container)||Zo(null===(i=this.config.resultViewConfig)||void 0===i?void 0:i.container);this.loadingScreen&&(this.loadingScreen.hide(),this.loadingScreen=null,s.style.display="none",t&&(null===(n=this.config)||void 0===n?void 0:n.container)&&(Zo(this.config.container).style.display="none"))}constructor(t){this.config=t,this.resources={},this.isInitialized=!1,this.isCapturing=!1,this.loadingScreen=null,this.isDynamsoftResourcesLoaded=!1,this.isFileMode=!1,this.isDynamsoftResourcesLoaded||this.initializeDynamsoftResources()}async initialize(){if(this.isInitialized)return{resources:this.resources,components:{scannerView:this.scannerView,resultView:this.resultView}};try{if(!this.initializeMRZScannerConfig())return console.error("Failed to initialize mrz scanner config"),{resources:this.resources,components:{}};Ko("dynamsoft-mrz-loading-screen-style",el),this.showLoadingOverlay("Loading..."),await this.initializeDCVResources(),this.resources.onResultUpdated=t=>{this.resources.result=t};const t={};return!this.isFileMode&&this.config.scannerViewConfig&&(this.scannerView=new hl(this.resources,this.config.scannerViewConfig),t.scannerView=this.scannerView,await this.scannerView.initialize()),this.config.resultViewConfig&&(this.resultView=new dl(this.resources,this.config.resultViewConfig,this.scannerView),t.resultView=this.resultView),this.isInitialized=!0,{resources:this.resources,components:t}}catch(t){this.isInitialized=!1;const e=`Initialization Failed: ${(null==t?void 0:t.message)||t}`;throw console.error(e),new Error(e)}finally{this.hideLoadingOverlay(!0)}}initializeDynamsoftResources(){var t;Pt.engineResourcePaths=Jo(null===(t=this.config)||void 0===t?void 0:t.engineResourcePaths)?fl:this.config.engineResourcePaths,Pt.loadWasm(),Ba.loadSpec("MRTD_TD3_PASSPORT"),Ba.loadSpec("MRTD_TD3_VISA"),Ba.loadSpec("MRTD_TD1_ID"),Ba.loadSpec("MRTD_TD2_ID"),Ba.loadSpec("MRTD_TD2_VISA"),this.isDynamsoftResourcesLoaded=!0}async initializeDCVResources(){var t,e,i,n;try{this.isDynamsoftResourcesLoaded||this.initializeDynamsoftResources(),ii._onAuthMessage=t=>t.replace("(https://www.dynamsoft.com/customer/license/trialLicense?product=unknown&deploymenttype=unknown)","(https://www.dynamsoft.com/customer/license/trialLicense?product=mrz&deploymenttype=web)"),await ii.initLicense((null===(t=this.config)||void 0===t?void 0:t.license)||"",{executeNow:!0}),this.isFileMode||(this.resources.cameraView=await Ks.createInstance((null===(e=this.config.scannerViewConfig)||void 0===e?void 0:e.uiPath)||(null===(i=this.config.scannerViewConfig)||void 0===i?void 0:i.cameraEnhancerUIPath)),this.resources.cameraEnhancer=await Wr.createInstance(this.resources.cameraView)),this.resources.cvRouter=await Me.createInstance(),await this.resources.cvRouter.initSettings(this.config.templateFilePath)}catch(t){let e="string"==typeof t?t:null!==(n=null==t?void 0:t.message)&&void 0!==n?n:"object"==typeof t?JSON.stringify(t):String(t);const i=(null==e?void 0:e.toLowerCase().includes("license"))?"The MRZ Scanner license is invalid or has expired. Please contact the site administrator to resolve this issue.":`Resource Initialization Failed: ${e}`;throw console.error(i),new Error(i)}}shouldCreateDefaultContainer(){var t,e;const i=!this.config.container,n=!((null===(t=this.config.scannerViewConfig)||void 0===t?void 0:t.container)||(null===(e=this.config.resultViewConfig)||void 0===e?void 0:e.container));return i&&n}createDefaultMRZScannerContainer(){const t=document.createElement("div");return t.className="mrz-scanner-main-container",Object.assign(t.style,{height:"100dvh",width:"100%",position:"absolute",left:"0",top:"0",zIndex:"999"}),document.body.append(t),t}checkForTemporaryLicense(t){return!(null==t?void 0:t.length)||(null==t?void 0:t.startsWith("A"))||(null==t?void 0:t.startsWith("L"))||(null==t?void 0:t.startsWith("P"))||(null==t?void 0:t.startsWith("Y"))?"DLS2eyJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSJ9":t}validateViewConfigs(){var t,e,i,n,s,r,a,o;if(!this.config.container){if((null===(t=this.config.scannerViewConfig)||void 0===t?void 0:t.container)&&this.config.showResultView&&!(null===(e=this.config.resultViewConfig)||void 0===e?void 0:e.container)){const t="MRZResultView container is required when showResultView is true";return alert(t),console.error(t),!1}if(!(null===(i=this.config.scannerViewConfig)||void 0===i?void 0:i.container)&&(null===(n=this.config.resultViewConfig)||void 0===n?void 0:n.container)&&!this.resources.result){const t="Result is needed to create MRZResultView without a scanner view";return alert(t),console.error(t),!1}}try{if(this.config.container&&!Zo(this.config.container)){const t="Invalid main container reference";return alert(t),console.error(t),!1}if((null===(s=this.config.scannerViewConfig)||void 0===s?void 0:s.container)&&!Zo(null===(r=this.config.scannerViewConfig)||void 0===r?void 0:r.container)){const t="Invalid scanner view container reference";return alert(t),console.error(t),!1}if((null===(a=this.config.resultViewConfig)||void 0===a?void 0:a.container)&&!Zo(null===(o=this.config.resultViewConfig)||void 0===o?void 0:o.container)){const t="Invalid result view container reference";return alert(t),console.error(t),!1}}catch(t){const e=`Error accessing container references: ${t.message}`;return alert(e),console.error(e),!1}return!0}showResultView(){var t,e;return!1!==this.config.showResultView&&(this.config.container?!(void 0!==this.config.showResultView||!(null===(t=this.config.resultViewConfig)||void 0===t?void 0:t.container)&&!this.config.container)||!!this.config.showResultView:this.config.showResultView&&!!(null===(e=this.config.resultViewConfig)||void 0===e?void 0:e.container))}initializeMRZScannerConfig(){var t,e,i,n,s,r,a,o;this.config=null!==(t=this.config)&&void 0!==t?t:{};if(!this.validateViewConfigs())return!1;this.shouldCreateDefaultContainer()?this.config.container=this.createDefaultMRZScannerContainer():this.config.container&&(this.config.container=Zo(this.config.container));const l=this.config.container?this.createViewContainers(Zo(this.config.container)):{},h={license:this.checkForTemporaryLicense(this.config.license),utilizedTemplateNames:Object.fromEntries(Object.values(Uo).map(t=>{var e;return[t,(null===(e=this.config.utilizedTemplateNames)||void 0===e?void 0:e[t])||Xo[t]]})),templateFilePath:(null===(e=this.config)||void 0===e?void 0:e.templateFilePath)||"https://cdn.jsdelivr.net/npm/dynamsoft-mrz-scanner@3.0.5-beta-202601070001/dist/mrz-scanner.template.json"},c=Object.assign(Object.assign({},this.config.scannerViewConfig),{container:l[Wo.Scanner]||Zo(null===(i=this.config.scannerViewConfig)||void 0===i?void 0:i.container)||null,cameraEnhancerUIPath:(null===(n=this.config.scannerViewConfig)||void 0===n?void 0:n.uiPath)||(null===(s=this.config.scannerViewConfig)||void 0===s?void 0:s.cameraEnhancerUIPath)||"https://cdn.jsdelivr.net/npm/dynamsoft-mrz-scanner@3.0.5-beta-202601070001/dist/mrz-scanner.ui.html",templateFilePath:h.templateFilePath,utilizedTemplateNames:h.utilizedTemplateNames,enableMultiFrameCrossFilter:null===(a=null===(r=this.config.scannerViewConfig)||void 0===r?void 0:r.enableMultiFrameCrossFilter)||void 0===a||a,mrzFormatType:this.config.mrzFormatType}),d=this.showResultView()?Object.assign(Object.assign({},this.config.resultViewConfig),{_isFileMode:this.isFileMode,container:l[Wo.Result]||Zo(null===(o=this.config.resultViewConfig)||void 0===o?void 0:o.container)||null}):void 0;return Object.assign(this.config,Object.assign(Object.assign({},h),{scannerViewConfig:c,resultViewConfig:d})),!0}createViewContainers(t){t.textContent="";const e=[Wo.Scanner];return this.showResultView()&&e.push(Wo.Result),e.reduce((e,i)=>{const n=document.createElement("div");return n.className=`mrz-scanner-${i}-view-container`,Object.assign(n.style,{height:"100%",width:"100%",display:"none",position:"relative"}),t.append(n),e[i]=n,e},{})}dispose(){var t,e;this.resultView&&(this.resultView.dispose(),this.resultView=null),this.scannerView=null,this.resources.cameraEnhancer&&(this.resources.cameraEnhancer.dispose(),this.resources.cameraEnhancer=null),this.resources.cameraView&&(this.resources.cameraView.dispose(),this.resources.cameraView=null),this.resources.cvRouter&&(this.resources.cvRouter.dispose(),this.resources.cvRouter=null),this.resources.result=null,this.resources.onResultUpdated=null;const i=t=>{const e=Zo(t);e&&(e.style.display="none",e.textContent="")};i(this.config.container),i(null===(t=this.config.scannerViewConfig)||void 0===t?void 0:t.container),i(null===(e=this.config.resultViewConfig)||void 0===e?void 0:e.container),this.isInitialized=!1}async processUploadedFile(t){var e,i,n,s,r,a;try{this.showLoadingOverlay("Processing File...");const{cvRouter:o}=this.resources,l=null===(e=this.config.utilizedTemplateNames)||void 0===e?void 0:e.all,h=await o.getSimplifiedSettings(l);h.roiMeasuredInPercentage=!0,h.roi.points=[{x:0,y:0},{x:100,y:0},{x:100,y:100},{x:0,y:100}],await o.updateSettings(l,h);const c=await o.capture(t,l),d=c.items,u=d.filter(t=>t.type===nt.CRIT_ORIGINAL_IMAGE)[0].imageData;u.toCanvas=()=>L(u),u.toBlob=async()=>await P("image/png",u);const f=null===(i=null==c?void 0:c.parsedResult)||void 0===i?void 0:i.parsedResultItems;let g={};if(null==f?void 0:f.length){const t=(null===(s=null===(n=f[0])||void 0===n?void 0:n.referenceItem)||void 0===s?void 0:s.text)||"";g=ol(t,f[0])}const m={status:{code:qo.RS_SUCCESS,message:"Success"},originalImageResult:u,data:g,imageData:!0,_imageData:u};null===(a=(r=this.resources).onResultUpdated)||void 0===a||a.call(r,m)}catch(t){return console.error("Failed to process uploaded file:",t),{status:{code:qo.RS_FAILED,message:`Failed to process image: ${t.message||t}`}}}finally{this.hideLoadingOverlay(!1)}}async launch(t){if(this.isCapturing)throw new Error("Capture session already in progress");try{this.isCapturing=!0,this.isFileMode=!!t;const{components:e}=await this.initialize();if(this.config.container&&(Zo(this.config.container).style.display="block"),this.isFileMode)return await this.processUploadedFile(t),e.resultView?await e.resultView.launch():this.resources.result;if(!e.scannerView&&this.resources.result)return e.resultView?await e.resultView.launch():this.resources.result;if(!e.scannerView)throw new Error("Scanner view is required when no previous result exists");const i=await e.scannerView.launch();return(null==i?void 0:i.status.code)!==qo.RS_SUCCESS?{status:{code:null==i?void 0:i.status.code,message:(null==i?void 0:i.status.message)||"Failed to capture image"}}:e.resultView?await e.resultView.launch():this.resources.result}catch(t){return alert((null==t?void 0:t.message)||t),console.error((null==t?void 0:t.message)||t),{status:{code:qo.RS_FAILED,message:(null==t?void 0:t.message)||t}}}finally{this.isCapturing=!1,this.dispose()}}}const ml={MRZScanner:gl,MRZScannerView:hl,MRZResultView:dl};export{aa as BarcodeReaderModule,Wr as CameraEnhancer,fi as CameraEnhancerModule,Qs as CameraManager,Ks as CameraView,Me as CaptureVisionRouter,ie as CaptureVisionRouterModule,Le as CapturedResultReceiver,La as CodeParser,Ba as CodeParserModule,Pt as CoreModule,Xo as DEFAULT_TEMPLATE_NAMES,Ha as DocumentNormalizerModule,Gi as DrawingItem,Ys as DrawingStyleManager,ml as DynamsoftMRZScanner,oa as EnumBarcodeFormat,r as EnumBufferOverflowProtectionMode,nt as EnumCapturedResultItemType,a as EnumColourChannelUsageType,st as EnumCornerType,dt as EnumCrossVerificationStatus,da as EnumDeblurMode,Ti as EnumDrawingItemMediaType,bi as EnumDrawingItemState,Ii as EnumEnhancedFeatures,rt as EnumErrorCode,la as EnumExtendedBarcodeResultType,Vo as EnumFilterType,at as EnumGrayscaleEnhancementMode,ot as EnumGrayscaleTransformationMode,pt as EnumImageCaptureDistanceMode,za as EnumImageColourMode,mt as EnumImageFileFormat,o as EnumImagePixelFormat,ne as EnumImageSourceState,lt as EnumImageTagType,ut as EnumIntermediateResultUnitType,ca as EnumLocalizationMode,il as EnumMRZData,Go as EnumMRZDocumentType,Uo as EnumMRZScanMode,Wo as EnumMRZScannerViews,Sa as EnumMappingStatus,_t as EnumModuleName,ht as EnumPDFReadingMode,Pe as EnumPresetTemplate,ha as EnumQRCodeErrorCorrectionLevel,ct as EnumRasterDataSource,Ea as EnumRawTextLineStatus,ft as EnumRegionObjectElementType,qo as EnumResultStatus,gt as EnumSectionType,vt as EnumTransformMatrixType,Ta as EnumValidationStatus,Nr as Feedback,nn as GroupDrawingItem,Js as ImageDataGetter,Ho as ImageDrawer,Zi as ImageDrawingItem,Qr as ImageEditorView,Yo as ImageIO,zo as ImageProcessor,$ as ImageSourceAdapter,Fe as IntermediateResultReceiver,wa as LabelRecognizerModule,ii as LicenseManager,si as LicenseModule,tn as LineDrawingItem,nl as MRZDataLabel,dl as MRZResultView,gl as MRZScanner,hl as MRZScannerView,ko as MultiFrameResultCrossFilter,en as QuadDrawingItem,Wi as RectDrawingItem,Ji as TextDrawingItem,Qa as UtilityModule,k as _getNorImageData,M as _saveToFile,P as _toBlob,L as _toCanvas,F as _toImage,Rt as bDebug,O as checkIsLink,A as compareVersion,rl as displayMRZDate,Ct as doOrWaitAsyncDependency,Tt as getNextTaskID,D as handleEngineResourcePaths,At as innerVersions,p as isArc,_ as isContour,w as isDSImageData,C as isDSRect,E as isImageTag,S as isLineSegment,m as isObject,y as isOriginalDsImageData,T as isPoint,b as isPolygon,I as isQuad,x as isRect,N as isSimdSupported,yt as mapAsyncDependency,Dt as mapPackageRegister,bt as mapTaskCallBack,It as onLog,B as productNameMap,R as requestResource,Ot as setBDebug,xt as setOnLog,Ca as utilsFuncs,wt as waitAsyncDependency,Et as worker,Mt as workerAutoResources};