{"version":3,"sources":["webpack:///./node_modules/croppie/croppie.js"],"names":["self","Promise","a","b","apply","arguments","c","this","TypeError","_state","_value","_deferreds","i","e","f","d","push","k","onFulfilled","onRejected","reject","resolve","then","g","call","length","h","j","setTimeout","setImmediate","l","Array","isArray","Object","prototype","toString","all","slice","constructor","race","_setImmediateFn","module","exports","window","CustomEvent","event","params","bubbles","cancelable","detail","undefined","evt","document","createEvent","initCustomEvent","Event","HTMLCanvasElement","toBlob","defineProperty","value","callback","type","quality","binStr","atob","toDataURL","split","len","arr","Uint8Array","charCodeAt","Blob","CSS_TRANS_ORG","CSS_TRANSFORM","CSS_USERSELECT","cssPrefixes","emptyStyles","createElement","style","EXIF_NORM","EXIF_FLIP","vendorPrefix","prop","capProp","toUpperCase","getExifOffset","ornt","rotate","indexOf","index","offset","deepExtend","destination","source","property","clone","object","debounce","func","wait","immediate","timeout","context","args","later","callNow","clearTimeout","dispatchChange","element","initEvent","dispatchEvent","fireEvent","css","el","styles","val","tmp","addClass","classList","add","className","removeClass","remove","replace","setAttributes","attrs","key","setAttribute","num","v","parseInt","loadImage","src","doExif","img","Image","opacity","_resolve","removeAttribute","match","onload","EXIF","getData","onerror","ev","naturalImageDimensions","w","naturalWidth","naturalHeight","orient","getExifOrientation","x","width","height","TRANSLATE_OPTS","suffix","Transform","y","scale","parseFloat","parse","fromMatrix","fromString","vals","substring","values","translate","Croppie","globals","TransformOrigin","exifdata","Orientation","drawCanvas","canvas","orientation","ctx","getContext","save","Math","PI","drawImage","restore","_create","boundary","viewport","overlay","bw","bh","contClass","customViewportClass","options","useCanvas","enableOrientation","_hasExif","data","elements","preview","isNaN","appendChild","customClass","_initDraggable","enableZoom","_initializeZoom","enableResize","_initializeResize","enableExif","direction","originalX","originalY","maxWidth","maxHeight","vr","hr","wrap","isDragging","minSize","mouseDown","button","preventDefault","overlayRect","getBoundingClientRect","pageX","pageY","currentTarget","touches","addEventListener","mouseMove","mouseUp","body","deltaX","deltaY","newHeight","newWidth","_updateOverlay","_updateZoomLimits","_updateCenterPoint","_triggerUpdate","removeEventListener","resizeControls","_setZoomerVal","z","zoomer","fix","max","min","zoomerWrap","change","_onZoom","origin","viewportRect","transform","scroll","delta","targetZoom","mouseWheelZoom","ctrlKey","wheelDelta","_currentZoom","step","display","showZoomer","ui","vpRect","applyCss","transCss","enforceBoundary","boundaries","_getVirtualBoundaries","transBoundaries","oBoundaries","maxX","minX","maxY","minY","_debouncedOverlay","vpWidth","vpHeight","centerFromBoundaryX","clientWidth","centerFromBoundaryY","clientHeight","imgRect","curImgWidth","curImgHeight","halfWidth","halfHeight","originMinX","originMinY","vpData","pc","top","left","center","adj","cx","cy","tx","ty","newCss","originalDistance","assignTransformCoordinates","bottom","right","toggleGrabState","keyDown","zoom","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","shiftKey","keyCode","enableKeyMovement","movement","parseKeyDown","keyMove","setZoom","touch1","touch2","dist","sqrt","boundRect","imgData","get","_isVisible","update","$","Prototype","trigger","offsetHeight","offsetWidth","_updatePropertiesFromImage","initialZoom","cssReset","transformReset","originReset","bound","_originalImageWidth","_originalImageHeight","points","_bindPoints","_centerImage","initial","defaultInitialZoom","minW","minH","minZoom","maxZoom","boundaryData","boundZoom","pointsWidth","vpOffset","originTop","originLeft","transformTop","transformLeft","imgDim","vpDim","boundDim","vpLeft","vpTop","_transferImageToCanvas","customOrientation","clearRect","_getCanvas","circle","canvasWidth","outputWidth","canvasHeight","outputHeight","backgroundColor","fillStyle","fillRect","sx","sy","sWidth","sHeight","dx","dy","dWidth","dHeight","abs","globalCompositeOperation","beginPath","arc","closePath","fill","_getHtmlResult","div","url","_getBase64Result","format","_getBlobResult","blob","_replaceImage","parentNode","forEach","replaceChild","_bind","cb","hasExif","relative","natDim","rect","aspectRatio","x0","y0","x1","y1","map","p","decimalPoints","toFixed","_get","widthDiff","heightDiff","x2","y2","Infinity","Number","NEGATIVE_INFINITY","RESULT_DEFAULTS","RESULT_FORMATS","_result","opts","resultType","size","ratio","toLowerCase","_refresh","_rotate","deg","_destroy","removeChild","fn","croppie","singleInst","result","bind","each","method","isFunction","removeData","Error","defaults","tagName","origImage","replacementDiv","bindOpts","orientationControls","enabled","leftClass","rightClass","refresh","destroy"],"mappings":"yFAAA,oBAiBkB,oBAATA,MAAuBA,UARV,0BAAd,EAQqC,WAGlB,mBAAZC,SAEN,SAASC,GAAG,SAASC,EAAED,EAAEC,GAAG,OAAO,WAAWD,EAAEE,MAAMD,EAAEE,YAAY,SAASC,EAAEJ,GAAG,GAAG,iBAAkBK,KAAK,MAAM,IAAIC,UAAU,wCAAwC,GAAG,mBAAoBN,EAAE,MAAM,IAAIM,UAAU,kBAAkBD,KAAKE,OAAO,KAAKF,KAAKG,OAAO,KAAKH,KAAKI,WAAW,GAAGC,EAAEV,EAAEC,EAAEU,EAAEN,MAAMJ,EAAEW,EAAEP,OAAO,SAASQ,EAAEb,GAAG,IAAIC,EAAEI,KAAK,OAAO,OAAOA,KAAKE,YAAYF,KAAKI,WAAWK,KAAKd,QAAQe,GAAE,WAAW,IAAIX,EAAEH,EAAEM,OAAOP,EAAEgB,YAAYhB,EAAEiB,WAAW,GAAG,OAAOb,EAAV,CAA+D,IAAIS,EAAE,IAAIA,EAAET,EAAEH,EAAEO,QAAQ,MAAMG,GAAG,YAAYX,EAAEkB,OAAOP,GAAGX,EAAEmB,QAAQN,QAA1GZ,EAAEM,OAAOP,EAAEmB,QAAQnB,EAAEkB,QAAQjB,EAAEO,WAAgF,SAASG,EAAEX,GAAG,IAAI,GAAGA,IAAIK,KAAK,MAAM,IAAIC,UAAU,6CAA6C,GAAGN,IAAI,iBAAkBA,GAAG,mBAAoBA,GAAG,CAAC,IAAII,EAAEJ,EAAEoB,KAAK,GAAG,mBAAoBhB,EAAE,YAAYM,EAAET,EAAEG,EAAEJ,GAAGC,EAAEU,EAAEN,MAAMJ,EAAEW,EAAEP,OAAOA,KAAKE,QAAO,EAAGF,KAAKG,OAAOR,EAAEqB,EAAEC,KAAKjB,MAAM,MAAMQ,GAAGD,EAAEU,KAAKjB,KAAKQ,IAAI,SAASD,EAAEZ,GAAGK,KAAKE,QAAO,EAAGF,KAAKG,OAAOR,EAAEqB,EAAEC,KAAKjB,MAAM,SAASgB,IAAI,IAAI,IAAIrB,EAAE,EAAEC,EAAEI,KAAKI,WAAWc,OAAOtB,EAAED,EAAEA,IAAIa,EAAES,KAAKjB,KAAKA,KAAKI,WAAWT,IAAIK,KAAKI,WAAW,KAAK,SAASe,EAAExB,EAAEC,EAAEG,EAAES,GAAGR,KAAKW,YAAY,mBAAoBhB,EAAEA,EAAE,KAAKK,KAAKY,WAAW,mBAAoBhB,EAAEA,EAAE,KAAKI,KAAKc,QAAQf,EAAEC,KAAKa,OAAOL,EAAE,SAASH,EAAEV,EAAEC,EAAEG,GAAG,IAAIS,GAAE,EAAG,IAAIb,GAAE,SAASA,GAAGa,IAAIA,GAAE,EAAGZ,EAAED,OAAK,SAASA,GAAGa,IAAIA,GAAE,EAAGT,EAAEJ,OAAM,MAAMW,GAAG,GAAGE,EAAE,OAAOA,GAAE,EAAGT,EAAEO,IAAI,IAAIc,EAAEC,WAAWX,EAAE,mBAAoBY,cAAcA,cAAc,SAAS3B,GAAGyB,EAAEzB,EAAE,IAAI4B,EAAEC,MAAMC,SAAS,SAAS9B,GAAG,MAAM,mBAAmB+B,OAAOC,UAAUC,SAASX,KAAKtB,IAAII,EAAE4B,UAAiB,MAAE,SAAShC,GAAG,OAAOK,KAAKe,KAAK,KAAKpB,IAAII,EAAE4B,UAAUZ,KAAK,SAASpB,EAAEC,GAAG,IAAIU,EAAEN,KAAK,OAAO,IAAID,GAAE,SAASA,EAAEQ,GAAGC,EAAES,KAAKX,EAAE,IAAIa,EAAExB,EAAEC,EAAEG,EAAEQ,QAAOR,EAAE8B,IAAI,WAAW,IAAIlC,EAAE6B,MAAMG,UAAUG,MAAMb,KAAK,IAAInB,UAAUoB,QAAQK,EAAEzB,UAAU,IAAIA,UAAU,GAAGA,WAAW,OAAO,IAAIC,GAAE,SAASH,EAAEG,GAAG,SAASS,EAAED,EAAES,GAAG,IAAI,GAAGA,IAAI,iBAAkBA,GAAG,mBAAoBA,GAAG,CAAC,IAAIG,EAAEH,EAAED,KAAK,GAAG,mBAAoBI,EAAE,YAAYA,EAAEF,KAAKD,GAAE,SAASrB,GAAGa,EAAED,EAAEZ,KAAII,GAAGJ,EAAEY,GAAGS,EAAE,KAAMV,GAAGV,EAAED,GAAG,MAAMU,GAAGN,EAAEM,IAAI,GAAG,IAAIV,EAAEuB,OAAO,OAAOtB,EAAE,IAAI,IAAI,IAAIU,EAAEX,EAAEuB,OAAOX,EAAE,EAAEA,EAAEZ,EAAEuB,OAAOX,IAAIC,EAAED,EAAEZ,EAAEY,QAAOR,EAAEe,QAAQ,SAASnB,GAAG,OAAOA,GAAG,iBAAkBA,GAAGA,EAAEoC,cAAchC,EAAEJ,EAAE,IAAII,GAAE,SAASH,GAAGA,EAAED,OAAMI,EAAEc,OAAO,SAASlB,GAAG,OAAO,IAAII,GAAE,SAASH,EAAEG,GAAGA,EAAEJ,OAAMI,EAAEiC,KAAK,SAASrC,GAAG,OAAO,IAAII,GAAE,SAASH,EAAEG,GAAG,IAAI,IAAIS,EAAE,EAAEF,EAAEX,EAAEuB,OAAOZ,EAAEE,EAAEA,IAAIb,EAAEa,GAAGO,KAAKnB,EAAEG,OAAMA,EAAEkC,gBAAgB,SAAStC,GAAGe,EAAEf,GAAgCuC,EAAOC,QAAQD,EAAOC,QAAQpC,EAAEJ,EAAED,UAAUC,EAAED,QAAQK,GAAh3E,CAAo3EC,MAGt1E,mBAAvBoC,OAAOC,aACd,WACG,SAASA,EAAcC,EAAOC,GAC1BA,EAASA,GAAU,CAAEC,SAAS,EAAOC,YAAY,EAAOC,YAAQC,GAChE,IAAIC,EAAMC,SAASC,YAAa,eAEhC,OADAF,EAAIG,gBAAiBT,EAAOC,EAAOC,QAASD,EAAOE,WAAYF,EAAOG,QAC/DE,EAEXP,EAAYV,UAAYS,OAAOY,MAAMrB,UACrCS,OAAOC,YAAcA,EARzB,GAYCY,kBAAkBtB,UAAUuB,QAC7BxB,OAAOyB,eAAeF,kBAAkBtB,UAAW,SAAU,CACzDyB,MAAO,SAAUC,EAAUC,EAAMC,GAK7B,IAJA,IAAIC,EAASC,KAAMzD,KAAK0D,UAAUJ,EAAMC,GAASI,MAAM,KAAK,IAC5DC,EAAMJ,EAAOtC,OACb2C,EAAM,IAAIC,WAAWF,GAEZvD,EAAE,EAAGA,EAAEuD,EAAKvD,IACjBwD,EAAIxD,GAAKmD,EAAOO,WAAW1D,GAG/BgD,EAAU,IAAIW,KAAM,CAACH,GAAM,CAACP,KAAMA,GAAQ,kBAMtD,IAIIW,EACAC,EACAC,EANAC,EAAc,CAAC,SAAU,MAAO,MAChCC,EAAcxB,SAASyB,cAAc,OAAOC,MAC5CC,EAAY,CAAC,EAAE,EAAE,EAAE,GACnBC,EAAY,CAAC,EAAE,EAAE,EAAE,GAKvB,SAASC,EAAaC,GAClB,GAAIA,KAAQN,EACR,OAAOM,EAMX,IAHA,IAAIC,EAAUD,EAAK,GAAGE,cAAgBF,EAAK7C,MAAM,GAC7CzB,EAAI+D,EAAYlD,OAEbb,KAEH,IADAsE,EAAOP,EAAY/D,GAAKuE,KACZP,EACR,OAAOM,EASnB,SAASG,EAAcC,EAAMC,GACzB,IAAInB,EAAMW,EAAUS,QAAQF,IAAS,EAAIP,EAAYC,EACjDS,EAAQrB,EAAIoB,QAAQF,GACpBI,EAAUH,EAAS,GAAMnB,EAAI3C,OAEjC,OAAO2C,GAAKA,EAAI3C,OAASgE,EAASC,EAAStB,EAAI3C,QAAW2C,EAAI3C,QAIlE,SAASkE,EAAWC,EAAaC,GAE7B,IAAK,IAAIC,KADTF,EAAcA,GAAe,GACRC,EACbA,EAAOC,IAAaD,EAAOC,GAAUxD,aAAeuD,EAAOC,GAAUxD,cAAgBL,QACrF2D,EAAYE,GAAYF,EAAYE,IAAa,GACjDH,EAAWC,EAAYE,GAAWD,EAAOC,KAEzCF,EAAYE,GAAYD,EAAOC,GAGvC,OAAOF,EAGX,SAASG,EAAMC,GACX,OAAOL,EAAW,GAAIK,GAG1B,SAASC,EAASC,EAAMC,EAAMC,GAC1B,IAAIC,EACJ,OAAO,WACH,IAAIC,EAAU/F,KAAMgG,EAAOlG,UACvBmG,EAAQ,WACRH,EAAU,KACLD,GAAWF,EAAK9F,MAAMkG,EAASC,IAEpCE,EAAUL,IAAcC,EAC5BK,aAAaL,GACbA,EAAUzE,WAAW4E,EAAOL,GACxBM,GAASP,EAAK9F,MAAMkG,EAASC,IAIzC,SAASI,EAAeC,GACpB,GAAI,gBAAiBxD,SAAU,CAC3B,IAAID,EAAMC,SAASC,YAAY,cAC/BF,EAAI0D,UAAU,UAAU,GAAO,GAC/BD,EAAQE,cAAc3D,QAGtByD,EAAQG,UAAU,YAK1B,SAASC,EAAIC,EAAIC,EAAQC,GACrB,GAAwB,iBAAb,EAAuB,CAC9B,IAAIC,EAAMF,GACVA,EAAS,IACFE,GAAOD,EAGlB,IAAK,IAAIjC,KAAQgC,EACbD,EAAGnC,MAAMI,GAAQgC,EAAOhC,GAIhC,SAASmC,EAASJ,EAAI3G,GACd2G,EAAGK,UACHL,EAAGK,UAAUC,IAAIjH,GAGjB2G,EAAGO,WAAa,IAAMlH,EAI9B,SAASmH,EAAYR,EAAI3G,GACjB2G,EAAGK,UACHL,EAAGK,UAAUI,OAAOpH,GAGpB2G,EAAGO,UAAYP,EAAGO,UAAUG,QAAQrH,EAAG,IAI/C,SAASsH,EAAcX,EAAIY,GACvB,IAAK,IAAIC,KAAOD,EACZZ,EAAGc,aAAaD,EAAKD,EAAMC,IAInC,SAASE,EAAIC,GACT,OAAOC,SAASD,EAAG,IAIvB,SAASE,EAAUC,EAAKC,GACpB,IAAIC,EAAM,IAAIC,MAEd,OADAD,EAAIxD,MAAM0D,QAAU,IACb,IAAIvI,SAAQ,SAAUoB,EAASD,GAClC,SAASqH,IACLH,EAAIxD,MAAM0D,QAAU,IACpB5G,YAAW,WACPP,EAAQiH,KACT,GAGPA,EAAII,gBAAgB,eAChBN,EAAIO,MAAM,uBACVL,EAAIP,aAAa,cAAe,aAGpCO,EAAIM,OAAS,WACLP,EACAQ,KAAKC,QAAQR,GAAK,WACdG,OAIJA,KAGRH,EAAIS,QAAU,SAAUC,GACpBV,EAAIxD,MAAM0D,QAAU,EACpB5G,YAAW,WACPR,EAAO4H,KACR,IAEPV,EAAIF,IAAMA,KAIlB,SAASa,EAAuBX,EAAKhD,GACjC,IAAI4D,EAAIZ,EAAIa,aACRzH,EAAI4G,EAAIc,cACRC,EAAS/D,GAAQgE,EAAmBhB,GACxC,GAAIe,GAAUA,GAAU,EAAG,CACvB,IAAIE,EAAGL,EACPA,EAAIxH,EACJA,EAAI6H,EAER,MAAO,CAAEC,MAAON,EAAGO,OAAQ/H,GA/I/B+C,EAAgBQ,EAAa,aAC7BT,EAAgBS,EAAa,mBAC7BP,EAAiBO,EAAa,cAiJ9B,IAAIyE,EAAiB,CACjB,YAAe,CACXC,OAAQ,SAEZ,UAAa,CACTA,OAAQ,KAGZC,EAAY,SAAUL,EAAGM,EAAGC,GAC5BvJ,KAAKgJ,EAAIQ,WAAWR,GACpBhJ,KAAKsJ,EAAIE,WAAWF,GACpBtJ,KAAKuJ,MAAQC,WAAWD,IAG5BF,EAAUI,MAAQ,SAAU/B,GACxB,OAAIA,EAAEnD,MACK8E,EAAUI,MAAM/B,EAAEnD,MAAML,IAE1BwD,EAAEzC,QAAQ,WAAa,GAAKyC,EAAEzC,QAAQ,SAAW,EAC/CoE,EAAUK,WAAWhC,GAGrB2B,EAAUM,WAAWjC,IAIpC2B,EAAUK,WAAa,SAAUhC,GAC7B,IAAIkC,EAAOlC,EAAEmC,UAAU,GAAGlG,MAAM,KAKhC,OAJKiG,EAAK1I,QAAgB,SAANwG,IAChBkC,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAGpB,IAAIP,EAAU5B,EAAImC,EAAK,IAAKnC,EAAImC,EAAK,IAAKJ,WAAWI,EAAK,MAGrEP,EAAUM,WAAa,SAAUjC,GAC7B,IAAIoC,EAASpC,EAAE/D,MAAM,MACjBoG,EAAYD,EAAO,GAAGD,UAAUG,GAAQC,QAAQF,UAAU7I,OAAS,GAAGyC,MAAM,KAC5E4F,EAAQO,EAAO5I,OAAS,EAAI4I,EAAO,GAAGD,UAAU,GAAK,EACrDb,EAAIe,EAAU7I,OAAS,EAAI6I,EAAU,GAAK,EAC1CT,EAAIS,EAAU7I,OAAS,EAAI6I,EAAU,GAAK,EAE9C,OAAO,IAAIV,EAAUL,EAAGM,EAAGC,IAG/BF,EAAU1H,UAAUC,SAAW,WAC3B,IAAIwH,EAASD,EAAea,GAAQC,QAAQF,WAAWX,QAAU,GACjE,OAAOY,GAAQC,QAAQF,UAAY,IAAM/J,KAAKgJ,EAAI,OAAShJ,KAAKsJ,EAAI,KAAOF,EAAS,WAAapJ,KAAKuJ,MAAQ,KAGlH,IAAIW,EAAkB,SAAUxD,GAC5B,IAAKA,IAAOA,EAAGnC,MAAMN,GAGjB,OAFAjE,KAAKgJ,EAAI,OACThJ,KAAKsJ,EAAI,GAGb,IAAI7C,EAAMC,EAAGnC,MAAMN,GAAeN,MAAM,KACxC3D,KAAKgJ,EAAIQ,WAAW/C,EAAI,IACxBzG,KAAKsJ,EAAIE,WAAW/C,EAAI,KAO5B,SAASsC,EAAoBhB,GACzB,OAAOA,EAAIoC,UAAYpC,EAAIoC,SAASC,YAAc3C,EAAIM,EAAIoC,SAASC,aAAe,EAGtF,SAASC,EAAWC,EAAQvC,EAAKwC,GAC7B,IAAItB,EAAQlB,EAAIkB,MACZC,EAASnB,EAAImB,OACbsB,EAAMF,EAAOG,WAAW,MAM5B,OAJAH,EAAOrB,MAAQlB,EAAIkB,MACnBqB,EAAOpB,OAASnB,EAAImB,OAEpBsB,EAAIE,OACIH,GACN,KAAK,EACFC,EAAIT,UAAUd,EAAO,GACrBuB,EAAIjB,OAAO,EAAG,GACd,MAEH,KAAK,EACDiB,EAAIT,UAAUd,EAAOC,GACrBsB,EAAIxF,OAAO,IAAI2F,KAAKC,GAAG,KACvB,MAEJ,KAAK,EACDJ,EAAIT,UAAU,EAAGb,GACjBsB,EAAIjB,MAAM,GAAI,GACd,MAEJ,KAAK,EACDe,EAAOrB,MAAQC,EACfoB,EAAOpB,OAASD,EAChBuB,EAAIxF,OAAO,GAAG2F,KAAKC,GAAG,KACtBJ,EAAIjB,MAAM,GAAI,GACd,MAEJ,KAAK,EACDe,EAAOrB,MAAQC,EACfoB,EAAOpB,OAASD,EAChBuB,EAAIxF,OAAO,GAAG2F,KAAKC,GAAG,KACtBJ,EAAIT,UAAU,GAAIb,GAClB,MAEJ,KAAK,EACDoB,EAAOrB,MAAQC,EACfoB,EAAOpB,OAASD,EAChBuB,EAAIxF,QAAQ,GAAG2F,KAAKC,GAAG,KACvBJ,EAAIT,WAAWd,EAAOC,GACtBsB,EAAIjB,MAAM,GAAI,GACd,MAEJ,KAAK,EACDe,EAAOrB,MAAQC,EACfoB,EAAOpB,OAASD,EAChBuB,EAAIT,UAAU,EAAGd,GACjBuB,EAAIxF,QAAQ,GAAG2F,KAAKC,GAAG,KAG7BJ,EAAIK,UAAU9C,EAAK,EAAE,EAAGkB,EAAOC,GAC/BsB,EAAIM,UAIR,SAASC,IACL,IAGIC,EAAUjD,EAAKkD,EAAUC,EAASC,EAAIC,EAHtC3L,EAAOO,KACPqL,EAAY,oBACZC,EAAsB7L,EAAK8L,QAAQN,SAAS3H,KAAO,SAAW7D,EAAK8L,QAAQN,SAAS3H,KAAO,KAG/F7D,EAAK8L,QAAQC,UAAY/L,EAAK8L,QAAQE,mBAAqBC,EAASzK,KAAKxB,GAEzEA,EAAKkM,KAAO,GACZlM,EAAKmM,SAAW,GAEhBZ,EAAWvL,EAAKmM,SAASZ,SAAWnI,SAASyB,cAAc,OAC3D2G,EAAWxL,EAAKmM,SAASX,SAAWpI,SAASyB,cAAc,OAC3DyD,EAAMtI,EAAKmM,SAAS7D,IAAMlF,SAASyB,cAAc,OACjD4G,EAAUzL,EAAKmM,SAASV,QAAUrI,SAASyB,cAAc,OAErD7E,EAAK8L,QAAQC,WACb/L,EAAKmM,SAAStB,OAASzH,SAASyB,cAAc,UAC9C7E,EAAKmM,SAASC,QAAUpM,EAAKmM,SAAStB,QAGtC7K,EAAKmM,SAASC,QAAU9D,EAG5BjB,EAASkE,EAAU,eACnBA,EAASxD,aAAa,kBAAmB,QACzC2D,EAAK1L,EAAK8L,QAAQP,SAAS/B,MAC3BmC,EAAK3L,EAAK8L,QAAQP,SAAS9B,OAC3BzC,EAAIuE,EAAU,CACV/B,MAAQkC,GAAMW,MAAMX,GAAM,GAAK,MAC/BjC,OAASkC,GAAMU,MAAMV,GAAM,GAAK,QAGpCtE,EAASmE,EAAU,eACfK,GACAxE,EAASmE,EAAUK,GAEvB7E,EAAIwE,EAAU,CACVhC,MAAOxJ,EAAK8L,QAAQN,SAAShC,MAAQ,KACrCC,OAAQzJ,EAAK8L,QAAQN,SAAS/B,OAAS,OAE3C+B,EAASzD,aAAa,WAAY,GAElCV,EAASrH,EAAKmM,SAASC,QAAS,YAChCxE,EAAc5H,EAAKmM,SAASC,QAAS,CAAE,IAAO,UAAW,eAAgB,UACzE/E,EAASoE,EAAS,cAElBzL,EAAK4G,QAAQ0F,YAAYf,GACzBA,EAASe,YAAYtM,EAAKmM,SAASC,SACnCb,EAASe,YAAYd,GACrBD,EAASe,YAAYb,GAErBpE,EAASrH,EAAK4G,QAASgF,GACnB5L,EAAK8L,QAAQS,aACblF,EAASrH,EAAK4G,QAAS5G,EAAK8L,QAAQS,aAGxCC,EAAehL,KAAKjB,MAEhBP,EAAK8L,QAAQW,YACbC,EAAgBlL,KAAKxB,GAOrBA,EAAK8L,QAAQa,cACbC,EAAkBpL,KAAKxB,GAkC/B,SAASiM,IACL,OAAO1L,KAAKuL,QAAQe,YAAclK,OAAOkG,KAG7C,SAAS+D,IACL,IAGIE,EACAC,EACAC,EAEAC,EACAC,EACAC,EACAC,EAVApN,EAAOO,KACP8M,EAAOjK,SAASyB,cAAc,OAC9ByI,GAAa,EAIbC,EAAU,GAwBd,SAASC,EAAUxE,GACf,SAAkB9F,IAAd8F,EAAGyE,QAAsC,IAAdzE,EAAGyE,UAElCzE,EAAG0E,kBACCJ,GAAJ,CAIA,IAAIK,EAAc3N,EAAKmM,SAASV,QAAQmC,wBASxC,GAPAN,GAAa,EACbP,EAAY/D,EAAG6E,MACfb,EAAYhE,EAAG8E,MACfhB,GAAgE,IAApD9D,EAAG+E,cAAcvG,UAAUhC,QAAQ,YAAqB,IAAM,IAC1EyH,EAAWU,EAAYnE,MACvB0D,EAAYS,EAAYlE,OAEpBT,EAAGgF,QAAS,CACZ,IAAIA,EAAUhF,EAAGgF,QAAQ,GACzBjB,EAAYiB,EAAQH,MACpBb,EAAYgB,EAAQF,MAGxBnL,OAAOsL,iBAAiB,YAAaC,GACrCvL,OAAOsL,iBAAiB,YAAaC,GACrCvL,OAAOsL,iBAAiB,UAAWE,GACnCxL,OAAOsL,iBAAiB,WAAYE,GACpC/K,SAASgL,KAAKtJ,MAAMJ,GAAkB,QAG1C,SAASwJ,EAAUlF,GACf,IAAI6E,EAAQ7E,EAAG6E,MACXC,EAAQ9E,EAAG8E,MAIf,GAFA9E,EAAG0E,iBAEC1E,EAAGgF,QAAS,CACZ,IAAIA,EAAUhF,EAAGgF,QAAQ,GACzBH,EAAQG,EAAQH,MAChBC,EAAQE,EAAQF,MAGpB,IAAIO,EAASR,EAAQd,EACjBuB,EAASR,EAAQd,EACjBuB,EAAYvO,EAAK8L,QAAQN,SAAS/B,OAAS6E,EAC3CE,EAAWxO,EAAK8L,QAAQN,SAAShC,MAAQ6E,EAE3B,MAAdvB,GAAqByB,GAAahB,GAAWgB,GAAarB,GAC1DlG,EAAIqG,EAAM,CACN5D,OAAQ8E,EAAY,OAGxBvO,EAAK8L,QAAQP,SAAS9B,QAAU6E,EAChCtH,EAAIhH,EAAKmM,SAASZ,SAAU,CACxB9B,OAAQzJ,EAAK8L,QAAQP,SAAS9B,OAAS,OAG3CzJ,EAAK8L,QAAQN,SAAS/B,QAAU6E,EAChCtH,EAAIhH,EAAKmM,SAASX,SAAU,CACxB/B,OAAQzJ,EAAK8L,QAAQN,SAAS/B,OAAS,QAGxB,MAAdqD,GAAqB0B,GAAYjB,GAAWiB,GAAYvB,IAC7DjG,EAAIqG,EAAM,CACN7D,MAAOgF,EAAW,OAGtBxO,EAAK8L,QAAQP,SAAS/B,OAAS6E,EAC/BrH,EAAIhH,EAAKmM,SAASZ,SAAU,CACxB/B,MAAOxJ,EAAK8L,QAAQP,SAAS/B,MAAQ,OAGzCxJ,EAAK8L,QAAQN,SAAShC,OAAS6E,EAC/BrH,EAAIhH,EAAKmM,SAASX,SAAU,CACxBhC,MAAOxJ,EAAK8L,QAAQN,SAAShC,MAAQ,QAI7CiF,EAAejN,KAAKxB,GACpB0O,EAAkBlN,KAAKxB,GACvB2O,EAAmBnN,KAAKxB,GACxB4O,EAAepN,KAAKxB,GACpBgN,EAAYc,EACZf,EAAYc,EAGhB,SAASM,IACLb,GAAa,EACb3K,OAAOkM,oBAAoB,YAAaX,GACxCvL,OAAOkM,oBAAoB,YAAaX,GACxCvL,OAAOkM,oBAAoB,UAAWV,GACtCxL,OAAOkM,oBAAoB,WAAYV,GACvC/K,SAASgL,KAAKtJ,MAAMJ,GAAkB,GA9G1C2C,EAASgG,EAAM,cACfrG,EAAIqG,EAAM,CACN7D,MAAOjJ,KAAKuL,QAAQN,SAAShC,MAAQ,KACrCC,OAAQlJ,KAAKuL,QAAQN,SAAS/B,OAAS,OAGvClJ,KAAKuL,QAAQgD,eAAerF,SAE5BpC,EADA8F,EAAK/J,SAASyB,cAAc,OACf,uBACbwI,EAAKf,YAAYa,IAGjB5M,KAAKuL,QAAQgD,eAAetF,QAE5BnC,EADA+F,EAAKhK,SAASyB,cAAc,OACf,yBACbwI,EAAKf,YAAYc,IAkGjBD,IACAA,EAAGc,iBAAiB,YAAaT,GACjCL,EAAGc,iBAAiB,aAAcT,IAGlCJ,IACAA,EAAGa,iBAAiB,YAAaT,GACjCJ,EAAGa,iBAAiB,aAAcT,IAGtCjN,KAAK4L,SAASZ,SAASe,YAAYe,GAGvC,SAAS0B,EAAc9G,GACnB,GAAI1H,KAAKuL,QAAQW,WAAY,CACzB,IAAIuC,EAAIzO,KAAK4L,SAAS8C,OAClB9H,EAAM+H,EAAIjH,EAAG,GAEjB+G,EAAErL,MAAQuH,KAAKiE,IAAIpF,WAAWiF,EAAEI,KAAMlE,KAAKkE,IAAIrF,WAAWiF,EAAEG,KAAMhI,IAAMhF,YAIhF,SAASuK,IACL,IAAI1M,EAAOO,KACP8M,EAAOrN,EAAKmM,SAASkD,WAAajM,SAASyB,cAAc,OACzDoK,EAASjP,EAAKmM,SAAS8C,OAAS7L,SAASyB,cAAc,SAe3D,SAASyK,IACLC,EAAQ/N,KAAKxB,EAAM,CACf2D,MAAOoG,WAAWkF,EAAOtL,OACzB6L,OAAQ,IAAI/E,EAAgBzK,EAAKmM,SAASC,SAC1CqD,aAAczP,EAAKmM,SAASX,SAASoC,wBACrC8B,UAAW9F,EAAUI,MAAMhK,EAAKmM,SAASC,WAIjD,SAASuD,EAAO3G,GACZ,IAAI4G,EAAOC,EAEX,GAAmC,SAAhC7P,EAAK8L,QAAQgE,iBAA4C,IAAf9G,EAAG+G,QAC9C,OAAO,EAELH,EADO5G,EAAGgH,WACFhH,EAAGgH,WAAa,KACjBhH,EAAGsF,OACFtF,EAAGsF,OAAS,KACbtF,EAAG/F,OACF+F,EAAG/F,QAAU,GAEb,EAGZ4M,EAAa7P,EAAKiQ,aAAgBL,EAAQ5P,EAAKiQ,aAE/CjH,EAAG0E,iBACHqB,EAAcvN,KAAKxB,EAAM6P,GACzBP,EAAO9N,KAAKxB,GAzChBqH,EAASgG,EAAM,kBACfhG,EAAS4H,EAAQ,aACjBA,EAAOpL,KAAO,QACdoL,EAAOiB,KAAO,SACdjB,EAAOtL,MAAQ,IACfsL,EAAOnK,MAAMqL,QAAUnQ,EAAK8L,QAAQsE,WAAa,GAAK,OACtDnB,EAAOlH,aAAa,aAAc,QAElC/H,EAAK4G,QAAQ0F,YAAYe,GACzBA,EAAKf,YAAY2C,GAEjBjP,EAAKiQ,aAAe,EAiCpBjQ,EAAKmM,SAAS8C,OAAOhB,iBAAiB,QAASqB,GAC/CtP,EAAKmM,SAAS8C,OAAOhB,iBAAiB,SAAUqB,GAE5CtP,EAAK8L,QAAQgE,iBACb9P,EAAKmM,SAASZ,SAAS0C,iBAAiB,aAAc0B,GACtD3P,EAAKmM,SAASZ,SAAS0C,iBAAiB,iBAAkB0B,IAIlE,SAASJ,EAAQc,GACb,IAAIrQ,EAAOO,KACPmP,EAAYW,EAAKA,EAAGX,UAAY9F,EAAUI,MAAMhK,EAAKmM,SAASC,SAC9DkE,EAASD,EAAKA,EAAGZ,aAAezP,EAAKmM,SAASX,SAASoC,wBACvD4B,EAASa,EAAKA,EAAGb,OAAS,IAAI/E,EAAgBzK,EAAKmM,SAASC,SAEhE,SAASmE,IACL,IAAIC,EAAW,GACfA,EAAS/L,GAAiBiL,EAAUvN,WACpCqO,EAAShM,GAAiBgL,EAAOrN,WACjC6E,EAAIhH,EAAKmM,SAASC,QAASoE,GAQ/B,GALAxQ,EAAKiQ,aAAeI,EAAKA,EAAG1M,MAAQ3D,EAAKiQ,aACzCP,EAAU5F,MAAQ9J,EAAKiQ,aACvBjQ,EAAKmM,SAAS8C,OAAOlH,aAAa,gBAAiB/H,EAAKiQ,cACxDM,IAEIvQ,EAAK8L,QAAQ2E,gBAAiB,CAC9B,IAAIC,EAAaC,EAAsBnP,KAAKxB,EAAMsQ,GAC9CM,EAAkBF,EAAWpG,UAC7BuG,EAAcH,EAAWlB,OAEzBE,EAAUnG,GAAKqH,EAAgBE,OAC/BtB,EAAOjG,EAAIsH,EAAYE,KACvBrB,EAAUnG,EAAIqH,EAAgBE,MAG9BpB,EAAUnG,GAAKqH,EAAgBG,OAC/BvB,EAAOjG,EAAIsH,EAAYC,KACvBpB,EAAUnG,EAAIqH,EAAgBG,MAG9BrB,EAAU7F,GAAK+G,EAAgBI,OAC/BxB,EAAO3F,EAAIgH,EAAYI,KACvBvB,EAAU7F,EAAI+G,EAAgBI,MAG9BtB,EAAU7F,GAAK+G,EAAgBK,OAC/BzB,EAAO3F,EAAIgH,EAAYG,KACvBtB,EAAU7F,EAAI+G,EAAgBK,MAGtCV,IACAW,EAAkB1P,KAAKxB,GACvB4O,EAAepN,KAAKxB,GAGxB,SAAS2Q,EAAsBnF,GAC3B,IAAIxL,EAAOO,KACPuJ,EAAQ9J,EAAKiQ,aACbkB,EAAU3F,EAAShC,MACnB4H,EAAW5F,EAAS/B,OACpB4H,EAAsBrR,EAAKmM,SAASZ,SAAS+F,YAAc,EAC3DC,EAAsBvR,EAAKmM,SAASZ,SAASiG,aAAe,EAC5DC,EAAUzR,EAAKmM,SAASC,QAAQwB,wBAChC8D,EAAcD,EAAQjI,MACtBmI,EAAeF,EAAQhI,OACvBmI,EAAYT,EAAU,EACtBU,EAAaT,EAAW,EAExBN,GAAsD,GAA7Cc,EAAY9H,EAASuH,GAG9BL,GAAuD,GAA9Ca,EAAa/H,EAASyH,GAG/BO,EAAc,EAAIhI,EAAS8H,EAG3BG,EAAc,EAAIjI,EAAS+H,EAG/B,MAAO,CACHvH,UAAW,CACPwG,KAAMA,EACNC,KAdGD,GAASY,GAAe,EAAI5H,GAAWqH,GAAW,EAAIrH,IAezDkH,KAAMA,EACNC,KAbGD,GAASW,GAAgB,EAAI7H,GAAWsH,GAAY,EAAItH,KAe/D0F,OAAQ,CACJsB,KAbUY,GAAe,EAAI5H,GAAUgI,EAcvCf,KAAMe,EACNd,KAZUW,GAAgB,EAAI7H,GAAUiI,EAaxCd,KAAMc,IAKlB,SAASpD,EAAmBpJ,GACxB,IAAIvF,EAAOO,KACPuJ,EAAQ9J,EAAKiQ,aACb/D,EAAOlM,EAAKmM,SAASC,QAAQwB,wBAC7BoE,EAAShS,EAAKmM,SAASX,SAASoC,wBAChC8B,EAAY9F,EAAUI,MAAMhK,EAAKmM,SAASC,QAAQtH,MAAML,IACxDwN,EAAK,IAAIxH,EAAgBzK,EAAKmM,SAASC,SACvC8F,EAAOF,EAAOE,IAAMhG,EAAKgG,IAAQF,EAAOvI,OAAS,EACjD0I,EAAQH,EAAOG,KAAOjG,EAAKiG,KAASH,EAAOxI,MAAQ,EACnD4I,EAAS,GACTC,EAAM,GAEV,GAAI9M,EAAQ,CACR,IAAI+M,EAAKL,EAAG1I,EACRgJ,EAAKN,EAAGpI,EACR2I,EAAK9C,EAAUnG,EACfkJ,EAAK/C,EAAU7F,EAEnBuI,EAAOvI,EAAIyI,EACXF,EAAO7I,EAAIgJ,EACX7C,EAAU7F,EAAI2I,EACd9C,EAAUnG,EAAIkJ,OAGdL,EAAOvI,EAAIqI,EAAMpI,EACjBsI,EAAO7I,EAAI4I,EAAOrI,EAElBuI,EAAIxI,GAAKuI,EAAOvI,EAAIoI,EAAGpI,IAAM,EAAIC,GACjCuI,EAAI9I,GAAK6I,EAAO7I,EAAI0I,EAAG1I,IAAM,EAAIO,GAEjC4F,EAAUnG,GAAK8I,EAAI9I,EACnBmG,EAAU7F,GAAKwI,EAAIxI,EAGvB,IAAI6I,EAAS,GACbA,EAAOlO,GAAiB4N,EAAO7I,EAAI,MAAQ6I,EAAOvI,EAAI,KACtD6I,EAAOjO,GAAiBiL,EAAUvN,WAClC6E,EAAIhH,EAAKmM,SAASC,QAASsG,GAG/B,SAASlG,IACL,IAEIO,EACAC,EACA2F,EACArC,EACAZ,EANA1P,EAAOO,KACP+M,GAAa,EAOjB,SAASsF,EAA2BvE,EAAQC,GACxC,IAAImD,EAAUzR,EAAKmM,SAASC,QAAQwB,wBAChCsE,EAAMxC,EAAU7F,EAAIyE,EACpB6D,EAAOzC,EAAUnG,EAAI8E,EAErBrO,EAAK8L,QAAQ2E,iBACTH,EAAO4B,IAAMT,EAAQS,IAAM5D,GAAUgC,EAAOuC,OAASpB,EAAQoB,OAASvE,IACtEoB,EAAU7F,EAAIqI,GAGd5B,EAAO6B,KAAOV,EAAQU,KAAO9D,GAAUiC,EAAOwC,MAAQrB,EAAQqB,MAAQzE,IACtEqB,EAAUnG,EAAI4I,KAIlBzC,EAAU7F,EAAIqI,EACdxC,EAAUnG,EAAI4I,GAItB,SAASY,EAAgBzF,GACvBtN,EAAKmM,SAASC,QAAQrE,aAAa,eAAgBuF,GACnDtN,EAAKmM,SAASZ,SAASxD,aAAa,kBAAmBuF,EAAY,OAAQ,QAG7E,SAAS0F,EAAQhK,GACb,IAMQiK,EANJC,EAAc,GACdC,EAAc,GACdC,EAAc,GACdC,EAAc,GAElB,IAAIrK,EAAGsK,UAAatK,EAAGuK,UAAYJ,GAAYnK,EAAGuK,UAAYF,GAUzD,GAAIrT,EAAK8L,QAAQ0H,mBAAsBxK,EAAGuK,SAAW,IAAMvK,EAAGuK,SAAW,GAAK,CAC/EvK,EAAG0E,iBACH,IAAI+F,EAAWC,EAAa1K,EAAGuK,SAE/B7D,EAAY9F,EAAUI,MAAMhK,EAAKmM,SAASC,SAC1ChJ,SAASgL,KAAKtJ,MAAMJ,GAAkB,OACtC4L,EAAStQ,EAAKmM,SAASX,SAASoC,wBAChC+F,EAAQF,SAdJR,EADAjK,EAAGuK,UAAYJ,EACRpJ,WAAW/J,EAAKmM,SAAS8C,OAAOtL,OAASoG,WAAW/J,EAAKmM,SAAS8C,OAAOiB,MAGzEnG,WAAW/J,EAAKmM,SAAS8C,OAAOtL,OAASoG,WAAW/J,EAAKmM,SAAS8C,OAAOiB,MAEpFlQ,EAAK4T,QAAQX,GAYjB,SAASS,EAAa5L,GAClB,OAAQA,GACJ,KAAKoL,EACD,MAAO,CAAC,EAAG,GACf,KAAKC,EACD,MAAO,CAAC,EAAG,GACf,KAAKC,EACD,MAAO,EAAE,EAAG,GAChB,KAAKC,EACD,MAAO,CAAC,GAAI,KAK5B,SAASM,EAAQF,GACb,IAEIf,EAAS,GAEbE,EAJaa,EAAS,GACTA,EAAS,IAKtBf,EAAOjO,GAAiBiL,EAAUvN,WAClC6E,EAAIhH,EAAKmM,SAASC,QAASsG,GAC3BjE,EAAejN,KAAKxB,GACpBoD,SAASgL,KAAKtJ,MAAMJ,GAAkB,GACtCiK,EAAmBnN,KAAKxB,GACxB4O,EAAepN,KAAKxB,GACpB2S,EAAmB,EAGvB,SAASnF,EAAUxE,GACf,SAAkB9F,IAAd8F,EAAGyE,QAAsC,IAAdzE,EAAGyE,UAElCzE,EAAG0E,kBACCJ,GAAJ,CAKA,GAJAA,GAAa,EACbP,EAAY/D,EAAG6E,MACfb,EAAYhE,EAAG8E,MAEX9E,EAAGgF,QAAS,CACZ,IAAIA,EAAUhF,EAAGgF,QAAQ,GACzBjB,EAAYiB,EAAQH,MACpBb,EAAYgB,EAAQF,MAExBiF,EAAgBzF,GAChBoC,EAAY9F,EAAUI,MAAMhK,EAAKmM,SAASC,SAC1CzJ,OAAOsL,iBAAiB,YAAaC,GACrCvL,OAAOsL,iBAAiB,YAAaC,GACrCvL,OAAOsL,iBAAiB,UAAWE,GACnCxL,OAAOsL,iBAAiB,WAAYE,GACpC/K,SAASgL,KAAKtJ,MAAMJ,GAAkB,OACtC4L,EAAStQ,EAAKmM,SAASX,SAASoC,yBAGpC,SAASM,EAAUlF,GACfA,EAAG0E,iBACH,IAAIG,EAAQ7E,EAAG6E,MACXC,EAAQ9E,EAAG8E,MAEf,GAAI9E,EAAGgF,QAAS,CACZ,IAAIA,EAAUhF,EAAGgF,QAAQ,GACzBH,EAAQG,EAAQH,MAChBC,EAAQE,EAAQF,MAGpB,IAAIO,EAASR,EAAQd,EACjBuB,EAASR,EAAQd,EACjB0F,EAAS,GAEb,GAAgB,cAAZ1J,EAAGnF,MACCmF,EAAGgF,QAAQvM,OAAS,EAAG,CACvB,IAAIoS,EAAS7K,EAAGgF,QAAQ,GACpB8F,EAAS9K,EAAGgF,QAAQ,GACpB+F,EAAO7I,KAAK8I,MAAMH,EAAOhG,MAAQiG,EAAOjG,QAAUgG,EAAOhG,MAAQiG,EAAOjG,QAAUgG,EAAO/F,MAAQgG,EAAOhG,QAAU+F,EAAO/F,MAAQgG,EAAOhG,QAEvI6E,IACDA,EAAmBoB,EAAO/T,EAAKiQ,cAGnC,IAAInG,EAAQiK,EAAOpB,EAInB,OAFA5D,EAAcvN,KAAKxB,EAAM8J,QACzBnD,EAAe3G,EAAKmM,SAAS8C,QAKrC2D,EAA2BvE,EAAQC,GAEnCoE,EAAOjO,GAAiBiL,EAAUvN,WAClC6E,EAAIhH,EAAKmM,SAASC,QAASsG,GAC3BjE,EAAejN,KAAKxB,GACpBgN,EAAYc,EACZf,EAAYc,EAGhB,SAASM,IAEL4E,EADAzF,GAAa,GAEb3K,OAAOkM,oBAAoB,YAAaX,GACxCvL,OAAOkM,oBAAoB,YAAaX,GACxCvL,OAAOkM,oBAAoB,UAAWV,GACtCxL,OAAOkM,oBAAoB,WAAYV,GACvC/K,SAASgL,KAAKtJ,MAAMJ,GAAkB,GACtCiK,EAAmBnN,KAAKxB,GACxB4O,EAAepN,KAAKxB,GACpB2S,EAAmB,EAGvB3S,EAAKmM,SAASV,QAAQwC,iBAAiB,YAAaT,GACpDxN,EAAKmM,SAASX,SAASyC,iBAAiB,UAAW+E,GACnDhT,EAAKmM,SAASV,QAAQwC,iBAAiB,aAAcT,GAGzD,SAASiB,IACL,GAAKlO,KAAK4L,SAAV,CACA,IAAInM,EAAOO,KACP0T,EAAYjU,EAAKmM,SAASZ,SAASqC,wBACnCsG,EAAUlU,EAAKmM,SAASC,QAAQwB,wBAEpC5G,EAAIhH,EAAKmM,SAASV,QAAS,CACvBjC,MAAO0K,EAAQ1K,MAAQ,KACvBC,OAAQyK,EAAQzK,OAAS,KACzByI,IAAMgC,EAAQhC,IAAM+B,EAAU/B,IAAO,KACrCC,KAAO+B,EAAQ/B,KAAO8B,EAAU9B,KAAQ,QAprBhD1H,EAAgBvI,UAAUC,SAAW,WACjC,OAAO5B,KAAKgJ,EAAI,MAAQhJ,KAAKsJ,EAAI,MAsrBrC,IAAIqH,EAAoBjL,EAASwI,EAAgB,KAEjD,SAASG,IACL,IAYQ5F,EAZJhJ,EAAOO,KACP2L,EAAOlM,EAAKmU,MAEXC,EAAW5S,KAAKxB,KAIrBA,EAAK8L,QAAQuI,OAAO7S,KAAKxB,EAAMkM,GAC3BlM,EAAKsU,GAA0B,oBAAdC,UACjBvU,EAAKsU,EAAEtU,EAAK4G,SAAS4N,QAAQ,iBAAkBtI,IAI3CvJ,OAAOC,YACPoG,EAAK,IAAIpG,YAAY,SAAU,CAAEK,OAAQiJ,KAEzClD,EAAK5F,SAASC,YAAY,gBACvBC,gBAAgB,UAAU,GAAM,EAAM4I,GAG7ClM,EAAK4G,QAAQE,cAAckC,KAInC,SAASoL,IACL,OAAO7T,KAAK4L,SAASC,QAAQqI,aAAe,GAAKlU,KAAK4L,SAASC,QAAQsI,YAAc,EAGzF,SAASC,IACL,IAIIT,EAJAlU,EAAOO,KACPqU,EAAc,EACdC,EAAW,GACXvM,EAAMtI,EAAKmM,SAASC,QAEpB0I,EAAiB,IAAIlL,EAAU,EAAG,EAAGgL,GACrCG,EAAc,IAAItK,EACN2J,EAAW5S,KAAKxB,KAEdA,EAAKkM,KAAK8I,QAI5BhV,EAAKkM,KAAK8I,OAAQ,EAClBH,EAASpQ,GAAiBqQ,EAAe3S,WACzC0S,EAASrQ,GAAiBuQ,EAAY5S,WACtC0S,EAAkB,QAAI,EACtB7N,EAAIsB,EAAKuM,GAETX,EAAUlU,EAAKmM,SAASC,QAAQwB,wBAEhC5N,EAAKiV,oBAAsBf,EAAQ1K,MACnCxJ,EAAKkV,qBAAuBhB,EAAQzK,OACpCzJ,EAAKkM,KAAKpB,YAAcxB,EAAmBtJ,EAAKmM,SAAS7D,KAErDtI,EAAK8L,QAAQW,WACbiC,EAAkBlN,KAAKxB,GAAM,GAG7BA,EAAKiQ,aAAe2E,EAGxBE,EAAehL,MAAQ9J,EAAKiQ,aAC5B4E,EAASpQ,GAAiBqQ,EAAe3S,WACzC6E,EAAIsB,EAAKuM,GAEL7U,EAAKkM,KAAKiJ,OAAO1T,OACjB2T,EAAY5T,KAAKxB,EAAMA,EAAKkM,KAAKiJ,QAGjCE,EAAa7T,KAAKxB,GAGtB2O,EAAmBnN,KAAKxB,GACxByO,EAAejN,KAAKxB,IAGxB,SAAS0O,EAAmB4G,GACxB,IAGIV,EACAW,EAMAC,EACAC,EAXAzV,EAAOO,KACPmV,EAAUxK,KAAKiE,IAAInP,EAAK8L,QAAQ4J,QAAS,IAAM,EAC/CC,EAAU3V,EAAK8L,QAAQ6J,SAAW,IAGlC1G,EAASjP,EAAKmM,SAAS8C,OACvBnF,EAAQC,WAAWkF,EAAOtL,OAC1BiS,EAAe5V,EAAKmM,SAASZ,SAASqC,wBACtCsG,EAAUjL,EAAuBjJ,EAAKmM,SAAS7D,IAAKtI,EAAKkM,KAAKpB,aAC9DkH,EAAShS,EAAKmM,SAASX,SAASoC,wBAGhC5N,EAAK8L,QAAQ2E,kBACb+E,EAAOxD,EAAOxI,MAAQ0K,EAAQ1K,MAC9BiM,EAAOzD,EAAOvI,OAASyK,EAAQzK,OAC/BiM,EAAUxK,KAAKiE,IAAIqG,EAAMC,IAGzBC,GAAWC,IACXA,EAAUD,EAAU,GAGxBzG,EAAOG,IAAMF,EAAIwG,EAAS,GAC1BzG,EAAOE,IAAMD,EAAIyG,EAAS,IAErBL,IAAYxL,EAAQmF,EAAOG,KAAOtF,EAAQmF,EAAOE,KAClDJ,EAAcvN,KAAKxB,EAAM8J,EAAQmF,EAAOG,IAAMH,EAAOG,IAAMH,EAAOE,KAE7DmG,IACLC,EAAqBrK,KAAKiE,IAAKyG,EAAapM,MAAQ0K,EAAQ1K,MAASoM,EAAanM,OAASyK,EAAQzK,QACnGmL,EAAsC,OAAxB5U,EAAKkM,KAAK2J,UAAqB7V,EAAKkM,KAAK2J,UAAYN,EACnExG,EAAcvN,KAAKxB,EAAM4U,IAG7BjO,EAAesI,GAGnB,SAASmG,EAAYD,GACjB,GAAsB,IAAlBA,EAAO1T,OACP,KAAM,gDAAkD0T,EAE5D,IAAInV,EAAOO,KACPuV,EAAcX,EAAO,GAAKA,EAAO,GAEjCnD,EAAShS,EAAKmM,SAASX,SAASoC,wBAChCqG,EAAYjU,EAAKmM,SAASZ,SAASqC,wBACnCmI,EAAW,CACP5D,KAAMH,EAAOG,KAAO8B,EAAU9B,KAC9BD,IAAKF,EAAOE,IAAM+B,EAAU/B,KAEhCpI,EAAQkI,EAAOxI,MAAQsM,EACvBE,EAAYb,EAAO,GACnBc,EAAad,EAAO,GACpBe,GAAiB,EAAIf,EAAO,GAAMY,EAAS7D,IAC3CiE,GAAkB,EAAIhB,EAAO,GAAMY,EAAS5D,KAC5CO,EAAS,GAEbA,EAAOlO,GAAiByR,EAAa,MAAQD,EAAY,KACzDtD,EAAOjO,GAAiB,IAAImF,EAAUuM,EAAeD,EAAcpM,GAAO3H,WAC1E6E,EAAIhH,EAAKmM,SAASC,QAASsG,GAE3B3D,EAAcvN,KAAKxB,EAAM8J,GACzB9J,EAAKiQ,aAAenG,EAGxB,SAASuL,IACL,IAAIrV,EAAOO,KACP6V,EAASpW,EAAKmM,SAASC,QAAQwB,wBAC/ByI,EAAQrW,EAAKmM,SAASX,SAASoC,wBAC/B0I,EAAWtW,EAAKmM,SAASZ,SAASqC,wBAClC2I,EAASF,EAAMlE,KAAOmE,EAASnE,KAC/BqE,EAAQH,EAAMnE,IAAMoE,EAASpE,IAC7BhJ,EAAIqN,GAAWH,EAAO5M,MAAQ6M,EAAM7M,OAAS,EAC7C9H,EAAI8U,GAAUJ,EAAO3M,OAAS4M,EAAM5M,QAAU,EAC9CiG,EAAY,IAAI9F,EAAUV,EAAGxH,EAAG1B,EAAKiQ,cAEzCjJ,EAAIhH,EAAKmM,SAASC,QAAS3H,EAAeiL,EAAUvN,YAGxD,SAASsU,EAAuBC,GAC5B,IAAI1W,EAAOO,KACPsK,EAAS7K,EAAKmM,SAAStB,OACvBvC,EAAMtI,EAAKmM,SAAS7D,IACduC,EAAOG,WAAW,MAExB2L,UAAU,EAAG,EAAG9L,EAAOrB,MAAOqB,EAAOpB,QACzCoB,EAAOrB,MAAQlB,EAAIkB,MACnBqB,EAAOpB,OAASnB,EAAImB,OAGpBmB,EAAWC,EAAQvC,EADDtI,EAAK8L,QAAQE,mBAAqB0K,GAAqBpN,EAAmBhB,IAIhG,SAASsO,EAAW1K,GAChB,IAAIlM,EAAOO,KACP4U,EAASjJ,EAAKiJ,OACdhD,EAAOnK,EAAImN,EAAO,IAClBjD,EAAMlK,EAAImN,EAAO,IAGjB3L,EAFQxB,EAAImN,EAAO,IAELhD,EACd1I,EAFSzB,EAAImN,EAAO,IAEJjD,EAChB2E,EAAS3K,EAAK2K,OACdhM,EAASzH,SAASyB,cAAc,UAChCkG,EAAMF,EAAOG,WAAW,MAGxB8L,EAAc5K,EAAK6K,aAAevN,EAClCwN,EAAe9K,EAAK+K,cAAgBxN,EAiExC,OA/DAoB,EAAOrB,MAAQsN,EACfjM,EAAOpB,OAASuN,EAEZ9K,EAAKgL,kBACLnM,EAAIoM,UAAYjL,EAAKgL,gBACrBnM,EAAIqM,SAAS,EAAG,EAAGN,EAAaE,IAKpCK,GAAKlF,EACLmF,GAAKpF,EACLqF,OAAS/N,EACTgO,QAAU/N,EACVgO,GAAK,EACLC,GAAK,EACLC,OAASb,EACTc,QAAUZ,EAQN7E,EAAO,IACPkF,GAAK,EACLI,GAAMvM,KAAK2M,IAAI1F,GAAQ3I,EAASsN,GAIhCS,OAASF,GAAKrX,EAAKiV,sBACnBsC,OAASvX,EAAKiV,oBAAsBoC,GACpCM,OAAWJ,OAAS/N,EAASsN,GAQ7B5E,EAAM,IACNoF,GAAK,EACLI,GAAMxM,KAAK2M,IAAI3F,GAAOzI,EAAUuN,GAIhCQ,QAAUF,GAAKtX,EAAKkV,uBACpBsC,QAAUxX,EAAKkV,qBAAuBoC,GACtCM,QAAWJ,QAAU/N,EAAUuN,GAKnCjM,EAAIK,UAAU7K,KAAK4L,SAASC,QAASiL,GAAIC,GAAIC,OAAQC,QAASC,GAAIC,GAAIC,OAAQC,SAC1Ef,IACA9L,EAAIoM,UAAY,OAChBpM,EAAI+M,yBAA2B,iBAC/B/M,EAAIgN,YACJhN,EAAIiN,IAAInN,EAAOrB,MAAQ,EAAGqB,EAAOpB,OAAS,EAAGoB,EAAOrB,MAAQ,EAAG,EAAa,EAAV0B,KAAKC,IAAQ,GAC/EJ,EAAIkN,YACJlN,EAAImN,QAEDrN,EAGX,SAASsN,EAAejM,GACpB,IAAIiJ,EAASjJ,EAAKiJ,OACdiD,EAAMhV,SAASyB,cAAc,OAC7ByD,EAAMlF,SAASyB,cAAc,OAC7B2E,EAAQ2L,EAAO,GAAKA,EAAO,GAC3B1L,EAAS0L,EAAO,GAAKA,EAAO,GAchC,OAZA9N,EAAS+Q,EAAK,kBACdA,EAAI9L,YAAYhE,GAChBtB,EAAIsB,EAAK,CACL6J,MAAQ,EAAIgD,EAAO,GAAM,KACzBjD,KAAO,EAAIiD,EAAO,GAAM,OAE5B7M,EAAIF,IAAM8D,EAAKmM,IACfrR,EAAIoR,EAAK,CACL5O,MAAOA,EAAQ,KACfC,OAAQA,EAAS,OAGd2O,EAGX,SAASE,EAAiBpM,GACtB,OAAO0K,EAAWpV,KAAKjB,KAAM2L,GAAMjI,UAAUiI,EAAKqM,OAAQrM,EAAKpI,SAGnE,SAAS0U,EAAetM,GACpB,IAAIlM,EAAOO,KACX,OAAO,IAAIN,SAAQ,SAAUoB,GACzBuV,EAAWpV,KAAKxB,EAAMkM,GAAMzI,QAAO,SAAUgV,GACzCpX,EAAQoX,KACTvM,EAAKqM,OAAQrM,EAAKpI,YAI7B,SAAS4U,EAAcpQ,GACf/H,KAAK4L,SAAS7D,IAAIqQ,aAClB5W,MAAMG,UAAU0W,QAAQpX,KAAKjB,KAAK4L,SAAS7D,IAAIhB,WAAW,SAAShH,GAAKgI,EAAIhB,UAAUC,IAAIjH,MAC1FC,KAAK4L,SAAS7D,IAAIqQ,WAAWE,aAAavQ,EAAK/H,KAAK4L,SAAS7D,KAC7D/H,KAAK4L,SAASC,QAAU9D,GAE5B/H,KAAK4L,SAAS7D,IAAMA,EAGxB,SAASwQ,EAAMhN,EAASiN,GACpB,IACIV,EADArY,EAAOO,KAEP4U,EAAS,GACTlC,EAAO,KACP+F,EAAU/M,EAASzK,KAAKxB,GAE5B,GAAyB,iBAAd,EACPqY,EAAMvM,EACNA,EAAU,QAET,GAAI/J,MAAMC,QAAQ8J,GACnBqJ,EAASrJ,EAAQzJ,YAEhB,SAAyB,IAAd,GAA6BrC,EAAKkM,KAAKmM,IAGnD,OAFA1D,EAA2BnT,KAAKxB,GAChC4O,EAAepN,KAAKxB,GACb,KAGPqY,EAAMvM,EAAQuM,IACdlD,EAASrJ,EAAQqJ,QAAU,GAC3BlC,OAAgC,IAAlBnH,EAAY,KAAoB,KAAOA,EAAQmH,KAOjE,OAJAjT,EAAKkM,KAAK8I,OAAQ,EAClBhV,EAAKkM,KAAKmM,IAAMA,GAAOrY,EAAKkM,KAAKmM,IACjCrY,EAAKkM,KAAK2J,UAAY5C,EAEf9K,EAAUkQ,EAAKW,GAAS1X,MAAK,SAAUgH,GAE1C,GADAoQ,EAAclX,KAAKxB,EAAMsI,GACpB6M,EAAO1T,OAsBHzB,EAAK8L,QAAQmN,WAClB9D,EAAS,CACLA,EAAO,GAAK7M,EAAIa,aAAe,IAC/BgM,EAAO,GAAK7M,EAAIc,cAAgB,IAChC+L,EAAO,GAAK7M,EAAIa,aAAe,IAC/BgM,EAAO,GAAK7M,EAAIc,cAAgB,UA3BpB,CAChB,IAIII,EAAOC,EAJPyP,EAASjQ,EAAuBX,GAChC6Q,EAAOnZ,EAAKmM,SAASX,SAASoC,wBAC9BwL,EAAcD,EAAK3P,MAAQ2P,EAAK1P,OACfyP,EAAO1P,MAAQ0P,EAAOzP,OAGtB2P,EAEjB5P,GADAC,EAASyP,EAAOzP,QACC2P,GAGjB5P,EAAQ0P,EAAO1P,MACfC,EAASyP,EAAOzP,OAAS2P,GAG7B,IAAIC,GAAMH,EAAO1P,MAAQA,GAAS,EAC9B8P,GAAMJ,EAAOzP,OAASA,GAAU,EAChC8P,EAAKF,EAAK7P,EACVgQ,EAAKF,EAAK7P,EACdzJ,EAAKkM,KAAKiJ,OAAS,CAACkE,EAAIC,EAAIC,EAAIC,GAWpCxZ,EAAKkM,KAAKiJ,OAASA,EAAOsE,KAAI,SAAUC,GACpC,OAAO3P,WAAW2P,MAElB1Z,EAAK8L,QAAQC,WACb0K,EAAuBjV,KAAKxB,EAAM8L,EAAQhB,aAE9C6J,EAA2BnT,KAAKxB,GAChC4O,EAAepN,KAAKxB,GACpB+Y,GAAMA,OAId,SAAS7J,EAAIjH,EAAG0R,GACZ,OAAO5P,WAAW9B,GAAG2R,QAAQD,GAAiB,GAGlD,SAASE,IACL,IAAI7Z,EAAOO,KACP2T,EAAUlU,EAAKmM,SAASC,QAAQwB,wBAChCoE,EAAShS,EAAKmM,SAASX,SAASoC,wBAChC2L,EAAKvH,EAAOG,KAAO+B,EAAQ/B,KAC3BqH,EAAKxH,EAAOE,IAAMgC,EAAQhC,IAC1B4H,GAAa9H,EAAOxI,MAAQxJ,EAAKmM,SAASX,SAASkJ,aAAe,EAClEqF,GAAc/H,EAAOvI,OAASzJ,EAAKmM,SAASX,SAASiJ,cAAgB,EACrEuF,EAAKT,EAAKvZ,EAAKmM,SAASX,SAASkJ,YAAcoF,EAC/CG,EAAKT,EAAKxZ,EAAKmM,SAASX,SAASiJ,aAAesF,EAChDjQ,EAAQ9J,EAAKiQ,cAEbnG,IAAUoQ,KAAY7N,MAAMvC,MAC5BA,EAAQ,GAGZ,IAAIqF,EAAMnP,EAAK8L,QAAQ2E,gBAAkB,EAAI0J,OAAOC,kBAMpD,OALAb,EAAKrO,KAAKiE,IAAIA,EAAKoK,EAAKzP,GACxB0P,EAAKtO,KAAKiE,IAAIA,EAAKqK,EAAK1P,GACxBkQ,EAAK9O,KAAKiE,IAAIA,EAAK6K,EAAKlQ,GACxBmQ,EAAK/O,KAAKiE,IAAIA,EAAK8K,EAAKnQ,GAEjB,CACHqL,OAAQ,CAACjG,EAAIqK,GAAKrK,EAAIsK,GAAKtK,EAAI8K,GAAK9K,EAAI+K,IACxChH,KAAMnJ,EACNgB,YAAa9K,EAAKkM,KAAKpB,aAI/B,IAAIuP,EAAkB,CACdxW,KAAM,SACN0U,OAAQ,MACRzU,QAAS,GAEbwW,GAAiB,CAAC,OAAQ,OAAQ,OAEtC,SAASC,GAAQzO,GACb,IAAI9L,EAAOO,KACP2L,EAAO2N,EAAKrY,KAAKxB,GACjBwa,EAAO7U,EAAWI,EAAMsU,GAAkBtU,EAAM+F,IAChD2O,EAAmC,iBAAd,EAAyB3O,EAAW0O,EAAK3W,MAAQ,SACtE6W,EAAOF,EAAKE,MAAQ,WACpBnC,EAASiC,EAAKjC,OACdzU,EAAU0W,EAAK1W,QACfoT,EAAkBsD,EAAKtD,gBACvBL,EAAgC,kBAAhB2D,EAAK3D,OAAuB2D,EAAK3D,OAAyC,WAA/B7W,EAAK8L,QAAQN,SAAS3H,KACjFyM,EAAStQ,EAAKmM,SAASX,SAASoC,wBAChC+M,EAAQrK,EAAO9G,MAAQ8G,EAAO7G,OA8ClC,MA3Ca,aAATiR,GACAxO,EAAK6K,YAAczG,EAAO9G,MAC1B0C,EAAK+K,aAAe3G,EAAO7G,QACJ,iBAATiR,IACVA,EAAKlR,OAASkR,EAAKjR,QACnByC,EAAK6K,YAAc2D,EAAKlR,MACxB0C,EAAK+K,aAAeyD,EAAKjR,QAClBiR,EAAKlR,OACZ0C,EAAK6K,YAAc2D,EAAKlR,MACxB0C,EAAK+K,aAAeyD,EAAKlR,MAAQmR,GAC1BD,EAAKjR,SACZyC,EAAK6K,YAAc2D,EAAKjR,OAASkR,EACjCzO,EAAK+K,aAAeyD,EAAKjR,SAI7B6Q,GAAe9U,QAAQ+S,IAAW,IAClCrM,EAAKqM,OAAS,SAAWA,EACzBrM,EAAKpI,QAAUA,GAGnBoI,EAAK2K,OAASA,EACd3K,EAAKmM,IAAMrY,EAAKkM,KAAKmM,IACrBnM,EAAKgL,gBAAkBA,EAEhB,IAAIjX,SAAQ,SAAUoB,GACzB,OAAOoZ,EAAWG,eAEd,IAAK,YACDvZ,EAAQuV,EAAWpV,KAAKxB,EAAMkM,IAC9B,MACJ,IAAK,SACL,IAAK,SACD7K,EAAQiX,EAAiB9W,KAAKxB,EAAMkM,IACpC,MACJ,IAAK,OACDsM,EAAehX,KAAKxB,EAAMkM,GAAM5K,KAAKD,GACrC,MACJ,QACIA,EAAQ8W,EAAe3W,KAAKxB,EAAMkM,QAOlD,SAAS2O,KACLlG,EAA2BnT,KAAKjB,MAGpC,SAASua,GAAQC,GACb,IAAKxa,KAAKuL,QAAQC,YAAcxL,KAAKuL,QAAQE,kBACzC,KAAM,uEAGV,IAAIhM,EAAOO,KACPsK,EAAS7K,EAAKmM,SAAStB,OAE3B7K,EAAKkM,KAAKpB,YAAczF,EAAcrF,EAAKkM,KAAKpB,YAAaiQ,GAC7DnQ,EAAWC,EAAQ7K,EAAKmM,SAAS7D,IAAKtI,EAAKkM,KAAKpB,aAChD6D,EAAmBnN,KAAKxB,GAAM,GAC9B0O,EAAkBlN,KAAKxB,GAG3B,SAASgb,KACL,IAAIhb,EAAOO,KACXP,EAAK4G,QAAQqU,YAAYjb,EAAKmM,SAASZ,UACvC9D,EAAYzH,EAAK4G,QAAS,qBACtB5G,EAAK8L,QAAQW,YACbzM,EAAK4G,QAAQqU,YAAYjb,EAAKmM,SAASkD,mBAEpCrP,EAAKmM,SAGhB,GAAI,EAAe,CACf,IAAImI,GAAI,EACRA,GAAE4G,GAAGC,QAAU,SAAUX,GAGrB,GAAW,iBAFKA,EAEK,CACjB,IAAIjU,EAAOxE,MAAMG,UAAUG,MAAMb,KAAKnB,UAAW,GAC7C+a,EAAa9G,GAAE/T,MAAM2L,KAAK,WAE9B,MAAa,QAATsO,EACOY,EAAWjH,MAEJ,WAATqG,EACEY,EAAWC,OAAOjb,MAAMgb,EAAY7U,GAE7B,SAATiU,EACEY,EAAWE,KAAKlb,MAAMgb,EAAY7U,GAGtChG,KAAKgb,MAAK,WACb,IAAI3a,EAAI0T,GAAE/T,MAAM2L,KAAK,WACrB,GAAKtL,EAAL,CAEA,IAAI4a,EAAS5a,EAAE4Z,GACf,IAAIlG,GAAEmH,WAAWD,GAOb,KAAM,WAAahB,EAAO,oBAN1BgB,EAAOpb,MAAMQ,EAAG2F,GACH,YAATiU,GACAlG,GAAE/T,MAAMmb,WAAW,eAS/B,OAAOnb,KAAKgb,MAAK,WACb,IAAI3a,EAAI,IAAI2J,GAAQhK,KAAMia,GAC1B5Z,EAAE0T,EAAIA,GACNA,GAAE/T,MAAM2L,KAAK,UAAWtL,OAMxC,SAAS2J,GAAQ3D,EAAS4T,GACtB,GAAI5T,EAAQY,UAAUhC,QAAQ,sBAAwB,EAClD,MAAM,IAAImW,MAAM,oDAKpB,GAHApb,KAAKqG,QAAUA,EACfrG,KAAKuL,QAAUnG,EAAWI,EAAMwE,GAAQqR,UAAWpB,GAER,QAAvCja,KAAKqG,QAAQiV,QAAQjB,cAAyB,CAC9C,IAAIkB,EAAYvb,KAAKqG,QACrBS,EAASyU,EAAW,qBACpBlU,EAAckU,EAAW,CAAC,cAAgB,OAAQ,IAAQ,KAC1D,IAAIC,EAAiB3Y,SAASyB,cAAc,OAC5CtE,KAAKqG,QAAQ+R,WAAWrM,YAAYyP,GACpCA,EAAezP,YAAYwP,GAC3Bvb,KAAKqG,QAAUmV,EACfxb,KAAKuL,QAAQuM,IAAM9X,KAAKuL,QAAQuM,KAAOyD,EAAU1T,IAIrD,GADAkD,EAAQ9J,KAAKjB,MACTA,KAAKuL,QAAQuM,IAAK,CAClB,IAAI2D,EAAW,CACX3D,IAAK9X,KAAKuL,QAAQuM,IAClBlD,OAAQ5U,KAAKuL,QAAQqJ,eAElB5U,KAAKuL,QAAa,WAClBvL,KAAKuL,QAAgB,OAC5BgN,EAAMtX,KAAKjB,KAAMyb,IAoEzB,OAhEAzR,GAAQqR,SAAW,CACfpQ,SAAU,CACNhC,MAAO,IACPC,OAAQ,IACR5F,KAAM,UAEV0H,SAAU,GACV0Q,oBAAqB,CACjBC,SAAS,EACTC,UAAW,GACXC,WAAY,IAEhBtN,eAAgB,CACZtF,OAAO,EACPC,QAAQ,GAEZ8C,YAAa,GACb6D,YAAY,EACZ3D,YAAY,EACZE,cAAc,EACdmD,gBAAgB,EAChBjD,YAAY,EACZ4D,iBAAiB,EACjBzE,mBAAmB,EACnBwH,mBAAmB,EACnBa,OAAQ,cAGZ9J,GAAQC,QAAU,CACdF,UAAW,eAGf3E,EAAW4E,GAAQrI,UAAW,CAC1BoZ,KAAM,SAAUxP,EAASiN,GACrB,OAAOD,EAAMtX,KAAKjB,KAAMuL,EAASiN,IAErC5E,IAAK,WACD,IAAIjI,EAAO2N,EAAKrY,KAAKjB,MACjB4U,EAASjJ,EAAKiJ,OAOlB,OANI5U,KAAKuL,QAAQmN,WACb9D,EAAO,IAAM5U,KAAK4L,SAAS7D,IAAIa,aAAe,IAC9CgM,EAAO,IAAM5U,KAAK4L,SAAS7D,IAAIc,cAAgB,IAC/C+L,EAAO,IAAM5U,KAAK4L,SAAS7D,IAAIa,aAAe,IAC9CgM,EAAO,IAAM5U,KAAK4L,SAAS7D,IAAIc,cAAgB,KAE5C8C,GAEXmP,OAAQ,SAAUxX,GACd,OAAO0W,GAAQ/Y,KAAKjB,KAAMsD,IAE9BwY,QAAS,WACL,OAAOxB,GAASrZ,KAAKjB,OAEzBqT,QAAS,SAAU3L,GACf8G,EAAcvN,KAAKjB,KAAM0H,GACzBtB,EAAepG,KAAK4L,SAAS8C,SAEjC1J,OAAQ,SAAUwV,GACdD,GAAQtZ,KAAKjB,KAAMwa,IAEvBuB,QAAS,WACL,OAAOtB,GAASxZ,KAAKjB,SAGtBgK,KA9kDW,oC","file":"js/croppie.ad9a1df1.js","sourcesContent":["/*************************\r\n * Croppie\r\n * Copyright 2018\r\n * Foliotek\r\n * Version: 2.6.3\r\n *************************/\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(factory);\r\n } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n root.Croppie = factory();\r\n }\r\n}(typeof self !== 'undefined' ? self : this, function () {\r\n\r\n /* Polyfills */\r\n if (typeof Promise !== 'function') {\r\n /*! promise-polyfill 3.1.0 */\r\n !function(a){function b(a,b){return function(){a.apply(b,arguments)}}function c(a){if(\"object\"!==typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!==typeof a)throw new TypeError(\"not a function\");this._state=null,this._value=null,this._deferreds=[],i(a,b(e,this),b(f,this))}function d(a){var b=this;return null===this._state?void this._deferreds.push(a):void k(function(){var c=b._state?a.onFulfilled:a.onRejected;if(null===c)return void(b._state?a.resolve:a.reject)(b._value);var d;try{d=c(b._value)}catch(e){return void a.reject(e)}a.resolve(d)})}function e(a){try{if(a===this)throw new TypeError(\"A promise cannot be resolved with itself.\");if(a&&(\"object\"===typeof a||\"function\"===typeof a)){var c=a.then;if(\"function\"===typeof c)return void i(b(c,a),b(e,this),b(f,this))}this._state=!0,this._value=a,g.call(this)}catch(d){f.call(this,d)}}function f(a){this._state=!1,this._value=a,g.call(this)}function g(){for(var a=0,b=this._deferreds.length;b>a;a++)d.call(this,this._deferreds[a]);this._deferreds=null}function h(a,b,c,d){this.onFulfilled=\"function\"===typeof a?a:null,this.onRejected=\"function\"===typeof b?b:null,this.resolve=c,this.reject=d}function i(a,b,c){var d=!1;try{a(function(a){d||(d=!0,b(a))},function(a){d||(d=!0,c(a))})}catch(e){if(d)return;d=!0,c(e)}}var j=setTimeout,k=\"function\"===typeof setImmediate&&setImmediate||function(a){j(a,1)},l=Array.isArray||function(a){return\"[object Array]\"===Object.prototype.toString.call(a)};c.prototype[\"catch\"]=function(a){return this.then(null,a)},c.prototype.then=function(a,b){var e=this;return new c(function(c,f){d.call(e,new h(a,b,c,f))})},c.all=function(){var a=Array.prototype.slice.call(1===arguments.length&&l(arguments[0])?arguments[0]:arguments);return new c(function(b,c){function d(f,g){try{if(g&&(\"object\"===typeof g||\"function\"===typeof g)){var h=g.then;if(\"function\"===typeof h)return void h.call(g,function(a){d(f,a)},c)}a[f]=g,0===--e&&b(a)}catch(i){c(i)}}if(0===a.length)return b([]);for(var e=a.length,f=0;fd;d++)a[d].then(b,c)})},c._setImmediateFn=function(a){k=a},\"undefined\"!==typeof module&&module.exports?module.exports=c:a.Promise||(a.Promise=c)}(this);\r\n }\r\n\r\n if ( typeof window.CustomEvent !== \"function\" ) {\r\n (function(){\r\n function CustomEvent ( event, params ) {\r\n params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n var evt = document.createEvent( 'CustomEvent' );\r\n evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\r\n return evt;\r\n }\r\n CustomEvent.prototype = window.Event.prototype;\r\n window.CustomEvent = CustomEvent;\r\n }());\r\n }\r\n\r\n if (!HTMLCanvasElement.prototype.toBlob) {\r\n Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {\r\n value: function (callback, type, quality) {\r\n var binStr = atob( this.toDataURL(type, quality).split(',')[1] ),\r\n len = binStr.length,\r\n arr = new Uint8Array(len);\r\n\r\n for (var i=0; i -1 ? EXIF_NORM : EXIF_FLIP,\r\n index = arr.indexOf(ornt),\r\n offset = (rotate / 90) % arr.length;// 180 = 2%4 = 2 shift exif by 2 indexes\r\n\r\n return arr[(arr.length + index + (offset % arr.length)) % arr.length];\r\n }\r\n\r\n // Credits to : Andrew Dupont - http://andrewdupont.net/2009/08/28/deep-extending-objects-in-javascript/\r\n function deepExtend(destination, source) {\r\n destination = destination || {};\r\n for (var property in source) {\r\n if (source[property] && source[property].constructor && source[property].constructor === Object) {\r\n destination[property] = destination[property] || {};\r\n deepExtend(destination[property], source[property]);\r\n } else {\r\n destination[property] = source[property];\r\n }\r\n }\r\n return destination;\r\n }\r\n\r\n function clone(object) {\r\n return deepExtend({}, object);\r\n }\r\n\r\n function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this, args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n }\r\n\r\n function dispatchChange(element) {\r\n if (\"createEvent\" in document) {\r\n var evt = document.createEvent(\"HTMLEvents\");\r\n evt.initEvent(\"change\", false, true);\r\n element.dispatchEvent(evt);\r\n }\r\n else {\r\n element.fireEvent(\"onchange\");\r\n }\r\n }\r\n\r\n //http://jsperf.com/vanilla-css\r\n function css(el, styles, val) {\r\n if (typeof (styles) === 'string') {\r\n var tmp = styles;\r\n styles = {};\r\n styles[tmp] = val;\r\n }\r\n\r\n for (var prop in styles) {\r\n el.style[prop] = styles[prop];\r\n }\r\n }\r\n\r\n function addClass(el, c) {\r\n if (el.classList) {\r\n el.classList.add(c);\r\n }\r\n else {\r\n el.className += ' ' + c;\r\n }\r\n }\r\n\r\n function removeClass(el, c) {\r\n if (el.classList) {\r\n el.classList.remove(c);\r\n }\r\n else {\r\n el.className = el.className.replace(c, '');\r\n }\r\n }\r\n\r\n function setAttributes(el, attrs) {\r\n for (var key in attrs) {\r\n el.setAttribute(key, attrs[key]);\r\n }\r\n }\r\n\r\n function num(v) {\r\n return parseInt(v, 10);\r\n }\r\n\r\n /* Utilities */\r\n function loadImage(src, doExif) {\r\n var img = new Image();\r\n img.style.opacity = '0';\r\n return new Promise(function (resolve, reject) {\r\n function _resolve() {\r\n img.style.opacity = '1';\r\n setTimeout(function () {\r\n resolve(img);\r\n }, 1);\r\n }\r\n\r\n img.removeAttribute('crossOrigin');\r\n if (src.match(/^https?:\\/\\/|^\\/\\//)) {\r\n img.setAttribute('crossOrigin', 'anonymous');\r\n }\r\n\r\n img.onload = function () {\r\n if (doExif) {\r\n EXIF.getData(img, function () {\r\n _resolve();\r\n });\r\n }\r\n else {\r\n _resolve();\r\n }\r\n };\r\n img.onerror = function (ev) {\r\n img.style.opacity = 1;\r\n setTimeout(function () {\r\n reject(ev);\r\n }, 1);\r\n };\r\n img.src = src;\r\n });\r\n }\r\n\r\n function naturalImageDimensions(img, ornt) {\r\n var w = img.naturalWidth;\r\n var h = img.naturalHeight;\r\n var orient = ornt || getExifOrientation(img);\r\n if (orient && orient >= 5) {\r\n var x= w;\r\n w = h;\r\n h = x;\r\n }\r\n return { width: w, height: h };\r\n }\r\n\r\n /* CSS Transform Prototype */\r\n var TRANSLATE_OPTS = {\r\n 'translate3d': {\r\n suffix: ', 0px'\r\n },\r\n 'translate': {\r\n suffix: ''\r\n }\r\n };\r\n var Transform = function (x, y, scale) {\r\n this.x = parseFloat(x);\r\n this.y = parseFloat(y);\r\n this.scale = parseFloat(scale);\r\n };\r\n\r\n Transform.parse = function (v) {\r\n if (v.style) {\r\n return Transform.parse(v.style[CSS_TRANSFORM]);\r\n }\r\n else if (v.indexOf('matrix') > -1 || v.indexOf('none') > -1) {\r\n return Transform.fromMatrix(v);\r\n }\r\n else {\r\n return Transform.fromString(v);\r\n }\r\n };\r\n\r\n Transform.fromMatrix = function (v) {\r\n var vals = v.substring(7).split(',');\r\n if (!vals.length || v === 'none') {\r\n vals = [1, 0, 0, 1, 0, 0];\r\n }\r\n\r\n return new Transform(num(vals[4]), num(vals[5]), parseFloat(vals[0]));\r\n };\r\n\r\n Transform.fromString = function (v) {\r\n var values = v.split(') '),\r\n translate = values[0].substring(Croppie.globals.translate.length + 1).split(','),\r\n scale = values.length > 1 ? values[1].substring(6) : 1,\r\n x = translate.length > 1 ? translate[0] : 0,\r\n y = translate.length > 1 ? translate[1] : 0;\r\n\r\n return new Transform(x, y, scale);\r\n };\r\n\r\n Transform.prototype.toString = function () {\r\n var suffix = TRANSLATE_OPTS[Croppie.globals.translate].suffix || '';\r\n return Croppie.globals.translate + '(' + this.x + 'px, ' + this.y + 'px' + suffix + ') scale(' + this.scale + ')';\r\n };\r\n\r\n var TransformOrigin = function (el) {\r\n if (!el || !el.style[CSS_TRANS_ORG]) {\r\n this.x = 0;\r\n this.y = 0;\r\n return;\r\n }\r\n var css = el.style[CSS_TRANS_ORG].split(' ');\r\n this.x = parseFloat(css[0]);\r\n this.y = parseFloat(css[1]);\r\n };\r\n\r\n TransformOrigin.prototype.toString = function () {\r\n return this.x + 'px ' + this.y + 'px';\r\n };\r\n\r\n function getExifOrientation (img) {\r\n return img.exifdata && img.exifdata.Orientation ? num(img.exifdata.Orientation) : 1;\r\n }\r\n\r\n function drawCanvas(canvas, img, orientation) {\r\n var width = img.width,\r\n height = img.height,\r\n ctx = canvas.getContext('2d');\r\n\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n ctx.save();\r\n switch (orientation) {\r\n case 2:\r\n ctx.translate(width, 0);\r\n ctx.scale(-1, 1);\r\n break;\r\n\r\n case 3:\r\n ctx.translate(width, height);\r\n ctx.rotate(180*Math.PI/180);\r\n break;\r\n\r\n case 4:\r\n ctx.translate(0, height);\r\n ctx.scale(1, -1);\r\n break;\r\n\r\n case 5:\r\n canvas.width = height;\r\n canvas.height = width;\r\n ctx.rotate(90*Math.PI/180);\r\n ctx.scale(1, -1);\r\n break;\r\n\r\n case 6:\r\n canvas.width = height;\r\n canvas.height = width;\r\n ctx.rotate(90*Math.PI/180);\r\n ctx.translate(0, -height);\r\n break;\r\n\r\n case 7:\r\n canvas.width = height;\r\n canvas.height = width;\r\n ctx.rotate(-90*Math.PI/180);\r\n ctx.translate(-width, height);\r\n ctx.scale(1, -1);\r\n break;\r\n\r\n case 8:\r\n canvas.width = height;\r\n canvas.height = width;\r\n ctx.translate(0, width);\r\n ctx.rotate(-90*Math.PI/180);\r\n break;\r\n }\r\n ctx.drawImage(img, 0,0, width, height);\r\n ctx.restore();\r\n }\r\n\r\n /* Private Methods */\r\n function _create() {\r\n var self = this,\r\n contClass = 'croppie-container',\r\n customViewportClass = self.options.viewport.type ? 'cr-vp-' + self.options.viewport.type : null,\r\n boundary, img, viewport, overlay, bw, bh;\r\n\r\n self.options.useCanvas = self.options.enableOrientation || _hasExif.call(self);\r\n // Properties on class\r\n self.data = {};\r\n self.elements = {};\r\n\r\n boundary = self.elements.boundary = document.createElement('div');\r\n viewport = self.elements.viewport = document.createElement('div');\r\n img = self.elements.img = document.createElement('img');\r\n overlay = self.elements.overlay = document.createElement('div');\r\n\r\n if (self.options.useCanvas) {\r\n self.elements.canvas = document.createElement('canvas');\r\n self.elements.preview = self.elements.canvas;\r\n }\r\n else {\r\n self.elements.preview = img;\r\n }\r\n\r\n addClass(boundary, 'cr-boundary');\r\n boundary.setAttribute('aria-dropeffect', 'none');\r\n bw = self.options.boundary.width;\r\n bh = self.options.boundary.height;\r\n css(boundary, {\r\n width: (bw + (isNaN(bw) ? '' : 'px')),\r\n height: (bh + (isNaN(bh) ? '' : 'px'))\r\n });\r\n\r\n addClass(viewport, 'cr-viewport');\r\n if (customViewportClass) {\r\n addClass(viewport, customViewportClass);\r\n }\r\n css(viewport, {\r\n width: self.options.viewport.width + 'px',\r\n height: self.options.viewport.height + 'px'\r\n });\r\n viewport.setAttribute('tabindex', 0);\r\n\r\n addClass(self.elements.preview, 'cr-image');\r\n setAttributes(self.elements.preview, { 'alt': 'preview', 'aria-grabbed': 'false' });\r\n addClass(overlay, 'cr-overlay');\r\n\r\n self.element.appendChild(boundary);\r\n boundary.appendChild(self.elements.preview);\r\n boundary.appendChild(viewport);\r\n boundary.appendChild(overlay);\r\n\r\n addClass(self.element, contClass);\r\n if (self.options.customClass) {\r\n addClass(self.element, self.options.customClass);\r\n }\r\n\r\n _initDraggable.call(this);\r\n\r\n if (self.options.enableZoom) {\r\n _initializeZoom.call(self);\r\n }\r\n\r\n // if (self.options.enableOrientation) {\r\n // _initRotationControls.call(self);\r\n // }\r\n\r\n if (self.options.enableResize) {\r\n _initializeResize.call(self);\r\n }\r\n }\r\n\r\n // function _initRotationControls () {\r\n // var self = this,\r\n // wrap, btnLeft, btnRight, iLeft, iRight;\r\n\r\n // wrap = document.createElement('div');\r\n // self.elements.orientationBtnLeft = btnLeft = document.createElement('button');\r\n // self.elements.orientationBtnRight = btnRight = document.createElement('button');\r\n\r\n // wrap.appendChild(btnLeft);\r\n // wrap.appendChild(btnRight);\r\n\r\n // iLeft = document.createElement('i');\r\n // iRight = document.createElement('i');\r\n // btnLeft.appendChild(iLeft);\r\n // btnRight.appendChild(iRight);\r\n\r\n // addClass(wrap, 'cr-rotate-controls');\r\n // addClass(btnLeft, 'cr-rotate-l');\r\n // addClass(btnRight, 'cr-rotate-r');\r\n\r\n // self.elements.boundary.appendChild(wrap);\r\n\r\n // btnLeft.addEventListener('click', function () {\r\n // self.rotate(-90);\r\n // });\r\n // btnRight.addEventListener('click', function () {\r\n // self.rotate(90);\r\n // });\r\n // }\r\n\r\n function _hasExif() {\r\n return this.options.enableExif && window.EXIF;\r\n }\r\n\r\n function _initializeResize () {\r\n var self = this;\r\n var wrap = document.createElement('div');\r\n var isDragging = false;\r\n var direction;\r\n var originalX;\r\n var originalY;\r\n var minSize = 50;\r\n var maxWidth;\r\n var maxHeight;\r\n var vr;\r\n var hr;\r\n\r\n addClass(wrap, 'cr-resizer');\r\n css(wrap, {\r\n width: this.options.viewport.width + 'px',\r\n height: this.options.viewport.height + 'px'\r\n });\r\n\r\n if (this.options.resizeControls.height) {\r\n vr = document.createElement('div');\r\n addClass(vr, 'cr-resizer-vertical');\r\n wrap.appendChild(vr);\r\n }\r\n\r\n if (this.options.resizeControls.width) {\r\n hr = document.createElement('div');\r\n addClass(hr, 'cr-resizer-horisontal');\r\n wrap.appendChild(hr);\r\n }\r\n\r\n function mouseDown(ev) {\r\n if (ev.button !== undefined && ev.button !== 0) return;\r\n\r\n ev.preventDefault();\r\n if (isDragging) {\r\n return;\r\n }\r\n\r\n var overlayRect = self.elements.overlay.getBoundingClientRect();\r\n\r\n isDragging = true;\r\n originalX = ev.pageX;\r\n originalY = ev.pageY;\r\n direction = ev.currentTarget.className.indexOf('vertical') !== -1 ? 'v' : 'h';\r\n maxWidth = overlayRect.width;\r\n maxHeight = overlayRect.height;\r\n\r\n if (ev.touches) {\r\n var touches = ev.touches[0];\r\n originalX = touches.pageX;\r\n originalY = touches.pageY;\r\n }\r\n\r\n window.addEventListener('mousemove', mouseMove);\r\n window.addEventListener('touchmove', mouseMove);\r\n window.addEventListener('mouseup', mouseUp);\r\n window.addEventListener('touchend', mouseUp);\r\n document.body.style[CSS_USERSELECT] = 'none';\r\n }\r\n\r\n function mouseMove(ev) {\r\n var pageX = ev.pageX;\r\n var pageY = ev.pageY;\r\n\r\n ev.preventDefault();\r\n\r\n if (ev.touches) {\r\n var touches = ev.touches[0];\r\n pageX = touches.pageX;\r\n pageY = touches.pageY;\r\n }\r\n\r\n var deltaX = pageX - originalX;\r\n var deltaY = pageY - originalY;\r\n var newHeight = self.options.viewport.height + deltaY;\r\n var newWidth = self.options.viewport.width + deltaX;\r\n\r\n if (direction === 'v' && newHeight >= minSize && newHeight <= maxHeight) {\r\n css(wrap, {\r\n height: newHeight + 'px'\r\n });\r\n\r\n self.options.boundary.height += deltaY;\r\n css(self.elements.boundary, {\r\n height: self.options.boundary.height + 'px'\r\n });\r\n\r\n self.options.viewport.height += deltaY;\r\n css(self.elements.viewport, {\r\n height: self.options.viewport.height + 'px'\r\n });\r\n }\r\n else if (direction === 'h' && newWidth >= minSize && newWidth <= maxWidth) {\r\n css(wrap, {\r\n width: newWidth + 'px'\r\n });\r\n\r\n self.options.boundary.width += deltaX;\r\n css(self.elements.boundary, {\r\n width: self.options.boundary.width + 'px'\r\n });\r\n\r\n self.options.viewport.width += deltaX;\r\n css(self.elements.viewport, {\r\n width: self.options.viewport.width + 'px'\r\n });\r\n }\r\n\r\n _updateOverlay.call(self);\r\n _updateZoomLimits.call(self);\r\n _updateCenterPoint.call(self);\r\n _triggerUpdate.call(self);\r\n originalY = pageY;\r\n originalX = pageX;\r\n }\r\n\r\n function mouseUp() {\r\n isDragging = false;\r\n window.removeEventListener('mousemove', mouseMove);\r\n window.removeEventListener('touchmove', mouseMove);\r\n window.removeEventListener('mouseup', mouseUp);\r\n window.removeEventListener('touchend', mouseUp);\r\n document.body.style[CSS_USERSELECT] = '';\r\n }\r\n\r\n if (vr) {\r\n vr.addEventListener('mousedown', mouseDown);\r\n vr.addEventListener('touchstart', mouseDown);\r\n }\r\n\r\n if (hr) {\r\n hr.addEventListener('mousedown', mouseDown);\r\n hr.addEventListener('touchstart', mouseDown);\r\n }\r\n\r\n this.elements.boundary.appendChild(wrap);\r\n }\r\n\r\n function _setZoomerVal(v) {\r\n if (this.options.enableZoom) {\r\n var z = this.elements.zoomer,\r\n val = fix(v, 4);\r\n\r\n z.value = Math.max(parseFloat(z.min), Math.min(parseFloat(z.max), val)).toString();\r\n }\r\n }\r\n\r\n function _initializeZoom() {\r\n var self = this,\r\n wrap = self.elements.zoomerWrap = document.createElement('div'),\r\n zoomer = self.elements.zoomer = document.createElement('input');\r\n\r\n addClass(wrap, 'cr-slider-wrap');\r\n addClass(zoomer, 'cr-slider');\r\n zoomer.type = 'range';\r\n zoomer.step = '0.0001';\r\n zoomer.value = '1';\r\n zoomer.style.display = self.options.showZoomer ? '' : 'none';\r\n zoomer.setAttribute('aria-label', 'zoom');\r\n\r\n self.element.appendChild(wrap);\r\n wrap.appendChild(zoomer);\r\n\r\n self._currentZoom = 1;\r\n\r\n function change() {\r\n _onZoom.call(self, {\r\n value: parseFloat(zoomer.value),\r\n origin: new TransformOrigin(self.elements.preview),\r\n viewportRect: self.elements.viewport.getBoundingClientRect(),\r\n transform: Transform.parse(self.elements.preview)\r\n });\r\n }\r\n\r\n function scroll(ev) {\r\n var delta, targetZoom;\r\n\r\n if(self.options.mouseWheelZoom === 'ctrl' && ev.ctrlKey !== true){\r\n return 0; \r\n } else if (ev.wheelDelta) {\r\n delta = ev.wheelDelta / 1200; //wheelDelta min: -120 max: 120 // max x 10 x 2\r\n } else if (ev.deltaY) {\r\n delta = ev.deltaY / 1060; //deltaY min: -53 max: 53 // max x 10 x 2\r\n } else if (ev.detail) {\r\n delta = ev.detail / -60; //delta min: -3 max: 3 // max x 10 x 2\r\n } else {\r\n delta = 0;\r\n }\r\n\r\n targetZoom = self._currentZoom + (delta * self._currentZoom);\r\n\r\n ev.preventDefault();\r\n _setZoomerVal.call(self, targetZoom);\r\n change.call(self);\r\n }\r\n\r\n self.elements.zoomer.addEventListener('input', change);// this is being fired twice on keypress\r\n self.elements.zoomer.addEventListener('change', change);\r\n\r\n if (self.options.mouseWheelZoom) {\r\n self.elements.boundary.addEventListener('mousewheel', scroll);\r\n self.elements.boundary.addEventListener('DOMMouseScroll', scroll);\r\n }\r\n }\r\n\r\n function _onZoom(ui) {\r\n var self = this,\r\n transform = ui ? ui.transform : Transform.parse(self.elements.preview),\r\n vpRect = ui ? ui.viewportRect : self.elements.viewport.getBoundingClientRect(),\r\n origin = ui ? ui.origin : new TransformOrigin(self.elements.preview);\r\n\r\n function applyCss() {\r\n var transCss = {};\r\n transCss[CSS_TRANSFORM] = transform.toString();\r\n transCss[CSS_TRANS_ORG] = origin.toString();\r\n css(self.elements.preview, transCss);\r\n }\r\n\r\n self._currentZoom = ui ? ui.value : self._currentZoom;\r\n transform.scale = self._currentZoom;\r\n self.elements.zoomer.setAttribute('aria-valuenow', self._currentZoom);\r\n applyCss();\r\n\r\n if (self.options.enforceBoundary) {\r\n var boundaries = _getVirtualBoundaries.call(self, vpRect),\r\n transBoundaries = boundaries.translate,\r\n oBoundaries = boundaries.origin;\r\n\r\n if (transform.x >= transBoundaries.maxX) {\r\n origin.x = oBoundaries.minX;\r\n transform.x = transBoundaries.maxX;\r\n }\r\n\r\n if (transform.x <= transBoundaries.minX) {\r\n origin.x = oBoundaries.maxX;\r\n transform.x = transBoundaries.minX;\r\n }\r\n\r\n if (transform.y >= transBoundaries.maxY) {\r\n origin.y = oBoundaries.minY;\r\n transform.y = transBoundaries.maxY;\r\n }\r\n\r\n if (transform.y <= transBoundaries.minY) {\r\n origin.y = oBoundaries.maxY;\r\n transform.y = transBoundaries.minY;\r\n }\r\n }\r\n applyCss();\r\n _debouncedOverlay.call(self);\r\n _triggerUpdate.call(self);\r\n }\r\n\r\n function _getVirtualBoundaries(viewport) {\r\n var self = this,\r\n scale = self._currentZoom,\r\n vpWidth = viewport.width,\r\n vpHeight = viewport.height,\r\n centerFromBoundaryX = self.elements.boundary.clientWidth / 2,\r\n centerFromBoundaryY = self.elements.boundary.clientHeight / 2,\r\n imgRect = self.elements.preview.getBoundingClientRect(),\r\n curImgWidth = imgRect.width,\r\n curImgHeight = imgRect.height,\r\n halfWidth = vpWidth / 2,\r\n halfHeight = vpHeight / 2;\r\n\r\n var maxX = ((halfWidth / scale) - centerFromBoundaryX) * -1;\r\n var minX = maxX - ((curImgWidth * (1 / scale)) - (vpWidth * (1 / scale)));\r\n\r\n var maxY = ((halfHeight / scale) - centerFromBoundaryY) * -1;\r\n var minY = maxY - ((curImgHeight * (1 / scale)) - (vpHeight * (1 / scale)));\r\n\r\n var originMinX = (1 / scale) * halfWidth;\r\n var originMaxX = (curImgWidth * (1 / scale)) - originMinX;\r\n\r\n var originMinY = (1 / scale) * halfHeight;\r\n var originMaxY = (curImgHeight * (1 / scale)) - originMinY;\r\n\r\n return {\r\n translate: {\r\n maxX: maxX,\r\n minX: minX,\r\n maxY: maxY,\r\n minY: minY\r\n },\r\n origin: {\r\n maxX: originMaxX,\r\n minX: originMinX,\r\n maxY: originMaxY,\r\n minY: originMinY\r\n }\r\n };\r\n }\r\n\r\n function _updateCenterPoint(rotate) {\r\n var self = this,\r\n scale = self._currentZoom,\r\n data = self.elements.preview.getBoundingClientRect(),\r\n vpData = self.elements.viewport.getBoundingClientRect(),\r\n transform = Transform.parse(self.elements.preview.style[CSS_TRANSFORM]),\r\n pc = new TransformOrigin(self.elements.preview),\r\n top = (vpData.top - data.top) + (vpData.height / 2),\r\n left = (vpData.left - data.left) + (vpData.width / 2),\r\n center = {},\r\n adj = {};\r\n\r\n if (rotate) {\r\n var cx = pc.x;\r\n var cy = pc.y;\r\n var tx = transform.x;\r\n var ty = transform.y;\r\n\r\n center.y = cx;\r\n center.x = cy;\r\n transform.y = tx;\r\n transform.x = ty;\r\n }\r\n else {\r\n center.y = top / scale;\r\n center.x = left / scale;\r\n\r\n adj.y = (center.y - pc.y) * (1 - scale);\r\n adj.x = (center.x - pc.x) * (1 - scale);\r\n\r\n transform.x -= adj.x;\r\n transform.y -= adj.y;\r\n }\r\n\r\n var newCss = {};\r\n newCss[CSS_TRANS_ORG] = center.x + 'px ' + center.y + 'px';\r\n newCss[CSS_TRANSFORM] = transform.toString();\r\n css(self.elements.preview, newCss);\r\n }\r\n\r\n function _initDraggable() {\r\n var self = this,\r\n isDragging = false,\r\n originalX,\r\n originalY,\r\n originalDistance,\r\n vpRect,\r\n transform;\r\n\r\n function assignTransformCoordinates(deltaX, deltaY) {\r\n var imgRect = self.elements.preview.getBoundingClientRect(),\r\n top = transform.y + deltaY,\r\n left = transform.x + deltaX;\r\n\r\n if (self.options.enforceBoundary) {\r\n if (vpRect.top > imgRect.top + deltaY && vpRect.bottom < imgRect.bottom + deltaY) {\r\n transform.y = top;\r\n }\r\n\r\n if (vpRect.left > imgRect.left + deltaX && vpRect.right < imgRect.right + deltaX) {\r\n transform.x = left;\r\n }\r\n }\r\n else {\r\n transform.y = top;\r\n transform.x = left;\r\n }\r\n }\r\n\r\n function toggleGrabState(isDragging) {\r\n self.elements.preview.setAttribute('aria-grabbed', isDragging);\r\n self.elements.boundary.setAttribute('aria-dropeffect', isDragging? 'move': 'none');\r\n }\r\n\r\n function keyDown(ev) {\r\n var LEFT_ARROW = 37,\r\n UP_ARROW = 38,\r\n RIGHT_ARROW = 39,\r\n DOWN_ARROW = 40;\r\n\r\n if (ev.shiftKey && (ev.keyCode === UP_ARROW || ev.keyCode === DOWN_ARROW)) {\r\n var zoom;\r\n if (ev.keyCode === UP_ARROW) {\r\n zoom = parseFloat(self.elements.zoomer.value) + parseFloat(self.elements.zoomer.step)\r\n }\r\n else {\r\n zoom = parseFloat(self.elements.zoomer.value) - parseFloat(self.elements.zoomer.step)\r\n }\r\n self.setZoom(zoom);\r\n }\r\n else if (self.options.enableKeyMovement && (ev.keyCode >= 37 && ev.keyCode <= 40)) {\r\n ev.preventDefault();\r\n var movement = parseKeyDown(ev.keyCode);\r\n\r\n transform = Transform.parse(self.elements.preview);\r\n document.body.style[CSS_USERSELECT] = 'none';\r\n vpRect = self.elements.viewport.getBoundingClientRect();\r\n keyMove(movement);\r\n }\r\n\r\n function parseKeyDown(key) {\r\n switch (key) {\r\n case LEFT_ARROW:\r\n return [1, 0];\r\n case UP_ARROW:\r\n return [0, 1];\r\n case RIGHT_ARROW:\r\n return [-1, 0];\r\n case DOWN_ARROW:\r\n return [0, -1];\r\n }\r\n }\r\n }\r\n\r\n function keyMove(movement) {\r\n var deltaX = movement[0],\r\n deltaY = movement[1],\r\n newCss = {};\r\n\r\n assignTransformCoordinates(deltaX, deltaY);\r\n\r\n newCss[CSS_TRANSFORM] = transform.toString();\r\n css(self.elements.preview, newCss);\r\n _updateOverlay.call(self);\r\n document.body.style[CSS_USERSELECT] = '';\r\n _updateCenterPoint.call(self);\r\n _triggerUpdate.call(self);\r\n originalDistance = 0;\r\n }\r\n\r\n function mouseDown(ev) {\r\n if (ev.button !== undefined && ev.button !== 0) return;\r\n\r\n ev.preventDefault();\r\n if (isDragging) return;\r\n isDragging = true;\r\n originalX = ev.pageX;\r\n originalY = ev.pageY;\r\n\r\n if (ev.touches) {\r\n var touches = ev.touches[0];\r\n originalX = touches.pageX;\r\n originalY = touches.pageY;\r\n }\r\n toggleGrabState(isDragging);\r\n transform = Transform.parse(self.elements.preview);\r\n window.addEventListener('mousemove', mouseMove);\r\n window.addEventListener('touchmove', mouseMove);\r\n window.addEventListener('mouseup', mouseUp);\r\n window.addEventListener('touchend', mouseUp);\r\n document.body.style[CSS_USERSELECT] = 'none';\r\n vpRect = self.elements.viewport.getBoundingClientRect();\r\n }\r\n\r\n function mouseMove(ev) {\r\n ev.preventDefault();\r\n var pageX = ev.pageX,\r\n pageY = ev.pageY;\r\n\r\n if (ev.touches) {\r\n var touches = ev.touches[0];\r\n pageX = touches.pageX;\r\n pageY = touches.pageY;\r\n }\r\n\r\n var deltaX = pageX - originalX,\r\n deltaY = pageY - originalY,\r\n newCss = {};\r\n\r\n if (ev.type === 'touchmove') {\r\n if (ev.touches.length > 1) {\r\n var touch1 = ev.touches[0];\r\n var touch2 = ev.touches[1];\r\n var dist = Math.sqrt((touch1.pageX - touch2.pageX) * (touch1.pageX - touch2.pageX) + (touch1.pageY - touch2.pageY) * (touch1.pageY - touch2.pageY));\r\n\r\n if (!originalDistance) {\r\n originalDistance = dist / self._currentZoom;\r\n }\r\n\r\n var scale = dist / originalDistance;\r\n\r\n _setZoomerVal.call(self, scale);\r\n dispatchChange(self.elements.zoomer);\r\n return;\r\n }\r\n }\r\n\r\n assignTransformCoordinates(deltaX, deltaY);\r\n\r\n newCss[CSS_TRANSFORM] = transform.toString();\r\n css(self.elements.preview, newCss);\r\n _updateOverlay.call(self);\r\n originalY = pageY;\r\n originalX = pageX;\r\n }\r\n\r\n function mouseUp() {\r\n isDragging = false;\r\n toggleGrabState(isDragging);\r\n window.removeEventListener('mousemove', mouseMove);\r\n window.removeEventListener('touchmove', mouseMove);\r\n window.removeEventListener('mouseup', mouseUp);\r\n window.removeEventListener('touchend', mouseUp);\r\n document.body.style[CSS_USERSELECT] = '';\r\n _updateCenterPoint.call(self);\r\n _triggerUpdate.call(self);\r\n originalDistance = 0;\r\n }\r\n\r\n self.elements.overlay.addEventListener('mousedown', mouseDown);\r\n self.elements.viewport.addEventListener('keydown', keyDown);\r\n self.elements.overlay.addEventListener('touchstart', mouseDown);\r\n }\r\n\r\n function _updateOverlay() {\r\n if (!this.elements) return; // since this is debounced, it can be fired after destroy\r\n var self = this,\r\n boundRect = self.elements.boundary.getBoundingClientRect(),\r\n imgData = self.elements.preview.getBoundingClientRect();\r\n\r\n css(self.elements.overlay, {\r\n width: imgData.width + 'px',\r\n height: imgData.height + 'px',\r\n top: (imgData.top - boundRect.top) + 'px',\r\n left: (imgData.left - boundRect.left) + 'px'\r\n });\r\n }\r\n var _debouncedOverlay = debounce(_updateOverlay, 500);\r\n\r\n function _triggerUpdate() {\r\n var self = this,\r\n data = self.get();\r\n\r\n if (!_isVisible.call(self)) {\r\n return;\r\n }\r\n\r\n self.options.update.call(self, data);\r\n if (self.$ && typeof Prototype === 'undefined') {\r\n self.$(self.element).trigger('update.croppie', data);\r\n }\r\n else {\r\n var ev;\r\n if (window.CustomEvent) {\r\n ev = new CustomEvent('update', { detail: data });\r\n } else {\r\n ev = document.createEvent('CustomEvent');\r\n ev.initCustomEvent('update', true, true, data);\r\n }\r\n\r\n self.element.dispatchEvent(ev);\r\n }\r\n }\r\n\r\n function _isVisible() {\r\n return this.elements.preview.offsetHeight > 0 && this.elements.preview.offsetWidth > 0;\r\n }\r\n\r\n function _updatePropertiesFromImage() {\r\n var self = this,\r\n initialZoom = 1,\r\n cssReset = {},\r\n img = self.elements.preview,\r\n imgData,\r\n transformReset = new Transform(0, 0, initialZoom),\r\n originReset = new TransformOrigin(),\r\n isVisible = _isVisible.call(self);\r\n\r\n if (!isVisible || self.data.bound) {// if the croppie isn't visible or it doesn't need binding\r\n return;\r\n }\r\n\r\n self.data.bound = true;\r\n cssReset[CSS_TRANSFORM] = transformReset.toString();\r\n cssReset[CSS_TRANS_ORG] = originReset.toString();\r\n cssReset['opacity'] = 1;\r\n css(img, cssReset);\r\n\r\n imgData = self.elements.preview.getBoundingClientRect();\r\n\r\n self._originalImageWidth = imgData.width;\r\n self._originalImageHeight = imgData.height;\r\n self.data.orientation = getExifOrientation(self.elements.img);\r\n\r\n if (self.options.enableZoom) {\r\n _updateZoomLimits.call(self, true);\r\n }\r\n else {\r\n self._currentZoom = initialZoom;\r\n }\r\n\r\n transformReset.scale = self._currentZoom;\r\n cssReset[CSS_TRANSFORM] = transformReset.toString();\r\n css(img, cssReset);\r\n\r\n if (self.data.points.length) {\r\n _bindPoints.call(self, self.data.points);\r\n }\r\n else {\r\n _centerImage.call(self);\r\n }\r\n\r\n _updateCenterPoint.call(self);\r\n _updateOverlay.call(self);\r\n }\r\n\r\n function _updateZoomLimits (initial) {\r\n var self = this,\r\n minZoom = Math.max(self.options.minZoom, 0) || 0,\r\n maxZoom = self.options.maxZoom || 1.5,\r\n initialZoom,\r\n defaultInitialZoom,\r\n zoomer = self.elements.zoomer,\r\n scale = parseFloat(zoomer.value),\r\n boundaryData = self.elements.boundary.getBoundingClientRect(),\r\n imgData = naturalImageDimensions(self.elements.img, self.data.orientation),\r\n vpData = self.elements.viewport.getBoundingClientRect(),\r\n minW,\r\n minH;\r\n if (self.options.enforceBoundary) {\r\n minW = vpData.width / imgData.width;\r\n minH = vpData.height / imgData.height;\r\n minZoom = Math.max(minW, minH);\r\n }\r\n\r\n if (minZoom >= maxZoom) {\r\n maxZoom = minZoom + 1;\r\n }\r\n\r\n zoomer.min = fix(minZoom, 4);\r\n zoomer.max = fix(maxZoom, 4);\r\n \r\n if (!initial && (scale < zoomer.min || scale > zoomer.max)) {\r\n _setZoomerVal.call(self, scale < zoomer.min ? zoomer.min : zoomer.max);\r\n }\r\n else if (initial) {\r\n defaultInitialZoom = Math.max((boundaryData.width / imgData.width), (boundaryData.height / imgData.height));\r\n initialZoom = self.data.boundZoom !== null ? self.data.boundZoom : defaultInitialZoom;\r\n _setZoomerVal.call(self, initialZoom);\r\n }\r\n\r\n dispatchChange(zoomer);\r\n }\r\n\r\n function _bindPoints(points) {\r\n if (points.length !== 4) {\r\n throw \"Croppie - Invalid number of points supplied: \" + points;\r\n }\r\n var self = this,\r\n pointsWidth = points[2] - points[0],\r\n // pointsHeight = points[3] - points[1],\r\n vpData = self.elements.viewport.getBoundingClientRect(),\r\n boundRect = self.elements.boundary.getBoundingClientRect(),\r\n vpOffset = {\r\n left: vpData.left - boundRect.left,\r\n top: vpData.top - boundRect.top\r\n },\r\n scale = vpData.width / pointsWidth,\r\n originTop = points[1],\r\n originLeft = points[0],\r\n transformTop = (-1 * points[1]) + vpOffset.top,\r\n transformLeft = (-1 * points[0]) + vpOffset.left,\r\n newCss = {};\r\n\r\n newCss[CSS_TRANS_ORG] = originLeft + 'px ' + originTop + 'px';\r\n newCss[CSS_TRANSFORM] = new Transform(transformLeft, transformTop, scale).toString();\r\n css(self.elements.preview, newCss);\r\n\r\n _setZoomerVal.call(self, scale);\r\n self._currentZoom = scale;\r\n }\r\n\r\n function _centerImage() {\r\n var self = this,\r\n imgDim = self.elements.preview.getBoundingClientRect(),\r\n vpDim = self.elements.viewport.getBoundingClientRect(),\r\n boundDim = self.elements.boundary.getBoundingClientRect(),\r\n vpLeft = vpDim.left - boundDim.left,\r\n vpTop = vpDim.top - boundDim.top,\r\n w = vpLeft - ((imgDim.width - vpDim.width) / 2),\r\n h = vpTop - ((imgDim.height - vpDim.height) / 2),\r\n transform = new Transform(w, h, self._currentZoom);\r\n\r\n css(self.elements.preview, CSS_TRANSFORM, transform.toString());\r\n }\r\n\r\n function _transferImageToCanvas(customOrientation) {\r\n var self = this,\r\n canvas = self.elements.canvas,\r\n img = self.elements.img,\r\n ctx = canvas.getContext('2d');\r\n\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n var orientation = self.options.enableOrientation && customOrientation || getExifOrientation(img);\r\n drawCanvas(canvas, img, orientation);\r\n }\r\n\r\n function _getCanvas(data) {\r\n var self = this,\r\n points = data.points,\r\n left = num(points[0]),\r\n top = num(points[1]),\r\n right = num(points[2]),\r\n bottom = num(points[3]),\r\n width = right-left,\r\n height = bottom-top,\r\n circle = data.circle,\r\n canvas = document.createElement('canvas'),\r\n ctx = canvas.getContext('2d'),\r\n startX = 0,\r\n startY = 0,\r\n canvasWidth = data.outputWidth || width,\r\n canvasHeight = data.outputHeight || height;\r\n\r\n canvas.width = canvasWidth;\r\n canvas.height = canvasHeight;\r\n\r\n if (data.backgroundColor) {\r\n ctx.fillStyle = data.backgroundColor;\r\n ctx.fillRect(0, 0, canvasWidth, canvasHeight);\r\n }\r\n\r\n // By default assume we're going to draw the entire\r\n // source image onto the destination canvas.\r\n sx = left;\r\n sy = top;\r\n sWidth = width;\r\n sHeight = height;\r\n dx = 0;\r\n dy = 0;\r\n dWidth = canvasWidth;\r\n dHeight = canvasHeight;\r\n\r\n //\r\n // Do not go outside of the original image's bounds along the x-axis.\r\n // Handle translations when projecting onto the destination canvas.\r\n //\r\n\r\n // The smallest possible source x-position is 0.\r\n if (left < 0) {\r\n sx = 0;\r\n dx = (Math.abs(left) / width) * canvasWidth;\r\n }\r\n\r\n // The largest possible source width is the original image's width.\r\n if (sWidth + sx > self._originalImageWidth) {\r\n sWidth = self._originalImageWidth - sx;\r\n dWidth = (sWidth / width) * canvasWidth;\r\n }\r\n\r\n //\r\n // Do not go outside of the original image's bounds along the y-axis.\r\n //\r\n\r\n // The smallest possible source y-position is 0.\r\n if (top < 0) {\r\n sy = 0;\r\n dy = (Math.abs(top) / height) * canvasHeight;\r\n }\r\n\r\n // The largest possible source height is the original image's height.\r\n if (sHeight + sy > self._originalImageHeight) {\r\n sHeight = self._originalImageHeight - sy;\r\n dHeight = (sHeight / height) * canvasHeight;\r\n }\r\n\r\n // console.table({ left, right, top, bottom, canvasWidth, canvasHeight, width, height, startX, startY, circle, sx, sy, dx, dy, sWidth, sHeight, dWidth, dHeight });\r\n\r\n ctx.drawImage(this.elements.preview, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);\r\n if (circle) {\r\n ctx.fillStyle = '#fff';\r\n ctx.globalCompositeOperation = 'destination-in';\r\n ctx.beginPath();\r\n ctx.arc(canvas.width / 2, canvas.height / 2, canvas.width / 2, 0, Math.PI * 2, true);\r\n ctx.closePath();\r\n ctx.fill();\r\n }\r\n return canvas;\r\n }\r\n\r\n function _getHtmlResult(data) {\r\n var points = data.points,\r\n div = document.createElement('div'),\r\n img = document.createElement('img'),\r\n width = points[2] - points[0],\r\n height = points[3] - points[1];\r\n\r\n addClass(div, 'croppie-result');\r\n div.appendChild(img);\r\n css(img, {\r\n left: (-1 * points[0]) + 'px',\r\n top: (-1 * points[1]) + 'px'\r\n });\r\n img.src = data.url;\r\n css(div, {\r\n width: width + 'px',\r\n height: height + 'px'\r\n });\r\n\r\n return div;\r\n }\r\n\r\n function _getBase64Result(data) {\r\n return _getCanvas.call(this, data).toDataURL(data.format, data.quality);\r\n }\r\n\r\n function _getBlobResult(data) {\r\n var self = this;\r\n return new Promise(function (resolve) {\r\n _getCanvas.call(self, data).toBlob(function (blob) {\r\n resolve(blob);\r\n }, data.format, data.quality);\r\n });\r\n }\r\n\r\n function _replaceImage(img) {\r\n if (this.elements.img.parentNode) {\r\n Array.prototype.forEach.call(this.elements.img.classList, function(c) { img.classList.add(c); });\r\n this.elements.img.parentNode.replaceChild(img, this.elements.img);\r\n this.elements.preview = img; // if the img is attached to the DOM, they're not using the canvas\r\n }\r\n this.elements.img = img;\r\n }\r\n\r\n function _bind(options, cb) {\r\n var self = this,\r\n url,\r\n points = [],\r\n zoom = null,\r\n hasExif = _hasExif.call(self);\r\n\r\n if (typeof (options) === 'string') {\r\n url = options;\r\n options = {};\r\n }\r\n else if (Array.isArray(options)) {\r\n points = options.slice();\r\n }\r\n else if (typeof (options) === 'undefined' && self.data.url) { //refreshing\r\n _updatePropertiesFromImage.call(self);\r\n _triggerUpdate.call(self);\r\n return null;\r\n }\r\n else {\r\n url = options.url;\r\n points = options.points || [];\r\n zoom = typeof(options.zoom) === 'undefined' ? null : options.zoom;\r\n }\r\n\r\n self.data.bound = false;\r\n self.data.url = url || self.data.url;\r\n self.data.boundZoom = zoom;\r\n\r\n return loadImage(url, hasExif).then(function (img) {\r\n _replaceImage.call(self, img);\r\n if (!points.length) {\r\n var natDim = naturalImageDimensions(img);\r\n var rect = self.elements.viewport.getBoundingClientRect();\r\n var aspectRatio = rect.width / rect.height;\r\n var imgAspectRatio = natDim.width / natDim.height;\r\n var width, height;\r\n\r\n if (imgAspectRatio > aspectRatio) {\r\n height = natDim.height;\r\n width = height * aspectRatio;\r\n }\r\n else {\r\n width = natDim.width;\r\n height = natDim.height / aspectRatio;\r\n }\r\n\r\n var x0 = (natDim.width - width) / 2;\r\n var y0 = (natDim.height - height) / 2;\r\n var x1 = x0 + width;\r\n var y1 = y0 + height;\r\n self.data.points = [x0, y0, x1, y1];\r\n }\r\n else if (self.options.relative) {\r\n points = [\r\n points[0] * img.naturalWidth / 100,\r\n points[1] * img.naturalHeight / 100,\r\n points[2] * img.naturalWidth / 100,\r\n points[3] * img.naturalHeight / 100\r\n ];\r\n }\r\n\r\n self.data.points = points.map(function (p) {\r\n return parseFloat(p);\r\n });\r\n if (self.options.useCanvas) {\r\n _transferImageToCanvas.call(self, options.orientation);\r\n }\r\n _updatePropertiesFromImage.call(self);\r\n _triggerUpdate.call(self);\r\n cb && cb();\r\n });\r\n }\r\n\r\n function fix(v, decimalPoints) {\r\n return parseFloat(v).toFixed(decimalPoints || 0);\r\n }\r\n\r\n function _get() {\r\n var self = this,\r\n imgData = self.elements.preview.getBoundingClientRect(),\r\n vpData = self.elements.viewport.getBoundingClientRect(),\r\n x1 = vpData.left - imgData.left,\r\n y1 = vpData.top - imgData.top,\r\n widthDiff = (vpData.width - self.elements.viewport.offsetWidth) / 2, //border\r\n heightDiff = (vpData.height - self.elements.viewport.offsetHeight) / 2,\r\n x2 = x1 + self.elements.viewport.offsetWidth + widthDiff,\r\n y2 = y1 + self.elements.viewport.offsetHeight + heightDiff,\r\n scale = self._currentZoom;\r\n\r\n if (scale === Infinity || isNaN(scale)) {\r\n scale = 1;\r\n }\r\n\r\n var max = self.options.enforceBoundary ? 0 : Number.NEGATIVE_INFINITY;\r\n x1 = Math.max(max, x1 / scale);\r\n y1 = Math.max(max, y1 / scale);\r\n x2 = Math.max(max, x2 / scale);\r\n y2 = Math.max(max, y2 / scale);\r\n\r\n return {\r\n points: [fix(x1), fix(y1), fix(x2), fix(y2)],\r\n zoom: scale,\r\n orientation: self.data.orientation\r\n };\r\n }\r\n\r\n var RESULT_DEFAULTS = {\r\n type: 'canvas',\r\n format: 'png',\r\n quality: 1\r\n },\r\n RESULT_FORMATS = ['jpeg', 'webp', 'png'];\r\n\r\n function _result(options) {\r\n var self = this,\r\n data = _get.call(self),\r\n opts = deepExtend(clone(RESULT_DEFAULTS), clone(options)),\r\n resultType = (typeof (options) === 'string' ? options : (opts.type || 'base64')),\r\n size = opts.size || 'viewport',\r\n format = opts.format,\r\n quality = opts.quality,\r\n backgroundColor = opts.backgroundColor,\r\n circle = typeof opts.circle === 'boolean' ? opts.circle : (self.options.viewport.type === 'circle'),\r\n vpRect = self.elements.viewport.getBoundingClientRect(),\r\n ratio = vpRect.width / vpRect.height,\r\n prom;\r\n\r\n if (size === 'viewport') {\r\n data.outputWidth = vpRect.width;\r\n data.outputHeight = vpRect.height;\r\n } else if (typeof size === 'object') {\r\n if (size.width && size.height) {\r\n data.outputWidth = size.width;\r\n data.outputHeight = size.height;\r\n } else if (size.width) {\r\n data.outputWidth = size.width;\r\n data.outputHeight = size.width / ratio;\r\n } else if (size.height) {\r\n data.outputWidth = size.height * ratio;\r\n data.outputHeight = size.height;\r\n }\r\n }\r\n\r\n if (RESULT_FORMATS.indexOf(format) > -1) {\r\n data.format = 'image/' + format;\r\n data.quality = quality;\r\n }\r\n\r\n data.circle = circle;\r\n data.url = self.data.url;\r\n data.backgroundColor = backgroundColor;\r\n\r\n prom = new Promise(function (resolve) {\r\n switch(resultType.toLowerCase())\r\n {\r\n case 'rawcanvas':\r\n resolve(_getCanvas.call(self, data));\r\n break;\r\n case 'canvas':\r\n case 'base64':\r\n resolve(_getBase64Result.call(self, data));\r\n break;\r\n case 'blob':\r\n _getBlobResult.call(self, data).then(resolve);\r\n break;\r\n default:\r\n resolve(_getHtmlResult.call(self, data));\r\n break;\r\n }\r\n });\r\n return prom;\r\n }\r\n\r\n function _refresh() {\r\n _updatePropertiesFromImage.call(this);\r\n }\r\n\r\n function _rotate(deg) {\r\n if (!this.options.useCanvas || !this.options.enableOrientation) {\r\n throw 'Croppie: Cannot rotate without enableOrientation && EXIF.js included';\r\n }\r\n\r\n var self = this,\r\n canvas = self.elements.canvas;\r\n\r\n self.data.orientation = getExifOffset(self.data.orientation, deg);\r\n drawCanvas(canvas, self.elements.img, self.data.orientation);\r\n _updateCenterPoint.call(self, true);\r\n _updateZoomLimits.call(self);\r\n }\r\n\r\n function _destroy() {\r\n var self = this;\r\n self.element.removeChild(self.elements.boundary);\r\n removeClass(self.element, 'croppie-container');\r\n if (self.options.enableZoom) {\r\n self.element.removeChild(self.elements.zoomerWrap);\r\n }\r\n delete self.elements;\r\n }\r\n\r\n if (window.jQuery) {\r\n var $ = window.jQuery;\r\n $.fn.croppie = function (opts) {\r\n var ot = typeof opts;\r\n\r\n if (ot === 'string') {\r\n var args = Array.prototype.slice.call(arguments, 1);\r\n var singleInst = $(this).data('croppie');\r\n\r\n if (opts === 'get') {\r\n return singleInst.get();\r\n }\r\n else if (opts === 'result') {\r\n return singleInst.result.apply(singleInst, args);\r\n }\r\n else if (opts === 'bind') {\r\n return singleInst.bind.apply(singleInst, args);\r\n }\r\n\r\n return this.each(function () {\r\n var i = $(this).data('croppie');\r\n if (!i) return;\r\n\r\n var method = i[opts];\r\n if ($.isFunction(method)) {\r\n method.apply(i, args);\r\n if (opts === 'destroy') {\r\n $(this).removeData('croppie');\r\n }\r\n }\r\n else {\r\n throw 'Croppie ' + opts + ' method not found';\r\n }\r\n });\r\n }\r\n else {\r\n return this.each(function () {\r\n var i = new Croppie(this, opts);\r\n i.$ = $;\r\n $(this).data('croppie', i);\r\n });\r\n }\r\n };\r\n }\r\n\r\n function Croppie(element, opts) {\r\n if (element.className.indexOf('croppie-container') > -1) {\r\n throw new Error(\"Croppie: Can't initialize croppie more than once\");\r\n }\r\n this.element = element;\r\n this.options = deepExtend(clone(Croppie.defaults), opts);\r\n\r\n if (this.element.tagName.toLowerCase() === 'img') {\r\n var origImage = this.element;\r\n addClass(origImage, 'cr-original-image');\r\n setAttributes(origImage, {'aria-hidden' : 'true', 'alt' : '' });\r\n var replacementDiv = document.createElement('div');\r\n this.element.parentNode.appendChild(replacementDiv);\r\n replacementDiv.appendChild(origImage);\r\n this.element = replacementDiv;\r\n this.options.url = this.options.url || origImage.src;\r\n }\r\n\r\n _create.call(this);\r\n if (this.options.url) {\r\n var bindOpts = {\r\n url: this.options.url,\r\n points: this.options.points\r\n };\r\n delete this.options['url'];\r\n delete this.options['points'];\r\n _bind.call(this, bindOpts);\r\n }\r\n }\r\n\r\n Croppie.defaults = {\r\n viewport: {\r\n width: 100,\r\n height: 100,\r\n type: 'square'\r\n },\r\n boundary: { },\r\n orientationControls: {\r\n enabled: true,\r\n leftClass: '',\r\n rightClass: ''\r\n },\r\n resizeControls: {\r\n width: true,\r\n height: true\r\n },\r\n customClass: '',\r\n showZoomer: true,\r\n enableZoom: true,\r\n enableResize: false,\r\n mouseWheelZoom: true,\r\n enableExif: false,\r\n enforceBoundary: true,\r\n enableOrientation: false,\r\n enableKeyMovement: true,\r\n update: function () { }\r\n };\r\n\r\n Croppie.globals = {\r\n translate: 'translate3d'\r\n };\r\n\r\n deepExtend(Croppie.prototype, {\r\n bind: function (options, cb) {\r\n return _bind.call(this, options, cb);\r\n },\r\n get: function () {\r\n var data = _get.call(this);\r\n var points = data.points;\r\n if (this.options.relative) {\r\n points[0] /= this.elements.img.naturalWidth / 100;\r\n points[1] /= this.elements.img.naturalHeight / 100;\r\n points[2] /= this.elements.img.naturalWidth / 100;\r\n points[3] /= this.elements.img.naturalHeight / 100;\r\n }\r\n return data;\r\n },\r\n result: function (type) {\r\n return _result.call(this, type);\r\n },\r\n refresh: function () {\r\n return _refresh.call(this);\r\n },\r\n setZoom: function (v) {\r\n _setZoomerVal.call(this, v);\r\n dispatchChange(this.elements.zoomer);\r\n },\r\n rotate: function (deg) {\r\n _rotate.call(this, deg);\r\n },\r\n destroy: function () {\r\n return _destroy.call(this);\r\n }\r\n });\r\n return Croppie;\r\n}));\r\n"],"sourceRoot":""}