{"version":3,"file":"static/chunks/8004-0f96b1ff4d8f9c9d.js","mappings":"mLAKA,MAAMA,EAAO,CACXC,YAAa,CACXC,MAAO,6CACPC,MACE,gBACEC,MAAM,KACNC,OAAO,KACPC,UAAU,oBACVC,QAAQ,YACRC,MAAM,6BACNC,KAAK,eACLC,KAAK,eACL,cAAY,OARd,UAUE,iBACEC,EAAE,yhBACFD,KAAK,eAKbE,QAAS,CACPV,MAAO,6CACPC,MACE,gBACEG,UAAU,sBACVE,MAAM,6BACND,QAAQ,YACRG,KAAK,eACL,cAAY,OALd,UAOE,iBACEG,SAAS,UACTF,EAAE,oNACFG,SAAS,eAKjBC,MAAO,CACLb,MAAO,0CACPC,MACE,gBACEG,UAAU,mBACVE,MAAM,6BACND,QAAQ,YACRG,KAAK,eACL,cAAY,OALd,UAOE,iBACEG,SAAS,UACTF,EAAE,0NACFG,SAAS,gBAeJ,SAASE,GAAM,MAC5BC,EAD4B,QAE5BC,EAF4B,KAG5BC,EAAO,UAHqB,UAI5Bb,EAAY,GAJgB,SAK5Bc,GAAW,EALiB,YAM5BC,GAAc,IAGd,MAAM,EAACC,EAAD,EAAOC,IAAWC,EAAAA,EAAAA,WAAS,IAC3B,MAAEtB,EAAF,KAASC,GAASH,EAAKmB,GAC7B,OAAOD,GAAWI,GAChB,iBAAKhB,WAAWmB,EAAAA,EAAAA,IAAW,4CAA6CH,GAAQ,QAASpB,EAAOI,GAAhG,UACGW,IAAS,gBAAKX,UAAU,4BAAf,SAA4CW,KACtD,iBAAKX,UAAU,oBAAf,UACGc,IAAY,gBAAKd,UAAU,gBAAf,SAAgCH,KAC7C,gBAAKG,UAAYc,EAAoB,OAAT,OAA5B,UACE,cAAGd,UAAU,YAAb,SAA0BY,SAG7BG,IACC,gBAAKf,UAAU,yBAAf,UACE,oBACEa,KAAK,SACLO,QAAS,IAAMH,GAASD,GACxBhB,UAAU,uOAHZ,WAKE,iBAAMA,UAAU,UAAhB,sBACA,SAAC,MAAD,CAAOA,UAAU,UAAU,cAAY,iBAK7C,O,2DC9FC,MAAMqB,EAAQ,CACnBC,QAAS,GACTC,KAAM,yEACNC,KAAM,yEACNC,SACE,6IAGSC,EAAO,CAClBJ,QAAS,UACTK,OAAQ,UACRC,MAAO,WAYT,KATA,UAAe,MACbhC,EAAQ,UADK,KAEbiC,EAAO,UAFM,SAGbC,EAHa,UAIb9B,EAAY,KAEZ,OAAO,gBAAKA,UAAS,UAAKqB,EAAMzB,GAAX,YAAqB8B,EAAKG,GAA1B,YAAmC7B,GAAjD,SAA+D8B,M,uECbxE,IAdqD,EAAGA,SAAAA,EAAU9B,UAAAA,KAC5D+B,EAAAA,IACK,gBAAK/B,UAAU,cAAf,SAA8B8B,KAIrC,iBAAK9B,WAAWmB,EAAAA,EAAAA,IAAWnB,EAAW,6BAAtC,WACE,gBAAKA,UAAU,2FACf,gBAAKA,UAAU,6FACf,gBAAKA,UAAU,8BAAf,SAA8C8B,Q,oJCyCpD,MA5CwC,EAAGE,OAAAA,EAAQC,UAAAA,EAAWH,SAAAA,MAE1D,SAAC,SAAD,CAAiBd,KAAMgB,EAAQE,GAAIC,EAAAA,SAAnC,UACE,SAAC,IAAD,CAAQD,GAAG,MAAME,QAAM,EAACpC,UAAU,qCAAqCqC,KAAML,EAAQM,QAASL,EAA9F,UACE,iBAAKjC,UAAU,2EAAf,WACE,SAAC,UAAD,CACEkC,GAAIC,EAAAA,SACJI,MAAM,wBACNC,UAAU,YACVC,QAAQ,aACRC,MAAM,uBACNC,UAAU,aACVC,QAAQ,YAPV,UASE,UAAC,YAAD,CAAgB5C,UAAU,2GAA1B,WACE,gBAAKA,UAAU,sHACf,gBAAKA,UAAU,2HAKnB,iBAAMA,UAAU,qCAAqC,cAAY,OAAjE,qBAIA,SAAC,UAAD,CACEkC,GAAIC,EAAAA,SACJI,MAAM,wBACNC,UAAU,YACVC,QAAQ,aACRC,MAAM,uBACNC,UAAU,aACVC,QAAQ,YAPV,UASE,gBAAK5C,UAAU,+IAAf,SACG8B,a,2EC5Bf,MAAMe,EAAmC,EAAGf,SAAAA,EAAUgB,SAAAA,EAAW,OAC/D,MAAM,KAAEC,IAASC,EAAAA,EAAAA,OACX,QAAEC,EAAF,QAAWC,EAAX,QAAoBC,IAAYC,EAAAA,EAAAA,KAEhCC,GACJ,SAACC,EAAA,EAAD,CAASC,KAAK,QAAd,UACE,cAAGvD,UAAU,+BAAb,SAA6C+C,EAAKS,EAAE,sBAIxD,OACE,iCACE,SAAC,EAAD,CAAiBxB,SAAUmB,IAAYL,EAASW,SAASR,GAAUhB,UAAW,IAAM,KAApF,UACE,iBAAKjC,UAAU,qCAAf,WACE,SAAC0D,EAAA,EAAD,CAAYC,QAAQ,KAAK3D,UAAU,mCAAmC4D,OAAQ,IAA9E,SACGb,EAAKS,EAAE,kEAAwDK,EAAAA,EAAcZ,SAEhF,SAACS,EAAA,EAAD,CAAY1D,UAAU,cAAtB,UACE,SAAC,KAAD,CACE8D,GAAG,kEACHC,OAAQ,CAAEV,KAAAA,GACVW,WAAY7B,EAAAA,cAGhB,SAACuB,EAAA,EAAD,CAAY1D,UAAU,4DAA4D4D,OAAQ,IAA1F,SACGb,EAAKS,EAAE,8BAEV,gBACExD,UAAS,6CAAwCiE,KAAKC,IAAI,EAAGpB,EAASqB,QAA7D,wBAAoFF,KAAKC,IAChG,EACApB,EAASqB,QAFF,KADX,SAMGrB,EAASsB,KAAI,CAACC,EAAcC,KAC3B,oBACEtE,UAAU,+EAEVoB,QAAS,KACP,MAAMmD,EAASC,EAAAA,EAAmBH,GAClCI,IAAAA,IAAW,UAAWJ,GAClBA,IAAQK,EAAAA,GAAAA,SACH,OAAPxB,QAAO,IAAPA,GAAAA,EAASyB,KAAK,6BAA8B,CAAC,CAAE1B,QAAS,OAASE,IAE1D,OAAPD,QAAO,IAAPA,GAAAA,EAASyB,KAAK,0BAA2B,CAACJ,EAAQpB,KATxD,WAaE,gBAAKnD,UAAU,oBAAf,UACE,SAAC,UAAD,CACE4E,IAAKC,EAAAA,EAAaR,GAClBS,IAAI,iBACJ9E,UAAU,6CACVF,MAAM,OACNC,OAAO,YAGX,SAAC2D,EAAA,EAAD,CAAY1D,UAAU,UAAtB,SAAiC6D,EAAAA,EAAcQ,OApB1CC,YA0BdxC,MASP,MAJsBgB,GACb,EAAGhB,SAAAA,MAAe,SAACe,EAAD,CAAWC,SAAUA,EAArB,SAAgChB,K,6sBCjD3D,MAAMiD,EAAc,CAACC,EAAmB,KAAOC,EAAAA,GAAAA,aAAkBA,EAAAA,GAAAA,OAAY,IAAKA,EAAAA,GAAAA,OAAYD,IAExFE,EAAU,GAAH,OAAMC,EAAAA,GAAN,gBACPC,EAAc,CAACC,EAAKlC,EAASF,EAASqC,EAAaC,IAChDC,MAAMH,EAAK,CAChBI,OAAQ,OACRC,KAAMC,KAAKC,UAAU,CAAEC,QAAS1C,EAASF,QAAAA,EAASsC,KAAAA,EAAMD,YAAAA,MAEvDQ,MAAMC,GAAMA,EAAEC,SACdF,MAAMG,GAAMA,EAAEC,OA6InB,IA1IuB,KACrB,MAAM,QAAE/C,EAAF,QAAWF,IAAYG,EAAAA,EAAAA,KACvB+C,GAAqBC,EAAAA,EAAAA,MACrBC,GAASC,EAAAA,EAAAA,OAET,EAACC,EAAD,EAAQC,IAAYtF,EAAAA,EAAAA,UAAgB,CACxCuF,QAAS,CACPlB,KAAM,EACNmB,SAAU,KACVR,KAAM,GACNS,SAAS,EACTC,YAAa,GAEfC,UAAW,CACTtB,KAAM,EACNmB,SAAU,KACVR,KAAM,GACNS,SAAS,EACTC,YAAa,KAIXE,GAAcC,EAAAA,EAAAA,UAClB,IACE7B,GAAW/B,GAAWF,EAAU,CAACiC,EAAS/B,EAASF,EAASsD,EAAME,QAAQlB,KAAMgB,EAAMM,UAAUtB,MAAQ,MAC1G,CAACpC,EAASF,EAASsD,EAAMM,UAAUtB,KAAMgB,EAAME,QAAQlB,QAGjDW,KAAMc,EAAR,OAAoBC,IAAoCC,EAAAA,EAAAA,IAAOJ,EAAa1B,GAE5E+B,GAAiBC,EAAAA,EAAAA,cAAa7B,IAClCiB,GAAUa,GAAD,OACJA,GADI,IAEPZ,QAAS,EAAF,KACFY,EAAUZ,SADR,IAELlB,KAAAA,EACAoB,SAAS,UAGZ,IAEGW,GAAmBF,EAAAA,EAAAA,cAAa7B,IACpCiB,GAAUa,GAAD,OACJA,GADI,IAEPR,UAAW,EAAF,KACJQ,EAAUR,WADN,IAEPtB,KAAAA,EACAoB,SAAS,UAGZ,IAuEH,OArEAY,EAAAA,EAAAA,YAAU,KACR,IACGpE,IACAF,IACA+D,IACAA,EAAWQ,gBACXR,EAAWS,cACXC,MAAMC,QAAQX,EAAWQ,cAAcI,UACvCF,MAAMC,QAAQX,EAAWS,YAAYG,QAEtC,OAEF,MAAMC,EAAYC,MAAAA,IAChB,MAAMC,EAAaC,EAAAA,GAAAA,cAAA,OACdC,GADc,IAEjBhF,SAAUgF,EAAMhF,QAChBiF,iBAAkBD,EAAMC,gBACxBC,kBAAmBF,EAAME,oBAGrBC,EAAUL,EAAWM,SAASC,SAC9BC,EAAWR,EAAWS,UAAUF,SAoBtC,MAlBkB,CAChBF,QACE/B,EAAO+B,EAAQvC,UACf,IAAI4C,EAAAA,GAAMxF,EAASmF,EAAQvC,QAAQ6C,cAAeN,EAAQpD,SAAUoD,EAAQO,QAC9EJ,SACElC,EAAOkC,EAAS1C,UAChB,IAAI4C,EAAAA,GAAMxF,EAASsF,EAAS1C,QAAQ6C,cAAeH,EAASvD,SAAUuD,EAASI,QACjFZ,WAAAA,EACAa,cAAeX,EAAMY,aACjBZ,EAAMY,aAAaC,IAAIC,EAAAA,GAAAA,KAAe,QAAQC,IAAID,EAAAA,GAAAA,KAAed,EAAMI,WAAWY,WAClF,IACJC,OAAQjB,EAAMiB,OACdC,KAAM,IAAIC,EAAAA,GAAQrB,EAAWS,UAAUa,SAAUtE,EAAYwD,EAASvD,WACnEsE,OAAO,IAAIF,EAAAA,GAAQrB,EAAWM,SAASgB,SAAUtE,EAAYqD,EAAQpD,YACrEsE,OAAOvE,EAAY,IACnBwE,cAAc,KAMpB,WACC,MAAMC,QAAmBC,QAAQC,IAAe1C,EAAWQ,cAAcI,OAAOxD,KAAKuF,GAAO9B,EAAU8B,MAChGC,QAAwBH,QAAQC,IAAe1C,EAAWS,YAAYG,OAAOxD,KAAKuF,GAAO9B,EAAU8B,MAEzGnD,GAAUa,IAAD,CACPZ,QAAS,EAAF,KACFY,EAAUZ,SADR,IAELP,KAAMsD,EACN9C,SAAUM,EAAWQ,cAAcqC,oBACnClD,SAAS,EACTC,YAAaI,EAAWQ,cAAcsC,qBAExCjD,UAAW,EAAF,KACJQ,EAAUR,WADN,IAEPX,KAAM0D,EACNlD,SAAUM,EAAWS,YAAYsC,QACjCpD,SAAS,EACTC,YAAaI,EAAWS,YAAYb,mBAjBzC,KAuBA,CAACzD,EAASF,EAAS+D,EAAYb,EAAoBgB,EAAgBG,KAE/DP,EAAAA,EAAAA,UACL,IAAM,EAAN,KACKR,GADL,IAEEE,QAAS,EAAF,KACFF,EAAME,SADJ,IAELuD,QAAS7C,IAEXN,UAAW,EAAF,KACJN,EAAMM,WADF,IAEPmD,QAAS1C,IAEXL,OAAAA,KAEF,CAACA,EAAQK,EAAkBH,EAAgBZ,M,4FClLhC,SAAS0D,IAEtB,MAAMC,EAASC,SAASD,OACxB,OAAOnD,EAAAA,EAAAA,UACL,IAAOmD,GAAUA,EAAO/F,OAAS,GAAIiG,EAAAA,EAAAA,OAAMF,EAAQ,CAAEG,aAAa,EAAOC,mBAAmB,IAAU,IACtG,CAACJ,M,+LCDL,SAASK,EAAkBC,EAAsBC,GAC/C,MAAMC,ECFD,SAAoCF,EAAsBC,GAC/D,MAAM,QAAExH,IAAYG,EAAAA,EAAAA,MAEbuH,EAAQC,GAAU3H,EAAU,QAACuH,QAAD,IAACA,OAAD,EAACA,EAAWK,QAAZ,OAAqBJ,QAArB,IAAqBA,OAArB,EAAqBA,EAAWI,SAAW,MAACC,OAAWA,GAEpFC,GAAiBhE,EAAAA,EAAAA,UAAQ,KAAM,cACnC,OAAK9D,EAME,IAJK,UAAG+H,EAAAA,GAA8B/H,UAAjC,QAA6C,MACrC0H,GAAM,oBAAGM,EAAAA,GAAiBhI,UAApB,aAAG,EAA4B0H,EAAO9E,gBAAtC,QAAuD,MAC7D+E,GAAM,oBAAGK,EAAAA,GAAiBhI,UAApB,aAAG,EAA4B2H,EAAO/E,gBAAtC,QAAuD,IAJ5D,KAOpB,CAAC5C,EAAS0H,EAAQC,IAEfM,GAA8BnE,EAAAA,EAAAA,UAClC,IAAMoE,GAAAA,CAAQJ,GAAQK,GAA2BL,EAAM3G,KAAKiH,GAAc,CAACD,EAAMC,QACjF,CAACN,IAGH,OAAOhE,EAAAA,EAAAA,UACL,IACE4D,GAAUC,EACN,CAEE,CAACD,EAAQC,MAENG,EAAM3G,KAAKgH,GAAyB,CAACT,EAAQS,QAE7CL,EAAM3G,KAAKgH,GAAyB,CAACR,EAAQQ,QAE7CF,GAEFI,QAAQjF,GAAqCkF,QAAQlF,EAAO,IAAMA,EAAO,MACzEiF,QAAO,EAAEE,EAAIC,KAAQD,EAAG3F,UAAY4F,EAAG5F,UACvCyF,QAAO,EAAEX,EAAQC,MAChB,IAAK3H,EAAS,OAAO,EACrB,MAAMyI,EAAcC,EAAAA,GAAa1I,GAE3B2I,EAAiC,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAcf,EAAO9E,SACzDgG,EAAiC,OAAGH,QAAH,IAAGA,OAAH,EAAGA,EAAcd,EAAO/E,SAE/D,OAAK+F,IAAiBC,KAElBD,IAAiBA,EAAaE,MAAMV,GAASR,EAAOmB,OAAOX,SAC3DS,IAAiBA,EAAaC,MAAMV,GAAST,EAAOoB,OAAOX,SAInE,IACN,CAACT,EAAQC,EAAQG,EAAOG,EAAWjI,IDhDL+I,CAA2BxB,EAAWC,GAEhEwB,GAAWC,EAAAA,EAAAA,IAAWxB,GAG5B,OAAO3D,EAAAA,EAAAA,UACL,IACEoF,OAAOpI,OACLkI,EAEGX,QAAQc,GAA+Cb,QAAQa,EAAO,KAAOC,EAAAA,GAAAA,QAAoBD,EAAO,MAExGE,QAAwC,CAACC,GAAO,CAAEC,MAAU,MAE3D,OADAD,EAAKC,EAAKC,eAAe5G,SAAzB,UAAoC0G,EAAKC,EAAKC,eAAe5G,gBAA7D,QAAyE2G,EAClED,IACN,MAET,CAACN,IASE,SAASS,EACdC,EACAC,GACA,QAAEC,EARa,GAQU,IAEzB,MAAMC,EAAevC,EAAiB,OAACoC,QAAD,IAACA,OAAD,EAACA,EAAkBrE,SAAUsE,GAEnE,OAAO7F,EAAAA,EAAAA,UAAQ,KACb,GAAI4F,GAAoBC,GAAeE,EAAa3I,OAAS,EAAG,CAC3C,MAAnB,GAAgB,IAAZ0I,EACF,iBACEE,EAAAA,GAAAA,iBAAuBD,EAAcH,EAAkBC,EAAa,CAClEC,QAAS,EACTG,cAAe,IACd,UAJL,QAIW,KAIb,IAAIC,EAA0E,KAC9E,IAAK,IAAIC,EAAI,EAAGA,GAAKL,EAASK,IAAK,OACjC,MAAMC,EAAqE,UACzEJ,EAAAA,GAAAA,iBAAuBD,EAAcH,EAAkBC,EAAa,CAClEC,QAASK,EACTF,cAAe,IACd,UAJsE,QAIhE,MAEPI,EAAAA,EAAAA,IAAcH,EAAgBE,EAAcE,EAAAA,MAC9CJ,EAAiBE,GAGrB,OAAOF,EAGT,OAAO,OACN,CAACH,EAAcH,EAAkBC,EAAaC,IAM5C,SAASS,EACdC,EACAC,GACA,QAAEX,EAhDa,GAgDU,IAEzB,MAAMC,EAAevC,EAAkBgD,EAAD,OAAaC,QAAb,IAAaA,OAAb,EAAaA,EAAmBlF,UAEtE,OAAOvB,EAAAA,EAAAA,UAAQ,KACb,GAAIwG,GAAcC,GAAqBV,EAAa3I,OAAS,EAAG,CAC3C,MAAnB,GAAgB,IAAZ0I,EACF,iBACEE,EAAAA,GAAAA,kBAAwBD,EAAcS,EAAYC,EAAmB,CACnEX,QAAS,EACTG,cAAe,IACd,UAJL,QAIW,KAIb,IAAIC,EAA2E,KAC/E,IAAK,IAAIC,EAAI,EAAGA,GAAKL,EAASK,IAAK,OACjC,MAAMC,EAAY,UAChBJ,EAAAA,GAAAA,kBAAwBD,EAAcS,EAAYC,EAAmB,CACnEX,QAASK,EACTF,cAAe,IACd,UAJa,QAIP,MACPI,EAAAA,EAAAA,IAAcH,EAAgBE,EAAcE,EAAAA,MAC9CJ,EAAiBE,GAGrB,OAAOF,EAET,OAAO,OACN,CAACM,EAAYC,EAAmBV,EAAcD,M,05BExF5C,SAASY,IAMd,MAAMC,GAAWC,EAAAA,EAAAA,MACXC,GAAsBxG,EAAAA,EAAAA,cAC1B,CAACyG,EAAcvF,KACboF,GACEI,EAAAA,EAAAA,GAAe,CACbD,MAAAA,EACAE,WAAYzF,EAAS0F,QAAU1F,EAASzC,QAAUyC,EAAS2F,SAAW,MAAQ,QAIpF,CAACP,IAoBH,MAAO,CACLQ,gBAnBqB9G,EAAAA,EAAAA,cAAY,KACjCsG,GAASS,EAAAA,EAAAA,SACR,CAACT,IAkBFE,oBAAAA,EACAQ,aAjBkBhH,EAAAA,EAAAA,cAClB,CAACyG,EAAcQ,KACbX,GAASY,EAAAA,EAAAA,IAAU,CAAET,MAAAA,EAAOQ,WAAAA,OAE9B,CAACX,IAcDa,mBAXwBnH,EAAAA,EAAAA,cACvBoH,IACCd,GAASe,EAAAA,EAAAA,IAAa,CAAED,UAAAA,OAE1B,CAACd,KAWL,MAAM3I,EAAc,CAACC,EAAmB,KAAOC,EAAAA,GAAAA,aAAkBA,EAAAA,GAAAA,OAAY,IAAKA,EAAAA,GAAAA,OAAYD,IAEvF,SAAS0J,IAOd,QACA,MAAM,QAAEvL,EAAF,QAAWF,IAAYG,EAAAA,EAAAA,MACtBuL,IAAiBC,EAAAA,EAAAA,OAEtB,CAACC,EAAAA,GAAAA,QAAgBd,WAAYe,GAC7B,CAACD,EAAAA,GAAAA,SAAiBd,WAAYgB,GAF1B,WAGJV,EAHI,iBAIJW,EAJI,WAKJC,EALI,iBAMJC,EANI,UAOJV,EAPI,gBAQJW,GACEC,IAEEC,GAAgBC,EAAAA,EAAAA,IAAYR,GAC5BS,GAAiBD,EAAAA,EAAAA,IAAYP,GAC7BS,GAAkBC,EAAAA,EAAAA,GAAM,OAACjB,QAAD,IAACA,EAAAA,OAAa1D,GACtC4E,EAAiB,QAAI,EAAc,OAAdlB,EAAqBrL,EAAUqM,EAAgB3J,eAAnD,QAA+D,KAEhF8J,EAAqBX,IAAqBH,EAAAA,GAAAA,MAC1Ce,GAAoBC,EAAAA,EAAAA,IAAexB,EAAD,UAAcsB,EAAYN,EAAgBE,SAA1C,aAA6DzE,GACrG,IAAIgF,EAAab,GAAaY,EAAAA,EAAAA,IAAeZ,EAAYc,EAAAA,GAAQ9M,SAAY6H,EAE7E,MAAMkF,EACJT,GAAkBO,GAAcF,EAC5BD,EACEM,EAAAA,GAAAA,cACEV,EACA,IAAInG,EAAAA,GAAQ0G,EAAWI,UAAWnL,EAAYgL,EAAAA,GAAQ9M,GAAS+B,WAC5DmL,SAAS,IAAI/G,EAAAA,GAAQwG,EAAkBvG,SAAUtE,EAAYsK,EAAcrK,YAC3EmL,SAASpL,EAAYwK,EAAevK,WAAWqE,UAEpD4G,EAAAA,GAAAA,cACEZ,EACA,IAAIjG,EAAAA,GACFwG,EACGO,SAASpL,EAAYsK,EAAcrK,WACnCmL,SAASpL,EAAYgL,EAAAA,GAAQ9M,GAAS+B,SAAWuK,EAAevK,WAAWqE,SAC9EyG,EAAWzG,UACXA,eAENyB,EAEAsF,GAAmBC,EAAAA,EAAAA,GAAgBV,EAAYC,OAAoB9E,EAAjC,OAA4CyE,QAA5C,IAA4CA,EAAAA,OAAkBzE,EAAW,CAC/G+B,QAAS8B,EAAgB,OAAI7D,IAGzBwF,GAAoBC,EAAAA,EAAAA,GAAgB,OAAClB,QAAD,IAACA,EAAAA,OAAiBvE,EAAY6E,OAAgC7E,EAApB8E,EAA+B,CACjH/C,QAAS8B,EAAgB,OAAI7D,IAGzB0F,EAAQb,EAAYS,EAAmBE,EACvCnH,EAAI,OAAGqH,QAAH,IAAGA,OAAH,EAAGA,EAAOC,eAEdC,GAAmBC,EAAAA,EAAAA,MACnBC,GAAU7J,EAAAA,EAAAA,UACd,WAAM2J,QAAN,IAAMA,OAAN,EAAMA,EAAkB5E,MAAMnC,GAAOA,EAAG9D,WAAH,OAAewJ,QAAf,IAAeA,OAAf,EAAeA,EAAexE,QAAQhF,YAC3E,CAAC6K,EAAD,OAAmBrB,QAAnB,IAAmBA,OAAnB,EAAmBA,EAAexE,QAAQhF,UAGtCgL,GAAwBC,EAAAA,EAAAA,IAAmB,OAAC3N,QAAD,IAACA,EAAAA,OAAW2H,EAAW,QACtEuE,QADsE,IACtEA,EAAAA,OAAiBvE,EADqD,OAEtEyE,QAFsE,IAEtEA,EAAAA,OAAkBzE,IAGdiG,EAAiB,CACrB,CAAClC,EAAAA,GAAAA,OAAcgC,EAAsB,GACrC,CAAChC,EAAAA,GAAAA,QAAegC,EAAsB,IAGlCG,EAAmB,CACvB,CAACnC,EAAAA,GAAAA,OAAcQ,EACXY,EAAAA,GAAAA,cAA6BZ,EAAsB,OAAPuB,QAAO,IAAPA,GAAAA,EAASK,aAAeL,EAAQK,aAAe,QAC3FnG,EACJ,CAAC+D,EAAAA,GAAAA,QAAeU,EACZU,EAAAA,GAAAA,cAA6BV,EAAuB,OAAPqB,QAAO,IAAPA,GAAAA,EAASK,aAAeL,EAAQK,aAAe,QAC5FnG,GAGAoG,EAAgB,CACpB,CAACrC,EAAAA,GAAAA,OAAcG,IAAqBH,EAAAA,GAAAA,MAAce,EAAoBI,EACtE,CAACnB,EAAAA,GAAAA,QAAeG,IAAqBH,EAAAA,GAAAA,OAAee,EAAoBI,GAGpEmB,EAA8C,CAClD,CAACtC,EAAAA,GAAAA,OAAD,OAAeQ,QAAf,IAAeA,EAAAA,OAAiBvE,EAChC,CAAC+D,EAAAA,GAAAA,QAAD,OAAgBU,QAAhB,IAAgBA,EAAAA,OAAkBzE,GAGpC,IAAIsG,EAK2C,MAIY,GARtDjO,IACHiO,EAAa,kBAGVxB,GAAsBI,KACzBoB,EAAU,UAAGA,SAAH,QAAiBrO,EAAAA,GAAAA,EAAO,4BAG/BoO,EAAWtC,EAAAA,GAAAA,QAAiBsC,EAAWtC,EAAAA,GAAAA,UAC1CuC,EAAU,UAAGA,SAAH,QAAiBrO,EAAAA,GAAAA,EAAO,2BAGpC,MAAMsO,GAAcC,EAAAA,EAAAA,IAAU5B,GACL,MAIR,EAIK,EARjBA,GAAO2B,IACVD,EAAU,UAAGA,SAAH,QAAiBrO,EAAAA,GAAAA,EAAO,8BAG/BkM,IACHmC,EAAU,UAAGA,SAAH,QAAiBrO,EAAAA,GAAAA,EAAO,0BAG/BoM,IACHiC,EAAU,UAAGA,SAAH,QAAiBrO,EAAAA,GAAAA,EAAO,uCAIpC,MAAOwO,EAAWlJ,IAAY,CAC5B6G,EAAmB8B,EAAiBnC,EAAAA,GAAAA,OAAekC,EAAelC,EAAAA,GAAAA,OAClEqC,EAAcrC,EAAAA,GAAAA,QAO2C,QAJtD0C,IACHH,EAAarO,EAAAA,GAAAA,EAAO,4BAGlBwO,GAAalJ,IAAYkJ,EAAUC,SAASnJ,OAC9C+I,EAAarO,EAAAA,GAAAA,EAAO,gDAAiBoO,EAAWtC,EAAAA,GAAAA,cAA5B,cAAiB,GAAyBlG,WAGhE,MAAO,CACLwI,WAAAA,EACAD,cAAAA,EACAH,eAAAA,EACAC,iBAAAA,EACAI,WAAAA,EACAK,aAActI,GAIX,SAASiG,IACd,OAAOsC,EAAAA,EAAAA,KAA+CnL,GAAUA,EAAMwB,aAGjE,SAAS4J,IACd,OAAOD,EAAAA,EAAAA,KAAanL,GAAoBA,EAAMwB,WAAW6J,4BAG3D,SAASC,EAA8BC,GACrC,GAAwB,kBAAbA,EAAuB,CAChC,MAAMC,GAAQT,EAAAA,EAAAA,IAAUQ,GACxB,GAAIC,EAAO,OAAOA,EAClB,GAA+B,QAA3BD,EAASE,cAAyB,MAAO,MAE/C,MAAO,GAGT,SAASC,EAA6BH,GACpC,MAA2B,kBAAbA,GAA0BI,MAAMC,WAAWL,IAAwB,GAAXA,EAOxE,SAASM,EAA2BN,GAClC,MAAwB,kBAAbA,IACoB,SAA3BA,EAASpJ,gBACToJ,EAASpJ,eAAkC,IAIjD,MAAM2J,EAAiB,qFACjBC,EAAgB,sBACtB,SAASC,EAAmB/D,GAC1B,GAAyB,kBAAdA,EAAwB,OAAO,KAC1C,MAAM3I,GAAUyL,EAAAA,EAAAA,IAAU9C,GAC1B,OAAI3I,IACAwM,EAAeG,KAAKhE,IACpB8D,EAAcE,KAAKhE,GADoBA,EAEpC,MAyBF,SAASiE,IACd,MAAM,QAAExP,IAAYG,EAAAA,EAAAA,KACdsK,GAAWC,EAAAA,EAAAA,MACX+E,GAAWzI,EAAAA,EAAAA,MACV0I,IAAcC,EAAAA,EAAAA,OACf,EAACxG,EAAD,EAASyG,IAAa3R,EAAAA,EAAAA,YA2B5B,OAnBAqG,EAAAA,EAAAA,YAAU,KACR,IAAKtE,EAAS,OAEd,MAAM6P,EAtCH,SAAoC7P,EAAkByP,GAC3D,IAAIrD,EAAgBwC,EAA8Ba,EAASrD,eACvDE,EAAiBsC,EAA8Ba,EAASnD,gBAO5D,MANsB,KAAlBF,GAA2C,KAAnBE,EAC1BF,EAAgB0D,EAAAA,GAAO9P,GAAS4C,QACvBwJ,IAAkBE,IAC3BA,EAAiB,IAGZ,CACLT,gBAAiBO,EACjBN,iBAAkBQ,EAClBlB,WAAY4D,EAA6BS,EAASM,aAClDhE,kBAnCuC8C,EAmCaY,EAASO,WAlCpC,kBAAbnB,GAAoD,WAA3BA,EAASpJ,cAA6BmG,EAAAA,GAAAA,OAAeA,EAAAA,GAAAA,OAmC1FL,UAAW+D,EAAmBG,EAASlE,WACvCS,WAAYgD,EAA6BS,EAASQ,WAClDhE,iBAAkBkD,EAA2BM,EAASS,WACtDhE,gBAAiB,CAAEiE,MAAOC,EAAAA,EAAAA,MAAuBC,MAAOvQ,EAAAA,GAAAA,EAAO,mBAvCnE,IAA2C+O,EA4DxByB,CAA2BtQ,EAASyP,GACnDhF,GACE8F,EAAAA,EAAAA,IAAuB,EAAD,KACjBV,GADiB,IAEpBtE,UAAWmE,EAAaG,EAAOtE,UAAY,SAI/CqE,EAAU,CACR/D,gBAAiBgE,EAAOhE,gBACxBC,iBAAkB+D,EAAO/D,qBAI1B,CAACrB,EAAUzK,EAASyP,IAEhBtG,I","sources":["webpack://_N_E/./src/components/Alert/index.tsx","webpack://_N_E/./src/components/Badge/index.tsx","webpack://_N_E/./src/components/DoubleGlowShadow/index.tsx","webpack://_N_E/./src/components/Modal/HeadlessUIModal.tsx","webpack://_N_E/./src/guards/Network/index.tsx","webpack://_N_E/./src/hooks/useLimitOrders.ts","webpack://_N_E/./src/hooks/useParsedQueryString.ts","webpack://_N_E/./src/hooks/useV2Trades.ts","webpack://_N_E/./src/hooks/useAllCurrencyCombinations.ts","webpack://_N_E/./src/state/limit-order/hooks.ts"],"sourcesContent":["import React, { useState } from 'react'\n\nimport { XIcon } from '@heroicons/react/solid'\nimport { classNames } from '../../functions'\n\nconst TYPE = {\n information: {\n color: 'bg-purple bg-opacity-20 text-high-emphesis',\n icon: (\n \n \n \n ),\n },\n warning: {\n color: 'bg-yellow bg-opacity-25 text-high-emphesis',\n icon: (\n \n \n \n ),\n },\n error: {\n color: 'bg-red bg-opacity-25 text-high-emphesis',\n icon: (\n \n \n \n ),\n },\n}\n\nexport interface AlertProps {\n title?: string\n message?: string | React.ReactChild | React.ReactChild[]\n type?: 'warning' | 'error' | 'information'\n showIcon?: boolean\n dismissable?: boolean\n}\n\nexport default function Alert({\n title,\n message,\n type = 'warning',\n className = '',\n showIcon = false,\n dismissable = true,\n}: AlertProps & React.HTMLAttributes): JSX.Element | null {\n // TODO: Persist this...\n const [show, setShow] = useState(true)\n const { color, icon } = TYPE[type]\n return message && show ? (\n
\n {title &&
{title}
}\n
\n {showIcon &&
{icon}
}\n
\n

{message}

\n
\n
\n {dismissable && (\n
\n setShow(!show)}\n className=\"inline-flex opacity-80 hover:opacity-100 focused:opacity-100 rounded p-1.5 text-primary hover:text-high-emphesis focus:text-high-emphesis focus:outline-none focus:ring focus:ring-offset focus:ring-offset-purple focus:ring-purple\"\n >\n Dismiss\n \n \n
\n )}\n
\n ) : null\n}\n","import React from 'react'\n\nexport type BadgeColor = 'default' | 'blue' | 'pink' | 'gradient'\nexport type BadgeSize = 'default' | 'medium' | 'large'\n\nexport interface BadgeProps {\n children?: React.ReactChild | React.ReactChild[]\n color?: BadgeColor\n size?: BadgeSize\n}\n\nexport const COLOR = {\n default: '',\n blue: 'bg-blue bg-opacity-20 outline-blue rounded text-xs text-blue px-2 py-1',\n pink: 'bg-pink bg-opacity-20 outline-pink rounded text-xs text-pink px-2 py-1',\n gradient:\n 'bg-gradient-to-r from-blue to-pink opacity-80 hover:opacity-100 bg-pink bg-opacity-20 outline-pink rounded text-base text-white px-2 py-1',\n}\n\nexport const SIZE = {\n default: 'text-xs',\n medium: 'text-sm',\n large: 'text-lg',\n}\n\nfunction Badge({\n color = 'default',\n size = 'default',\n children,\n className = '',\n}: BadgeProps & React.HTMLAttributes): JSX.Element {\n return
{children}
\n}\n\nexport default Badge\n","import { isMobile } from 'react-device-detect'\nimport { FC } from 'react'\nimport { classNames } from '../../functions'\n\nconst DoubleGlowShadow: FC<{ className?: string }> = ({ children, className }) => {\n if (isMobile) {\n return
{children}
\n }\n\n return (\n
\n
\n
\n
{children}
\n
\n )\n}\n\nexport default DoubleGlowShadow\n","import { FC } from 'react'\nimport React, { Fragment } from 'react'\nimport { Dialog, Transition } from '@headlessui/react'\n\ninterface ModalProps {\n isOpen: boolean\n onDismiss: () => void\n children?: React.ReactNode\n}\n\nconst HeadlessUIModal: FC = ({ isOpen, onDismiss, children }) => {\n return (\n \n \n
\n \n \n
\n
\n \n \n\n {/* This element is to trick the browser into centering the modal contents. */}\n \n ​\n \n\n \n
\n {children}\n
\n \n
\n
\n
\n )\n}\n\nexport default HeadlessUIModal\n","import { NETWORK_ICON, NETWORK_LABEL } from '../../config/networks'\nimport React, { FC, Fragment } from 'react'\nimport { Trans, useLingui } from '@lingui/react'\nimport { ChainId } from '@sushiswap/core-sdk'\nimport HeadlessUIModal from '../../components/Modal/HeadlessUIModal'\nimport Image from 'next/image'\nimport NavLink from '../../components/NavLink'\nimport { SUPPORTED_NETWORKS } from '../../modals/NetworkModal'\nimport Typography from '../../components/Typography'\nimport cookie from 'cookie-cutter'\nimport { t } from '@lingui/macro'\nimport { useActiveWeb3React } from '../../services/web3'\n\ninterface NetworkGuardProps {\n networks: ChainId[]\n}\n\nconst Component: FC = ({ children, networks = [] }) => {\n const { i18n } = useLingui()\n const { chainId, library, account } = useActiveWeb3React()\n\n const link = (\n \n {i18n._(t`home page`)}\n \n )\n\n return (\n <>\n null}>\n
\n \n {i18n._(t`Roll it back - this feature is not yet supported on ${NETWORK_LABEL[chainId]}.`)}\n \n \n \n \n \n {i18n._(t`Available Networks`)}\n \n \n {networks.map((key: ChainId, idx: number) => (\n {\n const params = SUPPORTED_NETWORKS[key]\n cookie.set('chainId', key)\n if (key === ChainId.ETHEREUM) {\n library?.send('wallet_switchEthereumChain', [{ chainId: '0x1' }, account])\n } else {\n library?.send('wallet_addEthereumChain', [params, account])\n }\n }}\n >\n
\n \n
\n {NETWORK_LABEL[key]}\n \n ))}\n
\n
\n \n {children}\n \n )\n}\n\nconst NetworkGuard = (networks: ChainId[]) => {\n return ({ children }) => {children}\n}\n\nexport default NetworkGuard\n","import { Percent, Token, JSBI } from '@sushiswap/core-sdk'\nimport { LAMBDA_URL, LimitOrder, OrderStatus } from '@sushiswap/limit-order-sdk'\nimport { useActiveWeb3React } from '../services/web3'\nimport { useLimitOrderContract } from './useContract'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport useSWR, { SWRResponse } from 'swr'\n\nimport { BigNumber } from '@ethersproject/bignumber'\nimport { useAllTokens } from './Tokens'\n\ninterface State {\n pending: {\n page: number\n maxPages: null\n data: OpenOrder[]\n loading: boolean\n totalOrders: number\n }\n completed: {\n page: number\n maxPages: null\n data: OpenOrder[]\n loading: boolean\n totalOrders: number\n }\n}\n\ninterface OpenOrder {\n tokenIn: Token\n tokenOut: Token\n filledPercent: string\n limitOrder: LimitOrder\n status: OrderStatus\n rate: string\n}\n\nconst denominator = (decimals: number = 18) => JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(decimals))\n\nconst viewUrl = `${LAMBDA_URL}/orders/view`\nconst viewFetcher = (url, account, chainId, pendingPage, page) => {\n return fetch(url, {\n method: 'POST',\n body: JSON.stringify({ address: account, chainId, page, pendingPage }),\n })\n .then((r) => r.json())\n .then((j) => j.data)\n}\n\nconst useLimitOrders = () => {\n const { account, chainId } = useActiveWeb3React()\n const limitOrderContract = useLimitOrderContract()\n const tokens = useAllTokens()\n\n const [state, setState] = useState({\n pending: {\n page: 1,\n maxPages: null,\n data: [],\n loading: true,\n totalOrders: 0,\n },\n completed: {\n page: 1,\n maxPages: null,\n data: [],\n loading: true,\n totalOrders: 0,\n },\n })\n\n const shouldFetch = useMemo(\n () =>\n viewUrl && account && chainId ? [viewUrl, account, chainId, state.pending.page, state.completed.page] : null,\n [account, chainId, state.completed.page, state.pending.page]\n )\n\n const { data: ordersData, mutate }: SWRResponse = useSWR(shouldFetch, viewFetcher)\n\n const setPendingPage = useCallback((page: number) => {\n setState((prevState) => ({\n ...prevState,\n pending: {\n ...prevState.pending,\n page,\n loading: true,\n },\n }))\n }, [])\n\n const setCompletedPage = useCallback((page: number) => {\n setState((prevState) => ({\n ...prevState,\n completed: {\n ...prevState.completed,\n page,\n loading: true,\n },\n }))\n }, [])\n\n useEffect(() => {\n if (\n !account ||\n !chainId ||\n !ordersData ||\n !ordersData.pendingOrders ||\n !ordersData.otherOrders ||\n !Array.isArray(ordersData.pendingOrders.orders) ||\n !Array.isArray(ordersData.otherOrders.orders)\n )\n return\n\n const transform = async (order: any) => {\n const limitOrder = LimitOrder.getLimitOrder({\n ...order,\n chainId: +order.chainId,\n tokenInDecimals: +order.tokenInDecimals,\n tokenOutDecimals: +order.tokenOutDecimals,\n })\n\n const tokenIn = limitOrder.amountIn.currency\n const tokenOut = limitOrder.amountOut.currency\n\n const openOrder = {\n tokenIn:\n tokens[tokenIn.address] ||\n new Token(chainId, tokenIn.address.toLowerCase(), tokenIn.decimals, tokenIn.symbol),\n tokenOut:\n tokens[tokenOut.address] ||\n new Token(chainId, tokenOut.address.toLowerCase(), tokenOut.decimals, tokenOut.symbol),\n limitOrder,\n filledPercent: order.filledAmount\n ? order.filledAmount.mul(BigNumber.from('100')).div(BigNumber.from(order.amountIn)).toString()\n : '0',\n status: order.status,\n rate: new Percent(limitOrder.amountOut.quotient, denominator(tokenOut.decimals))\n .divide(new Percent(limitOrder.amountIn.quotient, denominator(tokenIn.decimals)))\n .divide(denominator(2))\n .toSignificant(6),\n }\n\n return openOrder as OpenOrder\n }\n\n ;(async () => {\n const openOrders = await Promise.all(ordersData.pendingOrders.orders.map((el) => transform(el)))\n const completedOrders = await Promise.all(ordersData.otherOrders.orders.map((el) => transform(el)))\n\n setState((prevState) => ({\n pending: {\n ...prevState.pending,\n data: openOrders,\n maxPages: ordersData.pendingOrders.pendingOrderMaxPage,\n loading: false,\n totalOrders: ordersData.pendingOrders.totalPendingOrders,\n },\n completed: {\n ...prevState.completed,\n data: completedOrders,\n maxPages: ordersData.otherOrders.maxPage,\n loading: false,\n totalOrders: ordersData.otherOrders.totalOrders,\n },\n }))\n })()\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [account, chainId, ordersData, limitOrderContract, setPendingPage, setCompletedPage])\n\n return useMemo(\n () => ({\n ...state,\n pending: {\n ...state.pending,\n setPage: setPendingPage,\n },\n completed: {\n ...state.completed,\n setPage: setCompletedPage,\n },\n mutate,\n }),\n [mutate, setCompletedPage, setPendingPage, state]\n )\n}\n\nexport default useLimitOrders\n","import { ParsedQs, parse } from 'qs'\n\nimport { useMemo } from 'react'\n\nexport default function useParsedQueryString(): ParsedQs {\n // const { search } = useLocation()\n const search = location.search\n return useMemo(\n () => (search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}),\n [search]\n )\n}\n","import { Currency, CurrencyAmount, Pair, Trade, TradeType } from '@sushiswap/core-sdk'\nimport { PairState, useV2Pairs } from './useV2Pairs'\n\nimport { BETTER_TRADE_LESS_HOPS_THRESHOLD } from '../constants'\nimport { isTradeBetter } from '../functions/trade'\nimport { useAllCurrencyCombinations } from './useAllCurrencyCombinations'\nimport { useMemo } from 'react'\n\nfunction useAllCommonPairs(currencyA?: Currency, currencyB?: Currency): Pair[] {\n const allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB)\n\n const allPairs = useV2Pairs(allCurrencyCombinations)\n\n // only pass along valid pairs, non-duplicated pairs\n return useMemo(\n () =>\n Object.values(\n allPairs\n // filter out invalid pairs\n .filter((result): result is [PairState.EXISTS, Pair] => Boolean(result[0] === PairState.EXISTS && result[1]))\n // filter out duplicated pairs\n .reduce<{ [pairAddress: string]: Pair }>((memo, [, curr]) => {\n memo[curr.liquidityToken.address] = memo[curr.liquidityToken.address] ?? curr\n return memo\n }, {})\n ),\n [allPairs]\n )\n}\n\nconst MAX_HOPS = 3\n\n/**\n * Returns the best trade for the exact amount of tokens in to the given token out\n */\nexport function useV2TradeExactIn(\n currencyAmountIn?: CurrencyAmount,\n currencyOut?: Currency,\n { maxHops = MAX_HOPS } = {}\n): Trade | null {\n const allowedPairs = useAllCommonPairs(currencyAmountIn?.currency, currencyOut)\n\n return useMemo(() => {\n if (currencyAmountIn && currencyOut && allowedPairs.length > 0) {\n if (maxHops === 1) {\n return (\n Trade.bestTradeExactIn(allowedPairs, currencyAmountIn, currencyOut, {\n maxHops: 1,\n maxNumResults: 1,\n })[0] ?? null\n )\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: Trade | null = null\n for (let i = 1; i <= maxHops; i++) {\n const currentTrade: Trade | null =\n Trade.bestTradeExactIn(allowedPairs, currencyAmountIn, currencyOut, {\n maxHops: i,\n maxNumResults: 1,\n })[0] ?? null\n // if current trade is best yet, save it\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade\n }\n }\n return bestTradeSoFar\n }\n\n return null\n }, [allowedPairs, currencyAmountIn, currencyOut, maxHops])\n}\n\n/**\n * Returns the best trade for the token in to the exact amount of token out\n */\nexport function useV2TradeExactOut(\n currencyIn?: Currency,\n currencyAmountOut?: CurrencyAmount,\n { maxHops = MAX_HOPS } = {}\n): Trade | null {\n const allowedPairs = useAllCommonPairs(currencyIn, currencyAmountOut?.currency)\n\n return useMemo(() => {\n if (currencyIn && currencyAmountOut && allowedPairs.length > 0) {\n if (maxHops === 1) {\n return (\n Trade.bestTradeExactOut(allowedPairs, currencyIn, currencyAmountOut, {\n maxHops: 1,\n maxNumResults: 1,\n })[0] ?? null\n )\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: Trade | null = null\n for (let i = 1; i <= maxHops; i++) {\n const currentTrade =\n Trade.bestTradeExactOut(allowedPairs, currencyIn, currencyAmountOut, {\n maxHops: i,\n maxNumResults: 1,\n })[0] ?? null\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade\n }\n }\n return bestTradeSoFar\n }\n return null\n }, [currencyIn, currencyAmountOut, allowedPairs, maxHops])\n}\n","import { ADDITIONAL_BASES, BASES_TO_CHECK_TRADES_AGAINST, CUSTOM_BASES } from '../config/routing'\nimport { Currency, Token } from '@sushiswap/core-sdk'\n\nimport flatMap from 'lodash/flatMap'\nimport { useActiveWeb3React } from '../services/web3'\nimport { useMemo } from 'react'\n\nexport function useAllCurrencyCombinations(currencyA?: Currency, currencyB?: Currency): [Token, Token][] {\n const { chainId } = useActiveWeb3React()\n\n const [tokenA, tokenB] = chainId ? [currencyA?.wrapped, currencyB?.wrapped] : [undefined, undefined]\n\n const bases: Token[] = useMemo(() => {\n if (!chainId) return []\n\n const common = BASES_TO_CHECK_TRADES_AGAINST[chainId] ?? []\n const additionalA = tokenA ? ADDITIONAL_BASES[chainId]?.[tokenA.address] ?? [] : []\n const additionalB = tokenB ? ADDITIONAL_BASES[chainId]?.[tokenB.address] ?? [] : []\n\n return [...common, ...additionalA, ...additionalB]\n }, [chainId, tokenA, tokenB])\n\n const basePairs: [Token, Token][] = useMemo(\n () => flatMap(bases, (base): [Token, Token][] => bases.map((otherBase) => [base, otherBase])),\n [bases]\n )\n\n return useMemo(\n () =>\n tokenA && tokenB\n ? [\n // the direct pair\n [tokenA, tokenB],\n // token A against all bases\n ...bases.map((base): [Token, Token] => [tokenA, base]),\n // token B against all bases\n ...bases.map((base): [Token, Token] => [tokenB, base]),\n // each base against all bases\n ...basePairs,\n ]\n .filter((tokens): tokens is [Token, Token] => Boolean(tokens[0] && tokens[1]))\n .filter(([t0, t1]) => t0.address !== t1.address)\n .filter(([tokenA, tokenB]) => {\n if (!chainId) return true\n const customBases = CUSTOM_BASES[chainId]\n\n const customBasesA: Token[] | undefined = customBases?.[tokenA.address]\n const customBasesB: Token[] | undefined = customBases?.[tokenB.address]\n\n if (!customBasesA && !customBasesB) return true\n\n if (customBasesA && !customBasesA.find((base) => tokenB.equals(base))) return false\n if (customBasesB && !customBasesB.find((base) => tokenA.equals(base))) return false\n\n return true\n })\n : [],\n [tokenA, tokenB, bases, basePairs, chainId]\n )\n}\n","import { AppDispatch, AppState } from '../index'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { Field, replaceLimitOrderState, selectCurrency, setRecipient, switchCurrencies, typeInput } from './actions'\nimport { useCurrency } from '../../hooks/Tokens'\nimport { ChainId, Currency, CurrencyAmount, JSBI, NATIVE, Percent, Price, WNATIVE } from '@sushiswap/core-sdk'\nimport { useActiveWeb3React } from '../../services/web3'\nimport { useCurrencyBalances } from '../wallet/hooks'\nimport { isAddress, tryParseAmount } from '../../functions'\nimport useParsedQueryString from '../../hooks/useParsedQueryString'\nimport { ParsedQs } from 'qs'\nimport { OrderExpiration } from './reducer'\nimport { useBentoBalances } from '../bentobox/hooks'\nimport { useV2TradeExactIn as useTradeExactIn, useV2TradeExactOut as useTradeExactOut } from '../../hooks/useV2Trades'\nimport useENS from '../../hooks/useENS'\nimport { t } from '@lingui/macro'\nimport { i18n } from '@lingui/core'\nimport { useExpertModeManager, useUserSingleHopOnly } from '../user/hooks'\n\nexport function useLimitOrderActionHandlers(): {\n onCurrencySelection: (field: Field, currency: Currency) => void\n onSwitchTokens: () => void\n onUserInput: (field: Field, typedValue: string) => void\n onChangeRecipient: (recipient: string | null) => void\n} {\n const dispatch = useDispatch()\n const onCurrencySelection = useCallback(\n (field: Field, currency: Currency) => {\n dispatch(\n selectCurrency({\n field,\n currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '',\n })\n )\n },\n [dispatch]\n )\n const onSwitchTokens = useCallback(() => {\n dispatch(switchCurrencies())\n }, [dispatch])\n\n const onUserInput = useCallback(\n (field: Field, typedValue: string) => {\n dispatch(typeInput({ field, typedValue }))\n },\n [dispatch]\n )\n\n const onChangeRecipient = useCallback(\n (recipient: string | null) => {\n dispatch(setRecipient({ recipient }))\n },\n [dispatch]\n )\n\n return {\n onSwitchTokens,\n onCurrencySelection,\n onUserInput,\n onChangeRecipient,\n }\n}\n\nconst denominator = (decimals: number = 18) => JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(decimals))\n\nexport function useDerivedLimitOrderInfo(): {\n currencies: { [field in Field]?: Currency }\n parsedAmounts: { [field in Field]?: CurrencyAmount }\n walletBalances: { [field in Field]?: CurrencyAmount }\n bentoboxBalances: { [field in Field]?: CurrencyAmount }\n inputError?: string\n currentPrice: Price\n} {\n const { account, chainId } = useActiveWeb3React()\n const [singleHopOnly] = useUserSingleHopOnly()\n const {\n [Field.INPUT]: { currencyId: inputCurrencyId },\n [Field.OUTPUT]: { currencyId: outputCurrencyId },\n typedValue,\n independentField,\n limitPrice,\n fromBentoBalance,\n recipient,\n orderExpiration,\n } = useLimitOrderState()\n\n const inputCurrency = useCurrency(inputCurrencyId)\n const outputCurrency = useCurrency(outputCurrencyId)\n const recipientLookup = useENS(recipient ?? undefined)\n const to: string | null = (recipient === null ? account : recipientLookup.address) ?? null\n\n const isExactIn: boolean = independentField === Field.INPUT\n const parsedInputAmount = tryParseAmount(typedValue, (isExactIn ? inputCurrency : outputCurrency) ?? undefined)\n let parsedRate = limitPrice ? tryParseAmount(limitPrice, WNATIVE[chainId]) : undefined\n\n const parsedOutputAmount =\n outputCurrency && parsedRate && parsedInputAmount\n ? isExactIn\n ? CurrencyAmount.fromRawAmount(\n outputCurrency,\n new Percent(parsedRate.numerator, denominator(WNATIVE[chainId].decimals))\n .multiply(new Percent(parsedInputAmount.quotient, denominator(inputCurrency.decimals)))\n .multiply(denominator(outputCurrency.decimals)).quotient\n )\n : CurrencyAmount.fromRawAmount(\n inputCurrency,\n new Percent(\n parsedInputAmount\n .multiply(denominator(inputCurrency.decimals))\n .multiply(denominator(WNATIVE[chainId].decimals - outputCurrency.decimals)).quotient,\n parsedRate.quotient\n ).quotient\n )\n : undefined\n\n const bestTradeExactIn = useTradeExactIn(isExactIn ? parsedInputAmount : undefined, outputCurrency ?? undefined, {\n maxHops: singleHopOnly ? 1 : undefined,\n })\n\n const bestTradeExactOut = useTradeExactOut(inputCurrency ?? undefined, !isExactIn ? parsedInputAmount : undefined, {\n maxHops: singleHopOnly ? 1 : undefined,\n })\n\n const trade = isExactIn ? bestTradeExactIn : bestTradeExactOut\n const rate = trade?.executionPrice\n\n const bentoBoxBalances = useBentoBalances()\n const balance = useMemo(\n () => bentoBoxBalances?.find((el) => el.address === inputCurrency?.wrapped.address),\n [bentoBoxBalances, inputCurrency?.wrapped.address]\n )\n\n const relevantTokenBalances = useCurrencyBalances(account ?? undefined, [\n inputCurrency ?? undefined,\n outputCurrency ?? undefined,\n ])\n\n const walletBalances = {\n [Field.INPUT]: relevantTokenBalances[0],\n [Field.OUTPUT]: relevantTokenBalances[1],\n }\n\n const bentoboxBalances = {\n [Field.INPUT]: inputCurrency\n ? CurrencyAmount.fromRawAmount(inputCurrency, balance?.bentoBalance ? balance.bentoBalance : 0)\n : undefined,\n [Field.OUTPUT]: outputCurrency\n ? CurrencyAmount.fromRawAmount(outputCurrency, balance?.bentoBalance ? balance.bentoBalance : 0)\n : undefined,\n }\n\n const parsedAmounts = {\n [Field.INPUT]: independentField === Field.INPUT ? parsedInputAmount : parsedOutputAmount,\n [Field.OUTPUT]: independentField === Field.OUTPUT ? parsedInputAmount : parsedOutputAmount,\n }\n\n const currencies: { [field in Field]?: Currency } = {\n [Field.INPUT]: inputCurrency ?? undefined,\n [Field.OUTPUT]: outputCurrency ?? undefined,\n }\n\n let inputError: string | undefined\n if (!account) {\n inputError = 'Connect Wallet'\n }\n\n if (!parsedInputAmount || !parsedOutputAmount) {\n inputError = inputError ?? i18n._(t`Enter an amount`)\n }\n\n if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) {\n inputError = inputError ?? i18n._(t`Select a token`)\n }\n\n const formattedTo = isAddress(to)\n if (!to || !formattedTo) {\n inputError = inputError ?? i18n._(t`Enter a recipient`)\n }\n\n if (!limitPrice) {\n inputError = inputError ?? i18n._(t`Select a rate`)\n }\n\n if (!orderExpiration) {\n inputError = inputError ?? i18n._(t`Select an order expiration`)\n }\n\n // compare input balance to max input based on version\n const [balanceIn, amountIn] = [\n fromBentoBalance ? bentoboxBalances[Field.INPUT] : walletBalances[Field.INPUT],\n parsedAmounts[Field.INPUT],\n ]\n\n if (!balanceIn) {\n inputError = i18n._(t`Loading balance`)\n }\n\n if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) {\n inputError = i18n._(t`Insufficient ${currencies[Field.INPUT]?.symbol} balance`)\n }\n\n return {\n currencies,\n parsedAmounts,\n walletBalances,\n bentoboxBalances,\n inputError,\n currentPrice: rate,\n }\n}\n\nexport function useLimitOrderState(): AppState['limitOrder'] {\n return useSelector((state) => state.limitOrder)\n}\n\nexport function useLimitOrderApprovalPending(): string {\n return useSelector((state: AppState) => state.limitOrder.limitOrderApprovalPending)\n}\n\nfunction parseCurrencyFromURLParameter(urlParam: any): string {\n if (typeof urlParam === 'string') {\n const valid = isAddress(urlParam)\n if (valid) return valid\n if (urlParam.toUpperCase() === 'ETH') return 'ETH'\n }\n return ''\n}\n\nfunction parseTokenAmountURLParameter(urlParam: any): string {\n return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''\n}\n\nfunction parseIndependentFieldURLParameter(urlParam: any): Field {\n return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT\n}\n\nfunction parseBooleanFieldParameter(urlParam: any): boolean {\n if (typeof urlParam !== 'string') return false\n if (urlParam.toLowerCase() === 'true') return true\n if (urlParam.toLowerCase() === 'false') return false\n return false\n}\n\nconst ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/\nconst ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\nfunction validatedRecipient(recipient: any): string | null {\n if (typeof recipient !== 'string') return null\n const address = isAddress(recipient)\n if (address) return address\n if (ENS_NAME_REGEX.test(recipient)) return recipient\n if (ADDRESS_REGEX.test(recipient)) return recipient\n return null\n}\n\nexport function queryParametersToSwapState(chainId: ChainId, parsedQs: ParsedQs) {\n let inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency)\n let outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency)\n if (inputCurrency === '' && outputCurrency === '') {\n inputCurrency = NATIVE[chainId].address\n } else if (inputCurrency === outputCurrency) {\n outputCurrency = ''\n }\n\n return {\n inputCurrencyId: inputCurrency,\n outputCurrencyId: outputCurrency,\n typedValue: parseTokenAmountURLParameter(parsedQs.exactAmount),\n independentField: parseIndependentFieldURLParameter(parsedQs.exactField),\n recipient: validatedRecipient(parsedQs.recipient),\n limitPrice: parseTokenAmountURLParameter(parsedQs.exactRate),\n fromBentoBalance: parseBooleanFieldParameter(parsedQs.fromBento),\n orderExpiration: { value: OrderExpiration.never, label: i18n._(t`Never`) },\n }\n}\n\n// updates the swap state to use the defaults for a given network\nexport function useDefaultsFromURLSearch() {\n const { chainId } = useActiveWeb3React()\n const dispatch = useDispatch()\n const parsedQs = useParsedQueryString()\n const [expertMode] = useExpertModeManager()\n const [result, setResult] = useState<\n | {\n inputCurrencyId: string | undefined\n outputCurrencyId: string | undefined\n }\n | undefined\n >()\n\n useEffect(() => {\n if (!chainId) return\n\n const parsed = queryParametersToSwapState(chainId, parsedQs)\n dispatch(\n replaceLimitOrderState({\n ...parsed,\n recipient: expertMode ? parsed.recipient : null,\n })\n )\n\n setResult({\n inputCurrencyId: parsed.inputCurrencyId,\n outputCurrencyId: parsed.outputCurrencyId,\n })\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, chainId, parsedQs])\n\n return result\n}\n"],"names":["TYPE","information","color","icon","width","height","className","viewBox","xmlns","path","fill","d","warning","fillRule","clipRule","error","Alert","title","message","type","showIcon","dismissable","show","setShow","useState","classNames","onClick","COLOR","default","blue","pink","gradient","SIZE","medium","large","size","children","isMobile","isOpen","onDismiss","as","Fragment","static","open","onClose","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","Component","networks","i18n","useLingui","chainId","library","account","useActiveWeb3React","link","NavLink","href","_","includes","Typography","variant","weight","NETWORK_LABEL","id","values","components","Math","min","length","map","key","idx","params","SUPPORTED_NETWORKS","cookie","ChainId","send","src","NETWORK_ICON","alt","denominator","decimals","JSBI","viewUrl","LAMBDA_URL","viewFetcher","url","pendingPage","page","fetch","method","body","JSON","stringify","address","then","r","json","j","data","limitOrderContract","useLimitOrderContract","tokens","useAllTokens","state","setState","pending","maxPages","loading","totalOrders","completed","shouldFetch","useMemo","ordersData","mutate","useSWR","setPendingPage","useCallback","prevState","setCompletedPage","useEffect","pendingOrders","otherOrders","Array","isArray","orders","transform","async","limitOrder","LimitOrder","order","tokenInDecimals","tokenOutDecimals","tokenIn","amountIn","currency","tokenOut","amountOut","Token","toLowerCase","symbol","filledPercent","filledAmount","mul","BigNumber","div","toString","status","rate","Percent","quotient","divide","toSignificant","openOrders","Promise","all","el","completedOrders","pendingOrderMaxPage","totalPendingOrders","maxPage","setPage","useParsedQueryString","search","location","parse","parseArrays","ignoreQueryPrefix","useAllCommonPairs","currencyA","currencyB","allCurrencyCombinations","tokenA","tokenB","wrapped","undefined","bases","BASES_TO_CHECK_TRADES_AGAINST","ADDITIONAL_BASES","basePairs","flatMap","base","otherBase","filter","Boolean","t0","t1","customBases","CUSTOM_BASES","customBasesA","customBasesB","find","equals","useAllCurrencyCombinations","allPairs","useV2Pairs","Object","result","PairState","reduce","memo","curr","liquidityToken","useV2TradeExactIn","currencyAmountIn","currencyOut","maxHops","allowedPairs","Trade","maxNumResults","bestTradeSoFar","i","currentTrade","isTradeBetter","BETTER_TRADE_LESS_HOPS_THRESHOLD","useV2TradeExactOut","currencyIn","currencyAmountOut","useLimitOrderActionHandlers","dispatch","useDispatch","onCurrencySelection","field","selectCurrency","currencyId","isToken","isNative","onSwitchTokens","switchCurrencies","onUserInput","typedValue","typeInput","onChangeRecipient","recipient","setRecipient","useDerivedLimitOrderInfo","singleHopOnly","useUserSingleHopOnly","Field","inputCurrencyId","outputCurrencyId","independentField","limitPrice","fromBentoBalance","orderExpiration","useLimitOrderState","inputCurrency","useCurrency","outputCurrency","recipientLookup","useENS","to","isExactIn","parsedInputAmount","tryParseAmount","parsedRate","WNATIVE","parsedOutputAmount","CurrencyAmount","numerator","multiply","bestTradeExactIn","useTradeExactIn","bestTradeExactOut","useTradeExactOut","trade","executionPrice","bentoBoxBalances","useBentoBalances","balance","relevantTokenBalances","useCurrencyBalances","walletBalances","bentoboxBalances","bentoBalance","parsedAmounts","currencies","inputError","formattedTo","isAddress","balanceIn","lessThan","currentPrice","useSelector","useLimitOrderApprovalPending","limitOrderApprovalPending","parseCurrencyFromURLParameter","urlParam","valid","toUpperCase","parseTokenAmountURLParameter","isNaN","parseFloat","parseBooleanFieldParameter","ENS_NAME_REGEX","ADDRESS_REGEX","validatedRecipient","test","useDefaultsFromURLSearch","parsedQs","expertMode","useExpertModeManager","setResult","parsed","NATIVE","exactAmount","exactField","exactRate","fromBento","value","OrderExpiration","label","queryParametersToSwapState","replaceLimitOrderState"],"sourceRoot":""}