{"version":3,"file":"static/js/app-38e054b8_078cd7312bc48b1080a9.js","mappings":"q4BA2CO,MAAMA,EAA2D,EACtEC,mBA5CF,0DA8CE,MAAMC,GAAW,IAAAC,eACXC,GAAe,IAAAC,cAClBC,GAAqBA,EAAMC,IAAIC,OAAOJ,eAGnCK,GAAmB,IAAAC,gBAEnBC,EAAc,eAAAV,OAAA,EAAAA,EAAcU,aAAd,OAA6B,GAG3C,gBAAEC,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KAEf,mBAAEG,IAAuB,WAEzB,YAAEC,IAAgB,QAAY,CAAEC,aAAa,KAC5CC,GAAWF,IACZG,EAAYD,EAAQE,GACpBC,EAASH,EAAQG,OAEjBC,IAAW,WAEVC,GAAeC,KAAoB,IAAAC,WAAS,IAEnD,IAAAC,YAAU,KAENxB,EADEoB,IACO,SAAW,IAEX,SAAW,IAGf,WACLpB,GAAS,SAAW,GACtB,IACC,CAACA,EAAUoB,KAEd,MAAMK,GAAgB,MAAA1B,OAAA,EAAAA,EAAc0B,cAC9BC,GAAkB,MAAA3B,OAAA,EAAAA,EAAc2B,gBAEhCC,GAAmB,MAAAF,QAAA,EAAAA,GAAeG,KACrCC,GAAiB,MAAAA,OAAA,EAAAA,EAAcX,KAE5BY,GAAqB,MAAAJ,QAAA,EAAAA,GAAiBE,KACzCG,GAAmB,MAAAA,OAAA,EAAAA,EAAgBb,KAGhCc,GAAU,eAAAL,QAAA,EAAAA,GAAkBM,SAAShB,KAA3B,EACViB,GAAY,eAAAJ,QAAA,EAAAA,GAAoBG,SAAShB,KAA7B,EAEZkB,GAAc,MAAAV,QAAA,EAAAA,GAAeW,GAAG,GAEhCC,IACJ,MAAAtC,OAAA,EAAAA,EAAcuC,4BAA6B,EAAAC,kBAAA,MACvCC,GAAkB,eAAAzC,OAAA,EAAAA,EAAc0C,uBAAd,IAAgCL,GAAG,GACrDM,IAAkD,KAAjC,MAAAF,QAAA,EAAAA,GAAiBG,aAElCC,GAAqBV,IAAahC,GAGlC,WAAE2C,KAAe,IAAAC,+BAA8B,CAAC,IAEhD,aAAEC,KAAiB,IAAAC,iBAAgB,CAAEzC,qBAE3C,IAAI0C,GACAC,GAEAzC,GACFwC,GAAUJ,GAAWpC,GACrByC,GAAc,eAAAD,QAAA,EAAAA,GAASE,sBAAT,IAA0BC,cAExCF,GAAc,eAAAH,QAAA,EAAAA,GAAcM,oBAAd,IAA6BD,aAG7C,MAAME,GAAwBvD,EAAawD,UAErCC,IAAa,OAAc,CAC/BC,KAAMzB,GAAU,QAAU,UAC1BjC,eACAoB,WAGIuC,IAAoB,IAAAC,cAAY,KAAY,O,OAAA,E,EAAA,K,EAAA,YAChD9C,EAAmB,8BAA+B,CAChD,WAAW,IAAA+C,mCACXC,KAAM7B,GAAU,QAAU,UAC1B8B,QAAS/D,EAAaU,aAE1B,E,yMAAA,GAAG,CAACuB,GAASjC,EAAaU,YAAaI,KAEvC,IAAAW,YAAU,KACHyB,IAAYO,IACjB3C,EAAmB,wBAAyB,CAC1C,aAAa,IAAA+C,mCACbE,QAAS/D,EAAaU,aACtB,GACD,CAACwC,GAASO,GAAYzD,EAAaU,YAAaI,IAEnD,MAAMkD,GACJ,wBAAAb,QAAA,EAAAA,GAAac,wBAAb,IAAgCC,iBAAhC,IAA4CC,WAExCC,GAAc,MAAAlB,QAAA,EAAAA,GAASmB,SAASC,aAEhCC,GAAYd,GAAWpB,GAAG,GAEhC,OACE,UAACmC,EAAA,GACCC,GAAI,CACFC,MAAO,OACPC,QAAS,OACTC,oBAAqB,MACrBC,iBAAkB,mBAGpB,oBAAC,MACC7E,eACA8E,kBACEP,GACI,CACEQ,YAAaR,GAAUQ,YACvBC,eAAgBT,GAAUU,QAC1BC,YAAaX,GAAUW,kBAEzB,EAEN3B,yBACAa,YAAa,MAAAA,GAAAA,GAAe,GAC5Be,UACG,SAAAlD,GACG,eAAA+B,QAAA,EAAAA,GAAkBoB,oBAAlB,IAAiCC,aACjC,eAAArB,QAAA,EAAAA,GAAkBoB,oBAAlB,IAAiCE,YAFpC,EAEmD,GAEtDhE,iBACAC,uBAEF,UAACiD,EAAA,GACCC,GAAI,CACFc,SAAU,WACVZ,QAAS,OACTa,eAAgB,SAChBC,WAAY,UACZC,aAAc,UACdhB,MAAO,OACPiB,OAAQ,OACRC,UAAW,QAGb,oBAACC,EAAA,GACCC,IAAIzE,KAAYC,GAChBmD,GAAI,CACFC,MAAO,OACP,yBAA0B,CACxBA,MAAO,OACPiB,OAAQ,QAEV,8BAA+B,CAC7BjB,MAAO,OACPiB,OAAQ,SAIZ,mBAACnB,EAAA,GACCC,GAAI,CACFE,QAAS,OACTa,eAAgB,SAChBC,WAAY,SACZC,aAAc,UACdhB,MAAO,OACPiB,OAAQ,OACRI,GAAI,EACJC,GAAI,EACJ,cAAe,CACbC,SAAU,QAEZ,2BAA4B,CAC1BtB,QAAS,QAGX,4BAA6B,CAC3B,+BAAgC,KAC1B3E,EAAakG,aAAe,CAAEvB,QAAS,WAKhD,WAAE3E,IACD,SAAC,MACCA,eACAiC,WACAK,kBACAK,kBACAwD,SAAUnG,EAAamG,SACvBC,SAAUpG,EAAakG,YACvBG,cAAe1C,UAKvB,SAACkC,EAAA,GACCC,IAAIzE,IAAWC,GACfmD,GAAI,CACFC,MAAO,cACP,yBAA0B,CACxBA,MAAO,cACPiB,OAAQ,QAEV,8BAA+B,CAC7BjB,MAAO,cACPiB,OAAQ,SAIX,SAAArD,IACC,SAAC,MACCtC,eACAsC,kBACAL,cAGF,SAAC,MACCjC,eACAsC,kBACAL,mBAKNA,KACA,SAACqE,EAAA,IACCC,YAAa1D,GACb2D,OAAO,QACL,4DAAArD,QAAA,EAAAA,GAAac,kBAAkBC,iBAA/B,IAA2CuC,YAA3C,IAAkDC,mBAAlD,IACIC,2BADJ,IAEIC,6DAFJ,IAGIC,8DAHJ,EAIE,GACF,CACEC,UAAW,eAAA9G,OAAA,EAAAA,EAAcwG,OAAd,EAAuB,IAEpC,oBAEFO,aAAa,QACX,4DAAA5D,QAAA,EAAAA,GAAac,kBAAkBC,iBAA/B,IAA2CuC,YAA3C,IAAkDC,mBAAlD,IACIC,2BADJ,IAEIC,6DAFJ,IAGII,oEAHJ,EAIE,GACF,CACEC,UAAW,SAAAhG,EAAQgG,WAAR,EAAqB,IAElC,iGAEFC,YACE,SAAArG,EAAasG,QAAQ/B,cAAcgC,mBAAnC,EACA,oBAEFnC,QAAS,eAAA7C,QAAA,EAAAA,GAAa6C,SAAb,EAAwB,OAGvC,E,sfC3PG,MAAMoC,EAET,EAAGrH,eAAcsC,iBAAgBL,cAvDrC,oDAwDE,MAAMqF,GAAW,UACXC,GAAQ,EAAAC,EAAA,KACRnG,GAAW,WACX,gBAAEV,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KACf,gBAAE8G,IAAoB,IAAAC,oBAErBC,EAAgBC,IAAqB,IAAApG,aAErCqG,GAAuBC,KAA4B,IAAAtG,WAAS,GAC7DuG,GAA+B,KACnCD,IAAyB,EAAM,GAG3B,WAAEhF,KAAe,IAAAC,+BAA8B,CAAC,GAEhDrC,GAAc,MAAAV,OAAA,EAAAA,EAAcU,YAC5BwC,GAAUxC,GAAcoC,GAAWpC,SAAe,EASxD,IAPA,IAAAe,YAAU,MACY,MAAAzB,OAAA,EAAAA,EAAcU,cACbwC,IACnBoE,EAAS,iBACX,GACC,CAACA,EAAUpE,GAAS,MAAAlD,OAAA,EAAAA,EAAcU,eAEhCA,KAAgBwC,GACnB,OAAO,wBAGT,MAAMT,GAAkB,SAAAzC,EAAa0C,uBAAb,IAA+BL,GAAG,GACpD2F,IAAiD,KAAjC,MAAAvF,QAAA,EAAAA,GAAiBG,aAEjCqF,GACJ,iCAAA/E,QAAA,EAAAA,GAASE,sBAAT,IAA0BC,mBAA1B,IAAwCY,kBAAkBiE,aAA1D,IAAkEC,KAE9DC,GAAe,eAAAlF,QAAA,EAAAA,GAASwD,mBAAT,IAAuB2B,OACtCC,GAAkB,MAAAF,QAAA,EAAAA,GAAcG,uBAEhCC,GAAsB,eAAAxI,OAAA,EAAAA,EAAc0C,uBAAd,IAAgCL,GAAG,GACzDgG,GAAS,MAAAG,QAAA,EAAAA,GAAqBH,QAE5B7B,MAAOiC,IAAe5H,EAAauE,cAAcsD,mBACnDC,GACJ,2BAAA9H,EAAasG,cAAb,IAAsBe,aAAtB,IAA8BU,oBAA9B,EAAoD,QAEhDC,GAA0B,KAC9BjB,OAAkB,GAClBE,IAAyB,EAAK,EAE1BgB,GAA0B1H,IAC9BwG,EAAkBxG,GAClB2G,IAA8B,EAyD1BgB,GACJ,kBAAA/I,EAAagJ,YAAb,IAAoBnH,KAAKoH,IAtK7B,IAAAC,EAAAC,EAuKM,MAAM/H,EAAS6H,EAAK9H,GACda,EAAiB,OAAAkH,EAAAlJ,EAAa2B,sBAAb,EAAAuH,EAA8BE,MAClDpH,GAAmBA,EAAeZ,SAAWA,IAE1CU,EAAe,OAAAqH,EAAAnJ,EAAa0B,oBAAb,EAAAyH,EAA4BC,MAC9CtH,GAAiBA,EAAaV,SAAWA,IAEtC4D,EAAiBhD,EACnBA,EAAeiD,QACf,MAAAnD,OAAA,EAAAA,EAAcmD,QACZC,EAAc+D,EAAKhE,QACzB,OAAOwC,EAAgB,CACrBzC,iBACAE,eACA,KAfJ,EAgBM,GAEFmE,GAAgC,CACpCC,KAAM,QACN7E,GAAI,CACF8E,gBAAiB,SAAQ,SAAShC,EAAMiC,QAAQC,KAAKC,eACrDC,GAAI,EACJC,GAAI,IAIFxF,GAAclB,GAAQmB,SAASC,aACrC,OACE,UAACuF,EAAA,IACC,UAAQ,iCACRC,MAAM,EACNC,OAAO,QACPC,QAAQ,YACRvF,GAAI,CACFkB,OAAQ,OACR,qBAAsB,CACpBA,OAAQ,OACRC,UAAW,OACXlB,MAAOrD,EAAW,QAAU,QAC5B4I,WAAY,aAAa1C,EAAMiC,QAAQU,UACvC3E,SAAUlE,EAAW,WAAa,SAClC2E,GAAI,EACJmE,GAAI,IAIP,UAAA9I,IACC,sBACE,qBAAC,MAAK,CAAC+I,UAAW,MAAO5E,eAAgB,gBACvC,oBAAC6E,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAEsB,GAAI,GACnC,SAAA3B,MAEH,SAACI,EAAA,EAAG,CACF,mBAAC,OACC8F,eAAgBvB,GAChBwB,aAAc,GACdC,YAAa,GACbC,SAAS,KACTC,QAAQ,GACRC,UAAW,GACP,kBAAA3K,EAAa2B,sBAAb,IAA8BiJ,QAA9B,EAAwC,GAAK,GAAGC,YAEpDpG,GAAI,CACFqG,OAAQ,oBACRC,aAAc,MACdhF,GAAI,MACJiF,GAAI,OAENC,QAAS,IAAMnD,IAA0BD,YAI/C,SAACqD,EAAA,EAAO,QAGZ,SAAC,KAAsB,CAAClL,eAA4BiC,aACpD,SAAC,MACCjC,eACAsC,iBACA0F,iBACA/F,aAEF,UAACuC,EAAA,EAAG,CAACC,GAAI,CAAE0G,GAAI,GACb,oBAACd,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAE2G,WAAY,KAC3C,oCAAAlI,GAAQwD,mBAAR,IAAsB2E,yBAAtB,IAA0CC,kBACxCC,kBADF,EAEC,kBAAArI,GAAQwD,mBAAR,IAAsB2E,yBAAtB,IAA0CC,kBACvCE,eAGP,SAACnB,EAAA,GACCL,QAAQ,QACRvF,GAAI,CACF2G,WAAY,IACZD,GAAI,EACJM,MAAOlE,EAAMiC,QAAQkC,KAAKC,UAC1BC,UAAW,cAGZ,SAAA5L,EAAa+G,cAEfuB,KAAmB,MAAAE,QAAA,EAAAA,GAAqBH,UACvC,UAAC7D,EAAA,GACCC,GAAI,CACF0G,GAAI,EACJxG,QAAS,OACTkH,cAAe,SACfpG,WAAY,cAGd,oBAAC4E,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAE2G,WAAY,KAC3C,2BAAAhD,GAAa0D,MAAMP,kBAAnB,EACC,eAAAnD,QAAA,EAAAA,GAAcsD,WAAd,IAAoBF,aADrB,EAEC,MAEJ,SAAChH,EAAA,GACCC,GAAI,CACF0G,GAAI,EACJxG,QAAS,OACTa,eAAgB,aAChBC,WAAY,aACZsG,SAAU,QAGX,SAAA1D,GAAOxG,KAAI,CAACmK,EAAOC,KAnSlC,IAAA/C,EAAAC,EAoSgB,gBAAC+C,EAAA,KAECC,MACE,OAAAhD,EAAA,OAAAD,EAAA,MAAAd,QAAA,EAAAA,GAAcgE,cAAd,EAAAlD,EAAuBE,MACpBiD,GAAWA,EAAOlL,GAAGmL,UAAYN,EAAMO,kBAD1C,EAAApD,EAEGgD,OAED9C,IANC,eAAe2C,KAASC,IAO/B,YAOTjM,IACC,SAAC,MACCwM,SAAU7E,EACV8E,YAAa5D,GACbrC,MAAOiC,GACPiE,iBAAkB/D,GAClBgE,kBAAmB9D,GACnBnI,YAAaV,EAAaU,YAC1BkM,UA9J6BjF,GA8JSA,GA7JvB,OAAAuB,GAAAlJ,EAAa0B,oBAAb,EAAAwH,GAA4BE,MAC9CtH,GAAiBA,EAAaV,SAAWuG,MAEnB,QAClB,WA0JDkF,YA7MuB,CAC7BlF,IAhHJ,IAAAuB,EAAAC,EAAA2D,EAkHI,MAEMC,EAAW,IAFK,OAAA7D,EAAAlJ,EAAa0B,eAAbwH,EAA8B,MAC5B,OAAAC,EAAAnJ,EAAa2B,iBAAbwH,EAAgC,IAElDH,EAAQ,OAAA8D,EAAA9M,EAAagJ,OAAb8D,EAAsB,GAE9BE,EAAkBD,EAAS3D,MAC9BnI,GAAYA,EAAQG,SAAWuG,IAG5BsF,EAAwB,MAAAD,OAAA,EAAAA,EAAiB5L,OAEzC8L,EAAelE,EAAMI,MACxBH,GAASA,EAAK9H,KAAO8L,IAExB,O,EAAO,KACFD,G,EADE,CAELG,SAAU,CACRlM,QAAS,MAAA+L,OAAA,EAAAA,EAAiB/H,QAC1BgE,KAAM,MAAAiE,OAAA,EAAAA,EAAcjI,U,iBAExB,EAsLmBmI,CAAuBzF,GACpC0F,eApLiC,CACvC1F,IA1IJ,IAAAuB,EAAAC,EAAA2D,EA4II,MAIMQ,EAFc,IAFK,OAAApE,EAAAlJ,EAAa0C,kBAAbwG,EAAiC,MAC/B,OAAAC,EAAAnJ,EAAauN,oBAAbpE,EAAmC,IAGvBC,MACpCoE,GAAeA,EAAWpM,SAAWuG,IAGlC8F,EAAkB,OAAAX,EAAA,MAAAQ,OAAA,EAAAA,EAAoBjF,aAApB,EAAAyE,EAA4BjL,KAAKmK,GACpCA,EACDO,YAEpB,MAAO,CACLlE,OAAQ,MAAAoF,EAAAA,EAAmB,GAC3BD,WAAYF,EAAqB,CAACA,GAAqC,GACxE,EAkKqBI,CAAiC/F,KAGpD3H,IACC,UAAC,MACCyM,YAAa1E,GACbxB,YAAasB,GACbrB,MAAO,SAAAxG,EAAawG,OAAb,EAAsB,GAC7BmH,QAAS,CACP,CACExB,MAAOxD,GACPiF,OAAQ7F,GACR0D,MAAO,OACPzB,QAAS,cAIZ,mBAAAhK,EAAa0B,oBAAb,IAA4BG,KAAKC,IA9U5C,IAAAoH,EA+UY,MAAM2E,EAAY,OAAA3E,EAAAlJ,EAAagJ,YAAb,EAAAE,EAAoBE,MACnCH,GAASnH,EAAaV,SAGzB,OACE,UAAC,OAECqD,GAAI,CACFE,QAAS,OACTkH,cAAe,MACfnH,MAAO,OACPc,eAAgB,aAChBC,WAAY,SACZqI,IAAK,IACLC,cAAe,OACfxE,gBAAiB,cACjByE,OAAQ,UACR,yBAA0B,CACxBzE,gBAAiBhC,EAAMiC,QAAQyE,WAAWC,SAE5CnI,GAAI,IACJC,GAAI,GAENgE,QAAQ,OACRiB,QAAS,IAAMnC,GAAuB,MAAAhH,OAAA,EAAAA,EAAcV,QAEpD,oBAAC+M,EAAA,GACCC,IAAK3G,EAAgB,CACnBzC,eAAgBlD,EAAamD,QAC7BC,YAAa,MAAA2I,OAAA,EAAAA,EAAW5I,UAE1BR,GAAI,CACFC,MAAO,OACPiB,OAAQ,QAEVqE,QAAQ,aAEV,SAAC,MAAI,CAAC0B,KAAM5J,EAAaiD,YAAaiF,QAAQ,eAC9C,SAACkC,EAAA,GACCC,MAAOlE,GACPxD,GAAI,CACFgH,MAAOlE,EAAMiC,QAAQC,KAAKC,KAC1BH,gBAAiB,SAAQ,SACvBhC,EAAMiC,QAAQC,KAAKC,eAErB2E,SAAU,OACV1I,OAAQ,YAxCP,GAAG7D,EAAaX,KA2CvB,IAIH,SAAAnB,EAAa2B,sBAAb,IAA8BE,KAAI,CAACG,EAAgBiK,KApY9D,IAAA/C,EAqYY,MAAMoF,EAAc,OAAApF,EAAAlJ,EAAagJ,YAAb,EAAAE,EAAoBE,MACrCH,GAASjH,EAAeZ,SAAW6H,EAAK9H,KAE3C,OACE,UAAC,OAECsD,GAAI,CACFE,QAAS,OACTkH,cAAe,MACfrG,eAAgB,aAChBC,WAAY,SACZqI,IAAK,IACLC,cAAe,OACfxE,gBAAiB,cACjByE,OAAQ,UACRjI,GAAI,IACJC,GAAI,EACJtB,MAAO,OACP,yBAA0B,CACxB6E,gBAAiBhC,EAAMiC,QAAQyE,WAAWC,UAG9ClE,QAAQ,OACRiB,QAAS,IAAMnC,GAAuB9G,EAAeZ,QAErD,oBAAC+M,EAAA,GACCC,IAAK3G,EAAgB,CACnBzC,eAAgBhD,EAAeiD,QAC/BC,YAAa,MAAAoJ,OAAA,EAAAA,EAAarJ,UAE5BR,GAAI,CACFC,MAAO,OACPiB,OAAQ,QAEVqE,QAAQ,aAGV,SAAC,MAAI,CAAC0B,KAAM1J,EAAe+C,YAAaiF,QAAQ,gBAhC3C,GAAGhI,EAAeb,KAiCzB,UA9QwB,IAACwG,GA7JvCuB,EAgbI,ECxZSqF,EAET,EAAGvO,eAAcsC,iBAAgBL,cA1BrC,QA2BE,MAAMsF,GAAQ,EAAAC,EAAA,KACRnG,GAAW,UAEXX,EAAc,eAAAV,OAAA,EAAAA,EAAcU,aAAd,OAA6B,GAE3C,WAAEoC,IAAe,IAAAC,+BAA8B,CAAC,GACtD,IAAIG,EAEAxC,IACFwC,EAAUJ,EAAWpC,IAGvB,MAAM0D,EAAc,eAAAlB,OAAA,EAAAA,EAASmB,eAAT,IAAmBC,aACvC,OACE,UAACuF,EAAA,IACC,UAAQ,iCACRC,MAAM,EACNC,OAAO,QACPC,QAAQ,YACRvF,GAAI,CACFkB,OAAQ,OACR,qBAAsB,CACpBA,OAAQ,OACRC,UAAW,OACXlB,MAAOrD,EAAW,QAAU,QAC5B4I,WAAY,aAAa1C,EAAMiC,QAAQU,UACvC3E,SAAUlE,EAAW,WAAa,SAClCmN,EAAG,IAIN,UAAAnN,GAAY+C,IACX,sBACE,oBAACiG,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAEsB,GAAI,GACnC,SAAA3B,KAEH,SAAC8G,EAAA,EAAO,CAACzG,GAAI,CAAEmF,GAAI,SAGvB,SAAC,KAAuB,CAAC5J,kBACzB,SAAC,KAAiB,CAACA,eAA4BiC,aAC/C,SAAC,MACCjC,eACAsC,iBACAL,aAEF,SAAC,KAAiB,CAACjC,mBACrB,E,2DC5CG,MAAMyO,EAET,EAAGzO,eAAcyM,kBAEnB,MAAM,gBAAE9L,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KAGf,aACJ+N,EAAY,QACZC,EACAC,WAAW,OAAEC,EAAM,QAAEC,KACnB,QAAqB,CAAEC,KAAM,aAC3BC,EAAwBL,EAGxBrH,GAAW,UACX9G,GAAmB,IAAAC,iBACnB,eAAEwO,EAAc,SAAEC,IAAa,QAAS,CAAC,IACzC,iBAAEC,IAAqB,QAAiB,CAAC,GAGzCC,EAA8CC,IAAS,O,OAAA,E,EAAA,K,EAAA,YApD/D,UAqDIC,OAAOC,OAAOF,EAAM,CAClBG,OAAQ,WACRhP,mBACAiP,eAAgBzP,EAAamB,KAG/B,MAAQkO,KAAMK,SAA4BR,EAAS,CACjDS,OAAQ,OACRC,IAAK,SACLP,SAGIQ,EAAiB,kBAAA7P,EAAa8P,YAAb,IAAoBjO,KAAKkO,GAASA,EAAK5O,MAAvC,EAA8C,GAE/D6O,EAAa,eAAAN,OAAA,EAAAA,EAAmB7N,KAAKkO,GAAgBA,EAAK5O,MAA7C,EAAoD,SAEjEgO,EAAiB,CACrBQ,OAAQ,QACRC,IAAK,kBAAkB5P,EAAamB,KAGpCkO,KAAM,CACJS,MAAO,IAAID,KAAmBG,YAI5BC,QAAQC,IAAI,CAChBhB,EAAS,CAAEU,IAAK,WAChBT,EAAiB,CAAES,IAAK,qBAG1BtI,EAAS,kBAAkBtH,EAAamB,WAC1C,E,yMAAA,EAGMgP,EAAuD,CAC3D,CACEhE,MACEtL,EAAauE,cAAc0K,MAAMM,uBAAuBC,YACrDC,qBACLtG,QAAS,WACTyB,MAAO,OACPmC,OAAQ,IAAMtG,GAAU,GACxBiJ,YACE,wFAEJ,CACEpE,MAAOtL,EAAasG,QAAQ2I,MAAMU,yBAClCxG,QAAS,YACTyB,MAAO,OACPmC,OAAQc,EAAaU,GACrBqB,iBAAiB,EACjBC,UAAW5B,EACXyB,YACE,qFAIN,OACE,SAAC,MACC/J,MACE3F,EAAauE,cAAc0K,MAAMM,uBAAuBC,YACrD7J,MAELiG,cACAkB,QAASwC,EACTQ,UAAW1B,IAEX,mBAAC,EAAA2B,gBAAA,CACClC,aAAcA,EAAaU,GAC3BT,QAASK,EACTH,SACAC,UACAG,eAAgBA,IAChB4B,cAAe,IAAMvJ,GAAU,GAC/BwJ,aAAW,EACX9Q,kBAEJ,E,eC3GG,MAAM+Q,EAA0D,EACrE/Q,eACAyM,kBA1BF,UA6BE,MAAOuE,EAAoBC,IAAyB,IAAAzP,WAAS,IAGvD,gBAAEb,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IAEfuQ,EACJ,2BAAArQ,EAAasG,cAAb,IAAsBe,aAAtB,IAA8BiJ,8BAA9B,EACA,kBAGI7J,GAAW,WACX,OAAE8J,IAAW,WAGb,aACJ1C,EAAY,QACZC,EACAC,WAAW,OAAEC,EAAM,QAAEC,EAAO,QAAEuC,KAC5B,QAAqB,CAAEtC,KAAM,cAG3B,eAAEE,EAAc,SAAEC,EAAQ,MAAEY,IAAU,QAAS,CAAC,IAChD,iBAAEX,IAAqB,QAAiB,CAAEnO,aAAa,IAEvD+O,EAAOD,IAAQ1G,MAAM2G,GAASA,EAAK5O,KAAOiQ,IAEhD,KAAK,MAAArB,OAAA,EAAAA,EAAMvM,WACT,OAAO,wBAGT,MAAMwL,EAAwBL,EAGxBS,EAA8CC,IAAS,O,OAAA,E,EAAA,K,EAAA,YAC3D,MAAQA,KAAMK,SAA4BR,EAAS,CACjDS,OAAQ,QACRC,IAAK,UAAUwB,IACf/B,eAGIY,QAAQC,IAAI,CAChBhB,EAAS,CAAEU,IAAK,WAChBT,EAAiB,CAAES,IAAK,qBAGrBF,GAIL4B,GACF,E,yMAAA,EAEMA,EAAe,KACnBhK,GAAU,EAAE,EAWRiK,EAA0B,KAC9BN,GAAsB,EAAM,EAKxBd,EAA2D,CAC/D,CACEhE,MAAOtL,EAAasG,QAAQe,OAAOsJ,qBACnCxH,QAAS,WACTyB,MAAO,OACPmC,OAnByB,KACtByD,EAGHJ,GAAsB,GAFtBK,GAGF,EAeEf,YACE,gFAEJ,CACEpE,MAAOtL,EAAasG,QAAQe,OAAOuJ,0BACnCzH,QAAS,YACTyB,MAAO,OACPiF,UAAW5B,IAAYuC,EACvBZ,iBAAiB,EACjB7C,OAAQc,EAAaU,GACrBmB,YACE,mFAIAmB,EAAuC,CAC3C,CACEvF,MAAOtL,EAAasG,QAAQe,OAAOyJ,oBACnC/D,OAAQ2D,EACR9F,MAAO,OACP8E,YACE,yFAEJ,CACEpE,MAAO+E,EACPtD,OAAQ,KACN0D,GAAc,EAEhB7F,MAAO,QACP8E,YACE,2FAIN,OACE,UAAC,MACC/J,MACE3F,EAAauE,cAAc0K,MAAMM,uBAAuBwB,YACrDpL,MAELiG,cACAkB,QAASwC,EACTQ,UAAW1B,IAEX,oBAAC4C,EAAA,GACC7R,eACA+P,OACArB,aAAcA,EAAaU,GAC3BT,QAASK,EACTH,SACAC,UACAuC,UACApC,eAAgBA,IAChB4B,cAAeS,EACfR,aAAW,KAEb,SAAC,MACChH,KAAMkH,EACNxK,MAAO3F,EAAauE,cAAc0K,MAAMgC,mBAAmBtL,MAC3DO,YACElG,EAAauE,cAAc0K,MAAMgC,mBAAmB/K,YAEtD4G,QAAS+D,EACTjF,YAAa8E,MAEjB,E,0BC/IG,MAAMQ,GAET,EAAG/R,eAAcyM,kBA9BrB,kBA+BE,MAAM,eAAEgD,EAAiB,KAAO,UAK1BjP,GAAmB,IAAAC,iBACnB,aAAEuC,IAAiB,IAAAC,iBAAgB,CACvCzC,qBAGI+G,GAAQ,EAAAC,EAAA,MAGR,gBAAE7G,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KAIf,iBAAEwO,EAAgB,uBAAE6C,IAA2B,QAAiB,CAAC,GACjE1K,GAAW,WAEX,SAAE4H,EAAQ,eAAED,IAAmB,QAAS,CAC5CjO,aAAa,KAKT,WAAE8B,IAAe,IAAAC,+BAA8B,CAAC,GAChDG,EAAUJ,EAAW9C,EAAaU,aAElCuR,EACJ,0CAAA/O,OAAA,EAAAA,EAASwD,mBAAT,IAAuBoJ,YAAvB,IAA8BoC,6BAA9B,IAAsDrQ,KACnDsQ,IA/DP,IAAAjJ,EA+D2B,OACnBiD,MAAOgG,EAAeC,mBACtBC,KAAMF,EAAeG,mBAAmBhG,QACxCiG,KAAM,OAAArJ,EAAAiJ,EAAeK,yBAAf,EAAAtJ,EAAmCuJ,KAC1C,KALH,EAMK,GAEDC,EACJ,iCAAA1P,OAAA,EAAAA,EAAc2P,sBAAd,IAA+BC,iBAA/B,IAA2C/Q,KAAKgR,IAvEpD,IAAA3J,EAuEsE,OAChEiD,MAAO0G,EAAaT,mBACpBC,KAAMQ,EAAaP,mBAAmBhG,QACtCiG,KAAM,OAAArJ,EAAA2J,EAAaL,yBAAb,EAAAtJ,EAAiCuJ,KACxC,KAJD,EAIO,GAEHK,EACJJ,EAA2BK,OAAOd,GAC9BnC,EAAQ,MAAA9P,OAAA,EAAAA,EAAc8P,MAEtBkD,EAAoBlD,EAAMmD,QAC7BlD,GAASA,EAAKN,iBAAmBA,IAGDuD,EAChCC,QAAQlD,QAAoC,IAAZA,EAAK5O,KACrCU,KAAKkO,GAASA,EAAK5O,KACtB,IAAKnB,EACH,OAAO,wBAIT,MAyBMkT,EAAoD,CACxD,CACE/G,MAAOtL,EAAasG,QAAQe,OAAOU,mBACnC6C,MAAO,OACPzB,QAAS,YACT4D,OAAQnB,EACRgE,iBAAiB,EACjBF,YAAa,wDAqEjB,OACE,SAAC,MACC/J,MAAO3F,EAAauE,cAAc0K,MAAMqD,mBAAmB3M,MAC3DO,YAAalG,EAAauE,cAAc0K,MAAMqD,mBAAmBC,SACjE3G,cACAkB,QAASuF,EACTvC,UAAWqB,KAA4B/C,IACvCoE,WAAY,CACVC,aAAc,aAAa/L,EAAMiC,QAAQU,UACzCtE,UAAW,OACX4I,EAAG,GAEL,UAAQ,kCACR+E,sBAAsB,oDAErB,SA9E8B,IAA7BP,EAAkBpI,QAElB,SAAC,MACC4I,WAAY,kBAAkBxT,EAAamB,qBAM/C,sBACE,oBAACqD,EAAA,GACCC,GAAI,CACFC,MAAO,OACPC,QAAS,OACTkH,cAAe,MACfrG,eAAgB,WAChBC,WAAY,SACZ0E,GAAI,GAGN,mBAACsJ,EAAA,GACC,UAAQ,mFACRC,WAAW,SAAC,EAAAC,MAAK,IACjB1I,QAAS,IACP3D,EAAS,kBAAkBtH,EAAamB,mBAE1CsK,MAAM,OACNzB,QAAQ,WACRvF,GAAI,CAAE2G,WAAY,KAEjB,SAAAvK,EAAasG,QAAQ2I,MAAMU,6BAId,IAAjBV,EAAMlF,SACL,SAAC,MAAO,CAACnG,GAAI,CAAE0F,GAAI,GACjB,mBAACE,EAAA,EAAU,CAACL,QAAQ,YAAYyB,MAAO,iBACpC,gBAAAmI,EAAA,OAAA9G,EAAA,OAAA3D,EAAA,OAAAD,EAAA,MAAArI,OAAA,EAAAA,EAAcuE,oBAAd,EAAA8D,EAA6B4G,YAA7B,EAAA3G,EAAoCgK,yBAApC,EAAArG,EACG+G,iCADHD,EACsC,yBAI3B,IAAjB9D,EAAMlF,QACLkF,EAAMjO,KAAKkO,IACT,MAAM8C,EAAeC,EAAe1J,MACjCyJ,GAAiBA,EAAaR,OAAStC,EAAK+D,eAE/C,OACE,SAAC,MAEC/D,OACAtL,GAAI,CAAEmF,GAAI,GACVmK,SAAU,kBAAkB/T,EAAamB,YAAY4O,EAAK5O,KAC1D6S,SAAU,MAAAnB,OAAA,EAAAA,EAAc1G,MACxB8H,SAAU,MAAApB,OAAA,EAAAA,EAAcR,KACxB6B,SAAU,MAAArB,OAAA,EAAAA,EAAcN,MANnB,sBAAsBxC,EAAK5O,KAOlC,SAzDU,IAlIxB+H,EAAAC,EAAA2D,EAAA8G,CAkNI,E,4NC1LG,MAAMO,GAA+D,EAC1EnU,eACAyM,cACAxK,cA3BF,sCA8BE,MAAOmS,EAAmBC,IAAwB,IAAA7S,WAAS,GAGrD+F,GAAQ,EAAAC,EAAA,MAGR,gBAAE7G,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IAEf2T,EACJ,2BAAAzT,EAAasG,cAAb,IAAsBe,aAAtB,IAA8BsJ,sBAA9B,EAAsD,UAElD9E,EACJ,2BAAA7L,EAAasG,cAAb,IAAsBe,aAAtB,IAA8BU,oBAA9B,EAAoD,QAGhDtB,GAAW,WACX,iBAAE6H,IAAqB,QAAiB,CAAEnO,aAAa,KAGvD,OAAEoQ,IAAW,WACb,SAAElC,EAAQ,MAAEY,IAAU,QAAS,CAAEyE,uBAAuB,IAExDxE,GADoB,MAAA/P,OAAA,EAAAA,EAAc8P,OAEpB1G,MAAM2G,GAASA,EAAK5O,KAAOiQ,KAC7CtB,IAAQ1G,MAAM2G,GAASA,EAAK5O,KAAOiQ,IAE/BzP,EAAkB3B,EAAa2B,gBAC/BK,EAAiB,MAAAL,OAAA,EAAAA,EAAiByH,MACrCnI,GAAYA,EAAQG,UAAW,MAAA2O,OAAA,EAAAA,EAAM3O,UAGxC,IAAK2O,EACH,OAAO,wBAKT,MAcMyE,EAAyB,KAC7BH,GAAqB,EAAM,EAKvBI,EAAqC,CACzC,CACEtI,MAAOO,EACPjB,MAAO,OACPzB,QAAS,YACT4D,OAAQ,IAAMnB,MAIZiI,EAA2D,CAC/D,CACEvI,MAAO,2BAAAtL,EAAasG,cAAb,IAAsBe,aAAtB,IAA8ByM,qBAA9B,EAAqD,SAC5D/G,OAAQ,IAAY,4BAClByG,GAAqB,EACvB,IACArK,QAAS,OACTyB,MAAO,QACP8E,YACE,kFAEJ,CACE,CACEpE,MAAOmI,EACP7I,MAAO,OACPzB,QAAS,WACT4D,OAAQ,IAAMtG,EAAS,kBAAkBtH,EAAamB,YACtDoP,YACE,iFAEJ,CACEpE,MACE,2BAAAtL,EAAasG,cAAb,IAAsB2I,YAAtB,IAA6B8E,wBAA7B,EAAuD,YACzD5K,QAAS,YACT4D,OAAQ,IACNtG,EAAS,kBAAkBtH,EAAamB,YAAY4O,EAAK5O,WAC3DsK,MAAO,OACP8E,YACE,kFAKFsE,EAAsC,CAC1C,CACE1I,MAAO,2BAAAtL,EAAasG,cAAb,IAAsBe,aAAtB,IAA8ByJ,qBAA9B,EAAqD,SAC5D/D,OAAQ4G,EACR/I,MAAO,OACPzB,QAAS,WACTuG,YACE,0FAEJ,CACEpE,MAAO,kBAAAtL,EAAasG,cAAb,IAAsBe,aAAtB,IAA8ByM,oBACrC/G,OAAQ,KAzEyB,kCAC7BsB,EAAS,CACbS,OAAQ,SACRC,IAAK,UAAUwB,oBAAyBpR,EAAamB,aAGjD8O,QAAQC,IAAI,CAChBhB,EAAS,CAAEU,IAAK,WAChBT,EAAiB,CAAES,IAAK,qBAG1BtI,EAAS,kBAAkBtH,EAAamB,WAC1C,GA8DwB,EAEpBsK,MAAO,QACPzB,QAAS,YACTyG,iBAAiB,EACjBF,YACE,2FAIN,OACE,UAAC,MACC/J,MAAO3F,EAAauE,cAAc0K,MAAMgF,gBAAgBtO,MACxDiG,cACAkB,QAAS1L,EAAUwS,EAAoBC,EACvCrB,WAAY,CACVC,aAAc,aAAa/L,EAAMiC,QAAQU,UACzCtE,UAAW,OACXI,GAAI,EACJD,GAAI,GAGN,oBAACgP,GAAA,GACChF,OACA/N,iBACAhC,kBAEF,SAAC,MACCyM,YAAa+H,EACb1K,KAAMsK,EACN5N,MAAO3F,EAAauE,cAAc0K,MAAMkF,kBAAkBxO,MAC1DO,YACElG,EAAauE,cAAc0K,MAAMkF,kBAAkBjO,YAErD4G,QAASkH,MAEb,E,yZCvJG,MAAMI,GAAuD,EAClEjV,eACAiC,cA7BF,kBA+BE,MAAOiT,EAAkBC,IAAuB,IAAA3T,WAAS,GACnD8F,GAAW,WACX,gBAAE3G,IAAoB,IAAAC,uBAAsB,CAAC,GAE7CC,EAAeF,IAEfmP,EAAQ,MAAA9P,OAAA,EAAAA,EAAc8P,MACtBsF,GAAoB,EAAA5N,EAAA,KACpB6N,GAAkB,QACtB,uBACAD,EAAkB5L,SAEdpD,EAAWpG,EAAakG,YAExB1F,GAAmB,IAAAC,iBACnB,aAAEuC,IAAiB,IAAAC,iBAAgB,CACvCzC,sBAEI,WAAEsC,IAAe,IAAAC,+BAA8B,CAAC,GAEhDG,EAAUJ,EAAW9C,EAAaU,aAElCuR,EACJ,0CAAA/O,OAAA,EAAAA,EAASwD,mBAAT,IAAuBoJ,YAAvB,IAA8BoC,6BAA9B,IAAsDrQ,KACnDsQ,IAvDP,IAAAjJ,EAuD2B,OACnBiD,MAAOgG,EAAeC,mBACtBkD,MAAOnD,EAAeG,mBAAmBhG,QACzCiG,KAAM,OAAArJ,EAAAiJ,EAAeK,yBAAf,EAAAtJ,EAAmCuJ,KAC1C,KALH,EAMK,GASDK,GANJ,iCAAA9P,OAAA,EAAAA,EAAc2P,sBAAd,IAA+BC,iBAA/B,IAA2C/Q,KAAKgR,IA/DpD,IAAA3J,EA+DsE,OAChEiD,MAAO0G,EAAaT,mBACpBkD,MAAOzC,EAAaP,mBAAmBhG,QACvCiG,KAAM,OAAArJ,EAAA2J,EAAaL,yBAAb,EAAAtJ,EAAiCuJ,KACxC,KAJD,EAIO,IAGoBM,OAAOd,GAsBpC,OACE,sBACE,qBAACsD,EAAA,EAAa,CAAChO,O,EAAO,MAAK,gB,EAAL,CAAqBiC,QAAS6L,G,aAClD,oBAAC,OACC/L,KAAK,KACLkM,MAAM,OACN9K,QAAS,CACPV,QAAS,KACTyL,UAAW,IACX/J,KAAM7K,EAAauE,cAAc0K,MAAM4F,QAAQlP,MAC/C,UAAW,6BAEbmE,UAAW,CACT,CACEX,QAAS,UACTyB,MAAO,gBACPC,KAAM7K,EAAauE,cAAc0K,MAAM4F,QACpCC,sBACHlR,GAAI,CAAE2G,WAAY,KAClBzG,QAA0B,IAAjBmL,EAAMlF,OAAe,GAAK,OACnC,UAAW,0CAGfnG,GAAI,CACF2G,WAAY,IACZD,GAAI,EACJ2C,IAAK,EACLlE,GAAqB,IAAjBkG,EAAMlF,OAAe,EAAI,MAGjC,SAACpG,EAAA,EAAG,CAACC,GAAI,CAAE0G,GAAI,EAAGvB,GAAI,GACnB,SAAAkG,EAAMjO,KAAKkO,IA3HtB,IAAA7G,EA4HY,MAAM2J,EAAeC,EAAe1J,MACjCyJ,GAAiBA,EAAayC,QAAUvF,EAAK+D,eAGhD,OACE,SAAC,OACC,UAAS,sBAAsB/D,EAAK6F,YACpClC,WAAW,SAACmC,EAAA,EAAU,CAACpD,KAAM,MAAAI,OAAA,EAAAA,EAAcN,OAC3CvI,QAAQ,OACRmC,MAAO,GAAG,OAAAjD,EAAA,MAAA2J,OAAA,EAAAA,EAAc1G,OAAdjD,EAAuB,MAAA2J,OAAA,EAAAA,EAAcyC,SAC7CvF,EAAK6F,UAAY,MAAQ7F,EAAK6F,UAAY,KAE5CnR,GAAI,CACFkB,OAAQ,cACRH,eAAgB,aAChBsQ,KAAM,CACJ1K,WAAY,MACZiD,SAAU,OACV0H,UAAW,OACXC,WAAY,OACZhL,GAAI,IAENpB,GAAI,IAENqM,WAAS,EACThL,QAAS,KAAMiL,OAjEJ9E,EAiEoBrB,EAAK5O,IAAM,GAhEtDmG,EAAS,kBAAkBtH,EAAamB,YAAYiQ,IAAU,CAC5D+E,SAAS,SAGXhB,GAAoB,GALE,IAAC/D,CAiEkC,EAC7CV,SAAUtK,GACZ,OAIJnE,IACA,SAAC,OACC,UAAQ,+DACRgU,WAAS,EACTjM,QAAQ,WACR0G,SAAUtK,EACVqF,MAAM,OACNhH,GAAI,CACFmF,GAAI,EACJ5D,GAAI,GACJD,GAAI,KAENkF,QAzFgB,KACxB3D,EAAS,kBAAkBtH,EAAamB,YAExCgU,GAAoB,EAAK,EAwFhB,SAAAtU,EAAauE,cAAc0K,MAAM4F,QAAQU,gCAIhD,SAAClL,EAAA,EAAO,CAACzG,GAAI,CAAE0G,GAAI,MACnB,SAAC,MACCnL,eACAwM,OAAQ0I,EACRzI,YAzGwB,KAC5BnF,EAAS,kBAAkBtH,EAAamB,MAExCgU,GAAoB,EAAM,EAuGtBlT,e,OAEJ,E,opBChKG,MAAMoU,GAAiE,EAC5ErW,eACAiC,cAtBF,0DAwBE,MAAMqF,GAAW,UACX5G,EAAc,SAAAV,EAAaU,aAAb,EAA4B,GAI1C4V,GAHiBtW,EAAauW,SAChCvW,EAAauW,SAAS3L,OACtB,GACmD,EACjD4L,EAAyBxW,EAAakG,aACtC,WAAEpD,IAAe,IAAAC,+BAA8B,CAAC,GAChDG,EAAUJ,EAAWpC,IAErB,gBAAEC,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IAEfyU,GAAoB,EAAA5N,EAAA,KACpB6N,GAAkB,QACtB,uBACAD,EAAkB5L,UAEd,QAAEA,GAAY4L,GAEd,eAAEqB,EAAc,qBAAEC,IAAyB,QAAe,CAC9D1V,aAAa,KAET,iBAAEmO,EAAgB,uBAAE6C,IAA2B,QAAiB,CACpEhR,aAAa,IAGf,IAAIwF,GAAgB,GAChBO,GAAsB,GACtB4P,GAAmB,GACnBpE,IAAwB,wBACxBqE,GAA6B,GAEjC,MAAMnU,GAAkB,SAAAzC,EAAa0C,uBAAb,IAA+BL,GAAG,GACpD2F,IAAiD,KAAjC,MAAAvF,QAAA,EAAAA,GAAiBG,aAGjCiU,GAAwC,KADzB,kBAAA7W,EAAauN,yBAAb,IAAiC3C,QAAjC,EAA2C,GAG1DkM,GAAsB9O,IAAiB6O,GAEvCE,GACJ,mDAAA7T,OAAA,EAAAA,EAASE,sBAAT,IAA0BC,mBAA1B,IAAwCY,kBAAkBC,iBAA1D,IAAsEuC,YAAtE,IACIrB,oBADJ,IACmB0G,MAEfkL,GACJ,mDAAA9T,OAAA,EAAAA,EAASE,sBAAT,IAA0BC,mBAA1B,IAAwCY,kBAAkBC,iBAA1D,IAAsEuC,YAAtE,IACIrB,oBADJ,IACmB6R,QAEfC,GAAiBlP,GACnB,MAAA+O,QAAA,EAAAA,GAAgBI,gBAChB,MAAAJ,QAAA,EAAAA,GAAgBK,yBAEdC,GAAmBrP,GACrB,MAAAgP,QAAA,EAAAA,GAAkBG,gBAClB,MAAAH,QAAA,EAAAA,GAAkBI,yBAmGtB,OA9CIN,IACFtQ,GAAQ,wBAAAuQ,QAAA,EAAAA,GAAgBO,0BAAhB,IAAqCC,aAArC,EAAoD,GAC5DxQ,GAAc,wBAAAgQ,QAAA,EAAAA,GAAgBO,0BAAhB,IAAqCE,mBAArC,EAA0D,GACxEb,GAAW,SAAAnN,EAAQiO,MAAMC,aAAd,EAA6B,GACxCnF,IAAO,SAACoF,GAAA,EAAY,CAACtJ,SAAS,QAAQ5C,MAAM,UAC5CmL,GAAU,CACR,CACE5M,QAAS,YACTyB,MAAO,UACPU,MACE,eAAA4K,QAAA,EAAAA,GAAgBO,0BAAhB,IAAqCM,6BACvCC,IAAK,YACL5M,QAAS,IAtDoB,kCAC3BwL,EAAe,CACnB9G,OAAQ,QACRC,IAAK,gBAAgB,MAAAnN,QAAA,EAAAA,GAAiBtB,KACtCkO,KAAM,CACJzM,aAAa,WAIXqN,QAAQC,IAAI,CAChBuG,EAAe,CAAE7G,IAAK,iBACtBT,EAAiB,CAAES,IAAK,oBAE5B,IA0CMkI,QAAS9F,QAIbxL,GAAQvE,EACJ,eAAAiV,QAAA,EAAAA,GAAgBK,aAAhB,EAA+B,GAC/B,eAAAF,QAAA,EAAAA,GAAkBE,aAAlB,EAAiC,GACrCxQ,GAAc9E,EACV,eAAAiV,QAAA,EAAAA,GAAgBM,mBAAhB,EAAqC,GACrC,eAAAH,QAAA,EAAAA,GAAkBG,mBAAlB,EAAuC,GAC3Cb,GAAW,SAzEP3O,GACKwB,EAAQuO,QAAQL,YACdzV,EACFuH,EAAQwO,QAAQN,YAElBlO,EAAQC,KAAKiO,aAoET,EAAsB,GACjCnF,IAAO,SAAC0F,GAAA,CAAUjQ,iBAA8B/F,YAChD2U,GAAU,CACR,CACElG,UAAW1I,IAAiB6O,GAC5B7M,QAAS,YACTyB,MAAO,UACPU,MAAOnE,GACHnH,EAAasG,QAAQoP,SAAS2B,iBAC9B,eAAAnB,QAAA,EAAAA,GAAgBK,+BAAhB,IAA0Ce,yBAC9CN,IAAK,oBACL5M,QAAS,KACFjD,GAGHV,EAAS,kBAAkBtH,EAAamB,sBAjEhB,4BAC5B0V,WAIEJ,EAAe,CACnB9G,OAAQ,QACRC,IAAK,gBAAgB,MAAAnN,QAAA,EAAAA,GAAiBtB,KACtCkO,KAAM,CACJzM,aAAa,WAIXuM,EAAiB,CACrBQ,OAAQ,QACRC,IAAK,kBAAkB5P,EAAamB,KACpCkO,KAAM,CACJ+I,YAAa,IAAIC,cAIfpI,QAAQC,IAAI,CAChBuG,EAAe,CAAE7G,IAAK,iBACtBT,EAAiB,CAAES,IAAK,qBAE5B,GAyCQ,EAEFkI,QAASpB,KAA0B1E,QAMrCsE,GAAiCtO,IACjCwO,KACDM,IAEM,yBAIP,sBACE,oBAACvB,EAAA,EAAa,CAAChO,O,GAAO,MAAK,gB,GAAL,CAAqBiC,QAAS6L,G,eAClD,oBAAC7Q,EAAA,GACCC,GAAI,CACFE,QAAS,OACTkH,cAAe,SACfjC,GAAI,EACJ0O,GAAI,GAGN,qBAAC9T,EAAA,GACCC,GAAI,CACFE,QAAS,OACTa,eAAgB,aAChBC,WAAY,QACZoG,cAAe,MACftC,gBAAiBoN,GACjB5L,aAAc,MACdnB,GAAI3H,EAAU,EAAI,EAClBuM,EAAG,GAGJ,UAAA+D,IACD,UAAC/N,EAAA,EAAG,CAACC,GAAI,CAAE8T,GAAI,GACb,oBAAC,MAAI,CAACvO,QAAQ,KAAKvF,GAAI,CAAE2G,WAAY,KAAOM,KAAMlF,MAClD,SAAC,OACCwD,QAAQ,QACRvF,GAAI,CACF2G,WAAY,IACZD,GAAI,EACJM,MAAOjC,EAAQkC,KAAKC,WAEtBD,KAAM3E,WAIX9E,IACC,sBACE,oBAAC,OACCmI,UAAW,SACXwM,QAAS,MAAAA,GAAAA,GAAW,GACpB4B,QAAS,MAEV3B,KAAyB7O,KACxB,SAAC,OACCgC,QAAQ,QACRyB,MAAM,gBACNN,GAAI,EACJO,KACE,eAAAqL,QAAA,EAAAA,GAAgBK,+BAAhB,IACIqB,wCAQlB,SAACvN,EAAA,EAAO,CAACzG,GAAI,CAAE0G,GAAI,Q,SACrB,EAIE8M,GAAY,EAChBjQ,gBACA/F,aAKA+F,GACE,SAAC0Q,GAAA,EAAkB,CAACrK,SAAS,QAAQ5C,MAAM,YACzCxJ,GACF,SAAC0W,GAAA,EAAqB,CAACtK,SAAS,QAAQ5C,MAAM,aAE9C,SAACmN,GAAA,EAAY,CAACvK,SAAS,QAAQ5C,MAAM,S,4HCvPzC,MAwCA,GAxC0E,EACxEoN,cACAC,oBACAC,oBACAC,kCACAlP,OACAgO,UACAmB,UACAC,6BAGE,SAAC,MACCpP,OACAtD,MAAOqS,EACP9R,YAAa+R,EACbnI,UAAWmH,EACXnK,QAAS,CACP,CACExB,MAAO4M,EACPnL,OAAQqL,EACRxN,MAAO,UACPzB,QAAS,WACTmP,UAAW,iBACX1I,iBAAiB,GAEnB,CACEtE,MAAO6M,EACPpL,OAAQsL,EACRzN,MAAO,OACPzB,QAAS,YACTyG,iBAAiB,EACjBF,YACE,oFAGN9D,YAAawM,ICxBnB,MAkOA,GAlO4D,EAC1DjZ,mBA3BF,oEA6BE,MAAMQ,GAAmB,IAAAC,iBACnB,YAAEM,IAAgB,QAAY,CAAEC,aAAa,KAC5CC,GAAWF,IACZG,EAAY,MAAAD,OAAA,EAAAA,EAASE,GAErBT,EAAc,MAAAV,OAAA,EAAAA,EAAcU,YAC5B+O,EAAiBzP,EAAamB,IAE9B,WAAE2B,IAAe,IAAAC,+BAA8B,CAAC,IAChD,aAAEC,IAAiB,IAAAC,iBAAgB,CAAEzC,qBAE3C,IAAI0C,EACAC,EAEAzC,GACFwC,EAAUJ,EAAWpC,GACrByC,EAAc,eAAAD,OAAA,EAAAA,EAASE,sBAAT,IAA0BC,cAExCF,EAAc,eAAAH,OAAA,EAAAA,EAAcM,oBAAd,IAA6BD,aAG7C,MAAM,gBAAE1C,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IAEf2G,IAAW,WACX,SAAE8R,KAAa,WAEd7S,GAAa8S,KAAkB,IAAA7X,WAAkB,IACjDmP,GAAW2I,KAAgB,IAAA9X,WAAkB,GAG9CvB,IAAW,YAGX,mBAAEa,KAAuB,UACzBY,GAAgB,MAAA1B,OAAA,EAAAA,EAAc0B,cAC9BE,GAAmB,eAAAF,QAAA,EAAAA,GAAeG,KAAKiK,GAAUA,EAAM3K,MAApC,EAA2C,GAC9DmB,GAA4D,WAA3C,MAAAtC,OAAA,EAAAA,EAAcuC,0BAC/BN,GAAUL,GAAiBM,SAAShB,GAE1C,IAAIwJ,GACA0I,GACAyF,GACAC,GAGAE,GAFAD,GACF,2BAAAlY,EAAasG,cAAb,IAAsBe,aAAtB,IAA8ByJ,qBAA9B,EAAqD,SAGvD,MAAM4H,GACJ,0CAAApW,OAAA,EAAAA,EAAac,kBAAkBC,iBAA/B,IAA2CuC,YAA3C,IAAkDrB,oBAAlD,IAAiE0G,YAAjE,IACI0N,sBACAC,GACJ,0CAAAtW,OAAA,EAAAA,EAAac,kBAAkBC,iBAA/B,IAA2CuC,YAA3C,IAAkDrB,oBAAlD,IAAiE6R,cAAjE,IACIuC,sBACArV,GACJ,iCAAAhB,OAAA,EAAAA,EAAac,kBAAkBC,iBAA/B,IAA2CC,iBAA3C,IAAuDiB,oBAAvD,IACIoU,sBAIFlX,GACEL,IACFyI,GAAU,eAAA6O,QAAA,EAAAA,GAAYG,cAAZ,EAA4B,GACtCtG,GAAW,eAAAmG,QAAA,EAAAA,GAAYI,oBAAZ,EAAkC,GAC7Cd,GAAc,eAAAU,QAAA,EAAAA,GAAYK,4BAA4BpT,OAAxC,EAAiD,GAC/DsS,GACE,eAAAS,QAAA,EAAAA,GAAYK,4BAA4B7S,aAAxC,EAAuD,GACzDiS,GAAkC,eAAAO,QAAA,EAAAA,GAAYG,cAAZ,EAA4B,KAE9DhP,GAAU,eAAA+O,QAAA,EAAAA,GAAcC,cAAd,EAA8B,GACxCtG,GAAW,eAAAqG,QAAA,EAAAA,GAAcE,oBAAd,EAAoC,GAC/Cd,GAAc,eAAAY,QAAA,EAAAA,GAAcG,4BAA4BpT,OAA1C,EAAmD,GACjEsS,GACE,eAAAW,QAAA,EAAAA,GAAcG,4BAA4B7S,aAA1C,EAAyD,GAC3DiS,GAAkC,eAAAS,QAAA,EAAAA,GAAcC,cAAd,EAA8B,KAGlEhP,GAAU,eAAAvG,QAAA,EAAAA,GAAYuV,cAAZ,EAA4B,GACtCtG,GAAW,eAAAjP,QAAA,EAAAA,GAAYwV,oBAAZ,EAAkC,GAC7Cd,GAAc,eAAA1U,QAAA,EAAAA,GAAYyV,4BAA4BpT,OAAxC,EAAiD,GAC/DsS,GACE,eAAA3U,QAAA,EAAAA,GAAYyV,4BAA4B7S,aAAxC,EAAuD,GACzDiS,GAAkC,eAAA7U,QAAA,EAAAA,GAAYuV,cAAZ,EAA4B,IAGhE,MAUMG,GAAW,KA5HnB,IAAA3Q,EAAAC,EAAA2D,EA6HI,OAAIxK,GACKL,GACH,OAAAiH,EAAA,MAAAqQ,QAAA,EAAAA,GAAYK,4BAA4BE,kBAAxC5Q,EAA4D,GAC5D,OAAAC,EAAA,MAAAsQ,QAAA,EAAAA,GAAcG,4BAA4BE,kBAA1C3Q,EAA8D,GAG7D,OAAA2D,EAAA,MAAA3I,QAAA,EAAAA,GAAYyV,4BAA4BE,kBAAxChN,EAA4D,KAI/D,iBAAEqC,KAAqB,QAAiB,CAAEnO,aAAa,IAGvD+Y,IAAmB,IAAAnW,cAAY,KACnCyV,IAAe,GACf/R,GAAS,kBAAkBmI,IAAiB,GAC3C,CAACnI,GAAUmI,IA6DRrJ,GAAWpG,EAAakG,YAW9B,OATA,IAAAzE,YAAU,KACJ2E,GACF2T,KAIFV,GAAeD,GAASY,SAAS,aAAa,GAC7C,CAACD,GAAkB3T,GAAUgT,MAG9B,UAAC5U,EAAA,GACCC,GAAI,CACFkB,OAAQ,OACRhB,QAAS,OACTsV,SAAU,SACVzU,eAAgB,YAGlB,oBAAC,OACCf,GAAI,CAAEyV,GAAI,CAAE1L,EAAG,IACfzE,QAAQ,SAAC,KAAU,CAACC,QAAQ,UAAUuI,MAAM,SAAC4H,GAAA,EAAS,MAEtD,mBAAC,OACC1V,GAAI,CAAE+J,EAAG,GACTvD,QAtFgB,KACtBoO,IAAe,GACf/R,GAAS,kBAAkBmI,aAA0B,EAqF/C2K,YAAY,aACZ7H,MAAM,SAAC8H,GAAA,EAAS,IAChB/Q,KAAK,QACLoB,WACAC,UAAW,CAACyI,IACZ1C,SAAUtK,QAId,SAAC,IACCyS,eACAC,qBACAC,qBACAC,mCACAlP,KAAMvD,GACN0S,QAASc,GACTb,uBAlG6B,KAAY,O,OAAA,E,EAAA,K,EAAA,YAC7C,IAAIoB,GAAY,EAlCC,IAlHrBpR,EAAAC,EAAA2D,EAsJIwM,IAAa,GAERhX,IAAkBL,KAAaK,IASlCgY,EAA0C,mBARTnL,GAAiB,CAChDQ,OAAQ,QACRC,IAAK,kBAAkBH,IACvBJ,KAAM,CACJnJ,aAAa,MAIcsJ,OAE3B8K,GACFxZ,GAAmB,2BAA4B,CAC7C,gBAAgB,IAAA+C,iCAAgCwU,KAAKkC,OACrDxW,QAASrD,EACT,eAAgBuB,GAAU,QAAU,aAcxCqY,EAA0C,mBAVTnL,GAAiB,CAChDQ,OAAQ,QACRC,IAAK,kBAAkBH,IAGvBJ,KAAM,CACJ1N,gBAAiB,CAACT,OAISsO,OAGjCvP,IACE,QAAa,CACXua,SAAUF,EAAY,UAAY,QAClCG,QAASH,EAxEThY,GACKL,GACH,OAAAiH,EAAA,MAAAqQ,QAAA,EAAAA,GAAYK,4BAA4Bc,oBAAxCxR,EAA8D,GAC9D,OAAAC,EAAA,MAAAsQ,QAAA,EAAAA,GAAcG,4BAA4Bc,oBAA1CvR,EAAgE,GAG/D,OAAA2D,EAAA,MAAA3I,QAAA,EAAAA,GAAYyV,4BAA4Bc,oBAAxC5N,EAA8D,GAkE7B+M,KACpCc,QAAS,OAIbtB,IAAe,SAETpJ,QAAQC,IAAI,CAACf,GAAiB,CAAES,IAAK,qBAE3CtI,GAAS,kBAETgS,IAAa,EACf,E,yMAAA,EA+CMxB,QAASnH,OAEb,E,+aCpLG,MAAMiK,GAAyD,EACpE5a,eACA8E,oBACAvB,wBACAa,cACAe,YACA7D,gBACAC,uBA3EF,gCA6EE,MAAOsG,EAAuBC,IAA4B,IAAAtG,WAAS,IAC5DmG,EAAgBC,IAAqB,IAAApG,YAEtCqZ,GACJ,MAAA7a,OAAA,EAAAA,EAAcuC,4BAA6B,EAAAC,kBAAA,MAEvC4S,GAAoB,EAAA5N,EAAA,KACpB6N,GAAkB,QACtB,uBACAD,EAAkB5L,SAGdlC,GAAW,UACXjG,GAAW,WACX,gBAAEV,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KACf,gBAAE8G,IAAoB,IAAAC,oBAEtB,WAAE5E,IAAe,IAAAC,+BAA8B,CAAC,GAEtD,IAAIG,GAEA,MAAAlD,OAAA,EAAAA,EAAcU,eAChBwC,EAAUJ,EAAW,eAAA9C,OAAA,EAAAA,EAAcU,aAAd,EAA6B,KAGpD,MAAMuH,GACJ,iCAAA/E,OAAA,EAAAA,EAASE,sBAAT,IAA0BC,mBAA1B,IAAwCY,kBAAkBiE,aAA1D,IAAkEC,KAE9DJ,GAA+B,KACnCD,GAAyB,EAAM,GAGzBtB,MAAOiC,IAAe5H,EAAauE,cAAcsD,mBACnDC,GACJ,kBAAA9H,EAAasG,cAAb,IAAsBe,aAAtB,IAA8BU,mBAE1BC,GAA0B,KAC9BjB,OAAkB,GAClBE,GAAyB,EAAK,EAE1BgB,GAA0B1H,IAC9BwG,EAAkBxG,GAClB2G,IAA8B,EAyD1B+S,IAAS,IAAAC,oBAAmBla,EAAama,eAEzCjS,GACJ,kBAAA/I,EAAagJ,YAAb,IAAoBnH,KAAKoH,IApL7B,IAAAC,EAAAC,EAqLM,MAAM/H,EAAS6H,EAAK9H,GACda,EAAiB,OAAAkH,EAAAlJ,EAAa2B,sBAAb,EAAAuH,EAA8BE,MAClDpH,GAAmBA,EAAeZ,SAAWA,IAE1CU,EAAe,OAAAqH,EAAAnJ,EAAa0B,oBAAb,EAAAyH,EAA4BC,MAC9CtH,GAAiBA,EAAaV,SAAWA,IAEtC4D,EAAiBhD,EACnBA,EAAeiD,QACf,MAAAnD,OAAA,EAAAA,EAAcmD,QACZC,EAAc+D,EAAKhE,QACzB,OAAOwC,EAAgB,CACrBzC,iBACAE,eACA,KAfJ,EAgBM,GAEF+V,GAAgB,KAtMxB,IAAA/R,EAAAC,EAuMI,OAAI9H,GAAYC,GAEZ,SAAC+I,EAAA,EAAU,CAACL,QAAQ,WAAWkR,KAAM,EAClC,gBAAAhS,EAAArI,EAAauE,cAAc+V,mBAAmB3U,OAA9C0C,EACC,mBAKJ,SAAC1E,EAAA,EAAG,CAACC,GAAI,CAAEyW,KAAM,GACd,SAAAlb,IACC,sBACE,oBAACqK,EAAA,GACC5F,GAAI,CAAE4J,SAAU,OAAQjD,WAAY,IAAK4K,WAAY,QAEpD,SAAA6E,EAAU,MAAA7a,OAAA,EAAAA,EAAcwG,MAAQ,MAAA1B,OAAA,EAAAA,EAAmBC,eAGtD,SAACsF,EAAA,GACCL,QAAQ,UACRyB,MAAM,iBACNhH,GAAI,CAAE2W,cAAe,SAEpB,SAAAP,GACG,QACEha,EAAawa,UAAUC,oBACpBC,yBAAyBC,mBACzBC,cACH,CACEC,MAAM,EAAAC,GAAA,GACJ,IAAItD,KAAK,OAAAlP,EAAAnJ,EAAawD,WAAb2F,EAA0B,IACnC,gBAIN,GAAGhE,KACDtE,EAAauE,cAAcwW,qBAAqBC,SAC/C,EAAAF,GAAA,IACD,EAAAG,GAAA,GAASvY,EAAsBsH,YAC/B,YACA,CACEiQ,qBAQpB,EAGF,OACE,sBACE,oBAACvF,EAAA,EAAa,CAAChO,MAAO,SAAK,gBAAL,CAAqBiC,QAAS6L,IAClD,oBAAC0G,GAAA,GACCC,UAAW,EACXC,QAAM,EACNxX,GAAI,CACFsB,GAAI,IACJC,GAAI3E,EAAW,EAAI,EACnBqD,MAAO,OACPC,QAAS,OACTa,eAAgB,gBAChBC,WAAY,SACZF,SAAU,WACV2W,OAAQ,GACRvW,OAAQtE,EAAW,OAAS,QAG7B,UAAAA,IAAaC,IACZ,SAAC,MACCmD,GAAI,CAAE8T,IAAK,GAAK5O,GAAI,KACpBsB,QAAS,IAAM3D,EAAS,kBACxB0C,QAAS,UACTuI,MAAM,SAAC4J,GAAA,EAAe,OAIxBtB,IACA,UAACuB,GAAA,EAAK,CAAChS,UAAW,MAAO3E,WAAY,SAAUf,MAAO,OACpD,oBAACyJ,EAAA,GACCnE,QAAQ,UACRoE,IAAK3G,EAAgB,CACnBzC,eAAgB,MAAAF,OAAA,EAAAA,EAAmBE,eACnCE,YAAa,MAAAJ,OAAA,EAAAA,EAAmBI,cAElCT,GAAI,CACFC,MAAOrD,EAAW,OAAS,OAC3BsE,OAAQtE,EAAW,OAAS,OAC5BsI,GAAI,IACJhF,QAAStD,GAAYC,EAAgB,OAAS,UAGjD2Z,KACA5Z,GACC,UAAC+a,GAAA,EAAK,CAAChS,UAAW,MAAO0D,IAAK,EAC5B,oBAAC,GAAoB,CAAC9N,kBACtB,SAAC,MACCqc,SAAO,EACP5Q,MAAM,OACNR,QAAS,IAAM1J,GAAkBD,GACjC0I,QAAQ,YACRuI,KACEjR,GACE,SAACgb,GAAA,GACC7X,GAAI,CAAEgH,MAAO4J,EAAgB5L,KAAK8S,iBAGpC,SAACC,GAAA,GACC/X,GAAI,CAAEgH,MAAO4J,EAAgB5L,KAAK8S,sBAO5C,sBACE,oBAAC/X,EAAA,GACCG,QAAS,OACTkH,cAAe,MACfrG,eAAgB,WAEhB,mBAAC,GAAoB,CAACxF,oBAGxB,SAACwE,EAAA,EAAG,CAACE,MAAO,QACV,mBAAC,OACCsF,QAAQ,QACRvF,GAAI,CACFuG,GAAI,EACJI,WAAY,KAEdM,KAAM,MAAAtH,EAAAA,EAAe,aAOhCyW,IACC,UAACuB,GAAA,EAAK,CAAChS,UAAW,MAAO3E,WAAY,SAAUf,MAAO,OACpD,oBAAC,OACCA,MAAOrD,EAAW,GAAK,GACvBsE,OAAQtE,EAAW,GAAK,GACxBoD,GAAI,CACFkF,GAAI,IACJhF,QAAStD,GAAYC,EAAgB,OAAS,UAGjD2Z,KAEA5Z,GACC,UAAC+a,GAAA,EAAK,CAAChS,UAAW,MAAO0D,IAAK,EAC5B,oBAAC,GAAoB,CAAC9N,kBACtB,SAAC,MACCqc,SAAO,EACP5Q,MAAM,OACNR,QAAS,IAAM1J,GAAkBD,GACjC0I,QAAQ,YACRuI,KACEjR,GACE,SAACgb,GAAA,GACC7X,GAAI,CAAEgH,MAAO4J,EAAgB5L,KAAK8S,iBAGpC,SAACC,GAAA,GACC/X,GAAI,CAAEgH,MAAO4J,EAAgB5L,KAAK8S,sBAO5C,sBACE,oBAAC/X,EAAA,GACCiY,GAAI,EACJvB,KAAM,EACNvW,QAAS,OACTkH,cAAe,MACfrG,eAAgB,WAEhB,mBAAC,OACC8E,eAAgBvB,GAChBwB,aAAc,GACdC,YAAa,GACbC,SAAS,KACTC,QAAQ,GACRC,UAAW,GAEN,kBAAA3K,EAAa2B,sBAAb,IAA8BiJ,QAA9B,EAAwC,GAAK,GAC9CC,YAEJpG,GAAI,CACFqG,OAAQ,oBACRC,aAAc,MACdhF,GAAI,MACJiF,GAAI,OAENC,QAAS,IACPnD,GAA0BD,QAIhC,SAAC,GAAoB,CAAC7H,kBAEtB,SAAC,OACCgK,QAAQ,QACRvF,GAAI,CACFC,MAAO,QACPsG,GAAI,EACJI,WAAY,KAEdM,KAAM,MAAAtH,EAAAA,EAAe,gBAQlCpE,IACC,SAAC,MACCwM,SAAU7E,EACV8E,YAAa5D,GACbrC,MAAOiC,GACPiE,iBAAkB/D,GAClBgE,kBAAmB9D,GACnBnI,YAAa,SAAAV,EAAaU,aAAb,EAA4B,GACzCkM,UAnQ6BjF,GAmQSA,GAlQvB,OAAAuB,GAAAlJ,EAAa0B,oBAAb,EAAAwH,GAA4BE,MAC9CtH,GAAiBA,EAAaV,SAAWuG,MAEnB,QAClB,WA+PDkF,YAlTuB,CAC7BlF,IA5HJ,IAAAuB,EAAAC,EAAA2D,EA8HI,MAIME,EAFW,IAFK,OAAA9D,EAAAlJ,EAAa0B,eAAbwH,EAA8B,MAC5B,OAAAC,EAAAnJ,EAAa2B,iBAAbwH,EAAgC,IAGvBC,MAC9BnI,GAAYA,EAAQG,SAAWuG,IAG5BsF,EAAwB,MAAAD,OAAA,EAAAA,EAAiB5L,OAEzC8L,EAAe,OAAAJ,EAAA9M,EAAagJ,YAAb,EAAA8D,EAAoB1D,MACtCH,GAASA,EAAK9H,KAAO8L,IAExB,OAAO,SACFD,GADE,CAELG,SAAU,CACRlM,QAAS,MAAA+L,OAAA,EAAAA,EAAiB/H,QAC1BgE,KAAM,MAAAiE,OAAA,EAAAA,EAAcjI,UAExB,EA4RmBmI,CAAuBzF,GACpC0F,eA1RiC,CACvC1F,IArJJ,IAAAuB,EAAAC,EAAA2D,EAuJI,MAIMQ,EAFc,IAFK,OAAApE,EAAAlJ,EAAa0C,kBAAbwG,EAAiC,MAC/B,OAAAC,EAAAnJ,EAAauN,oBAAbpE,EAAmC,IAGvBC,MACpCoE,GAAeA,EAAWpM,SAAWuG,IAGlC8F,EAAkB,OAAAX,EAAA,MAAAQ,OAAA,EAAAA,EAAoBjF,aAApB,EAAAyE,EAA4BjL,KAAKmK,GACpCA,EACDO,YAEpB,MAAO,CACLlE,OAAQ,MAAAoF,EAAAA,EAAmB,GAC3BD,WAAYF,EAAqB,CAACA,GAAqC,GACxE,EAwQqBI,CAAiC/F,KAIpDkT,GAAW7a,IACV,UAAC,MACCyM,YAAa1E,GACbxB,YAAasB,EACbrB,MAAO,SAAAxG,EAAawG,OAAb,EAAsB,GAC7BmH,QAAS,CACP,CACExB,MAAOxD,GACPiF,OAAQ7F,GACR0D,MAAO,OACPzB,QAAS,cAIb,oBAACK,EAAA,EAAU,CAACtE,GAAI,EAAI,qBACnB,SAAA/F,EAAa0B,oBAAb,IAA4BG,KAAKC,IAjc5C,IAAAoH,EAkcY,MAAM2E,EAAY,OAAA3E,EAAAlJ,EAAagJ,YAAb,EAAAE,EAAoBE,MACnCH,GAASnH,EAAaV,SAEzB,OACE,UAAC,OAECqD,GAAI,CACFE,QAAS,OACTkH,cAAe,MACfnH,MAAO,OACPc,eAAgB,aAChBC,WAAY,SACZqI,IAAK,IACLC,cAAe,OACfxE,gBAAiB,cACjByE,OAAQ,UACR,yBAA0B,CACxBzE,gBAAiB8L,EAAgBpH,WAAWC,SAE9CnI,GAAI,IACJC,GAAI,GAENgE,QAAQ,OACRiB,QAAS,IAAMnC,GAAuBhH,EAAaV,QAEnD,oBAAC+M,EAAA,GACCC,IAAK3G,EAAgB,CACnBzC,eAAgBlD,EAAamD,QAC7BC,YAAa,MAAA2I,OAAA,EAAAA,EAAW5I,UAE1BR,GAAI,CACFC,MAAO,GACPiB,OAAQ,OAGZ,SAAC,MAAI,CAAC+F,KAAM5J,EAAaiD,YAAaiF,QAAQ,eAC9C,SAACkC,EAAA,GACCC,MAAOlE,GACPxD,GAAI,CACFgH,MAAO4J,EAAgB5L,KAAKC,KAC5BH,gBAAiB,SAAQ,QACvB8L,EAAgB5L,KAAKC,eAEvB2E,SAAU,OACV1I,OAAQ,YAvCP,GAAG7D,EAAaX,KA0CvB,IAIH,SAAAnB,EAAa2B,sBAAb,IAA8BE,KAAKG,IArf9C,IAAAkH,EAsfY,MAAMoF,EAAc,OAAApF,EAAAlJ,EAAagJ,YAAb,EAAAE,EAAoBE,MACrCH,GAASjH,EAAeZ,SAAW6H,EAAK9H,KAG3C,OACE,UAAC,OAECsD,GAAI,CACFE,QAAS,OACTkH,cAAe,MACfrG,eAAgB,aAChBC,WAAY,SACZqI,IAAK,IACLC,cAAe,OACfxE,gBAAiB,cACjByE,OAAQ,UACRjI,GAAI,IACJC,GAAI,EACJtB,MAAO,OACP,yBAA0B,CACxB6E,gBAAiB8L,EAAgBpH,WAAWC,UAGhDlE,QAAQ,OACRiB,QAAS,IAAMnC,GAAuB9G,EAAeZ,QAErD,oBAAC+M,EAAA,GACCC,IAAK3G,EAAgB,CACnBzC,eAAgBhD,EAAeiD,QAC/BC,YAAa,MAAAoJ,OAAA,EAAAA,EAAarJ,UAE5BR,GAAI,CACFC,MAAO,GACPiB,OAAQ,OAGZ,SAAC,MAAI,CAAC+F,KAAM1J,EAAe+C,YAAaiF,QAAQ,gBA9B3C,GAAGhI,EAAeb,KA+BzB,UAlXwB,IAACwG,GAzKvCuB,EAgiBI,E,kXCzgBG,MAAMwT,GAAqD,EAChE1c,mBAxBF,cA0BE,MAAMsH,GAAW,UACXC,GAAQ,EAAAC,EAAA,MACR,eAAEiI,IAAmB,UAGrBkN,GAAmB,UACvB,SAAuB3c,EAAamB,KAGhCmB,GACJ,MAAAtC,OAAA,EAAAA,EAAcuC,4BAA6B,EAAAC,kBAAA,OAEvC,YAAEzB,IAAgB,QAAY,CAAEC,aAAa,KAC5CC,GAAWF,IACZG,EAAY,MAAAD,OAAA,EAAAA,EAASE,GACrBC,EAAS,MAAAH,OAAA,EAAAA,EAASG,OAElBwb,EAAWnN,IAAmBzP,EAAamB,GAE3Cc,EAAU4a,QACd,SAAA7c,EAAa0B,oBAAb,IAA4B0H,MAAM0C,GAAUA,EAAM3K,KAAOD,KAErDuC,GAAa,OAAc,CAC/BC,KAAMzB,EAAU,QAAU,UAC1BjC,eACAoB,WAGI0b,EAAc,wBAAA9c,OAAA,EAAAA,EAAc0B,oBAAd,IAA6BkJ,QAA7B,EAAuC,EACrDmS,EAAgB,wBAAA/c,OAAA,EAAAA,EAAc2B,sBAAd,IAA+BiJ,QAA/B,EAAyC,EAEzD9F,EAAoBrB,EAAWpB,GAAG,IAClC,gBAAEoF,IAAoB,IAAAC,mBAE5B,OACE,UAAC+L,EAAA,GACChP,GAAI,IACFgH,MAAOlE,EAAMiC,QAAQkC,KAAKsR,QAC1BjP,cAAe,OACfrJ,MAAO,OACPC,QAAS,OACTa,eAAgB,gBAChBC,WAAY,SACZM,GAAI,EACJC,GAAI,IACJiX,GAAI,EACJ1T,gBAAiBqT,EACbrV,EAAMiC,QAAQmC,UAAUuR,KACxB,cACJlP,OAAQ,UACR,yBAA0B,CACxBzE,gBAAiBhC,EAAMiC,QAAQmC,UAAUuR,KACzCzR,MAAO,YAELmR,GAAY,CAAEnR,MAAO,YAE3BR,QAAS,IAAM3D,EAAS,KAAKtH,EAAamB,MAC1C6I,QAAQ,OACRiM,WAAS,EAET,qBAACzR,EAAA,GACCC,GAAI,CACFC,MAAO,OACPC,QAAS,OACTa,eAAgB,aAChBC,WAAY,UAGb,UAAAnD,GACC,SAAC6a,GAAA,GACC1Y,GAAI,CACFkF,GAAI,EACJ,oBAAqB,CACnB8B,MAAO,UACPV,aAAc,MACdxB,gBAAiB,YAGrB6T,aAAcN,EAAcC,EAC5BM,aAAc,CACZC,SAAU,SACVC,WAAY,SAGd,mBAAC,MAAW,CAAC7Y,MAAO,GAAIiB,OAAQ,QAGlC,SAACwI,EAAA,GACCC,IAAK3G,EAAgB,CACnBzC,eAAgB,MAAAF,OAAA,EAAAA,EAAmBG,QACnCC,YAAa,MAAAJ,OAAA,EAAAA,EAAmBI,cAElCT,GAAI,CAAEkB,OAAQ,OAAQjB,MAAO,OAAQiF,GAAI,KACzCK,QAAQ,aAGZ,SAACxF,EAAA,EAAG,CAACC,GAAI,CAAE+Y,aAAc,WAAYC,SAAU,UAC5C,SAAAzd,IACC,SAACqK,EAAA,EAAU,CAACL,QAAQ,YAAY0T,QAAM,EACnC,SAAApb,EACG,MAAAtC,OAAA,EAAAA,EAAcwG,MACd,MAAA1B,OAAA,EAAAA,EAAmBC,mBAK9B4X,IACC,SAACnY,EAAA,GACCC,GAAI,CACFsG,aAAc,MACdrG,MAAO,GACPiB,OAAQ,GACR4D,gBAAiB,iBAIzB,E,wcCjHG,MAAMoU,GAET,EAAG3d,mBAEL,MAAM,gBAAEW,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KAGf,aACJ+N,EAAY,QACZC,EACAC,WAAW,OAAEC,EAAM,QAAEwC,GAAS,MAC9BuM,IACE,QAAqB,CACvB7O,KAAM,WACN8O,cAAe,CACb,CAAC,YAAsB,GACvB,CAAC,cAAwB,KACzB,CAAC,gBAAyB,KAGxB7O,EAAeL,EAGfrH,GAAW,UACX9G,GAAmB,IAAAC,iBACnB,eAAEqd,EAAc,SAAEC,IAAa,QAAS,CAC5CC,eAAgB,2BAA2Bxd,OAGvC,uBAAEwR,EAAsB,iBAAE7C,IAAqB,QAAiB,CAAC,GAEjEwB,EAAYmN,KAAoB9L,IAGhC5C,EAA8CC,IAAS,O,OAAA,E,EAAA,K,EAAA,YAC3D,MAA8B,EAAAA,GAAtB4O,SAAAA,GAAsB,EAATC,E,iKAAA,CAAS,EAAT,CAAb,cAEA7O,KAAM8O,SAAkCJ,EAAS,CACvDpO,OAAQ,OACRC,IAAK,SACLP,M,EAAM,MACD6O,G,EADC,CAEJE,WAAYH,EACZzd,mBACAiP,eAAgBzP,EAAamB,I,6BAI3B8O,QAAQC,IAAI,CAChB6N,EAAS,CAAEnO,IAAK,2BAA2BpP,MAC3C2O,EAAiB,CAAES,IAAK,qBAGrBuO,EAKL7W,EACE,kBAAkBtH,EAAamB,YAAYgd,EAAwB,GAAGhd,MALtEkd,QAAQ5G,MAAM,uBAOlB,E,yMAAA,EAGM6G,EAA4B,CAChCnS,MACEtL,EAAauE,cAAcmZ,MAAMC,YAAYC,6BAC1CC,uBACL1U,QAAS,YACTyB,MAAO,OACPmC,OAAQc,EAAaU,GACrBqB,iBAAiB,EACjBC,UAAWW,EACXd,YAAa,+CAGf,OACE,UAAC/L,EAAA,GACCC,GAAI,CACFE,QAAS,OACTkH,cAAe,SACfrG,eAAgB,gBAChB0V,KAAM,EACNxW,MAAO,OACP8J,EAAG,EACH8J,GAAI,GAEN,UAAQ,qCAER,oBAACqG,GAAA,GACCjQ,aAAcA,EAAaU,GAC3BT,QAASK,EACTH,SACA+O,WAEF,SAACpZ,EAAA,EAAG,CAACC,GAAI,CAAE0G,GAAI,EAAGxG,QAAS,OAAQa,eAAgB,YACjD,mBAACoZ,GAAA,GACCjO,YACAkO,aAAcP,GACT,gBAAgBA,EAAWnS,aAGtC,E,gBC7HG,SAAS2S,KACd,MAAMvX,GAAQ,EAAAC,EAAA,KACRF,GAAW,WACX,eAAEmI,IAAmB,WACrB,gBAAE9O,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KAEf,wBACJoe,EAAuB,8BACvBC,EAA6B,sCAC7BC,GACEpe,EAAauE,cAAcmZ,MAAMC,YAAYU,wBAE3CvR,EAA+B,CACnC,CACExB,MAAO8S,EACPrR,OAAQ,IAAMtG,EAAS,kBAAkBmI,kBACzChE,MAAO,OACP,UAAW,gDAIf,OACE,SAAC0T,GAAA,IACC3Y,MAAOuY,EACP3L,SAAU4L,EACVzM,KAAM,EAAA6M,UACNC,UAAW9X,EAAMiC,QAAQwO,QAAQtO,KACjCiE,UACA2R,kBAAmB,CACjBC,UAAW,OACXzU,OAAQ,OACR0U,OAAQ,SACR7a,QAAS,OACTa,eAAgB,SAChB,CAAC+B,EAAMkY,YAAYC,KAAK,OAAQ,CAC9Bhb,MAAO,OACP8a,OAAQ,KAKlB,C,sZCrBO,MAAMG,GAA0D,EACrEpB,YAGA,MAAM,gBAAE5d,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IACf2G,GAAW,WACX,eAAEmI,EAAc,OAAEmQ,IAAW,WAC7B,+BAAEC,IAAmC,IAAAC,YACzC,MAIIvY,GAAQ,EAAAC,EAAA,KACRnG,GAAW,UAEX0e,EAAaxB,EAAQA,EAAM3T,OAAS,EACpCoV,EACW,IAAfD,EACI,GAAGA,KAAclf,EAAauE,cAAcmZ,MAAMC,YAAYyB,cAAcC,kCAC5E,GAAGH,KAAclf,EAAauE,cAAcmZ,MAAMC,YAAYyB,cAAcE,qCAM5EC,EAAuB,KAC3B9Y,EAAS,kBAAkBmI,iBAA8B,EAGrD4Q,EAAeC,IACnBT,GAA+B,IAAMS,GAAS,EA2ChD,OACE,UAAC9b,EAAA,GACCC,GAAI,CACFC,MAAOrD,EAAW,OAAS,MAC3Bkf,SAAUlf,EAAW,QAAU,MAC/Bke,UAAW,OACX5a,QAAS,OACTkH,cAAe,SACfrG,eAAgB,gBAChBgb,YAAa,iCAEf,UAAQ,oCAER,qBAAChc,EAAA,GACCC,GAAI,CACFE,QAAS,OACTa,eAAgB,gBAChBC,WAAY,SACZM,GAAI,IACJ0a,YAAa,CAAEC,GAAI,EAAGC,GAAI,GAC1BC,aAAc,CAAEF,GAAI,KAAMC,GAAI,MAC9BrN,aAAc,iCAGhB,oBAACjJ,EAAA,GACCoB,MAAM,iBACNzB,QAAQ,QACR,UAAQ,qCAEP,SAAAgW,KAEH,SAACa,GAAA,GACCpc,GAAI,CAAE+J,EAAG,KACTvD,QAAS,IAAMoV,EAAYD,GAC3B,UAAQ,0CAER,mBAACU,GAAA,EAAG,CAACrV,MAAM,WAAW4C,SAAS,gBAGnC,SAAC7J,EAAA,GACCC,GAAI,CACFsc,SAAU,EACVpc,QAAS,OACTkH,cAAe,SACfjG,UAAW,QAEb,UAAQ,0BAEP,SAtFL2Y,EAAM1c,KAAI,CAACmf,EAAM/U,KACf,UAACwH,EAAA,GACCzJ,QAAQ,OAERiB,QAAS,IAAMoV,GAAY,KAAMY,OAlBfrB,EAkB8BoB,EAAK7f,QAjBzDmG,EAAS,kBAAkBmI,WAAwBmQ,KAD9B,IAACA,CAkBsC,IACxDnb,GAAI,IACFE,QAAS,OACTa,eAAgB,gBAChBC,WAAY,SACZO,GAAI,CAAE0a,GAAI,EAAGC,GAAI,GACjB5a,GAAI,EACJgF,aAAc,EACdgD,cAAe,oBACXiT,EAAK7f,KAAOye,GAAU,CACxBrW,gBAAiB,IAAG,SAAQhC,EAAMiC,QAAQC,KAAKC,KAAM,QAGzD,UAAS,qBAAqBsX,EAAK7f,KAEnC,oBAACkJ,EAAA,GACCL,QAAQ,QACRyB,MAAM,eACNhH,GAAI,CACFkF,GAAI,EACJuX,WAAY,SACZ1D,aAAc,WACdC,SAAU,UAGX,SAAAuD,EAAKxa,SAGR,SAAC2a,GAAA,EAAM,CAAC1V,MAAM,WAAWhH,GAAI,CAAE2c,QAASJ,EAAK5C,UAAY,EAAI,QA7BxD,mBAAmBnS,UAqF1B,SAACwH,EAAA,GACCzJ,QAAQ,WACRyB,MAAM,OACNiI,WAAW,SAAC2N,GAAA,EAAI,IAChB5c,GAAI,CACF6c,GAAI,CAAEZ,GAAI,EAAGC,GAAI,GACjB1D,GAAI,EACJ7R,WAAY,IACZ8V,WAAY,UAEdjW,QAAS,IAAMoV,EAAYD,GAC3B,UAAQ,6CAGN,SAAAvf,EAAauE,cAAcmZ,MAAMC,YAAYyB,cAC1CsB,wCAGT,E,4nBC1IG,MAAMC,GAA0D,EACrExhB,mBAjCF,cAmCE,MAAM,MAAEgJ,IAAU,QAAS,CAAEhI,aAAa,IACpCiI,EAAOD,IAAQ3G,GAAG,IAEjB+R,EAAmBC,IAAwB,IAAA7S,WAAS,GAGrD8F,GAAW,WACX,gBAAE3G,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IAEfoY,EACJ,2BAAAlY,EAAasG,cAAb,IAAsBe,aAAtB,IAA8ByJ,qBAA9B,EAAqD,SAEjD8P,GAAS,UAETC,GAAc,IAAAC,UAAQ,KAlD9B,IAAAzY,EAoDI,OAD0B,OAAAA,EAAA,MAAAlJ,OAAA,EAAAA,EAAcue,OAAdrV,EAAuB,IACxBE,MAAM4X,GAASA,EAAK7f,KAAOsgB,EAAO7B,QAAO,GACjE,CAAC6B,EAAO7B,OAAQ,MAAA5f,OAAA,EAAAA,EAAcue,QAE3B/d,GAAmB,IAAAC,iBACnB,eAAEqd,EAAc,SAAEC,IAAa,QAAS,CAC5CC,eAAgB,2BAA2Bxd,OAGvC,uBAAEwR,EAAsB,iBAAE7C,IAAqB,QAAiB,CACpEnO,aAAa,IAGT2P,EAAYqB,KAA4B8L,KAExC,aACJpP,EAAY,QACZC,EACAC,WAAW,OAAEC,EAAM,QAAEwC,GAAS,MAC9BuM,IACE,QAAqB,CAAE7O,KAAM,aAC3BC,EAAeL,EAGftN,GAAW,UAKX0L,EAAW,IAHK,SAAA/M,EAAa0B,eAAb,EAA8B,MAC5B,SAAA1B,EAAa2B,iBAAb,EAAgC,IAIlDigB,EAAgB7U,EAAS3D,MAC5BtH,GAAiBA,EAAaV,UAAW,MAAAsgB,OAAA,EAAAA,EAAaG,WAGnDC,EAAuB/U,EAAS3D,MACnCnI,GAAYA,EAAQG,UAAW,MAAAsgB,OAAA,EAAAA,EAAaK,iBAGzCC,GACJ,MAAAN,OAAA,EAAAA,EAAaO,aACb,SAAO,EAAAC,GAAA,GAAOR,EAAYO,WAAY,eAElCE,GACJ,MAAAT,OAAA,EAAAA,EAAale,aACb,SAAO,EAAA0e,GAAA,GAAOR,EAAYle,WAAY,eAElC4e,EACJV,GACA,GAAG7gB,EAAauE,cAAcmZ,MAAMC,YAAYC,6BAA6B4D,YAAYC,qCAAqC,MAAAR,OAAA,EAAAA,EAAsB7a,aAAa,MAAA6a,OAAA,EAAAA,EAAsBS,YAAY1hB,EAAauE,cAAcmZ,MAAMC,YAAYC,6BAA6B4D,YAAYG,qCAAqCR,IAE1TS,EACJf,GACA,GAAG7gB,EAAauE,cAAcmZ,MAAMC,YAAYC,6BAA6B4D,YAAYK,gCAAgC,MAAAd,OAAA,EAAAA,EAAe3a,aAAa,MAAA2a,OAAA,EAAAA,EAAeW,YAAY1hB,EAAauE,cAAcmZ,MAAMC,YAAYC,6BAA6B4D,YAAYM,gCAAgCR,IAElSS,GAAc,MAAAlB,OAAA,EAAAA,EAAaG,YAAY,MAAA5Y,OAAA,EAAAA,EAAM9H,IAE7CiO,EAA8CC,GAAS,4BAC3D,MAA8BnG,EAAAmG,GAAtB4O,SAAAA,GAAsB/U,EAATgV,E,iKAAA,CAAShV,EAAT,CAAb,a,cAEF6U,EAAS,CACbpO,OAAQ,QACRC,IAAK,UAAU,MAAA8R,OAAA,EAAAA,EAAavgB,KAC5BkO,M,EAAM,MACD6O,G,EADC,CAEJE,WAAYH,G,qBAIV9O,EAAiB,CAAES,IAAK,kBAChC,IAEM4E,EAAyB,KAC7BH,GAAqB,EAAM,EAcvB1G,EAA2B,IAC3BiV,EACA,CACE,CACEzW,MAAOtL,EAAasG,QAAQe,OAAOyM,oBACnC3K,QAAS,OACTyB,MAAO,QACPmC,OAAQ,IAAMyG,GAAqB,GACnC5D,iBAAiB,EACjBF,YAAa,gDAGjB,GACJ,CACEpE,MACEtL,EAAauE,cAAcmZ,MAAMC,YAC9BC,6BAA6BC,uBAClC1U,QAAS,YACTyB,MAAO,OACPmC,OAAQc,EAAaU,GACrBqB,iBAAiB,EACjBC,UAAWW,EACXd,YAAa,gDAIXsE,EAAsC,CAC1C,CACE1I,MAAO4M,EACPnL,OAAQ4G,EACR/I,MAAO,OACPzB,QAAS,WACTuG,YAAa,6DAEf,CACEpE,MAAOtL,EAAasG,QAAQe,OAAOyM,oBACnC/G,OA/CqB,IAAY,kCAC7BmQ,EAAS,CACbpO,OAAQ,SACRC,IAAK,UAAU,MAAA8R,OAAA,EAAAA,EAAavgB,uBAAuBX,YAG/C2O,EAAiB,CAAES,IAAK,mBAE9BtI,EAAS,kBAAkBtH,EAAamB,WAC1C,IAuCIsK,MAAO,QACPzB,QAAS,YACTyG,iBAAiB,EACjBF,YAAa,8DAIjB,OACE,UAAC/L,EAAA,GACCC,GAAI,CACFE,QAAS,OACT6J,EAAG,EACH8J,GAAI,EACJ5T,MAAO,QAGT,qBAACF,EAAA,GACCC,GAAI,CACFE,QAAS,OACTkH,cAAe,SACfrG,eAAgB,gBAChB0V,KAAM,GAGR,oBAAC,EAAAyD,gBAAA,CACCjQ,aAAcA,EAAaU,GAC3BT,QAASK,EACTH,SACAkT,cAAeK,EACfS,UAAWJ,EACX7E,QACAoD,KAAMU,KAER,SAACld,EAAA,GACCC,GAAI,CACF0G,GAAI,EACJxG,QAAS,OACTkH,cAAexK,EAAW,SAAW,MACrCmE,eAAgBod,EAAc,gBAAkB,YAGjD,SAAAjV,EAAQ9L,KAAK+L,IACZ,SAAC,MACC+C,YACAkO,aAAcjR,GACT,gBAAgBA,EAAOzB,iBAMpC,SAAC,MACCM,YAAa+H,EACb1K,KAAMsK,EACN5N,MACE3F,EAAauE,cAAcmZ,MAAMC,YAC9BC,6BAA6BqE,kBAC7BC,sBAELhc,YACElG,EAAauE,cAAcmZ,MAAMC,YAC9BC,6BAA6BqE,kBAC7BE,4BAELrV,QAASkH,EACTlE,YACA,UAAQ,6CACR4C,sBAAsB,mEAE1B,E,yZC1NG,MAAM0P,GAAuD,EAClEjjB,mBAGA,MAAOkjB,EAAkBC,IAAuB,IAAA3hB,WAAS,GAKnD8F,GAAW,WAEX,gBAAE3G,IAAoB,IAAAC,uBAAsB,CAAC,GAE7CC,EAAeF,IACfyU,GAAoB,EAAA5N,EAAA,KACpB6N,GAAkB,QACtB,uBACAD,EAAkB5L,SAuBpB,OACE,sBACE,qBAAC+L,EAAA,EAAa,CAAChO,O,EAAO,MAAK,gB,EAAL,CAAqBiC,QAAS6L,G,aAClD,oBAAC,OACC/L,KAAK,KACLkM,MAAM,OACN9K,QAAS,CACPV,QAAS,KACTyL,UAAW,IACX/J,KAAM7K,EAAauE,cAAcmZ,MAAM6E,aACpCC,mBACH,UAAW,4BAEb5e,GAAI,CACF2G,WAAY,IACZD,GAAI,MAGR,SAACd,EAAA,GACCL,QAAQ,UACRvF,GAAI,CAAE2G,WAAY,KAClBK,MAAM,gBACN,UAAQ,iCAGN,SAAA5K,EAAauE,cAAcmZ,MAAM6E,aAC9BE,4BAGP,SAAC9e,EAAA,GACCyG,QApCiB,KACvBkY,GAAoB,GAEpB7b,EAAS,kBAAkBtH,EAAamB,kBAAkB,EAkCpDsD,GAAI,CACF0G,GAAI,EACJ8R,GAAI,IACJvY,MAAO,OACP6a,UAAW,OACXxU,aAAc,MACdD,OAAQ,gCACRyY,WAAY,mBACZ,SAAU,CACRzY,OAAQ,6BACRkD,OAAQ,SAGZ,UAAQ,qCAER,mBAAC3D,EAAA,GACC5F,GAAI,CAAE6T,GAAI,IAAKtS,GAAI,GACnBgE,QAAQ,QACRyB,MAAM,gBAGJ,SAAA5K,EAAauE,cAAcmZ,MAAM6E,aAC9BI,8BAKT,SAACC,GAAA,GACC,UAAQ,iCACRxN,WAAS,EACTjM,QAAQ,WACRyB,MAAM,OACNhH,GAAI,CACF2G,WAAY,IACZxB,GAAI,EACJ5D,GAAI,GACJD,GAAI,GAENkF,QAjFgB,KACtBkY,GAAoB,GAEpB7b,EAAS,kBAAkBtH,EAAamB,WAAW,EAiF3C,SAAAN,EAAauE,cAAcmZ,MAAM6E,aAC9BM,qCAIT,UAAC,KAA8B,CAC7B,oBAAC,MACC1jB,eACAwM,OAAQ0W,EACRzW,YAnGsB,KAC5B0W,GAAoB,GAEpB7b,EAAS,kBAAkBtH,EAAamB,KAAK,KAkGzC,SAAC,KAAmC,U,OAExC,E,oDC9FG,MAAMwiB,GAET,EAAG3jB,eAAcyM,kBA3DrB,YA6DE,MAAM,gBAAE9L,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KAGf,gBAAEijB,IAAoB,UACtB3jB,GAAW,WACXqH,GAAW,UACX9G,GAAmB,IAAAC,iBACnB,iBAAE0O,EAAgB,uBAAE6C,IAA2B,QAAiB,CACpEhR,aAAa,KAIT,aACJ0N,EAAY,QACZC,EACAC,WAAW,OAAEC,EAAM,QAAEC,GAAS,SAC9B+U,IACE,QAAwB,CAAE9U,KAAM,aAC9BC,EAAwBL,GAGxB,YAAE5N,IAAgB,QAAY,CAAEC,aAAa,KAC5CC,GAAWF,IACZW,EAAgB,SAAA1B,EAAa0B,eAAb,EAA8B,GAC9CC,EAAkB,SAAA3B,EAAa2B,iBAAb,EAAgC,IAGlD,YAAEmiB,EAAW,kBAAEC,IAAsB,QAAY,CAAC,GAElDC,EAAkBhkB,EAAauW,SAE/B7V,EAAcV,EAAaU,aAC3B,WAAEoC,IAAe,IAAAC,+BAA8B,CAAC,GAChDG,EAAUJ,EAAWpC,IAE3B,IAAAe,YAAU,KACRmiB,EACE,8DACA,CACEK,SAAS,IAAApgB,oCAEZ,GACA,CAAC+f,EAAiBtc,KAErB,IAAA7F,YAAU,KACRmiB,EACE,8DACA,CAAEK,SAAS,IAAApgB,oCACZ,GACA,CAAC+f,IAGJ,MAAMxf,EAAc,eAAAlB,OAAA,EAAAA,EAASmB,eAAT,IAAmBC,aAkBjC8K,EAAiDC,IAAS,O,OAAA,E,EAAA,K,EAAA,YAC9D,MAAM,SAAE6U,GAAaC,KAAKC,iBAAiBC,mBAIrC,KAAE3I,EAAI,UAAE4I,EAAS,QAAEC,EAAO,kBAAEC,EAAiB,SAAEC,GAAapV,GAE3DqV,EAAYC,GAAgBL,EAAUM,MAAM,KAC7CC,GAAW,EAAA3C,GAAA,GAAOxG,GACxBmJ,EAASC,SAASC,SAASL,GAAaK,SAASJ,IAEjD,MAAOK,EAAUC,GAAcV,EAAQK,MAAM,KACvCM,GAAS,EAAAhD,GAAA,GAAOxG,GACtBwJ,EAAOJ,SAASC,SAASC,GAAWD,SAASE,IAE7C,MAAME,EAAWjB,GAAW,EAAAkB,GAAA,GAAeP,EAAUX,GAAYW,EAC3DQ,EAASnB,GAAW,EAAAkB,GAAA,GAAeF,EAAQhB,GAAYgB,EAyB7B,mBAvBDpB,EAAY,CACzCnU,OAAQ,OACRC,IAAK,8BAA8BpP,IACnC6O,KAAM,CACJoD,KAAMpD,EAAK7I,MACXhG,mBACAE,cACA+O,eAAgBzP,EAAamB,GAC7B4F,YAAa,GACbue,oBAAqB,IAChB3jB,EAAgBE,KAAKoV,IAhKlC,IAAA/N,EAgK8C,cAAAA,EAAA+N,EAAQ9V,IAAR+H,EAAc,SAC/CxH,EAAcG,KAAKiK,IAjKhC,IAAA5C,EAiK0C,cAAAA,EAAA4C,EAAM3K,IAAN+H,EAAY,OAE9Cqc,MAAOJ,EACPK,IAAKH,EACLI,SAAUvB,EACVwB,qBAAsB7I,QAAQ2H,GAC9BA,oBACAmB,aAAc1kB,EAAQE,GACtBsjB,eAIiBjV,OACnBvP,GACE,QAAa,CACXua,SAAU,QACVC,QACE5Z,EAAauE,cAAcmR,SAASqP,kBACjC9L,iBACLa,QAAS,QAhEoB,EACnC6J,EACAC,KAEAb,EACE,iEACA,CACE,gBAAiBI,EAAgBpZ,OAAS,EAC1C,qBAAsBiS,QAAQ2H,GAC9B,+BACE,EAAAqB,GAAA,GAA6BrB,GAC/BsB,SAAUjJ,QAAQ4H,IAErB,EAuDCsB,CAA6BvB,EAAmBC,SAE1CxU,QAAQC,IAAI,CAChB4T,EAAY,CAAElU,IAAK,cACnBT,EAAiB,CAAES,IAAK,qBAG1B3P,GACE,QAAa,CACXua,SAAU,UACVC,QACE5Z,EAAauE,cAAcmR,SAASqP,kBACjClL,mBACLC,QAAS,OAIblO,IAEJ,E,yMAAA,EAEMyG,EAAgD,CACpD,CACE/G,MAAO,SAAAtL,EAAasG,QAAQe,OAAOyJ,qBAA5B,EAAmD,SAC1DlG,MAAO,OACPzB,QAAS,WACT4D,OAAQnB,EACR8D,YAAa,mDAEf,CACEpE,MACEtL,EAAauE,cAAcmR,SAASqP,kBACjCI,kCACLhc,QAAS,YACTyB,MAAO,OACPmC,OAAQc,EAAaU,GACrBqB,iBAAiB,EACjBC,UAAW5B,EACXyB,YAAa,oDAIjB,OACE,SAAC,MACC/J,MAAO3F,EAAauE,cAAcmR,SAASqP,kBAAkBpf,MAC7DO,YACElG,EAAauE,cAAcmR,SAASqP,kBAAkBxS,SAExD3G,cACAkB,QAASuF,EACTvC,UAAWoT,KAAuB/R,IAClC,UAAQ,oCACRuB,sBAAsB,sDAEtB,mBAAC,EAAA0S,mBAAA,CACCvX,aAAcA,EAAaU,GAC3BT,QAASK,EACTH,SACAC,UACAiV,mBAAmB,EACnBlT,cAAe,IAAMvJ,GAAU,GAC/Buc,WACAqC,aACE9hB,GAAc,KAAA+hB,iBAAgBnmB,EAAcoE,GAAe,GAE7D0M,aAAW,KAEf,E,gNCrNG,MAAMsV,GAAgE,EAC3EpmB,eACAyM,kBAxCF,QA2CE,MAAOuE,EAAoBC,IAAyB,IAAAzP,WAAS,IACtD4S,EAAmBC,IAAwB,IAAA7S,WAAS,IAGrD,aACJkN,EAAY,QACZC,EACAC,WAAW,OAAEC,EAAM,QAAEC,EAAO,QAAEuC,GAAS,SACvCwS,IACE,QAAwB,CAAE9U,KAAM,aAC9BC,EAAwBL,EACxBjO,EAAsBV,EAAaU,aAGnC,mBAAEI,EAAkB,gBAAE8iB,IAAoB,UAC1Ctc,GAAW,UACXrH,GAAW,WACXO,GAAmB,IAAAC,iBAGnB,gBAAEE,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IAEfoY,EACJ,SAAAlY,EAAasG,QAAQe,OAAOyJ,qBAA5B,EAAmD,UAG/C,kBAAEoS,EAAiB,YAAED,EAAW,SAAEvN,IAAa,QAAY,CAAC,IAC5D,iBAAEpH,IAAqB,QAAiB,CAAEnO,aAAa,KAEvD,YAAED,IAAgB,QAAY,CAAEC,aAAa,KAC5CC,GAAWF,KACZ,UAAEslB,IAAc,UAChBC,EAAU/P,IAAWnN,MAAMkd,GAAYA,EAAQnlB,KAAOklB,IAE5D,KAAK,MAAAC,OAAA,EAAAA,EAAS9iB,WACZ,OAAO,wBAGT,MAAM+iB,EAAiBtlB,EAAQE,KAAQmlB,EAAQX,aAA0BxkB,GAEnEqlB,EAAc,SAAAF,EAAQE,cAAR,EAIdlV,EAAe,KACnBhK,EAAS,kBAAkBtH,EAAamB,eAAeklB,IAAY,EAG/DjX,EAAiDC,GAAS,4BA5FlE,IAAAnG,EAAAC,EA6FI,MAAM,SAAE+a,GAAaC,KAAKC,iBAAiBC,kBAIrC1iB,EAAkB,OAAAuH,EAAAlJ,EAAa2B,iBAAbuH,EAAgC,GAClDpH,EAAe,OAAAqH,EAAAnJ,EAAa0B,eAAbyH,EAA8B,IAE7C,KAAEuS,EAAI,UAAE4I,EAAS,QAAEC,EAAO,kBAAEC,EAAiB,SAAEC,GAAapV,GAE3DqV,EAAYC,GAAgBL,EAAUM,MAAM,KAC7CC,GAAW,EAAA3C,GAAA,GAAOxG,GACxBmJ,EAASC,SAASC,SAASL,GAAaK,SAASJ,IAEjD,MAAOK,EAAUC,GAAcV,EAAQK,MAAM,KACvCM,GAAS,EAAAhD,GAAA,GAAOxG,GACtBwJ,EAAOJ,SAASC,SAASC,GAAWD,SAASE,IAE7C,MAAME,GAAW,EAAAC,GAAA,GAAeP,EAAUX,GACpCmB,GAAS,EAAAD,GAAA,GAAeF,EAAQhB,SAEhCJ,EAAY,CAChBnU,OAAQ,QACRC,IAAK,aAAayW,IAClBhX,KAAM,CACJoD,KAAMpD,EAAK7I,MACXhG,mBACAE,cACA+O,eAAgBzP,EAAamB,GAC7B4F,YAAa,GACbue,oBAAqB,IAChB3jB,EAAgBE,KAAKoV,IA3HlC,IAAA/N,EA2H8C,cAAAA,EAAA+N,EAAQ9V,IAAR+H,EAAc,SAC/CpH,EAAaD,KAAKiK,IA5H/B,IAAA5C,EA4HyC,cAAAA,EAAA4C,EAAM3K,IAAN+H,EAAY,OAE7Cqc,MAAOJ,EACPK,IAAKH,EACLI,SAAUvB,EACVwB,qBAAsB7I,QAAQ2H,GAC9BA,oBACAmB,aAAc1kB,EAAQE,GACtBsjB,cAIJb,EAAgB,2CAA4C,CAC1D,aAAc2C,EAAiB,YAAc,cAC7C,qBAAsB1J,QAAQ2H,GAC9B,+BACE,EAAAqB,GAAA,GAA6BrB,GAC/BsB,SAAUjJ,QAAQ4H,WAGdxU,QAAQC,IAAI,CAChB4T,EAAY,CAAElU,IAAK,cACnBT,EAAiB,CAAES,IAAK,qBAG1B3P,GACE,QAAa,CACXua,SAAU,UACVC,QACE5Z,EAAauE,cAAcmR,SAASkQ,mBACjC/L,mBACLC,QAAS,OAIbrJ,GACF,IA2CMkD,EAAyB,KAC7BH,GAAqB,EAAM,EAGvB9C,EAA0B,KAC9BN,GAAsB,EAAM,EAKxBd,EAA2D,CAC/D,CACEhE,MAAOtL,EAAasG,QAAQe,OAAOyM,oBACnC3K,QAAS,OACTyB,MAAO,QACPmC,OAAQ,IAAMyG,GAAqB,GACnC9D,YAAa,iDAEf,CACE,CACEpE,MAAO4M,EACP/O,QAAS,WACTyB,MAAO,OACPmC,OAhEuB,KACtByD,EAGHJ,GAAsB,GAFtBK,GAGF,EA4DIf,YAAa,kDAEf,CACEpE,MAAOqa,EACH3lB,EAAasG,QAAQe,OAAOuJ,0BAC5B5Q,EAAauE,cAAcmR,SAASkQ,mBACjCC,oCACP1c,QAAS,YACTyB,MAAO,OACPgF,iBAAiB,EACjB7C,OAAQc,EAAaU,GACrBmB,YAAa,mDAIbmB,EAAuC,CAC3C,CACEvF,MAAO4M,EACPnL,OAAQ2D,EACR9F,MAAO,OACPzB,QAAS,WACTuG,YAAa,wDAEf,CACEpE,MAAOtL,EAAasG,QAAQe,OAAOiJ,6BACnCvD,OAAQ,KACN0D,GAAc,EAEhB7F,MAAO,QACPzB,QAAS,YACTuG,YAAa,2DAGXsE,EAAsC,CAC1C,CACE1I,MAAO4M,EACPnL,OAAQ4G,EACR/I,MAAO,OACPzB,QAAS,WACTuG,YAAa,uDAEf,CACEpE,MAAOtL,EAAasG,QAAQe,OAAOyM,oBACnC/G,OAAQ,KApG4B,kCAChCkW,EAAY,CAChBnU,OAAQ,QACRC,IAAK,aAAayW,IAClBhX,KAAM,CACJsX,YAAY,KAIhB7lB,EAAmB,2CAA4C,CAC7D,aAAcylB,EAAiB,YAAc,sBAGzCtW,QAAQC,IAAI,CAChB4T,EAAY,CAAElU,IAAK,cACnBT,EAAiB,CAAES,IAAK,qBAG1B3P,GACE,QAAa,CACXua,SAAU,UACVC,QACE5Z,EAAauE,cAAcmR,SAASqQ,+BACjClM,mBACLC,QAAS,OAIblO,IAEAnF,EAAS,kBAAkBtH,EAAamB,KAC1C,GAsE2B,EAEvBsK,MAAO,QACPzB,QAAS,YACTyG,iBAAiB,EACjBF,YAAa,0DAIjB,OACE,UAAC,MACC/J,MAAO3F,EAAauE,cAAcmR,SAASkQ,mBAAmBjgB,MAC9DO,YACEyf,OACI,EACA3lB,EAAauE,cAAcmR,SAASkQ,mBAAmBrT,SAE7D3G,cACAkE,UAAWoT,IACXpW,QAASwC,EACT,UAAQ,kCACRoD,sBAAsB,oDAErB,UAAA+S,EAAQE,aACP,SAAC,EAAAK,oBAAA,CACCP,UACA5X,aAAcA,EAAaU,GAC3BT,QAASK,EACTH,SACAgV,cAGF,SAAC,EAAAiD,iBAAA,CACCR,UACA5X,aAAcA,EAAaU,GAC3BT,QAASK,EACTH,SACAC,UACAuC,UACA0S,kBAAmBA,IACnBlT,cAAeS,EACfuS,WACA/S,aAAW,KAIf,SAAC,MACChH,KAAMkH,EACNxK,MAAO3F,EAAauE,cAAc0K,MAAMgC,mBAAmBtL,MAC3DO,YACElG,EAAauE,cAAc0K,MAAMgC,mBAAmB/K,YAEtD4G,QAAS+D,EACTjF,YAAa8E,EACb,UAAQ,gDACRgC,sBAAsB,qEAExB,SAAC,MACCzJ,KAAMsK,EACN5N,MACE3F,EAAauE,cAAcmR,SAASqQ,+BACjCpgB,MAELO,YACElG,EAAauE,cAAcmR,SAASqQ,+BACjC7f,YAEL4G,QAASkH,EACTpI,YAAa+H,EACb7D,UAAWoT,IACX,UAAQ,+CACRxQ,sBAAsB,qEAE1B,E,inBC/SG,MAAMwT,GAET,EAAG/mB,eAAcyM,cAAanK,iBAAgB0F,gBAAe/F,cA3CjE,UA6CE,MAAM,gBAAEtB,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KAGf,kBAAEqmB,IAAsB,QAAkB,CAC9ChmB,aAAa,KAGT,SAAEkjB,GAAaC,KAAKC,iBAAiBC,kBAIrChjB,GAAW,WACX,SAAE+X,IAAa,UACf5Y,GAAmB,IAAAC,gBAEnB6G,GAAW,UAGX8N,GAAoB,EAAA5N,EAAA,KACpB6N,GAAkB,QACtB,uBACAD,EAAkB5L,SAGdyd,EAAiC,CACrCnc,OAAQ,EACRoc,YAAa7R,EAAgBoC,MAAM0P,MACnC5d,gBAAiB,EACjB6d,eAAgB,gBAEZC,EAAkC,CACtCvc,OAAQ,EACRoc,YAAa7R,EAAgB5L,KAAK0d,MAClCG,YAAa,SACb/d,gBAAiB,GAGbnD,EAAWpG,EAAakG,aAEvBqhB,EAAqBC,IAA0B,IAAAhmB,WAAS,GAEzD+U,EACJ,kBAAAvW,EAAauW,eAAb,IAAuBtD,QAAQqT,IAAaA,EAAQK,cAApD,EAAmE,GAErE,IAAIc,EAAgD,CAAC,EAErD,aAAIlR,KAAJ,EACImR,MAAK,CAACC,EAAUC,IACXD,EAASpC,OAAUqC,EAASrC,OAC7BoC,EAASpC,MAAQqC,EAASrC,OACpB,EAFqC,IAOhDsC,SAASvB,IACR,KAAK,MAAAA,OAAA,EAAAA,EAASf,OACZ,OAGF,MAAM1N,GAAM,EAAA8D,GAAA,GAAO,IAAItD,KAAKiO,EAAQf,OAAQ,YAEvCkC,EAAe5P,KAClB4P,EAAe5P,GAAO,IAGxB4P,EAAe5P,GAAKiQ,KAAKxB,EAAoB,IAGjD,MAAMyB,EAAexR,EAAS3L,OAExBkQ,GAAS,IAAAC,oBAAmBla,EAAama,eAEzCgN,GAAgB,IAAAC,eAAcpnB,EAAaqnB,aAE3CC,GAAgB,IAAAC,uBAAsBvnB,EAAawnB,aAEnDC,GACHtoB,EAAakG,cACZ5D,GAAkB0F,GAAiB/F,IAAaK,IAEpD,IAAAb,YAAU,KACJ2X,EAASlX,SAAS,cAAgBqlB,GACpCC,GAAuB,EACzB,GACC,CAACpO,EAAUmO,IAEd,MAAMgB,EAAwB,IAAY,kCAClCvB,EAAkB,CACtBpX,IAAK,kBACL6R,OAAQ,CACNjhB,mBACAkb,KAAM,IAAIrD,KACV6L,cAIJ5c,EAAS,kBAAkBtH,EAAamB,qBAAsB,CAC5DgV,SAAS,IAEXqR,GAAuB,EACzB,IAEMgB,EAAmB,IAAY,4BACnClhB,EAAS,kBAAkBtH,EAAamB,kBAAmB,CACzDgV,SAAS,IAEXqR,GAAuB,EACzB,IAoBMiB,EAAkBC,GACf,MAAAA,OAAA,EAAAA,EAAkB7mB,KAAI,CAACykB,EAASra,KA/K3C,IAAA/C,EAAAC,EAgLM,MAAMwf,GACJ,EAAAhN,GAAA,GAAO,IAAItD,KAAKiO,EAAQf,OAAQ,GAAG4C,MAAkBH,IAAiB,CACpElN,WAEF,KACA,EAAAa,GAAA,GAAO,IAAItD,KAAKiO,EAAQd,KAAM,GAAGwC,IAAiB,CAAElN,WAEhD8N,EAAmB,IACnBtC,EAAQE,YACH3lB,EAAauE,cAAcyjB,gBAAgBC,MAC/CC,0BACDzC,EAAQZ,qBAA6BY,EAAQ9B,kBAC5C8B,EAAQZ,sBAAyBY,EAAQE,iBAA9C,EACSF,EAAQ7B,SAGbuE,EACJ1C,EAAQ2C,iBAAkB,OAAA/f,EAAAod,EAAQ2C,qBAAR,EAAA/f,EAAwB0B,QAAS,EAEvDse,EACJ5C,EAAQ6C,kBAAmB,OAAAhgB,EAAAmd,EAAQ6C,sBAAR,EAAAhgB,EAAyByB,QAAS,EAC/D,OACE,SAAC6I,EAAA,GACC,UAAS,uBAAuB6S,EAAQnlB,KAExCsD,GAAI,OACFC,MAAO,CAAEgc,GAAI,OAAQC,GAAI,SACzBhb,OAAQ,OACRkG,cAAe,SACfpG,WAAY,aACZM,GAAI,EACJC,GAAI,IACJ+P,UAAW,OACXhI,cAAe,OACfxE,gBAAiB,UACjB0T,GAAI,EACJ,UAAW,CACT1T,gBAAiB,YAEfyf,EAAa/B,EAAiB,CAAC,GAC/BiC,EAAc7B,EAAkB,CAAC,GAEvC3W,SAAUtK,EACV6E,QAAS,KAAMme,OA/DK/C,EA+DcC,EAAQnlB,IAAM,GA9DtDmG,EAAS,kBAAkBtH,EAAamB,eAAeklB,IAAa,CAClElQ,SAAS,SAGXqR,GAAuB,GALE,IAACnB,CA+D+B,EAEnD,oBAAC7hB,EAAA,GACCC,GAAI,CACFE,QAAS,OACTkH,cAAe,MACfrG,eAAgB,cAGjB,UAAA8gB,EAAQE,aACP,SAAC,OACC6C,KAAMC,GAAA,EACNhgB,KAAK,KACLigB,SAAU,CAAEC,QAAS,GACrB/d,MAAO4J,EAAgB3J,KAAKC,aAG9B,yBAEF,UAACnH,EAAA,GACCC,GAAI,CACFE,QAAS,OACTkH,cAAe,SACfnG,aAAc,SACdF,eAAgB,cAGlB,oBAAC,OACCwE,QAAQ,QACR0B,KAAM4a,EAAQ7T,KACdrH,WAAY,IACZiD,SAAU,UAEZ,SAAC7J,EAAA,GACCC,GAAI,CACFE,QAAS,OACTkH,cAAe,MACfnG,aAAc,SACdF,eAAgB,aAChBC,WAAY,SACZf,MAAO,OACPyG,GAAI,GACJ2C,IAAK,IAGN,SAACwY,EAAQE,aAmBR,SAAC,OACCnY,SAAU,OACVjD,WAAY,IACZM,KAAMkd,IACN5e,QAAQ,QACRyB,MAAO4J,EAAgB3J,KAAKC,aAvB9B,sBACE,oBAAC,OACC0C,SAAU,OACVjD,WAAY,IACZM,KAAMid,EACN3e,QAAQ,QACRyB,MAAO4J,EAAgB5L,KAAKC,OAC5B,KAEF,SAAC,OACCM,QAAQ,QACRqE,SAAU,OACVjD,WAAY,IACZM,KAAMkd,IACNnd,MAAO4J,EAAgB3J,KAAKC,wBA/EnC,WAAW2a,EAAQnlB,KA8F1B,IA0GN,OACE,SAACsoB,GAAA,GACCjjB,MAAO3F,EAAauE,cAAcyjB,gBAAgBC,MAAMtiB,MACxDO,YAAalG,EAAauE,cAAcyjB,gBAAgBC,MAAM/hB,YAC9D0F,cACA4G,WAAY,CACV1N,OAAQ,OACRhB,QAAS,OACTkH,cAAe,SACfrG,eAAgB,iBAElB,UAAQ,mCACR+N,sBAAsB,qDAEtB,mBAACgC,EAAA,EAAa,CAAChO,O,EAAO,MAAK,gB,EAAL,CAAqBiC,QAAS6L,G,aACjD,SAnHgB,IAAjB0S,GAEA,UAAC,OACC3d,UAAU,SACV5E,eAAgB,SAChBC,WAAW,SACXqI,IAAK,EACLnI,OAAQtE,EAAW,OAAS,GAC5B8I,GAAI,OAEJ,oBAAC,OACCH,QAAQ,qBACR0f,YAAa,OACbljB,MACE3F,EAAauE,cAAcyjB,gBAAgBC,MAAMa,YAAYnjB,MAE/DO,YACElG,EAAauE,cAAcyjB,gBAAgBC,MAAMa,YAC9C5iB,cAGNuhB,IACC,SAAC,OACC5jB,MAAOrD,EAAW,MAAQ,MAC1BmX,QAAS,EACTpO,UAAU,SACVwM,QAAS,CACP,CACEiB,IAAK,cACL7N,QAAS,WACTmC,MAAOtL,EAAasG,QAAQoP,SAAS2B,iBACrCzM,MAAO,OACPR,QAAS,IAAMsd,IACf,UACE,4DAEJ,CACE1Q,IAAK,cACL7N,QAAS,OACTmC,MAAOtL,EAAasG,QAAQoP,SAASqT,yBACrC3e,QAAS,IAAMud,IACf/jB,GAAI,CAAEgH,MAAO4J,EAAgB3J,KAAKC,WAClC,UACE,8DASZ,sBACE,oBAACnH,EAAA,GACCC,GAAI,CACFE,QAAS,OACTkH,cAAe,SACfpG,WAAY,SACZ0F,GAAI,EACJoU,UAAW,QACXsK,UAAW,QACXjkB,UAAW,UAGZ,SAvMT0J,OAAOwa,QAAQrC,GAAgB5lB,KAAI,EAAEgW,EAAKvC,MAEtC,UAAC9Q,EAAA,EAAG,CAAWC,GAAI,CAAE6c,GAAI,GACvB,oBAAC,MAAI,CAAC5V,KAAMmM,KACZ,SAACrT,EAAA,EAAG,CAAE,SAAAikB,EAAenT,OAFbuC,OAuMPyQ,IACC,SAAC,OACC9P,QAAS,EACThK,EAAG,EACHhJ,eAAe,WACfqG,cAAexK,EAAW,iBAAmB,MAC7C+I,UAAW/I,EAAW,SAAW,MACjCuV,QAAS,CACP,CACEiB,IAAK,cACL7N,QAAS,OACTmC,MAAOtL,EAAasG,QAAQoP,SAASqT,yBACrCnlB,GAAI,CAAEgH,MAAO4J,EAAgB3J,KAAKC,WAClCV,QAAS,IAAMud,IACf,UACE,uDAEJ,CACE3Q,IAAK,cACL7N,QAAS,WACTmC,MAAOtL,EAAasG,QAAQoP,SAAS2B,iBACrCzM,MAAO,OACPR,QAAS,IAAMsd,IACf,UACE,sE,OA2BhB,E,gBCjZG,MAAMwB,GAET,EAAGtd,kBAEL,MAAMnF,GAAW,WAGX,gBAAE3G,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IACfqpB,EACJnpB,EAAauE,cAAcmR,SAAS0T,0BAQhCC,EAAmC,CACvC/d,MAAOtL,EAAasG,QAAQe,OAAOsJ,qBACnC5D,OAPmB,KACnBtG,GAAU,EAAE,EAOZ0C,QAAS,YACTyB,MAAO,OACP8E,YACE,8FAGJ,OACE,SAAC,MACC/J,MAAOwjB,EAAkBxjB,MACzBO,YAAaijB,EAAkBjjB,YAC/B0F,cACAkB,QAAS,CAACuc,GAEV,mBAACC,GAAA,EAAgB,KACnB,E,ibCGG,MAAMC,GAET,EAAGpqB,eAAcyM,kBAxDrB,YAyDE,MAAO4d,IAAgB,KAAAC,mBACjBC,EAAO,SAAAF,EAAaG,IAAI,QAAjB,EAA2B,KAIjCC,EAAaC,IAAkB,IAAAlpB,UAEpC+oB,IAGI,gBAAE5pB,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IACfgqB,EACJ9pB,EAAauE,cAAcmR,SAASqU,uBAEhCC,EAA8B,CAClC,CACEngB,QAASigB,EAAmBG,qBAC5BrY,KAAM,SAER,CACE/H,QAASigB,EAAmBI,yBAC5BtY,KAAM,aAER,CACE/H,QAASigB,EAAmBK,0BAC5BvY,KAAM,cAER,CACE/H,QAASigB,EAAmBM,0BAC5BxY,KAAM,eAIJ2C,GAAoB,EAAA5N,EAAA,KACpB6N,GAAkB,QACtB,uBACAD,EAAkB5L,SAIdvJ,GAAW,WACXO,GAAmB,IAAAC,iBACnB,iBAAE0O,EAAgB,uBAAE6C,IAA2B,QAAiB,CACpEhR,aAAa,KAIT,aAAE0N,IAAiB,QAA2B,CAAEK,KAAM,cAEtD,YAAEhO,IAAgB,QAAY,CAAEC,aAAa,KAC5CC,GAAWF,IACZW,EAAgB,SAAA1B,EAAa0B,eAAb,EAA8B,GAC9CC,EAAkB,SAAA3B,EAAa2B,iBAAb,EAAgC,IAElD,YAAE8d,IAAgB,EAAAjY,EAAA,KAClBnG,GAAW,EAAA6pB,GAAA,GAAczL,EAAYC,KAAK,QAG1C,YAAEoE,EAAW,kBAAEC,IAAsB,QAAY,CAAC,GAElDrjB,EAAc,MAAAV,OAAA,EAAAA,EAAcU,aAC5B,WAAEoC,IAAe,IAAAC,+BAA8B,CAAC,GAEtD,IAAIG,EAEAxC,IACFwC,EAAUJ,EAAWpC,IAGvB,MAAM0D,EAAc,MAAAlB,OAAA,EAAAA,EAASmB,SAASC,aA0EhC4O,EAAgD,CACpD,CACE/G,MAAO,SAAAtL,EAAasG,QAAQe,OAAOyJ,qBAA5B,EAAmD,SAC1DlG,MAAO,OACPzB,QAAS,WACT4D,OAAQnB,EACR8D,YAAa,gDAEf,CACEpE,MAAOtL,EAAasG,QAAQoP,SAASqT,yBACrC5f,QAAS,YACTyB,MAAO,OACPmC,OAAQc,GApF8CW,IAAS,O,OAAA,E,EAAA,K,EAAA,YACjE,IAAKob,EACH,OAGF,MAAM,SAAEvG,GAAaC,KAAKC,iBAAiBC,kBAIrC8G,EAAeN,EAAWzhB,MAC7BgiB,GAAaA,EAAS3Y,OAASgY,IAGlC,IAAKU,EACH,OAGF,MAAME,GAAmB,KAAAC,gCAA+B,MAAAH,OAAA,EAAAA,EAAc1Y,MAyBtC,mBAvBDqR,EAAY,CACzCnU,OAAQ,OACRC,IAAK,YACLP,KAAM,CACJoD,KAAMrO,GACF,KAAA+hB,iBAAgBnmB,EAAc,MAAAoE,EAAAA,EAAe,IAC7C,SACJ5D,mBACAE,cACA+O,eAAgBzP,EAAamB,GAC7B4F,YAAa,GACbue,oBAAqB,IAChB3jB,EAAgBE,KAAKoV,IAhKlC,IAAA/N,EAgK8C,cAAAA,EAAA+N,EAAQ9V,IAAR+H,EAAc,SAC/CxH,EAAcG,KAAKiK,IAjKhC,IAAA5C,EAiK0C,cAAAA,EAAA4C,EAAM3K,IAAN+H,EAAY,OAE9Cqc,MAAO8F,EAAiB9F,MACxBC,IAAK6F,EAAiB7F,IACtBC,SAAUvB,EACVyB,aAAc1kB,EAAQE,GACtBqlB,aAAa,MAIIhX,OACnBvP,GACE,QAAa,CACXua,SAAU,QACVC,QACE5Z,EAAauE,cAAcmR,SAASqU,uBACjCW,6BACL5Q,QAAS,cAIP1K,QAAQC,IAAI,CAChB4T,EAAY,CAAElU,IAAK,cACnBT,EAAiB,CAAES,IAAK,qBAG1B3P,GACE,QAAa,CACXua,SAAU,UACVC,QACE5Z,EAAauE,cAAcmR,SAASqU,uBACjCY,+BACL7Q,QAAS,OAIblO,IAEJ,E,yMAAA,IAeIgE,iBAAiB,EACjBC,UAAW+Z,EACXla,YAAa,sDAIjB,OACE,SAAC,MACC/J,MAAO3F,EAAauE,cAAcmR,SAASqU,uBAAuBpkB,MAClEO,YACElG,EAAauE,cAAcmR,SAASqU,uBAAuB7jB,YAE7D4G,QAASuF,EACTzG,cACAkE,UAAWoT,KAAuB/R,IAClC,UAAQ,iCACRuB,sBAAsB,mDAEtB,mBAAC,OACCnJ,UAAW/I,EAAW,SAAW,MACjCmX,QAAS,EACThT,eAAgB,gBAEhB,mBAAC+P,EAAA,EAAa,CAAChO,O,EAAO,MAAK,gB,EAAL,CAAqBiC,QAAS6L,G,aACjD,SAAAwV,EAAWhpB,KAAKupB,IACf,SAAC,OAEC1gB,QAAS0gB,EAAS1gB,QAClBV,QAAQ,SACRyhB,SAAU,IAAMf,EAAeU,EAAS3Y,MACxCiZ,UAAWjB,IAAgBW,EAAS3Y,KACpC,UAAS,kCAAkC2Y,EAAS3Y,eAL/C2Y,EAAS3Y,c,OAUxB,E,0SCjOG,MAAMkZ,GAET,EAAG3rB,eAAcyM,cAAanK,iBAAgB0F,gBAAe/F,cA3BjE,QA4BE,MAAM2pB,GACH5rB,EAAakG,cACZ5D,GAAkB0F,GAAiB/F,IAAaK,IAE9C,gBAAE3B,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KAGf,mBAAEG,IAAuB,UACzBwG,GAAW,WAGX,UAAE+e,IAAc,UAEhBC,GADuB,MAAAtmB,OAAA,EAAAA,EAAcuW,UACNnN,MAClCkd,GAAYA,EAAQnlB,KAAOklB,IAU9B,IAPA,IAAA5kB,YAAU,KACH6kB,GACLxlB,EAAmB,0CAA2C,CAC5D+qB,QAAQ,IAAAhoB,oCACR,GACD,CAACyiB,EAASxlB,KAERwlB,EACH,OAAO,wBAIT,MAAMwF,EAAoB,KACxBxkB,EAAS,kBAAkBtH,EAAamB,eAAeklB,SAAiB,EAIpEnT,EAAoD,CACxD,CACE/G,MAAOtL,EAAasG,QAAQe,OAAOU,mBACnCoB,QAAS,YACTyB,MAAO,OACPmC,OAAQnB,EACR8D,YAAa,iDAIbqb,GACF1Y,EAAa6Y,QAAQ,CACnB5f,MAAOtL,EAAasG,QAAQoP,SAASyV,0BACrChiB,QAAS,WACTyB,MAAO,OACPmC,OAAQke,EACRvb,YAAa,wDAIjB,MAAM0b,EAAyB,IACzB,SAAAjsB,EAAa0B,eAAb,EAA8B,MAC9B,SAAA1B,EAAa2B,iBAAb,EAAgC,IACpCE,KAAKZ,IAtFT,IAAAiI,EAuFI,MAAMD,EAAO,OAAAC,EAAAlJ,EAAagJ,YAAb,EAAAE,EAAoBE,MAAMH,GAASA,EAAK9H,KAAOF,EAAQG,SACpE,O,2HAAO,IACFH,G,EADE,CAELiE,YAAa,MAAA+D,OAAA,EAAAA,EAAMhE,S,mBACrB,IAGF,OACE,SAAC,MACCuB,MAAO3F,EAAauE,cAAcmR,SAAS2V,mBAAmB1lB,MAC9DmH,QAASuF,EACTzG,cACA/H,MAAO,QACP,UAAQ,kCACR6O,sBAAsB,oDAEtB,mBAAC4Y,GAAA,GACCniB,QAAQ,WACRvF,GAAI,CAAE8E,gBAAiB,UAAW6iB,MAAO,OAAQ5d,EAAG,GAEnD,mBAAC,KAAe,CAAC8X,UAAkB2F,iBAExC,E,qmBCpEG,MAAMI,GAA6D,EACxErsB,eACAsC,iBACA0F,iBAAgB,EAChB/F,cAEA,MAAM,kBAAE+kB,IAAsB,QAAkB,CAC9ChmB,aAAa,KAERumB,EAAqBC,IAA0B,IAAAhmB,WAAS,GACzD8F,GAAW,WACX,SAAE8R,IAAa,WACf,UAAEiN,IAAc,WAChB,gBAAE1lB,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IACfyU,GAAoB,EAAA5N,EAAA,KACpB+O,EAAWvW,EAAauW,SACxBgE,EAAM,IAAIlC,KAEVjS,EAAWpG,EAAakG,YAExBomB,GACHtsB,EAAakG,cACZ5D,GAAkB0F,GAAiB/F,IAAaK,GAE9CiqB,EAAkBjqB,GAAkB0F,IAAmB1F,EAEvDkqB,EAAmB,MAAAjW,OAAA,EAAAA,EAAUtD,QAAQqT,IACzC,MAAMmG,GAAiB,MAAAnG,OAAA,EAAAA,EAASd,KAAM,IAAInN,KAAK,MAAAiO,OAAA,EAAAA,EAASd,UAAO,EAC/D,IAAKiH,EAAgB,OAAO,EAE5B,QADwBA,GAAkBlS,KAEtC+L,EAAQK,UACD,IAGPtR,GAAkB,QACtB,uBACAD,EAAkB5L,SAGdsR,GAAS,IAAAC,oBAAmBla,EAAama,eAEzC0R,GAAgB,IAAAzE,eAAcpnB,EAAaqnB,aAE3CyE,GAAgB,IAAAvE,uBAAsBvnB,EAAawnB,cA8CzD,IAAA5mB,YAAU,KApIZ,MAqII,GAAI2X,EAASlX,SAAS,YAAa,CACjC,MAAM0qB,EAAwBxT,EAASY,SAAS,WAC1CsM,EAAU,SAAAtmB,EAAauW,eAAb,IAAuBnN,MACpCkd,GAAYA,EAAQnlB,KAAOklB,KAG1B,MAAAC,OAAA,EAAAA,EAASK,YACXrf,EAAS,kBAAkBtH,EAAamB,OAC9ByrB,IAAyBtG,GAAaiB,GAChDC,GAAuB,EAE3B,IACC,CACDpO,EACAmO,EACAvnB,EAAauW,SACbvW,EAAamB,GACbklB,EACA/e,IAyDF,OAAOilB,GACL,sBACE,qBAAChX,EAAA,EAAa,CAAChO,O,EAAO,MAAK,gB,EAAL,CAAqBiC,QAAS6L,G,aAClD,qBAAC7Q,EAAA,GACCC,GAAI,CACF0G,GAAI,EACJ0e,UAAW,GACXllB,QAAS,OACTa,eAAgB,gBAChBqG,cAAe,OAGjB,oBAAC,OACCvC,KAAK,KACLkM,MAAM,OACN9K,QAAS,CACPgB,KAAM7K,EAAauE,cAAcmR,SAASb,QAAQlP,MAClDwD,QAAS,KACTyL,UAAW,IACX,UAAW,+BAEb9K,UAAW,CACT,CACEX,QAAS,UACTyB,MAAO,gBACPC,KA1Hc,MA/G9B,MAgHI,MAAMmhB,EAAgB,eAAAL,OAAA,EAAAA,EAAkB5hB,QAAlB,EAA4B,EAElD,OAAIiiB,EAAgB,EACX,GAAGA,KAAiBhsB,EAAauE,cAAcmR,SAASb,QAAQoX,oCAC5C,IAAlBD,EACF,GAAGA,KAAiBhsB,EAAauE,cAAcmR,SAASb,QAAQqX,iCAEhElsB,EAAauE,cAAcmR,SAASb,QACxCsX,2BACL,EAgHkBC,GACNxoB,GAAI,CAAE2G,WAAY,KAClB,UAAW,mCAGf3G,GAAI,CACF2G,WAAY,IACZ0C,IAAK,EACLlE,GAAI,OAIR,SAAC,KACCnF,GAAI,CACFwB,SAAU,OACV4jB,UAAW,GACXL,QAAS,EACT/d,MAAO4J,EAAgB3J,KAAKC,WAE9BrC,KAAK,QACL2B,QApJmB,KAC3Buc,GAAuB,GAEvBlgB,EAAS,kBAAkBtH,EAAamB,sBAAsB,EAkJtD,UAAQ,oCAER,mBAAC,MAAI,CAACkoB,KAAMC,GAAA,EAAShgB,KAAK,KAAKigB,SAAU,CAAEC,QAAS,WAIxD,SAAChlB,EAAA,EAAG,CAACC,GAAI,CAAEwY,GAAiC,KAA7B,MAAAuP,OAAA,EAAAA,EAAkB5hB,QAAe,IAAO,KACpD,SA1GA,MAAA4hB,OAAA,EAAAA,EAAkB3qB,KAAI,CAACykB,EAASra,KA3J3C,QA4JM,MAAMihB,EAAe,SAAA5G,EAAQf,OAAR,EAAiB,GAChC4H,EAAa,SAAA7G,EAAQd,KAAR,EAAe,GAElC,OACE,UAAC,KACC,UAAS,wBAAwBc,EAAQnlB,KACzC8U,WAAS,EAETxR,GAAI,CACFoH,cAAe,SACfrG,eAAgB,aAChBC,WAAY,aACZM,GAAI,EACJC,GAAI,IACJ+P,UAAW,OACXhI,cAAe,OACftC,MAAO4J,EAAgB3J,KAAKsR,QAC5BzT,gBAAiB,UACjB4B,GAAc,IAAVc,EAAc,EAAI,IACtB,UAAW,CACT1C,gBAAiB,YAGrBmH,SAAUtK,EACV6E,QAAS,KApLnB,IAAA/B,EA4H8Bmd,EAwDL,OAxDKA,EAwDc,OAAAnd,EAAAod,EAAQnlB,IAAR+H,EAAc,GAvDtD5B,EAAS,kBAAkBtH,EAAamB,eAAeklB,IAAa,CAClElQ,SAAS,SAGXqR,GAAuB,EAmDkC,EAEnD,oBAACnd,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAE2G,WAAY,KAC3C,SAAAkb,EAAQ7T,QAEX,UAACpI,EAAA,GACCL,QAAQ,UACRyB,MAAM,iBACNhH,GAAI,CACF2G,WAAY,IACZiD,SAAU,QAGX,aAAAsN,GAAA,GACC,IAAItD,KAAK6U,GACT,GAAGP,MAAkBD,IACrB,CACE5R,WAGH,OACA,EAAAa,GAAA,GAAO,IAAItD,KAAK8U,GAAaT,EAAe,CAAE5R,gBAtC5C,WAAWwL,EAAQnlB,KAwC1B,MA4DCmrB,IACC,SAAC,OACC5nB,MAAO,OACP0oB,UAAW,IACXC,aAAc,EACd7U,QAAS,EACTpO,UAAU,SACVwM,QAAS,CACP,CACEiB,IAAK,cACL7N,QAAS,YACTmC,MAAOtL,EAAasG,QAAQoP,SAAS2B,iBACrCzM,MAAO,OACPR,QAAS,IAtLmB,kCAClC+b,EAAkB,CAAEpX,IAAK,oBAE/BtI,EAAS,kBAAkBtH,EAAamB,sBACxCqmB,GAAuB,EACzB,IAkLc,UAAW,wCAEb,CACE3P,IAAK,cACL7N,QAAS,WACTmC,MAAOtL,EAAasG,QAAQoP,SAASqT,yBACrCne,MAAO,OACPR,QAAS,IAvLc,4BACnC3D,EAAS,kBAAkBtH,EAAamB,mBACxCqmB,GAAuB,EACzB,IAqLc,UAAW,0CAMrB,SAACtc,EAAA,EAAO,CAACzG,GAAI,CAAE0G,GAAI,KAClBoc,IACC,SAAC,MACCvnB,eACAyM,YA/MyB,KAC/BnF,EAAS,kBAAkBtH,EAAamB,MAExCqmB,GAAuB,EAAM,EA6MvBllB,iBACA0F,gBACA/F,oBAIJ,E,OAAA,E,gBCrRC,SAASqrB,IAA6B,OAC3C9gB,EAAM,MACNhG,EAAK,iBACLkG,EAAgB,YAChBD,EAAW,kBACXE,EAAiB,YACjBjM,EAAW,SACXkM,EAAQ,YACRC,EAAW,eACXQ,IAEA,OACE,SAACkgB,GAAA,EAAK,CAACzjB,KAAM0C,EAAQyM,QAASxM,EAC5B,mBAACgd,GAAA,GACCpW,WAAY,CAAEzN,UAAW,OAAQK,SAAU,QAC3CO,QACAmH,QAAS,CAAC,CAAExB,MAAOO,EAAkBkB,OAAQjB,IAE7C,mBAAC,MACCjM,cACAkM,WACAC,cACAQ,sBAKV,C,+aCjBO,SAASmgB,IAAwB,aACtCxtB,IApCF,oBAuCE,MAAO2H,EAAgBC,IAAqB,IAAApG,YAGtChB,GAAmB,IAAAC,iBACnB,aAAEuC,IAAiB,IAAAC,iBAAgB,CAAEzC,qBAGrC4U,GAAoB,EAAA5N,EAAA,KACpB6N,GAAkB,QACtB,uBACAD,EAAkB5L,UAId,gBAAE7I,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KACb6F,MAAOiC,GAAe5H,EAAauE,cAAcsD,mBACnDC,EACJ,2BAAA9H,EAAasG,cAAb,IAAsBe,aAAtB,IAA8BU,oBAA9B,EAAoD,SAGhD,YAAE7H,IAAgB,QAAY,CAAEC,aAAa,KAC5CC,GAAWF,IACZG,EAAY,MAAAD,OAAA,EAAAA,EAASE,GAErBO,EAAgB,SAAA1B,EAAa0B,eAAb,EAA8B,GAC9CC,EAAkB,SAAA3B,EAAa2B,iBAAb,EAAgC,GAGlDjB,EAAc,MAAAV,OAAA,EAAAA,EAAcU,aAC5B,WAAEoC,IAAe,IAAAC,+BAA8B,CAAC,GAEtD,IAAIG,EACAuqB,EAWJ,GAVI/sB,GACFwC,EAAUJ,EAAWpC,GACrB+sB,EAAkB,wBAAAvqB,OAAA,EAAAA,EAASE,sBAAT,IAA0BC,mBAA1B,IAAwCY,mBAE1DwpB,EACE,eAAAzqB,OAAA,EAAAA,EAAcM,cAAcD,mBAA5B,IAA0CY,mBAKzCvD,EAAa,OAElB,MAAMgtB,EAAa,IAAIhsB,KAAkBC,GAAiBsR,QACvDhS,GAAYA,EAAQE,KAAOD,IAIxB6Y,EAAmB,IAAMnS,OAAkB,GAyDjD,OACE,sBACE,oBAAC2N,EAAA,EAAa,CAAChO,MAAO,SAAK,gBAAL,CAAqBiC,QAAS6L,IAClD,mBAAC7Q,EAAA,EAAG,CAACC,GAAI,CAAEkc,GAAI,GACZ,SAAA+M,EAAW7rB,KAAK8rB,IAvJ3B,IAAAzkB,EAAAC,EAAA2D,EAAA8G,EAAAga,EAAAC,EAwJY,OACE,SAAC,OAEC,UAAQ,yDACR5X,WAAS,EACTjM,QAAQ,WACRyB,MAAM,OACNR,QAAS,KAAM6iB,OApEJ1sB,EAoEoBusB,EAAUvsB,OApEVwG,EAAkBxG,GAAvC,IAACA,CAoEqC,EAChDqD,GAAI,CACF2G,WAAY,IACZxB,GAAI,EACJ5D,GAAI,GACJD,GAAI,GAGL,kBACC,OAAA6N,EAAA,OAAA9G,EAAA,OAAA3D,EAAA,OAAAD,EAAA,MAAAukB,OAAA,EAAAA,EAAiBvpB,iBAAjB,EAAAgF,EAA6B/E,iBAA7B,EAAAgF,EAAyC/D,oBAAzC,EAAA0H,EACIihB,2BADJna,EACiC,GACjC,CACE3M,UAAW,OAAA2mB,EAAAD,EAAU1mB,WAAV2mB,EAAuB,GAClCrL,SAAU,OAAAsL,EAAAF,EAAUpL,UAAVsL,EAAsB,IAElC,iBApBG,GAAGF,EAAUvsB,SAsBpB,SAKR,SAAC8J,EAAA,EAAO,CAACzG,GAAI,CAAE0G,GAAI,MACnB,SAACmiB,GAAA,CACC9gB,SAAU7E,EACV8E,YAAasN,EACbvT,MAAOiC,EACPiE,iBAAkB/D,EAClBgE,kBAAmBoN,EACnBrZ,cACAkM,UAlDuBjF,EAkDOA,GAjDb,OAAAuB,EAAAlJ,EAAa0B,oBAAb,EAAAwH,EAA4BE,MAC9CtH,GAAiBA,EAAaV,SAAWuG,KAEnB,QAClB,WA8CHkF,YAjG8B,CAClClF,IA9FJ,IAAAuB,EAAAC,EAAA2D,EAgGI,MAIME,EAFW,IAFK,OAAA9D,EAAAlJ,EAAa0B,eAAbwH,EAA8B,MAC5B,OAAAC,EAAAnJ,EAAa2B,iBAAbwH,EAAgC,IAGvBC,MAC9BnI,GAAYA,EAAQG,SAAWuG,IAG5BsF,EAAwB,MAAAD,OAAA,EAAAA,EAAiB5L,OAEzC8L,EAAe,OAAAJ,EAAA9M,EAAagJ,YAAb,EAAA8D,EAAoB1D,MACtCH,GAASA,EAAK9H,KAAO8L,IAExB,OAAO,SACFD,GADE,CAELG,SAAU,CACRlM,QAAS,MAAA+L,OAAA,EAAAA,EAAiB/H,QAC1BgE,KAAM,MAAAiE,OAAA,EAAAA,EAAcjI,UAExB,EA2EiB+oB,CAA4BrmB,GACzC0F,eAzEiC,CACrC1F,IAvHJ,IAAAuB,EAAAC,EAAA2D,EAyHI,MAIMQ,EAFc,IAFK,OAAApE,EAAAlJ,EAAa0C,kBAAbwG,EAAiC,MAC/B,OAAAC,EAAAnJ,EAAauN,oBAAbpE,EAAmC,IAGvBC,MACpCoE,GAAeA,EAAWpM,SAAWuG,IAGlC8F,EAAkB,OAAAX,EAAA,MAAAQ,OAAA,EAAAA,EAAoBjF,aAApB,EAAAyE,EAA4BjL,KAAKmK,GACpCA,EACDO,YAEpB,MAAO,CACLlE,OAAQ,MAAAoF,EAAAA,EAAmB,GAC3BD,WAAYF,EAAqB,CAACA,GAAqC,GACxE,EAuDmB2gB,CAA+BtmB,QApDzB,IAACA,EA3I/BuB,CAmMA,C,6dC1KO,MAAMglB,GAET,EAAG9oB,gBAAeuL,gBACpB,MAAOwd,EAAUC,GAAe,YAAwB,IAClD,gBAAEztB,IAAoB,IAAAC,uBAAsB,CAAC,GAG7CuL,EAFexL,IAGNyE,cAAc+V,mBAAmBkT,wBAE1C,eAAE5e,IAAmB,UAErB6e,EAAkBlpB,EAAcvD,KAAK7B,GAAiBA,EAAamB,KAEnEyb,IAAWnN,GACb6e,EAAgBpsB,SAASuN,IAG7B,IAAAhO,YAAU,KACJmb,GACFwR,GAAY,EACd,GACC,CAACxR,IAEJ,MAgBM2R,EAAwB,CAC5BC,YAAY,SAACC,GAAA,EAAa,IAC1B,gBAAiB,kBACjBttB,GAAI,iBACJsD,GAAI,CACFiqB,EAAG,EACHlgB,EAAG,EACH+Q,UAAW,OACX,iCAAkC,CAChCmP,EAAG,EACH,iBAAkB,CAChBA,EAAG,EACHnP,UAAW,SAGf,iBAAkB,CAChBmP,EAAG,EACHnP,UAAW,UAWjB,OACE,UAACoP,GAAA,EAAS,SA1CW,CACrB3S,UAAW,EACXvX,GAAI,CACFC,MAAO,OACP6E,gBAAiB,cACjB,UAAW,CAAE5E,QAAS,QACtB,iBAAkB,CAChB+pB,EAAG,IAGP,UAAW,gCAgCV,CAA8BP,WAAoB1C,SA7ChC,CAACmD,EAA6BT,IACjDC,EAAYD,GA6CV,oBAACU,GAAA,EAAgB,SAAKN,GAArB,CACC,mBAAClkB,EAAA,GACCL,QAAQ,WACRvF,GAAI,CAAE2W,cAAe,GACrB3P,MAAM,gBAEL,SAAAU,QAGL,SAAC2iB,GAAA,WAjByB,CAC5BrqB,GAAI,CACF+J,EAAG,KAeF,CAEC/J,GAAI,CAAEsqB,WAAY,OAAQvgB,EAAG,GAE7B,mBAAC,MACCpJ,gBACAuL,oBAGN,E,gBC3GG,MAAMqe,GAAqB,KAChC,MAAMznB,GAAQ,EAAAC,EAAA,MACR,gBAAE7G,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,IACrB,OACE,UAAC6D,EAAA,GACCC,GAAI,CACFC,MAAO,OACPC,QAAS,OACTa,eAAgB,aAChBC,WAAY,SACZM,GAAI,EACJC,GAAI,IACJmF,GAAI,GAEN,UAAQ,wBAER,oBAACgD,EAAA,GACCnE,QAAQ,UACRvF,GAAI,CAAEC,MAAO,GAAIiB,OAAQ,GAAI4D,gBAAiB,UAAWI,GAAI,GAC7D,UAAQ,+BAER,mBAACslB,GAAA,EAAM,CAACxqB,GAAI,CAAEgH,MAAOlE,EAAMiC,QAAQoE,OAAOshB,aAE5C,SAAC7kB,EAAA,GACCL,QAAQ,UACRyB,MAAM,iBACNhH,GAAI,CAAE2W,cAAe,SACrB,UAAQ,8BAEP,SAAAva,EAAauE,cAAc+V,mBAAmBgU,qBAEnD,E,gBCvBG,MAAMC,GAAuD,EAClEhqB,gBACAuL,eAEIA,GAEA,sBACE,oBAAC0e,GAAA,EAAQ,CAAC5qB,GAAI,CAAEkB,OAAQ,OAAQwF,GAAI,EAAGmkB,UAAW,WAClD,SAACD,GAAA,EAAQ,CAAC5qB,GAAI,CAAEkB,OAAQ,OAAQwF,GAAI,EAAGmkB,UAAW,WAClD,SAACD,GAAA,EAAQ,CAAC5qB,GAAI,CAAEkB,OAAQ,OAAQwF,GAAI,EAAGmkB,UAAW,cAKtD,SAAC9qB,EAAA,EAAG,CAAC,UAAQ,4BACV,SAAyB,IAAzBY,EAAcwF,QACb,SAAC,KAAkB,IAEnBxF,EAAcvD,KAAK7B,IACjB,SAAC,MAECA,gBADK,gBAAgBA,EAAamB,S,2KCH9C,MAAM,2CAAEouB,GAA+C,g8CAE1CC,EAAsD,EACjEC,2BAA0B,EAC1BC,uBAAsB,MApCxB,UAuCE,MAAMpoB,GAAW,UAEXrH,GAAW,WAEVwX,EAAOkY,IAAY,IAAAnuB,aACnBouB,EAAYC,IACjB,IAAAruB,aACKsuB,EAAoBC,IACzB,IAAAvuB,aAIM4D,cAAe4qB,EAAgB,uBAAEC,IACvC,QAAiB,CACfjvB,YAAayuB,IAGXrqB,EAAgB4qB,IAChBE,GAAoB,IAAAvO,UAAQ,IAAMvc,GAAe,CAACA,IAElD+qB,EAAsBF,KAGtB,YAAElvB,IAAgB,QAAY,CAAEC,YAAa0uB,KAC5CzuB,GAAWF,IACZG,EAAY,eAAAD,OAAA,EAAAA,EAASE,IAAT,EAAe,GAC3BivB,EAAsB,eAAAnvB,OAAA,EAAAA,EAASmvB,qBAAT,EAAgC,GACtDrrB,EAAc,eAAA9D,OAAA,EAAAA,EAAS8D,aAAT,EAAwB,IAEtC,MAAEsrB,EAAO5Y,MAAO6Y,IAAmB,QAAapvB,IAEhD,oBAAEqvB,IAAwB,OAAoB,CAClDvvB,aAAa,IAETwvB,EAAmBD,IAgJzB,OA9IA,IAAA9uB,YAAU,KACR,GAAK4uB,EAEL,IACE,MAAMI,EAAgB,IAAI,IAAkCJ,GAC5DR,EAAcY,EAChB,CAAE,MAAOhZ,GAaP,OAZA,EAAAiZ,YAAA,aAAyB,qCAAsC,CAC7DjZ,MAAAA,IAEEA,aAAiBkZ,MACnBhB,EAAS,CAAElV,QAAS,MAAAhD,OAAA,EAAAA,EAAOgD,QAASmW,KAAM,MAAAnZ,OAAA,EAAAA,EAAOhF,OAEjDkd,EAAS,CACPlV,QAAS,uCACTmW,KAAM,uBAGVvS,QAAQ5G,MAAM,uCAEhB,IACC,CAAC4Y,KAEJ,IAAA5uB,YAAU,KACR,IAAKmuB,EAAY,OACjB,MAAMiB,EAAWtB,EACjB,IAAKsB,EAAU,OACf,MAAMC,GAAwB,OAAyB,CACrD1vB,OAAQ,CAAEgvB,uBACVrrB,cACA8rB,WACAjB,eAGFG,EAAsBe,EAAsB,GAC3C,CAACV,EAAqBR,EAAY7qB,KAErC,IAAAtD,YAAU,KACR,IAAKquB,EAAoB,OACzB,MAuCMiB,EAAsB,CAC1BC,QAlBcd,EAAkBruB,KAC/B7B,IAzIP,IAAAkJ,EAAAC,EAAA2D,EA0IQ,MAAM3G,EAAW,OAAA+C,EAAAlJ,EAAamG,UAAb+C,EAAyB,GACpCuG,EAAiBzP,EAAamB,GAC9B+E,EAAclG,EAAakG,YAC3ByW,EACJ,OAAA7P,EAAA,OAAA3D,EAAAqnB,EAAiBpnB,MACd6nB,GAAgBA,EAAY9qB,WAAaA,UAD5C,EAAAgD,EAEGwT,mBAFH7P,EAGF,MAAO,CACL3L,GAAIsO,EACJtJ,WACAD,cACAyW,mBACD,IAKHmT,sBAzCiC,I,MA4CnC7vB,GAAS,QAA0B8wB,I,OA5CY,E,EAAA,K,EAAA,YAC7C,UACQjB,EAAmBoB,4BAC3B,CAAE,MAAOC,GACP,EAAAT,YAAA,aACE,iDACA,CACES,QAGJ9S,QAAQ5G,MAAM0Z,GACVA,aAAeR,MACjBhB,EAAS,CAAElV,QAAS,MAAA0W,OAAA,EAAAA,EAAK1W,QAASmW,KAAM,MAAAO,OAAA,EAAAA,EAAK1e,OAE7Ckd,EAAS,CACPlV,QAAS,kDACTmW,KAAM,iBAGZ,CACF,E,gMA4BA,MAAMQ,EAAwB,EAC5BjrB,WACAkrB,aAGkB,sBAAhBA,EAAOC,MACPD,EAAOjB,sBAAwBA,GAE/BnwB,GAAS,QAAoB,CAAEkG,aACjC,EAIF,OADA2pB,EAAmByB,GAAG,sBAAuBH,GACtC,KACLtB,EAAmB0B,IAAI,sBAAuBJ,EAAsB,CACrE,GACA,CACDZ,EACAJ,EACAnwB,EACAiwB,EACAJ,KAGF,IAAAruB,YAAU,KA1LZ,IAAAyH,EAAAC,EAAA2D,EA2LI,MAAM2kB,EAAwB,CAC5BC,EACAC,KAEA,MAAMf,EAAO,MAAAc,EAAAA,EAAa,uBACpBjX,EAAU,MAAAkX,EAAAA,EAAgB,2BAChCtT,QAAQ5G,MAAM,QAAS,CAAEmZ,OAAMnW,YAC/B,EAAAiW,YAAA,aAAyB,uBAAwB,CAAEE,OAAMnW,YACzDxa,GACE,QAAa,CACXua,SAAU,QACVC,UACAE,QAAS,MAEZ,EAEH,GAAIwV,EAAoBvlB,OAAS,EAAG,CAElC6mB,EADkB,OAAAvoB,EAAAinB,EAAoB,GAAGS,WAAvB,EAAA1nB,EAA6B2B,WACdslB,EAAoB,GAAG1V,QAC1D,CACA,GAAI6V,EAAgB,CAElBmB,EADkB,OAAAtoB,EAAAmnB,EAAeM,WAAf,EAAAznB,EAAqB0B,WACNylB,EAAe7V,QAClD,CACA,GAAI,MAAAhD,OAAA,EAAAA,EAAOgD,QAAS,CAElBgX,EADkB,OAAA3kB,EAAA2K,EAAMmZ,WAAN,EAAA9jB,EAAYjC,WACG4M,EAAMgD,QACzC,IACC,CAAC6V,EAAgBrwB,EAAUwX,EAAO0Y,EAAqB7oB,KAEnD,SAAC,KAAiB,GAAC,C,6DCjNrB,MAAMuO,EAAa,EAAGpD,WAC3B,IAAKA,EAAM,OAAO,wBAClB,MAAM4W,EAAO,EAAM5W,GAEnB,OAAO,SAAC4W,EAAA,GAAK,C,6DCRR,MAAMuI,EAAc,KACzB,MAAM,SAAExY,IAAa,UAMrB,OAJA,IAAA3X,YAAU,KACRowB,OAAOC,SAAS,EAAG,EAAE,GACpB,CAAC1Y,IAEG,IAAI,C,+NCsBb,MAca2Y,EAA8C,EACzDzL,UACA2F,gBAEA,MAAM,gBAAEtrB,IAAoB,IAAAC,uBAAsB,CAAC,GAC7CC,EAAeF,KAEf,gBAAEijB,IAAoB,UAEtBoO,GAA8B,IAAApuB,cAAY,KAC9CggB,EACE,6DACA,CAAEK,SAAS,IAAApgB,oCACZ,GACA,CAAC+f,IAEJ,KAAK,MAAA0C,OAAA,EAAAA,EAAS9iB,WACZ,OAAO,wBAET,MAAM,gBAAEiE,IAAoB,IAAAC,mBACtBoT,GAAS,IAAAC,oBAAmBla,EAAama,eAEzCgN,GAAgB,IAAAC,eAAcpnB,EAAaqnB,aAC3CC,GAAgB,IAAAC,uBAAsBvnB,EAAawnB,cAEnD,eAAE4J,EAAc,gBAAE9I,EAAe,eAAEF,GAAmB3C,EAmBtD4L,EAlBwCjG,EAAUpqB,KAAKZ,IAzE/D,MA0EI,MAAMgI,EAAOqd,EAAQtd,MAAMI,MAAMH,GAASA,EAAK9H,KAAOF,EAAQG,SACxD+wB,EAAY,eAAAlpB,OAAA,EAAAA,EAAMmpB,OAAN,EAAe,GAC3BC,EAAc,MAAAJ,OAAA,EAAAA,EAAgB/vB,SAASiwB,GACvCjJ,EAAc,MAAAC,OAAA,EAAAA,EAAiBjnB,SAASiwB,GACxCG,EAAc,MAAArJ,OAAA,EAAAA,EAAgB/mB,SAASiwB,GAE7C,OAAIE,EACK,CAACpxB,EAhDO,GAkDbioB,EACK,CAACjoB,EAlDO,GAoDbqxB,EACK,CAACrxB,EApDO,GAsDV,CAACA,EArDQ,EAqDa,IAEmBymB,MAChD,EAAE,CAAE6K,IAAa,CAAEC,KAAeD,EAAYC,IAsHhD,OACE,sBACE,oBAACnoB,EAAA,EAAU,CAAC5F,GAAI,CAAE4J,SAAU,OAAQjD,WAAY,KAC7C,SAAAkb,EAAQ7T,QAEX,SAACpI,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAE2G,WAAY,IAAKD,GAAI,GACpD,SAAAtK,EAAauE,cAAcmR,SAAS2V,mBAAmBuG,cAE1D,SAACpoB,EAAA,EAAU,CAACL,QAAQ,QACjB,YAAA2R,EAAA,GAAO,IAAItD,KAAKiO,EAAQf,OAAQ,GAAG4C,IAAiB,CACnDrN,cAGJ,UAACzQ,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAE0G,GAAI,KACnC,aAAAwQ,EAAA,GAAO,IAAItD,KAAKiO,EAAQf,OAAQ,GAAGyC,IAAiB,CACnDlN,WAED,OACA,EAAAa,EAAA,GAAO,IAAItD,KAAKiO,EAAQd,KAAMwC,EAAe,CAAElN,cAEjDwL,EAAQ7B,WACP,sBACE,oBAACpa,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAE2G,WAAY,IAAKD,GAAI,GACpD,SAAAtK,EAAauE,cAAcmR,SAAS2V,mBAAmBwG,eAE1D,SAACroB,EAAA,EAAU,CAACL,QAAQ,QAAS,SAAAsc,EAAQ7B,cA/Eb,MAC9B,OAAQ6B,EAAQ9B,mBACd,IAAK,SACH,OACE,SAAC/Q,EAAA,GACC,UAAQ,mDACRgC,UAAU,IACVzL,QAAQ,WACRyB,MAAM,OACNnC,KAAK,QACLoK,WAAW,SAACif,EAAA,EAAgB,IAC5BluB,GAAI,CAAE8E,gBAAiB,QAAS6B,WAAY,IAAKD,GAAI,KACrD8K,WAAS,EACThL,QAAS,KACP+mB,IACAH,OAAO/nB,KACL,GACE+nB,OAAOpN,SAASmO,SAAW,KAAOf,OAAOpN,SAASoO,cAC1CvM,EAAQnlB,KACnB,EAID,SAAAN,EAAauE,cAAcmR,SAAS2V,mBACjC4G,sCAIX,IAAK,WACH,OACE,SAACrf,EAAA,GACC,UAAQ,mDACRgC,UAAU,IACVzL,QAAQ,WACRyB,MAAM,OACNnC,KAAK,QACLoK,WAAW,SAAC,MAAgB,IAC5BjP,GAAI,CAAE8E,gBAAiB,QAAS6B,WAAY,IAAKD,GAAI,KACrD8K,WAAS,EACT8c,KAAMzM,EAAQ0M,qBACdC,OAAO,SACPhoB,QAAS+mB,EAGP,SAAAnxB,EAAauE,cAAcmR,SAAS2V,mBACjCgH,kCAIX,QACE,OACJ,EA+BGC,IACD,SAAC9oB,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAE2G,WAAY,IAAKD,GAAI,EAAGvB,GAAI,KAC3D,SAAA/I,EAAauE,cAAcmR,SAAS2V,mBAAmBkH,kBAhJ5DlB,EAAwBrwB,KAAI,EAAEZ,EAASoyB,GAAWpnB,KAhGtD,UAiGM,MAAMomB,EAhES,IAgEKgB,EACdnK,EAhES,IAgEKmK,EACdf,EAhES,IAgEKe,EAEpB,IAAI9pB,EAAkB,iBAClB8oB,EACF9oB,EAAkB,gBACT2f,EACT3f,EAAkB,iBACT+oB,IACT/oB,EAAkB,eAGpB,MAAM+pB,EAAQ7rB,EAAgB,CAC5BzC,eAAgB/D,EAAQgE,QACxBC,YAAa,MAAAjE,OAAA,EAAAA,EAASiE,cAExB,OACE,UAACV,EAAA,GAECC,GAAI,CACFC,MAAO,cACPC,QAAS,OACTa,eAAgB,aAChBC,WAAY,SACZsF,aAAc,OACdye,QAAS,UACTre,GAAc,IAAVc,EAAc,KAAO,EACzB1C,mBAGF,oBAAC4E,EAAA,GACCC,IAAKklB,EACL7uB,GAAI,CAAEC,MAAO,OAAQiB,OAAQ,QAC7BqE,QAAQ,aAGV,SAACK,EAAA,EAAU,CAACL,QAAQ,QAAQvF,GAAI,CAAE6c,GAAI,GACnC,SAAArgB,EAAQ8D,cAEVstB,IACC,SAACkB,EAAA,GACC9uB,GAAI,CAAE4J,SAAU,OAAQ5C,MAAO,iCAAwB/B,QAG1Dwf,IACC,SAACsK,EAAA,GACC/uB,GAAI,CAAE4J,SAAU,OAAQ5C,MAAO,iCAAwB/B,QAG1D4oB,IACC,SAACmB,EAAA,GACChvB,GAAI,CAAE4J,SAAU,OAAQ5C,MAAO,+BAAsB/B,UAjCpDzI,EAAQE,GAoCf,MA2FJ,C,yFC3OG,MAAMuyB,EAET,EAAGC,WAAUC,aAEb,UAAC,MAA4B,CAC3B,oBAACC,EAAA,CAAwBD,WACxBD,KAKME,EAET,EAAGD,YACAA,GAEH,SAACvpB,EAAA,EAAU,CAACL,QAAQ,KAAKyL,UAAU,KAAKhR,GAAI,CAAE2G,WAAY,IAAKxB,GAAI,GAChE,SAAAgqB,IAHe,KCdTE,EAAoD,EAC/D/sB,kBAGE,qBACE,mBAACsD,EAAA,EAAU,CAACL,QAAQ,QAAQyL,UAAU,IAAIhK,MAAM,iBAC7C,SAAA1E,M,eCNF,MAAMgtB,EAAgD,EAC3DC,eAEKA,GAWH,qBACE,mBAAC3pB,EAAA,EAAU,CAACL,QAAQ,KAAKyL,UAAU,KAAKhR,GAAI,CAAE2G,WAAY,KACvD,SAAA4oB,OAXH,qBACE,mBAAC3E,EAAA,EAAQ,CAACrlB,QAAQ,OAChB,mBAACK,EAAA,EAAU,CAACL,QAAQ,KAAKyL,UAAU,KAAKhR,GAAI,CAAE2G,WAAY,KAAO,gC,yjBCuBpE,MAAM6oB,EAAyD,EACpEzzB,mBACA0zB,2BAA0B,EAC1BC,2BAA0B,EAC1BC,uBAAsB,EACtBC,mCAAkC,EAClCV,eA5CF,MA+CE,MAAM,MAAEpsB,EAAK,SAAE+sB,IAAa,IAAAxU,YAAW,MAEhChI,EAASyc,IAAc,IAAA/yB,WAAkB,GAG1CvB,GAAW,WAIX,WAAEu0B,IAAe,QAAgBh0B,IAEjC,kBAAEi0B,GAAsB,i8CACtBC,KAAMC,IAAiB,UAEzB,4BACJC,EAA2B,0BAC3BC,EAAyB,4BACzBC,EAA2B,4BAC3BC,IACE,IAAAn0B,uBAAsB,CACxBI,YAAamzB,EACb3zB,mBACAg0B,eAGIQ,EAA4BJ,IAC5BK,EAA0BJ,IAC1BK,EAA4BJ,KAE5B,4BACJK,EAA2B,0BAC3BC,EAAyB,4BACzBC,EAA2B,4BAC3BC,EAA2B,gBAC3BC,IACE,IAAAC,uBAAsB,CACxBh1B,mBACAQ,YAAakzB,EACbM,eAEIiB,EAA4BN,IAC5BO,EAA0BN,IAC1BO,EAA4BN,IAC5BO,EAAqBL,IACrBM,EAA2BD,EAAmBE,OAC9CC,EAA+BH,EAAmBI,YAElDC,EACJJ,EAAyBK,2BAGrBC,GADJ,SAAAN,EAAyBO,qBAAzB,EAAgD,IACSxrB,OAAS,GAG9D,wBACJyrB,EAAuB,sBACvBC,EAAqB,wBACrBC,EAAuB,wBACvBC,IACE,IAAAzzB,+BAA8B,CAChCvC,mBACAQ,YAAaqzB,EACbG,eAEIiC,EAAoCF,IACpCG,EAAkCJ,IAClCK,GAAoCH,KAIxC1e,QAAS8e,GACTnf,MAAOof,GAAoB,SAC3BC,KACE,IAAAC,mBAAkB,CAAE/1B,YAAaozB,EAAqBI,eAGpDwC,IAAiB,IAAApzB,cAAY,KA3HrC,IAAAsF,EA4HI,IAAK6sB,EAA8B,OACnC,MAAMkB,EACJ,OAAA/tB,EAAA6sB,EAA6BmB,qBAAqBC,eAAlDjuB,EAAmE,CAAC,EAChEkuB,EAAqB9nB,OAAOwa,QAAQmN,GAA0BI,QAClE,CAACC,GAAMzf,EAAKvC,KAAY,OACnBgiB,GADmB,CAEtB,CAACzf,GAAM,CACLnO,KAAM4L,EAAMiiB,IACZ7f,YAAa,QAAQpC,EAAMkiB,IAAIC,MAAMniB,EAAMkiB,IAAIE,MAAMpiB,EAAMkiB,IAAIG,cAGnE,CAAC,GAEGC,GAAc,OAAY,OAC3BrwB,GAD2B,CAE9BiC,QAAS,OACJjC,EAAMiC,SACN4tB,MAIP,OADA9C,EAASsD,GACFA,CAAW,GACjB,CAACtD,EAAU/sB,EAAOwuB,IA8IrB,OA5IA,IAAAt0B,YAAU,KACRkzB,EAAa,CACXkD,iBAAkB,CAChBr3B,mBACAs3B,WAAYrD,IAEd,KAGJ,IAAAhzB,YAAU,MAELg0B,IAA8BC,GAC9BV,IAA8BC,GAC9B2B,KAA0BC,IAC1BJ,IAAsCC,KAEvCz2B,GAAS,SAAgB,IACzBs0B,GAAW,IAETzc,GAAW6d,GACbqB,KAGArB,GACAT,GACA4B,IACAH,KAEA12B,GAAS,SAAe,IACxBs0B,GAAW,GACb,GACC,CACDt0B,EACAg1B,EACAS,EACAgB,EACAG,GACA/e,EACAkd,EACAS,EACAgB,EACAG,GACAI,GACAF,GACA5B,EACAS,EACAgB,MAGF,IAAAl1B,YAAU,KACR,MAAMgwB,EAAwB,CAC5BC,EACAC,KAEA,MAAMlX,EAAU,MAAAkX,EAAAA,EAAgB,0BAChCtT,QAAQ5G,MAAM,QAAS,CAAEia,YAAWC,iBACpC,EAAAjB,YAAA,aAAyB,iBAAkB,CACzCgB,YACAC,iBAEF1xB,GACE,QAAa,CACXua,SAAU,QACVC,UACAE,QAAS,OAGb1a,GAAS,SAAe,IAExBs0B,GAAW,EAAM,EAGnB,GAAIU,EAAyB,CAI3BxD,EAFkB,qBADSsD,IAEa,GAAGta,QAE7C,CACA,GAAIib,EAAyB,CAI3BjE,EAFkB,qBADS6D,IAEa,GAAG7a,QAE7C,CACA,GAAIoc,GAAsB,CAGxBpF,EAFmB,iBACG,GAAGoF,GAAqBpc,UAEhD,CACA,GAAIic,EAAiC,CAInCjF,EAFkB,6BADiB4E,IAEa,GAAG5b,QAErD,IACC,CACDxa,EACAg1B,EACAS,EACAgB,EACAG,GACA9B,EACAO,EACAe,KAGF,IAAA50B,YAAU,KACR,MAAMs2B,EAAgClgB,IACpC5X,GAAS,QAAuB4X,GAAK,EAGnCC,GAEFigB,EADE9B,GAA8BE,EACH,sBAG3BF,EAC2B,gBAG3BE,EAC2B,kBAGF,OAAO,GACnC,CAACl2B,EAAUg2B,EAA4BE,EAAmBre,KAE7D,IAAArW,YAAU,KACR,GAAIqW,EAAS,OAEb,MAAOL,GAASsd,KAGd,MAAAtd,OAAA,EAAAA,EAAOgD,WAAY,EAAAud,yBAAA,OACU,eAA7BnG,OAAOpN,SAASwT,UAEhBpG,OAAOpN,SAAStO,QAAQ,yBAC1B,GACC,CAAC2B,EAASid,IAETjd,IAAY0c,GAAmB,SAAC,KAAc,IAE3Cb,CAAQ,C","sources":["file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipDetails/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipDetailsGroupSidebar/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipDetailsSidebar/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipGoals/RelationshipGoalsCreate/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipGoals/RelationshipGoalsEdit/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipGoals/RelationshipGoalsManage/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipGoals/RelationshipGoalsView/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipGoals/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipGroupAlert/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipsConclude/RelationshipsConcludeDialog/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipsConclude/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipHeader/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipItem/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipNotes/RelationshipNotesCreate/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipNotes/RelationshipNotesEmpty/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipNotes/RelationshipNotesList/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipNotes/RelationshipNotesView/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipNotes/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipSessions/RelationshipSessionsCreate/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipSessions/RelationshipSessionsEdit/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipSessions/RelationshipSessionsHistory/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipSessions/RelationshipSessionsIntegrate/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipSessions/RelationshipSessionsLog/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipSessions/RelationshipSessionsView/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipSessions/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipViewProfileModal/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipViewProfile/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipsArchivedList/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipsEmpty/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Relationships/RelationshipsList/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/RelationshipsWrapper/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/SanityIcon/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/ScrollToTop/index.ts","file:////home/runner/work/platform/platform/apps/front-end/src/components/Sessions/SessionsDetails/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Settings/SettingsContainer/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Settings/SettingsDescription/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/Settings/SettingsSubheader/index.tsx","file:////home/runner/work/platform/platform/apps/front-end/src/components/SetupWrapper/index.tsx"],"sourcesContent":["// external\nimport { Box, Collapse } from '@mui/material';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// components\nimport {\n Chat,\n RelationshipDetailsGroupSidebar,\n RelationshipDetailsSidebar,\n RelationshipHeader,\n} from 'components';\n\n// store\nimport { RootState } from 'store';\nimport { hideNavbar, showNavbar } from 'store/slices/appSlice';\n\n// hooks\nimport { useMixpanelEvents, useMobileMediaQuery, useProfiles } from 'hooks';\n\n// types\nimport {\n getISOStringWithoutMilliseconds,\n getSubDomain,\n} from '@guider-global/front-end-utils';\nimport {\n useOrganization,\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\nimport {\n EProgramVariation,\n IProfile,\n IRelationship,\n Program,\n} from '@guider-global/shared-types';\nimport { interpolate } from 'functions';\nimport { RelationshipGroupTraineeModal } from 'modals/Relationship/RelationshipGroup';\nimport { getRecipients } from 'utils/getRelationshipRecipients';\n\ninterface IRelationshipDetailsProps {\n relationship: IRelationship;\n}\n\nexport const RelationshipDetails: React.FC = ({\n relationship,\n}) => {\n const dispatch = useDispatch();\n const traineeModal = useSelector(\n (state: RootState) => state.app.modals.traineeModal,\n );\n\n const organizationSlug = getSubDomain();\n\n const programSlug = relationship?.programSlug ?? undefined;\n\n // Base Language\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const { trackMixpanelEvent } = useMixpanelEvents();\n\n const { getProfiles } = useProfiles({ getSilently: false });\n const [profile] = getProfiles();\n const profileId = profile.id;\n const userId = profile.userId;\n\n const isMobile = useMobileMediaQuery();\n\n const [isSidebarOpen, setIsSidebarOpen] = useState(false);\n\n useEffect(() => {\n if (isMobile) {\n dispatch(hideNavbar(true));\n } else {\n dispatch(showNavbar(true));\n }\n\n return function cleanup() {\n dispatch(showNavbar(true));\n };\n }, [dispatch, isMobile]);\n\n const guideProfiles = relationship?.guideProfiles as Partial[];\n const traineeProfiles = relationship?.traineeProfiles as Partial[];\n\n const guideProfilesIds = guideProfiles?.map(\n (guideProfile) => guideProfile?.id,\n );\n const traineeProfilesIds = traineeProfiles?.map(\n (traineeProfile) => traineeProfile?.id,\n );\n\n const isGuide = guideProfilesIds?.includes(profileId) ?? false;\n const isTrainee = traineeProfilesIds?.includes(profileId) ?? false;\n\n const chosenGuide = guideProfiles?.at(0);\n\n const isGroupProgram =\n relationship?.programVariationTypeSlug === EProgramVariation.Group;\n const guideMembership = relationship?.guideMemberships?.at(0);\n const isNotLiveGroup = guideMembership?.isPublished === true;\n\n const isTraineeModalOpen = isTrainee && traineeModal;\n\n // - Programs\n const { getProgram } = useSanityOrganizationPrograms({});\n\n const { organization } = useOrganization({ organizationSlug });\n\n let program: Program | undefined;\n let programType;\n\n if (programSlug) {\n program = getProgram(programSlug);\n programType = program?.program_details?.program_type;\n } else {\n programType = organization?.open_matching?.program_type;\n }\n\n const relationshipCreatedAt = relationship.createdAt;\n\n const recipients = getRecipients({\n role: isGuide ? 'guide' : 'trainee',\n relationship,\n userId,\n });\n\n const handleMessageSend = useCallback(async () => {\n trackMixpanelEvent('Relationship - Message sent', {\n 'Sent on': getISOStringWithoutMilliseconds(),\n Role: isGuide ? 'guide' : 'trainee',\n Program: relationship.programSlug,\n });\n }, [isGuide, relationship.programSlug, trackMixpanelEvent]);\n\n useEffect(() => {\n if (!program || !recipients) return;\n trackMixpanelEvent('Relationship - Viewed', {\n 'Viewed on': getISOStringWithoutMilliseconds(),\n Program: relationship.programSlug,\n });\n }, [program, recipients, relationship.programSlug, trackMixpanelEvent]);\n\n const programVariation =\n programType?.program_type_text?.variations?.individual;\n\n const programName = program?.metadata.program_name;\n\n const recipient = recipients.at(0);\n\n return (\n \n \n \n \n \n {!!relationship && (\n \n )}\n \n \n \n {isGroupProgram ? (\n \n ) : (\n \n )}\n \n \n {!isGuide && (\n \n )}\n \n );\n};\n\nexport default RelationshipDetails;\n","// external\nimport {\n Avatar,\n Box,\n Chip,\n ChipProps,\n Divider,\n Drawer,\n Typography,\n useTheme,\n} from '@mui/material';\nimport React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\n// components\nimport {\n RelationshipGroupAlert,\n RelationshipSessions,\n RelationshipViewProfileModal,\n} from 'components';\n\n// types\nimport {\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\nimport {\n IMembership,\n IRelationship,\n ISkill,\n} from '@guider-global/shared-types';\n\nimport { useProfileImage } from '@guider-global/azure-storage-hooks';\nimport {\n Button,\n MultiAvatarButton,\n Stack,\n Text,\n hexToRGB,\n} from '@guider-global/ui';\nimport {\n MembershipDataProps,\n ProfilePreviewProfileData,\n} from 'components/ProfilePreview';\nimport { useMobileMediaQuery } from 'hooks';\nimport { RelationshipGroupMembersModal } from 'modals';\n\ninterface IRelationshipDetailsGroupSidebarProps {\n relationship: IRelationship;\n isGroupProgram: boolean;\n isGuide: boolean;\n}\n\nexport const RelationshipDetailsGroupSidebar: React.FC<\n IRelationshipDetailsGroupSidebarProps\n> = ({ relationship, isGroupProgram, isGuide }) => {\n const navigate = useNavigate();\n const theme = useTheme();\n const isMobile = useMobileMediaQuery();\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n const { getProfileImage } = useProfileImage();\n\n const [selectedUserId, setSelectedUserId] = useState();\n\n const [groupMembersModalOpen, setGroupMembersModalOpen] = useState(false);\n const handleGroupMembersModalClose = () => {\n setGroupMembersModalOpen(false);\n };\n\n const { getProgram } = useSanityOrganizationPrograms({});\n\n const programSlug = relationship?.programSlug;\n const program = programSlug ? getProgram(programSlug) : undefined;\n\n useEffect(() => {\n const programSlug = relationship?.programSlug;\n if (!programSlug || !program) {\n navigate('/relationships');\n }\n }, [navigate, program, relationship?.programSlug]);\n\n if (!programSlug || !program) {\n return <>;\n }\n\n const guideMembership = relationship.guideMemberships?.at(0);\n const isActiveGroup = guideMembership?.isPublished === false;\n\n const programTypeGuideNoun =\n program?.program_details?.program_type?.program_type_text.common?.noun;\n\n const skillsConfig = program?.registration?.skills;\n const isSkillsEnabled = skillsConfig?.enable_skills_question;\n\n const guideMembershipData = relationship?.guideMemberships?.at(0);\n const skills = guideMembershipData?.skills as Partial[];\n\n const { title: modalTitle } = baseLanguage.relationships.view_profile_modal;\n const modalCloseButtonLabel =\n baseLanguage.globals?.common?.close_button_label ?? 'Close';\n\n const handleProfileModalClose = () => {\n setSelectedUserId(undefined);\n setGroupMembersModalOpen(true);\n };\n const handleProfileModalOpen = (userId?: string) => {\n setSelectedUserId(userId);\n handleGroupMembersModalClose();\n };\n\n const getSelectedProfileData = (\n selectedUserId?: string,\n ): ProfilePreviewProfileData => {\n const guideProfiles = relationship.guideProfiles ?? [];\n const traineeProfiles = relationship.traineeProfiles ?? [];\n const profiles = [...guideProfiles, ...traineeProfiles];\n const users = relationship.users ?? [];\n\n const selectedProfile = profiles.find(\n (profile) => profile.userId === selectedUserId,\n );\n\n const selectedProfileUserId = selectedProfile?.userId;\n\n const selectedUser = users.find(\n (user) => user.id === selectedProfileUserId,\n );\n return {\n ...selectedProfile,\n pictures: {\n profile: selectedProfile?.picture,\n user: selectedUser?.picture,\n },\n };\n };\n\n const getSelectedProfileMembershipData = (\n selectedUserId?: string,\n ): MembershipDataProps => {\n const guideMemberships = relationship.guideMemberships ?? [];\n const traineeMemberships = relationship.traineeMemberships ?? [];\n const memberships = [...guideMemberships, ...traineeMemberships];\n\n const selectedMembership = memberships.find(\n (membership) => membership.userId === selectedUserId,\n );\n\n const skillFieldSlugs = selectedMembership?.skills?.map((skill) => {\n const skillTyped = skill as ISkill;\n return skillTyped.fieldSlug;\n });\n return {\n skills: skillFieldSlugs ?? [],\n membership: selectedMembership ? [selectedMembership as IMembership] : [],\n };\n };\n const getSelectedRelationshipRole = (selectedUserId?: string) => {\n const guideProfile = relationship.guideProfiles?.find(\n (guideProfile) => guideProfile.userId === selectedUserId,\n );\n if (guideProfile) return 'guide';\n return 'trainee';\n };\n\n const avatars =\n relationship.users?.map((user) => {\n const userId = user.id;\n const traineeProfile = relationship.traineeProfiles?.find(\n (traineeProfile) => traineeProfile.userId === userId,\n );\n const guideProfile = relationship.guideProfiles?.find(\n (guideProfile) => guideProfile.userId === userId,\n );\n const profilePicture = traineeProfile\n ? traineeProfile.picture\n : guideProfile?.picture;\n const userPicture = user.picture;\n return getProfileImage({\n profilePicture: profilePicture,\n userPicture: userPicture,\n });\n }) ?? [];\n\n const chipProps: Partial = {\n size: 'small',\n sx: {\n backgroundColor: `rgba(${hexToRGB(theme.palette.info.main)}, 0.08)`,\n mr: 1,\n mb: 1,\n },\n };\n\n const programName = program.metadata.program_name;\n return (\n \n {isMobile && (\n <>\n \n \n {programName}\n \n \n setGroupMembersModalOpen(!groupMembersModalOpen)}\n />\n \n \n \n \n )}\n \n \n \n \n {program.registration?.registration_group?.group_description\n .question_heading ??\n program.registration?.registration_group?.group_description\n .input_label}\n \n\n \n {relationship.description}\n \n {isSkillsEnabled && guideMembershipData?.skills && (\n \n \n {skillsConfig.guide.question_heading ??\n skillsConfig?.text?.input_label ??\n ''}\n \n \n {skills.map((skill, index) => (\n option.id.current === skill.fieldSlug,\n )?.label\n }\n {...chipProps}\n />\n ))}\n \n \n )}\n \n\n {relationship && (\n \n )}\n {relationship && (\n \n {relationship.guideProfiles?.map((guideProfile) => {\n const guideUser = relationship.users?.find(\n (user) => guideProfile.userId,\n );\n\n return (\n handleProfileModalOpen(guideProfile?.userId)}\n >\n \n \n \n \n );\n })}\n\n {relationship.traineeProfiles?.map((traineeProfile, index) => {\n const traineeUser = relationship.users?.find(\n (user) => traineeProfile.userId === user.id,\n );\n return (\n handleProfileModalOpen(traineeProfile.userId)}\n >\n \n\n \n \n );\n })}\n \n )}\n \n );\n};\n","// external\nimport { Divider, Drawer, Typography, useTheme } from '@mui/material';\nimport React from 'react';\n\n// components\nimport {\n RelationshipGoals,\n RelationshipNotes,\n RelationshipSessions,\n RelationshipViewProfile,\n} from 'components';\n\n// types\nimport { useSanityOrganizationPrograms } from '@guider-global/sanity-hooks';\nimport { IRelationship, Program } from '@guider-global/shared-types';\n\nimport { useMobileMediaQuery } from 'hooks';\n\ninterface IRelationshipDetailsSidebarProps {\n relationship: IRelationship;\n isGroupProgram: boolean;\n isGuide: boolean;\n}\n\nexport const RelationshipDetailsSidebar: React.FC<\n IRelationshipDetailsSidebarProps\n> = ({ relationship, isGroupProgram, isGuide }) => {\n const theme = useTheme();\n const isMobile = useMobileMediaQuery();\n\n const programSlug = relationship?.programSlug ?? undefined;\n\n const { getProgram } = useSanityOrganizationPrograms({});\n let program: Program | undefined;\n\n if (programSlug) {\n program = getProgram(programSlug);\n }\n\n const programName = program?.metadata?.program_name;\n return (\n \n {isMobile && programName && (\n <>\n \n {programName}\n \n \n \n )}\n \n \n \n \n \n );\n};\n\nexport default RelationshipDetailsSidebar;\n","// external\nimport React from 'react';\nimport { Control, SubmitHandler, useForm } from 'react-hook-form';\nimport { useNavigate } from 'react-router-dom';\n\n// internal\nimport { getSubDomain } from '@guider-global/front-end-utils';\nimport { GoalsCreateForm } from 'forms';\nimport { useGoals, useRelationships } from 'hooks';\n\n// types\nimport { IGoal, IRelationship } from '@guider-global/shared-types';\n\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\n\nimport { ModalCard } from 'components';\nimport { IButtonAction } from 'components/ActionButton';\n\ninterface IRelationshipGoalsCreateProps {\n relationship: IRelationship;\n handleClose: () => void;\n}\n\nexport type IGoalInputs = {\n categorySlug: string;\n objective: string;\n outcomes: string;\n rationale: string;\n};\n\nexport const RelationshipGoalsCreate: React.FC<\n IRelationshipGoalsCreateProps\n> = ({ relationship, handleClose }) => {\n //baseLanguage\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n //form\n const {\n handleSubmit,\n control,\n formState: { errors, isValid },\n } = useForm({ mode: 'onChange' });\n const typedControl: Control = control as unknown as Control;\n\n //hooks\n const navigate = useNavigate();\n const organizationSlug = getSubDomain();\n const { isLoadingGoals, reqGoals } = useGoals({});\n const { reqRelationships } = useRelationships({});\n\n //handlers\n const onSubmit: SubmitHandler = async (data) => {\n Object.assign(data, {\n status: 'on_track',\n organizationSlug,\n relationshipId: relationship.id,\n });\n\n const { data: goalsResponseData } = await reqGoals({\n method: 'POST',\n url: '/goals',\n data,\n });\n\n const currentGoalIds = relationship.goals?.map((goal) => goal.id) ?? [];\n\n const newGoalIds = goalsResponseData?.map((goal: IGoal) => goal.id) ?? [];\n\n await reqRelationships({\n method: 'PATCH',\n url: `/relationships/${relationship.id}`,\n // TODO typing needs fixing\n // @ts-ignore\n data: {\n goals: [...currentGoalIds, ...newGoalIds],\n },\n });\n\n await Promise.all([\n reqGoals({ url: '/goals' }),\n reqRelationships({ url: '/relationships' }),\n ]);\n\n navigate(`/relationships/${relationship.id}/goals`);\n };\n\n //modal actions\n const contentModalActions: IButtonAction | IButtonAction[] = [\n {\n label:\n baseLanguage.relationships.goals.create_and_update_goal.create_goal\n .discard_button_label,\n variant: 'outlined',\n color: 'info',\n action: () => navigate(-1),\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsCreate_navigation-button',\n },\n {\n label: baseLanguage.globals.goals.create_goal_button_label,\n variant: 'contained',\n color: 'info',\n action: handleSubmit(onSubmit),\n isLoadingButton: true,\n disabled: !isValid,\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsCreate_submit-button',\n },\n ];\n\n return (\n \n navigate(-1)}\n hideButtons\n relationship={relationship}\n />\n \n );\n};\n","// external\nimport React, { useState } from 'react';\nimport { Control, SubmitHandler, useForm } from 'react-hook-form';\nimport { useNavigate, useParams } from 'react-router-dom';\n\n// components\nimport { IGoalInputs, ModalCard } from 'components';\nimport GoalsEditForm from 'forms/GoalsEditForm';\nimport { ConfirmationModal } from 'modals';\n\n// hooks\nimport { useGoals, useRelationships } from 'hooks';\n\n// types\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\nimport { IRelationship } from '@guider-global/shared-types';\n\nimport { IButtonAction } from 'components/ActionButton';\n\ninterface IRelationshipGoalsEdit {\n relationship: IRelationship;\n handleClose: () => void;\n}\n\nexport const RelationshipGoalsEdit: React.FC = ({\n relationship,\n handleClose,\n}) => {\n //State\n const [isDiscardModalOpen, setIsDiscardModalOpen] = useState(false);\n\n //baseLanguage\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const discardChangesButtonLabel =\n baseLanguage.globals?.common?.discard_changes_button_label ??\n 'Discard Changes';\n\n //hooks\n const navigate = useNavigate();\n const { goalId } = useParams();\n\n //form\n const {\n handleSubmit,\n control,\n formState: { errors, isValid, isDirty },\n } = useForm({ mode: 'onChange' });\n\n //goals\n const { isLoadingGoals, reqGoals, goals } = useGoals({});\n const { reqRelationships } = useRelationships({ getSilently: false });\n\n const goal = goals().find((goal) => goal.id === goalId);\n\n if (!goal?.createdAt) {\n return <>;\n }\n\n const typedControl: Control = control as unknown as Control;\n\n //handlers\n const onSubmit: SubmitHandler = async (data) => {\n const { data: goalsResponseData } = await reqGoals({\n method: 'PATCH',\n url: `/goals/${goalId}`,\n data,\n });\n\n await Promise.all([\n reqGoals({ url: '/goals' }),\n reqRelationships({ url: '/relationships' }),\n ]);\n\n if (!goalsResponseData) {\n return;\n }\n\n navigateBack();\n };\n\n const navigateBack = () => {\n navigate(-1);\n };\n\n const handleDiscardChanges = () => {\n if (!isDirty) {\n navigateBack();\n } else {\n setIsDiscardModalOpen(true);\n }\n };\n\n const handleDiscardModalClose = () => {\n setIsDiscardModalOpen(false);\n };\n\n //modal actions\n\n const contentModalActions: (IButtonAction | IButtonAction[])[] = [\n {\n label: baseLanguage.globals.common.go_back_button_label,\n variant: 'outlined',\n color: 'info',\n action: handleDiscardChanges,\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsEdit_edit-button',\n },\n {\n label: baseLanguage.globals.common.save_changes_button_label,\n variant: 'contained',\n color: 'info',\n disabled: !isValid || !isDirty,\n isLoadingButton: true,\n action: handleSubmit(onSubmit),\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsEdit_submit-button',\n },\n ];\n\n const discardModalActions: IButtonAction[] = [\n {\n label: baseLanguage.globals.common.cancel_button_label,\n action: handleDiscardModalClose,\n color: 'info',\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsEdit_discard-close-button',\n },\n {\n label: discardChangesButtonLabel,\n action: () => {\n navigateBack();\n },\n color: 'error',\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsEdit_disarc-confirm-button',\n },\n ];\n\n return (\n \n \n \n \n );\n};\n","// external\nimport { Box, Button, Typography, useTheme } from '@mui/material';\nimport React from 'react';\nimport { MdAdd } from 'react-icons/md';\nimport { useNavigate, useParams } from 'react-router-dom';\n\n// components\nimport { GoalsEmptyPageContent, GoalsItem, ModalCard } from 'components';\n\n// hooks\nimport { useGoals, useRelationships } from 'hooks';\n\n// types\nimport {\n useOrganization,\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\nimport { IGoal, IRelationship } from '@guider-global/shared-types';\nimport { Divider } from '@guider-global/ui';\nimport { IButtonAction } from 'components/ActionButton';\nimport { getSubDomain } from '@guider-global/front-end-utils';\n\ninterface IRelationshipGoalsManageProps {\n relationship: IRelationship;\n handleClose: () => void;\n}\n\nexport const RelationshipGoalsManage: React.FC<\n IRelationshipGoalsManageProps\n> = ({ relationship, handleClose }) => {\n const { relationshipId = '' } = useParams<{\n relationshipId: string;\n }>();\n\n // Organization\n const organizationSlug = getSubDomain();\n const { organization } = useOrganization({\n organizationSlug,\n });\n //style\n const theme = useTheme();\n\n //baseLanguage\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n //hooks\n\n const { reqRelationships, isLoadingRelationships } = useRelationships({});\n const navigate = useNavigate();\n\n const { reqGoals, isLoadingGoals } = useGoals({\n getSilently: true,\n });\n\n // Get goals data\n\n const { getProgram } = useSanityOrganizationPrograms({});\n const program = getProgram(relationship.programSlug);\n\n const customGoalCategories =\n program?.registration?.goals?.custom_goal_categories?.map(\n (customCategory) => ({\n label: customCategory.goal_category_name,\n slug: customCategory.goal_category_slug.current,\n icon: customCategory.goal_category_icon?.name,\n }),\n ) ?? [];\n\n const organizationGoalCategories =\n organization?.goal_categories?.categories?.map((goalCategory) => ({\n label: goalCategory.goal_category_name,\n slug: goalCategory.goal_category_slug.current,\n icon: goalCategory.goal_category_icon?.name,\n })) ?? [];\n\n const goalCategories =\n organizationGoalCategories.concat(customGoalCategories);\n const goals = relationship?.goals as Partial[];\n\n const relationshipGoals = goals.filter(\n (goal) => goal.relationshipId === relationshipId,\n );\n\n const currentRelationshipGoalIds = relationshipGoals\n .filter((goal): goal is IGoal => goal.id !== undefined)\n .map((goal) => goal.id);\n if (!relationship) {\n return <>;\n }\n\n //handlers\n const handleLinkGoal = async (id: string) => {\n const { data: goalsResponseData } = await reqGoals({\n method: 'PATCH',\n url: `/goals/${id}`,\n data: {\n relationshipId,\n },\n });\n reqGoals({ url: '/goals' });\n\n const newGoalIds = goalsResponseData?.map((goal: IGoal) => goal.id) ?? [];\n\n await reqRelationships({\n method: 'PATCH',\n url: `/relationships/${relationshipId}`,\n // TODO Fix typings\n // @ts-ignore\n data: {\n goals: [...currentRelationshipGoalIds, ...newGoalIds],\n },\n });\n reqRelationships({ url: '/relationships' });\n };\n\n //modal actions\n const modalActions: (IButtonAction | IButtonAction[])[] = [\n {\n label: baseLanguage.globals.common.close_button_label,\n color: 'info',\n variant: 'contained',\n action: handleClose,\n isLoadingButton: true,\n dataCyLabel: 'relationship-manage-goals-modal-close-action-button',\n },\n ];\n\n //renderers\n const renderContent = () => {\n if (relationshipGoals.length === 0) {\n return (\n \n );\n }\n\n return (\n <>\n \n }\n onClick={() =>\n navigate(`/relationships/${relationship.id}/goals/create`)\n }\n color=\"info\"\n variant=\"outlined\"\n sx={{ fontWeight: 600 }}\n >\n {baseLanguage.globals.goals.create_goal_button_label}\n \n \n\n {goals.length !== 0 && (\n \n \n {baseLanguage?.relationships?.goals?.manage_goals_modal\n ?.relationship_goals_divider_text ?? 'Relationship goals'}\n \n \n )}\n {goals.length !== 0 &&\n goals.map((goal) => {\n const goalCategory = goalCategories.find(\n (goalCategory) => goalCategory.slug === goal.categorySlug,\n );\n return (\n \n );\n })}\n \n );\n };\n\n return (\n \n {renderContent()}\n \n );\n};\n","// external\nimport { useTheme } from '@mui/material';\nimport React, { useState } from 'react';\nimport { useNavigate, useParams } from 'react-router-dom';\n\n// components\nimport { ModalCard } from 'components';\nimport { GoalsDetails } from 'components/Goals/GoalsDetails';\nimport { ConfirmationModal } from 'modals';\n\n// hooks\nimport { useGoals, useRelationships } from 'hooks';\n\n// types\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\nimport { IGoal, IRelationship } from '@guider-global/shared-types';\nimport { IButtonAction } from 'components/ActionButton';\n\ninterface IRelationshipGoalsViewProps {\n relationship: IRelationship;\n handleClose: () => void;\n isGuide: boolean;\n}\n\nexport const RelationshipGoalsView: React.FC = ({\n relationship,\n handleClose,\n isGuide,\n}) => {\n //state\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n\n //style\n const theme = useTheme();\n\n //base language\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const backButtonLabel =\n baseLanguage.globals?.common?.go_back_button_label ?? 'Go back';\n\n const closeButtonLabel =\n baseLanguage.globals?.common?.close_button_label ?? 'Close';\n\n //hooks\n const navigate = useNavigate();\n const { reqRelationships } = useRelationships({ getSilently: false });\n\n //goals\n const { goalId } = useParams();\n const { reqGoals, goals } = useGoals({ waitForAuthentication: true });\n const relationshipGoals = relationship?.goals as IGoal[];\n const goal =\n relationshipGoals.find((goal) => goal.id === goalId) ||\n goals().find((goal) => goal.id === goalId);\n\n const traineeProfiles = relationship.traineeProfiles;\n const traineeProfile = traineeProfiles?.find(\n (profile) => profile.userId === goal?.userId,\n );\n\n if (!goal) {\n return <>;\n }\n\n //handlers\n\n const handleDeleteGoal = async () => {\n await reqGoals({\n method: 'DELETE',\n url: `/goals/${goalId}?relationshipId=${relationship.id}`,\n });\n\n await Promise.all([\n reqGoals({ url: '/goals' }),\n reqRelationships({ url: '/relationships' }),\n ]);\n\n navigate(`/relationships/${relationship.id}/goals`);\n };\n\n const handleDeleteModalClose = () => {\n setIsDeleteModalOpen(false);\n };\n\n //modal actions\n\n const guideModalActions: IButtonAction[] = [\n {\n label: closeButtonLabel,\n color: 'info',\n variant: 'contained',\n action: () => handleClose(),\n },\n ];\n\n const traineeModalActions: (IButtonAction | IButtonAction[])[] = [\n {\n label: baseLanguage.globals?.common?.delete_button_label ?? 'Delete',\n action: async () => {\n setIsDeleteModalOpen(true);\n },\n variant: 'text',\n color: 'error',\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsView_delete-button',\n },\n [\n {\n label: backButtonLabel,\n color: 'info',\n variant: 'outlined',\n action: () => navigate(`/relationships/${relationship.id}/goals`),\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsView_close-button',\n },\n {\n label:\n baseLanguage.globals?.goals?.edit_goal_button_label ?? 'Edit Goal',\n variant: 'contained',\n action: () =>\n navigate(`/relationships/${relationship.id}/goals/${goal.id}/edit`),\n color: 'info',\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsView_edit-button',\n },\n ],\n ];\n\n const deleteModalActions: IButtonAction[] = [\n {\n label: baseLanguage.globals?.common?.cancel_button_label ?? 'Cancel',\n action: handleDeleteModalClose,\n color: 'info',\n variant: 'outlined',\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsView_discard-delete-button',\n },\n {\n label: baseLanguage.globals?.common?.delete_button_label,\n action: () => {\n handleDeleteGoal();\n },\n color: 'error',\n variant: 'contained',\n isLoadingButton: true,\n dataCyLabel:\n 'components_Relationships_RelationshipGoals_RelationshipGoalsView_confirm-delete-button',\n },\n ];\n\n return (\n \n \n \n \n );\n};\n","// external\n\nimport { Box, Divider, ThemeProvider, useTheme } from '@mui/material';\nimport React, { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\n// components\nimport { RelationshipGoalsModal } from 'modals';\n\n// Hooks\nimport {\n useOrganization,\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\n\n// types\nimport { IGoal, IRelationship } from '@guider-global/shared-types';\nimport { Button, TextStack, theme } from '@guider-global/ui';\nimport { deepMerge } from 'utils';\nimport { getSubDomain } from '@guider-global/front-end-utils';\nimport { MDIcons, SanityIcon } from 'components/SanityIcon';\ninterface IRelationshipGoalsProps {\n relationship: IRelationship;\n isGuide: boolean;\n}\n\nexport const RelationshipGoals: React.FC = ({\n relationship,\n isGuide,\n}) => {\n const [isGoalsModalOpen, setIsGoalsModalOpen] = useState(false);\n const navigate = useNavigate();\n const { getBaseLanguage } = useSanityBaseLanguage({});\n\n const baseLanguage = getBaseLanguage();\n\n const goals = relationship?.goals as Partial[];\n const organizationTheme = useTheme();\n const combinedPalette = deepMerge(\n theme.appTheme.palette,\n organizationTheme.palette,\n );\n const archived = relationship.isConcluded;\n\n const organizationSlug = getSubDomain();\n const { organization } = useOrganization({\n organizationSlug,\n });\n const { getProgram } = useSanityOrganizationPrograms({});\n\n const program = getProgram(relationship.programSlug);\n\n const customGoalCategories =\n program?.registration?.goals?.custom_goal_categories?.map(\n (customCategory) => ({\n label: customCategory.goal_category_name,\n value: customCategory.goal_category_slug.current,\n icon: customCategory.goal_category_icon?.name,\n }),\n ) ?? [];\n\n const organizationGoalCategories =\n organization?.goal_categories?.categories?.map((goalCategory) => ({\n label: goalCategory.goal_category_name,\n value: goalCategory.goal_category_slug.current,\n icon: goalCategory.goal_category_icon?.name,\n })) ?? [];\n\n const goalCategories =\n organizationGoalCategories.concat(customGoalCategories);\n\n const handleGoalsModalClose = () => {\n navigate(`/relationships/${relationship.id}`);\n\n setIsGoalsModalOpen(false);\n };\n\n const handleManageGoals = () => {\n navigate(`/relationships/${relationship.id}/goals`);\n\n setIsGoalsModalOpen(true);\n };\n\n const handleGoalClick = (goalId: string) => {\n navigate(`/relationships/${relationship.id}/goals/${goalId}`, {\n replace: false,\n });\n\n setIsGoalsModalOpen(true);\n };\n\n return (\n <>\n \n \n \n {goals.map((goal) => {\n const goalCategory = goalCategories.find(\n (goalCategory) => goalCategory.value === goal.categorySlug,\n );\n\n return (\n }\n variant=\"text\"\n label={`${goalCategory?.label ?? goalCategory?.value} ${\n goal.objective ? ' - ' + goal.objective : ''\n }`}\n sx={{\n height: 'fit-content',\n justifyContent: 'flex-start',\n span: {\n fontWeight: '400',\n fontSize: '13px',\n textAlign: 'left',\n lineHeight: '130%',\n pl: 0.5,\n },\n mb: 0.5,\n }}\n fullWidth\n onClick={() => handleGoalClick(goal.id || '')}\n disabled={archived}\n />\n );\n })}\n \n {!isGuide && (\n \n {baseLanguage.relationships.goals.sidebar.manage_goals_button_label}\n \n )}\n \n \n \n \n );\n};\n\nexport * from './RelationshipGoalsCreate';\nexport * from './RelationshipGoalsEdit';\nexport * from './RelationshipGoalsManage';\nexport * from './RelationshipGoalsView';\n","import {\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\nimport { IRelationship } from '@guider-global/shared-types';\nimport { ButtonStack, ButtonStackItem, Text, theme } from '@guider-global/ui';\nimport CheckCircleOutline from '@mui/icons-material/CheckCircleOutline';\nimport ErrorOutline from '@mui/icons-material/ErrorOutline';\nimport InfoOutlined from '@mui/icons-material/InfoOutlined';\nimport ReportProblemOutlined from '@mui/icons-material/ReportProblemOutlined';\nimport { Box, Divider, ThemeProvider, useTheme } from '@mui/material';\nimport { useMemberships, useRelationships } from 'hooks';\nimport { useNavigate } from 'react-router-dom';\nimport { deepMerge } from 'utils';\n\ninterface IRelationshipGroupAlertProps {\n relationship: IRelationship;\n isGuide: boolean;\n}\n\nexport const RelationshipGroupAlert: React.FC = ({\n relationship,\n isGuide,\n}) => {\n const navigate = useNavigate();\n const programSlug = relationship.programSlug ?? '';\n const sessionsLength = relationship.sessions\n ? relationship.sessions.length\n : 0;\n const hasScheduledAtLeastOneSession = sessionsLength > 0;\n const isArchivedRelationship = relationship.isConcluded;\n const { getProgram } = useSanityOrganizationPrograms({});\n const program = getProgram(programSlug);\n\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const organizationTheme = useTheme();\n const combinedPalette = deepMerge(\n theme.appTheme.palette,\n organizationTheme.palette,\n );\n const { palette } = organizationTheme;\n\n const { reqMemberships, isLoadingMemberships } = useMemberships({\n getSilently: false,\n });\n const { reqRelationships, isLoadingRelationships } = useRelationships({\n getSilently: false,\n });\n\n let title: string = '';\n let description: string = '';\n let boxColor: string = '';\n let icon: React.ReactNode = <>;\n let buttons: ButtonStackItem[] = [];\n\n const guideMembership = relationship.guideMemberships?.at(0);\n const isActiveGroup = guideMembership?.isPublished === false;\n\n const traineeCount = relationship.traineeMemberships?.length ?? 0;\n const noTraineesHaveJoined = traineeCount === 0;\n\n const allTraineesHaveLeft = isActiveGroup && noTraineesHaveJoined;\n\n const guideGroupCopy =\n program?.program_details?.program_type?.program_type_text.variations?.group\n ?.relationships?.guide;\n\n const traineeGroupCopy =\n program?.program_details?.program_type?.program_type_text.variations?.group\n ?.relationships?.trainee;\n\n const guideAlertCopy = isActiveGroup\n ? guideGroupCopy?.group_activated\n : guideGroupCopy?.group_activation_pending;\n\n const traineeAlertCopy = isActiveGroup\n ? traineeGroupCopy?.group_activated\n : traineeGroupCopy?.group_activation_pending;\n\n function setAlertBoxColor() {\n if (isActiveGroup) {\n return palette.success.transparent;\n } else if (isGuide) {\n return palette.warning.transparent;\n }\n return palette.info.transparent;\n }\n\n const republishGroup = async () => {\n await reqMemberships({\n method: 'PATCH',\n url: `/memberships/${guideMembership?.id}`,\n data: {\n isPublished: true,\n },\n });\n\n await Promise.all([\n reqMemberships({ url: '/memberships' }),\n reqRelationships({ url: '/relationships' }),\n ]);\n };\n\n const activateGroup = async () => {\n if (noTraineesHaveJoined) {\n return;\n }\n\n await reqMemberships({\n method: 'PATCH',\n url: `/memberships/${guideMembership?.id}`,\n data: {\n isPublished: false,\n },\n });\n\n await reqRelationships({\n method: 'PATCH',\n url: `/relationships/${relationship.id}`,\n data: {\n activatedAt: new Date(),\n },\n });\n\n await Promise.all([\n reqMemberships({ url: '/memberships' }),\n reqRelationships({ url: '/relationships' }),\n ]);\n };\n\n if (allTraineesHaveLeft) {\n title = guideGroupCopy?.trainees_left_group?.alert_title ?? '';\n description = guideGroupCopy?.trainees_left_group?.alert_description ?? '';\n boxColor = palette.error.transparent ?? '';\n icon = ;\n buttons = [\n {\n variant: 'contained',\n color: 'success',\n label:\n guideGroupCopy?.trainees_left_group?.republish_group_button_label,\n key: 'republish',\n onClick: () => republishGroup(),\n loading: isLoadingRelationships(),\n },\n ];\n } else {\n title = isGuide\n ? guideAlertCopy?.alert_title ?? ''\n : traineeAlertCopy?.alert_title ?? '';\n description = isGuide\n ? guideAlertCopy?.alert_description ?? ''\n : traineeAlertCopy?.alert_description ?? '';\n boxColor = setAlertBoxColor() ?? '';\n icon = ;\n buttons = [\n {\n disabled: !isActiveGroup && noTraineesHaveJoined,\n variant: 'contained',\n color: 'success',\n label: isActiveGroup\n ? baseLanguage.globals.sessions.schedule_session\n : guideGroupCopy?.group_activation_pending?.start_group_button_label,\n key: 'activation-button',\n onClick: () => {\n if (!isActiveGroup) {\n activateGroup();\n } else {\n navigate(`/relationships/${relationship.id}/sessions/create`);\n }\n },\n loading: isLoadingMemberships() || isLoadingRelationships(),\n },\n ];\n }\n\n if (\n ((hasScheduledAtLeastOneSession && isActiveGroup) ||\n isArchivedRelationship) &&\n !allTraineesHaveLeft\n ) {\n return <>;\n }\n\n return (\n <>\n \n \n \n {icon}\n \n \n \n \n \n {isGuide && (\n <>\n \n {noTraineesHaveJoined && !isActiveGroup && (\n \n )}\n \n )}\n \n \n \n \n );\n};\n\nconst AlertIcon = ({\n isActiveGroup,\n isGuide,\n}: {\n isActiveGroup: boolean;\n isGuide: boolean;\n}) =>\n isActiveGroup ? (\n \n ) : isGuide ? (\n \n ) : (\n \n );\n","import { FC } from 'react';\n\nimport { ConfirmationModal } from 'modals';\n\ninterface RelationshipsConcludeDialogProps {\n dialogTitle: string;\n dialogDescription: string;\n cancelButtonLabel: string;\n concludeRelationshipButtonLabel: string;\n open: boolean;\n loading: boolean;\n onClose: () => void;\n onConcludeRelationship: () => void;\n}\n\nconst RelationshipsConcludeDialog: FC = ({\n dialogTitle,\n dialogDescription,\n cancelButtonLabel,\n concludeRelationshipButtonLabel,\n open,\n loading,\n onClose,\n onConcludeRelationship,\n}) => {\n return (\n \n );\n};\n\nexport default RelationshipsConcludeDialog;\n","import { IProfile, IRelationship, Program } from '@guider-global/shared-types';\nimport { Box } from '@mui/material';\nimport { useMixpanelEvents, useProfiles, useRelationships } from 'hooks';\nimport { FC, useCallback, useEffect, useState } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport {\n getISOStringWithoutMilliseconds,\n getSubDomain,\n} from '@guider-global/front-end-utils';\nimport {\n useOrganization,\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\nimport { AvatarButton, DropDown, IconButton } from '@guider-global/ui';\nimport MoreHoriz from '@mui/icons-material/MoreHoriz';\nimport PersonOff from '@mui/icons-material/PersonOff';\nimport { useAppDispatch } from 'store/hooks';\nimport { showAppAlert } from 'store/slices/appSlice';\nimport RelationshipsConcludeDialog from './RelationshipsConcludeDialog';\n\ninterface RelationshipConcludeProps {\n relationship: IRelationship;\n}\n\nconst RelationshipConclude: FC = ({\n relationship,\n}) => {\n const organizationSlug = getSubDomain();\n const { getProfiles } = useProfiles({ getSilently: false });\n const [profile] = getProfiles();\n const profileId = profile?.id;\n\n const programSlug = relationship?.programSlug;\n const relationshipId = relationship.id;\n\n const { getProgram } = useSanityOrganizationPrograms({});\n const { organization } = useOrganization({ organizationSlug });\n\n let program: Program | undefined;\n let programType;\n\n if (programSlug) {\n program = getProgram(programSlug);\n programType = program?.program_details?.program_type;\n } else {\n programType = organization?.open_matching?.program_type;\n }\n\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const navigate = useNavigate();\n const { pathname } = useLocation();\n // Local state\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n // Redux\n const dispatch = useAppDispatch();\n\n // Hooks\n const { trackMixpanelEvent } = useMixpanelEvents();\n const guideProfiles = relationship?.guideProfiles as IProfile[];\n const guideProfilesIds = guideProfiles?.map((guide) => guide.id) ?? [];\n const isGroupProgram = relationship?.programVariationTypeSlug === 'group';\n const isGuide = guideProfilesIds.includes(profileId);\n\n let heading: string;\n let subtitle: string;\n let dialogTitle: string;\n let dialogDescription: string;\n let cancelButtonLabel =\n baseLanguage.globals?.common?.cancel_button_label ?? 'Cancel';\n let concludeRelationshipButtonLabel: string;\n\n const groupGuide =\n programType?.program_type_text.variations?.group?.relationships?.guide\n ?.conclude_relationship;\n const groupTrainee =\n programType?.program_type_text.variations?.group?.relationships?.trainee\n ?.conclude_relationship;\n const individual =\n programType?.program_type_text.variations?.individual?.relationships\n ?.conclude_relationship;\n\n // Conclude Group\n\n if (isGroupProgram) {\n if (isGuide) {\n heading = groupGuide?.button_title ?? '';\n subtitle = groupGuide?.button_description ?? '';\n dialogTitle = groupGuide?.conclude_relationship_modal.title ?? '';\n dialogDescription =\n groupGuide?.conclude_relationship_modal.description ?? '';\n concludeRelationshipButtonLabel = groupGuide?.button_title ?? '';\n } else {\n heading = groupTrainee?.button_title ?? '';\n subtitle = groupTrainee?.button_description ?? '';\n dialogTitle = groupTrainee?.conclude_relationship_modal.title ?? '';\n dialogDescription =\n groupTrainee?.conclude_relationship_modal.description ?? '';\n concludeRelationshipButtonLabel = groupTrainee?.button_title ?? '';\n }\n } else {\n heading = individual?.button_title ?? '';\n subtitle = individual?.button_description ?? '';\n dialogTitle = individual?.conclude_relationship_modal.title ?? '';\n dialogDescription =\n individual?.conclude_relationship_modal.description ?? '';\n concludeRelationshipButtonLabel = individual?.button_title ?? '';\n }\n\n const getSuccess = () => {\n if (isGroupProgram) {\n return isGuide\n ? groupGuide?.conclude_relationship_modal.success_alert_text ?? ''\n : groupTrainee?.conclude_relationship_modal.success_alert_text ?? '';\n }\n\n return individual?.conclude_relationship_modal.success_alert_text ?? '';\n };\n\n const getError = () => {\n if (isGroupProgram) {\n return isGuide\n ? groupGuide?.conclude_relationship_modal.error_alert_text ?? ''\n : groupTrainee?.conclude_relationship_modal.error_alert_text ?? '';\n }\n\n return individual?.conclude_relationship_modal.error_alert_text ?? '';\n };\n\n // Relationships\n const { reqRelationships } = useRelationships({ getSilently: false });\n\n // Events\n const handleModalClose = useCallback(() => {\n setIsModalOpen(false);\n navigate(`/relationships/${relationshipId}`);\n }, [navigate, relationshipId]);\n const handleModalOpen = () => {\n setIsModalOpen(true);\n navigate(`/relationships/${relationshipId}/conclude`);\n };\n\n const handleConcludeRelationship = async () => {\n let isSuccess = false;\n\n setIsLoading(true);\n\n if ((isGroupProgram && isGuide) || !isGroupProgram) {\n const updateRelationship = await reqRelationships({\n method: 'PATCH',\n url: `/relationships/${relationshipId}`,\n data: {\n isConcluded: true,\n },\n });\n\n isSuccess = updateRelationship.status === 'success';\n\n if (isSuccess) {\n trackMixpanelEvent('Relationship - Concluded', {\n 'Concluded on': getISOStringWithoutMilliseconds(Date.now()),\n Program: programSlug,\n 'Concluded by': isGuide ? 'guide' : 'trainee',\n });\n }\n } else {\n const updateRelationship = await reqRelationships({\n method: 'PATCH',\n url: `/relationships/${relationshipId}`,\n // TODO FIX types\n // @ts-ignore\n data: {\n traineeProfiles: [profileId],\n },\n });\n\n isSuccess = updateRelationship.status === 'success';\n }\n\n dispatch(\n showAppAlert({\n severity: isSuccess ? 'success' : 'error',\n message: isSuccess ? getSuccess() : getError(),\n timeout: 5000,\n }),\n );\n\n setIsModalOpen(false);\n\n await Promise.all([reqRelationships({ url: '/relationships' })]);\n\n navigate('/relationships');\n\n setIsLoading(false);\n };\n\n // Derivatives\n const archived = relationship.isConcluded;\n\n useEffect(() => {\n if (archived) {\n handleModalClose();\n return;\n }\n\n setIsModalOpen(pathname.endsWith('/conclude'));\n }, [handleModalClose, archived, pathname]);\n\n return (\n \n } />}\n >\n }\n size=\"small\"\n heading={heading}\n subtitles={[subtitle]}\n disabled={archived}\n />\n \n\n \n \n );\n};\n\nexport default RelationshipConclude;\n","// external\nimport ArrowBackIosNew from '@mui/icons-material/ArrowBackIosNew';\nimport Close from '@mui/icons-material/Close';\nimport MenuOpen from '@mui/icons-material/MenuOpen';\nimport {\n Avatar,\n Box,\n Chip,\n Paper,\n Stack,\n ThemeProvider,\n Typography,\n useTheme,\n} from '@mui/material';\nimport { format, parseISO } from 'date-fns';\nimport React, { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\n// components\nimport { RelationshipViewProfileModal } from 'components';\n\n// types\nimport {\n EProgramVariation,\n IMembership,\n IRelationship,\n ISkill,\n Program,\n} from '@guider-global/shared-types';\n\nimport { useProfileImage } from '@guider-global/azure-storage-hooks';\nimport { getLanguageFromCMS } from '@guider-global/front-end-utils';\nimport {\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\nimport {\n Button,\n GroupAvatar,\n IconButton,\n MultiAvatarButton,\n Text,\n theme,\n} from '@guider-global/ui';\nimport {\n MembershipDataProps,\n ProfilePreviewProfileData,\n} from 'components/ProfilePreview';\nimport { interpolate } from 'functions';\nimport { useMobileMediaQuery } from 'hooks';\nimport { RelationshipGroupMembersModal } from 'modals';\nimport { deepMerge, hexToRGB } from 'utils';\nimport RelationshipConclude from '../RelationshipsConclude';\n\ninterface IRelationshipHeaderProps {\n relationship: IRelationship;\n otherPartyProfile?: {\n displayName?: string;\n profilePicture?: string;\n userPicture?: string;\n };\n relationshipCreatedAt: Date;\n programName: string;\n roleLabel: string;\n isSidebarOpen: boolean;\n setIsSidebarOpen: (isOpen: boolean) => void;\n}\n\nexport const RelationshipHeader: React.FC = ({\n relationship,\n otherPartyProfile,\n relationshipCreatedAt,\n programName,\n roleLabel,\n isSidebarOpen,\n setIsSidebarOpen,\n}) => {\n const [groupMembersModalOpen, setGroupMembersModalOpen] = useState(false);\n const [selectedUserId, setSelectedUserId] = useState();\n\n const isGroup =\n relationship?.programVariationTypeSlug === EProgramVariation.Group;\n\n const organizationTheme = useTheme();\n const combinedPalette = deepMerge(\n theme.appTheme.palette,\n organizationTheme.palette,\n );\n\n const navigate = useNavigate();\n const isMobile = useMobileMediaQuery();\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n const { getProfileImage } = useProfileImage();\n\n const { getProgram } = useSanityOrganizationPrograms({});\n\n let program: Program | undefined;\n\n if (relationship?.programSlug) {\n program = getProgram(relationship?.programSlug ?? '');\n }\n\n const programTypeGuideNoun =\n program?.program_details?.program_type?.program_type_text.common?.noun;\n\n const handleGroupMembersModalClose = () => {\n setGroupMembersModalOpen(false);\n };\n\n const { title: modalTitle } = baseLanguage.relationships.view_profile_modal;\n const modalCloseButtonLabel =\n baseLanguage.globals?.common?.close_button_label;\n\n const handleProfileModalClose = () => {\n setSelectedUserId(undefined);\n setGroupMembersModalOpen(true);\n };\n const handleProfileModalOpen = (userId?: string) => {\n setSelectedUserId(userId);\n handleGroupMembersModalClose();\n };\n\n const getSelectedProfileData = (\n selectedUserId?: string,\n ): ProfilePreviewProfileData => {\n const guideProfiles = relationship.guideProfiles ?? [];\n const traineeProfiles = relationship.traineeProfiles ?? [];\n const profiles = [...guideProfiles, ...traineeProfiles];\n\n const selectedProfile = profiles.find(\n (profile) => profile.userId === selectedUserId,\n );\n\n const selectedProfileUserId = selectedProfile?.userId;\n\n const selectedUser = relationship.users?.find(\n (user) => user.id === selectedProfileUserId,\n );\n return {\n ...selectedProfile,\n pictures: {\n profile: selectedProfile?.picture,\n user: selectedUser?.picture,\n },\n };\n };\n\n const getSelectedProfileMembershipData = (\n selectedUserId?: string,\n ): MembershipDataProps => {\n const guideMemberships = relationship.guideMemberships ?? [];\n const traineeMemberships = relationship.traineeMemberships ?? [];\n const memberships = [...guideMemberships, ...traineeMemberships];\n\n const selectedMembership = memberships.find(\n (membership) => membership.userId === selectedUserId,\n );\n\n const skillFieldSlugs = selectedMembership?.skills?.map((skill) => {\n const skillTyped = skill as ISkill;\n return skillTyped.fieldSlug;\n });\n return {\n skills: skillFieldSlugs ?? [],\n membership: selectedMembership ? [selectedMembership as IMembership] : [],\n };\n };\n\n const getSelectedRelationshipRole = (selectedUserId?: string) => {\n const guideProfile = relationship.guideProfiles?.find(\n (guideProfile) => guideProfile.userId === selectedUserId,\n );\n if (guideProfile) return 'guide';\n return 'trainee';\n };\n\n const locale = getLanguageFromCMS(baseLanguage.language_code);\n\n const avatars =\n relationship.users?.map((user) => {\n const userId = user.id;\n const traineeProfile = relationship.traineeProfiles?.find(\n (traineeProfile) => traineeProfile.userId === userId,\n );\n const guideProfile = relationship.guideProfiles?.find(\n (guideProfile) => guideProfile.userId === userId,\n );\n const profilePicture = traineeProfile\n ? traineeProfile.picture\n : guideProfile?.picture;\n const userPicture = user.picture;\n return getProfileImage({\n profilePicture: profilePicture,\n userPicture: userPicture,\n });\n }) ?? [];\n\n const renderContent = () => {\n if (isMobile && isSidebarOpen) {\n return (\n \n {baseLanguage.relationships.relationships_list.title ??\n 'Relationships'}\n \n );\n } else {\n return (\n \n {relationship && (\n <>\n \n {isGroup ? relationship?.title : otherPartyProfile?.displayName}\n \n\n \n {isGroup\n ? interpolate(\n baseLanguage.dashboard.program_memberships\n .with_program_memberships.membership_details\n .creation_date,\n {\n date: format(\n new Date(relationship.createdAt ?? ''),\n 'EEE do MMM',\n ),\n },\n )\n : `${roleLabel} ${\n baseLanguage.relationships.relationships_header.since\n }${format(\n parseISO(relationshipCreatedAt.toString()),\n ' LLL yyyy',\n {\n locale,\n },\n )} `}\n \n \n )}\n \n );\n }\n };\n\n return (\n <>\n \n \n {isMobile && !isSidebarOpen && (\n navigate('/relationships')}\n variant={'regular'}\n icon={}\n />\n )}\n\n {!isGroup && (\n \n \n {renderContent()}\n {isMobile ? (\n \n \n setIsSidebarOpen(!isSidebarOpen)}\n variant=\"contained\"\n icon={\n isSidebarOpen ? (\n \n ) : (\n \n )\n }\n />\n \n ) : (\n <>\n \n \n \n\n \n \n \n \n )}\n \n )}\n {isGroup && (\n \n \n {renderContent()}\n\n {isMobile ? (\n \n \n setIsSidebarOpen(!isSidebarOpen)}\n variant=\"contained\"\n icon={\n isSidebarOpen ? (\n \n ) : (\n \n )\n }\n />\n \n ) : (\n <>\n \n \n setGroupMembersModalOpen(!groupMembersModalOpen)\n }\n />\n \n \n\n \n \n )}\n \n )}\n \n \n {relationship && (\n \n )}\n\n {isGroup && relationship && (\n \n {'Members'}\n {relationship.guideProfiles?.map((guideProfile) => {\n const guideUser = relationship.users?.find(\n (user) => guideProfile.userId,\n );\n return (\n handleProfileModalOpen(guideProfile.userId)}\n >\n \n \n \n \n );\n })}\n\n {relationship.traineeProfiles?.map((traineeProfile) => {\n const traineeUser = relationship.users?.find(\n (user) => traineeProfile.userId === user.id,\n );\n\n return (\n handleProfileModalOpen(traineeProfile.userId)}\n >\n \n \n \n );\n })}\n \n )}\n \n );\n};\n\nexport default RelationshipHeader;\n","//external\nimport { useProfileImage } from '@guider-global/azure-storage-hooks';\nimport { EProgramVariation, IRelationship } from '@guider-global/shared-types';\nimport { GroupAvatar } from '@guider-global/ui';\nimport {\n Avatar,\n Badge,\n Box,\n Button,\n Typography,\n useTheme,\n} from '@mui/material';\nimport { useProfiles } from 'hooks';\nimport React from 'react';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { useAppSelector } from 'store/hooks';\nimport { selectIsUnreadMessages } from 'store/slices/relationshipThreadsSlice';\nimport { getRecipients } from 'utils/getRelationshipRecipients';\n\ninterface IRelationshipItemProps {\n relationship: IRelationship;\n}\n\nexport const RelationshipItem: React.FC = ({\n relationship,\n}) => {\n const navigate = useNavigate();\n const theme = useTheme();\n const { relationshipId } = useParams();\n\n // Redux\n const isUnreadMessages = useAppSelector(\n selectIsUnreadMessages(relationship.id),\n );\n\n const isGroupProgram =\n relationship?.programVariationTypeSlug === EProgramVariation.Group;\n\n const { getProfiles } = useProfiles({ getSilently: false });\n const [profile] = getProfiles();\n const profileId = profile?.id;\n const userId = profile?.userId;\n\n const isActive = relationshipId === relationship.id;\n\n const isGuide = Boolean(\n relationship.guideProfiles?.find((guide) => guide.id === profileId),\n );\n const recipients = getRecipients({\n role: isGuide ? 'guide' : 'trainee',\n relationship,\n userId,\n });\n\n const guidesCount = relationship?.guideProfiles?.length ?? 0;\n const traineesCount = relationship?.traineeProfiles?.length ?? 0;\n\n const otherPartyProfile = recipients.at(0);\n const { getProfileImage } = useProfileImage();\n\n return (\n navigate(`./${relationship.id}`)}\n variant=\"text\"\n fullWidth\n >\n \n {isGroupProgram ? (\n \n \n \n ) : (\n \n )}\n \n {relationship && (\n \n {isGroupProgram\n ? relationship?.title\n : otherPartyProfile?.displayName}\n \n )}\n \n \n {isUnreadMessages && (\n \n )}\n \n );\n};\n","// external\nimport React from 'react';\nimport { Control, SubmitHandler, useForm } from 'react-hook-form';\nimport { useNavigate } from 'react-router-dom';\n\n// internal\nimport { getSubDomain } from '@guider-global/front-end-utils';\nimport { useNotes, useRelationships } from 'hooks';\n\n// types\nimport { IRelationship, SlateDescendant } from '@guider-global/shared-types';\n\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\n\nimport { Box } from '@mui/material';\nimport { ActionButton, IButtonAction } from 'components/ActionButton';\nimport { NoteFormField, NotesCreateForm } from 'forms/Notes/NotesCreateForm';\nimport { emptyInitialValue } from 'components/FormRichText';\n\nexport interface INoteInputs {\n [NoteFormField.Title]: string;\n [NoteFormField.Content]: SlateDescendant[];\n [NoteFormField.IsPublic]: boolean;\n}\n\ninterface IRelationshipNotesCreateProps {\n relationship: IRelationship;\n}\n\nexport const RelationshipNotesCreate: React.FC<\n IRelationshipNotesCreateProps\n> = ({ relationship }) => {\n //baseLanguage\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n //form\n const {\n handleSubmit,\n control,\n formState: { errors, isDirty },\n reset,\n } = useForm({\n mode: 'onChange',\n defaultValues: {\n [NoteFormField.Title]: '',\n [NoteFormField.Content]: emptyInitialValue,\n [NoteFormField.IsPublic]: false,\n },\n });\n const typedControl = control as unknown as Control;\n\n //hooks\n const navigate = useNavigate();\n const organizationSlug = getSubDomain();\n const { isLoadingNotes, reqNotes } = useNotes({\n getSilentlyUrl: `/notes?organizationSlug=${organizationSlug}`,\n });\n\n const { isLoadingRelationships, reqRelationships } = useRelationships({});\n\n const isLoading = isLoadingNotes() || isLoadingRelationships();\n\n //handlers\n const onSubmit: SubmitHandler = async (data) => {\n const { isPublic, ...rest } = data;\n\n const { data: notesCreateResponseData } = await reqNotes({\n method: 'POST',\n url: `/notes`,\n data: {\n ...rest,\n isPrivate: !isPublic,\n organizationSlug,\n relationshipId: relationship.id,\n },\n });\n\n await Promise.all([\n reqNotes({ url: `/notes?organizationSlug=${organizationSlug}` }),\n reqRelationships({ url: '/relationships' }),\n ]);\n\n if (!notesCreateResponseData) {\n console.error('Something went wrong');\n return;\n }\n\n navigate(\n `/relationships/${relationship.id}/notes/${notesCreateResponseData[0].id}`,\n );\n };\n\n //modal actions\n const saveAction: IButtonAction = {\n label:\n baseLanguage.relationships.notes.notes_modal.notes_modal_create_edit_note\n .save_note_button_label,\n variant: 'contained',\n color: 'info',\n action: handleSubmit(onSubmit),\n isLoadingButton: true,\n disabled: !isDirty,\n dataCyLabel: 'relationship-notes-modal-create-note-button',\n };\n\n return (\n \n \n \n \n \n \n );\n};\n","import { useTheme } from '@mui/material';\nimport { MdNoteAdd } from 'react-icons/md';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\nimport { PageContent } from 'components/Page';\nimport { PageContentAction } from 'components/Page/PageContent';\n\nexport function RelationshipNotesEmpty() {\n const theme = useTheme();\n const navigate = useNavigate();\n const { relationshipId } = useParams();\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const {\n notes_modal_empty_title,\n notes_modal_empty_description,\n notes_modal_empty_create_button_label,\n } = baseLanguage.relationships.notes.notes_modal.notes_modal_empty_state;\n\n const actions: PageContentAction[] = [\n {\n label: notes_modal_empty_create_button_label,\n action: () => navigate(`/relationships/${relationshipId}/notes/create`),\n color: 'info',\n 'data-cy': 'relationship-notes-empty-create-note-button',\n },\n ];\n\n return (\n \n );\n}\n","//external\nimport {\n Box,\n Button,\n IconButton,\n Typography,\n lighten,\n useTheme,\n} from '@mui/material';\nimport React, { useContext } from 'react';\n\n//types\nimport { INote } from '@guider-global/shared-types';\nimport Add from '@mui/icons-material/Add';\nimport Edit from '@mui/icons-material/Edit';\nimport People from '@mui/icons-material/People';\n\n//hooks\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { useMobileMediaQuery } from 'hooks';\n\nimport { RelationshipNotesModalContext } from 'modals';\n\ninterface IRelationshupNotesList {\n notes: Partial[];\n}\n\nexport const RelationshipNotesList: React.FC = ({\n notes,\n}) => {\n //hooks\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n const navigate = useNavigate();\n const { relationshipId, noteId } = useParams();\n const { setOnConfirmDiscardNoteChanges } = useContext(\n RelationshipNotesModalContext,\n );\n\n //style\n const theme = useTheme();\n const isMobile = useMobileMediaQuery();\n\n const notesCount = notes ? notes.length : 0;\n const notesCountDescription =\n notesCount === 1\n ? `${notesCount} ${baseLanguage.relationships.notes.notes_modal.notes_sidebar.notes_sidebar_single_note_label}`\n : `${notesCount} ${baseLanguage.relationships.notes.notes_modal.notes_sidebar.notes_sidebar_multiple_notes_label}`;\n\n const navigateToNote = (noteId: string | undefined) => {\n navigate(`/relationships/${relationshipId}/notes/${noteId}`);\n };\n\n const navigateToNoteCreate = () => {\n navigate(`/relationships/${relationshipId}/notes/create`);\n };\n\n const handleClick = (callback: () => void) => {\n setOnConfirmDiscardNoteChanges(() => callback);\n };\n\n //renders\n const renderNotesItems = () =>\n notes.map((note, index) => (\n handleClick(() => navigateToNote(note.id))}\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n px: { xs: 2, md: 3 },\n py: 1,\n borderRadius: 0,\n textTransform: 'unset !important',\n ...(note.id === noteId && {\n backgroundColor: `${lighten(theme.palette.info.main, 0.9)}`,\n }),\n }}\n data-cy={`relationship-note-${note.id}`}\n >\n \n {note.title}\n \n\n \n \n ));\n\n //component\n\n return (\n \n \n \n {notesCountDescription}\n \n handleClick(navigateToNoteCreate)}\n data-cy=\"relationship-notes-list-add-icon-button\"\n >\n \n \n \n \n {renderNotesItems()}\n \n }\n sx={{\n mx: { xs: 2, md: 3 },\n my: 2,\n fontWeight: 600,\n whiteSpace: 'nowrap',\n }}\n onClick={() => handleClick(navigateToNoteCreate)}\n data-cy=\"relationship-notes-list-create-note-button\"\n >\n {\n baseLanguage.relationships.notes.notes_modal.notes_sidebar\n .notes_sidebar_new_note_button_label\n }\n \n \n );\n};\n","//external\nimport { Box } from '@mui/material';\nimport React, { useMemo, useState } from 'react';\nimport { Control, SubmitHandler, useForm } from 'react-hook-form';\n\n//types\nimport { IRelationship } from '@guider-global/shared-types';\n\n//components\nimport { ActionButton } from 'components';\n\n//hooks\n\nimport { getSubDomain } from '@guider-global/front-end-utils';\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\nimport { IButtonAction } from 'components/ActionButton';\nimport { NotesCreateForm } from 'forms';\nimport {\n useMobileMediaQuery,\n useNotes,\n useRelationships,\n useUsers,\n} from 'hooks';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { INoteInputs } from '../RelationshipNotesCreate';\nimport { ConfirmationModal } from 'modals';\nimport { format, toDate } from 'date-fns-tz';\n\ninterface IRelationshipNotesView {\n relationship: IRelationship;\n}\n\nexport const RelationshipNotesView: React.FC = ({\n relationship,\n}) => {\n const { users } = useUsers({ getSilently: false });\n const user = users().at(0);\n\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n\n //hooks\n const navigate = useNavigate();\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const cancelButtonLabel =\n baseLanguage.globals?.common?.cancel_button_label ?? 'Cancel';\n\n const params = useParams();\n\n const currentNote = useMemo(() => {\n const relationshipNotes = relationship?.notes ?? [];\n return relationshipNotes.find((note) => note.id === params.noteId);\n }, [params.noteId, relationship?.notes]);\n\n const organizationSlug = getSubDomain();\n const { isLoadingNotes, reqNotes } = useNotes({\n getSilentlyUrl: `/notes?organizationSlug=${organizationSlug}`,\n });\n\n const { isLoadingRelationships, reqRelationships } = useRelationships({\n getSilently: false,\n });\n\n const isLoading = isLoadingRelationships() || isLoadingNotes();\n\n const {\n handleSubmit,\n control,\n formState: { errors, isDirty },\n reset,\n } = useForm({ mode: 'onChange' });\n const typedControl = control as unknown as Control;\n\n //style\n const isMobile = useMobileMediaQuery();\n\n const guideProfiles = relationship.guideProfiles ?? [];\n const traineeProfiles = relationship.traineeProfiles ?? [];\n\n const profiles = [...guideProfiles, ...traineeProfiles];\n\n const ownersProfile = profiles.find(\n (guideProfile) => guideProfile.userId === currentNote?.ownerId,\n );\n\n const lastUpdatedByProfile = profiles.find(\n (profile) => profile.userId === currentNote?.lastUpdatedBy,\n );\n\n const currentNoteUpdateAt =\n currentNote?.updatedAt &&\n format(toDate(currentNote.updatedAt), 'MMMM d yyyy');\n\n const currentNoteCreatedAt =\n currentNote?.createdAt &&\n format(toDate(currentNote.createdAt), 'MMMM d yyyy');\n\n const lastUpdatedByString =\n currentNote &&\n `${baseLanguage.relationships.notes.notes_modal.notes_modal_create_edit_note.note_status.note_status_last_updated_by_label} ${lastUpdatedByProfile?.firstName} ${lastUpdatedByProfile?.lastName} ${baseLanguage.relationships.notes.notes_modal.notes_modal_create_edit_note.note_status.note_status_last_updated_on_label} ${currentNoteUpdateAt}`;\n\n const createdByString =\n currentNote &&\n `${baseLanguage.relationships.notes.notes_modal.notes_modal_create_edit_note.note_status.note_status_created_by_label} ${ownersProfile?.firstName} ${ownersProfile?.lastName} ${baseLanguage.relationships.notes.notes_modal.notes_modal_create_edit_note.note_status.note_status_created_on_label} ${currentNoteCreatedAt}`;\n\n const isNoteOwner = currentNote?.ownerId === user?.id;\n\n const onSubmit: SubmitHandler = async (data) => {\n const { isPublic, ...rest } = data;\n\n await reqNotes({\n method: 'PATCH',\n url: `/notes/${currentNote?.id}`,\n data: {\n ...rest,\n isPrivate: !isPublic,\n },\n });\n\n await reqRelationships({ url: '/relationships' });\n };\n\n const handleDeleteModalClose = () => {\n setIsDeleteModalOpen(false);\n };\n\n const handleDeleteNote = async () => {\n await reqNotes({\n method: 'DELETE',\n url: `/notes/${currentNote?.id}?organizationSlug=${organizationSlug}`,\n });\n\n await reqRelationships({ url: '/relationships' });\n\n navigate(`/relationships/${relationship.id}/notes`);\n };\n\n const actions: IButtonAction[] = [\n ...(isNoteOwner\n ? [\n {\n label: baseLanguage.globals.common.delete_button_label,\n variant: 'text',\n color: 'error',\n action: () => setIsDeleteModalOpen(true),\n isLoadingButton: true,\n dataCyLabel: 'relationship-notes-modal-delete-note-button',\n } as IButtonAction,\n ]\n : []),\n {\n label:\n baseLanguage.relationships.notes.notes_modal\n .notes_modal_create_edit_note.save_note_button_label,\n variant: 'contained',\n color: 'info',\n action: handleSubmit(onSubmit),\n isLoadingButton: true,\n disabled: !isDirty,\n dataCyLabel: 'relationship-notes-modal-update-note-button',\n },\n ];\n\n const deleteModalActions: IButtonAction[] = [\n {\n label: cancelButtonLabel,\n action: handleDeleteModalClose,\n color: 'info',\n variant: 'outlined',\n dataCyLabel: 'relationship-notes-modal-delete-note-modal-discard-button',\n },\n {\n label: baseLanguage.globals.common.delete_button_label,\n action: handleDeleteNote,\n color: 'error',\n variant: 'contained',\n isLoadingButton: true,\n dataCyLabel: 'relationship-notes-modal-delete-note-modal-confirm-button',\n },\n ];\n\n return (\n \n \n \n \n {actions.map((action) => (\n \n ))}\n \n \n\n \n \n );\n};\n","// external\nimport { LoadingButton } from '@mui/lab';\nimport { Box, ThemeProvider, Typography, useTheme } from '@mui/material';\nimport React, { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\n//internal\n\n// components\nimport { TextStack, theme } from '@guider-global/ui';\nimport {\n RelationshipDiscardNoteChangesModal,\n RelationshipNotesModal,\n RelationshipNotesModalProvider,\n} from 'modals';\n//hooks\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\n\n//types\nimport { IRelationship } from '@guider-global/shared-types';\nimport { deepMerge } from 'utils';\n\ninterface IRelationshipNotesProps {\n relationship: IRelationship;\n}\n\nexport const RelationshipNotes: React.FC = ({\n relationship,\n}) => {\n //state\n const [isNotesModalOpen, setIsNotesModalOpen] = useState(false);\n\n //style\n\n //hooks\n const navigate = useNavigate();\n\n const { getBaseLanguage } = useSanityBaseLanguage({});\n\n const baseLanguage = getBaseLanguage();\n const organizationTheme = useTheme();\n const combinedPalette = deepMerge(\n theme.appTheme.palette,\n organizationTheme.palette,\n );\n\n //handlers\n\n const handleNotesModalClose = () => {\n setIsNotesModalOpen(false);\n\n navigate(`/relationships/${relationship.id}`);\n };\n\n const handleViewNotes = () => {\n setIsNotesModalOpen(true);\n\n navigate(`/relationships/${relationship.id}/notes`);\n };\n\n const handleCreateNote = () => {\n setIsNotesModalOpen(true);\n\n navigate(`/relationships/${relationship.id}/notes/create`);\n };\n\n return (\n <>\n \n \n \n {\n baseLanguage.relationships.notes.note_sidebar\n .note_sidebar_description\n }\n \n \n \n {\n baseLanguage.relationships.notes.note_sidebar\n .note_sidebar_input_label\n }\n \n \n\n \n {\n baseLanguage.relationships.notes.note_sidebar\n .note_sidebar_view_button_label\n }\n \n \n \n \n \n \n \n );\n};\n\nexport * from './RelationshipNotesCreate';\nexport * from './RelationshipNotesEmpty';\nexport * from './RelationshipNotesList';\nexport * from './RelationshipNotesView';\n","// external\nimport { toDate, zonedTimeToUtc } from 'date-fns-tz';\nimport React, { useEffect } from 'react';\nimport { Control, SubmitHandler, useForm } from 'react-hook-form';\nimport { useNavigate } from 'react-router-dom';\n\n// internal\nimport {\n getISOStringWithoutMilliseconds,\n getSubDomain,\n} from '@guider-global/front-end-utils';\n\n// components\nimport { SessionsCreateForm } from 'forms';\n\n// store\nimport { useAppDispatch } from 'store/hooks';\nimport { showAppAlert } from 'store/slices/appSlice';\n\n// hooks\nimport {\n useMixpanelEvents,\n useProfiles,\n useRelationships,\n useSessions,\n} from 'hooks';\n\n// types\nimport {\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\nimport {\n IRelationship,\n ISession,\n ISessionVideoConferencing,\n TimeZone,\n} from '@guider-global/shared-types';\nimport { ModalCard } from 'components';\nimport { IButtonAction } from 'components/ActionButton';\nimport { getVideoConferencingProvider } from 'utils/getVideoConferencingProvider';\nimport { getSessionTitle } from '@guider-global/isomorphic-utils';\n\nexport interface ISessionInputs {\n title: string;\n date: Date;\n startTime: string;\n endTime: string;\n location: string;\n videoConferencing: ISessionVideoConferencing;\n}\n\ninterface IRelationshipSessionsCreateProps {\n relationship: IRelationship;\n handleClose: () => void;\n}\n\nexport const RelationshipSessionsCreate: React.FC<\n IRelationshipSessionsCreateProps\n> = ({ relationship, handleClose }) => {\n //baseLanguage\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n //hooks\n const { trackScreenTime } = useMixpanelEvents();\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const organizationSlug = getSubDomain();\n const { reqRelationships, isLoadingRelationships } = useRelationships({\n getSilently: false,\n });\n\n //form\n const {\n handleSubmit,\n control,\n formState: { errors, isValid },\n setValue,\n } = useForm({ mode: 'onChange' });\n const typedControl: Control = control as unknown as Control;\n\n //profiles\n const { getProfiles } = useProfiles({ getSilently: false });\n const [profile] = getProfiles();\n const guideProfiles = relationship.guideProfiles ?? [];\n const traineeProfiles = relationship.traineeProfiles ?? [];\n\n //sessions\n const { reqSessions, isLoadingSessions } = useSessions({});\n\n const currentSessions = relationship.sessions as Partial[];\n\n const programSlug = relationship.programSlug;\n const { getProgram } = useSanityOrganizationPrograms({});\n const program = getProgram(programSlug);\n\n useEffect(() => {\n trackScreenTime(\n 'Relationship - Session - Schedule new session - Form viewed',\n {\n Started: getISOStringWithoutMilliseconds(),\n },\n );\n }, [trackScreenTime, navigate]);\n\n useEffect(() => {\n trackScreenTime(\n 'Relationship - Session - Schedule new session - Form viewed',\n { Started: getISOStringWithoutMilliseconds() },\n );\n }, [trackScreenTime]);\n\n //handlers\n const programName = program?.metadata?.program_name;\n\n const trackSessionCreateFormSubmit = (\n videoConferencing: ISessionVideoConferencing,\n location: any,\n ) => {\n trackScreenTime(\n 'Relationship - Session - Schedule new session - Form submitted',\n {\n 'Session count': currentSessions.length + 1,\n 'Video conferencing': Boolean(videoConferencing),\n 'Video conferencing provider':\n getVideoConferencingProvider(videoConferencing),\n Location: Boolean(location),\n },\n );\n };\n\n const onSubmit: SubmitHandler = async (data) => {\n const { timeZone } = Intl.DateTimeFormat().resolvedOptions() as {\n timeZone?: TimeZone | string;\n };\n\n const { date, startTime, endTime, videoConferencing, location } = data;\n\n const [startHours, startMinutes] = startTime.split(':');\n const newStart = toDate(date);\n newStart.setHours(parseInt(startHours), parseInt(startMinutes));\n\n const [endHours, endMinutes] = endTime.split(':');\n const newEnd = toDate(date);\n newEnd.setHours(parseInt(endHours), parseInt(endMinutes));\n\n const startUTC = timeZone ? zonedTimeToUtc(newStart, timeZone) : newStart;\n const endUTC = timeZone ? zonedTimeToUtc(newEnd, timeZone) : newEnd;\n\n const sessionsResponse = await reqSessions({\n method: 'POST',\n url: `/sessions?organizationSlug=${organizationSlug}`,\n data: {\n name: data.title,\n organizationSlug,\n programSlug,\n relationshipId: relationship.id,\n description: '',\n participantProfiles: [\n ...traineeProfiles.map((trainee) => trainee.id ?? ''),\n ...guideProfiles.map((guide) => guide.id ?? ''),\n ],\n start: startUTC,\n end: endUTC,\n timezone: timeZone,\n hasVideoConferencing: Boolean(videoConferencing),\n videoConferencing: videoConferencing,\n ownerProfile: profile.id,\n location,\n },\n });\n\n if (sessionsResponse.status !== 'success') {\n dispatch(\n showAppAlert({\n severity: 'error',\n message:\n baseLanguage.relationships.sessions.new_session_modal\n .error_alert_text,\n timeout: 5000,\n }),\n );\n } else {\n trackSessionCreateFormSubmit(videoConferencing, location);\n\n await Promise.all([\n reqSessions({ url: '/sessions' }),\n reqRelationships({ url: '/relationships' }),\n ]);\n\n dispatch(\n showAppAlert({\n severity: 'success',\n message:\n baseLanguage.relationships.sessions.new_session_modal\n .success_alert_text,\n timeout: 5000,\n }),\n );\n\n handleClose();\n }\n };\n\n const modalActions: IButtonAction | IButtonAction[] = [\n {\n label: baseLanguage.globals.common.cancel_button_label ?? 'Cancel',\n color: 'info',\n variant: 'outlined',\n action: handleClose,\n dataCyLabel: 'relationship-create-session-modal-cancel-button',\n },\n {\n label:\n baseLanguage.relationships.sessions.new_session_modal\n .send_calendar_invite_button_label,\n variant: 'contained',\n color: 'info',\n action: handleSubmit(onSubmit),\n isLoadingButton: true,\n disabled: !isValid,\n dataCyLabel: 'relationship-create-session-modal-submit-button',\n },\n ];\n\n return (\n \n navigate(-1)}\n setValue={setValue}\n defaultTitle={\n programName ? getSessionTitle(relationship, programName) : ''\n }\n hideButtons\n />\n \n );\n};\n","// external\nimport { toDate, zonedTimeToUtc } from 'date-fns-tz';\nimport React, { useState } from 'react';\nimport { Control, SubmitHandler, useForm } from 'react-hook-form';\nimport { useNavigate, useParams } from 'react-router-dom';\n\n// internal\nimport { getSubDomain } from '@guider-global/front-end-utils';\n\n// components\nimport { ModalCard } from 'components';\nimport { PastSessionEditForm, SessionsEditForm } from 'forms';\nimport { ConfirmationModal } from 'modals';\n\n// store\nimport { useAppDispatch } from 'store/hooks';\nimport { showAppAlert } from 'store/slices/appSlice';\n\n// hooks\nimport {\n useMixpanelEvents,\n useProfiles,\n useRelationships,\n useSessions,\n} from 'hooks';\n\n// types\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\nimport { IProfile, IRelationship, TimeZone } from '@guider-global/shared-types';\nimport { IButtonAction } from 'components/ActionButton';\nimport { getVideoConferencingProvider } from 'utils/getVideoConferencingProvider';\nimport { ISessionInputs } from '../RelationshipSessionsCreate';\n\ninterface IRelationshipSessionsEdit {\n relationship: IRelationship;\n handleClose: () => void;\n}\n\nexport const RelationshipSessionsEdit: React.FC = ({\n relationship,\n handleClose,\n}) => {\n //state\n const [isDiscardModalOpen, setIsDiscardModalOpen] = useState(false);\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n\n //form\n const {\n handleSubmit,\n control,\n formState: { errors, isValid, isDirty },\n setValue,\n } = useForm({ mode: 'onChange' });\n const typedControl: Control = control as unknown as Control;\n const programSlug: string = relationship.programSlug as string;\n\n //hooks\n const { trackMixpanelEvent, trackScreenTime } = useMixpanelEvents();\n const navigate = useNavigate();\n const dispatch = useAppDispatch();\n const organizationSlug = getSubDomain();\n\n //baseLanguage\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const cancelButtonLabel =\n baseLanguage.globals.common.cancel_button_label ?? 'Cancel';\n\n //sessions\n const { isLoadingSessions, reqSessions, sessions } = useSessions({});\n const { reqRelationships } = useRelationships({ getSilently: false });\n\n const { getProfiles } = useProfiles({ getSilently: false });\n const [profile] = getProfiles();\n const { sessionId } = useParams();\n const session = sessions().find((session) => session.id === sessionId);\n\n if (!session?.createdAt) {\n return <>;\n }\n\n const isSessionOwner = profile.id === (session.ownerProfile as IProfile).id;\n\n const pastSession = session.pastSession ?? false;\n\n //handlers\n\n const navigateBack = () => {\n navigate(`/relationships/${relationship.id}/sessions/${sessionId}`);\n };\n\n const onSubmit: SubmitHandler = async (data) => {\n const { timeZone } = Intl.DateTimeFormat().resolvedOptions() as {\n timeZone: TimeZone;\n };\n\n const traineeProfiles = relationship.traineeProfiles ?? [];\n const guideProfile = relationship.guideProfiles ?? [];\n\n const { date, startTime, endTime, videoConferencing, location } = data;\n\n const [startHours, startMinutes] = startTime.split(':');\n const newStart = toDate(date);\n newStart.setHours(parseInt(startHours), parseInt(startMinutes));\n\n const [endHours, endMinutes] = endTime.split(':');\n const newEnd = toDate(date);\n newEnd.setHours(parseInt(endHours), parseInt(endMinutes));\n\n const startUTC = zonedTimeToUtc(newStart, timeZone);\n const endUTC = zonedTimeToUtc(newEnd, timeZone);\n\n await reqSessions({\n method: 'PATCH',\n url: `/sessions/${sessionId}`,\n data: {\n name: data.title,\n organizationSlug,\n programSlug,\n relationshipId: relationship.id,\n description: '',\n participantProfiles: [\n ...traineeProfiles.map((trainee) => trainee.id ?? ''),\n ...guideProfile.map((guide) => guide.id ?? ''),\n ],\n start: startUTC,\n end: endUTC,\n timezone: timeZone,\n hasVideoConferencing: Boolean(videoConferencing),\n videoConferencing: videoConferencing,\n ownerProfile: profile.id,\n location,\n },\n });\n\n trackScreenTime('Relationship - Session - Session updated', {\n 'Updated by': isSessionOwner ? 'Organizer' : 'Participant',\n 'Video conferencing': Boolean(videoConferencing),\n 'Video conferencing provider':\n getVideoConferencingProvider(videoConferencing),\n Location: Boolean(location),\n });\n\n await Promise.all([\n reqSessions({ url: '/sessions' }),\n reqRelationships({ url: '/relationships' }),\n ]);\n\n dispatch(\n showAppAlert({\n severity: 'success',\n message:\n baseLanguage.relationships.sessions.edit_session_modal\n .success_alert_text,\n timeout: 5000,\n }),\n );\n\n navigateBack();\n };\n\n const handleDiscardChanges = () => {\n if (!isDirty) {\n navigateBack();\n } else {\n setIsDiscardModalOpen(true);\n }\n };\n\n const handleDeleteSession = async () => {\n await reqSessions({\n method: 'PATCH',\n url: `/sessions/${sessionId}`,\n data: {\n isArchived: true,\n },\n });\n\n trackMixpanelEvent('Relationship - Session - Session deleted', {\n 'Deleted by': isSessionOwner ? 'Organizer' : 'Participant',\n });\n\n await Promise.all([\n reqSessions({ url: '/sessions' }),\n reqRelationships({ url: '/relationships' }),\n ]);\n\n dispatch(\n showAppAlert({\n severity: 'success',\n message:\n baseLanguage.relationships.sessions.confirm_session_deletion_modal\n .success_alert_text,\n timeout: 5000,\n }),\n );\n\n handleClose();\n\n navigate(`/relationships/${relationship.id}`);\n };\n\n const handleDeleteModalClose = () => {\n setIsDeleteModalOpen(false);\n };\n\n const handleDiscardModalClose = () => {\n setIsDiscardModalOpen(false);\n };\n\n //modal actions\n\n const contentModalActions: (IButtonAction | IButtonAction[])[] = [\n {\n label: baseLanguage.globals.common.delete_button_label,\n variant: 'text',\n color: 'error',\n action: () => setIsDeleteModalOpen(true),\n dataCyLabel: 'relationship-edit-session-modal-delete-button',\n },\n [\n {\n label: cancelButtonLabel,\n variant: 'outlined',\n color: 'info',\n action: handleDiscardChanges,\n dataCyLabel: 'relationship-edit-session-modal-discard-button',\n },\n {\n label: pastSession\n ? baseLanguage.globals.common.save_changes_button_label\n : baseLanguage.relationships.sessions.edit_session_modal\n .update_calendar_invite_button_label,\n variant: 'contained',\n color: 'info',\n isLoadingButton: true,\n action: handleSubmit(onSubmit),\n dataCyLabel: 'relationship-edit-session-modal-submit-button',\n },\n ],\n ];\n const discardModalActions: IButtonAction[] = [\n {\n label: cancelButtonLabel,\n action: handleDiscardModalClose,\n color: 'info',\n variant: 'outlined',\n dataCyLabel: 'relationship-edit-session-modal-close-discard-button',\n },\n {\n label: baseLanguage.globals.common.discard_changes_button_label,\n action: () => {\n navigateBack();\n },\n color: 'error',\n variant: 'contained',\n dataCyLabel: 'relationship-edit-session-modal-confirm-discard-button',\n },\n ];\n const deleteModalActions: IButtonAction[] = [\n {\n label: cancelButtonLabel,\n action: handleDeleteModalClose,\n color: 'info',\n variant: 'outlined',\n dataCyLabel: 'relationship-edit-session-modal-close-delete-button',\n },\n {\n label: baseLanguage.globals.common.delete_button_label,\n action: () => {\n handleDeleteSession();\n },\n color: 'error',\n variant: 'contained',\n isLoadingButton: true,\n dataCyLabel: 'relationship-edit-session-modal-confirm-delete-button',\n },\n ];\n\n return (\n \n {session.pastSession ? (\n \n ) : (\n \n )}\n\n \n \n \n );\n};\n","import {\n getFriendlyDateFormat,\n getLanguageFromCMS,\n getSubDomain,\n getTimeFormat,\n} from '@guider-global/front-end-utils';\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\nimport { IRelationship, ISession, TimeZone } from '@guider-global/shared-types';\nimport {\n AlertBox,\n ButtonStack,\n Icon,\n Stack,\n Text,\n theme,\n} from '@guider-global/ui';\n\nimport History from '@mui/icons-material/History';\nimport {\n Box,\n Button,\n SxProps,\n Theme,\n ThemeProvider,\n useTheme,\n} from '@mui/material';\nimport { ModalCard } from 'components/ModalCard';\nimport { format } from 'date-fns';\nimport { useAvailabilities, useMobileMediaQuery } from 'hooks';\nimport { useEffect, useState } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { deepMerge } from 'utils';\n\ninterface IRelationshipSessionsHistoryProps {\n relationship: IRelationship;\n handleClose: () => void;\n isGroupProgram: boolean;\n isActiveGroup: boolean;\n isGuide: boolean;\n}\n\nexport const RelationshipSessionHistory: React.FC<\n IRelationshipSessionsHistoryProps\n> = ({ relationship, handleClose, isGroupProgram, isActiveGroup, isGuide }) => {\n // BaseLanguage\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n // Availabilities\n const { reqAvailabilities } = useAvailabilities({\n getSilently: false,\n });\n\n const { timeZone } = Intl.DateTimeFormat().resolvedOptions() as {\n timeZone: TimeZone;\n };\n\n const isMobile = useMobileMediaQuery();\n const { pathname } = useLocation();\n const organizationSlug = getSubDomain();\n // hooks\n const navigate = useNavigate();\n\n // Styling\n const organizationTheme = useTheme();\n const combinedPalette = deepMerge(\n theme.appTheme.palette,\n organizationTheme.palette,\n );\n\n const declinedStyles: SxProps = {\n border: 1,\n borderColor: combinedPalette.error.light,\n backgroundColor: 0,\n textDecoration: 'line-through',\n };\n const tentativeStyles: SxProps = {\n border: 1,\n borderColor: combinedPalette.info.light,\n borderStyle: 'dashed',\n backgroundColor: 0,\n };\n\n const archived = relationship.isConcluded;\n\n const [isSessionsModalOpen, setIsSessionsModalOpen] = useState(false);\n\n const sessions =\n relationship.sessions?.filter((session) => !session.isArchived) ?? [];\n\n let parsedSessions: { [key: string]: ISession[] } = {};\n\n [...sessions]\n ?.sort((sessionA, sessionB) => {\n if (!sessionA.start || !sessionB.start) return 1;\n if (sessionA.start > sessionB.start) {\n return -1;\n } else {\n return 1;\n }\n })\n .forEach((session) => {\n if (!session?.start) {\n return;\n }\n\n const key = format(new Date(session.start), 'MMM yyyy');\n\n if (!parsedSessions[key]) {\n parsedSessions[key] = [];\n }\n\n parsedSessions[key].push(session as ISession);\n });\n\n const sessionCount = sessions.length;\n\n const locale = getLanguageFromCMS(baseLanguage.language_code);\n\n const formattedTime = getTimeFormat(baseLanguage.time_format);\n\n const formattedDate = getFriendlyDateFormat(baseLanguage.date_format);\n\n const canLogSession =\n !relationship.isConcluded &&\n ((isGroupProgram && isActiveGroup && isGuide) || !isGroupProgram);\n\n useEffect(() => {\n if (pathname.includes('sessions') && !isSessionsModalOpen) {\n setIsSessionsModalOpen(true);\n }\n }, [pathname, isSessionsModalOpen]);\n\n const handleScheduleSession = async () => {\n await reqAvailabilities({\n url: '/availabilities',\n params: {\n organizationSlug,\n date: new Date(),\n timeZone,\n },\n });\n\n navigate(`/relationships/${relationship.id}/sessions/create`, {\n replace: false,\n });\n setIsSessionsModalOpen(true);\n };\n\n const handleLogSession = async () => {\n navigate(`/relationships/${relationship.id}/sessions/log`, {\n replace: false,\n });\n setIsSessionsModalOpen(true);\n };\n\n const handleSessionClick = (sessionId: string) => {\n navigate(`/relationships/${relationship.id}/sessions/${sessionId}`, {\n replace: false,\n });\n\n setIsSessionsModalOpen(true);\n };\n\n const renderSessionMonths = () =>\n Object.entries(parsedSessions).map(([key, value]) => {\n return (\n \n \n {renderSessions(value)}\n \n );\n });\n\n const renderSessions = (sessionsToRender: ISession[]) => {\n return sessionsToRender?.map((session, index) => {\n const sessionDate =\n format(new Date(session.start), `${formattedDate}, ${formattedTime}`, {\n locale,\n }) +\n '-' +\n format(new Date(session.end), `${formattedTime}`, { locale });\n\n const sessionsLocation = () => {\n if (session.pastSession)\n return baseLanguage.relationships.session_history.modal\n .logged_past_session_label;\n if (session.hasVideoConferencing) return session.videoConferencing;\n if (!session.hasVideoConferencing && !session.pastSession)\n return session.location;\n };\n\n const isDeclined =\n session.declinedEmails && session.declinedEmails?.length > 0;\n\n const isTentative =\n session.tentativeEmails && session.tentativeEmails?.length > 0;\n return (\n handleSessionClick(session.id || '')}\n >\n \n {session.pastSession ? (\n \n ) : (\n <>\n )}\n \n \n \n {!session.pastSession ? (\n <>\n \n •\n \n \n ) : (\n \n )}\n \n \n \n \n );\n });\n };\n\n const renderContent = () => {\n if (sessionCount === 0) {\n return (\n \n \n {canLogSession && (\n handleScheduleSession(),\n 'data-cy':\n 'relationship-past-sessions-modal-schedule-session-button',\n },\n {\n key: 'log-session',\n variant: 'text',\n label: baseLanguage.globals.sessions.log_session_button_label,\n onClick: () => handleLogSession(),\n sx: { color: combinedPalette.text.secondary },\n 'data-cy':\n 'relationship-past-sessions-modal-log-session-button',\n },\n ]}\n />\n )}\n \n );\n } else {\n return (\n <>\n \n {renderSessionMonths()}\n \n {canLogSession && (\n handleLogSession(),\n 'data-cy':\n 'relationship-past-sessions-modal-log-session-button',\n },\n {\n key: 'new-session',\n variant: 'outlined',\n label: baseLanguage.globals.sessions.schedule_session,\n color: 'info',\n onClick: () => handleScheduleSession(),\n 'data-cy':\n 'relationship-past-sessions-modal-schedule-session-button',\n },\n ]}\n />\n )}\n \n );\n }\n };\n\n return (\n \n \n {renderContent()}\n \n \n );\n};\n","// external\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\n\n// hooks\n\n// types\nimport { ModalCard } from 'components';\nimport { IButtonAction } from 'components/ActionButton';\nimport { IntegrationsList } from 'components/IntegrationsList';\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\n\ninterface IRelationshipSessionsIntegrateProps {\n handleClose: () => void;\n}\n\nexport const RelationshipSessionsIntegrate: React.FC<\n IRelationshipSessionsIntegrateProps\n> = ({ handleClose }) => {\n //hooks\n const navigate = useNavigate();\n\n //base language\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n const integrationsModal =\n baseLanguage.relationships.sessions.manage_integrations_modal;\n\n //handlers\n const handleGoBack = () => {\n navigate(-1);\n };\n\n //modal actions\n const modalGoBackAction: IButtonAction = {\n label: baseLanguage.globals.common.go_back_button_label,\n action: handleGoBack,\n variant: 'contained',\n color: 'info',\n dataCyLabel:\n 'components_Relationships_RelationshipSessions_RelationshipSesssionsIntegrate_cancel-button',\n };\n\n return (\n \n \n \n );\n};\n","// external\nimport React, { useState } from 'react';\nimport { SubmitHandler, useForm } from 'react-hook-form';\nimport { useSearchParams } from 'react-router-dom';\n\n// internal\nimport { getSubDomain } from '@guider-global/front-end-utils';\n\n// components\n\n// store\nimport { useAppDispatch } from 'store/hooks';\nimport { showAppAlert } from 'store/slices/appSlice';\n\n// hooks\nimport { useProfiles, useRelationships, useSessions } from 'hooks';\n\n// types\nimport {\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\nimport {\n IRelationship,\n TConvertableSessionLogTime,\n TimeZone,\n} from '@guider-global/shared-types';\nimport {\n getPastSessionStartAndEndDates,\n getSessionTitle,\n} from '@guider-global/isomorphic-utils';\nimport { Checkbox, Stack, theme } from '@guider-global/ui';\nimport { ThemeProvider, useMediaQuery, useTheme } from '@mui/material';\nimport { ModalCard } from 'components';\nimport { IButtonAction } from 'components/ActionButton';\nimport { deepMerge } from 'utils';\n\nexport interface ISessionLogInputs {\n title: string;\n date: Date;\n startTime: string;\n endTime: string;\n}\n\ninterface IRelationshipSessionsLogProps {\n relationship: IRelationship;\n handleClose: () => void;\n}\n\ninterface IDateCheckbox {\n heading: string;\n name: TConvertableSessionLogTime;\n}\n\nexport const RelationshipSessionsLog: React.FC<\n IRelationshipSessionsLogProps\n> = ({ relationship, handleClose }) => {\n const [searchParams] = useSearchParams();\n const day = (searchParams.get('day') ?? '0') as\n | TConvertableSessionLogTime\n | undefined;\n\n const [checkedDate, setCheckedDate] = useState<\n TConvertableSessionLogTime | undefined\n >(day);\n\n //baseLanguage\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n const pastSessionsLabels =\n baseLanguage.relationships.sessions.log_past_session_modal;\n\n const checkboxes: IDateCheckbox[] = [\n {\n heading: pastSessionsLabels.today_checkbox_label,\n name: 'today',\n },\n {\n heading: pastSessionsLabels.this_week_checkbox_label,\n name: 'this-week',\n },\n {\n heading: pastSessionsLabels.this_month_checkbox_label,\n name: 'this-month',\n },\n {\n heading: pastSessionsLabels.last_month_checkbox_label,\n name: 'last-month',\n },\n ];\n\n const organizationTheme = useTheme();\n const combinedPalette = deepMerge(\n theme.appTheme.palette,\n organizationTheme.palette,\n );\n\n //hooks\n const dispatch = useAppDispatch();\n const organizationSlug = getSubDomain();\n const { reqRelationships, isLoadingRelationships } = useRelationships({\n getSilently: false,\n });\n\n //form\n const { handleSubmit } = useForm({ mode: 'onChange' });\n\n const { getProfiles } = useProfiles({ getSilently: false });\n const [profile] = getProfiles();\n const guideProfiles = relationship.guideProfiles ?? [];\n const traineeProfiles = relationship.traineeProfiles ?? [];\n\n const { breakpoints } = useTheme();\n const isMobile = useMediaQuery(breakpoints.down('md'));\n\n //sessions\n const { reqSessions, isLoadingSessions } = useSessions({});\n\n const programSlug = relationship?.programSlug;\n const { getProgram } = useSanityOrganizationPrograms({});\n\n let program;\n\n if (programSlug) {\n program = getProgram(programSlug);\n }\n\n const programName = program?.metadata.program_name;\n\n const onSubmit: SubmitHandler = async (data) => {\n if (!checkedDate) {\n return;\n }\n\n const { timeZone } = Intl.DateTimeFormat().resolvedOptions() as {\n timeZone?: TimeZone | string;\n };\n\n const selectedDate = checkboxes.find(\n (checkbox) => checkbox.name === checkedDate,\n );\n\n if (!selectedDate) {\n return;\n }\n\n const pastSessionDates = getPastSessionStartAndEndDates(selectedDate?.name);\n\n const sessionsResponse = await reqSessions({\n method: 'POST',\n url: '/sessions',\n data: {\n name: programName\n ? getSessionTitle(relationship, programName ?? '')\n : 'Logged',\n organizationSlug,\n programSlug,\n relationshipId: relationship.id,\n description: '',\n participantProfiles: [\n ...traineeProfiles.map((trainee) => trainee.id ?? ''),\n ...guideProfiles.map((guide) => guide.id ?? ''),\n ],\n start: pastSessionDates.start,\n end: pastSessionDates.end,\n timezone: timeZone,\n ownerProfile: profile.id,\n pastSession: true,\n },\n });\n\n if (sessionsResponse.status !== 'success') {\n dispatch(\n showAppAlert({\n severity: 'error',\n message:\n baseLanguage.relationships.sessions.log_past_session_modal\n .log_session_error_alert_text,\n timeout: 5000,\n }),\n );\n } else {\n await Promise.all([\n reqSessions({ url: '/sessions' }),\n reqRelationships({ url: '/relationships' }),\n ]);\n\n dispatch(\n showAppAlert({\n severity: 'success',\n message:\n baseLanguage.relationships.sessions.log_past_session_modal\n .log_session_success_alert_text,\n timeout: 5000,\n }),\n );\n\n handleClose();\n }\n };\n\n const modalActions: IButtonAction | IButtonAction[] = [\n {\n label: baseLanguage.globals.common.cancel_button_label ?? 'Cancel',\n color: 'info',\n variant: 'outlined',\n action: handleClose,\n dataCyLabel: 'relationship-log-session-modal-cancel-button',\n },\n {\n label: baseLanguage.globals.sessions.log_session_button_label,\n variant: 'contained',\n color: 'info',\n action: handleSubmit(onSubmit),\n isLoadingButton: true,\n disabled: !checkedDate,\n dataCyLabel: 'relationship-log-session-modal-log-session-button',\n },\n ];\n\n return (\n \n \n \n {checkboxes.map((checkbox) => (\n setCheckedDate(checkbox.name)}\n isChecked={checkedDate === checkbox.name}\n data-cy={`relationship-log-session-modal-${checkbox.name}-button`}\n />\n ))}\n \n \n \n );\n};\n","// external\nimport { Card } from '@mui/material';\nimport React, { useEffect } from 'react';\nimport { useNavigate, useParams } from 'react-router-dom';\n\n// components\nimport { IAttendee, SessionsDetails, ModalCard } from 'components';\n\n// Hooks\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\n\n// types\nimport { getISOStringWithoutMilliseconds } from '@guider-global/front-end-utils';\nimport { IRelationship, ISession } from '@guider-global/shared-types';\nimport { IButtonAction } from 'components/ActionButton';\nimport { useMixpanelEvents } from 'hooks';\n\ninterface IRelationshipSessionsViewProps {\n relationship: IRelationship;\n handleClose: () => void;\n isGroupProgram: boolean;\n isActiveGroup: boolean;\n isGuide: boolean;\n}\n\nexport const RelationshipSessionsView: React.FC<\n IRelationshipSessionsViewProps\n> = ({ relationship, handleClose, isGroupProgram, isActiveGroup, isGuide }) => {\n const canSeeEditSessionButton =\n !relationship.isConcluded &&\n ((isGroupProgram && isActiveGroup && isGuide) || !isGroupProgram);\n //base language\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n //hooks\n const { trackMixpanelEvent } = useMixpanelEvents();\n const navigate = useNavigate();\n\n //sessions\n const { sessionId } = useParams();\n const relationshipSessions = relationship?.sessions as ISession[];\n const session = relationshipSessions.find(\n (session) => session.id === sessionId,\n );\n\n useEffect(() => {\n if (!session) return;\n trackMixpanelEvent('Relationship - Session - Session viewed', {\n Viewed: getISOStringWithoutMilliseconds(),\n });\n }, [session, trackMixpanelEvent]);\n\n if (!session) {\n return <>;\n }\n\n //handlers\n const handleEditSession = () => {\n navigate(`/relationships/${relationship.id}/sessions/${sessionId}/edit`);\n };\n\n //modal actions\n const modalActions: (IButtonAction | IButtonAction[])[] = [\n {\n label: baseLanguage.globals.common.close_button_label,\n variant: 'contained',\n color: 'info',\n action: handleClose,\n dataCyLabel: 'relationship-view-session-modal-close-button',\n },\n ];\n\n if (canSeeEditSessionButton) {\n modalActions.unshift({\n label: baseLanguage.globals.sessions.edit_session_button_label,\n variant: 'outlined',\n color: 'info',\n action: handleEditSession,\n dataCyLabel: 'relationship-view-session-modal-edit-session-button',\n });\n }\n\n const attendees: IAttendee[] = [\n ...(relationship.guideProfiles ?? []),\n ...(relationship.traineeProfiles ?? []),\n ].map((profile) => {\n const user = relationship.users?.find((user) => user.id === profile.userId);\n return {\n ...profile,\n userPicture: user?.picture,\n };\n });\n\n return (\n \n \n {}\n \n \n );\n};\n","// external\nimport {\n Box,\n Divider,\n ThemeProvider,\n Typography,\n useTheme,\n Button as MuiButton,\n} from '@mui/material';\nimport { format } from 'date-fns';\nimport React, { useEffect, useState } from 'react';\nimport { useLocation, useNavigate, useParams } from 'react-router-dom';\n\n// components\nimport { RelationshipSessionsModal } from 'modals';\n\n// Hooks\nimport { useAvailabilities } from 'hooks';\n\n// types\n\n// Internal\nimport {\n getFriendlyDateFormat,\n getLanguageFromCMS,\n getTimeFormat,\n} from '@guider-global/front-end-utils';\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\nimport { IRelationship } from '@guider-global/shared-types';\nimport { ButtonStack, Icon, TextStack, theme } from '@guider-global/ui';\nimport History from '@mui/icons-material/History';\n\nimport { deepMerge } from 'utils';\n// types\ninterface IRelationshipSessionsProps {\n relationship: IRelationship;\n isGroupProgram: boolean;\n isActiveGroup?: boolean;\n isGuide: boolean;\n}\n\nexport const RelationshipSessions: React.FC = ({\n relationship,\n isGroupProgram,\n isActiveGroup = false,\n isGuide,\n}) => {\n const { reqAvailabilities } = useAvailabilities({\n getSilently: false,\n });\n const [isSessionsModalOpen, setIsSessionsModalOpen] = useState(false);\n const navigate = useNavigate();\n const { pathname } = useLocation();\n const { sessionId } = useParams();\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n const organizationTheme = useTheme();\n const sessions = relationship.sessions;\n const now = new Date();\n\n const archived = relationship.isConcluded;\n\n const canSeeNewSessionButton =\n !relationship.isConcluded &&\n ((isGroupProgram && isActiveGroup && isGuide) || !isGroupProgram);\n\n const canSeeSessions = (isGroupProgram && isActiveGroup) || !isGroupProgram;\n\n const filteredSessions = sessions?.filter((session) => {\n const sessionEndDate = session?.end ? new Date(session?.end) : undefined;\n if (!sessionEndDate) return false;\n const hasSessionEnded = sessionEndDate <= now;\n if (hasSessionEnded) return false;\n if (session.isArchived) return false;\n return true;\n });\n\n const combinedPalette = deepMerge(\n theme.appTheme.palette,\n organizationTheme.palette,\n );\n\n const locale = getLanguageFromCMS(baseLanguage.language_code);\n\n const FormattedTime = getTimeFormat(baseLanguage.time_format);\n\n const FormattedDate = getFriendlyDateFormat(baseLanguage.date_format);\n\n const handleSessionsModalClose = () => {\n navigate(`/relationships/${relationship.id}`);\n\n setIsSessionsModalOpen(false);\n };\n\n const handleScheduleSession = async () => {\n await reqAvailabilities({ url: '/availabilities' });\n\n navigate(`/relationships/${relationship.id}/sessions/create`);\n setIsSessionsModalOpen(true);\n };\n\n const handleLogSession = async () => {\n navigate(`/relationships/${relationship.id}/sessions/log`);\n setIsSessionsModalOpen(true);\n };\n const handleHistorySession = () => {\n setIsSessionsModalOpen(true);\n\n navigate(`/relationships/${relationship.id}/sessions/history`);\n };\n\n const renderSessionsCount = () => {\n const sessionsCount = filteredSessions?.length ?? 0;\n\n if (sessionsCount > 1) {\n return `${sessionsCount} ${baseLanguage.relationships.sessions.sidebar.multiple_sessions_scheduled_label}`;\n } else if (sessionsCount === 1) {\n return `${sessionsCount} ${baseLanguage.relationships.sessions.sidebar.single_session_scheduled_label}`;\n } else {\n return baseLanguage.relationships.sessions.sidebar\n .no_sessions_scheduled_label;\n }\n };\n\n const handleSessionClick = (sessionId: string) => {\n navigate(`/relationships/${relationship.id}/sessions/${sessionId}`, {\n replace: false,\n });\n\n setIsSessionsModalOpen(true);\n };\n\n useEffect(() => {\n if (pathname.includes('sessions')) {\n const isOnCreateSessionPage = pathname.endsWith('/create');\n const session = relationship.sessions?.find(\n (session) => session.id === sessionId,\n );\n\n if (session?.isArchived) {\n navigate(`/relationships/${relationship.id}`);\n } else if ((isOnCreateSessionPage || session) && !isSessionsModalOpen) {\n setIsSessionsModalOpen(true);\n }\n }\n }, [\n pathname,\n isSessionsModalOpen,\n relationship.sessions,\n relationship.id,\n sessionId,\n navigate,\n ]);\n\n const renderSessions = () => {\n return filteredSessions?.map((session, index) => {\n const sessionStart = session.start ?? '';\n const sessionEnd = session.end ?? '';\n\n return (\n handleSessionClick(session.id ?? '')}\n >\n \n {session.name}\n \n \n {format(\n new Date(sessionStart),\n `${FormattedDate}, ${FormattedTime}`,\n {\n locale,\n },\n )}\n {' - '}\n {format(new Date(sessionEnd), FormattedTime, { locale })}\n \n \n );\n });\n };\n\n return canSeeSessions ? (\n <>\n \n \n \n\n \n \n \n \n\n \n {renderSessions()}\n \n {canSeeNewSessionButton && (\n handleScheduleSession(),\n 'data-cy': 'relationship-schedule-session-button',\n },\n {\n key: 'log-session',\n variant: 'outlined',\n label: baseLanguage.globals.sessions.log_session_button_label,\n color: 'info',\n onClick: () => handleLogSession(),\n 'data-cy': 'relationship-log-session-button',\n },\n ]}\n />\n )}\n \n \n {isSessionsModalOpen && (\n \n )}\n \n ) : undefined;\n};\n\nexport * from './RelationshipSessionsCreate';\nexport * from './RelationshipSessionsEdit';\nexport * from './RelationshipSessionsHistory';\nexport * from './RelationshipSessionsIntegrate';\nexport * from './RelationshipSessionsLog';\nexport * from './RelationshipSessionsView';\n","//external\nimport { Modal } from '@mui/material';\n\n//components\nimport { ModalCard } from 'components/ModalCard';\n\n//types\nimport { ProfilePreview } from 'components';\nimport {\n MembershipDataProps,\n ProfilePreviewProfileData,\n} from 'components/ProfilePreview';\n\ninterface RelationshipViewProfileModalProps {\n isOpen: boolean;\n title: string;\n closeButtonLabel: string;\n handleClose: () => void;\n closeButtonAction: () => void;\n programSlug: string | undefined;\n userRole: 'guide' | 'trainee';\n profileData: ProfilePreviewProfileData;\n membershipData: MembershipDataProps;\n}\n\nexport function RelationshipViewProfileModal({\n isOpen,\n title,\n closeButtonLabel,\n handleClose,\n closeButtonAction,\n programSlug,\n userRole,\n profileData,\n membershipData,\n}: RelationshipViewProfileModalProps) {\n return (\n \n \n \n \n \n );\n}\n","//external\nimport { Box, Divider, ThemeProvider, useTheme } from '@mui/material';\nimport { useState } from 'react';\n\n//hooks\nimport {\n useOrganization,\n useSanityBaseLanguage,\n useSanityOrganizationPrograms,\n} from '@guider-global/sanity-hooks';\n\n//types\nimport {\n IMembership,\n IRelationship,\n ISkill,\n Program,\n SanityProgramTypeTextValue,\n} from '@guider-global/shared-types';\nimport {\n MembershipDataProps,\n ProfilePreviewProfileData,\n} from 'components/ProfilePreview';\nimport { useProfiles } from 'hooks';\n\nimport { RelationshipViewProfileModal } from '../RelationshipViewProfileModal';\nimport { Button, theme } from '@guider-global/ui';\nimport { deepMerge } from 'utils';\nimport { interpolate } from 'functions';\nimport { getSubDomain } from '@guider-global/front-end-utils';\n\ninterface RelationshipViewProfileProps {\n relationship: IRelationship;\n}\n\nexport function RelationshipViewProfile({\n relationship,\n}: RelationshipViewProfileProps) {\n //state\n const [selectedUserId, setSelectedUserId] = useState();\n\n // Organization\n const organizationSlug = getSubDomain();\n const { organization } = useOrganization({ organizationSlug });\n\n //style\n const organizationTheme = useTheme();\n const combinedPalette = deepMerge(\n theme.appTheme.palette,\n organizationTheme.palette,\n );\n\n //base language\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n const { title: modalTitle } = baseLanguage.relationships.view_profile_modal;\n const modalCloseButtonLabel =\n baseLanguage.globals?.common?.close_button_label ?? 'Close';\n\n // Profile\n const { getProfiles } = useProfiles({ getSilently: false });\n const [profile] = getProfiles();\n const profileId = profile?.id;\n\n const guideProfiles = relationship.guideProfiles ?? [];\n const traineeProfiles = relationship.traineeProfiles ?? [];\n\n //program\n const programSlug = relationship?.programSlug;\n const { getProgram } = useSanityOrganizationPrograms({});\n\n let program: Program | undefined;\n let programTypeText: SanityProgramTypeTextValue | undefined;\n if (programSlug) {\n program = getProgram(programSlug);\n programTypeText = program?.program_details?.program_type?.program_type_text;\n } else {\n programTypeText =\n organization?.open_matching.program_type?.program_type_text;\n }\n\n // TODO: reinstate view profile for open matching - currently set up for Memberships only\n\n if (!programSlug) return;\n\n const otherUsers = [...guideProfiles, ...traineeProfiles].filter(\n (profile) => profile.id !== profileId,\n );\n\n //handlers\n const handleModalClose = () => setSelectedUserId(undefined);\n const handleModalOpen = (userId?: string) => setSelectedUserId(userId);\n\n const getSelectedUsersProfileData = (\n selectedUserId?: string,\n ): ProfilePreviewProfileData => {\n const guideProfiles = relationship.guideProfiles ?? [];\n const traineeProfiles = relationship.traineeProfiles ?? [];\n const profiles = [...guideProfiles, ...traineeProfiles];\n\n const selectedProfile = profiles.find(\n (profile) => profile.userId === selectedUserId,\n );\n\n const selectedProfileUserId = selectedProfile?.userId;\n\n const selectedUser = relationship.users?.find(\n (user) => user.id === selectedProfileUserId,\n );\n return {\n ...selectedProfile,\n pictures: {\n profile: selectedProfile?.picture,\n user: selectedUser?.picture,\n },\n };\n };\n\n const getSelectedUsersMembershipData = (\n selectedUserId?: string,\n ): MembershipDataProps => {\n const guideMemberships = relationship.guideMemberships ?? [];\n const traineeMemberships = relationship.traineeMemberships ?? [];\n const memberships = [...guideMemberships, ...traineeMemberships];\n\n const selectedMembership = memberships.find(\n (membership) => membership.userId === selectedUserId,\n );\n\n const skillFieldSlugs = selectedMembership?.skills?.map((skill) => {\n const skillTyped = skill as ISkill;\n return skillTyped.fieldSlug;\n });\n return {\n skills: skillFieldSlugs ?? [],\n membership: selectedMembership ? [selectedMembership as IMembership] : [],\n };\n };\n\n const getSelectedUserRole = (selectedUserId?: string) => {\n const guideProfile = relationship.guideProfiles?.find(\n (guideProfile) => guideProfile.userId === selectedUserId,\n );\n if (guideProfile) return 'guide';\n return 'trainee';\n };\n\n return (\n <>\n \n \n {otherUsers.map((otherUser) => {\n return (\n handleModalOpen(otherUser.userId)}\n sx={{\n fontWeight: 600,\n mb: 2,\n px: 0.5,\n py: 1,\n }}\n >\n {interpolate(\n programTypeText?.variations?.individual?.relationships\n ?.view_profile_button_label ?? '',\n {\n firstName: otherUser.firstName ?? '',\n lastName: otherUser.lastName ?? '',\n },\n 'View Profile',\n )}\n \n );\n })}\n \n \n \n \n \n );\n}\n","// external\nimport React, { useEffect } from 'react';\nimport ArrowDropDown from '@mui/icons-material/ArrowDropDown';\nimport {\n Accordion,\n AccordionSummary,\n Typography,\n AccordionDetails,\n} from '@mui/material';\n\n// components\nimport { RelationshipsList } from 'components';\n\n// Hooks\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\n\n// types\nimport { IRelationship } from '@guider-global/shared-types';\nimport { useParams } from 'react-router-dom';\n\ninterface IRelationshipsArchivedListProps {\n relationships: IRelationship[];\n isLoading: boolean;\n}\n\nexport const RelationshipsArchivedList: React.FC<\n IRelationshipsArchivedListProps\n> = ({ relationships, isLoading }) => {\n const [expanded, setExpanded] = React.useState(false);\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const label =\n baseLanguage.relationships.relationships_list.archived_section_label;\n\n const { relationshipId } = useParams();\n\n const relationshipIds = relationships.map((relationship) => relationship.id);\n\n const isActive = relationshipId\n ? relationshipIds.includes(relationshipId)\n : false;\n\n useEffect(() => {\n if (isActive) {\n setExpanded(true);\n }\n }, [isActive]);\n\n const handleChange = (event: React.SyntheticEvent, expanded: boolean) =>\n setExpanded(expanded);\n\n const accordionProps = {\n elevation: 0,\n sx: {\n width: '100%',\n backgroundColor: 'transparent',\n ':before': { display: 'none' },\n '&.Mui-expanded': {\n m: 0,\n },\n },\n 'data-cy': 'archived-relationships-list',\n };\n\n const accordionSummaryProps = {\n expandIcon: ,\n 'aria-controls': 'panel1a-content',\n id: 'panel1a-header',\n sx: {\n m: 0,\n p: 0,\n minHeight: 'auto',\n '& .MuiAccordionSummary-content': {\n m: 0,\n '&.Mui-expanded': {\n m: 0,\n minHeight: 'auto',\n },\n },\n '&.Mui-expanded': {\n m: 0,\n minHeight: 'auto',\n },\n },\n };\n\n const accordionDetailsProps = {\n sx: {\n p: 0,\n },\n };\n\n return (\n \n \n \n {label}\n \n \n \n \n \n \n );\n};\n","import Person from '@mui/icons-material/Person';\nimport { Avatar, Typography, Box, useTheme } from '@mui/material';\n\n// Hooks\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\n\nexport const RelationshipsEmpty = () => {\n const theme = useTheme();\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n return (\n \n \n \n \n \n {baseLanguage.relationships.relationships_list.no_relationships}\n \n \n );\n};\n","// external\nimport React from 'react';\nimport { Box, Skeleton } from '@mui/material';\n\n// components\nimport { RelationshipItem, RelationshipsEmpty } from 'components';\n\n// types\nimport { IRelationship } from '@guider-global/shared-types';\n\ninterface IRelationshipsListProps {\n relationships: IRelationship[];\n isLoading: boolean;\n}\n\nexport const RelationshipsList: React.FC = ({\n relationships,\n isLoading,\n}) => {\n if (isLoading)\n return (\n <>\n \n \n \n \n );\n\n return (\n \n {relationships.length === 0 ? (\n \n ) : (\n relationships.map((relationship) => (\n \n ))\n )}\n \n );\n};\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport { ChatMessageReceivedEvent } from '@azure/communication-chat';\nimport { AzureCommunicationTokenCredential } from '@azure/communication-common';\nimport {\n createStatefulChatClient,\n StatefulChatClient,\n} from '@azure/communication-react';\nimport { useNavigate } from 'react-router-dom';\n\nimport { RelationshipsPage } from 'pages';\n\nimport { useChatToken, useProfiles, useRelationships } from 'hooks';\n\nimport { useAppDispatch } from 'store/hooks';\nimport {\n setIsUnreadMessages,\n IRelationshipThreads,\n updateRelationshipThreads,\n IRelationshipThread,\n} from 'store/slices/relationshipThreadsSlice';\n\nimport { IError } from '@guider-global/shared-types';\n\nimport { datadogLogs } from '@guider-global/datadog';\nimport { useChatParticipants } from 'hooks/useChatParticipants';\nimport { showAppAlert } from 'store/slices/appSlice';\n\ninterface RelationshipsWrapperProps {\n getRelationshipSilently?: boolean;\n getProfilesSilently?: boolean;\n}\n\nconst { REACT_APP_AZURE_COMMUNICATION_ENDPOINT_URL } = process.env;\n\nexport const RelationshipsWrapper: FC = ({\n getRelationshipSilently = true,\n getProfilesSilently = false,\n}) => {\n // Router\n const navigate = useNavigate();\n // Redux\n const dispatch = useAppDispatch();\n // Local state\n const [error, setError] = useState();\n const [credential, setCredential] =\n useState();\n const [statefulChatClient, setStatefulChatClient] =\n useState();\n\n // Internal Hooks\n // Relationships\n const { relationships: getRelationships, getErrorsRelationships } =\n useRelationships({\n getSilently: getRelationshipSilently,\n });\n\n const relationships = getRelationships();\n const memoRelationships = useMemo(() => relationships, [relationships]);\n\n const errorsRelationships = getErrorsRelationships();\n\n // Profile\n const { getProfiles } = useProfiles({ getSilently: getProfilesSilently });\n const [profile] = getProfiles();\n const profileId = profile?.id ?? '';\n const communicationUserId = profile?.communicationUserId ?? '';\n const displayName = profile?.displayName ?? '';\n // Chat token\n const { token, error: chatTokenError } = useChatToken(profileId);\n // Chats\n const { getChatParticipants } = useChatParticipants({\n getSilently: true,\n });\n const chatParticipants = getChatParticipants();\n\n useEffect(() => {\n if (!token) return;\n\n try {\n const getCredential = new AzureCommunicationTokenCredential(token);\n setCredential(getCredential);\n } catch (error) {\n datadogLogs.logger.error('RelationshipWrapper:getCredential:', {\n error,\n });\n if (error instanceof Error) {\n setError({ message: error?.message, code: error?.name });\n } else {\n setError({\n message: 'Failed to construct token credential',\n code: 'unknown error',\n });\n }\n console.error('Failed to construct token credential');\n return undefined;\n }\n }, [token]);\n\n useEffect(() => {\n if (!credential) return;\n const endpoint = REACT_APP_AZURE_COMMUNICATION_ENDPOINT_URL;\n if (!endpoint) return;\n const getStatefulChatClient = createStatefulChatClient({\n userId: { communicationUserId },\n displayName: displayName,\n endpoint,\n credential,\n });\n\n setStatefulChatClient(getStatefulChatClient);\n }, [communicationUserId, credential, displayName]);\n\n useEffect(() => {\n if (!statefulChatClient) return;\n const startRealtimeNotifications = async () => {\n try {\n await statefulChatClient.startRealtimeNotifications();\n } catch (err) {\n datadogLogs.logger.error(\n 'RelationshipWrapper:startRealtimeNotifications',\n {\n err,\n },\n );\n console.error(err);\n if (err instanceof Error) {\n setError({ message: err?.message, code: err?.name });\n } else {\n setError({\n message: 'Error Occurred starting Real time notifications',\n code: 'unknown error',\n });\n }\n }\n };\n\n const threads = memoRelationships.map(\n (relationship): IRelationshipThread => {\n const threadId = relationship.threadId ?? '';\n const relationshipId = relationship.id;\n const isConcluded = relationship.isConcluded;\n const isUnreadMessages =\n chatParticipants.find(\n (participant) => participant.threadId === threadId,\n )?.isUnreadMessages ?? false;\n return {\n id: relationshipId,\n threadId,\n isConcluded,\n isUnreadMessages,\n };\n },\n );\n const relationshipThreads = {\n threads,\n statefulChatClient,\n } as IRelationshipThreads;\n\n dispatch(updateRelationshipThreads(relationshipThreads));\n\n startRealtimeNotifications();\n\n const onChatMessageReceived = ({\n threadId,\n sender,\n }: ChatMessageReceivedEvent) => {\n if (\n sender.kind === 'communicationUser' &&\n sender.communicationUserId !== communicationUserId\n ) {\n dispatch(setIsUnreadMessages({ threadId }));\n }\n };\n\n statefulChatClient.on('chatMessageReceived', onChatMessageReceived);\n return () => {\n statefulChatClient.off('chatMessageReceived', onChatMessageReceived);\n };\n }, [\n chatParticipants,\n communicationUserId,\n dispatch,\n memoRelationships,\n statefulChatClient,\n ]);\n\n useEffect(() => {\n const handleDispatchedError = (\n errorCode?: string,\n errorMessage?: string,\n ) => {\n const code = errorCode ?? 'Undefined Error Code';\n const message = errorMessage ?? 'Undefined Error Messsage';\n console.error('error', { code, message });\n datadogLogs.logger.error('RelationshipWrapper:', { code, message });\n dispatch(\n showAppAlert({\n severity: 'error',\n message: message,\n timeout: 10000,\n }),\n );\n };\n if (errorsRelationships.length > 0) {\n const errorCode = errorsRelationships[0].code?.toString();\n handleDispatchedError(errorCode, errorsRelationships[0].message);\n }\n if (chatTokenError) {\n const errorCode = chatTokenError.code?.toString();\n handleDispatchedError(errorCode, chatTokenError.message);\n }\n if (error?.message) {\n const errorCode = error.code?.toString();\n handleDispatchedError(errorCode, error.message);\n }\n }, [chatTokenError, dispatch, error, errorsRelationships, navigate]);\n\n return ;\n};\n","import * as Icons from 'react-icons/md';\n\nexport type MDIcons = keyof typeof Icons;\n\ninterface ISanityIconProps {\n name?: MDIcons;\n}\n\nexport const SanityIcon = ({ name }: ISanityIconProps) => {\n if (!name) return <>;\n const Icon = Icons[name];\n\n return ;\n};\n","// external\nimport { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nexport const ScrollToTop = () => {\n const { pathname } = useLocation();\n\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [pathname]);\n\n return null;\n};\n","import React, { useCallback } from 'react';\n\nimport { IProfile, ISession } from '@guider-global/shared-types';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport HelpIcon from '@mui/icons-material/Help';\nimport VideoCameraFront from '@mui/icons-material/VideoCameraFront';\nimport { Avatar, Box, Button, Typography } from '@mui/material';\nimport { format } from 'date-fns';\nimport { SiMicrosoftteams } from 'react-icons/si';\n\n// Hooks\nimport { useSanityBaseLanguage } from '@guider-global/sanity-hooks';\n\nimport { useProfileImage } from '@guider-global/azure-storage-hooks';\nimport {\n getFriendlyDateFormat,\n getISOStringWithoutMilliseconds,\n getLanguageFromCMS,\n getTimeFormat,\n} from '@guider-global/front-end-utils';\nimport { defaultPalette, primitiveColors } from '@guider-global/ui';\nimport { useMixpanelEvents } from 'hooks';\n\nexport interface IAttendee extends Partial {\n userPicture?: string;\n}\n\ninterface ISessionsDetails {\n session: ISession;\n attendees: IAttendee[];\n}\n\nconst HAS_ACCEPTED = 0;\nconst IS_TENTATIVE = 1;\nconst HAS_DECLINED = 2;\nconst NO_RESPONSE = 3;\ntype AttendeeResponse = [\n IAttendee,\n (\n | typeof HAS_ACCEPTED\n | typeof IS_TENTATIVE\n | typeof HAS_DECLINED\n | typeof NO_RESPONSE\n ),\n];\n\nexport const SessionsDetails: React.FC = ({\n session,\n attendees,\n}) => {\n const { getBaseLanguage } = useSanityBaseLanguage({});\n const baseLanguage = getBaseLanguage();\n\n const { trackScreenTime } = useMixpanelEvents();\n\n const trackSessionJoinButtonClick = useCallback(() => {\n trackScreenTime(\n 'Relationship - Session - Session viewed - Join call button',\n { Started: getISOStringWithoutMilliseconds() },\n );\n }, [trackScreenTime]);\n\n if (!session?.createdAt) {\n return <>;\n }\n const { getProfileImage } = useProfileImage();\n const locale = getLanguageFromCMS(baseLanguage.language_code);\n\n const formattedTime = getTimeFormat(baseLanguage.time_format);\n const formattedDate = getFriendlyDateFormat(baseLanguage.date_format);\n\n const { acceptedEmails, tentativeEmails, declinedEmails } = session;\n const attendeeResponses: AttendeeResponse[] = attendees.map((profile) => {\n const user = session.users.find((user) => user.id === profile.userId);\n const userEmail = user?.email ?? '';\n const hasAccepted = acceptedEmails?.includes(userEmail);\n const isTentative = tentativeEmails?.includes(userEmail);\n const hasDeclined = declinedEmails?.includes(userEmail);\n\n if (hasAccepted) {\n return [profile, HAS_ACCEPTED];\n }\n if (isTentative) {\n return [profile, IS_TENTATIVE];\n }\n if (hasDeclined) {\n return [profile, HAS_DECLINED];\n }\n return [profile, NO_RESPONSE];\n });\n const sortedAttendeeResponses = attendeeResponses.sort(\n ([, responseA], [, responseB]) => responseA - responseB,\n );\n\n const renderAttendees = () =>\n sortedAttendeeResponses.map(([profile, response], index) => {\n const hasAccepted = response === HAS_ACCEPTED;\n const isTentative = response === IS_TENTATIVE;\n const hasDeclined = response === HAS_DECLINED;\n\n let backgroundColor = primitiveColors.black[100];\n if (hasAccepted) {\n backgroundColor = primitiveColors.green[10];\n } else if (isTentative) {\n backgroundColor = primitiveColors.yellow[10];\n } else if (hasDeclined) {\n backgroundColor = primitiveColors.red[10];\n }\n\n const image = getProfileImage({\n profilePicture: profile.picture,\n userPicture: profile?.userPicture,\n });\n return (\n \n \n\n \n {profile.displayName}\n \n {hasAccepted && (\n \n )}\n {isTentative && (\n \n )}\n {hasDeclined && (\n \n )}\n \n );\n });\n\n const renderJoinSessionButton = () => {\n switch (session.videoConferencing) {\n case 'guider':\n return (\n }\n sx={{ backgroundColor: 'white', fontWeight: 600, mt: 1.5 }}\n fullWidth\n onClick={() => {\n trackSessionJoinButtonClick();\n window.open(\n `${\n window.location.protocol + '//' + window.location.host\n }/video/${session.id}`,\n );\n }}\n >\n {\n baseLanguage.relationships.sessions.view_session_modal\n .join_with_guider_video_button_label\n }\n \n );\n case 'ms-teams':\n return (\n }\n sx={{ backgroundColor: 'white', fontWeight: 600, mt: 1.5 }}\n fullWidth\n href={session.videoConferencingUrl}\n target=\"_blank\"\n onClick={trackSessionJoinButtonClick}\n >\n {\n baseLanguage.relationships.sessions.view_session_modal\n .join_with_ms_teams_button_label\n }\n \n );\n default:\n return;\n }\n };\n\n return (\n <>\n \n {session.name}\n \n \n {baseLanguage.relationships.sessions.view_session_modal.when_label}\n \n \n {format(new Date(session.start), `${formattedDate}`, {\n locale,\n })}\n \n \n {format(new Date(session.start), `${formattedTime}`, {\n locale,\n })}\n {' - '}\n {format(new Date(session.end), formattedTime, { locale })}\n \n {session.location && (\n <>\n \n {baseLanguage.relationships.sessions.view_session_modal.where_label}\n \n {session.location}\n \n )}\n {renderJoinSessionButton()}\n \n {baseLanguage.relationships.sessions.view_session_modal.attendees_label}\n \n {renderAttendees()}\n \n );\n};\n","import { OrganizationContentContainer } from '@guider-global/ui';\nimport { Typography } from '@mui/material';\nimport { FC, PropsWithChildren } from 'react';\n\nexport interface SettingsContainerProps {\n header?: string;\n}\n\nexport const SettingsContainer: FC<\n PropsWithChildren\n> = ({ children, header }) => {\n return (\n \n \n {children}\n \n );\n};\n\nexport const SettingsContainerHeader: FC<\n Pick\n> = ({ header }) => {\n if (!header) return null;\n return (\n \n {header}\n \n );\n};\n","// external\nimport { FC } from 'react';\nimport { Typography } from '@mui/material';\n\nexport interface SettingsDescriptionProps {\n description: string;\n}\n\nexport const SettingsDescription: FC = ({\n description,\n}) => {\n return (\n <>\n \n {description}\n \n \n );\n};\n","// external\nimport { FC } from 'react';\nimport { Skeleton, Typography } from '@mui/material';\n\nexport interface SettingsSubheaderProps {\n subheader: string;\n}\n\nexport const SettingsSubheader: FC = ({\n subheader,\n}) => {\n if (!subheader)\n return (\n <>\n \n \n Empty subheader\n \n \n \n );\n return (\n <>\n \n {subheader}\n \n \n );\n};\n","import { LoadingElement } from 'components';\nimport { useLocalization } from 'hooks';\nimport {\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport { useAppDispatch } from 'store/hooks';\nimport {\n RegistrationTypes,\n showAppAlert,\n startAppLoading,\n stopAppLoading,\n updateRegistrationType,\n} from 'store/slices/appSlice';\nimport { useIntercom } from 'react-use-intercom';\nimport {\n SanityBaseLanguagesError,\n useSanityBaseLanguage,\n useSanityOrganization,\n useSanityOrganizationPrograms,\n useSanitySettings,\n} from '@guider-global/sanity-hooks';\nimport { ThemeContext } from 'context/theme';\nimport { createTheme } from '@mui/material';\nimport { datadogLogs } from '@guider-global/datadog';\n\nexport interface SetupWrapperProps {\n organizationSlug: string;\n organizationGetSilently?: boolean;\n baseLanguageGetSilently?: boolean;\n settingsGetSilently?: boolean;\n organizationProgramsGetSilently?: boolean;\n}\n\nexport const SetupWrapper: FC> = ({\n organizationSlug,\n organizationGetSilently = true,\n baseLanguageGetSilently = true,\n settingsGetSilently = true,\n organizationProgramsGetSilently = true,\n children,\n}) => {\n // Context\n const { theme, setTheme } = useContext(ThemeContext);\n // Local State\n const [loading, setLoading] = useState(true);\n\n // Redux\n const dispatch = useAppDispatch();\n\n // Hooks\n // - Localization\n const { localeCode } = useLocalization(organizationSlug);\n // - Intercom\n const { REACT_APP_VERSION } = process.env;\n const { boot: bootIntercom } = useIntercom();\n // - Sanity BaseLanguage\n const {\n isLoadingSanityBaseLanguage,\n isErrorSanityBaseLanguage,\n isSuccessSanityBaseLanguage,\n getErrorsSanityBaseLanguage,\n } = useSanityBaseLanguage({\n getSilently: baseLanguageGetSilently,\n organizationSlug,\n localeCode,\n });\n\n const loadingSanityBaseLanguage = isLoadingSanityBaseLanguage();\n const errorSanityBaseLanguage = isErrorSanityBaseLanguage();\n const successSanityBaseLanguage = isSuccessSanityBaseLanguage();\n // - Sanity Organization\n const {\n isLoadingSanityOrganization,\n isErrorSanityOrganization,\n isSuccessSanityOrganization,\n getErrorsSanityOrganization,\n getOrganization,\n } = useSanityOrganization({\n organizationSlug,\n getSilently: organizationGetSilently,\n localeCode,\n });\n const loadingSanityOrganization = isLoadingSanityOrganization();\n const errorSanityOrganization = isErrorSanityOrganization();\n const successSanityOrganization = isSuccessSanityOrganization();\n const sanityOrganization = getOrganization();\n const sanityOrganizationAccess = sanityOrganization.access;\n const sanityOrganizationWhiteLabel = sanityOrganization.white_label;\n\n const isLocalAccountRegistration =\n sanityOrganizationAccess.local_account_registration;\n const sanityOrganizationConfigurations =\n sanityOrganizationAccess.configuration_array ?? [];\n const isSSOMultitenants = sanityOrganizationConfigurations.length > 0;\n\n // - Sanity Programs\n const {\n getErrorsSanityPrograms,\n isErrorSanityPrograms,\n isLoadingSanityPrograms,\n isSuccessSanityPrograms,\n } = useSanityOrganizationPrograms({\n organizationSlug,\n getSilently: organizationProgramsGetSilently,\n localeCode,\n });\n const loadingSanityOrganizationPrograms = isLoadingSanityPrograms();\n const errorSanityOrganizationPrograms = isErrorSanityPrograms();\n const successSanityOrganizationPrograms = isSuccessSanityPrograms();\n\n // - Sanity Settings\n const {\n loading: loadingSanitySettings,\n error: errorsSanitySettings,\n settings,\n } = useSanitySettings({ getSilently: settingsGetSilently, localeCode });\n\n // Event\n const setCustomTheme = useCallback(() => {\n if (!sanityOrganizationWhiteLabel) return;\n const organizationColorPalette =\n sanityOrganizationWhiteLabel.color_palette_config.color_palette ?? {};\n const organizationColors = Object.entries(organizationColorPalette).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: {\n main: value.hex,\n transparent: `rgba(${value.rgb.r}, ${value.rgb.g}, ${value.rgb.b}, 0.1)`,\n },\n }),\n {},\n );\n const customTheme = createTheme({\n ...theme,\n palette: {\n ...theme.palette,\n ...organizationColors,\n },\n });\n setTheme(customTheme);\n return customTheme;\n }, [setTheme, theme, sanityOrganizationWhiteLabel]);\n\n useEffect(() => {\n bootIntercom({\n customAttributes: {\n organizationSlug,\n appVersion: REACT_APP_VERSION,\n },\n });\n });\n\n useEffect(() => {\n if (\n (loadingSanityOrganization && !errorSanityOrganization) ||\n (loadingSanityBaseLanguage && !errorSanityBaseLanguage) ||\n (loadingSanitySettings && !errorsSanitySettings) ||\n (loadingSanityOrganizationPrograms && !errorSanityOrganizationPrograms)\n ) {\n dispatch(startAppLoading(true));\n setLoading(true);\n }\n if (loading && successSanityOrganization) {\n setCustomTheme();\n }\n if (\n successSanityOrganization &&\n successSanityBaseLanguage &&\n settings &&\n successSanityOrganizationPrograms\n ) {\n dispatch(stopAppLoading(true));\n setLoading(false);\n }\n }, [\n dispatch,\n errorSanityBaseLanguage,\n errorSanityOrganization,\n errorSanityOrganizationPrograms,\n errorsSanitySettings,\n loading,\n loadingSanityBaseLanguage,\n loadingSanityOrganization,\n loadingSanityOrganizationPrograms,\n loadingSanitySettings,\n setCustomTheme,\n settings,\n successSanityBaseLanguage,\n successSanityOrganization,\n successSanityOrganizationPrograms,\n ]);\n\n useEffect(() => {\n const handleDispatchedError = (\n errorCode?: string,\n errorMessage?: string,\n ) => {\n const message = errorMessage ?? 'Undefined Error Message';\n console.error('error', { errorCode, errorMessage });\n datadogLogs.logger.error('setupWrapper: ', {\n errorCode,\n errorMessage,\n });\n dispatch(\n showAppAlert({\n severity: 'error',\n message: message,\n timeout: 10000,\n }),\n );\n dispatch(stopAppLoading(true));\n\n setLoading(false);\n };\n\n if (errorSanityBaseLanguage) {\n const baseLanguageErrors = getErrorsSanityBaseLanguage();\n const errorCode = 'SanityBaseLanguage';\n const errorMessage = baseLanguageErrors[0].message;\n handleDispatchedError(errorCode, errorMessage);\n }\n if (errorSanityOrganization) {\n const organizationErrors = getErrorsSanityOrganization();\n const errorCode = 'SanityOrganization';\n const errorMessage = organizationErrors[0].message;\n handleDispatchedError(errorCode, errorMessage);\n }\n if (errorsSanitySettings) {\n const errorCodes = 'SanitySettings';\n const errorMessages = `${errorsSanitySettings.message}`;\n handleDispatchedError(errorCodes, errorMessages);\n }\n if (errorSanityOrganizationPrograms) {\n const organizationProgramsErrors = getErrorsSanityPrograms();\n const errorCode = 'SanityOrganizationPrograms';\n const errorMessage = organizationProgramsErrors[0].message;\n handleDispatchedError(errorCode, errorMessage);\n }\n }, [\n dispatch,\n errorSanityBaseLanguage,\n errorSanityOrganization,\n errorSanityOrganizationPrograms,\n errorsSanitySettings,\n getErrorsSanityBaseLanguage,\n getErrorsSanityOrganization,\n getErrorsSanityPrograms,\n ]);\n\n useEffect(() => {\n const handleUpdateRegistrationType = (key: RegistrationTypes) => {\n dispatch(updateRegistrationType(key));\n };\n\n if (loading) return;\n if (isLocalAccountRegistration && isSSOMultitenants) {\n handleUpdateRegistrationType('localAccountsAndSSO');\n return;\n }\n if (isLocalAccountRegistration) {\n handleUpdateRegistrationType('localAccounts');\n return;\n }\n if (isSSOMultitenants) {\n handleUpdateRegistrationType('multitenantsSSO');\n return;\n }\n handleUpdateRegistrationType('none');\n }, [dispatch, isLocalAccountRegistration, isSSOMultitenants, loading]);\n\n useEffect(() => {\n if (loading) return;\n\n const [error] = getErrorsSanityBaseLanguage();\n\n if (\n error?.message === SanityBaseLanguagesError.Empty ||\n window.location.hostname === 'guider.app'\n ) {\n window.location.replace('https://guider-ai.com/');\n }\n }, [loading, getErrorsSanityBaseLanguage]);\n\n if (loading && !localeCode) return ;\n\n return children;\n};\n"],"names":["RelationshipDetails","relationship","dispatch","useDispatch","traineeModal","useSelector","state","app","modals","organizationSlug","getSubDomain","programSlug","getBaseLanguage","useSanityBaseLanguage","baseLanguage","trackMixpanelEvent","getProfiles","getSilently","profile","profileId","id","userId","isMobile","isSidebarOpen","setIsSidebarOpen","useState","useEffect","guideProfiles","traineeProfiles","guideProfilesIds","map","guideProfile","traineeProfilesIds","traineeProfile","isGuide","includes","isTrainee","chosenGuide","at","isGroupProgram","programVariationTypeSlug","EProgramVariation","guideMembership","guideMemberships","isNotLiveGroup","isPublished","isTraineeModalOpen","getProgram","useSanityOrganizationPrograms","organization","useOrganization","program","programType","program_details","program_type","open_matching","relationshipCreatedAt","createdAt","recipients","role","handleMessageSend","useCallback","getISOStringWithoutMilliseconds","Role","Program","programVariation","program_type_text","variations","individual","programName","metadata","program_name","recipient","Box","sx","width","display","gridTemplateColumns","gridTemplateRows","otherPartyProfile","displayName","profilePicture","picture","userPicture","roleLabel","relationships","your_trainee","your_guide","position","justifyContent","alignItems","alignContent","height","overflowY","Collapse","in","py","px","maxWidth","isConcluded","threadId","archived","onSendMessage","RelationshipGroup","isModalOpen","title","group","registration","registration_trainee","registration_trainee_relationship_created_successfully","registration_trainee_relationship_created_successfully_title","groupName","description","registration_trainee_relationship_created_successfully_description","firstName","buttonLabel","globals","view_relationship","RelationshipDetailsGroupSidebar","navigate","theme","useTheme","getProfileImage","useProfileImage","selectedUserId","setSelectedUserId","groupMembersModalOpen","setGroupMembersModalOpen","handleGroupMembersModalClose","isActiveGroup","programTypeGuideNoun","common","noun","skillsConfig","skills","isSkillsEnabled","enable_skills_question","guideMembershipData","modalTitle","view_profile_modal","modalCloseButtonLabel","close_button_label","handleProfileModalClose","handleProfileModalOpen","avatars","users","user","_a","_b","find","chipProps","size","backgroundColor","palette","info","main","mr","mb","Drawer","open","anchor","variant","borderLeft","divider","pb","direction","Typography","avatarSrcArray","avatarHeight","avatarWidth","textSize","heading","subtitles","length","toString","border","borderRadius","pl","onClick","Divider","mt","fontWeight","registration_group","group_description","question_heading","input_label","color","text","secondary","wordBreak","flexDirection","guide","flexWrap","skill","index","Chip","label","options","option","current","fieldSlug","isOpen","handleClose","closeButtonLabel","closeButtonAction","userRole","profileData","_c","profiles","selectedProfile","selectedProfileUserId","selectedUser","pictures","getSelectedProfileData","membershipData","selectedMembership","traineeMemberships","membership","skillFieldSlugs","getSelectedProfileMembershipData","actions","action","guideUser","gap","textTransform","cursor","background","default","Avatar","src","fontSize","traineeUser","RelationshipDetailsSidebar","p","RelationshipGoalsCreate","handleSubmit","control","formState","errors","isValid","mode","typedControl","isLoadingGoals","reqGoals","reqRelationships","onSubmit","data","Object","assign","status","relationshipId","goalsResponseData","method","url","currentGoalIds","goals","goal","newGoalIds","Promise","all","contentModalActions","create_and_update_goal","create_goal","discard_button_label","dataCyLabel","create_goal_button_label","isLoadingButton","disabled","isLoading","GoalsCreateForm","discardAction","hideButtons","RelationshipGoalsEdit","isDiscardModalOpen","setIsDiscardModalOpen","discardChangesButtonLabel","discard_changes_button_label","goalId","isDirty","navigateBack","handleDiscardModalClose","go_back_button_label","save_changes_button_label","discardModalActions","cancel_button_label","update_goal","GoalsEditForm","discard_goal_modal","RelationshipGoalsManage","isLoadingRelationships","customGoalCategories","custom_goal_categories","customCategory","goal_category_name","slug","goal_category_slug","icon","goal_category_icon","name","organizationGoalCategories","goal_categories","categories","goalCategory","goalCategories","concat","relationshipGoals","filter","modalActions","manage_goals_modal","subtitle","childrenSx","borderBottom","closeIconButtonDataCy","createPath","Button","startIcon","MdAdd","_d","relationship_goals_divider_text","categorySlug","viewPath","goalName","goalSlug","goalIcon","RelationshipGoalsView","isDeleteModalOpen","setIsDeleteModalOpen","backButtonLabel","waitForAuthentication","handleDeleteModalClose","guideModalActions","traineeModalActions","delete_button_label","edit_goal_button_label","deleteModalActions","view_goal_modal","GoalsDetails","delete_goal_modal","RelationshipGoals","isGoalsModalOpen","setIsGoalsModalOpen","organizationTheme","combinedPalette","value","ThemeProvider","align","component","sidebar","no_goals_shared_label","objective","SanityIcon","span","textAlign","lineHeight","fullWidth","handleGoalClick","replace","manage_goals_button_label","RelationshipGroupAlert","hasScheduledAtLeastOneSession","sessions","isArchivedRelationship","reqMemberships","isLoadingMemberships","boxColor","buttons","noTraineesHaveJoined","allTraineesHaveLeft","guideGroupCopy","traineeGroupCopy","trainee","guideAlertCopy","group_activated","group_activation_pending","traineeAlertCopy","trainees_left_group","alert_title","alert_description","error","transparent","ErrorOutline","republish_group_button_label","key","loading","success","warning","AlertIcon","schedule_session","start_group_button_label","activatedAt","Date","pt","ml","spacing","insufficient_members_message","CheckCircleOutline","ReportProblemOutlined","InfoOutlined","dialogTitle","dialogDescription","cancelButtonLabel","concludeRelationshipButtonLabel","onClose","onConcludeRelationship","textColor","pathname","setIsModalOpen","setIsLoading","groupGuide","conclude_relationship","groupTrainee","button_title","button_description","conclude_relationship_modal","getError","error_alert_text","handleModalClose","endsWith","flexFlow","ul","MoreHoriz","orientation","PersonOff","isSuccess","now","severity","message","success_alert_text","timeout","RelationshipHeader","isGroup","locale","getLanguageFromCMS","language_code","renderContent","flex","relationships_list","letterSpacing","dashboard","program_memberships","with_program_memberships","membership_details","creation_date","date","format","relationships_header","since","parseISO","Paper","elevation","square","zIndex","ArrowBackIosNew","Stack","rounded","Close","contrastText","MenuOpen","pr","RelationshipItem","isUnreadMessages","isActive","Boolean","guidesCount","traineesCount","primary","my","dark","Badge","badgeContent","anchorOrigin","vertical","horizontal","textOverflow","overflow","noWrap","RelationshipNotesCreate","reset","defaultValues","isLoadingNotes","reqNotes","getSilentlyUrl","isPublic","rest","notesCreateResponseData","isPrivate","console","saveAction","notes","notes_modal","notes_modal_create_edit_note","save_note_button_label","NotesCreateForm","ActionButton","buttonAction","RelationshipNotesEmpty","notes_modal_empty_title","notes_modal_empty_description","notes_modal_empty_create_button_label","notes_modal_empty_state","Page","MdNoteAdd","iconColor","containerStylings","minHeight","margin","breakpoints","down","RelationshipNotesList","noteId","setOnConfirmDiscardNoteChanges","useContext","notesCount","notesCountDescription","notes_sidebar","notes_sidebar_single_note_label","notes_sidebar_multiple_notes_label","navigateToNoteCreate","handleClick","callback","minWidth","borderRight","paddingLeft","xs","md","paddingRight","IconButton","Add","flexGrow","note","navigateToNote","whiteSpace","People","opacity","Edit","mx","notes_sidebar_new_note_button_label","RelationshipNotesView","params","currentNote","useMemo","ownersProfile","ownerId","lastUpdatedByProfile","lastUpdatedBy","currentNoteUpdateAt","updatedAt","toDate","currentNoteCreatedAt","lastUpdatedByString","note_status","note_status_last_updated_by_label","lastName","note_status_last_updated_on_label","createdByString","note_status_created_by_label","note_status_created_on_label","isNoteOwner","createdBy","delete_note_modal","discard_changes_title","discard_changes_description","RelationshipNotes","isNotesModalOpen","setIsNotesModalOpen","note_sidebar","note_sidebar_title","note_sidebar_description","transition","note_sidebar_input_label","LoadingButton","note_sidebar_view_button_label","RelationshipSessionsCreate","trackScreenTime","setValue","reqSessions","isLoadingSessions","currentSessions","Started","timeZone","Intl","DateTimeFormat","resolvedOptions","startTime","endTime","videoConferencing","location","startHours","startMinutes","split","newStart","setHours","parseInt","endHours","endMinutes","newEnd","startUTC","zonedTimeToUtc","endUTC","participantProfiles","start","end","timezone","hasVideoConferencing","ownerProfile","new_session_modal","getVideoConferencingProvider","Location","trackSessionCreateFormSubmit","send_calendar_invite_button_label","SessionsCreateForm","defaultTitle","getSessionTitle","RelationshipSessionsEdit","sessionId","session","isSessionOwner","pastSession","edit_session_modal","update_calendar_invite_button_label","isArchived","confirm_session_deletion_modal","PastSessionEditForm","SessionsEditForm","RelationshipSessionHistory","reqAvailabilities","declinedStyles","borderColor","light","textDecoration","tentativeStyles","borderStyle","isSessionsModalOpen","setIsSessionsModalOpen","parsedSessions","sort","sessionA","sessionB","forEach","push","sessionCount","formattedTime","getTimeFormat","time_format","formattedDate","getFriendlyDateFormat","date_format","canLogSession","handleScheduleSession","handleLogSession","renderSessions","sessionsToRender","sessionDate","sessionsLocation","session_history","modal","logged_past_session_label","isDeclined","declinedEmails","isTentative","tentativeEmails","handleSessionClick","Icon","History","boxProps","padding","ModalCard","iconVariant","empty_state","log_session_button_label","maxHeight","entries","RelationshipSessionsIntegrate","integrationsModal","manage_integrations_modal","modalGoBackAction","IntegrationsList","RelationshipSessionsLog","searchParams","useSearchParams","day","get","checkedDate","setCheckedDate","pastSessionsLabels","log_past_session_modal","checkboxes","today_checkbox_label","this_week_checkbox_label","this_month_checkbox_label","last_month_checkbox_label","useMediaQuery","selectedDate","checkbox","pastSessionDates","getPastSessionStartAndEndDates","log_session_error_alert_text","log_session_success_alert_text","onChange","isChecked","RelationshipSessionsView","canSeeEditSessionButton","Viewed","handleEditSession","unshift","edit_session_button_label","attendees","view_session_modal","Card","widht","RelationshipSessions","canSeeNewSessionButton","canSeeSessions","filteredSessions","sessionEndDate","FormattedTime","FormattedDate","isOnCreateSessionPage","sessionsCount","multiple_sessions_scheduled_label","single_session_scheduled_label","no_sessions_scheduled_label","renderSessionsCount","sessionStart","sessionEnd","marginTop","marginBottom","RelationshipViewProfileModal","Modal","RelationshipViewProfile","programTypeText","otherUsers","otherUser","_e","_f","handleModalOpen","view_profile_button_label","getSelectedUsersProfileData","getSelectedUsersMembershipData","RelationshipsArchivedList","expanded","setExpanded","archived_section_label","relationshipIds","accordionSummaryProps","expandIcon","ArrowDropDown","m","Accordion","event","AccordionSummary","AccordionDetails","userSelect","RelationshipsEmpty","Person","active","no_relationships","RelationshipsList","Skeleton","transform","REACT_APP_AZURE_COMMUNICATION_ENDPOINT_URL","RelationshipsWrapper","getRelationshipSilently","getProfilesSilently","setError","credential","setCredential","statefulChatClient","setStatefulChatClient","getRelationships","getErrorsRelationships","memoRelationships","errorsRelationships","communicationUserId","token","chatTokenError","getChatParticipants","chatParticipants","getCredential","datadogLogs","Error","code","endpoint","getStatefulChatClient","relationshipThreads","threads","participant","startRealtimeNotifications","err","onChatMessageReceived","sender","kind","on","off","handleDispatchedError","errorCode","errorMessage","ScrollToTop","window","scrollTo","SessionsDetails","trackSessionJoinButtonClick","acceptedEmails","sortedAttendeeResponses","userEmail","email","hasAccepted","hasDeclined","responseA","responseB","when_label","where_label","VideoCameraFront","protocol","host","join_with_guider_video_button_label","href","videoConferencingUrl","target","join_with_ms_teams_button_label","renderJoinSessionButton","attendees_label","response","image","CheckCircle","Help","Cancel","SettingsContainer","children","header","SettingsContainerHeader","SettingsDescription","SettingsSubheader","subheader","SetupWrapper","organizationGetSilently","baseLanguageGetSilently","settingsGetSilently","organizationProgramsGetSilently","setTheme","setLoading","localeCode","REACT_APP_VERSION","boot","bootIntercom","isLoadingSanityBaseLanguage","isErrorSanityBaseLanguage","isSuccessSanityBaseLanguage","getErrorsSanityBaseLanguage","loadingSanityBaseLanguage","errorSanityBaseLanguage","successSanityBaseLanguage","isLoadingSanityOrganization","isErrorSanityOrganization","isSuccessSanityOrganization","getErrorsSanityOrganization","getOrganization","useSanityOrganization","loadingSanityOrganization","errorSanityOrganization","successSanityOrganization","sanityOrganization","sanityOrganizationAccess","access","sanityOrganizationWhiteLabel","white_label","isLocalAccountRegistration","local_account_registration","isSSOMultitenants","configuration_array","getErrorsSanityPrograms","isErrorSanityPrograms","isLoadingSanityPrograms","isSuccessSanityPrograms","loadingSanityOrganizationPrograms","errorSanityOrganizationPrograms","successSanityOrganizationPrograms","loadingSanitySettings","errorsSanitySettings","settings","useSanitySettings","setCustomTheme","organizationColorPalette","color_palette_config","color_palette","organizationColors","reduce","acc","hex","rgb","r","g","b","customTheme","customAttributes","appVersion","handleUpdateRegistrationType","SanityBaseLanguagesError","hostname"],"sourceRoot":""}