{"version":3,"file":"main.js","mappings":"4OAQM,QAEFA,YAAmBC,kBADVC,UAAOC,MAMd,QAEFH,YAAmBC,kBADVC,UAAOC,MAOd,QAEFH,YAAmBC,kBADVC,UAAOC,MAOd,QAEFH,YAAmBC,kBADVC,UAAOC,MAUd,QAEFH,YAAmBC,kBADVC,UAAOC,MAOd,QAEFH,YAAmBC,kBADVC,UAAOC,MAWd,QAEFH,YAAmBC,kBADVC,UAAOC,MAOd,QAEFH,YAAmBC,kBADVC,UAAOC,MAOd,QAEFH,YAAmBC,kBADVC,UAAOC,MAOd,QAEFH,cADSE,UAAOC,qJCtFb,MAAMC,EAAqB,qBACrBC,EAAc,cACdC,EAAmB,mBAEnBC,EAAc,cAGdC,EAAkB,kBAClBC,EAAuB,uBAGvBC,EAAiB,iBACjBC,EAAsB,sBACtBC,EAAqB,qBAGrBC,EAAgB,gBAGhBC,EAAY,qCACZC,EAAW,uDACXC,EAAa,8HCfnB,MAAMC,GAAqBC,QAAuC,QAC5DC,GAAoBD,QAAqC,QACzDE,GAAkBF,QAAoC,WACtDG,GAAmBH,QAAqC,YAIxDI,GAAqBC,QAC9BN,EAAoBO,oBAChB,MAAO,CACHC,UAAiC,QAAtBC,IAAgBC,cAAMC,eAAEH,UACnCI,SAAgC,QAAtBC,IAAgBH,cAAMI,eAAEF,SAClCG,SAAgC,QAAtBC,IAAgBN,cAAMO,eAAEF,SAClCG,QAA+B,QAAtBC,IAAgBT,cAAMU,eAAEF,QACjCG,MAA6B,QAAtBC,IAAgBZ,cAAMa,eAAEF,MAC/BG,KAA4B,QAAtBC,IAAgBf,cAAMgB,eAAEF,QAQ7BG,GAAoBrB,QAC7BJ,EAAmB0B,GACRA,EAAcC,MAkChBC,GAAmBxB,QAC5BF,EAAkB2B,GACPA,EAAcF,MAKhBG,GAAkB1B,QAC3BH,EAAiB8B,GACNA,EAAaJ,iIC9DrB,MAAMK,EAA0B,CACnC,CACIC,MAAO,wCACPC,QAAS,qUACTC,KAAM,iBACNC,KAAM,YAEV,CACIH,MAAO,wCACPC,QAAS,iTACTC,KAAM,mBACNC,KAAM,aAIDC,EAAkB,CAC3B,CACIJ,MAAO,kCACPE,KAAM,eACNG,MAAO,iBAEX,CACIL,MAAO,kCACPE,KAAM,eACNG,MAAO,6BAEX,CACIL,MAAO,kCACPE,KAAM,YACNG,MAAO,oBAIFC,EAAS,CAClB,CACIJ,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,0EClER,IAAMC,EAAb,MAAM,QAqCL5D,YACQ6D,EACCC,EACAL,EACAM,GAHD7D,cACCA,qBACAA,aACAA,YAvCTA,eAAYiD,EACZjD,YAASwD,EACTxD,UAAOsD,EACPtD,kBAAY8D,+BACRC,MAAS,CACZC,KAAK,EACLC,MAAM,EACNC,OAAQ,GACRC,MAAM,EACNC,WAAY,CACX,KAAM,CACLJ,KAAK,MAIRhE,gBAAU8D,+BACNC,MAAS,CACZC,KAAK,EACLC,MAAM,EACNI,MAAO,EACPH,OAAQ,GACRC,MAAM,EACNC,WAAY,CACX,EAAG,CACFC,MAAO,GAER,IAAK,CACJA,MAAO,GAER,IAAK,CACJA,MAAO,MAYVC,WACCtE,KAAKuD,MAAMgB,SAAS,YACpBvE,KAAK6D,KAAKW,UAAU,CAAEpB,KAAM,cAAeqB,QAAS,aACpDzE,KAAK4D,cAAcc,aAAaC,kBAA4B,GAAI,GAAI3E,KAAKuD,MAAMqB,WAAY5E,KAAKuD,MAAMqB,2DA/C3FlB,GAAiBmB,sMAAjBnB,EAAiBoB,y+CCf9BD,sCAAkB,UAAlBA,CAAkB,UAAlBA,CAAkB,SAAlBA,CAAkB,SAAlBA,CAAkB,SAKoCA,6BAAIA,2BACtCA,kCACJA,2BACAA,qCAC2C,SACpBA,mCAASA,2BAC5BA,mCACJA,iCAKZA,uCAAuB,YAAvBA,CAAuB,YAGmBA,qDAA2BA,+BAIrEA,wCAA+B,WAA/BA,CAA+B,YAA/BA,CAA+B,YAA/BA,CAA+B,YAKXA,oDAAsBA,+BAGlCA,wCAAiB,aAETA,mCACAA,uCACIA,gDAAqBA,+BACrBA,yCAA8BA,uCAAaA,+BAInDA,wCAAsB,QAEdA,uCAAYA,mCAAGA,sFAAuDA,2BAAIA,2HAE9DA,mCAAGA,gKACuCA,2BAAIA,8IAG9DA,2BACAA,mCACIA,0UAIAA,mCAAGA,kPAEwCA,2BAAKA,iGAEpDA,+BAIRA,mCACJA,2BAEAA,mCAEAA,wCAAkC,YAAlCA,CAAkC,YAGtBA,qEACJA,2BACAA,sCAEIA,iCAAgCA,yCACpCA,+BAIRA,mCAEAA,uCAAuB,YAAvBA,CAAuB,YAAvBA,CAAuB,YAIPA,2CAAgBA,6BAGxBA,wCAAsB,QAEdA,wCAAaA,mCAAGA,kDAAwBA,2BAAIA,uIAC+DA,mCAAGA,8CAAoBA,2BAAIA,6LACnBA,mCAAGA,0FAAgEA,2BAAIA,2MAE1LA,mCAAGA,6DAAmCA,2BAAIA,mLAG9CA,+BAIRA,mCACJA,2BAEAA,mCAEAA,wCAAkC,WAAlCA,CAAkC,YAAlCA,CAAkC,YAAlCA,CAAkC,YAKdA,8CACJA,2BACAA,uCACIA,6EACAA,+BAAIA,oEACRA,6BAGJA,wCAA+C,QAA/CA,CAA+C,SAGnCA,iCACAA,8CACJA,2BACAA,oCACIA,iCACAA,8CACJA,qCAQpBA,wCAAqD,YAArDA,CAAqD,YAGzCA,+CACJA,2BACAA,sCAAsBA,wIAA8GA,2BACpIA,uCACIA,oDACJA,uFDlIHnB,GAAb,GEFO,MAAMqB,EAAuB,CAChC,CACIC,QAAS,mCACTC,KAAM,oBACN1B,MAAO,iBACPkB,QAAS,0GAEb,CACIO,QAAS,mCACTC,KAAM,iBACN1B,MAAO,uBACPkB,QAAS,qHAEb,CACIO,QAAS,mCACTC,KAAM,eACN1B,MAAO,iBACPkB,QAAS,qHAIJS,EAAsB,CAC/B,CACIC,MAAO,GACPC,KAAM,kBACNC,KAAM,MAEV,CACIF,MAAO,GACPC,KAAM,oBACNC,KAAM,KAEV,CACIF,MAAO,GACPC,KAAM,iBACNC,KAAM,KAEV,CACIF,MAAO,GACPC,KAAM,cAID5B,EAAS,CAClB,CACIJ,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,8BAEX,CACIL,KAAM,QACNK,MAAO,+BAIF6B,EAAU,CACnB,CACIC,IAAK,0CACLnC,KAAM,eACNG,MAAO,iBAEX,CACIgC,IAAK,0CACLnC,KAAM,eACNG,MAAO,6BAEX,CACIgC,IAAK,0CACLnC,KAAM,YACNG,MAAO,mBAEX,CACIgC,IAAK,0CACLnC,KAAM,cACNG,MAAO,mBAEX,CACIgC,IAAK,0CACLnC,KAAM,cACNG,MAAO,6BAEX,CACIgC,IAAK,0CACLnC,KAAM,eACNG,MAAO,mBAEX,CACIgC,IAAK,0CACLnC,KAAM,eACNG,MAAO,mBAEX,CACIgC,IAAK,0CACLnC,KAAM,YACNG,MAAO,4CC9HR,IAAMiC,EAAb,MAAM,QASL1F,YAAmB2F,EAA2BC,GAA3B1F,aAA2BA,gBAF9CA,gBAAY,EAOZ2F,gBACC,IAAIC,EAAK,EACRC,EAAS7F,KAAK8F,GAAK9F,KAAK+F,KACxBC,EAAS,EAOV,GAJ+G,MAA1GhG,KAAK0F,SAASO,WAAWjG,KAAK0F,SAASO,WAAWjG,KAAK0F,SAASO,WAAWjG,KAAKyF,MAAMS,mBACzFF,EAAShG,KAAK0F,SAASO,WAAWjG,KAAK0F,SAASO,WAAWjG,KAAK0F,SAASO,WAAWjG,KAAKyF,MAAMS,iBAAiBC,YAG7GnG,KAAKoG,WAAaR,GAAM5F,KAAKqG,OAASL,GAAUM,OAAOC,YAAa,CACxE,IAAKvG,KAAKoG,UAAW,CACpB,IAAII,EAAQC,YAAY,KACnBb,GAAM5F,KAAKqG,OACdK,cAAcF,GAGfxG,KAAKyF,MAAMS,cAAcS,UAAYC,KAAKC,KAAKjB,EAAKC,EAAS7F,KAAKqG,OAAOS,WACzElB,GAAU5F,KAAK+G,UACb/G,KAAK+G,UAGT/G,KAAKoG,WAAY,GAInB9B,WAAQ,+CAxCIkB,GAAgBX,yIAAhBW,EAAgBV,kHAAhBkC,qBAAqB,gKCRlCnC,uCAAoBA,0BAACA,2CDQRW,GAAb,0CE2BgBX,uCAAgG,aAExFA,gCACJA,2BACAA,uCAA8B,WACCA,sBAAgBA,2BAC3CA,oEACJA,uDAPoCA,4CAE7BA,kEAGwBA,gEACxBA,yJAYPA,uCAA8D,WAA9DA,CAA8D,WAA9DA,CAA8D,uBAG6BA,2BAC/EA,2BACAA,sBACJA,2BACAA,sCAAmCA,sBAAkBA,yDAJjCA,0DAAU,aAAVA,CAAU,YAAVA,CAAU,eAE1BA,wEAE+BA,0FAY3CA,uCAA8D,WAA9DA,CAA8D,eAGlDA,0CAEAA,8CAAmC,WAAnCA,CAAmC,UAEiCA,gCACxBA,2BACpCA,qCAA2DA,gCAC1BA,2BACjCA,sCAA6DA,iCAC1BA,iCAK/CA,wCAA4B,YACCA,uBAAeA,sCAAMA,uBAAgBA,6DAfjDA,6DAeYA,gEAAqBA,0FA0BlDA,uCAAiF,UAEzEA,kCACJA,uDADSA,0FC1GlC,IAAMoC,GAAb,MAAM,QAOLnH,YAAmBoH,oBALnBlH,eAAY+E,EACZ/E,YAASwD,EACTxD,aAAUsF,EACVtF,cAAWkF,EAKXZ,WAAQ,+CAVI2C,GAAqBpC,gGAArBoC,EAAqBnC,6qEDZlCD,sCACIA,+CACAA,sCAA0C,UAA1CA,CAA0C,SAA1CA,CAA0C,SAA1CA,CAA0C,SAIRA,6BAAIA,6BAE1BA,qCAA4B,SACDA,+BAAKA,6BAEhCA,sCAAmCA,oCAAUA,iCAKzDA,uCAA+B,WAA/BA,CAA+B,YAA/BA,CAA+B,YAA/BA,CAA+B,YAA/BA,CAA+B,YAKwBA,oCAAUA,2BAC7CA,mCAAGA,wXAGkFA,2BACrFA,mCAA0F,qBAI9FA,+BAIRA,wCACIA,0CASJA,6BAGJA,mCAEAA,wCACsE,WADtEA,CACsE,aAG1DA,0CAUJA,+BAIRA,wCAAuC,WAAvCA,CAAuC,YAEIA,uCAAaA,2BAEhDA,wCACIA,4CAsBJA,2BAEAA,wCAA8B,UAA9BA,CAA8B,WAEhBA,yCAAeA,2BACrBA,iCACJA,iCAKZA,uCAAuB,YAAvBA,CAAuB,YAAvBA,CAAuB,YAAvBA,CAAuB,YAIWA,+EAAqDA,2BACvEA,mCAAGA,0IACoBA,6BAG3BA,wCAA4B,aAEpBA,yEAKJA,8CAtF0EA,wEAkB9BA,sEAmBEA,qEA4CaA,iNCxGtEoC,GAAb,iECW4BpC,0DAAwBA,qCAAgB,kDAOxCA,oDAAkBA,oDCjBvC,IAAMsC,EAAb,MAAM,QAILrH,YACS6D,iBAITW,WACCtE,KAAKoH,WAAaC,KAAKC,MAAMC,eAAeC,QAAQ,gBAEhDxH,KAAKoH,YAAcpH,KAAKoH,WAAWK,OACtCzH,KAAK2D,OAAO+D,cAAc,mBAI5BC,kBACC,MAAMC,EAAa5H,KAAK2D,OAAOkE,IAE3BD,EAAWE,SAAS,gBACvB9H,KAAKgE,IAAI+D,OAAO,UACVC,EAAeF,SAAS,oBAEpBF,EAAWE,SAAS,iCAD9B9H,KAAKgE,IAAI+D,OAAO,eAEA,+CAzBNZ,GAAkBtC,sFAAlBsC,EAAkBrC,o0BDb/BD,uCAAmB,UAAnBA,CAAmB,UAAnBA,CAAmB,SAAnBA,CAAmB,SAAnBA,CAAmB,SAKmBA,6BAAIA,6BAE1BA,qCAA4B,SACDA,8BAAKA,6BAEhCA,sCAAmCA,iCAAOA,iCAKtDA,uCAC4E,WAD5EA,CAC4E,YAD5EA,CAC4E,cAD5EA,CAC4E,WAD5EA,CAC4E,WAK1CA,0DAAsCA,2BACpDA,kDAGJA,2BAEAA,uCAAuB,WACLA,0DAAoCA,2BAClDA,kDAGJA,6BAGJA,mCACJA,2EAf0BA,6GAOAA,0GAOjBA,kJCtBRsC,GAAb,0BCDO,IAAMc,GAAb,MAAM,QAGJnI,YACUoI,EACAvE,GADA3D,oBACAA,cAGVsE,WAEEtE,KAAK2D,OAAOwE,OAAOC,MACjBC,OAAOC,GAASA,aAAiBC,OACjCC,UAAWF,IAEXtI,KAAKyI,YAAcH,EAAMT,IAEzB7H,KAAKkI,aAAaQ,UAAU,wBAAwB1I,KAAKyI,eAAeE,KAAKC,IAC3EC,QAAQC,IAAIF,KAEbG,MAAMC,IACLH,QAAQC,IAAIE,qDApBPf,GAAqBpD,yHAArBoD,EAAqBnD,ihBCZlCD,uCAAmB,UAAnBA,CAAmB,UAAnBA,CAAmB,SAAnBA,CAAmB,SAAnBA,CAAmB,SAKmBA,6BAAIA,6BAE1BA,qCAA4B,SACDA,8BAAKA,6BAEhCA,sCAAmCA,6BAAGA,iCAKlDA,uCACgG,WADhGA,CACgG,WAEhEA,mCAASA,2BACjCA,mCAAGA,mFAAyDA,2BAC5DA,sCAAoE,WAC1DA,0CAAgBA,2BACtBA,iCACJA,qFDXCoD,GAAb,8FE6EgCpD,uCACIA,wDACJA,kCADIA,kIAOAA,uCACIA,wDACJA,kCADIA,mIASRA,uCACIA,wDACJA,kCADIA,mIAOJA,uCACIA,wDACJA,kCADIA,qIAOZA,uCACIA,wDACJA,kCADIA,iIAYJA,uCAEIA,wDACJA,kCADIA,2IAYJA,uCAEIA,wDACJA,kCADIA,+GCpIrB,IAAMoE,GAAb,MAAM,QAMLnJ,YACSoJ,EACAC,EACAC,EACAC,EACAC,EACA/F,EACAM,EACAD,GAPA5D,kBACAA,mBACAA,iBACAA,mBACAA,qBACAA,aACAA,YACAA,qBAXTA,cAAmB,EACnBA,gBAAqB,EAWpBA,KAAKuJ,UAAYL,EAAWM,MAAM,sFAAuF,YACxHpB,MACAqB,QAAI,KAAM,IACVC,QAAW,KAAMC,UAAG,KAItBrF,WACCtE,KAAK4J,YAAc5J,KAAKmJ,YAAYU,MAAM,CACzCzG,KAAM,CAAC,GAAI0G,eACXC,MAAO,CAAC,GAAI,CAACD,cAAqBA,aAClCE,MAAO,CAAC,IACRC,QAAS,CAAC,IACVC,IAAK,CAAC,GAAIJ,eACVK,SAAU,CAAC,KAAML,mBACjBM,SAAU,CAAC,KAAMN,qBAGlB9J,KAAKuD,MAAMgB,SAASvE,KAAKoJ,UAAUiB,QAAQ,wBAC3CrK,KAAK6D,KAAKW,UAAU,CAAEpB,KAAM,cAAeqB,QAAS,iDACpDzE,KAAK6D,KAAKW,UAAU,CAAEpB,KAAM,WAAYqB,QAAS,+DACjDzE,KAAK4D,cAAcc,aAAaC,kBAA4B,iBAGvD2F,cAAW,sCAEXtC,EAAKqB,YAAYkB,aAAavC,EAAK4B,aAKxC5B,EAAKqB,YAAYmB,iBAAiBxC,EAAK4B,aAAapB,UAAU,CAE7DiC,KAAM7H,IACa,IAAdA,EAAK8H,KAER1C,EAAKsB,cAAcqB,QAAQ3C,EAAKoB,UAAUiB,QAAQ,mBAGlDrC,EAAKsB,cAAcN,MAAMpG,EAAMgI,OAIjC5B,MAAQA,IAINhB,EAAKsB,cAAcN,MAHhBA,EAAM6B,OAGgB7B,EAAM8B,QAIN9B,EAAM4B,SAxBjC5C,EAAK+C,WAAU,CAwBkBH,EA3BlB,EA2BkBA,+CAlEvB3B,GAAuBpE,uVAAvBoE,EAAuBnE,y7EDpBpCD,uCAAmB,UAAnBA,CAAmB,UAAnBA,CAAmB,SAAnBA,CAAmB,SAAnBA,CAAmB,SAKmBA,6BAAIA,6BAE1BA,qCAA4B,SACDA,8BAAKA,6BAEhCA,sCAAmCA,0DAAqCA,iCAKpFA,uCAAuB,YAIfA,qCAIJA,6BAGJA,wCAA+B,WAA/BA,CAA+B,YAA/BA,CAA+B,YAA/BA,CAA+B,YAIQA,0DAAgCA,2BAGvDA,wCAAiB,YAAjBA,CAAiB,QAAjBA,CAAiB,SAIDA,iCACAA,+EACJA,2BACAA,oCACIA,iCACAA,8CACJA,2BACAA,oCACIA,iCACAA,8CACJA,iCAKZA,wCAAiB,YAAjBA,CAAiB,YAAjBA,CAAiB,SAGDA,gCAAMA,2BAEVA,uCAAyB,SAEjBA,iCACAA,yCAAwBA,8CAAcA,+BAAIA,iDAAuBA,mCAMjFA,wCAAuB,YAAvBA,CAAuB,SAEXA,mCAASA,2BAEbA,uCAAyB,SAEjBA,iCACAA,yCAAwBA,8CAAcA,+BAAIA,iDAAuBA,uCAOzFA,wCAAsB,YACKA,0DAAqCA,2BAG5DA,yCAAgCA,kDAAUmC,kBACtCnC,wCAAiB,aAETA,wEAEAA,2CAGJA,2BAEAA,wCACIA,wEAEIA,2CAGPA,6BAGLA,wCAAiB,aAETA,wEAEAA,2CAGJA,2BAEAA,wCACIA,wEAEAA,2CAGJA,6BAGJA,2EAEAA,2CAIAA,wCAA4C,eAKpCA,kDAAUmC,kBAAgB,YAAWgE,8DAJzCnG,2BAKAA,0CACIA,0DAAwCA,6BAEhDA,2CAKAA,wCAA4C,eAKpCA,kDAAUmC,kBAAgB,YAAWgE,8DAJzCnG,2BAKAA,0CACIA,0DAAmCA,6BAE3CA,2CAKAA,2CAAwE,WAC9DA,4DAA8BA,2BACpCA,kCACJA,iCAKZA,mCAEAA,yCAAiC,aACMA,qCAAUA,2BAE7CA,yCAA6B,aAA7BA,CAA6B,aAA7BA,CAA6B,aAA7BA,CAA6B,aAA7BA,CAA6B,iBAMLA,oCAEJA,6BAEJA,yCAA+B,aAA/BA,CAA+B,aAECA,sCAAWA,2BACnCA,wCAA2BA,8DAAgCA,2BAE3DA,mDAAwBA,gCACxBA,+CAEAA,0CAASA,iDAAsBA,2BAC/BA,0CAASA,sDAA2BA,2BAEpCA,sCAAK,YAAoDA,6DAAkCA,iCAKnGA,yCAA+B,aAA/BA,CAA+B,aAECA,iCAAMA,2BAE9BA,0CAASA,gDAAqBA,2BAC9BA,0CAASA,sDAA2BA,2BACpCA,sCAAK,YAAoCA,6CAAkBA,6BAE3DA,wCAA2BA,kCAAOA,2BAClCA,sCAAKA,4DAAiCA,+BAK9CA,yCAA+B,aAA/BA,CAA+B,aAECA,0CAAeA,2BAEvCA,0CAASA,gDAAqBA,2BAC9BA,0CAASA,sDAA2BA,2BACpCA,sCAAK,YAAuCA,gDAAqBA,6BAEjEA,wCAA2BA,kCAAOA,2BAClCA,sCAAKA,4DAAkCA,sDA/M5BA,8GAoBRA,yGAmDAA,8GAGjBA,2EAIUA,yGACEA,oHAOFA,0GACMA,yNASNA,0GACEA,qHAOFA,4GACEA,uHAOVA,wGACEA,mHAQEA,sHAGAA,uHAEFA,wHASEA,iHAGAA,kHAEFA,wHAMIA,yWCxIrBoE,GAAb,yBCDYpE,+BCNL,IAAMoG,GAAb,MAAM,QAGLnL,YAAYoJ,GACXlJ,KAAKuJ,UAAYL,EAAWM,MAAM,sFAAuF,YACxHpB,MACAqB,QAAI,KAAM,IACVC,QAAW,KAAMC,UAAG,KAItBrF,WAAQ,+CAXI2G,GAAuBpG,sFAAvBoG,EAAuBnG,igDDbpCD,uCACIA,+CAEAA,sCAA0C,UAA1CA,CAA0C,SAA1CA,CAA0C,SAA1CA,CAA0C,SAIRA,6BAAIA,6BAE1BA,qCAA4B,SACDA,+BAAKA,6BAEhCA,sCAAmCA,sCAAYA,iCAK3DA,uCAA0B,aAElBA,0EAGJA,2BAEAA,uCAAuB,YAAvBA,CAAuB,YAAvBA,CAAuB,YAAvBA,CAAuB,SAIHA,gCAAMA,2BAEVA,yCAASA,sDAA4BA,+BAAIA,uCAAaA,+BAI9DA,wCAAsB,YAAtBA,CAAsB,SAEVA,8CAAoBA,2BAExBA,qCAAK,WAAmBA,wCAAcA,6BACtCA,qCAAK,WAAgBA,yCAAeA,2BAAIA,4BAAEA,sCAAgBA,yCAAeA,iCAIjFA,wCAAsB,YAAtBA,CAAsB,SAEVA,gCAAMA,2BAEVA,wCAAsD,WAE9CA,iCACJA,2BACAA,sCAA2CA,iCAC3CA,2BACAA,sCAA2CA,iCAC3CA,2BACAA,sCAA2CA,iCAC3CA,2BACAA,sCAA2CA,iCAC3CA,mCAMhBA,kCACAA,wCAAwD,YAAxDA,CAAwD,YAAxDA,CAAwD,YAGrBA,sCAAYA,2BACnCA,sCACIA,8HAEJA,2BACAA,sCAAgBA,sMAEFA,6BAGlBA,yCAA2C,YAA3CA,CAA2C,YAA3CA,CAA2C,eAGIA,8BAAIA,2BACvCA,qCACJA,2BAEAA,wCAAsB,eACkBA,8BAAIA,2BACxCA,qCACJA,2BAEAA,wCAAsB,eACkBA,+BAAKA,2BACzCA,qCACJA,6BAGJA,0CAAsCA,iCAAOA,2BAC7CA,qCAEAA,0CAAsCA,iCAAOA,2BAC7CA,wCAGAA,wCAAyB,eAAzBA,CAAyB,WAEXA,gCAAMA,2BACZA,iCACJA,gDAxFVA,wOCNLoG,GAAb,+DCKEpG,oCACCA,kCACDA,sDAgCMA,qCACCA,0CAEDA,sEAFcA,+GAA0C,uGAIvDA,qCACCA,0CAGDA,2BACAA,qCAAwBA,oHAASqG,gDACHrG,gCAAyBA,wEALzCA,+GAA0C,sCAIrDA,4IAbLA,0CAGCA,wCAIAA,0FASDA,mGAd6CA,+CAA5CA,gFACwBA,kGAA6B,yCAoBnDA,kCACCA,0CAGDA,oFAHcA,0EAAgC,iEALhDA,0CACgB,qBAGdA,wCAKDA,wEANCA,2EACuBA,wHAlD9BA,sCAAuB,eAAvBA,CAAuB,WAAvBA,CAAuB,WAAvBA,CAAuB,WAKlBA,sBACDA,2BACAA,sCACCA,sBACDA,+BAGFA,uCAAiB,WAAjBA,CAAiB,YAEEA,0CAAgBA,2BACjCA,uBACAA,uCAAsBA,mCAASA,2BAC/BA,uBACAA,uCAAsBA,8BAAIA,2BAC1BA,uBACAA,uCAAsBA,+BAAKA,2BAC3BA,uBACAA,uCAAsBA,mCAASA,2BAC/BA,uBACDA,2BACAA,wCAECA,8CAkBAA,2FAcAA,uCAAwBA,uBAAqBA,2BAC7CA,iCAEAA,sCAECA,iCAAiCA,2CAClCA,2GA5DCA,gGAGAA,mGAODA,kGAEAA,oGAEAA,+FAEAA,gGAEAA,oGAKEA,sGAAiC,cA+BXA,2FACrBA,yHAEAA,8HClEH,IAAMsG,GAAb,MAAM,QAQJrL,YACSsL,EACFzH,EACEuE,EACCmD,EACAC,EACA1H,EACFL,EACAM,GAPC7D,mBACFA,cACEA,oBACCA,oBACAA,YACAA,qBACFA,aACAA,YAbRA,aAAS,EACTA,mBAAa8D,+BAAQC,MAAS,CAAEI,MAAM,IACtCnE,gBAAauL,gBACbvL,gBAAa,OAebsE,WACEtE,KAAKoL,YAAYI,OAAOhD,UAAUgD,IAChCxL,KAAKyL,QAAS,EAEdzL,KAAK0L,SAASF,EAAOG,MAErB3L,KAAKyL,QAAS,EAEdzL,KAAKuD,MAAMgB,SAAS,cACvBvE,KAAK6D,KAAKW,UAAU,CAAEpB,KAAM,cAAcqB,QAAS,eAChDzE,KAAK4D,cAAcc,aAAaC,kBAA4B,GAAI,GAAI3E,KAAKuD,MAAMqB,WAAY5E,KAAKuD,MAAMqB,eAKpG8G,SAASC,GAAI,sCAEjB,IAEE,MAAM/I,QAA0BgJ,QAAeC,EAAKP,KAAKQ,IAAiB,qCAG1ED,EAAKE,KAAOnJ,EAAKoJ,KAAKD,GAAQA,EAAKJ,OAASA,EAQhC3C,CARgC2C,MAOrC3C,GACPH,QAAQC,IAAIE,KAfG,EAeHA,CAKhBiD,UAAUC,EAAeH,GACvB,OAAKA,EACEA,EAAKJ,KADM,KAIpBQ,UAAU7D,EAAcT,GACtBS,EAAM8D,iBACNpM,KAAKqL,aAAagB,eAAexE,iDA/DxBsD,GAAkBtG,qVAAlBsG,EAAkBrG,2pCDlB/BD,uCAAmB,UAAnBA,CAAmB,UAAnBA,CAAmB,SAAnBA,CAAmB,SAAnBA,CAAmB,SAKIA,6BAAIA,6BAEvBA,qCAA4B,SACEA,mCAAUA,6BAExCA,sCAA4B,UACEA,uBAAeA,mCAMhDA,uCACCA,0CAGAA,4FA0EDA,uEApFiCA,sFAO1BA,kEAAc,mFCATsG,GAAb,6BCuB4BtG,qCAEAA,gCAAgCA,4CAChCA,+EAHGA,4IAKHA,qCAEAA,gCAA6BA,0CAC7BA,+EAHGA,yGAKHA,qCAEAA,gCAA4BA,0CAC5BA,+EAHGA,uGAvBnBA,2CAA8E,WAA9EA,CAA8E,WAA9EA,CAA8E,WAA9EA,CAA8E,WAM1DA,sBACJA,2BAEAA,uCACIA,sBACJA,2BAEAA,wCAKAA,wCAKAA,yCAIJA,6BAEJA,wCACIA,2CAEJA,uFA1BYA,sFAIAA,wFAGkCA,gGAKbA,wFAKFA,sFAOMA,qGAA0C,6BC3C5F,IAAMyH,GAAb,MAAM,QAMJxM,YACSsL,EACCE,EACAlC,EACF7F,EACAM,EACAD,GALC5D,mBACCA,YACAA,iBACFA,aACAA,YACAA,qBAVRA,aAAS,EACTA,gBAAauL,gBACbvL,gBAAa,OAabsE,WACItE,KAAKyL,QAAS,EAEdzL,KAAK0L,WAEL1L,KAAKuD,MAAMgB,SAASvE,KAAKoJ,UAAUiB,QAAQ,sBAC3CrK,KAAK6D,KAAKW,UAAU,CAAEpB,KAAM,cAAeqB,QAAS,iDACpDzE,KAAK6D,KAAKW,UAAU,CAAEpB,KAAM,WAAYqB,QAAS,+DACjDzE,KAAK4D,cAAcc,aAAaC,kBAA4B,iBAE5D3E,KAAKyL,QAAS,EAGZC,WAAQ,sCAEZ,IAEE1D,EAAKpF,WAAagJ,QAAe5D,EAAKsD,KAAKQ,IAAyB,4CAGxD9C,CAHwD,MAE7DA,GACPH,QAAQC,IAAIE,KAPF,EAOEA,+CArCLsD,GAA0BzH,8QAA1ByH,EAA0BxH,klCDfvCD,uCAAmB,UAAnBA,CAAmB,UAAnBA,CAAmB,SAAnBA,CAAmB,SAAnBA,CAAmB,SAKmBA,6BAAIA,6BAE1BA,qCAA4B,SACKA,yDAAqCA,mCAMlFA,uCAAwC,WAAxCA,CAAwC,WAAxCA,CAAwC,WAIMA,0DAC9BA,yCACIA,0DACAA,+BACAA,0DACJA,iCAIZA,uCACIA,gDAmCJA,sCAvDyCA,0GAUCA,kHAE1BA,mHAEAA,oHAMyDA,sICbpEyH,GAAb,mECyFgCzH,qCAA6CA,gIAAa0H,EAAb,0BAAaA,iBAEtD1H,oEACIA,mCAA+C,aAEnDA,mFAJaA,6EAOjBA,uCAA4E,YAEpEA,kCAEAA,sCACIA,sBACJA,2BACAA,gCACJA,iFAR8CA,qCAErCA,4FAGDA,yEAEDA,0KAjBfA,uCAEIA,wCAQAA,0CAUJA,qDAnByDA,4CAArDA,iFACIA,kEAQEA,kECrG/B,IAAM2H,GAAb,MAAM,QAqCL1M,YACQ6D,EACCC,EACAL,EACAM,EACAwH,GAJDrL,cACCA,qBACAA,aACAA,YACAA,oBAxCTA,cAAW,CACV,CACEyM,IAAK,MACLC,KAAM,MACNC,QAAQ,EACRC,SAAU,2FACVrJ,MAAO,gCACPkB,QAAS,yKAEX,CACEgI,IAAK,MACLC,KAAM,MACNC,QAAQ,EACRC,SAAU,4FACVrJ,MAAO,0BACPkB,QAAS,gIAEX,CACCgI,IAAK,MACLC,KAAM,MACNC,QAAQ,EACRC,SAAU,GACVrJ,MAAO,sBACPkB,QAAS,4IAER,CACDgI,IAAK,MACLC,KAAM,MACNC,QAAQ,EACRC,SAAU,GACVrJ,MAAO,kCACPkB,QAAS,iMAYXH,WACCtE,KAAKuD,MAAMgB,SAAS,uBACpBvE,KAAK6D,KAAKW,UAAU,CAAEpB,KAAM,cAAeqB,QAAS,iEACpDzE,KAAK4D,cAAcc,aAAaC,kBAA4B,GAAI,GAAI3E,KAAKuD,MAAMqB,WAAY5E,KAAKuD,MAAMqB,aAIvGiI,YAAYC,GACX9M,KAAK+M,SAASC,QAASxL,GAAOA,EAAEmL,QAAS,GACzCG,EAAQH,QAAS,EAGlBM,cACCjN,KAAK+M,SAASC,QAASxL,GAAOA,EAAEmL,QAAS,GAG1CR,UAAU7D,EAAcT,GACvBS,EAAM8D,iBACNpM,KAAKqL,aAAagB,eAAexE,iDA/DtB2E,GAA2B3H,0OAA3B2H,EAA2B1H,qsGDXxCD,sCAAkB,UAAlBA,CAAkB,UAAlBA,CAAkB,SAAlBA,CAAkB,SAAlBA,CAAkB,SAKoCA,6BAAIA,2BACtCA,kCACJA,2BACAA,qCAC2C,SACpBA,6CAAmBA,2BACtCA,mCACJA,iCAKZA,uCAAuB,YAAvBA,CAAuB,YAGmBA,6CAAmBA,+BACjDA,yCAAyBA,iEAAuCA,iCAK5EA,wCAA+B,WAA/BA,CAA+B,YAA/BA,CAA+B,YAA/BA,CAA+B,QAMXA,2ZAIJA,2BACAA,mCACIA,yIAEJA,2BACAA,uCACIA,8CAAWA,+BACfA,2BACAA,mCACIA,2FAA6DA,2BAAIA,+BAAI,WAExCA,qCAAUA,+BAAM,WAChBA,qCAAUA,+BAAM,WAChBA,uCAAYA,+BAAM,WAClBA,kEAEjCA,sCACIA,4CAAiBA,2BACrBA,+BAAI,WAC6BA,wEAA6CA,+BAAM,WACnDA,uDAA4BA,+BAAM,WAClCA,gEAErCA,2BAEAA,wCAAmC,YAG3BA,+CAAoBA,+BACxBA,2BACAA,mCACAA,mCAAGA,kGAAwEA,2BAC3EA,sCAAqDA,+CAAqBA,2BAE1EA,uCAAkCA,wCAAcA,2BAChDA,sCAEIA,iCAAgCA,0CACpCA,+BAKRA,mCACJA,2BAEAA,mCAEAA,wCAAkC,WAAlCA,CAAkC,YAAlCA,CAAkC,YAAlCA,CAAkC,YAKdA,2CACJA,2BACAA,mCAAGA,gIACHA,2BACAA,mCAAGA,wEAA8CA,6BAErDA,wCAAsB,aAGQA,sDAAcmC,kBACpCnC,mCAGAA,2CAqBJA,mCAShBA,mCAEAA,uCAAuB,YAAvBA,CAAuB,YAAvBA,CAAuB,aAIPA,2CAIAA,wCAAkC,WAE1BA,kDAASmC,cAAiB,iDAAgDnC,iCAChDA,iCAI1CA,wCAAsB,aAEdA,2CAIAA,wCAAkC,WAE1BA,kDAASmC,cAAiB,iDAAgDnC,iCAChDA,iCAI1CA,yCAAsB,cAEdA,4CAIAA,yCAAkC,YAE1BA,kDAASmC,cAAiB,iDAAgDnC,kCAChDA,qCAOlDA,oCAEAA,yCAAwC,aAAxCA,CAAwC,aAG5BA,gFAEJA,2BACAA,uCAEIA,kCAA6BA,kCACjCA,+BAIRA,oCAEAA,wCAAuB,aAAvBA,CAAuB,aAAvBA,CAAuB,aAKPA,oCAAQA,gCACZA,2BAEAA,yCAAiB,aAAjBA,CAAiB,YAGLA,kCAA2BA,mDAC/BA,6BAEJA,yCAAgC,YAExBA,kCAA2BA,6DAC/BA,6BAEJA,yCAAgC,YAExBA,kCAA2BA,kDAC/BA,6BAEJA,yCAAgC,YAExBA,kCAA2BA,iEAC/BA,6BAEJA,yCAAgC,YAExBA,kCAA2BA,oDAC/BA,6BAEJA,yCAAgC,YAExBA,kCAA2BA,sDAC/BA,gDAlIyBA,gkCC3FxC2H,GAAb,wCCiBwB3H,uCAEIA,wDACJA,kCADIA,mIAKJA,uCAEIA,wDACJA,kCADIA,mIAKJA,uCAEIA,wDACJA,kCADIA,uIChBJA,uCAEIA,wDACJA,kCADIA,+GCf5B,MAAMqI,GAAiB,CACnB,CACIC,KAAM,GACNC,WAAY,QACZC,UAAW,QAEf,CACIF,KAAM,QACNG,UAAW5J,GAEf,CACIyJ,KAAM,UACNG,UAAWrG,IAEf,CACIkG,KAAM,MACNG,UAAWrF,IAEf,CACIkF,KAAM,QACNG,UAAWnG,GAEf,CACIgG,KAAM,WACNG,UAAWnG,GAEf,CACIgG,KAAM,uBACNG,UAAWnG,GAEf,CACIgG,KAAM,UACNG,UAAWrE,IAEf,CACIkE,KAAM,YACNG,UAAWrC,IAEf,CACIkC,KAAM,YACNG,UCzCR,MAAM,QAMJxN,YACUyN,EACApE,EACFC,EACAC,EACAC,EACA3F,GALE3D,kBACAA,mBACFA,iBACAA,mBACAA,qBACAA,cATTA,cAAmB,EACnBA,gBAAqB,EAWhBkC,QAAM,OAAOlC,KAAKwN,OAAOC,SAE7BnJ,WAGAtE,KAAKwN,OAASxN,KAAKmJ,YAAYU,MAAM,CACpC6D,MAAO,CAAC,GAAI5D,eACT6D,MAAO,CAAC,GAAI7D,eACZ8D,UAAW,CAAC,GAAI9D,iBAMd+D,WAAQ,sCAEd,GADE7F,EAAK+C,WAAY,EACf/C,EAAKwF,OAAOM,QACf,OASC,GAPF9F,EAAK+F,SAAU,EAGC/F,EAAK9F,EAAEyL,MAASK,QACZhG,EAAK9F,EAAE0L,UAAaI,MAMvC,OAFGhG,EAAKsB,cAAcN,MAAM,oCACzBhB,EAAK+C,WAAY,GAKrB,IAAK/C,EAAKqB,YAAYkB,aAAavC,EAAKwF,QAEvC,YADAxF,EAAK+C,WAAY,GAIlB,IAAIkD,QAAYjG,EAAKuF,WAAWW,eAAelG,EAAK9F,EAAEwL,MAASM,MAAOhG,EAAK9F,EAAEyL,MAASK,OAElFC,GAAoB,IAAbA,EAAIvD,MACX1C,EAAKsB,cAAcqB,QAAQ3C,EAAKoB,UAAUiB,QAAQ,mBAClDrC,EAAKrE,OAAO+D,cAAc,oBAE1BM,EAAKsB,cAAcN,MAAOiF,GAAOA,EAAIrD,KAAQqD,EAAIrD,KAAO5C,EAAKoB,UAAUiB,QAAQ,oBA9BrE,EA8BqE,+CA3DxE8D,GAAuBtJ,2QAAvBsJ,EAAuBrJ,40BHdpCD,uCACIA,mHACAA,sCAA0C,UAA1CA,CAA0C,SAA1CA,CAA0C,SAA1CA,CAA0C,SAIRA,6BAAIA,6BAE1BA,sCAA4B,UACDA,+BAAKA,6BAEhCA,sCAAmCA,0DAAoCA,iCAKnFA,uCAA+B,WAA/BA,CAA+B,YAA/BA,CAA+B,YAA/BA,CAA+B,YAIQA,0DAAmCA,2BAC1DA,sCAAgBA,0DAAmCA,2BAGnDA,yCAA2BA,kDAAUmC,eAEjCnC,wEAEAA,2CAKAA,wEAEAA,2CAKAA,wEAEAA,2CAMAA,wCAAyB,eAAzBA,CAAyB,WAEXA,6FAAyCA,2BAC/CA,iCACJA,+BAIRA,mCAAGA,+BAAIA,4CAvDJA,2GAAyC,gEAUbA,4GASRA,2GACPA,2GAGVA,sEAGEA,0GACEA,0MAMFA,0GACEA,0MAMFA,8GACEA,sNAQQA,0OGpCzBsJ,GAAb,ID2CI,CACIhB,KAAM,WACNG,UE7CR,MAAM,QAQJxN,YACUyN,EACApE,EACFC,EACAC,EACAC,EACA3F,GALE3D,kBACAA,mBACFA,iBACAA,mBACAA,qBACAA,cATTA,cAAmB,EACnBA,gBAAqB,EAWhBkC,QAAM,OAAOlC,KAAKwN,OAAOC,SAE7BnJ,WAEEtE,KAAKoH,WAAaC,KAAKC,MAAMC,eAAeC,QAAQ,gBAGlDxH,KAAKoH,YAAcpH,KAAKoH,WAAWK,OACtCzH,KAAK2D,OAAO+D,cAAc,mBAI3B1H,KAAKwN,OAASxN,KAAKmJ,YAAYU,MAAM,CACpCuE,SAAU,CAAC,GAAItE,iBAKVuE,UAAO,sCAEb,GADErG,EAAK+C,WAAY,EACf/C,EAAKwF,OAAOM,QACf,OAKD,GAHA9F,EAAK+F,SAAU,GAGV/F,EAAKqB,YAAYkB,aAAavC,EAAKwF,QAEvC,YADAxF,EAAK+C,WAAY,GAIlB,IAAIkD,QAAYjG,EAAKuF,WAAWe,cAActG,EAAK9F,EAAEkM,SAAYJ,OAE7DC,GAAoB,IAAbA,EAAIvD,KACX1C,EAAKsB,cAAcqB,QAAQ3C,EAAKoB,UAAUiB,QAAQ,kBAElDrC,EAAKsB,cAAcN,MAAOiF,GAAOA,EAAIrD,KAAQqD,EAAIrD,KAAO5C,EAAKoB,UAAUiB,QAAQ,mBAlBtE,EAkBsE,+CArDxEkE,GAAsB1J,2QAAtB0J,EAAsBzJ,0oBHdnCD,uCACIA,mHACAA,sCAA0C,UAA1CA,CAA0C,SAA1CA,CAA0C,SAA1CA,CAA0C,SAIRA,6BAAIA,6BAE1BA,sCAA4B,UACDA,+BAAKA,6BAEhCA,sCAAmCA,0DAAkCA,iCAKjFA,uCAA+B,WAA/BA,CAA+B,YAA/BA,CAA+B,YAA/BA,CAA+B,YAIQA,0DAAiCA,2BACxDA,oEAGAA,yCAA2BA,kDAAUmC,cAEjCnC,wEAEAA,2CAMAA,wCAAyB,eAAzBA,CAAyB,WAEXA,6FAA2CA,2BACjDA,iCACJA,+BAIRA,mCAAGA,+BAAIA,4CAzCJA,wGAAuC,gEAUXA,0GASRA,yGACPA,0IAGVA,sEAGEA,6GACEA,mNAQQA,4OGtBzB0J,GAAb,IF+CC,CACCpB,KAAM,mBACNG,UAAWnC,IAET,CACIgC,KAAM,2BACNG,UAAWhB,IAEf,CACIa,KAAM,sBACNG,UAAWd,KASZ,IAAMgC,GAAb,MAAM,sDAAOA,0GAJA,CAACC,cAAsBvB,KACtBuB,QAGDD,GAAb,+FGNO,IAAME,GAAb,MAAM,sDAAOA,0GAvBH,CACRC,eACAH,GACAI,KACAC,KACAJ,KACAK,YACAC,KACAC,KACAC,KACAC,KACGC,KAEHC,MACAC,KACAC,MACAC,MACAC,MACAC,MACAC,UAIWhB,GAAb,EAAaA,mFCzET7J,uCAAoF,WAApFA,CAAoF,YAE7CA,sBAAmCA,2BAClEA,uCAA+BA,6BAAIA,6BAEvCA,uCAAgC,YACGA,sBAAsCA,2BACrEA,uCAA+BA,+BAAKA,6BAExCA,wCAAgC,aACGA,uBAA4CA,2BAC3EA,wCAA+BA,8BAAIA,6BAEvCA,wCAAgC,aACGA,uBAA4CA,2BAC3EA,wCAA+BA,8BAAIA,yEAbJA,oFAIAA,uFAIAA,6FAIAA,uHAIvCA,uCAAmG,WAAnGA,CAAmG,YAE5DA,sBAAmCA,2BAClEA,uCAA+BA,6BAAIA,6BAEvCA,uCAAgC,YACGA,sBAAsCA,2BACrEA,uCAA+BA,+BAAKA,6BAExCA,wCAAgC,aACGA,uBAA4CA,2BAC3EA,wCAA+BA,iCAAOA,6BAE1CA,wCAAgC,aACGA,uBAA4CA,2BAC3EA,wCAA+BA,iCAAOA,yEAbPA,oFAIAA,uFAIAA,6FAIAA,uHAIvCA,uCACIA,sBACJA,qEADIA,kNAGJA,uCAAsF,WAAtFA,CAAsF,YAE/CA,sBAAsCA,2BACrEA,uCAA+BA,8BAAKA,6BAExCA,uCAAgC,YACGA,sBAA4CA,2BAC3EA,uCAA+BA,iCAAOA,6BAE1CA,wCAAgC,aACGA,uBAA4CA,2BAC3EA,wCAA+BA,iCAAOA,yEATPA,uFAIAA,6FAIAA,uHAKvCA,uCAAoF,WAApFA,CAAoF,YAE7CA,sBAAsCA,2BACrEA,uCAA+BA,4BAAGA,6BAEtCA,uCAAgC,YACGA,sBAA4CA,2BAC3EA,uCAA+BA,8BAAIA,6BAEvCA,wCAAgC,aACGA,uBAA4CA,2BAC3EA,wCAA+BA,8BAAIA,yEATJA,uFAIAA,6FAIAA,8FC1DpC,IAAM8K,EAAb,MAAM,QAgBL7P,cAZSE,cAAW,EAanBA,KAAK4P,KAAO,cAAgBhJ,KAAKC,KAAqB,IAAhBD,KAAKiJ,SAAW,CAGvDvL,WAEC,OADAtE,KAAK8P,KAAO9P,KAAK+P,MAAMC,UAAU,EAAGhQ,KAAK+P,MAAME,OAAS,GAChDjQ,KAAK+P,MAAM/P,KAAK+P,MAAME,OAAS,QACjC,IACJjQ,KAAK8P,KAAmB,KAAZ9P,KAAK8P,KACjB,UACI,IACJ9P,KAAK8P,KAAmB,GAAZ9P,KAAK8P,KACjB,UACI,IACJ9P,KAAK8P,KAAmB,KAAZ9P,KAAK8P,KAAc,GAMjC,IAEIA,GAFa,IAAII,KAAKlQ,KAAK+P,OACZ,IAAIG,MACQ,IAEI,MAA/BlQ,KAAK+P,MAAMC,UAAU,EAAG,KAAYF,EAAO9P,KAAK8P,MAEpD9P,KAAKmQ,KAAOvJ,KAAKwJ,MAAMN,EAAQ,OAC/B9P,KAAKqQ,MAAQzJ,KAAKwJ,MAAMN,EAAQ,MAAa,MAC7C9P,KAAKsQ,QAAU1J,KAAKwJ,MAAMN,EAAO,KAAO,IACxC9P,KAAKuQ,QAAU3J,KAAKwJ,MAAMN,EAAO,IAEjCrJ,YAAY,KACX,IAEIqJ,GAFa,IAAII,KAAKlQ,KAAK+P,OACZ,IAAIG,MACQ,IAEI,MAA/BlQ,KAAK+P,MAAMC,UAAU,EAAG,KAAYF,EAAO9P,KAAK8P,MACpD9P,KAAK8P,OAEL9P,KAAKmQ,KAAOvJ,KAAKwJ,MAAMN,EAAQ,OAC/B9P,KAAKqQ,MAAQzJ,KAAKwJ,MAAMN,EAAQ,MAAa,MAC7C9P,KAAKsQ,QAAU1J,KAAKwJ,MAAMN,EAAO,KAAO,IACxC9P,KAAKuQ,QAAU3J,KAAKwJ,MAAMN,EAAO,KAC/B,mDA3DQH,sDAAkB7K,4hBDR/BD,oCACIA,0CAkBAA,0CAkBAA,yCAIAA,0CAeAA,0CAcJA,kCAtEKA,uEAC4CA,wFAkBAA,qGAkBCA,oGAIDA,yFAeAA,4HChDpC8K,GAAb,EAAaA,0DCAN,IAAMa,EAAb,MAAM,QAYL1Q,YAAoB2Q,EAAwB/K,GAAxB1F,UAAwBA,gBALnCA,SAAM,SAGfA,kBAAe,iFAIfsE,WAAQ,CAIRoM,QAAQpI,GACP,OAAQA,EAAMqI,YACR,QACJ,IAAI3C,EAAyB,OAG5BA,EADGhO,KAAK4Q,QACA5Q,KAAK4Q,QACP5Q,KAASgG,QAAUhG,KAAK6Q,MACtBjK,KAAKwJ,MAAOU,WAAW9Q,KAAKgG,OAAOc,YAAcgK,WAAW9Q,KAAK6Q,MAAM/J,YAAc,KAAS,GAAK,IAEnG,OAGT9G,KAAK0F,SAASqL,SAAS/Q,KAAKyQ,GAAGvK,cAAe,cAAe8H,GAEzDhO,KAAKgR,WACRhR,KAAK0F,SAASqL,SAAS/Q,KAAKyQ,GAAGvK,cAAe,aAAclG,KAAKgR,UAAY,OAG1EhR,KAAKiR,iBACRjR,KAAK0F,SAASqL,SAAS/Q,KAAKyQ,GAAGvK,cAAe,mBAAoBlG,KAAKiR,iBAExE,UACI,gBAMJ,QAEA,MAPA,IACI,oBACAjR,KAAKgR,WACRhR,KAAK0F,SAASqL,SAAS/Q,KAAKyQ,GAAGvK,cAAcgL,cAAc,OAAQ,aAAclR,KAAKgR,UAAY,OAInG,+CAjDSR,GAAc3L,yIAAd2L,EAAc1L,mRCR3BD,sCAAoDA,0DAAiBmC,eAArEnC,iCAAKA,sDAA6B,iBAA7BA,CAA6B,aAA7BA,CAA6B,8CDQrB2L,GAAb,EAAaA,wIEJT3L,uCACIA,wDACJA,kCADIA,kIAKJA,uCAEIA,wDACJA,kCADIA,+GCAD,IAAMsM,EAAb,MAAM,QASLrR,YACSsR,EACAjI,EACAkI,GAFArR,aACAA,mBACAA,2BARTA,cAAmB,EACnBA,gBAAqB,EAUpBA,KAAKsR,UAAYtR,KAAKmJ,YAAYU,MAAM,CACvCE,MAAO,CAAC,GAAID,eACZyH,SAAU,CAAC,GAAIzH,eACf0H,WAAY,EAAC,KAIXxJ,QAAM,OAAOhI,KAAKsR,UAAU7D,SAEhCnJ,WAECtE,KAAKoR,MAAMK,YAAYjJ,UAAUgD,IAChCxL,KAAK0R,SAAWlG,EAAOkG,WAIpBC,aAAanK,QAAQ,UACxBxH,KAAKgI,EAAE+B,MAAS6H,SAASD,aAAanK,QAAQ,UAE3CmK,aAAanK,QAAQ,aACxBxH,KAAKgI,EAAEuJ,SAAYK,SAASD,aAAanK,QAAQ,aAK7CqK,QAAK,2CACVxP,EAAK0I,WAAY,GACb1I,EAAKiP,UAAUxD,UAGnBzL,EAAK0L,SAAU,EAGf1L,EAAK+E,iBAAmB/E,EAAKgP,oBAAoBS,aAAazP,EAAK2F,EAAE+B,MAASiE,MAAO+D,SAAW1P,EAAK2F,EAAEuJ,SAAYvD,OAAQ,GACvH3L,EAAK+E,WAAWK,QAEgB,IAAX,QAApBjF,IAAKwF,EAAEwJ,kBAAa9P,eAAEsM,SACzB2D,aAAaK,QAAQ,QAAS3P,EAAKiP,UAAUxF,IAAI,SAASkC,OAC1D2D,aAAaK,QAAQ,WAAY3P,EAAKiP,UAAUxF,IAAI,YAAYkC,QAGjE3L,EAASqP,SACRpL,OAAO2L,SAASC,KAAO7P,EAAKqP,SAE5BpL,OAAO2L,SAASE,YAnBR,EAmBQA,+CA3DPhB,GAAkBtM,6JAAlBsM,EAAkBrM,w4BDZ/BD,uCAA8BA,kDAAUmC,YAEpCnC,qEAEAA,wCAIAA,qEAEAA,wCAKAA,sCAAyB,aAAzBA,CAAyB,UAEXA,gCAAMA,2BACZA,gCACJA,2BAEAA,uCACIA,oCACAA,yCAAqDA,0DAAyCA,6BAGlGA,sCAAwEA,0DAAsCA,+BAItHA,wCAAgC,WACLA,yCAAeA,2BACtCA,wCAAiB,YAAjBA,CAAiB,WAGLA,iCACAA,6CACJA,6BAEJA,wCAAsB,WAEdA,iCACAA,+CACJA,wCA3CNA,gDAGEA,wGACEA,mNAKFA,2GACEA,sHAauDA,+GAGeA,qMCdnEsM,GAAb,EAAaA,4LCJDtM,uCACIA,wDACJA,kCADIA,kIAMJA,uCAEIA,wDACJA,kCADIA,qIASJA,uCAEIA,wDACJA,kCADIA,iIAMJA,uCAEIA,wDACJA,kCADIA,qIAaZA,uCAEIA,wDACJA,kCADIA,oIAKJA,uCACIA,wDACJA,kCADIA,oIAKJA,uCACIA,wDACJA,kCADIA,gIAKJA,uCACIA,wDACJA,kCADIA,kIAKJA,uCACIA,wDACJA,kCADIA,oIAQIA,uCAEIA,wDACJA,kCADIA,iIAOJA,uCAEIA,wDACJA,kCADIA,qIAWAA,0CAAwDA,sBAAiBA,qDAArCA,uCAAoBA,2FAE5DA,uCAEIA,wDACJA,kCADIA,iIAOJA,uCAEIA,wDACJA,kCADIA,qIASZA,uCACIA,wDACJA,kCADIA,kIAkBAA,uCAEIA,wDACJA,kCADIA,0IAYJA,uCAEIA,wDACJA,kCADIA,+GC7IL,IAAMuN,GAAb,MAAM,QAULtS,YACSqJ,EACAoE,EACA6D,EACAhI,GACAlB,GACAmK,GACA/I,GACAD,IAPArJ,mBACAA,kBACAA,aACAA,kBACAA,qBACAA,mBACAA,sBACAA,oBAdTA,YAAqB,GACrBA,gBAAqB,EAEZA,cAAmB,EAc1BA,KAAKsS,QAAUtS,KAAKmJ,YAAYU,MAAM,CACrC0I,GAAI,CAAC,GACLC,UAAW,CAACjH,qBACZkH,KAAM,CAAC,KACPrP,KAAM,CAAC,GAAI0G,eACX4I,SAAU,CAAC,GAAI5I,eACf6I,WAAY,EAAC,GACbC,QAAS,CAAC,GAAI9I,eACd+I,IAAK,CAAC,GAAI,CAAEC,WAAY,CAAChJ,cAAqBA,aAAmBlJ,SACjEmS,MAAO,CAAC,GAAIjJ,eACZkJ,QAAS,CAAC,GAAIlJ,eACdmJ,KAAM,CAAC,GAAInJ,eACXoJ,KAAM,CAAC,GAAI,CAACpJ,cAAqB9J,KAAKmT,yBACtCC,MAAO,CAAC,GAAItJ,eACZuJ,MAAO,CAAC,IACRC,QAAS,CAAC,MACVtJ,MAAO,CAAC,GAAI,CAAE8I,WAAY,CAAChJ,cAAqBA,aAAmBjJ,SACnEkJ,MAAO,CAAC,GAAI,CAAE+I,WAAY,CAAChJ,cAAqBA,aAAmBhJ,SACnEyQ,SAAU,CAAC,GAAIzH,eACfK,SAAU,CAAC,KAAML,mBACjBM,SAAU,CAAC,KAAMN,qBAKhByJ,QAAM,OAAOvT,KAAKsS,QAAQ7E,SAE9BnJ,WAECtE,KAAKoH,WAAaC,KAAKC,MAAMC,eAAeC,QAAQ,gBAKpDxH,KAAKwT,YAGDxT,KAAKoH,YAAcpH,KAAKoH,WAAWK,OAEtCzH,KAAKyT,iBAINzT,KAAKoR,MAAMK,YAAYjJ,UAAUgD,IAC5BA,EAAOzB,OAAY/J,KAAKsS,SAC3BtS,KAAKuT,EAAExJ,MAAS6H,SAASpG,EAAOzB,OAG7B/J,KAAKkI,aAAawL,eAAiB1T,KAAKsS,SAC3CtS,KAAKuT,EAAEhC,SAAYK,SAAS5R,KAAKkI,aAAawL,eAG3C1T,KAAKsS,SAAqC,KAA1BtS,KAAKuT,EAAExJ,MAASiE,OAA6C,KAA7BhO,KAAKuT,EAAEhC,SAAYvD,OAGtEhO,KAAKkI,aAAayL,YAAY,MAM3BH,YAAS,qCACdI,EAAKC,aAAeD,EAAKvB,WAAWyB,eADtB,EACsBA,CAGrCC,qDAEuC,QAApBH,OAAKL,EAAEZ,kBAAajR,eAAEsM,QAKtB,QAAjBgG,OAAKT,EAAEX,eAAU/Q,SAAEoS,UACF,QAAjBC,OAAKX,EAAEX,eAAU5Q,SAAE4P,SAAS,IACf,QAAbuC,QAAKZ,EAAEV,WAAM1Q,WAAE8R,UACF,QAAbG,QAAKb,EAAEV,WAAMvQ,WAAEsP,SAAS,MAEP,QAAjByC,QAAKd,EAAEX,eAAUnQ,WAAE6R,SACN,QAAbC,QAAKhB,EAAEV,WAAM2B,WAAEF,UAIXG,WAAQ,gDACb,MAAMC,GAAwB,QAAbV,IAAKT,EAAEV,WAAMnR,eAAEsM,MAInB,UAFK4F,EAAKrG,WAAWoH,aAAaD,MAGjC,QAAbR,IAAKX,EAAEV,WAAMhR,SAAE+S,UAAU,CAAEC,UAAU,IACrCjB,EAAKtK,cAAcN,MAAM4K,EAAKxK,UAAUiB,QAAQ,mBAEnC,QAAb8J,KAAKZ,EAAEV,WAAM7Q,WAAE4S,UAAU,MAI1BhB,EAAKtB,QAAQtH,0BAbA,EAaAA,CAIdmI,uBAAuB2B,GACtB,MAAMC,EAAgBD,EAAQ9G,MAC9B,OAAsB,OAAlB+G,GAA4C,KAAlBA,EACtB,KAEA,CAAEC,eAAiB,GAI5BC,4BAEC,MAAMC,EAAkC,QAAdtB,OAAKL,EAAEL,YAAOxR,eAAEsM,MAGpCmH,EAAqCnV,KAAK6T,OAAO7H,KAAKkH,IAAQA,GAAKkC,OAASF,GAE9EC,GAEHnV,KAAKuT,EAAEF,MAASzB,SAASuD,EAAaE,SAIlC5B,iBAAc,qCACnBG,EAAK0B,iBAAmB1B,EAAKrG,WAAWgI,gBAAgB3B,EAAKxM,WAAWzF,UAEpEiS,EAAK0B,aAER1B,EAAKL,EAAEhB,GAAMX,SAASgC,EAAK0B,WAAW/C,IACtCqB,EAAKL,EAAExJ,MAAS6H,SAASgC,EAAK0B,WAAWvL,OAEzC6J,EAAKL,EAAEnQ,KAAQwO,SAASgC,EAAK0B,WAAWlS,MACxCwQ,EAAKL,EAAEb,SAAYd,SAASgC,EAAK0B,WAAW5C,UAC5CkB,EAAKL,EAAEZ,WAAcf,SAASgC,EAAK0B,WAAW3C,YAC9CiB,EAAKL,EAAEX,QAAWhB,SAASgC,EAAK0B,WAAW1C,SAC3CgB,EAAKL,EAAEV,IAAOjB,SAASgC,EAAK0B,WAAWzC,KACvCe,EAAKG,8BACLH,EAAKL,EAAER,MAASnB,SAASgC,EAAK0B,WAAWvC,OACzCa,EAAKL,EAAEP,QAAWpB,SAASgC,EAAK0B,WAAWtC,QAAQA,SACnDY,EAAKL,EAAEN,KAAQrB,SAASgC,EAAK0B,WAAWtC,QAAQC,MAChDW,EAAKL,EAAEL,KAAQtB,SAASgC,EAAK0B,WAAWtC,QAAQE,MAChDU,EAAKL,EAAEH,MAASxB,SAASgC,EAAK0B,WAAWtC,QAAQI,OACjDQ,EAAKL,EAAEF,MAASzB,SAASgC,EAAK0B,WAAWtC,QAAQK,OACjDO,EAAKL,EAAED,QAAW1B,SAASgC,EAAK0B,WAAWtC,QAAQM,SACnDM,EAAKL,EAAEvJ,MAAS4H,SAASgC,EAAK0B,WAAWtL,OACzC4J,EAAKL,EAAEpJ,SAAYyH,SAASgC,EAAK0B,WAAWnL,UAC5CyJ,EAAKL,EAAEnJ,SAAYwH,SAASgC,EAAK0B,WAAWlL,UAGvCwJ,EAAK0B,YACT1B,EAAKtK,cAAcN,MAAM4K,EAAKxK,UAAUiB,QAAQ,aA3B/B,EA2B+B,CAK7CmL,WAAQ,qCAGb,IAAK5B,EAAKvK,YAAYkB,aAAaqJ,EAAKtB,SAEvC,YADAsB,EAAK7I,WAAY,GAIlB,MAAM0K,EAAkB,CACvBjD,UAAWoB,EAAKL,EAAEf,UAAaxE,MAC/BuE,GAAIqB,EAAK0B,YAAc1B,EAAK0B,WAAW/C,GAAKqB,EAAK0B,WAAW/C,GAAK,EACjEmD,OAAQ9B,EAAK0B,YAAc1B,EAAK0B,WAAWI,OAAS9B,EAAK0B,WAAWI,OAAS9B,EAAKL,EAAExJ,MAASiE,MAC7FuD,SAAUqC,EAAKL,EAAEhC,SAAYvD,MAC7B7D,SAAUyJ,EAAKL,EAAEpJ,SAAY6D,MAC7B5D,SAAUwJ,EAAKL,EAAEnJ,SAAY4D,MAC7ByE,KAAMmB,EAAKL,EAAEd,KAAQzE,MACrB5K,KAAMwQ,EAAKL,EAAEnQ,KAAQ4K,MACrB0E,SAAUkB,EAAKL,EAAEb,SAAY1E,MAC7B2E,WAAYiB,EAAKL,EAAEZ,WAAc3E,MACjC4E,QAASgB,EAAKL,EAAEX,QAAW5E,MAC3B6E,IAAKe,EAAKL,EAAEV,IAAO7E,MACnB+E,MAAOa,EAAKL,EAAER,MAAS/E,MACvBjE,MAAO6J,EAAKL,EAAExJ,MAASiE,MACvBhE,MAAO4J,EAAKL,EAAEvJ,MAASgE,MACvBgF,QAAS,CACR5P,KAAMwQ,EAAKL,EAAEnQ,KAAQ4K,MACrBgF,QAASY,EAAKL,EAAEP,QAAWhF,MAC3BiF,KAAMW,EAAKL,EAAEN,KAAQjF,MACrBkF,KAAMU,EAAKL,EAAEL,KAAQlF,MAAMgC,UAAU,EAAG,GACxCoD,MAAOQ,EAAKL,EAAEH,MAASpF,MACvBqF,MAAOO,EAAKL,EAAEF,MAASrF,MACvBsF,QAASM,EAAKL,EAAED,QAAWtF,MAC3BhE,MAAO4J,EAAKL,EAAEvJ,MAASgE,QAIzB4F,EAAKxM,iBAAmBwM,EAAKrG,WAAWoI,sBAAsBF,EAAQ7B,EAAKgC,UApC9D,EAoC8DA,+CAlNhExD,GAAuBvN,8UAAvBuN,EAAuBtN,wsEDrBpCD,uCAA4BA,kDAAUmC,eAClCnC,mCAA2D,aAG3DA,sCAAiB,WAETA,qEAEAA,wCAGJA,2BACAA,sCACIA,sEAEAA,yCAIJA,6BAGJA,uCAAiB,YAETA,uEAEAA,yCAIJA,2BACAA,uCACIA,uEAEAA,yCAIJA,6BAGJA,wCAA4C,eAIxCA,kDAAUmC,kCAHVnC,2BAIAA,0CACIA,0DAA8BA,6BAEtCA,yCAKAA,wEAEAA,yCAIAA,wEAEAA,yCAIAA,wEAEAA,yCAIAA,wEAEAA,yCAKAA,uCAAiB,aAETA,wEAEAA,yCAKJA,2BACAA,wCACIA,wEAEAA,yCAKJA,6BAGJA,uCAAiB,WAAjBA,CAAiB,gBAGLA,kDAAUmC,0BACVnC,2CAAiBA,0DAA4BA,2BAC7CA,6CACJA,2BACAA,0CAIJA,2BACAA,uCAAsB,eAAtBA,CAAsB,gBAEcA,gCAAMA,6BAEtCA,yCAIJA,6BAGJA,qCAA6C,kDAI7CA,0CAIAA,wCAAyB,eAAzBA,CAAyB,WAEXA,6FAA2CA,2BACjDA,iCACJA,2BAEAA,wCAA4C,eAKpCA,kDAAUmC,cAAY,YAAWgE,8DAJrCnG,2BAKAA,0CACIA,0DAAwCA,6BAEhDA,yCAKAA,wCAA4C,eAKpCA,kDAAUmC,cAAY,YAAWgE,8DAJrCnG,2BAKAA,0CACIA,0DAAmCA,6BAE3CA,yCAIJA,6BAIJA,wCAAgC,WACLA,yCAAeA,2BACtCA,uCAAiB,WAAjBA,CAAiB,WAGLA,iCACAA,6CACJA,6BAEJA,uCAAsB,WAEdA,iCACAA,+CACJA,wCArLNA,8CAOUA,yGACEA,6MAMFA,6GACEA,oHAUFA,yGACEA,gHAOFA,6GACEA,oHAaNA,6GAEFA,sHAMFA,4GACEA,mHAKFA,wGACEA,+GAKFA,0GACEA,iHAKFA,4GACEA,mHAQMA,yGACEA,gHAQFA,0GACEA,iHAYeA,kGACQA,oEAEvBA,gHAMiDA,gEAGjDA,mHAUVA,0GACEA,iHAMQA,qIAQFA,sHAGAA,uHAEFA,oHASEA,iHAGAA,kHAEFA,gPC3IDuN,GAAb,EAAaA,0DCbN,IAAMyD,EAAb,MAAM,QAOL/V,cALSE,oBAAiB,YACjBA,WAAQ,mCAMjBsE,WAAQ,+CATIuR,sDAAmB/Q,+OCRhCD,sCAAqF,UAArFA,CAAqF,UAEtDA,sBAAWA,qCAAMA,sBAAcA,wCAFzBA,+DAC5BA,4EACsBA,gEAAiBA,0GDMnCgR,GAAb,EAAaA,mEEEN,IAAMC,EAAb,MAAM,QAULhW,YACSwJ,EACAF,GADApJ,qBACAA,iBAVAA,WAAQ,EACRA,SAAM,IACNA,aAAU,GACVA,YAAS,EAGlBA,aAAW,EAOVA,KAAK+V,UAAY,IAAIC,eAGtBC,cACCjW,KAAKkW,QAAUlW,KAAKgO,MAGrB1J,WAAQ,CAGR6R,YACMnW,KAAKoW,KAAO,GAAKpW,KAAKkW,SAAWlW,KAAKoW,MAI3CpW,KAAKkW,QAAUlW,KAAKkW,QAAW,EAAIlW,KAAKqW,OACxCrW,KAAK+V,UAAUO,KAAMtW,KAAKkW,UAG3BK,YACC,GAAKvW,KAAKkW,QAAU,EAAI,CAEvB,MAAMM,EAAWxW,KAAKkW,QAAW,EAAIlW,KAAKqW,OAEtCG,GAAYxW,KAAKqW,QAEpBrW,KAAKkW,QAAUM,EACfxW,KAAK+V,UAAUO,KAAMtW,KAAKkW,UAG1BlW,KAAKsJ,cAAcmN,QAAQ,GAAGzW,KAAKoJ,UAAUiB,QAAQ,mBAAmBrK,KAAKqW,WAehFK,cAAcpO,GACb,MAAMkO,EAAWG,SAASrO,EAAMsO,cAAc5I,OAE1CwI,EAAW,GAAKA,GAAYxW,KAAKoW,IACnCS,EAAe7W,KAAKqW,QAAW,GAChCrW,KAAKkW,QAAUM,EACfxW,KAAK+V,UAAUO,KAAKtW,KAAKkW,WAIzB5N,EAAMsO,cAAc5I,MAAQhO,KAAKkW,QAAQpP,WACzC9G,KAAKsJ,cAAcmN,QAAQ,GAAGzW,KAAKoJ,UAAUiB,QAAQ,mBAAmBrK,KAAKqW,YAK5E/N,EAAMsO,cAAc5I,MAAQhO,KAAKkW,QAAQpP,WACzC9G,KAAKsJ,cAAcmN,QAAQ,GAAGzW,KAAKoJ,UAAUiB,QAAQ,qBAAqBrK,KAAKoW,sDA7EtEN,GAAsBjR,0HAAtBiR,EAAsBhR,woBCVnCD,oCAAqD,UAArDA,CAAqD,UAArDA,CAAqD,cAG6BA,iDAASmC,gBAC3EnC,+BACJA,6BAEJA,wCACsBA,iDAAQmC,qBAD9BnC,2BAEAA,sCAAgC,cAC0CA,iDAASmC,gBAC3EnC,+BACJA,wCAZPA,8DAOwGA,6DAAW,mCDG3GiR,GAAb,EAAaA,mEEPN,MAAMgB,GAAiBC,QAAQ,kBAAmB,EACxDC,QAAW,UAAW,EACrBC,QAAM,SAAU,EACfC,QAAM,CACLC,QAAS,UAER,CAAEC,UAAU,KACfH,QAAM,SAAU,EACfC,QAAM,CACLC,QAAS,QACTE,QAAS,KAEVC,QAAQ,iBAAiBJ,QAAM,CAAEG,QAAS,MAC1CE,WACE,CAAEH,UAAU,QAIJrT,EAAY,CACrBM,MAAO,EACPF,MAAM,EACND,OAAQ,EACRsT,iBAAiB,EACjBxT,KAAK,EACLyT,QAAS,CAAE,8BAA+B,gCAC1CxT,MAAM,EACNyT,WAAY,IACZC,UAAU,EACVC,gBAAiB,MAGRC,EAAa,CACtBC,OAAQ,CACJ/R,KAAM,CACFsR,QAAS,GAEbvR,GAAI,CACAuR,QAAS,IAIjBU,mBAAoB,CAChBhS,KAAM,CACFsR,QAAW,EACXW,UAAa,qBACb,mBAAoB,OAGxBlS,GAAI,CACAuR,QAAS,EACTW,UAAW,SAInBC,YAAa,CACTlS,KAAM,CACFsR,QAAS,EACTW,UAAW,yBAGflS,GAAI,CACAuR,QAAS,EACTW,UAAW,kBAInBE,kBAAmB,CACfnS,KAAM,CACFsR,QAAS,EACTW,UAAW,oBACX,mBAAoB,OAExBlS,GAAI,CACAuR,QAAS,EACTW,UAAW,SAInBG,WAAY,CACRpS,KAAM,CACFsR,QAAS,EACTW,UAAW,0BAGflS,GAAI,CACAuR,QAAS,EACTW,UAAW,kBAInBI,gBAAiB,CACbrS,KAAM,CACFsR,QAAS,EACTW,UAAW,oBACX,mBAAoB,OAExBlS,GAAI,CACAuR,QAAS,EACTW,UAAW,SAInBK,kBAAmB,CACftS,KAAM,CACFsR,QAAS,EACTW,UAAW,qBACX,mBAAoB,OAExBlS,GAAI,CACAuR,QAAS,EACTW,UAAW,SAInBM,OAAQ,CACJvS,KAAM,CACFsR,QAAS,EACThP,OAAQ,aACR2P,UAAW,cAEflS,GAAI,CACAuR,QAAS,EACThP,OAAQ,UACR2P,UAAW,yDCxHhB,IAAMO,EAAb,MAAM,QAELzY,YAAoB0Y,iBAGpBC,QAAQC,GAGP,MAAMC,EAAaC,EADFC,OAAOC,QAAQ,oBACN5H,cAAc,uBAEpCyH,GACH3Y,KAAKwY,OAAOO,YAAYJ,EAAY,UAIrC,MAAMK,EAAcN,EAAEG,OAAOC,QAAQ,gBACjCE,GACHhZ,KAAKwY,OAAOS,SAASD,EAAa,UAGnCN,EAAEtM,+DApBSmM,GAAiB1T,6FAAjB0T,EAAiBzT,iHAAjBkC,qBAAb,EAAauR,yDCEN,IAAMW,EAAb,MAAM,QAELpZ,YAAsBqZ,qBAEtBnB,UAAUhK,EAAe3K,EAAO,QAC/B,OAAQA,OACF,OASkD2K,QAEtD,OAAOhO,KAAKmZ,WAAWC,wBAAwBpL,GAVAA,IAC3C,QACJ,OAAOhO,KAAKmZ,WAAWE,yBAAyBrL,OAC5C,SACJ,OAAOhO,KAAKmZ,WAAWG,0BAA0BtL,OAC7C,MACJ,OAAOhO,KAAKmZ,WAAWI,uBAAuBvL,OAC1C,cACJ,OAAOhO,KAAKmZ,WAAWK,+BAA+BxL,GAEPA,+CAjBtCkL,GAAerU,kHAAfqU,EAAeO,UAAfP,GAAb,EAAaA,mHCON,IAAMQ,EAAb,MAAM,QAEJ5Z,YACUwL,EACA+F,EACAjI,EACAE,GAHAtJ,YACAA,2BACAA,iBACAA,qBAIJ2V,sBAAsBgE,EAAe/D,GAAmB,GAAI,qCAChE,MAAMgE,EAAc,CAClBC,QAAS,IAAIC,KAAY,CACvBC,cAAiBxO,sBACjByO,YAAezO,oBACfqK,QAAWA,EAAQ9O,aAErBmT,oBAAoB,GAItB,aAAarO,OAAe1J,EAAKoJ,KAAK4O,KACpC,GAAG3O,+DACHoO,EACAC,IACCjR,KAAM/F,IAEW,IAAdA,EAAK8H,KACPxI,EAAKoH,cAAcqB,QAAQzI,EAAKkH,UAAUiB,QAAQ,gBASlDnI,EAAKoH,cAAcN,MAAMpG,EAAMgI,KAG1BuP,GAENpR,MACDC,IACEH,QAAQC,IAAI,UAAYE,EAAMlC,YAIxB5E,EAAKoH,cAAcN,MAHrBA,EAAM6B,QAED,MADC7B,EAAM6B,OAEe7B,EAAMA,MAAM4B,KAQhB5B,EAAM8B,YA9C2B,EA8C3BA,CAQjCyK,gBAAgB5T,GAAgB,qCACpC,MAAMiY,EAAc,CAClBC,QAAS,CACPlY,SAAUA,EAASmF,aAKjBe,EAAM,GAAG0D,iDAEf,aAAaK,OAAe7J,EAAKuJ,KAAKQ,IAAqBjE,EAAK+R,IAC/DjR,KAAMyR,GACE/S,KAAKC,MAAM8S,EAAQC,WAE3BtR,MACCC,IACEH,QAAQC,IAAI,UAAYE,EAAMlC,YAIxB/E,EAAKuH,cAAcN,MAHrBA,EAAM6B,QAED,MADC7B,EAAM6B,OAEe7B,EAAMA,MAAM4B,KAQhB5B,EAAM8B,YA5BD,EA4BCA,CAOjCwP,YAAYC,GAAc,qCAC9B,MAAMX,EAAc,CAClBC,QAAS,CACPU,OAAUA,IAKR1S,EAAM,GAAG0D,mDAEf,aAAaK,OAAe7J,EAAKuJ,KAAKQ,IAAqBjE,EAAK+R,IAC/DjR,KAAMyR,GACE/S,KAAKC,MAAM8S,EAAQC,WAE3BtR,MACCC,IACEH,QAAQC,IAAI,UAAYE,EAAMlC,YAIxB/E,EAAKuH,cAAcN,MAHrBA,EAAM6B,QAED,MADC7B,EAAM6B,OAEe7B,EAAMA,MAAM4B,KAQhB5B,EAAM8B,YA5BP,EA4BOA,CAOjC6J,aAAa9B,EAAa2H,EAAU,mCAAiC,qCACzE,IAAIC,EAAOD,EACb,OAAKA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAEH5H,IACL4H,GAAQ,OAAS5H,SAGHjH,OAAe1J,EAAKoJ,KAAK4O,KAAsB,GAAG3O,wBAAgCkP,IAAO,KACrG9R,KAAMyR,GACEA,EAAQ1P,MACd3B,MACDC,IACEH,QAAQC,IAAI,UAAYE,EAAMlC,YAIxB5E,EAAKoH,cAAcN,MAHrBA,EAAM6B,QAED,MADC7B,EAAM6B,OAEe7B,EAAMA,MAAM4B,KAQhB5B,EAAM8B,YA1BoC,EA0BpCA,CAOjC4P,UAAU/Y,GAAgB,qCAC9B,MAAMiY,EAAc,CAClBC,QAAS,IAAIC,KAAY,CACvBnY,SAAYA,EAASmF,cAIzB,aAAa8E,OAAe7J,EAAKuJ,KAAKQ,IAAqB,GAAGP,4CAAqDqO,IAAcjR,KAC/HsF,IACE,MAAMrF,EAAWvB,KAAKC,MAAM2G,EAAIoM,UAChC9S,sBAAeyK,QAAQ,gBAAiB3K,KAAKsT,UAAU/R,IAChDA,IAGVD,KAAMyR,GACE/S,KAAKC,MAAM8S,EAAQC,WAE3BtR,MACCC,IACE,GAAIA,EAAM6B,OACR,OAAQ7B,EAAM6B,aACP,IAGHtD,eAAeqT,QACf7Y,EAAKuH,cAAcN,MAAMA,EAAM8B,SAC/B,WAEG,IAGH/I,EAAKuH,cAAcN,MAAMA,EAAM8B,SAC/B,cAGI9B,EAAMA,MAAM4B,MAGd7I,EAAKuH,cAAcN,MAAMA,EAAM8B,aAtCb,EAsCaA,CAevCwD,cAAcF,EAAkBoM,EAAU,oCAAkC,qCAChF,IAAIC,EAAOD,EACRA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAEHrM,IACLqM,GAAQ,YAAcrM,GAGrB,MAAMwL,EAAc,CAClBC,QAAS,IAAIC,KAAY,CACvBC,cAAiBxO,wBAEnB0O,oBAAoB,GAItB,aAAarO,OAAe1J,EAAKoJ,KAAK4O,KAAsB,GAAG3O,uBAA+BkP,IAAQ,KACpGb,IAEDjR,KAAMyR,GACEA,GAERrR,MACCC,IACEH,QAAQC,IAAI,UAAYE,EAAMlC,YAIxB5E,EAAKoH,cAAcN,MAHrBA,EAAM6B,QAED,MADC7B,EAAM6B,OAEe7B,EAAMA,MAAM4B,KAQhB5B,EAAM8B,YArC2C,EAqC3CA,CAUjCoD,eAAe2M,EAAqBC,EAAqBN,EAAU,gCAA8B,qCAErG,IAAIC,EAAOD,EACRA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAGP,IAAIM,EAAO,CAAEC,YAAaH,EAAaI,YAAaH,GAEpD,aAAalP,OAAevJ,EAAKiJ,KAAK4O,KACpC,GAAG3O,uBAA+BkP,IAClCM,IAEDpS,KAAMyR,GACEA,GAERrR,MACCC,IACEH,QAAQC,IAAI,UAAYE,EAAMlC,YAIxBzE,EAAKiH,cAAcN,MAHrBA,EAAM6B,QAED,MADC7B,EAAM6B,OAEe7B,EAAMA,MAAM4B,KAQhB5B,EAAM8B,YA9BgE,EA8BhEA,CASjCoQ,aAAavZ,EAAkB6Y,EAAU,4BAA0B,qCAEvE,IAAIC,EAAOD,EACb,OAAKA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAEH9Y,IACL8Y,GAAQ,YAAc9Y,SAGRiK,OAAe1J,EAAKoJ,KAAKQ,IACpC,GAAGP,uBAA+BkP,MAEnC9R,KAAMyR,GACG/S,KAAKC,MAAM8S,EAAQC,WAE5BtR,MACCC,IACEH,QAAQC,IAAI,UAAYE,EAAMlC,YAIxB5E,EAAKoH,cAAcN,MAHrBA,EAAM6B,QAED,MADC7B,EAAM6B,OAEe7B,EAAMA,MAAM4B,KAQhB5B,EAAM8B,YA9BkC,EA8BlCA,CAOjCqQ,aAENC,EACAC,EACAd,EAAiB,GACjBe,EAAqB,GACnBC,EAAmB,GACrBC,EAAoB,IAAE,qCAGtB,MAAM5B,EAAc,CACnBC,QAAS,CACRuB,aAAcA,EACdC,aAAcA,IAOhB,IAAIN,EAAO,CACVR,OAAQA,EACRe,WAAYA,EACZC,SAAUA,EACVC,UAAWA,EACRC,SAAU,GAEd,MAAM5T,EAAM,GAAG0D,kDAEf,IACC,MAAM3C,QAAiBgD,OAAe8P,EAAKpQ,KAAK4O,KAAsBrS,EAAKkT,EAAMnB,IAEjF,OADuBvS,KAAKC,MAAMsB,EAAUyR,SAiBtCrR,CAjBsCqR,MAEpCrR,GAeR,MAVG0S,EAAKpS,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,SAE1B9B,IAzCe,EAyCfA,+CAvYI0Q,GAAU7U,gKAAV6U,EAAUiC,QAAVjC,EAAU,qBAFT,SAEDA,GAAb,EAAaA,8ECbP,QASF5Z,YAAY8b,EAAkBC,EAAYC,EAAcC,EAAcC,EAAmBC,GAErFjc,KAAK4b,WAAWA,EAChB5b,KAAK6b,KAAKA,EACV7b,KAAK8b,MAAMA,EACX9b,KAAK+b,MAAMA,EACX/b,KAAKgc,WAAWA,EAChBhc,KAAKic,QAAQA,2BCAd,IAAMC,EAAb,MAAM,QAGLpc,YACSwL,EACAhC,GADAtJ,YACAA,qBAMFmc,cAAc3Q,EAAagP,EAAU,gBAAiB4B,GAC5D,IAAI3B,EAAOD,EACNA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAGT,QAAS4B,KAAO7Q,EACfiP,GAAQ4B,EAAM,IAAM7Q,EAAO6Q,GAAO,IAGnC,OAAK7Q,EAAO8Q,OACX7B,GAAQ,UAGJjP,EAAO4Q,UACX3B,GAAQ,YAAc2B,GAGhBpc,KAAKsL,KAAKQ,IAAI,GAAGP,uBAA+BkP,KAMjD8B,gBAAgB5Q,GACtB,OAAO3L,KAAKsL,KAAKQ,IAAI,GAAGP,uBAA+B,UAAYI,EAAO,SAAWJ,YAM/EiR,cAAcC,EAAmB,kBAEvC,IAEIC,EAAa,IAAIC,KACrBD,EAAaA,EAAWE,IAAI,UAAW,IACvCF,EAAaA,EAAWE,IAAI,WAAYH,GACxCC,EAAaA,EAAWE,IAAI,SAAU,UAGtC5c,KAAK6c,OAASxV,KAAKC,MAAMC,eAAeC,QAAQ,kBAChD,IAAIqS,EAAU,IAAIC,KAClB,GAAI9Z,KAAK6c,OAAQ,CAChBhD,EAAUA,EAAQiD,OAAO,aAAyB,QAAXlb,OAAKib,cAAMnb,eAAEqb,YACpDlD,EAAUA,EAAQiD,OAAO,UAAsB,QAAX/a,OAAK8a,cAAMhb,eAAEmb,QAAQlW,YAEzD,MAAMmW,EAA8B,QAAX/a,OAAK2a,cAAM7a,eAAEkb,WAAWC,KAAK,KAChDC,EAA6B,QAAX/a,OAAKwa,cAAM1a,eAAEkb,UAAUF,KAAK,KACpDtD,EAAUA,EAAQiD,OAAO,aAAcG,GACvCpD,EAAUA,EAAQiD,OAAO,YAAaM,GACtCvD,EAAUA,EAAQiD,OAAO,SAAqB,QAAXta,OAAKqa,cAAMva,eAAEgb,QAGjD,OAAOtd,KAAKsL,KAAKQ,IAAI,GAAGP,mDAAuC,CAAEsO,UAASrO,OAAQkR,IAQ5Ea,mBACN,OAAOvd,KAAKsL,KAAKQ,IAAI,GAAGP,yCAMlBiS,mBACN,OAAOxd,KAAKsL,KAAKQ,IAAI,GAAGP,sCAQlBkS,iBAAiBC,EAAgBC,GAAc,EAAOC,EAAc,iBAI1E,IAAInD,EAAO,8BAEPiD,IACHjD,GAAQ,UAAYiD,GAEjBC,IACHlD,GAAQ,gBAAkBkD,GAEvBC,IACHnD,GAAQ,QAAUmD,GAGnB5d,KAAK6c,OAASxV,KAAKC,MAAMC,eAAeC,QAAQ,kBAChD,IAAIqS,EAAU,IAAIC,KAClB,GAAI9Z,KAAK6c,OAAQ,CAChBhD,EAAUA,EAAQiD,OAAO,aAAyB,QAAX5a,OAAK2a,cAAMnb,eAAEqb,YACpDlD,EAAUA,EAAQiD,OAAO,UAAsB,QAAXza,OAAKwa,cAAMhb,eAAEmb,QAAQlW,YAEzD,MAAMmW,EAA8B,QAAXza,OAAKqa,cAAM7a,eAAEkb,WAAWC,KAAK,KAChDC,EAA6B,QAAXS,OAAKhB,cAAM1a,eAAEkb,UAAUF,KAAK,KACpDtD,EAAUA,EAAQiD,OAAO,aAAcG,GACvCpD,EAAUA,EAAQiD,OAAO,YAAaM,GACtCvD,EAAUA,EAAQiD,OAAO,SAAqB,QAAXpB,OAAKmB,cAAMva,eAAEgb,QAGjD,OAAOtd,KAAKsL,KAAKQ,IAAI,GAAGP,uBAA+BkP,IAAQ,CAAEZ,YAG5DiE,iBAAiBJ,GAAc,qCACpC,IAAIjD,EAAO,8BAEX,OAAIiD,IACHjD,GAAQ,UAAYiD,SAGR9R,OAAehK,EAAK0J,KAAKQ,IAAI,GAAGP,uBAA+BkP,MAC1E9R,KAAMyR,GACFA,GAAUA,EAAO2D,YACb3D,EAAO2D,YAEPL,GAGR3U,MACAC,IACCH,QAAQC,IAAI,UAAYE,EAAMlC,YAI3BlF,EAAK0H,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,YA7BC,EA6BDA,CAS9BkT,oBAAoBN,EAAgBX,GAAkB,qCAC3D,IAAItC,EAAO,iCAEX,OAAIiD,IACHjD,GAAQ,UAAYiD,GAEjBA,IACHjD,GAAQ,eAAiBsC,SAGbnR,OAAe7J,EAAKuJ,KAAKQ,IAAI,GAAGP,uBAA+BkP,MAC1E9R,KAAMyR,GACCA,GAEPrR,MACAC,IACCH,QAAQC,IAAI,UAAYE,EAAMlC,YAI3B/E,EAAKuH,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,YA5BwB,EA4BxBA,CAW7BmT,cAAczS,EAAa4Q,EAAiB5B,EAAU,+CAC5D,IAAIC,EAAOD,EACNA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAGT,IAAIiC,EAAyB,IAAIC,KAE7Bf,EAAqB,GACrBC,EAAe,GACfC,GAAiB,EACjBC,GAAQ,EACRC,IAAa,EACbC,GAAU,EAEd,QAASI,KAAO7Q,EACf,OAAQ6Q,OACF,aAEJT,EAAapQ,EAAO6Q,GACpB,UACI,OACJR,EAAOrQ,EAAO6Q,GACd,UACI,QACJP,EAAQtQ,EAAO6Q,GACf,UACI,QACJN,EAAQvQ,EAAO6Q,GACf,UACI,aACJL,GAAaxQ,EAAO6Q,GACpB,UACI,UACJJ,EAAUzQ,EAAO6Q,GACjB,cAEAK,EAAaA,EAAWE,IAAIP,EAAK7Q,EAAO6Q,IAI3C,MAAM6B,GAAqB,IAAIC,EAAWvC,EAAYC,GAAM,GAAO,GAAO,GAAO,GACjFa,EAAaA,EAAWE,IAAI,aAAcsB,GAAmBtC,YAC7Dc,EAAaA,EAAWE,IAAI,OAAQsB,GAAmBrC,MACvDa,EAAaA,EAAWE,IAAI,QAASsB,GAAmBpC,OACxDY,EAAaA,EAAWE,IAAI,QAASsB,GAAmBnC,OACxDW,EAAaA,EAAWE,IAAI,aAAcsB,GAAmBlC,YAC7DU,EAAaA,EAAWE,IAAI,UAAWsB,GAAmBjC,SAErDzQ,EAAO8Q,OACXI,EAAaA,EAAWE,IAAI,OAAQ,MAGhCpR,EAAO4Q,UACXM,EAAaA,EAAWE,IAAI,UAAWR,EAAQtV,aAGhD9G,KAAK6c,OAASxV,KAAKC,MAAMC,eAAeC,QAAQ,kBAChD,IAAIqS,EAAU,IAAIC,KAClB,GAAI9Z,KAAK6c,OAAQ,CAChBhD,EAAUA,EAAQiD,OAAO,aAAyB,QAAX5a,OAAK2a,cAAMnb,eAAEqb,YACpDlD,EAAUA,EAAQiD,OAAO,UAAsB,QAAXza,OAAKwa,cAAMhb,eAAEmb,QAAQlW,YAGzD,MAAMmW,EAA8B,QAAXza,OAAKqa,cAAM7a,eAAEkb,WAAWC,KAAK,KAChDC,GAA6B,QAAXS,OAAKhB,cAAM1a,eAAEkb,UAAUF,KAAK,KAOpB,KAA5BF,EAAiBmB,SACpBvE,EAAUA,EAAQiD,OAAO,aAAcG,IAET,KAA3BG,GAAgBgB,SACnBvE,EAAUA,EAAQiD,OAAO,YAAaM,KAEJ,MAApB,QAAX1B,OAAKmB,cAAMva,eAAEgb,OAAOc,UACvBvE,EAAUA,EAAQiD,OAAO,SAAqB,QAAXuB,OAAKxB,cAAMpa,eAAE6a,SAKlD,OAAOtd,KAAKsL,KAAKQ,IAAI,GAAGP,uBAA+BkP,IAAQ,CAAEZ,UAASrO,OAAQkR,IAO7E4B,gBAAgB9S,EAAagP,EAAU,iCAA+B,qCAE3E,IAAIC,EAAOD,EACNA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAET,QAAS4B,KAAO7Q,EACfiP,GAAQ4B,EAAM,IAAM7Q,EAAO6Q,GAAO,IAGnC,aAAazQ,OAAe7J,EAAKuJ,KAAKQ,IAAqB,GAAGP,uBAA+BkP,MAC3F9R,KAAKyR,GACE/S,KAAKC,MAAM8S,EAAQC,WAE1BtR,MACAC,IACCH,QAAQC,IAAI,UAAYE,EAAMlC,YAI3B/E,EAAKuH,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,YA5BwC,EA4BxCA,CAO9ByT,cAAc/S,EAAagP,EAAU,+BAA6B,qCAEvE,IAAIC,EAAOD,EACNA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAET,QAAS4B,KAAO7Q,EACfiP,GAAQ4B,EAAM,IAAM7Q,EAAO6Q,GAAO,IAGnC,aAAazQ,OAAe7J,EAAKuJ,KAAKQ,IAAS,GAAGP,uBAA+BkP,MAC/E9R,KAAKyR,GACEA,EAAQoE,WAEfzV,MACAC,IACCH,QAAQC,IAAI,UAAYE,EAAMlC,YAI3B/E,EAAKuH,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,YA5BoC,EA4BpCA,CAO7B2T,oBAAoBC,GAE1B,IAAIjE,EAAO,+BACXA,UAAQ,eAAiBiE,EAElB1e,KAAKsL,KAAKQ,IAAI,GAAGP,uBAA+BkP,KAKjDkE,gBAAgBC,GACtB,IAAInE,EAAO,gCACX,OAAImE,EAAqB,IACxBnE,GAAQ,MAAQmE,EAAmB9X,YAE7B9G,KAAKsL,KAAKQ,IAAI,GAAGP,uBAA+BkP,KAMlDoE,iBAAiBpM,EAAc+H,EAAU,kCAAgC,qCAE9E,IAAIC,EAAOD,EACX,OAAKA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAELhI,EAAO,IACVgI,GAAQ,QAAUhI,EAAK3L,kBAEX8E,OAAe7J,EAAKuJ,KAAKQ,IAAqB,GAAGP,uBAA+BkP,MAC3F9R,KAAKyR,GACE/S,KAAKC,MAAM8S,EAAQC,WAE1BtR,MACAC,IACCH,QAAQC,IAAI,UAAYE,EAAMlC,YAI3B/E,EAAKuH,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,YA3B2C,EA2B3CA,CAM9BgU,qBAAqBrM,EAAcsM,EAAgBvE,EAAU,iCAA+B,qCAEjG,IAAIC,EAAOD,EACX,OAAKA,EAAQ1S,SAAS,OACrB2S,GAAQ,KAEK,IAAVsE,IACHtE,GAAQ,UAAYsE,GAEjBtM,EAAO,IACVgI,GAAQ,SAAWhI,EAAK3L,kBAEZ8E,OAAe1J,EAAKoJ,KAAKQ,IAAqB,GAAGP,uBAA+BkP,MAC3F9R,KAAKyR,GACE/S,KAAKC,MAAM8S,EAAQC,WAE1BtR,MACAC,IACCH,QAAQC,IAAI,UAAYE,EAAMlC,YAI3B5E,EAAKoH,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,YA9B8D,EA8B9DA,CAU9BgJ,YAAY0G,EAAU,0BAAwB,qCAEnD,IAAIC,EAAOD,EAKX,aAAa5O,OAAehK,EAAK0J,KAAKQ,IAAqB,GAAGP,uBAA+BkP,MAC3F9R,KAAKyR,IACL,IAAI4E,EAAO3X,KAAKC,MAAM8S,EAAQC,UAE9B2E,SAAOA,EAAKvV,IAAIsC,IACR,CACNqJ,KAAMrJ,EAAKkT,MACXC,SAAUnT,EAAKmT,SACf7J,QAAStJ,EAAKsJ,WAIT2J,IAEPjW,MACAC,IACCH,QAAQC,IAAI,UAAYE,EAAMlC,YAI3BlF,EAAK0H,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,YAnCgB,EAmChBA,CAQ9BqU,YAAY5E,GAAc,qCAC/B,MAAMX,EAAc,CACnBC,QAAS,CACRU,OAAQA,IAKJ1S,EAAM,GAAG0D,iDAGf,aAAaK,OAAehK,EAAK0J,KAAKQ,IAAqBjE,EAAK+R,IAC9DjR,KACAyR,IACC,IAAIgF,EAAQ/X,KAAKC,MAAM8S,EAAQC,UAE/B+E,SAAQA,EAAM3V,IAAIsC,IACV,CACNsT,SAAUtT,EAAKsT,SACfC,SAAUvT,EAAKuT,SACfC,gBAAiBxT,EAAKwT,mBAIjBH,IAGRrW,MACAC,IACC,GAAIA,EAAM6B,OACT,OAAQ7B,EAAM6B,aACR,IAGJtD,eAAeqT,QACfhZ,EAAK0H,cAAcN,MAAMA,EAAM8B,SAC/B,WAEI,IAGJlJ,EAAK0H,cAAcN,MAAMA,EAAM8B,SAC/B,cAGI9B,EAAMA,MAAM4B,MAGfhJ,EAAK0H,cAAcN,MAAMA,EAAM8B,cAKlClJ,EAAK0H,cAAcN,MAAMA,EAAM8B,YArDJ,EAqDIA,+CAriBxBoR,GAAUrX,2GAAVqX,EAAUP,QAAVO,EAAU,qBAJV,SAIAA,GAAb,EAAaA,mEClBP,QAMFpc,YAAY0f,EAAYC,EAAYC,GAEhC1f,KAAKoO,SAASoR,EACdxf,KAAKuR,SAASkO,EACdzf,KAAKwS,UAAUkN,wDCIhB,IAAMC,EAAb,MAAM,QAIJ7f,YACUwL,EACA3H,EACA2F,EACAF,GAHApJ,YACAA,cACAA,qBACAA,iBAPVA,aAAkBuL,oBAUZuG,aAAa1D,EAAkBmD,EAAkBiB,GAAiB,qCAEtE,MAAMuI,EAAuB,IAAI6E,EAAexR,EAAUmD,EAAUiB,GAIpE,aAAa5G,OAAepJ,EAAK8I,KAAK4O,KAAsB,GAAG3O,2DAAoEwP,IAChIpS,KACCkX,IACE,MAAMjX,EAAWvB,KAAKC,MAAMuY,EAAQxF,UACpC9S,sBAAeyK,QAAQ,cAAe3K,KAAKsT,UAAU/R,IAC9CA,IAEVD,KAAMsF,IAIL,MAAM2L,EAAc,CAClBC,QAAS,IAAIC,KAAY,CACvBnY,SAAYsM,EAAItM,SAASmF,cAI7B,OAAO8E,OAAepJ,EAAK8I,KAAKQ,IAAqB,GAAGP,4CAAqDqO,IAAcjR,KACzHmX,IACE,MAAMlX,EAAWvB,KAAKC,MAAMwY,EAAUzF,UACtC9S,sBAAeyK,QAAQ,gBAAiB3K,KAAKsT,UAAU/R,IAEvDpG,EAAK8G,cAAcqB,QAAQ,GAAGnI,EAAK4G,UAAUiB,QAAQ,yBAAyB4D,EAAIG,YAE3EH,MAIZlF,MACCC,IAEE,GADAH,QAAQC,IAAI,UAAYE,EAAMlC,YAC1BkC,EAAM6B,OACR,OAAQ7B,EAAM6B,aACP,IACHrI,EAAKmB,OAAOoc,SAAS,CAAC,gBACtBxY,eAAeqT,QACfpY,EAAK8G,cAAcN,MAAMA,EAAMA,MAAMzF,OACrC,WAEG,IAEHf,EAAK8G,cAAcN,MAAMA,EAAMA,MAAMzF,OACrC,cAGIyF,EAAMA,MAAM4B,MACdpI,EAAK8G,cAAcN,MAAMA,EAAMA,MAAM4B,WAK3CpI,EAAK8G,cAAcN,MAAMxG,EAAK4G,UAAUiB,QAAQ,qBAzDc,EAyDd,CAS1D2V,cAEE,OAAOhgB,KAAKsL,KAAKQ,IAAqB9L,KAAKigB,QAAU,wCAIjDC,kBAAe,qCAEnB,aAAatU,OAAe7J,EAAKuJ,KAAKQ,IAAqB/J,EAAKke,QAAU,6CAA6CtX,KACrHsF,GACSA,GAETlF,MAEAC,IACE,GAAIA,EAAM6B,OACR,OAAQ7B,EAAM6B,aACP,IACH9I,EAAK4B,OAAOoc,SAAS,CAAC,UACtBxY,eAAeqT,QAEf,WAEG,IACH7Y,EAAK4B,OAAOoc,SAAS,CAAC,cAkB1Bhe,EAAK6G,SAAWI,KApCH,EAoCGA,+CAvHb2W,GAAmB9a,iKAAnB8a,EAAmBhE,QAAnBgE,EAAmB,qBAFlB,SAEDA,GAAb,EAAaA,uKCWN,IAAMQ,EAAb,MAAM,QAaLrgB,YACSsgB,EACA9W,EACAF,EACAkC,EACA+U,EACDhO,GALCrS,aACAA,qBACAA,iBACAA,YACAA,+BACDA,kBAhBDA,eAAwB,GACxBA,gBAA2B,IAAIsgB,IAAgB,IAC/CtgB,cAA4B,IAAIsgB,IAAgB,GAChDtgB,gBAAsC,IAAIsgB,IAAgB,GAC1DtgB,kBAAwC,IAAIsgB,IAAgB,GAC5DtgB,SAA+B,IAAIsgB,IAAgB,GAE1DtgB,sBAAmBuL,oBACnBvL,cAAW,GAUVogB,EAAMhY,MAAKL,QAAO3G,OAAqBoH,UAAUnE,IAChDrE,KAAKugB,WAAalc,IAGnB+b,EAAMhY,MAAKL,QAAOrF,OAAoB8F,UAAUnE,IAC/CrE,KAAKwgB,UAAYnc,EAEjBrE,KAAKygB,WAAWhW,KAAKpG,GAErBrE,KAAK0gB,SAASjW,KACbzK,KAAKwgB,UAAUG,OAAO,CAACC,EAAKC,IACpBD,EAAMC,EAAIC,IACf,IAEJ9gB,KAAK+gB,WAAWtW,KACfzK,KAAKwgB,UAAUG,OAAO,CAACC,EAAKC,IACpBD,EAAMC,EAAIG,IACf,MAUNC,iBAAiBV,SAChB,MAAMW,EAAmBlhB,KAAKmhB,mBAExBC,GAD8B,QAAnB1F,IAAW/Z,gBAAQD,eAAEoF,YACNua,SAAS,EAAG,KAC5Cd,EAAWhf,UAAY6f,EAAiBF,EACxClhB,KAAKshB,eAELthB,KAAKogB,MAAMmB,SAAS,IAAIC,KAAuB,CAAEjB,gBAG1Ce,eAIP,MAAMG,GAHkBzhB,KAAK+gB,WAAWW,YACzB1hB,KAAKugB,WAAWze,UAAY,IAEK9B,KAAK2hB,SAAW,KAG3DC,MAAMH,IAAaI,SAASJ,GAC/BzhB,KAAK8hB,IAAIrX,KAAKgX,GAGdzhB,KAAK8hB,IAAIrX,KAAK,GAKjBsX,mBAAmBC,GAClBhiB,KAAKqgB,wBAAwB4B,oBAAoBD,GACjDhiB,KAAKugB,WAAWze,SAAWkgB,EAC3BhiB,KAAKshB,eAINY,UAAUC,EAAkBrB,EAAM,GAC7B9gB,KAAKoiB,aAAaD,EAASrB,IAC9B9gB,KAAKogB,MAAMmB,SAAS,IAAIc,KAAgB,CAAEF,UAASrB,SACnD9gB,KAAKsJ,cAAcqB,QAAQ3K,KAAKoJ,UAAUiB,QAAQ,gBAGlDrK,KAAKsJ,cAAcN,MAAMhJ,KAAKoJ,UAAUiB,QAAQ,gBAOlDiY,eAAeH,GACdniB,KAAKogB,MAAMmB,SAAS,IAAIgB,IAAqB,CAAEJ,aAC/CniB,KAAKsJ,cAAcqB,QAAQ3K,KAAKoJ,UAAUiB,QAAQ,iBAKnDmY,UAAUC,GACT,IACC,IAAIN,EACJ,QAAStW,EAAI,EAAGA,EAAI4W,EAASxS,OAAQpE,IACpCsW,EAAUM,EAAS5W,GACnB7L,KAAKogB,MAAMmB,SAAS,IAAIgB,IAAqB,CAAEJ,YAGSnZ,CAHTmZ,MAExCnZ,GACRH,QAAQG,MAAM,0CAA2CA,IAO3D0Z,WAAWlC,GACVxgB,KAAKogB,MAAMmB,SAAS,IAAIoB,KAAiB,CAAEnC,eAC3CxgB,KAAKsJ,cAAcqB,QAAQ3K,KAAKoJ,UAAUiB,QAAQ,iBAKnDuY,SAAST,GACR,QAAOniB,KAAKwgB,UAAUxU,KAAKD,GAAQA,EAAKwG,IAAM4P,EAAQ5P,IAGvD6P,aAAaD,EAAkBrB,EAAM,GACpC,MAAM9U,EAAOhM,KAAKwgB,UAAUxU,KAAKD,GAAQA,EAAKwG,IAAM4P,EAAQ5P,IAM5D,OAHY,KAFZuO,EAAMla,KAAKwP,IAAI0K,EAAKqB,EAAQU,UAAY,MAGvC/B,EAAM,GAEH9U,IACkB,GAAjBmW,EAAQW,OAAeX,EAAQW,OAASX,EAAQW,MAAS9W,EAAK8U,IAAMA,GAE7DqB,EAAQU,UAAY/B,EAAMqB,EAAQU,UAAa,KAOrC,GAAjBV,EAAQW,OAAeX,EAAQW,OAASX,EAAQW,MAAQhC,GAEjDqB,EAAQU,UAAY/B,EAAMqB,EAAQU,UAAa,GAUtDE,WAAQ,qCAEb,MAAMnJ,EAAc,CACnBC,QAAS,IAAIC,KAAY,CACxB,eAAgB,mBAChBkJ,SAAYnF,EAAK0C,WAAW5e,SAASmF,aAEtCmT,oBAAoB,GAKfc,EAAO,CACZkI,QAASpF,EAAK0C,WAAWne,MACzBoe,UAAW3C,EAAK2C,UAChB0C,OAAQrF,EAAK0C,WAAWte,QACxBkhB,UAAWtF,EAAK0C,WAAWze,SAC3BS,KAAMsb,EAAK0C,WAAWhe,MAWvB,aARuBqJ,OACtBiS,EAAKvS,KAAK4O,KACT,GAAG3O,2CACHwP,EACAnB,KAxBW,EAwBXA,CAQHwJ,sBACC,MAAMC,EAAe9X,wBACf+X,EAAY/X,2BACZgY,EAAgBhY,+BAChBiY,EAASld,OAAO2L,SAASwR,SAAW,KAAOnd,OAAO2L,SAASyR,KAE3DC,EAAS,GACf,IAAIC,EAAsB,EACtBC,EAAkB,EAElBC,EAAqB,EAEzB9jB,KAAKwgB,UAAUxT,QAASyV,IAEvBoB,GAAYpB,EAASsB,MAAQ/jB,KAAKugB,WAAWze,UAAY9B,KAAK2hB,SAAY,IAG1EgC,EAAOK,KAAK,CACX5gB,KAAMqf,EAASrf,KACf6gB,YAAaxB,EAASyB,WACtBC,SAAU1B,EAAS3B,IAAIha,WACvBid,MAAOtB,EAASsB,MAAMK,QAAQ,GAC9BtC,IAAK+B,EAAQO,QAAQ,GACrBC,IAAK5B,EAASlQ,GACd+R,SAAU/Y,eAIZvL,KAAK+gB,WAAWvY,UAAW+b,IAC1BX,EAAcW,EACdT,EAAcS,EAAkBvkB,KAAKugB,WAAWze,SAAW9B,KAAK8hB,IAAI9T,QAIrE,MAAMwW,EAAU,IAAItU,KAGduU,GAAY,CACjBC,OAAQ,OACRC,MAAO,CACNC,eAAgB,UAEjBC,aAAc,CACb,CACChf,OAAQ,CACPif,MAAO,GAAGhB,EAAWM,QAAQ,KAC7BE,SAAU/Y,WACVwZ,QAAS,CACRC,SAAUpB,EAAYQ,QAAQ,GAC9BtC,IAAK9hB,KAAK8hB,IAAI9T,MAAMoW,QAAQ,GAC5BtiB,SAAU9B,KAAKugB,WAAWze,SAASsiB,QAAQ,GAC3Ca,aAAc,IACdC,kBAAmB,IACnBC,UAAW,MAGblB,YAAa,qCACbmB,OAAQ,GAAGplB,KAAKugB,WAAWhf,YAE3B8jB,gBAAiB,CAChBC,uBAAwB,0BAEzBC,gBAAiB,wBAAwBf,IACzCgB,UAAW,CACVnhB,MAAOsf,EACP8B,iBAAkB,CACjBC,eAAgB,GAAG1lB,KAAKugB,WAAWne,MAAMuQ,WAAa3S,KAAKugB,WAAWne,MAAMgB,KAAO,IAAMpD,KAAKugB,WAAWne,MAAMsQ,SAAW1S,KAAKugB,WAAWne,MAAMwQ,UAChJ+S,MAAO3lB,KAAKugB,WAAWne,MAAM4Q,QAAQA,QAErCE,KAAMlT,KAAKugB,WAAWne,MAAM4Q,QAAQE,KACpC0S,aAAc5lB,KAAKugB,WAAWne,MAAM4Q,QAAQM,QAC5CuS,YAAa7lB,KAAKugB,WAAWne,MAAM4Q,QAAQI,MAC3CpJ,MAAOhK,KAAKugB,WAAWne,MAAM4H,UAMjC8b,cAAe,mGACfC,cAAe,CACdC,WAAY,GAAGxC,KAAUjY,0BACzB0a,WAAY,GAAGzC,KAAUjY,kCAOrB2a,EAAaC,KAAK,GAAG7C,KAAaC,KAClC1J,IAAU,IAAIC,MAClB8C,IAAI,eAAgB,oBACpBA,IAAI,gBAAiB,SAASsJ,KAGhClmB,KAAKsL,KAAK4O,KAAUmJ,EAAcoB,GAAW,CAAE5K,QAASA,KAAWrR,UAAU,CAC5EiC,KAAO7B,IAEN,MAAMwd,EAAcxd,EAASyd,MAAMra,KAAKsa,IAAqB,iBAAbA,GAAKC,KAAwBrU,KAC7ElS,KAAKsJ,cAAcqB,QAAQ,SAAU3K,KAAKoJ,UAAUiB,QAAQ,kBAG5D/D,OAAO2L,SAASC,KAAOkU,GAExBpd,MAAQA,IACPhJ,KAAKsJ,cAAcN,MAAM,SAAU,GAAGhJ,KAAKoJ,UAAUiB,QAAQ,oBAAoBrB,QAM9Ewd,WAAWC,EAAeC,GAAiB,qCAChD,MAAM9M,EAAc,CACnBC,QAAS,IAAIC,KAAY,CACxB,eAAgB,mBAChBkJ,SAAY3E,EAAKkC,WAAW5e,SAASmF,aAEtCmT,oBAAoB,GAGfc,EAAO,CACZ0L,MAAOA,EACPC,UAAWA,SAEN9a,OACLyS,EAAK/S,KAAK4O,KACT,GAAG3O,wCACHwP,EACAnB,KAjB8C,EAiB9CA,CAKHuH,mBAEC,MAAMwF,EAAa,IAAIzW,KACjB0W,EAAMD,EAAKE,UAAU/f,WAAWua,SAAS,EAAG,KAC5CyF,GAASH,EAAKI,WAAa,GAAGjgB,WAAWua,SAAS,EAAG,KAM3D,MAAO,GALMsF,EAAKK,cAAclgB,aAKfggB,IAAQF,IAJXD,EAAKM,WAAWngB,WAAWua,SAAS,EAAG,OACrCsF,EAAKO,aAAapgB,WAAWua,SAAS,EAAG,OACzCsF,EAAKQ,aAAargB,WAAWua,SAAS,EAAG,MAER9Q,+CA1UtC4P,GAAWtb,qNAAXsb,EAAWxE,QAAXwE,EAAW,qBAHX,SAGAA,GAAb,EAAaA,kGCZN,IAAMiH,EAAb,MAAM,QAMLtnB,YAAoBsgB,EAA2B9W,GAA3BtJ,aAA2BA,qBAJxCA,kBAAe,GACfA,mBAAoC,IAAIsgB,IAAgB,IACxDtgB,gBAA8B,IAAIsgB,IAAiB,GAGzDF,EAAMhY,MAAKL,QAAOhF,OAAkByF,UAAUnE,IAC7CrE,KAAKqnB,aAAehjB,EACpBrE,KAAKsnB,cAAc7c,KAAKpG,GACxBrE,KAAKunB,WAAW9c,KAAKpG,EAAM4L,UAK7BuX,aAAarF,IACwD,IAAhEniB,KAAKqnB,aAAaI,UAAU1b,GAAQA,EAAKwG,KAAO4P,EAAQ5P,MAC3DvS,KAAKogB,MAAMmB,SAAS,IAAImG,KAAmB,CAAEvF,aAC7CniB,KAAKsJ,cAAcqB,QAAQ,8BAK7Bgd,kBAAkBxF,GACjBniB,KAAKogB,MAAMmB,SAAS,IAAIqG,KAAwB,CAAEzF,aAClDniB,KAAKsJ,cAAcN,MAAM,iCAI1B6e,kBACC7nB,KAAKogB,MAAMmB,SAAS,IAAIuG,KAAsB,KAI/CC,YAAY5F,GACX,QAAOniB,KAAKqnB,aAAarb,KAAKD,GAAQA,EAAKwG,IAAM4P,EAAQ5P,kDAnC9C6U,GAAcviB,2GAAduiB,EAAczL,QAAdyL,EAAc,qBAHd,SAGAA,GAAb,EAAaA,uFCAN,IAAMY,EAAb,MAAM,QAELloB,YACQwL,EACChC,EACAF,GAFDpJ,YACCA,qBACAA,iBAGTuK,aAAaoP,EAAiBsO,EAA0E,IACvG,IAAIC,EAAe,GAEnB,UAAWC,KAAexO,EAAKlM,SAC9B,GAAIkM,EAAKlM,SAAS2a,eAAeD,GAAc,CAC9C,MAAMrT,EAAU6E,EAAKlM,SAAS0a,GAE9B,GAAIrT,GAAWA,EAAQhH,QAAS,CAE/B,MAAMua,EAASvT,EAAQuT,OACvB,IAAIC,EAAQH,EAGZ,MAAMI,EAAeC,SAAStX,cAAc,qBAAqBiX,OAOjE,GANII,aAAwBE,mBAC3BH,EAAQC,EAAaG,aAAeP,GAEjCI,aAAwBI,sBAC3BL,EAAQC,EAAaG,aAAeP,GAEjCI,aAAwBK,kBAAmB,CAC9C,MAAMC,EAAgBN,EAAaM,cAGlCP,GAFqB,IAAlBO,GAEKC,EAD4BC,QAAQF,GACrBG,WAGfb,EAINE,GAAUA,EAAOY,WACpBf,GAAgB,KAAKI,UAOzB,UAAWvc,KAAQkc,EACdlc,EAAKmc,eACPA,GAAgB,KAAKnc,EAAKmc,oBAI7B,MAAoB,IAAhBA,IACHA,EAAe,GAAGloB,KAAKoJ,UAAUiB,QAAQ,uBAAuB6d,IAChEloB,KAAKsJ,cAAcN,MAAMkf,EAAcloB,KAAKoJ,UAAUiB,QAAQ,qBACvD,EAGA,CAITG,iBAAiBmP,GAChB,MAAMC,EAAc,CACnBC,QAAS,IAAIC,KAAY,CACxBC,cAAiBxO,sBACjByO,YAAezO,oBACf,eAAgB,qBAEjB0O,oBAAoB,GAGfc,EAAOpB,EAAKuP,cAElB,OAAOlpB,KAAKsL,KAAK4O,KAChB,GAAG3O,mDACHwP,EACAnB,GAIFuP,mBAAmBxP,GAClB,MAAMC,EAAc,CACnBC,QAAS,IAAIC,KAAY,CACxBC,cAAiBxO,sBACjByO,YAAezO,oBACf,eAAgB,qBAEjB0O,oBAAoB,GAGfc,EAAOpB,EAAKuP,cAElB,OAAOlpB,KAAKsL,KAAK4O,KAChB,GAAG3O,qDACHwP,EACAnB,iDAjGUoO,GAAWnjB,sIAAXmjB,EAAWrM,QAAXqM,EAAW,qBAFX,SAEAA,GAAb,EAAaA,0DCPN,IAAMrjB,EAAb,MAAM,QAuDL7E,YAAsCspB,oBAEtCC,uBACC,MAAMC,EAAiB,GACvB,CAAC,kBAAmB,uBAAuBtc,QAAQuc,IAClDD,EAAItF,QAAQwF,MAAMzjB,KAAK/F,KAAKopB,UAAUK,KAAKC,uBAAuBH,OAEnED,EAAItc,QAAQyD,GAAMzQ,KAAKopB,UAAUK,KAAKE,YAAYlZ,IAGnD/L,aAAaklB,EAA6BC,EAAY,mBAErD,IAAIC,EACAC,GAAe,EACf/pB,KAAKopB,UAAUK,KAAKC,uBAAuBG,GAAW5Z,OACzD6Z,EAAS9pB,KAAKopB,UAAUK,KAAKC,uBAAuBG,GAAW,IAE/DC,EAAS9pB,KAAKopB,UAAUY,cAAc,UACtCD,GAAe,GAEhBD,EAAOG,aAAa,QAASJ,GAC7BC,EAAOzmB,KAAOsB,EAAculB,WAC5BJ,EAAO1kB,KAAOiC,KAAKsT,UAAUiP,GACzBG,GACH/pB,KAAKopB,UAAUK,KAAKU,YAAYL,IA9E3BnlB,oBAAa,sBACbA,gBAAgB,CAAC8N,EAAe5K,EAAczE,EAAe6gB,EAAsBzY,KAEzF,MAAM4e,EAAa,CAClB,WAAY,oBACZ,QAAS3X,EACT5K,IAAKA,GAAOvB,OAAO2L,SAASC,KAC5B9O,KAAMA,GAAQ,aAOf,OAJI6gB,IACHmG,EAAWnG,YAAiBA,GAGrBxR,OACF,eACJ2X,EAAWC,aAAkB,CAC5B,QAAS,eACTC,UAAW,kBACXC,YAAa,oBAEd,UAEI,UACJ,QAASlO,KAAO7Q,EACf,OAAQ6Q,OACF,QACJ+N,EAAW3mB,MAAW,CAAC+H,EAAO6Q,IAC9B,UACI,kBACJ+N,EAAWI,gBAAqB,CAC/B,QAAS,kBACTC,YAAajf,EAAO6Q,GACpBqO,YAAalf,EAAO6Q,IAErB,cAEA+N,EAAW/N,GAAO7Q,EAAO6Q,GAG5B,cAGA,QAASA,KAAO7Q,EACf4e,EAAW/N,GAAO7Q,EAAO6Q,GAM5B,OAAO+N,yCAnDIzlB,GAAaE,qBAuDL8lB,iEAvDRhmB,EAAagX,QAAbhX,EAAa,qBAFb,SAEAA,GAAb,EAAaA,+QCEOE,wCAA2DA,4BAAGA,kDAC9DA,wCAAkEA,6BAAIA,kDACtEA,wCAA0DA,4BAAGA,kDAC7DA,wCAAmFA,qCAC1EA,iDAILA,+CAC0DA,wEAVlEA,uCACIA,0CACAA,0CACAA,0CACAA,0CAGAA,mDAEIA,iDAGJA,uEAXuCA,uEACCA,6EACDA,sEACAA,6FAGwCA,qEAGtDA,8IAKzBA,qCACIA,6FAAS+lB,EAAT,2BAASA,mBACT/lB,0CAGJA,kFALYA,iGAEKA,+GAHrBA,uCACIA,uCAMJA,qEAL4DA,wGA6BpDA,uCAAuF,aAC3DA,uDAAiDA,wEAAjDA,oJAIxBA,uCACIA,uDAA4CA,sEAA5CA,wJAEAA,uCAA+E,aACnDA,uDAA4CA,2BACpEA,wCAAwBA,uDAA4CA,wEAD5CA,qHACAA,+IAGxBA,uCAA2BA,wFAA8FA,sEAA9FA,4NAL/BA,0CAIAA,iKAJ4BA,4DAAmC,wCAHnEA,yCAEAA,iKAF4BA,sDAA2B,wCAN/DA,oCACIA,yCAIAA,yFAaJA,mGAjBgCA,6FAA2C,8EA2B/DA,qCAEoCA,iGAASgmB,EAAT,2BAASA,mBAA2BhmB,sFADnCA,oDADdA,mEAAoD,kDAYvEA,0CACmDA,sBAAeA,oFAD1DA,uCAAmB,2CACwBA,gIAK3DA,qCAAuBA,8EAASimB,EAAT,2BAASA,mBACgCjmB,8BAAKA,4FAvB7EA,oCAAyC,WAAzCA,CAAyC,WAE1BA,+BAAMA,2BACbA,uCACIA,uCAGJA,6BAGJA,uCAAiD,cAC3BA,8BAAKA,2BACvBA,uCAA2B,gBAEnBA,gFAAUkmB,EAAV,2BAAUA,gBACVlmB,2CAAyDA,uCAAaA,2BACtEA,8CAEJA,6BAGJA,sCAA+CA,iCAA4BA,oCAAUA,2BACrFA,yCAEJA,0EAlB6BA,wEAO8BA,gFAE9BA,uFAC4BA,uEAOhDA,6KAiBTA,qCAEIA,+EAASmmB,EAAT,2BAASA,aAAmBnmB,qCAAMA,wDAAgCA,0EADlEA,0KACkCA,2PAalCA,qCAAyD,UACZA,8EAASomB,EAAT,2BAASA,mBACTpmB,sBAAcA,2BAAIA,sBAAgDA,gGADxGA,gGAAqC,wDACCA,+DAAkBA,8JA5F3EA,uCAA2D,WAC7BA,sBAAkBA,2BAU5CA,yCAoBAA,uCAA6B,OACtBA,sBAAwBA,6BAG/BA,2CA2BAA,uCAAoD,YAE5CA,yDACJA,6BAGJA,wCAAiD,YACtCA,8BAAIA,2BACXA,yDAA4CA,mFAAaqmB,EAAb,0BAAaA,iBACzDrmB,6BAGJA,wCACIA,yCAIAA,wCAAoC,WAEeA,+EAASsmB,EAAT,0BAASA,mBACpDtmB,sCAAMA,uBAA+CA,iCAKjEA,wCAAoC,YAApCA,CAAoC,WAEtBA,mCAASA,2BACfA,4CAGJA,2BAEAA,wCAA0C,cACXA,gCAAMA,2BACjCA,sCAA4DA,iCACxBA,2BACpCA,sCAA2DA,iCAA4BA,2BACvFA,sCAA6DA,iCAC1BA,2BACnCA,sCAA6DA,iCAC1BA,6EAtGjBA,uEAUpBA,yFAqBCA,6EAGDA,oFA6BEA,uKAMkBA,uEAAqB,cAArBA,CAAqB,6BAKUA,yFAM7CA,uFACMA,uGAQYA,sHC3G3C,IAAMumB,GAAb,MAAM,QAmCLtrB,YACQuS,EACAgZ,EACAC,EACAC,EACArjB,EACAvE,EACA8M,GANAzQ,kBACAA,mBACAA,uBACAA,sBACAA,oBACAA,cACAA,UAzCCA,YAAS,GACTA,UAAO,GAEhBA,aAAS,EACTA,aAAO8D,+BACHC,MAAS,CACZE,MAAM,EACND,KAAK,EACLG,MAAM,EACNqnB,YAAc9S,IAAW1Y,KAAKyrB,WAAW/S,GAAG1Y,QAE7CA,oBAAiB,GACjBA,qBAAkB,GAClBA,eAAY,GACZA,gBAAa,GACbA,qBAAkB,CACjB0rB,MAAO,KACPC,UAAW,KACX5H,MAAO,KACP6H,KAAM,GACNC,UAAU,GAEX7rB,cAAW,EACXA,cAAW,MACXA,gBAAa,OACbA,kBAAe,EACfA,SAAM,EAGNA,gBAAaqH,KAAKC,MAAMC,eAAeC,QAAQ,gBAC/CxH,aAAUuL,WAcHU,UAAUC,EAAOH,GACvB,OAAKA,EACEA,EAAKwG,GADM,KAInBjO,WACCtE,KAAKqS,WAAWoL,iBAAiBzd,KAAK+e,QAAQ,GAAMvW,UAAU4R,IAC7Dpa,KAAKmiB,QAAU9a,KAAKC,MAAM8S,EAAQ+H,SAElC,IAAI2J,EAAM9rB,KAAK+rB,SACX3V,EAAMpW,KAAKgsB,SAEfhsB,KAAKisB,eAAiBjsB,KAAKmiB,QAAQ+J,SAASvL,OAAO,CAACC,EAAKC,KACxDA,EAAI+K,KAAKniB,IAAIsC,IACZ6U,EAAIoD,KAAK,CACR0H,MAAO7K,EAAI6K,MACXC,UAAW9K,EAAIsL,WACfP,KAAM7f,EAAK3I,KACX2gB,MAAOlD,EAAIkD,UAGT+H,EAAMjL,EAAIkD,QAAO+H,EAAMjL,EAAIkD,OAC3B3N,EAAMyK,EAAIkD,QAAO3N,EAAMyK,EAAIkD,OACxBnD,GACL,IAEiC,GAAhC5gB,KAAKmiB,QAAQ+J,SAASjc,SACzB6b,EAAM9rB,KAAKmiB,QAAQiK,WAChBpsB,KAAKmiB,QAAQiK,WACbpsB,KAAKmiB,QAAQ4B,MAChB3N,EAAMpW,KAAKmiB,QAAQ4B,OAGpB/jB,KAAK+rB,SAAWD,EAChB9rB,KAAKgsB,SAAW5V,EAEhBpW,KAAKqsB,WAAazlB,KAAKwJ,MAAOU,WAAW9Q,KAAKmiB,QAAQmK,SAAS,GAAGtmB,OAAOc,YAAcgK,WAAW9Q,KAAKmiB,QAAQmK,SAAS,GAAGzb,MAAM/J,YAAc,KAAS,GAAK,IAE7J9G,KAAKusB,yBAEL,IAAIC,EAAOxsB,KACXysB,IAAa,oBAAoBC,GAAG,OAAQ,WAC3CF,EAAK/gB,QAAS,MAKjBggB,WAAW/S,EAAQ8T,GAClBhE,SAAStX,cAAc,0BAA0BA,cAAc,gCAAgCyb,UAAUC,OAAO,UAChHpE,SAAStX,cAAc,0BAA0B2b,iBAAiB,yBAAyBnU,EAAE3M,KAAKG,OAAOygB,UAAUG,IAAI,UAEvHN,EAAKO,aAAerU,EAAE3M,KAAKG,MAG5B8gB,QAAQ1kB,GAEP,GADAA,EAAM8D,iBACD9D,EAAMsO,cAA8B+V,UAAUM,SAAS,gBAAiB,OAE7E,IAAIC,EAAUppB,iBAAQ9D,KAAKmiB,SACvBniB,KAAKmiB,QAAQ+J,SAASjc,OAAS,IAClCid,EAAUppB,+BACN9D,KAAKmiB,SAAO,CACf/e,KACCpD,KAAKmiB,QAAQ/e,KACb,MACApD,KAAKmtB,gBAAgBxB,UACrB,KACA3rB,KAAKmtB,gBAAgBvB,KACtB7H,MAAO/jB,KAAKmtB,gBAAgBpJ,SAI9B/jB,KAAKqrB,YAAYnJ,UAChBgL,EAAYltB,KAAK8gB,KAInBsM,cAAc9kB,GACbA,EAAM8D,iBAENpM,KAASqtB,eACRrtB,KAAK2D,OAAOoc,SAAS,CAAC,mBAEtB/f,KAAKsrB,gBAAgBgC,cAActtB,KAAKmiB,SAI1CqF,aAAalf,GACZA,EAAM8D,kBACFpM,KAAK+nB,eACT/nB,KAAKurB,eAAe/D,aAAaxnB,KAAKmiB,SAGvC4F,cACC,OAAO/nB,KAAKurB,eAAexD,YAAY/nB,KAAKmiB,SAG7CkL,eACC,OAAOrtB,KAAKsrB,gBAAgB+B,aAAartB,KAAKmiB,SAG/CoK,yBACC,IAAIgB,EAAY,IAAIvtB,KAAKisB,gBACrBjsB,KAAKmtB,gBAAgBzB,QACxB6B,EAAYvtB,KAAKisB,eAAetL,OAAO,CAACC,EAAKC,IACxC7gB,KAAKmtB,gBAAgBzB,QAAU7K,EAAI6K,MAC/B9K,EAED,IAAIA,EAAKC,GACd,KAGJ7gB,KAAKwtB,UAAYD,EAAU5M,OAAO,CAACC,EAAKC,KACc,IAAjDD,EAAI6G,UAAU1b,GAAQA,EAAK6f,MAAQ/K,EAAI+K,MACnChL,EACD,IAAIA,EAAKC,GACd,IAEH0M,EAAY,IAAIvtB,KAAKisB,gBACjBjsB,KAAKmtB,gBAAgBvB,OACxB2B,EAAYvtB,KAAKisB,eAAetL,OAAO,CAACC,EAAKC,IACxC7gB,KAAKmtB,gBAAgBvB,OAAS/K,EAAI+K,KAC9BhL,EAED,IAAIA,EAAKC,GACd,KAGJ7gB,KAAKytB,WAAaztB,KAAKmiB,QAAQ+J,SAASvL,OAAO,CAACC,EAAKC,KAEK,GAAxD0M,EAAU9F,UAAU1b,GAAQA,EAAK2f,OAAS7K,EAAI6K,OAEvC,IACH9K,EACH,CACC8K,MAAO7K,EAAI6K,MACXC,UAAW9K,EAAIsL,WACfpI,MAAOlD,EAAIkD,MACX8H,UAAU,IAIN,IACHjL,EACH,CACC8K,MAAO7K,EAAI6K,MACXC,UAAW9K,EAAIsL,WACfpI,MAAOlD,EAAIkD,MACX8H,UAAU,IAGV,IAEH,IAAI6B,EAAS1tB,KAAKyQ,GAAGvK,cAAcgL,cAAc,oBAC7Cwc,IACC1tB,KAAKmtB,gBAAgBzB,OAAuC,KAA9B1rB,KAAKmtB,gBAAgBvB,KACtD+B,EAAED,GAAQE,YAEVD,EAAED,GAAQG,WAKbC,YAAYxlB,EAAcyD,GACzBzD,EAAM8D,iBAGLpM,KAAKmtB,gBAAerpB,+BAChB9D,KAAKmtB,iBAFVY,EAASrC,OAAS1rB,KAAKmtB,gBAAgBzB,MAEd,CACvBA,MAAO,KACPC,UAAW,KACX5H,MAAOhY,EAAKgY,OAIW,CACvB2H,MAAO3f,EAAK2f,MACZC,UAAW5f,EAAK4f,UAChB5H,MAAOhY,EAAKgY,QAId/jB,KAAKusB,yBAGNyB,WAAW1lB,GACuB,QAA7BtI,KAAKmtB,gBAAgBvB,OACxB5rB,KAAKmtB,gBAAerpB,+BAAQ9D,KAAKmtB,iBAAe,CAAEvB,KAAM,MAGxD5rB,KAAKmtB,gBADuB,IAA7BQ,EAAMrlB,EAAMuQ,QAAQoV,MACCnqB,+BAAQ9D,KAAKmtB,iBAAe,CAAEvB,KAAM,KAEpC9nB,+BAAQ9D,KAAKmtB,iBAAe,CAAEvB,KAAM+B,EAAErlB,EAAMuQ,QAAQoV,QAGzEjuB,KAAKusB,yBAGN2B,YAAYhY,GACXlW,KAAK8gB,IAAM5K,EAGXlW,KAAKqS,WAAWoL,iBAAiBzd,KAAKmiB,QAAQ5P,IAAI,EAAO2D,GAAS1N,UAAU4R,IAC7D,MAAVA,IACHpa,KAAKmiB,QAAU/H,EAAQ+H,QAEa,GAAhCniB,KAAKmiB,QAAQ+J,SAASjc,SACzBjQ,KAAK+rB,SAAW/rB,KAAKmiB,QAAQiK,WAC1BpsB,KAAKmiB,QAAQiK,WACbpsB,KAAKmiB,QAAQ4B,MACf/jB,KAAKgsB,SAAWhsB,KAAKmiB,QAAQ4B,UAQlCoK,iBACCnuB,KAAKmtB,gBAAerpB,+BAChB9D,KAAKmtB,iBAAe,CACvBzB,MAAO,KACPC,UAAW,KACXC,KAAM,KAEP5rB,KAAKusB,yBAGN6B,iBACC,IAAIC,EAAQ7F,SAAStX,cAAc,oBAC/Bmd,GACHA,EAAMC,QAGRC,YAAYC,EAAe3iB,EAAI,GAC9B7L,KAAK+sB,aAAelhB,EACpB7L,KAAKyuB,aAAa3oB,GAAG+F,GACrB2iB,EAAOpiB,+DA1RIgf,GAAkBvmB,iTAAlBumB,EAAkBtmB,gvGDvB/BD,sCAAqF,cACrBA,iDAASmC,qBAAkBnC,6BAACA,2BAExFA,sCAAwD,UAAxDA,CAAwD,WAG5CA,iCACAA,yCAcAA,yCAQJA,2BACAA,sCAAuD,WAAvDA,CAAuD,aAG3CA,mCACJA,2BACAA,wCACIA,mCACJA,6BAGJA,6CA2GJA,wCA/IiDA,sGAGGA,kEAcaA,kEAmBjBA,mPCjB/CumB,GAAb,6FCdoBvmB,qCAEIA,6FAAS6pB,EAAT,2BAASA,mBACT7pB,0CAGJA,kFALIA,uHAEaA,oFAAkC,mDALvDA,uCAEIA,wCAOJA,qEAL4DA,sGAQxDA,wCAA2DA,4BAAGA,mDAC9DA,wCAAkEA,6BAAIA,mDACtEA,wCAA0DA,4BAAGA,mDAC7DA,wCAAmFA,qCAC1EA,kDAILA,+CAC0DA,wEAXlEA,uCAEIA,2CACAA,2CACAA,2CACAA,2CAGAA,mDAEIA,kDAGJA,uEAXuCA,uEACCA,6EACDA,sEACAA,6FAGwCA,qEAGtDA,yGA2BrBA,uCAAuF,aAC3DA,uDAAiDA,wEAAjDA,qJAIxBA,uCACIA,uDAA2CA,sEAA3CA,wJAEAA,uCAA+E,aACnDA,uDAA4CA,2BACpEA,wCAAwBA,uDAA4CA,wEAD5CA,qHACAA,gJAGxBA,uCAA2BA,wFAA2FA,sEAA3FA,6NAL/BA,0CAIAA,kKAJ4BA,4DAAmC,yCAHnEA,0CAEAA,kKAF4BA,sDAA2B,yCAN/DA,oCACIA,0CAIAA,0FAaJA,mGAjBgCA,6FAA2C,+EA2B/DA,qCAEoCA,iGAASgmB,EAAT,2BAASA,mBAA2BhmB,sFADnCA,oDADdA,mEAAoD,kDAYvEA,0CACmDA,sBAAeA,oFAD1DA,uCAAmB,2CACwBA,gIAK3DA,qCAAuBA,8EAASimB,EAAT,2BAASA,mBACgCjmB,8BAAKA,4FAvB7EA,oCAAyC,WAAzCA,CAAyC,WAE1BA,+BAAMA,2BACbA,uCACIA,wCAGJA,6BAGJA,uCAAiD,cAC3BA,8BAAKA,2BACvBA,uCAA2B,gBAEnBA,gFAAUkmB,EAAV,2BAAUA,gBACVlmB,2CAAyDA,uCAAaA,2BACtEA,8CAEJA,6BAGJA,sCAA+CA,iCAA4BA,oCAAUA,2BACrFA,yCAEJA,0EAlB6BA,wEAO8BA,gFAE9BA,uFAC4BA,uEAOhDA,6KAiBTA,qCAEIA,+EAASmmB,EAAT,2BAASA,aAAmBnmB,qCAAMA,wDAAgCA,0EADlEA,0KACkCA,2PAalCA,qCAAyD,UACZA,8EAASomB,EAAT,2BAASA,mBACTpmB,sBAAcA,2BAAIA,sBAAgDA,gGADxGA,gGAAqC,wDACCA,+DAAkBA,8JA5F3EA,uCAA6C,WACfA,sBAAkBA,2BAU5CA,0CAoBAA,uCAA6B,OACtBA,sBAAwBA,6BAG/BA,2CA2BAA,uCAAoD,YAE5CA,yDACJA,6BAGJA,wCAAiD,YACtCA,8BAAIA,2BACXA,yDAA4CA,mFAAaqmB,EAAb,0BAAaA,iBACzDrmB,6BAGJA,wCACIA,yCAIAA,wCAAoC,WAEeA,+EAASsmB,EAAT,0BAASA,mBACpDtmB,sCAAMA,uBAA+CA,iCAKjEA,wCAAoC,YAApCA,CAAoC,WAEtBA,mCAASA,2BACfA,4CAGJA,2BAEAA,wCAA0C,cACXA,gCAAMA,2BACjCA,sCAA4DA,iCACxBA,2BACpCA,sCAA2DA,iCAA4BA,2BACvFA,sCAA6DA,iCAC1BA,2BACnCA,sCAA6DA,iCAC1BA,6EAtGjBA,uEAUpBA,yFAqBCA,6EAGDA,oFA6BEA,uKAMkBA,uEAAqB,cAArBA,CAAqB,6BAKUA,yFAM7CA,uFACMA,uGAQYA,sHC9G3C,IAAM8pB,GAAb,MAAM,QAmCL7uB,YACQuS,EACAgZ,EACAC,EACAC,EACArjB,EACAvE,EACA8M,GANAzQ,kBACAA,mBACAA,uBACAA,sBACAA,oBACAA,cACAA,UAzCCA,YAAS,GACTA,UAAO,GAEhBA,aAAS,EACTA,aAAO8D,+BACHC,MAAS,CACZE,MAAM,EACND,KAAK,EACLG,MAAM,EACNqnB,YAAc9S,IAAW1Y,KAAKyrB,WAAW/S,GAAG1Y,QAE7CA,oBAAiB,GACjBA,qBAAkB,GAClBA,eAAY,GACZA,gBAAa,GACbA,qBAAkB,CACjB0rB,MAAO,KACPC,UAAW,KACX5H,MAAO,KACP6H,KAAM,GACNC,UAAU,GAEX7rB,cAAW,EACXA,cAAW,MACXA,gBAAa,OACbA,kBAAe,EACfA,SAAM,EAGNA,gBAAaqH,KAAKC,MAAMC,eAAeC,QAAQ,gBAC/CxH,aAAUuL,WAcHU,UAAUC,EAAOH,GACvB,OAAKA,EACEA,EAAKwG,GADM,KAInBjO,WACCtE,KAAKqS,WAAWoL,iBAAiBzd,KAAK+e,QAAQ,GAAMvW,UAAU4R,IAC7Dpa,KAAKmiB,QAAU/H,EAAO+H,QAEtB,IAAI2J,EAAM9rB,KAAK+rB,SACX3V,EAAMpW,KAAKgsB,SAEfhsB,KAAKisB,eAAiBjsB,KAAKmiB,QAAQ+J,SAASvL,OAAO,CAACC,EAAKC,KACxDA,EAAI+K,KAAKniB,IAAIsC,IACZ6U,EAAIoD,KAAK,CACR0H,MAAO7K,EAAI6K,MACXC,UAAW9K,EAAIsL,WACfP,KAAM7f,EAAK3I,KACX2gB,MAAOlD,EAAIkD,UAGT+H,EAAMjL,EAAIkD,QAAO+H,EAAMjL,EAAIkD,OAC3B3N,EAAMyK,EAAIkD,QAAO3N,EAAMyK,EAAIkD,OACxBnD,GACL,IAEiC,GAAhC5gB,KAAKmiB,QAAQ+J,SAASjc,SACzB6b,EAAM9rB,KAAKmiB,QAAQiK,WAChBpsB,KAAKmiB,QAAQiK,WACbpsB,KAAKmiB,QAAQ4B,MAChB3N,EAAMpW,KAAKmiB,QAAQ4B,OAGpB/jB,KAAK+rB,SAAWD,EAChB9rB,KAAKgsB,SAAW5V,EAEhBpW,KAAKqsB,WAAazlB,KAAKwJ,MAAOU,WAAW9Q,KAAKmiB,QAAQmK,SAAS,GAAGtmB,OAAOc,YAAcgK,WAAW9Q,KAAKmiB,QAAQmK,SAAS,GAAGzb,MAAM/J,YAAc,KAAS,GAAK,IAE7J9G,KAAKusB,yBAEL,IAAIC,EAAOxsB,KACXysB,IAAa,oBAAoBC,GAAG,OAAQ,WAC3CF,EAAK/gB,QAAS,MAKjBggB,WAAW/S,EAAQ8T,GAClBhE,SAAStX,cAAc,0BAA0BA,cAAc,gCAAgCyb,UAAUC,OAAO,UAChHpE,SAAStX,cAAc,0BAA0B2b,iBAAiB,yBAAyBnU,EAAE3M,KAAKG,OAAOygB,UAAUG,IAAI,UAEvHN,EAAKO,aAAerU,EAAE3M,KAAKG,MAG5B8gB,QAAQ1kB,GAEP,GADAA,EAAM8D,iBACD9D,EAAMsO,cAA8B+V,UAAUM,SAAS,gBAAiB,OAE7E,IAAIC,EAAUppB,iBAAQ9D,KAAKmiB,SACvBniB,KAAKmiB,QAAQ+J,SAASjc,OAAS,IAClCid,EAAUppB,+BACN9D,KAAKmiB,SAAO,CACf/e,KACCpD,KAAKmiB,QAAQ/e,KACb,MACApD,KAAKmtB,gBAAgBxB,UACrB,KACA3rB,KAAKmtB,gBAAgBvB,KACtB7H,MAAO/jB,KAAKmtB,gBAAgBpJ,SAI9B/jB,KAAKqrB,YAAYnJ,UAChBgL,EAAYltB,KAAK8gB,KAInBsM,cAAc9kB,GACbA,EAAM8D,iBAENpM,KAASqtB,eACRrtB,KAAK2D,OAAOoc,SAAS,CAAC,mBAEtB/f,KAAKsrB,gBAAgBgC,cAActtB,KAAKmiB,SAI1CqF,aAAalf,GACZA,EAAM8D,kBACFpM,KAAK+nB,eACT/nB,KAAKurB,eAAe/D,aAAaxnB,KAAKmiB,SAGvC4F,cACC,OAAO/nB,KAAKurB,eAAexD,YAAY/nB,KAAKmiB,SAG7CkL,eACC,OAAOrtB,KAAKsrB,gBAAgB+B,aAAartB,KAAKmiB,SAG/CoK,yBACC,IAAIgB,EAAY,IAAIvtB,KAAKisB,gBACrBjsB,KAAKmtB,gBAAgBzB,QACxB6B,EAAYvtB,KAAKisB,eAAetL,OAAO,CAACC,EAAKC,IACxC7gB,KAAKmtB,gBAAgBzB,QAAU7K,EAAI6K,MAC/B9K,EAED,IAAIA,EAAKC,GACd,KAGJ7gB,KAAKwtB,UAAYD,EAAU5M,OAAO,CAACC,EAAKC,KACc,IAAjDD,EAAI6G,UAAU1b,GAAQA,EAAK6f,MAAQ/K,EAAI+K,MACnChL,EACD,IAAIA,EAAKC,GACd,IAEH0M,EAAY,IAAIvtB,KAAKisB,gBACjBjsB,KAAKmtB,gBAAgBvB,OACxB2B,EAAYvtB,KAAKisB,eAAetL,OAAO,CAACC,EAAKC,IACxC7gB,KAAKmtB,gBAAgBvB,OAAS/K,EAAI+K,KAC9BhL,EAED,IAAIA,EAAKC,GACd,KAGJ7gB,KAAKytB,WAAaztB,KAAKmiB,QAAQ+J,SAASvL,OAAO,CAACC,EAAKC,KAEK,GAAxD0M,EAAU9F,UAAU1b,GAAQA,EAAK2f,OAAS7K,EAAI6K,OAEvC,IACH9K,EACH,CACC8K,MAAO7K,EAAI6K,MACXC,UAAW9K,EAAIsL,WACfpI,MAAOlD,EAAIkD,MACX8H,UAAU,IAIN,IACHjL,EACH,CACC8K,MAAO7K,EAAI6K,MACXC,UAAW9K,EAAIsL,WACfpI,MAAOlD,EAAIkD,MACX8H,UAAU,IAGV,IAEH,IAAI6B,EAAS1tB,KAAKyQ,GAAGvK,cAAcgL,cAAc,oBAC7Cwc,IACC1tB,KAAKmtB,gBAAgBzB,OAAuC,KAA9B1rB,KAAKmtB,gBAAgBvB,KACtD+B,EAAED,GAAQE,YAEVD,EAAED,GAAQG,WAKbC,YAAYxlB,EAAcyD,GACzBzD,EAAM8D,iBAGLpM,KAAKmtB,gBAAerpB,+BAChB9D,KAAKmtB,iBAFVY,EAASrC,OAAS1rB,KAAKmtB,gBAAgBzB,MAEd,CACvBA,MAAO,KACPC,UAAW,KACX5H,MAAOhY,EAAKgY,OAIW,CACvB2H,MAAO3f,EAAK2f,MACZC,UAAW5f,EAAK4f,UAChB5H,MAAOhY,EAAKgY,QAId/jB,KAAKusB,yBAGNyB,WAAW1lB,GACuB,QAA7BtI,KAAKmtB,gBAAgBvB,OACxB5rB,KAAKmtB,gBAAerpB,+BAAQ9D,KAAKmtB,iBAAe,CAAEvB,KAAM,MAGxD5rB,KAAKmtB,gBADuB,IAA7BQ,EAAMrlB,EAAMuQ,QAAQoV,MACCnqB,+BAAQ9D,KAAKmtB,iBAAe,CAAEvB,KAAM,KAEpC9nB,+BAAQ9D,KAAKmtB,iBAAe,CAAEvB,KAAM+B,EAAErlB,EAAMuQ,QAAQoV,QAGzEjuB,KAAKusB,yBAGN2B,YAAYhY,GACXlW,KAAK8gB,IAAM5K,EAIXlW,KAAKqS,WAAWoL,iBAAiBzd,KAAKmiB,QAAQ5P,IAAI,EAAO2D,GAAS1N,UAAU4R,IAC7D,MAAVA,IACHpa,KAAKmiB,QAAU/H,EAAQ+H,QAEa,GAAhCniB,KAAKmiB,QAAQ+J,SAASjc,SACzBjQ,KAAK+rB,SAAW/rB,KAAKmiB,QAAQiK,WAC1BpsB,KAAKmiB,QAAQiK,WACbpsB,KAAKmiB,QAAQ4B,MACf/jB,KAAKgsB,SAAWhsB,KAAKmiB,QAAQ4B,UAOlCoK,iBACCnuB,KAAKmtB,gBAAerpB,+BAChB9D,KAAKmtB,iBAAe,CACvBzB,MAAO,KACPC,UAAW,KACXC,KAAM,KAEP5rB,KAAKusB,yBAGN6B,iBACC,IAAIC,EAAQ7F,SAAStX,cAAc,oBAC/Bmd,GACHA,EAAMC,QAGRC,YAAYC,EAAe3iB,EAAI,GAC9B7L,KAAK+sB,aAAelhB,EACpB7L,KAAKyuB,aAAa3oB,GAAG+F,GACrB2iB,EAAOpiB,+DA1RIuiB,GAAqB9pB,iTAArB8pB,EAAqB7pB,shHDvBlCD,sCAAmG,cACnCA,iDAASmC,qBAAkBnC,6BAACA,2BAExFA,sCAA6C,UAA7CA,CAA6C,WAGjCA,iCACAA,yCAUAA,yCAeJA,2BACAA,sCAAoE,WAApEA,CAAoE,aAGxDA,mCACJA,2BACAA,wCACIA,mCACJA,6BAGJA,6CA2GJA,wCAlJiDA,sGAIbA,kEAU3BA,kEAyByBA,2MCpBjC8pB,GAAb,kBCVO,IAAMC,GAAb,MAAM,QAIL9uB,YAAsBuL,uBAFtBrL,iBAAa,EAIbsE,WAAQ,CAGRuqB,cACC7uB,KAAK8uB,YAAc9uB,KAAK8uB,WAGzBC,aACC/uB,KAAKqL,aAAa2jB,UAClBhvB,KAAK8uB,YAAcG,QAAY,kBAAkB1jB,WAAoB,OAAQ,CAAE2jB,QAAS,kDAf7EN,GAAwB/pB,uFAAxB+pB,EAAwB9pB,otCCbrCD,sCAAoF,UAApFA,CAAoF,UAApFA,CAAoF,UAApFA,CAAoF,UAApFA,CAAoF,UAApFA,CAAoF,WAOxDA,iCAEAA,qCAAyBA,6BAAIA,sCAAMA,4BAAEA,wCAA+BA,2BAACA,6BAAeA,8BAAGA,2BACvFA,mCAAGA,4HACUA,2BACbA,yCAAiB,aAETA,qCAEAA,wCAAgC,eAAhCA,CAAgC,WACYA,4BAAEA,mCAKtDA,wCAAsD,eAE9CA,iDAASmC,kBADbnC,2BAEAA,0CAA4DA,sDACnDA,iCAKrBA,wCACIA,2CAEJA,+BAIRA,2CAA4DA,iDAASmC,iBAAcnC,sCAAMA,8BAACA,kFDzBzF+pB,GAAb,mDEFwB/pB,oDAAkBA,2EASVA,uCACIA,wDACJA,kCADIA,mIAKRA,uCACIA,wDACJA,kCADIA,sIAkBAA,uCACIA,wDACJA,kCADIA,2IAYJA,uCACIA,wDACJA,kCADIA,+KA1CZA,wCAA8BA,+EAAUsqB,EAAV,0BAAUA,aACpCtqB,sEAEIA,0CAIJA,sEAEAA,0CAIAA,uCAAyB,cAAzBA,CAAyB,UAEXA,6FAA2CA,2BACjDA,iCACJA,2BAEAA,wCAAmD,eAK3CA,+EAAUqG,EAAV,0BAAUA,cAAc,YAAWF,8DAJvCnG,2BAKAA,0CACIA,0DAAwCA,6BAEhDA,2CAIAA,wCAAmD,eAK3CA,+EAAUuqB,EAAV,0BAAUA,cAAc,YAAWpkB,8DAJvCnG,2BAKAA,0CACGA,0DAAmCA,6BAE1CA,2CAGJA,6BAGJA,wCAAgC,WACLA,yCAAeA,2BACtCA,wCAAiB,YAAjBA,CAAiB,WAGLA,iCACAA,6CACJA,6BAEJA,wCAAsB,WAEdA,iCACAA,+CACJA,6EA5DNA,gDAEEA,yGACMA,mNAKNA,4GACEA,sHAMQA,qIAQFA,sHAGAA,uHAEFA,sHAQEA,iHAGDA,kHAEDA,uHC7C/B,IAAMwqB,GAAb,MAAM,QAILvvB,YACSqJ,EACAxF,EACAuE,GAFAlI,mBACAA,cACAA,oBALTA,gBAAqB,EAQnBA,KAAKsvB,UAAYtvB,KAAKmJ,YAAYU,MAAM,CACvCE,MAAO,CAAC,GAAI,CAAE+I,WAAY,CAAChJ,cAAqBA,aAAmBhJ,UACnEyQ,SAAU,CAAC,GAAIzH,eACfK,SAAU,EAAC,GACXC,SAAU,EAAC,KAKVmJ,QAAM,OAAOvT,KAAKsvB,UAAU7hB,SAEhCnJ,WAAQ,CAIFkR,WAAQ,qCAEb,GADA3J,EAAKd,WAAY,EACbc,EAAKyjB,UAAUxhB,QAClB,OAED,MAAMjG,EAAM,yBAAyBgE,EAAK0H,EAAExJ,MAASiE,QACrDnC,EAAK3D,aAAayL,YAAY9H,EAAKyjB,UAAUxjB,IAAI,YAAYkC,OAE7DnC,EAAKlI,OAAO+D,cAAcG,IARb,EAQaA,CAI3BknB,aACC,IAAIV,EAAQ7F,SAAStX,cAAc,gBAC/Bmd,GACHA,EAAMC,sDAxCIe,GAAmBxqB,6JAAnBwqB,EAAmBvqB,wxCDbhCD,sCAAwB,cACgBA,iDAASmC,iBACzCnC,uCAAyBA,+BAA0BA,6BAGvDA,sCAAsB,UAAtBA,CAAsB,WAAtBA,CAAsB,SAAtBA,CAAsB,SAIQA,0DAAoCA,2BAClDA,mDAGJA,2BACAA,sCAAe,UACGA,0DAAsCA,2BACpDA,qDAkEJA,6BAEJA,mCACJA,wEA5E0BA,2GAMAA,4GAqEjBA,wMCvEJwqB,GAAb,iBCHO,IAAME,GAAb,MAAM,QAILzvB,YACSuL,EACDnE,GADClH,oBACDA,iBAJCA,SAAM,GAOfsE,WAAQ,CAGRyqB,aACC/uB,KAAKqL,aAAa2jB,wDAbPO,GAAmB1qB,sIAAnB0qB,EAAmBzqB,uQCVhCD,sCACIA,oCACAA,yCAAoCA,iDAASmC,iBACzCnC,qCAAMA,+BAA0BA,sCAFTA,yKDSlB0qB,GAAb,kBEHO,IAAMC,GAAb,MAAM,QAGJ1vB,YACS2vB,EACyB7sB,GADzB5C,iBACyBA,YAElCsE,WAAQ,+CAPGkrB,GAAsB3qB,mEAKvB6qB,yDALCF,EAAsB1qB,kPCPnCD,qCAAqBA,sBAAgBA,2BACrCA,mDAAoBA,sBAAkBA,2BACtCA,qDAAgC,cACsBA,gCAAOA,2BAC3DA,yCAA0DA,iCAAQA,oCAJ/CA,qEACDA,uEAGCA,gIDGR2qB,GAAb,GEEaG,GAAb,MAAM,QAGJ7vB,YACkC8C,eAElC0B,WAAQ,+CANGqrB,GAAoB9qB,8BAIrB6qB,yDAJCC,EAAoB7qB,kKCTjCD,mDAAoBA,sBAAkBA,2BACtCA,qDAAgC,cACsBA,+BAAMA,oCAFxCA,sHDSP8qB,GAAb,kBEDO,IAAMC,GAAb,MAAM,QAGJ9vB,YACU+vB,EAC2BjtB,GAD3B5C,gBAC2BA,YAErCsE,WAAQ,CAGR0qB,UACEhvB,KAAK6vB,SAASb,wDAXLY,GAAiB/qB,mEAKlBirB,yDALCF,EAAiB9qB,oMCR9BD,sCAAwB,cACgBA,iDAASmC,cACzCnC,uCAAyBA,+BAA0BA,6BAEvDA,8BAAI,OAAJA,CAAI,WAERA,kCADSA,uHDGI+qB,GAAb,kBEkBO,IAAMG,EAAb,MAAM,QAkFLjwB,YACSuL,EACA1H,EACA2H,EACA0kB,EACAH,GA9EK,MA0EL7vB,oBACAA,cACAA,YACAA,cACAA,gBAtFTA,cAAW,GAIHA,kBAAgC,CACvCiwB,UAAU,EACVrE,KAAM,KACNsE,YAAa,mBACbC,eAAaC,UAAE,kBACd,OAA8B,QAA9BC,WAASnf,cAAc,eAAOxP,SAAEirB,UAAUC,OAAO,oBAE3C,IAAI0D,QAASC,KAClBC,WAAW,KACVD,GAAQ,YACN,OAGH/H,SAAStX,cAAc,SAAyBuf,MAAM,CAAEC,eAAe,KAEjE,IAXK,6CAeN1wB,kBAAgC,CACvCiwB,UAAU,EACVrE,KAAM,KACNsE,YAAa,cACbC,cAAa,yBAAE,kBACd,OAA8B,QAA9BE,WAASnf,cAAc,eAAOxP,SAAEirB,UAAUC,OAAO,oBAE3C,IAAI0D,QAASC,KAClBC,WAAW,KACVD,GAAQ,YACN,OAGH/H,SAAStX,cAAc,SAAyBuf,MAAM,CAAEC,eAAe,KAEjE,IAXK,sDAeN1wB,kBAAgC,CACvCiwB,UAAU,EACVrE,KAAM,KACN+E,YAAY,EACZT,YAAa,WACbC,cAAa,yBAAE,kBACd,OAA8B,QAA9BE,WAASnf,cAAc,eAAOxP,SAAEirB,UAAUC,OAAO,oBAE3C,IAAI0D,QAASC,KAClBC,WAAW,KACVD,GAAQ,YACN,OAGH/H,SAAStX,cAAc,SAAyBuf,MAAM,CAAEC,eAAe,KAEjE,IAXK,sDAeN1wB,kBAAgC,CACvCiwB,UAAU,EACVrE,KAAM,KACNuE,cAAa,yBAAE,kBACd,OAA8B,QAA9BE,WAASnf,cAAc,eAAOxP,SAAEirB,UAAUC,OAAO,oBAE3C,IAAI0D,QAASC,KAClBC,WAAW,KACVD,GAAQ,YACN,OAIH/H,SAAStX,cAAc,SAAyBuf,MAAM,CAAEC,eAAe,KAEjE,IAZK,sDAwBdE,iBACK5wB,KAAKwG,OAAOF,OAAOuqB,aAAa7wB,KAAKwG,OACpCyoB,QAAW,kBAAkB1jB,cACjCvL,KAAKwG,MAAQF,OAAOkqB,WAAW,KAC9BxwB,KAAKqL,aAAaylB,aACjBtI,SAAStX,cAAc,SAAyBuf,MAAM,CAAEC,eAAe,IAExEF,WAAW,KACc,MAApBxwB,KAAK2D,OAAOkE,MAAgB2gB,SAAStX,cAAc,sBACtDlR,KAAKqL,aAAa0lB,KACjBnC,GACA5uB,KAAKgxB,eAGL,MACD,MAKLC,iBACEzI,SAAStX,cAAc,SAAyBuf,MAAM,CAAEC,eAAe,IACxE1wB,KAAKqL,aAAa0lB,KACjB1B,GACArvB,KAAKkxB,cAMP7kB,eAAexE,EAAc,IACX7H,KAAKqL,aAAa0lB,KAAKxB,GAAqBvvB,KAAKmxB,cACzDC,kBAAkBvpB,IAAMA,EAM3BwpB,cAAclP,GACnBqG,SAAStX,cAAc,SAAyBuf,MAAM,CAAEC,eAAe,IAEvD1wB,KAAKqL,aAAa0lB,KAClC3F,GAAkBtnB,+BAEd9D,KAAKsxB,cAAY,CACpBpB,YAAa,qBAINkB,kBAAkBzlB,KAAOwW,EAAQxW,KAMpC4lB,iBAAiBpP,GACtBqG,SAAStX,cAAc,SAAyBuf,MAAM,CAAEC,eAAe,IAEvD1wB,KAAKqL,aAAa0lB,KAClCpC,GAAqB7qB,+BAEjB9D,KAAKsxB,cAAY,CACpBpB,YAAa,qBAINkB,kBAAkBzlB,KAAOwW,EAAQxW,KAK3C6lB,oBACmBxxB,KAAKgwB,OAAOe,KAAKvB,GAAwB,CAC1D3e,MAAO,QACPjO,KAAM,CACLW,MAAO,kBACPuH,QAAS,iDAID2mB,cAAcjpB,UAAU4R,MAAS,CAU5CsX,gBAAgB5mB,EAAiB+F,EAAgB,SAChD7Q,KAAKgwB,OAAOe,KAAKpB,GAAsB,CACtC9e,MAAOA,EACPjO,KAAM,CAAEkI,aAIV6mB,aAAa7mB,EAAiB8mB,EAAoB,KACjD5xB,KAAK6vB,SAASgC,kBAAkBjC,GAAmB,CAClDkC,SAAU,IACVC,iBAAkB,MAClBnvB,KAAM,CAAEkI,WACRknB,WAAY,CAACJ,mDAhMH7B,GAAYlrB,gMAAZkrB,EAAYpU,QAAZoU,EAAY,qBAHZ,SAGAA,GAAb,EAAaA,6ECjBN,IAAMkC,EAAb,MAAM,QAOJnyB,YACQwJ,EACAF,GADApJ,qBACAA,iBARAA,6BAAmD,IAAIsgB,IAAwB,GAWvFtgB,mBAA0E,GAElEA,sBAAkD,CACxDkyB,IAAO,GACPC,KAAQ,GACRC,OAAU,GACVC,IAAO,GACPC,OAAU,IAhBRC,wBACF,OAAOvyB,KAAKwyB,wBAAwBC,eAkBtCC,cAAcC,GACZ,IAAIC,EAA0B,EAC9B,MAAMC,EAAgBF,EAAQG,cAE9B,GAAI9yB,KAAK+yB,iBAAiB3K,eAAeyK,GACvCD,EAAmB5yB,KAAK+yB,iBAAiBF,OACpC,CAEL,MAAMG,EAAc,CAClBb,KAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACnDC,OAAU,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,OAC9CC,IAAO,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,QAG7C,UAAWY,KAAUD,EACfA,EAAYC,GAAQnrB,SAAS+qB,KAC/BD,EAAmB5yB,KAAK+yB,iBAAiBE,IAK/C,OAAuB,IAAnBL,IACFA,EAAmBhsB,KAAKwP,OAAOtS,OAAOovB,OAAOlzB,KAAK+yB,mBAClD/yB,KAAKsJ,cAAcN,MAAM,oCAAoC6pB,IAAiB,oCAGhF7yB,KAAKiiB,oBAAoB2Q,GAElBA,EAGT3Q,oBAAoBkR,GAClBnzB,KAAKwyB,wBAAwB/nB,KAAK0oB,iDAtDzBlB,GAAuBptB,2GAAvBotB,EAAuBtW,QAAvBsW,EAAuB,qBAFtB,SAEDA,GAAb,EAAaA,4GCMN,IAAMmB,EAAb,MAAM,QAOLtzB,YAC2B0oB,EAClBld,EACAhC,GAFkBtJ,gBAClBA,YACAA,qBARTA,eAAW,EACXA,oBAAgB,EAChBA,kBAAe,GACPA,cAAmB,GAY3BqzB,kBACC,IAAIC,EAASC,UAAUC,UACvB,OAAiC,IAA7BF,EAAOG,QAAQ,YAAiD,IAA7BH,EAAOG,QAAQ,SAAc,CASrEC,gBAEC,OAAIJ,UADmBE,UACZC,QAAQ,SAAU,EAQ9BE,kBACC,IAAIC,EAAcjG,EAAE,WAAWiG,cAE3BttB,OAAOC,YAAcqtB,GAAettB,OAAOutB,WAAa,KAAOlG,EAAE,mBACpE3tB,KAAK8zB,UAAW,EAChB9zB,KAAK+zB,aAAepG,EAAE,kBAAkBiG,eAExC5zB,KAAK8zB,UAAW,EAOlBE,oBAAoBnb,EAAS,iBAG5B,IAAI/S,EAAK,EAKT,GAJuD,MAAlD0iB,SAAStX,cAAc2H,KAC3B/S,EAAM0iB,SAAStX,cAAc2H,GAAwB1S,UAAY,IAG9DnG,KAAKqzB,mBAAqBrzB,KAAK0zB,gBAAiB,CACnD,IAAIO,EAAM3tB,OAAOC,YACb2tB,EAAUztB,YAAY,KACrBwtB,GAAOnuB,EAAIY,cAAcwtB,IAE5B5tB,OAAO6tB,SAAS,GAAG,KACnBF,GAAO,MAEN,QAEH3tB,OAAO8tB,SAAS,CACf3nB,IAAK3G,EACLuuB,SAAU,WASbC,UAAU5b,GACT,GAAI1Y,KAAKqzB,mBAAqBrzB,KAAK0zB,gBAAiB,CACnD,IAAIO,EAAM3tB,OAAOC,YACbguB,EAAW9tB,YAAY,KACtBwtB,GAAO,GACVvtB,cAAc6tB,GACfjuB,OAAO6tB,SAAS,GAAG,KACnBF,GAAO,KACL,QAEH3tB,OAAO8tB,SAAS,CACf3nB,IAAK,EACL4nB,SAAU,WAGZ3b,EAAEtM,iBAGHooB,UAAUC,EAAW,GAAIhY,EAAeiY,GAAO,GAC9C,MAAoB,QAAhBjY,EAAS,GAAqBgY,EAE3BA,EAASpsB,OAAO0D,IACtB,QAASF,EAAI,EAAGA,EAAI4Q,EAASxM,OAAQpE,IACpC,GAAIE,EAAK0Q,SAASzQ,KAAK2oB,GAAOA,EAAIhpB,MAAQ8Q,EAAS5Q,KAClD,IAAK6oB,EAAM,OAAO,UAEdA,EAAM,OAAO,EAInB,QAAIA,IAONE,WAAWH,EAAW,GAAII,GACzB,OAAOJ,EAASpsB,OAAO0D,MACT,QAAT8oB,GAIS,SAATA,GAAmB9oB,EAAKqgB,YAIf,UAATyI,GAAoB9oB,EAAK+oB,QAAU,GAI1B,UAATD,GAAoB9oB,EAAKgE,SAIP,IAAfhE,EAAK8oB,GAAU,CAMxBlhB,YAAYpC,GACXvR,KAAKuR,SAAWA,EAGjBmC,cACC,OAAO1T,KAAKuR,SAIbwjB,gBAAgBltB,EAAKtE,EAAO0gB,EAAa+Q,GAExC,IAAIC,EAAaC,mBAAmB5uB,OAAO2L,SAASC,KAAO,IAAMrK,GAC9CqtB,mBAAmB3xB,GACb2xB,mBAAmBjR,GACtBiR,mBAAmBF,GAOzC1uB,OAAOyqB,KAHgB,uDAAuDkE,IAGhD,UAG/BE,gBAAgBttB,EAAKtE,EAAO0gB,EAAa+Q,GAExC,IAAIC,EAAaC,mBAAmB5uB,OAAO2L,SAASC,KAAO,IAAMrK,GAC7DutB,EAAeF,mBAAmB3xB,GAClC8xB,EAAqBH,mBAAmBjR,GACxCqR,EAAkBJ,mBAAmBF,GAMzC1uB,OAAOyqB,KAHgB,yCAAyCkE,WAAoBG,iBAA4BC,IAAyC,KAApBC,EAAyB,YAAYA,IAAoB,KAGhK,UAG/BC,iBAAiB1tB,EAAKtE,EAAO0gB,EAAa+Q,GAExBE,mBAAmB5uB,OAAO2L,SAASC,KAAO,IAAMrK,GAC9CqtB,mBAAmB3xB,GACb2xB,mBAAmBjR,GACtBiR,mBAAmBF,GASzC1uB,OAAOyqB,KAHiB,6BAGO,UAIhCyE,SAAS3tB,EAAKtE,EAAO0gB,EAAa+Q,GAEjC,IAAIC,EAAaC,mBAAmB5uB,OAAO2L,SAASC,KAAO,IAAMrK,GAC7DutB,EAAeF,mBAAmB3xB,GACb2xB,mBAAmBjR,GACtBiR,mBAAmBF,GAOzC1uB,OAAOyqB,KAJS,yCAAyCqE,SAAoBH,IAItD,UAIlBQ,eAAeC,EAAqBC,GAAkB,qCAC3D,MAAM5a,EAAO,CACZ6a,YAAaF,EACbG,WAAYF,GAGb,aAAa/pB,OAAe7J,EAAKuJ,KAAK4O,KAAsB,GAAG3O,8CAAuDwP,IACpHpS,KAAKyR,GACE/S,KAAKC,MAAM8S,EAAOC,WAEzBtR,MACAC,IACCH,QAAQC,IAAI,UAAYE,EAAMlC,YAI3B/E,EAAKuH,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,YAxBwB,EAwBxBA,CAQ9BpC,UAAUotB,GAAgB,qCAC/B,MAAM/a,EAAO,IAAI+a,KAEjB,aAAalqB,OAAehK,EAAK0J,KAAK4O,KACrC,GAAG3O,yCAAiDwP,EAAK,CAAElB,QAAS,IAAIC,KAAY,CAAE,eAAgB,wBACrGnR,KAAKyR,GACEA,GAEPrR,MACAC,IACEH,QAAQC,IAAI,UAAYE,EAAMlC,YAI5BlF,EAAK0H,cAAcN,MAHlBA,EAAM6B,QAEH,MADE7B,EAAM6B,OAEa7B,EAAMA,MAAM4B,KAQd5B,EAAM8B,YAtBJ,EAsBIA,+CA5QxBsoB,GAAYvuB,qBAQf8lB,YAAQ9lB,2GARLuuB,EAAYzX,QAAZyX,EAAY,qBAHZ,SAGAA,GAAb,EAAaA,iGCFN,IAAM2C,EAAb,MAAM,QAMLj2B,YAAsBsgB,EAA2B9W,GAA3BtJ,aAA2BA,qBAJjDA,cAAW,GACXA,oBAA+B,IAAIsgB,IAAiB,IACpDtgB,iBAA+B,IAAIsgB,IAAiB,GAGnDF,EAAMhY,MACJL,QAAQlF,OACP2F,UAAWnE,IACbrE,KAAKg2B,SAAW3xB,EAChBrE,KAAKi2B,eAAexrB,KAAMpG,GAC1BrE,KAAKk2B,YAAYzrB,KAAMpG,EAAM4L,UAK/Bqd,cAAgBnL,IACoD,IAA9DniB,KAAKg2B,SAASvO,UAAW1b,GAAQA,EAAKwG,KAAO4P,EAAQ5P,MACzDvS,KAAKogB,MAAMmB,SAAU,IAAI4U,KAAqB,CAAEhU,aAChDniB,KAAKsJ,cAAcqB,QAAS,+BAK9ByrB,mBAAqBjU,GACpBniB,KAAKogB,MAAMmB,SAAU,IAAI8U,KAA0B,CAAElU,aACrDniB,KAAKsJ,cAAcqB,QAAS,kCAI7B2rB,WAAanU,GAEZniB,KAAKogB,MAAMmB,SAAU,IAAI8U,KAA0B,CAAElU,aACrDniB,KAAKogB,MAAMmB,SAAU,IAAIc,KAAiB,CAAEF,UAASrB,IAAK,KAC1D9gB,KAAKsJ,cAAcqB,QAAS,0BAI7B0iB,aAAelL,GACd,QAAOniB,KAAKg2B,SAAShqB,KAAMD,GAAQA,EAAKwG,IAAM4P,EAAQ5P,kDAxC3CwjB,GAAelxB,2GAAfkxB,EAAepa,QAAfoa,EAAe,qBAHf,SAGAA,GAAb,EAAaA,qPCmPN,IAAMnnB,EAAb,MAAM,wDAAOA,0GA7BA,CACLD,eACAF,KACAS,KACAL,KACAC,YACAynB,KACAtnB,KACAunB,KACAC,IAEArnB,KACAC,IACAC,KACAE,KACAC,KACAC,KACAgnB,KACAC,KACAC,KACNC,KACApnB,KACAD,KACMD,KACAunB,KACAC,SAIKnoB,GAAb,EAAaA,kCC5PN,MAAMrD,EAAc,CACzByrB,YAAY,EACZC,KAAM,sBACNC,WAAY,4BAEZC,OAAQ,MACRC,gBAAiB,KACjBC,WAAY,MACZC,aAAc,UACdC,QAAS,CACPC,QAAS,cACTC,QAAS,EACTC,aAAc,MACdC,UAAU,qBACVC,QAAQ,0BAGVC,UAAW,CACTC,QAAS,4CAMXC,OAAQ,CACNC,aAAa,yBACbC,mBAAoB,gBACpBC,eAAe,8BAEf7U,aAAc,+CACd8U,gBAAiB,mFACnBC,oBAAqB,oXCzBhB,IAAMC,GAAb,MAAM,QAELv4B,YAAmBw4B,EAA4B9f,GAA5BxY,aAA4BA,cAE/CsE,WAAQ,CAGRi0B,WAAWjwB,GACV,MAAMyS,EAAOyN,SAAStX,cAAc,QAC9BsnB,EAAOhQ,SAAStX,cAAc,QAEhC6J,EAAK4R,UAAUM,SAAS,iBAAmB3kB,EAAMuQ,OAAO8T,UAAUM,SAAS,wBAC9EjtB,KAAKwY,OAAOO,YAAYgC,EAAM,gBAC9B/a,KAAKwY,OAAOigB,gBAAgBD,EAAM,WAElCx4B,KAAKwY,OAAOS,SAAS8B,EAAM,gBAC3B/a,KAAKwY,OAAOzH,SAASynB,EAAM,aAAc,yDAhB/BH,GAAqBxzB,gIAArBwzB,EAAqBvzB,2JCVlCD,yCAAoCA,kDAASmC,kBACzCnC,uCAAsBA,2CAAkBA,2BACxCA,+BACJA,2CDOawzB,GAAb,+DEDoBxzB,0CAAoEA,sBAAsBA,qDAAjDA,8CAA2BA,gGAwBhEA,uCACIA,uDAAoDA,8GAApDA,uJAEAA,uCAAqF,aACzDA,uDAAqDA,2BAC7EA,wCAAwBA,uDAAqDA,iHADrDA,qHACAA,+IAGxBA,uCAAgCA,wFAAuGA,+GAAvGA,yNALpCA,yCAIAA,0KAJiCA,oDAAmC,yCAbhFA,qCACwC,eAEhCA,0CAGJA,2BAEAA,sEACAA,wCACIA,yCAEAA,yFASJA,mHArBDA,gEAGkBA,yHAKQA,8IAEYA,+EAA2C,+EAXxFA,uCAAqEA,8EAAS6zB,EAAT,2BAASA,kBAC1E7zB,wCAuBJA,wEAtB4BA,oGAHhCA,uCACIA,0CAyBJA,qEAzB2CA,gFCP5C,IAAM8zB,GAAb,MAAM,QASL74B,YAAmBsL,EAAoCzH,EAAuBuE,EAAmCmK,GAA9FrS,mBAAoCA,cAAuBA,oBAAmCA,kBANjHA,gBAAa,GACbA,SAAM,KACNA,iBAAc,GAEdA,aAAUuL,WAKVjH,WACCkkB,SAAStX,cAAc,QAAQ0nB,iBAAiB,QAAS54B,KAAK64B,iBAG/DC,cACCtQ,SAAStX,cAAc,QAAQ6nB,oBAAoB,QAAS/4B,KAAK64B,iBAGlEG,gBACKh5B,KAAK4b,WAAW3L,OAAS,GACxBjQ,KAAKwG,OACRF,OAAOuqB,aAAa7wB,KAAKwG,OAG1BxG,KAAKwG,MAAQgqB,WAAW,KAGvB,MAAMhlB,EAAW,GACjBA,EAAOoQ,WAAW5b,KAAK4b,WACvBpQ,EAAOiR,SAASzc,KAAK20B,IAErB30B,KAAKqS,WAAW4L,cAAczS,EAAQ,GAAGhD,UAAU4R,IAClDpa,KAAKi5B,YAAc7e,EAAOqa,SAAS9T,OAClC,CAACC,EAAKC,KACL,IAAIzK,EAAM,EACN0V,GAAM,MACVjL,SAAIqL,SAASziB,IAAIsC,KACZ+f,GAAM/f,GAAKgY,QACd+H,GAAM/f,GAAKgY,OACR3N,EAAMrK,GAAKgY,QACd3N,EAAMrK,GAAKgY,QACV,IAEwB,GAAvBlD,EAAIqL,SAASjc,SAChB6b,GAAMjL,EAAIuL,WACPvL,EAAIuL,WACJvL,EAAIkD,MACP3N,EAAMyK,EAAIkD,OAEJ,IACHnD,EADG9c,+BAGF+c,GAAG,CACNkL,SAAUD,GACVE,SAAU5V,MAIb,OAGA,OAEH9P,OAAOuqB,aAAa7wB,KAAKwG,OACzBxG,KAAKi5B,YAAc,IAIrBC,eAAe5wB,GACdtI,KAAK4b,WAAatT,EAAMuQ,OAAO7K,MAKhCmrB,eAAe/1B,GACd,IAAIg2B,EAAS,IAAIC,OAAOr5B,KAAK4b,WAAY,KACzC,OAAOxY,EAAKk2B,QACXF,EACAG,GAAS,WAAaA,EAAQ,aAIhCC,gBACCx5B,KAAK4b,WAAa,GAClB5b,KAAKi5B,YAAc,GACKzQ,SAAStX,cAAc,gCAClClD,MAAQ,GACrBhO,KAAK64B,kBAGNY,aAAa/gB,GACZ8P,SAAStX,cAAc,kBAAkByb,UAAUe,OAAO,QAC1DhV,EAAEghB,kBAGHC,eAAejhB,GACd8P,SACEtX,cAAc,0BACdyb,UAAUG,IAAI,QAChBpU,EAAEghB,kBAGHb,kBACCrQ,SACEtX,cAAc,0BACdyb,UAAUC,OAAO,QAGpBgN,iBAAiBlhB,GAChBA,EAAEtM,iBACFpM,KAAK2D,OAAOoc,SAAS,CAAC,sBAAuB,CAAEtO,YAAa,CAAEmK,WAAY5b,KAAK4b,WAAYa,SAAUzc,KAAK20B,OAG3GkF,YAAYvxB,GACXtI,KAAK20B,IAAMrsB,EAAMuQ,OAAO7K,oDApHb2qB,GAAqB9zB,iMAArB8zB,EAAqB7zB,oyCDflCD,sCAAkH,SAE1GA,+BACJA,2BACAA,uCAA8BA,mDAAUmC,wBACpCnC,sCAAuD,UAAvDA,CAAuD,cAEnBA,mDAAUmC,mBAClCnC,yCAAqBA,2CAAkBA,2BACvCA,2CACFA,6BAENA,yCAAwCA,gCAAMA,2BAC9CA,0CAAwCA,kDAASmC,sBAAjDnC,2BAEAA,2CAA8C,cACpBA,gCAAMA,2BAC5BA,gCACJA,6BAGJA,2CA2BJA,oCAvCyCA,wEAYNA,yLCN1B8zB,GAAb,iBCLO,IAAMmB,GAAb,MAAM,QAELh6B,YAAmBwrB,0BAEnBhnB,WAAQ,CAGRw0B,cAAW,+CAPCgB,GAAqBj1B,sFAArBi1B,EAAqBh1B,iOCVlCD,oCACIA,+BACAA,uCAAmCA,oDAAyCA,2BAC5EA,uCAA2BA,iCAAQA,oCADAA,yKDQ1Bi1B,GAAb,yCEAQj1B,kCAAuEA,iDAAwBA,4HAIvFA,uCAAoG,WAApGA,CAAoG,UAApGA,CAAoG,UAGlCA,sBAAkBA,6BAG5EA,wCAAgC,aACGA,sBAAiBA,2BAChDA,uDACJA,6BAGJA,2CAAwC,WAEhCA,mCACJA,6BAGJA,sCACIA,iGAASk1B,EAAT,2BAASA,sBAAmCl1B,iCAA0BA,wFAhB/DA,2HAAmDA,+DAIvBA,8DAC/BA,kKAKDA,4HACMA,8KAfrBA,sCACIA,yEAqBJA,2BAEAA,uCAAiC,UACvBA,wDAA6BA,2BAEnCA,wCAA+BA,sFAAoEA,6BAGvGA,wCAAkC,WACqBA,0DAA6BA,2BAChFA,sCAAiE,WAAMA,kCAAQA,2BAAOA,iCAC5CA,uEAhCuBA,iHAwB3DA,kGAEyBA,kKAIoBA,mJCjC5D,IAAMm1B,GAAb,MAAM,QAKLl6B,YAAmBurB,sBAFnBrrB,aAAUuL,WAKVjH,WAAQ,CAGRge,eAAeha,EAAc6Z,GAC5B7Z,EAAM8D,iBACNpM,KAAKqrB,YAAY/I,eAAeH,iDAbrB6X,GAAiBn1B,sFAAjBm1B,EAAiBl1B,0kCDX9BD,sCAAoC,SAG5BA,+BACAA,uCAAyBA,oDAAkCA,2BAC3DA,uCAAuBA,wDAA4BA,6BAGvDA,qEAEIA,uEAEAA,4FAqCJA,uEA7C6BA,4GACFA,iGAIvBA,+JACIA,0HAAmD,mHCClDm1B,GAAb,6BCNYn1B,qCAAqE,SAArEA,CAAqE,SAEyBA,sBAAsBA,uFAAxEA,gGAAkDA,uECMnG,IAAMo1B,GAAb,MAAM,QAQJn6B,YACMsL,EACAzH,EACGuE,EACAmK,GAHHrS,mBACAA,cACGA,oBACAA,kBAXTA,aAAS,EAmBPA,KAAKoL,YAAYqG,YAAYjJ,UAAUgD,IACrCxL,KAAKwL,OAASA,IAIlBlH,WAAQ,CAIR41B,gBAAgBC,GAEd,MAAO,CAAE1d,SAAU0d,GAGrBrB,cACE94B,KAAKo6B,OAAOC,cAGd9B,aACE,MAAM+B,EAAe9R,SAAStX,cAAc,qCACxCopB,GACFA,EAAa3N,UAAUe,OAAO,sDAzCvBuM,GAAqBp1B,iMAArBo1B,EAAqBn1B,igBDblCD,sCAAwC,SACqCA,iDAASmC,iBAAcnC,qCAAYA,2BAE5GA,sCAA2E,WAEnEA,wCAKJA,sCAPuBA,4FAEkCA,yHCQpDo1B,GAAb,GCJaM,GAAb,MAAM,QAMLz6B,YAAoB6D,iBAJpB3D,aAAU,IAKTA,KAAKo6B,OAASp6B,KAAK2D,OAAOwE,OAAOK,UAAUF,KACtCA,aAAiBkyB,MAEVlyB,aAAiBC,QAD3BvI,KAAKkW,QAAU5N,EAAMT,IAEAA,GAKxBvD,WAAQ,CAGRw0B,cACC94B,KAAKo6B,OAAOC,cAGbI,aAAanyB,GACZA,EAAM8D,iBACN,IAAIsuB,EAAOlS,SAASqE,iBAAiB,sBACrC,QAAShhB,EAAI,EAAGA,EAAI6uB,EAAKzqB,OAAQpE,IAChC6uB,EAAK7uB,GAAG8gB,UAAUG,IAAI,QAGvBxkB,EAAMuQ,OAAO8hB,cAAchO,UAAUG,IAAI,wDA9B9ByN,GAAiB11B,sFAAjB01B,EAAiBz1B,8xCCT9BD,sCAAmF,SAAnFA,CAAmF,OAAnFA,CAAmF,SAIrDA,6BAAIA,6BAG1BA,mCACsD,SACrBA,kCAASA,6BAG1CA,qCAE2D,SAClBA,oCAAUA,2BAE/CA,uCAA2B,WAA3BA,CAA2B,YAEKA,kGAAwEA,2BAEhGA,uCAAuB,YAAvBA,CAAuB,WAGXA,oCAEAA,yCAAyBA,oDAAqBA,+BAC1CA,4CAAiBA,+BAI7BA,wCAAuB,WAEfA,oCAEAA,yCAAyBA,4CAAkBA,+BACvCA,sDAA2BA,uCASvDA,uCACwD,WACrBA,kCAAQA,6BAG3CA,uCAC+C,WACRA,8BAAIA,6BAG3CA,oCAA6D,WACfA,mCAASA,2BAEnDA,wCAAkC,YAAlCA,CAAkC,YAAlCA,CAAkC,WAAlCA,CAAkC,YAIMA,kCAAQA,2BAEhCA,oCAAI,QAAJA,CAAI,WAEuDA,kCAAQA,6BAE/DA,oCAAI,WACuDA,2CAAiBA,6BAE5EA,oCAAI,WACmDA,kCAAQA,6BAE/DA,oCAAyE,WACrBA,wCAAcA,mCAM9EA,wCAAsB,YAAtBA,CAAsB,WAGVA,mCAEAA,wCAAkD,aAG1CA,+BAEJA,oDAxFxBA,uFAKAA,8FAKAA,wEAA2B,kDAiC3BA,iGAKAA,uFAIAA,qGAmBwBA,yJDjEvB01B,GAAb,mEEiBoB11B,sCAAsC,UACXA,+EAAS+1B,EAAT,0BAASA,oBAAwB/1B,+BAAMA,qDAElEA,sCAAyC,UACcA,mCAAUA,2HCd9E,IAAMg2B,GAAb,MAAM,QAML/6B,YACS6D,EACDyH,EACAlD,EACAmD,EACCgH,GAJArS,cACDA,mBACAA,oBACAA,oBACCA,kBAVAA,oBAAiB,YAa1BsE,WACCtE,KAAKoH,WAAaC,KAAKC,MAAMC,eAAeC,QAAQ,gBACpDxH,KAAK86B,kBAGN7J,eAAe3oB,GACdA,EAAM8D,iBAENpM,KAAUoH,WAGTpH,KAAK2D,OAAOoc,SAAS,CAAC,oBAFtB/f,KAAKqL,aAAa4lB,iBAMd6J,kBAAe,qCAMpBC,EAAKC,iBAAmBD,EAAK1oB,WAAWiM,gBAJf,CACzB9S,QAAiB,EACjBA,OAAgB,MAEwCA,EANpC,EAMoCA,+CAnC7CqvB,GAAeh2B,oOAAfg2B,EAAe/1B,m/BDhB5BD,yCAAwD,UAAxDA,CAAwD,QAAxDA,CAAwD,UAAxDA,CAAwD,SAAxDA,CAAwD,OAAxDA,CAAwD,SAMTA,iCAAQA,2BAC/BA,mCAAI,OAAJA,CAAI,UAGQA,gCAA0BA,iDAC9BA,6BAEJA,oCAAI,UAEIA,gCAA6BA,oDACjCA,qCAOpBA,uCAA0B,WAGlBA,0CAGAA,0CAGJA,iCAMZA,wCAA2B,SAA3BA,CAA2B,YAGfA,gDAEAA,sCACIA,mCACJA,6BAGJA,wCACIA,mDACJA,2BAEAA,uCAA0B,YAA1BA,CAA0B,WAGKA,kDAASmC,sBAC5BnC,iCACAA,yCAA2BA,uBACgBA,6BAG/CA,gDAA2C,sBAG/CA,iCAKZA,wCAA2G,YAA3GA,CAA2G,YAA3GA,CAA2G,YAI3FA,mDACJA,2BAEAA,wCACIA,4CACJA,2BAEAA,wCACIA,iCACAA,mCAAG,WAAkFA,0DAC/CA,8CAjF7CA,kEAwB0BA,uEAGIA,qEAU9BA,kEAUwBA,2EAQcA,4HAYnBA,uHACiBA,kFAChCA,4EAEwBA,2EASfA,iGAAsC,kDAAyCA,0LClE5Fg2B,GAAb,yBCiGIh2B,kCCzGG,IAAMo2B,GAAb,MAAM,QAOLn7B,cALSE,oBAAiB,YACjBA,qBAAiB,EAO1BsE,WACCtE,KAAKk7B,MAAQ,IAAIhrB,MAAQ8W,4DAXdiU,sDAAen2B,05EDR5BD,yCAAgC,WAExBA,gCACJA,2BACAA,sCAAoC,UAApCA,CAAoC,UAApCA,CAAoC,UAApCA,CAAoC,WAKhBA,iCACAA,kCAAGA,qFAAwDA,+BAAIA,oEAA0CA,2BACzGA,mCAAGA,iDAAuBA,2BAC1BA,uCAA+B,WAA/BA,CAA+B,YAA/BA,CAA+B,cAGcA,oCAAUA,2BAC3CA,sCAA6BA,2CAAiBA,6BAElDA,wCAA+B,cACMA,wCAAcA,2BAC/CA,2CACIA,mCAEJA,qCAOpBA,wCAA+B,YAA/BA,CAA+B,YAEEA,8BAAIA,2BAE7BA,uCAAwB,QAAxBA,CAAwB,WACYA,mCAASA,6BACzCA,oCAAI,WAAyCA,6BAAGA,6BAChDA,oCAAI,WAA8BA,oCAAUA,mCAKxDA,wCAA+B,YAA/BA,CAA+B,YAEEA,oCAAUA,2BAEnCA,uCAAwB,QAAxBA,CAAwB,WACgBA,uCAAaA,6BACjDA,oCAAI,WAA4BA,+BAAKA,6BACrCA,oCAAI,WAA2BA,kCAAQA,6BACvCA,oCAAI,WAA+BA,kCAAQA,mCAOvDA,wCAA+B,YAA/BA,CAA+B,YAEEA,0CAAgBA,2BAEzCA,uCAAwB,QAAxBA,CAAwB,WAEAA,mCAASA,6BAC7BA,oCAAI,WACgBA,8BAAIA,6BACxBA,oCAAI,WACgBA,oCAAUA,6BAC9BA,oCAAI,WACoBA,8CAAoBA,6BAC5CA,oCAAI,WAE4BA,wCAAcA,6BAC9CA,oCAAI,WAE2BA,uCAAaA,yCAQpEA,wCAA2B,WAA3BA,CAA2B,WAESA,uBAAiDA,2BAC7EA,uCAAwB,QAAxBA,CAAwB,WACqEA,8CACvEA,6BAClBA,oCAAI,WAE4BA,wCAAcA,6BAC9CA,oCAAI,WAE2BA,uCAAaA,+BAGhDA,wCAA6C,cACdA,sCAAYA,2BACvCA,sCACqBA,iCAA6BA,2BAClDA,uCACqBA,kCAA+BA,2BACpDA,uCACsBA,kCAA8BA,2BACpDA,uCACuDA,kCAA4BA,2BACnFA,uCACoBA,kCAA8BA,iCAK9DA,4CACJA,kCA7GaA,4EA+EAA,6EAC2BA,2GA4BhBA,6HCzGXo2B,GAAb,GCQaE,GAAb,MAAM,QAQLr7B,YACS6D,EACAC,GADA5D,cACAA,qBARTA,oBAAiB,YACjBA,qBAAiB,EACjBA,aAAU,IAQTA,KAAKo6B,OAASp6B,KAAK2D,OAAOwE,OAAOK,UAAUF,IACtCA,aAAiBkyB,MACpBx6B,KAAKkW,QAAU5N,EAAMT,IAEpB7H,KAAKo7B,eADNp7B,KAASkW,QAAQpO,SAAS,aACH,kBAEA,YAItB9H,KAAKq7B,kBADNr7B,KAASkW,QAAQpO,SAAS,oBAAuBxB,OAAOutB,WAAa,MAK3DvrB,aAAiBC,OAC3BvI,KAAKkW,QAAU5N,EAAMT,IAEpB7H,KAAKo7B,eADNp7B,KAASkW,QAAQpO,SAAS,aACH,kBAEA,YAItB9H,KAAKq7B,kBADNr7B,KAASkW,QAAQpO,SAAS,oBAAuBxB,OAAOutB,WAAa,KAMrE7zB,KAAK4D,cAAcylB,uBACnBrpB,KAAK4D,cAAcc,aAAaC,kBAA4B,oBAK/DL,WAAQ,CAIRw0B,cACC94B,KAAKo6B,OAAOC,cAIbiB,cAAchzB,GACbtI,KAAKu7B,eAGNC,aAAcC,GACb,OAAOA,GAAUA,EAAOC,aAAeD,EAAOE,gBAAkBF,EAAOE,eAAe9zB,IAGvF0zB,eAEEv7B,KAAKq7B,kBADFr7B,KAAKkW,QAAQpO,SAAS,oBAAsBxB,OAAOutB,WAAa,IAG7C,+CAnEZsH,GAAet2B,yHAAfs2B,EAAer2B,gHAAfkC,qBAAqB,0LChBlCnC,sCACIA,0CAEAA,oCACIA,gDACJA,2BAEAA,0CACJA,oEAPkBA,mFAETA,sFAISA,mFAAiC,yFDItC,CACXiS,SAIWqkB,GAAb,kBERO,IAAMS,GAAb,MAAM,QAEL97B,eAIAwE,WAAQ,+CANIs3B,sDAAuB92B,q7BCRpCD,sCAAkB,UAAlBA,CAAkB,UAAlBA,CAAkB,UAAlBA,CAAkB,UAAlBA,CAAkB,WAMMA,iCACAA,qCAAuBA,oCAAWA,2BAClCA,8CACmB,WAGnBA,mCAAGA,wKAC6DA,2BAChEA,yCAAiB,aAETA,qCAEAA,wCAAgC,eAAhCA,CAAgC,WAElBA,mCAASA,2BACfA,iCACJA,iCAIZA,wCAAsD,WAE9CA,iCACJA,2BACAA,sCAA2CA,iCAC3CA,2BACAA,sCAA2CA,iCAC3CA,2BACAA,sCAA2CA,iCAC3CA,2BACAA,sCAA2CA,iCAC3CA,uCAOxBA,mCAEJA,uEDtCa+2B,GAAb,GENO,MAAMC,GAAW/3B,+BACjBC,MAAS,CACZC,KAAK,EACLG,MAAM,EACNC,WAAY,CACR,IAAK,CACDJ,KAAK,MAKJ83B,GAAWh4B,+BACjBC,MAAS,CACZC,KAAK,EACLC,MAAM,EACNC,OAAQ,GACRC,MAAM,EACNC,WAAY,CACR,EAAG,CACCC,MAAO,GAEX,IAAK,CACDA,MAAO,GAEX,IAAK,CACDA,MAAO,GAEX,IAAK,CACDA,MAAO,GAEX,KAAM,CACFA,MAAO,GAEX,KAAM,CACFA,MAAO,EACPL,KAAK,EACLC,MAAM,MAKL83B,GAAaj4B,+BACnBC,MAAS,CACZC,KAAK,EACLC,MAAM,EACNC,OAAQ,GACRC,MAAM,EACNC,WAAY,CACR,EAAG,CACCC,MAAO,GAEX,IAAK,CACDA,MAAO,GAEX,IAAK,CACDA,MAAO,GAEX,IAAK,CACDA,MAAO,GAEX,KAAM,CACFA,MAAO,GAEX,KAAM,CACFA,MAAO,EACPL,KAAK,MAKMF,+BAChBC,MAAS,CACZC,KAAK,EACLC,MAAM,EACNI,MAAO,EACPH,OAAQ,GACRC,MAAM,EACNC,WAAY,CACR,EAAG,CACCC,MAAO,GAEX,IAAK,CACDA,MAAO,GAEX,IAAK,CACDA,MAAO,GAEX,KAAM,CACFA,MAAO,EACPL,KAAK,EACLC,MAAM,gCCjFX,IAAM+3B,GAAb,MAAM,QASLl8B,YAAsB2Q,EAAwBwrB,GAAxBj8B,UAAwBA,wBAPrCA,aAAU,SACVA,cAAW,MACXA,YAAS,EAElBA,YAAQ,EAKRsE,WAAQ,CAGRqD,kBACC3H,KAAKyQ,GAAGvK,cAAcymB,UAAUG,IAAK,kBACrC9sB,KAAKk8B,kBAEL1L,WAAY,KACXxwB,KAAKm8B,kBAEL,IAAIC,EAASp8B,KAAKyQ,GAAGvK,cAAc4S,QAAS,gBACxC0T,EAAOxsB,KAENo8B,IACJzO,EAAGyO,GAAS1P,GAAI,yBAA0B,KACpCF,EAAK/b,GAAGvK,cAAc4S,QAAS,2BACnC0T,EAAK/b,GAAGvK,cAAcymB,UAAUG,IAAK,oBAIvCa,EAAGyO,GAAS1P,GAAI,0BAA2B,KACrCF,EAAK/b,GAAGvK,cAAc4S,QAAS,oBAC9B0T,EAAK/b,GAAGvK,cAAcymB,UAAUM,SAAU,oBAC9CT,EAAK/b,GAAGvK,cAAcymB,UAAUC,OAAQ,kBACxC5sB,KAAKq8B,OAAOC,OACZt8B,KAAKu8B,OAAQ,GAGd/P,EAAK/b,GAAGvK,cAAcymB,UAAUG,IAAK,sBAItC,KAIJ0P,WACCx8B,KAAKm8B,kBAGNA,kBACC,IAAIM,EAAOz8B,KAAKyQ,GAAGvK,cAAcw2B,wBAEjC,IAASp2B,OAAOq2B,YAAcF,EAAKhwB,KAAOgwB,EAAKhwB,IAAM,GAASgwB,EAAKG,OAAS,GAAKH,EAAKG,OAASt2B,OAAOq2B,cAAmB38B,KAAKu8B,MAAQ,CACrI,GAAKv8B,KAAKyQ,GAAGvK,cAAc4S,QAAS,kBAAqB9Y,KAAKyQ,GAAGvK,cAAc4S,QAAS,oBAAuB,OAE/G9Y,KAAKq8B,OAAOC,OACZt8B,KAAKu8B,OAAQ,GAIfL,kBACCl8B,KAAKq8B,OAASr8B,KAAKi8B,iBACjBY,MAAO,EACP3lB,SACCW,KAAY7X,KAAK88B,SAAW/2B,OAE7BuR,SACCtX,KAAK8xB,UACL5a,SACCW,KAAY7X,KAAK88B,SAAWh3B,OAI9Bi3B,OAAQ/8B,KAAKyQ,GAAGvK,eAElB,IAAIsmB,EAAOxsB,KAEXA,KAAKq8B,OAAOW,QAAS,WACpBxQ,EAAK/b,GAAGvK,cAAcymB,UAAUC,OAAQ,kEAhF9BoP,GAAoBn3B,mIAApBm3B,EAAoBl3B,qHAApBkC,gBAAgB,iGAAhBg1B,GAAb,oDCTQn3B,wCAA2DA,4BAAGA,mDAC9DA,wCAAkEA,6BAAIA,mDACtEA,wCAA0DA,4BAAGA,mDAC7DA,wCAAmFA,qCAAYA,qDAK3FA,mFAAaA,0JAgBbA,qCACuD,UAC7CA,uCAAcA,wEAFrBA,2KAKCA,0CAAqCA,+EAASo4B,EAAT,2BAASA,eAC1Cp4B,qCAAMA,wDAAgCA,mCAAhCA,gIATlBA,uCAGIA,wCAIAA,0FAKJA,kGARSA,oFAAkC,8HAavCA,qCAAyDA,sBACrDA,qCAA8EA,sBAAcA,2BAAIA,sBACpGA,6FAFyDA,2FAClDA,gGAAqC,wDAAsCA,+DAAkBA,gIAUhGA,wCAAsDA,uDAAiDA,sEAAjDA,qJAD1DA,uCACIA,2CACJA,sEAD6BA,yGAIzBA,uCAAyFA,uDAA4CA,sEAA5CA,gJAErFA,uCAAkEA,uDAAiDA,sEAAjDA,qJAE9DA,uCAA+E,aACnDA,uDAA4CA,2BACpEA,wCAAwBA,uDAA4CA,wEAD5CA,qHACAA,gJAGxBA,uCAA2BA,wFAA6FA,sEAA7FA,6NAL/BA,0CAIAA,kKAJ4BA,4DAAmC,yCAFnEA,0CACAA,kKAD4BA,8CAAuB,yCAFvDA,0CACAA,kKAD4BA,sEAA6C,wCANjFA,oCACIA,0CAIAA,0FAeJA,kGAnBgCA,6FAA2C,eChC5E,IAAMq4B,EAAb,MAAM,QAYFp9B,YACY6D,EACA0H,EACAggB,EACAC,EACAC,GAJAvrB,cACAA,oBACAA,mBACAA,uBACAA,sBAbZA,cAAW,EACXA,cAAW,MAGdA,gBAAaqH,KAAKC,MAAMC,eAAeC,QAAQ,gBAE5CxH,aAAUuL,WAUVjH,WACI,IAAIwnB,EAAM9rB,KAAK+rB,SACX3V,EAAMpW,KAAKgsB,SAIfhsB,KAAKmiB,QAAQ+J,SAASziB,IAAIsC,IAClB+f,EAAM/f,EAAKgY,QAAO+H,EAAM/f,EAAKgY,OAC7B3N,EAAMrK,EAAKgY,QAAO3N,EAAMrK,EAAKgY,QAClC,IAEiC,GAAhC/jB,KAAKmiB,QAAQ+J,SAASjc,SACtB6b,EAAM9rB,KAAKmiB,QAAQiK,WACbpsB,KAAKmiB,QAAQiK,WACbpsB,KAAKmiB,QAAQ4B,MACnB3N,EAAMpW,KAAKmiB,QAAQ4B,OAGvB/jB,KAAK+rB,SAAWD,EAChB9rB,KAAKgsB,SAAW5V,EAGpB8L,UAAU5Z,GACNA,EAAM8D,iBACNpM,KAAKqrB,YAAYnJ,UAAUliB,KAAKmiB,SAGpCiL,cAAc9kB,GACVA,EAAM8D,iBAENpM,KAASqtB,eACLrtB,KAAK2D,OAAOoc,SAAS,CAAC,mBAEtB/f,KAAKsrB,gBAAgBgC,cAActtB,KAAKmiB,SAIhDqF,aAAalf,GACTA,EAAM8D,kBACFpM,KAAK+nB,eACT/nB,KAAKurB,eAAe/D,aAAaxnB,KAAKmiB,SAG1Cgb,UAAU70B,GACNA,EAAM8D,iBACNpM,KAAKqL,aAAagmB,cAAcrxB,KAAKmiB,SAGzC4F,cACI,OAAO/nB,KAAKurB,eAAexD,YAAY/nB,KAAKmiB,SAGhDkL,eACI,OAAOrtB,KAAKsrB,gBAAgB+B,aAAartB,KAAKmiB,uDAzEzC+a,GAAsBr4B,qOAAtBq4B,EAAsBp4B,uvCDlBnCD,sCAAqB,cAEbA,0CACAA,0CACAA,0CACAA,0CAEAA,oCACIA,yCAEAA,iDAEJA,2BAEAA,sCAAqC,WAE7BA,kDAASmC,qBACTnC,sCAAMA,uBAA+CA,+BAM7DA,2CAaJA,2BAEAA,wCAA0B,aAElBA,4CAGJA,2BAEAA,uCAA0B,UACgCA,uBAAkBA,2BAAIA,mCAAGA,uBAAsBA,6BAGzGA,0CA6BJA,oCA5E2CA,uEACCA,6EACDA,sEACAA,6FAEpCA,oIACcA,iJAGRA,+GAIwDA,uFAEnDA,uGAQbA,+HAeyBA,8EAMnBA,oIAAmDA,uEAAyBA,6EAG7EA,4KC/BDq4B,GAAb,GCTaE,EAAb,MAAM,QAELplB,UAAYyc,EAAqBI,GAChC,OAAOJ,EAASpsB,OAAQ0D,MACT,QAAT8oB,GAIS,SAATA,GAAmB9oB,EAAKqgB,YAIf,UAATyI,GAAoB9oB,EAAK+oB,QAAU,GAI1B,UAATD,GAAoB9oB,EAAKgE,SAIN,IAAjBhE,EAAM8oB,GAAW,+CApBduI,oEAAc3jB,UAAd2jB,GAAb,kECDgBv4B,sCAAmE,UAE3DA,4HAASw4B,EAAT,yBAASA,OAAY,eAAcC,KAAWz4B,sBAAkBA,iGADhDA,iEAC8BA,0FAWlDA,mGAFJA,gDAEIA,yCACJA,sEAFIA,iDACoCA,kHAMhCA,wDAEAA,uEALJA,gDAGIA,2HAKJA,8GAPIA,iDAGoBA,gKAT5BA,kDAIAA,iKAH8BA,yCAAc,sCAHpDA,sCACIA,iDAiBJA,iCAlBIA,gECLL,IAAM04B,GAAb,MAAM,QAYLz9B,cATQE,YAAS,GACTA,aAAS,EAEjBA,kBAAe+7B,GAEf/7B,WAAQ,CAAC,MAAO,WAAY,OAAQ,OACpCA,YAAS,CAAEw9B,IAAO,MAAOC,SAAY,cAAeC,KAAQ,MAAOjxB,IAAO,eAK1EnI,WACKtE,KAAKy0B,WACRz0B,KAAKyL,QAAS,iDAhBJ8xB,sDAA2Bz4B,2hCDZxCD,sCAA4C,UAA5CA,CAA4C,UAA5CA,CAA4C,UAGdA,sBAAUA,6BAGhCA,sCAAkC,UAE1BA,uCAIJA,+BAIRA,uCACIA,yCAmBJA,2BACAA,mCACJA,oEAnC8BA,iEAKwBA,mEAQgBA,oEACJA,mEAoBzDA,kLCzBI04B,GAAb,sEC2DgB14B,uCAA+E,SAA/EA,CAA+E,WAA/EA,CAA+E,UAI/DA,kCACJA,6BAEJA,sCAA4BA,sBAAsBA,yDANlBA,+GAGnBA,6FAAsB,qBAGPA,iGA2F5CA,qIAAwDA,2DAAkC,mBAAlCA,CAAkC,kFAM9FA,kGAAyDA,+CAAsB,mBAAtBA,CAAsB,gDAsD/EA,kGAAyDA,+CAAsB,mBAAtBA,CAAsB,gDAK/EA,kGAAyDA,+CAAsB,mBAAtBA,CAAsB,+CA+D3DA,wCACIA,wDACJA,kCADIA,mIAWJA,wCAEIA,wDACJA,kCADIA,2IAYJA,wCAEIA,wDACJA,kCADIA,uPC9TtBqI,GAAiB,CACtB,CACCC,KAAM,oBACNG,UAAWsuB,IAEZ,CACCzuB,KAAM,GACNG,UAAW6tB,GACXwC,SAAU,CACT,CACCxwB,KAAM,GACNE,UAAW,OACXC,UCEJ,MAAM,QAmBLxN,YACQuS,EACAnK,EACCiB,EACAC,EACAC,EACAC,GACA/F,GACAM,GACAD,IARD5D,kBACAA,oBACCA,mBACAA,iBACAA,mBACAA,sBACAA,cACAA,aACAA,sBA1BTA,eAAmB,GACnBA,eAAmB,GACnBA,eAAmB,GACnBA,eAAmB,GACnBA,cAAmB,EACnBA,cAAmB,EACnBA,cAAmB,EACnBA,cAAmB,EAEnBA,cAAW,GAEXA,iBAAc67B,GACd77B,iBAAc87B,GAGd97B,gBAAqB,EAerBsE,WAECtE,KAAKkI,aAAaQ,UAAU,0BAA0BC,KAAKC,OAG1DG,MAAMC,OAIPhJ,KAAK86B,kBAEL96B,KAAK49B,SAAW59B,KAAKmJ,YAAYU,MAAM,CACtCE,MAAO,CAAC,GAAI,CAACD,cAAqBA,aAClCK,SAAU,CAAC,KAAML,mBACjBM,SAAU,CAAC,KAAMN,qBAGlB,IAAI+zB,EAAgB,CACpBA,WAAuB,QACvBA,OAAmB,UACnB79B,KAAKqS,WAAW4L,cAAc4f,EAAa,IAAIr1B,UAAU4R,IACxDpa,KAAK89B,UAAYz2B,KAAKC,MAAM8S,EAAQqa,UACpCz0B,KAAK+9B,SAAQ,IAKdF,EAAYG,OAAO,SACnBh+B,KAAKqS,WAAW4L,cAHI,CACpBggB,SAAqB,SAEsB,IAAIz1B,UAAU4R,IACxDpa,KAAKk+B,UAAY72B,KAAKC,MAAM8S,EAAQqa,UACpCz0B,KAAKm+B,SAAQ,IAOdn+B,KAAKqS,WAAW4L,cAHI,CACpBmgB,SAAqB,QACrBA,OAAmB,UACwB,IAAI51B,UAAU4R,IACxDpa,KAAKq+B,UAAYh3B,KAAKC,MAAM8S,EAAQqa,UACpCz0B,KAAKs+B,SAAQ,IAOdt+B,KAAKqS,WAAW4L,cAHI,CACpBsgB,SAAqB,QACrBA,OAAmB,UACwB,IAAI/1B,UAAU4R,IACxDpa,KAAKw+B,UAAYn3B,KAAKC,MAAM8S,EAAQqa,UACpCz0B,KAAKy+B,SAAQ,IAGdz+B,KAAKuD,MAAMgB,SAAS,aACpBvE,KAAK6D,KAAKW,UAAU,CAAEpB,KAAM,cAAeqB,QAAS,iDACpDzE,KAAK6D,KAAKW,UAAU,CAAEpB,KAAM,WAAYqB,QAAS,+DACjDzE,KAAK4D,cAAcc,aAAaC,kBAA4B,iBAGvDm2B,kBAAe,qCAMpBC,EAAKC,iBAAmBD,EAAK1oB,WAAWiM,gBAJf,CACzB9S,QAAiB,EACjBA,OAAgB,MAEwCA,EANpC,EAMoCA,CAGnDkzB,WAAQ,qCAER3D,EAAK1xB,YAAYkB,aAAawwB,EAAK6C,UAKxC7C,EAAK1xB,YAAY8f,mBAAmB4R,EAAK6C,UAAUp1B,UAAU,CAE5DiC,KAAM7H,IACa,IAAdA,EAAK8H,KAERqwB,EAAKzxB,cAAcqB,QAAQowB,EAAK3xB,UAAUiB,QAAQ,mBAGlD0wB,EAAKzxB,cAAcN,MAAMpG,EAAMgI,OAIjC5B,MAAQA,IAIN+xB,EAAKzxB,cAAcN,MAHhBA,EAAM6B,OAGgB7B,EAAM8B,QAIN9B,EAAM4B,SAxBjCmwB,EAAKhwB,WAAU,CAwBkBH,EA3BrB,EA2BqBA,+CA7HvB+zB,GAAc95B,yXAAd85B,EAAc75B,siLFrB3BD,uCAA2C,UAA3CA,CAA2C,mBAA3CA,CAA2C,UAA3CA,CAA2C,UAA3CA,CAA2C,UAA3CA,CAA2C,UAA3CA,CAA2C,UAA3CA,CAA2C,UAScA,8EAAqDA,2BAC9EA,oCACIA,qEACJA,6BAEJA,qCAAqD,WAC3CA,mCAASA,2BACfA,iCACJA,mCAMhBA,wCAC0G,WAD1GA,CAC0G,WAD1GA,CAC0G,WAD1GA,CAC0G,WAD1GA,CAC0G,SAKlFA,uCAAaA,2BACjBA,oCACIA,oDACAA,+BAAMA,wCAA2BA,8BAAIA,+BAG7CA,sCACgB,WACNA,gCAAMA,2BACZA,iCACJA,mCAMhBA,wCAC2G,WAD3GA,CAC2G,WAD3GA,CAC2G,WAD3GA,CAC2G,WAD3GA,CAC2G,SAKnFA,iDAAuBA,2BAC3BA,oCAAIA,uCAAaA,6BAErBA,sCAAgH,WACtGA,uCAAaA,2BACnBA,iCACJA,uCAQxBA,mCAEAA,wCAAuB,YAC6CA,iCAAOA,2BACvEA,wCAAkC,aAE1BA,2CAUJA,+BAIRA,mCAEAA,wCAAuB,YAAvBA,CAAuB,YAAvBA,CAAuB,YAAvBA,CAAuB,WAMHA,2CAEJA,2BACAA,wCAA4B,YAA5BA,CAA4B,YAA5BA,CAA4B,UAA5BA,CAA4B,UAA5BA,CAA4B,YAKCA,+BAAKA,+BAAIA,qCAAWA,+BAAIA,oCAAUA,6BAC/CA,+BAAM,SACNA,qCACJA,+BAIRA,sCACIA,oCACAA,iCACJA,iCAIZA,wCAA6C,YAA7CA,CAA6C,WAIjCA,2CAEJA,2BACAA,wCAA4B,YAA5BA,CAA4B,YAA5BA,CAA4B,WAKZA,mCAAQA,+BAAIA,wCAChBA,+BAIRA,sCACIA,oCACAA,iCACJA,iCAIZA,wCAAsB,YAAtBA,CAAsB,WAIVA,2CAEJA,2BACAA,wCAA4B,WAA5BA,CAA4B,WAIhBA,wDACAA,+BACAA,sCAAMA,mCAAQA,+BAItBA,uCACIA,8CACAA,kCACJA,qCAOpBA,oCAEAA,yCACIA,kEAEJA,2BAEAA,oCAEAA,kEAGAA,oCAEAA,yCAAuB,YAAvBA,CAAuB,aAAvBA,CAAuB,aAAvBA,CAAuB,YAKHA,oCACJA,2BACAA,yCAA4B,YAA5BA,CAA4B,YAEwDA,kCAAOA,6BAGvFA,wCAA4D,YAEpDA,iFACJA,6BAGJA,uCAEQA,wCAAYA,kCACpBA,iCAIZA,yCAAsB,aAAtBA,CAAsB,YAGVA,oCACJA,2BACAA,yCAA4B,YAA5BA,CAA4B,aAA5BA,CAA4B,YAIZA,mDACJA,+BAIRA,uCACIA,yCACAA,kCACJA,qCAOpBA,kEAGAA,oCAEAA,kEAGAA,oCAEAA,yCAAuB,aAC8CA,wCAAUA,yCAA2BA,oCAASA,6BAC/GA,kDAAmG,YAE3FA,oCACJA,2BAEAA,uCACIA,oCACJA,2BAEAA,uCACIA,oCACJA,2BAEAA,uCACIA,oCACJA,2BAEAA,uCACIA,oCACJA,2BAEAA,uCACIA,oCACJA,2BAEAA,uCACIA,oCACJA,2BAEAA,uCACIA,oCACJA,+BAIRA,yCAA8D,aAA9DA,CAA8D,aAA9DA,CAA8D,aAA9DA,CAA8D,aAIbA,8CAAmBA,2BAEpDA,uCAA+BA,iFAAsDA,6BAGzFA,yCAA0E,eACzCA,kDAAUmC,eACnCnC,yCACIA,0EAEAA,yCAAgC,gBAAhCA,CAAgC,YAElBA,gGAA6CA,2BACnDA,kCACJA,+BAGRA,4CAGAA,yCAA4C,gBAKpCA,kDAAUmC,eAAa,YAAWgE,+DAJtCnG,2BAKAA,2CACIA,4DAAwCA,6BAEhDA,4CAKAA,yCAA4C,gBAKpCA,kDAAUmC,eAAa,YAAWgE,+DAJtCnG,2BAKAA,2CACIA,4DAAmCA,6BAE3CA,4CAIJA,mCAQhBA,yCAA2C,aAA3CA,CAA2C,YAA3CA,CAA2C,aAA3CA,CAA2C,aAA3CA,CAA2C,eAMnBA,kCACJA,2BACAA,yCAA8B,aACCA,qCAAUA,2BAErCA,oCAAGA,wDAA6BA,iCAK5CA,yCAA+B,aAA/BA,CAA+B,eAGnBA,kCACJA,2BAEAA,yCAA8B,aACCA,+BAAIA,2BAE/BA,oCAAGA,kDAAuBA,iCAKtCA,yCAA+B,aAA/BA,CAA+B,eAGnBA,kCACJA,2BAEAA,yCAA8B,aACCA,qCAAUA,2BAErCA,oCAAGA,4DAAiCA,gCACpCA,mEACAA,iCAKZA,yCAA+B,aAA/BA,CAA+B,eAGnBA,kCACJA,2BAEAA,yCAA8B,aACCA,kCAAOA,2BAElCA,oCAAGA,uHAA4FA,gDApY3DA,yEAoDjCA,kGAAsC,kDAiBUA,yEA+CxDA,kGAAoC,kDAQxBA,iGAAoC,kDAM5CA,iGAAoC,kDAqC3BA,8EAMJA,6EAsDAA,8EAKAA,6EAOmDA,yEA6CzDA,yEAGMA,2GAGUA,wIAKZA,gNAOEA,uHAGAA,wHAEFA,qHASEA,kHAGAA,mHAEFA,+PE9SjB85B,GAAb,IDAG,CACCxxB,KAAM,QACNyxB,aAAc,IAAMtO,uCAAwC3nB,KAAMk2B,GAAKA,EAAEnwB,cAE1E,CACCvB,KAAM,OACNyxB,aAAc,IAAMtO,2FAAqC3nB,KAAMk2B,GAAKA,EAAEC,aAEvE,CACC3xB,KAAM,UACNyxB,aAAc,IAAMtO,iGAA2C3nB,KAAMk2B,GAAKA,EAAEE,kBAI/E,CACC5xB,KAAM,KACNC,WAAY,eASP,IAAM4xB,GAAb,MAAM,sDAAOA,0GAJH,CAAEvwB,aAAsBvB,GAAQ,CAAE+xB,SAAS,EAAOC,gBAAiB,WAAYC,0BAA2B,cACxG1wB,QAGCuwB,GAAb,6BENO,IAAMI,GAAb,MAAM,sDAAOA,0GAXH,CACRzwB,eACAF,KACAI,KACAK,KACAJ,YACAF,KACAK,SAIWmwB,GAAb,GC7BaC,GAAb,MAAM,QAEJv/B,YAAoB6D,iBACpB27B,UAAUC,EAAuB90B,GAE/B,MAAM+0B,EAAID,EAAI13B,IAAI43B,cAElB,IAAIr4B,EAAaC,KAAKC,MAAMC,eAAeC,QAAQ,gBAInD,GAAIg4B,EAAE/L,QAAQ,sCAAuC,EACnD,OAAOhpB,EAAKi1B,OAAOH,GACd,CACL,MAAM1lB,GAAU,CACd8lB,YAAa,mBACblI,QAASlsB,gCAGPnE,GAAcA,EAAWK,QAC3BoS,GAAQpS,MAAWL,EAAWK,OAGhC,MAAMm4B,GAAUL,EAAIM,MAAM,CACxBC,WAAYjmB,KAEd,OAAOpP,EAAKi1B,OAAOE,mDA1BZP,GAAuBx6B,gFAAvBw6B,EAAuB1jB,QAAvB0jB,EAAuB,qBAJtB,SAIDA,GAAb,GCLO,MAAMU,GAA0C,CAAEp8B,OAAQq8B,MAEpDC,GAA6C,kBCSpD,YAA4B5sB,EARlC,YAAoBgJ,GAKhB,OAAS1K,aAAanK,QAAS6U,IAAShV,KAAKC,MAAOqK,aAAanK,QAAS6U,IAAQ2Z,SAAa3uB,KAAKC,MAAOqK,aAAanK,QAAS6U,IAAQ2Z,SAJtH,CACfpzB,KAAM,GAG0Is9B,CAG9GC,CAAU,SAAWC,GAC3D,OAASA,EAAO/8B,WACP/C,MACD,OAA8E,GAAzE+S,EAAMzQ,KAAK6kB,UAAW1b,GAAQA,EAAKwG,KAAO6tB,EAAOrgC,QAAQoiB,QAAQ5P,IAC3D,CACH3P,KAAM,IACCyQ,EAAMzQ,KACTw9B,EAAOrgC,QAAQoiB,UAKpB9O,OAEN9S,MACD,MAAO,CACHqC,KAAMyQ,EAAMzQ,KAAKyF,OAAQ0D,GAAQA,EAAKwG,KAAO6tB,EAAOrgC,QAAQoiB,QAAQ5P,UAGvE5R,MACD,MAAO,CACHiC,KAAM,YAIV,OAAOyQ,GCzBb,YAA2BA,EARjC,YAAoBgJ,GAKhB,OAAS1K,aAAanK,QAAS6U,IAAShV,KAAKC,MAAOqK,aAAanK,QAAS6U,IAAQgkB,QAAYh5B,KAAKC,MAAOqK,aAAanK,QAAS6U,IAAQgkB,QAJrH,CACfz9B,KAAM,GAGwIs9B,CAG7GC,CAAU,SAAWC,GAC1D,OAASA,EAAO/8B,WACP7C,MACD,OAA6E,GAAxE6S,EAAMzQ,KAAK6kB,UAAW1b,GAAQA,EAAKwG,IAAM6tB,EAAOrgC,QAAQoiB,QAAQ5P,IAC1D,CACH3P,KAAM,IACCyQ,EAAMzQ,KACTw9B,EAAOrgC,QAAQoiB,UAKpB9O,OAEN5S,MACD,MAAO,CACHmC,KAAMyQ,EAAMzQ,KAAKyF,OAAQ0D,GAAQA,EAAKwG,IAAM6tB,EAAOrgC,QAAQoiB,QAAQ5P,UAGtE7R,MAES,KAGTC,MACD,MAAO,CACHiC,KAAM,YAIV,OAAOyQ,GCjBb,YAAsBA,EAR5B,YAAkBgJ,GAKd,OAAQ1K,aAAanK,QAAQ6U,IAAQhV,KAAKC,MAAMqK,aAAanK,QAAQ6U,IAAMikB,KAAQj5B,KAAKC,MAAMqK,aAAanK,QAAQ6U,IAAMikB,KAJtG,CACf19B,KAAM,GAGsHs9B,CAGhGC,CAAS,SAAUC,GACnD,OAAQA,EAAO/8B,WACNnD,MACD,sCACOmT,GAAK,CACR5R,OAAQ2+B,EAAOrgC,QAAQwgB,kBAG1BpgB,MACD,IAAIsnB,EAAYpU,EAAMzQ,KAAK6kB,UAAU1b,GAAQA,EAAKwG,IAAM6tB,EAAOrgC,QAAQoiB,QAAQ5P,IAC/E,IAAIuO,EAAMsf,EAAOrgC,QAAQ+gB,IAAMsf,EAAOrgC,QAAQ+gB,IAAM,EAYpD,OATAA,EAAMla,KAAKwP,IAAI0K,EAAKsf,EAAOrgC,QAAQoiB,QAAQU,UAAY,GAC3C,IAAR/B,IACJA,EAAM,IAGY,IAAd2G,GAAoB2Y,EAAOrgC,QAAQoiB,QAAQ+J,SAASjc,OAAS,IAC7DwX,EAAYpU,EAAMzQ,KAAK6kB,UAAU1b,GAAQA,EAAK3I,MAAQg9B,EAAOrgC,QAAQoiB,QAAQ/e,QAG/D,IAAdqkB,EACO,CACH7kB,KAAM,IACCyQ,EAAMzQ,KAAK+d,OAAO,CAACC,EAAKuB,EAASjW,KAE5B0U,EAAIoD,KADJyD,GAAavb,EACLpI,+BACDqe,GAAO,CACVrB,IAAKqB,EAAQrB,IAAMA,EACnBE,KAAMof,EAAOrgC,QAAQoiB,QAAQiK,WAAagU,EAAOrgC,QAAQoiB,QAAQiK,WAAagU,EAAOrgC,QAAQoiB,QAAQ4B,QAAU5B,EAAQrB,IAAMA,KAGxHqB,GAGNvB,GACR,MAIJ,CACHhe,KAAM,IACCyQ,EAAMzQ,KADPkB,+BAGKs8B,EAAOrgC,QAAQoiB,SAAO,CACzBrB,IAAKA,EACLiD,MAAOqc,EAAOrgC,QAAQoiB,QAAQiK,WAAagU,EAAOrgC,QAAQoiB,QAAQiK,WAAagU,EAAOrgC,QAAQoiB,QAAQ4B,MACtG/C,IAAKF,GAAOsf,EAAOrgC,QAAQoiB,QAAQiK,WAAagU,EAAOrgC,QAAQoiB,QAAQiK,WAAagU,EAAOrgC,QAAQoiB,QAAQ4B,gBAM1H3jB,MACD,MAAO,CACHwC,KAAM,IACCyQ,EAAMzQ,KAAKyF,OAAO0D,GACbA,EAAKwG,KAAO6tB,EAAOrgC,QAAQoiB,QAAQ5P,IACnCxG,EAAK3I,OAASg9B,EAAOrgC,QAAQoiB,QAAQ/e,aAMpD/C,MACD,MAAO,CACHuC,KAAM,IACCw9B,EAAOrgC,QAAQygB,iBAIzB7f,MACD,MAAO,CACHiC,KAAM,YAIV,OAAOyQ,sCCrGZ,IAAMktB,GAAb,MAAM,QACFzgC,YAAYsgB,GACRA,EAAM5X,UAAUnE,IACZsN,aAAaK,QAAQ,QAAS3K,KAAKsT,UAAUtW,oDAH5Ck8B,GAAY17B,gFAAZ07B,EAAY5kB,QAAZ4kB,EAAY,qBAHT,SAGHA,GAAb,iFCUoB17B,uCAAwB,UAAxBA,CAAwB,OAAxBA,CAAwB,UAGMA,6BAAIA,6BAG1BA,mCAAI,UAC6BA,kCAASA,6BAG1CA,mCAAI,UAEIA,sCACAA,yCAAwBA,+EAAS27B,EAAT,0BAASA,mBAAuB37B,6BAE5DA,oCAAI,QAAJA,CAAI,WAEIA,gDAAqBA,+BACrBA,4CAAiBA,6BAErBA,oCAAI,WACAA,6CAAkBA,+BAClBA,sDAA2BA,iCAKvCA,uCAAgC,WACGA,kCAAQA,6BAG3CA,uCAAoC,WACGA,8BAAIA,6BAG3CA,oCAAI,WAEIA,qCACAA,yCAAwBA,+EAASk1B,EAAT,0BAASA,mBAAuBl1B,6BAE5DA,oCAAI,QAAJA,CAAI,WAEuDA,kCAAQA,6BAE/DA,oCAAI,WACuDA,2CAAiBA,6BAE5EA,oCAAI,WACmDA,kCAAQA,6BAE/DA,oCAAI,WACgDA,wCAAcA,yGAc9EA,sCAA8D,UAA9DA,CAA8D,UAETA,sBAAsBA,yDAAnEA,+GAA6CA,iGAHzDA,uCACIA,yCAKJA,qEALkDA,yECnE/D,IAAM47B,GAAb,MAAM,QAOL3gC,YACS6D,EACA0O,GADArS,cACAA,kBAPTA,gBAAa,GASZA,KAAKo6B,OAASp6B,KAAK2D,OAAOwE,OAAOK,UAAUF,IACtCA,aAAiBkyB,MACpBx6B,KAAK0gC,mBAKRp8B,WACCtE,KAAK86B,kBAGAA,kBAAe,qCAMpBC,EAAKC,iBAAmBD,EAAK1oB,WAAWiM,gBAJf,CACzB9S,QAAiB,EACjBA,OAAgB,MAEwCA,EANpC,EAMoCA,CAGzDstB,cACC94B,KAAKo6B,OAAOC,cAGbsG,cAAcjoB,GACb,MAAME,EAAsBF,EAAEG,OAAOC,QAAQ,MACvC8nB,EAAuBhoB,EAAO1H,cAAc,MAE9C0H,EAAO+T,UAAUM,SAAS,QAC7BU,EAAEiT,GAAS/S,QAAQ,IAAK,WACvBjV,EAAO+T,UAAUC,OAAO,UAIzBe,EAAEiT,GAAShT,UAAU,IAAK,WACzBhV,EAAO+T,UAAUG,IAAI,UAIvBpU,EAAEtM,iBACFsM,EAAEghB,kBAGHgH,iBACClY,SAAStX,cAAc,QAAQyb,UAAUC,OAAO,gBAChDpE,SAAStX,cAAc,QAAQunB,gBAAgB,SAGhDmB,iBAAiBlhB,GAChBA,EAAEtM,iBACFpM,KAAK4b,WAAalD,EAAE9B,cAAc1F,cAAc,iBAAiBlD,MACjEhO,KAAK2D,OAAOoc,SAAS,CAAC,sBAAuB,CAAEtO,YAAa,CAAEmK,WAAY5b,KAAK4b,4DA9DpE6kB,GAAmB57B,0HAAnB47B,EAAmB37B,k+DDfhCD,sCAAqD,UAArDA,CAAqD,YAEbA,iDAASmC,qBAAkBnC,+BAA0BA,2BAErFA,uCAAoDA,mDAAUmC,wBAC1DnC,wCAA2CA,+BAAMA,2BACjDA,mCAEAA,yCAA8CA,+BAA2BA,6BAG7EA,yCAAsE,WAAtEA,CAAsE,WAG1DA,gCACJA,2BACAA,oDA2DJA,2BACAA,uCAAe,WAEPA,0DACJA,2BACAA,mDASJA,6BAEJA,mCAEAA,wCAA0B,WAEGA,iCAA6BA,2BAClDA,sCACqBA,iCAA+BA,2BACpDA,sCACsBA,iCAA8BA,2BACpDA,sCACwCA,iCAA4BA,2BACpEA,sCACoBA,iCAA8BA,2EAzB9CA,iHAaPA,yLC5EA47B,GAAb,wCCYO,IAAMI,GAAb,MAAM,QAGL/gC,YACQsgB,EACAzc,EACAm9B,EACAC,EACA74B,EACAmD,GACCgG,GACAjI,IAPDpJ,aACAA,cACAA,gBACAA,oBACAA,oBACAA,qBACCA,4BACAA,kBAER,MAAMghC,GAAgBhhC,KAAK2D,OAAOwE,OAAOC,MACxCC,QAAOC,IAASA,cAAiBC,OAGlCy4B,GAAc54B,MAAKm0B,WAAS/zB,UAAU,YACP,QAA9By4B,YAAS/vB,cAAc,eAAOxP,WAAEirB,UAAUG,IAAI,UAC9C,IAAItmB,GAAQC,YAAY,KACqD,WAAxEH,OAAO46B,iBAAkB1Y,SAAStX,cAAc,SAAUiwB,aAC7Dz6B,cAAcF,IACdmnB,EAAE,iBAAiB5W,QAAQ,0BAE1B,OAGJiqB,GAAcx4B,UAAWF,MACnBA,GAAMT,IAAIC,SAAS,mBAAqBQ,GAAMT,IAAIC,SAAS,qBAAuBQ,GAAMT,IAAIC,SAAS,kBAAoBQ,GAAMT,IAAIC,SAAS,UAChJ9H,KAAK8gC,SAASM,iBAAiB,CAAC,EAAG,IAGpCphC,KAAKqL,aAAaylB,eAGfnf,aAAanK,QAAQ,wBAA0B+D,UAClDvL,KAAKogB,MAAMmB,SAAS,IAAI8f,OAGzB1vB,aAAaK,QAAQ,qBAAsBzG,UAI5C+1B,eAAe5oB,GACd1Y,KAAKkI,aAAayrB,kBAGnB+M,iBACClY,SAAStX,cAAc,QAAQyb,UAAUC,OAAO,gBAChDpE,SAAStX,cAAc,QAAQgG,MAAMqqB,UAAY,QAG5Cj9B,WAAQ,qCAGby2B,EAAKyG,WAAan6B,KAAKC,MAAMC,eAAeC,QAAQ,gBAEpDuzB,EAAK3xB,UAAUq4B,eAAe,OALjB,EAKiB,+CAzDnBZ,GAAYh8B,6VAAZg8B,EAAY/7B,8GAAZkC,sBACN,2MC5BPnC,yCAEAA,sCAAiCA,iDAASmC,qBAAkBnC,2BAE5DA,6CAEAA,yCACIA,kDAASmC,8BAAgCnC,+BAA6BA,kCAD9BA,oKDqB/Bg8B,GAAb,mBEmBAa,wBAAmBC,KA8DZ,IAAMC,GAAb,MAAM,QAAmB9hC,YAAoBsJ,oBAC3CA,EAAUq4B,eAAe,oDADdG,GAAS/8B,4EAAT+8B,EAASC,WAHRhB,0DAZD,CACT,CACEiB,QAASC,KACTC,SAAU3C,GACV4C,OAAO,GAET,CACEH,QAASI,YACTC,SAAU,OAEbC,SAlDQ,CACPC,gBACApzB,KACA+vB,GACA9vB,KACAH,KACAD,YACAJ,eACAE,KACAwwB,GACAkD,KACAC,aAAqB,CACnBC,QAAS,IACTC,aAAa,EACbC,YAAY,IAEdC,aAAoB5C,GAAa,CAAEE,kBACnC0C,gBAAuB,OAAQC,IAC/BD,gBAAuB,WAAYE,IACnCF,gBAAuB,UAAWG,IAClCC,aAAsB,IACtBC,aAAoC,CAAEC,SAAU,WAChDC,kBAGAn0B,KACAF,aAAwB,CACpBs0B,OAAQ,CACJrB,QAASsB,KACTC,WAAYC,GACZC,KAAM,CAACC,SAGjB3M,KACAF,KACAD,KACEjnB,MACFD,SAkBWoyB,GAAb,GAKM,YAA4Bt2B,GAChC,OAAO,IAAIm4B,IAAoBn4B,GC5G7BC,iBACFm4B,sBAGFC,oBAAyBC,gBAAgBhC,IACtC74B,MAAM86B,GAAOh7B,QAAQG,MAAM66B","names":["constructor","payload","this","types","UPDATE_CART_HEADER","ADD_TO_CART","REMOVE_FROM_CART","UPDATE_CART","ADD_TO_WISHLIST","REMOVE_FROM_WISHLIST","ADD_TO_COMPARE","REMOVE_FROM_COMPARE","REMOVE_ALL_COMPARE","REFRESH_STORE","pivaRegex","telRegex","emailRegex","getCartHeaderState","createFeatureSelector","getCartItemsState","getCompareState","getWishlistState","cartHeaderSelector","createSelector","cartHeaderState","custom_id","p","header","_a","idUtente","v","_b","shipping","t","_c","payment","f","_d","anaCF","h","_e","note","b","_f","cartItemsSelector","cartItemState","data","wishlistSelector","wishlistState","compareSelector","compareState","customSay","photo","comment","name","type","team","title","brands","image","AboutOneComponent","router","jsonLdService","meta","Object","sliderOpt","nav","dots","margin","loop","responsive","items","ngOnInit","setTitle","updateTag","content","insertSchema","JsonLDService","getTitle","i0","selectors","iconBoxes","adClass","icon","counters","limit","text","unit","members","img","CountToComponent","elRef","renderer","scrollHandler","pt","amount","to","from","height","parentNode","nativeElement","offsetTop","isExcuted","speed","window","pageYOffset","timer","setInterval","clearInterval","innerHTML","Math","ceil","toString","interval","ctx","AboutTwoPageComponent","sanitizer","LoginPageComponent","loginModel","JSON","parse","sessionStorage","getItem","token","navigateByUrl","ngAfterViewInit","currentUrl","url","includes","select","l","PageNotFoundComponent","utilsService","events","pipe","filter","event","NavigationEnd","subscribe","previousUrl","logAction","then","response","console","log","catch","error","ContactOnePageComponent","httpClient","formBuilder","translate","formService","toastrService","apiLoaded","jsonp","map","catchError","of","contactForm","group","Validators","email","phone","subject","msg","privacy1","privacy2","instant","contactSend","validateForm","sendFormContatto","next","code","success","info","status","message","submitted","updateValueAndValidity","ContactTwoPageComponent","ctx_r9","CaseStudyComponent","activeRoute","modalService","http","environment","params","loaded","loadData","slug","firstValueFrom","i","get","item","find","trackByFn","index","showModal","preventDefault","showVideoModal","CataloghiProdottiComponent","ctx_r4","LightboxRevolutionComponent","top","left","isOpen","imageSrc","showPopover","popover","popovers","forEach","hidePopover","routes","path","redirectTo","pathMatch","component","anaService","pwForm","controls","pwold","pwnew","pwconfirm","pwChange","invalid","loading","value","res","ChangePassword","PasswordChangeComponent","username","pwReset","ResetPassword","PasswordResetComponent","PagesRoutingModule","RouterModule","PagesModule","CommonModule","SharedModule","TranslateModule","OwlModule","HttpClientModule","HttpClientJsonpModule","ReactiveFormsModule","NgbModule","NgbNavModule","MatFormFieldModule","MatInputModule","MatCheckboxModule","MatSelectModule","MatSnackBarModule","MatDialogModule","MatIconModule","CountDownComponent","cdId","random","time","until","substring","length","Date","days","floor","hours","minutes","seconds","ImageComponent","el","handler","reason","fixedPt","width","parseFloat","setStyle","minHeight","backgroundColor","querySelector","LoginFormComponent","route","authenticateService","loginForm","password","rememberme","queryParams","backpage","localStorage","setValue","login","authenticate","sha","setItem","location","href","reload","ManageUserDataComponent","apiService","regForm","id","idAzienda","tipo","lastname","privateCli","company","vat","validators","taxid","address","town","city","validateSelectedOption","pcode","state","country","r","getCities","showDatiUtente","getPassword","setPassword","C","cities","fetchCities","registerPrivate_changeEvent","D","disable","X","te","ne","ae","enable","se","_g","checkVat","vatValue","CheckVatUser","setErrors","vatExist","control","selectedValue","invalidOption","regCity_changeEvent","selectedCityValue","selectedCity","PROV","REGIONE","datiUtente","fetchDatiUtente","register","regAna","userid","sendFormRegistrazione","newUser","PageHeaderComponent","QuantityInputComponent","changeQty","EventEmitter","ngOnChanges","current","increment","max","pzConf","emit","decrement","newValue","warning","changeCurrent","parseInt","currentTarget","w","routeAnimation","trigger","transition","query","style","display","optional","opacity","animate","animateChild","responsiveClass","navText","smartSpeed","autoplay","autoplayTimeout","animations","fadeIn","fadeInRightShorter","transform","fadeInRight","fadeInLeftShorter","fadeInLeft","fadeInUpShorter","fadeInDownShorter","blurIn","TabClickDirective","render","onClick","e","activeLink","parent","target","closest","removeClass","currentLink","addClass","SafeContentPipe","_sanitizer","bypassSecurityTrustHtml","bypassSecurityTrustStyle","bypassSecurityTrustScript","bypassSecurityTrustUrl","bypassSecurityTrustResourceUrl","pure","AnaService","form","httpOptions","headers","HttpHeaders","EmailMailFrom","EmailMailTo","rejectUnauthorized","post","loginModal","result","jsonlist","fetchDatiCF","COD_CF","initial","temp","GetCondCF","stringify","clear","OldPassword","NewPassword","body","oldPassword","newPassword","GetCodAgente","fetchCliList","COD_AGE1_CLI","COD_AGE2_CLI","RAG_SOC_CF","P_IVA_CF","COMUNE_CF","FLAG_CLI","P","factory","searchTerm","tags","isTop","isNew","isFeatured","isPromo","ApiService","fetchBlogData","perPage","key","page","fetchSinglePost","fetchHomeData","category","httpParams","HttpParams","set","condCF","append","CodCliente","Privato","codListinoString","CodListino","join","codScontoString","CodSconto","CodPag","fetchElementData","fetchElementBlog","getSingleProduct","CodArt","isQuickView","Qta","S","fetchProductDesc","descrizione","fetchProductAddProp","fetchShopData","prodFiltriInstance","prodFiltri","trim","L","fetchCategories","fetchCategory","categoria","fetchNItemxCategory","CategoriaId","fetchAttachment","EVENTO_ALLEGATO_ID","fetchTagsPerTipo","fetchTagsPerArticolo","codart","prov","PROV1","DES_PROV","fetchCONDPA","conpa","COD_PAGA","DES_PAGA","DES_TIPO_CONDPA","user","pass","idazienda","AuthenticateService","UserLoginModel","resUser","resCondCF","navigate","verifytoken","baseUrl","getFunctionUser","CartService","store","prezziSpedizioneService","BehaviorSubject","cartHeader","cartItems","cartStream","qtyTotal","reduce","acc","cur","qty","priceTotal","sum","updateCartHeader","currentTimestamp","generateCustomId","paddedIdUtente","padStart","calculateTax","dispatch","UpdateCartHeaderAction","taxValue","getValue","PERC_IVA","isNaN","isFinite","tax","updateShippingCost","newShippingCost","setPrezzoSpedizione","addToCart","product","canAddToCart","AddToCartAction","removeFromCart","RemoveFromCartAction","clearCart","cartItem","updateCart","UpdateCartAction","isInCart","pcs_pack","stock","sendCart","IdUtente","anaData","codPag","speseSped","createPaypalPayment","paypalApiUrl","client_id","client_secret","domain","protocol","host","_items","netPriceTot","itemTax","TotalPrice","price","push","description","short_desc","quantity","toFixed","sku","currency","priceTotalValue","dataora","pagamento","intent","payer","payment_method","transactions","total","details","subtotal","handling_fee","shipping_discount","insurance","custom","payment_options","allowed_payment_method","soft_descriptor","item_list","shipping_address","recipient_name","line1","country_code","postal_code","note_to_payer","redirect_urls","return_url","cancel_url","base64Auth","btoa","approvalUrl","links","link","rel","regPayment","docId","paymentId","date","day","getDate","month","getMonth","getFullYear","getHours","getMinutes","getSeconds","CompareService","compareItems","compareStream","compareQty","addToCompare","findIndex","AddToCompareAction","removeFromCompare","RemoveFromCompareAction","clearAllCompare","ClearAllCompareAction","isInCompare","FormService","expandedItems","errorMessage","controlName","hasOwnProperty","errors","label","inputElement","document","HTMLInputElement","placeholder","HTMLTextAreaElement","HTMLSelectElement","selectedIndex","selectedOption","options","outerText","required","getRawValue","sendJoinNewsletter","_document","removeStructuredData","els","c","Array","head","getElementsByClassName","removeChild","schema","className","script","shouldAppend","createElement","setAttribute","scriptType","appendChild","dataSchema","contactPoint","telephone","contactType","aggregateRating","ratingValue","reviewCount","DOCUMENT","ctx_r14","ctx_r33","ctx_r36","ctx_r38","ctx_r40","ctx_r44","ctx_r46","ctx_r48","QuickViewComponent","cartService","wishlistService","compareService","onTranslate","itemChange","color","colorName","size","disabled","min","minPrice","maxPrice","variationGroup","variants","color_name","sale_price","paddingTop","pictures","refreshSelectableGroup","self","imagesLoaded","on","classList","remove","querySelectorAll","add","currentIndex","addCart","contains","newProduct","selectedVariant","addToWishlist","isInWishlist","addToWishList","tempArray","sizeArray","colorArray","toggle","$","slideDown","slideUp","selectColor","u","selectSize","val","onChangeQty","clearSelection","closeQuickView","modal","click","changeImage","$event","singleSlider","ctx_r6","QuickViewTwoComponent","NewsletterModalComponent","changeCheck","checkState","closeModal","dismiss","Cookie","expires","ctx_r7","ctx_r10","LoginModalComponent","m_regForm","VideoModalComponent","ConfirmDialogComponent","dialogRef","MAT_DIALOG_DATA","AlertDialogComponent","SnackBarComponent","snackBar","MAT_SNACK_BAR_DATA","ModalService","dialog","centered","windowClass","beforeDismiss","U","H","Promise","resolve","setTimeout","focus","preventScroll","scrollable","openNewsletter","clearTimeout","dismissAll","open","modalOption1","showLoginModal","modalOption2","modalOption3","componentInstance","showQuickView","modalOption4","showQuickViewTwo","openConfirmDialog","afterClosed","openAlertDialog","openSnackBar","customcss","openFromComponent","duration","verticalPosition","panelClass","PrezziSpedizioneService","VEN","NORD","CENTRO","SUD","ESTERO","prezzoSpedizione$","prezzoSpedizioneSubject","asObservable","ottieniPrezzo","regione","prezzoSpedizione","codiceRegione","toUpperCase","prezziPerRegione","sottogruppi","gruppo","values","prezzo","UtilsService","isSafariBrowser","sUsrAg","navigator","userAgent","indexOf","isEdgeBrowser","setStickyHeader","outerHeight","innerWidth","isSticky","stickyHeight","scrollToPageContent","pos","timerId","scrollBy","scrollTo","behavior","scrollTop","timer_id","catFilter","products","flag","cat","attrFilter","attr","ratings","shareOnLinkedIn","imageUrl","encodedUrl","encodeURIComponent","shareOnFacebook","encodedTitle","encodedDescription","encodedImageUrl","shareOnInstagram","shareOnX","sendEmailAdmin","oggettoMail","testoEmail","OggettoMail","TestoEmail","testoLog","WishlistService","wishlist","wishlistStream","wishlistQty","AddToWishListAction","removeFromWishList","RemoveFromWishListAction","moveToCart","LazyLoadImageModule","FormsModule","NgbDatepickerModule","MatTableModule","MatPaginatorModule","MatSortModule","MatProgressBarModule","MatDatepickerModule","MatNativeDateModule","production","demo","SERVER_URL","VALUTA","COD_IVA_DEFAULT","COD_NO_IVA","COD_ART_SPED","backend","baseURL","IDDitta","IDPagDefault","EmailFrom","EmailTo","recaptcha","siteKey","paypal","paypalReturn","paypalCancelReturn","paypalImageUrl","paypalClient_id","paypalClient_secret","MobileButtonComponent","utils","toggleMenu","html","removeAttribute","ctx_r16","HeaderSearchComponent","addEventListener","closeSearchForm","ngOnDestroy","removeEventListener","fetchProducts","suggestions","searchProducts","matchEmphasize","regExp","RegExp","replace","match","goProductPage","searchToggle","stopPropagation","showSearchForm","submitSearchForm","onCatSelect","WishlistMenuComponent","ctx_r5","CartMenuComponent","CategoryMenuComponent","getMergedParams","categoriaId","subscr","unsubscribe","dropdownMenu","MainMenuComponent","NavigationStart","viewAllDemos","list","parentElement","ctx_r2","HeaderComponent","caricaCategorie","a","categories","FooterComponent","year","LayoutComponent","containerClass","isBottomSticky","handleKeyDown","resizeHandle","prepareRoute","outlet","isActivated","activatedRoute","ComingSoonPageComponent","introSlider","brandSlider","productSlider","ContentAnimDirective","animationBuilder","createAnimation","handleAnimation","slider","player","play","first","onscroll","rect","getBoundingClientRect","innerHeight","bottom","build","aniName","create","onStart","ctx_r11","ProductTwelveComponent","quickView","AttrFilterPipe","_r1","attr_r3","ProductsCollectionComponent","all","featured","_new","children","joinForm","paramsColl1","prodColl1","loaded1","OrdDir","paramsColl2","prodColl2","loaded2","paramsColl3","prodColl3","loaded3","paramsColl4","prodColl4","loaded4","joinSend","IndexComponent","loadChildren","m","ShopModule","ProductModule","AppRoutingModule","useHash","anchorScrolling","scrollPositionRestoration","HomeModule","TokenInterceptorService","intercept","req","s","toLowerCase","handle","ContentType","jsonReq","clone","setHeaders","appReducers","routerReducer","metaReducers","initialState","getState","action","compare","cart","StoreService","ctx_r3","MobileMenuComponent","hideMobileMenu","submenuToggle","submenu","AppComponent","viewPort","storeService","navigationEnd","ve","getComputedStyle","visibility","scrollToPosition","RefreshStoreAction","onWindowScroll","overflowX","loginmodel","setDefaultLang","registerLocaleData","localeIt","AppModule","bootstrap","provide","HTTP_INTERCEPTORS","useClass","multi","LOCALE_ID","useValue","imports","BrowserModule","BrowserAnimationsModule","ToastrModule","timeOut","progressBar","enableHtml","StoreModule","cartReducer","wishlistReducer","compareReducer","EffectsModule","StoreRouterConnectingModule","stateKey","StoreDevtoolsModule","loader","TranslateLoader","useFactory","HttpLoaderFactory","deps","HttpClient","TranslateHttpLoader","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","err"],"sourceRoot":"webpack:///","sources":["./src/app/core/actions/actions.ts","./src/app/core/constants/constants.ts","./src/app/core/selectors/selectors.ts","./src/app/pages/others/about-one/about-one-data.ts","./src/app/pages/others/about-one/about-one.component.ts","./src/app/pages/others/about-one/about-one.component.html","./src/app/pages/others/about-two/about-two-data.ts","./src/app/shared/components/count-to/count-to.component.ts","./src/app/shared/components/count-to/count-to.component.html","./src/app/pages/others/about-two/about-two.component.html","./src/app/pages/others/about-two/about-two.component.ts","./src/app/pages/others/login/login.component.html","./src/app/pages/others/login/login.component.ts","./src/app/pages/others/page-not-found/page-not-found.component.ts","./src/app/pages/others/page-not-found/page-not-found.component.html","./src/app/pages/others/contact-one/contact-one.component.html","./src/app/pages/others/contact-one/contact-one.component.ts","./src/app/pages/others/contact-two/contact-two.component.html","./src/app/pages/others/contact-two/contact-two.component.ts","./src/app/pages/others/case-study/case-study.component.html","./src/app/pages/others/case-study/case-study.component.ts","./src/app/pages/others/cataloghi-prodotti/cataloghi-prodotti.component.html","./src/app/pages/others/cataloghi-prodotti/cataloghi-prodotti.component.ts","./src/app/pages/others/lightbox-revolution/lightbox-revolution.component.html","./src/app/pages/others/lightbox-revolution/lightbox-revolution.component.ts","./src/app/pages/others/password-change/password-change.component.html","./src/app/pages/others/password-reset/password-reset.component.html","./src/app/pages/others/pages-routing.module.ts","./src/app/pages/others/password-change/password-change.component.ts","./src/app/pages/others/password-reset/password-reset.component.ts","./src/app/pages/others/pages.module.ts","./src/app/shared/components/count-down/count-down.component.html","./src/app/shared/components/count-down/count-down.component.ts","./src/app/shared/components/image/image.component.ts","./src/app/shared/components/image/image.component.html","./src/app/shared/components/login-form/login-form.component.html","./src/app/shared/components/login-form/login-form.component.ts","./src/app/shared/components/manage-user-data/manage-user-data.component.html","./src/app/shared/components/manage-user-data/manage-user-data.component.ts","./src/app/shared/components/page-header/page-header.component.ts","./src/app/shared/components/page-header/page-header.component.html","./src/app/shared/components/quantity-input/quantity-input.component.ts","./src/app/shared/components/quantity-input/quantity-input.component.html","./src/app/shared/data.ts","./src/app/shared/directives/custom-tab-click.directive.ts","./src/app/shared/pipes/safe-content.pipe.ts","./src/app/shared/services/ana.service.ts","./src/app/shared/classes/prod-filtri.model.ts","./src/app/shared/services/api.service.ts","./src/app/shared/classes/UserLoginModel.ts","./src/app/shared/services/authenticate.service.ts","./src/app/shared/services/cart.service.ts","./src/app/shared/services/compare.service.ts","./src/app/shared/services/form.service.ts","./src/app/shared/services/json-ld.service.ts","./src/app/shared/components/modals/quick-view/quick-view.component.html","./src/app/shared/components/modals/quick-view/quick-view.component.ts","./src/app/shared/components/modals/quick-view-two/quick-view-two.component.html","./src/app/shared/components/modals/quick-view-two/quick-view-two.component.ts","./src/app/shared/components/modals/newsletter-modal/newsletter-modal.component.ts","./src/app/shared/components/modals/newsletter-modal/newsletter-modal.component.html","./src/app/shared/components/modals/login-modal/login-modal.component.html","./src/app/shared/components/modals/login-modal/login-modal.component.ts","./src/app/shared/components/modals/video-modal/video-modal.component.ts","./src/app/shared/components/modals/video-modal/video-modal.component.html","./src/app/shared/components/modals/confirm-dialog/confirm-dialog.component.ts","./src/app/shared/components/modals/confirm-dialog/confirm-dialog.component.html","./src/app/shared/components/modals/alert-dialog/alert-dialog.component.ts","./src/app/shared/components/modals/alert-dialog/alert-dialog.component.html","./src/app/shared/components/modals/snack-bar/snack-bar.component.ts","./src/app/shared/components/modals/snack-bar/snack-bar.component.html","./src/app/shared/services/modal.service.ts","./src/app/shared/services/prezzi-spedizione.service.ts","./src/app/shared/services/utils.service.ts","./src/app/shared/services/wishlist.service.ts","./src/app/shared/shared.module.ts","./src/environments/environment.prod.ts","./src/app/shared/components/headers/shared/mobile-button/mobile-button.component.ts","./src/app/shared/components/headers/shared/mobile-button/mobile-button.component.html","./src/app/shared/components/headers/shared/header-search/header-search.component.html","./src/app/shared/components/headers/shared/header-search/header-search.component.ts","./src/app/shared/components/headers/shared/wishlist-menu/wishlist-menu.component.ts","./src/app/shared/components/headers/shared/wishlist-menu/wishlist-menu.component.html","./src/app/shared/components/headers/shared/cart-menu/cart-menu.component.html","./src/app/shared/components/headers/shared/cart-menu/cart-menu.component.ts","./src/app/shared/components/headers/shared/category-menu/category-menu.component.html","./src/app/shared/components/headers/shared/category-menu/category-menu.component.ts","./src/app/shared/components/headers/shared/main-menu/main-menu.component.ts","./src/app/shared/components/headers/shared/main-menu/main-menu.component.html","./src/app/shared/components/headers/header/header.component.html","./src/app/shared/components/headers/header/header.component.ts","./src/app/shared/components/footer/footer.component.html","./src/app/shared/components/footer/footer.component.ts","./src/app/shared/layout/layout.component.ts","./src/app/shared/layout/layout.component.html","./src/app/pages/others/coming-soon/coming-soon.component.ts","./src/app/pages/others/coming-soon/coming-soon.component.html","./src/app/pages/home/data.ts","./src/app/shared/directives/content-anim.directive.ts","./src/app/shared/components/product/product-twelve/product-twelve.component.html","./src/app/shared/components/product/product-twelve/product-twelve.component.ts","./src/app/shared/pipes/attr-filter.pipe.ts","./src/app/pages/home/products-collection/products-collection.component.html","./src/app/pages/home/products-collection/products-collection.component.ts","./src/app/pages/home/index/index.component.html","./src/app/app-routing.module.ts","./src/app/pages/home/index/index.component.ts","./src/app/pages/home/home.module.ts","./src/app/shared/services/token-interceptor.service.ts","./src/app/core/reducers/app.reducer.ts","./src/app/core/reducers/wishlist.reducer.ts","./src/app/core/reducers/compare.reducer.ts","./src/app/core/reducers/cart.reducer.ts","./src/app/core/store/store.service.ts","./src/app/shared/components/headers/shared/mobile-menu/mobile-menu.component.html","./src/app/shared/components/headers/shared/mobile-menu/mobile-menu.component.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/main.ts"],"sourcesContent":["import { Action } from '@ngrx/store';\r\n\r\nimport * as types from '../constants/constants';\r\nimport { Product } from '../../shared/classes/product.model';\r\nimport { CartItem } from '../../shared/classes/cart-item.model';\r\nimport { CartHeader } from 'src/app/shared/classes/cart-header.model';\r\n\r\n/************************** Cart Action ***************************/\r\nexport class UpdateCartHeaderAction implements Action {\r\n readonly type = types.UPDATE_CART_HEADER;\r\n constructor(public payload: { cartHeader: CartHeader }) { }\r\n}\r\n/**\r\n * Add to Cart\r\n */\r\nexport class AddToCartAction implements Action {\r\n readonly type = types.ADD_TO_CART;\r\n constructor(public payload: { product: Product, qty: number }) { }\r\n}\r\n\r\n/**\r\n * Remove from Cart\r\n */\r\nexport class RemoveFromCartAction implements Action {\r\n readonly type = types.REMOVE_FROM_CART;\r\n constructor(public payload: { product: CartItem }) { }\r\n}\r\n\r\n/**\r\n * Update Cart Items with qtys\r\n */\r\nexport class UpdateCartAction implements Action {\r\n readonly type = types.UPDATE_CART;\r\n constructor(public payload: { cartItems: CartItem[] }) { }\r\n}\r\n\r\n\r\n/************************** Wishlist Action ***************************/\r\n\r\n/**\r\n * Add to Wishlist\r\n */\r\nexport class AddToWishListAction implements Action {\r\n readonly type = types.ADD_TO_WISHLIST;\r\n constructor(public payload: { product: Product }) { }\r\n}\r\n\r\n/**\r\n * Remove from WishList\r\n */\r\nexport class RemoveFromWishListAction implements Action {\r\n readonly type = types.REMOVE_FROM_WISHLIST;\r\n constructor(public payload: { product: Product }) { }\r\n}\r\n\r\n\r\n\r\n/************************** Compare Action ***************************/\r\n\r\n/**\r\n * Add to Compare\r\n */\r\nexport class AddToCompareAction implements Action {\r\n readonly type = types.ADD_TO_COMPARE;\r\n constructor(public payload: { product: Product }) { }\r\n}\r\n\r\n/**\r\n * Remove from Compare\r\n */\r\nexport class RemoveFromCompareAction implements Action {\r\n readonly type = types.REMOVE_FROM_COMPARE;\r\n constructor(public payload: { product: Product }) { }\r\n}\r\n\r\n/**\r\n * Remove all in compare list\r\n */\r\nexport class ClearAllCompareAction implements Action {\r\n readonly type = types.REMOVE_ALL_COMPARE;\r\n constructor(public payload: {}) { }\r\n}\r\n\r\n/**\r\n * Refresh store when demo changes\r\n */\r\nexport class RefreshStoreAction implements Action {\r\n readonly type = types.REFRESH_STORE;\r\n constructor() { }\r\n}\r\n","// Cart\r\nexport const UPDATE_CART_HEADER = 'UPDATE_CART_HEADER';\r\nexport const ADD_TO_CART = 'ADD_TO_CART';\r\nexport const REMOVE_FROM_CART = 'REMOVE_FROM_CART';\r\nexport const CLEAR_CART = 'CLEAR_CART';\r\nexport const UPDATE_CART = \"UPDATE_CART\";\r\n\r\n// WishList\r\nexport const ADD_TO_WISHLIST = 'ADD_TO_WISHLIST';\r\nexport const REMOVE_FROM_WISHLIST = 'REMOVE_FROM_WISHLIST';\r\n\r\n// Compare\r\nexport const ADD_TO_COMPARE = 'ADD_TO_COMPARE';\r\nexport const REMOVE_FROM_COMPARE = 'REMOVE_FROM_COMPARE';\r\nexport const REMOVE_ALL_COMPARE = 'REMOVE_ALL_COMPARE';\r\n\r\n// Refresh store\r\nexport const REFRESH_STORE = 'REFRESH_STORE';\r\n\r\n//Regex\r\nexport const pivaRegex = '^([a-zA-Z]{2}[0-9]{11}|[0-9]{11})$';\r\nexport const telRegex = '^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$';\r\nexport const emailRegex = '^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+[.][a-zA-Z]{2,4}$';\r\n","// NGRX\r\nimport { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { CartHeaderState, CartItemState } from '../reducers/cart.reducer';\r\nimport { CompareState } from '../reducers/compare.reducer';\r\nimport { WishlistState } from '../reducers/wishlist.reducer';\r\n\r\nexport const getCartHeaderState = createFeatureSelector('cart');\r\nexport const getCartItemsState = createFeatureSelector('cart');\r\nexport const getCompareState = createFeatureSelector('compare');\r\nexport const getWishlistState = createFeatureSelector('wishlist');\r\n\r\n\r\n/************************ CartHeader Selectors ***********************/\r\nexport const cartHeaderSelector = createSelector(\r\n getCartHeaderState, cartHeaderState => {\r\n return {\r\n custom_id: cartHeaderState.header?.custom_id,\r\n idUtente: cartHeaderState.header?.idUtente,\r\n shipping: cartHeaderState.header?.shipping,\r\n payment: cartHeaderState.header?.payment,\r\n anaCF: cartHeaderState.header?.anaCF,\r\n note: cartHeaderState.header?.note,\r\n };\r\n }\r\n);\r\n\r\n\r\n\r\n/************************ CartItem Selectors ***********************/\r\nexport const cartItemsSelector = createSelector(\r\n getCartItemsState, cartItemState => {\r\n return cartItemState.data;\r\n }\r\n);\r\n\r\n//tentativo di aggiornare gli item del carrello nel selettore // funzionamento parziale\r\n// export const cartItemsSelector = createSelector(\r\n// getCartItemsState,\r\n// (cartItemState, apiService: ApiService) => {\r\n// const cartItems: CartItem[] = cartItemState.data; // Dichiarare esplicitamente il tipo di cartItems\r\n\r\n// // Controllo preliminare per assicurarsi che cartItems non sia undefined o null\r\n// if (!cartItems) {\r\n// return [];\r\n// }\r\n\r\n// // Nel tuo componente o servizio\r\n// const updatedCartItems: CartItem[] = [];\r\n// for (const item of cartItems) {\r\n// apiService.getSingleProduct(item.id, false, item.qty).subscribe(result => {\r\n// if (result != null) {\r\n// const newItem = { ...item };\r\n// newItem.price = result.product.price;\r\n// updatedCartItems.push(newItem);\r\n// }\r\n// });\r\n// }\r\n\r\n// // Dopo aver aggiornato tutti gli oggetti CartItem, puoi utilizzare il nuovo array aggiornato\r\n// // Ad esempio, assegnalo a una variabile o passalo a un altro metodo o componente\r\n// return updatedCartItems;\r\n// }\r\n// );\r\n\r\n/************************ Wishlist Selectors ***********************/\r\nexport const wishlistSelector = createSelector(\r\n getWishlistState, wishlistState => {\r\n return wishlistState.data;\r\n }\r\n);\r\n\r\n/************************ Compare Selectors ***********************/\r\nexport const compareSelector = createSelector(\r\n getCompareState, compareState => {\r\n return compareState.data;\r\n }\r\n);","interface Testmonial {\r\n photo?: string,\r\n comment: string,\r\n name: string,\r\n type: string\r\n}\r\n\r\ninterface member {\r\n photo: string,\r\n name: string,\r\n title: string\r\n}\r\n\r\nexport const customSay: Testmonial[] = [\r\n {\r\n photo: \"assets/images/testimonials/user-1.jpg\",\r\n comment: \"“ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque aliquet nibh nec urna. In nisi neque, aliquet vel, dapibus id, mattis vel, nisi. Sed pretium, ligula sollicitudin laoreet viverra, tortor libero sodales leo, eget blandit nunc tortor eu nibh. Nullam mollis. Ut justo. Suspendisse potenti. ”\",\r\n name: \"Jenson Gregory\",\r\n type: \"Customer\"\r\n },\r\n {\r\n photo: \"assets/images/testimonials/user-2.jpg\",\r\n comment: \"“ Impedit, ratione sequi, sunt incidunt magnam et. Delectus obcaecati optio eius error libero perferendis nesciunt atque dolores magni recusandae! Doloremque quidem error eum quis similique doloribus natus qui ut ipsum.Velit quos ipsa exercitationem, vel unde obcaecati impedit eveniet non. ”\",\r\n name: \"Victoria Ventura\",\r\n type: \"Customer\"\r\n }\r\n]\r\n\r\nexport const team: member[] = [\r\n {\r\n photo: \"assets/images/team/member-1.jpg\",\r\n name: \"Samanta Grey\",\r\n title: \"Founder & CEO\"\r\n },\r\n {\r\n photo: \"assets/images/team/member-2.jpg\",\r\n name: \"Bruce Sutton\",\r\n title: \"Sales & Marketing Manager\"\r\n },\r\n {\r\n photo: \"assets/images/team/member-3.jpg\",\r\n name: \"Janet Joy\",\r\n title: \"Product Manager\"\r\n }\r\n]\r\n\r\nexport const brands = [\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/1.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/2.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/3.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/4.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/5.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/6.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/7.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/8.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/9.png\"\r\n }\r\n]","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\n\nimport { customSay, team, brands } from './about-one-data';\nimport { sliderOpt } from 'src/app/shared/data';\nimport { JsonLDService } from 'src/app/shared/services/json-ld.service';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\n\n@Component({\n\tselector: 'pages-about-page',\n\ttemplateUrl: './about-one.component.html',\n\tstyleUrls: ['./about-one.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class AboutOneComponent implements OnInit {\n\n\tcustomSay = customSay;\n\tbrands = brands;\n\tteam = team;\n\tsliderOption = {\n\t\t...sliderOpt,\n\t\tnav: false,\n\t\tdots: true,\n\t\tmargin: 20,\n\t\tloop: false,\n\t\tresponsive: {\n\t\t\t1200: {\n\t\t\t\tnav: true\n\t\t\t}\n\t\t}\n\t}\n\tteamOption = {\n\t\t...sliderOpt,\n\t\tnav: false,\n\t\tdots: false,\n\t\titems: 3,\n\t\tmargin: 20,\n\t\tloop: false,\n\t\tresponsive: {\n\t\t\t0: {\n\t\t\t\titems: 1\n\t\t\t},\n\t\t\t576: {\n\t\t\t\titems: 2\n\t\t\t},\n\t\t\t992: {\n\t\t\t\titems: 3\n\t\t\t}\n\t\t}\n\t}\n\n\tconstructor(\n\t\tpublic router: Router,\n\t\tprivate jsonLdService: JsonLDService,\n\t\tprivate title: Title,\n\t\tprivate meta: Meta) {\n\t}\n\n\tngOnInit(): void {\n\t\tthis.title.setTitle(\"About us\")\n\t\tthis.meta.updateTag({ name: 'description', content: \"About us\" })\n\t\tthis.jsonLdService.insertSchema(JsonLDService.websiteSchema('', '', this.title.getTitle(), this.title.getTitle()));\n\n\t}\n}\n","
\n \n\n
\n
\n

Vivere sotto una nuova luce

\n
\n
\n\n
\n
\n
\n
\n

\n Siamo ciò che facciamo

\n
\n
\n
\n
\n \"CEO\"\n

\n Pierino Dal Cavaliere
\n Founder & CEO\n

\n
\n\n
\n

\n Immagina un gruppo di esperti in prodotti per l’illuminazione a LED, unito a trent’anni\n di esperienza nel campo della comunicazione luminosa.\n Immagina un’azienda che dal 2009 seleziona e importa dal mercato internazionale i LED con il\n miglior rapporto tra innovazione, qualità e prezzo.\n Immagina un laboratorio in cui la luce viene osservata, studiata e messa alla prova.\n Tutto questo è MyLiteLed.\n

\n

\n Il mondo dell’illuminazione evolve quotidianamente, offrendo possibilità costruttive e di design\n inedite, quindi ogni progetto necessita di LED con caratteristiche di luminosità, durata e\n affidabilità differenti.\n Ogni applicazione deve essere opportunamente valutata per costi e benefici.\n La nostra struttura, proprio perchè specializzata e non legata agli interessi dei singoli\n marchi, rappresenta un partner prezioso per rivenditrori, installatori, insegnisti,\n architetti, light designer e arredatori alla ricerca del prodotto ideale per realizzare\n la loro idea di luce.\n

\n
\n
\n\n
\n
\n\n
\n\n
\n
\n

\n Scarica la nostra presentazione aziendale\n

\n \n Presentazione\n \n
\n
\n\n
\n\n
\n
\n
\n

\n In cosa crediamo

\n
\n\n
\n

\n Crediamo nel potere dei piccoli gesti.\n Proponiamo sistemi di illuminazione a basso impatto energetico, investiamo in soluzioni che permettono uno sviluppo sostenibile, per vivere davvero sotto una nuova luce.\n Crediamo in uno stile di vita amico dell’ambiente e lo dimostriamo impegnandoci ogni giorno nella diffusione di un atteggiamento responsabile e rispettoso delle generazioni future.\n Crediamo nell’importanza del cliente e dei suoi desideri. Per questo cerchiamo di realizzare ciò che ci chiede, di rassicurarlo se ha dubbi, di suggerirgli soluzioni.\n Crediamo nelle promesse e nei patti.\n Crediamo che il lavoro, come la vita, sia un viaggio verso il miglioramento;\n un viaggio in cui non è importante la meta, ma il cammino e gli amici.\n

\n
\n
\n\n
\n
\n\n
\n\n
\n
\n
\n
\n

\n Possiamo aiutarti?\n

\n

\n Chiedi informazioni e consigli ai nostri esperti.\n
Sapranno indicarti la soluzione migliore.\n

\n
\n \n
\n
    \n
  • \n \n + 39 0444 82 12 61\n
  • \n
  • \n \n info@myliteled.com\n
  • \n
\n
\n
\n\n
\n
\n\n
\n
\n

\n Seguici su Linkedin\n

\n

Diventa follower della nostra pagina aziendale Linkedin. Rimani in contatto con noi e segui gli aggiornamenti.

\n \n Visita la nostra pagina\n \n
\n
\n
\n
","interface IconBox {\r\n adClass: string;\r\n icon: string;\r\n title: string;\r\n content: string;\r\n}\r\n\r\ninterface Counter {\r\n limit: number;\r\n text: string;\r\n unit?: string;\r\n}\r\n\r\nexport const iconBoxes: IconBox[] = [\r\n {\r\n adClass: \"icon-box icon-box-sm text-center\",\r\n icon: \"icon-puzzle-piece\",\r\n title: \"Design Quality\",\r\n content: \"Sed egestas, ante et vulputate volutpat, eros pede semper est, vitae luctus metus libero
eu augue.\"\r\n },\r\n {\r\n adClass: \"icon-box icon-box-sm text-center\",\r\n icon: \"icon-life-ring\",\r\n title: \"Professional Support\",\r\n content: \"Praesent dapibus, neque id cursus faucibus,
tortor neque egestas augue, eu vulputate
magna eros eu erat. \"\r\n },\r\n {\r\n adClass: \"icon-box icon-box-sm text-center\",\r\n icon: \"icon-heart-o\",\r\n title: \"Made With Love\",\r\n content: \"Pellentesque a diam sit amet mi ullamcorper
vehicula. Nullam quis massa sit amet
nibh viverra malesuada.\"\r\n }\r\n]\r\n\r\nexport const counters: Counter[] = [\r\n {\r\n limit: 40,\r\n text: \"Happy Customers\",\r\n unit: \"k+\"\r\n },\r\n {\r\n limit: 20,\r\n text: \"Years in Business\",\r\n unit: \"+\"\r\n },\r\n {\r\n limit: 95,\r\n text: \"Return Clients\",\r\n unit: \"%\"\r\n },\r\n {\r\n limit: 15,\r\n text: \"Award Won\"\r\n }\r\n]\r\n\r\nexport const brands = [\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/1.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/2.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/3.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/4.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/5.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/6.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/7.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/8.png\"\r\n },\r\n {\r\n name: \"brand\",\r\n image: \"assets/images/brands/9.png\"\r\n }\r\n]\r\n\r\nexport const members = [\r\n {\r\n img: \"assets/images/team/about-2/member-1.jpg\",\r\n name: \"Samanta Grey\",\r\n title: \"Founder & CEO\"\r\n },\r\n {\r\n img: \"assets/images/team/about-2/member-2.jpg\",\r\n name: \"Bruce Sutton\",\r\n title: \"Sales & Marketing Manager\"\r\n },\r\n {\r\n img: \"assets/images/team/about-2/member-3.jpg\",\r\n name: \"Janet Joy\",\r\n title: \"Product Manager\"\r\n },\r\n {\r\n img: \"assets/images/team/about-2/member-4.jpg\",\r\n name: \"Mark Pocket\",\r\n title: \"Product Manager\"\r\n },\r\n {\r\n img: \"assets/images/team/about-2/member-5.jpg\",\r\n name: \"Damion Blue\",\r\n title: \"Sales & Marketing Manager\"\r\n },\r\n {\r\n img: \"assets/images/team/about-2/member-6.jpg\",\r\n name: \"Lenard Smith\",\r\n title: \"Product Manager\"\r\n },\r\n {\r\n img: \"assets/images/team/about-2/member-7.jpg\",\r\n name: \"Rachel Green\",\r\n title: \"Product Manager\"\r\n },\r\n {\r\n img: \"assets/images/team/about-2/member-8.jpg\",\r\n name: \"David Doe\",\r\n title: \"Product Manager\"\r\n }\r\n]","import { Component, OnInit, Input, ElementRef, Renderer2, HostListener } from '@angular/core';\n\n@Component({\n\tselector: 'molla-count-to',\n\ttemplateUrl: './count-to.component.html',\n\tstyleUrls: ['./count-to.component.scss']\n})\n\nexport class CountToComponent implements OnInit {\n\n\t@Input() to: number;\n\t@Input() from: number;\n\t@Input() speed: number;\n\t@Input() interval: number;\n\n\tisExcuted = false;\n\n\tconstructor(public elRef: ElementRef, private renderer: Renderer2) {\n\t}\n\n\t@HostListener('window:scroll', ['$event'])\n\n\tscrollHandler() {\n\t\tlet pt = 0,\n\t\t\tamount = this.to - this.from,\n\t\t\theight = 0\n\t\t\t\n\t\t\t//MP GESTIONE NULL PER ERRORE offsetTop\n\t\t\tif (this.renderer.parentNode(this.renderer.parentNode(this.renderer.parentNode(this.elRef.nativeElement))) != null) {\n\t\t\t\theight = this.renderer.parentNode(this.renderer.parentNode(this.renderer.parentNode(this.elRef.nativeElement))).offsetTop\n\t\t\t};\n\n\t\tif (!this.isExcuted && pt <= this.speed && height >= window.pageYOffset) {\n\t\t\tif (!this.isExcuted) {\n\t\t\t\tlet timer = setInterval(() => {\n\t\t\t\t\tif (pt >= this.speed) {\n\t\t\t\t\t\tclearInterval(timer);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.elRef.nativeElement.innerHTML = Math.ceil(pt * amount / this.speed).toString();\n\t\t\t\t\tpt = pt + this.interval;\n\t\t\t\t}, this.interval);\n\t\t\t}\n\n\t\t\tthis.isExcuted = true;\n\t\t}\n\t}\n\n\tngOnInit(): void {\n\t}\n}\n","0","
\n \n \n\n
\n
\n
\n
\n
\n

Who We Are

\n

Sed pretium, ligula sollicitudin laoreet viverra, tortor libero sodales leo, eget blandit\n nunc tortor eu nibh. Suspendisse potenti. Sed egestas, ante et vulputate volutpat, uctus\n metus libero eu augue. Morbi purus libero, faucibus adipiscing, commodo quis, gravida id,\n est. Sed lectus. Praesent elementum hendrerit tortor. Sed semper lorem at felis.

\n \"signature\"\n\n \n
\n
\n
\n\n
\n
\n \n \n \n
\n

{{ item.title }}

\n

\n
\n
\n
\n
\n\n
\n\n
\n
\n
\n
\n
\n
\n 0\n \n {{ counter.unit }}\n
\n

{{ counter.text }}

\n
\n
\n
\n
\n
\n\n
\n
\n

Meet Our Team

\n\n
\n
\n
\n
\n \n\n
\n
\n \n \n \n
\n
\n
\n\n
\n

{{member.name}}{{member.title}}

\n
\n
\n
\n
\n\n \n
\n
\n\n
\n
\n
\n
\n

The world's premium design brands in one destination.

\n

Phasellus hendrerit. Pellentesque aliquet nibh nec urna. In nisi neque, aliquet vel, dapibus\n id, mattis vel, nis

\n
\n\n
\n
\n
\n \n \"Brand\n \n
\n
\n
\n
\n
\n
\n
\n
","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { iconBoxes, counters, brands, members } from './about-two-data';\n\n@Component({\n\tselector: 'pages-about-two-page',\n\ttemplateUrl: './about-two.component.html',\n\tstyleUrls: ['./about-two.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class AboutTwoPageComponent implements OnInit {\n\n\ticonBoxes = iconBoxes;\n\tbrands = brands;\n\tmembers = members;\n\tcounters = counters;\n\n\tconstructor(public sanitizer: DomSanitizer) {\n\t}\n\n\tngOnInit(): void {\n\t}\n}\n","
\n \n\n
\n
\n
\n \n\n
\n
\n
\n
\n
","import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NgbNav } from '@ng-bootstrap/ng-bootstrap';\nimport { LoginModel } from 'src/app/shared/classes/LoginModel';\nimport { LoginModalComponent } from 'src/app/shared/components/modals/login-modal/login-modal.component';\n\n\n@Component({\n\tselector: 'pages-login',\n\ttemplateUrl: './login.component.html',\n\tstyleUrls: ['./login.component.scss'],\n})\n\nexport class LoginPageComponent implements OnInit, AfterViewInit {\n\t@ViewChild('nav') nav: NgbNav; // Riferimento a ngbNav\n\tloginModel!: LoginModel;\n\n\tconstructor(\n\t\tprivate router: Router) {\n\t}\n\n\n\tngOnInit(): void {\n\t\tthis.loginModel = JSON.parse(sessionStorage.getItem('currentUser')!);\n\n\t\tif (this.loginModel && this.loginModel.token) {\n\t\t\tthis.router.navigateByUrl('/shop/dashboard');\n\t\t}\n\t}\n\n\tngAfterViewInit(): void {\n\t\tconst currentUrl = this.router.url;\n\t\t// Confronta l'URL con le tue rotte\n\t\tif (currentUrl.includes('/pages/login')) {\n\t\t\tthis.nav.select('login');\n\t\t} else if (currentUrl.includes('/pages/register')) {\n\t\t\tthis.nav.select('registration');\n\t\t} else if (currentUrl.includes('/pages/edit-account-address')) {\n\t\t\tthis.nav.select('registration');\n\t\t}\n\n\t}\n}","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\n@Component({\n selector: 'pages-page-not-found',\n templateUrl: './page-not-found.component.html',\n styleUrls: ['./page-not-found.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class PageNotFoundComponent implements OnInit {\n private previousUrl: string;\n\n constructor(\n private utilsService: UtilsService,\n private router: Router\n ) {}\n\n ngOnInit(): void {\n // Ascolta gli eventi di navigazione\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd)\n ).subscribe((event: NavigationEnd) => {\n // L'URL precedente è disponibile in event.url\n this.previousUrl = event.url;\n \n this.utilsService.logAction(`Pagina non trovata - ${this.previousUrl}`).then(response => {\n console.log(response);\n })\n .catch(error => {\n console.log(error);\n });\n });\n }\n}\n","
\n \n\n
\n
\n

Error 404

\n

We are sorry, the page you've requested is not available.

\n \n BACK TO HOMEPAGE\n \n \n
\n
\n
","
\n \n\n
\n
\n\n \n \n
\n
\n\n
\n
\n
\n
\n

{{\"contactus.info\" | translate}}

\n \n\n
\n
\n
    \n
  • \n \n Via S. Bocconcello, 6 - 36040 Meledo di Sarego - VI\n
  • \n
  • \n \n + 39 0444 82 12 61\n
  • \n
  • \n \n info@myliteled.com\n
  • \n
\n
\n
\n\n
\n
\n
\n

Uffici

\n\n
    \n
  • \n \n Lunedì-venerdì
    08.30-12.30/13.30-17.30
    \n
  • \n
\n
\n
\n\n
\n
\n

Magazzino

\n\n
    \n
  • \n \n Lunedì-venerdì
    08.00-12.30/13.30-17.00
    \n
  • \n
\n
\n
\n
\n
\n
\n

{{\"contactus.contactus\" | translate}}

\n \n\n
\n
\n
\n \n
\n {{ \"ctrl.name\" | translate }}\n
\n
\n\n
\n \n
\n {{ \"ctrl.email\" | translate }}\n
\n
\n
\n\n
\n
\n \n
\n {{ \"ctrl.phone\" | translate }}\n
\n
\n\n
\n \n
\n {{ \"ctrl.subject\" | translate }}\n
\n
\n
\n \n \n
\n {{ \"ctrl.msg\" | translate }}\n
\n\n
\n \n \n
\n
\n {{ \"ctrl.dichiarazione\" | translate }}\n
\n \n
\n \n \n
\n
\n {{ \"ctrl.consenso\" | translate }}\n
\n \n \n
\n
\n
\n\n
\n\n
\n

Dove siamo

\n\n
\n
\n
\n
\n
\n
\n \"image\"\n
\n
\n
\n
\n

Sede Legale

\n

NOVA PUBBLICITÀ SRL Unipersonale

\n\n Partita IVA 03217420243
\n Codice SDI 2LCMINU\n\n
Via S. Bocconcello, 32
\n
36040 Meledo di Sarego - VI
\n\n \n\n
\n
\n\n
\n
\n

Uffici

\n \n
Via S. Bocconcello, 6
\n
36040 Meledo di Sarego - VI
\n \n\n

Orario:

\n
Lun - Ven 08.30-12.30/13.30-17.30
\n\n
\n
\n\n
\n
\n

Ufficio vendite

\n \n
Via S. Bocconcello, 6
\n
36040 Meledo di Sarego - VI
\n \n\n

Orario:

\n
Lun - Ven 08.30-12.30/13.30-17.30
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { of } from 'rxjs/internal/observable/of';\nimport { map, catchError } from 'rxjs/operators';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ModalService } from 'src/app/shared/services/modal.service';\nimport { FormService } from 'src/app/shared/services/form.service';\nimport { ToastrService } from 'ngx-toastr';\nimport { JsonLDService } from 'src/app/shared/services/json-ld.service';\nimport { Meta, Title } from '@angular/platform-browser';\n\n@Component({\n\tselector: 'pages-contact-one',\n\ttemplateUrl: './contact-one.component.html',\n\tstyleUrls: ['./contact-one.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class ContactOnePageComponent implements OnInit {\n\tapiLoaded: Observable;\n\tcontactForm!: FormGroup;\n\tloading: boolean = false;\n\tsubmitted: boolean = false;\n \n\tconstructor(\n\t\tprivate httpClient: HttpClient,\n\t\tprivate formBuilder: FormBuilder,\n\t\tprivate translate: TranslateService,\n\t\tprivate formService: FormService,\n\t\tprivate toastrService: ToastrService,\n\t\tprivate title: Title,\n\t\tprivate meta: Meta,\n\t\tprivate jsonLdService: JsonLDService) {\n\t\tthis.apiLoaded = httpClient.jsonp('https://maps.googleapis.com/maps/api/js?key=AIzaSyBzlLYISGjL_ovJwAehh6ydhB56fCCpPQw', 'callback')\n\t\t.pipe(\n\t\t\tmap(() => true),\n\t\t\tcatchError(() => of(false)),\n\t\t);\n\t}\n\t\n\tngOnInit(): void {\n\t\tthis.contactForm = this.formBuilder.group({\n\t\t\tname: ['', Validators.required],\n\t\t\temail: ['', [Validators.required, Validators.email]],\n\t\t\tphone: [''],\n\t\t\tsubject: [''],\n\t\t\tmsg: ['', Validators.required],\n\t\t\tprivacy1: [null, Validators.requiredTrue],\n\t\t\tprivacy2: [null, Validators.requiredTrue]\n\t\t});\n\n\t\tthis.title.setTitle(this.translate.instant('contactus.contactus'))\n\t\tthis.meta.updateTag({ name: 'description', content: 'LED, insegne, cassonetti, lettere scatolate' })\n\t\tthis.meta.updateTag({ name: 'keywords', content: 'Prodotti a LED per insegne, cassonetti, lettere scatolate.' })\n\t\tthis.jsonLdService.insertSchema(JsonLDService.websiteSchema('Organization'));\n\t}\n\n\tasync contactSend() {\n\t\t// Validazione dei campi del modulo\n\t\tif (!this.formService.validateForm(this.contactForm)) {\n\t\t\tthis.submitted=true;\n\t\t\treturn; // Esci se la validazione fallisce\n\t\t}\t\t\n\n\t\tthis.formService.sendFormContatto(this.contactForm).subscribe({\n\n\t\t\tnext: data => {\n\t\t\t\tif (data.code === 0) {\n\t\t\t\t\t/*this.modalService.openSnackBar(this.translate.instant('msg.confReg'))*/\n\t\t\t\t\tthis.toastrService.success(this.translate.instant('msg.confContct'))\n\t\t\t\t} else {\n\t\t\t\t\t//this.modalService.openAlertDialog(data!.info)\n\t\t\t\t\tthis.toastrService.error(data!.info)\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t},\n\t\t\terror: error => {\n\t\t\t\tif (error.status ) {\n\t\t\t\t\t//this.alertService.error(error.message);\n\t\t\t\t\t//this.modalService.openAlertDialog(error.message);\n\t\t\t\t\tthis.toastrService.error(error.message)\n\t\t\t\t} else { \n\t\t\t\t\t//this.alertService.error(error.info);\n\t\t\t\t\t//this.modalService.openAlertDialog(error.info);\n\t\t\t\t\tthis.toastrService.error(error.info)\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t});\n\t}\n}","
\n \n\n \n\n
\n
\n
\n \n
\n
\n\n
\n
\n
\n
\n

Office

\n\n
1 New York Plaza, New York,
NY 10004, USA
\n
\n
\n\n
\n
\n

Start a Conversation

\n\n \n \n
\n
\n\n
\n
\n

Social

\n\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n\n
\n
\n
\n
\n

Get In Touch

\n

\n We collaborate with ambitious brands and people; we’d love to build something great\n together.\n

\n

Vestibulum volutpat, lacus a ultrices sagittis, mi neque euismod dui, eu\n pulvinar nunc sapien ornare nisl. Phasellus pede arcu, dapibus eu, fermentum et, dapibus\n sed, urna.

\n
\n\n
\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n \n \n\n \n \n\n
\n \n
\n
\n
\n
\n
\n
\n
","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { of } from 'rxjs/internal/observable/of';\nimport { map, catchError } from 'rxjs/operators';\n\n@Component({\n\tselector: 'pages-contact-two',\n\ttemplateUrl: './contact-two.component.html',\n\tstyleUrls: ['./contact-two.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class ContactTwoPageComponent implements OnInit {\n\tapiLoaded: Observable;\n \n\tconstructor(httpClient: HttpClient) {\n\t\tthis.apiLoaded = httpClient.jsonp('https://maps.googleapis.com/maps/api/js?key=AIzaSyBzlLYISGjL_ovJwAehh6ydhB56fCCpPQw', 'callback')\n\t\t.pipe(\n\t\t\tmap(() => true),\n\t\t\tcatchError(() => of(false)),\n\t\t);\n\t}\n\t\n\tngOnInit(): void {\n\t}\n}","
\n\t\n\n\t
\n\t\t
\n\t\t\t
\n\t\t
\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{{ item?.title }}\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{{ item?.subtitle }}\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
Nome del cliente
\n\t\t\t\t\t\t\t{{ item?.cliente }}\n\t\t\t\t\t\t\t
Categoria
\n\t\t\t\t\t\t\t{{ item?.categoria }}\n\t\t\t\t\t\t\t
Data
\n\t\t\t\t\t\t\t{{ item?.date }}\n\t\t\t\t\t\t\t
Sfida
\n\t\t\t\t\t\t\t{{ item?.sfida }}\n\t\t\t\t\t\t\t
Risultati
\n\t\t\t\t\t\t\t{{ item?.risultati }}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

{{ item?.highlight }}

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t Leggi la storia\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\n\t
\n
","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { HttpClient } from '@angular/common/http'; // Importa HttpClient\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { ModalService } from 'src/app/shared/services/modal.service';\nimport { sliderOpt } from 'src/app/shared/data';\nimport { environment } from 'src/environments/environment';\nimport { caseStudy } from 'src/app/shared/classes/case-study.model';\nimport { firstValueFrom } from 'rxjs';\nimport { select } from '@ngrx/store';\nimport { JsonLDService } from 'src/app/shared/services/json-ld.service';\nimport { Meta, Title } from '@angular/platform-browser';\n\n@Component({\n selector: 'molla-case-study',\n templateUrl: './case-study.component.html',\n styleUrls: ['./case-study.component.scss']\n})\nexport class CaseStudyComponent implements OnInit {\n\n item: caseStudy;\n loaded = false;\n sliderOption2 = { ...sliderOpt, loop: false };\n SERVER_URL = environment.SERVER_URL;\n paddingTop = '100%';\n\n constructor(\n public activeRoute: ActivatedRoute,\n\t\tpublic router: Router,\n public utilsService: UtilsService,\n private modalService: ModalService,\n private http: HttpClient,\n private jsonLdService: JsonLDService,\n\t\tprivate title: Title,\n\t\tprivate meta: Meta\n ) {\n \n }\n\n ngOnInit(): void {\n this.activeRoute.params.subscribe(params => {\n this.loaded = false;\n\n this.loadData(params['slug'])\n\n this.loaded = true;\n\n this.title.setTitle(\"Case study\")\n\t\t\tthis.meta.updateTag({ name: 'description',content: \"Case study\" })\n this.jsonLdService.insertSchema(JsonLDService.websiteSchema('', '', this.title.getTitle(), this.title.getTitle() ));\n \n });\n }\n\n async loadData(slug) {\n\n try {\n // Carica i dati JSON dal file utilizzando HttpClient\n const data: caseStudy[] = await firstValueFrom(this.http.get('assets/data-files/caseStudy.json'));\n\n // Filtra i dati in base al parametro 'slug'\n this.item = data.find(item => item.slug === slug);\n\n // if (this.case) {\n // this.paddingTop = Math.round((parseFloat(this.case.pictures[0].height) / parseFloat(this.case.pictures[0].width)) * 100) + '%';\n // }\n\n\n } catch (error) {\n console.log(error)\n }\n\n }\n\n trackByFn(index: number, item: any) {\n if (!item) return null;\n return item.slug;\n }\n\n showModal(event: Event, url:string) {\n event.preventDefault();\n this.modalService.showVideoModal(url);\n }\n}","
\n \n\n
\n
\n
\n

{{ \"cataloghi.titolo2\" | translate }}\n \n {{ \"cataloghi.titolo3\" | translate }}\n
\n {{ \"cataloghi.titolo4\" | translate }}\n
\n

\n
\n
\n
\n \n
\n
\n
","import { HttpClient } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { firstValueFrom } from 'rxjs';\nimport { cataloghiProdotti } from 'src/app/shared/classes/cataloghi-prodotti.model';\nimport { JsonLDService } from 'src/app/shared/services/json-ld.service';\nimport { environment } from 'src/environments/environment';\n\n@Component({\n selector: 'molla-cataloghi-prodotti',\n templateUrl: './cataloghi-prodotti.component.html',\n styleUrls: ['./cataloghi-prodotti.component.scss']\n})\nexport class CataloghiProdottiComponent implements OnInit {\n data: cataloghiProdotti[]\n loaded = false;\n SERVER_URL = environment.SERVER_URL;\n paddingTop = '100%';\n\n constructor(\n public activeRoute: ActivatedRoute,\n private http: HttpClient,\n private translate: TranslateService,\n\t\tprivate title: Title,\n\t\tprivate meta: Meta,\n\t\tprivate jsonLdService: JsonLDService\n ) {\n \n }\n\n ngOnInit(): void {\n this.loaded = false;\n\n this.loadData()\n\n this.title.setTitle(this.translate.instant('cataloghi.titolo2'))\n this.meta.updateTag({ name: 'description', content: 'LED, insegne, cassonetti, lettere scatolate' })\n this.meta.updateTag({ name: 'keywords', content: 'Prodotti a LED per insegne, cassonetti, lettere scatolate.' })\n this.jsonLdService.insertSchema(JsonLDService.websiteSchema('Organization'));\n\n this.loaded = true;\n }\n\n async loadData() {\n\n try {\n // Carica i dati JSON dal file utilizzando HttpClient\n this.data = await firstValueFrom(this.http.get('assets/data-files/cataloghiProdotti.json'));\n\n } catch (error) {\n console.log(error)\n }\n\n }\n}","
\n \n\n
\n
\n

Lightbox Revolution
\n Metti in movimento la tua comunicazione\n

\n
\n
\n\n
\n
\n
\n\n
\n

\n Lightbox Revolution è un sistema di schede LED che, posto all’interno di lightbox, permette di\n realizzare cassonetti monofacciali luminosi caratterizzati da una innovativa retroilluminazione\n animata. Le animazioni, realizzate attraverso appositi programmi, consentono di mettere in\n risalto aree specifiche della grafica stampata sul tessuto e generare diversi effetti visivi.\n

\n

\n I Lightbox Revolution sono a luce bianca (no RGB) e sono consigliati per l’utilizzo in ambienti\n interni.\n

\n

\n Com’è fatto
\n

\n

\n Il sistema di retroilluminazione dinamica a LED è composto da


\n\n Schede LED
\n Controller
\n Alimentatore
\n Cavo flat per la trasmissione dei dati\n\n

\n Va completato con

\n
\n Cassonetto monofacciale con profilo da 5,5 cm
\n Tessuto con grafica stampata
\n Animazione luminosa con effetti luce\n\n
\n\n
\n\n

\n Chiedi un preventivo
\n

\n \"Chiedi\n

Contattaci senza impegno, siamo a disposizione per incontri dimostrativi

\n vendite@myliteled.com\n\n

Scheda Tecnica

\n \n Scarica Scheda\n \n\n
\n
\n\n
\n
\n\n
\n\n
\n
\n
\n
\n

\n FACILE CAMBIARE\n

\n

Sostituisci l’immagine in pochi istanti e con una chiavetta USB carica un’altra animazione.\n

\n

In due mosse ottieni una nuova comunicazione!

\n
\n
\n\n\n
\n \"lightbox\n\n
\n \n \n \n \n \n \n\n
\n
\n \n\n

\n {{ popover.title }}\n

\n

\n
\n
\n
\n
\n\n\n\n
\n
\n
\n
\n\n
\n\n
\n
\n
\n
\n \n \n\n
\n \n
\n
\n
\n
\n
\n \n \n\n
\n \n
\n
\n
\n
\n
\n \n \n\n
\n \n
\n
\n
\n
\n
\n\n
\n\n
\n
\n

\n Segui Lightbox Revolution\n sul nostro canale YouTube\n

\n \n Segui\n \n
\n
\n\n
\n\n
\n
\n\n
\n

\n Vantaggi
\n

\n\n
\n
\n

\n Comunicazione dinamica\n

\n
\n
\n

\n Effetti luminosi di forte appeal\n

\n
\n
\n

\n Schede LED modulabili\n

\n
\n
\n

\n Messaggio pubblicitario aggiornabile\n

\n
\n
\n

\n Tessuto intercambiabile\n

\n
\n
\n

\n Cassonetto riutilizzabile\n

\n
\n
\n
\n\n\n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\nimport { JsonLDService } from 'src/app/shared/services/json-ld.service';\nimport { ModalService } from 'src/app/shared/services/modal.service';\n\n@Component({\n\tselector: 'molla-lightbox-revolution',\n\ttemplateUrl: './lightbox-revolution.component.html',\n\tstyleUrls: ['./lightbox-revolution.component.scss']\n})\nexport class LightboxRevolutionComponent implements OnInit {\n\n\tpopovers = [\n\t\t{\n\t\t top: '90%',\n\t\t left: '87%',\n\t\t isOpen: false,\n\t\t imageSrc: '/assets/images/lightbox-revolution/lightbox-revolution-cambia%20animazione-5aff29ac.jpeg',\n\t\t title: 'Cambia animazione quando vuoi',\n\t\t content: 'In pochi secondi sostituisci l’animazione luminosa con una semplice USB collegata alla centralina sul retro del pannello.'\n\t\t},\n\t\t{\n\t\t top: '60%',\n\t\t left: '45%',\n\t\t isOpen: false,\n\t\t imageSrc: '/assets/images/lightbox-revolution/lightbox-revolution-telo_intercambiabile-19e148e6.jpeg',\n\t\t title: 'Tessuto intercambiabile',\n\t\t content: 'Il tessuto stampato si sostituisce facilmente in pochi istanti. Cambia grafica tutte le volte che desideri!',\n\t\t},\n\t\t{\n\t\t\ttop: '15%',\n\t\t\tleft: '80%',\n\t\t\tisOpen: false,\n\t\t\timageSrc: '',\n\t\t\ttitle: 'Animazione luminosa',\n\t\t\tcontent: 'Crea movimenti di luce coordinati con la grafica per mettere in risalto le parti più importanti della comunicazione.',\n\t\t },\n\t\t {\n\t\t\ttop: '10%',\n\t\t\tleft: '10%',\n\t\t\tisOpen: false,\n\t\t\timageSrc: '',\n\t\t\ttitle: 'Cassonetto luminoso per tessuti',\n\t\t\tcontent: 'Cassonetto in alluminio con profilo per applicazione semplice e veloce di tessuti con gommino.
Dimensioni su misura (multipli di 32 cm) e spessore unico da 55 mm.',\n\t\t },\n\t];\n\n\tconstructor(\n\t\tpublic router: Router,\n\t\tprivate jsonLdService: JsonLDService,\n\t\tprivate title: Title,\n\t\tprivate meta: Meta,\n\t\tprivate modalService: ModalService) {\n\t}\n\n\tngOnInit(): void {\n\t\tthis.title.setTitle(\"Lightbox Revolution\")\n\t\tthis.meta.updateTag({ name: 'description', content: \"Lightbox Revolution. Metti in movimento la tua comunicazione\" })\n\t\tthis.jsonLdService.insertSchema(JsonLDService.websiteSchema('', '', this.title.getTitle(), this.title.getTitle()));\n\n\t}\n\n\tshowPopover(popover: any): void {\n\t\tthis.popovers.forEach((p) => (p.isOpen = false));\n\t\tpopover.isOpen = true;\n\t}\n\n\thidePopover(): void {\n\t\tthis.popovers.forEach((p) => (p.isOpen = false));\n\t}\n\n\tshowModal(event: Event, url: string) {\n\t\tevent.preventDefault();\n\t\tthis.modalService.showVideoModal(url);\n\t}\n\n}\n","
\n \n \n\n
\n
\n
\n
\n

{{\"pwchange.pwchange\" | translate}}

\n

{{\"pwchange.infoText\" | translate}}

\n\n\n
\n\n \n
\n {{ \"ctrl.pwold\" | translate }}\n
\n\n \n
\n {{ \"ctrl.pwnew\" | translate }}\n
\n\n \n
\n {{ \"ctrl.pwconfirm\" | translate }}\n
\n\n\n
\n \n\n
\n
\n


\n
\n
\n
\n
\n
","
\n \n \n\n
\n
\n
\n
\n

{{\"pwreset.pwreset\" | translate}}

\n

\n\n\n
\n\n \n
\n {{ \"ctrl.username\" | translate }}\n
\n\n\n
\n \n
\n
\n\n


\n
\n
\n
\n
\n
","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\n\r\nimport { AboutOneComponent } from './about-one/about-one.component';\r\nimport { AboutTwoPageComponent } from './about-two/about-two.component';\r\nimport { LoginPageComponent } from './login/login.component';\r\nimport { PageNotFoundComponent } from './page-not-found/page-not-found.component';\r\nimport { ContactOnePageComponent } from './contact-one/contact-one.component';\r\nimport { ContactTwoPageComponent } from './contact-two/contact-two.component';\r\nimport { CaseStudyComponent } from './case-study/case-study.component';\r\nimport { CataloghiProdottiComponent } from './cataloghi-prodotti/cataloghi-prodotti.component';\r\nimport { LightboxRevolutionComponent } from './lightbox-revolution/lightbox-revolution.component';\r\nimport { PasswordChangeComponent } from './password-change/password-change.component';\r\nimport { PasswordResetComponent } from './password-reset/password-reset.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n redirectTo: 'about',\r\n pathMatch: 'full'\r\n },\r\n {\r\n path: 'about',\r\n component: AboutOneComponent\r\n },\r\n {\r\n path: 'about-2',\r\n component: AboutTwoPageComponent\r\n },\r\n {\r\n path: '404',\r\n component: PageNotFoundComponent\r\n },\r\n {\r\n path: 'login',\r\n component: LoginPageComponent\r\n },\r\n {\r\n path: 'register',\r\n component: LoginPageComponent\r\n }, \r\n {\r\n path: 'edit-account-address',\r\n component: LoginPageComponent\r\n }, \r\n {\r\n path: 'contact',\r\n component: ContactOnePageComponent\r\n },\r\n {\r\n path: 'contact-2',\r\n component: ContactTwoPageComponent\r\n },\r\n {\r\n path: 'pw-change',\r\n component:PasswordChangeComponent\r\n }, \r\n {\r\n path: 'pw-reset',\r\n component:PasswordResetComponent\r\n },\r\n\t{\r\n\t\tpath: 'case-study/:slug',\r\n\t\tcomponent: CaseStudyComponent\r\n\t},\r\n {\r\n path: 'cataloghi-prodotti/:slug',\r\n component: CataloghiProdottiComponent\r\n },\r\n {\r\n path: 'lightbox-revolution',\r\n component: LightboxRevolutionComponent\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\n\r\nexport class PagesRoutingModule { };","import { Component, OnInit } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { AnaService } from 'src/app/shared/services/ana.service';\nimport { FormService } from 'src/app/shared/services/form.service';\n\n\n@Component({\n selector: 'molla-password-change',\n templateUrl: './password-change.component.html',\n styleUrls: ['./password-change.component.scss']\n})\nexport class PasswordChangeComponent implements OnInit {\n\n pwForm!: FormGroup;\n\tloading: boolean = false;\n\tsubmitted: boolean = false;\n\n constructor(\n private anaService: AnaService,\n private formBuilder: FormBuilder,\n\t\tprivate translate: TranslateService,\n\t\tprivate formService: FormService,\n\t\tprivate toastrService: ToastrService,\n\t\tprivate router: Router,\n ) { }\n\n get f() { return this.pwForm.controls; }\n\n ngOnInit(): void {\n\n //Carico i controlli della form\n\t\tthis.pwForm = this.formBuilder.group({\n\t\t\tpwold: ['', Validators.required],\n pwnew: ['', Validators.required],\n pwconfirm: ['', Validators.required],\n });\n\n }\n\n\n async pwChange(){\n this.submitted = true;\n\t\tif (this.pwForm.invalid) {\n\t\t\treturn;\n\t\t}\n\t\tthis.loading = true;\n\n\n const pwnew = this.f['pwnew'].value;\n const pwconfirm = this.f['pwconfirm'].value;\n\n // Check if pwnew and pwconfirm match\n if (pwnew !== pwconfirm) {\n this.toastrService.error(\"Le password non coincidono.\")\n this.submitted = true;\n\t\t\treturn; // Esci se la validazione fallisce\n\t\t}\t\n\n // Validazione dei campi del modulo\n\t\tif (!this.formService.validateForm(this.pwForm)) {\n\t\t\tthis.submitted = true;\n\t\t\treturn; // Esci se la validazione fallisce\n\t\t}\t\t\n\n\t\tlet res = await this.anaService.ChangePassword(this.f['pwold'].value, this.f['pwnew'].value,)\n\n\t\tif (res && res.code === 0) {\n this.toastrService.success(this.translate.instant('msg.changePwOk'))\n this.router.navigateByUrl('/shop/dashboard');\n } else {\n this.toastrService.error((res && res.info) ? res.info : this.translate.instant('msg.changePwKo'))\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { LoginModel } from 'src/app/shared/classes/LoginModel';\nimport { AnaService } from 'src/app/shared/services/ana.service';\nimport { FormService } from 'src/app/shared/services/form.service';\n\n@Component({\n selector: 'molla-password-reset',\n templateUrl: './password-reset.component.html',\n styleUrls: ['./password-reset.component.scss']\n})\nexport class PasswordResetComponent implements OnInit {\n\n loginModel!: LoginModel;\n \n pwForm!: FormGroup;\n\tloading: boolean = false;\n\tsubmitted: boolean = false;\n\n constructor(\n private anaService: AnaService,\n private formBuilder: FormBuilder,\n\t\tprivate translate: TranslateService,\n\t\tprivate formService: FormService,\n\t\tprivate toastrService: ToastrService,\n\t\tprivate router: Router,\n ) { }\n\n get f() { return this.pwForm.controls; }\n\n ngOnInit(): void {\n\n this.loginModel = JSON.parse(sessionStorage.getItem('currentUser')!);\n\n\n\t\tif (this.loginModel && this.loginModel.token) {\n\t\t\tthis.router.navigateByUrl('/shop/dashboard');\n\t\t}\n\n //Carico i controlli della form\n\t\tthis.pwForm = this.formBuilder.group({\n\t\t\tusername: ['', Validators.required],\n\t\t});\n\n }\n\n async pwReset(){\n this.submitted = true;\n\t\tif (this.pwForm.invalid) {\n\t\t\treturn;\n\t\t}\n\t\tthis.loading = true;\n\n // Validazione dei campi del modulo\n\t\tif (!this.formService.validateForm(this.pwForm)) {\n\t\t\tthis.submitted = true;\n\t\t\treturn; // Esci se la validazione fallisce\n\t\t}\t\t\n\n\t\tlet res = await this.anaService.ResetPassword(this.f['username'].value,)\n\n\t\tif (res && res.code === 0) {\n this.toastrService.success(this.translate.instant('msg.fetchPwOk'))\n } else {\n this.toastrService.error((res && res.info) ? res.info : this.translate.instant('msg.fetchPwKo'))\n }\n }\n}\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgbModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { RouterModule } from '@angular/router';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { OwlModule } from 'angular-owl-carousel';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { HttpClientModule, HttpClientJsonpModule } from '@angular/common/http';\r\n\r\nimport { PagesRoutingModule } from './pages-routing.module';\r\nimport { SharedModule } from '../../shared/shared.module';\r\n\r\nimport { AboutOneComponent } from './about-one/about-one.component';\r\nimport { AboutTwoPageComponent } from './about-two/about-two.component';\r\nimport { LoginPageComponent } from './login/login.component';\r\nimport { PageNotFoundComponent } from './page-not-found/page-not-found.component';\r\nimport { ContactOnePageComponent } from './contact-one/contact-one.component';\r\nimport { ContactTwoPageComponent } from './contact-two/contact-two.component';\r\nimport { ComingSoonPageComponent } from './coming-soon/coming-soon.component';\r\n\r\n//Mat Component\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { CaseStudyComponent } from './case-study/case-study.component';\r\nimport { CataloghiProdottiComponent } from './cataloghi-prodotti/cataloghi-prodotti.component';\r\nimport { LightboxRevolutionComponent } from './lightbox-revolution/lightbox-revolution.component';\r\nimport { PasswordChangeComponent } from './password-change/password-change.component';\r\nimport { PasswordResetComponent } from './password-reset/password-reset.component';\r\n\r\n@NgModule( {\r\n\tdeclarations: [\r\n\t\tAboutOneComponent,\r\n\t\tAboutTwoPageComponent,\r\n\t\tLoginPageComponent,\r\n\t\tPageNotFoundComponent,\r\n\t\tContactOnePageComponent,\r\n\t\tContactTwoPageComponent,\r\n\t\tComingSoonPageComponent,\r\n\t\tCaseStudyComponent,\r\n\t\tCataloghiProdottiComponent,\r\n\t\tLightboxRevolutionComponent,\r\n\t\tPasswordChangeComponent,\r\n\t\tPasswordResetComponent\r\n\t],\r\n\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tPagesRoutingModule,\r\n\t\tSharedModule,\r\n\t\tTranslateModule,\r\n\t\tRouterModule,\r\n\t\tOwlModule,\r\n\t\tHttpClientModule,\r\n\t\tHttpClientJsonpModule,\r\n\t\tReactiveFormsModule,\r\n\t\tNgbModule,\r\n \tNgbNavModule,\r\n\t\t//Mat-module\t\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatCheckboxModule,\r\n\t\tMatSelectModule,\r\n\t\tMatSnackBarModule,\r\n\t\tMatDialogModule,\r\n\t\tMatIconModule,\r\n\t]\r\n} )\r\n\r\nexport class PagesModule { }\r\n","
\n \n \n {{ 10 > days ? '0' + days : days }}\n Days\n \n \n {{ 10 > hours ? '0' + hours : hours }}\n Hours\n \n \n {{ 10 > minutes ? '0' + minutes : minutes }}\n Mins\n \n \n {{ 10 > seconds ? '0' + seconds : seconds }}\n Secs\n \n \n \n \n {{ 10 > days ? '0' + days : days }}\n Days\n \n \n {{ 10 > hours ? '0' + hours : hours }}\n Hours\n \n \n {{ 10 > minutes ? '0' + minutes : minutes }}\n Minutes\n \n \n {{ 10 > seconds ? '0' + seconds : seconds }}\n Seconds\n \n \n \n {{ days + ' DAYS, ' + ( 10 > hours ? '0' : '' ) + hours + ': ' + ( 10 > minutes ? '0' : '' ) + minutes + ': ' + ( 10 > seconds ? '0' : '' ) + seconds }}\n \n\n \n \n {{ 10 > hours ? '0' + hours : hours }}\n Hours\n \n \n {{ 10 > minutes ? '0' + minutes : minutes }}\n Minutes\n \n \n {{ 10 > seconds ? '0' + seconds : seconds }}\n Seconds\n \n \n\n \n \n {{ 10 > hours ? '0' + hours : hours }}\n hrs\n \n \n {{ 10 > minutes ? '0' + minutes : minutes }}\n mins\n \n \n {{ 10 > seconds ? '0' + seconds : seconds }}\n secs\n \n \n
","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n\tselector: 'molla-count-down',\n\ttemplateUrl: './count-down.component.html',\n\tstyleUrls: ['./count-down.component.scss']\n})\n\nexport class CountDownComponent implements OnInit {\n\n\t@Input() compact: boolean;\n\t@Input() format: string;\n\t@Input() elements = 4;\n\t@Input() labelsShort: boolean;\n\t@Input() until: string;\n\t@Input() wrap: string;\n\n\tcdId: string;\n\tdays: number;\n\thours: number;\n\tminutes: number;\n\tseconds: number;\n\ttime: any;\n\n\tconstructor() {\n\t\tthis.cdId = 'countd-down' + Math.ceil(Math.random() * 1000);\n\t}\n\n\tngOnInit(): void {\n\t\tthis.time = this.until.substring(1, this.until.length - 1);\n\t\tswitch (this.until[this.until.length - 1]) {\n\t\t\tcase 'h':\n\t\t\t\tthis.time = this.time * 3600;\n\t\t\t\tbreak;\n\t\t\tcase 'm':\n\t\t\t\tthis.time = this.time * 60;\n\t\t\t\tbreak;\n\t\t\tcase 'd':\n\t\t\t\tthis.time = this.time * 3600 * 24;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tlet until: any = new Date(this.until);\n\t\tlet current: any = new Date();\n\t\tlet time = (until - current) / 1000;\n\n\t\tif (this.until.substring(0, 1) === '+') time = this.time;\n\n\t\tthis.days = Math.floor(time / (3600 * 24));\n\t\tthis.hours = Math.floor(time % (3600 * 24) / 3600);\n\t\tthis.minutes = Math.floor(time % 3600 / 60);\n\t\tthis.seconds = Math.floor(time % 60);\n\n\t\tsetInterval(() => {\n\t\t\tlet until: any = new Date(this.until);\n\t\t\tlet current: any = new Date();\n\t\t\tlet time = (until - current) / 1000;\n\n\t\t\tif (this.until.substring(0, 1) === '+') time = this.time;\n\t\t\tthis.time--;\n\n\t\t\tthis.days = Math.floor(time / (3600 * 24));\n\t\t\tthis.hours = Math.floor(time % (3600 * 24) / 3600);\n\t\t\tthis.minutes = Math.floor(time % 3600 / 60);\n\t\t\tthis.seconds = Math.floor(time % 60);\n\t\t}, 1000)\n\t}\n}","import { Component, OnInit, Input, ElementRef, Renderer2 } from '@angular/core';\n\n@Component({\n\tselector: 'molla-image',\n\ttemplateUrl: './image.component.html',\n\tstyleUrls: ['./image.component.scss']\n})\n\nexport class ImageComponent implements OnInit {\n\n\t@Input() src: string;\n\t@Input() width: string | number;\n\t@Input() height: string | number;\n\t@Input() fixedPt: string | number;\n\t@Input() minHeight: string;\n\t@Input() alt = 'banner';\n\t@Input() backgroundColor: string;\n\n\tdefaultImage = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n\tconstructor(private el: ElementRef, private renderer: Renderer2) { }\n\n\tngOnInit(): void {\n\t\t//console.log(this.src)\n\t}\n\n\thandler(event: any) {\n\t\tswitch (event.reason) {\n\t\t\tcase 'setup':\n\t\t\t\tlet value: string | number = '100%';\n\n\t\t\t\tif (this.fixedPt) {\n\t\t\t\t\tvalue = this.fixedPt;\n\t\t\t\t} else if (this.height && this.width) {\n\t\t\t\t\tvalue = Math.floor((parseFloat(this.height.toString()) / parseFloat(this.width.toString()) * 1000)) / 10 + '%';\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '100%';\n\t\t\t\t}\n\n\t\t\t\tthis.renderer.setStyle(this.el.nativeElement, 'padding-top', value);\n\n\t\t\t\tif (this.minHeight) {\n\t\t\t\t\tthis.renderer.setStyle(this.el.nativeElement, 'min-height', this.minHeight + 'rem');\n\t\t\t\t}\n\n\t\t\t\tif (this.backgroundColor) {\n\t\t\t\t\tthis.renderer.setStyle(this.el.nativeElement, 'background-color', this.backgroundColor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'observer-emit':\n\t\t\t\tbreak;\n\t\t\tcase 'loading-succeeded':\n\t\t\t\tif (this.minHeight) {\n\t\t\t\t\tthis.renderer.setStyle(this.el.nativeElement.querySelector('img'), 'min-height', this.minHeight + 'rem');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n","","
\n\n \n
\n {{ \"ctrl.email\" | translate }}\n
\n\n \n
\n {{ \"ctrl.password\" | translate }}\n
\n\n
\n \n\n
\n \n \n
\n\n {{ \"loginmodal.forgotpw\" | translate}}\n
\n
\n\n
\n

or sign in with

\n \n
","import { Component, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { LoginModel } from '../../classes/LoginModel';\nimport { AuthenticateService } from '../../services/authenticate.service';\nimport * as sha from 'js-sha256';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n\tselector: 'molla-login-form',\n\ttemplateUrl: './login-form.component.html',\n\tstyleUrls: ['./login-form.component.scss']\n})\nexport class LoginFormComponent implements OnInit {\n\tloginModel!: LoginModel;\n\tloginForm!: FormGroup;\n\t//response!: WSResponseModel;\n\tloading: boolean = false;\n\tsubmitted: boolean = false;\n\n\t@Input() backpage: any;\n\n\tconstructor(\n\t\tprivate route: ActivatedRoute,\n\t\tprivate formBuilder: FormBuilder,\n\t\tprivate authenticateService: AuthenticateService\n\t) { \n\t\t//Carico i controlli della form\n\t\tthis.loginForm = this.formBuilder.group({\n\t\t\temail: ['', Validators.required],\n\t\t\tpassword: ['', Validators.required],\n\t\t\trememberme: [false],\n\t\t});\n\t}\n\n\tget l() { return this.loginForm.controls; }\n\n\tngOnInit(): void {\n\n\t\tthis.route.queryParams.subscribe(params => {\n\t\t\tthis.backpage = params['backpage'];\n\t\t});\n\t\t\n\n\t\tif (localStorage.getItem('email')) {\n\t\t\tthis.l['email'].setValue(localStorage.getItem('email'));\n\t\t}\n\t\tif (localStorage.getItem('password')) {\n\t\t\tthis.l['password'].setValue(localStorage.getItem('password'));\n\t\t}\n\n\t}\n\n\tasync login() {\n\t\tthis.submitted = true;\n\t\tif (this.loginForm.invalid) {\n\t\t\treturn;\n\t\t}\n\t\tthis.loading = true;\n\n\n\t\tthis.loginModel = await this.authenticateService.authenticate(this.l['email'].value, sha.sha256(this.l['password'].value), 1);\n\t\tif (this.loginModel.token) {\n\n\t\t\tif (this.l['rememberme']?.value == true) {\n\t\t\t\tlocalStorage.setItem('email', this.loginForm.get('email').value);\n\t\t\t\tlocalStorage.setItem('password', this.loginForm.get('password').value);\n\t\t\t}\n\n\t\t\tif (this.backpage) {\n\t\t\t\twindow.location.href = this.backpage;\n\t\t\t} else {\n\t\t\t\twindow.location.reload();\n\t\t\t}\n\t\t}\n\n\t}\n}\n","
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n
\r\n {{ \"ctrl.email\" | translate }}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{ \"ctrl.password\" | translate }}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n {{ \"ctrl.name\" | translate }}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{ \"ctrl.lastname\" | translate }}\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{ \"ctrl.private\" | translate }}\r\n
\r\n\r\n \r\n
\r\n {{ \"ctrl.company\" | translate }}\r\n
\r\n\r\n \r\n
\r\n {{ \"ctrl.vat\" | translate }}\r\n
\r\n\r\n \r\n
\r\n {{ \"ctrl.taxid\" | translate }}\r\n
\r\n\r\n \r\n
\r\n {{ \"ctrl.address\" | translate }}\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n {{ \"ctrl.town\" | translate }}\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n {{ \"ctrl.pcode\" | translate }}\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n {{ \"ctrl.city\" | translate }}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{ \"ctrl.country\" | translate }}\r\n
\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n {{ \"ctrl.phone\" | translate }}\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{ \"ctrl.dichiarazione\" | translate }}\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{ \"ctrl.consenso\" | translate }}\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n

or sign in with

\r\n \r\n
","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators, AbstractControl } from '@angular/forms';\r\nimport { LoginModel } from '../../classes/LoginModel';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { AnaService } from 'src/app/shared/services/ana.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { emailRegex, pivaRegex, telRegex } from 'src/app/core/constants/constants';\r\nimport { UtilsService } from 'src/app/shared/services/utils.service';\r\nimport { ApiService } from 'src/app/shared/services/api.service';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { FormService } from 'src/app/shared/services/form.service';\r\nimport { province } from 'src/app/shared/classes/province.model';\r\nimport { AnaUser } from 'src/app/shared/classes/ana-user.model';\r\n\r\n\r\n@Component({\r\n\tselector: 'molla-manage-user-data',\r\n\ttemplateUrl: './manage-user-data.component.html',\r\n\tstyleUrls: ['./manage-user-data.component.scss']\r\n})\r\nexport class ManageUserDataComponent implements OnInit {\r\n\tloginModel!: LoginModel;\r\n\tregForm!: FormGroup;\r\n\tdatiUtente: AnaUser;\r\n\tcities: province[] = [];\r\n\tsubmitted: boolean = false;\r\n\r\n\t@Input() newUser: boolean = true;\r\n\t@Input() backpage: any;\r\n\r\n\tconstructor(\r\n\t\tprivate formBuilder: FormBuilder,\r\n\t\tprivate anaService: AnaService,\r\n\t\tprivate route: ActivatedRoute,\r\n\t\tprivate translate: TranslateService,\r\n\t\tprivate utilsService: UtilsService,\r\n\t\tprivate apiService: ApiService,\r\n\t\tprivate toastrService: ToastrService,\r\n\t\tprivate formService: FormService) {\r\n\t\t\t\r\n\t\t\t//Carico i controlli della form\r\n\t\t\tthis.regForm = this.formBuilder.group({\r\n\t\t\t\tid: [0],\r\n\t\t\t\tidAzienda: [environment.backend.IDDitta],\r\n\t\t\t\ttipo: ['C'],\r\n\t\t\t\tname: ['', Validators.required],\r\n\t\t\t\tlastname: ['', Validators.required],\r\n\t\t\t\tprivateCli: [false],\r\n\t\t\t\tcompany: ['', Validators.required],\r\n\t\t\t\tvat: ['', { validators: [Validators.required, Validators.pattern(pivaRegex)] }],\r\n\t\t\t\ttaxid: ['', Validators.required],\r\n\t\t\t\taddress: ['', Validators.required],\r\n\t\t\t\ttown: ['', Validators.required],\r\n\t\t\t\tcity: ['', [Validators.required, this.validateSelectedOption]],\r\n\t\t\t\tpcode: ['', Validators.required],\r\n\t\t\t\tstate: [''],\r\n\t\t\t\tcountry: ['IT'],\r\n\t\t\t\tphone: ['', { validators: [Validators.required, Validators.pattern(telRegex)] }],\r\n\t\t\t\temail: ['', { validators: [Validators.required, Validators.pattern(emailRegex)] }],\r\n\t\t\t\tpassword: ['', Validators.required],\r\n\t\t\t\tprivacy1: [null, Validators.requiredTrue],\r\n\t\t\t\tprivacy2: [null, Validators.requiredTrue]\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\tget r() { return this.regForm.controls; }\r\n\r\n\tngOnInit(): void {\r\n\r\n\t\tthis.loginModel = JSON.parse(sessionStorage.getItem('currentUser')!);\r\n\r\n\t\t\r\n\r\n\t\t//Carico le provincie\r\n\t\tthis.getCities();\r\n\r\n\r\n\t\tif (this.loginModel && this.loginModel.token) {\r\n\t\t\t//this.router.navigateByUrl(`/shop/dashboard`);\r\n\t\t\tthis.showDatiUtente()\r\n\t\t}\r\n\r\n\t\t// Subscribe ai queryParams e imposta i valori dei controlli\r\n\t\tthis.route.queryParams.subscribe(params => {\r\n\t\t\tif (params['email'] && this.regForm) {\r\n\t\t\t\tthis.r['email'].setValue(params['email']);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.utilsService.getPassword() && this.regForm) {\r\n\t\t\t\tthis.r['password'].setValue(this.utilsService.getPassword());\r\n\t\t\t}\r\n\r\n\t\t\tif (this.regForm && this.r['email'].value !== \"\" && this.r['password'].value !== \"\") {\r\n\t\t\t\t//this.r['privacy1'].setValue(true);\r\n\t\t\t\t//this.r['privacy2'].setValue(true);\r\n\t\t\t\tthis.utilsService.setPassword(\"\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tasync getCities() {\r\n\t\tthis.cities = await this.apiService.fetchCities()\r\n\t}\r\n\r\n\tregisterPrivate_changeEvent() {\r\n\t\t// Qui puoi ottenere lo stato del checkbox e reagire ai cambiamenti\r\n\t\tconst isChecked = this.r['privateCli']?.value;\r\n\t\t//console.log('Stato del checkbox:', isChecked);\r\n\r\n\t\t// Puoi anche eseguire azioni in base allo stato del checkbox\r\n\t\tif (isChecked) {\r\n\t\t\tthis.r['company']?.disable();\r\n\t\t\tthis.r['company']?.setValue(\"\");\r\n\t\t\tthis.r['vat']?.disable();\r\n\t\t\tthis.r['vat']?.setValue(\"\");\r\n\t\t} else {\r\n\t\t\tthis.r['company']?.enable();\r\n\t\t\tthis.r['vat']?.enable();\r\n\t\t}\r\n\t}\r\n\r\n\tasync checkVat() {\r\n\t\tconst vatValue = this.r['vat']?.value;\r\n\r\n\t\tlet isVal = await this.anaService.CheckVatUser(vatValue);\r\n\r\n\t\tif (isVal != 0) {\r\n\t\t\tthis.r['vat']?.setErrors({ vatExist: true }); // Set a custom validation error on _regVat control\r\n\t\t\tthis.toastrService.error(this.translate.instant('ctrl.vatExist'))\r\n\t\t} else {\r\n\t\t\tthis.r['vat']?.setErrors(null); // Clear any existing custom validation errors on _regVat contro\r\n\t\t}\r\n\r\n\t\t// Mark the form as invalid or valid based on the _regVat control's validity\r\n\t\tthis.regForm.updateValueAndValidity();\r\n\t}\r\n\r\n\t// Funzione di validazione personalizzata\r\n\tvalidateSelectedOption(control: AbstractControl): { [key: string]: any } | null {\r\n\t\tconst selectedValue = control.value;\r\n\t\tif (selectedValue !== null && selectedValue !== \"\") {\r\n\t\t\treturn null; // Valido, nessun errore\r\n\t\t} else {\r\n\t\t\treturn { 'invalidOption': true }; // Non valido, restituisce un errore\r\n\t\t}\r\n\t}\r\n\r\n\tregCity_changeEvent() {\r\n\t\t// Ottieni il valore selezionato dal form control _regCity\r\n\t\tconst selectedCityValue = this.r['city']?.value;\r\n\r\n\t\t// Cerca l'oggetto SelectPROV corrispondente al valore selezionato\r\n\t\tconst selectedCity: province | undefined = this.cities.find(city => city.PROV === selectedCityValue);\r\n\r\n\t\tif (selectedCity) {\r\n\t\t\t// Se l'oggetto è stato trovato, imposta il valore della proprietà REGIONE nel form control _regState\r\n\t\t\tthis.r['state'].setValue(selectedCity.REGIONE);\r\n\t\t}\r\n\t}\r\n\r\n\tasync showDatiUtente() {\r\n\t\tthis.datiUtente = await this.anaService.fetchDatiUtente(this.loginModel.idUtente)\r\n\r\n\t\tif (this.datiUtente) {\r\n\t\t\t//console.log(this.datiUtente)\t\t\t\t\r\n\t\t\tthis.r['id'].setValue(this.datiUtente.id);\r\n\t\t\tthis.r['email'].setValue(this.datiUtente.email);\r\n\t\t\t//this.r['password'].setValue(this.datiUtente.password); //la password è criptata e non si può decriptare // anche per sicurezza è meglio lasciarla reinserire\r\n\t\t\tthis.r['name'].setValue(this.datiUtente.name);\r\n\t\t\tthis.r['lastname'].setValue(this.datiUtente.lastname);\r\n\t\t\tthis.r['privateCli'].setValue(this.datiUtente.privateCli);\r\n\t\t\tthis.r['company'].setValue(this.datiUtente.company);\r\n\t\t\tthis.r['vat'].setValue(this.datiUtente.vat);\t\t\t\r\n\t\t\tthis.registerPrivate_changeEvent() //se privateCli true svuota e blocca company e vat\r\n\t\t\tthis.r['taxid'].setValue(this.datiUtente.taxid);\r\n\t\t\tthis.r['address'].setValue(this.datiUtente.address.address);\r\n\t\t\tthis.r['town'].setValue(this.datiUtente.address.town);\r\n\t\t\tthis.r['city'].setValue(this.datiUtente.address.city);\r\n\t\t\tthis.r['pcode'].setValue(this.datiUtente.address.pcode);\r\n\t\t\tthis.r['state'].setValue(this.datiUtente.address.state);\r\n\t\t\tthis.r['country'].setValue(this.datiUtente.address.country);\r\n\t\t\tthis.r['phone'].setValue(this.datiUtente.phone);\r\n\t\t\tthis.r['privacy1'].setValue(this.datiUtente.privacy1);\r\n\t\t\tthis.r['privacy2'].setValue(this.datiUtente.privacy2);\r\n\r\n\t\t\t// Now that data is available, you can access properties\r\n\t\t\tif (!this.datiUtente) {\r\n\t\t\t\tthis.toastrService.error(this.translate.instant('msg.ko'))\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tasync register() {\r\n\r\n\t\t// Validazione dei campi del modulo\r\n\t\tif (!this.formService.validateForm(this.regForm)) {\r\n\t\t\tthis.submitted = true;\r\n\t\t\treturn; // Esci se la validazione fallisce\r\n\t\t}\r\n\r\n\t\tconst regAna: AnaUser = {\r\n\t\t\tidAzienda: this.r['idAzienda'].value,\r\n\t\t\tid: this.datiUtente && this.datiUtente.id ? this.datiUtente.id : 0,\r\n\t\t\tuserid: this.datiUtente && this.datiUtente.userid ? this.datiUtente.userid : this.r['email'].value, //lo userid non può cambiare\r\n\t\t\tpassword: this.r['password'].value,\r\n\t\t\tprivacy1: this.r['privacy1'].value,\r\n\t\t\tprivacy2: this.r['privacy2'].value,\r\n\t\t\ttipo: this.r['tipo'].value,\r\n\t\t\tname: this.r['name'].value,\r\n\t\t\tlastname: this.r['lastname'].value,\r\n\t\t\tprivateCli: this.r['privateCli'].value,\r\n\t\t\tcompany: this.r['company'].value,\r\n\t\t\tvat: this.r['vat'].value,\r\n\t\t\ttaxid: this.r['taxid'].value,\r\n\t\t\temail: this.r['email'].value,\r\n\t\t\tphone: this.r['phone'].value,\r\n\t\t\taddress: {\r\n\t\t\t\tname: this.r['name'].value,\r\n\t\t\t\taddress: this.r['address'].value,\r\n\t\t\t\ttown: this.r['town'].value,\r\n\t\t\t\tcity: this.r['city'].value.substring(0, 5),\r\n\t\t\t\tpcode: this.r['pcode'].value,\r\n\t\t\t\tstate: this.r['state'].value,\r\n\t\t\t\tcountry: this.r['country'].value,\r\n\t\t\t\tphone: this.r['phone'].value,\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\tthis.loginModel = await this.anaService.sendFormRegistrazione(regAna, this.newUser)\r\n\r\n\t\t// if (this.loginModel.token) {\r\n\t\t// \tif (this.backpage) {\r\n\t\t// \t\twindow.location.href = this.backpage;\r\n\t\t// \t} else {\r\n\t\t// \t\twindow.location.reload();\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n\tselector: 'molla-page-header',\n\ttemplateUrl: './page-header.component.html',\n\tstyleUrls: ['./page-header.component.scss']\n})\n\nexport class PageHeaderComponent implements OnInit {\n\n\t@Input() containerClass = \"container\";\n\t@Input() image = 'assets/images/page-header-bg.jpg';\n\t@Input() subtitle: string;\n\t@Input() title: string;\n\n\tconstructor() { }\n\n\tngOnInit(): void {\n\t}\n}\n","
\n
\n

{{ title }}{{ subtitle }}

\n
\n
","import { Component, OnInit, Input, Output, EventEmitter, OnChanges } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component( {\n\tselector: 'molla-quantity-input',\n\ttemplateUrl: './quantity-input.component.html',\n\tstyleUrls: [ './quantity-input.component.scss' ]\n} )\n\nexport class QuantityInputComponent implements OnInit, OnChanges {\n\n\t@Input() value = 1;\n\t@Input() max = 10000;\n\t@Input() adClass = \"\";\n\t@Input() pzConf = 1;\n\t@Output() changeQty: EventEmitter;\n\n\tcurrent = 1;\n\n\tconstructor (\n\t\tprivate toastrService: ToastrService,\n\t\tprivate translate: TranslateService\n\t\t\n\t) {\n\t\tthis.changeQty = new EventEmitter();\n\t}\n\n\tngOnChanges (): void {\n\t\tthis.current = this.value;\n\t}\n\n\tngOnInit (): void {\n\t}\n\n\tincrement () {\n\t\tif ( this.max <= 0 || this.current >= this.max )\n\t\t\treturn;\n\n\t\t//this.current++;\n\t\tthis.current = this.current + (1 * this.pzConf);\n\t\tthis.changeQty.emit( this.current );\n\t}\n\n\tdecrement () {\n\t\tif ( this.current > 1 ) {\n\t\t\t//this.current--;\n\t\t\tconst newValue = this.current - (1 * this.pzConf);\n\n\t\t\tif (newValue >= this.pzConf) {\n\n\t\t\t\tthis.current = newValue;\t\t\t\t\n\t\t\t\tthis.changeQty.emit( this.current );\n\n\t\t\t} else {\n\t\t\t\tthis.toastrService.warning(`${this.translate.instant('ctrl.pcspack')} ${this.pzConf}`)\n\t\t\t}\n\t\t}\n\t}\n\n\t// changeCurrent ( event: any ) {\n\t// \tif ( parseInt( event.currentTarget.value ) < this.max && parseInt( event.currentTarget.value ) > 0 ) {\n\t// \t\tthis.current = parseInt( event.currentTarget.value );\n\t// \t\tthis.changeQty.emit( this.current );\n\t// \t} else {\n\t// \t\tevent.currentTarget.value = this.current;\n\t// \t}\n\t// }\n\n\n\tchangeCurrent(event: any) {\n\t\tconst newValue = parseInt(event.currentTarget.value);\n\t \n\t\tif (newValue > 0 && newValue <= this.max) {\n\t\t if (newValue % this.pzConf === 0) {\n\t\t\tthis.current = newValue;\n\t\t\tthis.changeQty.emit(this.current);\n\t\t } else {\n\t\t\t// Il nuovo valore deve essere un multiplo o divisore di pzConf\n\t\t\t//console.log(\"Il valore deve essere un multiplo o divisore di pzConf\");\t\t\t\n\t\t\tevent.currentTarget.value = this.current.toString();\n\t\t\tthis.toastrService.warning(`${this.translate.instant('ctrl.pcspack')} ${this.pzConf}`)\n\t\t }\n\t\t} else {\n\t\t // Il nuovo valore deve essere compreso tra 1 e max\n\t\t //console.log(\"Il nuovo valore deve essere compreso tra 1 e max\");\t\t \n\t\t event.currentTarget.value = this.current.toString();\n\t\t this.toastrService.warning(`${this.translate.instant('ctrl.pcsminmax')} ${this.max}`)\n\t\t}\n\t }\n}","
\n
\n
\n \n
\n \n
\n \n
\n
\n
","import { transition, trigger, query, style, animate, animateChild } from '@angular/animations';\r\n\r\n// Animation for route\r\nexport const routeAnimation = trigger('routeAnimations', [\r\n\ttransition('* <=> *', [\r\n\t\tquery(':leave', [\r\n\t\t\tstyle({\r\n\t\t\t\tdisplay: 'none'\r\n\t\t\t})\r\n\t\t], { optional: true }),\r\n\t\tquery(':enter', [\r\n\t\t\tstyle({\r\n\t\t\t\tdisplay: 'block',\r\n\t\t\t\topacity: 0\r\n\t\t\t}),\r\n\t\t\tanimate('300ms ease-in', style({ opacity: 1 })),\r\n\t\t\tanimateChild()\r\n\t\t], { optional: true })\r\n\t])\r\n]);\r\n\r\nexport const sliderOpt = {\r\n items: 1,\r\n loop: true,\r\n margin: 0,\r\n responsiveClass: true,\r\n nav: true,\r\n navText: [ '', '' ],\r\n dots: true,\r\n smartSpeed: 400,\r\n autoplay: false,\r\n autoplayTimeout: 15000\r\n}\r\n\r\nexport const animations = {\r\n fadeIn: {\r\n from: {\r\n opacity: 0\r\n },\r\n to: {\r\n opacity: 1\r\n }\r\n },\r\n\r\n fadeInRightShorter: {\r\n from: {\r\n 'opacity': 0,\r\n 'transform': 'translate(-50px,0)',\r\n 'transform-origin': '0 0'\r\n },\r\n\r\n to: {\r\n opacity: 1,\r\n transform: 'none'\r\n }\r\n },\r\n\r\n fadeInRight: {\r\n from: {\r\n opacity: 0,\r\n transform: 'translate3d(100%,0,0)'\r\n },\r\n\r\n to: {\r\n opacity: 1,\r\n transform: 'translateZ(0)'\r\n }\r\n },\r\n\r\n fadeInLeftShorter: {\r\n from: {\r\n opacity: 0,\r\n transform: 'translate(50px,0)',\r\n 'transform-origin': '0 0',\r\n },\r\n to: {\r\n opacity: 1,\r\n transform: 'none'\r\n }\r\n },\r\n\r\n fadeInLeft: {\r\n from: {\r\n opacity: 0,\r\n transform: 'translate3d(-100%,0,0)'\r\n },\r\n\r\n to: {\r\n opacity: 1,\r\n transform: 'translateZ(0)'\r\n }\r\n },\r\n\r\n fadeInUpShorter: {\r\n from: {\r\n opacity: 0,\r\n transform: 'translate(0,50px)',\r\n 'transform-origin': '0 0',\r\n },\r\n to: {\r\n opacity: 1,\r\n transform: 'none'\r\n }\r\n },\r\n\r\n fadeInDownShorter: {\r\n from: {\r\n opacity: 0,\r\n transform: 'translate(0,-50px)',\r\n 'transform-origin': '0 0',\r\n },\r\n to: {\r\n opacity: 1,\r\n transform: 'none'\r\n }\r\n },\r\n\r\n blurIn: {\r\n from: {\r\n opacity: 0,\r\n filter: 'blur(20px)',\r\n transform: 'scale(1.2)',\r\n },\r\n to: {\r\n opacity: 1,\r\n filter: 'blur(0)',\r\n transform: 'none'\r\n }\r\n }\r\n}","import { Directive, Renderer2, HostListener } from '@angular/core';\n\n@Directive({\n\tselector: '[tabClick]'\n})\n\nexport class TabClickDirective {\n\n\tconstructor(private render: Renderer2) { }\n\n\t@HostListener('click', ['$event'])\n\tonClick(e: any) {\n\t\t// remove previous active tab\n\t\tconst parent = e.target.closest('[role=\"tablist\"]');\n\t\tconst activeLink = parent.querySelector('[role=\"tab\"].active');\n\n\t\tif (activeLink) {\n\t\t\tthis.render.removeClass(activeLink, 'active');\n\t\t}\n\n\t\t// set active tab\n\t\tconst currentLink = e.target.closest('[role=\"tab\"]');\n\t\tif (currentLink) {\n\t\t\tthis.render.addClass(currentLink, 'active');\n\t\t}\n\n\t\te.preventDefault();\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl } from '@angular/platform-browser';\n\n@Pipe({\n\tname: 'safeContent',\n\tpure: true\n})\n\nexport class SafeContentPipe implements PipeTransform {\n\n\tconstructor(protected _sanitizer: DomSanitizer) { }\n\n\ttransform(value: string, type = 'html'): SafeHtml | SafeScript | SafeStyle | SafeUrl | SafeResourceUrl {\n\t\tswitch (type) {\n\t\t\tcase 'html':\n\t\t\t\treturn this._sanitizer.bypassSecurityTrustHtml(value);\n\t\t\tcase 'style':\n\t\t\t\treturn this._sanitizer.bypassSecurityTrustStyle(value);\n\t\t\tcase 'script':\n\t\t\t\treturn this._sanitizer.bypassSecurityTrustScript(value);\n\t\t\tcase 'url':\n\t\t\t\treturn this._sanitizer.bypassSecurityTrustUrl(value);\n\t\t\tcase 'resourceUrl':\n\t\t\t\treturn this._sanitizer.bypassSecurityTrustResourceUrl(value);\n\t\t\tdefault:\n\t\t\t\treturn this._sanitizer.bypassSecurityTrustHtml(value);\n\t\t}\n\t}\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { WSResponseModel } from '../classes/WSResponseModel';\nimport { environment } from 'src/environments/environment';\nimport { Observable, firstValueFrom, tap } from 'rxjs';\nimport { AnaUser } from '../classes/ana-user.model';\nimport { ToastrService } from 'ngx-toastr';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AuthenticateService } from './authenticate.service';\nimport * as sha from 'js-sha256';\nimport { AnaCFList } from '../classes/ana-cf-list.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AnaService {\n\n constructor(\n private http: HttpClient,\n private authenticateService: AuthenticateService,\n private translate: TranslateService,\n private toastrService: ToastrService\n ) { }\n\n\n async sendFormRegistrazione(form: AnaUser, newUser: boolean = true) {\n const httpOptions = {\n headers: new HttpHeaders({\n 'EmailMailFrom': environment.backend.EmailFrom,\n 'EmailMailTo': environment.backend.EmailTo,\n 'newUser': newUser.toString()\n }),\n rejectUnauthorized: false,\n };\n\n\n return await firstValueFrom(this.http.post(\n `${environment.backend.baseURL}/EC/AnagrafichePost/sendFormRegistrazione`,\n form,\n httpOptions\n )).then((data) => {\n let loginModal:any;\n if (data.code === 0) {\n this.toastrService.success(this.translate.instant('msg.confReg'))\n\n //const regEmailValue = form.userid ? form.userid : null;\n //const regPasswordValue = form.password ? form.password : null;\n\n //loginModal = this.authenticateService.authenticate(regEmailValue, sha.sha256(regPasswordValue), 1);\n\n } else {\n\n this.toastrService.error(data!.info)\n }\n\n return loginModal\n\n }).catch(\n error => {\n console.log('error: ' + error.toString())\n if (error.status) {\n switch (error.status) {\n case 400: {\n this.toastrService.error(error.error.info);\n break;\n } \n default: {\n this.toastrService.error(error.message);\n }\n }\n } else {\n this.toastrService.error(error.message);\n }\n }\n );\n }\n\n\n //recupera i dati dell'utente da User\n async fetchDatiUtente(idUtente: number) {\n const httpOptions = {\n headers: {\n idUtente: idUtente.toString()\n }\n };\n\n const endpoint = 'AnagraficheGet/WebUserData';\n const url = `${environment.backend.baseURL}/${endpoint}`;\n\n return await firstValueFrom(this.http.get(url, httpOptions))\n .then( result => {\n return JSON.parse(result!.jsonlist)\n })\n .catch(\n error => {\n console.log('error: ' + error.toString())\n if (error.status) {\n switch (error.status) {\n case 400: {\n this.toastrService.error(error.error.info);\n break;\n } \n default: {\n this.toastrService.error(error.message);\n }\n }\n } else {\n this.toastrService.error(error.message);\n }\n }\n );\n }\n\n //recupera i dati del Cliente Web da PD_WEB_ANA_USERS\n async fetchDatiCF(COD_CF: string) {\n const httpOptions = {\n headers: {\n 'COD_CF': COD_CF\n }\n };\n\n const endpoint = 'AnagraficheGet/CFWebUserData';\n const url = `${environment.backend.baseURL}/${endpoint}`;\n\n return await firstValueFrom(this.http.get(url, httpOptions))\n .then( result => {\n return JSON.parse(result!.jsonlist)\n })\n .catch(\n error => {\n console.log('error: ' + error.toString())\n if (error.status) {\n switch (error.status) {\n case 400: {\n this.toastrService.error(error.error.info);\n break;\n } \n default: {\n this.toastrService.error(error.message);\n }\n }\n } else {\n this.toastrService.error(error.message);\n }\n }\n );\n }\n \n //Verifica l'esistenza della P.Iva nei Clienti Web di PD_WEB_ANA_USERS\n async CheckVatUser(vat: string, initial = `EC/AnagrafichePost/checkVatUser`) {\n let temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n if (vat) {\n\t\t\ttemp += 'vat=' + vat;\n\t\t}\n\n return await firstValueFrom(this.http.post(`${environment.backend.baseURL}/=${temp}`,``))\n .then( result => {\n return result!.code;\n }).catch(\n error => {\n console.log('error: ' + error.toString())\n if (error.status) {\n switch (error.status) {\n case 400: {\n this.toastrService.error(error.error.info);\n break;\n } \n default: {\n this.toastrService.error(error.message);\n }\n }\n } else {\n this.toastrService.error(error.message);\n }\n }\n );\n }\n\n //recupera le condizioni economiche del Cliente associato all'utente \n async GetCondCF(idUtente: number) {\n const httpOptions = {\n headers: new HttpHeaders({\n 'idUtente': idUtente.toString()\n })\n };\n\n return await firstValueFrom(this.http.get(`${environment.backend.baseURL}/AnagraficheGet/CondCF`, httpOptions)).then(\n res => {\n const response = JSON.parse(res.jsonlist);\n sessionStorage.setItem('currentCondCF', JSON.stringify(response));\n return response\n }\n )\n .then( result => {\n return JSON.parse(result!.jsonlist)\n })\n .catch(\n error => {\n if (error.status) {\n switch (error.status) {\n case 401: {\n\n //this.router.navigate(['login']);\n sessionStorage.clear();\n this.toastrService.error(error.message);\n break;\n }\n case 405: {\n //this.router.navigate(['home']);\n\n this.toastrService.error(error.message);\n break;\n }\n default: {\n if (error.error.info)\n //this.toastrService.error(this.response.info);\n\n this.toastrService.error(error.message);\n }\n }\n\n } else {\n //this.response = error.error;\n //this.toastrService.error(this.response.info);\n }\n\n }\n );\n\n }\n \n //recupera la password degli utenti registrati come Clienti in PD_WEB_ANA_USERS\n async ResetPassword(username: string, initial = `EC/AnagrafichePost/ResetPassword`) {\n let temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n if (username) {\n\t\t\ttemp += 'username=' + username;\n\t\t}\n\n const httpOptions = {\n headers: new HttpHeaders({\n 'EmailMailFrom': environment.backend.EmailFrom,\n }),\n rejectUnauthorized: false,\n };\n\n\n return await firstValueFrom(this.http.post(`${environment.backend.baseURL}/${temp}`, null,\n httpOptions\n ))\n .then( result => {\n return result;\n })\n .catch(\n error => {\n console.log('error: ' + error.toString())\n if (error.status) {\n switch (error.status) {\n case 400: {\n this.toastrService.error(error.error.info);\n break;\n } \n default: {\n this.toastrService.error(error.message);\n }\n }\n } else {\n this.toastrService.error(error.message);\n }\n }\n );\n }\n\n\n\n \n //recupera la password degli utenti registrati come Clienti in PD_WEB_ANA_USERS\n async ChangePassword(OldPassword: string, NewPassword: string, initial = `Configuration/ChangePassword`) {\n\n let temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n\n var body = { oldPassword: OldPassword, newPassword: NewPassword }\n\n return await firstValueFrom(this.http.post(\n `${environment.backend.baseURL}/${temp}`,\n body\n ))\n .then( result => {\n return result;\n })\n .catch(\n error => {\n console.log('error: ' + error.toString())\n if (error.status) {\n switch (error.status) {\n case 400: {\n this.toastrService.error(error.error.info);\n break;\n } \n default: {\n this.toastrService.error(error.message);\n }\n }\n } else {\n this.toastrService.error(error.message);\n }\n }\n );\n }\n\n \n \n //recupera la password degli utenti registrati come Clienti in PD_WEB_ANA_USERS\n async GetCodAgente(idUtente: number, initial = `AnagraficheGet/CodAgente`) {\n\n let temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n if (idUtente) {\n\t\t\ttemp += 'idUtente=' + idUtente;\n\t\t}\n\n return await firstValueFrom(this.http.get(\n `${environment.backend.baseURL}/${temp}`\n ))\n .then( result => {\n return JSON.parse(result!.jsonlist);\n })\n .catch(\n error => {\n console.log('error: ' + error.toString())\n if (error.status) {\n switch (error.status) {\n case 400: {\n this.toastrService.error(error.error.info);\n break;\n } \n default: {\n this.toastrService.error(error.message);\n }\n }\n } else {\n this.toastrService.error(error.message);\n }\n }\n );\n }\n\n \n async fetchCliList\n (\n\t\tCOD_AGE1_CLI: string,\n\t\tCOD_AGE2_CLI: string,\n\t\tCOD_CF: string = '',\n\t\tRAG_SOC_CF: string = '',\n P_IVA_CF: string = '',\n\t\tCOMUNE_CF: string = '',\n\t\t): Promise {\n\t\t\n\t\tconst httpOptions = {\n\t\t\theaders: {\n\t\t\t\tCOD_AGE1_CLI: COD_AGE1_CLI,\n\t\t\t\tCOD_AGE2_CLI: COD_AGE2_CLI\n\t\t\t}\n\t\t};\n\n\t\tlet endpoint = `EC/AnagrafichePost/ListCli?`;\n\n\n\t\tvar body = { \n\t\t\tCOD_CF: COD_CF, \n\t\t\tRAG_SOC_CF: RAG_SOC_CF, \n\t\t\tP_IVA_CF: P_IVA_CF, \n\t\t\tCOMUNE_CF: COMUNE_CF,\n FLAG_CLI: 1}\n\n\t\tconst url = `${environment.backend.baseURL}/${endpoint}`;\n\n\t\ttry {\n\t\t\tconst response = await firstValueFrom(this.http.post(url, body, httpOptions));\n\t\t\tconst parsedResponse = JSON.parse(response!.jsonlist);\n\t\t\treturn parsedResponse;\n\t\t} catch (error) {\n\t\t\t//console.log('error: ' + error.toString());\n\t\t\tif (error.status) {\n\t\t\t\tswitch (error.status) {\n\t\t\t\t\tcase 400: {\n\t\t\t\t\t\tthis.toastrService.error(error.error.info);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t}\n\t\t\tthrow error; // Rilancia l'errore per la gestione successiva\n\t\t}\n\t}\n}","//import { FunzioniModel } from \"./DbModel/FunzioniModel\";\r\n\r\nexport class prodFiltri {\r\n searchTerm!: string;\r\n tags!: string;\r\n isTop!: boolean;\r\n isNew!: boolean;\r\n isFeatured!: boolean;\r\n isPromo!: boolean;\r\n\r\n\r\n constructor(searchTerm:string,tags:string,isTop:boolean,isNew:boolean,isFeatured:boolean,isPromo:boolean){\r\n\r\n this.searchTerm=searchTerm;\r\n this.tags=tags;\r\n this.isTop=isTop;\r\n this.isNew=isNew;\r\n this.isFeatured=isFeatured;\r\n this.isPromo=isPromo;\r\n\r\n }\r\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable, firstValueFrom } from 'rxjs';\n\nimport { environment } from 'src/environments/environment';\nimport { WSResponseModel } from '../classes/WSResponseModel';\nimport { categories } from '../classes/categories.model';\nimport { CondCF } from '../classes/cond-cf.model';\nimport { ToastrService } from 'ngx-toastr';\nimport { prodFiltri } from '../classes/prod-filtri.model';\nimport { NumberInput } from '@angular/cdk/coercion';\n\n\n@Injectable({\n\tprovidedIn: 'root'\n})\n\n\nexport class ApiService {\n\tcondCF!: CondCF\n\n\tconstructor(\n\t\tprivate http: HttpClient,\n\t\tprivate toastrService: ToastrService) {\n\t}\n\n\t/**\n\t * Get Products\n\t */\n\tpublic fetchBlogData(params: any, initial = 'blogs/classic', perPage: number,): Observable {\n\t\tlet temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n\n\t\tfor (let key in params) {\n\t\t\ttemp += key + '=' + params[key] + '&';\n\t\t}\n\n\t\tif (!params.page) {\n\t\t\ttemp += 'page=1';\n\t\t}\n\n\t\tif (!params.perPage) {\n\t\t\ttemp += '&perPage=' + perPage;\n\t\t}\n\n\t\treturn this.http.get(`${environment.backend.baseURL}/${temp}`);\n\t}\n\n\t/**\n\t * Get Products\n\t */\n\tpublic fetchSinglePost(slug: string): Observable {\n\t\treturn this.http.get(`${environment.backend.baseURL}/${'single/' + slug + '?demo=' + environment.demo}`);\n\t}\n\n\t/**\n\t * Get Products for home page\n\t */\n\tpublic fetchHomeData(category: string = ''): Observable {\n\n\t\tlet temp = 'EC/ArticoliGet/ProductsData?';\n\n\t\tlet httpParams = new HttpParams();\n\t\thttpParams = httpParams.set('perPage', 20);\n\t\thttpParams = httpParams.set('category', category);\n\t\thttpParams = httpParams.set('OrdDir', 'random');\n\n\n\t\tthis.condCF = JSON.parse(sessionStorage.getItem('currentCondCF')!)\n\t\tlet headers = new HttpHeaders(); // Crea un oggetto headers vuoto \n\t\tif (this.condCF) {\n\t\t\theaders = headers.append('CodCliente', this.condCF?.CodCliente);\n\t\t\theaders = headers.append('Privato', this.condCF?.Privato.toString());\n\t\t\t// Trasformare gli array in una stringa separata da virgole\n\t\t\tconst codListinoString = this.condCF?.CodListino.join(',');\n\t\t\tconst codScontoString = this.condCF?.CodSconto.join(',');\n\t\t\theaders = headers.append('CodListino', codListinoString);\n\t\t\theaders = headers.append('CodSconto', codScontoString);\n\t\t\theaders = headers.append('CodPag', this.condCF?.CodPag);\n\t\t}\n\n\t\treturn this.http.get(`${environment.backend.baseURL}/${temp}`, { headers, params: httpParams });\n\t}\n\n\n\n\t/**\n\t * Get Element Products\n\t */\n\tpublic fetchElementData(): Observable {\n\t\treturn this.http.get(`${environment.backend.baseURL}/elements/products`);\n\t}\n\n\t/**\n\t * Get Element Blog\n\t */\n\tpublic fetchElementBlog(): Observable {\n\t\treturn this.http.get(`${environment.backend.baseURL}/elements/blogs`);\n\t}\n\n\n\t//PD\n\t/**\n\t * Get products\n\t */\n\tpublic getSingleProduct(CodArt: string, isQuickView = false, Qta: number = 0): Observable {\n\t\t//return this.http.get(`${environment.backend.baseURL/products/${slug}?demo=${environment.demo}&isQuickView=${isQuickView}`);\n\n\n\t\tlet temp = 'EC/ArticoliGet/ProductData?';\n\n\t\tif (CodArt) {\n\t\t\ttemp += 'CodArt=' + CodArt;\n\t\t}\n\t\tif (isQuickView) {\n\t\t\ttemp += '&isQuickView=' + isQuickView;\n\t\t}\n\t\tif (Qta) {\n\t\t\ttemp += '&Qta=' + Qta;\n\t\t}\n\n\t\tthis.condCF = JSON.parse(sessionStorage.getItem('currentCondCF')!)\n\t\tlet headers = new HttpHeaders(); // Crea un oggetto headers vuoto \n\t\tif (this.condCF) {\n\t\t\theaders = headers.append('CodCliente', this.condCF?.CodCliente);\n\t\t\theaders = headers.append('Privato', this.condCF?.Privato.toString());\n\t\t\t// Trasformare gli array in una stringa separata da virgole\n\t\t\tconst codListinoString = this.condCF?.CodListino.join(',');\n\t\t\tconst codScontoString = this.condCF?.CodSconto.join(',');\n\t\t\theaders = headers.append('CodListino', codListinoString);\n\t\t\theaders = headers.append('CodSconto', codScontoString);\n\t\t\theaders = headers.append('CodPag', this.condCF?.CodPag);\n\t\t}\n\n\t\treturn this.http.get(`${environment.backend.baseURL}/${temp}`, { headers });\n\t}\n\t\n\tasync fetchProductDesc(CodArt: string) {\n\t\tlet temp = 'EC/ArticoliGet/ProductDesc?';\n\n\t\tif (CodArt) {\n\t\t\ttemp += 'CodArt=' + CodArt;\n\t\t}\n\n\t\treturn await firstValueFrom(this.http.get(`${environment.backend.baseURL}/${temp}`))\n\t\t\t.then((result: any) => {\n\t\t\t\tif (result && result.descrizione) {\n\t\t\t\t\treturn result.descrizione;\n\t\t\t\t} else {\n\t\t\t\t\treturn CodArt;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(\n\t\t\t\terror => {\n\t\t\t\t\tconsole.log('error: ' + error.toString())\n\t\t\t\t\tif (error.status) {\n\t\t\t\t\t\tswitch (error.status) {\n\t\t\t\t\t\t\tcase 400: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.error.info);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\n\t\n\n\tasync fetchProductAddProp(CodArt: string, CodCliente: string) {\n\t\tlet temp = 'EC/ArticoliGet/ProductAddProp?';\n\n\t\tif (CodArt) {\n\t\t\ttemp += 'CodArt=' + CodArt;\n\t\t}\n\t\tif (CodArt) {\n\t\t\ttemp += '&CodCliente=' + CodCliente;\n\t\t}\n\n\t\treturn await firstValueFrom(this.http.get(`${environment.backend.baseURL}/${temp}`))\n\t\t\t.then((result: any) => {\n\t\t\t\treturn result;\n\t\t\t})\n\t\t\t.catch(\n\t\t\t\terror => {\n\t\t\t\t\tconsole.log('error: ' + error.toString())\n\t\t\t\t\tif (error.status) {\n\t\t\t\t\t\tswitch (error.status) {\n\t\t\t\t\t\t\tcase 400: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.error.info);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\n\n\t/**\n\t * Get Products\n\t */\n\tpublic fetchShopData(params: any, perPage: number, initial = 'EC/ArticoliGet/ProductsData'): Observable {\n\t\tlet temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n\n\t\tlet httpParams: HttpParams = new HttpParams();\n\n\t\tlet searchTerm: string = \"\";\n\t\tlet tags: string = \"\";\n\t\tlet isTop: boolean = false;\n\t\tlet isNew = false;\n\t\tlet isFeatured = false;\n\t\tlet isPromo = false;\n\n\t\tfor (let key in params) {\n\t\t\tswitch (key) {\n\t\t\t\tcase \"searchTerm\":\n\t\t\t\t\t// Esempio: Filtri[searchTerm]=valore\n\t\t\t\t\tsearchTerm = params[key];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"tags\":\n\t\t\t\t\ttags = params[key]\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"isTop\":\n\t\t\t\t\tisTop = params[key]\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"isNew\":\n\t\t\t\t\tisNew = params[key]\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"isFeatured\":\n\t\t\t\t\tisFeatured = params[key]\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"isPromo\":\n\t\t\t\t\tisPromo = params[key]\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\thttpParams = httpParams.set(key, params[key]);\n\t\t\t}\n\t\t}\n\n\t\tconst prodFiltriInstance = new prodFiltri(searchTerm, tags, false, false, false, false);\n\t\thttpParams = httpParams.set('searchTerm', prodFiltriInstance.searchTerm);\n\t\thttpParams = httpParams.set('tags', prodFiltriInstance.tags);\n\t\thttpParams = httpParams.set('isTop', prodFiltriInstance.isTop);\n\t\thttpParams = httpParams.set('isNew', prodFiltriInstance.isNew);\n\t\thttpParams = httpParams.set('isFeatured', prodFiltriInstance.isFeatured);\n\t\thttpParams = httpParams.set('isPromo', prodFiltriInstance.isPromo);\n\n\t\tif (!params.page) {\n\t\t\thttpParams = httpParams.set('page', '1');\n\t\t}\n\n\t\tif (!params.perPage) {\n\t\t\thttpParams = httpParams.set('perPage', perPage.toString());\n\t\t}\n\n\t\tthis.condCF = JSON.parse(sessionStorage.getItem('currentCondCF')!);\n\t\tlet headers = new HttpHeaders();\n\t\tif (this.condCF) {\n\t\t\theaders = headers.append('CodCliente', this.condCF?.CodCliente);\n\t\t\theaders = headers.append('Privato', this.condCF?.Privato.toString());\n\n\n\t\t\tconst codListinoString = this.condCF?.CodListino.join(',');\n\t\t\tconst codScontoString = this.condCF?.CodSconto.join(',');\n\t\t\t// const codListinoString = this.condCF?.CodListino\n\t\t\t// \t.filter(str => str.trim() !== '') // Rimuove le stringhe vuote dopo lo strip\n\t\t\t// \t.join(',');\n\t\t\t// const codScontoString = this.condCF?.CodSconto\n\t\t\t// \t.filter(str => str.trim() !== '') // Rimuove le stringhe vuote dopo lo strip\n\t\t\t// \t.join(',');\n\t\t\tif (codListinoString.trim() !== '') {\n\t\t\t\theaders = headers.append('CodListino', codListinoString);\t\t\t\t\n\t\t\t}\n\t\t\tif (codScontoString.trim() !== '') {\n\t\t\t\theaders = headers.append('CodSconto', codScontoString);\n\t\t\t}\n\t\t\tif (this.condCF?.CodPag.trim() !== '') {\n\t\t\t\theaders = headers.append('CodPag', this.condCF?.CodPag);\n\t\t\t}\n\t\t}\n\n\n\t\treturn this.http.get(`${environment.backend.baseURL}/${temp}`, { headers, params: httpParams });\n\t}\n\n\n\t/**\n\t * Get Categories\n\t */\n\tasync fetchCategories(params: any, initial = 'EC/ArticoliGet/CategoriesData') {\n\n\t\tlet temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n\t\tfor (let key in params) {\n\t\t\ttemp += key + '=' + params[key] + '&';\n\t\t}\n\n\t\treturn await firstValueFrom(this.http.get(`${environment.backend.baseURL}/${temp}`))\n\t\t\t.then(result => {\n\t\t\t\treturn JSON.parse(result!.jsonlist)\n\t\t\t})\n\t\t\t.catch(\n\t\t\t\terror => {\n\t\t\t\t\tconsole.log('error: ' + error.toString())\n\t\t\t\t\tif (error.status) {\n\t\t\t\t\t\tswitch (error.status) {\n\t\t\t\t\t\t\tcase 400: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.error.info);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\n\tasync fetchCategory(params: any, initial = 'EC/ArticoliGet/CategoryData') {\n\n\t\tlet temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n\t\tfor (let key in params) {\n\t\t\ttemp += key + '=' + params[key] + '&';\n\t\t}\n\n\t\treturn await firstValueFrom(this.http.get(`${environment.backend.baseURL}/${temp}`))\n\t\t\t.then(result => {\n\t\t\t\treturn result!.categoria\n\t\t\t})\n\t\t\t.catch(\n\t\t\t\terror => {\n\t\t\t\t\tconsole.log('error: ' + error.toString())\n\t\t\t\t\tif (error.status) {\n\t\t\t\t\t\tswitch (error.status) {\n\t\t\t\t\t\t\tcase 400: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.error.info);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\n\tpublic fetchNItemxCategory(CategoriaId: string): Observable {\n\n\t\tlet temp = \"EC/ArticoliGet/CountItemCat?\";\n\t\ttemp += 'CategoriaId=' + CategoriaId;\n\n\t\treturn this.http.get(`${environment.backend.baseURL}/${temp}`);\n\t}\n\n\n\n\tpublic fetchAttachment(EVENTO_ALLEGATO_ID): Observable {\n\t\tlet temp = 'EC/ArticoliGet/GetAttachment?';\n\t\tif (EVENTO_ALLEGATO_ID > 0) {\n\t\t\ttemp += \"id=\" + EVENTO_ALLEGATO_ID.toString()\n\t\t}\n\t\treturn this.http.get(`${environment.backend.baseURL}/${temp}`);\n\t}\n\n\t/**\n\t* Get Tags\n\t*/\n\tasync fetchTagsPerTipo(tipo: number, initial = 'EC/ArticoliGet/ListTagsPerTipo') {\n\n\t\tlet temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n\t\tif (tipo > 0) {\n\t\t\ttemp += \"Tipo=\" + tipo.toString()\n\t\t}\n\t\treturn await firstValueFrom(this.http.get(`${environment.backend.baseURL}/${temp}`))\n\t\t\t.then(result => {\n\t\t\t\treturn JSON.parse(result!.jsonlist)\n\t\t\t})\n\t\t\t.catch(\n\t\t\t\terror => {\n\t\t\t\t\tconsole.log('error: ' + error.toString())\n\t\t\t\t\tif (error.status) {\n\t\t\t\t\t\tswitch (error.status) {\n\t\t\t\t\t\t\tcase 400: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.error.info);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tasync fetchTagsPerArticolo(tipo: number, codart: string, initial = 'EC/ArticoliGet/ListTagsPerArt') {\n\n\t\tlet temp = initial;\n\t\tif (!initial.includes('?')) {\n\t\t\ttemp += '?';\n\t\t}\n\t\tif (codart != \"\") {\n\t\t\ttemp += \"CodArt=\" + codart\n\t\t}\n\t\tif (tipo > 0) {\n\t\t\ttemp += \"&Tipo=\" + tipo.toString()\n\t\t}\n\t\treturn await firstValueFrom(this.http.get(`${environment.backend.baseURL}/${temp}`))\n\t\t\t.then(result => {\n\t\t\t\treturn JSON.parse(result!.jsonlist)\n\t\t\t})\n\t\t\t.catch(\n\t\t\t\terror => {\n\t\t\t\t\tconsole.log('error: ' + error.toString())\n\t\t\t\t\tif (error.status) {\n\t\t\t\t\t\tswitch (error.status) {\n\t\t\t\t\t\t\tcase 400: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.error.info);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\n\t/**\n\t* Get province / regioni\n\t*/\n\tasync fetchCities(initial = 'EC/TabelleGet/ListPROV') {\n\n\t\tlet temp = initial;\n\t\t/* \t\tif (!initial.includes('?')) {\n\t\t\t\t\ttemp += '?';\n\t\t\t\t}\n\t\t */\n\t\treturn await firstValueFrom(this.http.get(`${environment.backend.baseURL}/${temp}`))\n\t\t\t.then(result => {\n\t\t\t\tlet prov = JSON.parse(result!.jsonlist)\n\n\t\t\t\tprov = prov.map(item => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tPROV: item.PROV1,\n\t\t\t\t\t\tDES_PROV: item.DES_PROV,\n\t\t\t\t\t\tREGIONE: item.REGIONE\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn prov;\n\t\t\t})\n\t\t\t.catch(\n\t\t\t\terror => {\n\t\t\t\t\tconsole.log('error: ' + error.toString())\n\t\t\t\t\tif (error.status) {\n\t\t\t\t\t\tswitch (error.status) {\n\t\t\t\t\t\t\tcase 400: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.error.info);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\t//recupera le condizioni di pagamento\n\t//se COD_CF è valorizzato filtra solo quelle associate al cliente\n\tasync fetchCONDPA(COD_CF: string) {\n\t\tconst httpOptions = {\n\t\t\theaders: {\n\t\t\t\tCOD_CF: COD_CF\n\t\t\t}\n\t\t};\n\n\t\tconst endpoint = 'AnagraficheGet/ListConPaCF';\n\t\tconst url = `${environment.backend.baseURL}/${endpoint}`;\n\n\n\t\treturn await firstValueFrom(this.http.get(url, httpOptions))\n\t\t\t.then(\n\t\t\t\tresult => {\n\t\t\t\t\tlet conpa = JSON.parse(result!.jsonlist)\n\n\t\t\t\t\tconpa = conpa.map(item => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tCOD_PAGA: item.COD_PAGA,\n\t\t\t\t\t\t\tDES_PAGA: item.DES_PAGA,\n\t\t\t\t\t\t\tDES_TIPO_CONDPA: item.DES_TIPO_CONDPA\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\treturn conpa;\n\t\t\t\t}\n\t\t\t)\n\t\t\t.catch(\n\t\t\t\terror => {\n\t\t\t\t\tif (error.status) {\n\t\t\t\t\t\tswitch (error.status) {\n\t\t\t\t\t\t\tcase 401: {\n\n\t\t\t\t\t\t\t\t//this.router.navigate(['login']);\n\t\t\t\t\t\t\t\tsessionStorage.clear();\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 405: {\n\t\t\t\t\t\t\t\t//this.router.navigate(['home']);\n\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tif (error.error.info)\n\t\t\t\t\t\t\t\t\t//this.toastrService.error(this.response.info);\n\n\t\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toastrService.error(error.message);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t);\n\n\t}\n}","export class UserLoginModel{\r\n\r\n username!:string;\r\n password!:string;\r\n idAzienda!:number;\r\n\r\n constructor(user:string,pass:string,idazienda:number){\r\n\r\n this.username=user;\r\n this.password=pass;\r\n this.idAzienda=idazienda;\r\n\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { environment } from '../../../environments/environment';\r\nimport { LoginModel } from '../classes/LoginModel';\r\nimport { UserLoginModel } from '../classes/UserLoginModel';\r\nimport { WSResponseModel } from '../classes/WSResponseModel';\r\nimport { Router } from '@angular/router';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticateService {\r\n baseUrl: string = environment.backend.baseURL;\r\n response!: WSResponseModel;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private router: Router,\r\n private toastrService: ToastrService,\r\n private translate: TranslateService) { }\r\n\r\n //Funzione di login che richiama il web service\r\n async authenticate(username: string, password: string, idAzienda: number): Promise {\r\n\r\n const body: UserLoginModel = new UserLoginModel(username, password, idAzienda);\r\n\r\n //Viene richiesta l'autenticazione dell'utente con le credenziali insierite\r\n\r\n return await firstValueFrom(this.http.post(`${environment.backend.baseURL}/Security/Authentication/Authenticate`, body))\r\n .then(\r\n resUser => {\r\n const response = JSON.parse(resUser.jsonlist);\r\n sessionStorage.setItem('currentUser', JSON.stringify(response));\r\n return response\r\n })\r\n .then((res) => {\r\n\r\n //se viene ritornato l'utente, se ha un cliente associato ne vengono le condizioni economiche\r\n\r\n const httpOptions = {\r\n headers: new HttpHeaders({\r\n 'idUtente': res.idUtente.toString()\r\n })\r\n };\r\n\r\n return firstValueFrom(this.http.get(`${environment.backend.baseURL}/AnagraficheGet/CondCF`, httpOptions)).then(\r\n resCondCF => {\r\n const response = JSON.parse(resCondCF.jsonlist);\r\n sessionStorage.setItem('currentCondCF', JSON.stringify(response));\r\n\r\n this.toastrService.success(`${this.translate.instant('loginmodal.welcome')} ${res.username}`);\r\n\r\n return res //Dopo aver inizializzato le condizioni ritorno in ogni caso la loginModel\r\n }\r\n )\r\n })\r\n .catch(\r\n error => {\r\n console.log('error: ' + error.toString())\r\n if (error.status) {\r\n switch (error.status) {\r\n case 401: {\r\n this.router.navigate(['pages/login']);\r\n sessionStorage.clear();\r\n this.toastrService.error(error.error.title);\r\n break;\r\n }\r\n case 405: {\r\n //this.router.navigate(['home']);\r\n this.toastrService.error(error.error.title);\r\n break;\r\n }\r\n default: {\r\n if (error.error.info)\r\n this.toastrService.error(error.error.info);\r\n }\r\n }\r\n\r\n } else {\r\n this.toastrService.error(this.translate.instant('loginmodal.ko'));\r\n }\r\n }\r\n );\r\n }\r\n\r\n\r\n\r\n //Funzione per verificare se l'utente è già abilitato\r\n verifytoken() {\r\n\r\n return this.http.get(this.baseUrl + '/Security/Authentication/VerifyToken')\r\n }\r\n\r\n //Funzione per recuperare le funzioni utente\r\n async getFunctionUser() {\r\n\r\n return await firstValueFrom(this.http.get(this.baseUrl + '/Security/Authentication/GetFunctionUser')).then(\r\n res => {\r\n return res;\r\n }\r\n ).catch(\r\n\r\n error => {\r\n if (error.status) {\r\n switch (error.status) {\r\n case 401: {\r\n this.router.navigate(['login']);\r\n sessionStorage.clear();\r\n //this.alertService.error(error.message);\r\n break;\r\n }\r\n case 405: {\r\n this.router.navigate(['home']);\r\n\r\n //this.alertService.error(error.message);\r\n break;\r\n }\r\n default: {\r\n if (error.error.info) {\r\n //this.alertService.error(error.error.info);\r\n } else {\r\n\r\n //this.alertService.error(error.message);\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n } else {\r\n this.response = error;\r\n //this.alertService.error(this.response.info);\r\n }\r\n\r\n }\r\n );\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ToastrService } from 'ngx-toastr';\r\n// RxJS\r\nimport { Subject, BehaviorSubject, firstValueFrom } from 'rxjs';\r\n\r\n// NGRX\r\nimport { Store, select } from '@ngrx/store';\r\n\r\nimport { Product } from 'src/app/shared/classes/product.model';\r\nimport { CartItem } from 'src/app/shared/classes/cart-item.model';\r\nimport { cartHeaderSelector, cartItemsSelector } from 'src/app/core/selectors/selectors';\r\nimport { UpdateCartHeaderAction, AddToCartAction, RemoveFromCartAction, UpdateCartAction } from 'src/app/core/actions/actions';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { WSResponseModel } from '../classes/WSResponseModel';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { CartHeader } from '../classes/cart-header.model';\r\nimport { PrezziSpedizioneService } from './prezzi-spedizione.service';\r\nimport { ApiService } from './api.service';\r\n\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\n\r\nexport class CartService {\r\n\r\n\tpublic cartHeader: CartHeader;\r\n\tpublic cartItems: CartItem[] = [];\r\n\tpublic cartStream: Subject = new BehaviorSubject([]);\r\n\tpublic qtyTotal: Subject = new BehaviorSubject(0);\r\n\tpublic priceTotal: BehaviorSubject = new BehaviorSubject(0);\r\n\tpublic shippingCost: BehaviorSubject = new BehaviorSubject(0);\r\n\tpublic tax: BehaviorSubject = new BehaviorSubject(0);\r\n\r\n\t_COD_IVA_DEFAULT = environment.COD_IVA_DEFAULT;\r\n\tPERC_IVA = 22;\r\n\r\n\tconstructor(\r\n\t\tprivate store: Store,\r\n\t\tprivate toastrService: ToastrService,\r\n\t\tprivate translate: TranslateService,\r\n\t\tprivate http: HttpClient,\r\n\t\tprivate prezziSpedizioneService: PrezziSpedizioneService,\r\n\t\tpublic apiService: ApiService) {\r\n\r\n\t\tstore.pipe(select(cartHeaderSelector)).subscribe(items => {\r\n\t\t\tthis.cartHeader = items;\r\n\t\t})\r\n\r\n\t\tstore.pipe(select(cartItemsSelector)).subscribe(items => {\r\n\t\t\tthis.cartItems = items;\r\n\r\n\t\t\tthis.cartStream.next(items);\r\n\r\n\t\t\tthis.qtyTotal.next(\r\n\t\t\t\tthis.cartItems.reduce((acc, cur) => {\r\n\t\t\t\t\treturn acc + cur.qty\r\n\t\t\t\t}, 0));\r\n\r\n\t\t\tthis.priceTotal.next(\r\n\t\t\t\tthis.cartItems.reduce((acc, cur) => {\r\n\t\t\t\t\treturn acc + cur.sum\r\n\t\t\t\t}, 0)\r\n\t\t\t)\r\n\r\n\t\t\t// this.prezziSpedizioneService.prezzoSpedizione$.subscribe((prezzoSpedizione) => {\r\n\t\t\t// \tthis.cartHeader.shipping = prezzoSpedizione;\r\n\t\t\t// \tthis.calculateTax();\r\n\t\t\t// });\r\n\t\t})\r\n\t}\r\n\r\n\tupdateCartHeader(cartHeader: CartHeader) {\r\n\t\tconst currentTimestamp = this.generateCustomId();\r\n\t\tconst idUtente = cartHeader.idUtente?.toString();\r\n\t\tconst paddedIdUtente = idUtente.padStart(6, '0');\r\n\t\tcartHeader.custom_id = paddedIdUtente + currentTimestamp;\r\n\t\tthis.calculateTax();\r\n\r\n\t\tthis.store.dispatch(new UpdateCartHeaderAction({ cartHeader }));\r\n\t}\r\n\r\n\tprivate calculateTax() {\r\n\t\tconst priceTotalValue = this.priceTotal.getValue();\r\n\t\tlet shipping = this.cartHeader.shipping || 0;\r\n\t \r\n\t\tconst taxValue = (priceTotalValue + shipping) * this.PERC_IVA / 100;\r\n\t \r\n\t\t// Verifica se taxValue è un numero valido\r\n\t\tif (!isNaN(taxValue) && isFinite(taxValue)) {\r\n\t\t this.tax.next(taxValue);\r\n\t\t} else {\r\n\t\t // Se taxValue non è valido, assegna un valore predefinito o gestisci la situazione di conseguenza\r\n\t\t this.tax.next(0); // o un valore predefinito appropriato\r\n\t\t}\r\n\t }\r\n\r\n\t// Aggiorna il prezzo di spedizione quando necessario\r\n\tupdateShippingCost(newShippingCost: number) {\r\n\t\tthis.prezziSpedizioneService.setPrezzoSpedizione(newShippingCost);\r\n\t\tthis.cartHeader.shipping = newShippingCost;\r\n\t\tthis.calculateTax();\r\n\t}\r\n\r\n\t// Aggiunta Prodotto al Carrello\r\n\taddToCart(product: Product, qty = 1) {\r\n\t\tif (this.canAddToCart(product, qty)) {\r\n\t\t\tthis.store.dispatch(new AddToCartAction({ product, qty }));\r\n\t\t\tthis.toastrService.success(this.translate.instant('cart.added'));\r\n\t\t\t// Prodotto aggiunto al Carrello.\r\n\t\t} else {\r\n\t\t\tthis.toastrService.error(this.translate.instant('cart.addErr'));\r\n\t\t\t// Spiacente, non puoi aggiungere quella quantità al carrello.\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// Product Removed from the Cart\r\n\tremoveFromCart(product: CartItem) {\r\n\t\tthis.store.dispatch(new RemoveFromCartAction({ product }));\r\n\t\tthis.toastrService.success(this.translate.instant('cart.removed'));\r\n\t\t//Product removed from Cart.\r\n\t}\r\n\r\n\t// Product Removed from the Cart\r\n\tclearCart(cartItem: CartItem[]) {\r\n\t\ttry {\r\n\t\t\tlet product: CartItem;\r\n\t\t\tfor (let i = 0; i < cartItem.length; i++) {\r\n\t\t\t\tproduct = cartItem[i];\r\n\t\t\t\tthis.store.dispatch(new RemoveFromCartAction({ product }));\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(\"Errore durante la pulizia del carrello:\", error);\r\n\t\t\t// Puoi gestire l'errore in modo appropriato qui, ad esempio, mostrando un messaggio all'utente.\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// Cart update\r\n\tupdateCart(cartItems: CartItem[]) {\r\n\t\tthis.store.dispatch(new UpdateCartAction({ cartItems }));\r\n\t\tthis.toastrService.success(this.translate.instant('cart.updated'));\r\n\t\t//Cart Updated.\r\n\t}\r\n\r\n\t// Check whether product is in Cart or not\r\n\tisInCart(product: Product): boolean {\r\n\t\treturn this.cartItems.find(item => item.id == product.id) ? true : false;\r\n\t}\r\n\r\n\tcanAddToCart(product: Product, qty = 1) {\r\n\t\tconst find = this.cartItems.find(item => item.id == product.id);\r\n\t\tqty = Math.max(qty, product.pcs_pack || 1);\r\n\r\n\t\tif (qty === 0) {\r\n\t\t\tqty = 1;\r\n\t\t}\r\n\t\tif (find) {\r\n\t\t\tif (product.stock == 0 || (product.stock && product.stock < (find.qty + qty))) {\r\n\t\t\t\treturn false;\r\n\t\t\t} else if (product.pcs_pack && qty % product.pcs_pack !== 0) {\r\n\t\t\t\t// Il numero di pezzi da aggiungere deve essere un multiplo di pcs_pack\r\n\t\t\t\treturn false;\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (product.stock == 0 || (product.stock && product.stock < qty)) {\r\n\t\t\t\treturn false;\r\n\t\t\t} else if (product.pcs_pack && qty % product.pcs_pack !== 0) {\r\n\t\t\t\t// Il numero di pezzi da aggiungere deve essere un multiplo di pcs_pack\r\n\t\t\t\treturn false;\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Conferma il carrello\r\n\tasync sendCart(): Promise {\r\n\r\n\t\tconst httpOptions = {\r\n\t\t\theaders: new HttpHeaders({\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t'IdUtente': this.cartHeader.idUtente.toString()\r\n\t\t\t}),\r\n\t\t\trejectUnauthorized: false,\r\n\t\t};\r\n\r\n\t\t//console.log(this.cartHeader)\r\n\r\n\t\tconst body = {\r\n\t\t\tanaData: this.cartHeader.anaCF,\r\n\t\t\tcartItems: this.cartItems,\r\n\t\t\tcodPag: this.cartHeader.payment,\r\n\t\t\tspeseSped: this.cartHeader.shipping,\r\n\t\t\tnote: this.cartHeader.note\r\n\t\t};\r\n\r\n\t\tconst response = await firstValueFrom(\r\n\t\t\tthis.http.post(\r\n\t\t\t\t`${environment.backend.baseURL}/OrdWeb/SalvaCarrello`,\r\n\t\t\t\tbody,\r\n\t\t\t\thttpOptions\r\n\t\t\t)\r\n\t\t);\r\n\r\n\t\treturn response;\r\n\t}\r\n\r\n\r\n\tcreatePaypalPayment() {\r\n\t\tconst paypalApiUrl = environment.paypal.paypalApiUrl;\r\n\t\tconst client_id = environment.paypal.paypalClient_id;\r\n\t\tconst client_secret = environment.paypal.paypalClient_secret;\r\n\t\tconst domain = window.location.protocol + '//' + window.location.host;\r\n\r\n\t\tconst _items = [];\r\n\t\tlet netPriceTot: number = 0;\r\n\t\tlet itemTax: number = 0;\r\n\t\t//let taxTot: number = 0;\r\n\t\tlet TotalPrice: number = 0;\r\n\r\n\t\tthis.cartItems.forEach((cartItem) => {\r\n\r\n\t\t\titemTax = ((cartItem.price + this.cartHeader.shipping) * this.PERC_IVA) / 100;\r\n\t\t\t//taxTot += (tax * cartItem.qty);\r\n\r\n\t\t\t_items.push({\r\n\t\t\t\tname: cartItem.name,\r\n\t\t\t\tdescription: cartItem.short_desc,\r\n\t\t\t\tquantity: cartItem.qty.toString(),\r\n\t\t\t\tprice: cartItem.price.toFixed(2),\r\n\t\t\t\ttax: itemTax.toFixed(2),\r\n\t\t\t\tsku: cartItem.id,\r\n\t\t\t\tcurrency: environment.VALUTA\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.priceTotal.subscribe((priceTotalValue: number) => {\r\n\t\t\tnetPriceTot = priceTotalValue;\r\n\t\t\tTotalPrice = (priceTotalValue + this.cartHeader.shipping + this.tax.value);\r\n\t\t});\r\n\r\n\r\n\t\tconst dataora = new Date()\r\n\r\n\t\t// Dati del pagamento\r\n\t\tconst pagamento = {\r\n\t\t\tintent: `sale`,\r\n\t\t\tpayer: {\r\n\t\t\t\tpayment_method: `paypal`\r\n\t\t\t},\r\n\t\t\ttransactions: [\r\n\t\t\t\t{\r\n\t\t\t\t\tamount: {\r\n\t\t\t\t\t\ttotal: `${TotalPrice.toFixed(2)}`,\r\n\t\t\t\t\t\tcurrency: environment.VALUTA,\r\n\t\t\t\t\t\tdetails: {\r\n\t\t\t\t\t\t\tsubtotal: netPriceTot.toFixed(2),\r\n\t\t\t\t\t\t\ttax: this.tax.value.toFixed(2),\r\n\t\t\t\t\t\t\tshipping: this.cartHeader.shipping.toFixed(2),\r\n\t\t\t\t\t\t\thandling_fee: `0`,\r\n\t\t\t\t\t\t\tshipping_discount: `0`,\r\n\t\t\t\t\t\t\tinsurance: `0`\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdescription: `Pagamento per Ordine Web MyLiteLed`,\r\n\t\t\t\t\tcustom: `${this.cartHeader.custom_id}`, //univoco della tranzazione\r\n\t\t\t\t\t//invoice_id: `${DOC_ID}`,\r\n\t\t\t\t\tpayment_options: {\r\n\t\t\t\t\t\tallowed_payment_method: `INSTANT_FUNDING_SOURCE`\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsoft_descriptor: `Ordine Web MyLiteLed ${dataora}`,\r\n\t\t\t\t\titem_list: {\r\n\t\t\t\t\t\titems: _items,\r\n\t\t\t\t\t\tshipping_address: {\r\n\t\t\t\t\t\t\trecipient_name: `${this.cartHeader.anaCF.privateCli ? this.cartHeader.anaCF.name + ' ' + this.cartHeader.anaCF.lastname : this.cartHeader.anaCF.company}`,\r\n\t\t\t\t\t\t\tline1: this.cartHeader.anaCF.address.address,\r\n\t\t\t\t\t\t\t//line2: `Unit #34`,\r\n\t\t\t\t\t\t\tcity: this.cartHeader.anaCF.address.city,\r\n\t\t\t\t\t\t\tcountry_code: this.cartHeader.anaCF.address.country,\r\n\t\t\t\t\t\t\tpostal_code: this.cartHeader.anaCF.address.pcode,\r\n\t\t\t\t\t\t\tphone: this.cartHeader.anaCF.phone,\r\n\t\t\t\t\t\t\t//state: this.cartHeader.anaCF.address.state\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t],\r\n\t\t\tnote_to_payer: `Contattaci per informazioni sul tuo ordine: telefono +39 0444 821261 o email info@myliteled.com`,\r\n\t\t\tredirect_urls: {\r\n\t\t\t\treturn_url: `${domain}/${environment.paypal.paypalReturn}`,\r\n\t\t\t\tcancel_url: `${domain}/${environment.paypal.paypalCancelReturn}`\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t//console.log(pagamento)\r\n\r\n\t\t// Codifica le credenziali API per l'autenticazione\r\n\t\tconst base64Auth = btoa(`${client_id}:${client_secret}`);\r\n\t\tconst headers = new HttpHeaders()\r\n\t\t\t.set('Content-Type', 'application/json')\r\n\t\t\t.set('Authorization', `Basic ${base64Auth}`);\r\n\r\n\t\t// Effettua la richiesta per creare il pagamento\r\n\t\tthis.http.post(paypalApiUrl, pagamento, { headers: headers }).subscribe({\r\n\t\t\tnext: (response) => {\r\n\t\t\t\t// La risposta contiene l'URL di approvazione di PayPal\r\n\t\t\t\tconst approvalUrl = response.links.find(link => link.rel === 'approval_url').href;\r\n\t\t\t\tthis.toastrService.success('PayPal', this.translate.instant('msg.paymentOk'));\r\n\r\n\t\t\t\t// Reindirizza l'utente a PayPal per completare il pagamento\r\n\t\t\t\twindow.location.href = approvalUrl;\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\tthis.toastrService.error('PayPal', `${this.translate.instant('msg.paymentKo')} ${error}`);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tasync regPayment(docId: string, paymentId: string) {\r\n\t\tconst httpOptions = {\r\n\t\t\theaders: new HttpHeaders({\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t'IdUtente': this.cartHeader.idUtente.toString()\r\n\t\t\t}),\r\n\t\t\trejectUnauthorized: false,\r\n\t\t};\r\n\r\n\t\tconst body = {\r\n\t\t\tdocId: docId,\r\n\t\t\tpaymentId: paymentId,\r\n\t\t};\r\n\t\tawait firstValueFrom(\r\n\t\t\tthis.http.post(\r\n\t\t\t\t`${environment.backend.baseURL}/OrdWeb/regPayment`,\r\n\t\t\t\tbody,\r\n\t\t\t\thttpOptions\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tgenerateCustomId(): string {\r\n\r\n\t\tconst date: Date = new Date();\r\n\t\tconst day = date.getDate().toString().padStart(2, '0');\r\n\t\tconst month = (date.getMonth() + 1).toString().padStart(2, '0'); // Mese è zero-based, quindi aggiungiamo 1\r\n\t\tconst year = date.getFullYear().toString();\r\n\t\tconst hours = date.getHours().toString().padStart(2, '0');\r\n\t\tconst minutes = date.getMinutes().toString().padStart(2, '0');\r\n\t\tconst seconds = date.getSeconds().toString().padStart(2, '0');\r\n\r\n\t\treturn `${year}${month}${day}${hours}${minutes}${seconds}`;\r\n\t}\r\n}","import { Injectable } from '@angular/core';\nimport { Store, select } from '@ngrx/store';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject, BehaviorSubject } from 'rxjs';\n\nimport { Product } from 'src/app/shared/classes/product.model';\nimport { compareSelector } from 'src/app/core/selectors/selectors';\nimport { AddToCompareAction, RemoveFromCompareAction, ClearAllCompareAction } from 'src/app/core/actions/actions';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\n\nexport class CompareService {\n\n\tpublic compareItems = [];\n\tpublic compareStream: Subject = new BehaviorSubject([]);\n\tpublic compareQty: Subject = new BehaviorSubject( 0 );\n\n\tconstructor(private store: Store, private toastrService: ToastrService) {\n\t\tstore.pipe(select(compareSelector)).subscribe(items => {\n\t\t\tthis.compareItems = items;\n\t\t\tthis.compareStream.next(items);\n\t\t\tthis.compareQty.next(items.length);\n\t\t})\n\t}\n\n\t// Product added to Compare\n\taddToCompare(product: Product) {\n\t\tif (this.compareItems.findIndex(item => item.id === product.id) === -1) {\n\t\t\tthis.store.dispatch(new AddToCompareAction({ product }));\n\t\t\tthis.toastrService.success('Product added to Compare.');\n\t\t}\n\t}\n\n\t// Product removed from Compare\n\tremoveFromCompare(product: Product) {\n\t\tthis.store.dispatch(new RemoveFromCompareAction({ product }));\n\t\tthis.toastrService.error('Product removed from Compare.');\n\t}\n\n\t// Remove all products from Compare\n\tclearAllCompare() {\n\t\tthis.store.dispatch(new ClearAllCompareAction({}));\n\t}\n\n\t// Check whether product is in Compare or not\n\tisInCompare(product: Product) {\n\t\treturn this.compareItems.find(item => item.id == product.id) ? true : false;\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { environment } from 'src/environments/environment';\nimport { WSResponseModel } from '../classes/WSResponseModel';\nimport { FormGroup } from '@angular/forms';\nimport { ToastrService } from 'ngx-toastr';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class FormService {\n\n\tconstructor(\n\t\tpublic http: HttpClient,\n\t\tprivate toastrService: ToastrService,\n\t\tprivate translate: TranslateService\n\t) { }\n\n\tvalidateForm(form: FormGroup, expandedItems: { field: string, value: string, errorMessage: string }[] = []): boolean {\n\t\tlet errorMessage = ``;\n\n\t\tfor (const controlName in form.controls) {\n\t\t\tif (form.controls.hasOwnProperty(controlName)) {\n\t\t\t\tconst control = form.controls[controlName];\n\n\t\t\t\tif (control && control.invalid) {\n\n\t\t\t\t\tconst errors = control.errors;\n\t\t\t\t\tlet label = controlName;\n\n\t\t\t\t\t// Ottenere il valore del placeholder se presente\n\t\t\t\t\tconst inputElement = document.querySelector(`[formControlName=\"${controlName}\"]`);\n\t\t\t\t\tif (inputElement instanceof HTMLInputElement) {\n\t\t\t\t\t\tlabel = inputElement.placeholder || controlName;\n\t\t\t\t\t}\n\t\t\t\t\tif (inputElement instanceof HTMLTextAreaElement) {\n\t\t\t\t\t\tlabel = inputElement.placeholder || controlName;\n\t\t\t\t\t}\n\t\t\t\t\tif (inputElement instanceof HTMLSelectElement) {\n\t\t\t\t\t\tconst selectedIndex = inputElement.selectedIndex;\n\t\t\t\t\t\tif (selectedIndex !== -1) {\n\t\t\t\t\t\t\tconst selectedOption = inputElement.options[selectedIndex];\n\t\t\t\t\t\t\tlabel = selectedOption.outerText || controlName;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Nessuna opzione selezionata, usa il nome del controllo come fallback\n\t\t\t\t\t\t\tlabel = controlName;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (errors && errors['required']) {\n\t\t\t\t\t\terrorMessage += `- ${label}
`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Aggiungi i messaggi di errore personalizzati per gli elementi espansi\n\t\tfor (const item of expandedItems) {\n\t\t\tif (item.errorMessage) {\n\t\t\t errorMessage += `- ${item.errorMessage}
`;\n\t\t\t}\n\t\t }\n\n\t\tif (errorMessage != \"\") {\n\t\t\terrorMessage = `${this.translate.instant('ctrl.ctrlfld')}:
${errorMessage}`;\n\t\t\tthis.toastrService.error(errorMessage, this.translate.instant('ctrl.ctrlfldtit'));\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\treturn true\n\t\t}\n\t}\n\n\tsendFormContatto(form: FormGroup) {\n\t\tconst httpOptions = {\n\t\t\theaders: new HttpHeaders({\n\t\t\t\t'EmailMailFrom': environment.backend.EmailFrom,\n\t\t\t\t'EmailMailTo': environment.backend.EmailTo,\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t}),\n\t\t\trejectUnauthorized: false,\n\t\t};\n\n\t\tconst body = form.getRawValue();\n\n\t\treturn this.http.post(\n\t\t\t`${environment.backend.baseURL}/CRM/CRMPost/sendFormContatto`,\n\t\t\tbody,\n\t\t\thttpOptions\n\t\t);\n\t}\n\n\tsendJoinNewsletter(form: FormGroup) {\n\t\tconst httpOptions = {\n\t\t\theaders: new HttpHeaders({\n\t\t\t\t'EmailMailFrom': environment.backend.EmailFrom,\n\t\t\t\t'EmailMailTo': environment.backend.EmailTo,\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t}),\n\t\t\trejectUnauthorized: false,\n\t\t};\n\n\t\tconst body = form.getRawValue();\n\n\t\treturn this.http.post(\n\t\t\t`${environment.backend.baseURL}/CRM/CRMPost/sendJoinNewsletter`,\n\t\t\tbody,\n\t\t\thttpOptions\n\t\t);\n\t}\n\t\n}\n","import { DOCUMENT } from \"@angular/common\";\r\nimport { Inject, Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class JsonLDService {\r\n\tstatic scriptType = 'application/ld+json';\r\n\tstatic websiteSchema = (tipo?: string, url?: string, name?: string, description?: string, params?: any) => {\r\n\r\n\t\tconst dataSchema = {\r\n\t\t\t'@context': 'http://schema.org',\r\n\t\t\t'@type': tipo,\r\n\t\t\turl: url || window.location.href, // Use the provided 'url' or fallback to the current window location\r\n\t\t\tname: name || 'MyLiteLED',\r\n\t\t};\r\n\t\r\n\t\tif (description) {\r\n\t\t\tdataSchema['description'] = description;\r\n\t\t}\r\n\t\r\n\t\tswitch (tipo) {\r\n\t\t\tcase 'Organization': {\r\n\t\t\t\tdataSchema['contactPoint'] = {\r\n\t\t\t\t\t'@type': 'ContactPoint',\r\n\t\t\t\t\ttelephone: '+39-0444-821261',\r\n\t\t\t\t\tcontactType: 'customer support'\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase 'Product': {\r\n\t\t\t\tfor (let key in params) {\r\n\t\t\t\t\tswitch (key) {\r\n\t\t\t\t\t\tcase 'image':\r\n\t\t\t\t\t\t\tdataSchema['image'] = [params[key]];\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'aggregateRating':\r\n\t\t\t\t\t\t\tdataSchema['aggregateRating'] = {\r\n\t\t\t\t\t\t\t\t\"@type\": \"AggregateRating\",\r\n\t\t\t\t\t\t\t\tratingValue: params[key],\r\n\t\t\t\t\t\t\t\treviewCount: params[key]\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdataSchema[key] = params[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tdefault: {\r\n\t\t\t\tfor (let key in params) {\r\n\t\t\t\t\tdataSchema[key] = params[key];\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\treturn dataSchema;\r\n\t};\r\n\t\r\n\r\n\tconstructor(@Inject(DOCUMENT) private _document: Document) { }\r\n\r\n\tremoveStructuredData(): void {\r\n\t\tconst els: Element[] = [];\r\n\t\t['structured-data', 'structured-data-org'].forEach(c => {\r\n\t\t\tels.push(...Array.from(this._document.head.getElementsByClassName(c)));\r\n\t\t});\r\n\t\tels.forEach(el => this._document.head.removeChild(el));\r\n\t}\r\n\r\n\tinsertSchema(schema: Record, className = 'structured-data'): void {\r\n\r\n\t\tlet script: any;\r\n\t\tlet shouldAppend = false;\r\n\t\tif (this._document.head.getElementsByClassName(className).length) {\r\n\t\t\tscript = this._document.head.getElementsByClassName(className)[0];\r\n\t\t} else {\r\n\t\t\tscript = this._document.createElement('script');\r\n\t\t\tshouldAppend = true;\r\n\t\t}\r\n\t\tscript.setAttribute('class', className);\r\n\t\tscript.type = JsonLDService.scriptType;\r\n\t\tscript.text = JSON.stringify(schema);\r\n\t\tif (shouldAppend) {\r\n\t\t\tthis._document.head.appendChild(script);\r\n\t\t}\r\n\t}\r\n}","
\n \n\n
\n
\n
\n
\n
\n New\n Sale\n Top\n Out Of\n Stock\n\n \n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n

{{ product.name }}

\n\n \n\n
\n
\n {{ product.price.toFixed(2) | currency:currVal }}\n
\n\n \n
\n {{ minPrice.toFixed(2) | currency:currVal }}
\n \n
\n {{ minPrice.toFixed(2) | currency:currVal }}\n {{ maxPrice.toFixed(2) | currency:currVal }}\n
\n \n
{{ minPrice.toFixed(2) | currency:currVal }}–{{maxPrice.toFixed(2) | currency:currVal }}
\n
\n
\n
\n
\n\n
\n

{{ product.short_desc }}

\n
\n\n
1\">\n
\n \n
\n \n
\n
\n\n
\n \n
\n \n
\n\n size guide\n clear\n
\n
\n\n
\n
\n {{ selectedVariant.price ? selectedVariant.price.toFixed( 2 ) : 0 | currency:currVal}}\n
\n
\n\n
\n \n \n \n
\n\n \n\n
\n
\n Category:\n \n {{ cat.name }}{{ i < product.category.length - 1 ? ',' : '' }}\n
\n\n
\n Share:\n \n \n \n \n
\n
\n
\n
\n
\n
\n\n
","import { Component, OnInit, ViewEncapsulation, ElementRef, Input, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport imagesLoaded from 'imagesloaded';\n\nimport { Product } from 'src/app/shared/classes/product.model';\nimport { environment } from 'src/environments/environment';\n\nimport { ApiService } from 'src/app/shared/services/api.service';\nimport { CartService } from 'src/app/shared/services/cart.service';\nimport { CompareService } from 'src/app/shared/services/compare.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { WishlistService } from 'src/app/shared/services/wishlist.service';\nimport { sliderOpt } from 'src/app/shared/data';\n\ndeclare var $: any;\n\n@Component({\n\tselector: 'molla-quick-view',\n\ttemplateUrl: './quick-view.component.html',\n\tstyleUrls: ['./quick-view.component.scss'],\n\tencapsulation: ViewEncapsulation.None\n})\n\nexport class QuickViewComponent implements OnInit {\n\t@Input() codart = '';\n\t@Input() slug = '';\n\tproduct: Product;\n\tloaded = false;\n\toptions = {\n\t\t...sliderOpt,\n\t\tdots: false,\n\t\tnav: false,\n\t\tloop: false,\n\t\tonTranslate: (e: any) => this.itemChange(e, this)\n\t}\n\tvariationGroup = [];\n\tselectableGroup = [];\n\tsizeArray = [];\n\tcolorArray = [];\n\tselectedVariant = {\n\t\tcolor: null,\n\t\tcolorName: null,\n\t\tprice: null,\n\t\tsize: \"\",\n\t\tdisabled: false\n\t};\n\tmaxPrice = 0;\n\tminPrice = 99999;\n\tpaddingTop = '100%';\n\tcurrentIndex = 0;\n\tqty = 1;\n\n\t\n\tloginModel = JSON.parse(sessionStorage.getItem('currentUser')!);\n\tcurrVal = environment.VALUTA\n\n\t@ViewChild('singleSlider') singleSlider: any;\n\n\tconstructor(\n\t\tpublic apiService: ApiService,\n\t\tpublic cartService: CartService,\n\t\tpublic wishlistService: WishlistService,\n\t\tpublic compareService: CompareService,\n\t\tpublic utilsService: UtilsService,\n\t\tpublic router: Router,\n\t\tpublic el: ElementRef) {\n\t}\n\n\tpublic trackByFn(index, item) {\n\t\tif (!item) return null;\n\t\treturn item.id;\n\t}\n\n\tngOnInit(): void {\n\t\tthis.apiService.getSingleProduct(this.codart, true).subscribe(result => {\n\t\t\tthis.product = JSON.parse(result!.product); //result.product;\n\n\t\t\tlet min = this.minPrice;\n\t\t\tlet max = this.maxPrice;\n\n\t\t\tthis.variationGroup = this.product.variants.reduce((acc, cur) => {\n\t\t\t\tcur.size.map(item => {\n\t\t\t\t\tacc.push({\n\t\t\t\t\t\tcolor: cur.color,\n\t\t\t\t\t\tcolorName: cur.color_name,\n\t\t\t\t\t\tsize: item.name,\n\t\t\t\t\t\tprice: cur.price\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (min > cur.price) min = cur.price;\n\t\t\t\tif (max < cur.price) max = cur.price;\n\t\t\t\treturn acc;\n\t\t\t}, []);\n\n\t\t\tif (this.product.variants.length == 0) {\n\t\t\t\tmin = this.product.sale_price\n\t\t\t\t\t? this.product.sale_price\n\t\t\t\t\t: this.product.price;\n\t\t\t\tmax = this.product.price;\n\t\t\t}\n\n\t\t\tthis.minPrice = min;\n\t\t\tthis.maxPrice = max;\n\n\t\t\tthis.paddingTop = Math.floor((parseFloat(this.product.pictures[0].height.toString()) / parseFloat(this.product.pictures[0].width.toString()) * 1000)) / 10 + '%';\n\n\t\t\tthis.refreshSelectableGroup();\n\n\t\t\tlet self = this;\n\t\t\timagesLoaded(\".quickView-modal\").on(\"done\", function () {\n\t\t\t\tself.loaded = true;\n\t\t\t})\n\t\t})\n\t}\n\n\titemChange(e: any, self: any) {\n\t\tdocument.querySelector('#product-image-gallery').querySelector('.product-gallery-item.active').classList.remove('active');\n\t\tdocument.querySelector('#product-image-gallery').querySelectorAll('.product-gallery-item')[e.item.index].classList.add('active');\n\n\t\tself.currentIndex = e.item.index;\n\t}\n\n\taddCart(event: Event) {\n\t\tevent.preventDefault();\n\t\tif ((event.currentTarget as HTMLElement).classList.contains('btn-disabled')) return;\n\n\t\tlet newProduct = { ...this.product };\n\t\tif (this.product.variants.length > 0) {\n\t\t\tnewProduct = {\n\t\t\t\t...this.product,\n\t\t\t\tname:\n\t\t\t\t\tthis.product.name +\n\t\t\t\t\t' - ' +\n\t\t\t\t\tthis.selectedVariant.colorName +\n\t\t\t\t\t', ' +\n\t\t\t\t\tthis.selectedVariant.size,\n\t\t\t\tprice: this.selectedVariant.price\n\t\t\t};\n\t\t}\n\n\t\tthis.cartService.addToCart(\n\t\t\tnewProduct, this.qty\n\t\t);\n\t}\n\n\taddToWishlist(event: Event) {\n\t\tevent.preventDefault();\n\n\t\tif (this.isInWishlist()) {\n\t\t\tthis.router.navigate(['/shop/wishlist']);\n\t\t} else {\n\t\t\tthis.wishlistService.addToWishList(this.product);\n\t\t}\n\t}\n\n\taddToCompare(event: Event) {\n\t\tevent.preventDefault();\n\t\tif (this.isInCompare()) return;\n\t\tthis.compareService.addToCompare(this.product);\n\t}\n\n\tisInCompare() {\n\t\treturn this.compareService.isInCompare(this.product);\n\t}\n\n\tisInWishlist() {\n\t\treturn this.wishlistService.isInWishlist(this.product);\n\t}\n\n\trefreshSelectableGroup() {\n\t\tlet tempArray = [...this.variationGroup];\n\t\tif (this.selectedVariant.color) {\n\t\t\ttempArray = this.variationGroup.reduce((acc, cur) => {\n\t\t\t\tif (this.selectedVariant.color !== cur.color) {\n\t\t\t\t\treturn acc;\n\t\t\t\t}\n\t\t\t\treturn [...acc, cur];\n\t\t\t}, []);\n\t\t}\n\n\t\tthis.sizeArray = tempArray.reduce((acc, cur) => {\n\t\t\tif (acc.findIndex(item => item.size == cur.size) !== -1)\n\t\t\t\treturn acc;\n\t\t\treturn [...acc, cur];\n\t\t}, []);\n\n\t\ttempArray = [...this.variationGroup];\n\t\tif (this.selectedVariant.size) {\n\t\t\ttempArray = this.variationGroup.reduce((acc, cur) => {\n\t\t\t\tif (this.selectedVariant.size !== cur.size) {\n\t\t\t\t\treturn acc;\n\t\t\t\t}\n\t\t\t\treturn [...acc, cur];\n\t\t\t}, []);\n\t\t}\n\n\t\tthis.colorArray = this.product.variants.reduce((acc, cur) => {\n\t\t\tif (\n\t\t\t\ttempArray.findIndex(item => item.color == cur.color) == -1\n\t\t\t) {\n\t\t\t\treturn [\n\t\t\t\t\t...acc,\n\t\t\t\t\t{\n\t\t\t\t\t\tcolor: cur.color,\n\t\t\t\t\t\tcolorName: cur.color_name,\n\t\t\t\t\t\tprice: cur.price,\n\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t...acc,\n\t\t\t\t{\n\t\t\t\t\tcolor: cur.color,\n\t\t\t\t\tcolorName: cur.color_name,\n\t\t\t\t\tprice: cur.price,\n\t\t\t\t\tdisabled: false\n\t\t\t\t}\n\t\t\t];\n\t\t}, []);\n\n\t\tlet toggle = this.el.nativeElement.querySelector('.variation-price');\n\t\tif (toggle) {\n\t\t\tif (this.selectedVariant.color && this.selectedVariant.size !== \"\") {\n\t\t\t\t$(toggle).slideDown();\n\t\t\t} else {\n\t\t\t\t$(toggle).slideUp();\n\t\t\t}\n\t\t}\n\t}\n\n\tselectColor(event: Event, item: any) {\n\t\tevent.preventDefault();\n\n\t\tif (item.color == this.selectedVariant.color) {\n\t\t\tthis.selectedVariant = {\n\t\t\t\t...this.selectedVariant,\n\t\t\t\tcolor: null,\n\t\t\t\tcolorName: null,\n\t\t\t\tprice: item.price\n\t\t\t};\n\t\t} else {\n\t\t\tthis.selectedVariant = {\n\t\t\t\t...this.selectedVariant,\n\t\t\t\tcolor: item.color,\n\t\t\t\tcolorName: item.colorName,\n\t\t\t\tprice: item.price\n\t\t\t};\n\t\t}\n\n\t\tthis.refreshSelectableGroup();\n\t}\n\n\tselectSize(event: Event) {\n\t\tif (this.selectedVariant.size == 'null') {\n\t\t\tthis.selectedVariant = { ...this.selectedVariant, size: \"\" };\n\t\t}\n\t\tif ($(event.target).val() == \"\") {\n\t\t\tthis.selectedVariant = { ...this.selectedVariant, size: \"\" };\n\t\t} else {\n\t\t\tthis.selectedVariant = { ...this.selectedVariant, size: $(event.target).val() };\n\t\t}\n\n\t\tthis.refreshSelectableGroup();\n\t}\n\n\tonChangeQty(current: number) {\n\t\tthis.qty = current;\n\n\n\t\tthis.apiService.getSingleProduct(this.product.id, false, current).subscribe(result => {\n\t\t\tif (result != null) {\n\t\t\t\tthis.product = result!.product;\n\n\t\t\t\tif (this.product.variants.length == 0) {\n\t\t\t\t\tthis.minPrice = this.product.sale_price\n\t\t\t\t\t\t? this.product.sale_price\n\t\t\t\t\t\t: this.product.price;\n\t\t\t\t\t\tthis.maxPrice = this.product.price;\n\t\t\t\t}\t\n\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t}\n\n\tclearSelection() {\n\t\tthis.selectedVariant = {\n\t\t\t...this.selectedVariant,\n\t\t\tcolor: null,\n\t\t\tcolorName: null,\n\t\t\tsize: \"\"\n\t\t};\n\t\tthis.refreshSelectableGroup();\n\t}\n\n\tcloseQuickView() {\n\t\tlet modal = document.querySelector('.quickView-modal') as HTMLElement;\n\t\tif (modal)\n\t\t\tmodal.click();\n\t}\n\n\tchangeImage($event: Event, i = 0) {\n\t\tthis.currentIndex = i;\n\t\tthis.singleSlider.to(i);\n\t\t$event.preventDefault();\n\t}\n}","
\n \n\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n New\n Sale\n Top\n Out Of\n Stock\n\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n

{{ product.name }}

\n\n \n\n
\n
\n {{ product.price.toFixed(2) | currency:currVal }}\n
\n\n \n
\n {{ minPrice.toFixed(2) | currency:currVal}}
\n \n
\n {{ minPrice.toFixed(2) | currency:currVal }}\n {{ maxPrice.toFixed(2) | currency:currVal }}\n
\n \n
{{minPrice.toFixed(2) | currency:currVal}}–{{maxPrice.toFixed(2) | currency:currVal}}
\n
\n
\n
\n
\n\n
\n

{{ product.short_desc }}

\n
\n\n
1\">\n
\n \n
\n \n
\n
\n\n
\n \n
\n \n
\n\n size guide\n clear\n
\n
\n\n
\n
\n {{ selectedVariant.price ? selectedVariant.price.toFixed( 2 ) : 0 | currency:currVal }}\n
\n
\n\n
\n \n \n \n
\n\n \n\n
\n
\n Category:\n \n {{ cat.name }}{{ i < product.category.length - 1 ? ',' : '' }}\n
\n\n
\n Share:\n \n \n \n \n
\n
\n
\n
\n
\n
\n\n
","import { Component, OnInit, ViewEncapsulation, ElementRef, Input, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport imagesLoaded from 'imagesloaded';\n\nimport { Product } from 'src/app/shared/classes/product.model';\nimport { environment } from 'src/environments/environment';\n\nimport { ApiService } from 'src/app/shared/services/api.service';\nimport { CartService } from 'src/app/shared/services/cart.service';\nimport { CompareService } from 'src/app/shared/services/compare.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { WishlistService } from 'src/app/shared/services/wishlist.service';\nimport { sliderOpt } from 'src/app/shared/data';\n\ndeclare var $: any;\n\n@Component({\n\tselector: 'molla-quick-view-two',\n\ttemplateUrl: './quick-view-two.component.html',\n\tstyleUrls: ['./quick-view-two.component.scss'],\n\tencapsulation: ViewEncapsulation.None\n})\n\nexport class QuickViewTwoComponent implements OnInit {\n\t@Input() codart = '';\n\t@Input() slug = '';\n\tproduct: Product;\n\tloaded = false;\n\toptions = {\n\t\t...sliderOpt,\n\t\tdots: false,\n\t\tnav: false,\n\t\tloop: false,\n\t\tonTranslate: (e: any) => this.itemChange(e, this)\n\t}\n\tvariationGroup = [];\n\tselectableGroup = [];\n\tsizeArray = [];\n\tcolorArray = [];\n\tselectedVariant = {\n\t\tcolor: null,\n\t\tcolorName: null,\n\t\tprice: null,\n\t\tsize: \"\",\n\t\tdisabled: false\n\t};\n\tmaxPrice = 0;\n\tminPrice = 99999;\n\tpaddingTop = '100%';\n\tcurrentIndex = 0;\n\tqty = 1;\n\n\t\n\tloginModel = JSON.parse(sessionStorage.getItem('currentUser')!);\n\tcurrVal = environment.VALUTA\n\n\t@ViewChild('singleSlider') singleSlider: any;\n\n\tconstructor(\n\t\tpublic apiService: ApiService,\n\t\tpublic cartService: CartService,\n\t\tpublic wishlistService: WishlistService,\n\t\tpublic compareService: CompareService,\n\t\tpublic utilsService: UtilsService,\n\t\tpublic router: Router,\n\t\tpublic el: ElementRef) {\n\t}\n\n\tpublic trackByFn(index, item) {\n\t\tif (!item) return null;\n\t\treturn item.id;\n\t}\n\n\tngOnInit(): void {\n\t\tthis.apiService.getSingleProduct(this.codart, true).subscribe(result => {\n\t\t\tthis.product = result.product;\n\n\t\t\tlet min = this.minPrice;\n\t\t\tlet max = this.maxPrice;\n\n\t\t\tthis.variationGroup = this.product.variants.reduce((acc, cur) => {\n\t\t\t\tcur.size.map(item => {\n\t\t\t\t\tacc.push({\n\t\t\t\t\t\tcolor: cur.color,\n\t\t\t\t\t\tcolorName: cur.color_name,\n\t\t\t\t\t\tsize: item.name,\n\t\t\t\t\t\tprice: cur.price\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (min > cur.price) min = cur.price;\n\t\t\t\tif (max < cur.price) max = cur.price;\n\t\t\t\treturn acc;\n\t\t\t}, []);\n\n\t\t\tif (this.product.variants.length == 0) {\n\t\t\t\tmin = this.product.sale_price\n\t\t\t\t\t? this.product.sale_price\n\t\t\t\t\t: this.product.price;\n\t\t\t\tmax = this.product.price;\n\t\t\t}\n\n\t\t\tthis.minPrice = min;\n\t\t\tthis.maxPrice = max;\n\n\t\t\tthis.paddingTop = Math.floor((parseFloat(this.product.pictures[0].height.toString()) / parseFloat(this.product.pictures[0].width.toString()) * 1000)) / 10 + '%';\n\n\t\t\tthis.refreshSelectableGroup();\n\n\t\t\tlet self = this;\n\t\t\timagesLoaded(\".quickView-modal\").on(\"done\", function () {\n\t\t\t\tself.loaded = true;\n\t\t\t})\n\t\t})\n\t}\n\n\titemChange(e: any, self: any) {\n\t\tdocument.querySelector('#product-image-gallery').querySelector('.product-gallery-item.active').classList.remove('active');\n\t\tdocument.querySelector('#product-image-gallery').querySelectorAll('.product-gallery-item')[e.item.index].classList.add('active');\n\n\t\tself.currentIndex = e.item.index;\n\t}\n\n\taddCart(event: Event) {\n\t\tevent.preventDefault();\n\t\tif ((event.currentTarget as HTMLElement).classList.contains('btn-disabled')) return;\n\n\t\tlet newProduct = { ...this.product };\n\t\tif (this.product.variants.length > 0) {\n\t\t\tnewProduct = {\n\t\t\t\t...this.product,\n\t\t\t\tname:\n\t\t\t\t\tthis.product.name +\n\t\t\t\t\t' - ' +\n\t\t\t\t\tthis.selectedVariant.colorName +\n\t\t\t\t\t', ' +\n\t\t\t\t\tthis.selectedVariant.size,\n\t\t\t\tprice: this.selectedVariant.price\n\t\t\t};\n\t\t}\n\n\t\tthis.cartService.addToCart(\n\t\t\tnewProduct, this.qty\n\t\t);\n\t}\n\n\taddToWishlist(event: Event) {\n\t\tevent.preventDefault();\n\n\t\tif (this.isInWishlist()) {\n\t\t\tthis.router.navigate(['/shop/wishlist']);\n\t\t} else {\n\t\t\tthis.wishlistService.addToWishList(this.product);\n\t\t}\n\t}\n\n\taddToCompare(event: Event) {\n\t\tevent.preventDefault();\n\t\tif (this.isInCompare()) return;\n\t\tthis.compareService.addToCompare(this.product);\n\t}\n\n\tisInCompare() {\n\t\treturn this.compareService.isInCompare(this.product);\n\t}\n\n\tisInWishlist() {\n\t\treturn this.wishlistService.isInWishlist(this.product);\n\t}\n\n\trefreshSelectableGroup() {\n\t\tlet tempArray = [...this.variationGroup];\n\t\tif (this.selectedVariant.color) {\n\t\t\ttempArray = this.variationGroup.reduce((acc, cur) => {\n\t\t\t\tif (this.selectedVariant.color !== cur.color) {\n\t\t\t\t\treturn acc;\n\t\t\t\t}\n\t\t\t\treturn [...acc, cur];\n\t\t\t}, []);\n\t\t}\n\n\t\tthis.sizeArray = tempArray.reduce((acc, cur) => {\n\t\t\tif (acc.findIndex(item => item.size == cur.size) !== -1)\n\t\t\t\treturn acc;\n\t\t\treturn [...acc, cur];\n\t\t}, []);\n\n\t\ttempArray = [...this.variationGroup];\n\t\tif (this.selectedVariant.size) {\n\t\t\ttempArray = this.variationGroup.reduce((acc, cur) => {\n\t\t\t\tif (this.selectedVariant.size !== cur.size) {\n\t\t\t\t\treturn acc;\n\t\t\t\t}\n\t\t\t\treturn [...acc, cur];\n\t\t\t}, []);\n\t\t}\n\n\t\tthis.colorArray = this.product.variants.reduce((acc, cur) => {\n\t\t\tif (\n\t\t\t\ttempArray.findIndex(item => item.color == cur.color) == -1\n\t\t\t) {\n\t\t\t\treturn [\n\t\t\t\t\t...acc,\n\t\t\t\t\t{\n\t\t\t\t\t\tcolor: cur.color,\n\t\t\t\t\t\tcolorName: cur.color_name,\n\t\t\t\t\t\tprice: cur.price,\n\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t...acc,\n\t\t\t\t{\n\t\t\t\t\tcolor: cur.color,\n\t\t\t\t\tcolorName: cur.color_name,\n\t\t\t\t\tprice: cur.price,\n\t\t\t\t\tdisabled: false\n\t\t\t\t}\n\t\t\t];\n\t\t}, []);\n\n\t\tlet toggle = this.el.nativeElement.querySelector('.variation-price');\n\t\tif (toggle) {\n\t\t\tif (this.selectedVariant.color && this.selectedVariant.size !== \"\") {\n\t\t\t\t$(toggle).slideDown();\n\t\t\t} else {\n\t\t\t\t$(toggle).slideUp();\n\t\t\t}\n\t\t}\n\t}\n\n\tselectColor(event: Event, item: any) {\n\t\tevent.preventDefault();\n\n\t\tif (item.color == this.selectedVariant.color) {\n\t\t\tthis.selectedVariant = {\n\t\t\t\t...this.selectedVariant,\n\t\t\t\tcolor: null,\n\t\t\t\tcolorName: null,\n\t\t\t\tprice: item.price\n\t\t\t};\n\t\t} else {\n\t\t\tthis.selectedVariant = {\n\t\t\t\t...this.selectedVariant,\n\t\t\t\tcolor: item.color,\n\t\t\t\tcolorName: item.colorName,\n\t\t\t\tprice: item.price\n\t\t\t};\n\t\t}\n\n\t\tthis.refreshSelectableGroup();\n\t}\n\n\tselectSize(event: Event) {\n\t\tif (this.selectedVariant.size == 'null') {\n\t\t\tthis.selectedVariant = { ...this.selectedVariant, size: \"\" };\n\t\t}\n\t\tif ($(event.target).val() == \"\") {\n\t\t\tthis.selectedVariant = { ...this.selectedVariant, size: \"\" };\n\t\t} else {\n\t\t\tthis.selectedVariant = { ...this.selectedVariant, size: $(event.target).val() };\n\t\t}\n\n\t\tthis.refreshSelectableGroup();\n\t}\n\n\tonChangeQty(current: number) {\n\t\tthis.qty = current;\n\n\t\t\n\n\t\tthis.apiService.getSingleProduct(this.product.id, false, current).subscribe(result => {\n\t\t\tif (result != null) {\n\t\t\t\tthis.product = result!.product;\n\n\t\t\t\tif (this.product.variants.length == 0) {\n\t\t\t\t\tthis.minPrice = this.product.sale_price\n\t\t\t\t\t\t? this.product.sale_price\n\t\t\t\t\t\t: this.product.price;\n\t\t\t\t\t\tthis.maxPrice = this.product.price;\n\t\t\t\t}\t\n\t\t\n\t\t\t}\n\t\t});\n\t}\n\n\tclearSelection() {\n\t\tthis.selectedVariant = {\n\t\t\t...this.selectedVariant,\n\t\t\tcolor: null,\n\t\t\tcolorName: null,\n\t\t\tsize: \"\"\n\t\t};\n\t\tthis.refreshSelectableGroup();\n\t}\n\n\tcloseQuickView() {\n\t\tlet modal = document.querySelector('.quickView-modal') as HTMLElement;\n\t\tif (modal)\n\t\t\tmodal.click();\n\t}\n\n\tchangeImage($event: Event, i = 0) {\n\t\tthis.currentIndex = i;\n\t\tthis.singleSlider.to(i);\n\t\t$event.preventDefault();\n\t}\n}","import { Component, OnInit } from '@angular/core';\nimport Cookie from 'js-cookie';\n\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { environment } from 'src/environments/environment';\n\n@Component( {\n\tselector: 'molla-newsletter-modal',\n\ttemplateUrl: './newsletter-modal.component.html',\n\tstyleUrls: [ './newsletter-modal.component.scss' ]\n} )\n\nexport class NewsletterModalComponent implements OnInit {\n\n\tcheckState = false;\n\n\tconstructor ( private modalService: NgbActiveModal ) { }\n\n\tngOnInit (): void {\n\t}\n\n\tchangeCheck () {\n\t\tthis.checkState = !this.checkState;\n\t}\n\n\tcloseModal () {\n\t\tthis.modalService.dismiss();\n\t\tthis.checkState && Cookie.set( `hideNewsletter-${environment.demo}`, \"true\", { expires: 7 } );\n\t}\n}","
\n
\n
\n
\n
\n
\n
\n \"logo\"\n

get 25% off

\n

Subscribe to the Molla eCommerce newsletter to receive timely updates from your favorite\n products.

\n
\n
\n \n
\n \n
\n
\n
\n\n
\n \n \n
\n
\n
\n\n
\n \n
\n
\n
\n\n \n
\n
\n
","
\n \n\n
\n
\n \n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { emailRegex } from 'src/app/core/constants/constants';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n\n@Component({\n\tselector: 'molla-login-modal',\n\ttemplateUrl: './login-modal.component.html',\n\tstyleUrls: ['./login-modal.component.scss']\n})\n\nexport class LoginModalComponent implements OnInit {\n\tm_regForm!: FormGroup;\n\tsubmitted: boolean = false;\n\n\tconstructor(\n\t\tprivate formBuilder: FormBuilder,\n\t\tprivate router: Router,\n\t\tprivate utilsService: UtilsService) {\n\n\t\t\t//Carico i controlli della form\n\t\t\tthis.m_regForm = this.formBuilder.group({\n\t\t\t\temail: ['', { validators: [Validators.required, Validators.pattern(emailRegex)] }],\n\t\t\t\tpassword: ['', Validators.required],\n\t\t\t\tprivacy1: [false],\n\t\t\t\tprivacy2: [false]\n\t\t\t});\n\n\t}\n\n\tget r() { return this.m_regForm.controls; }\n\n\tngOnInit(): void {\n\n\t}\n\n\tasync register() {\n\t\tthis.submitted = true;\n\t\tif (this.m_regForm.invalid)\n\t\t\treturn;\n\n\t\tconst url = `/pages/register?email=${this.r['email'].value}`;\n\t\tthis.utilsService.setPassword(this.m_regForm.get('password').value);\n\t\t// Naviga alla pagina 'register' con i parametri nell'URL\n\t\tthis.router.navigateByUrl(url);\n\t\t//window.location.href=url;\n\t}\n\n\tcloseModal() {\n\t\tlet modal = document.querySelector('.login-modal') as HTMLElement;\n\t\tif (modal)\n\t\t\tmodal.click();\n\t}\n\n\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component( {\n\tselector: 'molla-video-modal',\n\ttemplateUrl: './video-modal.component.html',\n\tstyleUrls: [ './video-modal.component.scss' ]\n} )\n\nexport class VideoModalComponent implements OnInit {\n\n\t@Input() url = \"\";\n\n\tconstructor (\n\t\tprivate modalService: NgbActiveModal,\n\t\tpublic sanitizer: DomSanitizer ) {\n\t}\n\n\tngOnInit (): void {\n\t}\n\n\tcloseModal () {\n\t\tthis.modalService.dismiss();\n\t}\n}","
\n \n \n
","import { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'molla-confirm-dialog',\n templateUrl: './confirm-dialog.component.html'\n})\nexport class ConfirmDialogComponent implements OnInit {\n message: string;\n\n constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit(): void {\n }\n\n\n\n}\n","

{{ data.title }}

\n{{ data.message }}\n\n \n \n\n","import { Component, Inject, OnInit } from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\n\n\n@Component({\n selector: 'molla-alert-dialog',\n templateUrl: './alert-dialog.component.html',\n styleUrls: ['./alert-dialog.component.scss']\n})\nexport class AlertDialogComponent implements OnInit {\n message: string;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: {title: string, message: string}) { }\n\n ngOnInit(): void {\n }\n\n\n}\n","{{ data.message }}\n\n \n\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBar } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'molla-snack-bar',\n templateUrl: './snack-bar.component.html',\n styleUrls: ['./snack-bar.component.scss']\n})\nexport class SnackBarComponent implements OnInit {\n message: string;\n\n constructor(\n private snackBar: MatSnackBar,\n @Inject(MAT_SNACK_BAR_DATA) public data: any) {}\n\n ngOnInit(): void {\n }\n\n dismiss() {\n this.snackBar.dismiss();\n }\n}","
\n \n

\n
\n
","import Cookie from 'js-cookie';\nimport { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { NgbModalOptions, NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { Product } from 'src/app/shared/classes/product.model';\n\nimport { QuickViewComponent } from 'src/app/shared/components/modals/quick-view/quick-view.component';\nimport { QuickViewTwoComponent } from 'src/app/shared/components/modals/quick-view-two/quick-view-two.component';\nimport { NewsletterModalComponent } from '../components/modals/newsletter-modal/newsletter-modal.component';\nimport { LoginModalComponent } from '../components/modals/login-modal/login-modal.component';\nimport { VideoModalComponent } from '../components/modals/video-modal/video-modal.component';\n\nimport { environment } from 'src/environments/environment';\n\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ConfirmDialogComponent } from '../components/modals/confirm-dialog/confirm-dialog.component';\nimport { AlertDialogComponent } from '../components/modals/alert-dialog/alert-dialog.component';\nimport { SnackBarComponent } from '../components/modals/snack-bar/snack-bar.component';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\n\nexport class ModalService {\n\tproducts = [];\n\ttimer: any;\n\n\n\tprivate modalOption1: NgbModalOptions = {\n\t\tcentered: true,\n\t\tsize: 'xl',\n\t\twindowClass: 'newsletter-modal',\n\t\tbeforeDismiss: async () => {\n\t\t\tdocument.querySelector('body')?.classList.remove('modal-open');\n\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tresolve('success');\n\t\t\t\t}, 250)\n\t\t\t});\n\n\t\t\t(document.querySelector('.logo') as HTMLElement).focus({ preventScroll: true });\n\n\t\t\treturn true;\n\t\t}\n\t};\n\n\tprivate modalOption2: NgbModalOptions = {\n\t\tcentered: true,\n\t\tsize: 'lg',\n\t\twindowClass: 'login-modal',\n\t\tbeforeDismiss: async () => {\n\t\t\tdocument.querySelector('body')?.classList.remove('modal-open');\n\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tresolve('success');\n\t\t\t\t}, 300)\n\t\t\t});\n\n\t\t\t(document.querySelector('.logo') as HTMLElement).focus({ preventScroll: true });\n\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tprivate modalOption3: NgbModalOptions = {\n\t\tcentered: true,\n\t\tsize: 'xl',\n\t\tscrollable: false,\n\t\twindowClass: \"vb-modal\",\n\t\tbeforeDismiss: async () => {\n\t\t\tdocument.querySelector('body')?.classList.remove('modal-open');\n\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tresolve('success');\n\t\t\t\t}, 300)\n\t\t\t});\n\n\t\t\t(document.querySelector('.logo') as HTMLElement).focus({ preventScroll: true });\n\n\t\t\treturn true;\n\t\t}\n\t};\n\n\tprivate modalOption4: NgbModalOptions = {\n\t\tcentered: true,\n\t\tsize: 'xl',\n\t\tbeforeDismiss: async () => {\n\t\t\tdocument.querySelector('body')?.classList.remove('modal-open');\n\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tresolve('success');\n\t\t\t\t}, 300)\n\t\t\t});\n\n\n\t\t\t(document.querySelector('.logo') as HTMLElement).focus({ preventScroll: true });\n\n\t\t\treturn true;\n\t\t}\n\t};\n\n\tconstructor(\n\t\tprivate modalService: NgbModal,\n\t\tprivate router: Router,\n\t\tprivate http: HttpClient,\n\t\tprivate dialog: MatDialog,\n\t\tprivate snackBar: MatSnackBar) {\n\t}\n\n\topenNewsletter() {\n\t\tif (this.timer) window.clearTimeout(this.timer);\n\t\tif (!Cookie.get(`hideNewsletter-${environment.demo}`)) {\n\t\t\tthis.timer = window.setTimeout(() => {\n\t\t\t\tthis.modalService.dismissAll();\n\t\t\t\t(document.querySelector('.logo') as HTMLElement).focus({ preventScroll: true });\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (this.router.url === '/' && !document.querySelector('.newsletter-modal')) {\n\t\t\t\t\t\tthis.modalService.open(\n\t\t\t\t\t\t\tNewsletterModalComponent,\n\t\t\t\t\t\t\tthis.modalOption1\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}, 400);\n\t\t\t}, 5000);\n\t\t}\n\t}\n\n\t// Show login modal\n\tshowLoginModal() {\n\t\t(document.querySelector('.logo') as HTMLElement).focus({ preventScroll: true });\n\t\tthis.modalService.open(\n\t\t\tLoginModalComponent,\n\t\t\tthis.modalOption2\n\t\t)\n\t}\n\n\n\t// Show Video modal\n\tshowVideoModal(url: string = '') {\n\t\tconst modalRef = this.modalService.open(VideoModalComponent, this.modalOption3);\n\t\tmodalRef.componentInstance.url = url; // Passa il parametro 'url' al componente del modal\n\t}\n\n\t/**\n\t * Show Product in QuickView\n\t */\n\tpublic showQuickView(product: Product) {\n\t\t(document.querySelector('.logo') as HTMLElement).focus({ preventScroll: true });\n\n\t\tconst modalRef = this.modalService.open(\n\t\t\tQuickViewComponent,\n\t\t\t{\n\t\t\t\t...this.modalOption4,\n\t\t\t\twindowClass: 'quickView-modal'\n\t\t\t}\n\t\t);\n\n\t\tmodalRef.componentInstance.slug = product.slug;\n\t}\n\n\t/**\n\t * Show Product in QuickViewTwo\n\t */\n\tpublic showQuickViewTwo(product: Product) {\n\t\t(document.querySelector('.logo') as HTMLElement).focus({ preventScroll: true });\n\n\t\tconst modalRef = this.modalService.open(\n\t\t\tQuickViewTwoComponent,\n\t\t\t{\n\t\t\t\t...this.modalOption4,\n\t\t\t\twindowClass: 'quickView-modal'\n\t\t\t}\n\t\t);\n\n\t\tmodalRef.componentInstance.slug = product.slug;\n\t}\n\n\n\n\topenConfirmDialog(): void {\n\t\tconst dialogRef = this.dialog.open(ConfirmDialogComponent, {\n\t\t\twidth: '300px',\n\t\t\tdata: {\n\t\t\t\ttitle: 'Conferma azione',\n\t\t\t\tmessage: 'Sei sicuro di voler eseguire questa azione?'\n\t\t\t}\n\t\t});\n\n\t\tdialogRef.afterClosed().subscribe(result => {\n\t\t\tif (result === true) {\n\t\t\t\t// L'utente ha confermato l'azione\n\t\t\t\t// Puoi eseguire le operazioni desiderate qui\n\t\t\t} else {\n\t\t\t\t// L'utente ha annullato l'azione\n\t\t\t}\n\t\t});\n\t}\n\n\topenAlertDialog(message: string, width: string = '300px'): void {\n\t\tthis.dialog.open(AlertDialogComponent, {\n\t\t\twidth: width,\n\t\t\tdata: { message }\n\t\t});\n\t}\n\n\topenSnackBar(message: string, customcss: string = '-') {\n\t\tthis.snackBar.openFromComponent(SnackBarComponent, {\n\t\t\tduration: 10000,\n\t\t\tverticalPosition: 'top',\n\t\t\tdata: { message },\n\t\t\tpanelClass: [customcss]\n\t\t});\n\t}\n}","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { CartService } from './cart.service';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PrezziSpedizioneService {\n private prezzoSpedizioneSubject: BehaviorSubject = new BehaviorSubject(0);\n\n get prezzoSpedizione$(): Observable {\n return this.prezzoSpedizioneSubject.asObservable();\n }\n \n constructor(\n\t\tprivate toastrService: ToastrService,\n\t\tprivate translate: TranslateService,\n\t) { }\n\n expandedItems: { field: string, value: string, errorMessage: string }[] = [];\n\n private prezziPerRegione: { [regione: string]: number } = {\n 'VEN': 10, // Veneto: 10 euro\n 'NORD': 13, // Nord: 13 euro\n 'CENTRO': 15, // Centro: 15 euro\n 'SUD': 18, // Sud & Isole: 18 euro\n 'ESTERO': 25, // Estero: 25 euro\n };\n\n ottieniPrezzo(regione: string): number {\n let prezzoSpedizione:number = 0;\n const codiceRegione = regione.toUpperCase();\n\n if (this.prezziPerRegione.hasOwnProperty(codiceRegione)) {\n prezzoSpedizione = this.prezziPerRegione[codiceRegione];\n } else {\n // Se il codice della regione non è presente, cerca nei sottogruppi\n const sottogruppi = {\n 'NORD': ['VAO', 'PIE', 'LIG', 'LOM', 'EMI', 'TRE', 'FVG'],\n 'CENTRO': ['TOS', 'MAR', 'UMB', 'LAZ', 'ABR', 'MOL'],\n 'SUD': ['CAM', 'PUG', 'BAS', 'CAL', 'SIC', 'SAR'],\n };\n\n for (const gruppo in sottogruppi) {\n if (sottogruppi[gruppo].includes(codiceRegione)) {\n prezzoSpedizione = this.prezziPerRegione[gruppo];\n }\n } \n }\n\n if (prezzoSpedizione===0){\n prezzoSpedizione = Math.max(...Object.values(this.prezziPerRegione));\n this.toastrService.error(`Codice della regione non valido: ${codiceRegione}`, `Errore calcolo spese spedizione`);\n } \n\n this.setPrezzoSpedizione(prezzoSpedizione);\n\n return prezzoSpedizione;\n }\n\n setPrezzoSpedizione(prezzo: number) {\n this.prezzoSpedizioneSubject.next(prezzo);\n }\n}","import { Injectable, Inject } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { environment } from 'src/environments/environment';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { Observable, firstValueFrom, throwError } from 'rxjs';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { WSResponseModel } from '../classes/WSResponseModel';\r\n\r\ndeclare var $: any;\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\n\r\nexport class UtilsService {\r\n\r\n\tisSticky = false;\r\n\tisFluidLayout = false;\r\n\tstickyHeight = 54;\r\n\tprivate password: string = '';\r\n\r\n\tconstructor(\r\n\t\t@Inject(DOCUMENT) private document,\r\n\t\tprivate http: HttpClient,\r\n\t\tprivate toastrService: ToastrService) {\r\n\t}\r\n\r\n\t/**\r\n\t * utils to detect safari browser\r\n\t * @return {bool}\r\n\t */\r\n\tisSafariBrowser(): boolean {\r\n\t\tlet sUsrAg = navigator.userAgent;\r\n\t\tif (sUsrAg.indexOf('Safari') !== -1 && sUsrAg.indexOf('Chrome') === -1)\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * utils to detect Edge browser\r\n\t * @return {bool}\r\n\t */\r\n\tisEdgeBrowser(): boolean {\r\n\t\tlet sUsrAg = navigator.userAgent;\r\n\t\tif (sUsrAg.indexOf(\"Edge\") > -1)\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * utils to set header sticky\r\n\t */\r\n\tsetStickyHeader() {\r\n\t\tlet outerHeight = $('.header').outerHeight();\r\n\r\n\t\tif (window.pageYOffset > outerHeight && window.innerWidth > 991 && $('.sticky-header')) {\r\n\t\t\tthis.isSticky = true;\r\n\t\t\tthis.stickyHeight = $('.sticky-header').outerHeight();\r\n\t\t} else {\r\n\t\t\tthis.isSticky = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Scrolling to Page content section\r\n\t */\r\n\tscrollToPageContent(target = '.page-content') {\r\n\r\n\t\t//MP GESTIONE NULL PER ERRORE offsetTop\r\n\t\tlet to = 0;\r\n\t\tif ((document.querySelector(target) as HTMLElement) != null) {\r\n\t\t\tto = (document.querySelector(target) as HTMLElement).offsetTop - 74;\r\n\t\t};\r\n\r\n\t\tif (this.isSafariBrowser() || this.isEdgeBrowser()) {\r\n\t\t\tlet pos = window.pageYOffset;\r\n\t\t\tlet timerId = setInterval(() => {\r\n\t\t\t\tif (pos <= to) clearInterval(timerId);\r\n\t\t\t\telse {\r\n\t\t\t\t\twindow.scrollBy(0, -120);\r\n\t\t\t\t\tpos -= 120;\r\n\t\t\t\t}\r\n\t\t\t}, 1);\r\n\t\t} else {\r\n\t\t\twindow.scrollTo({\r\n\t\t\t\ttop: to,\r\n\t\t\t\tbehavior: 'smooth'\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Scroll Top Button\r\n\t * @param e \r\n\t */\r\n\tscrollTop(e: Event) {\r\n\t\tif (this.isSafariBrowser() || this.isEdgeBrowser()) {\r\n\t\t\tlet pos = window.pageYOffset;\r\n\t\t\tlet timer_id = setInterval(() => {\r\n\t\t\t\tif (pos <= 0)\r\n\t\t\t\t\tclearInterval(timer_id);\r\n\t\t\t\twindow.scrollBy(0, -120);\r\n\t\t\t\tpos -= 120;\r\n\t\t\t}, 1);\r\n\t\t} else {\r\n\t\t\twindow.scrollTo({\r\n\t\t\t\ttop: 0,\r\n\t\t\t\tbehavior: 'smooth'\r\n\t\t\t})\r\n\t\t}\r\n\t\te.preventDefault();\r\n\t}\r\n\r\n\tcatFilter(products = [], category: any, flag = false) {\r\n\t\tif (category[0] === 'All') return products;\r\n\r\n\t\treturn products.filter(item => {\r\n\t\t\tfor (let i = 0; i < category.length; i++) {\r\n\t\t\t\tif (item.category.find(cat => cat.slug == category[i])) {\r\n\t\t\t\t\tif (!flag) return true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (flag) return false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (flag)\r\n\t\t\t\treturn true;\r\n\t\t\telse\r\n\t\t\t\treturn false;\r\n\t\t})\r\n\t}\r\n\r\n\tattrFilter(products = [], attr: string) {\r\n\t\treturn products.filter(item => {\r\n\t\t\tif (attr === 'all') {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tif (attr === 'sale' && item.sale_price) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tif (attr === 'rated' && item.ratings > 3) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tif (attr === 'until' && item.until) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn item[attr] === true;\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t/* utils to set e get password */\r\n\tsetPassword(password: string) {\r\n\t\tthis.password = password;\r\n\t}\r\n\r\n\tgetPassword(): string {\r\n\t\treturn this.password;\r\n\t}\r\n\r\n\r\n\tshareOnLinkedIn(url, title, description, imageUrl) {\r\n\t\t// Codifica dei parametri per l'URL\r\n\t\tlet encodedUrl = encodeURIComponent(window.location.href + '/' + url);\r\n\t\tlet encodedTitle = encodeURIComponent(title);\r\n\t\tlet encodedDescription = encodeURIComponent(description);\r\n\t\tlet encodedImageUrl = encodeURIComponent(imageUrl);\r\n\r\n\t\t// URL di condivisione di Facebook\r\n\t\t//let linkedinShareUrl = `https://www.linkedin.com/sharer.php?u=${encodedUrl}&title=${encodedTitle}&description=${encodedDescription}${encodedImageUrl !== '' ? `&picture=${encodedImageUrl}` : ''}`;\r\n\t\tlet linkedinShareUrl = `https://www.linkedin.com/sharing/share-offsite/?url=${encodedUrl}`\r\n\r\n\t\t// Apertura della finestra di condivisione di Facebook\r\n\t\twindow.open(linkedinShareUrl, '_blank');\r\n\t}\r\n\r\n\tshareOnFacebook(url, title, description, imageUrl) {\r\n\t\t// Codifica dei parametri per l'URL\r\n\t\tlet encodedUrl = encodeURIComponent(window.location.href + '/' + url);\r\n\t\tlet encodedTitle = encodeURIComponent(title);\r\n\t\tlet encodedDescription = encodeURIComponent(description);\r\n\t\tlet encodedImageUrl = encodeURIComponent(imageUrl);\r\n\r\n\t\t// URL di condivisione di Facebook\r\n\t\tlet facebookShareUrl = `https://www.facebook.com/sharer.php?u=${encodedUrl}&title=${encodedTitle}&description=${encodedDescription}${encodedImageUrl !== '' ? `&picture=${encodedImageUrl}` : ''}`;\r\n\r\n\t\t// Apertura della finestra di condivisione di Facebook\r\n\t\twindow.open(facebookShareUrl, '_blank');\r\n\t}\r\n\r\n\tshareOnInstagram(url, title, description, imageUrl) {\r\n\t\t// Codifica dei parametri per l'URL\r\n\t\tlet encodedUrl = encodeURIComponent(window.location.href + '/' + url);\r\n\t\tlet encodedTitle = encodeURIComponent(title);\r\n\t\tlet encodedDescription = encodeURIComponent(description);\r\n\t\tlet encodedImageUrl = encodeURIComponent(imageUrl);\r\n\r\n\t\t// URL di condivisione di Facebook\r\n\t\t//let instagramShareUrl = `https://www.instagram.com/sharer.php?u=${encodedUrl}&title=${encodedTitle}&description=${encodedDescription}${encodedImageUrl !== '' ? `&picture=${encodedImageUrl}` : ''}`;\r\n\t\t//instagram non permette la condivisione usando solo foto e video\r\n\r\n\t\tlet instagramShareUrl = `https://www.instagram.com/`\r\n\r\n\t\t// Apertura della finestra di condivisione di Facebook\r\n\t\twindow.open(instagramShareUrl, '_blank');\r\n\t}\r\n\r\n\r\n\tshareOnX(url, title, description, imageUrl) {\r\n\t\t// Codifica dei parametri per l'URL\r\n\t\tlet encodedUrl = encodeURIComponent(window.location.href + '/' + url);\r\n\t\tlet encodedTitle = encodeURIComponent(title);\r\n\t\tlet encodedDescription = encodeURIComponent(description);\r\n\t\tlet encodedImageUrl = encodeURIComponent(imageUrl);\r\n\r\n\t\t// URL di condivisione di X ex Twitter\r\n\t\tlet xShareUrl = `https://twitter.com/intent/tweet?text=${encodedTitle}&url=${encodedUrl}`;\r\n\r\n\r\n\t\t// Apertura della finestra di condivisione di X ex Twitter\r\n\t\twindow.open(xShareUrl, '_blank');\r\n\t}\r\n\r\n\r\n\tasync sendEmailAdmin(oggettoMail: string, testoEmail: string) {\r\n\t\tconst body = {\r\n\t\t\tOggettoMail: oggettoMail,\r\n\t\t\tTestoEmail: testoEmail,\r\n\t\t};\r\n\r\n\t\treturn await firstValueFrom(this.http.post(`${environment.backend.baseURL}/Generale/sendEmailAdmin`, body))\r\n\t\t\t.then(result => {\r\n\t\t\t\treturn JSON.parse(result.jsonlist);\r\n\t\t\t})\r\n\t\t\t.catch(\r\n\t\t\t\terror => {\r\n\t\t\t\t\tconsole.log('error: ' + error.toString())\r\n\t\t\t\t\tif (error.status) {\r\n\t\t\t\t\t\tswitch (error.status) {\r\n\t\t\t\t\t\t\tcase 400: {\r\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.error.info);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tdefault: {\r\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.toastrService.error(error.message);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t}\r\n\r\n\r\n\r\n\tasync logAction(testoLog: string) {\r\n\t\tconst body = `\"${testoLog}\"`; // Aggiunto il wrapping del testo tra doppi apici\r\n\r\n\t\treturn await firstValueFrom(this.http.post(\r\n\t\t\t`${environment.backend.baseURL}/Generale/logAction`,body,{ headers: new HttpHeaders({ 'Content-Type': 'application/json' })}))\r\n\t\t\t.then(result => {\r\n\t\t\t\treturn result;\r\n\t\t\t})\r\n\t\t\t.catch(\r\n\t\t\t\terror => {\r\n\t\t\t\t\t console.log('error: ' + error.toString())\r\n\t\t\t\t\tif (error.status) {\r\n\t\t\t\t\t\tswitch (error.status) {\r\n\t\t\t\t\t\t\tcase 400: {\r\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.error.info);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tdefault: {\r\n\t\t\t\t\t\t\t\tthis.toastrService.error(error.message);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.toastrService.error(error.message);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t}\r\n\r\n}","import { Injectable } from '@angular/core';\nimport { Store, select } from '@ngrx/store';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject, BehaviorSubject } from 'rxjs';\n\nimport { Product } from '../classes/product.model';\nimport { wishlistSelector } from 'src/app/core/selectors/selectors';\nimport { AddToWishListAction, RemoveFromWishListAction, AddToCartAction } from 'src/app/core/actions/actions';\n\n@Injectable( {\n\tprovidedIn: 'root'\n} )\n\nexport class WishlistService {\n\n\twishlist = [];\n\twishlistStream: Subject = new BehaviorSubject( [] );\n\twishlistQty: Subject = new BehaviorSubject( 0 );\n\n\tconstructor ( private store: Store, private toastrService: ToastrService ) {\n\t\tstore.pipe( \n\t\t\t\tselect( wishlistSelector ) \n\t\t\t).subscribe( items => {\n\t\t\tthis.wishlist = items;\n\t\t\tthis.wishlistStream.next( items );\n\t\t\tthis.wishlistQty.next( items.length );\n\t\t} );\n\t}\n\n\t// Product add to Wishlist\n\taddToWishList ( product: any ): void {\n\t\tif ( this.wishlist.findIndex( item => item.id === product.id ) === -1 ) {\n\t\t\tthis.store.dispatch( new AddToWishListAction( { product } ) );\n\t\t\tthis.toastrService.success( 'Product added to Wishlist.' );\n\t\t}\n\t}\n\n\t// Product removed from Wishlist\n\tremoveFromWishList ( product: any ): void {\n\t\tthis.store.dispatch( new RemoveFromWishListAction( { product } ) );\n\t\tthis.toastrService.success( 'Product removed from Wishlist.' );\n\t}\n\n\t// Product moved from Wishlist to Cart\n\tmoveToCart ( product: any ): void {\n\n\t\tthis.store.dispatch( new RemoveFromWishListAction( { product } ) );\n\t\tthis.store.dispatch( new AddToCartAction( { product, qty: 1 } ) );\n\t\tthis.toastrService.success( 'Product moved to Cart.' );\n\t}\n\n\t// Check whether product is in Wishlist or not\n\tisInWishlist ( product: Product ): boolean {\n\t\treturn this.wishlist.find( item => item.id == product.id ) ? true : false;\n\t}\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from \"@angular/router\";\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NgbDatepickerModule, NgbModule } from '@ng-bootstrap/ng-bootstrap';\nimport { OwlModule } from 'angular-owl-carousel';\nimport { LazyLoadImageModule } from 'ng-lazyload-image';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n// Header Element\nimport { CartMenuComponent } from './components/headers/shared/cart-menu/cart-menu.component';\nimport { CompareMenuComponent } from './components/headers/shared/compare-menu/compare-menu.component';\nimport { WishlistMenuComponent } from './components/headers/shared/wishlist-menu/wishlist-menu.component';\nimport { CategoryMenuComponent } from './components/headers/shared/category-menu/category-menu.component';\nimport { MainMenuComponent } from './components/headers/shared/main-menu/main-menu.component';\nimport { HeaderSearchComponent } from './components/headers/shared/header-search/header-search.component';\nimport { MobileButtonComponent } from './components/headers/shared/mobile-button/mobile-button.component';\nimport { MobileMenuComponent } from './components/headers/shared/mobile-menu/mobile-menu.component';\n\n// Header Component\nimport { HeaderComponent } from './components/headers/header/header.component';\n\n// // Product Component\nimport { ProductOneComponent } from './components/product/product-one/product-one.component';\nimport { ProductTwoComponent } from './components/product/product-two/product-two.component';\nimport { ProductThreeComponent } from './components/product/product-three/product-three.component';\nimport { ProductFourComponent } from './components/product/product-four/product-four.component';\nimport { ProductFiveComponent } from './components/product/product-five/product-five.component';\nimport { ProductSixComponent } from './components/product/product-six/product-six.component';\nimport { ProductSevenComponent } from './components/product/product-seven/product-seven.component';\nimport { ProductEightComponent } from './components/product/product-eight/product-eight.component';\nimport { ProductNineComponent } from './components/product/product-nine/product-nine.component';\nimport { ProductTenComponent } from './components/product/product-ten/product-ten.component';\nimport { ProductElevenComponent } from './components/product/product-eleven/product-eleven.component';\nimport { ProductTwelveComponent } from './components/product/product-twelve/product-twelve.component';\n\n// Footer Component\nimport { FooterComponent } from './components/footer/footer.component';\n// // Page Element\nimport { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component';\nimport { PageHeaderComponent } from './components/page-header/page-header.component';\nimport { PaginationComponent } from './components/pagination/pagination.component';\nimport { CardComponent } from './components/accordion/card/card.component';\nimport { AccordionComponent } from './components/accordion/accordion.component';\n\n// Product Element\nimport { QuantityInputComponent } from './components/quantity-input/quantity-input.component';\nimport { CountDownComponent } from './components/count-down/count-down.component';\nimport { CountToComponent } from './components/count-to/count-to.component';\n\n// // single use component\nimport { QuickViewComponent } from './components/modals/quick-view/quick-view.component';\nimport { QuickViewTwoComponent } from './components/modals/quick-view-two/quick-view-two.component';\nimport { VideoModalComponent } from './components/modals/video-modal/video-modal.component';\nimport { NewsletterModalComponent } from './components/modals/newsletter-modal/newsletter-modal.component';\nimport { LoginModalComponent } from './components/modals/login-modal/login-modal.component';\nimport { IsotopeGridComponent } from './components/isotope-grid/isotope-grid.component';\nimport { ImageComponent } from './components/image/image.component';\nimport { ManageUserDataComponent } from './components/manage-user-data/manage-user-data.component';\nimport { LoginFormComponent } from './components/login-form/login-form.component';\nimport { AreaAgenteComponent } from './components/area-agente/area-agente.component';\nimport { CustomersListComponent } from './components/customers-list/customers-list.component';\nimport { OrderStatusListComponent } from './components/order-status-list/order-status-list.component';\nimport { StatisticheAgenteComponent } from './components/statistiche-agente/statistiche-agente.component';\n\n// // Custom Directives\nimport { BgParallaxDirective } from './directives/bg-parallax.directive';\nimport { TabClickDirective } from './directives/custom-tab-click.directive';\nimport { ProductHoverDirective } from './directives/product-hover.directive';\nimport { ContentAnimDirective } from './directives/content-anim.directive';\n\n// Pipes\nimport { CatFilterPipe } from './pipes/cat-filter.pipe';\nimport { AttrFilterPipe } from './pipes/attr-filter.pipe';\nimport { SafeContentPipe } from './pipes/safe-content.pipe';\n\n// Post Component\nimport { PostOneComponent } from './components/blog-post/post-one/post-one.component';\nimport { PostTwoComponent } from './components/blog-post/post-two/post-two.component';\nimport { PostThreeComponent } from './components/blog-post/post-three/post-three.component';\nimport { PostFourComponent } from './components/blog-post/post-four/post-four.component';\n\n//Modali\nimport { AlertDialogComponent } from './components/modals/alert-dialog/alert-dialog.component';\nimport { ConfirmDialogComponent } from './components/modals/confirm-dialog/confirm-dialog.component';\nimport { SnackBarComponent } from './components/modals/snack-bar/snack-bar.component';\n\n//Mat Component\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\n\n\n@NgModule({\n declarations: [\n // header\n CartMenuComponent,\n CompareMenuComponent,\n WishlistMenuComponent,\n CategoryMenuComponent,\n MainMenuComponent,\n HeaderSearchComponent,\n MobileButtonComponent,\n MobileMenuComponent,\n HeaderComponent,\n FooterComponent,\n // product\n ProductOneComponent,\n ProductTwoComponent,\n ProductThreeComponent,\n ProductFourComponent,\n ProductFiveComponent,\n ProductSixComponent,\n ProductSevenComponent,\n ProductEightComponent,\n ProductNineComponent,\n ProductTenComponent,\n ProductElevenComponent,\n ProductTwelveComponent,\n // single-use components\n BreadcrumbComponent,\n PageHeaderComponent,\n QuickViewComponent,\n QuickViewTwoComponent,\n NewsletterModalComponent,\n LoginModalComponent,\n VideoModalComponent,\n QuantityInputComponent,\n CountDownComponent,\n AccordionComponent,\n CardComponent,\n PaginationComponent,\n IsotopeGridComponent,\n ImageComponent,\n ManageUserDataComponent,\n LoginFormComponent,\n AreaAgenteComponent,\n CustomersListComponent,\n OrderStatusListComponent,\n // directives\n BgParallaxDirective,\n TabClickDirective,\n ProductHoverDirective,\n ContentAnimDirective,\n // pipes\n CatFilterPipe,\n AttrFilterPipe,\n SafeContentPipe,\n CountDownComponent,\n // blog-post\n PostOneComponent,\n PostTwoComponent,\n PostThreeComponent,\n PostFourComponent,\n CountToComponent,\n //modali\n ConfirmDialogComponent,\n AlertDialogComponent,\n SnackBarComponent,\n StatisticheAgenteComponent,\n ],\n exports: [\n // header\n HeaderComponent,\n // mobile-menus\n MobileMenuComponent,\n // footer\n FooterComponent,\n // products\n ProductOneComponent,\n ProductTwoComponent,\n ProductThreeComponent,\n ProductFourComponent,\n ProductFiveComponent,\n ProductSixComponent,\n ProductSevenComponent,\n ProductEightComponent,\n ProductNineComponent,\n ProductTenComponent,\n ProductElevenComponent,\n ProductTwelveComponent,\n // // single-use components\n BreadcrumbComponent,\n PageHeaderComponent,\n CountDownComponent,\n CountToComponent,\n AccordionComponent,\n CardComponent,\n PaginationComponent,\n QuantityInputComponent,\n IsotopeGridComponent,\n ImageComponent,\n ManageUserDataComponent,\n LoginFormComponent,\n AreaAgenteComponent,\n // directives\n BgParallaxDirective,\n TabClickDirective,\n ProductHoverDirective,\n ContentAnimDirective,\n // pipes\n CatFilterPipe,\n AttrFilterPipe,\n SafeContentPipe,\n // // blog-post\n PostOneComponent,\n PostTwoComponent,\n PostThreeComponent,\n PostFourComponent,\n ],\n entryComponents: [\n VideoModalComponent,\n QuickViewComponent,\n QuickViewTwoComponent,\n NewsletterModalComponent,\n LoginModalComponent\n ],\n imports: [\n CommonModule,\n RouterModule,\n NgbModule,\n TranslateModule,\n OwlModule,\n LazyLoadImageModule,\n ReactiveFormsModule,\n FormsModule,\n NgbDatepickerModule,\n //Mat-module\t\n MatFormFieldModule,\n MatInputModule,\n MatCheckboxModule,\n MatSnackBarModule,\n MatDialogModule,\n MatIconModule,\n MatTableModule,\n MatPaginatorModule,\n MatSortModule,\n\t\tMatProgressBarModule,\n\t\tMatDialogModule,\n\t\tMatSnackBarModule,\n MatSelectModule,\n MatDatepickerModule,\n MatNativeDateModule \n ]\n})\n\nexport class SharedModule { }","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false,\n demo: 'eC_MyLiteLed_202303',\n SERVER_URL: 'https://www.myliteled.com',\n //IMAGE_URL: 'assets/documents/prodotti/images/',\n VALUTA: 'EUR',\n COD_IVA_DEFAULT: '22',\n COD_NO_IVA: 'FCI',\n COD_ART_SPED: 'TRASPMY',\n backend: {\n baseURL: \"/server/api\",\n IDDitta: 1,\n IDPagDefault: 10427,//10413//10424\n EmailFrom:'info@myliteled.com',\n EmailTo:'vendite@myliteled.com;'\n //EmailTo:'helpdesk@italyforcloud.com'\n },\n recaptcha: {\n siteKey: '6LeZyeAZAAAAAIqx5-nMKvB85f8wRgfe1Jh-e9Tz',\n //Utilizza la chiave di questo sito nel codice HTML mostrato dal tuo sito agli utenti.\n //6Ledjv8hAAAAAHmooSQyrf5ITX6IeINUk3t8qU2g\n //Utilizza questa chiave segreta per la comunicazione tra il tuo sito e reCAPTCHA.\n //6Ledjv8hAAAAAKqJiw3T_zjjKKT8IbZBPFvFnmSx\n },\n paypal: {\n paypalReturn:'shop/payment-pp-return',\n paypalCancelReturn: 'shop/checkout',\n paypalImageUrl:'assets/images/home/logo.png',\n //paypalApiUrl: 'https://api.sandbox.paypal.com/v1/payments/payment', //https://www.paypal.com/it/cgi-bin/webscr\n paypalApiUrl: 'https://api-m.paypal.com/v1/payments/payment',\n paypalClient_id: 'AfdD7-6xFLNHrUBXu8I2NDvBX7U84tkn7nW8dgEuM7Irjd2lNwZAR0vKyl-wCc1c3vk90pOMCzCnXjDb',\n\t\tpaypalClient_secret: 'EBs5BJUs_GjhlO7LDPYdGJCU6dAlK2c0WmbhmCGmGD7TDnG4KtLj8ES9Y5n8slVZ0fIg9Ab-wIjuuhVH'\n }\n};\n\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\n","import { Component, OnInit, Renderer2 } from '@angular/core';\n\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n\tselector: 'molla-mobile-button',\n\ttemplateUrl: './mobile-button.component.html',\n\tstyleUrls: ['./mobile-button.component.scss']\n})\n\nexport class MobileButtonComponent implements OnInit {\n\n\tconstructor(public utils: UtilsService, public render: Renderer2) { }\n\n\tngOnInit(): void {\n\t}\n\n\ttoggleMenu(event: any) {\n\t\tconst body = document.querySelector('body');\n\t\tconst html = document.querySelector('html');\n\n\t\tif (body.classList.contains('mmenu-active') || event.target.classList.contains('mobile-menu-overlay')) {\n\t\t\tthis.render.removeClass(body, 'mmenu-active');\n\t\t\tthis.render.removeAttribute(html, 'style')\n\t\t} else {\n\t\t\tthis.render.addClass(body, 'mmenu-active');\n\t\t\tthis.render.setStyle(html, 'overflow-x', 'hidden');\n\t\t}\n\t}\n}\n","","","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { categories } from 'src/app/shared/classes/categories.model';\n\nimport { ApiService } from 'src/app/shared/services/api.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\nimport { environment } from 'src/environments/environment';\n\n@Component({\n\tselector: 'molla-header-search',\n\ttemplateUrl: './header-search.component.html',\n\tstyleUrls: ['./header-search.component.scss']\n})\n\nexport class HeaderSearchComponent implements OnInit, OnDestroy {\n\t@Input() categories!:categories[];\n\t//products = [];\n\tsearchTerm = \"\";\n\tcat = null;\n\tsuggestions = [];\n\ttimer: any;\n\tcurrVal = environment.VALUTA\n\n\tconstructor(public activeRoute: ActivatedRoute, public router: Router, public utilsService: UtilsService, public apiService: ApiService) {\n\t}\n\n\tngOnInit(): void {\n\t\tdocument.querySelector('body').addEventListener('click', this.closeSearchForm);\n\t}\n\n\tngOnDestroy(): void {\n\t\tdocument.querySelector('body').removeEventListener('click', this.closeSearchForm);\n\t}\n\n\tfetchProducts() {\n\t\tif (this.searchTerm.length > 2) {\n\t\t\tif (this.timer) {\n\t\t\t\twindow.clearTimeout(this.timer);\n\t\t\t}\n\n\t\t\tthis.timer = setTimeout(() => {\n\t\t\t\t//this.apiService.fetchHeaderSearchData(this.searchTerm, this.cat).subscribe(result => {\n\n\t\t\t\tconst params:any={};\n\t\t\t\tparams.searchTerm=this.searchTerm;\n\t\t\t\tparams.category=this.cat;\n\t\t\t\t\n\t\t\t\tthis.apiService.fetchShopData(params, 0).subscribe(result => {\n\t\t\t\t\tthis.suggestions = result.products.reduce(\n\t\t\t\t\t\t(acc, cur) => {\n\t\t\t\t\t\t\tlet max = 0;\n\t\t\t\t\t\t\tlet min = 99999;\n\t\t\t\t\t\t\tcur.variants.map(item => {\n\t\t\t\t\t\t\t\tif (min > item.price)\n\t\t\t\t\t\t\t\t\tmin = item.price;\n\t\t\t\t\t\t\t\tif (max < item.price)\n\t\t\t\t\t\t\t\t\tmax = item.price;\n\t\t\t\t\t\t\t}, []);\n\n\t\t\t\t\t\t\tif (cur.variants.length == 0) {\n\t\t\t\t\t\t\t\tmin = cur.sale_price\n\t\t\t\t\t\t\t\t\t? cur.sale_price\n\t\t\t\t\t\t\t\t\t: cur.price;\n\t\t\t\t\t\t\t\tmax = cur.price;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...cur,\n\t\t\t\t\t\t\t\t\tminPrice: min,\n\t\t\t\t\t\t\t\t\tmaxPrice: max\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[]\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t}, 500)\n\t\t} else {\n\t\t\twindow.clearTimeout(this.timer);\n\t\t\tthis.suggestions = [];\n\t\t}\n\t}\n\n\tsearchProducts(event: any) {\n\t\tthis.searchTerm = event.target.value;\n\t\t//this.fetchProducts();\n\t\t//this.router.navigate(['shop']);\n\t}\n\n\tmatchEmphasize(name: string) {\n\t\tvar regExp = new RegExp(this.searchTerm, 'i');\n\t\treturn name.replace(\n\t\t\tregExp,\n\t\t\tmatch => '' + match + ''\n\t\t);\n\t}\n\n\tgoProductPage() {\n\t\tthis.searchTerm = '';\n\t\tthis.suggestions = [];\n\t\tvar inputElement: any = document.querySelector('.header-search .form-control');\n\t\tinputElement.value = \"\";\n\t\tthis.closeSearchForm();\n\t}\n\n\tsearchToggle(e: Event) {\n\t\tdocument.querySelector('.header-search').classList.toggle('show');\n\t\te.stopPropagation();\n\t}\n\n\tshowSearchForm(e: Event) {\n\t\tdocument\n\t\t\t.querySelector('.header .header-search')\n\t\t\t.classList.add('show');\n\t\te.stopPropagation();\n\t}\n\n\tcloseSearchForm() {\n\t\tdocument\n\t\t\t.querySelector('.header .header-search')\n\t\t\t.classList.remove('show');\n\t}\n\n\tsubmitSearchForm(e: Event) {\n\t\te.preventDefault();\n\t\tthis.router.navigate(['/shop/sidebar/list'], { queryParams: { searchTerm: this.searchTerm, category: this.cat } });\n\t}\n\n\tonCatSelect(event: any) {\n\t\tthis.cat = event.target.value; // Utilizza event.target.value invece di event.currentTarget.value\n\t\t//this.fetchProducts();\n\t }\n}\n","import { Component, OnInit, OnDestroy } from '@angular/core';\n\nimport { WishlistService } from 'src/app/shared/services/wishlist.service';\n\n@Component({\n\tselector: 'molla-wishlist-menu',\n\ttemplateUrl: './wishlist-menu.component.html',\n\tstyleUrls: ['./wishlist-menu.component.scss']\n})\n\nexport class WishlistMenuComponent implements OnInit, OnDestroy {\n\n\tconstructor(public wishlistService: WishlistService) { }\n\n\tngOnInit(): void {\n\t}\n\n\tngOnDestroy(): void {\n\t}\n}\n","\n \n {{ wishlistService.wishlistQty | async }}\n Wishlist\n","
\n \n \n {{ cartService.qtyTotal | async }}\n {{ \"cart.cart\" | translate}}\n \n\n
\n

No products in the cart.

\n\n \n
\n
\n
\n

\n {{ product.name }}\n

\n\n \n {{ product.qty }}\n x {{ product.sale_price ? product.sale_price.toFixed(2): product.price.toFixed(2) | currency:currVal }}\n \n
\n\n
\n \n \"product\"\n \n
\n\n \n
\n
\n\n
\n {{ \"cart.total\" | translate}}\n\n {{ (cartService.priceTotal | async).toFixed(2) | currency:currVal }}\n
\n\n \n
\n
\n
","import { Component, OnInit } from '@angular/core';\n\nimport { CartService } from 'src/app/shared/services/cart.service';\nimport { environment } from 'src/environments/environment';\n\n@Component({\n\tselector: 'molla-cart-menu',\n\ttemplateUrl: './cart-menu.component.html',\n\tstyleUrls: ['./cart-menu.component.scss']\n})\n\nexport class CartMenuComponent implements OnInit {\n\n\t\n\tcurrVal = environment.VALUTA\n\n\tconstructor(public cartService: CartService) {\n\t}\n\n\tngOnInit(): void {\n\t}\n\n\tremoveFromCart(event: Event, product: any) {\n\t\tevent.preventDefault();\n\t\tthis.cartService.removeFromCart(product);\n\t}\n}","
\r\n Prodotti LED\r\n\r\n
\r\n \r\n
\r\n
","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport { Router, NavigationStart, NavigationEnd, ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { categories } from 'src/app/shared/classes/categories.model';\nimport { ApiService } from 'src/app/shared/services/api.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'molla-category-menu',\n templateUrl: './category-menu.component.html',\n styleUrls: ['./category-menu.component.scss']\n})\n\nexport class CategoryMenuComponent implements OnInit, OnDestroy {\n isHome = false //true; //richiesto da Giulia 27/11/23\n //Nel frattempo se può correggere il menu a tendina di \"prodotti LED\" che scende in automatico ogni volta che si apre o ricarica la pagina. Se per cortesia può fare in modo che si apra solo quando ci si passa sopra con il mouse e non che sia aperto in automatico.\n @Input() categories!: categories[];\n\n private subscr: Subscription;\n private params: any;\n\n constructor(\n\tpublic activeRoute: ActivatedRoute,\n\tpublic router: Router,\n public utilsService: UtilsService,\n public apiService: ApiService\n ) {\n // this.subscr = this.router.events.subscribe(event => {\n // if (event instanceof NavigationStart || event instanceof NavigationEnd) {\n // this.isHome = event.url === \"/\";\n // }\n // });\n\n this.activeRoute.queryParams.subscribe(params => {\n this.params = params;\n });\n }\n\n ngOnInit(): void {\n // Puoi eseguire l'inizializzazione qui se necessario\n }\n\n getMergedParams(categoriaId: string): any {\n //return { ...this.params, category: categoriaId };\n return { category: categoriaId };\n }\n\n ngOnDestroy(): void {\n this.subscr.unsubscribe();\n }\n\n toggleMenu() {\n const dropdownMenu = document.querySelector('.category-dropdown .dropdown-menu');\n if (dropdownMenu) {\n dropdownMenu.classList.toggle('show');\n }\n }\n}","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, NavigationStart, NavigationEnd } from '@angular/router';\nimport { Subscription } from 'rxjs';\n\n@Component({\n\tselector: 'molla-main-menu',\n\ttemplateUrl: './main-menu.component.html',\n\tstyleUrls: ['./main-menu.component.scss']\n})\nexport class MainMenuComponent implements OnInit, OnDestroy {\n\n\tcurrent = '/';\n\n\tprivate subscr: Subscription;\n\n\tconstructor(private router: Router) {\n\t\tthis.subscr = this.router.events.subscribe(event => {\n\t\t\tif (event instanceof NavigationStart) {\n\t\t\t\tthis.current = event.url;\n\t\t\t} else if (event instanceof NavigationEnd) {\n\t\t\t\tthis.current = event.url;\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscr.unsubscribe();\n\t}\n\n\tviewAllDemos(event: any) {\n\t\tevent.preventDefault();\n\t\tvar list = document.querySelectorAll('.demo-list .hidden');\n\t\tfor (let i = 0; i < list.length; i++) {\n\t\t\tlist[i].classList.add('show');\n\t\t}\n\n\t\tevent.target.parentElement.classList.add('d-none');\n\t}\n}\n","","
\n
\n
\n \n\n
\n\n \n\n
\n
\n
\n\n \n\n
\n
\n
\n
\n \n
\n\n
\n \n
\n\n \n
\n
\n
\n
","import { Component, OnInit, Input } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { ModalService } from 'src/app/shared/services/modal.service';\nimport { AuthenticateService } from 'src/app/shared/services/authenticate.service';\nimport { LoginModel } from 'src/app/shared/classes/LoginModel';\nimport { categories } from 'src/app/shared/classes/categories.model';\nimport { ApiService } from 'src/app/shared/services/api.service';\n\n@Component({\n\tselector: 'molla-header',\n\ttemplateUrl: './header.component.html',\n\tstyleUrls: ['./header.component.scss']\n})\n\nexport class HeaderComponent implements OnInit {\n\t@Input() containerClass = \"container\";\n\tcategories!:categories[];\n\tloginModel!:LoginModel;\n \n\n\tconstructor(\n\t\tprivate router: Router,\n\t\tpublic activeRoute: ActivatedRoute,\n\t\tpublic utilsService: UtilsService,\n\t\tpublic modalService: ModalService,\n\t\tprivate apiService: ApiService) {\n\t}\n\n\tngOnInit(): void {\n\t\tthis.loginModel = JSON.parse(sessionStorage.getItem('currentUser')!);\n\t\tthis.caricaCategorie()\n\t}\n\n\tshowLoginModal(event: Event): void {\n\t\tevent.preventDefault();\n\n\t\tif (!this.loginModel) {\n\t\t\tthis.modalService.showLoginModal();\n\t\t} else {\n\t\t\tthis.router.navigate(['/shop/dashboard']);\n\t\t}\n\t}\n\n\tasync caricaCategorie(){\n\t\tconst fromDb = undefined;\n\t\tconst params = fromDb || {};\n\t\tparams.LIVELLO = 1;\n\t\tparams.lingua = 'IT';\n\n\t\tthis.categories = await this.apiService.fetchCategories(params);\n\t}\n\t\n}\n","\n(function (w, d) { var loader = function () { var s = d.createElement(\"script\"), tag = d.getElementsByTagName(\"script\")[0]; s.src = \"https://cdn.iubenda.com/iubenda.js\"; tag.parentNode.insertBefore(s, tag); }; if (w.addEventListener) { w.addEventListener(\"load\", loader, false); } else if (w.attachEvent) { w.attachEvent(\"onload\", loader); } else { w.onload = loader; } })(window, document);\n(function (w, d) { var loader = function () { var s = d.createElement(\"script\"), tag = d.getElementsByTagName(\"script\")[0]; s.src = \"https://cdn.iubenda.com/iubenda.js\"; tag.parentNode.insertBefore(s, tag); }; if (w.addEventListener) { w.addEventListener(\"load\", loader, false); } else if (w.attachEvent) { w.attachEvent(\"onload\", loader); } else { w.onload = loader; } })(window, document);","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n\tselector: 'molla-footer',\n\ttemplateUrl: './footer.component.html',\n\tstyleUrls: ['./footer.component.scss']\n})\n\nexport class FooterComponent implements OnInit {\n\n\t@Input() containerClass = \"container\";\n\t@Input() isBottomSticky = false;\n\n\tyear: any;\n\n\tconstructor() {\n\t}\n\n\tngOnInit(): void {\n\t\tthis.year = (new Date()).getFullYear();\n\t}\n}\n","import { Component, OnInit, OnDestroy, HostListener, AfterViewInit } from '@angular/core';\nimport { Router, NavigationStart, NavigationEnd, RouterOutlet } from '@angular/router';\nimport { Subscription } from 'rxjs';\n\nimport { routeAnimation } from '../data';\nimport { JsonLDService } from '../services/json-ld.service';\n\n@Component({\n\tselector: 'molla-layout',\n\ttemplateUrl: './layout.component.html',\n\tstyleUrls: ['./layout.component.scss'],\n\tanimations: [\n\t\trouteAnimation\n\t]\n})\n\nexport class LayoutComponent implements OnInit, OnDestroy {\n\n\tcontainerClass = 'container';\n\tisBottomSticky = false;\n\tcurrent = \"/\";\n\n\tprivate subscr: Subscription;\n\n\tconstructor(\n\t\tprivate router: Router,\n\t\tprivate jsonLdService: JsonLDService\n\t) {\n\t\tthis.subscr = this.router.events.subscribe(event => {\n\t\t\tif (event instanceof NavigationStart) {\n\t\t\t\tthis.current = event.url;\n\t\t\t\tif (this.current.includes('fullwidth')) {\n\t\t\t\t\tthis.containerClass = 'container-fluid';\n\t\t\t\t} else {\n\t\t\t\t\tthis.containerClass = 'container';\n\t\t\t\t}\n\n\t\t\t\tif (this.current.includes('product/default') && (window.innerWidth > 991)) {\n\t\t\t\t\tthis.isBottomSticky = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.isBottomSticky = false;\n\t\t\t\t}\n\t\t\t} else if (event instanceof NavigationEnd) {\n\t\t\t\tthis.current = event.url;\n\t\t\t\tif (this.current.includes('fullwidth')) {\n\t\t\t\t\tthis.containerClass = 'container-fluid';\n\t\t\t\t} else {\n\t\t\t\t\tthis.containerClass = 'container';\n\t\t\t\t}\n\n\t\t\t\tif (this.current.includes('product/default') && (window.innerWidth > 991)) {\n\t\t\t\t\tthis.isBottomSticky = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.isBottomSticky = false;\n\t\t\t\t}\n\n\t\t\t\tthis.jsonLdService.removeStructuredData();\n\t\t\t\tthis.jsonLdService.insertSchema(JsonLDService.websiteSchema('Organization'));\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\t\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscr.unsubscribe();\n\t}\n\n\t@HostListener('window:resize', ['$event'])\n\thandleKeyDown(event: Event) {\n\t\tthis.resizeHandle()\n\t}\n\n\tprepareRoute (outlet: RouterOutlet) {\n\t\treturn outlet && outlet.isActivated && outlet.activatedRoute && outlet.activatedRoute.url;\n\t}\n\n\tresizeHandle() {\n\t\tif (this.current.includes('product/default') && window.innerWidth > 992)\n\t\t\tthis.isBottomSticky = true;\n\t\telse\n\t\t\tthis.isBottomSticky = false;\n\t}\n}\n","
\n \n\n
\n \n
\n\n \n
","import { Component, OnInit } from '@angular/core';\n\n@Component({\n\tselector: 'pages-coming-soon',\n\ttemplateUrl: './coming-soon.component.html',\n\tstyleUrls: ['./coming-soon.component.scss']\n})\n\nexport class ComingSoonPageComponent implements OnInit {\n\n\tconstructor() {\n\n\t}\n\n\tngOnInit(): void {\n\t}\n}\n","
\n
\n
\n
\n
\n
\n \n

Coming Soon

\n \n \n\n
\n

We are currently working on an awesome new site. Stay tuned for more information.\n Subscribe to our newsletter to stay updated on our progress.

\n
\n
\n \n
\n \n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n\n
","import { sliderOpt } from 'src/app/shared/data';\r\n\r\nexport const introSlider = {\r\n ...sliderOpt,\r\n nav: false,\r\n loop: false,\r\n responsive: {\r\n 992: {\r\n nav: true\r\n }\r\n }\r\n}\r\n\r\nexport const brandSlider = {\r\n ...sliderOpt,\r\n nav: false,\r\n dots: true,\r\n margin: 30,\r\n loop: false,\r\n responsive: {\r\n 0: {\r\n items: 2\r\n },\r\n 420: {\r\n items: 3\r\n },\r\n 600: {\r\n items: 4\r\n },\r\n 900: {\r\n items: 5\r\n },\r\n 1024: {\r\n items: 6\r\n },\r\n 1400: {\r\n items: 6,\r\n nav: true,\r\n dots: false\r\n }\r\n }\r\n}\r\n\r\nexport const productSlider = {\r\n ...sliderOpt,\r\n nav: false,\r\n dots: true,\r\n margin: 20,\r\n loop: false,\r\n responsive: {\r\n 0: {\r\n items: 2\r\n },\r\n 480: {\r\n items: 2\r\n },\r\n 768: {\r\n items: 3\r\n },\r\n 992: {\r\n items: 4\r\n },\r\n 1280: {\r\n items: 5\r\n },\r\n 1400: {\r\n items: 5,\r\n nav: true\r\n }\r\n }\r\n}\r\n\r\nexport const blogSlider = {\r\n ...sliderOpt,\r\n nav: false,\r\n dots: true,\r\n items: 3,\r\n margin: 20,\r\n loop: false,\r\n responsive: {\r\n 0: {\r\n items: 1\r\n },\r\n 600: {\r\n items: 2\r\n },\r\n 992: {\r\n items: 3\r\n },\r\n 1280: {\r\n items: 4,\r\n nav: true,\r\n dots: false\r\n }\r\n }\r\n}","import { Directive, ElementRef, OnInit, HostListener, Input, AfterViewInit } from '@angular/core';\nimport { AnimationPlayer, AnimationBuilder, animate, style } from '@angular/animations';\n\nimport { animations } from '../data';\n\ndeclare var $: any;\n\n@Directive( {\n\tselector: '[contentAnim]'\n} )\n\nexport class ContentAnimDirective implements OnInit, AfterViewInit {\n\n\t@Input() aniName = 'fadeIn';\n\t@Input() duration = '.8s';\n\t@Input() offset = 0;\n\n\tfirst = true;\n\tplayer: AnimationPlayer;\n\n\tconstructor ( private el: ElementRef, private animationBuilder: AnimationBuilder ) { }\n\n\tngOnInit () {\n\t}\n\n\tngAfterViewInit () {\n\t\tthis.el.nativeElement.classList.add( 'appear-animate' );\n\t\tthis.createAnimation();\n\n\t\tsetTimeout( () => {\n\t\t\tthis.handleAnimation();\n\n\t\t\tlet slider = this.el.nativeElement.closest( 'owl-carousel' );\n\t\t\tlet self = this;\n\n\t\t\tif ( slider ) {\n\t\t\t\t$( slider ).on( 'translate.owl.carousel', () => {\n\t\t\t\t\tif ( self.el.nativeElement.closest( '.owl-item:not(.active)' ) ) {\n\t\t\t\t\t\tself.el.nativeElement.classList.add( 'appear-animate' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\t$( slider ).on( 'translated.owl.carousel', () => {\n\t\t\t\t\tif ( self.el.nativeElement.closest( '.owl-item.active' ) ) {\n\t\t\t\t\t\tif ( self.el.nativeElement.classList.contains( 'appear-animate' ) ) {\n\t\t\t\t\t\t\tself.el.nativeElement.classList.remove( 'appear-animate' );\n\t\t\t\t\t\t\tthis.player.play();\n\t\t\t\t\t\t\tthis.first = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.el.nativeElement.classList.add( 'appear-animate' );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t}\n\t\t}, 300 );\n\t}\n\n\t@HostListener( 'window: scroll', [ '$event' ] )\n\tonscroll () {\n\t\tthis.handleAnimation();\n\t}\n\n\thandleAnimation () {\n\t\tlet rect = this.el.nativeElement.getBoundingClientRect();\n\n\t\tif ( ( ( window.innerHeight > rect.top && rect.top > 0 ) || ( rect.bottom > 0 && rect.bottom < window.innerHeight ) ) && this.first ) {\n\t\t\tif ( this.el.nativeElement.closest( 'owl-carousel' ) && !this.el.nativeElement.closest( '.owl-item.active' ) ) return;\n\n\t\t\tthis.player.play();\n\t\t\tthis.first = false;\n\t\t}\n\t}\n\n\tcreateAnimation () {\n\t\tthis.player = this.animationBuilder\n\t\t\t.build( [\n\t\t\t\tstyle(\n\t\t\t\t\tanimations[ this.aniName ][ 'from' ]\n\t\t\t\t),\n\t\t\t\tanimate(\n\t\t\t\t\tthis.duration,\n\t\t\t\t\tstyle(\n\t\t\t\t\t\tanimations[ this.aniName ][ 'to' ]\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t] )\n\t\t\t.create( this.el.nativeElement );\n\n\t\tlet self = this;\n\n\t\tthis.player.onStart( function () {\n\t\t\tself.el.nativeElement.classList.remove( 'appear-animate' );\n\t\t} );\n\t}\n}","
\n
\n New\n Sale\n Top\n Out Of Stock\n\n \n \n \n = 2\">\n \n\n \n\n
\n 0 else cartBlock\">\n select options\n \n \n \n \n
\n
\n\n
\n
\n {{product.category[0].name}}\n {{ cat.name }}{{ i < product.category.length - 1 ? ',' : '' }}\n \n
\n\n

\n {{ product.name }}

{{product.short_desc}}

\n

\n\n
\n
\n {{ product.price.toFixed(2) | currency:currVal }}\n
\n\n \n
{{ minPrice.toFixed(2) | currency:currVal }}
\n \n
{{ product.price.toFixed(2) | currency:currVal }}
\n \n
\n {{ minPrice.toFixed(2) | currency:currVal }}\n {{ maxPrice.toFixed(2) | currency:currVal }}\n
\n \n
{{minPrice.toFixed(2) | currency:currVal }}–{{maxPrice.toFixed(2) | currency:currVal }}
\n
\n
\n
\n
\n
\n\n \n
\n
","import { Component, OnInit, Input } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { Product } from 'src/app/shared/classes/product.model';\n\nimport { ModalService } from 'src/app/shared/services/modal.service';\nimport { CartService } from 'src/app/shared/services/cart.service';\nimport { WishlistService } from 'src/app/shared/services/wishlist.service';\nimport { CompareService } from 'src/app/shared/services/compare.service';\n\nimport { environment } from 'src/environments/environment';\n\n@Component({\n selector: 'molla-product-twelve',\n templateUrl: './product-twelve.component.html',\n styleUrls: ['./product-twelve.component.scss']\n})\n\nexport class ProductTwelveComponent implements OnInit {\n\n @Input() product;\n\n maxPrice = 0;\n minPrice = 99999;\n\n \n\tloginModel = JSON.parse(sessionStorage.getItem('currentUser')!);\n\t//VALUTA = '€'\n currVal = environment.VALUTA\n\n constructor(\n private router: Router,\n private modalService: ModalService,\n private cartService: CartService,\n private wishlistService: WishlistService,\n private compareService: CompareService\n ) { }\n\n ngOnInit(): void {\n let min = this.minPrice;\n let max = this.maxPrice;\n\n //console.log('product : '+this.product.slug)\n\n this.product.variants.map(item => {\n if (min > item.price) min = item.price;\n if (max < item.price) max = item.price;\n }, []);\n\n if (this.product.variants.length == 0) {\n min = this.product.sale_price\n ? this.product.sale_price\n : this.product.price;\n max = this.product.price;\n }\n\n this.minPrice = min;\n this.maxPrice = max;\n }\n\n addToCart(event: Event) {\n event.preventDefault();\n this.cartService.addToCart(this.product);\n }\n\n addToWishlist(event: Event) {\n event.preventDefault();\n\n if (this.isInWishlist()) {\n this.router.navigate(['/shop/wishlist']);\n } else {\n this.wishlistService.addToWishList(this.product);\n }\n }\n\n addToCompare(event: Event) {\n event.preventDefault();\n if (this.isInCompare()) return;\n this.compareService.addToCompare(this.product);\n }\n\n quickView(event: Event) {\n event.preventDefault();\n this.modalService.showQuickView(this.product);\n }\n\n isInCompare() {\n return this.compareService.isInCompare(this.product);\n }\n\n isInWishlist() {\n return this.wishlistService.isInWishlist(this.product);\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { Product } from '../classes/product.model';\n\n@Pipe( {\n\tname: 'attrFilter',\n\tpure: true\n} )\n\nexport class AttrFilterPipe implements PipeTransform {\n\n\ttransform ( products: Product[], attr: string ): Product[] {\n\t\treturn products.filter( item => {\n\t\t\tif ( attr === 'all' ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ( attr === 'sale' && item.sale_price ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ( attr === 'rated' && item.ratings > 3 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ( attr === 'until' && item.until ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn item[ attr ] === true;\n\t\t} );\n\t}\n}\n","
\n
\n
\n

{{titolo}}

\n
\n\n
\n \n
\n
\n\n
    \n
  • \n \n \n
    \n
    \n \n \n\n \n \n \n \n \n
    \n
  • \n
\n
\n
","import { Component, OnInit, Input, SimpleChanges, OnChanges } from '@angular/core';\n\nimport { productSlider } from '../data';\nimport { truncateSync } from 'fs';\nimport { Product } from 'src/app/shared/classes/product.model';\n\n\n@Component({\n\tselector: 'molla-products-collection',\n\ttemplateUrl: './products-collection.component.html',\n\tstyleUrls: ['./products-collection.component.scss']\n})\nexport class ProductsCollectionComponent implements OnInit {\n\n\t@Input()products: Product[];\n\t@Input()titolo = \"\";\n\t@Input()loaded = false;\n\n\tsliderOption = productSlider;\n\t//attrs = ['featured', 'new', 'top'];\n\tattrs = ['all', 'featured', '_new', 'top'];\n\ttitles = { \"all\": \"All\", \"featured\": \"In Evidenza\", \"_new\": \"New\", \"top\": \"Best Seller\" };\n\n\n\tconstructor() { }\n\n\tngOnInit(): void {\n\t\tif (this.products) {\n\t\t\tthis.loaded = true\n\t\t}\n\t\t\n //console.log('product : '+this.products[0].slug)\n\t}\n}","
\n
\n \n
\n
\n
\n
\n
\n

Il partner perfetto per la tua comunicazione luminosa

\n

\n Insegnistica, Illuminazione, Light Design\n

\n
\n \n Chi siamo\n \n \n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n

CONFIGURATORE

\n

\n scritte luminose effetto\n
neon\n

\n
\n \n Scopri\n \n \n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n

SCOPRI TUTTI I PRODOTTI

\n

IN PROMOZIONE

\n
\n \n VAI ALLO SHOP\n \n \n
\n
\n
\n
\n
\n
\n\n
\n\n
\n

Esplora

\n \n
\n\n
\n\n \n\n
\n\n
\n 0\" [products]=\"prodColl1.slice(0,10)\" [loaded]=\"loaded1\" [titolo]=\"'products.promo' | translate \">\n \n
\n\n
\n\n 0\" [products]=\"prodColl2\" [loaded]=\"loaded2\" [titolo]=\"'STRIP LED'\">\n \n\n
\n\n
\n \n
\n\n 0\" [products]=\"prodColl3\" [loaded]=\"loaded3\" [titolo]=\"'ACCESSORI'\">\n \n\n
\n\n 0\" [products]=\"prodColl4\" [loaded]=\"loaded4\" [titolo]=\"'CONTROLLER'\">\n \n\n
\n\n
\n

Qualità e Sicurezza

\n \n \n \"CE\"\n \n\n \n \"CREE\"\n \n\n \n \"ENEC\"\n \n\n \n \"LG\n \n\n \n \"MW\"\n \n\n \n \"OSRAM\"\n \n\n \n \"RoHS\"\n \n\n \n \"RU\"\n \n \n
\n\n
\n
\n
\n
\n

Join Our Newsletter

\n\n

Iscriviti per restare aggiornato e ricevere promozioni

\n
\n\n
\n
\n
\n \n
\n \n
\n
\n
\n {{ \"ctrl.email\" | translate }}\n
\n
\n \n \n
\n
\n {{ \"ctrl.dichiarazione\" | translate }}\n
\n \n
\n \n \n
\n
\n {{ \"ctrl.consenso\" | translate }}\n
\n
\n
\n
\n
\n
\n\n \n\n
\n
\n
\n
\n
\n \n \n \n
\n

Spedizione

\n\n

24h con ordini entro le 12.00

\n
\n
\n
\n\n
\n
\n \n \n \n\n
\n

Reso

\n\n

Vedi condizioni di reso

\n
\n
\n
\n\n
\n
\n \n \n \n\n
\n

Promozioni

\n\n

Ogni mese articoli in promozione.
\n Consulta l'area ARTICOLI IN PROMOZIONE\n

\n
\n
\n
\n\n
\n
\n \n \n \n\n
\n

Support

\n\n

I nostri tecnici sono a disposizione per un consulto telefonico o via mail in orario ufficio

\n
\n
\n
\n
\n
\n
\n
","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nimport { LayoutComponent } from './shared/layout/layout.component';\nimport { ComingSoonPageComponent } from './pages/others/coming-soon/coming-soon.component';\nimport { IndexComponent } from './pages/home/index/index.component';\n\nconst routes: Routes = [\n\t{\n\t\tpath: 'pages/coming-soon',\n\t\tcomponent: ComingSoonPageComponent\n\t},\n\t{\n\t\tpath: '',\n\t\tcomponent: LayoutComponent,\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tpath: '',\n\t\t\t\tpathMatch: 'full',\n\t\t\t\tcomponent: IndexComponent\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: 'pages',\n\t\t\t\tloadChildren: () => import( './pages/others/pages.module' ).then( m => m.PagesModule )\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: 'shop',\n\t\t\t\tloadChildren: () => import( './pages/shop/shop.module' ).then( m => m.ShopModule )\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: 'product',\n\t\t\t\tloadChildren: () => import( './pages/product/product.module' ).then( m => m.ProductModule )\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tpath: '**',\n\t\tredirectTo: '/pages/404'\n\t}\n];\n\n@NgModule( {\n\timports: [ RouterModule.forRoot( routes, { useHash: false, anchorScrolling: 'disabled', scrollPositionRestoration: 'disabled' } ) ],\n\texports: [ RouterModule ]\n} )\n\nexport class AppRoutingModule { }","import { Component, OnInit } from '@angular/core';\n\nimport { ModalService } from 'src/app/shared/services/modal.service';\nimport { ApiService } from 'src/app/shared/services/api.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\nimport { introSlider, brandSlider } from '../data';\nimport { categories } from 'src/app/shared/classes/categories.model';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FormService } from 'src/app/shared/services/form.service';\nimport { ToastrService } from 'ngx-toastr';\nimport { JsonLDService } from 'src/app/shared/services/json-ld.service';\nimport { Meta, Title } from '@angular/platform-browser';\n\n@Component({\n\tselector: 'molla-index',\n\ttemplateUrl: './index.component.html',\n\tstyleUrls: ['./index.component.scss']\n})\n\nexport class IndexComponent implements OnInit {\n\n\tprodColl1: any[] = [];\n\tprodColl2: any[] = [];\n\tprodColl3: any[] = [];\n\tprodColl4: any[] = [];\n\tloaded1: boolean = false;\n\tloaded2: boolean = false;\n\tloaded3: boolean = false;\n\tloaded4: boolean = false;\n\n\tproducts = [];\n\tcategories!:categories[];\n\tintroSlider = introSlider;\n\tbrandSlider = brandSlider;\n\n\tjoinForm!: FormGroup;\n\tsubmitted: boolean = false;\n\n\tconstructor(\n\t\tpublic apiService: ApiService,\n\t\tpublic utilsService: UtilsService,\n\t\tprivate formBuilder: FormBuilder,\n\t\tprivate translate: TranslateService,\n\t\tprivate formService: FormService,\n\t\tprivate toastrService: ToastrService,\n\t\tprivate title: Title,\n\t\tprivate meta: Meta,\n\t\tprivate jsonLdService: JsonLDService) {\n\n\t}\n\n\tngOnInit(): void {\n\t\t//log\n\t\tthis.utilsService.logAction(`Nuovo accesso al sito.`).then(response => {\n\t\t\t//console.log(response);\n\t\t})\n\t\t.catch(error => {\n\t\t\t//console.log(error);\n\t\t});\n\n\t\tthis.caricaCategorie();\n\n\t\tthis.joinForm = this.formBuilder.group({\n\t\t\temail: ['', [Validators.required, Validators.email]],\n\t\t\tprivacy1: [null, Validators.requiredTrue],\n\t\t\tprivacy2: [null, Validators.requiredTrue]\n\t\t});\n\n\t\tlet paramsColl1:any={}\n\t\tparamsColl1.searchTerm=\"promo\";\t\n\t\tparamsColl1.OrdDir=\"random\";\t\t\n\t\tthis.apiService.fetchShopData(paramsColl1, 20).subscribe(result => {\n\t\t\tthis.prodColl1 = JSON.parse(result!.products);\n\t\t\tthis.loaded1=true;\n\t\t})\n\n\t\tlet paramsColl2:any={}\n\t\tparamsColl2.category=\"03.50\";\n\t\tparamsColl1.OrdDir=\"random\";\t\t\t\n\t\tthis.apiService.fetchShopData(paramsColl2, 20).subscribe(result => {\n\t\t\tthis.prodColl2 = JSON.parse(result!.products);\n\t\t\tthis.loaded2=true;\n\t\t})\n\n\n\t\tlet paramsColl3:any={}\n\t\tparamsColl3.category=\"03.01\";\n\t\tparamsColl3.OrdDir=\"random\";\t\t\t\n\t\tthis.apiService.fetchShopData(paramsColl3, 20).subscribe(result => {\n\t\t\tthis.prodColl3 = JSON.parse(result!.products);\n\t\t\tthis.loaded3=true;\n\t\t})\n\n\n\t\tlet paramsColl4:any={}\n\t\tparamsColl4.category=\"03.15\";\n\t\tparamsColl4.OrdDir=\"random\";\t\t\t\n\t\tthis.apiService.fetchShopData(paramsColl4, 20).subscribe(result => {\n\t\t\tthis.prodColl4 = JSON.parse(result!.products);\n\t\t\tthis.loaded4=true;\n\t\t})\n\n\t\tthis.title.setTitle('MyLiteLED')\n\t\tthis.meta.updateTag({ name: 'description', content: 'LED, insegne, cassonetti, lettere scatolate' })\n\t\tthis.meta.updateTag({ name: 'keywords', content: 'Prodotti a LED per insegne, cassonetti, lettere scatolate.' })\n\t\tthis.jsonLdService.insertSchema(JsonLDService.websiteSchema('Organization'));\n\t}\n\n\tasync caricaCategorie(){\n\t\tconst fromDb = undefined;\n\t\tconst params = fromDb || {};\n\t\tparams.LIVELLO = 1;\n\t\tparams.lingua = 'IT';\n\n\t\tthis.categories = await this.apiService.fetchCategories(params);\n\t}\n\n\tasync joinSend() {\n\t\t// Validazione dei campi del modulo\n\t\tif (!this.formService.validateForm(this.joinForm)) {\n\t\t\tthis.submitted=true;\n\t\t\treturn; // Esci se la validazione fallisce\n\t\t}\t\t\n\n\t\tthis.formService.sendJoinNewsletter(this.joinForm).subscribe({\n\n\t\t\tnext: data => {\n\t\t\t\tif (data.code === 0) {\n\t\t\t\t\t/*this.modalService.openSnackBar(this.translate.instant('msg.confReg'))*/\n\t\t\t\t\tthis.toastrService.success(this.translate.instant('msg.confContct'))\n\t\t\t\t} else {\n\t\t\t\t\t//this.modalService.openAlertDialog(data!.info)\n\t\t\t\t\tthis.toastrService.error(data!.info)\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t},\n\t\t\terror: error => {\n\t\t\t\tif (error.status ) {\n\t\t\t\t\t//this.alertService.error(error.message);\n\t\t\t\t\t//this.modalService.openAlertDialog(error.message);\n\t\t\t\t\tthis.toastrService.error(error.message)\n\t\t\t\t} else { \n\t\t\t\t\t//this.alertService.error(error.info);\n\t\t\t\t\t//this.modalService.openAlertDialog(error.info);\n\t\t\t\t\tthis.toastrService.error(error.info)\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t});\n\t}\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\nimport { OwlModule } from 'angular-owl-carousel';\n\nimport { SharedModule } from '../../shared/shared.module';\n\nimport { IndexComponent } from './index/index.component';\nimport { BlogCollectionComponent } from './blog-collection/blog-collection.component';\nimport { DealCollectionComponent } from './deal-collection/deal-collection.component';\nimport { ElectronicsCollectionComponent } from './electronics-collection/electronics-collection.component';\nimport { FurnitureCollectionComponent } from './furniture-collection/furniture-collection.component';\nimport { ClothingCollectionComponent } from './clothing-collection/clothing-collection.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ProductsCollectionComponent } from './products-collection/products-collection.component';\n\n@NgModule({\n\tdeclarations: [\n\t\tIndexComponent,\n\t\tBlogCollectionComponent,\n\t\tDealCollectionComponent,\n\t\tElectronicsCollectionComponent,\n\t\tFurnitureCollectionComponent,\n\t\tClothingCollectionComponent,\n ProductsCollectionComponent\n\t],\n\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule,\n\t\tTranslateModule,\n\t\tNgbModule,\n\t\tOwlModule,\n\t\tSharedModule,\n\t\tReactiveFormsModule\n\t]\n})\n\nexport class HomeModule { }\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\n//Questo Service è un Interceptor che viene eseguito prima di ogni chiamata http al server\r\nexport class TokenInterceptorService implements HttpInterceptor {\r\n\r\n constructor(private router: Router) { }\r\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\r\n\r\n const s = req.url.toLowerCase();\r\n //Recupero la cache ed eseguo l'inserimnto del toke nel header della chiamata\r\n var loginModel = JSON.parse(sessionStorage.getItem('currentUser')!);\r\n //Recupero l'url\r\n var url = this.router.url;\r\n //Eventuale controllo se ci sono chiamate per cui non deve essere eseguito questo interceptor \r\n if (s.indexOf('https://calcolatore.myliteled.com') > -1) {\r\n return next.handle(req);\r\n } else {\r\n const headers = {\r\n ContentType: \"application/json\",\r\n IDDitta: environment.backend.IDDitta.toString()\r\n };\r\n\r\n if (loginModel && loginModel.token) {\r\n headers['token'] = loginModel.token;\r\n }\r\n\r\n const jsonReq = req.clone({\r\n setHeaders: headers\r\n })\r\n return next.handle(jsonReq as any);\r\n }\r\n }\r\n}\r\n","// NGRX\r\nimport { routerReducer } from '@ngrx/router-store';\r\nimport { ActionReducerMap, MetaReducer } from '@ngrx/store';\r\n\r\nexport interface AppState { }\r\n\r\nexport const appReducers: ActionReducerMap = { router: routerReducer };\r\n\r\nexport const metaReducers: Array> = [];\r\n","import { EntityState } from '@ngrx/entity';\r\n\r\nimport { Product } from '../../shared/classes/product.model';\r\nimport { ADD_TO_WISHLIST, REMOVE_FROM_WISHLIST, REFRESH_STORE } from '../constants/constants';\r\n\r\nexport interface WishlistState extends EntityState {\r\n data: Product[]\r\n}\r\n\r\nfunction getState ( key: string ) {\r\n let initialState = {\r\n data: []\r\n };\r\n\r\n return ( localStorage.getItem( key ) && JSON.parse( localStorage.getItem( key ) ).wishlist ) ? JSON.parse( localStorage.getItem( key ) ).wishlist : initialState;\r\n}\r\n\r\nexport function wishlistReducer ( state = getState( 'molla' ), action ) {\r\n switch ( action.type ) {\r\n case ADD_TO_WISHLIST:\r\n if ( state.data.findIndex( item => item.id === action.payload.product.id ) == -1 ) {\r\n return {\r\n data: [\r\n ...state.data,\r\n action.payload.product\r\n ]\r\n };\r\n }\r\n\r\n return state;\r\n\r\n case REMOVE_FROM_WISHLIST:\r\n return {\r\n data: state.data.filter( item => item.id !== action.payload.product.id )\r\n };\r\n\r\n case REFRESH_STORE:\r\n return {\r\n data: []\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}","import { EntityState } from '@ngrx/entity';\r\n\r\nimport { Product } from '../../shared/classes/product.model';\r\nimport { ADD_TO_COMPARE, REMOVE_FROM_COMPARE, REMOVE_ALL_COMPARE, REFRESH_STORE } from '../constants/constants';\r\n\r\nexport interface CompareState extends EntityState {\r\n data: Product[]\r\n}\r\n\r\nfunction getState ( key: string ) {\r\n let initialState = {\r\n data: []\r\n };\r\n\r\n return ( localStorage.getItem( key ) && JSON.parse( localStorage.getItem( key ) ).compare ) ? JSON.parse( localStorage.getItem( key ) ).compare : initialState;\r\n}\r\n\r\nexport function compareReducer ( state = getState( 'molla' ), action ) {\r\n switch ( action.type ) {\r\n case ADD_TO_COMPARE:\r\n if ( state.data.findIndex( item => item.id == action.payload.product.id ) == -1 ) {\r\n return {\r\n data: [\r\n ...state.data,\r\n action.payload.product\r\n ]\r\n };\r\n }\r\n\r\n return state;\r\n\r\n case REMOVE_FROM_COMPARE:\r\n return {\r\n data: state.data.filter( item => item.id != action.payload.product.id )\r\n };\r\n\r\n case REMOVE_ALL_COMPARE:\r\n return {\r\n data: []\r\n }\r\n\r\n case REFRESH_STORE:\r\n return {\r\n data: []\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { EntityState } from '@ngrx/entity';\r\n\r\nimport {\r\n UPDATE_CART_HEADER,\r\n ADD_TO_CART,\r\n REMOVE_FROM_CART,\r\n UPDATE_CART,\r\n REFRESH_STORE\r\n} from '../constants/constants';\r\n\r\nimport { CartHeader } from 'src/app/shared/classes/cart-header.model';\r\nimport { CartItem } from '../../shared/classes/cart-item.model';\r\n\r\n\r\nexport interface CartHeaderState extends EntityState {\r\n header: CartHeader\r\n}\r\n\r\nexport interface CartItemState extends EntityState {\r\n data: CartItem[]\r\n}\r\n\r\nfunction getState(key: string) {\r\n let initialState = {\r\n data: []\r\n };\r\n\r\n return (localStorage.getItem(key) && JSON.parse(localStorage.getItem(key)).cart) ? JSON.parse(localStorage.getItem(key)).cart : initialState;\r\n}\r\n\r\nexport function cartReducer(state = getState('molla'), action) {\r\n switch (action.type) {\r\n case UPDATE_CART_HEADER:\r\n return {\r\n ...state,\r\n header: action.payload.cartHeader,\r\n };\r\n \r\n case ADD_TO_CART:\r\n var findIndex = state.data.findIndex(item => item.id == action.payload.product.id);\r\n let qty = action.payload.qty ? action.payload.qty : 1;\r\n\r\n // Imposta qty a product.pcs_pack se qty è minore di product.pcs_pack, altrimenti a 1.\r\n qty = Math.max(qty, action.payload.product.pcs_pack || 1); \r\n if (qty === 0) {\r\n qty = 1;\r\n }\r\n\r\n if (findIndex !== -1 && action.payload.product.variants.length > 0) {\r\n findIndex = state.data.findIndex(item => item.name == action.payload.product.name);\r\n }\r\n\r\n if (findIndex !== -1) {\r\n return {\r\n data: [\r\n ...state.data.reduce((acc, product, index) => {\r\n if (findIndex == index) {\r\n acc.push({\r\n ...product,\r\n qty: product.qty + qty,\r\n sum: (action.payload.product.sale_price ? action.payload.product.sale_price : action.payload.product.price) * (product.qty + qty)\r\n });\r\n } else {\r\n acc.push(product);\r\n }\r\n\r\n return acc;\r\n }, [])\r\n ]\r\n }\r\n } else {\r\n return {\r\n data: [\r\n ...state.data,\r\n {\r\n ...action.payload.product,\r\n qty: qty,\r\n price: action.payload.product.sale_price ? action.payload.product.sale_price : action.payload.product.price,\r\n sum: qty * (action.payload.product.sale_price ? action.payload.product.sale_price : action.payload.product.price)\r\n }\r\n ]\r\n };\r\n }\r\n\r\n case REMOVE_FROM_CART:\r\n return {\r\n data: [\r\n ...state.data.filter(item => {\r\n if (item.id !== action.payload.product.id) return true;\r\n if (item.name !== action.payload.product.name) return true;\r\n return false;\r\n })\r\n ]\r\n }\r\n\r\n case UPDATE_CART:\r\n return {\r\n data: [\r\n ...action.payload.cartItems\r\n ]\r\n };\r\n\r\n case REFRESH_STORE:\r\n return {\r\n data: []\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Store } from '@ngrx/store';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class StoreService {\r\n constructor(store: Store) {\r\n store.subscribe(items => {\r\n localStorage.setItem('molla', JSON.stringify(items));\r\n })\r\n }\r\n}","
\n
\n \n\n
\n \n \n \n
\n\n \n
\n\n
\n \n \n \n \n \n
\n
\n
","import { ChangeDetectionStrategy, Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, NavigationStart } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { categories } from 'src/app/shared/classes/categories.model';\nimport { ApiService } from 'src/app/shared/services/api.service';\n\ndeclare var $: any;\n\n@Component({\n\tselector: 'molla-mobile-menu',\n\ttemplateUrl: './mobile-menu.component.html',\n\tstyleUrls: ['./mobile-menu.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class MobileMenuComponent implements OnInit, OnDestroy {\n\n\tsearchTerm = \"\";\n\tcategories!:categories[];\n\n\tprivate subscr: Subscription;\n\n\tconstructor(\n\t\tprivate router: Router,\n\t\tprivate apiService: ApiService\n\t) {\n\t\tthis.subscr = this.router.events.subscribe(event => {\n\t\t\tif (event instanceof NavigationStart) {\n\t\t\t\tthis.hideMobileMenu();\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit(): void {\t\t\n\t\tthis.caricaCategorie();\n\t}\n\n\tasync caricaCategorie(){\n\t\tconst fromDb = undefined;\n\t\tconst params = fromDb || {};\n\t\tparams.LIVELLO = 1;\n\t\tparams.lingua = 'IT';\n\n\t\tthis.categories = await this.apiService.fetchCategories(params);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscr.unsubscribe();\n\t}\n\n\tsubmenuToggle(e) {\n\t\tconst parent: HTMLElement = e.target.closest('li');\n\t\tconst submenu: HTMLElement = parent.querySelector('ul');\n\n\t\tif (parent.classList.contains('open')) {\n\t\t\t$(submenu).slideUp(300, function () {\n\t\t\t\tparent.classList.remove('open');\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t$(submenu).slideDown(300, function () {\n\t\t\t\tparent.classList.add('open');\n\t\t\t});\n\t\t}\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}\n\n\thideMobileMenu() {\n\t\tdocument.querySelector('body').classList.remove('mmenu-active');\n\t\tdocument.querySelector('html').removeAttribute('style');\n\t}\n\n\tsubmitSearchForm(e: any) {\n\t\te.preventDefault();\n\t\tthis.searchTerm = e.currentTarget.querySelector('.form-control').value;\n\t\tthis.router.navigate(['/shop/sidebar/list'], { queryParams: { searchTerm: this.searchTerm } });\n\t}\n}\n","import { Component, HostListener } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { ViewportScroller } from '@angular/common';\nimport { filter, first } from 'rxjs/operators';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport {TranslateService} from \"@ngx-translate/core\";\n\nimport { Store } from '@ngrx/store';\n\nimport { StoreService } from './core/store/store.service';\nimport { UtilsService } from './shared/services/utils.service';\n\nimport { RefreshStoreAction } from 'src/app/core/actions/actions';\nimport { environment } from 'src/environments/environment';\n\nimport { AuthenticateService } from './shared/services/authenticate.service';\nimport { LoginModel } from './shared/classes/LoginModel';\n\n\ndeclare var $: any;\n\n@Component({\n\tselector: 'molla-root',\n\ttemplateUrl: './app.component.html',\n\tstyleUrls: ['./app.component.scss']\n})\n\nexport class AppComponent {\n\tloginmodel!: LoginModel\n\n\tconstructor(\n\t\tpublic store: Store,\n\t\tpublic router: Router,\n\t\tpublic viewPort: ViewportScroller,\n\t\tpublic storeService: StoreService,\n\t\tpublic utilsService: UtilsService,\n\t\tpublic modalService: NgbModal,\n\t\tprivate authenticateService: AuthenticateService,\n\t\tprivate translate: TranslateService\n\t) {\n\t\tconst navigationEnd = this.router.events.pipe(\n\t\t\tfilter(event => event instanceof NavigationEnd)\n\t\t);\n\n\t\tnavigationEnd.pipe(first()).subscribe(() => {\n\t\t\tdocument.querySelector('body')?.classList.add('loaded');\n\t\t\tvar timer = setInterval(() => {\n\t\t\t\tif( window.getComputedStyle( document.querySelector('body') ).visibility == 'visible') {\n\t\t\t\t\tclearInterval(timer);\n\t\t\t\t\t$('.owl-carousel').trigger('refresh.owl.carousel');\n\t\t\t\t}\n\t\t\t}, 300);\n\t\t});\n\n\t\tnavigationEnd.subscribe((event: any) => {\n\t\t\tif (!event.url.includes('/shop/sidebar') && !event.url.includes('/shop/nosidebar') && !event.url.includes('/shop/market') && !event.url.includes('/blog')) {\n\t\t\t\tthis.viewPort.scrollToPosition([0, 0]);\n\t\t\t}\n\n\t\t\tthis.modalService.dismissAll();\n\t\t})\n\n\t\tif (localStorage.getItem(\"molla-angular-demo\") !== environment.demo) {\n\t\t\tthis.store.dispatch(new RefreshStoreAction());\n\t\t}\n\n\t\tlocalStorage.setItem(\"molla-angular-demo\", environment.demo);\n\t}\n\n\t@HostListener('window: scroll', ['$event'])\n\tonWindowScroll(e: Event) {\n\t\tthis.utilsService.setStickyHeader();\n\t}\n\n\thideMobileMenu() {\n\t\tdocument.querySelector('body').classList.remove('mmenu-active');\n\t\tdocument.querySelector('html').style.overflowX = 'unset';\n\t}\n\n\tasync ngOnInit() {\n\t\t//verifico se è presente il dato in sessionStorage inserisco il valore che è presente\n\t\t//altrimenti inserisco il valore di default\n\t\tthis.loginmodel = JSON.parse(sessionStorage.getItem('currentUser')!);\n\t\t//this.translate.setDefaultLang(this.loginmodel == undefined ? 'it' : this.loginmodel.idAzienda +\"-\"+this.loginmodel.language.toUpperCase());\n\t\tthis.translate.setDefaultLang(\"it\");\n\t}\n}","\r\n\r\n
\r\n\r\n\r\n\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { LOCALE_ID, NgModule } from '@angular/core';\r\nimport localeIt from '@angular/common/locales/it';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { ToastrModule } from 'ngx-toastr';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { OwlModule } from 'angular-owl-carousel';\r\n\r\n// NGRX\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\nimport { StoreRouterConnectingModule } from '@ngrx/router-store';\r\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\r\n\r\n//Material Import\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\n\r\n// import ngx-translate and the http loader\r\nimport {TranslateLoader, TranslateModule, TranslateService} from '@ngx-translate/core';\r\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\r\nimport {HttpClient} from '@angular/common/http';\r\n\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { SharedModule } from './shared/shared.module';\r\nimport { PagesModule } from './pages/others/pages.module';\r\nimport { HomeModule } from './pages/home/home.module';\r\nimport { TokenInterceptorService } from './shared/services/token-interceptor.service'\r\n\r\n// reducers\r\nimport { appReducers, metaReducers } from './core/reducers/app.reducer';\r\nimport { wishlistReducer } from './core/reducers/wishlist.reducer';\r\nimport { compareReducer } from './core/reducers/compare.reducer';\r\nimport { cartReducer } from './core/reducers/cart.reducer';\r\n\r\nimport { AppComponent } from './app.component';\r\nimport { LayoutComponent } from './shared/layout/layout.component';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { registerLocaleData } from '@angular/common';\r\n\r\n\r\n// Registra le impostazioni locali\r\nregisterLocaleData(localeIt);\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n LayoutComponent,\r\n ],\r\n imports: [\r\n BrowserModule,\r\n ReactiveFormsModule,\r\n AppRoutingModule,\r\n NgbModule,\r\n HttpClientModule,\r\n OwlModule,\r\n PagesModule,\r\n SharedModule,\r\n HomeModule,\r\n BrowserAnimationsModule,\r\n ToastrModule.forRoot({\r\n timeOut: 10000,\r\n progressBar: false,\r\n enableHtml: true,\r\n }),\r\n StoreModule.forRoot(appReducers, { metaReducers }),\r\n StoreModule.forFeature('cart', cartReducer),\r\n StoreModule.forFeature('wishlist', wishlistReducer),\r\n StoreModule.forFeature('compare', compareReducer),\r\n EffectsModule.forRoot([]),\r\n StoreRouterConnectingModule.forRoot({ stateKey: 'router' }),\r\n StoreDevtoolsModule.instrument(),\r\n\r\n // ngx-translate and the loader module\r\n HttpClientModule,\r\n TranslateModule.forRoot({\r\n loader: {\r\n provide: TranslateLoader,\r\n useFactory: HttpLoaderFactory,\r\n deps: [HttpClient]\r\n }\r\n }), \r\n\t\tMatProgressBarModule,\r\n\t\tMatPaginatorModule,\t\r\n\t\tMatTableModule,\r\n MatDialogModule,\r\n\t\tMatSnackBarModule\r\n ],\r\n\r\n providers: [\r\n {\r\n provide: HTTP_INTERCEPTORS, \r\n useClass: TokenInterceptorService, \r\n multi: true\r\n },\r\n { \r\n provide: LOCALE_ID, \r\n useValue: 'it'\r\n } // Usa il codice del paese europeo desiderato\r\n ],\r\n \r\n bootstrap: [AppComponent]\r\n})\r\n\r\nexport class AppModule { constructor(private translate: TranslateService) {\r\n translate.setDefaultLang('it'); // Set the default language\r\n}}\r\n\r\n// required for AOT compilation\r\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\r\n return new TranslateHttpLoader(http);\r\n}","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"]}