{"version":3,"file":"main.25e2eb67ef9c1fa1.js","mappings":"sIAeA,MAAMA,KAAkBC,MACtB,IACEC,MAAM,CACJC,QAAS,cACTC,UAAW,uDAFR,EAILC,MAAQ,2DAAyDH,MAAM,OAEzE,CACEI,OAAQ,CACNC,SAAU,QACVC,MAAO,MACPL,QAAS,IACTM,MAAO,IACPC,EAAG,IACHC,EAAG,IACHC,EAAG,OAKIC,EAAiB,IAC5BC,MAAQ,UAAW,IAACC,MAAW,YAAa,IAACC,MAAahB,QAAnD,EAEPc,MAAQ,iBAAkB,IACxBG,MAAM,QAAMf,MAAM,OAAb,EACLe,MAAM,SAAOf,MAAM,OAAd,EACLe,MAAM,SAAOf,MAAM,OAAd,EAELa,MAAW,gBAAcG,MAAM,KAAM,IAACC,MAAQ,OAAQ,IAACC,WAAmB,CAAEC,UAAU,MAA5E,EACVN,MAAW,iBAAeG,MAAM,KAAM,IAACC,MAAQ,QAAS,IAACC,WAAmB,CAAEC,UAAU,MAA9E,EACVN,MAAW,iBAAeG,MAAM,KAAM,IAACC,MAAQ,QAAS,IAACC,WAAmB,CAAEC,UAAU,QAPnF,EAUPP,MAAQ,YAAa,IACnBG,MACE,aACAf,MAAM,CACJC,QAAS,MAHR,EAMLc,MACE,UACAf,MAAM,CACJC,QAAS,MAHR,EAMLY,MAAW,YAAUV,MAAQ,oBAAnB,EACVU,MAAW,YAAUV,MAAQ,mBAAnB,EACVU,MAAW,gBAAcV,MAAQ,qBAf5B,EAkBPS,MAAQ,aAAc,IACpBG,MACE,OACAf,MAAM,CACJoB,OAAQ,UAHP,EAMLL,MACE,OACAf,MAAM,CACJoB,OAAQ,QAHP,EAMLP,MAAW,YAAUV,MAAQ,oBAAnB,EACVU,MAAW,YAAUV,MAAQ,qBAdxB,EAiBPS,MAAQ,UAAW,IACjBC,MAAW,eAAgB,IACzBb,MAAM,CACJE,UAAW,sBADR,EAGLC,MACE,mBACAH,MAAM,CACJE,UAAW,sBAPP,EAWVW,MAAW,eAAgB,IACzBb,MAAM,CACJE,UAAW,mBADR,EAGLC,MACE,mBACAH,MAAM,CACJE,UAAW,0BAPP,EAWVW,MAAW,gBAAiB,IAC1Bb,MAAM,CACJE,UAAW,uBADR,EAGLC,MACE,mBACAH,MAAM,CACJE,UAAW,sBAPP,EAWVW,MAAW,gBAAiB,IAC1Bb,MAAM,CACJE,UAAW,mBADR,EAGLC,MACE,mBACAH,MAAM,CACJE,UAAW,2BAzCZ,EA+CPU,MAAQ,cAAe,IACrBG,MACE,UACAf,MAAM,CACJE,UAAW,wBAHV,EAMLa,MACE,OACAf,MAAM,CACJE,UAAW,oBAHV,EAMLW,MAAW,eAAaV,MAAQ,WAAtB,EACVU,MAAW,eAAaV,MAAQ,aAd3B,EAiBPS,MAAQ,eAAgB,IACtBG,MACE,UACAf,MAAM,CACJE,UAAW,uBAHV,EAMLa,MACE,OACAf,MAAM,CACJE,UAAW,oBAHV,EAMLW,MAAW,eAAaV,MAAQ,WAAtB,EACVU,MAAW,eAAaV,MAAQ,aAd3B,EAiBPS,MAAQ,aAAc,IACpBG,MACE,UACAf,MAAM,CACJE,UAAW,wBAHV,EAMLa,MACE,OACAf,MAAM,CACJE,UAAW,oBAHV,EAMLW,MAAW,eAAaV,MAAQ,WAAtB,EACVU,MAAW,eAAaV,MAAQ,aAd3B,EAiBPS,MAAQ,gBAAiB,IACvBG,MACE,UACAf,MAAM,CACJE,UAAW,uBAHV,EAMLa,MACE,OACAf,MAAM,CACJE,UAAW,oBAHV,EAMLW,MAAW,eAAaV,MAAQ,WAAtB,EACVU,MAAW,eAAaV,MAAQ,aAd3B,EAiBPS,MAAQ,iBAAkB,IACxBG,MACE,UACAf,MAAM,CACJoB,OAAQ,UAHP,EAMLL,MACE,OACAf,MAAM,CACJoB,OAAQ,QAHP,EAMLP,MAAW,eAAaV,MAAQ,oBAAtB,EACVU,MAAW,eAAaV,MAAQ,qBAd3B,EAqBPS,MAAQ,uBAAwB,IAC9BC,MAAW,SAAU,IACnBG,MACE,qCACA,IACEhB,MAAM,CACJqB,SAAU,WACVC,IAAK,EACLC,OAAQ,EACRC,KAAM,EACNC,MAAO,KAGX,CAAEN,UAAU,KAXT,EAaLH,MACE,mBACA,IACEhB,MAAM,CACJE,UAAW,mBACXD,QAAS,KAGb,CAAEkB,UAAU,KART,EAULO,MAAS,IACPC,MAAM,IACJX,MACE,mBACA,IACEhB,MAAM,CACJE,UAAW,gBACXD,QAAS,KAFN,EAILE,MACE,0CACAH,MAAM,CACJE,UAAW,oBACXD,QAAS,MAIf,CAAEkB,UAAU,KAfT,EAiBLH,MACE,mBACA,IACEhB,MAAM,CAAEE,UAAW,sBAAd,EACLC,MACE,0CACAH,MAAM,CACJE,UAAW,iBACXD,QAAS,MAIf,CAAEkB,UAAU,OA9BX,EAiCLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,KAAjD,EACLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,WA5DrD,EAiEPP,MAAQ,wBAAyB,IAC/BC,MAAW,SAAU,IACnBG,MACE,qCACA,IACEhB,MAAM,CACJqB,SAAU,WACVC,IAAK,EACLC,OAAQ,EACRC,KAAM,EACNC,MAAO,KAGX,CAAEN,UAAU,KAXT,EAaLH,MACE,mBACA,IACEhB,MAAM,CACJE,UAAW,oBACXD,QAAS,KAGb,CAAEkB,UAAU,KART,EAULO,MAAS,IACPC,MAAM,IACJX,MACE,mBACA,IACEhB,MAAM,CACJE,UAAW,gBACXD,QAAS,KAFN,EAILE,MACE,0CACAH,MAAM,CACJE,UAAW,mBACXD,QAAS,MAIf,CAAEkB,UAAU,KAfT,EAiBLH,MACE,mBACA,IACEhB,MAAM,CAAEE,UAAW,uBAAd,EACLC,MACE,0CACAH,MAAM,CACJE,UAAW,iBACXD,QAAS,MAIf,CAAEkB,UAAU,OA9BX,EAiCLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,KAAjD,EACLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,WA5DrD,EAiEPP,MAAQ,qBAAsB,IAC5BC,MAAW,SAAU,IACnBG,MACE,qCACA,IACEhB,MAAM,CACJqB,SAAU,WACVC,IAAK,EACLC,OAAQ,EACRC,KAAM,EACNC,MAAO,KAGX,CAAEN,UAAU,KAXT,EAaLH,MACE,mBACA,IACEhB,MAAM,CACJE,UAAW,mBACXD,QAAS,KAGb,CAAEkB,UAAU,KART,EAULQ,MAAM,IACJX,MACE,mBACA,IACEhB,MAAM,CACJE,UAAW,gBACXD,QAAS,KAFN,EAILE,MACE,0CACAH,MAAM,CACJE,UAAW,oBACXD,QAAS,MAIf,CAAEkB,UAAU,KAfT,EAiBLH,MACE,mBACA,IACEhB,MAAM,CAAEE,UAAW,sBAAd,EACLC,MACE,0CACAH,MAAM,CACJE,UAAW,iBACXD,QAAS,MAIf,CAAEkB,UAAU,OA9BX,EAiCLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,KAAjD,EACLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,SA3DnD,EA+DPP,MAAQ,uBAAwB,IAC9BC,MAAW,SAAU,IACnBG,MACE,qCACA,IACEhB,MAAM,CACJqB,SAAU,WACVC,IAAK,EACLC,OAAQ,EACRC,KAAM,EACNC,MAAO,KAGX,CAAEN,UAAU,KAXT,EAaLH,MACE,mBACA,IACEhB,MAAM,CACJE,UAAW,oBACXD,QAAS,KAGb,CAAEkB,UAAU,KART,EAULO,MAAS,IACPC,MAAM,IACJX,MACE,mBACA,IACEhB,MAAM,CACJE,UAAW,gBACXD,QAAS,KAFN,EAILE,MACE,0CACAH,MAAM,CACJE,UAAW,mBACXD,QAAS,MAIf,CAAEkB,UAAU,KAfT,EAiBLH,MACE,mBACA,IACEhB,MAAM,CAAEE,UAAW,uBAAd,EACLC,MACE,0CACAH,MAAM,CACJE,UAAW,iBACXD,QAAS,MAIf,CAAEkB,UAAU,OA9BX,EAiCLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,KAAjD,EACLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,WA5DrD,EAiEPP,MAAQ,uBAAwB,IAC9BC,MACE,YACAc,MAAM,IACJX,MACE,sCACA,IACEhB,MAAM,CACJqB,SAAU,WACVC,IAAK,EACLC,OAAQ,EACRC,KAAM,EACNC,MAAO,KAGX,CAAEN,UAAU,KAXT,EAcLH,MACE,mBACA,IACEhB,MAAM,CACJC,QAAS,KAGb,CAAEkB,UAAU,KAPT,EASLH,MACE,mBACA,IACEhB,MAAM,CACJC,QAAS,KADN,EAGLE,MACE,0CACAH,MAAM,CACJC,QAAS,MAIf,CAAEkB,UAAU,KAbT,EAeLH,MACE,mBACA,IACEhB,MAAM,CACJC,QAAS,KADN,EAGLE,MACE,0CACAH,MAAM,CACJC,QAAS,MAIf,CAAEkB,UAAU,KAbT,EAeLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,KAAjD,EACLH,MAAM,sBAAoBE,QAAgB,CAAEC,UAAU,SApfhC,+FC5BvB,IAAMS,EAAb,MAAM,MAAOA,EAiBXC,cALQC,eAAoC,GAO1CA,KAAKC,gBAAkB,IAAIC,KAC3BF,KAAKG,sBAAwB,IAAID,KAGjCF,KAAKI,sBAAwB,KAC7BJ,KAAKK,qBAAuB,IAAIC,IAAgB,MAChDN,KAAKO,wBAA0B,IAAID,IAAgB,MACnDN,KAAKQ,0BAA4B,IAAIF,IAAgB,MACrDN,KAAKS,uBAAyB,IAAIH,IAAgB,MAClDN,KAAKU,yBAA2B,IAAIJ,IAAgB,MACpDN,KAAKW,yBAA2B,IAAIL,IAAgB,KACrD,CAWUM,0BACT,OAAOZ,KAAKK,qBAAqBQ,cAClC,CAOUC,4BACT,OAAOd,KAAKS,uBAAuBI,cACpC,CAOUE,8BACT,OAAOf,KAAKW,yBAAyBE,cACtC,CAOUG,8BACT,OAAOhB,KAAKU,yBAAyBG,cACtC,CAOUI,6BACT,OAAOjB,KAAKO,wBAAwBM,cACrC,CAOUK,+BACT,OAAOlB,KAAKQ,0BAA0BK,cACvC,CAYMM,kBAAkBC,EAAMC,GAE7B,MAAMC,EAAoBtB,KAAKuB,uBAG/B,GAAW,QAAPF,EAMF,OALAC,EAAWE,KAAKJ,QAGhBpB,KAAKS,uBAAuBgB,MAAK,GAMnC,GAAW,UAAPJ,EAMF,OALAC,EAAWI,QAAQN,QAGnBpB,KAAKS,uBAAuBgB,MAAK,GAMnC,MAAME,EAAc3B,KAAK4B,kBAAkBP,GAEvCM,IAGGA,EAAOE,WACVF,EAAOE,SAAW,IAIpBF,EAAOE,SAASL,KAAKJ,IAIvBpB,KAAKS,uBAAuBgB,MAAK,EAClC,CAOMF,uBACL,GAAKvB,KAAKI,sBAMV,OAAOJ,KAAK8B,cAAc9B,KAAKI,uBAL7B2B,QAAQC,KAAK,qCAMhB,CASMC,kBAAkBX,EAAYY,EAA4C,IAC/E,IAAKZ,IAAeY,EAClB,MAAO,GAGT,UAAWd,KAAQE,EACC,SAAdF,EAAKe,MASS,gBAAdf,EAAKe,MAAwC,UAAdf,EAAKe,OAClCf,EAAKS,UACP7B,KAAKiC,kBAAkBb,EAAKS,SAAUK,GATpCd,EAAKgB,KACPF,EAAeV,KAAKJ,GAa1B,OAAOc,CACR,CAQMJ,cAAcO,GAEnB,GAAKrC,KAAKsC,UAAUD,GAOpB,OAAOrC,KAAKsC,UAAUD,GANpBN,QAAQC,KAAK,gCAAgCK,oCAOhD,CAUMT,kBAAkBP,EAAIC,EAAa,MACnCA,IACHA,EAAatB,KAAKuB,wBAGpB,UAAWH,KAAQE,EAAY,CAC7B,GAAIF,EAAKC,KAAOA,EACd,OAAOD,EAGT,GAAIA,EAAKS,SAAU,CACjB,MAAMU,EAAYvC,KAAK4B,kBAAkBP,EAAID,EAAKS,UAElD,GAAIU,EACF,OAAOA,CAEV,CACF,CAED,OAAO,CACR,CAUMC,wBAAwBnB,EAAIC,EAAa,KAAMK,EAAS,MACxDL,IAEHK,EADAL,EAAatB,KAAKuB,wBAIpB,UAAWH,KAAQE,EAAY,CAC7B,GAAIF,EAAKC,KAAOA,EACd,OAAOM,EAGT,GAAIP,EAAKS,SAAU,CACjB,MAAMU,EAAYvC,KAAKwC,wBAAwBnB,EAAID,EAAKS,SAAUT,GAElE,GAAImB,EACF,OAAOA,CAEV,CACF,CAED,OAAO,CACR,CASME,SAASJ,EAAKf,GAEftB,KAAKsC,UAAUD,GACjBN,QAAQW,MAAM,gCAAgCL,uEAMhDrC,KAAKsC,UAAUD,GAAOf,EAEtBtB,KAAKO,wBAAwBkB,KAAK,CAACY,EAAKf,IACzC,CAOMqB,qBAAqBtB,GAC1B,MAAMD,EAAOpB,KAAK4B,kBAAkBP,GAGpC,IAAKD,EACH,OAIF,IAAIO,EAAS3B,KAAKwC,wBAAwBnB,GAK1CM,EAASA,EAAOE,UAAYF,EAG5BA,EAAOiB,OAAOjB,EAAOkB,QAAQzB,GAAO,GAGpCpB,KAAKW,yBAAyBc,MAAK,EACpC,CAQMqB,qBAAqBT,GAErBrC,KAAKsC,UAAUD,IAOpBrC,KAAKI,sBAAwBiC,EAE7BrC,KAAKK,qBAAqBoB,KAAKY,IAR7BN,QAAQC,KAAK,gCAAgCK,oCAShD,CAMMU,WAAWV,GAEXrC,KAAKsC,UAAUD,IAClBN,QAAQC,KAAK,gCAAgCK,4CAIxCrC,KAAKsC,UAAUD,GAEtBrC,KAAKQ,0BAA0BiB,KAAKY,EACrC,CAQMW,qBAAqB3B,EAAI4B,GAE9B,MAAMC,EAAiBlD,KAAK4B,kBAAkBP,IAGzC6B,OAKLC,KAAMD,EAAgBD,GAGtBjD,KAAKU,yBAAyBe,MAAK,GACpC,+CArXU3B,EAAqB,4BAArBA,EAAqBsD,QAArBtD,EAAqB,qBAFpB,SAEDA,CAAb,mECFO,IAAMuD,EAAb,MAAM,MAAOA,EAHbtD,cAKUC,eAAqD,EAoD9D,CA5CQsD,WAAWjB,GAEhB,GAAKrC,KAAKsC,UAAUD,GAOpB,OAAOrC,KAAKsC,UAAUD,GANpBN,QAAQC,KAAK,6BAA6BK,oCAO7C,CAQMI,SAASJ,EAAKkB,GAEfvD,KAAKsC,UAAUD,GACjBN,QAAQW,MAAM,6BAA6BL,sEAM7CrC,KAAKsC,UAAUD,GAAOkB,CACvB,CAOMR,WAAWV,GAEXrC,KAAKsC,UAAUD,IAClBN,QAAQC,KAAK,6BAA6BK,4CAIrCrC,KAAKsC,UAAUD,EACvB,+CArDUgB,EAAkB,4BAAlBA,EAAkBD,QAAlBC,EAAkB,qBAFjB,SAEDA,CAAb,8ECKO,IAAMG,EAAb,MAAM,MAAOA,EAMXzD,YAA2B0D,2BAAuC,CAW3DC,oBAAoBC,GACT,IAAIA,GAEZC,QAASC,IAGf7D,KAAKyD,kBAAkBK,eAAeD,EAAOE,KAAMF,EAAOG,MAAM,EAAhE,EAEH,+CAzBUR,GAA4BS,wCAA5BT,EAA4BJ,QAA5BI,EAA4B,qBAF3B,SAEDA,CAAb,oDCVM,MAAOU,EACJC,UAAU9B,GACf,OAAO+B,mBAAmB/B,EAC3B,CAEMgC,YAAYC,GACjB,OAAOF,mBAAmBE,EAC3B,CAEMC,UAAUlC,GACf,OAAOmC,mBAAmBnC,EAC3B,CAEMoC,YAAYH,GACjB,OAAOE,mBAAmBF,EAC3B,EAfgC,mOCoB5B,IAAMI,EAAb,MAAM,MAAOA,EAgCX3E,YACU4E,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,IARAnF,6BACAA,aACAA,4BACAA,sBACAA,qBACAA,eACAA,8BACAA,kCACAA,gCAlBFA,2BAAwB,IAAIoF,MAC5BpF,6BAA0B,IAAIoF,MAE9BpF,0BAAuB,IAAIM,KAAyB,GAEpDN,yCAAsC,IAAIM,KAAyB,GACnEN,8BAA2B,IAAIM,KAAyB,GACxDN,4BAAyB,IAAIqF,IAanCF,GAAwBG,YAActF,KACtCkF,GAA0BI,YAActF,KAIxCA,KAAK+E,cAAcQ,OAAOC,UAAWC,KAC/BA,cAAiBC,KACnB3D,QAAQC,KAAKyD,IAEM,sBAAfA,GAAMtD,MACRJ,QAAQ4D,IAAIF,GAAZ,GAQNG,OAAOC,iBAAiB,UAAYJ,KAElC,GAAkB,iBAAdA,GAAMpD,KAA0BoD,GAAMpD,IACxC,OAGFN,QAAQC,KAAK,4FACb,MAAM8D,GAAgC9F,KAAK+E,cAAcgB,sBACzD/F,KAAKgG,yBAAyBvE,KAAKqE,IACnC9F,KAAKiG,oCAAoCxE,KAAKzB,KAAKkG,+BAE9CJ,IACH9F,KAAKmG,OAAL,GAIJnG,KAAK+E,cAAcQ,OAAOC,UAAU,KAClCxF,KAAKgG,yBAAyBvE,KAAKzB,KAAK+E,cAAcgB,uBACtD/F,KAAKiG,oCAAoCxE,KAAKzB,KAAKkG,8BAAnD,GAGFlG,KAAK+E,cAAcQ,OAChBa,QAAKC,KAAQC,IAAM,CAAC,kBAAkBC,SAASD,GAAEnE,QACjDqD,UAAU,IAAMxF,KAAK+E,cAAcyB,mBAEtCxG,KAAK+E,cAAcQ,OAAOa,QAAKC,KAAQC,IAAM,CAAC,qBAAsB,iBAAiBC,SAASD,GAAEnE,QAAQqD,UAAU,IAAMxF,KAAKyG,UAE7HzG,KAAK+E,cAAc2B,8BAEnB1G,KAAK2G,oBAAsB3G,KAAK4G,qBAAqB/F,eACrDb,KAAK6G,4BAA8B7G,KAAKiG,oCAAoCpF,eAC5Eb,KAAK8G,iBAAmB9G,KAAKgG,yBAAyBnF,eACtDb,KAAK+G,eAAiB/G,KAAKgH,uBAAuBnG,eAClDb,KAAKiH,+BAA8BC,MAAc,CAAClH,KAAK8G,iBAAkB9G,KAAK+G,iBAAiBX,QAC7Fe,KAAKC,IAAWA,GAAOC,MAAOC,IAAMA,KAEvC,CAEUC,kBACT,OAAOvH,KAAK+E,cAAcyC,gBAC3B,CAEUC,wBACT,MAAMF,EAAcvH,KAAK+E,cAAcyC,iBAEvC,IAAKD,EACH,OAAO,KAGT,MAAMG,EAAuBH,EAAYI,MAAM,KAAK,GAC9CC,EAAiBhC,OAAOiC,KAAKH,GAGnC,OAFgBI,KAAKC,MAAMH,EAG5B,CAEUI,2BACT,OAAOhI,KAAKiI,qBACb,CAEUC,6BACT,OAAOlI,KAAKmI,uBACb,CAEUC,WACT,OAAOpI,KAAKqI,KACb,CAEUD,SAAK9D,GACdtE,KAAKqI,MAAQ/D,EAETtE,KAAKqI,MACPrI,KAAKiF,uBAAuBqD,MAAM5D,EAAY6D,WAAYvI,KAAKqI,OAE/DrI,KAAKiF,uBAAuBuD,WAAW9D,EAAY6D,WAEtD,CAEUE,qBACT,OAAOzI,KAAK+E,cAAc2D,mBAC3B,CAEUC,4BACT,OAAO3I,KAAK4I,sBACb,CAEUC,cACT,OAAO7I,KAAK+E,cAAc+D,YAC3B,CAEUC,iCACT,MAAMC,EAAShJ,KAAKkG,8BACpB,YAAKD,oCAAoCxE,KAAKuH,GACvCA,CACR,CAEUC,8BACT,OAAOjJ,KAAKkJ,UAAU,UAAYlJ,KAAKkJ,UAAU,aAClD,CAMUC,sBACT,MAAMrD,EAAuB9F,KAAK+E,cAAcgB,sBAChD,YAAKC,yBAAyBvE,KAAKqE,GAC5BA,CACR,CAEUsD,uBACT,OAAOpJ,KAAKkJ,UAAU,aACvB,CAEUG,gBACT,OAAOrJ,KAAK+E,cAAcsE,SAC3B,CAEUC,WACT,MAAMC,EAASvJ,KAAK+E,cAAc2D,oBAClC,OAAKa,EAIEA,EAAOC,mBAHL,IAIV,CAEUC,YACT,OAAKzJ,KAAKyH,kBAIHzH,KAAKyH,kBAAkBiC,KAHrB,IAIV,CAEUC,eACT,OAAK3J,KAAKyH,kBAIHzH,KAAKyH,kBAAkBmC,UAHrB,IAIV,CAEMC,sBAAsBC,EAAuB,MAClD,YAAK1B,KAAO2B,aAEPD,IACHA,EAAe9J,KAAKgK,yCAEtBhK,KAAKmF,wBAAwB8E,WAAaH,EAE1C9J,KAAKiF,uBAAuBqD,MAAM5D,EAAY6D,WAAYT,KAAKoC,UAAUH,eACzE/J,KAAKiF,uBAAuBqD,MAAM5D,EAAYyF,oBAAqBL,GACnE9J,KAAKiF,uBAAuBuD,WAAW9D,EAAY0F,uBAEnDpK,KAAK6E,qBAAqByD,MAAM5D,EAAY6D,WAAYT,KAAKoC,UAAUH,eACvE/J,KAAK6E,qBAAqByD,MAAM5D,EAAYyF,oBAAqBL,GACjE9J,KAAK6E,qBAAqB2D,WAAW9D,EAAY0F,uBAE1CpK,KAAKqK,yBAAyBP,EACtC,CAEMQ,wBAAwBC,EAAyB,MACtD,YAAKnC,KAAO2B,eAEPQ,IACHA,EAAiBvK,KAAKwK,2CAExBxK,KAAKkF,0BAA0B+E,WAAaM,EAE5CvK,KAAKiF,uBAAuBqD,MAAM5D,EAAY0F,sBAAuBG,GACrEvK,KAAKiF,uBAAuBuD,WAAW9D,EAAYyF,qBACnDnK,KAAKiF,uBAAuBqD,MAAM5D,EAAY6D,WAAYT,KAAKoC,UAAUH,iBAEzE/J,KAAK6E,qBAAqByD,MAAM5D,EAAY6D,WAAYT,KAAKoC,UAAUH,iBACvE/J,KAAK6E,qBAAqByD,MAAM5D,EAAY0F,sBAAuBG,GACnEvK,KAAK6E,qBAAqB2D,WAAW9D,EAAYyF,qBAE1CnK,KAAKyK,2BAA2BF,EACxC,CAEMG,oBACL,OAAO,IAAIC,QAAc,CAACC,EAASC,KAEjC7K,KAAK8E,eAAegG,4BAGpB9K,KAAK4E,MAAMmG,IAFO,GAAG/K,KAAK2E,sBAAsBqG,4DAEtBxF,UAAU,CAElC/D,KAAOwJ,IACLjL,KAAKiI,sBAAwBgD,EAAyBjD,qBACtDhI,KAAKmI,wBAA0B8C,EAAyB/C,uBACxD0C,GAAO,EAETlI,MAAQA,IAENX,QAAQW,MAAM,uEAAwEA,GACtFmI,EAAOnI,EAAD,GAVV,EAcH,CAEM2H,yBAAyBP,EAAuB,MACrD,OAAKA,IACHA,EAAe9J,KAAKkL,oCAEf,IAAIP,QAAeQ,IACpBrB,GACF9J,KAAK8E,eAAegG,4BACpB9K,KAAKmF,wBAAwBiG,QAAQtB,GAActE,UAAW6F,IAC5DrL,KAAKmF,wBAAwBmG,aAAeD,EAA2BE,SAASC,KAChFxL,KAAKmF,wBAAwBsG,kBAAoBJ,EAA2BE,SAASE,kBACrFzL,KAAKmF,wBAAwBuG,kBAAoBL,EAA2BE,SAASG,kBACrF1L,KAAKmF,wBAAwBwG,mBAAqBN,EAA2BE,SAASI,mBACtF3L,KAAKmF,wBAAwByG,aAAeP,EAA2BE,SAASjC,KAChFtJ,KAAKmF,wBAAwB8E,WAAaoB,EAA2BE,SAASM,KAC9E7L,KAAKkF,0BAA0B4G,eAAiBT,EAA2BE,SAASO,eACpF9L,KAAKkF,0BAA0B6G,uBAAyBV,EAA2BE,SAASS,aAC5FhM,KAAKkF,0BAA0B+G,eAAiBZ,EAA2BE,SAASU,eACpFjM,KAAKkF,0BAA0BgH,8BAAgCb,EAA2BE,SAASY,oBACnGnM,KAAKkF,0BAA0BkH,yBAA2Bf,EAA2BE,SAASc,eAC9FrM,KAAKkF,0BAA0B+E,WAAaoB,EAA2BE,SAAShB,eAEhFvK,KAAK4G,qBAAqBnF,MAAK,GAC/B0J,GAAe,IAGjBA,GAAe,EAGpB,CAEMV,2BAA2BF,EAAyB,MACzD,OAAKA,IACHA,EAAiBvK,KAAKsM,sCAEjB,IAAI3B,QAAeQ,IACpBZ,GACFvK,KAAK8E,eAAegG,4BACpB9K,KAAKkF,0BAA0BkG,QAAQb,GAAgB/E,UAAW+G,IAChEvM,KAAKkF,0BAA0BsH,eAAiBD,EAA6BC,eAC7ExM,KAAKkF,0BAA0B4G,eAAiBS,EAA6BE,WAAWjB,KACxFxL,KAAKkF,0BAA0B6G,uBAAyBQ,EAA6BE,WAAWT,aAChGhM,KAAKkF,0BAA0B+G,eAAiBM,EAA6BE,WAAWnD,KACxFtJ,KAAKkF,0BAA0BgH,8BAAgCK,EAA6BE,WAAWN,oBACvGnM,KAAKkF,0BAA0BkH,yBAA2BG,EAA6BE,WAAWJ,eAClGrM,KAAKkF,0BAA0B+E,WAAasC,EAA6BE,WAAWZ,KAEpF7L,KAAK4G,qBAAqBnF,MAAK,GAC/B0J,GAAe,IAGjBA,GAAe,EAGpB,CAEMuB,WAAW/D,GAChB3I,KAAK4I,uBAAyBD,EAC9B3I,KAAK+E,cAAc4H,UAAU,CAE3BC,qBAAqB,EACrBC,SAAU,YACVC,OAAQ9M,KAAK4I,uBACbmE,oBAAqB,YACrBC,YAAapH,OAAOqH,SAASC,OAC7BC,cAAc,EACdC,aAAc,OAGdC,sBAAsB,EACtBC,sBAAsB,EACtBC,MAAO,iCACPC,yBAA0B5H,OAAOqH,SAASC,OAAS,kDACnDO,kBAAkB,GAErB,CAEMtH,MAAMuH,GAGX1N,KAAK+E,cAAc4I,cAAcD,GAAa1N,KAAKgF,QAAQ5C,IAC5D,CAEMqE,SACLzG,KAAK+E,cAAc6I,QACpB,CAEMC,UACL,OAAO7N,KAAK+E,cAAc+I,eAC3B,CAEMC,0BACL,OAAId,SAASe,OACXjM,QAAQ4D,IAAI,mDACZ5D,QAAQkM,MACNhB,SAASe,KACNE,OAAO,GACPvG,MAAM,KACNR,IAAKgH,GAAQA,EAAIxG,MAAM,QAQ5B3H,KAAK+E,cACFqJ,wBAKAC,KAAK,IAAMrO,KAAK+E,cAAcuJ,YAE9BD,KAAK,IACArO,KAAK+E,cAAcgB,sBACd4E,QAAQC,UAOV5K,KAAK+E,cACT+I,gBACAO,KAAK,IAAM1D,QAAQC,WACnB2D,MAAOvF,GASFA,GAAQwF,QAAQrM,MAPc,CAChC,uBACA,yBACA,yBACA,0BAGoDoE,SAASyC,EAAOwF,OAAOrM,OAC3EJ,QAAQC,KACN,qHAEK2I,QAAQC,WAab5B,GAAUA,EAAOwF,QAP0B,CAC7C,uBACA,iBACA,6BACA,oBAGoE3L,QAAQmG,EAAOwF,OAAO9L,QAAU,GAUpGX,QAAQC,KAAK,uFACN2I,QAAQC,WAKVD,QAAQE,OAAO7B,KAI3BqF,KAAK,IAAMrO,KAAK0K,qBAEhB2D,KAAK,KAEJ,GADArO,KAAKmF,wBAAwB8D,wBAA0BjJ,KAAKiJ,wBACxDjJ,KAAKiJ,wBACP,YAAKb,KAAO2B,UACZ/J,KAAKyO,2BACE9D,QAAQC,UACV,CACL,MAAM8D,EAAoD1O,KAAK2O,6CAE/D,OAAID,EAActG,OAAS2B,eAClB/J,KAAKsK,wBAAwBoE,EAAczE,YAAYoE,KAAK,KACjErO,KAAKyO,0BAAL,GAEOC,EAActG,OAAS2B,aACzB/J,KAAK6J,sBAAsB6E,EAAczE,YAAYoE,KAAK,KAC/DrO,KAAKyO,0BAAL,IAGFzO,KAAKoI,KAAO2B,WACZ/J,KAAKyO,2BACE9D,QAAQC,UAElB,IAEF2D,MAAO7L,IACN1C,KAAKgH,uBAAuBvF,MAAK,GACjCM,QAAQC,KAAK,oCAAqCU,EAAlD,EAGP,CAEMkM,wBACL5O,KAAK4G,qBAAqBnF,MAAK,EAChC,CAEOgN,2BAIN,GAAIzO,KAAK+E,cAAc9F,OAAsC,cAA7Be,KAAK+E,cAAc9F,OAAsD,SAA7Be,KAAK+E,cAAc9F,MAAkB,CAC/G,IAAI4P,EAAW7O,KAAK+E,cAAc9F,OACD,IAA7B4P,EAASC,WAAW,OACtBD,EAAWzK,mBAAmByK,IAEhC9M,QAAQ4D,IAAI,sBAAsB3F,KAAK+E,cAAc9F,oCAAoC4P,KACzF7O,KAAKgF,QAAQ+J,cAAcF,EAC5B,CAED7O,KAAKgH,uBAAuBvF,MAAK,EAClC,CAEOuN,2BACN,MAAMC,EAAuBjP,KAAK6E,qBAAqBqK,WAAWxK,EAAY6D,YAE9E,KAAMvI,KAAKkI,wBAAwBiH,OAAS,GAAKnP,KAAKgI,sBAAsBmH,OAAS,GACnF,MAAO,CAAE/G,KAAM2B,WAAaE,WAAY,MAG1C,GAAIgF,IAAyBlF,eAC3B,IAAI/J,KAAKkI,wBAAwBiH,OAAS,EAAG,CAC3C,MAAMC,EAAmCpP,KAAK6E,qBAAqBwK,KAAK3K,EAAY0F,uBACpF,OAA8E,IAA1EpK,KAAKkI,uBAAuBrF,QAAQuM,GAC/B,CAAEhH,KAAM2B,eAAiBE,WAAYmF,GAErC,CAAEhH,KAAM2B,eAAiBE,WAAY,KAE/C,CACC,MAAO,CAAE7B,KAAM2B,aAAeE,WAAY,KAAnC,IAEAgF,IAAyBlF,aAClC,IAAI/J,KAAKgI,sBAAsBmH,OAAS,EAAG,CACzC,MAAMG,EAAiCtP,KAAK6E,qBAAqBwK,KAAK3K,EAAYyF,qBAClF,OAA0E,IAAtEnK,KAAKgI,qBAAqBnF,QAAQyM,GAC7B,CAAElH,KAAM2B,aAAeE,WAAYqF,GAEnC,CAAElH,KAAM2B,aAAeE,WAAY,KAE7C,CACC,MAAO,CAAE7B,KAAM2B,eAAiBE,WAAY,KAArC,CAGT,OAAIjK,KAAKkI,wBAAwBiH,OAAS,EACjC,CAAE/G,KAAM2B,eAAiBE,WAAY,MAErC,CAAE7B,KAAM2B,aAAeE,WAAY,KAG/C,CAEO0E,6CACN,MAAMY,EAAyBvP,KAAKiF,uBAAuBiK,WAAWxK,EAAY6D,YAElF,KAAMvI,KAAKkI,wBAAwBiH,OAAS,GAAKnP,KAAKgI,sBAAsBmH,OAAS,GACnF,MAAO,CAAE/G,KAAM2B,WAAaE,WAAY,MAG1C,GAAIsF,IAA2BxF,gBAC7B,GAAI/J,KAAKkI,wBAAwBiH,OAAS,EAAG,CAC3C,MAAMC,EAAmCpP,KAAKiF,uBAAuBoK,KAAK3K,EAAY0F,uBACtF,IAA8E,IAA1EpK,KAAKkI,uBAAuBrF,QAAQuM,GACtC,MAAO,CAAEhH,KAAM2B,eAAiBE,WAAYmF,EAE/C,UACQG,IAA2BxF,cAChC/J,KAAKgI,sBAAsBmH,OAAS,EAAG,CACzC,MAAMG,EAAiCtP,KAAKiF,uBAAuBoK,KAAK3K,EAAYyF,qBACpF,IAA0E,IAAtEnK,KAAKgI,qBAAqBnF,QAAQyM,GACpC,MAAO,CAAElH,KAAM2B,aAAeE,WAAYqF,EAE7C,CAGH,OAAOtP,KAAKgP,0BACb,CAEOhF,wCACN,MAAMwF,EAAsBxP,KAAKiF,uBAAuBoK,KAAK,yBAC7D,OAAIG,GACExP,KAAKgI,qBAAqBzB,SAASiJ,GAC9BA,EAKFxP,KAAKyP,uBAEf,CAEOvE,mCACN,MAAMsE,EAAsBxP,KAAKiF,uBAAuBoK,KAAK,yBAC7D,GAAIG,EACF,OAAOA,CAIV,CAEOhF,0CACN,MAAMkF,EAAwB1P,KAAKiF,uBAAuBoK,KAAK,2BAC/D,OAAIK,GACE1P,KAAKkI,uBAAuB3B,SAASmJ,GAChCA,EAKF1P,KAAK2P,yBAEf,CAEOrD,qCACN,MAAMoD,EAAwB1P,KAAKiF,uBAAuBoK,KAAK,2BAC/D,GAAIK,EACF,OAAOA,CAIV,CAEOD,wBACN,OAAIzP,KAAKgI,gCAAgC5C,OAASpF,KAAKgI,qBAAqBmH,OAAS,EAC5EnP,KAAKgI,qBAAqB,GAE1B,IAEV,CAEO2H,0BACN,OAAI3P,KAAKkI,kCAAkC9C,OAASpF,KAAKkI,uBAAuBiH,OAAS,EAChFnP,KAAKkI,uBAAuB,GAE5B,IAEV,CAEOhC,8BAKN,OAJ8BlG,KAAK+E,cAAc6K,2BACrCC,KAAKC,MAGL,GAKb,CAEO5G,UAAUQ,GAChB,IAAIqG,GAAW,EACf,OACEA,EADE3K,MAAM4K,QAAQhQ,KAAKyJ,OACVzJ,KAAKyJ,MAAMwG,KAAMC,GAAMA,IAAMxG,GAE7B1J,KAAKyJ,QAAUC,EAGrBqG,CACR,EAxnBarL,oBAAa,OACbA,sBAAsB,iBACtBA,wBAAwB,yDAH3BA,GAAWT,kIAAXS,EAAWtB,QAAXsB,EAAW,qBADE,SACbA,CAAb,kEChBO,IAAMyL,EAAb,MAAM,MAAOA,EAUAC,0BACT,OAAOpQ,KAAKqQ,oBACb,CAEUD,wBAAoBE,GAC7BtQ,KAAKqQ,qBAAuBC,CAC7B,CAEUC,0BACT,OAAOvQ,KAAKwQ,oBACb,CAEUD,wBAAoBE,GAC7BzQ,KAAKwQ,qBAAuBC,CAC7B,CAEUC,0BACT,OAAO1Q,KAAK2Q,oBACb,CAEUD,wBAAoBE,GAC7B5Q,KAAK2Q,qBAAuBC,CAC7B,CAEUC,0BACT,OAAO7Q,KAAK8Q,oBACb,CAEUD,wBAAoBE,GAC7B/Q,KAAK8Q,qBAAuBC,CAC7B,CAEUC,4BACT,OAAOhR,KAAK4I,sBACb,CAEUoI,0BAAsBrI,GAC/B3I,KAAK4I,uBAAyBD,CAC/B,CAEUqC,0BACT,OAAOhL,KAAKiR,oBACb,CAEUjG,wBAAoBkG,GAC7BlR,KAAKiR,qBAAuBC,CAC7B,CAEUC,kCACT,OAAOnR,KAAKoR,4BACb,CAEUD,gCAA4BE,GACrCrR,KAAKoR,6BAA+BC,CACrC,CAEUC,kCACT,OAAOtR,KAAKuR,4BACb,CAEUD,gCAA4BE,GACrCxR,KAAKuR,6BAA+BC,CACrC,+CAxEUrB,EAAoB,4BAApBA,EAAoB/M,QAApB+M,EAAoB,qBAFnB,SAEDA,CAAb,mGCOO,IAAMsB,EAAb,MAAM,MAAOA,kDAAiB,0BAAjBA,gCAHDC,KAAcC,KAAeC,QAG5BH,CAAb,8ECLO,IAAMI,EAAb,MAAM,MAAOA,EAHb9R,cAISC,6BAAyB,EAEzBA,0BAA4C,IAAIE,KAEhDF,0BAAoF,IAAIE,IAIhG,+CATY2R,EAAkB,4BAAlBA,EAAkBzO,QAAlByO,EAAkB,qBAFjB,SAEDA,CAAb,8ECDO,IAAMC,EAAb,MAAM,MAAOA,EACX/R,YAA2BgS,gBAAiB,CAErCC,SAASC,GACdjS,KAAK+R,OAAOC,SAASC,EAAa,qBACnC,+CALUH,GAAgB7N,wCAAhB6N,EAAgB1O,QAAhB0O,EAAgB,qBAFf,SAEDA,CAAb,6ECEM,MAAgBI,UAIZC,IACRpS,YAA6BqS,EAAmCC,EAAqCC,GACnGC,MAAMH,EAAaC,EAAaC,GADLtS,mBAAmCA,mBAAqCA,cAEpG,CAEMwS,SAASC,GACd,OAAOzS,KAAKoS,YAAYM,KAAa,GAAG1S,KAAK2S,kBAAmB7K,KAAKoC,UAAUuI,GAChF,CAEMG,YAAY/G,EAAcgH,GAC/B,OAAO7S,KAAKoS,YAAYU,IAAY,GAAG9S,KAAK2S,aAAa9G,UAAc/D,KAAKoC,UAAU2I,GACvF,CAESE,QAAQlH,GAChB,OAAO7L,KAAKoS,YAAYY,OAAY,GAAGhT,KAAK2S,aAAa9G,IAC1D,CAESoH,kBAAkBC,GAC1B,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KAA8B,GAAG1S,KAAK2S,6BAA8B7K,KAAKoC,UAAUiJ,GAC5G,EApB4D,gOCPvDlP,gBAA2BA,SAAmBA,8BAAnBA,iEAEzBA,mBAAkDA,SAAsBA,+BAAtBA,qEAClDA,mBAAkDA,SAAsBA,+BAAtBA,qEAFpDA,kBACEA,yBACAA,yBACFA,8BAFSA,yCACAA,mFAETA,uBAAuBA,oEAAoBA,kCAAyB,GAA8BA,gCAA5BA,0ECGvE,IAAMoP,EAAb,MAAM,MAAOA,EAmBXtT,YAA2BuT,wBAlBVtT,iBAAc,IAAIuT,MAEnBvT,kCAA8B,EAC9BA,wCAAoC,EACnCA,gBAAa,IAAIuT,MACjBvT,kBAAe,IAAIuT,KAasB,CAEnDC,0BACLxT,KAAKyT,WAAWC,MACjB,CAEMC,cACL3T,KAAK4T,UACN,CAEMC,yBACL7T,KAAK8T,YAAYJ,MAClB,CAEMK,0BACL/T,KAAKgU,aAAaN,MACnB,CAEME,WACD5T,KAAKiU,6BACPjU,KAAKsT,cAAcY,yBAAyB,KACtClU,KAAKmU,kCACPnU,KAAKoU,gBAAgBC,QAErBrU,KAAKsU,eAAeD,OAApB,EAIP,+CA/CUhB,GAAyCpP,qCAAzCoP,EAAyCkB,gyCDbtDtQ,iBAA4B,WAA5BA,CAA4B,yBAA5BA,CAA4B,UAA5BA,CAA4B,UAIdA,SAAkBA,QACxBA,wBACAA,uBAIAA,4BACAA,SACFA,UAEFA,+BAAoB,iBACiBA,gCAASuQ,2BAAyB,GAAkBvQ,UAAkBA,QACzGA,wBAGEA,gCAASuQ,0BAAwB,GAKjCvQ,UACFA,qBAxBEA,wCAGMA,+BACCA,sCACDA,4DAIKA,8BAK0EA,+BAKrFA,6CAIAA,kYCXKoP,CAAb,KCCaoB,EAAb,MAAM,MAAOA,EAIX1U,YACS2U,EAC0BC,GAD1B3U,iBAC0BA,aAEjCA,KAAKgE,KAAO2Q,EACP3U,KAAK2U,MAAMC,cACd5U,KAAKgE,KAAK4Q,YAAc,OAErB5U,KAAK2U,MAAME,eACd7U,KAAKgE,KAAK6Q,aAAe,OAE3B7U,KAAK8U,YAAYH,EAClB,CAEMd,yBACD7T,KAAK2U,MAAMI,mBACb/U,KAAK2U,MAAMI,kBAAkB/U,KAAKgV,UAAUC,UAAUC,eAAe5Q,OAEvEtE,KAAK0U,UAAUS,OAAM,EACtB,CAEMC,wBACLpV,KAAK0U,UAAUS,OAAM,EACtB,CAEMpB,0BACD/T,KAAK2U,MAAMU,WACbrV,KAAK2U,MAAMU,YAEbrV,KAAK0U,UAAUS,OAAM,EACtB,CAEOL,YAAYQ,GAClBtV,KAAKgV,UAAY,IAAIO,KAAmC,CACtDC,QAAS,IAAIC,KAA0BH,EAAcE,SACrDN,cAAe,IAAIO,KAAwBH,EAAcJ,gBAE5D,+CAzCUT,GAAsCxQ,kBAMvCyR,MAAe,0BANdjB,EAAsCF,2dCdnDtQ,qDACEA,uCAAgBuQ,2BAAyB,EAAzCvQ,CAA0C,gCAC3BuQ,0BAAwB,EADvCvQ,CAA0C,+BAE5BuQ,yBAAuB,GAYrCvQ,iBAAgB,YAEZA,uBAOFA,mBApBFA,wCAAgC,6EAAhCA,CAAgC,mCAAhCA,CAAgC,wBAAhCA,CAAgC,sCAAhCA,CAAgC,mCAAhCA,CAAgC,mCAAhCA,CAAgC,mBAAhCA,CAAgC,yCAAhCA,CAAgC,0CAYxBA,wCAEFA,sEAAqD,yJAArDA,CAAqD,qVDJhDwQ,CAAb,KEXO,MAAMkB,EAAkDX,GACxDA,EAAUC,SAASW,gBAInBZ,EAAUC,SAASW,gBAAgBtR,MAIjC,KAHE,CAAEuR,uBAAwB,CAAEvR,MAAO,OAJnC,8CCgBCL,kBAA+DA,SAAyBA,+BAAzBA,iEAJrEA,iBAAiD,uBAAjDA,CAAiD,UAAjDA,CAAiD,UAGrCA,SAAsBA,QAC5BA,wBACFA,kCAFQA,mCACCA,8CCRZ,IAAM6R,EAAb,MAAM,MAAOA,EAIX/V,YACS2U,EAC0BC,GAD1B3U,iBAC0BA,aAEjCA,KAAKgE,KAAO2Q,EACP3U,KAAK2U,MAAMC,cACd5U,KAAKgE,KAAK4Q,YAAc,OAErB5U,KAAK2U,MAAME,eACd7U,KAAKgE,KAAK6Q,aAAe,OAE3B7U,KAAK8U,YAAYH,EAClB,CAEMd,yBACD7T,KAAK2U,MAAMoB,UACb/V,KAAK2U,MAAMoB,WAET/V,KAAK2U,MAAMqB,oBACbhW,KAAK2U,MAAMqB,mBAAmBhW,KAAKgV,UAAUiB,eAE/CjW,KAAK0U,UAAUS,OAAM,EACtB,CAEMC,wBACLpV,KAAK0U,UAAUS,OAAM,EACtB,CAEMpB,0BACD/T,KAAK2U,MAAMU,WACbrV,KAAK2U,MAAMU,YAEbrV,KAAK0U,UAAUS,OAAM,EACtB,CAEOL,YAAYQ,GAClB,MAAMY,EAAsB,GACxBZ,EAAca,uBAChBD,EAAoB1U,KAAKmU,GAG3B3V,KAAKgV,UAAY,IAAIO,KACnB,CACEK,gBAAiB,IAAIH,KAAqBH,EAAcM,kBAE1D,CACEQ,WAAYF,GAGjB,+CArDUJ,GAAiC7R,kBAMlCyR,MAAe,0BANdI,EAAiCvB,ojBDb9CtQ,qDACEA,uCAAgBuQ,2BAAyB,EAAzCvQ,CAA0C,gCAC3BuQ,0BAAwB,EADvCvQ,CAA0C,+BAE5BuQ,yBAAuB,GAYrCvQ,iBAAgB,YAEZA,uBAQFA,mBArBFA,wCAAgC,6EAAhCA,CAAgC,mCAAhCA,CAAgC,wBAAhCA,CAAgC,sCAAhCA,CAAgC,mCAAhCA,CAAgC,mCAAhCA,CAAgC,mBAAhCA,CAAgC,yCAAhCA,CAAgC,0CAYxBA,wCACEA,sYCJC6R,CAAb,gCCAO,IAAMO,GAAb,MAAM,MAAOA,EAKXtW,YACS2U,EAC0BC,EACzB2B,GAFDtW,iBAC0BA,aACzBA,kBAERA,KAAKgE,KAAO2Q,EACP3U,KAAK2U,MAAMC,cACd5U,KAAKgE,KAAK4Q,YAAc,OAErB5U,KAAK2U,MAAME,eACd7U,KAAKgE,KAAK6Q,aAAe,OAG3B7U,KAAKuW,YAAcD,EAAWE,wBAAwBxW,KAAKgE,KAAKyS,aAEhEzW,KAAK8U,aACN,CAEMjB,yBACD7T,KAAK2U,MAAMoB,UACb/V,KAAK2U,MAAMoB,WAEb/V,KAAK0U,UAAUS,OAAM,EACtB,CAEMC,wBACLpV,KAAK0U,UAAUS,OAAM,EACtB,CAEMpB,0BACD/T,KAAK2U,MAAMU,WACbrV,KAAK2U,MAAMU,YAEbrV,KAAK0U,UAAUS,OAAM,EACtB,CAEOL,cACN9U,KAAKgV,UAAY,IAAIO,KAA6C,GACnE,+CA3CUc,GAA4CpS,kBAO7CyR,MAAezR,sCAPdoS,EAA4C9B,8gBCbzDtQ,qDACEA,uCAAgBuQ,2BAAyB,EAAzCvQ,CAA0C,gCAC3BuQ,0BAAwB,EADvCvQ,CAA0C,+BAE5BuQ,yBAAuB,GAWrCvQ,iBAAgB,WAAhBA,CAAgB,UAAhBA,CAAgB,gBAGyBA,gBAAIA,QACvCA,iBACFA,qBAfJA,wCAAgC,6EAAhCA,CAAgC,mCAAhCA,CAAgC,wBAAhCA,CAAgC,mCAAhCA,CAAgC,mCAAhCA,CAAgC,mBAAhCA,CAAgC,yCAAhCA,CAAgC,0CAWxBA,wCAG+BA,qaDL5BoS,CAAb,yDEAO,IAAMK,EAAb,MAAM,MAAOA,EAIX3W,YACS2U,EAC0BC,GAD1B3U,iBAC0BA,aAEjCA,KAAKgE,KAAO2Q,EACP3U,KAAK2U,MAAMC,cACd5U,KAAKgE,KAAK4Q,YAAc,OAErB5U,KAAK2U,MAAME,eACd7U,KAAKgE,KAAK6Q,aAAe,OAE3B7U,KAAK8U,YAAYH,EAClB,CAEMd,yBACD7T,KAAK2U,MAAMoB,UACb/V,KAAK2U,MAAMoB,SAAS/V,KAAKgV,UAAUC,UAAU0B,SAASrS,OAExDtE,KAAK0U,UAAUS,OAAM,EACtB,CAEMpB,0BACD/T,KAAK2U,MAAMU,WACbrV,KAAK2U,MAAMU,YAEbrV,KAAK0U,UAAUS,OAAM,EACtB,CAEOL,YAAYQ,GAClBtV,KAAKgV,UAAY,IAAIO,KAAyC,CAC5DoB,QAAS,IAAIlB,KAAoBH,EAAcqB,UAElD,+CApCUD,GAAwCzS,kBAMzCyR,MAAe,0BANdgB,EAAwCnC,2gBCbrDtQ,qDACEA,uCAAgBuQ,2BAAyB,EAAzCvQ,CAA0C,gCAC3BuQ,0BAAwB,GAUvCvQ,iBAAgB,WAAhBA,CAAgB,sBAGVA,sBAWFA,qBAvBJA,wCAAgC,mCAAhCA,CAAgC,wBAAhCA,CAAgC,sCAAhCA,CAAgC,mCAAhCA,CAAgC,mCAAhCA,CAAgC,yCAAhCA,CAAgC,0CAUxBA,wCAGAA,0NDHGyS,CAAb,8CEIQzS,qBAAuEA,SAAoCA,8BAApCA,gFACvEA,qBAAkEA,sCAAoBA,iCACtFA,qBAAkEA,sCAAoBA,oCACtFA,qBAAsEA,SAAmCA,8BAAnCA,uDCNvE,IAAM2S,GAAb,MAAM,MAAOA,EAIX7W,YACS2U,EAC0BC,GAD1B3U,iBAC0BA,aAEjCA,KAAKgE,KAAO2Q,EACP3U,KAAK2U,MAAMC,cACd5U,KAAKgE,KAAK4Q,YAAc,OAErB5U,KAAK2U,MAAME,eACd7U,KAAKgE,KAAK6Q,aAAe,OAEtB7U,KAAK2U,MAAMkC,0BACd7W,KAAKgE,KAAK6S,wBAA0B,qBAEjC7W,KAAK2U,MAAMmC,oBACd9W,KAAKgE,KAAK8S,kBAAoB,oBAE3B9W,KAAK2U,MAAMoC,2BACd/W,KAAKgE,KAAK+S,yBAA2B,oBAEvC/W,KAAK8U,YAAYH,EAClB,CAEMd,yBACD7T,KAAK2U,MAAMoB,UACb/V,KAAK2U,MAAMoB,SAAS/V,KAAKgV,UAAUC,UAAU+B,aAAa1S,OAE5DtE,KAAK0U,UAAUS,OAAM,EACtB,CAEMpB,0BACD/T,KAAK2U,MAAMU,WACbrV,KAAK2U,MAAMU,YAEbrV,KAAK0U,UAAUS,OAAM,EACtB,CAEOL,YAAYQ,GAClBtV,KAAKgV,UAAY,IAAIO,KAAwC,CAC3DyB,YAAa,IAAIvB,KAAoBH,EAAc0B,YAAa,CAC9DC,SAAeC,mBACfD,SAAeC,mBACfD,aAAmB,gCAErBH,kBAAmB,IAAIrB,KAAoBH,EAAcwB,oBAE5D,+CAlDUF,GAAuC3S,kBAMxCyR,MAAe,0BANdkB,EAAuCrC,mfDdpDtQ,qDACEA,uCAAgBuQ,2BAAyB,EAAzCvQ,CAA0C,gCAC3BuQ,0BAAwB,GAWvCvQ,iBAA6B,WAA7BA,CAA6B,sBAGvBA,mBACAA,8BACAA,8BACAA,8BACAA,8BACFA,qBAlBJA,wCAAgC,iEAAhCA,CAAgC,mCAAhCA,CAAgC,wBAAhCA,CAAgC,sCAAhCA,CAAgC,mCAAhCA,CAAgC,mCAAhCA,CAAgC,yCAAhCA,CAAgC,0CAWxBA,wCAEKA,uDACKA,6EACAA,wEACAA,wEACAA,8PCNP2S,CAAb,KCKaO,GAAb,MAAM,MAAOA,EACXpX,YAA2BqX,iBAAsB,CAE1CC,iBACLzC,cAAc,MACdT,qCAAoC,EACpCU,eAAe,MACfyC,aAAcA,GACAC,eAAe,KAC7BC,QAAO,KACGzB,YAAW,KACVV,aAAY,SACNoC,mBAAkB,KAClBC,mBAAkB,OAqCnC,OALkB1X,KAAKoX,QAAQO,KAAK7B,EAAmC,CACrE9R,KApB+B,CAC/B4Q,YAAaA,EACbX,6BAA6B,EAC7BE,kCAAmCA,EACnCU,aAAcA,EACdyC,aAAcA,GACdC,aAAcA,EACdC,KAAMA,GACNzB,SAAUA,GACVC,wBAAoB4B,EACpBvC,UAAWA,GACXwC,iBAAaD,EACbE,oBAAgBF,EAChBG,YAAY,EACZnC,qBAAiBgC,EACjBzB,uBAAuB,EACvBsB,gBAAiBA,GACjBC,gBAAiBA,IAIjBM,WAAW,GAId,CAEMC,0BACLrD,cAAc,UACdT,qCAAoC,EACpC+D,mBAAmB,KACnBrD,gBAAe,UACfyC,aAAcA,EACAC,gBAAe,KAC7BC,QAAO,KACPzC,qBACAM,aAAY,KACZG,QAASA,GACTN,iBAAgB,KACCuC,kBAAkB,KAClBC,mBAAkB,OAqCnC,OALkB1X,KAAKoX,QAAQO,KAAKlD,EAAwC,CAC1EzQ,KAjBoC,CACpC4Q,YAAaA,EACbX,6BAA6B,EAC7BE,kCAAmCA,EACnC+D,iBAAkBA,EAClBrD,aAAcA,GACdyC,aAAcA,EACdC,aAAcA,GACdC,KAAMA,GACNzC,kBAAmBA,GACnBM,UAAWA,GACXG,QAASA,GACTN,cAAeA,GACfuC,gBAAiBA,EACjBC,gBAAiBA,IAIjBM,WAAW,GAId,CAEMG,gCACLvD,cAAc,MACdT,qCAAoC,EACpCU,eAAe,MACf4B,eAAc,GACda,aAAcA,EACAC,gBAAe,KAC7BC,QAAO,KACGzB,YAAW,KACVV,aAAY,SACNoC,mBAAkB,KAClBC,mBAAkB,OAiCnC,OALkB1X,KAAKoX,QAAQO,KAAKtB,GAA8C,CAChFrS,KAf0C,CAC1C4Q,YAAaA,EACbX,6BAA6B,EAC7BE,kCAAmCA,EACnCU,aAAcA,EACdyC,aAAcA,EACdC,aAAcA,GACdC,KAAMA,GACNzB,SAAUA,GACVV,UAAWA,GACXoC,gBAAiBA,GACjBC,gBAAiBA,GACjBjB,YAAaA,IAIbuB,WAAW,GAId,CAEMI,4BACLxD,cAAc,MACdT,qCAAoC,EACpCU,eAAe,MACf8B,WAAU,KACVW,aAAcA,EACAC,gBAAe,KACvBC,QAAO,KACbzB,YACWV,aAAY,KACvBoC,mBAAkB,KAClBC,mBAAkB,OAiClB,OALkB1X,KAAKoX,QAAQO,KAAKjB,EAA0C,CAC5E1S,KAfsC,CACtC4Q,YAAaA,EACbX,6BAA6B,EAC7BE,kCAAmCA,EACnCU,aAAcA,EACdyC,aAAcA,EACdC,aAAcA,GACdZ,QAASA,GACTa,KAAMA,GACNzB,SAAUA,GACVV,UAAWA,GACXoC,gBAAiBA,GACjBC,gBAAiBA,IAIjBM,WAAW,GAId,CAEMK,2BACLzD,cAAc,MACdC,eAAe,MACfyC,aAAcA,EACAC,gBAAe,KACvBC,OAAO,KACbX,2BAA0B,KAC1BC,qBAAoB,KACpBC,4BAA2B,KAC3BC,eAAc,EACdjB,YACWV,aAAY,KACvBoC,kBAAkB,KAClBC,mBAAkB,OAsClB,OALkB1X,KAAKoX,QAAQO,KAAKf,GAAyC,CAC3E5S,KAlBqC,CACrC4Q,YAAaA,EACbX,6BAA6B,EAC7BE,mCAAmC,EACnCU,aAAcA,EACdyC,aAAcA,EACdC,aAAcA,GACdC,KAAMA,EACNX,wBAAyBA,GACzBC,kBAAmBA,GACnBC,yBAA0BA,GAC1BC,YAAaA,GACbjB,SAAUA,GACVV,UAAWA,GACXoC,gBAAiBA,EACjBC,gBAAiBA,IAIjBM,WAAW,GAId,CAEMM,2BACL1D,cAAc,MACdC,eAAe,MACfV,qCAAoC,EACpCmD,aAAcA,GACAC,eAAe,KAC7BC,QAAO,KACPxB,sBACAX,aAAY,KACZ0C,eAAa,EACbF,eACAC,kBAAiB,KACjBlC,mBAAkB,EAClBO,0BAAwB,EACPsB,mBAAkB,KAClBC,mBAAkB,OA0CnC,OALkB1X,KAAKoX,QAAQO,KAAK7B,EAAmC,CACrE9R,KApB+B,CAC/B4Q,YAAaA,EACbX,6BAA6B,EAC7BE,kCAAmCA,EACnCU,aAAcA,EACdyC,aAAcA,GACdC,aAAcA,EACdxB,cAAU6B,EACV5B,mBAAoBA,GACpBX,UAAWA,GACXmC,KAAMA,GACNO,WAAYA,GACZF,YAAaA,GACbC,eAAgBA,GAChBlC,gBAAiBA,EACjBO,sBAAuBA,GACvBsB,gBAAiBA,GACjBC,gBAAiBA,IAIjBM,WAAW,GAId,+CAxTUb,GAAgBlT,wCAAhBkT,EAAgB/T,QAAhB+T,EAAgB,qBAFf,SAEDA,CAAb,mECdO,IAAMoB,EAAb,MAAM,MAAOA,EAIAC,+BACT,OAAOxY,KAAKyY,yBACb,CAEUD,6BAAyBA,GAClCxY,KAAKyY,0BAA4BD,CAClC,CAEUE,mBACT,OAAO1Y,KAAK2Y,aACb,CAEUD,iBAAaA,GAClBA,GACFE,SAASC,KAAKC,UAAUC,IAAI,kBAC5BH,SAASC,KAAK3a,MAAM8a,OAAS,SAE7BJ,SAASC,KAAKC,UAAUG,OAAO,kBAC/BL,SAASC,KAAK3a,MAAM8a,OAAS,SAG/BhZ,KAAK2Y,cAAgBD,CACtB,+CA1BUH,EAAkB,4BAAlBA,EAAkBnV,QAAlBmV,EAAkB,qBAFjB,SAEDA,CAAb,yFCGO,IAAMW,EAAb,MAAM,MAAOA,EAMXnZ,YAA6CoZ,EAAmBC,GAAnBpZ,iBAAmBA,eAFzDA,wBAAqB,IAAIE,IAEmD,CAE5EmZ,4BACL,OAAOrZ,KAAKsZ,mBAAmBzY,cAChC,CAEM0Y,qBAAqBC,EAAuBC,IAE/CP,EAAaQ,cAAc1Z,KAAK2Z,sBAAuBH,EAAOI,SAC1B,SAApChB,SAASiB,cAAcC,YAEvBN,EAAOO,iBACPN,EAAW7F,WAEd,CAGMM,yBAAyB8F,EAA4BC,EAAK,GAC/Dja,KAAKoZ,QAAQc,kBAAkB,KAC7BC,WAAW,KACTH,GAAc,EACbC,EAFO,EAIb,CAE2BG,qBAACC,EAAsBC,GACjD,KAAkB,OAAXA,GAAiB,CACtB,GAAIA,IAAWD,EACb,OAAO,EAEPC,EAASA,EAAOC,UAEnB,CAED,OAAO,CACR,CAEOZ,sBACN,OAAO3Z,KAAKmZ,UAAUqB,eAAe,oBACtC,+CA7CUtB,GAAYjV,MAMIwW,MAAQxW,yCANxBiV,EAAY9V,QAAZ8V,EAAY,qBAFX,SAEDA,CAAb,8ECDO,IAAMwB,EAAb,MAAM,MAAOA,EAIJC,aACL,SAAK3a,KAAK4a,kBAAkBC,OAAS7a,KAAK8a,cAIlC9a,KAAK+a,cAAc/a,KAAK4a,iBAAiBC,KAAK5E,cAAejW,KAAK8a,cAC3E,CAEMpO,WAAWkO,EAA0BE,GAC1C9a,KAAK4a,iBAAmBA,EACxB5a,KAAK8a,aAAeA,CACrB,CAEME,QACLhb,KAAK8a,aAAe,IACrB,CAEOC,cAAcE,EAAWC,GAC/B,KAAc,OAATD,GAA0B,KAATA,QAAwBrD,IAATqD,GAAiC,OAATC,GAA0B,KAATA,QAAwBtD,IAATsD,GAC3F,OAAO,EAGT,GAAoB,iBAATD,GAAqC,iBAATC,EAAmB,CACxD,IAAKD,IAASC,EACZ,OAAO,EAGT,MAAMC,EAAQC,OAAOC,KAAKJ,GACpBK,EAAQF,OAAOC,KAAKH,GAE1B,OAAIC,EAAMhM,SAAWmM,EAAMnM,QAIpBgM,EAAM9T,MAAOhF,GAAQrC,KAAK+a,cAAcE,EAAK5Y,GAAM6Y,EAAK7Y,IAChE,CAED,SAAOkZ,KAAQN,EAAMC,EACtB,+CA1CUR,EAAgB,4BAAhBA,EAAgBtX,QAAhBsX,EAAgB,qBAFf,SAEDA,CAAb,yFCAO,IAAMc,EAAb,MAAM,MAAOA,EAHbzb,cAIUC,cAAW,IAAIyb,OAAO,8BAAa,MAEnCzb,cAAW,IAAIyb,OAAO,UAAQ,MAE9Bzb,cAAW,IAAIyb,OAAO,0BAAY,MAClCzb,cAAW,IAAIyb,OAAO,sBAAW,MACjCzb,cAAW,IAAIyb,OAAO,UAAQ,MAC9Bzb,cAAW,IAAIyb,OAAO,8BAAa,MAEnCzb,cAAW,IAAIyb,OAAO,YAAQ,MAC9Bzb,cAAW,IAAIyb,OAAO,sBAAW,MACjCzb,cAAW,IAAIyb,OAAO,cAAS,MAC/Bzb,cAAW,IAAIyb,OAAO,YAAQ,KA6LvC,CA3LQC,cAAcrV,GACnB,MAAMsV,EAA4C3b,KAAK4b,gDAAgD5b,KAAK6b,aAAaxV,IAEzH,GAAIsV,EAA2C,CAC7C,MAAMG,EAAoBH,EAA0CI,QAAQ,QAAS,IAAIA,QAAQ,IAAK,IACtG,IAAIC,EACAC,EACAH,EAAkBhN,WAAW,QAC/BkN,EAA+BF,EAAkBI,MAAM,EAAcJ,EAAkB3M,QACvF8M,EAAQ,QAERD,EAA+BF,EAC/BG,EAAQ,IAGND,GAAgCA,EAA6BG,MAAM,cACvDH,EAA6BI,WAAWzU,MAAM,IACtD/D,QAASyY,IACbJ,GAASI,EAAO,cAElBrc,KAAKsc,kBAAoB,IAAIb,OAAOQ,EAAO,OAE3Cjc,KAAKsc,kBAAoB,IAE5B,MACCtc,KAAKsc,kBAAoB,KAG3B,GAAIjW,EAAQ,CACV,MAAMkW,EAAgBC,WAAWnW,EAAO0V,QAAQ,QAAS,IAAIA,QAAQ,IAAK,MAC1E,GAAKU,MAAMF,GAQTvc,KAAK0c,cAAgB,SARI,CACzB,MAAMC,EAAQJ,EAAcH,WAAWzU,MAAM,IAC7C,IAAIsU,EAAQ,GACZU,EAAM/Y,QAASyY,IACbJ,GAASI,EAAO,WAElBrc,KAAK0c,cAAgB,IAAIjB,OAAOQ,EAAO,IACxC,CAGF,MACCjc,KAAK0c,cAAgB,KAIrB1c,KAAK4c,0CADHjB,EAC+C,IAAIF,OAAOE,EAA2C,MAEtD,IAEpD,CAEMkB,UAAUC,EAAiBC,EAA+BC,YAC/D,OAAQD,QACDC,WACH,OAAOhd,KAAKid,iBAAiBH,GAAtB,KACJE,YACH,OAAOhd,KAAKkd,kBAAkBJ,GAAvB,KACJE,gBACH,OAAOhd,KAAKmd,sBAAsBL,GAA3B,QAEP,OAAO9c,KAAKid,iBAAiBH,GAElC,CAEOlB,gDAAgDvV,GACtD,OAAQA,GAEJA,EACG0V,QAAQ/b,KAAKod,SAAU,IAAM,+BAC7BrB,QAAQ/b,KAAKqd,SAAU,IAAM,+BAC7BtB,QAAQ/b,KAAKsd,SAAU,IAAM,2BAC7BvB,QAAQ/b,KAAKud,SAAU,IAAM,WAC7BxB,QAAQ/b,KAAKwd,SAAU,IAAM,uBAC7BzB,QAAQ/b,KAAKyd,SAAU,IAAM,uBAC7B1B,QAAQ/b,KAAK0d,SAAU,IAAM,WAC7B3B,QAAQ/b,KAAK2d,SAAU,IAAM,aAC7B5B,QAAQ/b,KAAK4d,SAAU,IAAM,eAC7B7B,QAAQ/b,KAAK6d,SAAU,IAAM,YACrC,CAMOhC,aAAaxV,GACnB,OAAQA,GAEJA,EAEG0V,QAAQ,OAAQ,IAAM,QAGtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,OACtBA,QAAQ,OAAQ,IAAM,MAC9B,CAEOmB,kBAAkBJ,GACxB,OAAK9c,KAAK0c,cAILI,GAIEA,EAAQf,QAAQ/b,KAAK0c,cAAgBP,GACnC,+BAA+B2B,WAAkB3B,aARjD2B,WAAkBhB,EAU5B,CAEOK,sBAAsBL,GAC5B,OAAK9c,KAAKsc,kBAILQ,GAIEA,EAAQf,QAAQ/b,KAAKsc,kBAAoBH,GACvC,+BAA+B2B,WAAkB3B,aARjD2B,WAAkBhB,EAU5B,CAEOG,iBAAiBH,GACvB,IAAK9c,KAAK4c,0CACR,OAAOkB,WAAkBhB,GAG3B,IAAKA,EACH,OAAOA,EAGT,MAAMiB,EAAY,GAElB,IAAI/U,EAAiB8T,EAAQf,QAAQ/b,KAAK4c,0CAA2C,CAACT,EAAO5c,KAC3F,MAAMye,EAAmB,+BAA+BF,WAAkB3B,YAC1E,IAAI8B,EAAQ1e,EACZwe,SAAUna,QAASsa,IACjBD,GAASC,EAAIC,OAAShC,EAAMhN,SAG9B4O,EAAUvc,KAAK,CAAEyc,MAAOA,EAAOE,OAAQH,EAAiB7O,OAAQiP,IAAKH,EAAQD,EAAiB7O,SACvF6O,IAGLK,EAAI,EACJC,EAAiB,EAUrB,GATAP,EAAUna,QAASsa,IACjB,MACM5Z,EAAQ0E,EAAOuV,UAAUF,EADnBH,EAAID,MAAQK,GAElBE,EAAeV,WAAkBxZ,GACvCga,GAAkBE,EAAarP,OAAS7K,EAAM6K,OAC9CnG,EAAShJ,KAAKye,QAAQzV,EAAQqV,EAAG/Z,EAAM6K,OAAQqP,GAC/CH,EAAIH,EAAIE,IAAME,IAGZD,EAAIrV,EAAOmG,OAAQ,CACrB,MAAM7K,EAAQ0E,EAAOuV,UAAUF,EAAGrV,EAAOmG,QACnCqP,EAAeV,WAAkBxZ,GACvC0E,EAAShJ,KAAKye,QAAQzV,EAAQqV,EAAG/Z,EAAM6K,OAAQqP,EAChD,CAED,OAAOxV,CACR,CAGOyV,QAAQC,EAAaC,EAAeC,EAAe7F,GAEzD,OAAI4F,EAAQ,IACVA,EAAQD,EAAIvP,OAASwP,GACT,IACVA,EAAQ,GAILD,EAAIxC,MAAM,EAAGyC,IAAU5F,GAAO,IAAM2F,EAAIxC,MAAMyC,EAAQC,EAC9D,+CAzMUpD,EAAgB,4BAAhBA,EAAgBpY,QAAhBoY,EAAgB,qBAFf,SAEDA,CAAb,oDCJO,IAAKqD,EAMX,aANWA,QAAQ,KAClBA,6BACAA,qBACAA,2DACAA,uCACAA,uBALUA,EAAZ,IAAYA,GAMX,oKCUM,IAAMC,EAAb,MAAM,MAAOA,EA6PX/e,YACUgf,EACAla,EACAG,GAFAhF,8BACAA,4BACAA,eAtPFA,sBAAwC,CAC9CqB,GAAI,QACJ2d,QAAS,sBACTC,UAAW,YACX9c,KAAM,QACNN,SAAU,CACR,CACER,GAAI,aACJ2d,QAAS,sBACTC,UAAW,iBACX9c,KAAM,OACN+c,KAAM,iBACN9c,IAAK,qBAEP,CACEf,GAAI,OACJ2d,QAAS,sBACTC,UAAW,WACX9c,KAAM,OACN+c,KAAM,WACN9c,IAAK,iBAKHpC,yCAA2D,CACjEqB,GAAI,gBACJ2d,QAAS,yBACTG,oBAAoB,EACpBF,UAAW,oBACX9c,KAAM,SAKAnC,kCAAwD,CAC9DqB,GAAI,qBACJ2d,QAAS,yBACTC,UAAW,wBACX9c,KAAM,OACN+c,KAAM,WACN9c,IAAK,uBAGCpC,iCAAyD,CAC/D,CACEqB,GAAI,qBACJ2d,QAAS,yBACTC,UAAW,iBACX9c,KAAM,OACN+c,KAAM,WACN9c,IAAK,uBAEP,CACEf,GAAI,gCACJ2d,QAAS,yBACTC,UAAW,8BACX9c,KAAM,OACN+c,KAAM,sBACNE,SAAU,KACR,MAAMC,EAAOrf,KAAK6E,qBAAqBwK,KAAKiQ,uBAC5C,OACEtf,KAAKgF,QAAQ+J,cADXsQ,EACyB,kCAAkCA,IAElC,iDAEtB,GAETjd,IAAK,kCAEP,CACEf,GAAI,wBACJ2d,QAAS,yBACTC,UAAW,cACX9c,KAAM,OACN+c,KAAM,cACNE,SAAU,KACR,MAAMC,EAAOrf,KAAK6E,qBAAqBwK,KAAKkQ,uBAC5C,OACEvf,KAAKgF,QAAQ+J,cADXsQ,EACyB,0BAA0BA,IAE1B,2BAEtB,GAETjd,IAAK,2BAIDpC,+BAAiD,CACvDqB,GAAI,gBACJ2d,QAAS,yBACTG,oBAAoB,EACpBF,UAAW,oBACX9c,KAAM,QACNN,SAAU7B,KAAKwf,6BAGTxf,2BAA6C,CACnDqB,GAAI,kBACJ8d,oBAAoB,EACpBF,UAAW,sBACX9c,KAAM,QACNN,SAAU,CACR,CACER,GAAI,uBACJ4d,UAAW,iBACX9c,KAAM,OACN+c,KAAM,WACN9c,IAAK,yBAEP,CACEf,GAAI,YACJ4d,UAAW,gBACX9c,KAAM,cACN+c,KAAM,cACNrd,SAAU,CACR,CACER,GAAI,WACJ4d,UAAW,eACX9c,KAAM,OACN+c,KAAM,eACN9c,IAAK,aAEP,CACEf,GAAI,eACJ4d,UAAW,mBACX9c,KAAM,OACN+c,KAAM,mBACN9c,IAAK,iBAEP,CACEf,GAAI,WACJ4d,UAAW,eACX9c,KAAM,OACN+c,KAAM,0BACN9c,IAAK,eAIX,CACEf,GAAI,UACJ4d,UAAW,cACX9c,KAAM,cACN+c,KAAM,cACNrd,SAAU,CACR,CACER,GAAI,OACJ4d,UAAW,WACX9c,KAAM,OACN+c,KAAM,WACN9c,IAAK,SAEP,CACEf,GAAI,WACJ4d,UAAW,eACX9c,KAAM,OACN+c,KAAM,mBACN9c,IAAK,iBAEP,CACEf,GAAI,QACJ4d,UAAW,YACX9c,KAAM,OACN+c,KAAM,YACN9c,IAAK,YAIX,CACEf,GAAI,OACJ4d,UAAW,WACX9c,KAAM,OACN+c,KAAM,WACN9c,IAAK,SAEP,CACEf,GAAI,kBACJ4d,UAAW,iBACX9c,KAAM,OACN+c,KAAM,sBACNE,SAAU,KACR,MAAMC,EAAOrf,KAAK6E,qBAAqBwK,KAAKoQ,uBAC5C,OACEzf,KAAKgF,QAAQ+J,cADXsQ,EACyB,oBAAoBA,IAEpB,mCAEtB,GAETjd,IAAK,oBAEP,CACEf,GAAI,UACJ4d,UAAW,cACX9c,KAAM,OACN+c,KAAM,cACNE,SAAU,KACR,MAAMC,EAAOrf,KAAK6E,qBAAqBwK,KAAKqQ,uBAC5C,OACE1f,KAAKgF,QAAQ+J,cADXsQ,EACyB,YAAYA,IAEZ,aAEtB,GAETjd,IAAK,YAEP,CACEf,GAAI,UACJ4d,UAAW,cACX9c,KAAM,OACN+c,KAAM,cACNE,SAAU,KACR,MAAMC,EAAOrf,KAAK6E,qBAAqBwK,KAAK,4BAC5C,OACErP,KAAKgF,QAAQ+J,cADXsQ,EACyB,YAAYA,IAEZ,aAEtB,GAETjd,IAAK,YAEP,CACEf,GAAI,UACJ4d,UAAW,cACX9c,KAAM,OACN+c,KAAM,cACN9c,IAAK,cAKHpC,uBAAyC,CAC/CqB,GAAI,UACJ2d,QAAS,mBACTC,UAAW,iBACX9c,KAAM,OACN+c,KAAM,WACN9c,IAAK,SAQLpC,KAAK2f,4CAA8Cva,MAAMwa,KAA8B5f,KAAKwf,6BAC5Fxf,KAAK2f,4CAA4C/c,OAAO,EAAG,EAAG5C,KAAK6f,8BACnE7f,KAAK8f,oCAAoCje,SAAW7B,KAAK2f,4CAEzD3f,KAAKgF,QAAQO,OAAOC,UAAWC,IACzBA,aAAiBsa,OAEjB/f,KAAKqI,MADH5C,EAAMrD,IAAI0M,WAAW,mBACV/E,aACJtE,EAAMrD,IAAI0M,WAAW,WACjB/E,UAEAA,iBAIpB,CAEU3B,WACT,OAAOpI,KAAKqI,KACb,CAEU2X,gBACT,OAAOhgB,KAAKigB,UACb,CAEUC,wBACT,OAAOlgB,KAAKmgB,sBACb,CAEMre,cACLke,EACAjU,EAAkC,KAClCqU,EACAnU,EAAiB,MAEjBjM,KAAKigB,WAAaD,EAClBhgB,KAAKmgB,uBAAyB,IAAI/a,MAElC,UAAWib,KAAYL,EACrB,GAAIK,IAAaxB,eAAqB,CAQpC,GAPI5S,IACFjM,KAAKsgB,sBAAsBrB,UAAYhT,GAEzCjM,KAAKsgB,sBAAsBnB,mBACoD,IAA7Enf,KAAKugB,yBAAyBjb,YAAY4C,wBAAwBiH,SAAiBnP,KAAKugB,yBAAyBC,cACnHxgB,KAAKmgB,uBAAuB3e,KAAK4Z,OAAOqF,OAAO,GAAIzgB,KAAKsgB,wBAEpDtgB,KAAKugB,yBAAyB/T,eAAgB,CAChDxM,KAAK0gB,yCACH1gB,KAAKsgB,sBACL,YACAtgB,KAAKugB,yBAAyB/T,gBAAgBmU,oBAC5C3gB,KAAKugB,yBAAyB/T,gBAAgBoU,wBAC9C5gB,KAAKugB,yBAAyB/T,gBAAgBqU,8BAElD,MAAMC,EAAgC9gB,KAAKsgB,sBAAsBze,SAASkf,KAAMriB,GAAe,cAATA,EAAE2C,IACxFrB,KAAK0gB,yCACHI,EACA,WACA9gB,KAAKugB,yBAAyB/T,gBAAgBmU,oBAEhD3gB,KAAK0gB,yCACHI,EACA,eACA9gB,KAAKugB,yBAAyB/T,gBAAgBoU,wBAEhD5gB,KAAK0gB,yCACHI,EACA,WACA9gB,KAAKugB,yBAAyB/T,gBAAgBqU,8BAGhD7gB,KAAK0gB,yCACH1gB,KAAKsgB,sBACL,UACAtgB,KAAKugB,yBAAyB/T,gBAAgBwU,gBAC5ChhB,KAAKugB,yBAAyB/T,gBAAgByU,uBAC9CjhB,KAAKugB,yBAAyB/T,gBAAgB0U,iBAElD,MAAMC,EAA8BnhB,KAAKsgB,sBAAsBze,SAASkf,KAAMriB,GAAe,YAATA,EAAE2C,IACtFrB,KAAK0gB,yCACHS,EACA,OACAnhB,KAAKugB,yBAAyB/T,gBAAgBwU,gBAEhDhhB,KAAK0gB,yCACHS,EACA,WACAnhB,KAAKugB,yBAAyB/T,gBAAgByU,uBAEhDjhB,KAAK0gB,yCACHS,EACA,QACAnhB,KAAKugB,yBAAyB/T,gBAAgB0U,iBAGhDlhB,KAAK0gB,yCACH1gB,KAAKsgB,sBACL,OACAtgB,KAAKugB,yBAAyB/T,gBAAgB4U,gBAGhDphB,KAAK0gB,yCACH1gB,KAAKsgB,sBACL,kBACAtgB,KAAKugB,yBAAyB/T,gBAAgB6U,0BAGhDrhB,KAAK0gB,yCACH1gB,KAAKsgB,sBACL,UACAtgB,KAAKugB,yBAAyB/T,gBAAgB8U,mBAGhDthB,KAAK0gB,yCACH1gB,KAAKsgB,sBACL,UACAtgB,KAAKugB,yBAAyB/T,gBAAgB+U,mBAGhDvhB,KAAK0gB,yCACH1gB,KAAKsgB,sBACL,UACAtgB,KAAKugB,yBAAyB/T,gBAAgBgV,kBAEjD,CAEDxhB,KAAKyhB,sCAAsC1V,EAAwBqU,EACpE,MAAUC,IAAaxB,UACtB7e,KAAKmgB,uBAAuB3e,KAAK4Z,OAAOqF,OAAO,GAAIzgB,KAAK0hB,mBAC/CrB,IAAaxB,8BAClB5S,IACFjM,KAAK8f,oCAAoCb,UAAYhT,GAEvDjM,KAAK8f,oCAAoC6B,MAAQ,KAC5C3hB,KAAK4hB,uBAAuBpB,gBAC/BxgB,KAAK8f,oCAAoC6B,MAAQ3hB,KAAK4hB,uBAAuBhW,cAE/E5L,KAAK8f,oCAAoCX,mBACkC,IAAzEnf,KAAK4hB,uBAAuBtc,YAAY0C,sBAAsBmH,SAAiBnP,KAAK4hB,uBAAuBpB,cAC7GxgB,KAAKmgB,uBAAuB3e,KAAK4Z,OAAOqF,OAAO,GAAIzgB,KAAK8f,uCAC/CO,IAAaxB,oBAClB5S,IACFjM,KAAK6hB,0BAA0B5C,UAAYhT,GAE7CjM,KAAK6hB,0BAA0BF,MAAQ,KAClC3hB,KAAK4hB,uBAAuBpB,gBAC/BxgB,KAAK6hB,0BAA0BF,MAAQ3hB,KAAK4hB,uBAAuBhW,cAErE5L,KAAK6hB,0BAA0B1C,mBAC4C,IAAzEnf,KAAK4hB,uBAAuBtc,YAAY0C,sBAAsBmH,SAAiBnP,KAAK4hB,uBAAuBpB,cAC7GxgB,KAAKmgB,uBAAuB3e,KAAK4Z,OAAOqF,OAAO,GAAIzgB,KAAK6hB,6BAC/CxB,IAAaxB,YACtB7e,KAAKmgB,uBAAuB3e,KAAK4Z,OAAOqF,OAAO,GAAIzgB,KAAK8hB,oBAI5D,OAAO9hB,KAAKmgB,sBACb,CAEMsB,sCAAsC1V,EAAiCqU,GAC5E,MAAM2B,EAAuB/hB,KAAKmgB,uBAAuBY,KAAMriB,GAAe,oBAATA,EAAE2C,IACnE0gB,KAE6B,IAA3BhW,GAAoCqU,EACtCtB,EAAgBkD,WAAWD,EAAsB,+CAEjDjD,EAAgBmD,cAAcF,EAAsB,+CAGtD/hB,KAAK+e,uBAAuB/b,qBAAqB,kBAAmB+e,GAEvE,CAEwB3H,kBAAC8H,EAAqCC,GAC7D,IAAIC,EACAF,EAAelD,SACjBoD,EAAeF,EAAelD,QAAQqD,OAAO1a,MAAM,QAC9Cya,EAAa7b,SAAS4b,IACzBC,EAAa5gB,KAAK2gB,IAGpBC,EAAe,CAACD,EAAaE,QAG/BH,EAAelD,QAAUoD,EAAaE,KAAK,KAEvCJ,EAAergB,UAAUsN,OAAS,GACpC+S,EAAergB,UAAU+B,QAAS2e,IAChCviB,KAAKgiB,WAAWO,EAAqBJ,EAArC,EAGL,CAE2B/H,qBAAC8H,EAAqCC,GAC5DD,EAAelD,SAAWkD,EAAelD,QAAQzY,SAAS4b,KAC5DD,EAAelD,QAAUkD,EAAelD,QAAQjD,QAAQoG,EAAc,IAAIpG,QAAQ,QAAS,KAAKsG,QAG9FH,EAAergB,UAAUsN,OAAS,GACpC+S,EAAergB,UAAU+B,QAAS2e,IAChCviB,KAAKiiB,cAAcM,EAAqBJ,EAAxC,EAGL,CAEOzB,yCAAyCwB,EAAqCM,EAAgBC,GACpG,GAAIP,EAAgB,CAClB,MAAMQ,EAAiBR,EAAergB,SAASkf,KAAMriB,GAAMA,EAAE2C,KAAOmhB,GAChEE,IACFA,EAAeC,QAAUF,EACzBziB,KAAK+e,uBAAuB/b,qBAAqBwf,EAAQE,GAE5D,CACF,+CAxdU5D,GAAe7a,8DAAf6a,EAAe1b,QAAf0b,EAAe,qBAFd,SAEDA,CAAb,mECbO,IAAM8D,EAAb,MAAM,MAAOA,EACJvT,KAAKhN,GACV,MAAM2B,EAAO6e,aAAaC,QAAQzgB,GAClC,GAAI2B,EACF,OAAO8D,KAAKC,MAAM/D,EAIrB,CAEMwE,WAAWnG,GAChBwgB,aAAara,WAAWnG,EACzB,CAEM6M,WAAW7M,GAChB,IAAI+F,EACJ,MAAM2a,EAAU/iB,KAAKqP,KAAKhN,GAC1B,OAAI0gB,IACF3a,EAAON,KAAKC,MAAMgb,IAEb3a,CACR,CAEME,MAAMjG,EAAaiC,GACxBue,aAAaG,QAAQ3gB,EAAKyF,KAAKoC,UAAU5F,GAC1C,+CAzBUse,EAAmB,4BAAnBA,EAAmBxf,QAAnBwf,EAAmB,qBAFlB,SAEDA,CAAb,oLCJI3e,eACEA,sBACFA,kCADYA,kEAEZA,eAAqBA,yDAASA,wBAAe,GAAuDA,SAAuBA,gCAAvBA,4CCKjG,IAAMgf,EAAb,MAAM,MAAOA,EAOXljB,YACqCiE,EAC3Bkf,GAD2BljB,YAC3BA,oBARHA,gBAAY,EACZA,uBAAmB,EACnBA,sBAAmBmjB,UACnBnjB,4BAAyBmjB,gBACzBnjB,wBAAqBmjB,YAMtBnjB,KAAKgE,KAAKgW,iBACZha,KAAKojB,WAAY,GAGfpjB,KAAKgE,KAAKqf,iBAAiBje,QAC7BpF,KAAKsjB,kBAAmB,EAE3B,CAEMnO,QACLnV,KAAKkjB,aAAaK,mBACnB,CAEMC,gBACDxjB,KAAKgE,MACPhE,KAAKgE,KAAKgW,iBAEZha,KAAKmV,OACN,+CA7BU8N,GAAmBhf,MAQpBwf,MAAkBxf,sCARjBgf,EAAmB1O,ibDVhCtQ,iBAA0B,WAEtBA,uBAGAA,qBACFA,QACAA,oBAAQA,gCAASuQ,SAAO,GAAuCvQ,sBAAuBA,iBAAKA,mBALnEA,uCAGlBA,6WCKKgf,CAAb,KCEaS,EAAb,MAAM,MAAOA,EAKX3jB,YAA2B4jB,oBAJnB3jB,WAA6B,KAC7BA,wBAAoB,EACpBA,YAAQ,CAEqC,CAK9C4jB,oBACLC,EACAC,EACA9J,EAA6B,KAC7B+J,EAAc,MAET/jB,KAAKgkB,QACRhkB,KAAKikB,cAAcJ,EAAUC,EAAmB9J,EAAgB+J,GAChE/jB,KAAKkkB,mBAGPlkB,KAAKmkB,UACN,CAKMC,kBAAkB1hB,GACvB,MAAM2hB,EAAe,IAAIjf,MAEzB,GAAI1C,GAASA,EAAMA,MAAO,CACxB,MAAM4hB,EAAiD5hB,EAAMA,MACzD4hB,EAAuBC,mBAAqBD,EAAuBC,kBAAkBpV,OAAS,GAChGmV,EAAuBC,kBAAkB3gB,QAAS4gB,IACJ,IAAxCA,EAAiBC,YAAYtV,QAC/BkV,EAAa7iB,KAAKgjB,EAAiBH,aAAnC,EAIP,CAED,OAAOA,CACR,CAKMK,wBAAwBhiB,GAC7B,MAAO,GAAG1C,KAAKokB,kBAAkB1hB,IAClC,CAKMiiB,UACD3kB,KAAK4kB,kBACP5kB,KAAK4kB,mBAAoB,EAEzB5kB,KAAK2jB,UAAUgB,SAElB,CAKME,wBAAwBf,EAAsC9J,EAA6B,KAAM+J,EAAc,MACpH/jB,KAAK4jB,oBAAoBT,UAAoBW,EAAmB9J,EAAgB+J,EACjF,CAKMe,8BAA8BhB,EAAsC9J,EAA6B,KAAM+J,EAAc,MAC1H/jB,KAAK4jB,oBAAoBT,gBAA0BW,EAAmB9J,EAAgB+J,EACvF,CAKMG,kBACL,GAAIlkB,KAAK2U,MAAO,CACd,MAAMoQ,EAA+B,GACrCA,EAAO/gB,KAAOhE,KAAK2U,MAEnB3U,KAAK2jB,UAAUqB,kBAAkB/B,EAAqB8B,GACtD/kB,KAAKilB,QACN,CACF,CAKMC,0BAA0BpB,EAAsC9J,EAA6B,KAAM+J,EAAc,MACtH/jB,KAAK4jB,oBAAoBT,YAAsBW,EAAmB9J,EAAgB+J,EACnF,CAEMjZ,4BACL9K,KAAK4kB,mBAAoB,CAC1B,CAKMT,WACLnkB,KAAKgkB,OAAQ,CACd,CAMMmB,SACLnlB,KAAKgkB,OAAQ,CACd,CAKMoB,aAAa1iB,EAA0B2iB,GAC5C,GAAI3iB,EAAO,CACT,MAAM4hB,EAAiD5hB,EAAMA,MAC7D,GAAI4hB,GAA0BA,EAAuBe,YAAcA,EACjE,OAAO,CAEV,CAED,OAAO,CACR,CAKMC,kBACLxB,EACA9J,EAA6B,KAC7B+J,EAAc,UACdwB,GAAwB,EACxBC,GAAsB,GAEtBxlB,KAAKikB,cAAcd,UAAoBW,EAAmB9J,EAAgB+J,EAAawB,EAAuBC,EAC/G,CAKMC,wBACL3B,EACA9J,EAA6B,KAC7B+J,EAAc,UACdwB,GAAwB,EACxBC,GAAsB,GAEtBxlB,KAAKikB,cACHd,gBACAW,EACA9J,EACA+J,EACAwB,EACAC,EAEH,CAKME,oBACL5B,EACA9J,EAA6B,KAC7B+J,EAAc,UACdwB,GAAwB,EACxBC,GAAsB,GAEtBxlB,KAAKikB,cAAcd,YAAsBW,EAAmB9J,EAAgB+J,EAAawB,EAAuBC,EACjH,CAKOP,SACNjlB,KAAK2U,MAAQ,IACd,CAKOsP,cACNJ,EACAC,EACA9J,EAA6B,KAC7B+J,EAAc,UACdwB,GAAwB,EACxBC,GAAsB,GAEtB,IAAIG,EAEFA,EADE7B,aAA6B1e,MACpB0e,EAEA,CAACA,GAGd,MAAMT,EAAqB,GAE3BsC,EAAS/hB,QAAS+S,IAChB,MAAMa,EAAO,IAAIoO,IACjBpO,EAAKb,QAAUA,EACfa,EAAKqM,SAAWA,EAChBR,EAAM7hB,KAAKgW,EAAX,GAGFxX,KAAK2U,MAAQ,CACX0O,MAAOkC,EAAwBlC,EAAQrjB,KAAK2U,MAAM0O,MAAMwC,OAAOxC,GAC/DrJ,eAAgBwL,EAAsBxL,EAAiBha,KAAK2U,MAAMqF,eAClE+J,YAAayB,EAAsBzB,EAAc/jB,KAAK2U,MAAMoP,YAE/D,+CAtNUL,GAAazf,wCAAbyf,EAAatgB,QAAbsgB,EAAa,qBAFZ,SAEDA,CAAb,8ECLO,IAAMoC,EAAb,MAAM,MAAOA,EAKX/lB,cAFQC,8BAA2B,IAAIqF,IAAqC,GAG1ErF,KAAK+lB,yBAA2B/lB,KAAKgmB,yBAAyBnlB,cAC/D,CAEMolB,qBAAqBC,GAC1BlmB,KAAKgmB,yBAAyBvkB,KAAKykB,EACpC,+CAXUJ,EAAmB,4BAAnBA,EAAmB1iB,QAAnB0iB,EAAmB,qBAFlB,SAEDA,CAAb,mECFO,IAAMK,EAAb,MAAM,MAAOA,EAHbpmB,cAISC,6BAAyB,CACjC,+CAFYmmB,EAAkB,4BAAlBA,EAAkB/iB,QAAlB+iB,EAAkB,qBAFjB,SAEDA,CAAb,mECCO,IAAMC,EAAb,MAAM,MAAOA,EAUJC,2BACL,OAAOrmB,KAAKsmB,aACb,CAEMC,uBACL,OAAOvmB,KAAKwmB,WACb,CAEMC,2BACL,OAAOzmB,KAAK0mB,sBACb,CAEMC,oBACL,OAAO3mB,KAAK4mB,mBACb,CAEMC,qBACL,OAAO7mB,KAAK8mB,oBACb,CAEMC,4BACL,OAAO/mB,KAAKgnB,2BACb,CAEMC,eACL,OAAOjnB,KAAKknB,UACb,CAEMC,gBACL,OAAOnnB,KAAKonB,eACb,CAEMC,yBAAyBC,GAC9BtnB,KAAKsmB,cAAgBgB,CACtB,CAEMC,qBAAqBC,GAC1BxnB,KAAKwmB,YAAcgB,CACpB,CAEMC,yBAAyBC,GAC9B1nB,KAAK0mB,uBAAyBgB,CAC/B,CAEMC,kBAAkBC,GACvB5nB,KAAK4mB,oBAAsBgB,CAC5B,CAEMC,mBAAmB/d,GACxB9J,KAAK8mB,qBAAuBhd,CAC7B,CAEMge,0BAA0Bhe,GAC/B9J,KAAKgnB,4BAA8Bld,CACpC,CAEMie,aAAaC,GAClBhoB,KAAKknB,WAAac,CACnB,CAEMC,cAAcC,GACnBloB,KAAKonB,gBAAkBc,CACxB,+CAxEU9B,EAAmB,4BAAnBA,EAAmBhjB,QAAnBgjB,EAAmB,qBAFlB,SAEDA,CAAb,0HCOO,IAAM+B,EAAb,MAAM,MAAOA,kDAAiB,0BAAjBA,gCAHDzW,KAAc0W,KAAcC,KAAiBC,KAAeC,QAG3DJ,CAAb,oGCLO,IAAMK,EAAb,MAAM,MAAOA,EAOXzoB,YAA2BiF,kBANnBhF,kBAAe,IAAIM,IAAgB,GACnCN,cAAW,EACXA,WAAQ,IAAIM,IAAgB,iBAC5BN,YAAS,IAAIM,IAAgB,GAC7BN,cAAW,IAAIM,KAAgB,GAIrCN,KAAKyoB,OACN,CAEUC,kBACT,OAAO1oB,KAAK2oB,aAAa9nB,cAC1B,CAEU+nB,WACT,OAAO5oB,KAAK6oB,MAAMhoB,cACnB,CAEUyD,YACT,OAAOtE,KAAK8oB,OAAOjoB,cACpB,CAEUkoB,cACT,OAAO/oB,KAAKgpB,SAASnoB,cACtB,CAKMooB,OACLjpB,KAAKkpB,UAAY,EACK,IAAlBlpB,KAAKkpB,UACPlpB,KAAKgpB,SAASvnB,MAAK,GAGjBzB,KAAKkpB,SAAW,IAClBlpB,KAAKkpB,SAAW,EAChBnnB,QAAQC,KAAK,6EACbhC,KAAKgpB,SAASvnB,MAAK,GAEtB,CAEM0nB,eAAe7kB,GACpBtE,KAAK2oB,aAAalnB,KAAK6C,EACxB,CAEM8kB,QAAQ9kB,GACbtE,KAAK6oB,MAAMpnB,KAAK6C,EACjB,CAEM+kB,SAAS/kB,GACdtE,KAAK8oB,OAAOrnB,KAAK6C,EAClB,CAKMglB,OACLtpB,KAAKkpB,UAAY,EACK,IAAlBlpB,KAAKkpB,UACPlpB,KAAKgpB,SAASvnB,MAAK,EAEtB,CAEOgnB,QAENzoB,KAAKgF,QAAQO,OAAOa,QAAKC,KAAQZ,GAAUA,aAAiB8jB,OAAkB/jB,UAAU,KACtFxF,KAAKspB,MAAL,GAGFtpB,KAAKgF,QAAQO,OACVa,QAAKC,KAAQZ,GAAUA,aAAiBsa,MAAiBta,aAAiB+jB,MAAmB/jB,aAAiBgkB,OAC9GjkB,UAAU,KACTxF,KAAKipB,MAAL,EAEL,+CA7EUT,GAAkBvkB,wCAAlBukB,EAAkBplB,QAAlBolB,EAAkB,qBAFjB,SAEDA,CAAb,0HCNM,MAAOkB,UAA8BC,4ICgCpC,IAAMC,EAAb,MAAM,MAAOA,UAAwBC,IACnC9pB,YACY4E,EACFmlB,EACE1X,EACFtN,EACAilB,GACAC,GACAC,GACE/kB,GACAC,IAEVoN,MAAMH,EAAa,aAAczN,EAAsBqG,oBAAqB9F,IAVlElF,6BACFA,yBACEA,mBACFA,sBACAA,yBACAA,qBACAA,6BACEA,kCACAA,+BAGX,CAEMkqB,YAAYC,GAEjB,YAAKrlB,eAAeqgB,SAEb,IAAIiF,IAAYC,IACrBrqB,KAAKwS,SAAS2X,GAAuB3kB,UACnC,KACMxF,KAAKmF,wBAAwBqb,eAC/BxgB,KAAKmF,wBAAwBmlB,gBAE/BtqB,KAAK8E,eAAe2gB,wBAAwB,UAAU0E,EAAsB7gB,gCAC5E+gB,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAED7nB,IACC,GAAIA,aAAiB8nB,KACnB,GAAqB,MAAjB9nB,EAAM+nB,OACR,GAAIzqB,KAAK8E,eAAesgB,aAAa1iB,EAA4B,sBAC/D1C,KAAK0qB,mCAAmCP,GAAuB3kB,UAC5DmlB,IACCN,EAAS5oB,KAAKkpB,GACdN,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,OAGC,CACL,MAAMK,EAAsB5qB,KAAK8E,eAAesf,kBAAkB1hB,GAC/B,IAA/BkoB,EAAoBzb,QACtBnP,KAAK8E,eAAe+f,wBAAwB+F,GAE9CP,EAAS5oB,MAAK,GACd4oB,EAASE,UACV,MAEDF,EAAS5oB,MAAK,GACd4oB,EAASE,gBAGXF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EArCN,EA0CH,CAEMG,mCAAmCP,GACxC,OAAO,IAAIC,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,2GACdvB,SAAU,KACRoU,EAAsBU,eAAgB,EACtC7qB,KAAKwS,SAAS2X,GAAuB3kB,UACnC,KACExF,KAAK8E,eAAe2gB,wBAAwB,UAAU0E,EAAsB7gB,gCAC5E+gB,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAlBJ,EAsBH,CAEMO,+BAA+BC,EAAqBC,EAAyBC,GAClF,OAAO,IAAIb,IAAYC,IACrB,MAAMhkB,GAAS,IAAI6kB,IACnB7kB,GAAO6M,MAAQ+X,EACf5kB,GAAOsF,oBAAqB,EAC5B3L,KAAKmrB,IAAI9kB,IAAQb,UACd4lB,KACCprB,KAAK8pB,kBAAkB7R,yBAAyB,CAC9CrD,YAAa,UACbT,mCAAmC,EACnC+D,iBAAkB,eAClBrD,aAAc,UACdyC,aACE2T,EAAc9b,OAAS,EAAI,mDAA+C,gDAC5E4F,kBAAoB/L,KAClBhJ,KAAKgqB,aAAaqB,6BAA6BriB,GAAO3G,IAAK4oB,GAAezlB,UACvE8lB,KACCtrB,KAAK8E,eAAe2gB,wBAClB6F,GAAqBpY,MAAM/D,OAAS,EAChC,SAASnG,GAAOuiB,qCAAkCD,GAAqBpY,MAAM/D,kBAC7E,SAASnG,GAAOuiB,4CAElBH,IACFprB,KAAK8E,eAAe4gB,oBAClB,qHACA,KACA,MACA,GACA,GAIJ2E,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAtBJ,EA0BFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF/U,QAASuV,EACT7V,cAAe8V,GAvCjB,EA0CF,KACEX,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EA9CJ,EAkDH,CAEMiB,aAAanlB,EAAwBolB,EAAeC,EAAY,IACrE,GAAc,OAAVD,GAA0C,IAAxBA,EAAMpJ,OAAOlT,OACjC,OAAO,IAAIib,IAGR/jB,IACHA,EAAS,IAAI6kB,KAGf7kB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aACtD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,QAASJ,GACbI,IAAI,YAAaH,EAAUtP,YAE9B,OAAOpc,KAAKoS,YAAYrH,IAAoC,GAAG/K,KAAK2S,yBAA0B,CAAErU,OAAQA,GACzG,CAEMwtB,sBAAsBjgB,EAAckgB,GACzC,MAAMC,EAAwB,IAAItC,EAClCsC,SAAsBC,aAAeF,EAE9B/rB,KAAKoS,YAAYM,KACtB,GAAG1S,KAAK2S,aAAa9G,0BACrB/D,KAAKoC,UAAU8hB,GAElB,CAEME,6BAA6BrgB,GAClC,OAAO7L,KAAKoS,YAAYrH,IAA2B,GAAG/K,KAAK2S,aAAa9G,iCACzE,CAEMmH,OAAOlJ,EAAsB8B,EAAsBugB,GACxD,OAAO,IAAI/B,IAAYC,IACrB,IAAI/S,GACAC,GACA4U,GAEF7U,GAAe,yCAAsC1L,4BACrD2L,GAAe,UAAU3L,4DAGzB0L,GAAe,yCAAsC1L,MACrD2L,GAAe,UAAU3L,oCAG3B,MAAMvF,GAAS,IAAI+lB,IACnB/lB,GAAO4kB,cAAgBnhB,EAAe,CAACA,GAAgB,KACvDzD,GAAOgmB,4BAA6B,EACpCrsB,KAAKiqB,qBAAqBkB,IAAI9kB,IAAQb,UACnC8mB,KACC,IAAI7U,GACA6U,KACF7U,GAAkB,4GAGpBzX,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAcA,GACdvB,SAAU,KACR/V,KAAK+S,QAAQjJ,GAActE,UACzB,KACExF,KAAK8E,eAAe2gB,wBAAwBlO,IAC5C8S,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF3V,YAAa,MACbC,aAAc,MACd4C,gBAAiBA,IArBnB,EAwBF,KACE4S,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAjCJ,EAqCH,CAEMgC,iBAAiBtB,EAAyBkB,GAC/C,OAAO,IAAI/B,IAAYC,IACrB,IAAI5S,EACA0U,IAEF1U,EAAkB,gFAEpB,MAAMpR,GAAS,IAAI+lB,IACnB/lB,GAAO4kB,cAAgBA,EACvB5kB,GAAOgmB,4BAA6B,EACpCrsB,KAAKiqB,qBAAqBkB,IAAI9kB,IAAQb,UACnC8mB,KACC,IAAI5U,GACA4U,KACF5U,GAAkB,4GAGpB1X,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,+BAA4B2T,EAAc9b,sCACxD4G,SAAU,KACR/V,KAAKiT,kBAAkBgY,GAAezlB,UACpC,KACExF,KAAK8E,eAAe2gB,wBAClB,GAAGwF,EAAc9b,0EAEnBkb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAVJ,EAcFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF9S,gBAAiBA,EACjBC,gBAAiBA,IAtBnB,EAyBF,KACE2S,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAlCJ,EAsCH,CAEMiC,QAAQ1iB,EAAsB8B,EAAsB6gB,GACzD,OAAO,IAAIrC,IAAYC,IAErBrqB,KAAK8E,eAAeqgB,SAEpBnlB,KAAK0sB,mBAAmB,CAAC5iB,IAAe,GAAOtE,UAC7C,KACExF,KAAK8E,eAAe2gB,wBAAwB,UAAU7Z,kCAAwC6gB,GAC9FpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAED7nB,KACKA,cAAiB8nB,MACE,MAAjB9nB,GAAM+nB,OACRzqB,KAAK2sB,8BAA8B7iB,EAAc8B,GAAcpG,UAC5D8mB,KACCjC,EAAS5oB,KAAK6qB,IACdjC,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,IAQNF,EAAS5oB,MAAK,GACd4oB,EAASE,WAAT,EAzBN,EA8BH,CAEMqC,kBAAkB3B,EAAyBwB,GAChD,OAAO,IAAIrC,IAAYC,IAErBrqB,KAAK8E,eAAeqgB,SAEpBnlB,KAAK0sB,mBAAmBzB,GAAe,GAAOzlB,UAC5C,KACExF,KAAK8E,eAAe2gB,wBAAwB,GAAGwF,EAAc9b,gDAA2Csd,GACxGpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAED7nB,IACKA,aAAiB8nB,MACE,MAAjB9nB,EAAM+nB,OACRzqB,KAAK6sB,2BAA2B5B,GAAezlB,UAC5C8mB,KACCjC,EAAS5oB,KAAK6qB,IACdjC,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,IAQNF,EAAS5oB,MAAK,GACd4oB,EAASE,WAAT,EAzBN,EA8BH,CAEMsC,2BAA2B5B,GAChC,OAAO,IAAIb,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,iBAAc2T,EAAc9b,mBAC1C4G,SAAU,KACR/V,KAAK0sB,mBAAmBzB,GAAe,GAAMzlB,UAC3C,KACExF,KAAK8E,eAAe2gB,wBAAwB,GAAGwF,EAAc9b,4DAC7Dkb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF9S,gBAAiB,oFAnBnB,EAsBH,CAEMkV,8BAA8B7iB,EAAsB8B,GACzD,OAAO,IAAIwe,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,2BAAwB1L,4BACtCmK,SAAU,KACR/V,KAAK0sB,mBAAmB,CAAC5iB,IAAe,GAAMtE,UAC5C,KACExF,KAAK8E,eAAe2gB,wBAAwB,UAAU7Z,0DACtDye,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAjBJ,EAqBH,CAEMuC,OAAOhjB,EAAsB8B,EAAsBF,EAA2B+gB,GACnF,OAAO,IAAIrC,IAAYC,KAErBrqB,KAAK8E,eAAeqgB,SAEpBnlB,KAAK+sB,kBAAkB,CAACjjB,IAAe,GAAOtE,UAC5C,KACExF,KAAK8E,eAAe2gB,wBAAwB,UAAU7Z,4BAAqC6gB,GAC3FpC,GAAS5oB,MAAK,GACd4oB,GAASE,UAAT,EAED7nB,KACKA,cAAiB8nB,MACE,MAAjB9nB,GAAM+nB,OACRzqB,KAAKgtB,8BAA8BljB,EAAc8B,EAAcF,GAAmBlG,UAC/E8mB,KACCjC,GAAS5oB,KAAK6qB,IACdjC,GAASE,UAAT,EAEF,KACEF,GAAS5oB,MAAK,GACd4oB,GAASE,UAAT,IAQNF,GAAS5oB,MAAK,GACd4oB,GAASE,WAAT,EAzBN,EA8BH,CAEM0C,iBAAiBhC,EAAyBwB,GAC/C,OAAO,IAAIrC,IAAYC,IAErBrqB,KAAK8E,eAAeqgB,SAEpBnlB,KAAK+sB,kBAAkB9B,GAAe,GAAOzlB,UAC3C,KACExF,KAAK8E,eAAe2gB,wBAAwB,GAAGwF,EAAc9b,0CAAwCsd,GACrGpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAED7nB,IACKA,aAAiB8nB,MACE,MAAjB9nB,EAAM+nB,OACRzqB,KAAKktB,0BAA0BjC,GAAezlB,UAC3C8mB,KACCjC,EAAS5oB,KAAK6qB,IACdjC,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,IAQNF,EAAS5oB,MAAK,GACd4oB,EAASE,WAAT,EAzBN,EA8BH,CAEM2C,0BAA0BjC,GAC/B,OAAO,IAAIb,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,WAAW2T,EAAc9b,mBACvC4G,SAAU,KACR/V,KAAK+sB,kBAAkB9B,GAAe,GAAMzlB,UAC1C,KACExF,KAAK8E,eAAe2gB,wBAAwB,GAAGwF,EAAc9b,mEAC7Dkb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF9S,gBAAiB,8EAnBnB,EAsBH,CAEMuV,8BAA8BljB,EAAsB8B,EAAsBF,GAC/E,OAAO,IAAI0e,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,qBAAqB1L,0BAAqCF,MACxEqK,SAAU,KACR/V,KAAK+sB,kBAAkB,CAACjjB,IAAe,GAAMtE,UAC3C,KACExF,KAAK8E,eAAe2gB,wBAClB,UAAU7Z,0BAAqCF,8BAEjD2e,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAVJ,EAcFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAnBJ,EAuBH,CAEMnf,QAAQtB,GACb,OAAO9J,KAAKoS,YAAYrH,IAA+B,GAAG/K,KAAK2S,sBAAsB7I,YACtF,CAEMqjB,mBACL,OAAOntB,KAAKoS,YAAYrH,IAA2B,GAAG/K,KAAK2S,6BAC5D,CAEMya,eAAevhB,GACpB,OAAO7L,KAAKoS,YAAYrH,IAA2B,GAAG/K,KAAK2S,aAAa9G,mBACzE,CAEMwhB,iBAAiBhnB,EAAwBinB,EAAcC,EAAcC,GACrEnnB,IACHA,EAAS,IAAI6kB,KAGf7kB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aAEtD,MAAM3L,GAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GAEf,OAAOttB,KAAKoS,YAAYrH,IAA6B,GAAG/K,KAAK2S,6BAA8B,CAAErU,OAAQA,IACtG,CAEMmvB,iBAAiBpnB,EAAwBinB,EAAcC,EAAcC,GACtEnnB,EACGA,EAAOqnB,eACVrnB,EAAOqnB,cAAe,GAGxBrnB,EAAS,IAAI6kB,IAGf7kB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aAEtD,MAAM3L,GAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GAEf,OAAOttB,KAAKoS,YAAYrH,IAA6B,GAAG/K,KAAK2S,6BAA8B,CAAErU,OAAQA,IACtG,CAEMqvB,wCACL,OAAO3tB,KAAKoS,YAAYrH,IAAiD,GAAG/K,KAAK2S,kDAClF,CAEMib,gCAAgCC,GACrC,OAAO,IAAIzD,IAAYC,IACrBrqB,KAAK8pB,kBAAkB3R,+BAA+B,CACpDb,aAAc,6CACdb,YAAa,g0BAcbV,SAAU,KACH8X,GAAkD,IAA7BA,EAAkB1e,OAMjC0e,EAAkB1e,OAAS,KACpCnP,KAAK8E,eAAewgB,kBAClB,8IAEF+E,EAAS5oB,MAAK,GACd4oB,EAASE,YAETvqB,KAAKiqB,qBAAqB6D,gCAAgCD,GAAmBroB,UAC3E,KACExF,KAAK8E,eAAe2gB,wBAClB,yBAAmBoI,EAAkB1e,4DAEvCkb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,IAtBJvqB,KAAK8E,eAAe4gB,oBAClB,sGAEF2E,EAAS5oB,MAAK,GACd4oB,EAASE,WAQT,EAeJlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF9S,gBACE,6JAlDJ,EAqDH,CAEMsW,eAAe5D,GACpB,OAAO,IAAIC,IAAYC,IAErBrqB,KAAK8E,eAAeqgB,SAEpBnlB,KAAK4S,YAAYuX,EAAsBte,KAAMse,GAAuB3kB,UAClE,KACMxF,KAAKmF,wBAAwBqb,eAC/BxgB,KAAKmF,wBAAwBmlB,gBAE/BD,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAED7nB,IACC,GAAIA,aAAiB8nB,KACnB,GAAqB,MAAjB9nB,EAAM+nB,OACR,GAAIzqB,KAAK8E,eAAesgB,aAAa1iB,EAA4B,sBAC/D1C,KAAKguB,uCAAuC7D,GAAuB3kB,UAChEmlB,IACCN,EAAS5oB,KAAKkpB,GACdN,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,OAGC,CACL,MAAMK,EAAsB5qB,KAAK8E,eAAesf,kBAAkB1hB,GAC/B,IAA/BkoB,EAAoBzb,QACtBnP,KAAK8E,eAAe+f,wBAAwB+F,GAE9CP,EAAS5oB,MAAK,GACd4oB,EAASE,UACV,MAEDF,EAAS5oB,MAAK,GACd4oB,EAASE,gBAGXF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EApCN,EAyCH,CAEM0D,+BACL9D,EACA+D,EACAC,GAEA,OAAO,IAAI/D,IAAYC,IACrB,MAAMhkB,GAAS,IAAI+nB,IACnB/nB,GAAO4kB,cAAgB,CAACd,EAAsBte,MAAMga,OAAOsE,EAAsBkE,gBAAgBlnB,IAAKzI,IAAMA,GAAEmN,OAC9GxF,GAAOioB,iCAAkC,EAEzCtuB,KAAK+pB,iBAAiBoB,IAAI9kB,IAAQb,UAC/B+oB,KACC,GAAKA,GAWE,CACL,MAAM5I,GAAW3lB,KAAKwuB,+CAA+CrE,EAAuB+D,EAAiBC,GAE7GnuB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAcqO,GAASrO,aACvBvB,SAAU,KACR/V,KAAK+tB,eAAe5D,GAAuB3kB,UACxC8mB,KACCjC,EAAS5oB,KAAK6qB,IACdjC,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAPJ,EAWFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEFhT,aAAcoO,GAASpO,aACvB3C,YAAa,YACbC,aAAc,WAEjB,MAnCC7U,KAAK+tB,eAAe5D,GAAuB3kB,UACxC8mB,KACCjC,EAAS5oB,KAAK6qB,IACdjC,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EA4BL,EAEH,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EA1CJ,EA8CH,CAEMkE,4BAA4BC,GACjC,OAAO,IAAItE,IAAYC,IACrB,MAAMhkB,EAAS,IAAI6kB,IACnB7kB,EAAO6M,MAAQwb,EAAqCxb,MAAM/L,IAAKzI,GAAMA,EAAEmN,MACvExF,EAAOsF,oBAAqB,EAC5B3L,KAAKmrB,IAAI9kB,GAAQb,UACd4lB,IACCprB,KAAKoS,YACFM,KACC,GAAG1S,KAAK2S,wCACR7K,KAAKoC,UAAUwkB,IAEhBlpB,UACEmpB,KACC,MAAMC,GACJD,GAA+CE,aAAa1f,OAC5Dwf,GAA+CG,gBAAgB3f,OAC7Dyf,GAAQ,IACV5uB,KAAK8E,eAAe2gB,wBAClBmJ,GAAQ,EACJ,mDAAgDA,cAChD,mDAAgDA,cAElDxD,GACFprB,KAAK8E,eAAe4gB,oBAClB,4IACA,KACA,MACA,GACA,IAKN2E,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAhCN,EAoCF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAxCJ,EA4CH,CAEOiE,+CACNrE,EACA+D,EACAC,GAEA,IAAI7W,EAAe,qBACfC,GAAe,gCACnB,OAAI2W,EACEC,GAEF7W,EAAe,GAAGA,WAAsB6S,EAAsB7gB,OAC9DiO,GAAe,uCAAuCA,OAGtDD,EAAe,GAAGA,WAAsB6S,EAAsB7gB,OAC9DiO,GAAe,2BAA2BA,MAGxC4W,GAEF7W,EAAe,GAAGA,WAAsB6S,EAAsB7gB,OAC9DiO,GAAe,2BAA2BA,MAIxCD,EAFE6S,EAAsB4E,eAIpB5E,EAAsBkE,iBAAmBlE,EAAsBkE,gBAAgBlf,OAAS,EAF7E,GAAGmI,WAAsB6S,EAAsB7gB,OAO7C,GAAGgO,WAAsB6S,EAAsB7gB,OAK/D,CAAEgO,aAAcA,EAAcC,aAAcA,GACpD,CAEOmV,mBAAmBxZ,EAAiB2X,GAC1C,MAAMmE,EAAkC,GACxC9b,EAAMtP,QAASiI,KACbmjB,EAAextB,KAAK,CAClBqK,KAAMA,IADR,GAIF,MAAMsH,EAA0B,IAAI8b,IACpC9b,SAAwBD,MAAQ8b,EAChC7b,EAAwB0X,cAAgBA,EAEjC7qB,KAAKoS,YAAYM,KACtB,GAAG1S,KAAK2S,8BACR7K,KAAKoC,UAAUiJ,GAElB,CAEO4Z,kBAAkB7Z,EAAiB2X,GACzC,MAAMmE,EAAkC,GACxC9b,EAAMtP,QAASiI,KACbmjB,EAAextB,KAAK,CAClBqK,KAAMA,IADR,GAIF,MAAMsH,EAA0B,IAAI8b,IACpC9b,SAAwBD,MAAQ8b,EAChC7b,EAAwB0X,cAAgBA,EAEjC7qB,KAAKoS,YAAYM,KACtB,GAAG1S,KAAK2S,6BACR7K,KAAKoC,UAAUiJ,GAElB,CAEO6a,uCAAuC7D,GAC7C,OAAO,IAAIC,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,2GACdvB,SAAU,KACRoU,EAAsBU,eAAgB,EACtC7qB,KAAK4S,YAAYuX,EAAsBte,KAAMse,GAAuB3kB,UAClE,KACExF,KAAK8E,eAAe2gB,wBAAwB,UAAU0E,EAAsB7gB,iCAC5E+gB,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAlBJ,EAsBH,+CAr4BUX,GAAe3lB,gIAAf2lB,EAAexmB,QAAfwmB,EAAe,qBAFd,SAEDA,CAAb,6GC5BM,MAAOsF,EACsC9U,2CAAC+U,GAChD,MAAMC,EAAe,IAAIC,IACzBD,SAAaE,UAAY,EACzBF,EAAaG,WAAa,SAC1BH,EAAaI,cAAgB,OAC7BJ,EAAaK,aAAe,IAAIC,IAChCN,EAAaK,aAAaN,cAAgBA,EACnC,0BAA0B3qB,mBAAmBsD,KAAKoC,UAAUklB,KACpE,CAE6ChV,wCAACtQ,GAC7C,MAAO,aAAaA,iBACrB,CAE0DsQ,uDACzD,MAAMuV,EAAiB,IAAIC,IAC3BD,SAAeL,UAAY,EAC3BK,EAAeJ,WAAa,2BAC5BI,EAAeH,cAAgB,OAE/BG,EAAeE,eAAiB,IAAI3E,IACpCyE,EAAeE,eAAeC,2BAA6BC,8BACpD,oBAAoBvrB,mBAAmBsD,KAAKoC,UAAUylB,KAC9D,EAxBwB,0ECNrB,MAAOK,EAQXjwB,YAMEkwB,EAMAC,EAKAC,EACAC,EACAC,EACAC,GAEAtwB,KAAKmwB,mCAAqCA,EAC1CnwB,KAAKkwB,wBAA0BA,EAC/BlwB,KAAKowB,qBAAuBA,EAC5BpwB,KAAKqwB,aAAeA,EACpBrwB,KAAKiwB,oBAAsBA,EAC3BjwB,KAAKswB,cAAgBA,CACtB,iBC5BI,IAAMC,EAAb,MAAM,MAAOA,EAUXxwB,cACEC,KAAKwwB,qBAAuB,IAAIlwB,IAAgB,KACjD,CAEUmwB,0BACT,OAAOzwB,KAAKwwB,qBAAqB3vB,cAClC,CAEM6vB,gBACL,OAAO1wB,KAAK2wB,qBACb,CAEMC,kBACLX,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,MAAMO,EAA6BC,aAAuBV,GACpDW,EAAqBD,aAAuBT,GAC5CW,EAAuBF,cAAwBR,KAShDtwB,KAAK2wB,uBAPR3wB,KAAKixB,+BAAiChB,GACtCjwB,KAAKkxB,mCAAqChB,GAC1ClwB,KAAKmxB,8CAAgDhB,GACrDnwB,KAAKoxB,gCAAkCP,GACvC7wB,KAAKqxB,wBAA0BN,GAC/B/wB,KAAKsxB,yBAA2BN,KAGhChxB,KAAK2wB,sBAAwB,IAAIX,EAC/BC,EACAC,EACAC,EACAU,EACAE,EACAC,GAGFhxB,KAAKixB,6BAA+BhB,EACpCjwB,KAAKkxB,iCAAmChB,EACxClwB,KAAKmxB,4CAA8ChB,EACnDnwB,KAAKoxB,8BAAgCP,EACrC7wB,KAAKqxB,sBAAwBN,EAC7B/wB,KAAKsxB,uBAAyBN,EAE9BhxB,KAAKwwB,qBAAqB/uB,KAAKzB,KAAK2wB,uBAEvC,+CA5DUJ,EAA2B,4BAA3BA,EAA2BntB,QAA3BmtB,EAA2B,qBAF1B,SAEDA,CAAb,+KCcO,IAAMgB,EAAb,MAAM,MAAOA,UAAkC1H,IAK7C9pB,YACY4E,EACFmlB,EACE1X,EACFtN,EACEI,GAEVqN,MAAMH,EAAa,uBAAwBzN,EAAsBqG,oBAAqB9F,GAN5ElF,6BACFA,yBACEA,mBACFA,sBACEA,gCAGX,CAEMwrB,aAAanlB,EAAkColB,EAAeC,EAAY,IAC/E,GAAc,OAAVD,GAA0C,IAAxBA,EAAMpJ,OAAOlT,OACjC,OAAO,IAAIib,IAGT/jB,EACGA,EAAOqnB,eACVrnB,EAAOqnB,cAAe,GAGxBrnB,EAAS,IAAImrB,IAGfnrB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aACtD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,QAASJ,GACbI,IAAI,YAAaH,EAAUtP,YAE9B,OAAOpc,KAAKoS,YAAYrH,IAAoC,GAAG/K,KAAK2S,yBAA0B,CAAErU,OAAQA,GACzG,CAEM0U,OAAOlJ,EAAsB8B,GAClC,OAAO,IAAIwe,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,4CAAyC1L,MACvDmK,SAAU,KACR/V,KAAK+S,QAAQjJ,GAActE,UACzB,KACExF,KAAK8E,eAAe2gB,wBAAwB,aAAa7Z,qCACzDye,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAjBJ,EAqBH,CAEMgC,iBAAiBtB,GACtB,OAAO,IAAIb,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,+BAA4B2T,EAAc9b,0CACxD4G,SAAU,KACR/V,KAAKiT,kBAAkBgY,GAAezlB,UACpC,KACExF,KAAK8E,eAAe2gB,wBAAwB,GAAGwF,EAAc9b,sDAC7Dkb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAjBJ,EAqBH,CAEMiC,QAAQiF,EAAgCC,EAAgCjF,GAC7E,OAAO,IAAIrC,IAAYC,IACrBrqB,KAAK0sB,mBAAmB,CAAC+E,IAAyBjsB,UAChD,KACExF,KAAK8E,eAAe2gB,wBAAwB,aAAaiM,mCAAmDjF,GAC5GpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYH,CAEMqC,kBAAkB+E,EAAmClF,GAC1D,OAAO,IAAIrC,IAAYC,IACrBrqB,KAAK0sB,mBAAmBiF,GAAyBnsB,UAC/C,KACExF,KAAK8E,eAAe2gB,wBAClB,GAAGkM,EAAwBxiB,wDAC3Bsd,GAEFpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAXJ,EAeH,CAEMuC,OAAO2E,EAAgCC,EAAgCjF,GAC5E,OAAO,IAAIrC,IAAYC,IACrBrqB,KAAK+sB,kBAAkB,CAAC0E,IAAyBjsB,UAC/C,KACExF,KAAK8E,eAAe2gB,wBAAwB,aAAaiM,6BAAgDjF,GACzGpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYH,CAEM0C,iBAAiB0E,EAAmClF,GACzD,OAAO,IAAIrC,IAAYC,IACrBrqB,KAAK+sB,kBAAkB4E,GAAyBnsB,UAC9C,KACExF,KAAK8E,eAAe2gB,wBAClB,GAAGkM,EAAwBxiB,kDAC3Bsd,GAEFpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAXJ,EAeH,CAEM4C,mBACL,OAAOntB,KAAKoS,YAAYrH,IAAqC,GAAG/K,KAAK2S,6BACtE,CAEMya,eAAevhB,GACpB,OAAO7L,KAAKoS,YAAYrH,IAAqC,GAAG/K,KAAK2S,aAAa9G,mBACnF,CAEMwhB,iBACLhnB,EACAinB,EACAC,EACAC,GAEInnB,EACGA,EAAOqnB,eACVrnB,EAAOqnB,cAAe,GAGxBrnB,EAAS,IAAImrB,IAGfnrB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aAEtD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GAEf,OAAOttB,KAAKoS,YAAYrH,IAAuC,GAAG/K,KAAK2S,6BAA8B,CAAErU,OAAQA,GAChH,CAEMmvB,iBACLpnB,EACAinB,EACAC,EACAC,GAEInnB,EACGA,EAAOqnB,eACVrnB,EAAOqnB,cAAe,GAGxBrnB,EAAS,IAAImrB,IAGfnrB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aACtD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GAEf,OAAOttB,KAAKoS,YAAYrH,IAAuC,GAAG/K,KAAK2S,6BAA8B,CAAErU,OAAQA,GAChH,CAEOouB,mBAAmBxZ,GACzB,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KAA8B,GAAG1S,KAAK2S,8BAA+B7K,KAAKoC,UAAUiJ,GAC7G,CAEO4Z,kBAAkB7Z,GACxB,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KAA8B,GAAG1S,KAAK2S,6BAA8B7K,KAAKoC,UAAUiJ,GAC5G,+CA9NUoe,GAAyBttB,oFAAzBstB,EAAyBnuB,QAAzBmuB,EAAyB,qBAFxB,SAEDA,CAAb,kLCtBYK,EAGX,aAHWA,SAAqB,KAC/BA,0BACAA,uBAFUA,EAAZ,IAAYA,IAGX,oCCAK,MAAOC,UAA2BC,oBCDlC,MAAOC,UAAyBpI,sNCyC/B,IAAMqI,GAAb,MAAM,MAAOA,WACH9f,KAaRnS,YACUkyB,GACEttB,EACFutB,GACE9f,EACF+f,EACArtB,EACEI,IAEVqN,MAAMH,EAAa,IAAM,iBAAkBzN,EAAsBqG,qBARzDhL,qBACEA,6BACFA,4BACEA,mBACFA,oCACAA,sBACEA,kCAfLA,0BAAwCoyB,KAAM,IAAM,KACnDpyB,4BAAwB,EACxBA,+BAA2B,EAC3BA,+BAA4B,IAAIM,IAA6C,MAC7EN,mCAAgC,IAAIM,IAA6C,MAcvFN,KAAKqyB,gBAAkB,IAAInyB,KAE3BF,KAAKkF,0BAA0BotB,cAC5BlsB,QACCmsB,KAAUvyB,KAAKqyB,kBAAN,EACTG,QAAoB,EACpBnsB,KAAQkE,GAAsC,MAAnBA,IAArB,EACNkoB,KAAU,KACRzyB,KAAK0yB,cACL1yB,KAAK2yB,uBAAwB,EAEtB3yB,KAAKmyB,6BAA6B1B,oBAAoBrqB,QAC3DwsB,MAAK,IAAD,EACJC,MAAKC,IACH9yB,KAAK2yB,uBAAwB,EAC7B3yB,KAAK+yB,yBAA2BD,GAAYxC,gBAAiB,QAKpE9qB,UAAU,KACTxF,KAAKgzB,cAAL,GAGJhzB,KAAKkF,0BAA0BotB,cAC5BlsB,QACCmsB,KAAUvyB,KAAKqyB,kBAAN,EACTG,QAAoB,EACpBnsB,KAAQkE,IAAoBA,IAE7B/E,UAAU,KACTxF,KAAK0yB,cACL1yB,KAAK2yB,uBAAwB,IAGjC3yB,KAAKmyB,6BAA6B1B,oBAC/BrqB,QAAKmsB,KAAUvyB,KAAKqyB,kBACpB7sB,UAAWytB,IACV,GAAIA,EAAsB,CACxB,MAAMC,IAAgBlzB,KAAK2yB,sBAC3B3yB,KAAK2yB,uBAAwB,EAC7B3yB,KAAK+yB,yBAA2BE,EAAqB3C,gBAAiB,EAElE4C,KAAiBlzB,KAAK+yB,0BACpB/yB,KAAKiyB,aAAa7pB,OAAS2B,gBAC7B/J,KAAKgzB,cAGV,IAGLhzB,KAAKmzB,yBAA2BnzB,KAAKozB,0BAA0BvyB,eAC/Db,KAAKqzB,6BAA+BrzB,KAAKszB,8BAA8BzyB,cACxE,CAEa8R,iBACZ,MAAO,GAAG3S,KAAK2E,sBAAsBqG,kCAAkChL,KAAKkF,0BAA0B+E,0BACvG,CAEmCmQ,8BAACmZ,IACnC,MAC8C,cAA5CA,GAA0BC,gBACxBD,GAAiE9I,QAIvB,YAA5C8I,GAA0BC,gBACxBD,GAA+D9I,QAIrB,aAA5C8I,GAA0BC,gBACxBD,GAAgE9I,QAItB,sBAA5C8I,GAA0BC,gBACxBD,GAAyE9I,QAI/B,yBAA5C8I,GAA0BC,gBACxBD,GAA4E9I,MAMjF,CAEuCrQ,kCAACqZ,IACvC,IAAIC,EAAgB,4CACpB,MAAMC,GAAUF,GAAiCvgB,MAAM/D,OACjDykB,EAAkBH,GAAiCG,gBAEzD,OAAIH,GAAiCI,eAAiBC,iBACpDJ,EAAgBK,+BAAqDJ,GAASC,GACrEH,GAAiCI,eAAiBC,WAC3DJ,EAAgBM,+BAA+CL,GAASC,GAC/DH,GAAiCI,eAAiBC,gBAC3DJ,EAAgBO,+BAAoDN,GAASC,GACpEH,GAAiCI,eAAiBC,YAC3DJ,EAAgBQ,+BAAgDP,GAASC,GAChEH,GAAiCI,eAAiBC,aAC3DJ,EAAgBS,+BAAiDR,GAASC,GACjEH,GAAiCI,eAAiBC,UAC3DJ,EAAgBU,+BAA8CT,GAASC,GAC9DH,GAAiCI,eAAiBC,eAC3DJ,EAAgBW,+BAAiDV,GAASC,IAGrEF,CACR,CAEqCtZ,gCAACmZ,IACrC,MAC8C,cAA5CA,GAA0BC,gBACxBD,GAAiE9I,SAAW6J,aAC3Ef,GAAiE9I,SAAW6J,aAInC,YAA5Cf,GAA0BC,gBACxBD,GAA+D9I,SAAW6J,aACzEf,GAA+D9I,SAAW6J,aAIjC,aAA5Cf,GAA0BC,gBACxBD,GAAgE9I,SAAW6J,aAC1Ef,GAAgE9I,SAAW6J,aAIlC,sBAA5Cf,GAA0BC,gBACxBD,GAAyE9I,SAAW6J,aACnFf,GAAyE9I,SAAW6J,aAI3C,yBAA5Cf,GAA0BC,gBACxBD,GAA4E9I,SAAW6J,aACtFf,GAA4E9I,SAAW6J,WAM7F,CAEmCla,8BAACmZ,IACnC,OAAKA,GAA0BgB,UAAYhB,GAA0BgB,SAAWhB,GAA0BiB,gBAK3G,CAEMxhB,OAAOnH,IAEZ,YAAK/G,eAAeqgB,SAEb,IAAIiF,IAAYC,IACrBrqB,KAAK+S,QAAQlH,IAAMrG,UACjB,KACExF,KAAKy0B,wBACLpK,EAAS5oB,OACT4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,OACT4oB,EAASE,UAAT,EARJ,EAYH,CAEMgC,iBAAiBmI,IAEtB,YAAK5vB,eAAeqgB,SAEb,IAAIiF,IAAYC,IACrBrqB,KAAKiT,kBAAkByhB,IAAmBlvB,UACxC,KACExF,KAAKy0B,wBACLpK,EAAS5oB,OACT4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,OACT4oB,EAASE,UAAT,EARJ,EAYH,CAEMoK,oBACL,OAAO,IAAIvK,IAAYC,KACrBrqB,KAAKoS,YAAYM,KAAa,GAAG1S,KAAK2S,8BAA+B,IAAInN,UACvE,KACExF,KAAKgzB,eACL3I,GAAS5oB,MAAK,GACd4oB,GAASE,UAAT,EAEF,KACEF,GAAS5oB,MAAK,GACd4oB,GAASE,UAAT,EARJ,EAYH,CAEMqK,gBAAgBC,IACrB,OAAO,IAAIzK,IAAYC,IACrBrqB,KAAKoS,YAAYM,KAAa,GAAG1S,KAAK2S,4BAA6BkiB,IAAiCrvB,UAClG,KACExF,KAAKgzB,eACL3I,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYH,CAEMuK,iBAAiBrB,IACtB,OAAO,IAAIrJ,IAAYC,IACrBrqB,KAAKoS,YACFM,KAAuC,GAAG1S,KAAK2S,6BAA8B8gB,IAC7EjuB,UACC,KACE,MAAMkuB,GAAgB1B,GAAoB+C,2BAA2BtB,IACrEzzB,KAAK8E,eAAegG,4BACpB9K,KAAK8E,eAAeggB,8BAA8B4O,IAClD1zB,KAAKgzB,eACL3I,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAbN,EAiBH,CAEMyK,6BACLC,IAEA,OAAO,IAAI7K,IAAYC,IACrBrqB,KAAKoS,YACFM,KACC,GAAG1S,KAAK2S,yCACRsiB,IAEDzvB,UACC,KACExF,KAAKgzB,eACL3I,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAbN,EAiBH,CAEM2K,0BACLC,IAEA,OAAO,IAAI/K,IAAYC,IACrBrqB,KAAKoS,YACFM,KACC,GAAG1S,KAAK2S,sCACRwiB,IAED3vB,UACC,KACExF,KAAKgzB,eACL3I,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAbN,EAiBH,CAEM6K,aAAavpB,IAClB,OAAO7L,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,kBAAqB,CAAEwpB,QAAS,WAAYjoB,aAAc,QAC5G,CAEMkoB,cAAczpB,IACnB,OAAO7L,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,mBAAsB,CAAEwpB,QAAS,WAAYjoB,aAAc,QAC7G,CAEMmoB,cAAc1pB,IACnB,OAAO7L,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,mBAAsB,CAAEwpB,QAAS,WAAYjoB,aAAc,QAC7G,CAEMooB,sBAAsB3pB,IAC3B,OAAO7L,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,2BAA8B,CAAEwpB,QAAS,WAAYjoB,aAAc,QACrH,CAEMqoB,cAAc5pB,IACnB,OAAO7L,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,mBAAsB,CAAEwpB,QAAS,WAAYjoB,aAAc,QAC7G,CAEMsoB,aAAa7pB,IAClB,OAAO7L,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,kBAAqB,CAAEwpB,QAAS,WAAYjoB,aAAc,QAC5G,CAEMuoB,aAAa9pB,IAClB,OAAO7L,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,kBAAqB,CAAEwpB,QAAS,WAAYjoB,aAAc,QAC5G,CAEMwoB,wBAAwB/pB,IAC7B,OAAO7L,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,6BAAgC,CAAEwpB,QAAS,WAAYjoB,aAAc,QACvH,CAEMyoB,qBAAqBhqB,IAC1B,OAAO7L,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,0BAA6B,CAAEwpB,QAAS,WAAYjoB,aAAc,QACpH,CAEMqgB,iBACLpnB,GACAinB,EACAC,GACAC,GAEKnnB,KACHA,GAAS,IAAIwrB,GAGf,MAAMvzB,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,KAC7BwlB,IAAI,OAAQ0B,GAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GAEf,OAAOttB,KAAKoS,YAAYrH,IAAiC,GAAG/K,KAAK2S,6BAA8B,CAAErU,OAAQA,GAC1G,CAEMw3B,qBAAqBC,IAE1B/1B,KAAK8E,eAAeqgB,SAEpB,MAAM6Q,EAAiB,IAAIjE,EAC3BiE,SAAe5uB,OAAS2uB,GAEjB,IAAI3L,IAAqBC,KAC9BrqB,KAAKoS,YACFM,KAA+C,GAAG1S,KAAK2S,iCAAkC7K,KAAKoC,UAAU8rB,IACxGxwB,UACC,KACExF,KAAKy0B,wBACLpK,GAAS5oB,MAAK,GACd4oB,GAASE,UAAT,EAEF,KACEF,GAAS5oB,MAAK,GACd4oB,GAASE,UAAT,EAVN,EAcH,CAEM0L,cACLj2B,KAAKk2B,cAAcC,aACpB,CAEMnD,eACDhzB,KAAKk2B,eAITl2B,KAAKy0B,wBACDz0B,KAAKkF,0BAA0B+E,aACjCjK,KAAKk2B,aAAel2B,KAAKo2B,kBAAkB5wB,UAAU,KACnDxF,KAAKy0B,uBAAL,IAGL,CAEM/B,cACL1yB,KAAKk2B,cAAcC,cACnBn2B,KAAKk2B,aAAe,IACrB,CAEOzB,wBACN,IAAKz0B,KAAK2yB,wBAA0B3yB,KAAKkF,0BAA0B+E,WACjE,OAEF,GAAIjK,KAAK+yB,yBAEP,YADA/yB,KAAK0yB,cAGP1yB,KAAK8E,eAAegG,4BACpB,MAAMzE,GAAS,IAAIwrB,EAEnB7xB,KAAKytB,iBAAiBpnB,GAAQ,KAAM,EAAG,KAAKb,UACzCwD,IAKC,GAJIA,EAAOqtB,YAAYjvB,QACrBpH,KAAKozB,0BAA0B3xB,KAAKuH,EAAOqtB,WAAWjvB,QAGpD4B,EAAOqtB,YAAYjvB,QAAQ+H,OAAS,EAAG,CAGL,IADRnG,EAAOqtB,WAAWjvB,OAAOf,OAAQ3H,GAAMszB,GAAoBsE,uBAAuB53B,KACrFyQ,QACvBnP,KAAK0yB,cAIP,MAAM6D,EAA2BvtB,EAAOqtB,WAAWjvB,OAAOf,OACvD3H,GAAMszB,GAAoBwE,uBAAuB93B,IAAMA,EAAE+3B,YAAc7E,SAGtE2E,EAAyBpnB,OAAS,IACpCnP,KAAKkyB,oBAAoB5uB,WAAWozB,SAAsBC,iBAC1D32B,KAAKszB,8BAA8B7xB,KAAK80B,GAE3C,MACCv2B,KAAK0yB,aAAL,EAGHhwB,IACCX,QAAQW,MAAMA,GACd1C,KAAK0yB,aAAL,EAGL,kDA9cUV,IAAmB/tB,uHAAnB+tB,GAAmB5uB,QAAnB4uB,GAAmB,qBAFlB,SAEDA,EAAb,0NCbO,IAAM4E,EAAb,MAAM,MAAOA,UAAwBC,IAMnC92B,YACU+2B,EACEnyB,EACFmlB,EACE1X,EACFtN,EACAE,EACEE,GAEVqN,MAAMH,EAAa,aAAczN,EAAsBqG,oBAAqB9F,GARpElF,uBACEA,6BACFA,yBACEA,mBACFA,sBACAA,eACEA,gCAGX,CAEyBoa,oBAACxO,EAAsBF,EAA2BygB,GAC1E,IAAIxV,EAAU,mBACd,OAEEA,EAFEwV,EAEQ,GAAGxV,WAAiBjL,IAGpB,GAAGiL,WAAiB/K,IAGzB+K,CACR,CAEqCyD,gCAAC2c,GACrC,OAAO/2B,KAAKg3B,aAAaD,EAASnrB,aAAcmrB,EAASnrB,aAAcmrB,EAASE,wBAAwB9nB,OAAS,EAClH,CAEM+nB,0BAA0BhkB,GAC/B,MAAMC,EAA0BC,8BAA0CF,GAE1E,OAAOlT,KAAKoS,YAAYM,KACtB,GAAG1S,KAAK2S,sCACR7K,KAAKoC,UAAUiJ,GAElB,CAEMgkB,gCACLC,GAEA,OAAOp3B,KAAKoS,YAAYM,KACtB,GAAG1S,KAAK2S,4CACR7K,KAAKoC,UAAUktB,GAElB,CAEMpkB,OAAOnH,EAAcN,GAC1B,MAAM8rB,EAAc,aAAa9rB,IACjC,OAAO,IAAI6e,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,4CAAyC+f,MACvDthB,SAAU,KACRxD,MAAMQ,QAAQlH,GAAMrG,UAClB,KACExF,KAAK8E,eAAe2gB,wBAAwB,aAAa4R,gCACzDhN,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAjBJ,EAqBH,CAEMgC,iBAAiBrZ,GACtB,OAAO,IAAIkX,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,+BAA4BpE,EAAM/D,6CAChD4G,SAAU,KACR/V,KAAKiT,kBAAkBC,GAAO1N,UAC5B,KACExF,KAAK8E,eAAe2gB,wBAAwB,GAAGvS,EAAM/D,yDACrDkb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAjBJ,EAqBH,CAEM+M,OAAOzrB,EAAcN,GAC1B,MAAM8rB,EAAc,aAAa9rB,IACjC,OAAO,IAAI6e,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,sBAAsB+f,MACpCthB,SAAU,KACR/V,KAAKu3B,QAAQ,CAAC1rB,IAAOrG,UAClBwD,IACChJ,KAAK8E,eAAe2gB,wBAAwB,aAAa4R,4BACzDhN,EAAS5oB,KAAKuH,EAAO6lB,aAAa1f,OAAS,GAC3Ckb,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF9S,gBAAiB,6JAnBnB,EAsBH,CAEM+f,iBAAiBtkB,GACtB,OAAO,IAAIkX,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,yBACdvB,SAAU,KACR/V,KAAKu3B,QAAQrkB,GAAO1N,UAClB,KACExF,KAAK8E,eAAe2gB,wBAAwB,sCAC5C4E,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF9S,gBAAiB,+JAnBnB,EAsBH,CAEMggB,OAAO5rB,EAAc6rB,EAAmCC,cAC7D,OAAO33B,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,YAAe6rB,IAAmB,CAAErC,QAAS,WAAYjoB,aAAc,QACzH,CAEMqgB,iBAAiBpnB,EAAwBinB,EAAcC,EAAcC,GACrEnnB,IACHA,EAAS,IAAI+nB,KAGf/nB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aAEtD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GAEf,OAAO,IAAIlD,IAAqCC,IAE9CrqB,KAAK8E,eAAeqgB,SACpBnlB,KAAKoS,YAAYrH,IAA6B,GAAG/K,KAAK2S,6BAA8B,CAAErU,OAAQA,IAAUkH,UACrGmlB,IACCN,EAAS5oB,KAAKkpB,GACdN,EAASE,UAAT,EAED7nB,IACC,GAAqB,MAAjBA,EAAM+nB,OACR,GAAIzqB,KAAK8E,eAAesgB,aAAa1iB,EAA4B,oCAAqC,CACpG,MAAMkoB,EAAsB5qB,KAAK8E,eAAesf,kBAAkB1hB,GAElE1C,KAAK8E,eAAewgB,kBAClBsF,EACA,KACE,MAAMgN,GAAiB53B,KAAK82B,gBAAgBe,SAASC,YACrD,IAAIC,GAAoCC,GACpCJ,IAAgBI,SAClBA,GAASlwB,KAAKC,MAAM6vB,GAAeI,SAC/BA,IAAQC,gBAAgBC,kBAAiE,IAA7CF,IAAQC,gBAAgBC,oBACtEF,GAAOC,eAAeC,iBAA8D,IAA3CF,GAAOC,eAAeC,kBAAyB,EAAK,EAC7FH,GAAiB,CAAEC,OAAQlwB,KAAKoC,UAAU8tB,OAI9Ch4B,KAAKgF,QAAQmzB,SAAS,GAAI,CACxBC,WAAYp4B,KAAK82B,gBACjBgB,YAAaC,GACbM,oBAAqB,QACrBC,YAAY,EACZr5B,MAAO,CAAEs5B,gBAAgB,IAL3B,EAd4C,IAA5BlyB,EAAO6xB,iBAAyB,0CAAmC,mCAyBvD,IAA5B7xB,EAAO6xB,kBACTl4B,KAAK8E,eAAe4gB,oBAClB,mJACA,KACA,MACA,GACA,GAIJ1lB,KAAK8E,eAAeof,kBAEpBmG,EAAS3nB,MAAMA,EAChB,KAAM,CACL,MAAMkoB,EAAsB5qB,KAAK8E,eAAesf,kBAAkB1hB,GAC/B,IAA/BkoB,EAAoBzb,QACtBnP,KAAK8E,eAAe+f,wBAAwB+F,EAE/C,CAGHP,EAASE,UAAT,EAvDJ,EA2DH,CAEMiO,wBAAwBtlB,EAAiBulB,GAC9C,OAAO,IAAIrO,IAAYC,IACrBrqB,KAAK04B,yBAAyBxlB,GAAO1N,UACnC,KACMizB,GAEAz4B,KAAK8E,eAAe2gB,wBADlBvS,EAAM/D,OAAS,EAC2B,GAAG+D,EAAM/D,iEAET,wDAGhDkb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAdJ,EAkBH,CAEMoO,QAAQ9sB,EAAcD,EAAsB9B,GACjD,OAAO,IAAIsgB,IAAYC,IACrBrqB,KAAK44B,mBAAmB,CAAC/sB,IAAOrG,UAC7BwD,IACChJ,KAAK8E,eAAe2gB,wBAClB,uBAAuB7Z,8DAErB5C,EAAO6vB,iDACL74B,KAAKkF,0BAA0BsH,gBAAgBmU,mBACjD3gB,KAAK8E,eAAe4gB,oBAClB,+DACA,KACE1lB,KAAKgF,QAAQ+J,cAAcmgB,qCAAgDplB,GAA3E,EAEF,gDACA,GACA,GAGF9J,KAAK8E,eAAe4gB,oBAAoB,+DAA0D,KAAM,MAAM,GAAO,IAGzH2E,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAzBJ,EA6BH,CAEMuO,kBAAkB5lB,GACvB,OAAO,IAAIkX,IAAYC,IACrBrqB,KAAK44B,mBAAmB1lB,GAAO1N,UAC5BwD,IACChJ,KAAK8E,eAAe2gB,wBAClB,GAAGvS,EAAM/D,kFAEPnG,EAAO6vB,gDACT74B,KAAK8E,eAAe4gB,oBAClB,6EACA,KACE1lB,KAAKgF,QAAQ+J,cAAcmgB,oDAA3B,EAEF,2CACA,GACA,GAGJ7E,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EArBJ,EAyBH,CAEMwO,mBAAmBC,EAA0BC,GAClD,OAAO,IAAI7O,IAAYC,IAErBrqB,KAAKk5B,QAAQD,GAAczzB,UACxB2zB,IAEC,MAAMC,EAA6BD,EAAsBE,cAAcppB,KAAMvR,GAAMA,EAAEmN,OAASmtB,GAExF3B,EAAcT,EAAgB0C,yBAAyBH,GAE7Dn5B,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc+f,EACdthB,SAAU,KACR/V,KAAKu5B,8BAA8B,CAACP,IAAmBxzB,UACrD,KACExF,KAAK8E,eAAe2gB,wBAClB,GAAG4R,iBAAqB+B,EAA6B,iBAAgB,mBAEvE/O,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAVJ,EAcFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEFhT,aAAc,cAAW6hB,EAA6B,iBAAgB,kBACtExkB,YAAa,YACbC,aAAc,WAvBhB,EA0BF,KACEwV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAnCJ,EAuCH,CAEMiP,oBAAoBC,GACzB,OAAO,IAAIrP,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,sCAAsCmiB,EAAkBtqB,2BACtE4G,SAAU,KACR/V,KAAKu5B,8BAA8BE,GAAmBj0B,UACpD,KACExF,KAAK8E,eAAe2gB,wBAClB,kBAAkBgU,EAAkBtqB,uEAEtCkb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAVJ,EAcFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEFhT,aAAc,8CACd3C,YAAa,YACbC,aAAc,WAvBhB,EA0BH,CAEM6kB,0BAA0BxmB,GAC/B,OAAO,IAAIkX,IAAYC,IACrBrqB,KAAK25B,2BAA2BzmB,GAAO1N,UACrC,KAEIxF,KAAK8E,eAAe2gB,wBADlBvS,EAAM/D,OAAS,EAC2B,GAAG+D,EAAM/D,qEAET,4DAE9Ckb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAZJ,EAgBH,CAEMqP,UAAU/tB,EAAcN,GAC7B,OAAO,IAAI6e,IAAYC,GACrBrqB,KAAK65B,qBAAqB,CAAChuB,IAAOrG,UAC/B8mB,IACKA,GACFtsB,KAAK8E,eAAe2gB,wBAClB,uBAAuBla,mEAEzB8e,EAAS5oB,MAAK,GACd4oB,EAASE,aAETF,EAAS5oB,MAAK,GACd4oB,EAASE,WAAT,EAGJ,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAIP,CAEMuP,oBAAoB5mB,GACzB,OAAO,IAAIkX,IAAYC,GACrBrqB,KAAK65B,qBAAqB3mB,GAAO1N,UAC9B8mB,IACKA,GACFtsB,KAAK8E,eAAe2gB,wBAClB,GAAGvS,EAAM/D,uFAEXkb,EAAS5oB,MAAK,GACd4oB,EAASE,aAETF,EAAS5oB,MAAK,GACd4oB,EAASE,WAAT,EAGJ,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAIP,CAEOgN,QAAQrkB,GACd,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KACtB,GAAG1S,KAAK2S,6BACR7K,KAAKoC,UAAUiJ,GAElB,CAEOulB,yBAAyBxlB,GAC/B,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KAAW,GAAG1S,KAAK2S,oCAAqC7K,KAAKoC,UAAUiJ,GAChG,CAEOylB,mBAAmB1lB,GACzB,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KAA+B,GAAG1S,KAAK2S,8BAA+B7K,KAAKoC,UAAUiJ,GAC9G,CAEOomB,8BAA8BrmB,GACpC,MAAMC,EAA0BC,8BAA0CF,GAE1E,OAAOlT,KAAKoS,YAAYM,KACtB,GAAG1S,KAAK2S,yCACR7K,KAAKoC,UAAUiJ,GAElB,CAEOwmB,2BAA2BzmB,GACjC,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KAAW,GAAG1S,KAAK2S,sCAAuC7K,KAAKoC,UAAUiJ,GAClG,CAEO0mB,qBAAqB3mB,GAC3B,OAAO,IAAIkX,IAAYC,IACrBrqB,KAAK8pB,kBAAkB1R,2BAA2B,CAChDd,aAAc,2JACdvB,SAAWgkB,IACT,MAAMC,EAAqB,IAAIC,IAC/BD,EAAmB9mB,MAAQE,qBAAiCF,GAC5D8mB,EAAmBD,oBAAsBA,EACzC/5B,KAAKoS,YACFM,KAA8B,GAAG1S,KAAK2S,gCAAiC7K,KAAKoC,UAAU8vB,IACtFx0B,UACC,KACE6kB,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EATN,EAaFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF3V,YAAa,YACbC,aAAc,UACd4C,gBAAiB,iFAzBnB,EA4BH,+CA5gBUmf,GAAe3yB,4GAAf2yB,EAAexzB,QAAfwzB,EAAe,qBAFd,SAEDA,CAAb,yHCbO,IAAMsD,EAAb,MAAM,MAAOA,UAA8BrQ,IAOzC9pB,YACY4E,EACAyN,EACAlN,GAEVqN,MAAMH,EAAa,mBAAoBzN,EAAsBqG,oBAAqB9F,GAJxElF,6BACAA,mBACAA,iCAPJA,kDAA+C,IAAIqF,IACnDrF,2CAAwC,IAAIqF,IASlDrF,KAAKm6B,6CAA+Cn6B,KAAKo6B,6CAA6Cv5B,eACtGb,KAAKq6B,sCAAwCr6B,KAAKs6B,sCAAsCz5B,cACzF,CAEM05B,YAAY1uB,GACjB,OAAO7L,KAAKoS,YAAYrH,IAAiC,GAAG/K,KAAK2S,aAAa9G,SAC/E,CAEM2uB,iCACL,OAAOx6B,KAAKy6B,4BACb,CAEMtN,mBACL,OAAOntB,KAAKoS,YAAYrH,IAAiC,GAAG/K,KAAK2S,6BAClE,CAEMya,eAAevhB,GACpB,OAAO7L,KAAKoS,YAAYrH,IAAiC,GAAG/K,KAAK2S,aAAa9G,mBAC/E,CAEM6uB,qCAAqCC,GAC1C36B,KAAKo6B,6CAA6C34B,KAAKk5B,EACxD,CAEMC,8BAA8BC,GACnC76B,KAAKs6B,sCAAsC74B,KAAKo5B,EACjD,CAEMC,+BAA+BC,GACpC/6B,KAAKy6B,6BAA+BM,CACrC,+CA3CUb,GAAqBj2B,8DAArBi2B,EAAqB92B,QAArB82B,EAAqB,qBAFpB,SAEDA,CAAb,oMCOO,IAAMc,EAAb,MAAM,MAAOA,UAAoBnE,IAM/B92B,YACY4E,EACFmlB,EACE1X,EACFtN,EACAE,EACEE,GAEVqN,MAAMH,EAAa,SAAUzN,EAAsBqG,oBAAqB9F,GAP9DlF,6BACFA,yBACEA,mBACFA,sBACAA,eACEA,gCAGX,CAEMgT,OAAOioB,EAAkBC,GAC9B,OAAO,IAAI9Q,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,wCAAqC4jB,MACnDnlB,SAAU,KACR/V,KAAK+S,QAAQkoB,GAAUz1B,UACrB,KACExF,KAAK8E,eAAe2gB,wBAAwB,SAASyV,oCACrD7Q,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAjBJ,EAqBH,CAEMgC,iBAAiB4O,GACtB,OAAO,IAAI/Q,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,+BAA4B6jB,EAAUhsB,qCACpD4G,SAAU,KACR/V,KAAKiT,kBAAkBkoB,GAAW31B,UAChC,KACExF,KAAK8E,eAAe2gB,wBAAwB,GAAG0V,EAAUhsB,iDACzDkb,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,GAjBJ,EAqBH,CAEMiC,QAAQyO,EAAkBG,EAAkB3O,GACjD,OAAO,IAAIrC,IAAYC,IACrBrqB,KAAK0sB,mBAAmB,CAACuO,IAAWz1B,UAClC,KACExF,KAAK8E,eAAe2gB,wBAAwB,SAAS2V,kCAAoC3O,GACzFpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYH,CAEMqC,kBAAkBuO,EAAqB1O,GAC5C,OAAO,IAAIrC,IAAYC,IACrBrqB,KAAK0sB,mBAAmByO,GAAW31B,UACjC,KACExF,KAAK8E,eAAe2gB,wBAAwB,GAAG0V,EAAUhsB,mDAA8Csd,GACvGpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYH,CAEM8Q,UAAUC,GACf,YAAKC,cAAcD,EAAuBE,eACnCx7B,KAAKoS,YAAYM,KAA6B,GAAG1S,KAAK2S,sBAAuB7K,KAAKoC,UAAUoxB,GACpG,CAEMxO,OAAOmO,EAAkBG,EAAkB3O,GAChD,OAAO,IAAIrC,IAAYC,IACrBrqB,KAAK+sB,kBAAkB,CAACkO,IAAWz1B,UACjC,KACExF,KAAK8E,eAAe2gB,wBAAwB,SAAS2V,4BAAiC3O,GACtFpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYH,CAEM0C,iBAAiBkO,EAAqB1O,GAC3C,OAAO,IAAIrC,IAAYC,IACrBrqB,KAAK+sB,kBAAkBoO,GAAW31B,UAChC,KACExF,KAAK8E,eAAe2gB,wBAAwB,GAAG0V,EAAUhsB,6CAA2Csd,GACpGpC,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYH,CAEMkR,mBACL3xB,EACA4xB,EAA2CC,iBAE3C,MAAMr9B,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAA4B2nB,IAAI,sBAAuB6P,EAAoBtf,YAExH,OAAO,IAAIgO,IAAYC,IAErBrqB,KAAK8E,eAAeqgB,SACpBnlB,KAAKoS,YACFrH,IAAI,GAAG/K,KAAK2S,sBAAsB7I,gCAA2C4xB,IAAuB,CACnGp9B,OAAQA,EACR+2B,QAAS,WACTjoB,aAAc,SAEf5H,UACEmlB,IACC,MAAQiR,OAAMC,YAA+CC,uBAA8BnR,GAC3FN,EAAS5oB,KAAK,CAAEm6B,OAAMC,aACtBxR,EAASE,UAAT,EAED7nB,IACC,GAAqB,MAAjBA,EAAM+nB,OACR,GAAIzqB,KAAK8E,eAAesgB,aAAa1iB,EAA4B,iCAC/D1C,KAAK8E,eAAe+f,wBAClB,sHACA,KACE7kB,KAAKgF,QAAQ+J,cAAc,sCAA3B,EAEF,oCAEG,CACL,MAAM6b,EAAsB5qB,KAAK8E,eAAesf,kBAAkB1hB,GAC/B,IAA/BkoB,EAAoBzb,QACtBnP,KAAK8E,eAAe+f,wBAAwB+F,EAE/C,SACyB,MAAjBloB,EAAM+nB,OAAgB,CAC/B,MAAMpG,EAAe,kEACfuG,EAAsB5qB,KAAK8E,eAAesf,kBAAkB1hB,GAEhE1C,KAAK8E,eAAe+f,wBADa,IAA/B+F,EAAoBzb,OACsBkV,EAEAuG,EAE/C,CAEDP,EAASE,UAAT,EAtCN,EA0CH,CAEMnf,QAAQtB,GACb,OAAO9J,KAAKoS,YAAYrH,IAA+B,GAAG/K,KAAK2S,sBAAsB7I,YACtF,CAEM2tB,OAAO5rB,GACZ,OAAO,IAAIue,IAAYC,IAErBrqB,KAAK8E,eAAeqgB,SACpBnlB,KAAKoS,YAAYrH,IAAI,GAAG/K,KAAK2S,aAAa9G,WAAe,CAAEwpB,QAAS,WAAYjoB,aAAc,SAAU5H,UACrGmlB,IACC,MAAQiR,OAAMC,YAA+CC,uBAA8BnR,GAC3FN,EAAS5oB,KAAK,CAAEm6B,OAAMC,aACtBxR,EAASE,UAAT,EAED7nB,IACC,GAAqB,MAAjBA,EAAM+nB,OACR,GAAIzqB,KAAK8E,eAAesgB,aAAa1iB,EAA4B,iCAC/D1C,KAAK8E,eAAe+f,wBAClB,sHACA,KACE7kB,KAAKgF,QAAQ+J,cAAc,sCAA3B,EAEF,oCAEG,CACL,MAAM6b,EAAsB5qB,KAAK8E,eAAesf,kBAAkB1hB,GAC/B,IAA/BkoB,EAAoBzb,QACtBnP,KAAK8E,eAAe+f,wBAAwB+F,EAE/C,SACyB,MAAjBloB,EAAM+nB,OAAgB,CAC/B,MAAMpG,EAAe,kEACfuG,EAAsB5qB,KAAK8E,eAAesf,kBAAkB1hB,GAEhE1C,KAAK8E,eAAe+f,wBADa,IAA/B+F,EAAoBzb,OACsBkV,EAEAuG,EAE/C,CAEDP,EAASE,UAAT,EAhCJ,EAoCH,CAEMc,6BAA6B4P,EAAkBhQ,GACpD,MAAM9X,EAA0BC,8BAA0C6X,GAC1E,OAAOjrB,KAAKoS,YAAYM,KACtB,GAAG1S,KAAK2S,aAAasoB,iCACrBnzB,KAAKoC,UAAUiJ,GAElB,CAEOuZ,mBAAmBxZ,GACzB,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KAA8B,GAAG1S,KAAK2S,8BAA+B7K,KAAKoC,UAAUiJ,GAC7G,CAEO4Z,kBAAkB7Z,GACxB,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KAA8B,GAAG1S,KAAK2S,6BAA8B7K,KAAKoC,UAAUiJ,GAC5G,+CA3PU6nB,GAAW/2B,gGAAX+2B,EAAW53B,QAAX43B,EAAW,qBAFV,SAEDA,CAAb,oDCxBM,MAAOe,EAOXh8B,YAAoBi8B,EAAkBC,GACpCj8B,KAAKi8B,cAAgBA,EACrBj8B,KAAKk8B,mBAAqBF,CAC3B,CAEwB5hB,qBACvB,OAAOpa,KAAKm8B,QACb,CAEwB/hB,mBAAC8hB,GACxBl8B,KAAKm8B,SAAW,IAAIJ,EAAkBG,EAAoB,eAC3D,EAlB2B,2KCoBvB,IAAME,EAAb,MAAM,MAAOA,UAA4BvS,IACvC9pB,YACY4E,EACFmlB,EACE1X,EACFtN,EACEI,GAEVqN,MAAMH,EAAa,iBAAkBzN,EAAsBqG,oBAAqB9F,GANtElF,6BACFA,yBACEA,mBACFA,sBACEA,gCAGX,CAEMq8B,cAAcC,GACnB,OAAOt8B,KAAKoS,YAAYM,KACtB,GAAG1S,KAAK2S,0BACR7K,KAAKoC,UAAUoyB,GAElB,CAEMtpB,OAAOupB,EAA0BC,GACtC,OAAO,IAAIpS,IAAYC,IACrBrqB,KAAK8pB,kBAAkBzS,gBAAgB,CACrCC,aAAc,2BAA2BklB,yBACzCzmB,SAAU,KACR/V,KAAK+S,QAAQwpB,GAAkB/2B,UAC7B,KACExF,KAAK8E,eAAe2gB,wBAAwB,eAAe+W,kBAC3DnS,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF,KACEF,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EARJ,EAYFlV,UAAW,KACTgV,EAAS5oB,MAAK,GACd4oB,EAASE,UAAT,EAEF9S,gBAAiB,2DAnBnB,EAsBH,CAEM0V,iBAAiBrjB,GACtB,OAAO9J,KAAKoS,YAAYrH,IAA+B,GAAG/K,KAAK2S,uCAAuC7I,IACvG,CAEMsjB,eAAevhB,GACpB,OAAO7L,KAAKoS,YAAYrH,IAA+B,GAAG/K,KAAK2S,aAAa9G,mBAC7E,CAEM4hB,iBACLpnB,EACAinB,EACAC,EACAC,EACA1jB,GAEKzD,IACHA,EAAS,IAAI+lB,KAGf/lB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aACtD5D,EAAO4kB,cAAgBnhB,EAAe,CAACA,GAAgB,KAEvD,MAAMxL,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GAEf,OAAOttB,KAAKoS,YAAYrH,IAAiC,GAAG/K,KAAK2S,6BAA8B,CAAErU,OAAQA,GAC1G,CAEMwvB,gCAAgC5a,GACrC,MAAMC,EAA0BC,8BAA0CF,GAC1E,OAAOlT,KAAKoS,YAAYM,KAAW,GAAG1S,KAAK2S,4CAA6C7K,KAAKoC,UAAUiJ,GACxG,+CA9EUipB,GAAmBn4B,oFAAnBm4B,EAAmBh5B,QAAnBg5B,EAAmB,qBAFlB,SAEDA,CAAb,2LCAO,IAAMK,EAAb,MAAM,MAAOA,EAcX18B,YACU4E,EACAoa,EACA3M,EACAsqB,EACA53B,EACAG,GALAjF,6BACAA,8BACAA,mBACAA,wBACAA,sBACAA,8BAjBHA,oBAAiB,cAChBA,0BAAuB,IAAIqF,IAC3BrF,qBAAiB,EAiBvBA,KAAK08B,iBAAiBnc,yBAA2BvgB,KACjDA,KAAKsyB,cAAgBtyB,KAAK28B,qBAAqB97B,cAChD,CAEU2f,oBACT,OAAOxgB,KAAK48B,iBAAkB,CAC/B,CAEUpc,kBAAclc,GACvB,MAAMu4B,EAAmB78B,KAAK48B,eAC9B58B,KAAK48B,eAAiBt4B,EAElBtE,KAAK48B,iBAAmBC,IACtB78B,WAAK48B,eACP58B,KAAKiF,uBAAuBqD,MAAM,mCAAoCtI,KAAK48B,gBAE3E58B,KAAKiF,uBAAuBuD,WAAW,oCAG5C,CAEUsD,qBACT,OAAO9L,KAAK88B,eACb,CAEUhxB,mBAAexH,GACxB,MAAMy4B,EAAoB/8B,KAAK88B,gBAC/B98B,KAAK88B,gBAAkBx4B,EAEnBtE,KAAK88B,kBAAoBC,IACvB/8B,KAAK88B,gBACP98B,KAAKiF,uBAAuBqD,MAAM,0BAA2BtI,KAAK88B,iBAElE98B,KAAKiF,uBAAuBuD,WAAW,2BAG5C,CAEUuD,6BACT,OAAO/L,KAAKg9B,uBACb,CAEUjxB,2BAAuBzH,GAChC,MAAM24B,EAA4Bj9B,KAAKg9B,wBACvCh9B,KAAKg9B,wBAA0B14B,EAE3BtE,KAAK+L,yBAA2BkxB,IAC9Bj9B,WAAKg9B,wBACPh9B,KAAKiF,uBAAuBqD,MAAM,kCAAmCtI,KAAKg9B,yBAE1Eh9B,KAAKiF,uBAAuBuD,WAAW,mCAG5C,CAEUyD,qBACT,OAAOjM,KAAKk9B,eACb,CAEUjxB,mBAAe3H,GACxB,MAAM64B,EAAoBn9B,KAAKk9B,gBAC/Bl9B,KAAKk9B,gBAAkB54B,EAEnBtE,KAAKk9B,kBAAoBC,IACvBn9B,KAAKk9B,gBACPl9B,KAAKiF,uBAAuBqD,MAAM,0BAA2BtI,KAAKk9B,iBAElEl9B,KAAKiF,uBAAuBuD,WAAW,2BAG5C,CAEU0D,oCACT,OAAOlM,KAAKo9B,8BACb,CAEUlxB,kCAA8B5H,GACvC,MAAM+4B,EAAmCr9B,KAAKo9B,+BAC9Cp9B,KAAKo9B,+BAAiC94B,EAElCtE,KAAKo9B,iCAAmCC,IACtCr9B,WAAKo9B,+BACPp9B,KAAKiF,uBAAuBqD,MAAM,4CAA6CtI,KAAKo9B,gCAEpFp9B,KAAKiF,uBAAuBuD,WAAW,6CAG5C,CAEUgE,qBACT,OAAOxM,KAAKs9B,eACb,CAEU9wB,mBAAelI,GACxB,MAAMi5B,EAAoBv9B,KAAKs9B,gBAC/Bt9B,KAAKs9B,gBAAkBh5B,KAElBiX,KAAQvb,KAAKs9B,gBAAiBC,KAC7Bv9B,KAAKs9B,gBACPt9B,KAAKiF,uBAAuBqD,MAAM,0BAA2BtI,KAAKs9B,iBAElEt9B,KAAKiF,uBAAuBuD,WAAW,2BAG5C,CAEU4D,+BACT,OAAOpM,KAAKw9B,yBACb,CAEUpxB,6BAAyB9H,GAClC,MAAMm5B,EAA8Bz9B,KAAKw9B,0BACzCx9B,KAAKw9B,0BAA4Bl5B,EAE7BtE,KAAKw9B,4BAA8BC,IACrC1B,gBAA8B/7B,KAAKw9B,2BAC/Bx9B,KAAKw9B,0BACPx9B,KAAKiF,uBAAuBqD,MAAM,oCAAqCtI,KAAKw9B,2BAE5Ex9B,KAAKiF,uBAAuBuD,WAAW,qCAG5C,CAEUyB,iBACT,OAAOjK,KAAK09B,WACb,CAEUzzB,eAAW3F,GACpB,MAAMq5B,EAAgB39B,KAAK09B,YAC3B19B,KAAK09B,YAAcp5B,EAEftE,KAAK09B,cAAgBC,IACnB39B,KAAK09B,YACP19B,KAAKiF,uBAAuBqD,MAAM,0BAA2BtI,KAAK09B,aAElE19B,KAAKiF,uBAAuBuD,WAAW,2BAG5C,CAEMo1B,QACL59B,KAAKwgB,cAAgB,KACrBxgB,KAAK8L,eAAiB,KACtB9L,KAAK+L,uBAAyB,KAC9B/L,KAAKiM,eAAiB,KACtBjM,KAAKkM,8BAAgC,KACrClM,KAAKwM,eAAiB,KACtBxM,KAAKoM,yBAA2B,KAChCpM,KAAKiK,WAAa,IACnB,CAEM4zB,QAAQtzB,EAAwBuzB,GAAa,GAClD,YAAKtd,eAAgB,EAEd,IAAI4J,IAA0CC,IACnDrqB,KAAKoL,QAAQb,GAAgB/E,UAC1B+G,IACCvM,KAAK8L,eAAiBS,EAA6BE,WAAWjB,KAC9DxL,KAAK+L,uBAAyBQ,EAA6BE,WAAWT,aACtEhM,KAAKiM,eAAiBM,EAA6BE,WAAWnD,KAC9DtJ,KAAKkM,8BAAgCK,EAA6BE,WAAWN,oBAC7EnM,KAAKwM,eAAiBD,EAA6BC,eACnDxM,KAAKoM,yBAA2BG,EAA6BE,WAAWJ,eACxErM,KAAKiK,WAAasC,EAA6BE,WAAWZ,KAC1D7L,KAAK+9B,gBAAgBD,GACrBzT,EAAS5oB,KAAK8K,GACd8d,EAASE,UAAT,EAEF,KACEF,EAASE,UAAT,EAdJ,EAkBH,CAEMnf,QAAQb,GAEb,OAAOvK,KAAKoS,YAAYrH,IADN,GAAG/K,KAAK2E,sBAAsBqG,kCAAkCT,YAEnF,CAEM+f,gBACL,MAAMre,EAAiBjM,KAAKk9B,gBAC5Bl9B,KAAK49B,QAGL,MAAMt8B,EAAatB,KAAK08B,iBAAiB56B,cAAc,CAAC+c,WAAiB,MAAM,EAAM5S,GACrFjM,KAAK+e,uBAAuBhc,WAAW,QACvC/C,KAAK+e,uBAAuBtc,SAAS,OAAQnB,GAEzC2K,GACFjM,KAAK8E,eAAeggB,8BAA8B,GAAG7Y,wCAGvDjM,KAAK28B,qBAAqBl7B,KAAK,KAChC,CAEMu8B,eACLh+B,KAAK48B,eAAiB58B,KAAKiF,uBAAuBoK,KAAK,oCACvDrP,KAAK88B,gBAAkB98B,KAAKiF,uBAAuBoK,KAAK,2BACxDrP,KAAKg9B,wBAA0Bh9B,KAAKiF,uBAAuBoK,KAAK,mCAChErP,KAAKk9B,gBAAkBl9B,KAAKiF,uBAAuBoK,KAAK,2BACxDrP,KAAKo9B,+BAAiCp9B,KAAKiF,uBAAuBoK,KAAK,6CACvErP,KAAKs9B,gBAAkBt9B,KAAKiF,uBAAuBoK,KAAK,2BACxDrP,KAAKw9B,0BAA4Bx9B,KAAKiF,uBAAuBoK,KAAK,qCAClE0sB,gBAA8B/7B,KAAKw9B,2BACnCx9B,KAAK09B,YAAc19B,KAAKiF,uBAAuBoK,KAAK,2BAGlDrP,KAAKs9B,iBAALt9B,MACAA,KAAK48B,gBAEL58B,KAAK88B,iBAHL98B,MAIAA,KAAKg9B,yBAELh9B,KAAKk9B,iBANLl9B,MAOAA,KAAKo9B,gCAELp9B,KAAKw9B,2BACLx9B,KAAK09B,aAEL19B,KAAK+9B,iBAAgB,EAExB,CAEOA,gBAAgBD,GAEtB,MAAMx8B,EAAatB,KAAK08B,iBAAiB56B,cACvC,CAAC+c,UAAgBA,gBACjB7e,KAAK+L,wBACL,EACA/L,KAAKk9B,iBAGDh6B,EAAsC5B,EAAWyf,KACpDkd,GAAsE,oBAA1BA,EAAmB58B,IAElE6B,EAAe+b,eAAYrH,EAC3B1U,EAAeg7B,KAAO,GAAGl+B,KAAK8L,oBAAoB9L,KAAKk9B,kBACvDl9B,KAAK+e,uBAAuBhc,WAAW,QACvC/C,KAAK+e,uBAAuBtc,SAAS,OAAQnB,GAEzCw8B,GACF99B,KAAK8E,eAAeggB,8BAA8B,GAAG9kB,KAAKk9B,2CAG5Dl9B,KAAK28B,qBAAqBl7B,KAAKzB,KAAKiK,WACrC,+CA7QUwyB,GAAwBx4B,+FAAxBw4B,EAAwBr5B,QAAxBq5B,EAAwB,qBAFvB,SAEDA,CAAb,8ICJO,IAAM7S,EAAb,MAAM,MAAOA,UAAwBuU,IACnCp+B,YACY4E,EACAyN,EACAjN,GAEVoN,MAAMH,EAAa,aAAczN,EAAsBwM,4BAA6BhM,GAJ1EnF,6BACAA,mBACAA,8BAGX,CAEMwrB,aAAanlB,EAAwBolB,EAAeC,EAAY,IACrE,GAAc,OAAVD,GAA0C,IAAxBA,EAAMpJ,OAAOlT,OACjC,OAAO,IAAIib,IAGR/jB,IACHA,EAAS,IAAI6kB,KAGf7kB,EAAO4D,WAAa,GAAGjK,KAAKmF,wBAAwB8E,aACpD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,QAASJ,GACbI,IAAI,YAAaH,EAAUtP,YAE9B,OAAOpc,KAAKoS,YAAYrH,IAAoC,GAAG/K,KAAK2S,yBAA0B,CAAErU,OAAQA,GACzG,CAEM+uB,iBAAiBhnB,EAAwBinB,EAAcC,EAAcC,GACrEnnB,IACHA,EAAS,IAAI6kB,KAGf7kB,EAAO4D,WAAa,GAAGjK,KAAKmF,wBAAwB8E,aAEpD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GAEf,OAAOttB,KAAKoS,YAAYrH,IAA6B,GAAG/K,KAAK2S,6BAA8B,CAAErU,OAAQA,GACtG,+CAzCUsrB,GAAe3lB,8DAAf2lB,EAAexmB,QAAfwmB,EAAe,qBAFd,SAEDA,CAAb,wHCDO,IAAMsQ,EAAb,MAAM,MAAOA,UAA8BiE,IAQzCp+B,YACY4E,EACAyN,EACAjN,GAEVoN,MAAMH,EAAa,mBAAoBzN,EAAsBwM,4BAA6BhM,GAJhFnF,6BACAA,mBACAA,+BALJA,kDAA+C,IAAIqF,IAQzDrF,KAAKm6B,6CAA+Cn6B,KAAKo6B,6CAA6Cv5B,cACvG,CAEM05B,YAAY1uB,GACjB,OAAO7L,KAAKoS,YAAYrH,IAAiC,GAAG/K,KAAK2S,aAAa9G,SAC/E,CAEM6uB,qCAAqCC,GAC1C36B,KAAKo6B,6CAA6C34B,KAAKk5B,EACxD,+CAvBUT,GAAqBj2B,8DAArBi2B,EAAqB92B,QAArB82B,EAAqB,qBAFpB,SAEDA,CAAb,gLCGO,IAAMkE,EAAb,MAAM,MAAOA,EAcXr+B,YACU4E,EACAoa,EACA3M,EACAsqB,EACA53B,EACAG,EACAC,GANAlF,6BACAA,8BACAA,mBACAA,wBACAA,sBACAA,8BACAA,iCAlBHA,oBAAiB,YAMhBA,0BAAuB,IAAIqF,IAC3BrF,qBAAiB,EAavBA,KAAK08B,iBAAiB9a,uBAAyB5hB,KAC/CA,KAAKsyB,cAAgBtyB,KAAK28B,qBAAqB97B,cAChD,CAEUyK,mBACT,OAAOtL,KAAKq+B,aACb,CAEU/yB,iBAAahH,GACtB,MAAMg6B,EAAkBt+B,KAAKq+B,cAC7Br+B,KAAKq+B,cAAgB/5B,EAEjBtE,KAAKq+B,gBAAkBC,IACrBt+B,KAAKq+B,cACPr+B,KAAKiF,uBAAuBqD,MAAM,wBAAyBtI,KAAKq+B,eAEhEr+B,KAAKiF,uBAAuBuD,WAAW,yBAG5C,CAEUiD,wBACT,OAAOzL,KAAKu+B,kBACb,CAEU9yB,sBAAkBnH,GAC3B,MAAMk6B,EAAuBx+B,KAAKu+B,mBAClCv+B,KAAKu+B,mBAAqBj6B,EAEtBtE,KAAKu+B,qBAAuBC,IAC1Bx+B,WAAKu+B,mBACPv+B,KAAKiF,uBAAuBqD,MAAM,8BAA+BtI,KAAKu+B,oBAEtEv+B,KAAKiF,uBAAuBuD,WAAW,+BAG5C,CAEUkD,wBACT,OAAO1L,KAAKy+B,kBACb,CAEU/yB,sBAAkBpH,GAC3B,MAAMo6B,EAAuB1+B,KAAKy+B,mBAClCz+B,KAAKy+B,mBAAqBn6B,EAEtBtE,KAAKy+B,qBAAuBC,IAC1B1+B,KAAKy+B,mBACPz+B,KAAKiF,uBAAuBqD,MAAM,8BAA+BtI,KAAKy+B,oBAEtEz+B,KAAKiF,uBAAuBuD,WAAW,+BAG5C,CAEUmD,yBACT,OAAO3L,KAAK2+B,mBACb,CAEUhzB,uBAAmBrH,GAC5B,MAAMs6B,EAAwB5+B,KAAK2+B,oBACnC3+B,KAAK2+B,oBAAsBr6B,EAEvBtE,KAAK2+B,sBAAwBC,IAC3B5+B,WAAK2+B,oBACP3+B,KAAKiF,uBAAuBqD,MAAM,+BAAgCtI,KAAK2+B,qBAEvE3+B,KAAKiF,uBAAuBuD,WAAW,gCAG5C,CAEUoD,mBACT,OAAO5L,KAAK6+B,aACb,CAEUjzB,iBAAatH,GACtB,MAAMw6B,EAAkB9+B,KAAK6+B,cAC7B7+B,KAAK6+B,cAAgBv6B,EAEjBtE,KAAK6+B,gBAAkBC,IACrB9+B,KAAK6+B,cACP7+B,KAAKiF,uBAAuBqD,MAAM,wBAAyBtI,KAAK6+B,eAEhE7+B,KAAKiF,uBAAuBuD,WAAW,yBAG5C,CAEUgY,oBACT,OAAOxgB,KAAK48B,iBAAkB,CAC/B,CAEUpc,kBAAclc,GACvB,MAAMu4B,EAAmB78B,KAAK48B,eAC9B58B,KAAK48B,eAAiBt4B,EAElBtE,KAAK48B,iBAAmBC,IACtB78B,WAAK48B,eACP58B,KAAKiF,uBAAuBqD,MAAM,iCAAkCtI,KAAK48B,gBAEzE58B,KAAKiF,uBAAuBuD,WAAW,kCAG5C,CAEUS,8BACT,OAAOjJ,KAAK++B,wBACb,CAEU91B,4BAAwB3E,GACjCtE,KAAK++B,yBAA2Bz6B,CACjC,CAEU2F,iBACT,OAAOjK,KAAK09B,WACb,CAEUzzB,eAAW3F,GACpB,MAAMq5B,EAAgB39B,KAAK09B,YAC3B19B,KAAK09B,YAAcp5B,EAEftE,KAAK09B,cAAgBC,IACnB39B,KAAK09B,YACP19B,KAAKiF,uBAAuBqD,MAAM,wBAAyBtI,KAAK09B,aAEhE19B,KAAKiF,uBAAuBuD,WAAW,yBAG5C,CAEMo1B,QACL59B,KAAKsL,aAAe,KACpBtL,KAAKyL,kBAAoB,KACzBzL,KAAK0L,kBAAoB,KACzB1L,KAAK2L,mBAAqB,KAC1B3L,KAAK4L,aAAe,KACpB5L,KAAKwgB,cAAgB,KACrBxgB,KAAKiK,WAAa,IACnB,CAEM4zB,QAAQ/zB,EAAsBg0B,GAAa,GAChD,YAAKtd,eAAgB,EAEd,IAAI4J,IAAwCC,IACjDrqB,KAAKoL,QAAQtB,GAActE,UACxB6F,IACCrL,KAAKsL,aAAeD,EAA2BE,SAASC,KACxDxL,KAAKyL,kBAAoBJ,EAA2BE,SAASE,kBAC7DzL,KAAK0L,kBAAoBL,EAA2BE,SAASG,kBAC7D1L,KAAK2L,mBAAqBN,EAA2BE,SAASI,mBAC9D3L,KAAK4L,aAAeP,EAA2BE,SAASjC,KACxDtJ,KAAKiK,WAAaoB,EAA2BE,SAASM,KACtD7L,KAAK+9B,gBAAgBD,GACrBzT,EAAS5oB,KAAK4J,GACdgf,EAASE,UAAT,EAEF,KACEF,EAASE,UAAT,EAbJ,EAiBH,CAEMnf,QAAQtB,GAEb,OAAO9J,KAAKoS,YAAYrH,IADN,GAAG/K,KAAK2E,sBAAsBwM,wCAAwCrH,qBAEzF,CAEMwgB,gBACL,MAAM1e,EAAe5L,KAAK6+B,cACpBvzB,EAAetL,KAAKq+B,cAC1Br+B,KAAK49B,QAGL,MAAM5d,EAAY,CAACnB,gBACf7e,KAAKiJ,yBACP+W,EAAUte,QAAQmd,WAEpB,MAAMvd,EAAatB,KAAK08B,iBAAiB56B,cACvCke,EACAhgB,KAAKkF,0BAA0B6G,uBAC/B/L,KAAKiJ,wBACLjJ,KAAKkF,0BAA0B+G,gBAE7BjM,KAAKiJ,yBACPjJ,KAAKg/B,eAAe19B,GAGtBtB,KAAK+e,uBAAuBhc,WAAW,QACvC/C,KAAK+e,uBAAuBtc,SAAS,OAAQnB,GACzCgK,GAAgBM,GAClB5L,KAAK8E,eAAeggB,8BAClB,iBAAiBxZ,OAAkBM,wCAIvC5L,KAAK28B,qBAAqBl7B,KAAK,KAChC,CAEMu8B,eACLh+B,KAAKq+B,cAAgBr+B,KAAKiF,uBAAuBoK,KAAK,yBACtDrP,KAAKu+B,mBAAqBv+B,KAAKiF,uBAAuBoK,KAAK,+BAC3DrP,KAAKy+B,mBAAqBz+B,KAAKiF,uBAAuBoK,KAAK,+BAC3DrP,KAAK2+B,oBAAsB3+B,KAAKiF,uBAAuBoK,KAAK,gCAC5DrP,KAAK6+B,cAAgB7+B,KAAKiF,uBAAuBoK,KAAK,yBACtDrP,KAAK48B,eAAiB58B,KAAKiF,uBAAuBoK,KAAK,kCACvDrP,KAAK09B,YAAc19B,KAAKiF,uBAAuBoK,KAAK,yBAGlDrP,KAAKq+B,eAALr+B,MACAA,KAAK48B,gBADL58B,MAGAA,KAAKu+B,oBAHLv+B,MAKAA,KAAK2+B,qBAEL3+B,KAAK6+B,eACL7+B,KAAK09B,aAEL19B,KAAK+9B,iBAAgB,EAExB,CAEOiB,eAAeC,GACrB,MAAMhzB,EAAiBjM,KAAKkF,0BAA0B+G,eAChDH,EAAiB9L,KAAKkF,0BAA0B4G,eAChDozB,EAAgDD,EAAYle,KAC/Dkd,GAAsE,oBAA1BA,EAAmB58B,IAElE69B,EAAyBjgB,eAAYrH,EACrCsnB,EAAyBhB,KAAO,GAAGpyB,OAAoBG,GACxD,CAEO8xB,gBAAgBD,GAEtB,MAAM9d,EAAY,CAACnB,gBACf7e,KAAKiJ,yBACP+W,EAAUte,QAAQmd,WAIlBmB,EAAUxe,KADRxB,KAAK2L,qBAAuB3L,KAAKkF,0BAA0BgH,8BAC9C2S,mBAEAA,8BAGjB,MAAMvd,EAAoCtB,KAAK08B,iBAAiB56B,cAC9Dke,EACAhgB,KAAKkF,0BAA0B6G,uBAC/B/L,KAAKiJ,wBACLjJ,KAAKkF,0BAA0B+G,gBAE3B/I,EAAsC5B,EAAWyf,KACpDkd,GAAsE,kBAA1BA,EAAmB58B,IAElE6B,EAAe+b,eAAYrH,EAC3B1U,EAAeg7B,KAAO,GAAGl+B,KAAKsL,kBAAkBtL,KAAK6+B,gBAEjD7+B,KAAKiJ,yBACPjJ,KAAKg/B,eAAe19B,GAGtBtB,KAAK+e,uBAAuBhc,WAAW,QACvC/C,KAAK+e,uBAAuBtc,SAAS,OAAQnB,GAEzCw8B,GACF99B,KAAK8E,eAAeggB,8BAClB,iBAAiB9kB,KAAKq+B,mBAAmBr+B,KAAK6+B,yCAIlD7+B,KAAK28B,qBAAqBl7B,KAAKzB,KAAKiK,WACrC,+CAxSUm0B,GAAsBn6B,0GAAtBm6B,EAAsBh7B,QAAtBg7B,EAAsB,qBAFrB,SAEDA,CAAb,8ECZM,MAAgBjsB,EACpBpS,YAA6BqS,EAAmCC,EAAqCC,GAAxEtS,mBAAmCA,mBAAqCA,cAAmB,CAE1G2S,iBACZ,MAAO,GAAG3S,KAAKsS,UAAUtS,KAAKqS,eAC/B,CAEM8sB,OAAO94B,EAAiBinB,EAAO,GAAIC,EAAO,EAAGC,EAAW,IAC7D,MAAMlvB,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GAEf,OAAOttB,KAAKoS,YAAYrH,IAAqB,GAAG/K,KAAK2S,aAAc,CAAErU,OAAQA,GAC9E,CAEM46B,QAAQrtB,GACb,OAAO7L,KAAKoS,YAAYrH,IAAgB,GAAG/K,KAAK2S,aAAa9G,IAC9D,EAnBkC,0ECA9B,IAAMuzB,EAAb,MAAM,MAAOA,EAKXr/B,YAA2BiF,kBAHnBhF,mBAA0B,GAC1BA,YAAS,IAAIyb,OAAO,cAAe,KAEG,CAEnC4jB,kBACT,OAAkC,IAA9Br/B,KAAKs/B,cAAcnwB,OACd,KAEAnP,KAAKs/B,cAAct/B,KAAKs/B,cAAcnwB,OAAS,EAEzD,CAEMowB,gBAAgBC,EAAoBjH,GACzC,IAAIkH,EAQJ,GAPIlH,IACFkH,EAAS,CACPnH,YAAY,EACZr5B,MAAO,CAAEs5B,gBAAgB,MAIzBv4B,KAAKq/B,aAAgBr/B,KAAKq/B,aAAavwB,WAAW,gBAAmB9O,KAAKq/B,aAAavwB,WAAW,OAKpG9O,KAAKgF,QAAQmzB,SAAS,CAACqH,GAAaC,OALwE,CAC5G,MAAMr9B,EAAMpC,KAAKq/B,YACjBr/B,KAAKs/B,cAAcI,MACnB1/B,KAAKgF,QAAQ+J,cAAc3M,EAAKq9B,EACjC,CAGF,CAEM/yB,aACL1M,KAAKgF,QAAQO,OAAOC,UAAWC,IAC7B,GAAIA,aAAiBsa,KAAe,CAClC,IAAI4f,GAAwB,EAC5B,GAAI3/B,KAAKs/B,cAAcnwB,OAAS,EAAG,CACjC,MAAMywB,EAAWn6B,EAAMrD,IAAI2Z,QAAQ/b,KAAK6/B,OAAQ,MAC1CC,EAAY9/B,KAAKs/B,cAAct/B,KAAKs/B,cAAcnwB,OAAS,GAAG4M,QAAQ/b,KAAK6/B,OAAQ,MACvE,KAAdC,GAAoBF,IAAaE,IACnC9/B,KAAKs/B,cAAcI,MACnBC,GAAwB,EAE3B,EAEIA,GAAyBI,QAAQ9gC,MAAMs5B,iBAC1Cv4B,KAAKs/B,cAAcI,MACnBC,GAAwB,GAE1B3/B,KAAKs/B,cAAc99B,KAAKiE,EAAMrD,KAE9B,MAAM49B,EAAmB,GACrBhgC,KAAKs/B,cAAcnwB,OAAS6wB,GAC9BhgC,KAAKs/B,cAAc18B,OAAO,EAAG5C,KAAKs/B,cAAcnwB,OAAS6wB,EAE5D,CAEGv6B,aAAiB8jB,OACnBvpB,KAAKigC,mBAAqBx6B,EAAMrD,MAGrC,CAEMk2B,WAAW4H,EAAgBC,EAAuBC,GAGvDx6B,OAAOm6B,QAAQM,aAAaH,EAAWC,EAAeC,GAGtDpgC,KAAKs/B,cAAcI,MACnB1/B,KAAKs/B,cAAc99B,KAAK4+B,EACzB,+CAxEUhB,GAAoBn7B,wCAApBm7B,EAAoBh8B,QAApBg8B,EAAoB,qBAFnB,SAEDA,CAAb,mECAO,IAAMkB,EAAb,MAAM,MAAOA,EAMkBlmB,uBAACmmB,GAC5B,IACE,OAAKA,EAOOz4B,KAAKC,MAAMw4B,QANrB,CAWH,CAHA,MAAQ79B,GAEP,YADAX,QAAQC,KAAK,qCAAsCu+B,EAAM,KAAM79B,EAEhE,CACF,CAWM89B,qCAAwCC,EAASF,EAAcl+B,GACpE,GAAIk+B,EAAM,CACR,MAAMG,EAAUJ,EAAsBK,gBAAgBJ,GACtDD,EAAsBM,KAAKH,EAAMC,GACjC1gC,KAAKsI,MAAMjG,EAAKo+B,EACjB,KAAM,CACL,MAAMI,EAAwB7gC,KAAKqP,KAAKhN,GACxC,GAAIw+B,EACFP,SAAsBM,KAAKH,EAAMI,IAC1B,CAEV,CAED,OAAO,CACR,CAEMxxB,KAAKhN,GACV,MAAMk+B,EAAOO,eAAehe,QAAQzgB,GACpC,OAAOi+B,EAAsBK,gBAAgBJ,EAC9C,CAEM/3B,WAAWnG,GAChBy+B,eAAet4B,WAAWnG,EAC3B,CAEM6M,WAAW7M,GAChB,IAAI+F,EACJ,MAAM2a,EAAU/iB,KAAKqP,KAAKhN,GAC1B,OAAI0gB,IACF3a,EAAON,KAAKC,MAAMgb,IAEb3a,CACR,CAOME,MAAMjG,EAAa0+B,GACxB,IACE,MAAMC,EAAWl5B,KAAKoC,UAAU62B,GAChCD,eAAe9d,QAAQ3gB,EAAK2+B,EAG7B,CAFA,MAAQt+B,GACPX,QAAQW,MAAM,iCAAiCL,OAAUK,EAC1D,CACF,CAOkB0X,YAAIqmB,EAASQ,GAC9B,UAAWC,KAAYD,EAErB,GADwB7lB,OAAO+lB,UAAUC,eAAeC,KAAKJ,EAAKC,GAEhE,IACET,EAAKS,GAAYD,EAAIC,EAGtB,CAFA,MAAQx+B,GACPX,QAAQC,KAAKU,EACd,CAGN,+CAhGU49B,EAAqB,4BAArBA,EAAqBl9B,QAArBk9B,EAAqB,qBAFpB,SAEDA,CAAb,oGCEM,MAAgBzW,UAIZ3X,IACRnS,YACYqS,EACAkvB,EACAhvB,EACApN,GAEVqN,MACEH,EACA,IAAM,GAAGpS,KAAKkF,0BAA0Bq8B,kBAAkBvhC,KAAKkF,0BAA0B+E,aAAaq3B,IACtGhvB,GARQtS,mBACAA,oBACAA,eACAA,gCAOX,CAEMwS,SAASC,GACd,YAAK8oB,cAAc9oB,GACZzS,KAAKoS,YAAYM,KAAa,GAAG1S,KAAK2S,kBAAmB7K,KAAKoC,UAAUuI,GAChF,CAEM0Y,IAAI9kB,GACTA,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aAEtD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAA4B2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IACtG,OAAOrG,KAAKoS,YAAYrH,IAAa,GAAG/K,KAAK2S,gBAAiB,CAAErU,OAAQA,GACzE,CAEM6gC,OAAO94B,EAAiBinB,EAAO,GAAIC,EAAO,EAAGC,EAAW,IAC7DnnB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aAEtD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GACf,OAAOttB,KAAKoS,YAAYrH,IAAqB,GAAG/K,KAAK2S,aAAc,CAAErU,OAAQA,GAC9E,CAESi9B,cAAc9oB,IAEjBA,IAIDA,aAAsB+uB,MACxB/uB,EAAWxI,WAAajK,KAAKkF,0BAA0B+E,YAGzDmR,OAAOC,KAAK5I,GAAY7O,QAASvB,IAIA,iBAApBoQ,EAAWpQ,IACpBrC,KAAKu7B,cAAc9oB,EAAWpQ,GAA9B,GAGL,EAvD4D,qFCJzD,MAAgBw0B,UAKZhN,IACR9pB,YACYqS,EACAkvB,EACAhvB,EACApN,GAEVqN,MAAMH,EAAakvB,EAAchvB,EAASpN,GALhClF,mBACAA,oBACAA,eACAA,gCAGX,CAEMyhC,cAAcp7B,EAAiBinB,EAAO,GAAIC,EAAO,EAAGC,EAAW,IACpEnnB,EAAO4D,WAAa,GAAGjK,KAAKkF,0BAA0B+E,aAEtD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GACf,OAAOttB,KAAKoS,YAAYrH,IAA4B,GAAG/K,KAAK2S,oBAAqB,CAAErU,OAAQA,GAC5F,EAnBkE,+FCL/D,MAAgB6/B,UAIZhsB,IACRpS,YACYqS,EACAkvB,EACAhvB,EACAnN,GAEVoN,MACEH,EACA,IAAM,GAAGpS,KAAKmF,wBAAwBo8B,kBAAkBvhC,KAAKmF,wBAAwB8E,aAAaq3B,IAClGhvB,GARQtS,mBACAA,oBACAA,eACAA,8BAOX,CAEMmrB,IAAI9kB,GACTA,EAAO4D,WAAa,GAAGjK,KAAKmF,wBAAwB8E,aAEpD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAA4B2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IACtG,OAAOrG,KAAKoS,YAAYrH,IAAa,GAAG/K,KAAK2S,gBAAiB,CAAErU,OAAQA,GACzE,CAEM6gC,OAAO94B,EAAiBinB,EAAO,GAAIC,EAAO,EAAGC,EAAW,IAC7DnnB,EAAO4D,WAAa,GAAGjK,KAAKmF,wBAAwB8E,aAEpD,MAAM3L,EAAS,IAAIqtB,KAAW,CAAEC,QAAS,IAAI1nB,MAC1C2nB,IAAI,SAAU/jB,KAAKoC,UAAU7D,IAC7BwlB,IAAI,OAAQ0B,EAAKnR,YACjByP,IAAI,WAAY2B,EAASpR,YACzByP,IAAI,OAAQyB,GACf,OAAOttB,KAAKoS,YAAYrH,IAAqB,GAAG/K,KAAK2S,aAAc,CAAErU,OAAQA,GAC9E,CAESi9B,cAAc9oB,IAEjBA,IAIDA,aAAsB+uB,MACxB/uB,EAAWxI,WAAajK,KAAKmF,wBAAwB8E,YAGvDmR,OAAOC,KAAK5I,GAAY7O,QAASvB,IAIA,iBAApBoQ,EAAWpQ,IACpBrC,KAAKu7B,cAAc9oB,EAAWpQ,GAA9B,GAGL,EAlD4D,qFCLxD,IAAMq/B,EAAb,MAAM,MAAOA,EACUtnB,eAACunB,EAAqBC,EAAU,EAAGC,EAAY,EAAGC,EAAW,EAAGC,EAAa,GAChG,IAAKJ,EACH,OAAO,KAGT,MAAM34B,EAAS24B,EAAKK,QAEpB,OAAgB,IAAZJ,GACF54B,EAAO+P,IAAI6oB,EAAS,QAGJ,IAAdC,GACF74B,EAAO+P,IAAI8oB,EAAW,UAGP,IAAbC,GACF94B,EAAO+P,IAAI+oB,EAAU,SAGJ,IAAfC,GACF/4B,EAAO+P,IAAIgpB,EAAY,WAGlB/4B,CACR,CAEiCoR,4BAACunB,GACjC,OAAO3hC,KAAKiiC,+BAAiCN,CAC9C,CAEoCvnB,+BAACunB,GACpC,MAAMO,EAAOliC,KAAKmiC,0BAA0BR,EAAM3hC,KAAKiiC,+BACvD,OAAOG,KAAKC,IAAIH,EACjB,CAEqD9nB,kDACpD,MAAM4hB,EAAWD,kBAAgCG,mBACjD,OAAKF,EAIWsG,IAASC,GAAGvG,GAHnB,IAKV,CAEwC5hB,mCAACunB,EAAe,KAAMa,EAAgB,KAAMC,EAAe,MAClG,MAAMC,EAAU1iC,KAAK2iC,qBACrB,OAAO3iC,KAAK4iC,eAAeF,EAASf,EAAMa,EAAOC,EAClD,CAE6CroB,wCAACunB,EAAe,KAAMa,EAAgB,KAAMC,EAAe,MACvG,MAAMzG,EAAWD,kBAAgCG,mBACjD,IAAKF,EACH,OAAO,KAGT,MAAM0G,EAAUJ,IAASC,GAAGvG,GAC5B,OAAOh8B,KAAK4iC,eAAeF,EAASf,EAAMa,EAAOC,EAClD,CAEwDroB,mDAACunB,EAAe,KAAMa,EAAgB,KAAMC,EAAe,MAElH,OAD2B1G,kBAAgCG,mBAIpDl8B,KAAK6iC,iCAAiClB,EAAMa,EAAOC,GAAMK,cAFvD,IAGV,CAE4B1oB,uBAACunB,GAC5B,OAAO3hC,KAAK6iC,oCAAsClB,CACnD,CAE+BvnB,0BAACunB,GAC/B,MAAMO,EAAOliC,KAAKmiC,0BAA0BR,EAAM3hC,KAAK6iC,oCACvD,OAAOT,KAAKC,IAAIH,EACjB,CAEsC9nB,iCAAC2oB,EAAsBC,GAC5D,IAAKD,IAAUC,EACb,OAGF,MAAMd,EAAOa,EAAME,QAAQ,OAAOf,KAAKc,EAAMC,QAAQ,OAAQ,QAC7D,OAAOb,KAAKC,IAAIH,EACjB,CAE+B9nB,4BAC9B,MAAM4hB,EAAWD,kBAAgCE,cACjD,OAAOqG,IAASC,GAAGvG,EACpB,CAEmB5hB,cAACunB,GACnB,OAAOA,EAAKuB,OAAO,KACpB,CAEwB9oB,mBAACunB,GACxB,OAAKA,EAGAW,WAAgBX,GAIdA,EAAKmB,cAHHnB,EAHA,IAOV,CAEoCvnB,+BAACunB,GACpC,OAAKA,EAIEW,EAAOX,GAAMY,GAAGxG,kBAAgCE,eAH9C,IAIV,CAEyC7hB,oCAACunB,GACzC,OAAKA,EAIEW,EAAOX,GAAMY,GAAGxG,kBAAgCG,oBAH9C,IAIV,CAE4B9hB,sBAACsoB,EAAwBf,EAAe,KAAMa,EAAgB,KAAMC,EAAe,MAC9G,OAAIA,GACFC,EAAQ7W,IAAI,OAAQ4W,IAGlBD,GAAmB,IAAVA,IACXE,EAAQ7W,IAAI,QAAS2W,GAGnBb,GACFe,EAAQ7W,IAAI,OAAQ8V,GAGtBe,EAAQO,QAAQ,OAETP,CACR,+CA3IUhB,EAAe,4BAAfA,EAAet+B,QAAfs+B,EAAe,qBAFd,SAEDA,CAAb,6GCCO,IAAMhL,EAAb,MAAM,MAAOA,EAMX32B,cACEC,KAAKmjC,WAAY,CAClB,CAEMC,qBACLpjC,KAAKqjC,8BAA8BC,yBACpC,CAGMC,qBAA6B,EAZtB7M,aAAM,qDAHTA,EAAgB,0BAAhBA,EAAgBniB,mUCR7BtQ,iBACEA,2CACFA,uWDMayyB,CAAb,oPEHM,MAAO8M,EACoCppB,yCAACqpB,IAC9C,IAAI9P,EAAU,EAEd,OAAoD,IAAhD8P,GAAeC,8BACjB/P,IAGiD,IAA/C8P,GAAeE,6BACjBhQ,IAG6C,IAA3C8P,GAAeG,yBACjBjQ,IAGFA,EAAU8P,GAAetU,cAAgBwE,EAAU,EAAIA,EAEhDA,CACR,CAE+CvZ,0CAACqpB,IAC/C,IAAI9P,EAAU,EAEd,OAAqD,IAAjD8P,GAAeI,+BACjBlQ,IAGiD,IAA/C8P,GAAeK,6BACjBnQ,IAG8C,IAA5C8P,GAAeM,0BACjBpQ,IAGFA,EAAU8P,GAAeO,qBAAuBrQ,EAAU,EAAIA,EAEvDA,CACR,CAE6BvZ,wBAACqV,IAC7B,MAAMwU,EAAsBjkC,KAAKkkC,YAAY,IAAIC,KAGjD,OAAK1U,GAAa2U,eAChBH,EAAoBP,6BAA+B,IAEnB,IAA9BjU,GAAa2U,eACfH,EAAoBP,6BAA+B,IAEnB,IAA9BjU,GAAa2U,eACfH,EAAoBP,6BAA+B,GAIhDjU,GAAa4U,WAChBJ,EAAoBN,4BAA8B,IAEtB,IAA1BlU,GAAa4U,WACfJ,EAAoBN,4BAA8B,IAEtB,IAA1BlU,GAAa4U,WACfJ,EAAoBN,4BAA8B,GAI/ClU,GAAa6U,8BAChBL,EAAoBL,wBAA0B,IAEC,IAA7CnU,GAAa6U,8BACfL,EAAoBL,wBAA0B,IAEC,IAA7CnU,GAAa6U,8BACfL,EAAoBL,wBAA0B,GAGhDK,EAAoB9U,cAAgBM,GAAaN,cAE1C8U,CACR,CAE8B7pB,yBAACmqB,IAC9B,MAAMN,EAAsBjkC,KAAKkkC,YAAY,IAAIC,KACjD,OAAII,KAEGA,GAAcH,eACjBH,EAAoBJ,8BAAgC,IAEnB,IAA/BU,GAAcH,eAChBH,EAAoBJ,8BAAgC,IAEnB,IAA/BU,GAAcH,eAChBH,EAAoBJ,8BAAgC,GAIjDU,GAAcF,WACjBJ,EAAoBH,4BAA8B,IAErB,IAA3BS,GAAcF,WAChBJ,EAAoBH,4BAA8B,IAErB,IAA3BS,GAAcF,WAChBJ,EAAoBH,4BAA8B,GAI/CS,GAAcC,+BACjBP,EAAoBF,yBAA2B,IAEE,IAA/CQ,GAAcC,+BAChBP,EAAoBF,yBAA2B,IAEE,IAA/CQ,GAAcC,+BAChBP,EAAoBF,yBAA2B,IAInDE,EAAoBD,qBAAuBO,GAAcP,qBAElDC,CACR,CAEwB7pB,mBAACqpB,IACxBA,UAAeO,qBAAuB,GACtCP,GAAeC,6BAA+B,EAC9CD,GAAeE,4BAA8B,EAC7CF,GAAeG,wBAA0B,EACzCH,GAAeI,8BAAgC,EAC/CJ,GAAetU,cAAgB,GAC/BsU,GAAeK,4BAA8B,EAC7CL,GAAeM,yBAA2B,EACnCN,EACR,CAE2BrpB,sBAAC6pB,GAA+CxU,GAE1E,OAAyD,IAArDwU,GAAoBP,6BACtBjU,EAAa2U,kBAAexsB,EACkC,IAArDqsB,GAAoBP,6BAC7BjU,EAAa2U,cAAe,EACkC,IAArDH,GAAoBP,+BAC7BjU,EAAa2U,cAAe,GAI0B,IAApDH,GAAoBN,4BACtBlU,EAAa4U,cAAWzsB,EACqC,IAApDqsB,GAAoBN,4BAC7BlU,EAAa4U,UAAW,EACqC,IAApDJ,GAAoBN,8BAC7BlU,EAAa4U,UAAW,GAI0B,IAAhDJ,GAAoBL,wBACtBnU,EAAa6U,iCAA8B1sB,EACc,IAAhDqsB,GAAoBL,wBAC7BnU,EAAa6U,6BAA8B,EACc,IAAhDL,GAAoBL,0BAC7BnU,EAAa6U,6BAA8B,GAG7C7U,EAAaN,cAAgB8U,GAAoB9U,cAE1CM,CACR,CAE4BrV,uBAAC6pB,GAA+CM,GAE3E,OAA0D,IAAtDN,GAAoBJ,8BACtBU,EAAcH,kBAAexsB,EACkC,IAAtDqsB,GAAoBJ,8BAC7BU,EAAcH,cAAe,EACkC,IAAtDH,GAAoBJ,gCAC7BU,EAAcH,cAAe,GAIyB,IAApDH,GAAoBH,4BACtBS,EAAcF,cAAWzsB,EACoC,IAApDqsB,GAAoBH,4BAC7BS,EAAcF,UAAW,EACoC,IAApDJ,GAAoBH,8BAC7BS,EAAcF,UAAW,GAI0B,IAAjDJ,GAAoBF,yBACtBQ,EAAcC,kCAA+B5sB,EACa,IAAjDqsB,GAAoBF,yBAC7BQ,EAAcC,8BAA+B,EACa,IAAjDP,GAAoBF,2BAC7BQ,EAAcC,8BAA+B,GAI/CD,EAAcP,qBAAuBC,GAAoBD,qBAElDO,CACR,CAE6BnqB,wBAAC6pB,GAA+ChM,GAC5E,OAAOA,CACR,8dC1LWh0B,qBAEEA,0DAASA,+BAAqB,GAQ9BA,oBAAUA,iBAAKA,gBAPfA,gGA0BFA,qBAEEA,0DAASA,+BAAqB,GAQ9BA,oBAAUA,iBAAKA,gBAPfA,gGAyENA,kBAA4E,qCAGxEA,6EAAyBA,0CAAoC,GAK/DA,iDAJEA,4DAA2C,uDAA3CA,CAA2C,uDAVjDA,kBAMEA,wBAUFA,yCAdEA,kGAIMA,2FAgBNA,kBAA2E,uCAGvEA,4EAAyBA,0CAAoC,GAI9DA,mCAHCA,uDAAsC,qEAAtCA,CAAsC,oHAQ1CA,kBAEEA,uEAASA,wBAAmB,GAM5BA,SACFA,iDANEA,8CAA6C,qBAG7CA,8BAEAA,qOChHL,IAAMwgC,GAAb,MAAM,MAAOA,GA8EX1kC,YACS6hB,EACCkV,GACA7E,GACAyS,GACAC,GACArxB,GACAsxB,EACA//B,EACAC,EACA+/B,EACA7/B,EACAC,GACAC,IAZDlF,8BACCA,wBACAA,qBACAA,0BACAA,yBACAA,sBACAA,yBACAA,4BACAA,sBACAA,4BACAA,eACAA,+BACAA,kCApEHA,UAAO+J,aACP/J,mCAAgC,qBAChCA,mCAAgC,mBAChCA,iBAA2B,IAAIqvB,IAK/BrvB,kCAA8B,EAE9BA,yBAAuC,CAC5C,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,SAAUinB,MAAO,4BAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAElCvrB,0BAAwC,CAC7C,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,SAAUinB,MAAO,4BAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAElCvrB,2BAAyC,CAC9C,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAGlCvrB,kBAA6B,IAAI8kC,IAEjC9kC,eAAY,WAEZA,uCAA4C+kC,0BAE5C/kC,wCAA6CglC,2BAC7ChlC,yCAA8CglC,2BAC9ChlC,6BAA0BilC,oBAG1BjlC,4CAAwC,EACxCA,mBAA+B,IAAIklC,IACnCllC,kCAA8B,EAC9BA,kCAA8B,EAC9BA,gCAA4B,EAC5BA,oBAAiB,EACjBA,qBAAkB,EAClBA,sBAAmB,EACnBA,8BAA2B,qBAC3BA,8BAA2B,mBAE1BA,sBAAiC,IAAIE,KAiB3CF,KAAKmlC,WAAa,eAAenlC,KAAKkF,0BAA0B+G,iBAChEjM,KAAK0kC,kBAAkB1yB,SAAS,GAAGhS,KAAKolC,eAAeplC,KAAKmlC,cAE5DnlC,KAAKqlC,SAAW,CACd,IAAIC,IACFtlC,KAAKulC,iBACL,qBACA,cACAvlC,KAAKwlC,sBACL,8BAEF,IAAIF,IAAgBtlC,KAAKylC,gBAAiB,0BAAwB,KAAMzlC,KAAK0lC,qBAAsB,0BACnG,IAAIJ,IAAgBtlC,KAAK2lC,eAAgB,mBAAoB,WAAY3lC,KAAK4lC,oBAAqB,2BAEtG,CAEMC,6BAA6B5B,GAClCjkC,KAAK8lC,oBAAoB7B,GACzBjkC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKgmC,+BAA+B3xB,QAGpCrU,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKkmC,kBAGLlmC,KAAKmmC,2BACN,CAEMC,6BAA6BC,GAClCrmC,KAAKqmC,oBAAsBA,EAG3BrmC,KAAKsmC,mBAAqBD,GAAqB96B,SAAW86B,EAAoB96B,SAASM,KAAO,KAE9F7L,KAAKumC,aAAahC,cAActZ,cAAgBjrB,KAAKsmC,mBAAqB,CAACtmC,KAAKsmC,oBAAsB,KACtGtmC,KAAKwmC,YAAY/W,aAAaxE,cAAgBjrB,KAAKsmC,mBAAqB,CAACtmC,KAAKsmC,oBAAsB,KACpGtmC,KAAKymC,cAAcxO,eAAehN,cAAgBjrB,KAAKsmC,mBAAqB,CAACtmC,KAAKsmC,oBAAsB,KACxGtmC,KAAKymC,cAAcxO,eAAe3J,iCAAkC,EAGpEtuB,KAAK0mC,yCAGL1mC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAK4mC,+BAA+BvyB,OAApC,GAEFrU,KAAKkmC,kBAGLlmC,KAAKmmC,2BACN,CAEMU,sBACLrD,cAA2CxjC,KAAKikC,qBAChDjkC,KAAK6lC,6BAA6B7lC,KAAKikC,oBACxC,CAEM6C,gCACL9mC,KAAKwmC,YAAYO,cACjB/mC,KAAKwmC,YAAY/W,aAAauX,iBAAqCC,OAAOjnC,KAAKknC,0BAC/ElnC,KAAKwmC,YAAY/W,aAAa0X,qBAAmDF,OAAOjnC,KAAKonC,mCAE7FpnC,KAAKumC,aAAaQ,cAClB/mC,KAAKumC,aAAahC,cAAcyC,iBAAqCC,OAAOjnC,KAAKknC,0BACjFlnC,KAAKumC,aAAahC,cAAc4C,qBAAoDF,OAAOjnC,KAAKqnC,oCAEhGrnC,KAAKymC,cAAcM,cACnB/mC,KAAKymC,cAAcxO,eAAe+O,iBAAqCC,OAAOjnC,KAAKknC,0BACnFlnC,KAAKymC,cAAcxO,eAAekP,qBAAoDF,OAAOjnC,KAAKsnC,qCAElGtnC,KAAKmmC,2BACN,CAEMoB,sBACLvnC,KAAKomC,6BAA6B,KACnC,CAGMoB,gBAAgBhuB,GACrBA,EAAOO,gBACR,CAGM0tB,WAAWjuB,GAChBxZ,KAAKsT,cAAciG,qBAAqBC,EAAQxZ,KAAK0nC,qBACtD,CAGMC,gBACL,IAAIC,EAAY5nC,KAAK6nC,WAAWlpB,MAAQ,EACpCipB,EAAY,IACdA,EAAY5nC,KAAKqlC,SAASl2B,OAAS,GAErCnP,KAAK8nC,WAAW9nC,KAAKqlC,SAASuC,GAC/B,CAGMG,cAEL/nC,KAAK8nC,WAAW9nC,KAAKqlC,UADFrlC,KAAK6nC,WAAWlpB,MAAQ,GAAK3e,KAAKqlC,SAASl2B,QAE/D,CAEM8mB,cACLj2B,KAAKgoC,gCAAgC7R,cACrCn2B,KAAKioC,iBAAiBxmC,OACtBzB,KAAKioC,iBAAiB1d,UACvB,CAEM2d,WAGHloC,KAAK6nC,WADH7nC,KAAKgF,QAAQ5C,IAAI0M,WAAW,oCACZ9O,KAAKqlC,SAASrlC,KAAKulC,kBAC5BvlC,KAAKgF,QAAQ5C,IAAI0M,WAAW,iCACnB9O,KAAKqlC,SAASrlC,KAAK2lC,gBAEnB3lC,KAAKqlC,SAASrlC,KAAKylC,iBAGvCzlC,KAAK6kC,qBAAqB9e,yBACvB3f,QAAKmsB,KAAUvyB,KAAKioC,mBACpBziC,UAAW0gB,IACVlmB,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAKooC,aAAaliB,iBAAmBA,EAEjClmB,KAAKqoC,mBACProC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,0BACtFlnC,KAAKwoC,oBACdxoC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BACvFlnC,KAAKyoC,uBACdzoC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BAA9D,GAIzClnC,KAAK82B,gBAAgBgB,YAAY1xB,QAAKmsB,KAAUvyB,KAAKioC,mBAAmBziC,UAAWlH,IACjF0B,KAAK0oC,4BACL1oC,KAAK2oC,WAAWrqC,EAAO05B,QACvBh4B,KAAK8lC,oBAAoB9lC,KAAKikC,qBAC9BjkC,KAAK4oC,uBACL5oC,KAAK6oC,uBACL7oC,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAK8oC,wBAAL,GAGF9oC,KAAKiyB,aAAatrB,oBAAoBP,QAAKmsB,KAAUvyB,KAAKioC,mBAAmBziC,UAAU,KACrFxF,KAAKgM,aAAehM,KAAKkF,0BAA0B6G,yBAGrD/L,KAAKgoC,gCAAkChoC,KAAKsT,cAAc+F,4BAA4B7T,UAAU,KAC1FxF,KAAKsT,cAAcyyB,4CACrB/lC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKgmC,+BAA+B3xB,SAC3BrU,KAAKsT,cAAcqzB,sCAC5B3mC,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAK4mC,+BAA+BvyB,SAEpCrU,KAAK4T,UAAL,EAGL,CAEMm1B,+BAA+BX,GACpCpoC,KAAKwmC,YAAY/W,aAAeuZ,mBAC9BhpC,KAAKwmC,YAAY/W,aACjB2Y,EACApoC,KAAKqoC,oBAEProC,KAAKumC,aAAahC,cAAgByE,oBAChChpC,KAAKumC,aAAahC,cAClB6D,EACApoC,KAAKwoC,qBAEPxoC,KAAKymC,cAAcxO,eAAiB+Q,qBAClChpC,KAAKymC,cAAcxO,eACnBmQ,EACApoC,KAAKyoC,sBAGPzoC,KAAKkmC,kBACLlmC,KAAKmmC,2BAA0B,EAChC,CAEM8C,6BAEL,MAAM3b,EAAO,IAAIloB,MACbpF,KAAKqoC,oBACProC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKwmC,YAAa/B,GAAiB0E,8BAChEnpC,KAAKopC,0BAA4BppC,KAAKwmC,YAAY6C,2BAClDrpC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,2BACtFlnC,KAAKwoC,qBACdxoC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKumC,aAAc9B,GAAiB6E,+BACjEtpC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,uBACdzoC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKymC,cAAehC,GAAiB8E,gCAClEvpC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BAGnGlnC,KAAK8E,eAAeggB,8BAA8B,+BACnD,CAEM0kB,yCAAyCC,GAE9CzpC,KAAKknC,yBAA2BuC,EAEhC,IAAIC,GAAsBD,EACE,OAAxBC,KACFA,GAAsB,MAIxB1pC,KAAK6E,qBAAqByD,MAAMm8B,GAAiBkF,4BAA6BD,IAG9E1pC,KAAK4pC,sCAAwC5pC,KAAKooC,aAAapB,mBAAqBhnC,KAAKknC,yBAErFlnC,KAAKqoC,oBACProC,KAAKopC,0BAA4BppC,KAAKwmC,YAAY6C,2BAClDrpC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,2BACtFlnC,KAAKwoC,qBACdxoC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,uBACdzoC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BAGnGlnC,KAAK8E,eAAeggB,8BAA8B,2CACnD,CAEMlR,WACL5T,KAAKsT,cAAcY,yBAAyB,KACK,mBAA3ClU,KAAKimC,4BAA4B3hC,MACnCtE,KAAK6pC,iCAAiCj2B,WACc,mBAA3C5T,KAAKimC,4BAA4B3hC,OAC1CtE,KAAK8pC,+BAA+Bl2B,UAApC,EAGL,CAEMm2B,kBAAkBC,GACnBhqC,KAAKqoC,mBACProC,KAAKwmC,YAAYjX,WAAaya,EACrBhqC,KAAKwoC,oBACdxoC,KAAKumC,aAAahX,WAAaya,EACtBhqC,KAAKyoC,uBACdzoC,KAAKymC,cAAclX,WAAaya,GAGlChqC,KAAKmmC,2BAA0B,EAChC,CAEM8D,qBAAqBC,GACtBlqC,KAAKqoC,mBACProC,KAAKwmC,YAAYhX,cAAgB0a,EACxBlqC,KAAKwoC,oBACdxoC,KAAKumC,aAAa/W,cAAgB0a,EACzBlqC,KAAKyoC,uBACdzoC,KAAKymC,cAAcjX,cAAgB0a,GAGrClqC,KAAKmmC,2BAA0B,EAChC,CAEM2B,WAAWqC,GAChBnqC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAK6nC,WAAasC,EAClBnqC,KAAK6E,qBAAqByD,MAAMm8B,GAAiB2F,kBAAmBpqC,KAAK6nC,WAAWxoB,KAAKtD,QAAQ,KAAM,KACvG/b,KAAK0oC,4BACL1oC,KAAK2oC,gBAAW/wB,GAChB5X,KAAK8lC,oBAAoB9lC,KAAKikC,qBAC9BjkC,KAAK4oC,uBACL5oC,KAAK6oC,uBACL7oC,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAK8oC,wBACN,CAEMuB,8BAA8BC,GACnCtqC,KAAK4kC,kBAAkBlpB,cAAc4uB,GAErCtqC,KAAKumC,aAAahC,cAAcgG,WAAaD,EAC7CtqC,KAAKwmC,YAAY/W,aAAa8a,WAAaD,EAC3CtqC,KAAKymC,cAAcxO,eAAesS,WAAaD,EAE/CtqC,KAAKkmC,kBAELlmC,KAAKmmC,2BACN,CAEMqE,aAAahxB,GAClB,MAAMixB,GAASjxB,EAAOkxB,OACtB,GAAID,GAAQ,CACV,MAAM5qC,GAAQ4qC,GAAOE,kBACjBnxB,EAAOlV,MAAM2L,KAAM7O,IAASA,KAASqpC,GAAOnmC,SAC9CzE,GAAMyE,MAAQ,CAACmmC,GAAOnmC,OAEzB,CACF,CAEOokC,4BACN1oC,KAAK4qC,wBAA0BC,mBAC3B7qC,KAAKqoC,mBACProC,KAAK8qC,4BAA8BC,oBAC1B/qC,KAAKwoC,qBAELxoC,KAAKyoC,wBADdzoC,KAAK8qC,4BAA8BE,mBAItC,CAEOlF,oBAAoB7B,GAC1BjkC,KAAKikC,oBAAsBA,EACvBjkC,KAAKqoC,mBACProC,KAAKwmC,YAAY/W,aAAe+T,iBAA8CS,EAAqBjkC,KAAKwmC,YAAY/W,cAC3GzvB,KAAKwoC,oBACdxoC,KAAKumC,aAAahC,cAAgBf,kBAChCS,EACAjkC,KAAKumC,aAAahC,eAEXvkC,KAAKyoC,uBACdzoC,KAAKymC,cAAcxO,eAAiBuL,mBAClCS,EACAjkC,KAAKymC,cAAcxO,iBAGvBj4B,KAAKirC,wCACN,CAEOC,cAAcjgB,GAChBA,GAAiBA,EAAc9b,OAAS,EAC1CnP,KAAK2kC,iBAAiBzL,QAAQjO,EAAc,IAAIzlB,UAAWmlB,KACzD3qB,KAAKqmC,oBAAsB,IAAI8E,IAC/BnrC,KAAKqmC,oBAAoB96B,SAAW,IAAI6/B,IACxCprC,KAAKqmC,oBAAoB96B,SAASC,KAAOmf,GAAInf,KAC7CxL,KAAKqmC,oBAAoB96B,SAASjC,KAAOqhB,GAAIrhB,KAC7CtJ,KAAKqmC,oBAAoB96B,SAASM,KAAO8e,GAAI9e,KAE7C7L,KAAK0mC,wCAAL,IAGF1mC,KAAKqmC,oBAAsB,KAC3BrmC,KAAK0mC,yCAER,CAEOkC,uBACF5oC,KAAKqoC,oBACHroC,KAAKwmC,aAAexmC,KAAKwmC,YAAY/W,cACvCzvB,KAAKkrC,cAAclrC,KAAKwmC,YAAY/W,aAAaxE,eAIjDjrB,KAAKwoC,qBACHxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAahC,eACzCvkC,KAAKkrC,cAAclrC,KAAKumC,aAAahC,cAActZ,eAInDjrB,KAAKyoC,sBACHzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcxO,gBAC3Cj4B,KAAKkrC,cAAclrC,KAAKymC,cAAcxO,eAAehN,cAG1D,CAEOogB,qBAAqBC,GACvBtrC,KAAKwmC,cACPxmC,KAAKurC,kCAAkC9G,GAAiB0E,6BAA8BnpC,KAAKwmC,YAAa8E,GACxGtrC,KAAKwrC,8CACH/G,GAAiBkF,4BACjB3pC,KAAKwmC,YAAY/W,aACjBzvB,KAAKonC,kCACLkE,IAGAtrC,KAAKumC,eACPvmC,KAAKurC,kCAAkC9G,GAAiB6E,8BAA+BtpC,KAAKumC,aAAc+E,GAC1GtrC,KAAKwrC,8CACH/G,GAAiBkF,4BACjB3pC,KAAKumC,aAAahC,cAClBvkC,KAAKqnC,mCACLiE,IAGAtrC,KAAKymC,gBACPzmC,KAAKurC,kCAAkC9G,GAAiB8E,+BAAgCvpC,KAAKymC,cAAe6E,GAC5GtrC,KAAKwrC,8CACH/G,GAAiBkF,4BACjB3pC,KAAKymC,cAAcxO,eACnBj4B,KAAKsnC,oCACLgE,GAGL,CAEOE,8CACNnpC,EACAopC,GACAC,GACAJ,IAEA,MAAMK,GAA8B3rC,KAAK6E,sBAAsBwK,KAAKhN,GAKlErC,KAAKknC,yBAJFyE,IAE6B3rC,KAAK4rC,0BAKlC5rC,KAAKooC,cAAcpB,kBAAoBsE,MACrCtrC,KAAKooC,aAGRpoC,KAAKooC,aAAapB,iBAAmBhnC,KAAKknC,yBAF1ClnC,KAAKooC,aAAeY,UAA0ChpC,KAAKknC,yBAA0BwE,IAK/FD,GAAezE,iBAAqCC,OAAOjnC,KAAKooC,aAAapB,mBAG/EhnC,KAAK4pC,sCAAwC5pC,KAAKooC,cAAcpB,mBAAqBhnC,KAAKknC,wBAC3F,CAEOqE,kCAAkClpC,EAAapD,GAA2BqsC,IAChF,MAAMhe,GAAOttB,KAAK6E,qBAAqBwK,KAAKhN,GAC5CpD,GAAM4sC,SAASP,GAAqBhe,IACpCttB,KAAKopC,0BAA4BnqC,GAAMoqC,0BACxC,CAEOyC,cAAc7sC,GAChBe,KAAK+rC,mBAAmBxc,aAAetwB,EAAMswB,aAC/CvvB,KAAK+rC,mBAAmBxc,WAAatwB,EAAMswB,YAGzCvvB,KAAK+rC,mBAAmBvc,gBAAkBvwB,EAAMuwB,gBAClDxvB,KAAK+rC,mBAAmBvc,cAAgBvwB,EAAMuwB,eAG5CxvB,KAAK+rC,mBAAmBC,eAAiB/sC,EAAM+sC,eACjDhsC,KAAK+rC,mBAAmBC,aAAe/sC,EAAM+sC,cAG3ChsC,KAAK+rC,mBAAmBE,wBAA0BhtC,EAAMgtC,wBAC1DjsC,KAAK+rC,mBAAmBE,sBAAwBhtC,EAAMgtC,sBAEzD,CAEOpD,uBACF7oC,KAAKqoC,mBACProC,KAAK8rC,cAAc9rC,KAAKwmC,aACfxmC,KAAKwoC,oBACdxoC,KAAK8rC,cAAc9rC,KAAKumC,cACfvmC,KAAKyoC,sBACdzoC,KAAK8rC,cAAc9rC,KAAKymC,cAE3B,CAEO0B,wBAAwBC,GAC1BpoC,KAAKqoC,qBACFD,IACHA,EAAeY,UAA0ChpC,KAAKknC,yBAA0BlnC,KAAKonC,oCAE3FpnC,KAAKwmC,cACP4B,EAAeY,qBACbhpC,KAAKwmC,YAAY/W,aACjB2Y,EAAaliB,iBACblmB,KAAKknC,4BAIPlnC,KAAKwoC,sBACFJ,IACHA,EAAeY,UAA0ChpC,KAAKknC,yBAA0BlnC,KAAKqnC,qCAE3FrnC,KAAKumC,eACP6B,EAAeY,sBACbhpC,KAAKumC,aAAahC,cAClB6D,EAAaliB,iBACblmB,KAAKknC,4BAIPlnC,KAAKyoC,uBACFL,IACHA,EAAeY,UAA0ChpC,KAAKknC,yBAA0BlnC,KAAKsnC,sCAE3FtnC,KAAKymC,gBACP2B,EAAeY,uBACbhpC,KAAKymC,cAAcxO,eACnBmQ,EAAaliB,iBACblmB,KAAKknC,4BAKXlnC,KAAKooC,aAAeA,CACrB,CAEO8D,gBAAgB3B,GACtBvqC,KAAKyZ,WAAa,IAAI0yB,IAAgB5B,GACtCvqC,KAAK4kC,kBAAkBlpB,cAAc6uB,EACtC,CAEOzB,yBACF9oC,KAAKqoC,oBACHroC,KAAKwmC,aAAexmC,KAAKwmC,YAAY/W,cACvCzvB,KAAKksC,gBAAgBlsC,KAAKwmC,YAAY/W,aAAa8a,YAInDvqC,KAAKwoC,qBACHxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAahC,eACzCvkC,KAAKksC,gBAAgBlsC,KAAKumC,aAAahC,cAAcgG,YAIrDvqC,KAAKyoC,sBACHzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcxO,gBAC3Cj4B,KAAKksC,gBAAgBlsC,KAAKymC,cAAcxO,eAAesS,WAG5D,CAEOlC,mBACN,OAAOroC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAK2lC,gBAAgBpa,KACrE,CAEOid,oBACN,OAAOxoC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKylC,iBAAiBla,KACtE,CAEOkd,qBACN,OAAOzoC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKulC,kBAAkBha,KACvE,CAEO6gB,iBAAiBv9B,EAAkBw9B,IACzCA,UAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKwmC,YACL33B,EACA41B,GAAiB6H,gBAGnBtsC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKwmC,YAAY/W,cACvCzvB,KAAKikC,oBAAsBT,mBAAgDxjC,KAAKwmC,YAAY/W,cAC5FzvB,KAAKooC,aAAeY,qBAClBhpC,KAAKwmC,YAAY/W,aACjBzvB,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,EACR,CAEOG,kBAAkB39B,EAAkBw9B,IAC1CA,UAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKumC,aACL13B,EACA41B,GAAiBgI,iBAGnBzsC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKumC,aAAahC,eACxCvkC,KAAKikC,oBAAsBT,oBAAiDxjC,KAAKumC,aAAahC,eAC9FvkC,KAAKooC,aAAeY,sBAClBhpC,KAAKumC,aAAahC,cAClBvkC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,EACR,CAEOK,mBAAmB79B,EAAkBw9B,IAC3CA,UAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKymC,cACL53B,EACA41B,GAAiBkI,kBAGnB3sC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKymC,cAAcxO,gBACzCj4B,KAAKikC,oBAAsBT,cAA2C,IAAIW,KAC1EnkC,KAAKooC,aAAeY,uBAClBhpC,KAAKymC,cAAcxO,eACnBj4B,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,EACR,CAEO1D,WAAW95B,GACjB,IAAIw9B,IAAmB,EACvBrsC,KAAKqrC,sBAAsBx8B,GAEvB7O,KAAKqoC,qBACPgE,GAAmBrsC,KAAKosC,iBAAiBv9B,EAAUw9B,IACnDrsC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,0BAC/FlnC,KAAKopC,0BAA4BppC,KAAKwmC,YAAY6C,2BAClDrpC,KAAK4sC,0CACL5sC,KAAK6sC,4CAGH7sC,KAAKwoC,sBACP6D,GAAmBrsC,KAAKwsC,kBAAkB39B,EAAUw9B,IACpDrsC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BAChGlnC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAK8sC,0CACL9sC,KAAK+sC,6CAGH/sC,KAAKyoC,uBACP4D,GAAmBrsC,KAAK0sC,mBAAmB79B,EAAUw9B,IACrDrsC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BACjGlnC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKgtC,2CACLhtC,KAAKitC,6CAGHZ,IACFrsC,KAAKktC,eAAc,EAGtB,CAEOhH,kBACFlmC,KAAKwmC,cACPxmC,KAAKwmC,YAAYlX,UAAY,GAG3BtvB,KAAKumC,eACPvmC,KAAKumC,aAAajX,UAAY,GAG5BtvB,KAAKymC,gBACPzmC,KAAKymC,cAAcnX,UAAY,EAElC,CAEO4Z,kBAAkB5b,EAAgBruB,GAA2BkuC,IACnE7f,EAAK9rB,KAAKvC,GAAMuwB,cAAevwB,GAAMswB,YACrCvvB,KAAK6E,qBAAqByD,MAAM6kC,GAAoB7f,GAGpDruB,GAAMmuC,oCACNC,iBAAgCrtC,KAAK+rC,mBAAoB9sC,GAC1D,CAEOknC,0BAA0B7N,GAAa,GAC7Ct4B,KAAKiF,uBAAuBqD,MAAMm8B,GAAiB6H,eAAgBtsC,KAAKwmC,aACxExmC,KAAKiF,uBAAuBqD,MAAMm8B,GAAiBgI,gBAAiBzsC,KAAKumC,cACzEvmC,KAAKiF,uBAAuBqD,MAAMm8B,GAAiBkI,iBAAkB3sC,KAAKymC,eAEtEzmC,KAAKqoC,oBACProC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,0BAC/FlnC,KAAKopC,0BAA4BppC,KAAKwmC,YAAY6C,4BACzCrpC,KAAKwoC,qBACdxoC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BAChGlnC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,4BAC1CrpC,KAAKyoC,uBACdzoC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BACjGlnC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,4BAGtDrpC,KAAKktC,cAAc5U,EACpB,CAEO4U,cAAc5U,GAAa,GAC7Bt4B,KAAKqoC,mBACProC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKwmC,cAC3CnO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAKwoC,oBACdxoC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKumC,eAC3ClO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAKyoC,sBACdzoC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKymC,gBAC3CpO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,IAG9B,CAEOiU,iBAAiBlmC,GACvB,IAAIyD,GAAe,KACfzD,EAAO4kB,eAAiB5kB,EAAO4kB,cAAc9b,OAAS,IACxDrF,GAAezD,EAAO4kB,cAAc,IAEtCjrB,KAAKsmC,mBAAqBx8B,EAC3B,CAEOgjC,0CAEN9sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwmC,YAAa,KAAM/B,GAAiB6H,gBAE1GtsC,KAAKwmC,YAAY/W,aAAaxE,cAAgBjrB,KAAKumC,aAAahC,cAActZ,cAG9EjrB,KAAKwmC,YAAY/W,aAAayI,iBAAmBl4B,KAAKumC,aAAahC,cAAcrM,iBACjFl4B,KAAKwmC,YAAY/W,aAAauX,iBAAmBhnC,KAAKumC,aAAahC,cAAcyC,iBAE5EhnC,KAAKumC,aAAahC,cAAcyC,kBAAyE,IAArDhnC,KAAKumC,aAAahC,cAAcyC,kBA0CvFhnC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,KAC/CztC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MA9C1C3tC,KAAKwmC,YAAY/W,aAAa+d,kBAC5BxtC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmBxtC,KAAKumC,aAAahC,cAAciJ,iBACjFxtC,KAAKwmC,YAAY/W,aAAage,eAAiBztC,KAAKumC,aAAahC,cAAckJ,gBACtEztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKwmC,YAAY/W,aAAa+d,iBAAmBxtC,KAAKumC,aAAahC,cAAcmJ,gBACjF1tC,KAAKwmC,YAAY/W,aAAage,eAAiBztC,KAAKumC,aAAahC,cAAcoJ,eAGjF3tC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MACrC3tC,KAAKwmC,YAAY/W,aAAaie,iBACnC1tC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKwmC,YAAY/W,aAAaie,gBAAkB1tC,KAAKumC,aAAahC,cAAciJ,iBAChFxtC,KAAKwmC,YAAY/W,aAAake,cAAgB3tC,KAAKumC,aAAahC,cAAckJ,gBACrEztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKwmC,YAAY/W,aAAaie,gBAAkB1tC,KAAKumC,aAAahC,cAAcmJ,gBAChF1tC,KAAKwmC,YAAY/W,aAAake,cAAgB3tC,KAAKumC,aAAahC,cAAcoJ,eAGhF3tC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,OAE3CztC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKwmC,YAAY/W,aAAa6d,eAAiBttC,KAAKumC,aAAahC,cAAciJ,iBAC/ExtC,KAAKwmC,YAAY/W,aAAa8d,aAAevtC,KAAKumC,aAAahC,cAAckJ,gBACpEztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKwmC,YAAY/W,aAAa6d,eAAiBttC,KAAKumC,aAAahC,cAAcmJ,gBAC/E1tC,KAAKwmC,YAAY/W,aAAa8d,aAAevtC,KAAKumC,aAAahC,cAAcoJ,eAG/E3tC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,KAC/CztC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MAWlD3tC,KAAKwmC,YAAY/W,aAAame,mBAAqB,KACnD5tC,KAAKwmC,YAAY/W,aAAaoe,iBAAmB,KAGjD7tC,KAAKiF,uBAAuBqD,MAAMm8B,GAAiB6H,eAAgBtsC,KAAKwmC,YACzE,CAEOwG,2CAENhtC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwmC,YAAa,KAAM/B,GAAiB6H,gBAE1GtsC,KAAKwmC,YAAY/W,aAAaxE,cAAgBjrB,KAAKymC,cAAcxO,eAAehN,cAGhFjrB,KAAKwmC,YAAY/W,aAAayI,iBAAmBl4B,KAAKymC,cAAcxO,eAAeC,iBACnFl4B,KAAKwmC,YAAY/W,aAAauX,iBAAmBhnC,KAAKymC,cAAcxO,eAAe+O,iBAE9EhnC,KAAKymC,cAAcxO,eAAe+O,kBAA2E,IAAvDhnC,KAAKymC,cAAcxO,eAAe+O,kBA0C3FhnC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,KAC/CztC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MA9C1C3tC,KAAKwmC,YAAY/W,aAAa+d,kBAC5BxtC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmBxtC,KAAKymC,cAAcxO,eAAeuV,iBACnFxtC,KAAKwmC,YAAY/W,aAAage,eAAiBztC,KAAKymC,cAAcxO,eAAewV,gBACxEztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKwmC,YAAY/W,aAAa+d,iBAAmBxtC,KAAKymC,cAAcxO,eAAeyV,gBACnF1tC,KAAKwmC,YAAY/W,aAAage,eAAiBztC,KAAKymC,cAAcxO,eAAe0V,eAGnF3tC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MACrC3tC,KAAKwmC,YAAY/W,aAAaie,iBACnC1tC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKwmC,YAAY/W,aAAaie,gBAAkB1tC,KAAKymC,cAAcxO,eAAeuV,iBAClFxtC,KAAKwmC,YAAY/W,aAAake,cAAgB3tC,KAAKymC,cAAcxO,eAAewV,gBACvEztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKwmC,YAAY/W,aAAaie,gBAAkB1tC,KAAKymC,cAAcxO,eAAeyV,gBAClF1tC,KAAKwmC,YAAY/W,aAAake,cAAgB3tC,KAAKymC,cAAcxO,eAAe0V,eAGlF3tC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,OAE3CztC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKwmC,YAAY/W,aAAa6d,eAAiBttC,KAAKymC,cAAcxO,eAAeuV,iBACjFxtC,KAAKwmC,YAAY/W,aAAa8d,aAAevtC,KAAKymC,cAAcxO,eAAewV,gBACtEztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKwmC,YAAY/W,aAAa6d,eAAiBttC,KAAKymC,cAAcxO,eAAeyV,gBACjF1tC,KAAKwmC,YAAY/W,aAAa8d,aAAevtC,KAAKymC,cAAcxO,eAAe0V,eAGjF3tC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,KAC/CztC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MAWlD3tC,KAAKwmC,YAAY/W,aAAame,mBAAqB,KACnD5tC,KAAKwmC,YAAY/W,aAAaoe,iBAAmB,KAGjD7tC,KAAKiF,uBAAuBqD,MAAMm8B,GAAiB6H,eAAgBtsC,KAAKwmC,YACzE,CAEOoG,0CAEN5sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM9B,GAAiBgI,iBAE3GzsC,KAAKumC,aAAahC,cAActZ,cAAgBjrB,KAAKwmC,YAAY/W,aAAaxE,cAG9EjrB,KAAKumC,aAAahC,cAAcrM,iBAAmBl4B,KAAKwmC,YAAY/W,aAAayI,iBACjFl4B,KAAKumC,aAAahC,cAAcyC,iBAAmBhnC,KAAKwmC,YAAY/W,aAAauX,iBAE5EhnC,KAAKwmC,YAAY/W,aAAauX,kBAAuE,IAAnDhnC,KAAKwmC,YAAY/W,aAAauX,kBA+BnFhnC,KAAKumC,aAAahC,cAAciJ,iBAAmB,KACnDxtC,KAAKumC,aAAahC,cAAckJ,eAAiB,KACjDztC,KAAKumC,aAAahC,cAAcmJ,gBAAkB,KAClD1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB,MAjC5C3tC,KAAKumC,aAAahC,cAAciJ,kBAC9BxtC,KAAKwmC,YAAY/W,aAAa6d,gBAChCttC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKwmC,YAAY/W,aAAa6d,eACjFttC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKwmC,YAAY/W,aAAa8d,cACtEvtC,KAAKwmC,YAAY/W,aAAa+d,kBACvCxtC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKwmC,YAAY/W,aAAa+d,iBACjFxtC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKwmC,YAAY/W,aAAage,gBACtEztC,KAAKwmC,YAAY/W,aAAaie,kBACvC1tC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKwmC,YAAY/W,aAAaie,gBACjF1tC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKwmC,YAAY/W,aAAake,eAGjF3tC,KAAKumC,aAAahC,cAAcmJ,gBAAkB,KAClD1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB,OAE5C3tC,KAAKwmC,YAAY/W,aAAa6d,gBAChCttC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKwmC,YAAY/W,aAAa6d,eAChFttC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKwmC,YAAY/W,aAAa8d,cACrEvtC,KAAKwmC,YAAY/W,aAAa+d,kBACvCxtC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKwmC,YAAY/W,aAAa+d,iBAChFxtC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKwmC,YAAY/W,aAAage,gBACrEztC,KAAKwmC,YAAY/W,aAAaie,kBACvC1tC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKwmC,YAAY/W,aAAaie,gBAChF1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKwmC,YAAY/W,aAAake,eAGhF3tC,KAAKumC,aAAahC,cAAciJ,iBAAmB,KACnDxtC,KAAKumC,aAAahC,cAAckJ,eAAiB,MASrDztC,KAAKumC,aAAahC,cAAcuJ,YAAc,KAC9C9tC,KAAKumC,aAAahC,cAAcwJ,UAAY,KAG5C/tC,KAAKiF,uBAAuBqD,MAAMm8B,GAAiBgI,gBAAiBzsC,KAAKumC,aAC1E,CAEO0G,4CAENjtC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM9B,GAAiBgI,iBAE3GzsC,KAAKumC,aAAahC,cAActZ,cAAgBjrB,KAAKymC,cAAcxO,eAAehN,cAGlFjrB,KAAKumC,aAAahC,cAAcrM,iBAAmBl4B,KAAKymC,cAAcxO,eAAeC,iBACrFl4B,KAAKumC,aAAahC,cAAcyC,iBAAmBhnC,KAAKymC,cAAcxO,eAAe+O,iBAEhFhnC,KAAKymC,cAAcxO,eAAe+O,kBAA2E,IAAvDhnC,KAAKymC,cAAcxO,eAAe+O,kBAyB3FhnC,KAAKumC,aAAahC,cAAciJ,iBAAmB,KACnDxtC,KAAKumC,aAAahC,cAAckJ,eAAiB,KACjDztC,KAAKumC,aAAahC,cAAcmJ,gBAAkB,KAClD1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB,MA3B5C3tC,KAAKumC,aAAahC,cAAciJ,kBAC9BxtC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKymC,cAAcxO,eAAeuV,iBACrFxtC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKymC,cAAcxO,eAAewV,gBAC1EztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKymC,cAAcxO,eAAeyV,gBACrF1tC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKymC,cAAcxO,eAAe0V,eAGrF3tC,KAAKumC,aAAahC,cAAcmJ,gBAAkB,KAClD1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB,OAE5C3tC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKymC,cAAcxO,eAAeuV,iBACpFxtC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKymC,cAAcxO,eAAewV,gBACzEztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKymC,cAAcxO,eAAeyV,gBACpF1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKymC,cAAcxO,eAAe0V,eAGpF3tC,KAAKumC,aAAahC,cAAciJ,iBAAmB,KACnDxtC,KAAKumC,aAAahC,cAAckJ,eAAiB,MASrDztC,KAAKumC,aAAahC,cAAcuJ,YAAc,KAC9C9tC,KAAKumC,aAAahC,cAAcwJ,UAAY,KAG5C/tC,KAAKiF,uBAAuBqD,MAAMm8B,GAAiBgI,gBAAiBzsC,KAAKumC,aAC1E,CAEOsG,2CAEN7sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAMhC,GAAiBkI,kBAE5G3sC,KAAKymC,cAAcxO,eAAehN,cAAgBjrB,KAAKwmC,YAAY/W,aAAaxE,cAGhFjrB,KAAKymC,cAAcxO,eAAeC,iBAAmBl4B,KAAKwmC,YAAY/W,aAAayI,iBACnFl4B,KAAKymC,cAAcxO,eAAe+O,iBAAmBhnC,KAAKwmC,YAAY/W,aAAauX,iBAE9EhnC,KAAKwmC,YAAY/W,aAAauX,kBAAuE,IAAnDhnC,KAAKwmC,YAAY/W,aAAauX,kBA+BnFhnC,KAAKymC,cAAcxO,eAAeuV,iBAAmB,KACrDxtC,KAAKymC,cAAcxO,eAAewV,eAAiB,KACnDztC,KAAKymC,cAAcxO,eAAeyV,gBAAkB,KACpD1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB,MAjC9C3tC,KAAKymC,cAAcxO,eAAeuV,kBAChCxtC,KAAKwmC,YAAY/W,aAAa6d,gBAChCttC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKwmC,YAAY/W,aAAa6d,eACnFttC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKwmC,YAAY/W,aAAa8d,cACxEvtC,KAAKwmC,YAAY/W,aAAa+d,kBACvCxtC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKwmC,YAAY/W,aAAa+d,iBACnFxtC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKwmC,YAAY/W,aAAage,gBACxEztC,KAAKwmC,YAAY/W,aAAaie,kBACvC1tC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKwmC,YAAY/W,aAAaie,gBACnF1tC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKwmC,YAAY/W,aAAake,eAGnF3tC,KAAKymC,cAAcxO,eAAeyV,gBAAkB,KACpD1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB,OAE9C3tC,KAAKwmC,YAAY/W,aAAa6d,gBAChCttC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKwmC,YAAY/W,aAAa6d,eAClFttC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKwmC,YAAY/W,aAAa8d,cACvEvtC,KAAKwmC,YAAY/W,aAAa+d,kBACvCxtC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKwmC,YAAY/W,aAAa+d,iBAClFxtC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKwmC,YAAY/W,aAAage,gBACvEztC,KAAKwmC,YAAY/W,aAAaie,kBACvC1tC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKwmC,YAAY/W,aAAaie,gBAClF1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKwmC,YAAY/W,aAAake,eAGlF3tC,KAAKymC,cAAcxO,eAAeuV,iBAAmB,KACrDxtC,KAAKymC,cAAcxO,eAAewV,eAAiB,MAUvDztC,KAAKiF,uBAAuBqD,MAAMm8B,GAAiBkI,iBAAkB3sC,KAAKymC,cAC3E,CAEOsG,4CAEN/sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAMhC,GAAiBkI,kBAE5G3sC,KAAKymC,cAAcxO,eAAehN,cAAgBjrB,KAAKumC,aAAahC,cAActZ,cAGlFjrB,KAAKymC,cAAcxO,eAAeC,iBAAmBl4B,KAAKumC,aAAahC,cAAcrM,iBACrFl4B,KAAKymC,cAAcxO,eAAe+O,iBAAmBhnC,KAAKumC,aAAahC,cAAcyC,iBAEhFhnC,KAAKumC,aAAahC,cAAcyC,kBAAyE,IAArDhnC,KAAKumC,aAAahC,cAAcyC,kBAyBvFhnC,KAAKymC,cAAcxO,eAAeuV,iBAAmB,KACrDxtC,KAAKymC,cAAcxO,eAAewV,eAAiB,KACnDztC,KAAKymC,cAAcxO,eAAeyV,gBAAkB,KACpD1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB,MA3B9C3tC,KAAKymC,cAAcxO,eAAeuV,kBAChCxtC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKumC,aAAahC,cAAciJ,iBACrFxtC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKumC,aAAahC,cAAckJ,gBAC1EztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKumC,aAAahC,cAAcmJ,gBACrF1tC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKumC,aAAahC,cAAcoJ,eAGrF3tC,KAAKymC,cAAcxO,eAAeyV,gBAAkB,KACpD1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB,OAE9C3tC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKumC,aAAahC,cAAciJ,iBACpFxtC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKumC,aAAahC,cAAckJ,gBACzEztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKumC,aAAahC,cAAcmJ,gBACpF1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKumC,aAAahC,cAAcoJ,eAGpF3tC,KAAKymC,cAAcxO,eAAeuV,iBAAmB,KACrDxtC,KAAKymC,cAAcxO,eAAewV,eAAiB,MAUvDztC,KAAKiF,uBAAuBqD,MAAMm8B,GAAiBkI,iBAAkB3sC,KAAKymC,cAC3E,CAEOwE,yCACFjrC,KAAKqoC,mBACHroC,KAAKwmC,aAAexmC,KAAKwmC,YAAY/W,eACvCzvB,KAAKguC,sBAAwBxK,oCAAiExjC,KAAKikC,sBAE5FjkC,KAAKwoC,oBACVxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAahC,gBACzCvkC,KAAKguC,sBAAwBxK,qCAAkExjC,KAAKikC,sBAE7FjkC,KAAKyoC,sBACVzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcxO,iBAC3Cj4B,KAAKguC,sBAAwBxK,qCAAkExjC,KAAKikC,sBAIxGjkC,KAAKiuC,yBAA2BjuC,KAAKkuC,8BACjCluC,KAAKguC,uBAAyBhuC,KAAKguC,sBAAwB,EAC7DhuC,KAAKmuC,6BAA8B,GAEnCnuC,KAAKmuC,6BAA8B,EACnCnuC,KAAKguC,2BAAwBp2B,EAEhC,CAEO8uB,yCAED1mC,KAAKqmC,qBAAqB96B,UAAUM,MAKvC7L,KAAKouC,yBAA2BpuC,KAAKqmC,oBAAoB96B,SAASjC,KAClEtJ,KAAKquC,6BAA8B,EACnCruC,KAAKsuC,sBAAwB,IAN7BtuC,KAAKouC,yBAA2BpuC,KAAKuuC,8BACrCvuC,KAAKquC,6BAA8B,EACnCruC,KAAKsuC,2BAAwB12B,EAMhC,EAzoCa6sB,2CAAmC,iCACnCA,gCAA+B,qCAC/BA,kBAAiB,6BACjBA,qBAAoB,yCACpBA,qCAAoC,kCACpCA,iCAAgC,sCAChCA,mBAAkB,8BAClBA,+BAA8B,+CAC9BA,sCAAqC,oCACrCA,kCAAiC,wCACjCA,oBAAmB,uEAlBtBA,IAAgBxgC,kLAAhBwgC,GAAgBlwB,8oBAAhBC,sBAAuB,8CAAvBA,iBAAkB,iDAAlBA,oBAAqB,+CAArBA,kBAAmB,wrFDrDhCvQ,kCACAA,iBAAqE,UAArEA,CAAqE,iBAArEA,CAAqE,UAArEA,CAAqE,UAArEA,CAAqE,yBAOzDA,mDAA0BuQ,oCAAqC,GAEhEvQ,QACDA,iBAA6B,kCAEkDA,mCAAUuQ,mBAAoB,GACzGvQ,oCAIC,cAEGA,UACFA,UAGFA,6BAaAA,oCAUC,cAEGA,UACFA,UAGFA,4BAYFA,cAINA,mBAQC,2BAQGA,oDAA2BuQ,qCAAsC,EAAjEvQ,CAAkE,wDAC7BuQ,+CAAgD,GACtFvQ,UAEHA,mBAAyB,YAAzBA,CAAyB,0BAInBA,iDAAwBuQ,2BAA4B,EAApDvQ,CAAqD,wCAChCuQ,wBAAyB,EAD9CvQ,CAAqD,wCAE9BuQ,+BAA4B,GAIrDvQ,QACAA,sBACEA,gCAASuQ,kCAA+B,GAWxCvQ,qBAAUA,0BAAaA,kBAOjCA,mBAAoB,YAApBA,CAAoB,aAIdA,yBAiBAA,mBAKEA,0BASFA,QAEAA,mBACEA,yBAUFA,QACAA,0BACFA,uCAzKgBA,sCAGNA,2CAAyB,0BAM7BA,2CAOIA,oFAGMA,2GACJA,oDAKDA,mGAcDA,wFAAkE,oCAAlEA,CAAkE,qFAS5DA,2GACJA,oDAKDA,sDAyBPA,+CAA6B,2BAA7BA,CAA6B,oKAA7BA,CAA6B,6DAA7BA,CAA6B,qDAA7BA,CAA6B,wDAiB3BA,4DAA0C,0DAO1CA,uEADAA,2DAsBDA,mEAiBDA,6GAIMA,kCAagBA,4GC9GlBpF,OAKD4lC,EAAb,oDCrDM,MAAON,GAAwB,qHCO/B,MAAO9U,UAAoBge,IAG/BttC,cACEwS,QACAvS,KAAKwuC,kBAAoB,aACzBxuC,KAAKyuC,qBAAuB,OAC5BzuC,KAAK+mC,cAEL/mC,KAAK0uC,aAAajK,sCAClBzkC,KAAK2uC,aAAalK,kCAClBzkC,KAAK4uC,sBAAsBnK,gCAC5B,CAEM8D,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAgB5B,OAfI7qC,KAAKyvB,aAAauX,kBAA2D,IAAvChnC,KAAKyvB,aAAauX,oBAC1D+H,EAAwB/uC,KAAKyvB,aAAauX,iBAAiBgI,UAAU5yB,YAEnE2yB,IAA0B7H,IAC5B2H,GAAmB,IAGjB7uC,KAAKyvB,aAAa0X,sBAAmE,IAA3CnnC,KAAKyvB,aAAa0X,uBACjCnnC,KAAKyvB,aAAa0X,qBAAqB6H,UAAU5yB,aAC1C2oB,yBAAgD3oB,aAElFyyB,GAAmB,GAIhBA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyvB,cAAkBzvB,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAK/CtvB,KAAKyvB,aAAaxE,eAA4D,IAA3CjrB,KAAKyvB,aAAaxE,cAAc9b,QACpEnP,KAAKyvB,aAAawf,gBAClBjvC,KAAKyvB,aAAa6d,gBAClBttC,KAAKyvB,aAAa+d,kBAClBxtC,KAAKyvB,aAAaie,iBAClB1tC,KAAKyvB,aAAame,oBAClB5tC,KAAKyvB,aAAayf,gBACoB,IAAvClvC,KAAKyvB,aAAayI,kBACjBl4B,KAAKyvB,aAAa8a,YAClBvqC,KAAKyvB,aAAa0f,cAClBnvC,KAAKyvB,aAAa8d,cAClBvtC,KAAKyvB,aAAage,gBAClBztC,KAAKyvB,aAAake,eAClB3tC,KAAKyvB,aAAaoe,kBAClB7tC,KAAKyvB,aAAa2f,cACjBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyvB,aAAe,IAAIC,IACxB1vB,KAAKyvB,aAAayI,iBAAmB,EACrCl4B,KAAKyvB,aAAauX,iBAAmB/B,SACrCjlC,KAAKyvB,aAAa0X,qBAAuBpC,eACzC/kC,KAAKyvB,aAAa2U,cAAe,EACjCpkC,KAAKyvB,aAAa8a,WAAa,GAC/BvqC,KAAKyvB,aAAa4f,iBAAmB,CAAC,SAAU,sBAAuB,WAAY,gBAAiB,UAEpGrvC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyvB,aAAauX,iBAAqCC,OAAOD,GAEjE,EAzFgD,sHCA7C,MAAOlC,UAAqBuI,IAGhCttC,cACEwS,QACAvS,KAAKwuC,kBAAoB,aACzBxuC,KAAKyuC,qBAAuB,OAC5BzuC,KAAK+mC,cAEL/mC,KAAK0uC,aAAajK,uCAClBzkC,KAAK2uC,aAAalK,mCAClBzkC,KAAK4uC,sBAAsBnK,gCAC5B,CAEM8D,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAgB5B,OAfI7qC,KAAKukC,cAAcyC,kBAA4D,IAAxChnC,KAAKukC,cAAcyC,oBAC5D+H,EAAwB/uC,KAAKukC,cAAcyC,iBAAiBgI,UAAU5yB,YAEpE2yB,IAA0B7H,IAC5B2H,GAAmB,IAGjB7uC,KAAKukC,cAAc4C,sBAAoE,IAA5CnnC,KAAKukC,cAAc4C,uBACnCnnC,KAAKukC,cAAc4C,qBAAqB6H,UAAU5yB,aAC3C4oB,0BAAkD5oB,aAEpFyyB,GAAmB,GAIhBA,CACR,CAEMC,6BACL,QAAK9uC,KAAKukC,eAAmBvkC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,eAQd,IAApCtvB,KAAKukC,cAAcH,cACjBpkC,KAAKukC,cAActZ,eAA6D,IAA5CjrB,KAAKukC,cAActZ,cAAc9b,QACtEnP,KAAKukC,cAAc0K,gBACnBjvC,KAAKukC,cAAciJ,kBACnBxtC,KAAKukC,cAAcuJ,aACnB9tC,KAAKukC,cAAcmJ,iBACnB1tC,KAAKukC,cAAc2K,gBACoB,IAAxClvC,KAAKukC,cAAcrM,kBAClBl4B,KAAKukC,cAAcgG,YACnBvqC,KAAKukC,cAAc4K,cACnBnvC,KAAKukC,cAAckJ,gBACnBztC,KAAKukC,cAAcwJ,WACnB/tC,KAAKukC,cAAcoJ,eACnB3tC,KAAKukC,cAAc6K,cAClBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YAlBiD,IAAhCtvB,KAAKukC,cAAcF,WACgB,IAAhCrkC,KAAKukC,cAAcF,WAoBhErkC,KAAKqpC,2BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKukC,cAAgB,IAAIiL,IACzBxvC,KAAKukC,cAAcrM,iBAAmB,EACtCl4B,KAAKukC,cAAcyC,iBAAmB/B,SACtCjlC,KAAKukC,cAAc4C,qBAAuBnC,gBAC1ChlC,KAAKukC,cAAcH,cAAe,EAClCpkC,KAAKukC,cAAcgG,WAAa,GAChCvqC,KAAKukC,cAAc8K,iBAAmB,CAAC,SAAU,sBAAuB,WAAY,UAEpFrvC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKukC,cAAcyC,iBAAqCC,OAAOD,GAElE,EA7FiD,qHCA9C,MAAO9B,UAAsBmI,IAGjCttC,cACEwS,QACAvS,KAAKwuC,kBAAoB,aACzBxuC,KAAKyuC,qBAAuB,OAC5BzuC,KAAK+mC,cAEL/mC,KAAK0uC,aAAajK,wCAClBzkC,KAAK2uC,aAAalK,oCAClBzkC,KAAK4uC,sBAAsBnK,gCAC5B,CAEM8D,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAgB5B,OAfI7qC,KAAKi4B,eAAe+O,kBAA6D,IAAzChnC,KAAKi4B,eAAe+O,oBAC9D+H,EAAwB/uC,KAAKi4B,eAAe+O,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,IAGjB7uC,KAAKi4B,eAAekP,sBAAqE,IAA7CnnC,KAAKi4B,eAAekP,uBACrCnnC,KAAKi4B,eAAekP,qBAAqB6H,UAAU5yB,aAC5C4oB,0BAAkD5oB,aAEpFyyB,GAAmB,GAIhBA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKi4B,gBAAoBj4B,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,WACvBtvB,KAAKi4B,eAAehN,eAA8D,IAA7CjrB,KAAKi4B,eAAehN,cAAc9b,QACxEnP,KAAKi4B,eAAegX,gBACpBjvC,KAAKi4B,eAAeuV,kBACpBxtC,KAAKi4B,eAAeyV,iBACpB1tC,KAAKi4B,eAAeiX,gBACoB,IAAzClvC,KAAKi4B,eAAeC,kBACnBl4B,KAAKi4B,eAAesS,YACpBvqC,KAAKi4B,eAAekX,cACpBnvC,KAAKi4B,eAAewV,gBACpBztC,KAAKi4B,eAAe0V,eACpB3tC,KAAKi4B,eAAemX,eACrBpvC,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKi4B,eAAiB,IAAI7J,IAC1BpuB,KAAKi4B,eAAeC,iBAAmB,EACvCl4B,KAAKi4B,eAAe+O,iBAAmB/B,SACvCjlC,KAAKi4B,eAAekP,qBAAuBnC,gBAC3ChlC,KAAKi4B,eAAesS,WAAa,GACjCvqC,KAAKi4B,eAAeoX,iBAAmB,CAAC,SAAU,sBAAuB,YAEzErvC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKi4B,eAAe+O,iBAAqCC,OAAOD,GAEnE,EApFkD,+CCP/C,MAAO7C,GAAwB,iQCM/B,MAAOX,EACmCppB,wCAACqpB,GAC7C,IAAI9P,EAAU,EAEdA,SAAU8P,EAAegM,OAAS9b,EAAU,EAAIA,EAC3C8P,EAAeiM,yBAClB/b,EAAU8P,EAAekM,YAAchc,EAAU,EAAIA,EACrDA,EAAU8P,EAAemM,cAAgBjc,EAAU,EAAIA,GAEzDA,EAAU8P,EAAeiM,uBAAyB/b,EAAU,EAAIA,EAChEA,EAAU8P,EAAeoM,mBAAqBlc,EAAU,EAAIA,EAC5DA,EAAU8P,EAAeqM,qBAAuBnc,EAAU,EAAIA,EAEvDA,CACR,CAE6DvZ,wDAACqpB,GAC7D,OAAOzjC,KAAK+vC,iCAAiCtM,EAC9C,CAE4DrpB,uDAACqpB,GAC5D,OAAOzjC,KAAK+vC,iCAAiCtM,EAC9C,CAEqErpB,gEAACqpB,GACrE,IAAI9P,EAAU3zB,KAAK+vC,iCAAiCtM,GAEpD,OAAqD,IAAjDA,EAAeI,+BACjBlQ,IAGFA,EAAU8P,EAAetU,cAAgBwE,EAAU,EAAIA,EAEhDA,CACR,CAEqEvZ,gEAACqpB,GACrE,OAAOzjC,KAAK+vC,iCAAiCtM,EAC9C,CAEsDrpB,iDAACqpB,GACtD,OAAOzjC,KAAK+vC,iCAAiCtM,EAC9C,CAEmCrpB,8BAAC/T,GACnC,MAAM49B,EAAsBjkC,KAAKkkC,YAAY,IAAIC,KACjD,OAAI99B,IAEGA,EAAO+9B,eACVH,EAAoBJ,8BAAgC,IAE1B,IAAxBx9B,EAAO+9B,eACTH,EAAoBJ,8BAAgC,IAE1B,IAAxBx9B,EAAO+9B,eACTH,EAAoBJ,8BAAgC,GAGtDI,EAAoB+L,aAAe3pC,EAAO2pC,aAC1C/L,EAAoB9U,cAAgB9oB,EAAO8oB,cAC3C8U,EAAoBwL,OAASppC,EAAOopC,OACpCxL,EAAoB0L,YAActpC,EAAOspC,YACzC1L,EAAoB2L,cAAgBvpC,EAAOupC,cAC3C3L,EAAoByL,uBAAyBrpC,EAAOqpC,uBACpDzL,EAAoB4L,mBAAqBxpC,EAAOwpC,mBAChD5L,EAAoB6L,qBAAuBzpC,EAAOypC,qBAClD7L,EAAoBgM,mBAAqB5pC,EAAO4pC,mBAChDhM,EAAoBiM,aAAe7pC,EAAO6pC,cAErCjM,CACR,CAEkC7pB,6BAAC/T,GAClC,MAAM49B,EAAsBjkC,KAAKkkC,YAAY,IAAIC,KACjD,OAAI99B,IACF49B,EAAoBwL,OAASppC,EAAOopC,OACpCxL,EAAoB0L,YAActpC,EAAOspC,YACzC1L,EAAoB2L,cAAgBvpC,EAAOupC,cAC3C3L,EAAoByL,uBAAyBrpC,EAAOqpC,uBACpDzL,EAAoB4L,mBAAqBxpC,EAAOwpC,mBAChD5L,EAAoB6L,qBAAuBzpC,EAAOypC,qBAClD7L,EAAoBgM,mBAAqB5pC,EAAO4pC,oBAE3ChM,CACR,CAE4B7pB,uBAAC/T,GAC5B,MAAM49B,EAAsBjkC,KAAKkkC,YAAY,IAAIC,KACjD,OAAI99B,IACF49B,EAAoBwL,OAASppC,EAAOopC,OACpCxL,EAAoB0L,YAActpC,EAAOspC,YACzC1L,EAAoB2L,cAAgBvpC,EAAOupC,cAC3C3L,EAAoByL,uBAAyBrpC,EAAOqpC,uBACpDzL,EAAoB4L,mBAAqBxpC,EAAOwpC,mBAChD5L,EAAoB6L,qBAAuBzpC,EAAOypC,qBAClD7L,EAAoBgM,mBAAqB5pC,EAAO4pC,oBAE3ChM,CACR,CAEwB7pB,mBAACqpB,GACxBA,SAAeI,8BAAgC,EAC/CJ,EAAetU,cAAgB,GAC/BsU,EAAegM,OAAS,GACxBhM,EAAekM,YAAc,GAC7BlM,EAAemM,cAAgB,GAC/BnM,EAAeiM,wBAAyB,EACxCjM,EAAeoM,mBAAqB,GACpCpM,EAAeqM,qBAAuB,GACtCrM,EAAewM,mBAAqB,KAE7BxM,CACR,CAEsCrpB,iCACrC+1B,EACAC,GAEAD,SAA2B3C,iBAAmB4C,EAAqB5C,iBACnE2C,EAA2BV,OAASW,EAAqBX,OACzDU,EAA2BR,YAAcS,EAAqBT,YAC9DQ,EAA2BP,cAAgBQ,EAAqBR,cAChEO,EAA2BT,uBAAyBU,EAAqBV,uBACzES,EAA2BN,mBAAqBO,EAAqBP,mBACrEM,EAA2BL,qBAAuBM,EAAqBN,qBACvEK,EAA2BF,mBAAqBG,EAAqBH,mBACrEE,EAA2B1C,eAAiB2C,EAAqB3C,eAE1D0C,CACR,CAEiC/1B,4BAAC6pB,EAA+C59B,GAChFA,SAAO2pC,aAAe/L,EAAoB+L,aACtC/L,EAAoB+L,eAEoC,IAAtD/L,EAAoBJ,8BACtBx9B,EAAO+9B,kBAAexsB,EACyC,IAAtDqsB,EAAoBJ,8BAC7Bx9B,EAAO+9B,cAAe,EACyC,IAAtDH,EAAoBJ,gCAC7Bx9B,EAAO+9B,cAAe,IAG1B/9B,EAAO8oB,cAAgB8U,EAAoB9U,cAC3C9oB,EAAOopC,OAASxL,EAAoBwL,OACpCppC,EAAOspC,YAAc1L,EAAoB0L,YACzCtpC,EAAOupC,cAAgB3L,EAAoB2L,cAC3CvpC,EAAOqpC,uBAAyBzL,EAAoByL,uBACpDrpC,EAAOwpC,mBAAqB5L,EAAoB4L,mBAChDxpC,EAAOypC,qBAAuB7L,EAAoB6L,qBAClDzpC,EAAO4pC,mBAAqBhM,EAAoBgM,mBAChD5pC,EAAO6pC,aAAejM,EAAoBiM,aAEnC7pC,CACR,CAEgC+T,2BAAC6pB,EAA+C59B,GAC/EA,SAAOopC,OAASxL,EAAoBwL,OACpCppC,EAAOspC,YAAc1L,EAAoB0L,YACzCtpC,EAAOupC,cAAgB3L,EAAoB2L,cAC3CvpC,EAAOqpC,uBAAyBzL,EAAoByL,uBACpDrpC,EAAOwpC,mBAAqB5L,EAAoB4L,mBAChDxpC,EAAOypC,qBAAuB7L,EAAoB6L,qBAClDzpC,EAAO4pC,mBAAqBhM,EAAoBgM,mBACzC5pC,CACR,CAE0B+T,qBAAC6pB,EAA+C59B,GACzEA,SAAOopC,OAASxL,EAAoBwL,OACpCppC,EAAOspC,YAAc1L,EAAoB0L,YACzCtpC,EAAOupC,cAAgB3L,EAAoB2L,cAC3CvpC,EAAOqpC,uBAAyBzL,EAAoByL,uBACpDrpC,EAAOwpC,mBAAqB5L,EAAoB4L,mBAChDxpC,EAAOypC,qBAAuB7L,EAAoB6L,qBAClDzpC,EAAO4pC,mBAAqBhM,EAAoBgM,mBAEzC5pC,CACR,ggBCpKSpC,wBAEEA,oEAAkBA,uCAAkC,GAQrDA,gCAPCA,kDAA0C,qBAA1CA,CAA0C,6EAA1CA,CAA0C,kBAA1CA,CAA0C,4EAuB1CA,qBAEEA,yDAASA,8BAAqB,GAQ9BA,oBAAUA,iBAAKA,eAPfA,8FAsBFA,qBAEEA,yDAASA,8BAAqB,GAQ9BA,oBAAUA,iBAAKA,eAPfA,8FA+FNA,kBAA4E,qCAGxEA,4EAAyBA,yCAAoC,GAK/DA,+CAJEA,4DAA2C,qDAA3CA,CAA2C,mIAbjDA,kBASEA,yBAUFA,wCAjBEA,oDAOMA,uFAgBNA,kBAA2E,+BAGvEA,2EAAyBA,yCAAoC,GAI9DA,kCAHCA,4DAA2C,qFAA3CA,CAA2C,8GAS/CA,kBAEEA,uEAASA,wBAAmB,GAM5BA,SACFA,8CANEA,6CAA6C,qBAG7CA,8BAEAA,gPCrJL,IAAMosC,GAAb,MAAM,MAAOA,EA8GXtwC,YACS6hB,EACCkV,EACA7E,EACAyS,GACAC,GACArxB,EACAsxB,EACA//B,EACAC,EACA+/B,GACAyL,GACAC,GACArrC,GACAF,GACAC,IAdDjF,8BACCA,uBACAA,oBACAA,0BACAA,yBACAA,qBACAA,yBACAA,4BACAA,sBACAA,6BACAA,6BACAA,+BACAA,kCACAA,gBACAA,+BAjGHA,UAAO+J,aACP/J,mCAAgC,qBAChCA,mCAAgC,mBAChCA,sDAAmD,iBAInDA,uBAAuC,IAAIwwC,IAE3CxwC,wDAAqD,IAAIywC,IAAW,IAAK,qCACzEzwC,oDAAiD,IAAIywC,IAAW,IAAK,mCAOrEzwC,4BAAyB0wC,wBACzB1wC,wBAAqB0wC,oBACrB1wC,kCAA8B,EAC9BA,sBAAqC,IAAI2wC,IAEzC3wC,gBAA8B,CACnC,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAElCvrB,yBAAuC,CAC5C,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAElCvrB,iBAA+B,CACpC,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,cAAeinB,MAAO,2BAC/B,CAAEjnB,MAAO,gBAAiBinB,MAAO,4BACjC,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAElCvrB,mBAAiC,CACtC,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,YAAainB,MAAO,qBAC7B,CAAEjnB,MAAO,SAAUinB,MAAO,0BAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAGlCvrB,kBAA6B,IAAI8kC,IAEjC9kC,eAAY,YAGZA,6BAA0BilC,oBAG1BjlC,4CAAwC,EACxCA,mBAA+B,IAAIklC,IACnCllC,gBAAyB,IAAI4wC,IAC7B5wC,kCAA8B,EAC9BA,kCAA8B,EAC9BA,gCAA4B,EAC5BA,0BAAuB,EACvBA,yBAAsB,EACtBA,kCAA+B,EAC/BA,kCAA+B,EAC/BA,mBAAgB,EAChBA,8BAA2B,qBAC3BA,8BAA2B,mBAC3BA,iDAA8C,GAE7CA,sBAAiC,IAAIE,KAmB3CF,KAAK6wC,qBAAuBC,mBAC5B9wC,KAAK+wC,0BAA4BD,wBAAyCJ,gBAE1E1wC,KAAKmlC,WAAa,eAAenlC,KAAKkF,0BAA0B+G,iBAChEjM,KAAK0kC,kBAAkB1yB,SAAS,GAAGhS,KAAKolC,eAAeplC,KAAKmlC,cAE5DnlC,KAAKqlC,SAAW,CACd,IAAIC,IAAgBtlC,KAAKgxC,cAAe,QAAS,UAAWhxC,KAAKixC,cAAe,kBAChF,IAAI3L,IAAgBtlC,KAAKkxC,oBAAqB,kBAAmB,iBAAkBlxC,KAAKmxC,oBAAqB,yBAC7G,IAAI7L,IAAgBtlC,KAAKoxC,qBAAsB,oBAAqB,kBAAmBpxC,KAAKqxC,WAAY,0BACxG,IAAI/L,IACFtlC,KAAKsxC,6BACL,qBACA,4BACAtxC,KAAKqxC,WACL,oCAEF,IAAI/L,IACFtlC,KAAKuxC,6BACL,mBACA,0BACAvxC,KAAKwxC,YACL,kCAGL,CAEM3L,6BAA6B5B,GAClCjkC,KAAK8lC,oBAAoB7B,GACzBjkC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKgmC,+BAA+B3xB,QAGpCrU,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKkmC,kBAGLlmC,KAAKmmC,2BACN,CAEMsL,gCAAgCC,GACrC,IAAIC,EAA6B,IAAIvsC,MACrCssC,SAAqB9tC,QAASguC,IAC5B,MAAMC,GAA4B,IAAIpB,IACtCoB,GAA0BxvC,IAAMuvC,EAAc/lC,KAC9CgmC,GAA0BtmB,MAAQumB,cAA8BF,EAAcG,kBAAmBH,EAAcI,qBAC/GL,EAA2BnwC,KAAKqwC,GAAhC,GAEFF,EAA6BA,EAA2BrkB,KAAK2kB,+BAC7DN,EAA2BnwC,KAAKxB,KAAKkyC,oDACrCP,EAA2BnwC,KAAKxB,KAAKmyC,gDAC9BR,CACR,CAEMvL,6BAA6BC,GAClCrmC,KAAKqmC,oBAAsBA,EAG3BrmC,KAAKsmC,mBAAqBD,GAAqB96B,SAAW86B,EAAoB96B,SAASM,KAAO,KAE1Fw6B,GAAqB96B,UAAY86B,EAAoB+L,yBACvDpyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,MACzF7L,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,MACxF7L,KAAKumC,aAAakF,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,MACpF7L,KAAKymC,cAAcgF,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,MACrF7L,KAAKwyC,WAAW/G,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,QAElF7L,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqB,KAC3DtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqB,KAC1DtyC,KAAKumC,aAAakF,eAAe6G,mBAAqB,KACtDtyC,KAAKymC,cAAcgF,eAAe6G,mBAAqB,KACvDtyC,KAAKwyC,WAAW/G,eAAe6G,mBAAqB,MAGlDjM,GAAqB96B,WAAa86B,EAAoB+L,yBACxDpyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,MACpF7L,KAAKuyC,iBAAiB9G,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,MACnF7L,KAAKumC,aAAakF,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,MAC/E7L,KAAKymC,cAAcgF,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,MAChF7L,KAAKwyC,WAAW/G,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,QAE7E7L,KAAKqyC,kBAAkB5G,eAAexgB,cAAgB,KACtDjrB,KAAKuyC,iBAAiB9G,eAAexgB,cAAgB,KACrDjrB,KAAKumC,aAAakF,eAAexgB,cAAgB,KACjDjrB,KAAKymC,cAAcgF,eAAexgB,cAAgB,KAClDjrB,KAAKwyC,WAAW/G,eAAexgB,cAAgB,MAI7CjrB,KAAKqmC,qBAAqB96B,UAC5BvL,KAAKswC,qBAAqBxoB,0BAA0B9nB,KAAKqmC,oBAAoB96B,SAASM,MAIxF7L,KAAK0mC,yCAGL1mC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAK4mC,+BAA+BvyB,OAApC,GAGFrU,KAAKkmC,kBAGLlmC,KAAKmmC,2BACN,CAEMU,sBACLrD,cAA2CxjC,KAAKikC,qBAChDjkC,KAAK6lC,6BAA6B7lC,KAAKikC,oBACxC,CAEM6C,gCACL9mC,KAAKqyC,kBAAkBtL,cACvB/mC,KAAKqyC,kBAAkB5G,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BACvFlnC,KAAKqyC,kBAAkB5G,eAAetE,qBACpCF,OAAOwL,6BAGTzyC,KAAKuyC,iBAAiBxL,cACtB/mC,KAAKuyC,iBAAiB9G,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BAEtFlnC,KAAKumC,aAAaQ,cAClB/mC,KAAKumC,aAAakF,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BAClFlnC,KAAKumC,aAAakF,eAAetE,qBAC/BF,OAAOwL,6BAGTzyC,KAAKymC,cAAcM,cACnB/mC,KAAKymC,cAAcgF,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BACnFlnC,KAAKymC,cAAcgF,eAAetE,qBAChCF,OAAOwL,6BAGTzyC,KAAKwyC,WAAWzL,cAChB/mC,KAAKwyC,WAAW/G,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BAEhFlnC,KAAKmmC,2BACN,CAEMoB,sBACLvnC,KAAKomC,6BAA6B,KACnC,CAGMoB,gBAAgBhuB,GACrBA,EAAOO,gBACR,CAGM0tB,WAAWjuB,GAChBxZ,KAAKsT,cAAciG,qBAAqBC,EAAQxZ,KAAK0nC,qBACtD,CAGMC,gBACL,IAAIC,EAAY5nC,KAAK6nC,WAAWlpB,MAAQ,EACpCipB,EAAY,IACdA,EAAY5nC,KAAKqlC,SAASl2B,OAAS,GAErCnP,KAAK8nC,WAAW9nC,KAAKqlC,SAASuC,GAC/B,CAGMG,cAEL/nC,KAAK8nC,WAAW9nC,KAAKqlC,UADFrlC,KAAK6nC,WAAWlpB,MAAQ,GAAK3e,KAAKqlC,SAASl2B,QAE/D,CAEM8mB,cACLj2B,KAAKgoC,gCAAgC7R,cACrCn2B,KAAKioC,iBAAiBxmC,OACtBzB,KAAKioC,iBAAiB1d,UACvB,CAEM2d,WAGHloC,KAAK6nC,WADH7nC,KAAKgF,QAAQ5C,IAAI0M,WAAW,wCACZ9O,KAAKqlC,SAASrlC,KAAKgxC,eAC5BhxC,KAAKgF,QAAQ5C,IAAI0M,WAAW,+CACnB9O,KAAKqlC,SAASrlC,KAAKkxC,qBAC5BlxC,KAAKgF,QAAQ5C,IAAI0M,WAAW,wDACnB9O,KAAKqlC,SAASrlC,KAAKuxC,8BAC5BvxC,KAAKgF,QAAQ5C,IAAI0M,WAAW,0DACnB9O,KAAKqlC,SAASrlC,KAAKsxC,8BAEnBtxC,KAAKqlC,SAASrlC,KAAKoxC,sBAGvCpxC,KAAK6kC,qBAAqB9e,yBACvB3f,QAAKmsB,KAAUvyB,KAAKioC,mBACpBziC,UAAW0gB,IACVlmB,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAKooC,aAAaliB,iBAAmBA,EAEjClmB,KAAK0yC,yBACP1yC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,0BAC5FlnC,KAAK2yC,wBACd3yC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,0BAC3FlnC,KAAKwoC,oBACdxoC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BACvFlnC,KAAKyoC,qBACdzoC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BACxFlnC,KAAK4yC,oBACd5yC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,0BAA3D,GAIzClnC,KAAKuwC,uBAAuBpW,6CACzB/zB,QAAKmsB,KAAUvyB,KAAKioC,mBACpBziC,UAAWm1B,IACV36B,KAAK2xC,2BAA6B3xC,KAAKyxC,gCAAgC9W,GACnE36B,KAAK0yC,yBACP1yC,KAAK6yC,wBAAwB7yC,KAAKqyC,kBAAkB5G,gBAC3CzrC,KAAK2yC,wBACd3yC,KAAK6yC,wBAAwB7yC,KAAKuyC,iBAAiB9G,gBAC1CzrC,KAAKwoC,oBACdxoC,KAAK6yC,wBAAwB7yC,KAAKumC,aAAakF,gBACtCzrC,KAAKyoC,qBACdzoC,KAAK6yC,wBAAwB7yC,KAAKymC,cAAcgF,gBACvCzrC,KAAK4yC,mBACd5yC,KAAK6yC,wBAAwB7yC,KAAKwyC,WAAW/G,eAA7C,GAINzrC,KAAK82B,gBAAgBgB,YAAY1xB,QAAKmsB,KAAUvyB,KAAKioC,mBAAmBziC,UAAWlH,IACjF0B,KAAK0oC,4BACL1oC,KAAK2oC,WAAWrqC,EAAO05B,QACvBh4B,KAAK8lC,oBAAoB9lC,KAAKikC,qBAC9BjkC,KAAK4oC,uBACL5oC,KAAK6oC,uBACL7oC,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAK8oC,wBAAL,GAGF9oC,KAAKiyB,aAAatrB,oBAAoBP,QAAKmsB,KAAUvyB,KAAKioC,mBAAmBziC,UAAU,KACrFxF,KAAKgM,aAAehM,KAAKkF,0BAA0B6G,yBAGrD/L,KAAKgoC,gCAAkChoC,KAAKsT,cAAc+F,4BAA4B7T,UAAU,KAC1FxF,KAAKsT,cAAcyyB,4CACrB/lC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKgmC,+BAA+B3xB,SAC3BrU,KAAKsT,cAAcqzB,sCAC5B3mC,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAK4mC,+BAA+BvyB,SAEpCrU,KAAK4T,UAAL,EAGL,CAEMk/B,iCAAiCC,GAClC/yC,KAAK0yC,yBACP1yC,KAAKgzC,uBAAuBhzC,KAAKqyC,kBAAkB5G,eAAgBsH,GAC1D/yC,KAAK2yC,wBACd3yC,KAAKgzC,uBAAuBhzC,KAAKuyC,iBAAiB9G,eAAgBsH,GACzD/yC,KAAKwoC,oBACdxoC,KAAKgzC,uBAAuBhzC,KAAKumC,aAAakF,eAAgBsH,GACrD/yC,KAAKyoC,qBACdzoC,KAAKgzC,uBAAuBhzC,KAAKymC,cAAcgF,eAAgBsH,GACtD/yC,KAAK4yC,mBACd5yC,KAAKgzC,uBAAuBhzC,KAAKwyC,WAAW/G,eAAgBsH,GAG9D/yC,KAAKkmC,kBACLlmC,KAAKmmC,2BACN,CAEM8M,2BAA2Bp7B,GAChC,IAAI7X,KAAK0yC,yBAEF,IAAI1yC,KAAK2yC,wBACV96B,EACF7X,KAAKuyC,iBAAiB9G,eAAehhB,OAASqmB,kBAAmCj5B,UAE1E7X,KAAKuyC,iBAAiB9G,eAAehhB,WAEzC,IAAIzqB,KAAKwoC,oBACd,OACK,GAAIxoC,KAAKyoC,qBACd,OACSzoC,KAAK4yC,oBACV/6B,EACF7X,KAAKwyC,WAAW/G,eAAehhB,OAASqmB,kBAAmCj5B,UAEpE7X,KAAKwyC,WAAW/G,eAAehhB,QAK1CzqB,KAAKkmC,kBACLlmC,KAAKmmC,2BAAL,CACD,CAEM4C,+BAA+BX,GACpCpoC,KAAKqyC,kBAAkB5G,eAAiBzC,yBACtChpC,KAAKqyC,kBAAkB5G,eACvBrD,GAEFpoC,KAAKuyC,iBAAiB9G,eAAiBzC,wBACrChpC,KAAKuyC,iBAAiB9G,eACtBrD,GAEFpoC,KAAKumC,aAAakF,eAAiBzC,iCACjChpC,KAAKumC,aAAakF,eAClBrD,EACApoC,KAAKwoC,qBAEPxoC,KAAKymC,cAAcgF,eAAiBzC,yBAClChpC,KAAKymC,cAAcgF,eACnBrD,GAEFpoC,KAAKwyC,WAAW/G,eAAiBzC,kBAAkDhpC,KAAKwyC,WAAW/G,eAAgBrD,GAEnHpoC,KAAKkmC,kBACLlmC,KAAKmmC,2BAA0B,EAChC,CAEM8C,6BAEL,MAAM3b,EAAO,IAAIloB,MAEbpF,KAAK0yC,0BACP1yC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKqyC,kBAAmBhC,EAAwB6C,oCAC7ElzC,KAAKopC,0BAA4BppC,KAAKqyC,kBAAkBhJ,2BACxDrpC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,2BAC5FlnC,KAAK2yC,yBACd3yC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKuyC,iBAAkBlC,EAAwB8C,mCAC5EnzC,KAAKopC,0BAA4BppC,KAAKuyC,iBAAiBlJ,2BACvDrpC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,2BAC3FlnC,KAAKwoC,qBACdxoC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKumC,aAAc8J,EAAwB/G,+BACxEtpC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,sBACdzoC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKymC,cAAe4J,EAAwB9G,gCACzEvpC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BACxFlnC,KAAK4yC,oBACd5yC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKwyC,WAAYnC,EAAwB+C,6BACtEpzC,KAAKopC,0BAA4BppC,KAAKwyC,WAAWnJ,2BACjDrpC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,2BAGhGlnC,KAAK8E,eAAeggB,8BAA8B,+BACnD,CAEM0kB,yCAAyCC,GAE9CzpC,KAAKknC,yBAA2BuC,EAEhC,IAAIC,EAAsBD,EACE,OAAxBC,IACFA,EAAsB,MAIxB1pC,KAAK6E,qBAAqByD,MAAM+nC,EAAwB1G,4BAA6BD,GAGrF1pC,KAAK4pC,sCAAwC5pC,KAAKooC,aAAapB,mBAAqBhnC,KAAKknC,yBAErFlnC,KAAK0yC,0BACP1yC,KAAKopC,0BAA4BppC,KAAKqyC,kBAAkBhJ,2BACxDrpC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,2BAC5FlnC,KAAK2yC,yBACd3yC,KAAKopC,0BAA4BppC,KAAKuyC,iBAAiBlJ,2BACvDrpC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,2BAC3FlnC,KAAKwoC,qBACdxoC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,sBACdzoC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BACxFlnC,KAAK4yC,oBACd5yC,KAAKopC,0BAA4BppC,KAAKwyC,WAAWnJ,2BACjDrpC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,2BAGhGlnC,KAAK8E,eAAeggB,8BAA8B,2CACnD,CAEMkuB,uBAAuBvH,EAAgCj2B,GAC5D,GAAIA,EAAS,CACX,MAAM69B,EAAwBrzC,KAAK2xC,2BAA2BtrC,OAC3D3H,MACGA,GAAE2D,MAAO,CAACrC,KAAKmyC,+CAA+C9vC,IAAKrC,KAAKkyC,mDAAmD7vC,OAE3HixC,GAAqB99B,EAAQrO,IAAKzI,IAAMA,GAAE2D,KAE1CkxC,GAA+B,GACrCF,EAAsBzvC,QAAS4vC,KACzBF,GAAmBrjC,KAAMvR,IAAMA,KAAM80C,GAAqBnxC,MAC5DkxC,GAA6B/xC,KAAKswC,WAA2B0B,GAAqBjoB,OAAlF,GAIJ,MAAMkoB,EAAiC,GACvCJ,EAAsBzvC,QAAS4vC,KACxBF,GAAmBrjC,KAAMvR,IAAMA,KAAM80C,GAAqBnxC,MAC7DoxC,EAA+BjyC,KAAKswC,WAA2B0B,GAAqBjoB,OAApF,GAIJ,MAAMmoB,EAA8Bl+B,EAAQvF,KAAMvR,IAAMA,GAAE2D,MAAQrC,KAAKmyC,+CAA+C9vC,KAChHsxC,EAAkCn+B,EAAQvF,KAAMvR,IAAMA,GAAE2D,MAAQrC,KAAKkyC,mDAAmD7vC,KACxHuxC,EAA+BL,IAA8BpkC,OAAS,EAExEukC,GACFjI,EAAeoI,uBAAwB,EACnCD,GAAgCD,IAClClI,EAAe9Q,eAAiB4Y,GAChC9H,EAAeqI,uBAAyBL,GAEtCG,IAAiCD,IACnClI,EAAe9Q,eAAiB4Y,GAChC9H,EAAeqI,uBAAyB,OAErCF,GAAgCD,IACnClI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyBL,IAErCG,IAAiCD,IACpClI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyB,QAG1CrI,EAAeoI,sBAAwB,KACnCD,GAAgCD,IAClClI,EAAe9Q,eAAiB4Y,GAChC9H,EAAeqI,uBAAyBL,GAEtCG,IAAiCD,IACnClI,EAAe9Q,eAAiB4Y,GAChC9H,EAAeqI,uBAAyB,OAErCF,GAAgCD,IACnClI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyBL,IAErCG,IAAiCD,IACpClI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyB,MAG7C,MACCrI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyB,KACxCrI,EAAeoI,sBAAwB,IAE1C,CAEMjgC,WACL5T,KAAKsT,cAAcY,yBAAyB,KACK,mBAA3ClU,KAAKimC,4BAA4B3hC,MACnCtE,KAAK+zC,0BAA0BngC,WACqB,mBAA3C5T,KAAKimC,4BAA4B3hC,OAC1CtE,KAAK8pC,+BAA+Bl2B,UAApC,EAGL,CAEMm2B,kBAAkBC,GACnBhqC,KAAK0yC,yBACP1yC,KAAKqyC,kBAAkB9iB,WAAaya,EAC3BhqC,KAAK2yC,wBACd3yC,KAAKuyC,iBAAiBhjB,WAAaya,EAC1BhqC,KAAKwoC,oBACdxoC,KAAKumC,aAAahX,WAAaya,EACtBhqC,KAAKyoC,qBACdzoC,KAAKymC,cAAclX,WAAaya,EACvBhqC,KAAK4yC,oBACd5yC,KAAKwyC,WAAWjjB,WAAaya,GAG/BhqC,KAAKmmC,2BAA0B,EAChC,CAEM8D,qBAAqBC,GACtBlqC,KAAK0yC,yBACP1yC,KAAKqyC,kBAAkB7iB,cAAgB0a,EAC9BlqC,KAAK2yC,wBACd3yC,KAAKuyC,iBAAiB/iB,cAAgB0a,EAC7BlqC,KAAKwoC,oBACdxoC,KAAKumC,aAAa/W,cAAgB0a,EACzBlqC,KAAKyoC,qBACdzoC,KAAKymC,cAAcjX,cAAgB0a,EAC1BlqC,KAAK4yC,oBACd5yC,KAAKwyC,WAAWhjB,cAAgB0a,GAGlClqC,KAAKmmC,2BAA0B,EAChC,CAEM2B,WAAWqC,GAChBnqC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAK6nC,WAAasC,EAClBnqC,KAAK6E,qBAAqByD,MAAM+nC,EAAwBjG,kBAAmBpqC,KAAK6nC,WAAWxoB,KAAKtD,QAAQ,KAAM,KAC9G/b,KAAK2oC,gBAAW/wB,GAChB5X,KAAK0oC,4BACL1oC,KAAK8lC,oBAAoB9lC,KAAKikC,qBAC9BjkC,KAAK4oC,uBACL5oC,KAAK6oC,uBACL7oC,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAK8oC,wBACN,CAEMuB,8BAA8BC,GACnCtqC,KAAK4kC,kBAAkBlpB,cAAc4uB,GAErCtqC,KAAKqyC,kBAAkB5G,eAAelB,WAAaD,EACnDtqC,KAAKuyC,iBAAiB9G,eAAelB,WAAaD,EAClDtqC,KAAKumC,aAAakF,eAAelB,WAAaD,EAC9CtqC,KAAKymC,cAAcgF,eAAelB,WAAaD,EAC/CtqC,KAAKwyC,WAAW/G,eAAelB,WAAaD,EAE5CtqC,KAAKkmC,kBAELlmC,KAAKmmC,2BACN,CAEMqE,aAAahxB,GAClB,MAAMixB,EAASjxB,EAAOkxB,OACtB,GAAID,EAAQ,CACV,MAAM5qC,EAAQ4qC,EAAOE,kBACjBnxB,EAAOlV,MAAM2L,KAAM7O,IAASA,KAASqpC,EAAOnmC,SAC9CzE,EAAMyE,MAAQ,CAACmmC,EAAOnmC,OAEzB,CACF,CAEOokC,4BACN1oC,KAAK4qC,wBAA0BC,mBAC3B7qC,KAAK0yC,0BAEE1yC,KAAK2yC,wBADd3yC,KAAK8qC,4BAA8B,KAG1B9qC,KAAKwoC,oBACdxoC,KAAK8qC,4BAA8BkJ,oBAC1Bh0C,KAAKyoC,sBAELzoC,KAAK4yC,qBADd5yC,KAAK8qC,4BAA8B,KAItC,CAEOhF,oBAAoB7B,GAC1BjkC,KAAKikC,oBAAsBA,EACvBjkC,KAAK0yC,yBACP1yC,KAAKqyC,kBAAkB5G,eAAiBjI,uBACtCS,EACAjkC,KAAKqyC,kBAAkB5G,gBAEhBzrC,KAAK2yC,wBACd3yC,KAAKuyC,iBAAiB9G,eAAiBjI,sBACrCS,EACAjkC,KAAKuyC,iBAAiB9G,gBAEfzrC,KAAKwoC,oBACdxoC,KAAKumC,aAAakF,eAAiBjI,uBACjCS,EACAjkC,KAAKumC,aAAakF,gBAEXzrC,KAAKyoC,qBACdzoC,KAAKymC,cAAcgF,eAAiBjI,uBAClCS,EACAjkC,KAAKymC,cAAcgF,gBAEZzrC,KAAK4yC,oBACd5yC,KAAKwyC,WAAW/G,eAAiBjI,gBAA6CS,EAAqBjkC,KAAKwyC,WAAW/G,iBAErHzrC,KAAKirC,wCACN,CAEOC,cAAcO,GACpB,IAAI3hC,EACA2hC,IACEA,EAAe6G,oBAAsB7G,EAAe6G,mBAAmBnjC,OAAS,EAClFrF,EAAe2hC,EAAe6G,mBAAmB,GAE7C7G,EAAexgB,eAAiBwgB,EAAexgB,cAAc9b,OAAS,IACxErF,EAAe2hC,EAAexgB,cAAc,KAK9CnhB,EACF9J,KAAK2kC,iBAAiBzL,QAAQpvB,GAActE,UAAWmlB,IACrD3qB,KAAKqmC,oBAAsB,IAAI8E,IAC/BnrC,KAAKqmC,oBAAoB96B,SAAW,IAAI6/B,IACxCprC,KAAKqmC,oBAAoB96B,SAASC,KAAOmf,EAAInf,KAC7CxL,KAAKqmC,oBAAoB96B,SAAS4gB,UAAYxB,EAAI0D,iBAAmB1D,EAAI0D,gBAAgBlf,OAAS,EAClGnP,KAAKqmC,oBAAoB96B,SAASjC,KAAOqhB,EAAIrhB,KAC7CtJ,KAAKqmC,oBAAoB96B,SAASM,KAAO8e,EAAI9e,KAEzC4/B,EAAe6G,oBAAsB7G,EAAe6G,mBAAmBnjC,OAAS,IAClFnP,KAAKqmC,oBAAoB+L,yBAA0B,GAGrDpyC,KAAK0mC,wCAAL,IAGF1mC,KAAKqmC,oBAAsB,KAE3BrmC,KAAK0mC,yCAER,CAEOkC,uBACF5oC,KAAK0yC,0BACH1yC,KAAKqyC,mBACPryC,KAAKkrC,cAAclrC,KAAKqyC,kBAAkB5G,gBAI1CzrC,KAAK2yC,yBACH3yC,KAAKuyC,kBACPvyC,KAAKkrC,cAAclrC,KAAKuyC,iBAAiB9G,gBAIzCzrC,KAAKwoC,qBACHxoC,KAAKumC,cACPvmC,KAAKkrC,cAAclrC,KAAKumC,aAAakF,gBAIrCzrC,KAAKyoC,sBACHzoC,KAAKymC,eACPzmC,KAAKkrC,cAAclrC,KAAKymC,cAAcgF,gBAItCzrC,KAAK4yC,mBACH5yC,KAAKwyC,YACPxyC,KAAKkrC,cAAclrC,KAAKwyC,WAAW/G,eAGxC,CAEOJ,qBAAqBC,GACvBtrC,KAAKqyC,oBACPryC,KAAKurC,kCACH8E,EAAwB6C,mCACxBlzC,KAAKqyC,kBACL/G,GAEFtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKqyC,kBAAkB5G,eACvBgH,4BACAnH,IAIAtrC,KAAKuyC,mBACPvyC,KAAKurC,kCACH8E,EAAwB8C,kCACxBnzC,KAAKuyC,iBACLjH,GAEFtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKuyC,iBAAiB9G,eACtB,IACAH,IAIAtrC,KAAKumC,eACPvmC,KAAKurC,kCAAkC8E,EAAwB/G,8BAA+BtpC,KAAKumC,aAAc+E,GACjHtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKumC,aAAakF,eAClBgH,4BACAnH,IAIAtrC,KAAKymC,gBACPzmC,KAAKurC,kCACH8E,EAAwB9G,+BACxBvpC,KAAKymC,cACL6E,GAEFtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKymC,cAAcgF,eACnBgH,4BACAnH,IAIAtrC,KAAKwyC,aACPxyC,KAAKurC,kCAAkC8E,EAAwB+C,4BAA6BpzC,KAAKwyC,WAAYlH,GAC7GtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKwyC,WAAW/G,eAChB,IACAH,GAGL,CAEOE,8CACNnpC,EACAopC,EACAC,EACAJ,IAEA,MAAMK,GAA8B3rC,KAAK6E,sBAAsBwK,KAAKhN,GAKlErC,KAAKknC,yBAJFyE,IAE6B3rC,KAAK4rC,0BAKlC5rC,KAAKooC,cAAcpB,kBAAoBsE,MACrCtrC,KAAKooC,aAGRpoC,KAAKooC,aAAapB,iBAAmBhnC,KAAKknC,yBAF1ClnC,KAAKooC,aAAeY,UAA0ChpC,KAAKknC,yBAA0BwE,GAK/FD,EAAezE,iBAAqCC,OAAOjnC,KAAKooC,aAAapB,mBAG/EhnC,KAAK4pC,sCAAwC5pC,KAAKooC,cAAcpB,mBAAqBhnC,KAAKknC,wBAC3F,CAEOqE,kCAAkClpC,EAAapD,EAA2BqsC,GAChF,MAAMhe,GAAOttB,KAAK6E,qBAAqBwK,KAAKhN,GAC5CpD,EAAM4sC,SAASP,EAAqBhe,IACpCttB,KAAKopC,0BAA4BnqC,EAAMoqC,0BACxC,CAEOyC,cAAc7sC,GAChBe,KAAK+rC,mBAAmBxc,aAAetwB,EAAMswB,aAC/CvvB,KAAK+rC,mBAAmBxc,WAAatwB,EAAMswB,YAGzCvvB,KAAK+rC,mBAAmBvc,gBAAkBvwB,EAAMuwB,gBAClDxvB,KAAK+rC,mBAAmBvc,cAAgBvwB,EAAMuwB,eAG5CxvB,KAAK+rC,mBAAmBC,eAAiB/sC,EAAM+sC,eACjDhsC,KAAK+rC,mBAAmBC,aAAe/sC,EAAM+sC,cAG3ChsC,KAAK+rC,mBAAmBE,wBAA0BhtC,EAAMgtC,wBAC1DjsC,KAAK+rC,mBAAmBE,sBAAwBhtC,EAAMgtC,sBAEzD,CAEOpD,uBACF7oC,KAAK0yC,yBACP1yC,KAAK8rC,cAAc9rC,KAAKqyC,mBACfryC,KAAK2yC,wBACd3yC,KAAK8rC,cAAc9rC,KAAKuyC,kBACfvyC,KAAKwoC,oBACdxoC,KAAK8rC,cAAc9rC,KAAKumC,cACfvmC,KAAKyoC,qBACdzoC,KAAK8rC,cAAc9rC,KAAKymC,eACfzmC,KAAK4yC,mBACd5yC,KAAK8rC,cAAc9rC,KAAKwyC,WAE3B,CAEOrK,wBAAwBC,GAC1BpoC,KAAK0yC,2BACFtK,IACHA,EAAeY,UACbhpC,KAAKknC,yBACLuL,8BAIAzyC,KAAKqyC,oBACPjK,EAAeY,2BACbhpC,KAAKqyC,kBAAkB5G,eACvBrD,EAAaliB,iBACblmB,KAAKknC,4BAKPlnC,KAAK2yC,0BACFvK,IACHA,EAAeY,UAA0ChpC,KAAKknC,yBAA0B,MAGtFlnC,KAAKuyC,mBACPnK,EAAeY,0BACbhpC,KAAKuyC,iBAAiB9G,eACtBrD,EAAaliB,iBACblmB,KAAKknC,4BAKPlnC,KAAKwoC,sBACFJ,IACHA,EAAeY,UACbhpC,KAAKknC,yBACLuL,8BAIAzyC,KAAKumC,eACP6B,EAAeY,2BACbhpC,KAAKumC,aAAakF,eAClBrD,EAAaliB,iBACblmB,KAAKknC,4BAKPlnC,KAAKyoC,uBACFL,IACHA,EAAeY,UACbhpC,KAAKknC,yBACLuL,8BAIAzyC,KAAKymC,gBACP2B,EAAeY,2BACbhpC,KAAKymC,cAAcgF,eACnBrD,EAAaliB,iBACblmB,KAAKknC,4BAKPlnC,KAAK4yC,oBACFxK,IACHA,EAAeY,UAA0ChpC,KAAKknC,yBAA0B,MAGtFlnC,KAAKwyC,aACPpK,EAAeY,oBACbhpC,KAAKwyC,WAAW/G,eAChBrD,EAAaliB,iBACblmB,KAAKknC,4BAKXlnC,KAAKooC,aAAeA,CACrB,CAEO8D,gBAAgB3B,GACtBvqC,KAAKyZ,WAAa,IAAI0yB,IAAgB5B,GACtCvqC,KAAK4kC,kBAAkBlpB,cAAc6uB,EACtC,CAEOzB,yBACF9oC,KAAK0yC,0BACH1yC,KAAKqyC,mBAAqBryC,KAAKqyC,kBAAkB5G,gBACnDzrC,KAAKksC,gBAAgBlsC,KAAKqyC,kBAAkB5G,eAAelB,YAI3DvqC,KAAK2yC,yBACH3yC,KAAKuyC,kBAAoBvyC,KAAKuyC,iBAAiB9G,gBACjDzrC,KAAKksC,gBAAgBlsC,KAAKuyC,iBAAiB9G,eAAelB,YAI1DvqC,KAAKwoC,qBACHxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAakF,gBACzCzrC,KAAKksC,gBAAgBlsC,KAAKumC,aAAakF,eAAelB,YAItDvqC,KAAKyoC,sBACHzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcgF,gBAC3CzrC,KAAKksC,gBAAgBlsC,KAAKymC,cAAcgF,eAAelB,YAIvDvqC,KAAK4yC,mBACH5yC,KAAKwyC,YAAcxyC,KAAKwyC,WAAW/G,gBACrCzrC,KAAKksC,gBAAgBlsC,KAAKwyC,WAAW/G,eAAelB,WAGzD,CAEOmI,yBACN,OAAO1yC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKoxC,sBAAsB7lB,KAC3E,CAEOonB,wBACN,OAAO3yC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKkxC,qBAAqB3lB,KAC1E,CAEOid,oBACN,OAAOxoC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKuxC,8BAA8BhmB,KACnF,CAEOkd,qBACN,OAAOzoC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKsxC,8BAA8B/lB,KACnF,CAEOqnB,kBACN,OAAO5yC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKgxC,eAAezlB,KACpE,CAEO0oB,uBAAuBplC,EAAkBw9B,GAC/CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKqyC,kBACLxjC,EACAwhC,EAAwB6D,sBAE1Bl0C,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKqyC,kBAAkB5G,gBAC7CzrC,KAAK6yC,wBAAwB7yC,KAAKqyC,kBAAkB5G,gBACpDzrC,KAAKikC,oBAAsBT,yBAAsDxjC,KAAKqyC,kBAAkB5G,gBACxGzrC,KAAKooC,aAAeY,2BAClBhpC,KAAKqyC,kBAAkB5G,eACvBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEO8H,sBAAsBtlC,EAAkBw9B,GAC9CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKuyC,iBACL1jC,EACAwhC,EAAwB+D,qBAE1Bp0C,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKuyC,iBAAiB9G,gBAC5CzrC,KAAK6yC,wBAAwB7yC,KAAKuyC,iBAAiB9G,gBACnDzrC,KAAKq0C,mBAAmBr0C,KAAKuyC,iBAAiB9G,gBAC9CzrC,KAAKikC,oBAAsBT,wBAAqDxjC,KAAKuyC,iBAAiB9G,gBACtGzrC,KAAKooC,aAAeY,0BAClBhpC,KAAKuyC,iBAAiB9G,eACtBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEOG,kBAAkB39B,EAAkBw9B,GAC1CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKumC,aACL13B,EACAwhC,EAAwB5D,iBAE1BzsC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKumC,aAAakF,gBACxCzrC,KAAK6yC,wBAAwB7yC,KAAKumC,aAAakF,gBAC/CzrC,KAAKikC,oBAAsBT,yBAAsDxjC,KAAKumC,aAAakF,gBACnGzrC,KAAKooC,aAAeY,2BAClBhpC,KAAKumC,aAAakF,eAClBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEOK,mBAAmB79B,EAAkBw9B,GAC3CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKymC,cACL53B,EACAwhC,EAAwB1D,kBAE1B3sC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKymC,cAAcgF,gBACzCzrC,KAAK6yC,wBAAwB7yC,KAAKymC,cAAcgF,gBAChDzrC,KAAKikC,oBAAsBT,yBAAsDxjC,KAAKymC,cAAcgF,gBACpGzrC,KAAKooC,aAAeY,2BAClBhpC,KAAKymC,cAAcgF,eACnBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEOiI,gBAAgBzlC,EAAkBw9B,GACxCA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKwyC,WACL3jC,EACAwhC,EAAwBkE,eAE1Bv0C,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKwyC,WAAW/G,gBACtCzrC,KAAKq0C,mBAAmBr0C,KAAKwyC,WAAW/G,gBACxCzrC,KAAK6yC,wBAAwB7yC,KAAKwyC,WAAW/G,gBAC7CzrC,KAAKikC,oBAAsBT,kBAA+CxjC,KAAKwyC,WAAW/G,gBAC1FzrC,KAAKooC,aAAeY,oBAClBhpC,KAAKwyC,WAAW/G,eAChBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEO1D,WAAW95B,GACjB,IAAIw9B,GAAmB,EACvBrsC,KAAKqrC,sBAAsBx8B,GAEvB7O,KAAK0yC,2BACPrG,EAAmBrsC,KAAKi0C,uBAAuBplC,EAAUw9B,GACzDrsC,KAAKopC,0BAA4BppC,KAAKqyC,kBAAkBhJ,2BACxDrpC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,0BACrGlnC,KAAKw0C,oDACLx0C,KAAKy0C,gDACLz0C,KAAK00C,iDACL10C,KAAK20C,+CAGH30C,KAAK2yC,0BACPtG,EAAmBrsC,KAAKm0C,sBAAsBtlC,EAAUw9B,GACxDrsC,KAAKopC,0BAA4BppC,KAAKuyC,iBAAiBlJ,2BACvDrpC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,0BACpGlnC,KAAK40C,oDACL50C,KAAK60C,+CACL70C,KAAK80C,gDACL90C,KAAK+0C,8CAGH/0C,KAAKwoC,sBACP6D,EAAmBrsC,KAAKwsC,kBAAkB39B,EAAUw9B,GACpDrsC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BAChGlnC,KAAKg1C,gDACLh1C,KAAKi1C,+CACLj1C,KAAK+sC,4CACL/sC,KAAKk1C,0CAGHl1C,KAAKyoC,uBACP4D,EAAmBrsC,KAAK0sC,mBAAmB79B,EAAUw9B,GACrDrsC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BACjGlnC,KAAKm1C,iDACLn1C,KAAKo1C,gDACLp1C,KAAKitC,4CACLjtC,KAAKq1C,2CAGHr1C,KAAK4yC,oBACPvG,EAAmBrsC,KAAKs0C,gBAAgBzlC,EAAUw9B,GAClDrsC,KAAKopC,0BAA4BppC,KAAKwyC,WAAWnJ,2BACjDrpC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,0BAC9FlnC,KAAKs1C,8CACLt1C,KAAKu1C,6CACLv1C,KAAKw1C,yCACLx1C,KAAKy1C,2CAGHpJ,GACFrsC,KAAKktC,eAAc,EAGtB,CAEOhH,kBACFlmC,KAAKqyC,oBACPryC,KAAKqyC,kBAAkB/iB,UAAY,GAGjCtvB,KAAKuyC,mBACPvyC,KAAKuyC,iBAAiBjjB,UAAY,GAGhCtvB,KAAKumC,eACPvmC,KAAKumC,aAAajX,UAAY,GAG5BtvB,KAAKymC,gBACPzmC,KAAKymC,cAAcnX,UAAY,GAG7BtvB,KAAKwyC,aACPxyC,KAAKwyC,WAAWljB,UAAY,EAE/B,CAEO4Z,kBAAkB5b,EAAgBruB,EAA2BkuC,GACnE7f,EAAK9rB,KAAKvC,EAAMuwB,cAAevwB,EAAMswB,YACrCvvB,KAAK6E,qBAAqByD,MAAM6kC,EAAoB7f,GAGpDruB,EAAMmuC,oCACNC,iBAAgCrtC,KAAK+rC,mBAAoB9sC,EAC1D,CAEOknC,0BAA0B7N,GAAa,GAC7Ct4B,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,mBACrFryC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,kBACpFvyC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,cAChFvmC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,eACjFzmC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,YAE1ExyC,KAAK0yC,0BACP1yC,KAAKopC,0BAA4BppC,KAAKqyC,kBAAkBhJ,2BACxDrpC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,2BAC5FlnC,KAAK2yC,yBACd3yC,KAAKopC,0BAA4BppC,KAAKuyC,iBAAiBlJ,2BACvDrpC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,2BAC3FlnC,KAAKwoC,qBACdxoC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,sBACdzoC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BACxFlnC,KAAK4yC,oBACd5yC,KAAKopC,0BAA4BppC,KAAKwyC,WAAWnJ,2BACjDrpC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,2BAGhGlnC,KAAKktC,cAAc5U,EACpB,CAEO4U,cAAc5U,GAAa,GAC7Bt4B,KAAK0yC,yBACP1yC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKqyC,oBAC3Cha,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAK2yC,wBACd3yC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKuyC,mBAC3Cla,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAKwoC,oBACdxoC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKumC,eAC3ClO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAKyoC,qBACdzoC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKymC,gBAC3CpO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAK4yC,mBACd5yC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKwyC,aAC3Cna,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,IAG9B,CAEOiU,iBAAiBd,GACvB,IAAI3hC,EAAe,KACf2hC,EAAe6G,oBAAsB7G,EAAe6G,mBAAmBnjC,OAAS,EAClFrF,EAAe2hC,EAAe6G,mBAAmB,GAE7C7G,EAAexgB,eAAiBwgB,EAAexgB,cAAc9b,OAAS,IACxErF,EAAe2hC,EAAexgB,cAAc,IAGhDjrB,KAAKsmC,mBAAqBx8B,EAE1B9J,KAAKswC,qBAAqBxoB,0BAA0Bhe,EACrD,CAEO+oC,wBAAwBpH,GAC9B,IAAIiK,EAAgC,IAAItwC,MAExC,MAAMssC,EAAuB,IAAItsC,MACjCqmC,EAAe9Q,gBAAgB/2B,QAAS+xC,IACtC,MAAMC,EAAS51C,KAAK2xC,4BAA4B5wB,KAAMriB,GAAMozC,WAA2BpzC,EAAE6sB,SAAWoqB,GAChGC,GACFlE,EAAqBlwC,KAAKo0C,EAA1B,GAGJ,MAAMC,GAA+B,IAAIzwC,MACzCqmC,EAAeqI,wBAAwBlwC,QAAS+xC,IAC9C,MAAMC,EAAS51C,KAAK2xC,4BAA4B5wB,KAAMriB,GAAMozC,WAA2BpzC,EAAE6sB,SAAWoqB,GAChGC,GACFC,GAA6Br0C,KAAKo0C,EAAlC,GAGJ,MAAMlC,GAA8B1zC,KAAK2xC,4BAA4B5wB,KAAMriB,GAAgB,MAAVA,EAAE2D,KAC7EsxC,EAAkC3zC,KAAK2xC,4BAA4B5wB,KAAMriB,GAAgB,MAAVA,EAAE2D,KAEnFopC,EAAeoI,uBACbpI,EAAe9Q,gBAAkB8Q,EAAeqI,yBAClD4B,EAAgChE,EAChCgE,EAA8Bl0C,KAAKkyC,IACnCgC,EAA8Bl0C,KAAKmyC,KAGhClI,EAAe9Q,iBAAmB8Q,EAAeqI,wBACpD4B,EAA8Bl0C,KAAKkyC,IAGjCjI,EAAe9Q,iBAAmB8Q,EAAeqI,yBACnD4B,EAAgChE,EAChCgE,EAA8Bl0C,KAAKkyC,MAGhCjI,EAAe9Q,gBAAkB8Q,EAAeqI,yBACnD4B,EAA8Bl0C,KAAKmyC,GACnC+B,EAA8Bl0C,KAAKkyC,OAGjCjI,EAAe9Q,gBAAkB8Q,EAAeqI,yBAClD4B,EAAgChE,EAChCgE,EAA8Bl0C,KAAKmyC,KAEhClI,EAAe9Q,iBAAmB8Q,EAAeqI,yBACpD4B,EAAgC,IAAItwC,OAElCqmC,EAAe9Q,iBAAmB8Q,EAAeqI,yBACnD4B,EAAgChE,IAE7BjG,EAAe9Q,gBAAkB8Q,EAAeqI,wBACnD4B,EAA8Bl0C,KAAKmyC,IAIvC3zC,KAAK81C,6BAA+BJ,CACrC,CAEOrB,mBAAmB5I,GACzBzrC,KAAK+1C,sBAAwBjF,wBAAyCrF,EAAehhB,OACtF,CAEOmqB,oDACN50C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKqyC,kBACL,KACAhC,EAAwB6D,sBAG1B1Q,4BAAyDxjC,KAAKqyC,kBAAkB5G,eAAgBzrC,KAAKuyC,iBAAiB9G,gBAEtHzrC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqBtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBAChGtyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgBjrB,KAAKuyC,iBAAiB9G,eAAexgB,cAE3FjrB,KAAKqyC,kBAAkB5G,eAAe9Q,eAAiB36B,KAAKuyC,iBAAiB9G,eAAe9Q,eAC5F36B,KAAKqyC,kBAAkB5G,eAAeqI,uBAAyB9zC,KAAKuyC,iBAAiB9G,eAAeqI,uBACpG9zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAAwB7zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAEnG7zC,KAAKqyC,kBAAkB5G,eAAevT,iBAAmBl4B,KAAKuyC,iBAAiB9G,eAAevT,iBAC9Fl4B,KAAKqyC,kBAAkB5G,eAAezE,iBAAmBhnC,KAAKuyC,iBAAiB9G,eAAezE,iBAEzFhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAA8E,IAA1DhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAIjGhnC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmB,KACzDxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiB,OAJvDztC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKuyC,iBAAiB9G,eAAe+B,iBAC9FxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKuyC,iBAAiB9G,eAAegC,gBAM9FztC,KAAKqyC,kBAAkB5G,eAAeiC,gBAAkB,KACxD1tC,KAAKqyC,kBAAkB5G,eAAekC,cAAgB,KAGtD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,kBACtF,CAEO2C,gDAENh1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKqyC,kBACL,KACAhC,EAAwB6D,sBAG1B1Q,4BAAyDxjC,KAAKqyC,kBAAkB5G,eAAgBzrC,KAAKumC,aAAakF,gBAElHzrC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqBtyC,KAAKumC,aAAakF,eAAe6G,mBAC5FtyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgBjrB,KAAKumC,aAAakF,eAAexgB,cAEvFjrB,KAAKqyC,kBAAkB5G,eAAe9Q,eAAiB36B,KAAKumC,aAAakF,eAAe9Q,eACxF36B,KAAKqyC,kBAAkB5G,eAAeqI,uBAAyB9zC,KAAKumC,aAAakF,eAAeqI,uBAChG9zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAAwB7zC,KAAKumC,aAAakF,eAAeoI,sBAE/F7zC,KAAKqyC,kBAAkB5G,eAAevT,iBAAmBl4B,KAAKumC,aAAakF,eAAevT,iBAC1Fl4B,KAAKqyC,kBAAkB5G,eAAezE,iBAAmBhnC,KAAKumC,aAAakF,eAAezE,iBAErFhnC,KAAKumC,aAAakF,eAAezE,kBAA0E,IAAtDhnC,KAAKumC,aAAakF,eAAezE,kBASzFhnC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmB,KACzDxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiB,MATnDztC,KAAKumC,aAAakF,eAAe+B,kBACnCxtC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAe+B,iBAC1FxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAegC,iBAExFztC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAeiC,gBAC1F1tC,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAekC,eAO5F3tC,KAAKqyC,kBAAkB5G,eAAeiC,gBAAkB,KACxD1tC,KAAKqyC,kBAAkB5G,eAAekC,cAAgB,KAGtD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,kBACtF,CAEO8C,iDAENn1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKqyC,kBACL,KACAhC,EAAwB6D,sBAG1B1Q,4BAAyDxjC,KAAKqyC,kBAAkB5G,eAAgBzrC,KAAKymC,cAAcgF,gBAEnHzrC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqBtyC,KAAKymC,cAAcgF,eAAe6G,mBAC7FtyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgBjrB,KAAKymC,cAAcgF,eAAexgB,cAExFjrB,KAAKqyC,kBAAkB5G,eAAe9Q,eAAiB36B,KAAKymC,cAAcgF,eAAe9Q,eACzF36B,KAAKqyC,kBAAkB5G,eAAeqI,uBAAyB9zC,KAAKymC,cAAcgF,eAAeqI,uBACjG9zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAAwB7zC,KAAKymC,cAAcgF,eAAeoI,sBAEhG7zC,KAAKqyC,kBAAkB5G,eAAevT,iBAAmBl4B,KAAKymC,cAAcgF,eAAevT,iBAC3Fl4B,KAAKqyC,kBAAkB5G,eAAezE,iBAAmBhnC,KAAKymC,cAAcgF,eAAezE,iBAEtFhnC,KAAKymC,cAAcgF,eAAezE,kBAA2E,IAAvDhnC,KAAKymC,cAAcgF,eAAezE,kBAI3FhnC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmB,KACzDxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiB,OAJvDztC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKymC,cAAcgF,eAAe+B,iBAC3FxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKymC,cAAcgF,eAAegC,gBAM3FztC,KAAKqyC,kBAAkB5G,eAAeiC,gBAAkB,KACxD1tC,KAAKqyC,kBAAkB5G,eAAekC,cAAgB,KAGtD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,kBACtF,CAEOiD,8CAENt1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKqyC,kBACL,KACAhC,EAAwB6D,sBAG1B1Q,4BAAyDxjC,KAAKqyC,kBAAkB5G,eAAgBzrC,KAAKwyC,WAAW/G,gBAEhHzrC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqBtyC,KAAKwyC,WAAW/G,eAAe6G,mBAC1FtyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgBjrB,KAAKwyC,WAAW/G,eAAexgB,cAErFjrB,KAAKqyC,kBAAkB5G,eAAe9Q,eAAiB36B,KAAKwyC,WAAW/G,eAAe9Q,eACtF36B,KAAKqyC,kBAAkB5G,eAAeqI,uBAAyB9zC,KAAKwyC,WAAW/G,eAAeqI,uBAC9F9zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAAwB7zC,KAAKwyC,WAAW/G,eAAeoI,sBAE7F7zC,KAAKqyC,kBAAkB5G,eAAevT,iBAAmBl4B,KAAKwyC,WAAW/G,eAAevT,iBACxFl4B,KAAKqyC,kBAAkB5G,eAAezE,iBAAmBhnC,KAAKwyC,WAAW/G,eAAezE,iBAEnFhnC,KAAKwyC,WAAW/G,eAAezE,kBAAwE,IAApDhnC,KAAKwyC,WAAW/G,eAAezE,kBAIrFhnC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmB,KACzDxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiB,OAJvDztC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKwyC,WAAW/G,eAAeuK,cACxFh2C,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKwyC,WAAW/G,eAAewK,aAMxFj2C,KAAKqyC,kBAAkB5G,eAAeiC,gBAAkB,KACxD1tC,KAAKqyC,kBAAkB5G,eAAekC,cAAgB,KAGtD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,kBACtF,CAEOmC,oDACNx0C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKuyC,iBACL,KACAlC,EAAwB+D,qBAG1B5Q,4BAAyDxjC,KAAKuyC,iBAAiB9G,eAAgBzrC,KAAKqyC,kBAAkB5G,gBAEtHzrC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqBtyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAChGtyC,KAAKuyC,iBAAiB9G,eAAexgB,cAAgBjrB,KAAKqyC,kBAAkB5G,eAAexgB,cAE3FjrB,KAAKuyC,iBAAiB9G,eAAe9Q,eAAiB36B,KAAKqyC,kBAAkB5G,eAAe9Q,eAC5F36B,KAAKuyC,iBAAiB9G,eAAeqI,uBAAyB9zC,KAAKqyC,kBAAkB5G,eAAeqI,uBACpG9zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAAwB7zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAEnG7zC,KAAKuyC,iBAAiB9G,eAAevT,iBAAmBl4B,KAAKqyC,kBAAkB5G,eAAevT,iBAC9Fl4B,KAAKuyC,iBAAiB9G,eAAezE,iBAAmBhnC,KAAKqyC,kBAAkB5G,eAAezE,iBAEzFhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAA+E,IAA3DhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAInGhnC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmB,KACxDxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiB,OAJtDztC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKqyC,kBAAkB5G,eAAe+B,iBAC9FxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKqyC,kBAAkB5G,eAAegC,gBAO9FztC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,iBACrF,CAEO0C,+CACNj1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKuyC,iBACL,KACAlC,EAAwB+D,qBAG1B5Q,4BAAyDxjC,KAAKuyC,iBAAiB9G,eAAgBzrC,KAAKumC,aAAakF,gBAEjHzrC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqBtyC,KAAKumC,aAAakF,eAAe6G,mBAC3FtyC,KAAKuyC,iBAAiB9G,eAAexgB,cAAgBjrB,KAAKumC,aAAakF,eAAexgB,cAEtFjrB,KAAKuyC,iBAAiB9G,eAAe9Q,eAAiB36B,KAAKumC,aAAakF,eAAe9Q,eACvF36B,KAAKuyC,iBAAiB9G,eAAeqI,uBAAyB9zC,KAAKumC,aAAakF,eAAeqI,uBAC/F9zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAAwB7zC,KAAKumC,aAAakF,eAAeoI,sBAE9F7zC,KAAKuyC,iBAAiB9G,eAAevT,iBAAmBl4B,KAAKumC,aAAakF,eAAevT,iBACzFl4B,KAAKuyC,iBAAiB9G,eAAezE,iBAAmBhnC,KAAKumC,aAAakF,eAAezE,iBAEpFhnC,KAAKumC,aAAakF,eAAezE,kBAA0E,IAAtDhnC,KAAKumC,aAAakF,eAAezE,kBASzFhnC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmB,KACxDxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiB,MATlDztC,KAAKumC,aAAakF,eAAe+B,kBACnCxtC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAe+B,iBACzFxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAegC,iBAEvFztC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAeiC,gBACzF1tC,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAekC,eAQ3F3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,iBACrF,CAEO6C,gDACNp1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKuyC,iBACL,KACAlC,EAAwB+D,qBAG1B5Q,4BAAyDxjC,KAAKuyC,iBAAiB9G,eAAgBzrC,KAAKymC,cAAcgF,gBAElHzrC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqBtyC,KAAKymC,cAAcgF,eAAe6G,mBAC5FtyC,KAAKuyC,iBAAiB9G,eAAexgB,cAAgBjrB,KAAKymC,cAAcgF,eAAexgB,cAEvFjrB,KAAKuyC,iBAAiB9G,eAAe9Q,eAAiB36B,KAAKymC,cAAcgF,eAAe9Q,eACxF36B,KAAKuyC,iBAAiB9G,eAAeqI,uBAAyB9zC,KAAKymC,cAAcgF,eAAeqI,uBAChG9zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAAwB7zC,KAAKymC,cAAcgF,eAAeoI,sBAE/F7zC,KAAKuyC,iBAAiB9G,eAAevT,iBAAmBl4B,KAAKymC,cAAcgF,eAAevT,iBAC1Fl4B,KAAKuyC,iBAAiB9G,eAAezE,iBAAmBhnC,KAAKymC,cAAcgF,eAAezE,iBAErFhnC,KAAKymC,cAAcgF,eAAezE,kBAA2E,IAAvDhnC,KAAKymC,cAAcgF,eAAezE,kBAI3FhnC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmB,KACxDxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiB,OAJtDztC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKymC,cAAcgF,eAAe+B,iBAC1FxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKymC,cAAcgF,eAAegC,gBAO1FztC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,iBACrF,CAEOgD,6CACNv1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKuyC,iBACL,KACAlC,EAAwB+D,qBAG1B5Q,4BAAyDxjC,KAAKuyC,iBAAiB9G,eAAgBzrC,KAAKwyC,WAAW/G,gBAE/GzrC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqBtyC,KAAKwyC,WAAW/G,eAAe6G,mBACzFtyC,KAAKuyC,iBAAiB9G,eAAexgB,cAAgBjrB,KAAKwyC,WAAW/G,eAAexgB,cACpFjrB,KAAKuyC,iBAAiB9G,eAAehhB,OAASzqB,KAAKwyC,WAAW/G,eAAehhB,OAE7EzqB,KAAKuyC,iBAAiB9G,eAAe9Q,eAAiB36B,KAAKwyC,WAAW/G,eAAe9Q,eACrF36B,KAAKuyC,iBAAiB9G,eAAeqI,uBAAyB9zC,KAAKwyC,WAAW/G,eAAeqI,uBAC7F9zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAAwB7zC,KAAKwyC,WAAW/G,eAAeoI,sBAE5F7zC,KAAKuyC,iBAAiB9G,eAAevT,iBAAmBl4B,KAAKwyC,WAAW/G,eAAevT,iBACvFl4B,KAAKuyC,iBAAiB9G,eAAezE,iBAAmBhnC,KAAKwyC,WAAW/G,eAAezE,iBAElFhnC,KAAKwyC,WAAW/G,eAAezE,kBAAwE,IAApDhnC,KAAKwyC,WAAW/G,eAAezE,kBAIrFhnC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmB,KACxDxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiB,OAJtDztC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKwyC,WAAW/G,eAAeuK,cACvFh2C,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKwyC,WAAW/G,eAAewK,aAOvFj2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,iBACrF,CAEOkC,gDAENz0C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM8J,EAAwB5D,iBAElHjJ,4BAAyDxjC,KAAKumC,aAAakF,eAAgBzrC,KAAKqyC,kBAAkB5G,gBAElHzrC,KAAKumC,aAAakF,eAAe6G,mBAAqBtyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAC5FtyC,KAAKumC,aAAakF,eAAexgB,cAAgBjrB,KAAKqyC,kBAAkB5G,eAAexgB,cAEvFjrB,KAAKumC,aAAakF,eAAe9Q,eAAiB36B,KAAKqyC,kBAAkB5G,eAAe9Q,eACxF36B,KAAKumC,aAAakF,eAAeqI,uBAAyB9zC,KAAKqyC,kBAAkB5G,eAAeqI,uBAChG9zC,KAAKumC,aAAakF,eAAeoI,sBAAwB7zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAE/F7zC,KAAKumC,aAAakF,eAAevT,iBAAmBl4B,KAAKqyC,kBAAkB5G,eAAevT,iBAC1Fl4B,KAAKumC,aAAakF,eAAezE,iBAAmBhnC,KAAKqyC,kBAAkB5G,eAAezE,iBAErFhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAA+E,IAA3DhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAanGhnC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAf7C3tC,KAAKumC,aAAakF,eAAeiC,iBACnC1tC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB1tC,KAAKqyC,kBAAkB5G,eAAe+B,iBACzFxtC,KAAKumC,aAAakF,eAAekC,cAAgB3tC,KAAKqyC,kBAAkB5G,eAAegC,iBAEvFztC,KAAKumC,aAAakF,eAAe+B,iBAAmBxtC,KAAKqyC,kBAAkB5G,eAAe+B,iBAC1FxtC,KAAKumC,aAAakF,eAAegC,eAAiBztC,KAAKqyC,kBAAkB5G,eAAegC,eACxFztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAUrD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,aACjF,CAEOsO,+CAEN70C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM8J,EAAwB5D,iBAElHjJ,4BAAyDxjC,KAAKumC,aAAakF,eAAgBzrC,KAAKuyC,iBAAiB9G,gBAEjHzrC,KAAKumC,aAAakF,eAAe6G,mBAAqBtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBAC3FtyC,KAAKumC,aAAakF,eAAexgB,cAAgBjrB,KAAKuyC,iBAAiB9G,eAAexgB,cAEtFjrB,KAAKumC,aAAakF,eAAe9Q,eAAiB36B,KAAKuyC,iBAAiB9G,eAAe9Q,eACvF36B,KAAKumC,aAAakF,eAAeqI,uBAAyB9zC,KAAKuyC,iBAAiB9G,eAAeqI,uBAC/F9zC,KAAKumC,aAAakF,eAAeoI,sBAAwB7zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAE9F7zC,KAAKumC,aAAakF,eAAevT,iBAAmBl4B,KAAKuyC,iBAAiB9G,eAAevT,iBACzFl4B,KAAKumC,aAAakF,eAAezE,iBAAmBhnC,KAAKuyC,iBAAiB9G,eAAezE,iBAEpFhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAA8E,IAA1DhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAajGhnC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAf7C3tC,KAAKumC,aAAakF,eAAeiC,iBACnC1tC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB1tC,KAAKuyC,iBAAiB9G,eAAe+B,iBACxFxtC,KAAKumC,aAAakF,eAAekC,cAAgB3tC,KAAKuyC,iBAAiB9G,eAAegC,iBAEtFztC,KAAKumC,aAAakF,eAAe+B,iBAAmBxtC,KAAKuyC,iBAAiB9G,eAAe+B,iBACzFxtC,KAAKumC,aAAakF,eAAegC,eAAiBztC,KAAKuyC,iBAAiB9G,eAAegC,eACvFztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAUrD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,aACjF,CAEO0G,4CAENjtC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM8J,EAAwB5D,iBAElHjJ,4BAAyDxjC,KAAKumC,aAAakF,eAAgBzrC,KAAKymC,cAAcgF,gBAE9GzrC,KAAKumC,aAAakF,eAAe6G,mBAAqBtyC,KAAKymC,cAAcgF,eAAe6G,mBACxFtyC,KAAKumC,aAAakF,eAAexgB,cAAgBjrB,KAAKymC,cAAcgF,eAAexgB,cAEnFjrB,KAAKumC,aAAakF,eAAe9Q,eAAiB36B,KAAKymC,cAAcgF,eAAe9Q,eACpF36B,KAAKumC,aAAakF,eAAeqI,uBAAyB9zC,KAAKymC,cAAcgF,eAAeqI,uBAC5F9zC,KAAKumC,aAAakF,eAAeoI,sBAAwB7zC,KAAKymC,cAAcgF,eAAeoI,sBAE3F7zC,KAAKumC,aAAakF,eAAevT,iBAAmBl4B,KAAKymC,cAAcgF,eAAevT,iBACtFl4B,KAAKumC,aAAakF,eAAezE,iBAAmBhnC,KAAKymC,cAAcgF,eAAezE,iBAEjFhnC,KAAKymC,cAAcgF,eAAezE,kBAA2E,IAAvDhnC,KAAKymC,cAAcgF,eAAezE,kBAa3FhnC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAf7C3tC,KAAKumC,aAAakF,eAAeiC,iBACnC1tC,KAAKumC,aAAakF,eAAeiC,gBAAkB1tC,KAAKymC,cAAcgF,eAAe+B,iBACrFxtC,KAAKumC,aAAakF,eAAekC,cAAgB3tC,KAAKymC,cAAcgF,eAAegC,eACnFztC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,OAElDztC,KAAKumC,aAAakF,eAAe+B,iBAAmBxtC,KAAKymC,cAAcgF,eAAe+B,iBACtFxtC,KAAKumC,aAAakF,eAAegC,eAAiBztC,KAAKymC,cAAcgF,eAAegC,eACpFztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAUrD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,aACjF,CAEOiP,yCAENx1C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM8J,EAAwB5D,iBAElHjJ,4BAAyDxjC,KAAKumC,aAAakF,eAAgBzrC,KAAKwyC,WAAW/G,gBAE3GzrC,KAAKumC,aAAakF,eAAe6G,mBAAqBtyC,KAAKwyC,WAAW/G,eAAe6G,mBACrFtyC,KAAKumC,aAAakF,eAAexgB,cAAgBjrB,KAAKwyC,WAAW/G,eAAexgB,cAEhFjrB,KAAKumC,aAAakF,eAAe9Q,eAAiB36B,KAAKwyC,WAAW/G,eAAe9Q,eACjF36B,KAAKumC,aAAakF,eAAeqI,uBAAyB9zC,KAAKwyC,WAAW/G,eAAeqI,uBACzF9zC,KAAKumC,aAAakF,eAAeoI,sBAAwB7zC,KAAKwyC,WAAW/G,eAAeoI,sBAExF7zC,KAAKumC,aAAakF,eAAevT,iBAAmBl4B,KAAKwyC,WAAW/G,eAAevT,iBACnFl4B,KAAKumC,aAAakF,eAAezE,iBAAmBhnC,KAAKwyC,WAAW/G,eAAezE,iBAE9EhnC,KAAKwyC,WAAW/G,eAAezE,kBAAwE,IAApDhnC,KAAKwyC,WAAW/G,eAAezE,kBAarFhnC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAf7C3tC,KAAKumC,aAAakF,eAAeiC,iBACnC1tC,KAAKumC,aAAakF,eAAeiC,gBAAkB1tC,KAAKwyC,WAAW/G,eAAeuK,cAClFh2C,KAAKumC,aAAakF,eAAekC,cAAgB3tC,KAAKwyC,WAAW/G,eAAewK,YAChFj2C,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,OAElDztC,KAAKumC,aAAakF,eAAe+B,iBAAmBxtC,KAAKwyC,WAAW/G,eAAeuK,cACnFh2C,KAAKumC,aAAakF,eAAegC,eAAiBztC,KAAKwyC,WAAW/G,eAAewK,YACjFj2C,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAUrD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,aACjF,CAEOmO,iDAEN10C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAM4J,EAAwB1D,kBAEnHnJ,4BAAyDxjC,KAAKymC,cAAcgF,eAAgBzrC,KAAKqyC,kBAAkB5G,gBAEnHzrC,KAAKymC,cAAcgF,eAAe6G,mBAAqBtyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAC7FtyC,KAAKymC,cAAcgF,eAAexgB,cAAgBjrB,KAAKqyC,kBAAkB5G,eAAexgB,cAExFjrB,KAAKymC,cAAcgF,eAAe9Q,eAAiB36B,KAAKqyC,kBAAkB5G,eAAe9Q,eACzF36B,KAAKymC,cAAcgF,eAAeqI,uBAAyB9zC,KAAKqyC,kBAAkB5G,eAAeqI,uBACjG9zC,KAAKymC,cAAcgF,eAAeoI,sBAAwB7zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAEhG7zC,KAAKymC,cAAcgF,eAAevT,iBAAmBl4B,KAAKqyC,kBAAkB5G,eAAevT,iBAC3Fl4B,KAAKymC,cAAcgF,eAAezE,iBAAmBhnC,KAAKqyC,kBAAkB5G,eAAezE,iBAEtFhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAA+E,IAA3DhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAInGhnC,KAAKymC,cAAcgF,eAAe+B,iBAAmB,KACrDxtC,KAAKymC,cAAcgF,eAAegC,eAAiB,OAJnDztC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKqyC,kBAAkB5G,eAAe+B,iBAC3FxtC,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKqyC,kBAAkB5G,eAAegC,gBAM3FztC,KAAKymC,cAAcgF,eAAeiC,gBAAkB,KACpD1tC,KAAKymC,cAAcgF,eAAekC,cAAgB,KAGlD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,cAClF,CAEOqO,gDACN90C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAM4J,EAAwB1D,kBAEnHnJ,4BAAyDxjC,KAAKymC,cAAcgF,eAAgBzrC,KAAKuyC,iBAAiB9G,gBAElHzrC,KAAKymC,cAAcgF,eAAe6G,mBAAqBtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBAC5FtyC,KAAKymC,cAAcgF,eAAexgB,cAAgBjrB,KAAKuyC,iBAAiB9G,eAAexgB,cAEvFjrB,KAAKymC,cAAcgF,eAAe9Q,eAAiB36B,KAAKuyC,iBAAiB9G,eAAe9Q,eACxF36B,KAAKymC,cAAcgF,eAAeqI,uBAAyB9zC,KAAKuyC,iBAAiB9G,eAAeqI,uBAChG9zC,KAAKymC,cAAcgF,eAAeoI,sBAAwB7zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAE/F7zC,KAAKymC,cAAcgF,eAAevT,iBAAmBl4B,KAAKuyC,iBAAiB9G,eAAevT,iBAC1Fl4B,KAAKymC,cAAcgF,eAAezE,iBAAmBhnC,KAAKuyC,iBAAiB9G,eAAezE,iBAErFhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAA8E,IAA1DhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAIjGhnC,KAAKymC,cAAcgF,eAAe+B,iBAAmB,KACrDxtC,KAAKymC,cAAcgF,eAAegC,eAAiB,OAJnDztC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKuyC,iBAAiB9G,eAAe+B,iBAC1FxtC,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKuyC,iBAAiB9G,eAAegC,gBAM1FztC,KAAKymC,cAAcgF,eAAeiC,gBAAkB,KACpD1tC,KAAKymC,cAAcgF,eAAekC,cAAgB,KAGlD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,cAClF,CAEOsG,4CAEN/sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAM4J,EAAwB1D,kBAEnHnJ,4BAAyDxjC,KAAKymC,cAAcgF,eAAgBzrC,KAAKumC,aAAakF,gBAE9GzrC,KAAKymC,cAAcgF,eAAe6G,mBAAqBtyC,KAAKumC,aAAakF,eAAe6G,mBACxFtyC,KAAKymC,cAAcgF,eAAexgB,cAAgBjrB,KAAKumC,aAAakF,eAAexgB,cAEnFjrB,KAAKymC,cAAcgF,eAAe9Q,eAAiB36B,KAAKumC,aAAakF,eAAe9Q,eACpF36B,KAAKymC,cAAcgF,eAAeqI,uBAAyB9zC,KAAKumC,aAAakF,eAAeqI,uBAC5F9zC,KAAKymC,cAAcgF,eAAeoI,sBAAwB7zC,KAAKumC,aAAakF,eAAeoI,sBAE3F7zC,KAAKymC,cAAcgF,eAAevT,iBAAmBl4B,KAAKumC,aAAakF,eAAevT,iBACtFl4B,KAAKymC,cAAcgF,eAAezE,iBAAmBhnC,KAAKumC,aAAakF,eAAezE,iBAEjFhnC,KAAKumC,aAAakF,eAAezE,kBAA0E,IAAtDhnC,KAAKumC,aAAakF,eAAezE,kBASzFhnC,KAAKymC,cAAcgF,eAAe+B,iBAAmB,KACrDxtC,KAAKymC,cAAcgF,eAAegC,eAAiB,MAT/CztC,KAAKumC,aAAakF,eAAe+B,kBACnCxtC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAe+B,iBACtFxtC,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAegC,iBAEpFztC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAeiC,gBACtF1tC,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAekC,eAOxF3tC,KAAKymC,cAAcgF,eAAeiC,gBAAkB,KACpD1tC,KAAKymC,cAAcgF,eAAekC,cAAgB,KAGlD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,cAClF,CAEOgP,0CAENz1C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAM4J,EAAwB1D,kBAEnHnJ,4BAAyDxjC,KAAKymC,cAAcgF,eAAgBzrC,KAAKwyC,WAAW/G,gBAE5GzrC,KAAKymC,cAAcgF,eAAe6G,mBAAqBtyC,KAAKwyC,WAAW/G,eAAe6G,mBACtFtyC,KAAKymC,cAAcgF,eAAexgB,cAAgBjrB,KAAKwyC,WAAW/G,eAAexgB,cAEjFjrB,KAAKymC,cAAcgF,eAAe9Q,eAAiB36B,KAAKwyC,WAAW/G,eAAe9Q,eAClF36B,KAAKymC,cAAcgF,eAAeqI,uBAAyB9zC,KAAKwyC,WAAW/G,eAAeqI,uBAC1F9zC,KAAKymC,cAAcgF,eAAeoI,sBAAwB7zC,KAAKwyC,WAAW/G,eAAeoI,sBAEzF7zC,KAAKymC,cAAcgF,eAAevT,iBAAmBl4B,KAAKwyC,WAAW/G,eAAevT,iBACpFl4B,KAAKymC,cAAcgF,eAAezE,iBAAmBhnC,KAAKwyC,WAAW/G,eAAezE,iBAE/EhnC,KAAKwyC,WAAW/G,eAAezE,kBAAwE,IAApDhnC,KAAKwyC,WAAW/G,eAAezE,kBAIrFhnC,KAAKymC,cAAcgF,eAAe+B,iBAAmB,KACrDxtC,KAAKymC,cAAcgF,eAAegC,eAAiB,OAJnDztC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKwyC,WAAW/G,eAAeuK,cACpFh2C,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKwyC,WAAW/G,eAAewK,aAMpFj2C,KAAKymC,cAAcgF,eAAeiC,gBAAkB,KACpD1tC,KAAKymC,cAAcgF,eAAekC,cAAgB,KAGlD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,cAClF,CAEOkO,8CACN30C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwyC,WAAY,KAAMnC,EAAwBkE,eAEhH/Q,4BAAyDxjC,KAAKwyC,WAAW/G,eAAgBzrC,KAAKqyC,kBAAkB5G,gBAEhHzrC,KAAKwyC,WAAW/G,eAAe6G,mBAAqBtyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAC1FtyC,KAAKwyC,WAAW/G,eAAexgB,cAAgBjrB,KAAKqyC,kBAAkB5G,eAAexgB,cAErFjrB,KAAKwyC,WAAW/G,eAAe9Q,eAAiB36B,KAAKqyC,kBAAkB5G,eAAe9Q,eACtF36B,KAAKwyC,WAAW/G,eAAeqI,uBAAyB9zC,KAAKqyC,kBAAkB5G,eAAeqI,uBAC9F9zC,KAAKwyC,WAAW/G,eAAeoI,sBAAwB7zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAE7F7zC,KAAKwyC,WAAW/G,eAAevT,iBAAmBl4B,KAAKqyC,kBAAkB5G,eAAevT,iBACxFl4B,KAAKwyC,WAAW/G,eAAezE,iBAAmBhnC,KAAKqyC,kBAAkB5G,eAAezE,iBAEnFhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAA+E,IAA3DhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAInGhnC,KAAKwyC,WAAW/G,eAAeuK,cAAgB,KAC/Ch2C,KAAKwyC,WAAW/G,eAAewK,YAAc,OAJ7Cj2C,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKqyC,kBAAkB5G,eAAe+B,iBACrFxtC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKqyC,kBAAkB5G,eAAegC,gBAMrFztC,KAAKwyC,WAAW/G,eAAe+B,iBAAmB,KAClDxtC,KAAKwyC,WAAW/G,eAAegC,eAAiB,KAChDztC,KAAKwyC,WAAW/G,eAAeyK,mBAAqB,KACpDl2C,KAAKwyC,WAAW/G,eAAe0K,iBAAmB,KAGlDn2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,WAC/E,CAEOuC,6CACN/0C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwyC,WAAY,KAAMnC,EAAwBkE,eAEhH/Q,4BAAyDxjC,KAAKwyC,WAAW/G,eAAgBzrC,KAAKuyC,iBAAiB9G,gBAE/GzrC,KAAKwyC,WAAW/G,eAAe6G,mBAAqBtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBACzFtyC,KAAKwyC,WAAW/G,eAAexgB,cAAgBjrB,KAAKuyC,iBAAiB9G,eAAexgB,cACpFjrB,KAAKwyC,WAAW/G,eAAehhB,OAASzqB,KAAKuyC,iBAAiB9G,eAAehhB,OAE7EzqB,KAAKwyC,WAAW/G,eAAe9Q,eAAiB36B,KAAKuyC,iBAAiB9G,eAAe9Q,eACrF36B,KAAKwyC,WAAW/G,eAAeqI,uBAAyB9zC,KAAKuyC,iBAAiB9G,eAAeqI,uBAC7F9zC,KAAKwyC,WAAW/G,eAAeoI,sBAAwB7zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAE5F7zC,KAAKwyC,WAAW/G,eAAevT,iBAAmBl4B,KAAKuyC,iBAAiB9G,eAAevT,iBACvFl4B,KAAKwyC,WAAW/G,eAAezE,iBAAmBhnC,KAAKuyC,iBAAiB9G,eAAezE,iBAElFhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAA8E,IAA1DhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAIjGhnC,KAAKwyC,WAAW/G,eAAeuK,cAAgB,KAC/Ch2C,KAAKwyC,WAAW/G,eAAewK,YAAc,OAJ7Cj2C,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKuyC,iBAAiB9G,eAAe+B,iBACpFxtC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKuyC,iBAAiB9G,eAAegC,gBAMpFztC,KAAKwyC,WAAW/G,eAAe+B,iBAAmB,KAClDxtC,KAAKwyC,WAAW/G,eAAegC,eAAiB,KAChDztC,KAAKwyC,WAAW/G,eAAeyK,mBAAqB,KACpDl2C,KAAKwyC,WAAW/G,eAAe0K,iBAAmB,KAGlDn2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,WAC/E,CAEO0C,yCACNl1C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwyC,WAAY,KAAMnC,EAAwBkE,eAEhH/Q,4BAAyDxjC,KAAKwyC,WAAW/G,eAAgBzrC,KAAKumC,aAAakF,gBAE3GzrC,KAAKwyC,WAAW/G,eAAe6G,mBAAqBtyC,KAAKumC,aAAakF,eAAe6G,mBACrFtyC,KAAKwyC,WAAW/G,eAAexgB,cAAgBjrB,KAAKumC,aAAakF,eAAexgB,cAEhFjrB,KAAKwyC,WAAW/G,eAAe9Q,eAAiB36B,KAAKumC,aAAakF,eAAe9Q,eACjF36B,KAAKwyC,WAAW/G,eAAeqI,uBAAyB9zC,KAAKumC,aAAakF,eAAeqI,uBACzF9zC,KAAKwyC,WAAW/G,eAAeoI,sBAAwB7zC,KAAKumC,aAAakF,eAAeoI,sBAExF7zC,KAAKwyC,WAAW/G,eAAevT,iBAAmBl4B,KAAKumC,aAAakF,eAAevT,iBACnFl4B,KAAKwyC,WAAW/G,eAAezE,iBAAmBhnC,KAAKumC,aAAakF,eAAezE,iBAE9EhnC,KAAKumC,aAAakF,eAAezE,kBAA0E,IAAtDhnC,KAAKumC,aAAakF,eAAezE,kBASzFhnC,KAAKwyC,WAAW/G,eAAeuK,cAAgB,KAC/Ch2C,KAAKwyC,WAAW/G,eAAewK,YAAc,MATzCj2C,KAAKumC,aAAakF,eAAe+B,kBACnCxtC,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKumC,aAAakF,eAAe+B,iBAChFxtC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKumC,aAAakF,eAAegC,iBAE9EztC,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKumC,aAAakF,eAAeiC,gBAChF1tC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKumC,aAAakF,eAAekC,eAOlF3tC,KAAKwyC,WAAW/G,eAAe+B,iBAAmB,KAClDxtC,KAAKwyC,WAAW/G,eAAegC,eAAiB,KAChDztC,KAAKwyC,WAAW/G,eAAeyK,mBAAqB,KACpDl2C,KAAKwyC,WAAW/G,eAAe0K,iBAAmB,KAGlDn2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,WAC/E,CAEO6C,0CACNr1C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwyC,WAAY,KAAMnC,EAAwBkE,eAEhH/Q,4BAAyDxjC,KAAKwyC,WAAW/G,eAAgBzrC,KAAKymC,cAAcgF,gBAE5GzrC,KAAKwyC,WAAW/G,eAAe6G,mBAAqBtyC,KAAKymC,cAAcgF,eAAe6G,mBACtFtyC,KAAKwyC,WAAW/G,eAAexgB,cAAgBjrB,KAAKymC,cAAcgF,eAAexgB,cAEjFjrB,KAAKwyC,WAAW/G,eAAe9Q,eAAiB36B,KAAKymC,cAAcgF,eAAe9Q,eAClF36B,KAAKwyC,WAAW/G,eAAeqI,uBAAyB9zC,KAAKymC,cAAcgF,eAAeqI,uBAC1F9zC,KAAKwyC,WAAW/G,eAAeoI,sBAAwB7zC,KAAKymC,cAAcgF,eAAeoI,sBAEzF7zC,KAAKwyC,WAAW/G,eAAevT,iBAAmBl4B,KAAKymC,cAAcgF,eAAevT,iBACpFl4B,KAAKwyC,WAAW/G,eAAezE,iBAAmBhnC,KAAKymC,cAAcgF,eAAezE,iBAE/EhnC,KAAKymC,cAAcgF,eAAezE,kBAA2E,IAAvDhnC,KAAKymC,cAAcgF,eAAezE,kBAI3FhnC,KAAKwyC,WAAW/G,eAAeuK,cAAgB,KAC/Ch2C,KAAKwyC,WAAW/G,eAAewK,YAAc,OAJ7Cj2C,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKymC,cAAcgF,eAAe+B,iBACjFxtC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKymC,cAAcgF,eAAegC,gBAMjFztC,KAAKwyC,WAAW/G,eAAe+B,iBAAmB,KAClDxtC,KAAKwyC,WAAW/G,eAAegC,eAAiB,KAChDztC,KAAKwyC,WAAW/G,eAAeyK,mBAAqB,KACpDl2C,KAAKwyC,WAAW/G,eAAe0K,iBAAmB,KAGlDn2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,WAC/E,CAEOvH,yCACFjrC,KAAK0yC,yBACH1yC,KAAKqyC,mBAAqBryC,KAAKqyC,kBAAkB5G,iBACnDzrC,KAAKguC,sBAAwBxK,mDAC3BxjC,KAAKikC,sBAGAjkC,KAAK2yC,wBACV3yC,KAAKuyC,kBAAoBvyC,KAAKuyC,iBAAiB9G,iBACjDzrC,KAAKguC,sBAAwBxK,kDAC3BxjC,KAAKikC,sBAGAjkC,KAAKwoC,oBACVxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAakF,iBACzCzrC,KAAKguC,sBAAwBxK,2DAC3BxjC,KAAKikC,sBAGAjkC,KAAKyoC,qBACVzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcgF,iBAC3CzrC,KAAKguC,sBAAwBxK,2DAC3BxjC,KAAKikC,sBAGAjkC,KAAK4yC,mBACV5yC,KAAKwyC,YAAcxyC,KAAKwyC,WAAW/G,iBACrCzrC,KAAKguC,sBAAwBxK,4CAAyExjC,KAAKikC,sBAI/GjkC,KAAKiuC,yBAA2BjuC,KAAKkuC,8BACjCluC,KAAKguC,uBAAyBhuC,KAAKguC,sBAAwB,EAC7DhuC,KAAKmuC,6BAA8B,GAEnCnuC,KAAKmuC,6BAA8B,EACnCnuC,KAAKguC,2BAAwBp2B,EAEhC,CAEO8uB,yCAED1mC,KAAKqmC,qBAAqB96B,UAAUM,MAMvC7L,KAAKouC,yBAA2BpuC,KAAKqmC,oBAAoB96B,SAASjC,KAClEtJ,KAAKo2C,4CAA+Cp2C,KAAKqmC,oBAAoB+L,wBAEzEpyC,KAAKq2C,iDADL,GAEJr2C,KAAKquC,6BAA8B,EACnCruC,KAAKsuC,sBAAwB,IAV7BtuC,KAAKouC,yBAA2BpuC,KAAKuuC,8BACrCvuC,KAAKo2C,4CAA8C,GACnDp2C,KAAKquC,6BAA8B,EACnCruC,KAAKsuC,2BAAwB12B,EAShC,EArkEay4B,2BAAoB,iDACpBA,yCAAyC,wCACzCA,qCAAqC,4CACrCA,uBAAuB,oCACvBA,wCAAwC,uCACxCA,oCAAoC,2CACpCA,sBAAsB,mCACtBA,oCAAoC,iDACpCA,gCAAgC,oDAChCA,kBAAkB,4CAClBA,8BAA8B,uDAC9BA,qCAAqC,oCACrCA,iCAAiC,sDACjCA,mBAAmB,8CACnBA,kCAAkC,gCAClCA,8BAA8B,oCAC9BA,gBAAgB,kEAxBnBA,GAAuBpsC,8MAAvBosC,EAAuB97B,mnBAAvBC,qBAAuB,8CAAvBA,gBAAkB,iDAAlBA,mBAAqB,+CAArBA,iBAAmB,g7GDxDhCvQ,kCACAA,iBAAuD,UAAvDA,CAAuD,iBAAvDA,CAAuD,UAAvDA,CAAuD,UAAvDA,CAAuD,UAAvDA,CAAuD,yBAezCA,mDAA0BuQ,mCAAqC,GAEhEvQ,QACDA,8BAWFA,QACAA,mBAA6B,oCAEkDA,mCAAUuQ,kBAAoB,GACzGvQ,oCAIC,aAEGA,UACAA,oBAA0CA,UAAkDA,YAIhGA,6BAaAA,oCAMC,aAEGA,UACFA,UAGFA,6BAYFA,cAINA,mBAAyB,YAAzBA,CAAyB,0BAInBA,iDAAwBuQ,0BAA4B,EAApDvQ,CAAqD,wCAChCuQ,uBAAyB,EAD9CvQ,CAAqD,wCAE9BuQ,8BAA4B,GAIrDvQ,QACAA,sBACEA,gCAASuQ,iCAA+B,GAWxCvQ,qBAAUA,0BAAaA,cAI7BA,mBAQC,2BAcGA,oDAA2BuQ,oCAAsC,EAAjEvQ,CAAkE,wDAC7BuQ,8CAAgD,GACtFvQ,QACDA,kCACEA,2CAAkBuQ,sCAAwC,GAW5DvQ,cAKNA,mBAAoB,YAApBA,CAAoB,aAIdA,0BAoBAA,mBAKEA,yBASFA,QAGAA,mBACEA,0BAUFA,QACAA,0BACFA,sCAjNgBA,qCAGlBA,qVAOYA,0CAAyB,yBAO3BA,0CAGCA,4IAgBCA,mFAGMA,yGACJA,mDAC0CA,sEAK3CA,iGAcDA,mDAKMA,yGACJA,mDAKDA,qDAsBLA,2DAA0C,yDAO1CA,sEADAA,2DAwBFA,8CAA6B,0BAA7BA,CAA6B,kCAA7BA,CAA6B,yUAA7BA,CAA6B,4DAA7BA,CAA6B,oDAA7BA,CAA6B,uDAiB7BA,8DAA6C,qBAA7CA,CAA6C,kBAA7CA,CAA6C,uCAA7CA,CAA6C,kDAA7CA,CAA6C,8DAoB5CA,kEAoBDA,kGAIMA,iCAcgBA,kNC9InBosC,CAAb,uHCjDM,MAAOG,UAA0B8F,IAGrCv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,4CAClBrwC,KAAK2uC,aAAa0B,wCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAC5B,OAAI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,GAGdA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeiC,iBACpB1tC,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACpB9vC,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAekC,eACpB3tC,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAI8K,IAC1Bv2C,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,SACvCjlC,KAAKyrC,eAAetE,qBAAuBsL,iBAC3CzyC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,uBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EA7FuD,qHCApD,MAAO2J,UAAyB2F,IAGpCv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,2CAClBrwC,KAAK2uC,aAAa0B,uCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAC5B,OAAI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,GAEdA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACrB9vC,KAAKyrC,eAAehhB,SAAWimB,gBAC9B1wC,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAI+K,IAC1Bx2C,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,SACvCjlC,KAAKyrC,eAAehhB,OAASimB,eAC7B1wC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,sBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EA3FsD,qHCAnD,MAAOlC,UAAqBwR,IAGhCv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,uCAClBrwC,KAAK2uC,aAAa0B,mCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAgB5B,OAfI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,IAGjB7uC,KAAKyrC,eAAetE,sBAAqE,IAA7CnnC,KAAKyrC,eAAetE,uBACrCnnC,KAAKyrC,eAAetE,qBAAqB6H,UAAU5yB,aAC5Cq2B,2BAAwDr2B,aAE1FyyB,GAAmB,GAIhBA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,cAKd,IAArCtvB,KAAKyrC,eAAerH,cAClBpkC,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeiC,iBACpB1tC,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAetc,eACpBnvB,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACpB9vC,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAekC,eACpB3tC,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAI8K,IAC1Bv2C,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,SACvCjlC,KAAKyrC,eAAetE,qBAAuBsL,iBAC3CzyC,KAAKyrC,eAAerH,cAAe,EACnCpkC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,uBACA,gBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EAzGkD,qHCA/C,MAAO9B,UAAsBoR,IAGjCv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,wCAClBrwC,KAAK2uC,aAAa0B,oCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAC5B,OAAI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,GAEdA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeiC,iBACpB1tC,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACpB9vC,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAekC,eACpB3tC,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAI8K,IAC1Bv2C,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,SACvCjlC,KAAKyrC,eAAetE,qBAAuBsL,iBAC3CzyC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,uBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EA5FmD,+DCLhD,MAAgBsP,UAA4BjJ,IAChDttC,cACEwS,QACAvS,KAAKwuC,kBAAoB,aACzBxuC,KAAKyuC,qBAAuB,OAC5BzuC,KAAK+mC,aACN,EANiE,qHCK9D,MAAO6J,UAAmB0F,IAG9Bv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,qCAClBrwC,KAAK2uC,aAAa0B,iCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAC5B,OAAI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,GAEdA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeyK,oBACpBl2C,KAAKyrC,eAAeuK,eACpBh2C,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACrB9vC,KAAKyrC,eAAehhB,SAAWimB,gBAC9B1wC,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAe0K,kBACpBn2C,KAAKyrC,eAAewK,aACpBj2C,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAIgL,IAC1Bz2C,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,SACvCjlC,KAAKyrC,eAAehhB,OAASimB,eAC7B1wC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,gBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EA/FgD,qFCH7C,MAAOpX,UAAsByd,IAGjCttC,cACEwS,QACAvS,KAAK0uC,aAAagI,gCAClB12C,KAAKwuC,kBAAoB,OACzBxuC,KAAKyuC,qBAAuB,MAC5BzuC,KAAK+mC,aACN,CAEM+H,6BACL,QAAK9uC,KAAK6vB,gBAAoB7vB,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,cAqBlDtvB,KAAK6vB,eAAerkB,MACpBxL,KAAK6vB,eAAe8mB,sBACpB32C,KAAK6vB,eAAelkB,oBAA0EiM,MAC9F5X,KAAK6vB,eAAepkB,mBACpBzL,KAAK6vB,eAAe+mB,yBACpB52C,KAAK6vB,eAAeC,4BACpB9vB,KAAK6vB,eAAegnB,oCACpB72C,KAAK6vB,eAAenC,cACpB1tB,KAAK6vB,eAAeinB,kBACpB92C,KAAK6vB,eAAeof,gBACpBjvC,KAAK6vB,eAAeqf,gBACpBlvC,KAAK6vB,eAAeoL,UACpBj7B,KAAK6vB,eAAeknB,cACpB/2C,KAAK6vB,eAAe0a,YACpBvqC,KAAK6vB,eAAemnB,gBACpBh3C,KAAK6vB,eAAesf,cACpBnvC,KAAK6vB,eAAeuf,eAhCgC,IAArDpvC,KAAK6vB,eAAeonB,+BAC+B,IAAnDj3C,KAAK6vB,eAAeqnB,4BACqB,IAAzCl3C,KAAK6vB,eAAeinB,kBACmB,IAAvC92C,KAAK6vB,eAAemnB,iBAEiC,IAArDh3C,KAAK6vB,eAAeonB,8BACqB,IAAzCj3C,KAAK6vB,eAAeinB,mBACnB92C,KAAK6vB,eAAemnB,iBACpBh3C,KAAK6vB,eAAeqnB,6BAE8B,IAAnDl3C,KAAK6vB,eAAeqnB,4BACmB,IAAvCl3C,KAAK6vB,eAAemnB,iBACnBh3C,KAAK6vB,eAAeinB,mBACpB92C,KAAK6vB,eAAeonB,8BAuBnBj3C,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,2BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAK6vB,eAAiB,IAAI3E,IAC1BlrB,KAAK6vB,eAAewf,iBAAmB,CACrC,eACA,OACA,sBACA,mBACA,kBACA,2BACA,yBACA,oBACA,oBACA,qBACA,QAEFrvC,KAAK6vB,eAAe0a,WAAa,GACjCvqC,KAAK6vB,eAAenC,cAAe,EAEnC1tB,KAAKsvC,WACN,EAnFkD,kKCD/C,MAAO6H,UAA6CxtB,KCDpD,MAAOytB,GCKP,MAAOC,EACQj9B,eACjB,MAAMk9B,GAA4B,IAAIF,EACtCE,UAA0BC,UAAW,EACrCD,GAA0BE,UAAW,EACrCF,GAA0BG,UAAW,EAC9BH,EACR,CAE0Bl9B,qBACzBs9B,IAEA,MAAMJ,EAA4Bt3C,KAAK23C,QACvCL,SAA0BM,gBAAkBC,kBAC1CH,GAA4CI,cAAcC,OAE5DT,EAA0BM,gBAAgBtqB,KAAK2kB,wBACxCqF,CACR,CAEwBl9B,mBACvBk9B,GACApkC,GAEA,MAAMwb,EAAuC,IAAIyoB,EACjDzoB,SAAqC6oB,SAAWD,GAA0BC,SAC1E7oB,EAAqC8oB,SAAWF,GAA0BE,SAC1E9oB,EAAqC+oB,SAAWH,GAA0BG,SAC1E/oB,EAAqCxb,MAAQE,qBAAiCF,GACvEwb,CACR,8GC1BCzqB,iBAAoC,WAApCA,CAAoC,UAApCA,CAAoC,UAApCA,CAAoC,wBAIiBA,SAAsDA,QACnGA,8BAA6CA,SAAsDA,QACnGA,8BAA6CA,SAAsDA,uCALnGA,wCAG6CA,+IACAA,+IACAA,gJCJlD,IAAM+zC,EAAb,MAAM,MAAOA,GAOXj4C,YACS2U,EACkB4iC,GADlBt3C,iBAPQA,iBAAc,IAAIuT,MAClBvT,gBAAa,IAAIuT,MACjBvT,kBAAe,IAAIuT,MAQ9B+jC,IACFt3C,KAAKs3C,0BAA4BA,EACjCt3C,KAAK8U,YAAY9U,KAAKs3C,4BAExBt3C,KAAKyT,WAAWjO,UAAU,KACxBkP,EAAUS,OAAV,EAEH,CAEM8iC,qBACLj4C,KAAK8T,YAAYJ,KAAK1T,KAAKgV,UAAUiB,cACtC,CAEMiiC,oBACLl4C,KAAKyT,WAAWC,MACjB,CAEMykC,sBACLn4C,KAAKgU,aAAaN,MACnB,CAEOoB,YAAYwiC,GAClBt3C,KAAKgV,UAAY,IAAIO,KAA8C,CACjEqiC,gBAAiB,IAAIniC,KAAkC6hC,EAA0BM,iBACjFL,SAAU,IAAI9hC,KAAqB6hC,EAA0BC,UAC7DC,SAAU,IAAI/hC,KAAqB6hC,EAA0BE,UAC7DC,SAAU,IAAIhiC,KAAqB6hC,EAA0BG,WAEhE,gDAvCUO,IAAkC/zC,kBASnCyR,MAAe,2BATdsiC,GAAkCzjC,+qBDb/CtQ,iCACEA,qCAAcuQ,qBAAmB,EAAjCvQ,CAAkC,gCACnBuQ,sBAAoB,EADnCvQ,CAAkC,iCAElBuQ,uBAAqB,GAOrCvQ,iBACEA,wBAWFA,iBAlBAA,+BAAyB,yBAAzBA,CAAyB,8BAAzBA,CAAyB,yEAOjBA,kICEG+zC,EAAb,gRCbM,MAAOI,EAAbr4C,cACSC,6BAAyB,CAEjC,ECOK,MAAOq4C,GACgBj+B,qBACzBk+B,GACAC,GAEA,MAAMC,EAAY,IAAIpzC,MACtBkzC,UAAuB10C,QAASumB,KAC9B,MAAM5e,GAAWvL,KAAKy4C,aAAatuB,GAAuBouB,GAC1DC,EAAUh3C,KAAK+J,GAAf,GAGKitC,CACR,CAEkCp+B,6BACjC+P,GACAouB,EACAhtC,GAEA,MAAMmtC,GAAW,CAACvuB,GAAsBotB,SAAUptB,GAAsBqtB,SAAUrtB,GAAsBstB,UAClGkB,GAAyB,CAAC,EAAG,EAAG,GACnCtyC,OAAQgY,KAAOq6B,GAASr6B,GAAI,IAC5BlX,IAAKkX,IAAMk6B,EAAuBR,MAAMh3B,KAAMriB,IAAMA,GAAEk6C,eAAiBv6B,IAAG/U,MAG3EiC,EAASstC,uBAD2B,IAAlCF,GAAuBxpC,OACS,GACS,IAAlCwpC,GAAuBxpC,OACE,wBAEA,0BAGpC5D,EAASotC,uBAAyBA,GAAuBr2B,KAAK,KAC/D,CAE0BlI,oBACzB+P,GACAouB,GAEA,MAAMhtC,EAAW,IAAI6/B,KA8BrB,GA7BA7/B,EAAS0gB,aAAe9B,GAAsB8B,aAC9C1gB,EAASC,KAAO2e,GAAsB3e,KACtCD,EAASutC,aAAe3uB,GAAsB2uB,aAE9CvtC,EAASwtC,KAAO5uB,GAAsB4uB,KAAKxtB,MAC3ChgB,EAASytC,iBAAmB7uB,GAAsB4uB,KAAKrrB,aAEnDvD,GAAsB4E,gBACxBxjB,EAASwtC,KAAO5uB,GAAsB4E,cAAcgqB,KAAKxtB,MACzDhgB,EAASytC,iBAAmB7uB,GAAsB4E,cAAcgqB,KAAKrrB,aACrEniB,EAAS0tC,kBAAoB9uB,GAAsB4E,cAAcrB,aACjEniB,EAAS2tC,UAAY/uB,GAAsB4E,cAAcljB,KACzDN,EAAS4tC,UAAY,GAAGhvB,GAAsB4E,cAAczlB,SAAS6gB,GAAsB4E,cAAcvjB,SAG3GD,EAASmiB,aAAevD,GAAsBuD,aAC9CniB,EAASI,oBAAqB,EAC1Bwe,GAAsB4E,gBACxBxjB,EAASI,oBAAqB,GAEhCJ,EAAS4gB,UAAYhC,GAAsBkE,iBAAmBlE,GAAsBkE,gBAAgBlf,OAAS,EAC7G5D,EAASjC,KAAO6gB,GAAsB7gB,KAEtC+uC,GAAoBe,sBAAsBjvB,GAAuBouB,EAAwBhtC,GAEzFA,EAAS8tC,MAAQC,kBAAkCnvB,GAAsBkvB,OACzE9tC,EAASM,KAAOse,GAAsBte,KAGlCse,GAAsBovB,SAAU,CAClC,MAAMC,GAAiBrvB,GAAsBovB,SAASx4B,KAAM04B,IAAYA,GAAQC,aAC5EF,KAEAjuC,EAASouC,YADPH,GAAeH,QAAUO,SACJC,kBAAiCL,GAAeH,OAAS,IAEzD,GAErBG,GAAeM,YACjBvuC,EAASouC,aAAeH,GAAeM,UAAY,KAEjDN,GAAeO,WACjBxuC,EAASouC,aAAeH,GAAeO,UAEzCxuC,EAASyuC,oBAAsBR,GAAeS,aAC9C1uC,EAAS2uC,yBAA2BV,GAAeW,+BACnD5uC,EAAS6uC,uBAAyBZ,GAAea,6BAEpD,CAEG9uC,EAAS4gB,YACX5gB,EAAS8iB,gBAAkB,IAAIjpB,MAC/B+kB,GAAsBkE,gBAAgBzqB,QAAS02C,KAC7C/uC,EAAS8iB,gBAAgB7sB,KAAK,IAAI+4C,KAAqBD,GAAehxC,KAAMgxC,GAAe5sB,cAA3F,GAEFniB,EAAS8iB,gBAAgBf,KAAK2kB,gCAG5B9nB,GAAsBqwB,gBACxBjvC,EAASivC,cAAgB,IAAIp1C,MAC7B+kB,GAAsBqwB,cAAc52C,QAAS62C,KAC3C,MAAMC,GAAe,IAAItC,EACzBsC,GAAaC,uBAAyBF,GAAkCE,uBACxED,GAAa7uC,KAAO4uC,GAAkC5uC,KACtDN,EAASivC,cAAch5C,KAAKk5C,GAA5B,IAIJ,MAAMF,GAAgBrwB,GAAsBqwB,cAAcn0C,OAAQ3H,IAAMA,GAAEi8C,wBACpEC,GAAuBzwB,GAAsBqwB,cAAcn0C,OAAQ3H,KAAOA,GAAEi8C,wBAElF,OACEpvC,EAASsvC,kBADPL,GAAcrrC,OAAS,EACIqrC,GAAcrrC,OAAS,gBAC3CqrC,GAAcrrC,OAAS,EACHqrC,GAAcrrC,OAAS,eAEhDyrC,GAAqBzrC,OAAS,EACH,GAEA,oBAK/B5D,EAASuvC,yBADPF,GAAqBzrC,OAAS,EACIyrC,GAAqBzrC,OAAS,YACzDyrC,GAAqBzrC,OAAS,EACHyrC,GAAqBzrC,OAAS,WAE9B,GAG/B5D,CACR,kfCrHOtH,uBAEEA,qEAAkBA,uCAAiC,GAOpDA,iCANCA,4BAAwB,2EAAxBA,CAAwB,kBAAxBA,CAAwB,0BAAxBA,CAAwB,6CAAxBA,CAAwB,wGAuKlBA,4DAEEA,iDAAiC,mBAAjCA,CAAiC,iCAAjCA,CAAiC,+EAkBnCA,qBAEEA,kFAASA,wFAA4F,GASrGA,uBACAA,mBAAwCA,oCAAwBA,gBAThEA,2FAYFA,qBAEEA,6DAASA,mCAA6B,GAStCA,uBACAA,mBAAwCA,oCAAqBA,gBAT7DA,wEA0BFA,8DACAA,wCAEEA,mGAA4BA,0DAAiD,GAO/EA,2CANEA,6BAAyB,6CAAzBA,CAAyB,qCAAzBA,CAAyB,kFAhJ/BA,oBAGEA,oFAAwBA,oCAA2C,EAAnEA,CAAoE,8EAC/CA,sBAAe,GAAE,EADtCA,CAAoE,uEAEtDA,uBAAc,EAF5BA,CAAoE,8EAG/CA,uBAAc,EAHnCA,CAAoE,iFAI5CA,8BAAqB,GAoB7CA,wCAS0B,iCAT1BA,CAS0B,yBAT1BA,CAS0B,kCAuC1BA,sBACEA,oCAOFA,QAEAA,sBACEA,sCAOFA,QAEAA,mBACEA,6BAeAA,6BAeAA,sBACEA,0EAASA,gCAA4B,GASrCA,wBACAA,oBAAwCA,yDAAyCA,UAGnFA,0BACAA,gDAUAA,mBACAA,4CACEA,8FAA+BA,gDAAuC,EAAtEA,CAAuE,mEAChDA,2BAAsC,GAAK,GAEnEA,QACDA,mBACAA,wCACEA,uGAA4BA,gDAA0D,EAAtFA,CAAuF,sFAC1DA,8CAAqC,EADlEA,CAAuF,qFAE3DA,6CAAoC,EAFhEA,CAAuF,mEAGhEA,2BAAsC,GAAK,GAKnEA,qDA/JHA,+CAAyC,2EAAzCA,CAAyC,8CAAzCA,CAAyC,kEAAzCA,CAAyC,4EAAzCA,CAAyC,0BAAzCA,CAAyC,wGAAzCA,CAAyC,wCAAzCA,CAAyC,gCAAzCA,CAAyC,uCAAzCA,CAAyC,8BAAzCA,CAAyC,+BAAzCA,CAAyC,wBAAzCA,CAAyC,2CAAzCA,CAAyC,eAqBvCA,gCAAmB,uBAAnBA,CAAmB,wBAAnBA,CAAmB,cAAnBA,CAAmB,eAAnBA,CAAmB,oCAWnBA,qDAAwC,qCAAxCA,CAAwC,eAAxCA,CAAwC,uCAAxCA,CAAwC,mDAYxCA,6FAAwF,8BAAxFA,CAAwF,mBAAxFA,CAAwF,uDAAxFA,CAAwF,+DAUxFA,uCAA0B,wBAA1BA,CAA0B,gCAA1BA,CAA0B,+CAA1BA,CAA0B,uCAA1BA,CAA0B,oDAA1BA,CAA0B,kCAA1BA,CAA0B,wCAA1BA,CAA0B,0BAA1BA,CAA0B,6BAevBA,gDAUDA,wCAAyB,gCAAzBA,CAAyB,2BAAzBA,CAAyB,wCAUxBA,yGAeAA,yGAiBDA,4EADAA,mEAYIA,+CAEHA,+CAaDA,uDAQAA,4DAA0C,8BAA1CA,CAA0C,yCAA1CA,CAA0C,gFAvLtDA,8BAQC,YAEGA,iCACAA,mCAEEA,oEAAmBA,kCAAwB,EAA3CA,CAA4C,oEACnBA,wCAA8B,EADvDA,CAA4C,qEAElBA,yCAA+B,GAKzDA,0BA2KAA,iBAAS,UAATA,CAAS,sBAGHA,2DAAQA,8BAAwB,GAMjCA,uDAtMTA,kDAA4C,wDAA5CA,CAA4C,yCAA5CA,CAA4C,mEAA5CA,CAA4C,gCAA5CA,CAA4C,wDAQVA,qCAM9BA,6CAA4B,4BAA5BA,CAA4B,2BAMVA,sCA6KZA,sCAAqB,8BAArBA,CAAqB,4BAArBA,CAAqB,oCAArBA,CAAqB,wEAgBvCA,kBAAwC,WAAxCA,CAAwC,WAAxCA,CAAwC,YAG7BA,4DAASA,SAAS82C,kBAAiB,KAAI,GAC1C92C,2BACEA,6DAAUA,SAAS+2C,kBAAiB,KAAI,EAAxC/2C,CAAyC,4BAChCuV,oBAAwB,GAWnCvV,QACAA,kBAAsCA,iCAAqBA,QAC3DA,kBACFA,QACAA,uCAKFA,QACAA,kBAAiC,uBAE7BA,wFAAuCA,iDAAuC,GAU/EA,mDAhCGA,oEAAmD,mBAAnDA,CAAmD,2DAAnDA,CAAmD,uBAAnDA,CAAmD,wBAAnDA,CAAmD,sBAerDA,kCAA+B,kFAQ/BA,mDAAkC,qCAAlCA,CAAkC,4CAAlCA,CAAkC,qBAAlCA,CAAkC,kDAAlCA,CAAkC,yEAAlCA,CAAkC,8CAAlCA,CAAkC,uCAAlCA,CAAkC,yEAgB1CA,wCACEA,6EAA4BA,6DAAmD,GAQjFA,QACAA,kBACAA,wCACEA,6EAA4BA,sCAA4B,GAO1DA,QACAA,wCACEA,6EAA4BA,wDAA8C,GAO5EA,QACAA,kBACAA,uCACEA,6EAA4BA,8CAAoC,EAAhEA,CAAiE,wEACpCA,+CAAqC,EADlEA,CAAiE,uEAErCA,8CAAoC,GAOjEA,iCAtCCA,6BAAyB,iEAAzBA,CAAyB,8BAAzBA,CAAyB,iDAAzBA,CAAyB,2FAAzBA,CAAyB,yBAWzBA,sCAAyB,wCAAzBA,CAAyB,6BAAzBA,CAAyB,2FAAzBA,CAAyB,yBASzBA,sCAAyB,qDAAzBA,CAAyB,4BAAzBA,CAAyB,2FAAzBA,CAAyB,yBAYzBA,wEAAsD,mDAAtDA,CAAsD,2CAAtDA,CAAsD,oCAAtDA,CAAsD,2FAAtDA,CAAsD,iHCnVnD,IAAMyyC,GAAb,MAAM,MAAOA,GAsDX32C,YACU+2B,EACA4N,EACAC,GACAvtB,GACA9D,GACAsxB,GACA//B,GACAo2C,GACAn2C,GACAE,GACAC,GACD2c,GACC1c,IAZAlF,uBACAA,yBACAA,yBACAA,gBACAA,sBACAA,0BACAA,6BACAA,mBACAA,uBACAA,gBACAA,+BACDA,+BACCA,kCAxDHA,6BAA0B,IAAIywC,IAAW,IAAK,wBAC9CzwC,4BAAyB,IAAIywC,IAAW,IAAK,uBAG7CzwC,qBAAkB,EAClBA,iCAA8B,MAC9BA,6BAA0B,IAAIywC,IAAW,IAAK,uBAU9CzwC,wBAAqB,IAAIywC,IAAW,IAAK,oBAGzCzwC,uBAAoB,IAAIywC,IAAW,IAAK,cAExCzwC,kCAA8B,EAGrBA,8BAA2Bgd,iBAGpChd,qBAA4B,CAAC,EAAG,GAAI,GAAI,KACxCA,eAAY,UAIZA,eAAY,IAAIk7C,MAAoB,EAAM,IAC1Cl7C,gCAA4B,EAG5BA,gBAAa,EACbA,uBAAoB,EAEpBA,8BAA2B,EAE1BA,sBAAiC,IAAIE,MAiB3CF,KAAKm7C,2BAA6Bn7C,KAAKkF,0BAA0BsH,gBAAgB2uC,2BACjFn7C,KAAKo7C,gCAAkCp7C,KAAKkF,0BAA0BsH,gBAAgB4uC,gCACtFp7C,KAAKq7C,sBAAwBr7C,KAAKkF,0BAA0BsH,gBAAgB6uC,sBAC5Er7C,KAAKs7C,kCAAoCt7C,KAAKkF,0BAA0BsH,gBAAgB8uC,kCAExFt7C,KAAKu7C,cAAgBv7C,KAAKo7C,gCACtB,CACE,CAAE92C,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,OAAQinB,MAAO,WACxB,CAAEjnB,MAAO,OAAQinB,MAAO,YACxB,CAAEjnB,MAAO,eAAgBinB,MAAO,aAChC,CAAEjnB,MAAO,oBAAqBinB,MAAO,sCACrC,CAAEjnB,MAAO,2BAA4BinB,MAAO,mCAE9C,CACE,CAAEjnB,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,OAAQinB,MAAO,WACxB,CAAEjnB,MAAO,OAAQinB,MAAO,YACxB,CAAEjnB,MAAO,oBAAqBinB,MAAO,sCACrC,CAAEjnB,MAAO,2BAA4BinB,MAAO,mCAGlDvrB,KAAK0kC,kBAAkB1yB,SAAShS,KAAKolC,WACrCplC,KAAKw7C,qBAAuBC,mBAC5Bz7C,KAAK07C,0BAA4BD,wBAA4C,MAE7Ez7C,KAAK27C,kCAAoCC,mBACzC57C,KAAK67C,uCAAyCD,wBAAqD,MAEnG57C,KAAK87C,cAAgB,CAAC97C,KAAK+7C,wBAAyB/7C,KAAKg8C,uBAAwBh8C,KAAKi8C,yBACtFj8C,KAAKk8C,mBAAqB,CAACl8C,KAAKm8C,kBAAmBn8C,KAAKo8C,mBACzD,CAEMC,6BACL,GAAIr8C,KAAKs8C,UAAUC,UAAYv8C,KAAKs8C,UAAUC,SAASptC,OAAS,EAC9D,GAAuC,IAAnCnP,KAAKs8C,UAAUC,SAASptC,OAE1BnP,KAAKw8C,8BAA8B,CADlBx8C,KAAKs8C,UAAUC,SAAS,GACI1wC,WACxC,CACL,MAAMqH,EAAQlT,KAAKs8C,UAAUC,SAASp1C,IAAKzI,GAAMA,EAAEmN,MACnD7L,KAAKw8C,8BAA8BtpC,EACpC,CAEJ,CAEMupC,2BAA2B5wC,EAAc6wC,GAC9C,MAAMnxC,GAAWvL,KAAKw4C,UAAUz3B,KAAM47B,IAAYA,GAAQ9wC,OAASA,GAEnE7L,KAAK2kC,iBAAiB3xB,OAAOzH,GAASM,KAAMN,GAASjC,KAAMiC,GAAS4gB,WAAW3mB,UAAW8mB,KACxFswB,iBAA6BF,GACzBpwB,IACFtsB,KAAK68C,cAAL,EAGL,CAEMC,qCACL,GAAI98C,KAAKs8C,UAAUC,UAAYv8C,KAAKs8C,UAAUC,SAASptC,OAAS,EAC9D,GAAuC,IAAnCnP,KAAKs8C,UAAUC,SAASptC,OAAc,CACxC,MAAM5D,EAAWvL,KAAKs8C,UAAUC,SAAS,GAEzCv8C,KAAK2kC,iBAAiB3xB,OAAOzH,EAASM,KAAMN,EAASjC,KAAMiC,EAAS4gB,WAAW3mB,UAAW8mB,IACpFA,GACFtsB,KAAK68C,cAAL,EAGL,MACC78C,KAAK2kC,iBACFpY,iBACCvsB,KAAKs8C,UAAUC,SAASp1C,IAAKzI,GAAMA,EAAEmN,MACrC7L,KAAKs8C,UAAUC,SAAStsC,KAAMvR,IAAsB,IAAhBA,EAAEytB,YAEvC3mB,UAAW8mB,IACNA,GACFtsB,KAAK68C,cAAL,EAKX,CAEME,4BAA4BlxC,GACjC,MAAMmxC,EAAmBh9C,KAAKw4C,UAAUz3B,KAAM47B,IAAYA,GAAQ9wC,OAASA,GAC3E7L,KAAKi9C,SAASD,EACf,CAEME,sCACL,GAAIl9C,KAAKs8C,UAAUC,UAAYv8C,KAAKs8C,UAAUC,SAASptC,OAAS,EAC9D,GAAuC,IAAnCnP,KAAKs8C,UAAUC,SAASptC,OAE1BnP,KAAKi9C,SADYj9C,KAAKs8C,UAAUC,SAAS,QAEpC,CACL,MAAMrpC,EAAQlT,KAAKs8C,UAAUC,SAASp1C,IAAKzI,GAAMA,EAAEmN,MACnD7L,KAAKm9C,iBAAiBjqC,EACvB,CAEJ,CAEMkqC,8BAA8BvxC,GACnC7L,KAAKgF,QAAQmzB,SAAS,CAAC,sBAAuBtsB,GAC/C,CAEMwxC,KAAKxxC,EAAcyxC,EAAY,GACpCt9C,KAAKgF,QAAQmzB,SAAS,CAAC,iBAAkBtsB,GAAO,CAAEisB,YAAa,CAAEE,OAAQslB,IAC1E,CAEMC,2BAA2B1xC,GAChC,MAAM2xC,EAAkBx9C,KAAKw4C,UAAUz3B,KAAM47B,IAAYA,GAAQ9wC,OAASA,GAC1E7L,KAAKy9C,QAAQD,EACd,CAEME,qCACL,GAAI19C,KAAKs8C,UAAUC,UAAYv8C,KAAKs8C,UAAUC,SAASptC,OAAS,EAC9D,GAAuC,IAAnCnP,KAAKs8C,UAAUC,SAASptC,OAE1BnP,KAAKy9C,QADYz9C,KAAKs8C,UAAUC,SAAS,QAEpC,CACL,MAAMrpC,EAAQlT,KAAKs8C,UAAUC,SAASp1C,IAAKzI,GAAMA,EAAEmN,MACnD7L,KAAK29C,gBAAgBzqC,EACtB,CAEJ,CAEM4zB,gCACL9mC,KAAKf,MAAM8nC,cACX/mC,KAAKmmC,2BACN,CAEMyX,gBACLn4C,EACAqE,EACAwB,GACAM,GACAH,GACAE,IAEAlG,EAAMo4C,kBACN79C,KAAK4hB,uBAAuBic,QAAQ/zB,EAAc6B,IAAoBnG,WACvE,CAGMs4C,gBAGL,OAFoB99C,KAAKs8C,UAAUC,SAASptC,SAC5BnP,KAAKw4C,UAAUrpC,MAEhC,CAEM4uC,yBACL/9C,KAAKgF,QAAQ+J,cAAc2nC,GAAkBsH,cAC9C,CAEMC,+BACLj+C,KAAKmmC,2BACN,CAEM+X,gCACLl+C,KAAKmmC,2BACN,CAGMsB,WAAWjuB,GAChBxZ,KAAKsT,cAAciG,qBAAqBC,EAAQxZ,KAAK0nC,qBACtD,CAEMyW,WAAW14C,EAAYqE,GAC5BrE,EAAMo4C,kBACN79C,KAAKgF,QAAQmzB,SAAS,CAAC,aAAaruB,mBACrC,CAGMs0C,eACLp+C,KAAK89C,gBAAkB99C,KAAKs8C,UAAU1e,QAAU59B,KAAKw4C,UAAU50C,QAASy6C,GAAQr+C,KAAKs8C,UAAUgC,OAAOD,IACtGr+C,KAAKu+C,gBACN,CAEMtoB,cACLj2B,KAAKioC,iBAAiBxmC,OACtBzB,KAAKioC,iBAAiB1d,UACvB,CAEM2d,WACAloC,KAAKf,QACRe,KAAKf,MAAQ,IAAI2wB,KAGnB5vB,KAAK82B,gBAAgBgB,YAAY1xB,QAAKmsB,MAAUvyB,KAAKioC,mBAAmBziC,UAAWlH,IACxD0B,KAAK2oC,WAAWrqC,EAAO05B,UAKhDh4B,KAAKksC,gBAAgBlsC,KAAKf,MAAM4wB,eAAe0a,YAC/C8C,uBAAqCrtC,KAAKw+C,cAAex+C,KAAKf,OAC9DouC,kBAAgCrtC,KAAK+rC,mBAAoB/rC,KAAKf,OAE9De,KAAK68C,eAAL,EAEH,CAEM4B,0BAA0BC,GAC3BA,EAE6B,MAA3BA,EAAmBr8C,KACrBrC,KAAKf,MAAM4wB,eAAeonB,8BAA+B,EACzDj3C,KAAKf,MAAM4wB,eAAeqnB,4BAA6B,EACvDl3C,KAAKf,MAAM4wB,eAAeinB,iBAAmB,EAC7C92C,KAAKf,MAAM4wB,eAAemnB,eAAiB,GAGT,MAA3B0H,EAAmBr8C,KAC1BrC,KAAKf,MAAM4wB,eAAeonB,8BAA+B,EACzDj3C,KAAKf,MAAM4wB,eAAeinB,iBAAmB,SACtC92C,KAAKf,MAAM4wB,eAAemnB,sBAC1Bh3C,KAAKf,MAAM4wB,eAAeqnB,4BAGC,MAA3BwH,EAAmBr8C,MAC1BrC,KAAKf,MAAM4wB,eAAeqnB,4BAA6B,EACvDl3C,KAAKf,MAAM4wB,eAAemnB,eAAiB,SACpCh3C,KAAKf,MAAM4wB,eAAeinB,wBAC1B92C,KAAKf,MAAM4wB,eAAeonB,sCAG5Bj3C,KAAKf,MAAM4wB,eAAeinB,wBAC1B92C,KAAKf,MAAM4wB,eAAeonB,oCAC1Bj3C,KAAKf,MAAM4wB,eAAemnB,sBAC1Bh3C,KAAKf,MAAM4wB,eAAeqnB,4BAInCl3C,KAAKf,MAAMqwB,UAAY,EACvBtvB,KAAKmmC,2BACN,CAEMwY,2BAA2BC,GAChC5+C,KAAKf,MAAM4wB,eAAiB4rB,sBAC1Bz7C,KAAKf,MAAM4wB,eACX+uB,EACA70C,iBAIF/J,KAAKf,MAAMqwB,UAAY,EACvBtvB,KAAKmmC,2BACN,CAEM0Y,wCAAwCD,GAC7C5+C,KAAKf,MAAM4wB,eAAiB+rB,sBAAmD57C,KAAKf,MAAM4wB,eAAgB+uB,GAG1G5+C,KAAKf,MAAMqwB,UAAY,EACvBtvB,KAAKmmC,2BACN,CAEM2Y,0BAA0BF,GACR,MAAnBA,EAAWv8C,IACbrC,KAAKf,MAAM4wB,eAAenC,cAAe,SAElC1tB,KAAKf,MAAM4wB,eAAenC,aAInC1tB,KAAKf,MAAMqwB,UAAY,EACvBtvB,KAAKmmC,2BACN,CAEM4Y,kBAAkBlnC,GACnBA,EACF7X,KAAKf,MAAM4wB,eAAeoL,SAAWpjB,EAAYxV,WAE1CrC,KAAKf,MAAM4wB,eAAeoL,SAInCj7B,KAAKf,MAAMqwB,UAAY,EACvBtvB,KAAKmmC,2BACN,CAEM6Y,iBAAiBC,GACtBj/C,KAAKf,MAAMqwB,UAAY2vB,EAAU3vB,UACjCtvB,KAAKf,MAAMuuB,SAAWyxB,EAAUzxB,SAEhCxtB,KAAKmmC,2BACN,CAEM+Y,wCAAwCrzC,GAC7C7L,KAAKgF,QAAQmzB,SAAS,CAAC,qBAAqBtsB,UAC7C,CAEMo9B,6BAEL,MAAM3b,EAAO,IAAIloB,MACjBkoB,EAAK9rB,KAAKxB,KAAKf,MAAMuwB,cAAexvB,KAAKf,MAAMswB,YAC/CvvB,KAAK6E,qBAAqByD,MAAMouC,GAAkByI,mBAAoB7xB,GAGtEttB,KAAKf,MAAMmuC,oCACXC,kBAAgCrtC,KAAK+rC,mBAAoB/rC,KAAKf,OAC9De,KAAKo/C,2BAELp/C,KAAK8E,eAAeggB,8BAA8B,+BACnD,CAEMu6B,oDACL,GAAIr/C,KAAKs8C,UAAUC,UAAYv8C,KAAKs8C,UAAUC,SAASptC,OAAS,EAAG,CACjE,MAAMyrC,EAAuB,IAAIx1C,MACjCpF,KAAKs8C,UAAUC,SAAS34C,QAAS2H,IAC/BA,EAASivC,cAAc52C,QAAS82C,KACzBA,GAAaC,wBAChBC,EAAqBp5C,KAAKk5C,GAAa7uC,KAAvC,EAFJ,GAMF7L,KAAK2kC,iBAAiB/W,gCAAgCgtB,GAAsBp1C,UAAW8mB,IACjFA,GACFtsB,KAAK68C,cAAL,EAGL,CACF,CAEM9S,kBAAkBC,GACvBhqC,KAAKf,MAAMswB,WAAaya,EACxBhqC,KAAKmmC,2BACN,CAEM8D,qBAAqBC,GAC1BlqC,KAAKf,MAAMuwB,cAAgB0a,EAC3BlqC,KAAKmmC,2BACN,CAEMmZ,wCACL,MAAMC,EAAYz3C,KAAKoC,UAAUlK,KAAKf,MAAM4wB,gBACtC2vB,EC5bJ,MAAOC,GACQrlC,aAACmlC,GAAmBhwB,EAAoBC,GACzD,MAAMkwB,GAAmBC,aACnBC,GAA6BC,gBACjCN,GACAhwB,EACAC,EACAswB,UACAC,eAEIC,GAAoCH,gBACxCN,GACAhwB,EACAC,EACAswB,UACAC,sBAEIE,GAAyCJ,gBAC7CN,GACAhwB,EACAC,EACAswB,UACAC,2BAIFL,UAAiBA,iBAAiBQ,aAAeC,kBAA0CJ,cAAgC,MAC3HL,GAAiBU,2BAA6BC,yCAAoF,CAChIT,KAEFF,GAAiBY,eAAiB,+CAGlCZ,GAAiBA,iBAAiBa,aAAeJ,kBAA0CJ,qBAAuC,MAClIL,GAAiBc,2BAA6BH,yCAAoF,CAChIL,KAEFN,GAAiBe,eAAiB,2DAGlCf,GAAiBA,iBAAiBgB,aAAeP,kBAC/CJ,0BACA,MAEFL,GAAiBiB,2BAA6BN,yCAAoF,CAChIJ,KAEFP,GAAiBkB,eAAiB,sEAGlClB,GAAiBA,iBAAiBmB,aAAe,gBACjDnB,GAAiBA,iBAAiBoB,yBAA0B,EAC5DpB,GAAiBqB,2BAA6BV,yCAAoF,CAChIT,GACAI,GACAC,KAEFP,GAAiBsB,eAAiB,yDAE3BtB,EACR,GDgY2CD,MACxCF,EACAv/C,KAAKf,MAAMswB,WACXvvB,KAAKf,MAAMuwB,eAEbxvB,KAAKoX,QAAQO,KAAKspC,IAA4C,CAC5Dj9C,KAAMw7C,EACNxnC,WAAW,GAEd,CAEMkpC,sBAAsBz7C,GAC3BA,EAAMo4C,kBACN79C,KAAK4hB,uBAAuB0I,eAC7B,CAEM+f,8BAA8BC,GACnCtqC,KAAK4kC,kBAAkBlpB,cAAc4uB,GACrCtqC,KAAKf,MAAM4wB,eAAe0a,WAAaD,EAGvCtqC,KAAKf,MAAMqwB,UAAY,EACvBtvB,KAAKmmC,2BACN,CAEMgb,+CACDnhD,KAAKs8C,UAAUC,UAAYv8C,KAAKs8C,UAAUC,SAASptC,OAAS,GAC9DnP,KAAK2kC,iBAAiBhX,wCAAwCnoB,UAAWmlB,IACvE,MAAM2sB,EAA4BD,gBAAmD1sB,GAClE3qB,KAAKi7C,WAAWtjC,KAAKqgC,EAAoC,CAC1Eh0C,KAAMszC,EACNt/B,WAAW,IAEFopC,kBAAkBttC,YAAYtO,UAAW8xC,KAClD,MAAM7oB,GAA8B4oB,cAClCC,GACAt3C,KAAKs8C,UAAUC,SAASp1C,IAAKzI,IAAMA,GAAEmN,OAEvC7L,KAAK2kC,iBAAiBlW,4BAA4BA,IAA6BjpB,UAAW8mB,KACpFA,IACFtsB,KAAK68C,cAAL,EAFJ,EALF,EAaL,CAEOL,8BAA8BtpC,GAChCA,GAASA,EAAM/D,OAAS,GAC1BnP,KAAK2kC,iBACF7Z,+BACC9qB,KAAKqhD,WAAWh7C,OAAQ3H,IAAOA,EAAEgvB,cACjC1tB,KAAK+4C,KACL7lC,GAED1N,UAAW8mB,IACNA,GACFtsB,KAAK68C,cAAL,EAIT,CAEOI,SAAS1xC,GACfvL,KAAK2kC,iBACFnY,QAAQjhB,EAASM,KAAMN,EAASjC,KAAM,IAAMtJ,KAAKy9C,QAAQlyC,IACzD/F,UAAW8mB,IACNA,GACFtsB,KAAK68C,cAAL,EAGP,CAEOM,iBAAiBjqC,GACnBA,GAASA,EAAM/D,OAAS,GAC1BnP,KAAK2kC,iBACF/X,kBAAkB1Z,EAAO,IAAMlT,KAAK29C,gBAAgBzqC,IACpD1N,UAAW8mB,IACNA,GACFtsB,KAAK68C,cAAL,EAIT,CAEOY,QAAQlyC,GACdvL,KAAK2kC,iBACF7X,OAAOvhB,EAASM,KAAMN,EAASjC,KAAMiC,EAAS4tC,UAAW,KACxDn5C,KAAKi9C,SAAS1xC,EAAd,GAED/F,UAAW8mB,IACNA,GACFtsB,KAAK68C,cAAL,EAGP,CAEOc,gBAAgBzqC,GAClBA,GAASA,EAAM/D,OAAS,GAC1BnP,KAAK2kC,iBACF1X,iBAAiB/Z,EAAO,IAAMlT,KAAKm9C,iBAAiBjqC,IACpD1N,UAAW8mB,IACNA,GACFtsB,KAAK68C,cAAL,EAIT,CAEOyE,mBAAmBhW,GACzB,MAAMhe,EAAOttB,KAAK6E,qBAAqBwK,KAAKqnC,GAAkByI,oBAC9Dn/C,KAAKf,MAAM4sC,SAASP,EAAqBhe,GACzCttB,KAAKopC,0BAA4BppC,KAAKf,MAAMoqC,0BAC7C,CAEOkY,YAENvhD,KAAKs8C,UAAU1e,OAChB,CAEOsO,gBAAgB3B,GACtBvqC,KAAKyZ,WAAa,IAAI0yB,IAAgB5B,GACtCvqC,KAAK4kC,kBAAkBlpB,cAAc6uB,EACtC,CAEOiX,QAGN,OAFAxhD,KAAKo/C,2BAEEp/C,KAAK2kC,iBAAiBlX,iBAAiBztB,KAAKf,MAAM4wB,eAD5C7vB,KAAKf,MAAMswB,WAAa,IAAMvvB,KAAKf,MAAMuwB,cACyBxvB,KAAKf,MAAMqwB,UAAWtvB,KAAKf,MAAMuuB,SACjH,CAEOmb,WAAW95B,GAEjB,OADyB7O,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKf,MAAO4P,EAAU,mBAE9G7O,KAAKktC,eAAc,IACZ,IAEJltC,KAAKf,QACRe,KAAKf,MAAQ,IAAI2wB,KAGnB5vB,KAAKshD,oBAAoBzyC,IAElB,EACR,CAEOguC,eACN78C,KAAKyhD,YAAa,EAClBzhD,KAAKwhD,QAAQh8C,UAAWwD,IACtBhJ,KAAKuhD,YACLvhD,KAAK0hD,cAAgB14C,EAAO04C,cAG5B1hD,KAAKqhD,WAAaM,kCAA+C34C,EAAO+hB,MAAO,MAG/E/qB,KAAK+4C,KAAO4I,mBAAgC34C,EAAO+hB,OAEnD/qB,KAAKshD,oBAAmB,GAGxBthD,KAAK4hD,mBAAmB5hD,KAAKf,MAAM4wB,gBACnCwd,kBAAgCrtC,KAAK+rC,mBAAoB/rC,KAAKf,OAE1D+J,EAAOqtB,aACTr2B,KAAK6hD,gBAAkB74C,EAAOqtB,WAAWyrB,WAAWD,gBACpD7hD,KAAK+hD,kBAAoB/4C,EAAOqtB,WAAWyrB,WAAWC,kBACtD/hD,KAAKgiD,yBAA2Bh5C,EAAOqtB,WAAWyrB,WAAWE,yBAC7DhiD,KAAKiiD,WAAaj5C,EAAOqtB,WAAWyrB,WAAWljC,MAC/C5e,KAAKw4C,UAAYH,iBAAkCrvC,EAAOqtB,WAAWjvB,OAAQ4B,EAAO8uC,eAEpF93C,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAKkiD,YAAc,IAAIC,IAAYniD,KAAKoiD,sBAAsBC,UAA3C,IAIvBriD,KAAK8E,eAAeof,kBACpBlkB,KAAKyhD,YAAa,GAErB,CAEOtb,4BACNnmC,KAAKksC,gBAAgBlsC,KAAKf,MAAM4wB,eAAe0a,YAE/CvqC,KAAKiF,uBAAuBqD,MAAM,iBAAkBtI,KAAKf,OAEzDe,KAAK6E,qBAAqByD,MAAMouC,GAAkB4L,2BAA4BtiD,KAAKf,MAAMuuB,UAEzFxtB,KAAKo/C,2BAELp/C,KAAKktC,eACN,CAEOA,cAAc5U,GAAa,GACjCt4B,KAAKgF,QAAQmzB,SAAS,GAAI,CACxBC,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKf,QAC3Co5B,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,IAE5B,CAEOiqB,uBAAuB1yB,EAAgCwc,GAC7D,IAAImW,GACJ,OACEA,GADsC,IAApC3yB,EAAeinB,kBAA4D,IAAlCjnB,EAAemnB,eACvC,IAAIvG,IAAW,IAAK,uBAC9B5gB,EAAeinB,kBAAoB,EACzB,IAAIrG,IAAW,IAAK,uBAC9B5gB,EAAemnB,gBAAkB,EACvB,IAAIvG,IAAW,IAAK,wBAEpB,KAGjBzwC,KAAKyiD,uBAAyBD,KAChCxiD,KAAKyiD,qBAAuB,KAC5BpW,GAAmB,KAGhBrsC,KAAKyiD,sBAAwBziD,KAAKyiD,qBAAqBpgD,MAAQmgD,GAAiBngD,OACnFrC,KAAKyiD,qBAAuBD,GAC5BnW,GAAmB,GAEdA,CACR,CAEOuV,mBAAmB/xB,GACzB,IAAIwc,GAAmB,EAGvBrsC,KAAK0iD,wBAA0B7yB,EAAenC,aAAe,IAAM,IAGnE1tB,KAAKksC,gBAAgBrc,EAAe0a,YAGpC8B,EAAmBrsC,KAAK2iD,wBAAwB9yB,EAAgBwc,GAGhEA,EAAmBrsC,KAAK4iD,qCAAqC/yB,EAAgBwc,GAG7EA,EAAmBrsC,KAAKuiD,uBAAuB1yB,EAAgBwc,GAG/DA,EAAmBrsC,KAAK6iD,eAAehzB,EAAgBwc,GAEnDA,GACFrsC,KAAKktC,eAER,CAEOyV,wBAAwB9yB,EAAgCwc,GAC9D,MAAMyW,GAAQrH,8BAAkD5rB,GAEhE,OAAI7vB,KAAK+iD,2BAA6BD,KACpC9iD,KAAK+iD,yBAA2B,KAChC1W,GAAmB,KAGhBrsC,KAAK+iD,0BAA4B/iD,KAAK+iD,2BAA6BD,IAAOzgD,OAC7ErC,KAAK+iD,yBAA2BD,IAAOzgD,IACvCgqC,GAAmB,GAGdA,CACR,CAEOuW,qCAAqC/yB,EAAgCwc,GAC3E,MAAMyW,GAAQlH,wBAAqD/rB,EAAeC,4BAElF,OAAI9vB,KAAKgjD,wCAA0CF,KACjD9iD,KAAKgjD,sCAAwC,KAC7C3W,GAAmB,KAGhBrsC,KAAKgjD,uCAAyChjD,KAAKgjD,wCAA0CF,IAAOzgD,OACvGrC,KAAKgjD,sCAAwCF,IAAOzgD,IACpDgqC,GAAmB,GAGdA,CACR,CAEOwW,eAAehzB,EAAgCwc,GAErD,MAAMpR,GAAWpL,EAAeoL,SAAWpL,EAAeoL,SAAW,KAC/DgoB,GAAYjjD,KAAKqhD,WAAWtgC,KAAMg4B,IAASA,GAAK12C,MAAQ44B,IAE9D,OAAIj7B,KAAKkjD,eAAiBD,KACxBjjD,KAAKkjD,aAAeD,GACpB5W,GAAmB,GAGdA,CACR,CAEOkS,iBACNv+C,KAAKmjD,WAAWC,OAAO,CAAEC,UAAU,GACpC,CAEOjE,2BACNp/C,KAAKsoC,4BAA8BtoC,KAAKf,MAAM6vC,6BAC9C9uC,KAAKopC,0BAA4BppC,KAAKf,MAAMoqC,0BAC7C,EA7rBaqN,wBAAgB,mBAChBA,sBAAqB,yBACrBA,8BAA6B,4DAThCA,IAAiBzyC,wLAAjByyC,GAAiBniC,yFAGjB+uC,KAAY,QACZC,KAAS,sVAJT/uC,gBAAkB,0/MDlD/BvQ,iBAAsE,UAAtEA,CAAsE,iBAAtEA,CAAsE,UAAtEA,CAAsE,QAAtEA,CAAsE,yBAY1DA,mDAA0BuQ,mCAAqC,GAEhEvQ,QACDA,uBACEA,2CAAkBuQ,uBAAyB,GAO5CvQ,QACDA,8BAUAA,uBACEA,2CAAkBuQ,gCAAkC,GAQrDvQ,QACDA,wBACEA,2CAAkBuQ,6CAA+C,GAQlEvQ,QACDA,wBACEA,2CAAkBuQ,+BAAiC,GAOpDvQ,YAGLA,mBAAyB,YAAzBA,CAAyB,0BAInBA,8CAAqBuQ,uBAAyB,EAA9CvQ,CAA+C,2CACvBuQ,0BAA4B,EADpDvQ,CAA+C,wCAExBuQ,8BAA4B,GAIrDvQ,QACAA,sBACEA,gCAASuQ,iCAA+B,GAWxCvQ,qBAAUA,0BAAaA,kBAOjCA,mBAAoB,YAApBA,CAAoB,aAGdA,uCA6MFA,cAKNA,+CA8CAA,qDAjWOA,0GAEDA,wCAAuB,qDAAvBA,CAAuB,mCAAvBA,CAAuB,4BAMhBA,kHAIDA,0CAIAA,qCAAwB,2DAAxBA,CAAwB,kBAAxBA,CAAwB,uBAAxBA,CAAwB,4CAAxBA,CAAwB,uDAQvBA,yDAWDA,2DAA0C,qBAA1CA,CAA0C,yCAA1CA,CAA0C,kBAA1CA,CAA0C,iCAA1CA,CAA0C,qDAA1CA,CAA0C,wDAU1CA,wEAAuD,qBAAvDA,CAAuD,sDAAvDA,CAAuD,kBAAvDA,CAAuD,8CAAvDA,CAAuD,sDAAvDA,CAAuD,gEAUvDA,mDAAkC,qBAAlCA,CAAkC,wCAAlCA,CAAkC,kBAAlCA,CAAkC,+BAAlCA,CAAkC,+CAgBlCA,gDAA+B,yDAM/BA,sEAQAA,2DAaDA,mWCtDGpF,OAKD63C,EAAb,oDE/CM,MAAOtL,GAAa,0WCGpB,MAAO5H,GACoCppB,yCAACqpB,GAC9C,IAAI9P,EAAU,EAEd,OAAoD,IAAhD8P,EAAeC,8BACjB/P,IAGiD,IAA/C8P,EAAeE,6BACjBhQ,IAG6C,IAA3C8P,EAAeG,yBACjBjQ,IAGuD,IAArD8P,EAAe+f,mCACjB7vB,IAGiD,IAA/C8P,EAAeggB,6BACjB9vB,IAGFA,EAAU8P,EAAetU,cAAgBwE,EAAU,EAAIA,EAEhDA,CACR,CAE+CvZ,0CAACqpB,GAC/C,IAAI9P,EAAU,EAEd,OAAyD,IAArD8P,EAAe+f,mCACjB7vB,IAGiD,IAA/C8P,EAAeggB,6BACjB9vB,IAGmD,IAAjD8P,EAAeI,+BACjBlQ,IAGiD,IAA/C8P,EAAeK,6BACjBnQ,IAG8C,IAA5C8P,EAAeM,0BACjBpQ,IAGFA,EAAU8P,EAAeO,qBAAuBrQ,EAAU,EAAIA,EAEvDA,CACR,CAE6BvZ,wBAACqV,GAC7B,MAAMwU,EAAsBjkC,KAAKkkC,YAAY,IAAIC,MAEjD,OAAI1U,IAEGA,EAAa2U,eAChBH,EAAoBP,6BAA+B,IAEnB,IAA9BjU,EAAa2U,eACfH,EAAoBP,6BAA+B,IAEnB,IAA9BjU,EAAa2U,eACfH,EAAoBP,6BAA+B,GAIhDjU,EAAa4U,WAChBJ,EAAoBN,4BAA8B,IAEtB,IAA1BlU,EAAa4U,WACfJ,EAAoBN,4BAA8B,IAEtB,IAA1BlU,EAAa4U,WACfJ,EAAoBN,4BAA8B,GAI/ClU,EAAa6U,8BAChBL,EAAoBL,wBAA0B,IAEC,IAA7CnU,EAAa6U,8BACfL,EAAoBL,wBAA0B,IAEC,IAA7CnU,EAAa6U,8BACfL,EAAoBL,wBAA0B,GAI3CnU,EAAai0B,sBAChBzf,EAAoBuf,kCAAoC,IAEjB,IAArC/zB,EAAai0B,sBACfzf,EAAoBuf,kCAAoC,IAEjB,IAArC/zB,EAAai0B,sBACfzf,EAAoBuf,kCAAoC,KAIrD/zB,EAAak0B,iBAA2D,IAAxCl0B,EAAak0B,gBAAgBx0C,UAChE80B,EAAoBwf,4BAA8B,GAEhDh0B,EAAak0B,kBAAqF,IAAlEl0B,EAAak0B,gBAAgB9gD,QAAQ+gD,kBACvE3f,EAAoBwf,4BAA8B,GAGlDh0B,EAAak0B,kBACwD,IAArEl0B,EAAak0B,gBAAgB9gD,QAAQ+gD,qBAC+B,IAApEn0B,EAAak0B,gBAAgB9gD,QAAQ+gD,oBAErC3f,EAAoBwf,4BAA8B,IAGtDxf,EAAoB9U,cAAgBM,EAAaN,cAC1C8U,CACR,CAE8B7pB,yBAACmqB,GAC9B,MAAMN,EAAsBjkC,KAAKkkC,YAAY,IAAIC,MAEjD,OAAII,IAEGA,EAAcmf,sBACjBzf,EAAoBuf,kCAAoC,IAEhB,IAAtCjf,EAAcmf,sBAChBzf,EAAoBuf,kCAAoC,IAEhB,IAAtCjf,EAAcmf,sBAChBzf,EAAoBuf,kCAAoC,KAIrDjf,EAAcof,iBAA4D,IAAzCpf,EAAcof,gBAAgBx0C,UAClE80B,EAAoBwf,4BAA8B,GAEhDlf,EAAcof,kBAAsF,IAAnEpf,EAAcof,gBAAgB9gD,QAAQ+gD,kBACzE3f,EAAoBwf,4BAA8B,GAGlDlf,EAAcof,kBACwD,IAAtEpf,EAAcof,gBAAgB9gD,QAAQ+gD,qBAC+B,IAArErf,EAAcof,gBAAgB9gD,QAAQ+gD,oBAEtC3f,EAAoBwf,4BAA8B,GAI/Clf,EAAcH,eACjBH,EAAoBJ,8BAAgC,IAEnB,IAA/BU,EAAcH,eAChBH,EAAoBJ,8BAAgC,IAEnB,IAA/BU,EAAcH,eAChBH,EAAoBJ,8BAAgC,GAIjDU,EAAcF,WACjBJ,EAAoBH,4BAA8B,IAErB,IAA3BS,EAAcF,WAChBJ,EAAoBH,4BAA8B,IAErB,IAA3BS,EAAcF,WAChBJ,EAAoBH,4BAA8B,GAI/CS,EAAcC,+BACjBP,EAAoBF,yBAA2B,IAEE,IAA/CQ,EAAcC,+BAChBP,EAAoBF,yBAA2B,IAEE,IAA/CQ,EAAcC,+BAChBP,EAAoBF,yBAA2B,IAInDE,EAAoBD,qBAAuBO,EAAcP,qBAElDC,CACR,CAE+B7pB,0BAAC6d,GAC/B,MAAMgM,EAAsBjkC,KAAKkkC,YAAY,IAAIC,MAEjD,OAAIlM,IAEGA,EAAeyrB,sBAClBzf,EAAoBuf,kCAAoC,IAEf,IAAvCvrB,EAAeyrB,sBACjBzf,EAAoBuf,kCAAoC,IAEf,IAAvCvrB,EAAeyrB,sBACjBzf,EAAoBuf,kCAAoC,KAIrDvrB,EAAe0rB,iBAA6D,IAA1C1rB,EAAe0rB,gBAAgBx0C,UACpE80B,EAAoBwf,4BAA8B,GAEhDxrB,EAAe0rB,kBAAuF,IAApE1rB,EAAe0rB,gBAAgB9gD,QAAQ+gD,kBAC3E3f,EAAoBwf,4BAA8B,GAGlDxrB,EAAe0rB,kBACwD,IAAvE1rB,EAAe0rB,gBAAgB9gD,QAAQ+gD,qBAC+B,IAAtE3rB,EAAe0rB,gBAAgB9gD,QAAQ+gD,oBAEvC3f,EAAoBwf,4BAA8B,IAG/Cxf,CACR,CAEwB7pB,mBAACqpB,GACxBA,SAAeO,qBAAuB,GACtCP,EAAeC,6BAA+B,EAC9CD,EAAeE,4BAA8B,EAC7CF,EAAeG,wBAA0B,EACzCH,EAAe+f,kCAAoC,EACnD/f,EAAeggB,4BAA8B,EAC7ChgB,EAAeI,8BAAgC,EAC/CJ,EAAetU,cAAgB,GAC/BsU,EAAeK,4BAA8B,EAC7CL,EAAeM,yBAA2B,EACnCN,CACR,CAE2BrpB,sBAAC6pB,EAA+CxU,GAE1E,OAAyD,IAArDwU,EAAoBP,6BACtBjU,EAAa2U,kBAAexsB,EACkC,IAArDqsB,EAAoBP,6BAC7BjU,EAAa2U,cAAe,EACkC,IAArDH,EAAoBP,+BAC7BjU,EAAa2U,cAAe,GAI0B,IAApDH,EAAoBN,4BACtBlU,EAAa4U,cAAWzsB,EACqC,IAApDqsB,EAAoBN,4BAC7BlU,EAAa4U,UAAW,EACqC,IAApDJ,EAAoBN,8BAC7BlU,EAAa4U,UAAW,GAI0B,IAAhDJ,EAAoBL,wBACtBnU,EAAa6U,iCAA8B1sB,EACc,IAAhDqsB,EAAoBL,wBAC7BnU,EAAa6U,6BAA8B,EACc,IAAhDL,EAAoBL,0BAC7BnU,EAAa6U,6BAA8B,GAIiB,IAA1DL,EAAoBuf,kCACtB/zB,EAAai0B,yBAAsB9rC,EACgC,IAA1DqsB,EAAoBuf,kCAC7B/zB,EAAai0B,qBAAsB,EACgC,IAA1Dzf,EAAoBuf,oCAC7B/zB,EAAai0B,qBAAsB,GAImB,IAApDzf,EAAoBwf,4BACtBh0B,EAAak0B,qBAAkB/rC,EAC8B,IAApDqsB,EAAoBwf,4BAC7Bh0B,EAAak0B,gBAAkB,CAACC,gBAC6B,IAApD3f,EAAoBwf,8BAC7Bh0B,EAAak0B,gBAAkB,CAACC,kBAA4BA,mBAG9Dn0B,EAAaN,cAAgB8U,EAAoB9U,cAE1CM,CACR,CAE4BrV,uBAAC6pB,EAA+CM,GAE3E,OAA8D,IAA1DN,EAAoBuf,kCACtBjf,EAAcmf,yBAAsB9rC,EAC+B,IAA1DqsB,EAAoBuf,kCAC7Bjf,EAAcmf,qBAAsB,EAC+B,IAA1Dzf,EAAoBuf,oCAC7Bjf,EAAcmf,qBAAsB,GAIkB,IAApDzf,EAAoBwf,4BACtBlf,EAAcof,qBAAkB/rC,EAC6B,IAApDqsB,EAAoBwf,4BAC7Blf,EAAcof,gBAAkB,CAACC,gBAC4B,IAApD3f,EAAoBwf,8BAC7Blf,EAAcof,gBAAkB,CAACC,kBAA4BA,mBAIL,IAAtD3f,EAAoBJ,8BACtBU,EAAcH,kBAAexsB,EACkC,IAAtDqsB,EAAoBJ,8BAC7BU,EAAcH,cAAe,EACkC,IAAtDH,EAAoBJ,gCAC7BU,EAAcH,cAAe,GAIyB,IAApDH,EAAoBH,4BACtBS,EAAcF,cAAWzsB,EACoC,IAApDqsB,EAAoBH,4BAC7BS,EAAcF,UAAW,EACoC,IAApDJ,EAAoBH,8BAC7BS,EAAcF,UAAW,GAI0B,IAAjDJ,EAAoBF,yBACtBQ,EAAcC,kCAA+B5sB,EACa,IAAjDqsB,EAAoBF,yBAC7BQ,EAAcC,8BAA+B,EACa,IAAjDP,EAAoBF,2BAC7BQ,EAAcC,8BAA+B,GAE/CD,EAAcP,qBAAuBC,EAAoBD,qBAElDO,CACR,CAE6BnqB,wBAAC6pB,EAA+ChM,GAE5E,OAA8D,IAA1DgM,EAAoBuf,kCACtBvrB,EAAeyrB,yBAAsB9rC,EAC8B,IAA1DqsB,EAAoBuf,kCAC7BvrB,EAAeyrB,qBAAsB,EAC8B,IAA1Dzf,EAAoBuf,oCAC7BvrB,EAAeyrB,qBAAsB,GAIiB,IAApDzf,EAAoBwf,4BACtBxrB,EAAe0rB,qBAAkB/rC,EAC4B,IAApDqsB,EAAoBwf,4BAC7BxrB,EAAe0rB,gBAAkB,CAACC,gBAC2B,IAApD3f,EAAoBwf,8BAC7BxrB,EAAe0rB,gBAAkB,CAACC,kBAA4BA,mBAEzD3rB,CACR,mdCrVWh0B,qBAEEA,0DAASA,+BAAqB,GAQ9BA,oBAAUA,iBAAKA,eAPfA,6FAsBFA,qBAEEA,0DAASA,+BAAqB,GAQ9BA,oBAAUA,iBAAKA,eAPfA,8FAuENA,kBAA2E,qCAGvEA,4EAAyBA,0CAAoC,GAK/DA,8CAJEA,4DAA2C,wCAA3CA,CAA2C,+GAY/CA,kBAA2E,uCAGvEA,4EAAyBA,0CAAoC,GAI9DA,kCAHCA,uDAAsC,qEAAtCA,CAAsC,kHAQ1CA,kBAEEA,sEAASA,uBAAmB,GAM5BA,SACFA,8CANEA,6CAA6C,qBAG7CA,8BAEAA,0EAUVA,kBAAiC,eAE7BA,0DAASA,gCAAsB,GAO/BA,uBACAA,mBAAwCA,4CAAgCA,kBAPxEA,sJCrHC,IAAMwgC,EAAb,MAAM,MAAOA,EA6EX1kC,YACU+2B,EACA4N,EACAC,GACArxB,GACAsxB,EACA//B,EACAo2C,EACAn2C,EACA+/B,GACA7/B,GACAC,GACAC,IAXAlF,uBACAA,yBACAA,yBACAA,sBACAA,yBACAA,4BACAA,kBACAA,sBACAA,6BACAA,gBACAA,+BACAA,kCAlEHA,mCAAgC,qBAChCA,mCAAgC,mBAChCA,iBAA2B,IAAIqvB,KAK/BrvB,kCAA8B,EAE9BA,yBAAuC,CAC5C,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,SAAUinB,MAAO,4BAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAElCvrB,0BAAwC,CAC7C,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,SAAUinB,MAAO,4BAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAElCvrB,2BAAyC,CAC9C,CAAEsE,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAGlCvrB,kBAA6B,IAAI8kC,KAEjC9kC,eAAY,WAEZA,uCAA4C+kC,0BAE5C/kC,wCAA6CglC,2BAC7ChlC,yCAA8CglC,2BAC9ChlC,6BAA0BilC,0BAG1BjlC,4CAAwC,EACxCA,mBAA+B,IAAIklC,IACnCllC,kCAA8B,EAC9BA,kCAA8B,EAC9BA,gCAA4B,EAC5BA,oBAAiB,EACjBA,qBAAkB,EAClBA,sBAAmB,EACnBA,8BAA2B,qBAC3BA,8BAA2B,mBAE1BA,sBAAiC,IAAIE,KAgB3CF,KAAK6jD,4BAA8B7jD,KAAKkF,0BAA0BsH,gBAAgBq3C,4BAElF7jD,KAAK0kC,kBAAkB1yB,SAAShS,KAAKolC,WAErCplC,KAAKqlC,SAAW,CACd,IAAIC,IACFtlC,KAAKulC,iBACL,qBACA,cACAvlC,KAAKwlC,sBACL,8BAEF,IAAIF,IAAgBtlC,KAAKylC,gBAAiB,0BAAwB,KAAMzlC,KAAK0lC,qBAAsB,0BACnG,IAAIJ,IAAgBtlC,KAAK2lC,eAAgB,mBAAoB,WAAY3lC,KAAK4lC,oBAAqB,2BAEtG,CAEMC,6BAA6B5B,GAClCjkC,KAAK8lC,oBAAoB7B,GACzBjkC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKgmC,+BAA+B3xB,QAGpCrU,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKkmC,kBAGLlmC,KAAKmmC,2BACN,CAEMC,6BAA6BC,GAClCrmC,KAAKqmC,oBAAsBA,EAG3BrmC,KAAKsmC,mBAAqBD,GAAqB96B,SAAW86B,EAAoB96B,SAASM,KAAO,KAE9F7L,KAAKumC,aAAahC,cAActZ,cAAgBjrB,KAAKsmC,mBAAqB,CAACtmC,KAAKsmC,oBAAsB,KACtGtmC,KAAKwmC,YAAY/W,aAAaxE,cAAgBjrB,KAAKsmC,mBAAqB,CAACtmC,KAAKsmC,oBAAsB,KACpGtmC,KAAKymC,cAAcxO,eAAehN,cAAgBjrB,KAAKsmC,mBAAqB,CAACtmC,KAAKsmC,oBAAsB,KACxGtmC,KAAKymC,cAAcxO,eAAe3J,iCAAkC,EAGpEtuB,KAAK0mC,yCAGL1mC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAK4mC,+BAA+BvyB,OAApC,GAEFrU,KAAKkmC,kBAGLlmC,KAAKmmC,2BACN,CAEMU,sBACLrD,eAA2CxjC,KAAKikC,qBAChDjkC,KAAK6lC,6BAA6B7lC,KAAKikC,oBACxC,CAEM6C,gCACL9mC,KAAKwmC,YAAYO,cACjB/mC,KAAKwmC,YAAY/W,aAAauX,iBAAqCC,OAAOjnC,KAAKknC,0BAC/ElnC,KAAKwmC,YAAY/W,aAAa0X,qBAAmDF,OAAOjnC,KAAKonC,mCAE7FpnC,KAAKumC,aAAaQ,cAClB/mC,KAAKumC,aAAahC,cAAcyC,iBAAqCC,OAAOjnC,KAAKknC,0BACjFlnC,KAAKumC,aAAahC,cAAc4C,qBAAoDF,OAAOjnC,KAAKqnC,oCAEhGrnC,KAAKymC,cAAcM,cACnB/mC,KAAKymC,cAAcxO,eAAe+O,iBAAqCC,OAAOjnC,KAAKknC,0BACnFlnC,KAAKymC,cAAcxO,eAAekP,qBAAoDF,OAAOjnC,KAAKsnC,qCAElGtnC,KAAKmmC,2BACN,CAEMoB,sBACLvnC,KAAKomC,6BAA6B,KACnC,CAEM0d,uBACL,MAAMz9C,EAAS,IAAImpC,IACnBnpC,EAAOg+B,UAAW,EAClBh+B,EAAO0nC,UAAYrM,gBAA4BA,YAAwBA,uCAAoD,IAC3H,MAAM6d,EAAYz3C,KAAKoC,UAAU7D,GAC3Bm5C,GCjOJ,MAAOuE,EACQ3pC,aAACmlC,EAAmBhwB,EAAoBC,GACzD,MAAMw0B,GAAoBrE,YAEpBsE,GAA0CpE,eAC9CN,EACAhwB,EACAC,EACAswB,SACAC,2BAEImE,EAAiDrE,eACrDN,EACAhwB,EACAC,EACAswB,SACAC,kCAIFiE,UAAkBtE,iBAAiBQ,aAAeC,kBAChDJ,0BACA,MAEFiE,GAAkB5D,2BAA6BC,wCAAoF,CACjI4D,KAEFD,GAAkB1D,eAAiB,8DAGnC0D,GAAkBtE,iBAAiBa,aAAeJ,kBAChDJ,iCACA,MAEFiE,GAAkBxD,2BAA6BH,wCAAoF,CACjI6D,IAEFF,GAAkBvD,eAAiB,iEAGnCuD,GAAkBtE,iBAAiBmB,aAAe,gBAClDmD,GAAkBtE,iBAAiBoB,yBAA0B,EAC7DkD,GAAkBjD,2BAA6BV,wCAAoF,CACjI4D,GACAC,IAEFF,GAAkBhD,eAAiB,0DAGnCgD,GAAkBG,UAAY,gDAC9BH,GAAkBI,eAAiB,0CACnCJ,GAAkBK,eAAiB,0CACnCL,GAAkBM,aAAe,wFACjCN,GAAkBO,aAAe,wFAE1BP,EACR,GDyK2CD,MAA8DxE,EAAW,UAAW,OAE9Hv/C,KAAKi7C,WAAWtjC,KAAKspC,IAA4C,CAC/Dj9C,KAAMw7C,GACNxnC,WAAW,GAEd,CAEMwsC,mBACL,OAAIxkD,KAAK6jD,4BACA,kBAEF,IACR,CAGMrc,gBAAgBhuB,GACrBA,EAAOO,gBACR,CAGM0tB,WAAWjuB,GAChBxZ,KAAKsT,cAAciG,qBAAqBC,EAAQxZ,KAAK0nC,qBACtD,CAGMC,gBACL,IAAIC,EAAY5nC,KAAK6nC,WAAWlpB,MAAQ,EACpCipB,EAAY,IACdA,EAAY5nC,KAAKqlC,SAASl2B,OAAS,GAErCnP,KAAK8nC,WAAW9nC,KAAKqlC,SAASuC,GAC/B,CAGMG,cAEL/nC,KAAK8nC,WAAW9nC,KAAKqlC,UADFrlC,KAAK6nC,WAAWlpB,MAAQ,GAAK3e,KAAKqlC,SAASl2B,QAE/D,CAEM8mB,cACLj2B,KAAKgoC,gCAAgC7R,cACrCn2B,KAAKioC,iBAAiBxmC,OACtBzB,KAAKioC,iBAAiB1d,UACvB,CAEM2d,WACLloC,KAAKykD,gCAAkChJ,wBAA4CiJ,4BAIjF1kD,KAAK6nC,WADH7nC,KAAKgF,QAAQ5C,IAAI0M,WAAW,sBACZ9O,KAAKqlC,SAASrlC,KAAKulC,kBAC5BvlC,KAAKgF,QAAQ5C,IAAI0M,WAAW,mBACnB9O,KAAKqlC,SAASrlC,KAAK2lC,gBAEnB3lC,KAAKqlC,SAASrlC,KAAKylC,iBAGvCzlC,KAAK6kC,qBAAqB9e,yBACvB3f,QAAKmsB,MAAUvyB,KAAKioC,mBACpBziC,UAAW0gB,IACVlmB,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAKooC,aAAaliB,iBAAmBA,EAEjClmB,KAAKqoC,mBACProC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,0BACtFlnC,KAAKwoC,oBACdxoC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BACvFlnC,KAAKyoC,uBACdzoC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BAA9D,GAIzClnC,KAAK82B,gBAAgBgB,YAAY1xB,QAAKmsB,MAAUvyB,KAAKioC,mBAAmBziC,UAAWlH,IACjF0B,KAAK0oC,4BACL1oC,KAAK2oC,WAAWrqC,EAAO05B,QACvBh4B,KAAK8lC,oBAAoB9lC,KAAKikC,qBAC9BjkC,KAAK4oC,uBACL5oC,KAAK6oC,uBACL7oC,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAK8oC,wBAAL,GAGF9oC,KAAKgoC,gCAAkChoC,KAAKsT,cAAc+F,4BAA4B7T,UAAU,KAC1FxF,KAAKsT,cAAcyyB,4CACrB/lC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKgmC,+BAA+B3xB,SAC3BrU,KAAKsT,cAAcqzB,sCAC5B3mC,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAK4mC,+BAA+BvyB,SAEpCrU,KAAK4T,UAAL,EAGL,CAEMm1B,+BAA+BX,GACpCpoC,KAAKwmC,YAAY/W,aAAek1B,mBAC9B3kD,KAAKwmC,YAAY/W,aACjB2Y,EACApoC,KAAKqoC,oBAEProC,KAAKumC,aAAahC,cAAgBogB,oBAChC3kD,KAAKumC,aAAahC,cAClB6D,EACApoC,KAAKwoC,qBAEPxoC,KAAKymC,cAAcxO,eAAiB0sB,qBAClC3kD,KAAKymC,cAAcxO,eACnBmQ,EACApoC,KAAKyoC,sBAGPzoC,KAAKkmC,kBACLlmC,KAAKmmC,2BAA0B,EAChC,CAEM8C,6BAEL,MAAM3b,EAAO,IAAIloB,MACbpF,KAAKqoC,oBACProC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKwmC,YAAa/B,EAAiB0E,8BAChEnpC,KAAKopC,0BAA4BppC,KAAKwmC,YAAY6C,2BAClDrpC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,2BACtFlnC,KAAKwoC,qBACdxoC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKumC,aAAc9B,EAAiB6E,+BACjEtpC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,uBACdzoC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKymC,cAAehC,EAAiB8E,gCAClEvpC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BAGnGlnC,KAAK8E,eAAeggB,8BAA8B,+BACnD,CAEM0kB,yCAAyCC,GAE9CzpC,KAAKknC,yBAA2BuC,EAEhC,IAAIC,EAAsBD,EACE,OAAxBC,IACFA,EAAsB,MAIxB1pC,KAAK6E,qBAAqByD,MAAMm8B,EAAiBkF,4BAA6BD,GAG9E1pC,KAAK4pC,sCAAwC5pC,KAAKooC,aAAapB,mBAAqBhnC,KAAKknC,yBAErFlnC,KAAKqoC,oBACProC,KAAKopC,0BAA4BppC,KAAKwmC,YAAY6C,2BAClDrpC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,2BACtFlnC,KAAKwoC,qBACdxoC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,uBACdzoC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BAGnGlnC,KAAK8E,eAAeggB,8BAA8B,2CACnD,CAEMlR,WACL5T,KAAKsT,cAAcY,yBAAyB,KACK,mBAA3ClU,KAAKimC,4BAA4B3hC,MACnCtE,KAAK6pC,iCAAiCj2B,WACc,mBAA3C5T,KAAKimC,4BAA4B3hC,OAC1CtE,KAAK8pC,+BAA+Bl2B,UAApC,EAGL,CAEMm2B,kBAAkBC,GACnBhqC,KAAKqoC,mBACProC,KAAKwmC,YAAYjX,WAAaya,EACrBhqC,KAAKwoC,oBACdxoC,KAAKumC,aAAahX,WAAaya,EACtBhqC,KAAKyoC,uBACdzoC,KAAKymC,cAAclX,WAAaya,GAGlChqC,KAAKmmC,2BAA0B,EAChC,CAEM8D,qBAAqBC,GACtBlqC,KAAKqoC,mBACProC,KAAKwmC,YAAYhX,cAAgB0a,EACxBlqC,KAAKwoC,oBACdxoC,KAAKumC,aAAa/W,cAAgB0a,EACzBlqC,KAAKyoC,uBACdzoC,KAAKymC,cAAcjX,cAAgB0a,GAGrClqC,KAAKmmC,2BAA0B,EAChC,CAEM2B,WAAWqC,GAChBnqC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAK6nC,WAAasC,EAClBnqC,KAAK6E,qBAAqByD,MAAMm8B,EAAiB2F,kBAAmBpqC,KAAK6nC,WAAWxoB,KAAKtD,QAAQ,KAAM,KACvG/b,KAAK0oC,4BACL1oC,KAAK2oC,gBAAW/wB,GAChB5X,KAAK8lC,oBAAoB9lC,KAAKikC,qBAC9BjkC,KAAK4oC,uBACL5oC,KAAK6oC,uBACL7oC,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAK8oC,wBACN,CAEMuB,8BAA8BC,GACnCtqC,KAAK4kC,kBAAkBlpB,cAAc4uB,GAErCtqC,KAAKumC,aAAahC,cAAcgG,WAAaD,EAC7CtqC,KAAKwmC,YAAY/W,aAAa8a,WAAaD,EAC3CtqC,KAAKymC,cAAcxO,eAAesS,WAAaD,EAE/CtqC,KAAKkmC,kBAELlmC,KAAKmmC,2BACN,CAEMqE,aAAahxB,GAClB,MAAMixB,EAASjxB,EAAOkxB,OACtB,GAAID,EAAQ,CACV,MAAM5qC,GAAQ4qC,EAAOE,kBACjBnxB,EAAOlV,MAAM2L,KAAM7O,IAASA,KAASqpC,EAAOnmC,SAC9CzE,GAAMyE,MAAQ,CAACmmC,EAAOnmC,OAEzB,CACF,CAEOokC,4BACN1oC,KAAK4qC,wBAA0BC,mBAC3B7qC,KAAKqoC,mBACProC,KAAK8qC,4BAA8BC,oBAC1B/qC,KAAKwoC,qBAELxoC,KAAKyoC,wBADdzoC,KAAK8qC,4BAA8BE,mBAItC,CAEOlF,oBAAoB7B,GAC1BjkC,KAAKikC,oBAAsBA,EAEvBjkC,KAAKqoC,mBACProC,KAAKwmC,YAAY/W,aAAe+T,kBAA8CS,EAAqBjkC,KAAKwmC,YAAY/W,cAC3GzvB,KAAKwoC,oBACdxoC,KAAKumC,aAAahC,cAAgBf,mBAChCS,EACAjkC,KAAKumC,aAAahC,eAEXvkC,KAAKyoC,uBACdzoC,KAAKymC,cAAcxO,eAAiBuL,oBAClCS,EACAjkC,KAAKymC,cAAcxO,iBAIvBj4B,KAAKirC,wCACN,CAEOC,cAAcjgB,GAChBA,GAAiBA,EAAc9b,OAAS,EAC1CnP,KAAK2kC,iBAAiBzL,QAAQjO,EAAc,IAAIzlB,UAAWmlB,IACzD3qB,KAAKqmC,oBAAsB,IAAI8E,IAC/BnrC,KAAKqmC,oBAAoB96B,SAAW,IAAI6/B,IACxCprC,KAAKqmC,oBAAoB96B,SAASC,KAAOmf,EAAInf,KAC7CxL,KAAKqmC,oBAAoB96B,SAASjC,KAAOqhB,EAAIrhB,KAC7CtJ,KAAKqmC,oBAAoB96B,SAASM,KAAO8e,EAAI9e,KAE7C7L,KAAK0mC,wCAAL,IAGF1mC,KAAKqmC,oBAAsB,KAC3BrmC,KAAK0mC,yCAER,CAEOkC,uBACF5oC,KAAKqoC,oBACHroC,KAAKwmC,aAAexmC,KAAKwmC,YAAY/W,cACvCzvB,KAAKkrC,cAAclrC,KAAKwmC,YAAY/W,aAAaxE,eAIjDjrB,KAAKwoC,qBACHxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAahC,eACzCvkC,KAAKkrC,cAAclrC,KAAKumC,aAAahC,cAActZ,eAInDjrB,KAAKyoC,sBACHzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcxO,gBAC3Cj4B,KAAKkrC,cAAclrC,KAAKymC,cAAcxO,eAAehN,cAG1D,CAEOogB,qBAAqBC,GACvBtrC,KAAKwmC,cACPxmC,KAAKurC,kCAAkC9G,EAAiB0E,6BAA8BnpC,KAAKwmC,YAAa8E,GACxGtrC,KAAKwrC,8CACH/G,EAAiBkF,4BACjB3pC,KAAKwmC,YAAY/W,aACjBzvB,KAAKonC,kCACLkE,IAGAtrC,KAAKumC,eACPvmC,KAAKurC,kCAAkC9G,EAAiB6E,8BAA+BtpC,KAAKumC,aAAc+E,GAC1GtrC,KAAKwrC,8CACH/G,EAAiBkF,4BACjB3pC,KAAKumC,aAAahC,cAClBvkC,KAAKqnC,mCACLiE,IAGAtrC,KAAKymC,gBACPzmC,KAAKurC,kCAAkC9G,EAAiB8E,+BAAgCvpC,KAAKymC,cAAe6E,GAC5GtrC,KAAKwrC,8CACH/G,EAAiBkF,4BACjB3pC,KAAKymC,cAAcxO,eACnBj4B,KAAKsnC,oCACLgE,GAGL,CAEOE,8CACNnpC,EACAopC,EACAC,GACAJ,IAEA,MAAMK,EAA8B3rC,KAAK6E,sBAAsBwK,KAAKhN,GAKlErC,KAAKknC,yBAJFyE,GAE6B3rC,KAAK4rC,0BAKlC5rC,KAAKooC,cAAcpB,kBAAoBsE,MACrCtrC,KAAKooC,aAGRpoC,KAAKooC,aAAapB,iBAAmBhnC,KAAKknC,yBAF1ClnC,KAAKooC,aAAeuc,UAA4C3kD,KAAKknC,yBAA0BwE,IAKjGD,EAAezE,iBAAqCC,OAAOjnC,KAAKooC,aAAapB,mBAG/EhnC,KAAK4pC,sCAAwC5pC,KAAKooC,cAAcpB,mBAAqBhnC,KAAKknC,wBAC3F,CAEOqE,kCAAkClpC,EAAapD,EAA2BqsC,IAChF,MAAMhe,GAAOttB,KAAK6E,qBAAqBwK,KAAKhN,GAC5CpD,EAAM4sC,SAASP,GAAqBhe,IACpCttB,KAAKopC,0BAA4BnqC,EAAMoqC,0BACxC,CAEOyC,cAAc7sC,GAChBe,KAAK+rC,mBAAmBxc,aAAetwB,EAAMswB,aAC/CvvB,KAAK+rC,mBAAmBxc,WAAatwB,EAAMswB,YAGzCvvB,KAAK+rC,mBAAmBvc,gBAAkBvwB,EAAMuwB,gBAClDxvB,KAAK+rC,mBAAmBvc,cAAgBvwB,EAAMuwB,eAG5CxvB,KAAK+rC,mBAAmBC,eAAiB/sC,EAAM+sC,eACjDhsC,KAAK+rC,mBAAmBC,aAAe/sC,EAAM+sC,cAG3ChsC,KAAK+rC,mBAAmBE,wBAA0BhtC,EAAMgtC,wBAC1DjsC,KAAK+rC,mBAAmBE,sBAAwBhtC,EAAMgtC,sBAEzD,CAEOpD,uBACF7oC,KAAKqoC,mBACProC,KAAK8rC,cAAc9rC,KAAKwmC,aACfxmC,KAAKwoC,oBACdxoC,KAAK8rC,cAAc9rC,KAAKumC,cACfvmC,KAAKyoC,sBACdzoC,KAAK8rC,cAAc9rC,KAAKymC,cAE3B,CAEO0B,wBAAwBC,GAC1BpoC,KAAKqoC,qBACFD,IACHA,EAAeuc,UAA4C3kD,KAAKknC,yBAA0BlnC,KAAKonC,oCAE7FpnC,KAAKwmC,cACP4B,EAAeuc,qBACb3kD,KAAKwmC,YAAY/W,aACjB2Y,EAAaliB,iBACblmB,KAAKknC,4BAIPlnC,KAAKwoC,sBACFJ,IACHA,EAAeuc,UAA4C3kD,KAAKknC,yBAA0BlnC,KAAKqnC,qCAE7FrnC,KAAKumC,eACP6B,EAAeuc,sBACb3kD,KAAKumC,aAAahC,cAClB6D,EAAaliB,iBACblmB,KAAKknC,4BAIPlnC,KAAKyoC,uBACFL,IACHA,EAAeuc,UAA4C3kD,KAAKknC,yBAA0BlnC,KAAKsnC,sCAE7FtnC,KAAKymC,gBACP2B,EAAeuc,uBACb3kD,KAAKymC,cAAcxO,eACnBmQ,EAAaliB,iBACblmB,KAAKknC,4BAKXlnC,KAAKooC,aAAeA,CACrB,CAEO8D,gBAAgB3B,GACtBvqC,KAAKyZ,WAAa,IAAI0yB,IAAgB5B,GACtCvqC,KAAK4kC,kBAAkBlpB,cAAc6uB,EACtC,CAEOzB,yBACF9oC,KAAKqoC,oBACHroC,KAAKwmC,aAAexmC,KAAKwmC,YAAY/W,cACvCzvB,KAAKksC,gBAAgBlsC,KAAKwmC,YAAY/W,aAAa8a,YAInDvqC,KAAKwoC,qBACHxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAahC,eACzCvkC,KAAKksC,gBAAgBlsC,KAAKumC,aAAahC,cAAcgG,YAIrDvqC,KAAKyoC,sBACHzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcxO,gBAC3Cj4B,KAAKksC,gBAAgBlsC,KAAKymC,cAAcxO,eAAesS,WAG5D,CAEOlC,mBACN,OAAOroC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAK2lC,gBAAgBpa,KACrE,CAEOid,oBACN,OAAOxoC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKylC,iBAAiBla,KACtE,CAEOkd,qBACN,OAAOzoC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKulC,kBAAkBha,KACvE,CAEO6gB,iBAAiBv9B,EAAkBw9B,GACzCA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKwmC,YACL33B,EACA41B,EAAiB6H,gBAGnBtsC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKwmC,YAAY/W,cACvCzvB,KAAKikC,oBAAsBT,oBAAgDxjC,KAAKwmC,YAAY/W,cAC5FzvB,KAAKooC,aAAeuc,qBAClB3kD,KAAKwmC,YAAY/W,aACjBzvB,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEOG,kBAAkB39B,EAAkBw9B,GAC1CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKumC,aACL13B,EACA41B,EAAiBgI,iBAGnBzsC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKumC,aAAahC,eACxCvkC,KAAKikC,oBAAsBT,qBAAiDxjC,KAAKumC,aAAahC,eAC9FvkC,KAAKooC,aAAeuc,sBAClB3kD,KAAKumC,aAAahC,cAClBvkC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEOK,mBAAmB79B,EAAkBw9B,GAC3CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKymC,cACL53B,EACA41B,EAAiBkI,kBAGnB3sC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKymC,cAAcxO,gBACzCj4B,KAAKikC,oBAAsBT,sBAAkDxjC,KAAKymC,cAAcxO,gBAChGj4B,KAAKooC,aAAeuc,uBAClB3kD,KAAKymC,cAAcxO,eACnBj4B,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEO1D,WAAW95B,GACjB,IAAIw9B,GAAmB,EACvBrsC,KAAKqrC,sBAAsBx8B,GAEvB7O,KAAKqoC,qBACPgE,EAAmBrsC,KAAKosC,iBAAiBv9B,EAAUw9B,GACnDrsC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,0BAC/FlnC,KAAKopC,0BAA4BppC,KAAKwmC,YAAY6C,2BAClDrpC,KAAK4sC,0CACL5sC,KAAK6sC,4CAGH7sC,KAAKwoC,sBACP6D,EAAmBrsC,KAAKwsC,kBAAkB39B,EAAUw9B,GACpDrsC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BAChGlnC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAK8sC,0CACL9sC,KAAK+sC,6CAGH/sC,KAAKyoC,uBACP4D,EAAmBrsC,KAAK0sC,mBAAmB79B,EAAUw9B,GACrDrsC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BACjGlnC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKgtC,2CACLhtC,KAAKitC,6CAGHZ,GACFrsC,KAAKktC,eAAc,EAGtB,CAEOhH,kBACFlmC,KAAKwmC,cACPxmC,KAAKwmC,YAAYlX,UAAY,GAG3BtvB,KAAKumC,eACPvmC,KAAKumC,aAAajX,UAAY,GAG5BtvB,KAAKymC,gBACPzmC,KAAKymC,cAAcnX,UAAY,EAElC,CAEO4Z,kBAAkB5b,EAAgBruB,EAA2BkuC,IACnE7f,EAAK9rB,KAAKvC,EAAMuwB,cAAevwB,EAAMswB,YACrCvvB,KAAK6E,qBAAqByD,MAAM6kC,GAAoB7f,GAGpDruB,EAAMmuC,oCACNC,iBAAgCrtC,KAAK+rC,mBAAoB9sC,EAC1D,CAEOknC,0BAA0B7N,GAAa,GAC7Ct4B,KAAKiF,uBAAuBqD,MAAMm8B,EAAiB6H,eAAgBtsC,KAAKwmC,aACxExmC,KAAKiF,uBAAuBqD,MAAMm8B,EAAiBgI,gBAAiBzsC,KAAKumC,cACzEvmC,KAAKiF,uBAAuBqD,MAAMm8B,EAAiBkI,iBAAkB3sC,KAAKymC,eAEtEzmC,KAAKqoC,oBACProC,KAAKsoC,4BAA8BtoC,KAAKwmC,YAAY+B,sCAAsCvoC,KAAKknC,0BAC/FlnC,KAAKopC,0BAA4BppC,KAAKwmC,YAAY6C,4BACzCrpC,KAAKwoC,qBACdxoC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BAChGlnC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,4BAC1CrpC,KAAKyoC,uBACdzoC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BACjGlnC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,4BAGtDrpC,KAAKktC,cAAc5U,EACpB,CAEO4U,cAAc5U,GAAa,GAC7Bt4B,KAAKqoC,mBACProC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKwmC,cAC3CnO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAKwoC,oBACdxoC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKumC,eAC3ClO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAKyoC,sBACdzoC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKymC,gBAC3CpO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,IAG9B,CAEOiU,iBAAiBlmC,GACvB,IAAIyD,EAAe,KACfzD,EAAO4kB,eAAiB5kB,EAAO4kB,cAAc9b,OAAS,IACxDrF,EAAezD,EAAO4kB,cAAc,IAEtCjrB,KAAKsmC,mBAAqBx8B,CAC3B,CAEOgjC,0CAEN9sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwmC,YAAa,KAAM/B,EAAiB6H,gBAE1GtsC,KAAKwmC,YAAY/W,aAAaxE,cAAgBjrB,KAAKumC,aAAahC,cAActZ,cAC9EjrB,KAAKwmC,YAAY/W,aAAak0B,gBAAkB3jD,KAAKumC,aAAahC,cAAcof,gBAGhF3jD,KAAKwmC,YAAY/W,aAAayI,iBAAmBl4B,KAAKumC,aAAahC,cAAcrM,iBACjFl4B,KAAKwmC,YAAY/W,aAAauX,iBAAmBhnC,KAAKumC,aAAahC,cAAcyC,iBAE5EhnC,KAAKumC,aAAahC,cAAcyC,kBAAyE,IAArDhnC,KAAKumC,aAAahC,cAAcyC,kBA0CvFhnC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,KAC/CztC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MA9C1C3tC,KAAKwmC,YAAY/W,aAAa+d,kBAC5BxtC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmBxtC,KAAKumC,aAAahC,cAAciJ,iBACjFxtC,KAAKwmC,YAAY/W,aAAage,eAAiBztC,KAAKumC,aAAahC,cAAckJ,gBACtEztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKwmC,YAAY/W,aAAa+d,iBAAmBxtC,KAAKumC,aAAahC,cAAcmJ,gBACjF1tC,KAAKwmC,YAAY/W,aAAage,eAAiBztC,KAAKumC,aAAahC,cAAcoJ,eAGjF3tC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MACrC3tC,KAAKwmC,YAAY/W,aAAaie,iBACnC1tC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKwmC,YAAY/W,aAAaie,gBAAkB1tC,KAAKumC,aAAahC,cAAciJ,iBAChFxtC,KAAKwmC,YAAY/W,aAAake,cAAgB3tC,KAAKumC,aAAahC,cAAckJ,gBACrEztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKwmC,YAAY/W,aAAaie,gBAAkB1tC,KAAKumC,aAAahC,cAAcmJ,gBAChF1tC,KAAKwmC,YAAY/W,aAAake,cAAgB3tC,KAAKumC,aAAahC,cAAcoJ,eAGhF3tC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,OAE3CztC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKwmC,YAAY/W,aAAa6d,eAAiBttC,KAAKumC,aAAahC,cAAciJ,iBAC/ExtC,KAAKwmC,YAAY/W,aAAa8d,aAAevtC,KAAKumC,aAAahC,cAAckJ,gBACpEztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKwmC,YAAY/W,aAAa6d,eAAiBttC,KAAKumC,aAAahC,cAAcmJ,gBAC/E1tC,KAAKwmC,YAAY/W,aAAa8d,aAAevtC,KAAKumC,aAAahC,cAAcoJ,eAG/E3tC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,KAC/CztC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MAWlD3tC,KAAKwmC,YAAY/W,aAAame,mBAAqB,KACnD5tC,KAAKwmC,YAAY/W,aAAaoe,iBAAmB,KAGjD7tC,KAAKiF,uBAAuBqD,MAAMm8B,EAAiB6H,eAAgBtsC,KAAKwmC,YACzE,CAEOwG,2CAENhtC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwmC,YAAa,KAAM/B,EAAiB6H,gBAE1GtsC,KAAKwmC,YAAY/W,aAAaxE,cAAgBjrB,KAAKymC,cAAcxO,eAAehN,cAChFjrB,KAAKwmC,YAAY/W,aAAak0B,gBAAkB3jD,KAAKymC,cAAcxO,eAAe0rB,gBAGlF3jD,KAAKwmC,YAAY/W,aAAayI,iBAAmBl4B,KAAKymC,cAAcxO,eAAeC,iBACnFl4B,KAAKwmC,YAAY/W,aAAauX,iBAAmBhnC,KAAKymC,cAAcxO,eAAe+O,iBAE9EhnC,KAAKymC,cAAcxO,eAAe+O,kBAA2E,IAAvDhnC,KAAKymC,cAAcxO,eAAe+O,kBA0C3FhnC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,KAC/CztC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MA9C1C3tC,KAAKwmC,YAAY/W,aAAa+d,kBAC5BxtC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmBxtC,KAAKymC,cAAcxO,eAAeuV,iBACnFxtC,KAAKwmC,YAAY/W,aAAage,eAAiBztC,KAAKymC,cAAcxO,eAAewV,gBACxEztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKwmC,YAAY/W,aAAa+d,iBAAmBxtC,KAAKymC,cAAcxO,eAAeyV,gBACnF1tC,KAAKwmC,YAAY/W,aAAage,eAAiBztC,KAAKymC,cAAcxO,eAAe0V,eAGnF3tC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MACrC3tC,KAAKwmC,YAAY/W,aAAaie,iBACnC1tC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKwmC,YAAY/W,aAAaie,gBAAkB1tC,KAAKymC,cAAcxO,eAAeuV,iBAClFxtC,KAAKwmC,YAAY/W,aAAake,cAAgB3tC,KAAKymC,cAAcxO,eAAewV,gBACvEztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKwmC,YAAY/W,aAAaie,gBAAkB1tC,KAAKymC,cAAcxO,eAAeyV,gBAClF1tC,KAAKwmC,YAAY/W,aAAake,cAAgB3tC,KAAKymC,cAAcxO,eAAe0V,eAGlF3tC,KAAKwmC,YAAY/W,aAAa6d,eAAiB,KAC/CttC,KAAKwmC,YAAY/W,aAAa8d,aAAe,KAC7CvtC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,OAE3CztC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKwmC,YAAY/W,aAAa6d,eAAiBttC,KAAKymC,cAAcxO,eAAeuV,iBACjFxtC,KAAKwmC,YAAY/W,aAAa8d,aAAevtC,KAAKymC,cAAcxO,eAAewV,gBACtEztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKwmC,YAAY/W,aAAa6d,eAAiBttC,KAAKymC,cAAcxO,eAAeyV,gBACjF1tC,KAAKwmC,YAAY/W,aAAa8d,aAAevtC,KAAKymC,cAAcxO,eAAe0V,eAGjF3tC,KAAKwmC,YAAY/W,aAAa+d,iBAAmB,KACjDxtC,KAAKwmC,YAAY/W,aAAage,eAAiB,KAC/CztC,KAAKwmC,YAAY/W,aAAaie,gBAAkB,KAChD1tC,KAAKwmC,YAAY/W,aAAake,cAAgB,MAWlD3tC,KAAKwmC,YAAY/W,aAAame,mBAAqB,KACnD5tC,KAAKwmC,YAAY/W,aAAaoe,iBAAmB,KAGjD7tC,KAAKiF,uBAAuBqD,MAAMm8B,EAAiB6H,eAAgBtsC,KAAKwmC,YACzE,CAEOoG,0CAEN5sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM9B,EAAiBgI,iBAE3GzsC,KAAKumC,aAAahC,cAActZ,cAAgBjrB,KAAKwmC,YAAY/W,aAAaxE,cAC9EjrB,KAAKumC,aAAahC,cAAcof,gBAAkB3jD,KAAKwmC,YAAY/W,aAAak0B,gBAGhF3jD,KAAKumC,aAAahC,cAAcrM,iBAAmBl4B,KAAKwmC,YAAY/W,aAAayI,iBACjFl4B,KAAKumC,aAAahC,cAAcyC,iBAAmBhnC,KAAKwmC,YAAY/W,aAAauX,iBAE5EhnC,KAAKwmC,YAAY/W,aAAauX,kBAAuE,IAAnDhnC,KAAKwmC,YAAY/W,aAAauX,kBA+BnFhnC,KAAKumC,aAAahC,cAAciJ,iBAAmB,KACnDxtC,KAAKumC,aAAahC,cAAckJ,eAAiB,KACjDztC,KAAKumC,aAAahC,cAAcmJ,gBAAkB,KAClD1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB,MAjC5C3tC,KAAKumC,aAAahC,cAAciJ,kBAC9BxtC,KAAKwmC,YAAY/W,aAAa6d,gBAChCttC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKwmC,YAAY/W,aAAa6d,eACjFttC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKwmC,YAAY/W,aAAa8d,cACtEvtC,KAAKwmC,YAAY/W,aAAa+d,kBACvCxtC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKwmC,YAAY/W,aAAa+d,iBACjFxtC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKwmC,YAAY/W,aAAage,gBACtEztC,KAAKwmC,YAAY/W,aAAaie,kBACvC1tC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKwmC,YAAY/W,aAAaie,gBACjF1tC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKwmC,YAAY/W,aAAake,eAGjF3tC,KAAKumC,aAAahC,cAAcmJ,gBAAkB,KAClD1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB,OAE5C3tC,KAAKwmC,YAAY/W,aAAa6d,gBAChCttC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKwmC,YAAY/W,aAAa6d,eAChFttC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKwmC,YAAY/W,aAAa8d,cACrEvtC,KAAKwmC,YAAY/W,aAAa+d,kBACvCxtC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKwmC,YAAY/W,aAAa+d,iBAChFxtC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKwmC,YAAY/W,aAAage,gBACrEztC,KAAKwmC,YAAY/W,aAAaie,kBACvC1tC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKwmC,YAAY/W,aAAaie,gBAChF1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKwmC,YAAY/W,aAAake,eAGhF3tC,KAAKumC,aAAahC,cAAciJ,iBAAmB,KACnDxtC,KAAKumC,aAAahC,cAAckJ,eAAiB,MASrDztC,KAAKumC,aAAahC,cAAcuJ,YAAc,KAC9C9tC,KAAKumC,aAAahC,cAAcwJ,UAAY,KAG5C/tC,KAAKiF,uBAAuBqD,MAAMm8B,EAAiBgI,gBAAiBzsC,KAAKumC,aAC1E,CAEO0G,4CAENjtC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM9B,EAAiBgI,iBAE3GzsC,KAAKumC,aAAahC,cAActZ,cAAgBjrB,KAAKymC,cAAcxO,eAAehN,cAClFjrB,KAAKumC,aAAahC,cAAcof,gBAAkB3jD,KAAKymC,cAAcxO,eAAe0rB,gBAGpF3jD,KAAKumC,aAAahC,cAAcrM,iBAAmBl4B,KAAKymC,cAAcxO,eAAeC,iBACrFl4B,KAAKumC,aAAahC,cAAcyC,iBAAmBhnC,KAAKymC,cAAcxO,eAAe+O,iBAEhFhnC,KAAKymC,cAAcxO,eAAe+O,kBAA2E,IAAvDhnC,KAAKymC,cAAcxO,eAAe+O,kBAyB3FhnC,KAAKumC,aAAahC,cAAciJ,iBAAmB,KACnDxtC,KAAKumC,aAAahC,cAAckJ,eAAiB,KACjDztC,KAAKumC,aAAahC,cAAcmJ,gBAAkB,KAClD1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB,MA3B5C3tC,KAAKumC,aAAahC,cAAciJ,kBAC9BxtC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKymC,cAAcxO,eAAeuV,iBACrFxtC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKymC,cAAcxO,eAAewV,gBAC1EztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKumC,aAAahC,cAAciJ,iBAAmBxtC,KAAKymC,cAAcxO,eAAeyV,gBACrF1tC,KAAKumC,aAAahC,cAAckJ,eAAiBztC,KAAKymC,cAAcxO,eAAe0V,eAGrF3tC,KAAKumC,aAAahC,cAAcmJ,gBAAkB,KAClD1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB,OAE5C3tC,KAAKymC,cAAcxO,eAAeuV,kBACpCxtC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKymC,cAAcxO,eAAeuV,iBACpFxtC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKymC,cAAcxO,eAAewV,gBACzEztC,KAAKymC,cAAcxO,eAAeyV,kBAC3C1tC,KAAKumC,aAAahC,cAAcmJ,gBAAkB1tC,KAAKymC,cAAcxO,eAAeyV,gBACpF1tC,KAAKumC,aAAahC,cAAcoJ,cAAgB3tC,KAAKymC,cAAcxO,eAAe0V,eAGpF3tC,KAAKumC,aAAahC,cAAciJ,iBAAmB,KACnDxtC,KAAKumC,aAAahC,cAAckJ,eAAiB,MASrDztC,KAAKumC,aAAahC,cAAcuJ,YAAc,KAC9C9tC,KAAKumC,aAAahC,cAAcwJ,UAAY,KAG5C/tC,KAAKiF,uBAAuBqD,MAAMm8B,EAAiBgI,gBAAiBzsC,KAAKumC,aAC1E,CAEOsG,2CAEN7sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAMhC,EAAiBkI,kBAE5G3sC,KAAKymC,cAAcxO,eAAehN,cAAgBjrB,KAAKwmC,YAAY/W,aAAaxE,cAChFjrB,KAAKymC,cAAcxO,eAAe0rB,gBAAkB3jD,KAAKwmC,YAAY/W,aAAak0B,gBAGlF3jD,KAAKymC,cAAcxO,eAAeC,iBAAmBl4B,KAAKwmC,YAAY/W,aAAayI,iBACnFl4B,KAAKymC,cAAcxO,eAAe+O,iBAAmBhnC,KAAKwmC,YAAY/W,aAAauX,iBAE9EhnC,KAAKwmC,YAAY/W,aAAauX,kBAAuE,IAAnDhnC,KAAKwmC,YAAY/W,aAAauX,kBA+BnFhnC,KAAKymC,cAAcxO,eAAeuV,iBAAmB,KACrDxtC,KAAKymC,cAAcxO,eAAewV,eAAiB,KACnDztC,KAAKymC,cAAcxO,eAAeyV,gBAAkB,KACpD1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB,MAjC9C3tC,KAAKymC,cAAcxO,eAAeuV,kBAChCxtC,KAAKwmC,YAAY/W,aAAa6d,gBAChCttC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKwmC,YAAY/W,aAAa6d,eACnFttC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKwmC,YAAY/W,aAAa8d,cACxEvtC,KAAKwmC,YAAY/W,aAAa+d,kBACvCxtC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKwmC,YAAY/W,aAAa+d,iBACnFxtC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKwmC,YAAY/W,aAAage,gBACxEztC,KAAKwmC,YAAY/W,aAAaie,kBACvC1tC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKwmC,YAAY/W,aAAaie,gBACnF1tC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKwmC,YAAY/W,aAAake,eAGnF3tC,KAAKymC,cAAcxO,eAAeyV,gBAAkB,KACpD1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB,OAE9C3tC,KAAKwmC,YAAY/W,aAAa6d,gBAChCttC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKwmC,YAAY/W,aAAa6d,eAClFttC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKwmC,YAAY/W,aAAa8d,cACvEvtC,KAAKwmC,YAAY/W,aAAa+d,kBACvCxtC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKwmC,YAAY/W,aAAa+d,iBAClFxtC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKwmC,YAAY/W,aAAage,gBACvEztC,KAAKwmC,YAAY/W,aAAaie,kBACvC1tC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKwmC,YAAY/W,aAAaie,gBAClF1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKwmC,YAAY/W,aAAake,eAGlF3tC,KAAKymC,cAAcxO,eAAeuV,iBAAmB,KACrDxtC,KAAKymC,cAAcxO,eAAewV,eAAiB,MAUvDztC,KAAKiF,uBAAuBqD,MAAMm8B,EAAiBkI,iBAAkB3sC,KAAKymC,cAC3E,CAEOsG,4CAEN/sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAMhC,EAAiBkI,kBAE5G3sC,KAAKymC,cAAcxO,eAAehN,cAAgBjrB,KAAKumC,aAAahC,cAActZ,cAClFjrB,KAAKymC,cAAcxO,eAAe0rB,gBAAkB3jD,KAAKumC,aAAahC,cAAcof,gBAGpF3jD,KAAKymC,cAAcxO,eAAeC,iBAAmBl4B,KAAKumC,aAAahC,cAAcrM,iBACrFl4B,KAAKymC,cAAcxO,eAAe+O,iBAAmBhnC,KAAKumC,aAAahC,cAAcyC,iBAEhFhnC,KAAKumC,aAAahC,cAAcyC,kBAAyE,IAArDhnC,KAAKumC,aAAahC,cAAcyC,kBAyBvFhnC,KAAKymC,cAAcxO,eAAeuV,iBAAmB,KACrDxtC,KAAKymC,cAAcxO,eAAewV,eAAiB,KACnDztC,KAAKymC,cAAcxO,eAAeyV,gBAAkB,KACpD1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB,MA3B9C3tC,KAAKymC,cAAcxO,eAAeuV,kBAChCxtC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKumC,aAAahC,cAAciJ,iBACrFxtC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKumC,aAAahC,cAAckJ,gBAC1EztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKymC,cAAcxO,eAAeuV,iBAAmBxtC,KAAKumC,aAAahC,cAAcmJ,gBACrF1tC,KAAKymC,cAAcxO,eAAewV,eAAiBztC,KAAKumC,aAAahC,cAAcoJ,eAGrF3tC,KAAKymC,cAAcxO,eAAeyV,gBAAkB,KACpD1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB,OAE9C3tC,KAAKumC,aAAahC,cAAciJ,kBAClCxtC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKumC,aAAahC,cAAciJ,iBACpFxtC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKumC,aAAahC,cAAckJ,gBACzEztC,KAAKumC,aAAahC,cAAcmJ,kBACzC1tC,KAAKymC,cAAcxO,eAAeyV,gBAAkB1tC,KAAKumC,aAAahC,cAAcmJ,gBACpF1tC,KAAKymC,cAAcxO,eAAe0V,cAAgB3tC,KAAKumC,aAAahC,cAAcoJ,eAGpF3tC,KAAKymC,cAAcxO,eAAeuV,iBAAmB,KACrDxtC,KAAKymC,cAAcxO,eAAewV,eAAiB,MAUvDztC,KAAKiF,uBAAuBqD,MAAMm8B,EAAiBkI,iBAAkB3sC,KAAKymC,cAC3E,CAEOwE,yCACFjrC,KAAKqoC,mBACHroC,KAAKwmC,aAAexmC,KAAKwmC,YAAY/W,eACvCzvB,KAAKguC,sBAAwBxK,qCAAiExjC,KAAKikC,sBAE5FjkC,KAAKwoC,oBACVxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAahC,gBACzCvkC,KAAKguC,sBAAwBxK,sCAAkExjC,KAAKikC,sBAE7FjkC,KAAKyoC,sBACVzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcxO,iBAC3Cj4B,KAAKguC,sBAAwBxK,sCAAkExjC,KAAKikC,sBAIxGjkC,KAAKiuC,yBAA2BjuC,KAAKkuC,8BACjCluC,KAAKguC,uBAAyBhuC,KAAKguC,sBAAwB,EAC7DhuC,KAAKmuC,6BAA8B,GAEnCnuC,KAAKmuC,6BAA8B,EACnCnuC,KAAKguC,2BAAwBp2B,EAEhC,CAEO8uB,yCAED1mC,KAAKqmC,qBAAqB96B,UAAUM,MAKvC7L,KAAKouC,yBAA2BpuC,KAAKqmC,oBAAoB96B,SAASjC,KAClEtJ,KAAKquC,6BAA8B,EACnCruC,KAAKsuC,sBAAwB,IAN7BtuC,KAAKouC,yBAA2BpuC,KAAKuuC,8BACrCvuC,KAAKquC,6BAA8B,EACnCruC,KAAKsuC,2BAAwB12B,EAMhC,EAlqCa6sB,0CAAmC,mBACnCA,+BAA+B,uBAC/BA,iBAAiB,eACjBA,oBAAoB,2BACpBA,oCAAoC,oBACpCA,gCAAgC,wBAChCA,kBAAkB,gBAClBA,8BAA8B,sCAC9BA,qCAAqC,sBACrCA,iCAAiC,0BACjCA,mBAAmB,wDAlBtBA,GAAgBxgC,yKAAhBwgC,EAAgBlwB,qoBAAhBC,qBAAuB,8CAAvBA,gBAAkB,iDAAlBA,mBAAqB,+CAArBA,iBAAmB,42FDxDhCvQ,iBAAqE,UAArEA,CAAqE,kBAQ/DA,sCACAA,iBAA6F,UAA7FA,CAA6F,yBAIvFA,mDAA0BuQ,mCAAqC,GAEhEvQ,QACDA,iBAA6B,kCAEkDA,mCAAUuQ,kBAAoB,GACzGvQ,oCAAgG,cAE5FA,UACFA,UAGFA,6BAaAA,oCAMC,cAEGA,UACFA,UAGFA,4BAYFA,cAINA,mBAQC,2BAOGA,oDAA2BuQ,oCAAsC,EAAjEvQ,CAAkE,wDAC7BuQ,8CAAgD,GACtFvQ,UAEHA,mBAAyB,YAAzBA,CAAyB,0BAInBA,iDAAwBuQ,0BAA4B,EAApDvQ,CAAqD,wCAChCuQ,uBAAyB,EAD9CvQ,CAAqD,wCAE9BuQ,8BAA4B,GAIrDvQ,QACAA,sBACEA,gCAASuQ,iCAA+B,GAWxCvQ,qBAAUA,0BAAaA,kBAOjCA,mBAAoB,YAApBA,CAAoB,YAApBA,CAAoB,aASZA,0BAUFA,QACAA,mBAKEA,0BASFA,QAEAA,mBACEA,0BAUFA,QACAA,0BACFA,cAKNA,+FAtKMA,wCAAuB,2DAAvBA,CAAuB,qCAAvBA,CAAuB,2BAK0BA,kCAM3CA,0CAMUA,yGACJA,mDAKDA,qDAcDA,mDAKMA,yGACJA,mDAKDA,qDAyBPA,8CAA6B,+JAA7BA,CAA6B,4DAA7BA,CAA6B,oDAA7BA,CAA6B,uDAgB3BA,2DAA0C,yDAO1CA,sEADAA,2DAsBFA,mGAIMA,kCAYNA,mGAIMA,kCAagBA,uDCtGlBpF,OAKD4lC,CAAb,oDExDM,MAAON,GAAwB,qHCO/B,MAAO9U,UAAoBge,IAG/BttC,cACEwS,QACAvS,KAAKwuC,kBAAoB,aACzBxuC,KAAKyuC,qBAAuB,OAC5BzuC,KAAK+mC,cAEL/mC,KAAK0uC,aAAajK,sCAClBzkC,KAAK2uC,aAAalK,kCAClBzkC,KAAK4uC,sBAAsBnK,gCAC5B,CAEM8D,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAgB5B,OAfI7qC,KAAKyvB,aAAauX,kBAA2D,IAAvChnC,KAAKyvB,aAAauX,oBAC1D+H,EAAwB/uC,KAAKyvB,aAAauX,iBAAiBgI,UAAU5yB,YAEnE2yB,IAA0B7H,IAC5B2H,GAAmB,IAGjB7uC,KAAKyvB,aAAa0X,sBAAmE,IAA3CnnC,KAAKyvB,aAAa0X,uBACjCnnC,KAAKyvB,aAAa0X,qBAAqB6H,UAAU5yB,aAC1C2oB,yBAAgD3oB,aAElFyyB,GAAmB,GAIhBA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyvB,cAAkBzvB,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,cAKd,IAAnCtvB,KAAKyvB,aAAa2U,eACkC,IAAlDpkC,KAAKyvB,aAAa6U,8BAA0F,IAAlDtkC,KAAKyvB,aAAa6U,6BAC5EtkC,KAAKyvB,aAAaxE,eAA4D,IAA3CjrB,KAAKyvB,aAAaxE,cAAc9b,QACpEnP,KAAKyvB,aAAawf,gBAClBjvC,KAAKyvB,aAAa6d,gBAClBttC,KAAKyvB,aAAa+d,kBAClBxtC,KAAKyvB,aAAaie,iBAClB1tC,KAAKyvB,aAAame,oBAClB5tC,KAAKyvB,aAAayf,gBAClBlvC,KAAKyvB,aAAaN,gBACyB,IAA1CnvB,KAAKyvB,aAAai0B,sBAA0E,IAA1C1jD,KAAKyvB,aAAai0B,sBACrC,IAA/B1jD,KAAKyvB,aAAa4U,WAAoD,IAA/BrkC,KAAKyvB,aAAa4U,UACpB,IAAvCrkC,KAAKyvB,aAAayI,kBACjBl4B,KAAKyvB,aAAak0B,iBAClB3jD,KAAKyvB,aAAa8a,YAClBvqC,KAAKyvB,aAAa0f,cAClBnvC,KAAKyvB,aAAa8d,cAClBvtC,KAAKyvB,aAAage,gBAClBztC,KAAKyvB,aAAake,eAClB3tC,KAAKyvB,aAAaoe,kBAClB7tC,KAAKyvB,aAAa2f,cACjBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyvB,aAAe,IAAIC,IACxB1vB,KAAKyvB,aAAayI,iBAAmB,EACrCl4B,KAAKyvB,aAAauX,iBAAmB/B,eACrCjlC,KAAKyvB,aAAa0X,qBAAuBpC,eACzC/kC,KAAKyvB,aAAa2U,cAAe,EACjCpkC,KAAKyvB,aAAa8a,WAAa,GAC/BvqC,KAAKyvB,aAAa4f,iBAAmB,CAAC,SAAU,sBAAuB,WAAY,gBAAiB,UAEpGrvC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyvB,aAAauX,iBAAqCC,OAAOD,GAEjE,EA/FgD,sHCA7C,MAAOlC,UAAqBuI,IAGhCttC,cACEwS,QACAvS,KAAKwuC,kBAAoB,aACzBxuC,KAAKyuC,qBAAuB,OAC5BzuC,KAAK+mC,cAEL/mC,KAAK0uC,aAAajK,uCAClBzkC,KAAK2uC,aAAalK,mCAClBzkC,KAAK4uC,sBAAsBnK,gCAC5B,CAEMmK,sBAAsBW,GAC3B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKukC,cAAcyC,iBAAqCC,OAAOD,GAElE,CAEMuB,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAgB5B,OAfI7qC,KAAKukC,cAAcyC,kBAA4D,IAAxChnC,KAAKukC,cAAcyC,oBAC5D+H,EAAwB/uC,KAAKukC,cAAcyC,iBAAiBgI,UAAU5yB,YAEpE2yB,IAA0B7H,IAC5B2H,GAAmB,IAGjB7uC,KAAKukC,cAAc4C,sBAAoE,IAA5CnnC,KAAKukC,cAAc4C,uBACnCnnC,KAAKukC,cAAc4C,qBAAqB6H,UAAU5yB,aAC3C4oB,0BAAkD5oB,aAEpFyyB,GAAmB,GAIhBA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKukC,eAAmBvkC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKukC,cAAcP,uBACgB,IAApChkC,KAAKukC,cAAcH,cACjBpkC,KAAKukC,cAActZ,eAA6D,IAA5CjrB,KAAKukC,cAActZ,cAAc9b,QACtEnP,KAAKukC,cAAc0K,gBACnBjvC,KAAKukC,cAAciJ,kBACnBxtC,KAAKukC,cAAcuJ,aACnB9tC,KAAKukC,cAAcmJ,iBACnB1tC,KAAKukC,cAAc2K,iBACkC,IAApDlvC,KAAKukC,cAAcC,+BAA6F,IAApDxkC,KAAKukC,cAAcC,+BACpC,IAA3CxkC,KAAKukC,cAAcmf,sBAA2E,IAA3C1jD,KAAKukC,cAAcmf,sBACtC,IAAhC1jD,KAAKukC,cAAcF,WAAqD,IAAhCrkC,KAAKukC,cAAcF,UACrB,IAAxCrkC,KAAKukC,cAAcrM,kBAClBl4B,KAAKukC,cAAcof,iBACnB3jD,KAAKukC,cAAcgG,YACnBvqC,KAAKukC,cAAc4K,cACnBnvC,KAAKukC,cAAckJ,gBACnBztC,KAAKukC,cAAcwJ,WACnB/tC,KAAKukC,cAAcoJ,eACnB3tC,KAAKukC,cAAc6K,cAClBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKukC,cAAgB,IAAIiL,IACzBxvC,KAAKukC,cAAcrM,iBAAmB,EACtCl4B,KAAKukC,cAAcyC,iBAAmB/B,eACtCjlC,KAAKukC,cAAc4C,qBAAuBnC,gBAC1ChlC,KAAKukC,cAAcH,cAAe,EAClCpkC,KAAKukC,cAAcgG,WAAa,GAChCvqC,KAAKukC,cAAc8K,iBAAmB,CAAC,SAAU,sBAAuB,WAAY,UAEpFrvC,KAAKsvC,WACN,EA7FiD,sHCA9C,MAAOpK,UAAsBmI,IAGjCttC,cACEwS,QACAvS,KAAKwuC,kBAAoB,aACzBxuC,KAAKyuC,qBAAuB,OAC5BzuC,KAAK+mC,cAEL/mC,KAAK0uC,aAAajK,wCAClBzkC,KAAK2uC,aAAalK,oCAClBzkC,KAAK4uC,sBAAsBnK,gCAC5B,CAEM8D,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAgB5B,OAfI7qC,KAAKi4B,eAAe+O,kBAA6D,IAAzChnC,KAAKi4B,eAAe+O,oBAC9D+H,EAAwB/uC,KAAKi4B,eAAe+O,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,IAGjB7uC,KAAKi4B,eAAekP,sBAAqE,IAA7CnnC,KAAKi4B,eAAekP,uBACrCnnC,KAAKi4B,eAAekP,qBAAqB6H,UAAU5yB,aAC5C4oB,0BAAkD5oB,aAEpFyyB,GAAmB,GAIhBA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKi4B,gBAAoBj4B,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKi4B,eAAehN,eAA8D,IAA7CjrB,KAAKi4B,eAAehN,cAAc9b,SACpC,IAAnCnP,KAAKi4B,eAAe2sB,aAA0D,IAAnC5kD,KAAKi4B,eAAe2sB,YAChE5kD,KAAKi4B,eAAegX,gBACpBjvC,KAAKi4B,eAAeuV,kBACpBxtC,KAAKi4B,eAAeyV,iBACpB1tC,KAAKi4B,eAAeiX,iBACyB,IAA5ClvC,KAAKi4B,eAAeyrB,sBAA4E,IAA5C1jD,KAAKi4B,eAAeyrB,qBACjC,IAAzC1jD,KAAKi4B,eAAeC,kBACnBl4B,KAAKi4B,eAAe0rB,iBACpB3jD,KAAKi4B,eAAesS,YACpBvqC,KAAKi4B,eAAekX,cACpBnvC,KAAKi4B,eAAewV,gBACpBztC,KAAKi4B,eAAe0V,eACpB3tC,KAAKi4B,eAAemX,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKi4B,eAAiB,IAAI7J,IAC1BpuB,KAAKi4B,eAAeC,iBAAmB,EACvCl4B,KAAKi4B,eAAe+O,iBAAmB/B,eACvCjlC,KAAKi4B,eAAekP,qBAAuBnC,gBAC3ChlC,KAAKi4B,eAAesS,WAAa,GACjCvqC,KAAKi4B,eAAeoX,iBAAmB,CAAC,SAAU,sBAAuB,YAEzErvC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKi4B,eAAe+O,iBAAqCC,OAAOD,GAEnE,EAvFkD,+FCD/C,MAAO6d,EACQzqC,aACjB0qC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAQxjB,uCACRha,EAAwB,IAAIy9B,IAClCz9B,SAAsB09B,aAAeN,EACrCp9B,EAAsBq9B,aAAeA,GAA8BG,EACnEx9B,EAAsBkqB,cAAgBE,UAA0BkT,GAChEt9B,EAAsB29B,UAAYH,EAClCx9B,EAAsB49B,kBAAoB,KAC1C59B,EAAsB69B,eAAiBL,EAAMljB,QAAQjpB,IAAI,GAAI,QAC7D2O,EAAsBu9B,eAAiBA,EAEhCv9B,CACR,CAEyCtN,oCAAC4qC,GACzC,MAAMt9B,EAAwB1nB,KAAK23C,MAAM6N,aAAuB,KAAMR,GAAsB,GAE5Ft9B,SAAsB+9B,uBAAyB,CAACD,WACzC99B,CACR,CAEmCtN,8BAAC4qC,GACnC,MAAMt9B,EAAwB1nB,KAAK23C,MAAM6N,aAAuB,KAAMR,GAAsB,GAC5Ft9B,SAAsB+9B,uBAAyB,CAACD,WACzC99B,CACR,CAEsCtN,iCAAC4qC,EAA8BU,GACpE,IAAIN,EAAeI,iBACfE,IACFN,EAAeI,iBAEjB,MAAM99B,EAAwB1nB,KAAK23C,MAAMyN,EAAc,KAAMJ,GAAsB,GACnFt9B,SAAsB+9B,uBAAyB,CAACD,WACzC99B,CACR,EAzC0C,gDCNvC,MAAOyc,GAAwB,gDCK/B,MAAOghB,GAA0B,wTCIjC,MAAO3hB,EACmCppB,wCAACqpB,GAC7C,IAAI9P,EAAU,EAEd,OAAyD,IAArD8P,EAAe+f,mCACjB7vB,IAGiD,IAA/C8P,EAAeggB,6BACjB9vB,IAGFA,EAAU8P,EAAekiB,YAAchyB,EAAU,EAAIA,EACrDA,EAAU8P,EAAemiB,qBAAuBjyB,EAAU,EAAIA,EAC9DA,EAAU8P,EAAegM,OAAS9b,EAAU,EAAIA,EAC3C8P,EAAeiM,yBAClB/b,EAAU8P,EAAekM,YAAchc,EAAU,EAAIA,EACrDA,EAAU8P,EAAemM,cAAgBjc,EAAU,EAAIA,GAEzDA,EAAU8P,EAAeiM,uBAAyB/b,EAAU,EAAIA,EAChEA,EAAU8P,EAAeoM,mBAAqBlc,EAAU,EAAIA,EAC5DA,EAAU8P,EAAeqM,qBAAuBnc,EAAU,EAAIA,EAEvDA,CACR,CAEqEvZ,gEAACqpB,GACrE,IAAI9P,EAAU3zB,KAAK+vC,iCAAiCtM,GAEpD,OAAqD,IAAjDA,EAAeI,+BACjBlQ,IAGFA,EAAU8P,EAAetU,cAAgBwE,EAAU,EAAIA,EAEhDA,CACR,CAEyDvZ,oDAACqpB,GACzD,IAAI9P,EAAU3zB,KAAK+vC,iCAAiCtM,GACpD9P,SAA+C,IAArC8P,EAAeoiB,kBAA0BlyB,EAAU,EAAIA,EAE1DA,CACR,CAEmCvZ,8BAAC/T,GACnC,MAAM49B,EAAsBjkC,KAAKkkC,YAAY,IAAIC,KACjD,OAAI99B,IAEGA,EAAOq9C,sBACVzf,EAAoBuf,kCAAoC,IAEvB,IAA/Bn9C,EAAOq9C,sBACTzf,EAAoBuf,kCAAoC,IAEvB,IAA/Bn9C,EAAOq9C,sBACTzf,EAAoBuf,kCAAoC,KAIrDn9C,EAAOs9C,iBAAqD,IAAlCt9C,EAAOs9C,gBAAgBx0C,UACpD80B,EAAoBwf,4BAA8B,GAEhDp9C,EAAOs9C,kBAA+E,IAA5Dt9C,EAAOs9C,gBAAgB9gD,QAAQ+gD,iBAC3D3f,EAAoBwf,4BAA8B,GAGlDp9C,EAAOs9C,kBACwD,IAA/Dt9C,EAAOs9C,gBAAgB9gD,QAAQ+gD,oBAC+B,IAA9Dv9C,EAAOs9C,gBAAgB9gD,QAAQ+gD,mBAE/B3f,EAAoBwf,4BAA8B,GAI/Cp9C,EAAO+9B,eACVH,EAAoBJ,8BAAgC,IAE1B,IAAxBx9B,EAAO+9B,eACTH,EAAoBJ,8BAAgC,IAE1B,IAAxBx9B,EAAO+9B,eACTH,EAAoBJ,8BAAgC,GAGtDI,EAAoB0hB,YAAct/C,EAAOs/C,YACzC1hB,EAAoB+L,aAAe3pC,EAAO2pC,aAC1C/L,EAAoB9U,cAAgB9oB,EAAO8oB,cAC3C8U,EAAoB2hB,qBAAuBv/C,EAAOu/C,qBAClD3hB,EAAoBwL,OAASppC,EAAOopC,OACpCxL,EAAoB0L,YAActpC,EAAOspC,YACzC1L,EAAoB2L,cAAgBvpC,EAAOupC,cAC3C3L,EAAoByL,uBAAyBrpC,EAAOqpC,uBACpDzL,EAAoB4L,mBAAqBxpC,EAAOwpC,mBAChD5L,EAAoB6L,qBAAuBzpC,EAAOypC,qBAClD7L,EAAoBgM,mBAAqB5pC,EAAO4pC,mBAChDhM,EAAoBiM,aAAe7pC,EAAO6pC,cAErCjM,CACR,CAEkC7pB,6BAAC/T,GAClC,MAAM49B,EAAsBjkC,KAAKkkC,YAAY,IAAIC,KACjD,OAAI99B,IAEGA,EAAOq9C,sBACVzf,EAAoBuf,kCAAoC,IAEvB,IAA/Bn9C,EAAOq9C,sBACTzf,EAAoBuf,kCAAoC,IAEvB,IAA/Bn9C,EAAOq9C,sBACTzf,EAAoBuf,kCAAoC,KAIrDn9C,EAAOs9C,iBAAqD,IAAlCt9C,EAAOs9C,gBAAgBx0C,UACpD80B,EAAoBwf,4BAA8B,GAEhDp9C,EAAOs9C,kBAA+E,IAA5Dt9C,EAAOs9C,gBAAgB9gD,QAAQ+gD,iBAC3D3f,EAAoBwf,4BAA8B,GAGlDp9C,EAAOs9C,kBACwD,IAA/Dt9C,EAAOs9C,gBAAgB9gD,QAAQ+gD,oBAC+B,IAA9Dv9C,EAAOs9C,gBAAgB9gD,QAAQ+gD,mBAE/B3f,EAAoBwf,4BAA8B,GAGpDxf,EAAoB0hB,YAAct/C,EAAOs/C,YACzC1hB,EAAoB2hB,qBAAuBv/C,EAAOu/C,qBAClD3hB,EAAoBwL,OAASppC,EAAOopC,OACpCxL,EAAoB0L,YAActpC,EAAOspC,YACzC1L,EAAoB2L,cAAgBvpC,EAAOupC,cAC3C3L,EAAoByL,uBAAyBrpC,EAAOqpC,uBACpDzL,EAAoB4L,mBAAqBxpC,EAAOwpC,mBAChD5L,EAAoB6L,qBAAuBzpC,EAAOypC,qBAClD7L,EAAoBgM,mBAAqB5pC,EAAO4pC,oBAE3ChM,CACR,CAE4B7pB,uBAAC/T,GAC5B,MAAM49B,EAAsBjkC,KAAKkkC,YAAY,IAAIC,KACjD,OAAI99B,IAEGA,EAAOq9C,sBACVzf,EAAoBuf,kCAAoC,IAEvB,IAA/Bn9C,EAAOq9C,sBACTzf,EAAoBuf,kCAAoC,IAEvB,IAA/Bn9C,EAAOq9C,sBACTzf,EAAoBuf,kCAAoC,KAIrDn9C,EAAOs9C,iBAAqD,IAAlCt9C,EAAOs9C,gBAAgBx0C,UACpD80B,EAAoBwf,4BAA8B,GAEhDp9C,EAAOs9C,kBAA+E,IAA5Dt9C,EAAOs9C,gBAAgB9gD,QAAQ+gD,iBAC3D3f,EAAoBwf,4BAA8B,GAGlDp9C,EAAOs9C,kBACwD,IAA/Dt9C,EAAOs9C,gBAAgB9gD,QAAQ+gD,oBAC+B,IAA9Dv9C,EAAOs9C,gBAAgB9gD,QAAQ+gD,mBAE/B3f,EAAoBwf,4BAA8B,GAGpDxf,EAAoB0hB,YAAct/C,EAAOs/C,YACzC1hB,EAAoB2hB,qBAAuBv/C,EAAOu/C,qBAClD3hB,EAAoBwL,OAASppC,EAAOopC,OACpCxL,EAAoB0L,YAActpC,EAAOspC,YACzC1L,EAAoB2L,cAAgBvpC,EAAOupC,cAC3C3L,EAAoByL,uBAAyBrpC,EAAOqpC,uBACpDzL,EAAoB4L,mBAAqBxpC,EAAOwpC,mBAChD5L,EAAoB6L,qBAAuBzpC,EAAOypC,qBAClD7L,EAAoBgM,mBAAqB5pC,EAAO4pC,oBAE3ChM,CACR,CAE+B7pB,0BAAC/T,GAC/B,MAAM49B,EAAsBjkC,KAAKkkC,YAAY,IAAIC,KACjD,OAAI99B,IAEGA,EAAOq9C,sBACVzf,EAAoBuf,kCAAoC,IAEvB,IAA/Bn9C,EAAOq9C,sBACTzf,EAAoBuf,kCAAoC,IAEvB,IAA/Bn9C,EAAOq9C,sBACTzf,EAAoBuf,kCAAoC,GAIrDn9C,EAAOq/C,cACVzhB,EAAoB4hB,kBAAoB,IAEf,IAAvBx/C,EAAOq/C,cACTzhB,EAAoB4hB,kBAAoB,IAEf,IAAvBx/C,EAAOq/C,cACTzhB,EAAoB4hB,kBAAoB,GAG1C5hB,EAAoB0hB,YAAct/C,EAAOs/C,YACzC1hB,EAAoB2hB,qBAAuBv/C,EAAOu/C,qBAClD3hB,EAAoBwL,OAASppC,EAAOopC,OACpCxL,EAAoB0L,YAActpC,EAAOspC,YACzC1L,EAAoB2L,cAAgBvpC,EAAOupC,cAC3C3L,EAAoByL,uBAAyBrpC,EAAOqpC,uBACpDzL,EAAoB4L,mBAAqBxpC,EAAOwpC,mBAChD5L,EAAoB6L,qBAAuBzpC,EAAOypC,qBAClD7L,EAAoBgM,mBAAqB5pC,EAAO4pC,oBAE3ChM,CACR,CAEwB7pB,mBAACqpB,GACxBA,SAAekiB,YAAc,GAC7BliB,EAAe+f,kCAAoC,EACnD/f,EAAeggB,4BAA8B,EAC7ChgB,EAAeoiB,kBAAoB,EACnCpiB,EAAeI,8BAAgC,EAC/CJ,EAAetU,cAAgB,GAC/BsU,EAAemiB,qBAAuB,GACtCniB,EAAegM,OAAS,GACxBhM,EAAekM,YAAc,GAC7BlM,EAAemM,cAAgB,GAC/BnM,EAAeiM,wBAAyB,EACxCjM,EAAeoM,mBAAqB,GACpCpM,EAAeqM,qBAAuB,GACtCrM,EAAewM,mBAAqB,KAE7BxM,CACR,CAEsCrpB,iCACrC+1B,EACAC,GAEAD,SAA2BwV,YAAcvV,EAAqBuV,YAC9DxV,EAA2B3C,iBAAmB4C,EAAqB5C,iBACnE2C,EAA2ByV,qBAAuBxV,EAAqBwV,qBACvEzV,EAA2BV,OAASW,EAAqBX,OACzDU,EAA2BR,YAAcS,EAAqBT,YAC9DQ,EAA2BP,cAAgBQ,EAAqBR,cAChEO,EAA2BT,uBAAyBU,EAAqBV,uBACzES,EAA2BN,mBAAqBO,EAAqBP,mBACrEM,EAA2BL,qBAAuBM,EAAqBN,qBACvEK,EAA2BF,mBAAqBG,EAAqBH,mBACrEE,EAA2B1C,eAAiB2C,EAAqB3C,eAE1D0C,CACR,CAE+C/1B,0CAC9C+1B,EACAC,GAEA,YAAK0V,0BAA0B3V,EAA4BC,GAC3DD,EAA2BwT,gBAAkBvT,EAAqBuT,gBAE3DxT,CACR,CAEiC/1B,4BAAC6pB,EAA+C59B,GAEhF,OAA8D,IAA1D49B,EAAoBuf,kCACtBn9C,EAAOq9C,yBAAsB9rC,EACsC,IAA1DqsB,EAAoBuf,kCAC7Bn9C,EAAOq9C,qBAAsB,EACsC,IAA1Dzf,EAAoBuf,oCAC7Bn9C,EAAOq9C,qBAAsB,GAIyB,IAApDzf,EAAoBwf,4BACtBp9C,EAAOs9C,qBAAkB/rC,EACoC,IAApDqsB,EAAoBwf,4BAC7Bp9C,EAAOs9C,gBAAkB,CAACC,eACmC,IAApD3f,EAAoBwf,8BAC7Bp9C,EAAOs9C,gBAAkB,CAACC,iBAA4BA,kBAGxDv9C,EAAO2pC,aAAe/L,EAAoB+L,aACtC/L,EAAoB+L,eAEoC,IAAtD/L,EAAoBJ,8BACtBx9B,EAAO+9B,kBAAexsB,EACyC,IAAtDqsB,EAAoBJ,8BAC7Bx9B,EAAO+9B,cAAe,EACyC,IAAtDH,EAAoBJ,gCAC7Bx9B,EAAO+9B,cAAe,IAI1B/9B,EAAOs/C,YAAc1hB,EAAoB0hB,YACzCt/C,EAAOu/C,qBAAuB3hB,EAAoB2hB,qBAClDv/C,EAAO8oB,cAAgB8U,EAAoB9U,cAC3C9oB,EAAOopC,OAASxL,EAAoBwL,OACpCppC,EAAOspC,YAAc1L,EAAoB0L,YACzCtpC,EAAOupC,cAAgB3L,EAAoB2L,cAC3CvpC,EAAOqpC,uBAAyBzL,EAAoByL,uBACpDrpC,EAAOwpC,mBAAqB5L,EAAoB4L,mBAChDxpC,EAAOypC,qBAAuB7L,EAAoB6L,qBAClDzpC,EAAO4pC,mBAAqBhM,EAAoBgM,mBAChD5pC,EAAO6pC,aAAejM,EAAoBiM,aAEnC7pC,CACR,CAEgC+T,2BAAC6pB,EAA+C59B,GAE/E,OAA8D,IAA1D49B,EAAoBuf,kCACtBn9C,EAAOq9C,yBAAsB9rC,EACsC,IAA1DqsB,EAAoBuf,kCAC7Bn9C,EAAOq9C,qBAAsB,EACsC,IAA1Dzf,EAAoBuf,oCAC7Bn9C,EAAOq9C,qBAAsB,GAIyB,IAApDzf,EAAoBwf,4BACtBp9C,EAAOs9C,qBAAkB/rC,EACoC,IAApDqsB,EAAoBwf,4BAC7Bp9C,EAAOs9C,gBAAkB,CAACC,eACmC,IAApD3f,EAAoBwf,8BAC7Bp9C,EAAOs9C,gBAAkB,CAACC,iBAA4BA,kBAGxDv9C,EAAOs/C,YAAc1hB,EAAoB0hB,YACzCt/C,EAAOu/C,qBAAuB3hB,EAAoB2hB,qBAClDv/C,EAAOopC,OAASxL,EAAoBwL,OACpCppC,EAAOspC,YAAc1L,EAAoB0L,YACzCtpC,EAAOupC,cAAgB3L,EAAoB2L,cAC3CvpC,EAAOqpC,uBAAyBzL,EAAoByL,uBACpDrpC,EAAOwpC,mBAAqB5L,EAAoB4L,mBAChDxpC,EAAOypC,qBAAuB7L,EAAoB6L,qBAClDzpC,EAAO4pC,mBAAqBhM,EAAoBgM,mBAEzC5pC,CACR,CAE0B+T,qBAAC6pB,EAA+C59B,GAEzE,OAA8D,IAA1D49B,EAAoBuf,kCACtBn9C,EAAOq9C,yBAAsB9rC,EACsC,IAA1DqsB,EAAoBuf,kCAC7Bn9C,EAAOq9C,qBAAsB,EACsC,IAA1Dzf,EAAoBuf,oCAC7Bn9C,EAAOq9C,qBAAsB,GAIyB,IAApDzf,EAAoBwf,4BACtBp9C,EAAOs9C,qBAAkB/rC,EACoC,IAApDqsB,EAAoBwf,4BAC7Bp9C,EAAOs9C,gBAAkB,CAACC,eACmC,IAApD3f,EAAoBwf,8BAC7Bp9C,EAAOs9C,gBAAkB,CAACC,iBAA4BA,kBAGxDv9C,EAAOs/C,YAAc1hB,EAAoB0hB,YACzCt/C,EAAOu/C,qBAAuB3hB,EAAoB2hB,qBAClDv/C,EAAOopC,OAASxL,EAAoBwL,OACpCppC,EAAOspC,YAAc1L,EAAoB0L,YACzCtpC,EAAOupC,cAAgB3L,EAAoB2L,cAC3CvpC,EAAOqpC,uBAAyBzL,EAAoByL,uBACpDrpC,EAAOwpC,mBAAqB5L,EAAoB4L,mBAChDxpC,EAAOypC,qBAAuB7L,EAAoB6L,qBAClDzpC,EAAO4pC,mBAAqBhM,EAAoBgM,mBAEzC5pC,CACR,CAE6B+T,wBAAC6pB,EAA+C59B,GAE5E,OAA8D,IAA1D49B,EAAoBuf,kCACtBn9C,EAAOq9C,yBAAsB9rC,EACsC,IAA1DqsB,EAAoBuf,kCAC7Bn9C,EAAOq9C,qBAAsB,EACsC,IAA1Dzf,EAAoBuf,oCAC7Bn9C,EAAOq9C,qBAAsB,GAIe,IAA1Czf,EAAoB4hB,kBACtBx/C,EAAOq/C,iBAAc9tC,EAC8B,IAA1CqsB,EAAoB4hB,kBAC7Bx/C,EAAOq/C,aAAc,EAC8B,IAA1CzhB,EAAoB4hB,oBAC7Bx/C,EAAOq/C,aAAc,GAGvBr/C,EAAOs/C,YAAc1hB,EAAoB0hB,YACzCt/C,EAAOu/C,qBAAuB3hB,EAAoB2hB,qBAClDv/C,EAAOopC,OAASxL,EAAoBwL,OACpCppC,EAAOspC,YAAc1L,EAAoB0L,YACzCtpC,EAAOupC,cAAgB3L,EAAoB2L,cAC3CvpC,EAAOqpC,uBAAyBzL,EAAoByL,uBACpDrpC,EAAOwpC,mBAAqB5L,EAAoB4L,mBAChDxpC,EAAOypC,qBAAuB7L,EAAoB6L,qBAClDzpC,EAAO4pC,mBAAqBhM,EAAoBgM,mBAEzC5pC,CACR,inBCnYSpC,wBAEEA,qEAAkBA,wCAAkC,GAQrDA,gCAPCA,kDAA0C,qBAA1CA,CAA0C,6EAA1CA,CAA0C,kBAA1CA,CAA0C,iCAA1CA,CAA0C,2DAA1CA,CAA0C,oGAmB1CA,qBAEEA,0DAASA,+BAAqB,GAQ9BA,oBAAUA,iBAAKA,eAPfA,8FAgBFA,qBAEEA,0DAASA,yCAA+B,GAQxCA,oBAAUA,iBAAKA,eAPfA,8FAsBFA,qBAEEA,0DAASA,+BAAqB,GAQ9BA,oBAAUA,iBAAKA,eAPfA,6FA2FRA,kBAA2E,qCAGvEA,4EAAyBA,0CAAoC,GAK/DA,8CAJEA,4DAA2C,wCAA3CA,CAA2C,4EAY/CA,kBAAqF,gDAGjFA,sFAAmCA,oDAA8C,GAKnFA,8CAJEA,gFAA+D,kDAA/DA,CAA+D,8IAYnEA,kBAA2E,+BAGvEA,4EAAyBA,0CAAoC,GAK9DA,kCAJCA,4DAA2C,qFAA3CA,CAA2C,mEAA3CA,CAA2C,mHAU/CA,kBAEEA,uEAASA,wBAAmB,GAM5BA,SACFA,8CANEA,6CAA6C,qBAE7CA,8BAGAA,2LCtLH,IAAMosC,GAAb,MAAM,MAAOA,EAmGXtwC,YACU+2B,EACA4N,EACAC,GACArxB,GACAsxB,GACAmhB,GACAlhD,GACAC,GACA+/B,GACAyL,GACAC,GACAvrC,GACAC,GACAC,IAbAlF,uBACAA,yBACAA,yBACAA,sBACAA,0BACAA,mCACAA,6BACAA,uBACAA,6BACAA,6BACAA,+BACAA,gBACAA,+BACAA,kCA5EHA,mCAAgC,qBAChCA,mCAAgC,mBAChCA,sDAAmD,iBACnDA,6CAA0C,wBAI1CA,uBAAuC,IAAIwwC,KAE3CxwC,wDAAqD,IAAIywC,IAAW,IAAK,qCACzEzwC,oDAAiD,IAAIywC,IAAW,IAAK,mCAMrEzwC,4BAAyB0wC,wBACzB1wC,wBAAqB0wC,oBACrB1wC,kCAA8B,EAC9BA,sBAAqC,IAAI2wC,KAOzC3wC,kBAA6B,IAAI8kC,KAMjC9kC,eAAY,qBAGZA,6BAA0BilC,0BAG1BjlC,4CAAwC,EAExCA,mBAA+B,IAAIklC,KACnCllC,gBAAyB,IAAI4wC,KAC7B5wC,yBAAsB,IAAIoF,MAE1BpF,kCAA8B,EAC9BA,kCAA8B,EAC9BA,4CAAwC,EACxCA,gCAA4B,EAC5BA,0BAAuB,EACvBA,yBAAsB,EACtBA,kCAA+B,EAC/BA,kCAA+B,EAC/BA,mBAAgB,EAChBA,sBAAmB,EACnBA,8BAA2B,qBAC3BA,8BAA2B,mBAC3BA,iDAA8C,GAC9CA,wCAAqC,wBACrCA,mBAA+B,IAAIgmD,KAElChmD,sBAAiC,IAAIE,KAkB3CF,KAAKimD,mCAAqCjmD,KAAKkF,0BAA0BsH,gBAAgBy5C,mCAEzFjmD,KAAKqxC,WAAarxC,KAAKkF,0BAA0BsH,gBAAgB6uC,sBAC7D,CACE,CAAE/2C,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAEzC,CACE,CAAEjnB,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,sBAEtCvrB,KAAKkmD,WAAalmD,KAAKkF,0BAA0BsH,gBAAgB6uC,sBAC7D,CACE,CAAE/2C,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAEzC,CACE,CAAEjnB,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,sBAEtCvrB,KAAKwxC,YAAcxxC,KAAKkF,0BAA0BsH,gBAAgB6uC,sBAC9D,CACE,CAAE/2C,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,cAAeinB,MAAO,2BAC/B,CAAEjnB,MAAO,gBAAiBinB,MAAO,4BACjC,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAEzC,CACE,CAAEjnB,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,cAAeinB,MAAO,2BAC/B,CAAEjnB,MAAO,gBAAiBinB,MAAO,4BACjC,CAAEjnB,MAAO,eAAgBinB,MAAO,sBAEtCvrB,KAAKmmD,UAAYnmD,KAAKkF,0BAA0BsH,gBAAgB6uC,sBAC5D,CACE,CAAE/2C,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,YAAainB,MAAO,qBAC7B,CAAEjnB,MAAO,SAAUinB,MAAO,0BAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAEzC,CACE,CAAEjnB,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,YAAainB,MAAO,qBAC7B,CAAEjnB,MAAO,SAAUinB,MAAO,0BAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,sBAEtCvrB,KAAKomD,WAAapmD,KAAKkF,0BAA0BsH,gBAAgB6uC,sBAC7D,CACE,CAAE/2C,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,qBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,kBAC1B,CAAEjnB,MAAO,sBAAuBinB,MAAO,oBAEzC,CACE,CAAEjnB,MAAO,aAAcinB,MAAO,2BAC9B,CAAEjnB,MAAO,eAAgBinB,MAAO,yBAChC,CAAEjnB,MAAO,SAAUinB,MAAO,wBAC1B,CAAEjnB,MAAO,eAAgBinB,MAAO,sBAGtCvrB,KAAK6wC,qBAAuBC,mBAC5B9wC,KAAK+wC,0BAA4BD,wBAAyCJ,gBAE1E1wC,KAAK0kC,kBAAkB1yB,SAAShS,KAAKolC,WACrCplC,KAAKqlC,SAAW,CACd,IAAIC,IAAgBtlC,KAAKgxC,cAAe,QAAS,UAAWhxC,KAAKmmD,UAAW,kBAC5E,IAAI7gB,IAAgBtlC,KAAKqmD,iBAAkB,kBAAmB,cAAermD,KAAKomD,WAAY,sBAC9F,IAAI9gB,IAAgBtlC,KAAKkxC,oBAAqB,kBAAmB,iBAAkBlxC,KAAKkmD,WAAY,yBACpG,IAAI5gB,IAAgBtlC,KAAKoxC,qBAAsB,oBAAqB,kBAAmBpxC,KAAKqxC,WAAY,0BACxG,IAAI/L,IACFtlC,KAAKsxC,6BACL,qBACA,4BACAtxC,KAAKqxC,WACL,oCAEF,IAAI/L,IACFtlC,KAAKuxC,6BACL,mBACA,0BACAvxC,KAAKwxC,YACL,kCAGL,CAEM8U,8BACL,MAAMC,EACJvmD,KAAKooC,aAAapB,mBAAqB/B,kBAA+B7oB,WAAapc,KAAKooC,aAAaliB,iBAAiBsgC,OAAS,KACjI,MAAO,KAEL,IAAI9+B,EADJ1nB,KAAKuwC,uBAAuBzV,oCAA+BljB,GAEvD5X,KAAK0yC,0BAA4B1yC,KAAKyoC,sBAAwBzoC,KAAKwoC,oBACrE9gB,EAAwBm9B,UAAuCW,iBAA2Be,EAAiB,MAAM,GACxGvmD,KAAK2yC,wBACdjrB,EAAwBm9B,UAAuCW,gBAA0Be,EAAiB,MAAM,GACvGvmD,KAAK4yC,kBACdlrB,EAAwBm9B,UAAuCW,UAAoBe,EAAiB,MAAM,GACjGvmD,KAAKymD,uBACd/+B,EAAwBm9B,UAAuCW,aAAuBe,EAAiB,MAAM,IAG/GvmD,KAAKswC,qBAAqB7oB,yBAAyBC,GAEnD1nB,KAAKgF,QAAQmzB,SAAS,CAACkY,EAAwB2N,eAA/C,CAEH,CAEMnY,6BAA6B5B,GAClCjkC,KAAK8lC,oBAAoB7B,GACzBjkC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKgmC,+BAA+B3xB,QAGpCrU,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKkmC,kBAGLlmC,KAAKmmC,2BACN,CAEMsL,gCAAgCC,GACrC,IAAIC,EAA6B,IAAIvsC,MACrCssC,SAAqB9tC,QAASguC,KAC5B,MAAMC,GAA4B,IAAIpB,IACtCoB,GAA0BxvC,IAAMuvC,GAAc/lC,KAC9CgmC,GAA0BtmB,MAAQumB,cAA8BF,GAAcG,kBAAmBH,GAAcI,qBAC/GL,EAA2BnwC,KAAKqwC,GAAhC,GAEFF,EAA6BA,EAA2BrkB,KAAK2kB,+BAC7DN,EAA2BnwC,KAAKxB,KAAKkyC,oDACrCP,EAA2BnwC,KAAKxB,KAAKmyC,gDAC9BR,CACR,CAEMvL,6BAA6BC,GAClCrmC,KAAKqmC,oBAAsBA,EAG3BrmC,KAAKsmC,mBAAqBD,GAAqB96B,SAAW86B,EAAoB96B,SAASM,KAAO,KAE1Fw6B,GAAqB96B,UAAY86B,EAAoB+L,yBACvDpyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,MACzF7L,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,MACxF7L,KAAKumC,aAAakF,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,MACpF7L,KAAKymC,cAAcgF,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,MACrF7L,KAAKwyC,WAAW/G,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,MAClF7L,KAAK0mD,cAAcjb,eAAe6G,mBAAqB,CAACjM,EAAoB96B,SAASM,QAErF7L,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqB,KAC3DtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqB,KAC1DtyC,KAAKumC,aAAakF,eAAe6G,mBAAqB,KACtDtyC,KAAKymC,cAAcgF,eAAe6G,mBAAqB,KACvDtyC,KAAKwyC,WAAW/G,eAAe6G,mBAAqB,KACpDtyC,KAAK0mD,cAAcjb,eAAe6G,mBAAqB,MAGrDjM,GAAqB96B,WAAa86B,EAAoB+L,yBACxDpyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,MACpF7L,KAAKuyC,iBAAiB9G,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,MACnF7L,KAAKumC,aAAakF,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,MAC/E7L,KAAKymC,cAAcgF,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,MAChF7L,KAAKwyC,WAAW/G,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,MAC7E7L,KAAK0mD,cAAcjb,eAAexgB,cAAgB,CAACob,EAAoB96B,SAASM,QAEhF7L,KAAKqyC,kBAAkB5G,eAAexgB,cAAgB,KACtDjrB,KAAKuyC,iBAAiB9G,eAAexgB,cAAgB,KACrDjrB,KAAKumC,aAAakF,eAAexgB,cAAgB,KACjDjrB,KAAKymC,cAAcgF,eAAexgB,cAAgB,KAClDjrB,KAAKwyC,WAAW/G,eAAexgB,cAAgB,KAC/CjrB,KAAK0mD,cAAcjb,eAAexgB,cAAgB,MAIhDjrB,KAAKqmC,qBAAqB96B,UAC5BvL,KAAKswC,qBAAqBxoB,0BAA0B9nB,KAAKqmC,oBAAoB96B,SAASM,MAIxF7L,KAAK0mC,yCAGL1mC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAK4mC,+BAA+BvyB,OAApC,GAGFrU,KAAKkmC,kBAGLlmC,KAAKmmC,2BACN,CAEMU,sBACLrD,cAA2CxjC,KAAKikC,qBAChDjkC,KAAK6lC,6BAA6B7lC,KAAKikC,oBACxC,CAEM6C,gCACL9mC,KAAKqyC,kBAAkBtL,cACvB/mC,KAAKqyC,kBAAkB5G,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BACvFlnC,KAAKqyC,kBAAkB5G,eAAetE,qBACpCF,OAAOwL,6BAGTzyC,KAAKuyC,iBAAiBxL,cACtB/mC,KAAKuyC,iBAAiB9G,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BAEtFlnC,KAAKumC,aAAaQ,cAClB/mC,KAAKumC,aAAakF,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BAClFlnC,KAAKumC,aAAakF,eAAetE,qBAC/BF,OAAOwL,6BAGTzyC,KAAKymC,cAAcM,cACnB/mC,KAAKymC,cAAcgF,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BACnFlnC,KAAKymC,cAAcgF,eAAetE,qBAChCF,OAAOwL,6BAGTzyC,KAAKwyC,WAAWzL,cAChB/mC,KAAKwyC,WAAW/G,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BAEhFlnC,KAAK0mD,cAAc3f,cACnB/mC,KAAK0mD,cAAcjb,eAAezE,iBAAqCC,OAAOjnC,KAAKknC,0BAEnFlnC,KAAKmmC,2BACN,CAEMoB,sBACLvnC,KAAKomC,6BAA6B,KACnC,CAEMugB,gCACL3mD,KAAK4mD,uCAAuC,KAC7C,CAEMpC,mBACL,OAAIxkD,KAAKimD,mCACA,0BAEF,IACR,CAGMze,gBAAgBhuB,GACrBA,EAAOO,gBACR,CAGM0tB,WAAWjuB,GAChBxZ,KAAKsT,cAAciG,qBAAqBC,EAAQxZ,KAAK0nC,qBACtD,CAGMC,gBACL,IAAIC,EAAY5nC,KAAK6nC,WAAWlpB,MAAQ,EACpCipB,EAAY,IACdA,EAAY5nC,KAAKqlC,SAASl2B,OAAS,GAErCnP,KAAK8nC,WAAW9nC,KAAKqlC,SAASuC,GAC/B,CAGMG,cAEL/nC,KAAK8nC,WAAW9nC,KAAKqlC,UADFrlC,KAAK6nC,WAAWlpB,MAAQ,GAAK3e,KAAKqlC,SAASl2B,QAE/D,CAEMy3C,uCAAuCC,GAC5C7mD,KAAK6mD,8BAAgCA,EAGrC7mD,KAAK8mD,6BAA+BD,GAA+BE,mBAC/DF,EAA8BE,mBAAmBl7C,KACjD,KAEAg7C,GAA+BE,oBACjC/mD,KAAKqyC,kBAAkB5G,eAAeha,uBAAyBo1B,EAA8BE,mBAAmBl7C,KAChH7L,KAAKuyC,iBAAiB9G,eAAeha,uBAAyBo1B,EAA8BE,mBAAmBl7C,KAC/G7L,KAAKumC,aAAakF,eAAeha,uBAAyBo1B,EAA8BE,mBAAmBl7C,KAC3G7L,KAAKymC,cAAcgF,eAAeha,uBAAyBo1B,EAA8BE,mBAAmBl7C,KAC5G7L,KAAKwyC,WAAW/G,eAAeha,uBAAyBo1B,EAA8BE,mBAAmBl7C,KACzG7L,KAAK0mD,cAAcjb,eAAeha,uBAAyBo1B,EAA8BE,mBAAmBl7C,OAE5G7L,KAAKqyC,kBAAkB5G,eAAeha,uBAAyB,KAC/DzxB,KAAKuyC,iBAAiB9G,eAAeha,uBAAyB,KAC9DzxB,KAAKumC,aAAakF,eAAeha,uBAAyB,KAC1DzxB,KAAKymC,cAAcgF,eAAeha,uBAAyB,KAC3DzxB,KAAKwyC,WAAW/G,eAAeha,uBAAyB,KACxDzxB,KAAK0mD,cAAcjb,eAAeha,uBAAyB,MAI7DzxB,KAAKgnD,mDAGLhnD,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKsT,cAAc2zC,gDAAiD,EACpEjnD,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAKknD,yCAAyC7yC,OAA9C,GAGFrU,KAAKkmC,kBAGLlmC,KAAKmmC,2BACN,CAEMlQ,cACLj2B,KAAKgoC,gCAAgC7R,cACrCn2B,KAAKioC,iBAAiBxmC,OACtBzB,KAAKioC,iBAAiB1d,UACvB,CAEM2d,WAGHloC,KAAK6nC,WADH7nC,KAAKgF,QAAQ5C,IAAI0M,WAAW,0BACZ9O,KAAKqlC,SAASrlC,KAAKgxC,eAC5BhxC,KAAKgF,QAAQ5C,IAAI0M,WAAW,iCACnB9O,KAAKqlC,SAASrlC,KAAKkxC,qBAC5BlxC,KAAKgF,QAAQ5C,IAAI0M,WAAW,0CACnB9O,KAAKqlC,SAASrlC,KAAKuxC,8BAC5BvxC,KAAKgF,QAAQ5C,IAAI0M,WAAW,4CACnB9O,KAAKqlC,SAASrlC,KAAKsxC,8BAC5BtxC,KAAKgF,QAAQ5C,IAAI0M,WAAW,8BACnB9O,KAAKqlC,SAASrlC,KAAKqmD,kBAEnBrmD,KAAKqlC,SAASrlC,KAAKoxC,sBAGvCpxC,KAAK6kC,qBAAqB9e,yBACvB3f,QAAKmsB,KAAUvyB,KAAKioC,mBACpBziC,UAAW0gB,IACVlmB,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAKooC,aAAaliB,iBAAmBA,EAEjClmB,KAAK0yC,yBACP1yC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,0BAC5FlnC,KAAK2yC,wBACd3yC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,0BAC3FlnC,KAAKwoC,oBACdxoC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BACvFlnC,KAAKyoC,qBACdzoC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BACxFlnC,KAAK4yC,kBACd5yC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,0BACrFlnC,KAAKymD,uBACdzmD,KAAKsoC,4BAA8BtoC,KAAK0mD,cAAcne,sCAAsCvoC,KAAKknC,0BAA9D,GAIzClnC,KAAKuwC,uBAAuBpW,6CACzB/zB,QAAKmsB,KAAUvyB,KAAKioC,mBACpBziC,UAAWm1B,IACV36B,KAAK2xC,2BAA6B3xC,KAAKyxC,gCAAgC9W,GACnE36B,KAAK0yC,yBACP1yC,KAAK6yC,wBAAwB7yC,KAAKqyC,kBAAkB5G,gBAC3CzrC,KAAK2yC,wBACd3yC,KAAK6yC,wBAAwB7yC,KAAKuyC,iBAAiB9G,gBAC1CzrC,KAAKwoC,oBACdxoC,KAAK6yC,wBAAwB7yC,KAAKumC,aAAakF,gBACtCzrC,KAAKyoC,qBACdzoC,KAAK6yC,wBAAwB7yC,KAAKymC,cAAcgF,gBACvCzrC,KAAK4yC,kBACd5yC,KAAK6yC,wBAAwB7yC,KAAKwyC,WAAW/G,gBACpCzrC,KAAKymD,sBACdzmD,KAAK6yC,wBAAwB7yC,KAAK0mD,cAAcjb,eAAhD,GAINzrC,KAAKuwC,uBAAuBlW,sCACzBj0B,QAAKmsB,KAAUvyB,KAAKioC,mBACpBziC,UAAWq1B,IACV76B,KAAKmnD,mBAAmBtsB,GACpB76B,KAAK0yC,yBACP1yC,KAAKonD,iBAAiBpnD,KAAKqyC,kBAAkB5G,gBACpCzrC,KAAK2yC,wBACd3yC,KAAKonD,iBAAiBpnD,KAAKuyC,iBAAiB9G,gBACnCzrC,KAAKwoC,oBACdxoC,KAAKonD,iBAAiBpnD,KAAKumC,aAAakF,gBAC/BzrC,KAAKyoC,qBACdzoC,KAAKonD,iBAAiBpnD,KAAKymC,cAAcgF,gBAChCzrC,KAAK4yC,kBACd5yC,KAAKonD,iBAAiBpnD,KAAKwyC,WAAW/G,gBAC7BzrC,KAAKymD,sBACdzmD,KAAKonD,iBAAiBpnD,KAAK0mD,cAAcjb,eAAzC,GAINzrC,KAAK82B,gBAAgBgB,YAAY1xB,QAAKmsB,KAAUvyB,KAAKioC,mBAAmBziC,UAAWlH,IACjF0B,KAAK0oC,4BACL1oC,KAAK2oC,WAAWrqC,EAAO05B,QACvBh4B,KAAK8lC,oBAAoB9lC,KAAKikC,qBAC9BjkC,KAAK4oC,uBACL5oC,KAAKqnD,iCACLrnD,KAAK6oC,uBACL7oC,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAK8oC,wBAAL,GAGF9oC,KAAKgoC,gCAAkChoC,KAAKsT,cAAc+F,4BAA4B7T,UAAU,KAC1FxF,KAAKsT,cAAcyyB,4CACrB/lC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKgmC,+BAA+B3xB,SAC3BrU,KAAKsT,cAAcqzB,sCAC5B3mC,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAK4mC,+BAA+BvyB,SAC3BrU,KAAKsT,cAAc2zC,gDAC5BjnD,KAAKsT,cAAc2zC,gDAAiD,EACpEjnD,KAAKimC,4BAA4B3hC,MAAQ,KACzCtE,KAAKknD,yCAAyC7yC,SAE9CrU,KAAK4T,UAAL,EAGL,CAEMk/B,iCAAiCC,GAClC/yC,KAAK0yC,yBACP1yC,KAAKgzC,uBAAuBhzC,KAAKqyC,kBAAkB5G,eAAgBsH,GAC1D/yC,KAAK2yC,wBACd3yC,KAAKgzC,uBAAuBhzC,KAAKuyC,iBAAiB9G,eAAgBsH,GACzD/yC,KAAKwoC,oBACdxoC,KAAKgzC,uBAAuBhzC,KAAKumC,aAAakF,eAAgBsH,GACrD/yC,KAAKyoC,qBACdzoC,KAAKgzC,uBAAuBhzC,KAAKymC,cAAcgF,eAAgBsH,GACtD/yC,KAAK4yC,kBACd5yC,KAAKgzC,uBAAuBhzC,KAAKwyC,WAAW/G,eAAgBsH,GACnD/yC,KAAKymD,sBACdzmD,KAAKgzC,uBAAuBhzC,KAAK0mD,cAAcjb,eAAgBsH,GAGjE/yC,KAAKkmC,kBACLlmC,KAAKmmC,2BACN,CAEM8M,2BAA2Bp7B,GAChC,IAAI7X,KAAK0yC,yBAEF,IAAI1yC,KAAK2yC,wBACV96B,EACF7X,KAAKuyC,iBAAiB9G,eAAehhB,OAASqmB,kBAAmCj5B,UAE1E7X,KAAKuyC,iBAAiB9G,eAAehhB,WAEzC,IAAIzqB,KAAKwoC,oBACd,OACK,GAAIxoC,KAAKyoC,qBACd,OACSzoC,KAAK4yC,kBACV/6B,EACF7X,KAAKwyC,WAAW/G,eAAehhB,OAASqmB,kBAAmCj5B,UAEpE7X,KAAKwyC,WAAW/G,eAAehhB,OAE/BzqB,KAAKymD,uBACV5uC,EACF7X,KAAK0mD,cAAcjb,eAAehhB,OAASqmB,kBAAmCj5B,UAEvE7X,KAAK0mD,cAAcjb,eAAehhB,QAK7CzqB,KAAKkmC,kBACLlmC,KAAKmmC,2BAAL,CACD,CAEMmhB,+BAA+BC,GAChCvnD,KAAK0yC,yBACP1yC,KAAKwnD,gBAAgBxnD,KAAKqyC,kBAAkB5G,eAAgB8b,GACnDvnD,KAAK2yC,wBACd3yC,KAAKwnD,gBAAgBxnD,KAAKuyC,iBAAiB9G,eAAgB8b,GAClDvnD,KAAKwoC,oBACdxoC,KAAKwnD,gBAAgBxnD,KAAKumC,aAAakF,eAAgB8b,GAC9CvnD,KAAKyoC,qBACdzoC,KAAKwnD,gBAAgBxnD,KAAKymC,cAAcgF,eAAgB8b,GAC/CvnD,KAAK4yC,kBACd5yC,KAAKwnD,gBAAgBxnD,KAAKwyC,WAAW/G,eAAgB8b,GAC5CvnD,KAAKymD,sBACdzmD,KAAKwnD,gBAAgBxnD,KAAK0mD,cAAcjb,eAAgB8b,GAG1DvnD,KAAKkmC,kBACLlmC,KAAKmmC,2BACN,CAEM4C,+BAA+BX,GACpCpoC,KAAKqyC,kBAAkB5G,eAAiBkZ,yBACtC3kD,KAAKqyC,kBAAkB5G,eACvBrD,GAEFpoC,KAAKuyC,iBAAiB9G,eAAiBkZ,wBACrC3kD,KAAKuyC,iBAAiB9G,eACtBrD,GAEFpoC,KAAKumC,aAAakF,eAAiBkZ,iCACjC3kD,KAAKumC,aAAakF,eAClBrD,EACApoC,KAAKwoC,qBAEPxoC,KAAKymC,cAAcgF,eAAiBkZ,yBAClC3kD,KAAKymC,cAAcgF,eACnBrD,GAEFpoC,KAAKwyC,WAAW/G,eAAiBkZ,kBAAoD3kD,KAAKwyC,WAAW/G,eAAgBrD,GACrHpoC,KAAK0mD,cAAcjb,eAAiBkZ,qBAClC3kD,KAAK0mD,cAAcjb,eACnBrD,GAGFpoC,KAAKkmC,kBACLlmC,KAAKmmC,2BAA0B,EAChC,CAEM8C,6BAEL,MAAM3b,EAAO,IAAIloB,MAEbpF,KAAK0yC,0BACP1yC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKqyC,kBAAmBhC,EAAwB6C,oCAC7ElzC,KAAKopC,0BAA4BppC,KAAKqyC,kBAAkBhJ,2BACxDrpC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,2BAC5FlnC,KAAK2yC,yBACd3yC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKuyC,iBAAkBlC,EAAwB8C,mCAC5EnzC,KAAKopC,0BAA4BppC,KAAKuyC,iBAAiBlJ,2BACvDrpC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,2BAC3FlnC,KAAKwoC,qBACdxoC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKumC,aAAc8J,EAAwB/G,+BACxEtpC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,sBACdzoC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKymC,cAAe4J,EAAwB9G,gCACzEvpC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BACxFlnC,KAAK4yC,mBACd5yC,KAAKkpC,kBAAkB5b,EAAMttB,KAAKwyC,WAAYnC,EAAwB+C,6BACtEpzC,KAAKopC,0BAA4BppC,KAAKwyC,WAAWnJ,2BACjDrpC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,2BACrFlnC,KAAKymD,uBACdzmD,KAAKkpC,kBAAkB5b,EAAMttB,KAAK0mD,cAAerW,EAAwBoX,gCACzEznD,KAAKopC,0BAA4BppC,KAAK0mD,cAAcrd,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAK0mD,cAAcne,sCAAsCvoC,KAAKknC,2BAGnGlnC,KAAK8E,eAAeggB,8BAA8B,+BACnD,CAEM0kB,yCAAyCC,GAE9CzpC,KAAKknC,yBAA2BuC,EAEhC,IAAIC,EAAsBD,EACE,OAAxBC,IACFA,EAAsB,MAIxB1pC,KAAK6E,qBAAqByD,MAAM+nC,EAAwB1G,4BAA6BD,GAGrF1pC,KAAK4pC,sCAAwC5pC,KAAKooC,aAAapB,mBAAqBhnC,KAAKknC,yBAErFlnC,KAAK0yC,0BACP1yC,KAAKopC,0BAA4BppC,KAAKqyC,kBAAkBhJ,2BACxDrpC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,2BAC5FlnC,KAAK2yC,yBACd3yC,KAAKopC,0BAA4BppC,KAAKuyC,iBAAiBlJ,2BACvDrpC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,2BAC3FlnC,KAAKwoC,qBACdxoC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,sBACdzoC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BACxFlnC,KAAK4yC,mBACd5yC,KAAKopC,0BAA4BppC,KAAKwyC,WAAWnJ,2BACjDrpC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,2BACrFlnC,KAAKymD,uBACdzmD,KAAKopC,0BAA4BppC,KAAK0mD,cAAcrd,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAK0mD,cAAcne,sCAAsCvoC,KAAKknC,2BAGnGlnC,KAAK8E,eAAeggB,8BAA8B,2CACnD,CAEMkuB,uBAAuBvH,EAAgCj2B,GAC5D,GAAIA,EAAS,CACX,MAAM69B,GAAwBrzC,KAAK2xC,2BAA2BtrC,OAC3D3H,MACGA,GAAE2D,MAAO,CAACrC,KAAKmyC,+CAA+C9vC,IAAKrC,KAAKkyC,mDAAmD7vC,OAE3HixC,GAAqB99B,EAAQrO,IAAKzI,IAAMA,GAAE2D,KAE1CkxC,GAA+B,GACrCF,GAAsBzvC,QAAS4vC,KACzBF,GAAmBrjC,KAAMvR,IAAMA,KAAM80C,GAAqBnxC,MAC5DkxC,GAA6B/xC,KAAKswC,WAA2B0B,GAAqBjoB,OAAlF,GAIJ,MAAMkoB,GAAiC,GACvCJ,GAAsBzvC,QAAS4vC,KACxBF,GAAmBrjC,KAAMvR,IAAMA,KAAM80C,GAAqBnxC,MAC7DoxC,GAA+BjyC,KAAKswC,WAA2B0B,GAAqBjoB,OAApF,GAIJ,MAAMmoB,GAA8Bl+B,EAAQvF,KAAMvR,IAAMA,GAAE2D,MAAQrC,KAAKmyC,+CAA+C9vC,KAChHsxC,GAAkCn+B,EAAQvF,KAAMvR,IAAMA,GAAE2D,MAAQrC,KAAKkyC,mDAAmD7vC,KACxHuxC,GAA+BL,IAA8BpkC,OAAS,EAExEukC,IACFjI,EAAeoI,uBAAwB,EACnCD,IAAgCD,KAClClI,EAAe9Q,eAAiB4Y,GAChC9H,EAAeqI,uBAAyBL,IAEtCG,KAAiCD,KACnClI,EAAe9Q,eAAiB4Y,GAChC9H,EAAeqI,uBAAyB,OAErCF,IAAgCD,KACnClI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyBL,KAErCG,KAAiCD,KACpClI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyB,QAG1CrI,EAAeoI,sBAAwB,KACnCD,IAAgCD,KAClClI,EAAe9Q,eAAiB4Y,GAChC9H,EAAeqI,uBAAyBL,IAEtCG,KAAiCD,KACnClI,EAAe9Q,eAAiB4Y,GAChC9H,EAAeqI,uBAAyB,OAErCF,IAAgCD,KACnClI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyBL,KAErCG,KAAiCD,KACpClI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyB,MAG7C,MACCrI,EAAe9Q,eAAiB,KAChC8Q,EAAeqI,uBAAyB,KACxCrI,EAAeoI,sBAAwB,IAE1C,CAEMjgC,WACL5T,KAAKsT,cAAcY,yBAAyB,KACK,mBAA3ClU,KAAKimC,4BAA4B3hC,MACnCtE,KAAK+zC,0BAA0BngC,WACqB,mBAA3C5T,KAAKimC,4BAA4B3hC,MAC1CtE,KAAK8pC,+BAA+Bl2B,WACgB,6BAA3C5T,KAAKimC,4BAA4B3hC,OAC1CtE,KAAK0nD,yCAAyC9zC,UAA9C,EAGL,CAEM4zC,gBAAgB/b,EAAgC8b,GACjDA,GAA6BA,EAA0BllD,IACrDklD,EAA0BllD,MAAQslD,gDACpClc,EAAemc,WAAa,KAC5Bnc,EAAeoc,eAAiB,KAChCpc,EAAeqc,mBAAoB,GACzBP,EAA0B5lD,QAKpC8pC,EAAemc,WAAa,KAC5Bnc,EAAeqc,kBAAoB,KACnCrc,EAAeoc,eAAiB,CAACN,EAA0BllD,OAN3DopC,EAAemc,WAAaL,EAA0BllD,IACtDopC,EAAeoc,eAAiB,KAChCpc,EAAeqc,kBAAoB,OAOrCrc,EAAemc,WAAa,KAC5Bnc,EAAeoc,eAAiB,KAChCpc,EAAeqc,kBAAoB,KAEnC9nD,KAAK+nD,8BAAgC,KACrC/nD,KAAKgoD,gDAAkD,KAE1D,CAEMje,kBAAkBC,GACnBhqC,KAAK0yC,yBACP1yC,KAAKqyC,kBAAkB9iB,WAAaya,EAC3BhqC,KAAK2yC,wBACd3yC,KAAKuyC,iBAAiBhjB,WAAaya,EAC1BhqC,KAAKwoC,oBACdxoC,KAAKumC,aAAahX,WAAaya,EACtBhqC,KAAKyoC,qBACdzoC,KAAKymC,cAAclX,WAAaya,EACvBhqC,KAAK4yC,kBACd5yC,KAAKwyC,WAAWjjB,WAAaya,EACpBhqC,KAAKymD,uBACdzmD,KAAK0mD,cAAcn3B,WAAaya,GAGlChqC,KAAKmmC,2BAA0B,EAChC,CAEM8D,qBAAqBC,GACtBlqC,KAAK0yC,yBACP1yC,KAAKqyC,kBAAkB7iB,cAAgB0a,EAC9BlqC,KAAK2yC,wBACd3yC,KAAKuyC,iBAAiB/iB,cAAgB0a,EAC7BlqC,KAAKwoC,oBACdxoC,KAAKumC,aAAa/W,cAAgB0a,EACzBlqC,KAAKyoC,qBACdzoC,KAAKymC,cAAcjX,cAAgB0a,EAC1BlqC,KAAK4yC,kBACd5yC,KAAKwyC,WAAWhjB,cAAgB0a,EACvBlqC,KAAKymD,uBACdzmD,KAAK0mD,cAAcl3B,cAAgB0a,GAGrClqC,KAAKmmC,2BAA0B,EAChC,CAEM2B,WAAWqC,GAChBnqC,KAAKsT,cAAcyyB,4CAA6C,EAChE/lC,KAAKsT,cAAcqzB,sCAAuC,EAC1D3mC,KAAKsT,cAAc2zC,gDAAiD,EACpEjnD,KAAK6nC,WAAasC,EAClBnqC,KAAK6E,qBAAqByD,MAAM+nC,EAAwBjG,kBAAmBpqC,KAAK6nC,WAAWxoB,KAAKtD,QAAQ,KAAM,KAC9G/b,KAAK2oC,gBAAW/wB,GAChB5X,KAAK0oC,4BACL1oC,KAAK8lC,oBAAoB9lC,KAAKikC,qBAC9BjkC,KAAK4oC,uBACL5oC,KAAKqnD,iCACLrnD,KAAK6oC,uBACL7oC,KAAKmoC,wBAAwBnoC,KAAKooC,cAClCpoC,KAAK8oC,wBACN,CAEMuB,8BAA8BC,GACnCtqC,KAAK4kC,kBAAkBlpB,cAAc4uB,GAErCtqC,KAAKqyC,kBAAkB5G,eAAelB,WAAaD,EACnDtqC,KAAKuyC,iBAAiB9G,eAAelB,WAAaD,EAClDtqC,KAAKumC,aAAakF,eAAelB,WAAaD,EAC9CtqC,KAAKymC,cAAcgF,eAAelB,WAAaD,EAC/CtqC,KAAKwyC,WAAW/G,eAAelB,WAAaD,EAC5CtqC,KAAK0mD,cAAcjb,eAAelB,WAAaD,EAE/CtqC,KAAKkmC,kBAELlmC,KAAKmmC,2BACN,CAEMqE,aAAahxB,GAClB,MAAMixB,EAASjxB,EAAOkxB,OACtB,GAAID,EAAQ,CACV,MAAM5qC,GAAQ4qC,EAAOE,kBACjBnxB,EAAOlV,MAAM2L,KAAM7O,IAASA,KAASqpC,EAAOnmC,SAC9CzE,GAAMyE,MAAQ,CAACmmC,EAAOnmC,OAEzB,CACF,CAEO6iD,mBAAmBc,GACrBA,IACFjoD,KAAKkoD,oBAAsBP,kBAA2CM,GAA8B,GAEvG,CAEOvf,4BACN1oC,KAAK4qC,wBAA0BC,mBAC3B7qC,KAAK0yC,0BAEE1yC,KAAK2yC,wBADd3yC,KAAK8qC,4BAA8B,KAG1B9qC,KAAKwoC,oBACdxoC,KAAK8qC,4BAA8BkJ,oBAC1Bh0C,KAAKyoC,sBAELzoC,KAAK4yC,mBAEL5yC,KAAKymD,wBAHdzmD,KAAK8qC,4BAA8B,KAMtC,CAEOhF,oBAAoB7B,GAC1BjkC,KAAKikC,oBAAsBA,EACvBjkC,KAAK0yC,yBACP1yC,KAAKqyC,kBAAkB5G,eAAiBjI,uBACtCS,EACAjkC,KAAKqyC,kBAAkB5G,gBAEhBzrC,KAAK2yC,wBACd3yC,KAAKuyC,iBAAiB9G,eAAiBjI,sBACrCS,EACAjkC,KAAKuyC,iBAAiB9G,gBAEfzrC,KAAKwoC,oBACdxoC,KAAKumC,aAAakF,eAAiBjI,uBACjCS,EACAjkC,KAAKumC,aAAakF,gBAEXzrC,KAAKyoC,qBACdzoC,KAAKymC,cAAcgF,eAAiBjI,uBAClCS,EACAjkC,KAAKymC,cAAcgF,gBAEZzrC,KAAK4yC,kBACd5yC,KAAKwyC,WAAW/G,eAAiBjI,gBAA6CS,EAAqBjkC,KAAKwyC,WAAW/G,gBAC1GzrC,KAAKymD,uBACdzmD,KAAK0mD,cAAcjb,eAAiBjI,mBAClCS,EACAjkC,KAAK0mD,cAAcjb,iBAGvBzrC,KAAKirC,wCACN,CAEOC,cAAcO,GACpB,IAAI3hC,EACA2hC,IACEA,EAAe6G,oBAAsB7G,EAAe6G,mBAAmBnjC,OAAS,EAClFrF,EAAe2hC,EAAe6G,mBAAmB,GAE7C7G,EAAexgB,eAAiBwgB,EAAexgB,cAAc9b,OAAS,IACxErF,EAAe2hC,EAAexgB,cAAc,KAK9CnhB,EACF9J,KAAK2kC,iBAAiBzL,QAAQpvB,GAActE,UAAWmlB,KACrD3qB,KAAKqmC,oBAAsB,IAAI8E,IAC/BnrC,KAAKqmC,oBAAoB96B,SAAW,IAAI6/B,IACxCprC,KAAKqmC,oBAAoB96B,SAASC,KAAOmf,GAAInf,KAC7CxL,KAAKqmC,oBAAoB96B,SAAS4gB,UAAYxB,GAAI0D,iBAAmB1D,GAAI0D,gBAAgBlf,OAAS,EAClGnP,KAAKqmC,oBAAoB96B,SAASjC,KAAOqhB,GAAIrhB,KAC7CtJ,KAAKqmC,oBAAoB96B,SAASM,KAAO8e,GAAI9e,KAEzC4/B,EAAe6G,oBAAsB7G,EAAe6G,mBAAmBnjC,OAAS,IAClFnP,KAAKqmC,oBAAoB+L,yBAA0B,GAGrDpyC,KAAK0mC,wCAAL,IAGF1mC,KAAKqmC,oBAAsB,KAE3BrmC,KAAK0mC,yCAER,CAEOkC,uBACF5oC,KAAK0yC,0BACH1yC,KAAKqyC,mBACPryC,KAAKkrC,cAAclrC,KAAKqyC,kBAAkB5G,gBAI1CzrC,KAAK2yC,yBACH3yC,KAAKuyC,kBACPvyC,KAAKkrC,cAAclrC,KAAKuyC,iBAAiB9G,gBAIzCzrC,KAAKwoC,qBACHxoC,KAAKumC,cACPvmC,KAAKkrC,cAAclrC,KAAKumC,aAAakF,gBAIrCzrC,KAAKyoC,sBACHzoC,KAAKymC,eACPzmC,KAAKkrC,cAAclrC,KAAKymC,cAAcgF,gBAItCzrC,KAAK4yC,mBACH5yC,KAAKwyC,YACPxyC,KAAKkrC,cAAclrC,KAAKwyC,WAAW/G,gBAInCzrC,KAAKymD,sBACHzmD,KAAK0mD,eACP1mD,KAAKkrC,cAAclrC,KAAK0mD,cAAcjb,eAG3C,CAEOJ,qBAAqBC,GACvBtrC,KAAKqyC,oBACPryC,KAAKurC,kCACH8E,EAAwB6C,mCACxBlzC,KAAKqyC,kBACL/G,GAEFtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKqyC,kBAAkB5G,eACvBgH,4BACAnH,IAIAtrC,KAAKuyC,mBACPvyC,KAAKurC,kCACH8E,EAAwB8C,kCACxBnzC,KAAKuyC,iBACLjH,GAEFtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKuyC,iBAAiB9G,eACtB,IACAH,IAIAtrC,KAAKumC,eACPvmC,KAAKurC,kCAAkC8E,EAAwB/G,8BAA+BtpC,KAAKumC,aAAc+E,GACjHtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKumC,aAAakF,eAClBgH,4BACAnH,IAIAtrC,KAAKymC,gBACPzmC,KAAKurC,kCACH8E,EAAwB9G,+BACxBvpC,KAAKymC,cACL6E,GAEFtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKymC,cAAcgF,eACnBgH,4BACAnH,IAIAtrC,KAAKwyC,aACPxyC,KAAKurC,kCAAkC8E,EAAwB+C,4BAA6BpzC,KAAKwyC,WAAYlH,GAC7GtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAKwyC,WAAW/G,eAChB,IACAH,IAIAtrC,KAAK0mD,gBACP1mD,KAAKurC,kCACH8E,EAAwBoX,+BACxBznD,KAAK0mD,cACLpb,GAEFtrC,KAAKwrC,8CACH6E,EAAwB1G,4BACxB3pC,KAAK0mD,cAAcjb,eACnB,IACAH,GAGL,CAEOE,8CACNnpC,EACAopC,EACAC,GACAJ,IAEA,MAAMK,GAA8B3rC,KAAK6E,sBAAsBwK,KAAKhN,GAKlErC,KAAKknC,yBAJFyE,IAE6B3rC,KAAK4rC,0BAKlC5rC,KAAKooC,cAAcpB,kBAAoBsE,MACrCtrC,KAAKooC,aAGRpoC,KAAKooC,aAAapB,iBAAmBhnC,KAAKknC,yBAF1ClnC,KAAKooC,aAAeuc,UAA4C3kD,KAAKknC,yBAA0BwE,IAKjGD,EAAezE,iBAAqCC,OAAOjnC,KAAKooC,aAAapB,mBAG/EhnC,KAAK4pC,sCAAwC5pC,KAAKooC,cAAcpB,mBAAqBhnC,KAAKknC,wBAC3F,CAEOqE,kCAAkClpC,EAAapD,EAA2BqsC,IAChF,MAAMhe,GAAOttB,KAAK6E,qBAAqBwK,KAAKhN,GAC5CpD,EAAM4sC,SAASP,GAAqBhe,IACpCttB,KAAKopC,0BAA4BnqC,EAAMoqC,0BACxC,CAEOyC,cAAc7sC,GAChBe,KAAK+rC,mBAAmBxc,aAAetwB,EAAMswB,aAC/CvvB,KAAK+rC,mBAAmBxc,WAAatwB,EAAMswB,YAGzCvvB,KAAK+rC,mBAAmBvc,gBAAkBvwB,EAAMuwB,gBAClDxvB,KAAK+rC,mBAAmBvc,cAAgBvwB,EAAMuwB,eAG5CxvB,KAAK+rC,mBAAmBC,eAAiB/sC,EAAM+sC,eACjDhsC,KAAK+rC,mBAAmBC,aAAe/sC,EAAM+sC,cAG3ChsC,KAAK+rC,mBAAmBE,wBAA0BhtC,EAAMgtC,wBAC1DjsC,KAAK+rC,mBAAmBE,sBAAwBhtC,EAAMgtC,sBAEzD,CAEOpD,uBACF7oC,KAAK0yC,yBACP1yC,KAAK8rC,cAAc9rC,KAAKqyC,mBACfryC,KAAK2yC,wBACd3yC,KAAK8rC,cAAc9rC,KAAKuyC,kBACfvyC,KAAKwoC,oBACdxoC,KAAK8rC,cAAc9rC,KAAKumC,cACfvmC,KAAKyoC,qBACdzoC,KAAK8rC,cAAc9rC,KAAKymC,eACfzmC,KAAK4yC,kBACd5yC,KAAK8rC,cAAc9rC,KAAKwyC,YACfxyC,KAAKymD,sBACdzmD,KAAK8rC,cAAc9rC,KAAK0mD,cAE3B,CAEOyB,wBAAwB1c,GAC9B,IAAIha,EACAga,GACEA,EAAeha,yBACjBA,EAAyBga,EAAeha,wBAIxCA,EACFzxB,KAAK+lD,2BAA2B7sB,QAAQzH,GAAwBjsB,UAAWmlB,KACzE3qB,KAAK6mD,8BAAgC,IAAIuB,IACzCpoD,KAAK6mD,8BAA8BE,mBAAqB,IAAIsB,IAC5DroD,KAAK6mD,8BAA8BE,mBAAmBv7C,KAAOmf,GAAInf,KACjExL,KAAK6mD,8BAA8BE,mBAAmBz9C,KAAOqhB,GAAIrhB,KACjEtJ,KAAK6mD,8BAA8BE,mBAAmBl7C,KAAO8e,GAAI9e,KAEjE7L,KAAKgnD,kDAAL,IAGFhnD,KAAK6mD,8BAAgC,KAErC7mD,KAAKgnD,mDAER,CAEOK,iCACFrnD,KAAK0yC,0BACH1yC,KAAKqyC,mBACPryC,KAAKmoD,wBAAwBnoD,KAAKqyC,kBAAkB5G,gBAIpDzrC,KAAK2yC,yBACH3yC,KAAKuyC,kBACPvyC,KAAKmoD,wBAAwBnoD,KAAKuyC,iBAAiB9G,gBAInDzrC,KAAKwoC,qBACHxoC,KAAKumC,cACPvmC,KAAKmoD,wBAAwBnoD,KAAKumC,aAAakF,gBAI/CzrC,KAAKyoC,sBACHzoC,KAAKymC,eACPzmC,KAAKmoD,wBAAwBnoD,KAAKymC,cAAcgF,gBAIhDzrC,KAAK4yC,mBACH5yC,KAAKwyC,YACPxyC,KAAKmoD,wBAAwBnoD,KAAKwyC,WAAW/G,gBAI7CzrC,KAAKymD,sBACHzmD,KAAK0mD,eACP1mD,KAAKmoD,wBAAwBnoD,KAAK0mD,cAAcjb,eAGrD,CAEOtD,wBAAwBC,GAC1BpoC,KAAK0yC,2BACFtK,IACHA,EAAeuc,UACb3kD,KAAKknC,yBACLuL,8BAIAzyC,KAAKqyC,oBACPjK,EAAeuc,2BACb3kD,KAAKqyC,kBAAkB5G,eACvBrD,EAAaliB,iBACblmB,KAAKknC,4BAKPlnC,KAAK2yC,0BACFvK,IACHA,EAAeuc,UAA4C3kD,KAAKknC,yBAA0B,MAGxFlnC,KAAKuyC,mBACPnK,EAAeuc,0BACb3kD,KAAKuyC,iBAAiB9G,eACtBrD,EAAaliB,iBACblmB,KAAKknC,4BAKPlnC,KAAKwoC,sBACFJ,IACHA,EAAeuc,UACb3kD,KAAKknC,yBACLuL,8BAIAzyC,KAAKumC,eACP6B,EAAeuc,2BACb3kD,KAAKumC,aAAakF,eAClBrD,EAAaliB,iBACblmB,KAAKknC,4BAKPlnC,KAAKyoC,uBACFL,IACHA,EAAeuc,UACb3kD,KAAKknC,yBACLuL,8BAIAzyC,KAAKymC,gBACP2B,EAAeuc,2BACb3kD,KAAKymC,cAAcgF,eACnBrD,EAAaliB,iBACblmB,KAAKknC,4BAKPlnC,KAAK4yC,oBACFxK,IACHA,EAAeuc,UAA4C3kD,KAAKknC,yBAA0B,MAGxFlnC,KAAKwyC,aACPpK,EAAeuc,oBACb3kD,KAAKwyC,WAAW/G,eAChBrD,EAAaliB,iBACblmB,KAAKknC,4BAKPlnC,KAAKymD,uBACFre,IACHA,EAAeuc,UAA4C3kD,KAAKknC,yBAA0B,MAGxFlnC,KAAK0mD,gBACPte,EAAeuc,uBACb3kD,KAAK0mD,cAAcjb,eACnBrD,EAAaliB,iBACblmB,KAAKknC,4BAKXlnC,KAAKooC,aAAeA,CACrB,CAEO8D,gBAAgB3B,GACtBvqC,KAAKyZ,WAAa,IAAI0yB,IAAgB5B,GACtCvqC,KAAK4kC,kBAAkBlpB,cAAc6uB,EACtC,CAEOzB,yBACF9oC,KAAK0yC,0BACH1yC,KAAKqyC,mBAAqBryC,KAAKqyC,kBAAkB5G,gBACnDzrC,KAAKksC,gBAAgBlsC,KAAKqyC,kBAAkB5G,eAAelB,YAI3DvqC,KAAK2yC,yBACH3yC,KAAKuyC,kBAAoBvyC,KAAKuyC,iBAAiB9G,gBACjDzrC,KAAKksC,gBAAgBlsC,KAAKuyC,iBAAiB9G,eAAelB,YAI1DvqC,KAAKwoC,qBACHxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAakF,gBACzCzrC,KAAKksC,gBAAgBlsC,KAAKumC,aAAakF,eAAelB,YAItDvqC,KAAKyoC,sBACHzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcgF,gBAC3CzrC,KAAKksC,gBAAgBlsC,KAAKymC,cAAcgF,eAAelB,YAIvDvqC,KAAK4yC,mBACH5yC,KAAKwyC,YAAcxyC,KAAKwyC,WAAW/G,gBACrCzrC,KAAKksC,gBAAgBlsC,KAAKwyC,WAAW/G,eAAelB,YAIpDvqC,KAAKymD,sBACHzmD,KAAK0mD,eAAiB1mD,KAAK0mD,cAAcjb,gBAC3CzrC,KAAKksC,gBAAgBlsC,KAAK0mD,cAAcjb,eAAelB,WAG5D,CAEOmI,yBACN,OAAO1yC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKoxC,sBAAsB7lB,KAC3E,CAEOonB,wBACN,OAAO3yC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKkxC,qBAAqB3lB,KAC1E,CAEOid,oBACN,OAAOxoC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKuxC,8BAA8BhmB,KACnF,CAEOkd,qBACN,OAAOzoC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKsxC,8BAA8B/lB,KACnF,CAEOqnB,kBACN,OAAO5yC,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKgxC,eAAezlB,KACpE,CAEOk7B,qBACN,OAAOzmD,KAAK6nC,WAAWtc,QAAUvrB,KAAKqlC,SAASrlC,KAAKqmD,kBAAkB96B,KACvE,CAEO0oB,uBAAuBplC,EAAkBw9B,GAC/CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKqyC,kBACLxjC,EACAwhC,EAAwB6D,sBAE1Bl0C,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKqyC,kBAAkB5G,gBAC7CzrC,KAAK6yC,wBAAwB7yC,KAAKqyC,kBAAkB5G,gBACpDzrC,KAAKikC,oBAAsBT,yBAAsDxjC,KAAKqyC,kBAAkB5G,gBACxGzrC,KAAKooC,aAAeuc,2BAClB3kD,KAAKqyC,kBAAkB5G,eACvBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEO8H,sBAAsBtlC,EAAkBw9B,GAC9CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKuyC,iBACL1jC,EACAwhC,EAAwB+D,qBAE1Bp0C,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKuyC,iBAAiB9G,gBAC5CzrC,KAAK6yC,wBAAwB7yC,KAAKuyC,iBAAiB9G,gBACnDzrC,KAAKq0C,mBAAmBr0C,KAAKuyC,iBAAiB9G,gBAC9CzrC,KAAKikC,oBAAsBT,wBAAqDxjC,KAAKuyC,iBAAiB9G,gBACtGzrC,KAAKooC,aAAeuc,0BAClB3kD,KAAKuyC,iBAAiB9G,eACtBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEOG,kBAAkB39B,EAAkBw9B,GAC1CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKumC,aACL13B,EACAwhC,EAAwB5D,iBAE1BzsC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKumC,aAAakF,gBACxCzrC,KAAK6yC,wBAAwB7yC,KAAKumC,aAAakF,gBAC/CzrC,KAAKikC,oBAAsBT,yBAAsDxjC,KAAKumC,aAAakF,gBACnGzrC,KAAKooC,aAAeuc,2BAClB3kD,KAAKumC,aAAakF,eAClBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEOK,mBAAmB79B,EAAkBw9B,GAC3CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKymC,cACL53B,EACAwhC,EAAwB1D,kBAE1B3sC,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKymC,cAAcgF,gBACzCzrC,KAAK6yC,wBAAwB7yC,KAAKymC,cAAcgF,gBAChDzrC,KAAKikC,oBAAsBT,yBAAsDxjC,KAAKymC,cAAcgF,gBACpGzrC,KAAKooC,aAAeuc,2BAClB3kD,KAAKymC,cAAcgF,eACnBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEOiI,gBAAgBzlC,EAAkBw9B,GACxCA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAKwyC,WACL3jC,EACAwhC,EAAwBkE,eAE1Bv0C,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAKwyC,WAAW/G,gBACtCzrC,KAAKq0C,mBAAmBr0C,KAAKwyC,WAAW/G,gBACxCzrC,KAAK6yC,wBAAwB7yC,KAAKwyC,WAAW/G,gBAC7CzrC,KAAKikC,oBAAsBT,kBAA+CxjC,KAAKwyC,WAAW/G,gBAC1FzrC,KAAKooC,aAAeuc,oBAClB3kD,KAAKwyC,WAAW/G,eAChBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEO1D,WAAW95B,GACjB,IAAIw9B,GAAmB,EACvBrsC,KAAKqrC,sBAAsBx8B,GAEvB7O,KAAK0yC,2BACPrG,EAAmBrsC,KAAKi0C,uBAAuBplC,EAAUw9B,GACzDrsC,KAAKopC,0BAA4BppC,KAAKqyC,kBAAkBhJ,2BACxDrpC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,0BACrGlnC,KAAKw0C,oDACLx0C,KAAKy0C,gDACLz0C,KAAK00C,iDACL10C,KAAK20C,8CACL30C,KAAKsoD,kDAGHtoD,KAAK2yC,0BACPtG,EAAmBrsC,KAAKm0C,sBAAsBtlC,EAAUw9B,GACxDrsC,KAAKopC,0BAA4BppC,KAAKuyC,iBAAiBlJ,2BACvDrpC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,0BACpGlnC,KAAK40C,oDACL50C,KAAK60C,+CACL70C,KAAK80C,gDACL90C,KAAK+0C,6CACL/0C,KAAKuoD,iDAGHvoD,KAAKwoC,sBACP6D,EAAmBrsC,KAAKwsC,kBAAkB39B,EAAUw9B,GACpDrsC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,0BAChGlnC,KAAKg1C,gDACLh1C,KAAKi1C,+CACLj1C,KAAK+sC,4CACL/sC,KAAKk1C,yCACLl1C,KAAKwoD,6CAGHxoD,KAAKyoC,uBACP4D,EAAmBrsC,KAAK0sC,mBAAmB79B,EAAUw9B,GACrDrsC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,0BACjGlnC,KAAKm1C,iDACLn1C,KAAKo1C,gDACLp1C,KAAKitC,4CACLjtC,KAAKq1C,0CACLr1C,KAAKyoD,8CAGHzoD,KAAK4yC,oBACPvG,EAAmBrsC,KAAKs0C,gBAAgBzlC,EAAUw9B,GAClDrsC,KAAKopC,0BAA4BppC,KAAKwyC,WAAWnJ,2BACjDrpC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,0BAC9FlnC,KAAKs1C,8CACLt1C,KAAKu1C,6CACLv1C,KAAKw1C,yCACLx1C,KAAKy1C,0CACLz1C,KAAK0oD,2CAGH1oD,KAAKymD,uBACPpa,EAAmBrsC,KAAK2oD,mBAAmB95C,EAAUw9B,GACrDrsC,KAAKopC,0BAA4BppC,KAAK0mD,cAAcrd,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAK0mD,cAAcne,sCAAsCvoC,KAAKknC,0BACjGlnC,KAAK4oD,iDACL5oD,KAAK6oD,gDACL7oD,KAAK8oD,4CACL9oD,KAAK+oD,6CACL/oD,KAAKgpD,2CAGH3c,GACFrsC,KAAKktC,eAAc,EAGtB,CAEOyb,mBAAmB95C,EAAkBw9B,GAC3CA,SAAmBrsC,KAAKiF,uBAAuBu7B,qCAC7CxgC,KAAK0mD,cACL73C,EACAwhC,EAAwB4Y,kBAE1BjpD,KAAKqrC,sBAAqB,GAC1BrrC,KAAKusC,iBAAiBvsC,KAAK0mD,cAAcjb,gBACzCzrC,KAAKq0C,mBAAmBr0C,KAAK0mD,cAAcjb,gBAC3CzrC,KAAK6yC,wBAAwB7yC,KAAK0mD,cAAcjb,gBAChDzrC,KAAKikC,oBAAsBT,qBAAkDxjC,KAAK0mD,cAAcjb,gBAChGzrC,KAAKooC,aAAeuc,uBAClB3kD,KAAK0mD,cAAcjb,eACnBzrC,KAAKooC,aAAaliB,iBAClBlmB,KAAKknC,0BAGAmF,CACR,CAEOnG,kBACFlmC,KAAKqyC,oBACPryC,KAAKqyC,kBAAkB/iB,UAAY,GAGjCtvB,KAAKuyC,mBACPvyC,KAAKuyC,iBAAiBjjB,UAAY,GAGhCtvB,KAAKumC,eACPvmC,KAAKumC,aAAajX,UAAY,GAG5BtvB,KAAKymC,gBACPzmC,KAAKymC,cAAcnX,UAAY,GAG7BtvB,KAAKwyC,aACPxyC,KAAKwyC,WAAWljB,UAAY,GAG1BtvB,KAAK0mD,gBACP1mD,KAAK0mD,cAAcp3B,UAAY,EAElC,CAEO4Z,kBAAkB5b,EAAgBruB,EAA2BkuC,IACnE7f,EAAK9rB,KAAKvC,EAAMuwB,cAAevwB,EAAMswB,YACrCvvB,KAAK6E,qBAAqByD,MAAM6kC,GAAoB7f,GAGpDruB,EAAMmuC,oCACNC,iBAAgCrtC,KAAK+rC,mBAAoB9sC,EAC1D,CAEOknC,0BAA0B7N,GAAa,GAC7Ct4B,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,mBACrFryC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,kBACpFvyC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,cAChFvmC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,eACjFzmC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,YAC9ExyC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB4Y,iBAAkBjpD,KAAK0mD,eAE7E1mD,KAAK0yC,0BACP1yC,KAAKopC,0BAA4BppC,KAAKqyC,kBAAkBhJ,2BACxDrpC,KAAKsoC,4BAA8BtoC,KAAKqyC,kBAAkB9J,sCAAsCvoC,KAAKknC,2BAC5FlnC,KAAK2yC,yBACd3yC,KAAKopC,0BAA4BppC,KAAKuyC,iBAAiBlJ,2BACvDrpC,KAAKsoC,4BAA8BtoC,KAAKuyC,iBAAiBhK,sCAAsCvoC,KAAKknC,2BAC3FlnC,KAAKwoC,qBACdxoC,KAAKopC,0BAA4BppC,KAAKumC,aAAa8C,2BACnDrpC,KAAKsoC,4BAA8BtoC,KAAKumC,aAAagC,sCAAsCvoC,KAAKknC,2BACvFlnC,KAAKyoC,sBACdzoC,KAAKopC,0BAA4BppC,KAAKymC,cAAc4C,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAKymC,cAAc8B,sCAAsCvoC,KAAKknC,2BACxFlnC,KAAK4yC,mBACd5yC,KAAKopC,0BAA4BppC,KAAKwyC,WAAWnJ,2BACjDrpC,KAAKsoC,4BAA8BtoC,KAAKwyC,WAAWjK,sCAAsCvoC,KAAKknC,2BACrFlnC,KAAKymD,uBACdzmD,KAAKopC,0BAA4BppC,KAAK0mD,cAAcrd,2BACpDrpC,KAAKsoC,4BAA8BtoC,KAAK0mD,cAAcne,sCAAsCvoC,KAAKknC,2BAGnGlnC,KAAKktC,cAAc5U,EACpB,CAEO4U,cAAc5U,GAAa,GAC7Bt4B,KAAK0yC,yBACP1yC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKqyC,oBAC3Cha,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAK2yC,wBACd3yC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKuyC,mBAC3Cla,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAKwoC,oBACdxoC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKumC,eAC3ClO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAKyoC,qBACdzoC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKymC,gBAC3CpO,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAK4yC,kBACd5yC,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAKwyC,aAC3Cna,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,KAElBt4B,KAAKymD,sBACdzmD,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAK6nC,WAAWxoB,MAAO,CAC5C+Y,WAAYp4B,KAAK82B,gBACjBgB,YAAa,CAAEE,OAAQlwB,KAAKoC,UAAUlK,KAAK0mD,gBAC3CruB,oBAAqB,QACrBC,WAAYA,EACZr5B,MAAO,CAAEs5B,eAAgBD,IAG9B,CAEOiU,iBAAiBd,GACvB,IAAI3hC,EAAe,KACf2hC,EAAe6G,oBAAsB7G,EAAe6G,mBAAmBnjC,OAAS,EAClFrF,EAAe2hC,EAAe6G,mBAAmB,GAE7C7G,EAAexgB,eAAiBwgB,EAAexgB,cAAc9b,OAAS,IACxErF,EAAe2hC,EAAexgB,cAAc,IAGhDjrB,KAAKsmC,mBAAqBx8B,EAE1B9J,KAAKswC,qBAAqBxoB,0BAA0Bhe,EACrD,CAEO+oC,wBAAwBpH,GAC9B,IAAIiK,EAAgC,IAAItwC,MAExC,MAAMssC,GAAuB,IAAItsC,MACjCqmC,EAAe9Q,gBAAgB/2B,QAAS+xC,KACtC,MAAMC,GAAS51C,KAAK2xC,4BAA4B5wB,KAAMriB,IAAMozC,WAA2BpzC,GAAE6sB,SAAWoqB,IAChGC,IACFlE,GAAqBlwC,KAAKo0C,GAA1B,GAGJ,MAAMC,GAA+B,IAAIzwC,MACzCqmC,EAAeqI,wBAAwBlwC,QAAS+xC,KAC9C,MAAMC,GAAS51C,KAAK2xC,4BAA4B5wB,KAAMriB,IAAMozC,WAA2BpzC,GAAE6sB,SAAWoqB,IAChGC,IACFC,GAA6Br0C,KAAKo0C,GAAlC,GAGJ,MAAMlC,GAA8B1zC,KAAK2xC,4BAA4B5wB,KAAMriB,IAAgB,MAAVA,GAAE2D,KAC7EsxC,GAAkC3zC,KAAK2xC,4BAA4B5wB,KAAMriB,IAAgB,MAAVA,GAAE2D,KAEnFopC,EAAeoI,uBACbpI,EAAe9Q,gBAAkB8Q,EAAeqI,yBAClD4B,EAAgChE,GAChCgE,EAA8Bl0C,KAAKkyC,IACnCgC,EAA8Bl0C,KAAKmyC,MAGhClI,EAAe9Q,iBAAmB8Q,EAAeqI,wBACpD4B,EAA8Bl0C,KAAKkyC,IAGjCjI,EAAe9Q,iBAAmB8Q,EAAeqI,yBACnD4B,EAAgChE,GAChCgE,EAA8Bl0C,KAAKkyC,MAGhCjI,EAAe9Q,gBAAkB8Q,EAAeqI,yBACnD4B,EAA8Bl0C,KAAKmyC,IACnC+B,EAA8Bl0C,KAAKkyC,OAGjCjI,EAAe9Q,gBAAkB8Q,EAAeqI,yBAClD4B,EAAgChE,GAChCgE,EAA8Bl0C,KAAKmyC,MAEhClI,EAAe9Q,iBAAmB8Q,EAAeqI,yBACpD4B,EAAgC,IAAItwC,OAElCqmC,EAAe9Q,iBAAmB8Q,EAAeqI,yBACnD4B,EAAgChE,KAE7BjG,EAAe9Q,gBAAkB8Q,EAAeqI,wBACnD4B,EAA8Bl0C,KAAKmyC,KAIvC3zC,KAAK81C,6BAA+BJ,CACrC,CAEOrB,mBAAmB5I,GACzBzrC,KAAK+1C,sBAAwBjF,wBAAyCrF,EAAehhB,OACtF,CAEO28B,iBAAiB3b,GACvB,IAAIyd,EAcJ,GAZEA,EADEzd,EAAeoc,gBAAkBpc,EAAeoc,eAAe14C,OAAS,EAClDs8B,EAAeoc,eAAe,GAC7Cpc,EAAemc,WACAnc,EAAemc,WAC9Bnc,EAAeqc,kBACAH,+CAEA,KAGtB3nD,KAAK+nD,gCAAkCmB,IACzClpD,KAAK+nD,8BAAgC,MAEnCmB,EAAuB,CAEzB,MAAMC,GAAoBnpD,KAAKkoD,oBAAoBnnC,KAAMooC,IAAsBA,GAAkB9mD,MAAQ6mD,GACrGC,KACFnpD,KAAK+nD,8BAAgCoB,GAAkB9mD,IACvDrC,KAAKgoD,gDAAkDmB,IAIpDA,KACHnpD,KAAK+nD,8BAAgC,KACrC/nD,KAAKgoD,gDAAkD,KAE1D,CACF,CAEOpT,oDACN50C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKqyC,kBACL,KACAhC,EAAwB6D,sBAG1B1Q,qCACExjC,KAAKqyC,kBAAkB5G,eACvBzrC,KAAKuyC,iBAAiB9G,gBAGxBzrC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqBtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBAChGtyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgBjrB,KAAKuyC,iBAAiB9G,eAAexgB,cAE3FjrB,KAAKqyC,kBAAkB5G,eAAe9Q,eAAiB36B,KAAKuyC,iBAAiB9G,eAAe9Q,eAC5F36B,KAAKqyC,kBAAkB5G,eAAeqI,uBAAyB9zC,KAAKuyC,iBAAiB9G,eAAeqI,uBACpG9zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAAwB7zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAEnG7zC,KAAKqyC,kBAAkB5G,eAAemc,WAAa5nD,KAAKuyC,iBAAiB9G,eAAemc,WACxF5nD,KAAKqyC,kBAAkB5G,eAAeoc,eAAiB7nD,KAAKuyC,iBAAiB9G,eAAeoc,eAC5F7nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAAoB9nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAE/F9nD,KAAKqyC,kBAAkB5G,eAAevT,iBAAmBl4B,KAAKuyC,iBAAiB9G,eAAevT,iBAC9Fl4B,KAAKqyC,kBAAkB5G,eAAezE,iBAAmBhnC,KAAKuyC,iBAAiB9G,eAAezE,iBAEzFhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAA8E,IAA1DhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAIjGhnC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmB,KACzDxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiB,OAJvDztC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKuyC,iBAAiB9G,eAAe+B,iBAC9FxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKuyC,iBAAiB9G,eAAegC,gBAM9FztC,KAAKqyC,kBAAkB5G,eAAeiC,gBAAkB,KACxD1tC,KAAKqyC,kBAAkB5G,eAAekC,cAAgB,KAGtD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,kBACtF,CAEO2C,gDAENh1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKqyC,kBACL,KACAhC,EAAwB6D,sBAG1B1Q,qCACExjC,KAAKqyC,kBAAkB5G,eACvBzrC,KAAKumC,aAAakF,gBAGpBzrC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqBtyC,KAAKumC,aAAakF,eAAe6G,mBAC5FtyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgBjrB,KAAKumC,aAAakF,eAAexgB,cAEvFjrB,KAAKqyC,kBAAkB5G,eAAe9Q,eAAiB36B,KAAKumC,aAAakF,eAAe9Q,eACxF36B,KAAKqyC,kBAAkB5G,eAAeqI,uBAAyB9zC,KAAKumC,aAAakF,eAAeqI,uBAChG9zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAAwB7zC,KAAKumC,aAAakF,eAAeoI,sBAE/F7zC,KAAKqyC,kBAAkB5G,eAAemc,WAAa5nD,KAAKumC,aAAakF,eAAemc,WACpF5nD,KAAKqyC,kBAAkB5G,eAAeoc,eAAiB7nD,KAAKumC,aAAakF,eAAeoc,eACxF7nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAAoB9nD,KAAKumC,aAAakF,eAAeqc,kBAE3F9nD,KAAKqyC,kBAAkB5G,eAAevT,iBAAmBl4B,KAAKumC,aAAakF,eAAevT,iBAC1Fl4B,KAAKqyC,kBAAkB5G,eAAezE,iBAAmBhnC,KAAKumC,aAAakF,eAAezE,iBAErFhnC,KAAKumC,aAAakF,eAAezE,kBAA0E,IAAtDhnC,KAAKumC,aAAakF,eAAezE,kBASzFhnC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmB,KACzDxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiB,MATnDztC,KAAKumC,aAAakF,eAAe+B,kBACnCxtC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAe+B,iBAC1FxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAegC,iBAExFztC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAeiC,gBAC1F1tC,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAekC,eAO5F3tC,KAAKqyC,kBAAkB5G,eAAeiC,gBAAkB,KACxD1tC,KAAKqyC,kBAAkB5G,eAAekC,cAAgB,KAGtD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,kBACtF,CAEO8C,iDAENn1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKqyC,kBACL,KACAhC,EAAwB6D,sBAG1B1Q,qCACExjC,KAAKqyC,kBAAkB5G,eACvBzrC,KAAKymC,cAAcgF,gBAGrBzrC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqBtyC,KAAKymC,cAAcgF,eAAe6G,mBAC7FtyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgBjrB,KAAKymC,cAAcgF,eAAexgB,cAExFjrB,KAAKqyC,kBAAkB5G,eAAe9Q,eAAiB36B,KAAKymC,cAAcgF,eAAe9Q,eACzF36B,KAAKqyC,kBAAkB5G,eAAeqI,uBAAyB9zC,KAAKymC,cAAcgF,eAAeqI,uBACjG9zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAAwB7zC,KAAKymC,cAAcgF,eAAeoI,sBAEhG7zC,KAAKqyC,kBAAkB5G,eAAemc,WAAa5nD,KAAKymC,cAAcgF,eAAemc,WACrF5nD,KAAKqyC,kBAAkB5G,eAAeoc,eAAiB7nD,KAAKymC,cAAcgF,eAAeoc,eACzF7nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAAoB9nD,KAAKymC,cAAcgF,eAAeqc,kBAE5F9nD,KAAKqyC,kBAAkB5G,eAAevT,iBAAmBl4B,KAAKymC,cAAcgF,eAAevT,iBAC3Fl4B,KAAKqyC,kBAAkB5G,eAAezE,iBAAmBhnC,KAAKymC,cAAcgF,eAAezE,iBAEtFhnC,KAAKymC,cAAcgF,eAAezE,kBAA2E,IAAvDhnC,KAAKymC,cAAcgF,eAAezE,kBAI3FhnC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmB,KACzDxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiB,OAJvDztC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKymC,cAAcgF,eAAe+B,iBAC3FxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKymC,cAAcgF,eAAegC,gBAM3FztC,KAAKqyC,kBAAkB5G,eAAeiC,gBAAkB,KACxD1tC,KAAKqyC,kBAAkB5G,eAAekC,cAAgB,KAGtD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,kBACtF,CAEOiD,8CAENt1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKqyC,kBACL,KACAhC,EAAwB6D,sBAG1B1Q,qCACExjC,KAAKqyC,kBAAkB5G,eACvBzrC,KAAKwyC,WAAW/G,gBAGlBzrC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqBtyC,KAAKwyC,WAAW/G,eAAe6G,mBAC1FtyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgBjrB,KAAKwyC,WAAW/G,eAAexgB,cAErFjrB,KAAKqyC,kBAAkB5G,eAAe9Q,eAAiB36B,KAAKwyC,WAAW/G,eAAe9Q,eACtF36B,KAAKqyC,kBAAkB5G,eAAeqI,uBAAyB9zC,KAAKwyC,WAAW/G,eAAeqI,uBAC9F9zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAAwB7zC,KAAKwyC,WAAW/G,eAAeoI,sBAE7F7zC,KAAKqyC,kBAAkB5G,eAAemc,WAAa5nD,KAAKwyC,WAAW/G,eAAemc,WAClF5nD,KAAKqyC,kBAAkB5G,eAAeoc,eAAiB7nD,KAAKwyC,WAAW/G,eAAeoc,eACtF7nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAAoB9nD,KAAKwyC,WAAW/G,eAAeqc,kBAEzF9nD,KAAKqyC,kBAAkB5G,eAAevT,iBAAmBl4B,KAAKwyC,WAAW/G,eAAevT,iBACxFl4B,KAAKqyC,kBAAkB5G,eAAezE,iBAAmBhnC,KAAKwyC,WAAW/G,eAAezE,iBAEnFhnC,KAAKwyC,WAAW/G,eAAezE,kBAAwE,IAApDhnC,KAAKwyC,WAAW/G,eAAezE,kBAIrFhnC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmB,KACzDxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiB,OAJvDztC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAKwyC,WAAW/G,eAAeuK,cACxFh2C,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAKwyC,WAAW/G,eAAewK,aAMxFj2C,KAAKqyC,kBAAkB5G,eAAeiC,gBAAkB,KACxD1tC,KAAKqyC,kBAAkB5G,eAAekC,cAAgB,KAGtD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,kBACtF,CAEOuW,iDACN5oD,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKqyC,kBACL,KACAhC,EAAwB6D,sBAG1B1Q,4BAAyDxjC,KAAKqyC,kBAAkB5G,eAAgBzrC,KAAK0mD,cAAcjb,gBAEnHzrC,KAAKqyC,kBAAkB5G,eAAe6G,mBAAqBtyC,KAAK0mD,cAAcjb,eAAe6G,mBAC7FtyC,KAAKqyC,kBAAkB5G,eAAexgB,cAAgBjrB,KAAK0mD,cAAcjb,eAAexgB,cAExFjrB,KAAKqyC,kBAAkB5G,eAAe9Q,eAAiB36B,KAAK0mD,cAAcjb,eAAe9Q,eACzF36B,KAAKqyC,kBAAkB5G,eAAeqI,uBAAyB9zC,KAAK0mD,cAAcjb,eAAeqI,uBACjG9zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAAwB7zC,KAAK0mD,cAAcjb,eAAeoI,sBAEhG7zC,KAAKqyC,kBAAkB5G,eAAemc,WAAa5nD,KAAK0mD,cAAcjb,eAAemc,WACrF5nD,KAAKqyC,kBAAkB5G,eAAeoc,eAAiB7nD,KAAK0mD,cAAcjb,eAAeoc,eACzF7nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAAoB9nD,KAAK0mD,cAAcjb,eAAeqc,kBAE5F9nD,KAAKqyC,kBAAkB5G,eAAevT,iBAAmBl4B,KAAK0mD,cAAcjb,eAAevT,iBAC3Fl4B,KAAKqyC,kBAAkB5G,eAAezE,iBAAmBhnC,KAAK0mD,cAAcjb,eAAezE,iBAEtFhnC,KAAK0mD,cAAcjb,eAAezE,kBAA2E,IAAvDhnC,KAAK0mD,cAAcjb,eAAezE,kBAI3FhnC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmB,KACzDxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiB,OAJvDztC,KAAKqyC,kBAAkB5G,eAAe+B,iBAAmBxtC,KAAK0mD,cAAcjb,eAAe+B,iBAC3FxtC,KAAKqyC,kBAAkB5G,eAAegC,eAAiBztC,KAAK0mD,cAAcjb,eAAegC,gBAM3FztC,KAAKqyC,kBAAkB5G,eAAeiC,gBAAkB,KACxD1tC,KAAKqyC,kBAAkB5G,eAAekC,cAAgB,KAGtD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB6D,qBAAsBl0C,KAAKqyC,kBACtF,CAEOmC,oDACNx0C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKuyC,iBACL,KACAlC,EAAwB+D,qBAG1B5Q,qCACExjC,KAAKuyC,iBAAiB9G,eACtBzrC,KAAKqyC,kBAAkB5G,gBAGzBzrC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqBtyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAChGtyC,KAAKuyC,iBAAiB9G,eAAexgB,cAAgBjrB,KAAKqyC,kBAAkB5G,eAAexgB,cAE3FjrB,KAAKuyC,iBAAiB9G,eAAe9Q,eAAiB36B,KAAKqyC,kBAAkB5G,eAAe9Q,eAC5F36B,KAAKuyC,iBAAiB9G,eAAeqI,uBAAyB9zC,KAAKqyC,kBAAkB5G,eAAeqI,uBACpG9zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAAwB7zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAEnG7zC,KAAKuyC,iBAAiB9G,eAAemc,WAAa5nD,KAAKqyC,kBAAkB5G,eAAemc,WACxF5nD,KAAKuyC,iBAAiB9G,eAAeoc,eAAiB7nD,KAAKqyC,kBAAkB5G,eAAeoc,eAC5F7nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAAoB9nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAE/F9nD,KAAKuyC,iBAAiB9G,eAAevT,iBAAmBl4B,KAAKqyC,kBAAkB5G,eAAevT,iBAC9Fl4B,KAAKuyC,iBAAiB9G,eAAezE,iBAAmBhnC,KAAKqyC,kBAAkB5G,eAAezE,iBAEzFhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAA+E,IAA3DhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAInGhnC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmB,KACxDxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiB,OAJtDztC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKqyC,kBAAkB5G,eAAe+B,iBAC9FxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKqyC,kBAAkB5G,eAAegC,gBAO9FztC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,iBACrF,CAEO0C,+CACNj1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKuyC,iBACL,KACAlC,EAAwB+D,qBAG1B5Q,qCACExjC,KAAKuyC,iBAAiB9G,eACtBzrC,KAAKumC,aAAakF,gBAGpBzrC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqBtyC,KAAKumC,aAAakF,eAAe6G,mBAC3FtyC,KAAKuyC,iBAAiB9G,eAAexgB,cAAgBjrB,KAAKumC,aAAakF,eAAexgB,cAEtFjrB,KAAKuyC,iBAAiB9G,eAAe9Q,eAAiB36B,KAAKumC,aAAakF,eAAe9Q,eACvF36B,KAAKuyC,iBAAiB9G,eAAeqI,uBAAyB9zC,KAAKumC,aAAakF,eAAeqI,uBAC/F9zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAAwB7zC,KAAKumC,aAAakF,eAAeoI,sBAE9F7zC,KAAKuyC,iBAAiB9G,eAAemc,WAAa5nD,KAAKumC,aAAakF,eAAemc,WACnF5nD,KAAKuyC,iBAAiB9G,eAAeoc,eAAiB7nD,KAAKumC,aAAakF,eAAeoc,eACvF7nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAAoB9nD,KAAKumC,aAAakF,eAAeqc,kBAE1F9nD,KAAKuyC,iBAAiB9G,eAAevT,iBAAmBl4B,KAAKumC,aAAakF,eAAevT,iBACzFl4B,KAAKuyC,iBAAiB9G,eAAezE,iBAAmBhnC,KAAKumC,aAAakF,eAAezE,iBAEpFhnC,KAAKumC,aAAakF,eAAezE,kBAA0E,IAAtDhnC,KAAKumC,aAAakF,eAAezE,kBASzFhnC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmB,KACxDxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiB,MATlDztC,KAAKumC,aAAakF,eAAe+B,kBACnCxtC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAe+B,iBACzFxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAegC,iBAEvFztC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAeiC,gBACzF1tC,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAekC,eAQ3F3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,iBACrF,CAEO6C,gDACNp1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKuyC,iBACL,KACAlC,EAAwB+D,qBAG1B5Q,qCACExjC,KAAKuyC,iBAAiB9G,eACtBzrC,KAAKymC,cAAcgF,gBAGrBzrC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqBtyC,KAAKymC,cAAcgF,eAAe6G,mBAC5FtyC,KAAKuyC,iBAAiB9G,eAAexgB,cAAgBjrB,KAAKymC,cAAcgF,eAAexgB,cAEvFjrB,KAAKuyC,iBAAiB9G,eAAe9Q,eAAiB36B,KAAKymC,cAAcgF,eAAe9Q,eACxF36B,KAAKuyC,iBAAiB9G,eAAeqI,uBAAyB9zC,KAAKymC,cAAcgF,eAAeqI,uBAChG9zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAAwB7zC,KAAKymC,cAAcgF,eAAeoI,sBAE/F7zC,KAAKuyC,iBAAiB9G,eAAemc,WAAa5nD,KAAKymC,cAAcgF,eAAemc,WACpF5nD,KAAKuyC,iBAAiB9G,eAAeoc,eAAiB7nD,KAAKymC,cAAcgF,eAAeoc,eACxF7nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAAoB9nD,KAAKymC,cAAcgF,eAAeqc,kBAE3F9nD,KAAKuyC,iBAAiB9G,eAAevT,iBAAmBl4B,KAAKymC,cAAcgF,eAAevT,iBAC1Fl4B,KAAKuyC,iBAAiB9G,eAAezE,iBAAmBhnC,KAAKymC,cAAcgF,eAAezE,iBAErFhnC,KAAKymC,cAAcgF,eAAezE,kBAA2E,IAAvDhnC,KAAKymC,cAAcgF,eAAezE,kBAI3FhnC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmB,KACxDxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiB,OAJtDztC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKymC,cAAcgF,eAAe+B,iBAC1FxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKymC,cAAcgF,eAAegC,gBAO1FztC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,iBACrF,CAEOgD,6CACNv1C,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKuyC,iBACL,KACAlC,EAAwB+D,qBAG1B5Q,qCAAkExjC,KAAKuyC,iBAAiB9G,eAAgBzrC,KAAKwyC,WAAW/G,gBAExHzrC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqBtyC,KAAKwyC,WAAW/G,eAAe6G,mBACzFtyC,KAAKuyC,iBAAiB9G,eAAexgB,cAAgBjrB,KAAKwyC,WAAW/G,eAAexgB,cACpFjrB,KAAKuyC,iBAAiB9G,eAAehhB,OAASzqB,KAAKwyC,WAAW/G,eAAehhB,OAE7EzqB,KAAKuyC,iBAAiB9G,eAAe9Q,eAAiB36B,KAAKwyC,WAAW/G,eAAe9Q,eACrF36B,KAAKuyC,iBAAiB9G,eAAeqI,uBAAyB9zC,KAAKwyC,WAAW/G,eAAeqI,uBAC7F9zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAAwB7zC,KAAKwyC,WAAW/G,eAAeoI,sBAE5F7zC,KAAKuyC,iBAAiB9G,eAAemc,WAAa5nD,KAAKwyC,WAAW/G,eAAemc,WACjF5nD,KAAKuyC,iBAAiB9G,eAAeoc,eAAiB7nD,KAAKwyC,WAAW/G,eAAeoc,eACrF7nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAAoB9nD,KAAKwyC,WAAW/G,eAAeqc,kBAExF9nD,KAAKuyC,iBAAiB9G,eAAevT,iBAAmBl4B,KAAKwyC,WAAW/G,eAAevT,iBACvFl4B,KAAKuyC,iBAAiB9G,eAAezE,iBAAmBhnC,KAAKwyC,WAAW/G,eAAezE,iBAElFhnC,KAAKwyC,WAAW/G,eAAezE,kBAAwE,IAApDhnC,KAAKwyC,WAAW/G,eAAezE,kBAIrFhnC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmB,KACxDxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiB,OAJtDztC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAKwyC,WAAW/G,eAAeuK,cACvFh2C,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAKwyC,WAAW/G,eAAewK,aAOvFj2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,iBACrF,CAEOsW,gDACN7oD,KAAKiF,uBAAuBu7B,qCAC1BxgC,KAAKuyC,iBACL,KACAlC,EAAwB+D,qBAG1B5Q,4BAAyDxjC,KAAKuyC,iBAAiB9G,eAAgBzrC,KAAK0mD,cAAcjb,gBAElHzrC,KAAKuyC,iBAAiB9G,eAAe6G,mBAAqBtyC,KAAK0mD,cAAcjb,eAAe6G,mBAC5FtyC,KAAKuyC,iBAAiB9G,eAAexgB,cAAgBjrB,KAAK0mD,cAAcjb,eAAexgB,cACvFjrB,KAAKuyC,iBAAiB9G,eAAehhB,OAASzqB,KAAK0mD,cAAcjb,eAAehhB,OAEhFzqB,KAAKuyC,iBAAiB9G,eAAe9Q,eAAiB36B,KAAK0mD,cAAcjb,eAAe9Q,eACxF36B,KAAKuyC,iBAAiB9G,eAAeqI,uBAAyB9zC,KAAK0mD,cAAcjb,eAAeqI,uBAChG9zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAAwB7zC,KAAK0mD,cAAcjb,eAAeoI,sBAE/F7zC,KAAKuyC,iBAAiB9G,eAAemc,WAAa5nD,KAAK0mD,cAAcjb,eAAemc,WACpF5nD,KAAKuyC,iBAAiB9G,eAAeoc,eAAiB7nD,KAAK0mD,cAAcjb,eAAeoc,eACxF7nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAAoB9nD,KAAK0mD,cAAcjb,eAAeqc,kBAE3F9nD,KAAKuyC,iBAAiB9G,eAAevT,iBAAmBl4B,KAAK0mD,cAAcjb,eAAevT,iBAC1Fl4B,KAAKuyC,iBAAiB9G,eAAezE,iBAAmBhnC,KAAK0mD,cAAcjb,eAAezE,iBAErFhnC,KAAK0mD,cAAcjb,eAAezE,kBAA2E,IAAvDhnC,KAAK0mD,cAAcjb,eAAezE,kBAI3FhnC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmB,KACxDxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiB,OAJtDztC,KAAKuyC,iBAAiB9G,eAAe+B,iBAAmBxtC,KAAK0mD,cAAcjb,eAAe+B,iBAC1FxtC,KAAKuyC,iBAAiB9G,eAAegC,eAAiBztC,KAAK0mD,cAAcjb,eAAegC,gBAO1FztC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB+D,oBAAqBp0C,KAAKuyC,iBACrF,CAEOkC,gDAENz0C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM8J,EAAwB5D,iBAElHjJ,qCACExjC,KAAKumC,aAAakF,eAClBzrC,KAAKqyC,kBAAkB5G,gBAGzBzrC,KAAKumC,aAAakF,eAAe6G,mBAAqBtyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAC5FtyC,KAAKumC,aAAakF,eAAexgB,cAAgBjrB,KAAKqyC,kBAAkB5G,eAAexgB,cAEvFjrB,KAAKumC,aAAakF,eAAe9Q,eAAiB36B,KAAKqyC,kBAAkB5G,eAAe9Q,eACxF36B,KAAKumC,aAAakF,eAAeqI,uBAAyB9zC,KAAKqyC,kBAAkB5G,eAAeqI,uBAChG9zC,KAAKumC,aAAakF,eAAeoI,sBAAwB7zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAE/F7zC,KAAKumC,aAAakF,eAAemc,WAAa5nD,KAAKqyC,kBAAkB5G,eAAemc,WACpF5nD,KAAKumC,aAAakF,eAAeoc,eAAiB7nD,KAAKqyC,kBAAkB5G,eAAeoc,eACxF7nD,KAAKumC,aAAakF,eAAeqc,kBAAoB9nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAE3F9nD,KAAKumC,aAAakF,eAAevT,iBAAmBl4B,KAAKqyC,kBAAkB5G,eAAevT,iBAC1Fl4B,KAAKumC,aAAakF,eAAezE,iBAAmBhnC,KAAKqyC,kBAAkB5G,eAAezE,iBAErFhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAA+E,IAA3DhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAanGhnC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAf7C3tC,KAAKumC,aAAakF,eAAeiC,iBACnC1tC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB1tC,KAAKqyC,kBAAkB5G,eAAe+B,iBACzFxtC,KAAKumC,aAAakF,eAAekC,cAAgB3tC,KAAKqyC,kBAAkB5G,eAAegC,iBAEvFztC,KAAKumC,aAAakF,eAAe+B,iBAAmBxtC,KAAKqyC,kBAAkB5G,eAAe+B,iBAC1FxtC,KAAKumC,aAAakF,eAAegC,eAAiBztC,KAAKqyC,kBAAkB5G,eAAegC,eACxFztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAUrD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,aACjF,CAEOsO,+CAEN70C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM8J,EAAwB5D,iBAElHjJ,qCACExjC,KAAKumC,aAAakF,eAClBzrC,KAAKuyC,iBAAiB9G,gBAGxBzrC,KAAKumC,aAAakF,eAAe6G,mBAAqBtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBAC3FtyC,KAAKumC,aAAakF,eAAexgB,cAAgBjrB,KAAKuyC,iBAAiB9G,eAAexgB,cAEtFjrB,KAAKumC,aAAakF,eAAe9Q,eAAiB36B,KAAKuyC,iBAAiB9G,eAAe9Q,eACvF36B,KAAKumC,aAAakF,eAAeqI,uBAAyB9zC,KAAKuyC,iBAAiB9G,eAAeqI,uBAC/F9zC,KAAKumC,aAAakF,eAAeoI,sBAAwB7zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAE9F7zC,KAAKumC,aAAakF,eAAemc,WAAa5nD,KAAKuyC,iBAAiB9G,eAAemc,WACnF5nD,KAAKumC,aAAakF,eAAeoc,eAAiB7nD,KAAKuyC,iBAAiB9G,eAAeoc,eACvF7nD,KAAKumC,aAAakF,eAAeqc,kBAAoB9nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAE1F9nD,KAAKumC,aAAakF,eAAevT,iBAAmBl4B,KAAKuyC,iBAAiB9G,eAAevT,iBACzFl4B,KAAKumC,aAAakF,eAAezE,iBAAmBhnC,KAAKuyC,iBAAiB9G,eAAezE,iBAEpFhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAA8E,IAA1DhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAajGhnC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAf7C3tC,KAAKumC,aAAakF,eAAeiC,iBACnC1tC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB1tC,KAAKuyC,iBAAiB9G,eAAe+B,iBACxFxtC,KAAKumC,aAAakF,eAAekC,cAAgB3tC,KAAKuyC,iBAAiB9G,eAAegC,iBAEtFztC,KAAKumC,aAAakF,eAAe+B,iBAAmBxtC,KAAKuyC,iBAAiB9G,eAAe+B,iBACzFxtC,KAAKumC,aAAakF,eAAegC,eAAiBztC,KAAKuyC,iBAAiB9G,eAAegC,eACvFztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAUrD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,aACjF,CAEO0G,4CAENjtC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM8J,EAAwB5D,iBAElHjJ,qCAAkExjC,KAAKumC,aAAakF,eAAgBzrC,KAAKymC,cAAcgF,gBAEvHzrC,KAAKumC,aAAakF,eAAe6G,mBAAqBtyC,KAAKymC,cAAcgF,eAAe6G,mBACxFtyC,KAAKumC,aAAakF,eAAexgB,cAAgBjrB,KAAKymC,cAAcgF,eAAexgB,cAEnFjrB,KAAKumC,aAAakF,eAAe9Q,eAAiB36B,KAAKymC,cAAcgF,eAAe9Q,eACpF36B,KAAKumC,aAAakF,eAAeqI,uBAAyB9zC,KAAKymC,cAAcgF,eAAeqI,uBAC5F9zC,KAAKumC,aAAakF,eAAeoI,sBAAwB7zC,KAAKymC,cAAcgF,eAAeoI,sBAE3F7zC,KAAKumC,aAAakF,eAAemc,WAAa5nD,KAAKymC,cAAcgF,eAAemc,WAChF5nD,KAAKumC,aAAakF,eAAeoc,eAAiB7nD,KAAKymC,cAAcgF,eAAeoc,eACpF7nD,KAAKumC,aAAakF,eAAeqc,kBAAoB9nD,KAAKymC,cAAcgF,eAAeqc,kBAEvF9nD,KAAKumC,aAAakF,eAAevT,iBAAmBl4B,KAAKymC,cAAcgF,eAAevT,iBACtFl4B,KAAKumC,aAAakF,eAAezE,iBAAmBhnC,KAAKymC,cAAcgF,eAAezE,iBAEjFhnC,KAAKymC,cAAcgF,eAAezE,kBAA2E,IAAvDhnC,KAAKymC,cAAcgF,eAAezE,kBAa3FhnC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAf7C3tC,KAAKumC,aAAakF,eAAeiC,iBACnC1tC,KAAKumC,aAAakF,eAAeiC,gBAAkB1tC,KAAKymC,cAAcgF,eAAe+B,iBACrFxtC,KAAKumC,aAAakF,eAAekC,cAAgB3tC,KAAKymC,cAAcgF,eAAegC,eACnFztC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,OAElDztC,KAAKumC,aAAakF,eAAe+B,iBAAmBxtC,KAAKymC,cAAcgF,eAAe+B,iBACtFxtC,KAAKumC,aAAakF,eAAegC,eAAiBztC,KAAKymC,cAAcgF,eAAegC,eACpFztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAUrD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,aACjF,CAEOiP,yCAENx1C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM8J,EAAwB5D,iBAElHjJ,qCAAkExjC,KAAKumC,aAAakF,eAAgBzrC,KAAKwyC,WAAW/G,gBAEpHzrC,KAAKumC,aAAakF,eAAe6G,mBAAqBtyC,KAAKwyC,WAAW/G,eAAe6G,mBACrFtyC,KAAKumC,aAAakF,eAAexgB,cAAgBjrB,KAAKwyC,WAAW/G,eAAexgB,cAEhFjrB,KAAKumC,aAAakF,eAAe9Q,eAAiB36B,KAAKwyC,WAAW/G,eAAe9Q,eACjF36B,KAAKumC,aAAakF,eAAeqI,uBAAyB9zC,KAAKwyC,WAAW/G,eAAeqI,uBACzF9zC,KAAKumC,aAAakF,eAAeoI,sBAAwB7zC,KAAKwyC,WAAW/G,eAAeoI,sBAExF7zC,KAAKumC,aAAakF,eAAemc,WAAa5nD,KAAKwyC,WAAW/G,eAAemc,WAC7E5nD,KAAKumC,aAAakF,eAAeoc,eAAiB7nD,KAAKwyC,WAAW/G,eAAeoc,eACjF7nD,KAAKumC,aAAakF,eAAeqc,kBAAoB9nD,KAAKwyC,WAAW/G,eAAeqc,kBAEpF9nD,KAAKumC,aAAakF,eAAevT,iBAAmBl4B,KAAKwyC,WAAW/G,eAAevT,iBACnFl4B,KAAKumC,aAAakF,eAAezE,iBAAmBhnC,KAAKwyC,WAAW/G,eAAezE,iBAE9EhnC,KAAKwyC,WAAW/G,eAAezE,kBAAwE,IAApDhnC,KAAKwyC,WAAW/G,eAAezE,kBAarFhnC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAf7C3tC,KAAKumC,aAAakF,eAAeiC,iBACnC1tC,KAAKumC,aAAakF,eAAeiC,gBAAkB1tC,KAAKwyC,WAAW/G,eAAeuK,cAClFh2C,KAAKumC,aAAakF,eAAekC,cAAgB3tC,KAAKwyC,WAAW/G,eAAewK,YAChFj2C,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,OAElDztC,KAAKumC,aAAakF,eAAe+B,iBAAmBxtC,KAAKwyC,WAAW/G,eAAeuK,cACnFh2C,KAAKumC,aAAakF,eAAegC,eAAiBztC,KAAKwyC,WAAW/G,eAAewK,YACjFj2C,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAUrD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,aACjF,CAEOuiB,4CAEN9oD,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKumC,aAAc,KAAM8J,EAAwB5D,iBAElHjJ,4BAAyDxjC,KAAKumC,aAAakF,eAAgBzrC,KAAK0mD,cAAcjb,gBAE9GzrC,KAAKumC,aAAakF,eAAe6G,mBAAqBtyC,KAAK0mD,cAAcjb,eAAe6G,mBACxFtyC,KAAKumC,aAAakF,eAAexgB,cAAgBjrB,KAAK0mD,cAAcjb,eAAexgB,cAEnFjrB,KAAKumC,aAAakF,eAAe9Q,eAAiB36B,KAAK0mD,cAAcjb,eAAe9Q,eACpF36B,KAAKumC,aAAakF,eAAeqI,uBAAyB9zC,KAAK0mD,cAAcjb,eAAeqI,uBAC5F9zC,KAAKumC,aAAakF,eAAeoI,sBAAwB7zC,KAAK0mD,cAAcjb,eAAeoI,sBAE3F7zC,KAAKumC,aAAakF,eAAemc,WAAa5nD,KAAK0mD,cAAcjb,eAAemc,WAChF5nD,KAAKumC,aAAakF,eAAeoc,eAAiB7nD,KAAK0mD,cAAcjb,eAAeoc,eACpF7nD,KAAKumC,aAAakF,eAAeqc,kBAAoB9nD,KAAK0mD,cAAcjb,eAAeqc,kBAEvF9nD,KAAKumC,aAAakF,eAAevT,iBAAmBl4B,KAAK0mD,cAAcjb,eAAevT,iBACtFl4B,KAAKumC,aAAakF,eAAezE,iBAAmBhnC,KAAK0mD,cAAcjb,eAAezE,iBAEjFhnC,KAAK0mD,cAAcjb,eAAezE,kBAA2E,IAAvDhnC,KAAK0mD,cAAcjb,eAAezE,kBAa3FhnC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,KAClDztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAf7C3tC,KAAKumC,aAAakF,eAAeiC,iBACnC1tC,KAAKumC,aAAakF,eAAeiC,gBAAkB1tC,KAAK0mD,cAAcjb,eAAe+B,iBACrFxtC,KAAKumC,aAAakF,eAAekC,cAAgB3tC,KAAK0mD,cAAcjb,eAAegC,eACnFztC,KAAKumC,aAAakF,eAAe+B,iBAAmB,KACpDxtC,KAAKumC,aAAakF,eAAegC,eAAiB,OAElDztC,KAAKumC,aAAakF,eAAe+B,iBAAmBxtC,KAAK0mD,cAAcjb,eAAe+B,iBACtFxtC,KAAKumC,aAAakF,eAAegC,eAAiBztC,KAAK0mD,cAAcjb,eAAegC,eACpFztC,KAAKumC,aAAakF,eAAeiC,gBAAkB,KACnD1tC,KAAKumC,aAAakF,eAAekC,cAAgB,MAUrD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB5D,gBAAiBzsC,KAAKumC,aACjF,CAEOmO,iDAEN10C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAM4J,EAAwB1D,kBAEnHnJ,qCACExjC,KAAKymC,cAAcgF,eACnBzrC,KAAKqyC,kBAAkB5G,gBAGzBzrC,KAAKymC,cAAcgF,eAAe6G,mBAAqBtyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAC7FtyC,KAAKymC,cAAcgF,eAAexgB,cAAgBjrB,KAAKqyC,kBAAkB5G,eAAexgB,cAExFjrB,KAAKymC,cAAcgF,eAAe9Q,eAAiB36B,KAAKqyC,kBAAkB5G,eAAe9Q,eACzF36B,KAAKymC,cAAcgF,eAAeqI,uBAAyB9zC,KAAKqyC,kBAAkB5G,eAAeqI,uBACjG9zC,KAAKymC,cAAcgF,eAAeoI,sBAAwB7zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAEhG7zC,KAAKymC,cAAcgF,eAAemc,WAAa5nD,KAAKqyC,kBAAkB5G,eAAemc,WACrF5nD,KAAKymC,cAAcgF,eAAeoc,eAAiB7nD,KAAKqyC,kBAAkB5G,eAAeoc,eACzF7nD,KAAKymC,cAAcgF,eAAeqc,kBAAoB9nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAE5F9nD,KAAKymC,cAAcgF,eAAevT,iBAAmBl4B,KAAKqyC,kBAAkB5G,eAAevT,iBAC3Fl4B,KAAKymC,cAAcgF,eAAezE,iBAAmBhnC,KAAKqyC,kBAAkB5G,eAAezE,iBAEtFhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAA+E,IAA3DhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAInGhnC,KAAKymC,cAAcgF,eAAe+B,iBAAmB,KACrDxtC,KAAKymC,cAAcgF,eAAegC,eAAiB,OAJnDztC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKqyC,kBAAkB5G,eAAe+B,iBAC3FxtC,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKqyC,kBAAkB5G,eAAegC,gBAM3FztC,KAAKymC,cAAcgF,eAAeiC,gBAAkB,KACpD1tC,KAAKymC,cAAcgF,eAAekC,cAAgB,KAGlD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,cAClF,CAEOqO,gDACN90C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAM4J,EAAwB1D,kBAEnHnJ,qCACExjC,KAAKymC,cAAcgF,eACnBzrC,KAAKuyC,iBAAiB9G,gBAGxBzrC,KAAKymC,cAAcgF,eAAe6G,mBAAqBtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBAC5FtyC,KAAKymC,cAAcgF,eAAexgB,cAAgBjrB,KAAKuyC,iBAAiB9G,eAAexgB,cAEvFjrB,KAAKymC,cAAcgF,eAAe9Q,eAAiB36B,KAAKuyC,iBAAiB9G,eAAe9Q,eACxF36B,KAAKymC,cAAcgF,eAAeqI,uBAAyB9zC,KAAKuyC,iBAAiB9G,eAAeqI,uBAChG9zC,KAAKymC,cAAcgF,eAAeoI,sBAAwB7zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAE/F7zC,KAAKymC,cAAcgF,eAAemc,WAAa5nD,KAAKuyC,iBAAiB9G,eAAemc,WACpF5nD,KAAKymC,cAAcgF,eAAeoc,eAAiB7nD,KAAKuyC,iBAAiB9G,eAAeoc,eACxF7nD,KAAKymC,cAAcgF,eAAeqc,kBAAoB9nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAE3F9nD,KAAKymC,cAAcgF,eAAevT,iBAAmBl4B,KAAKuyC,iBAAiB9G,eAAevT,iBAC1Fl4B,KAAKymC,cAAcgF,eAAezE,iBAAmBhnC,KAAKuyC,iBAAiB9G,eAAezE,iBAErFhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAA8E,IAA1DhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAIjGhnC,KAAKymC,cAAcgF,eAAe+B,iBAAmB,KACrDxtC,KAAKymC,cAAcgF,eAAegC,eAAiB,OAJnDztC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKuyC,iBAAiB9G,eAAe+B,iBAC1FxtC,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKuyC,iBAAiB9G,eAAegC,gBAM1FztC,KAAKymC,cAAcgF,eAAeiC,gBAAkB,KACpD1tC,KAAKymC,cAAcgF,eAAekC,cAAgB,KAGlD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,cAClF,CAEOsG,4CAEN/sC,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAM4J,EAAwB1D,kBAEnHnJ,qCAAkExjC,KAAKymC,cAAcgF,eAAgBzrC,KAAKumC,aAAakF,gBAEvHzrC,KAAKymC,cAAcgF,eAAe6G,mBAAqBtyC,KAAKumC,aAAakF,eAAe6G,mBACxFtyC,KAAKymC,cAAcgF,eAAexgB,cAAgBjrB,KAAKumC,aAAakF,eAAexgB,cAEnFjrB,KAAKymC,cAAcgF,eAAe9Q,eAAiB36B,KAAKumC,aAAakF,eAAe9Q,eACpF36B,KAAKymC,cAAcgF,eAAeqI,uBAAyB9zC,KAAKumC,aAAakF,eAAeqI,uBAC5F9zC,KAAKymC,cAAcgF,eAAeoI,sBAAwB7zC,KAAKumC,aAAakF,eAAeoI,sBAE3F7zC,KAAKymC,cAAcgF,eAAemc,WAAa5nD,KAAKumC,aAAakF,eAAemc,WAChF5nD,KAAKymC,cAAcgF,eAAeoc,eAAiB7nD,KAAKumC,aAAakF,eAAeoc,eACpF7nD,KAAKymC,cAAcgF,eAAeqc,kBAAoB9nD,KAAKumC,aAAakF,eAAeqc,kBAEvF9nD,KAAKymC,cAAcgF,eAAevT,iBAAmBl4B,KAAKumC,aAAakF,eAAevT,iBACtFl4B,KAAKymC,cAAcgF,eAAezE,iBAAmBhnC,KAAKumC,aAAakF,eAAezE,iBAEjFhnC,KAAKumC,aAAakF,eAAezE,kBAA0E,IAAtDhnC,KAAKumC,aAAakF,eAAezE,kBASzFhnC,KAAKymC,cAAcgF,eAAe+B,iBAAmB,KACrDxtC,KAAKymC,cAAcgF,eAAegC,eAAiB,MAT/CztC,KAAKumC,aAAakF,eAAe+B,kBACnCxtC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAe+B,iBACtFxtC,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAegC,iBAEpFztC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAeiC,gBACtF1tC,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAekC,eAOxF3tC,KAAKymC,cAAcgF,eAAeiC,gBAAkB,KACpD1tC,KAAKymC,cAAcgF,eAAekC,cAAgB,KAGlD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,cAClF,CAEOgP,0CAENz1C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAM4J,EAAwB1D,kBAEnHnJ,qCAAkExjC,KAAKymC,cAAcgF,eAAgBzrC,KAAKwyC,WAAW/G,gBAErHzrC,KAAKymC,cAAcgF,eAAe6G,mBAAqBtyC,KAAKwyC,WAAW/G,eAAe6G,mBACtFtyC,KAAKymC,cAAcgF,eAAexgB,cAAgBjrB,KAAKwyC,WAAW/G,eAAexgB,cAEjFjrB,KAAKymC,cAAcgF,eAAe9Q,eAAiB36B,KAAKwyC,WAAW/G,eAAe9Q,eAClF36B,KAAKymC,cAAcgF,eAAeqI,uBAAyB9zC,KAAKwyC,WAAW/G,eAAeqI,uBAC1F9zC,KAAKymC,cAAcgF,eAAeoI,sBAAwB7zC,KAAKwyC,WAAW/G,eAAeoI,sBAEzF7zC,KAAKymC,cAAcgF,eAAemc,WAAa5nD,KAAKwyC,WAAW/G,eAAemc,WAC9E5nD,KAAKymC,cAAcgF,eAAeoc,eAAiB7nD,KAAKwyC,WAAW/G,eAAeoc,eAClF7nD,KAAKymC,cAAcgF,eAAeqc,kBAAoB9nD,KAAKwyC,WAAW/G,eAAeqc,kBAErF9nD,KAAKymC,cAAcgF,eAAevT,iBAAmBl4B,KAAKwyC,WAAW/G,eAAevT,iBACpFl4B,KAAKymC,cAAcgF,eAAezE,iBAAmBhnC,KAAKwyC,WAAW/G,eAAezE,iBAE/EhnC,KAAKwyC,WAAW/G,eAAezE,kBAAwE,IAApDhnC,KAAKwyC,WAAW/G,eAAezE,kBAIrFhnC,KAAKymC,cAAcgF,eAAe+B,iBAAmB,KACrDxtC,KAAKymC,cAAcgF,eAAegC,eAAiB,OAJnDztC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAKwyC,WAAW/G,eAAeuK,cACpFh2C,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAKwyC,WAAW/G,eAAewK,aAMpFj2C,KAAKymC,cAAcgF,eAAeiC,gBAAkB,KACpD1tC,KAAKymC,cAAcgF,eAAekC,cAAgB,KAGlD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,cAClF,CAEOsiB,6CACN/oD,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKymC,cAAe,KAAM4J,EAAwB1D,kBAEnHnJ,4BAAyDxjC,KAAKymC,cAAcgF,eAAgBzrC,KAAK0mD,cAAcjb,gBAE/GzrC,KAAKymC,cAAcgF,eAAe6G,mBAAqBtyC,KAAK0mD,cAAcjb,eAAe6G,mBACzFtyC,KAAKymC,cAAcgF,eAAexgB,cAAgBjrB,KAAK0mD,cAAcjb,eAAexgB,cAEpFjrB,KAAKymC,cAAcgF,eAAe9Q,eAAiB36B,KAAK0mD,cAAcjb,eAAe9Q,eACrF36B,KAAKymC,cAAcgF,eAAeqI,uBAAyB9zC,KAAK0mD,cAAcjb,eAAeqI,uBAC7F9zC,KAAKymC,cAAcgF,eAAeoI,sBAAwB7zC,KAAK0mD,cAAcjb,eAAeoI,sBAE5F7zC,KAAKymC,cAAcgF,eAAemc,WAAa5nD,KAAK0mD,cAAcjb,eAAemc,WACjF5nD,KAAKymC,cAAcgF,eAAeoc,eAAiB7nD,KAAK0mD,cAAcjb,eAAeoc,eACrF7nD,KAAKymC,cAAcgF,eAAeqc,kBAAoB9nD,KAAK0mD,cAAcjb,eAAeqc,kBAExF9nD,KAAKymC,cAAcgF,eAAevT,iBAAmBl4B,KAAK0mD,cAAcjb,eAAevT,iBACvFl4B,KAAKymC,cAAcgF,eAAezE,iBAAmBhnC,KAAK0mD,cAAcjb,eAAezE,iBAElFhnC,KAAK0mD,cAAcjb,eAAezE,kBAA2E,IAAvDhnC,KAAK0mD,cAAcjb,eAAezE,kBAI3FhnC,KAAKymC,cAAcgF,eAAe+B,iBAAmB,KACrDxtC,KAAKymC,cAAcgF,eAAegC,eAAiB,OAJnDztC,KAAKymC,cAAcgF,eAAe+B,iBAAmBxtC,KAAK0mD,cAAcjb,eAAe+B,iBACvFxtC,KAAKymC,cAAcgF,eAAegC,eAAiBztC,KAAK0mD,cAAcjb,eAAegC,gBAMvFztC,KAAKymC,cAAcgF,eAAeiC,gBAAkB,KACpD1tC,KAAKymC,cAAcgF,eAAekC,cAAgB,KAGlD3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB1D,iBAAkB3sC,KAAKymC,cAClF,CAEOkO,8CACN30C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwyC,WAAY,KAAMnC,EAAwBkE,eAEhH/Q,qCACExjC,KAAKwyC,WAAW/G,eAChBzrC,KAAKqyC,kBAAkB5G,gBAGzBzrC,KAAKwyC,WAAW/G,eAAe6G,mBAAqBtyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAC1FtyC,KAAKwyC,WAAW/G,eAAexgB,cAAgBjrB,KAAKqyC,kBAAkB5G,eAAexgB,cAErFjrB,KAAKwyC,WAAW/G,eAAe9Q,eAAiB36B,KAAKqyC,kBAAkB5G,eAAe9Q,eACtF36B,KAAKwyC,WAAW/G,eAAeqI,uBAAyB9zC,KAAKqyC,kBAAkB5G,eAAeqI,uBAC9F9zC,KAAKwyC,WAAW/G,eAAeoI,sBAAwB7zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAE7F7zC,KAAKwyC,WAAW/G,eAAemc,WAAa5nD,KAAKqyC,kBAAkB5G,eAAemc,WAClF5nD,KAAKwyC,WAAW/G,eAAeoc,eAAiB7nD,KAAKqyC,kBAAkB5G,eAAeoc,eACtF7nD,KAAKwyC,WAAW/G,eAAeqc,kBAAoB9nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAEzF9nD,KAAKwyC,WAAW/G,eAAevT,iBAAmBl4B,KAAKqyC,kBAAkB5G,eAAevT,iBACxFl4B,KAAKwyC,WAAW/G,eAAezE,iBAAmBhnC,KAAKqyC,kBAAkB5G,eAAezE,iBAEnFhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAA+E,IAA3DhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAInGhnC,KAAKwyC,WAAW/G,eAAeuK,cAAgB,KAC/Ch2C,KAAKwyC,WAAW/G,eAAewK,YAAc,OAJ7Cj2C,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKqyC,kBAAkB5G,eAAe+B,iBACrFxtC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKqyC,kBAAkB5G,eAAegC,gBAMrFztC,KAAKwyC,WAAW/G,eAAe+B,iBAAmB,KAClDxtC,KAAKwyC,WAAW/G,eAAegC,eAAiB,KAChDztC,KAAKwyC,WAAW/G,eAAeyK,mBAAqB,KACpDl2C,KAAKwyC,WAAW/G,eAAe0K,iBAAmB,KAGlDn2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,WAC/E,CAEOuC,6CACN/0C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwyC,WAAY,KAAMnC,EAAwBkE,eAEhH/Q,qCAAkExjC,KAAKwyC,WAAW/G,eAAgBzrC,KAAKuyC,iBAAiB9G,gBAExHzrC,KAAKwyC,WAAW/G,eAAe6G,mBAAqBtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBACzFtyC,KAAKwyC,WAAW/G,eAAexgB,cAAgBjrB,KAAKuyC,iBAAiB9G,eAAexgB,cACpFjrB,KAAKwyC,WAAW/G,eAAehhB,OAASzqB,KAAKuyC,iBAAiB9G,eAAehhB,OAE7EzqB,KAAKwyC,WAAW/G,eAAe9Q,eAAiB36B,KAAKuyC,iBAAiB9G,eAAe9Q,eACrF36B,KAAKwyC,WAAW/G,eAAeqI,uBAAyB9zC,KAAKuyC,iBAAiB9G,eAAeqI,uBAC7F9zC,KAAKwyC,WAAW/G,eAAeoI,sBAAwB7zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAE5F7zC,KAAKwyC,WAAW/G,eAAemc,WAAa5nD,KAAKuyC,iBAAiB9G,eAAemc,WACjF5nD,KAAKwyC,WAAW/G,eAAeoc,eAAiB7nD,KAAKuyC,iBAAiB9G,eAAeoc,eACrF7nD,KAAKwyC,WAAW/G,eAAeqc,kBAAoB9nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAExF9nD,KAAKwyC,WAAW/G,eAAevT,iBAAmBl4B,KAAKuyC,iBAAiB9G,eAAevT,iBACvFl4B,KAAKwyC,WAAW/G,eAAezE,iBAAmBhnC,KAAKuyC,iBAAiB9G,eAAezE,iBAElFhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAA8E,IAA1DhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAIjGhnC,KAAKwyC,WAAW/G,eAAeuK,cAAgB,KAC/Ch2C,KAAKwyC,WAAW/G,eAAewK,YAAc,OAJ7Cj2C,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKuyC,iBAAiB9G,eAAe+B,iBACpFxtC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKuyC,iBAAiB9G,eAAegC,gBAMpFztC,KAAKwyC,WAAW/G,eAAe+B,iBAAmB,KAClDxtC,KAAKwyC,WAAW/G,eAAegC,eAAiB,KAChDztC,KAAKwyC,WAAW/G,eAAeyK,mBAAqB,KACpDl2C,KAAKwyC,WAAW/G,eAAe0K,iBAAmB,KAGlDn2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,WAC/E,CAEO0C,yCACNl1C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwyC,WAAY,KAAMnC,EAAwBkE,eAEhH/Q,qCAAkExjC,KAAKwyC,WAAW/G,eAAgBzrC,KAAKumC,aAAakF,gBAEpHzrC,KAAKwyC,WAAW/G,eAAe6G,mBAAqBtyC,KAAKumC,aAAakF,eAAe6G,mBACrFtyC,KAAKwyC,WAAW/G,eAAexgB,cAAgBjrB,KAAKumC,aAAakF,eAAexgB,cAEhFjrB,KAAKwyC,WAAW/G,eAAe9Q,eAAiB36B,KAAKumC,aAAakF,eAAe9Q,eACjF36B,KAAKwyC,WAAW/G,eAAeqI,uBAAyB9zC,KAAKumC,aAAakF,eAAeqI,uBACzF9zC,KAAKwyC,WAAW/G,eAAeoI,sBAAwB7zC,KAAKumC,aAAakF,eAAeoI,sBAExF7zC,KAAKwyC,WAAW/G,eAAemc,WAAa5nD,KAAKumC,aAAakF,eAAemc,WAC7E5nD,KAAKwyC,WAAW/G,eAAeoc,eAAiB7nD,KAAKumC,aAAakF,eAAeoc,eACjF7nD,KAAKwyC,WAAW/G,eAAeqc,kBAAoB9nD,KAAKumC,aAAakF,eAAeqc,kBAEpF9nD,KAAKwyC,WAAW/G,eAAevT,iBAAmBl4B,KAAKumC,aAAakF,eAAevT,iBACnFl4B,KAAKwyC,WAAW/G,eAAezE,iBAAmBhnC,KAAKumC,aAAakF,eAAezE,iBAE9EhnC,KAAKumC,aAAakF,eAAezE,kBAA0E,IAAtDhnC,KAAKumC,aAAakF,eAAezE,kBASzFhnC,KAAKwyC,WAAW/G,eAAeuK,cAAgB,KAC/Ch2C,KAAKwyC,WAAW/G,eAAewK,YAAc,MATzCj2C,KAAKumC,aAAakF,eAAe+B,kBACnCxtC,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKumC,aAAakF,eAAe+B,iBAChFxtC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKumC,aAAakF,eAAegC,iBAE9EztC,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKumC,aAAakF,eAAeiC,gBAChF1tC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKumC,aAAakF,eAAekC,eAOlF3tC,KAAKwyC,WAAW/G,eAAe+B,iBAAmB,KAClDxtC,KAAKwyC,WAAW/G,eAAegC,eAAiB,KAChDztC,KAAKwyC,WAAW/G,eAAeyK,mBAAqB,KACpDl2C,KAAKwyC,WAAW/G,eAAe0K,iBAAmB,KAGlDn2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,WAC/E,CAEO6C,0CACNr1C,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwyC,WAAY,KAAMnC,EAAwBkE,eAEhH/Q,qCAAkExjC,KAAKwyC,WAAW/G,eAAgBzrC,KAAKymC,cAAcgF,gBAErHzrC,KAAKwyC,WAAW/G,eAAe6G,mBAAqBtyC,KAAKymC,cAAcgF,eAAe6G,mBACtFtyC,KAAKwyC,WAAW/G,eAAexgB,cAAgBjrB,KAAKymC,cAAcgF,eAAexgB,cAEjFjrB,KAAKwyC,WAAW/G,eAAe9Q,eAAiB36B,KAAKymC,cAAcgF,eAAe9Q,eAClF36B,KAAKwyC,WAAW/G,eAAeqI,uBAAyB9zC,KAAKymC,cAAcgF,eAAeqI,uBAC1F9zC,KAAKwyC,WAAW/G,eAAeoI,sBAAwB7zC,KAAKymC,cAAcgF,eAAeoI,sBAEzF7zC,KAAKwyC,WAAW/G,eAAemc,WAAa5nD,KAAKymC,cAAcgF,eAAemc,WAC9E5nD,KAAKwyC,WAAW/G,eAAeoc,eAAiB7nD,KAAKymC,cAAcgF,eAAeoc,eAClF7nD,KAAKwyC,WAAW/G,eAAeqc,kBAAoB9nD,KAAKymC,cAAcgF,eAAeqc,kBAErF9nD,KAAKwyC,WAAW/G,eAAevT,iBAAmBl4B,KAAKymC,cAAcgF,eAAevT,iBACpFl4B,KAAKwyC,WAAW/G,eAAezE,iBAAmBhnC,KAAKymC,cAAcgF,eAAezE,iBAE/EhnC,KAAKymC,cAAcgF,eAAezE,kBAA2E,IAAvDhnC,KAAKymC,cAAcgF,eAAezE,kBAI3FhnC,KAAKwyC,WAAW/G,eAAeuK,cAAgB,KAC/Ch2C,KAAKwyC,WAAW/G,eAAewK,YAAc,OAJ7Cj2C,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAKymC,cAAcgF,eAAe+B,iBACjFxtC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAKymC,cAAcgF,eAAegC,gBAMjFztC,KAAKwyC,WAAW/G,eAAe+B,iBAAmB,KAClDxtC,KAAKwyC,WAAW/G,eAAegC,eAAiB,KAChDztC,KAAKwyC,WAAW/G,eAAeyK,mBAAqB,KACpDl2C,KAAKwyC,WAAW/G,eAAe0K,iBAAmB,KAGlDn2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,WAC/E,CAEOwW,0CACNhpD,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAKwyC,WAAY,KAAMnC,EAAwBkE,eAEhH/Q,4BAAyDxjC,KAAKwyC,WAAW/G,eAAgBzrC,KAAK0mD,cAAcjb,gBAE5GzrC,KAAKwyC,WAAW/G,eAAe6G,mBAAqBtyC,KAAK0mD,cAAcjb,eAAe6G,mBACtFtyC,KAAKwyC,WAAW/G,eAAexgB,cAAgBjrB,KAAK0mD,cAAcjb,eAAexgB,cAEjFjrB,KAAKwyC,WAAW/G,eAAehhB,OAASzqB,KAAK0mD,cAAcjb,eAAehhB,OAE1EzqB,KAAKwyC,WAAW/G,eAAe9Q,eAAiB36B,KAAK0mD,cAAcjb,eAAe9Q,eAClF36B,KAAKwyC,WAAW/G,eAAeqI,uBAAyB9zC,KAAK0mD,cAAcjb,eAAeqI,uBAC1F9zC,KAAKwyC,WAAW/G,eAAeoI,sBAAwB7zC,KAAK0mD,cAAcjb,eAAeoI,sBAEzF7zC,KAAKwyC,WAAW/G,eAAemc,WAAa5nD,KAAK0mD,cAAcjb,eAAemc,WAC9E5nD,KAAKwyC,WAAW/G,eAAeoc,eAAiB7nD,KAAK0mD,cAAcjb,eAAeoc,eAClF7nD,KAAKwyC,WAAW/G,eAAeqc,kBAAoB9nD,KAAK0mD,cAAcjb,eAAeqc,kBAErF9nD,KAAKwyC,WAAW/G,eAAevT,iBAAmBl4B,KAAK0mD,cAAcjb,eAAevT,iBACpFl4B,KAAKwyC,WAAW/G,eAAezE,iBAAmBhnC,KAAK0mD,cAAcjb,eAAezE,iBAE/EhnC,KAAK0mD,cAAcjb,eAAezE,kBAA2E,IAAvDhnC,KAAK0mD,cAAcjb,eAAezE,kBAI3FhnC,KAAKwyC,WAAW/G,eAAeuK,cAAgB,KAC/Ch2C,KAAKwyC,WAAW/G,eAAewK,YAAc,OAJ7Cj2C,KAAKwyC,WAAW/G,eAAeuK,cAAgBh2C,KAAK0mD,cAAcjb,eAAe+B,iBACjFxtC,KAAKwyC,WAAW/G,eAAewK,YAAcj2C,KAAK0mD,cAAcjb,eAAegC,gBAMjFztC,KAAKwyC,WAAW/G,eAAe+B,iBAAmB,KAClDxtC,KAAKwyC,WAAW/G,eAAegC,eAAiB,KAChDztC,KAAKwyC,WAAW/G,eAAeyK,mBAAqB,KACpDl2C,KAAKwyC,WAAW/G,eAAe0K,iBAAmB,KAGlDn2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwBkE,cAAev0C,KAAKwyC,WAC/E,CAEO8V,iDACNtoD,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAK0mD,cAAe,KAAMrW,EAAwB4Y,kBAEnHzlB,4BAAyDxjC,KAAK0mD,cAAcjb,eAAgBzrC,KAAKqyC,kBAAkB5G,gBAEnHzrC,KAAK0mD,cAAcjb,eAAe6G,mBAAqBtyC,KAAKqyC,kBAAkB5G,eAAe6G,mBAC7FtyC,KAAK0mD,cAAcjb,eAAexgB,cAAgBjrB,KAAKqyC,kBAAkB5G,eAAexgB,cAExFjrB,KAAK0mD,cAAcjb,eAAe9Q,eAAiB36B,KAAKqyC,kBAAkB5G,eAAe9Q,eACzF36B,KAAK0mD,cAAcjb,eAAeqI,uBAAyB9zC,KAAKqyC,kBAAkB5G,eAAeqI,uBACjG9zC,KAAK0mD,cAAcjb,eAAeoI,sBAAwB7zC,KAAKqyC,kBAAkB5G,eAAeoI,sBAEhG7zC,KAAK0mD,cAAcjb,eAAemc,WAAa5nD,KAAKqyC,kBAAkB5G,eAAemc,WACrF5nD,KAAK0mD,cAAcjb,eAAeoc,eAAiB7nD,KAAKqyC,kBAAkB5G,eAAeoc,eACzF7nD,KAAK0mD,cAAcjb,eAAeqc,kBAAoB9nD,KAAKqyC,kBAAkB5G,eAAeqc,kBAE5F9nD,KAAK0mD,cAAcjb,eAAevT,iBAAmBl4B,KAAKqyC,kBAAkB5G,eAAevT,iBAC3Fl4B,KAAK0mD,cAAcjb,eAAezE,iBAAmBhnC,KAAKqyC,kBAAkB5G,eAAezE,iBAEtFhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAA+E,IAA3DhnC,KAAKqyC,kBAAkB5G,eAAezE,kBAInGhnC,KAAK0mD,cAAcjb,eAAe+B,iBAAmB,KACrDxtC,KAAK0mD,cAAcjb,eAAegC,eAAiB,OAJnDztC,KAAK0mD,cAAcjb,eAAe+B,iBAAmBxtC,KAAKqyC,kBAAkB5G,eAAe+B,iBAC3FxtC,KAAK0mD,cAAcjb,eAAegC,eAAiBztC,KAAKqyC,kBAAkB5G,eAAegC,gBAO3FztC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB4Y,iBAAkBjpD,KAAK0mD,cAClF,CAEO6B,gDACNvoD,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAK0mD,cAAe,KAAMrW,EAAwB4Y,kBAEnHzlB,4BAAyDxjC,KAAK0mD,cAAcjb,eAAgBzrC,KAAKuyC,iBAAiB9G,gBAElHzrC,KAAK0mD,cAAcjb,eAAe6G,mBAAqBtyC,KAAKuyC,iBAAiB9G,eAAe6G,mBAC5FtyC,KAAK0mD,cAAcjb,eAAexgB,cAAgBjrB,KAAKuyC,iBAAiB9G,eAAexgB,cACvFjrB,KAAK0mD,cAAcjb,eAAehhB,OAASzqB,KAAKuyC,iBAAiB9G,eAAehhB,OAEhFzqB,KAAK0mD,cAAcjb,eAAe9Q,eAAiB36B,KAAKuyC,iBAAiB9G,eAAe9Q,eACxF36B,KAAK0mD,cAAcjb,eAAeqI,uBAAyB9zC,KAAKuyC,iBAAiB9G,eAAeqI,uBAChG9zC,KAAK0mD,cAAcjb,eAAeoI,sBAAwB7zC,KAAKuyC,iBAAiB9G,eAAeoI,sBAE/F7zC,KAAK0mD,cAAcjb,eAAemc,WAAa5nD,KAAKuyC,iBAAiB9G,eAAemc,WACpF5nD,KAAK0mD,cAAcjb,eAAeoc,eAAiB7nD,KAAKuyC,iBAAiB9G,eAAeoc,eACxF7nD,KAAK0mD,cAAcjb,eAAeqc,kBAAoB9nD,KAAKuyC,iBAAiB9G,eAAeqc,kBAE3F9nD,KAAK0mD,cAAcjb,eAAevT,iBAAmBl4B,KAAKuyC,iBAAiB9G,eAAevT,iBAC1Fl4B,KAAK0mD,cAAcjb,eAAezE,iBAAmBhnC,KAAKuyC,iBAAiB9G,eAAezE,iBAErFhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAA8E,IAA1DhnC,KAAKuyC,iBAAiB9G,eAAezE,kBAIjGhnC,KAAK0mD,cAAcjb,eAAe+B,iBAAmB,KACrDxtC,KAAK0mD,cAAcjb,eAAegC,eAAiB,OAJnDztC,KAAK0mD,cAAcjb,eAAe+B,iBAAmBxtC,KAAKuyC,iBAAiB9G,eAAe+B,iBAC1FxtC,KAAK0mD,cAAcjb,eAAegC,eAAiBztC,KAAKuyC,iBAAiB9G,eAAegC,gBAO1FztC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB4Y,iBAAkBjpD,KAAK0mD,cAClF,CAEO8B,4CACNxoD,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAK0mD,cAAe,KAAMrW,EAAwB4Y,kBAEnHzlB,4BAAyDxjC,KAAK0mD,cAAcjb,eAAgBzrC,KAAKumC,aAAakF,gBAE9GzrC,KAAK0mD,cAAcjb,eAAe6G,mBAAqBtyC,KAAKumC,aAAakF,eAAe6G,mBACxFtyC,KAAK0mD,cAAcjb,eAAexgB,cAAgBjrB,KAAKumC,aAAakF,eAAexgB,cAEnFjrB,KAAK0mD,cAAcjb,eAAe9Q,eAAiB36B,KAAKumC,aAAakF,eAAe9Q,eACpF36B,KAAK0mD,cAAcjb,eAAeqI,uBAAyB9zC,KAAKumC,aAAakF,eAAeqI,uBAC5F9zC,KAAK0mD,cAAcjb,eAAeoI,sBAAwB7zC,KAAKumC,aAAakF,eAAeoI,sBAE3F7zC,KAAK0mD,cAAcjb,eAAemc,WAAa5nD,KAAKumC,aAAakF,eAAemc,WAChF5nD,KAAK0mD,cAAcjb,eAAeoc,eAAiB7nD,KAAKumC,aAAakF,eAAeoc,eACpF7nD,KAAK0mD,cAAcjb,eAAeqc,kBAAoB9nD,KAAKumC,aAAakF,eAAeqc,kBAEvF9nD,KAAK0mD,cAAcjb,eAAevT,iBAAmBl4B,KAAKumC,aAAakF,eAAevT,iBACtFl4B,KAAK0mD,cAAcjb,eAAezE,iBAAmBhnC,KAAKumC,aAAakF,eAAezE,iBAEjFhnC,KAAKumC,aAAakF,eAAezE,kBAA0E,IAAtDhnC,KAAKumC,aAAakF,eAAezE,kBASzFhnC,KAAK0mD,cAAcjb,eAAe+B,iBAAmB,KACrDxtC,KAAK0mD,cAAcjb,eAAegC,eAAiB,MAT/CztC,KAAKumC,aAAakF,eAAe+B,kBACnCxtC,KAAK0mD,cAAcjb,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAe+B,iBACtFxtC,KAAK0mD,cAAcjb,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAegC,iBAEpFztC,KAAK0mD,cAAcjb,eAAe+B,iBAAmBxtC,KAAKumC,aAAakF,eAAeiC,gBACtF1tC,KAAK0mD,cAAcjb,eAAegC,eAAiBztC,KAAKumC,aAAakF,eAAekC,eAQxF3tC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB4Y,iBAAkBjpD,KAAK0mD,cAClF,CAEO+B,6CACNzoD,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAK0mD,cAAe,KAAMrW,EAAwB4Y,kBAEnHzlB,4BAAyDxjC,KAAK0mD,cAAcjb,eAAgBzrC,KAAKymC,cAAcgF,gBAE/GzrC,KAAK0mD,cAAcjb,eAAe6G,mBAAqBtyC,KAAKymC,cAAcgF,eAAe6G,mBACzFtyC,KAAK0mD,cAAcjb,eAAexgB,cAAgBjrB,KAAKymC,cAAcgF,eAAexgB,cAEpFjrB,KAAK0mD,cAAcjb,eAAe9Q,eAAiB36B,KAAKymC,cAAcgF,eAAe9Q,eACrF36B,KAAK0mD,cAAcjb,eAAeqI,uBAAyB9zC,KAAKymC,cAAcgF,eAAeqI,uBAC7F9zC,KAAK0mD,cAAcjb,eAAeoI,sBAAwB7zC,KAAKymC,cAAcgF,eAAeoI,sBAE5F7zC,KAAK0mD,cAAcjb,eAAemc,WAAa5nD,KAAKymC,cAAcgF,eAAemc,WACjF5nD,KAAK0mD,cAAcjb,eAAeoc,eAAiB7nD,KAAKymC,cAAcgF,eAAeoc,eACrF7nD,KAAK0mD,cAAcjb,eAAeqc,kBAAoB9nD,KAAKymC,cAAcgF,eAAeqc,kBAExF9nD,KAAK0mD,cAAcjb,eAAevT,iBAAmBl4B,KAAKymC,cAAcgF,eAAevT,iBACvFl4B,KAAK0mD,cAAcjb,eAAezE,iBAAmBhnC,KAAKymC,cAAcgF,eAAezE,iBAElFhnC,KAAKymC,cAAcgF,eAAezE,kBAA2E,IAAvDhnC,KAAKymC,cAAcgF,eAAezE,kBAI3FhnC,KAAK0mD,cAAcjb,eAAe+B,iBAAmB,KACrDxtC,KAAK0mD,cAAcjb,eAAegC,eAAiB,OAJnDztC,KAAK0mD,cAAcjb,eAAe+B,iBAAmBxtC,KAAKymC,cAAcgF,eAAe+B,iBACvFxtC,KAAK0mD,cAAcjb,eAAegC,eAAiBztC,KAAKymC,cAAcgF,eAAegC,gBAOvFztC,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB4Y,iBAAkBjpD,KAAK0mD,cAClF,CAEOgC,0CACN1oD,KAAKiF,uBAAuBu7B,qCAAqCxgC,KAAK0mD,cAAe,KAAMrW,EAAwB4Y,kBAEnHzlB,4BAAyDxjC,KAAK0mD,cAAcjb,eAAgBzrC,KAAKwyC,WAAW/G,gBAE5GzrC,KAAK0mD,cAAcjb,eAAe6G,mBAAqBtyC,KAAKwyC,WAAW/G,eAAe6G,mBACtFtyC,KAAK0mD,cAAcjb,eAAexgB,cAAgBjrB,KAAKwyC,WAAW/G,eAAexgB,cACjFjrB,KAAK0mD,cAAcjb,eAAehhB,OAASzqB,KAAKwyC,WAAW/G,eAAehhB,OAE1EzqB,KAAK0mD,cAAcjb,eAAe9Q,eAAiB36B,KAAKwyC,WAAW/G,eAAe9Q,eAClF36B,KAAK0mD,cAAcjb,eAAeqI,uBAAyB9zC,KAAKwyC,WAAW/G,eAAeqI,uBAC1F9zC,KAAK0mD,cAAcjb,eAAeoI,sBAAwB7zC,KAAKwyC,WAAW/G,eAAeoI,sBAEzF7zC,KAAK0mD,cAAcjb,eAAemc,WAAa5nD,KAAKwyC,WAAW/G,eAAemc,WAC9E5nD,KAAK0mD,cAAcjb,eAAeoc,eAAiB7nD,KAAKwyC,WAAW/G,eAAeoc,eAClF7nD,KAAK0mD,cAAcjb,eAAeqc,kBAAoB9nD,KAAKwyC,WAAW/G,eAAeqc,kBAErF9nD,KAAK0mD,cAAcjb,eAAevT,iBAAmBl4B,KAAKwyC,WAAW/G,eAAevT,iBACpFl4B,KAAK0mD,cAAcjb,eAAezE,iBAAmBhnC,KAAKwyC,WAAW/G,eAAezE,iBAE/EhnC,KAAKwyC,WAAW/G,eAAezE,kBAAwE,IAApDhnC,KAAKwyC,WAAW/G,eAAezE,kBAIrFhnC,KAAK0mD,cAAcjb,eAAe+B,iBAAmB,KACrDxtC,KAAK0mD,cAAcjb,eAAegC,eAAiB,OAJnDztC,KAAK0mD,cAAcjb,eAAe+B,iBAAmBxtC,KAAKwyC,WAAW/G,eAAeuK,cACpFh2C,KAAK0mD,cAAcjb,eAAegC,eAAiBztC,KAAKwyC,WAAW/G,eAAewK,aAOpFj2C,KAAKiF,uBAAuBqD,MAAM+nC,EAAwB4Y,iBAAkBjpD,KAAK0mD,cAClF,CAEOzb,yCACFjrC,KAAK0yC,yBACH1yC,KAAKqyC,mBAAqBryC,KAAKqyC,kBAAkB5G,iBACnDzrC,KAAKguC,sBAAwBxK,mCAAgExjC,KAAKikC,sBAE3FjkC,KAAK2yC,wBACV3yC,KAAKuyC,kBAAoBvyC,KAAKuyC,iBAAiB9G,iBACjDzrC,KAAKguC,sBAAwBxK,mCAAgExjC,KAAKikC,sBAE3FjkC,KAAKwoC,oBACVxoC,KAAKumC,cAAgBvmC,KAAKumC,aAAakF,iBACzCzrC,KAAKguC,sBAAwBxK,2DAC3BxjC,KAAKikC,sBAGAjkC,KAAKyoC,qBACVzoC,KAAKymC,eAAiBzmC,KAAKymC,cAAcgF,iBAC3CzrC,KAAKguC,sBAAwBxK,mCAAgExjC,KAAKikC,sBAE3FjkC,KAAK4yC,kBACV5yC,KAAKwyC,YAAcxyC,KAAKwyC,WAAW/G,iBACrCzrC,KAAKguC,sBAAwBxK,mCAAgExjC,KAAKikC,sBAE3FjkC,KAAKymD,sBACVzmD,KAAK0mD,eAAiB1mD,KAAK0mD,cAAcjb,iBAC3CzrC,KAAKguC,sBAAwBxK,+CAA4ExjC,KAAKikC,sBAIlHjkC,KAAKiuC,yBAA2BjuC,KAAKkuC,8BACjCluC,KAAKguC,uBAAyBhuC,KAAKguC,sBAAwB,EAC7DhuC,KAAKmuC,6BAA8B,GAEnCnuC,KAAKmuC,6BAA8B,EACnCnuC,KAAKguC,2BAAwBp2B,EAEhC,CAEO8uB,yCAED1mC,KAAKqmC,qBAAqB96B,UAAUM,MAMvC7L,KAAKouC,yBAA2BpuC,KAAKqmC,oBAAoB96B,SAASjC,KAClEtJ,KAAKo2C,4CAA+Cp2C,KAAKqmC,oBAAoB+L,wBAEzEpyC,KAAKq2C,iDADL,GAEJr2C,KAAKquC,6BAA8B,EACnCruC,KAAKsuC,sBAAwB,IAV7BtuC,KAAKouC,yBAA2BpuC,KAAKuuC,8BACrCvuC,KAAKo2C,4CAA8C,GACnDp2C,KAAKquC,6BAA8B,EACnCruC,KAAKsuC,2BAAwB12B,EAShC,CAEOovC,mDAEDhnD,KAAK6mD,+BAA+BE,oBAAoBl7C,MAK3D7L,KAAKopD,mCAAqCppD,KAAK6mD,8BAA8BE,mBAAmBz9C,KAChGtJ,KAAKqpD,uCAAwC,EAC7CrpD,KAAKspD,gCAAkC,IANvCtpD,KAAKopD,mCAAqCppD,KAAKupD,wCAC/CvpD,KAAKqpD,uCAAwC,EAC7CrpD,KAAKspD,qCAAkC1xC,EAM1C,EAn+Fay4B,uBAAgB,0BAChBA,oBAAoB,mCACpBA,yCAAyC,0BACzCA,qCAAqC,8BACrCA,uBAAuB,sBACvBA,wCAAwC,yBACxCA,oCAAoC,6BACpCA,sBAAsB,qBACtBA,oCAAoC,mCACpCA,gCAAgC,sCAChCA,kBAAkB,8BAClBA,8BAA8B,yCAC9BA,qCAAqC,sBACrCA,iCAAiC,wCACjCA,mBAAmB,gCACnBA,kCAAkC,kBAClCA,8BAA8B,sBAC9BA,gBAAgB,cAChBA,qCAAqC,sBACrCA,iCAAiC,0BACjCA,sCAAsC,4BACtCA,mBAAmB,wDAjCtBA,GAAuBpsC,8LAAvBosC,EAAuB97B,4yBAAvBC,qBAAuB,8CAAvBA,gBAAkB,iDAAlBA,mBAAqB,+CAArBA,iBAAmB,+pHDjEhCvQ,iBAAuD,UAAvDA,CAAuD,iBAAvDA,CAAuD,UAAvDA,CAAuD,UAAvDA,CAAuD,UAAvDA,CAAuD,yBAqBzCA,mDAA0BuQ,mCAAqC,GAEhEvQ,QACDA,uBACEA,2CAAkBuQ,oCAAsC,GAOzDvQ,QACDA,8BAWFA,QACAA,mBAA6B,oCAEkDA,mCAAUuQ,kBAAoB,GACzGvQ,oCAAgG,aAE5FA,UACAA,oBAA0CA,UAAkDA,YAIhGA,6BAaAA,oCAAoH,aAEhHA,UACFA,UAGFA,6BAaAA,oCAMC,aAEGA,UACFA,UAGFA,6BAYFA,cAKNA,mBAQC,2BAcGA,oDAA2BuQ,oCAAsC,EAAjEvQ,CAAkE,wDAC7BuQ,8CAAgD,GACtFvQ,QACDA,kCACEA,2CAAkBuQ,sCAAwC,GAW5DvQ,UAEFA,mBAAyB,YAAzBA,CAAyB,0BAInBA,iDAAwBuQ,0BAA4B,EAApDvQ,CAAqD,wCAChCuQ,uBAAyB,EAD9CvQ,CAAqD,wCAE9BuQ,8BAA4B,GAIrDvQ,QACAA,sBACEA,gCAASuQ,iCAA+B,GAWxCvQ,qBAAUA,0BAAaA,kBAOjCA,mBAAoB,YAApBA,CAAoB,aAQdA,yBAUFA,QACAA,mBAKEA,yBAUFA,QACAA,mBAKEA,yBAUFA,QAGAA,mBACEA,yBAUFA,QACAA,0BACFA,+DAzPAA,+YAQEA,8EAA6D,iEAA7DA,CAA6D,qCAA7DA,CAA6D,wBAA7DA,CAA6D,mCAYrDA,0CAIAA,qCAAwB,kBAAxBA,CAAwB,gCAAxBA,CAAwB,8CAAxBA,CAAwB,iEAAxBA,CAAwB,yDAQvBA,uMAeOA,yGACJA,mDAC0CA,sEAK3CA,qDAaKA,6HACJA,6DAKDA,+DAcDA,mDAKMA,yGACJA,mDAKDA,qDA0BPA,8CAA6B,kCAA7BA,CAA6B,oYAA7BA,CAA6B,4DAA7BA,CAA6B,oDAA7BA,CAA6B,uDAiB7BA,8DAA6C,qBAA7CA,CAA6C,kBAA7CA,CAA6C,uCAA7CA,CAA6C,kDAA7CA,CAA6C,8DAmB3CA,2DAA0C,yDAO1CA,sEADAA,2DAqBJA,mGAIMA,kCAYNA,mGAIMA,kCAYNA,mGAIMA,kCAegBA,wLCpLhBpF,OAKDwxC,CAAb,yHC1DM,MAAOG,UAA0B8F,IAGrCv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,4CAClBrwC,KAAK2uC,aAAa0B,wCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAC5B,OAAI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,GAGdA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeiC,iBACpB1tC,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAema,sBACpB5lD,KAAKyrC,eAAeha,wBACpBzxB,KAAKyrC,eAAeiY,qBACpB1jD,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAeqc,mBACpB9nD,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACnB9vC,KAAKyrC,eAAekY,iBAAkE,IAA/C3jD,KAAKyrC,eAAekY,gBAAgBx0C,QAC5EnP,KAAKyrC,eAAemc,YACpB5nD,KAAKyrC,eAAeoc,gBACpB7nD,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAekC,eACpB3tC,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAKR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAI8K,IAC1Bv2C,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,eACvCjlC,KAAKyrC,eAAetE,qBAAuBsL,iBAC3CzyC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,uBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EAnGuD,qHCApD,MAAO2J,UAAyB2F,IAGpCv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,2CAClBrwC,KAAK2uC,aAAa0B,uCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAC5B,OAAI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,GAEdA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAema,sBACpB5lD,KAAKyrC,eAAeha,wBACpBzxB,KAAKyrC,eAAeiY,qBACpB1jD,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAeqc,mBACpB9nD,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACnB9vC,KAAKyrC,eAAekY,iBAAkE,IAA/C3jD,KAAKyrC,eAAekY,gBAAgBx0C,QAC5EnP,KAAKyrC,eAAemc,YACpB5nD,KAAKyrC,eAAeoc,gBACrB7nD,KAAKyrC,eAAehhB,SAAWimB,gBAC9B1wC,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAI+K,IAC1Bx2C,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,eACvCjlC,KAAKyrC,eAAehhB,OAASimB,eAC7B1wC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,sBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EAlGsD,qHCAnD,MAAOlC,UAAqBwR,IAGhCv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,uCAClBrwC,KAAK2uC,aAAa0B,mCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAgB5B,OAfI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,IAGjB7uC,KAAKyrC,eAAetE,sBAAqE,IAA7CnnC,KAAKyrC,eAAetE,uBACrCnnC,KAAKyrC,eAAetE,qBAAqB6H,UAAU5yB,aAC5Cq2B,2BAAwDr2B,aAE1FyyB,GAAmB,GAIhBA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,cAKd,IAArCtvB,KAAKyrC,eAAerH,cAClBpkC,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeiC,iBACpB1tC,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAetc,eACpBnvB,KAAKyrC,eAAema,sBACpB5lD,KAAKyrC,eAAeha,wBACpBzxB,KAAKyrC,eAAeiY,qBACpB1jD,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAeqc,mBACpB9nD,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACnB9vC,KAAKyrC,eAAekY,iBAAkE,IAA/C3jD,KAAKyrC,eAAekY,gBAAgBx0C,QAC5EnP,KAAKyrC,eAAemc,YACpB5nD,KAAKyrC,eAAeoc,gBACpB7nD,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAekC,eACpB3tC,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAI8K,IAC1Bv2C,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAetE,qBAAuBsL,iBAC3CzyC,KAAKyrC,eAAezE,iBAAmB/B,eACvCjlC,KAAKyrC,eAAerH,cAAe,EACnCpkC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,uBACA,gBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EAhHkD,qHCA/C,MAAO9B,UAAsBoR,IAGjCv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,wCAClBrwC,KAAK2uC,aAAa0B,oCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAC5B,OAAI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,GAEdA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeiC,iBACpB1tC,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAema,sBACpB5lD,KAAKyrC,eAAeha,wBACpBzxB,KAAKyrC,eAAeiY,qBACpB1jD,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAeqc,mBACpB9nD,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACnB9vC,KAAKyrC,eAAekY,iBAAkE,IAA/C3jD,KAAKyrC,eAAekY,gBAAgBx0C,QAC5EnP,KAAKyrC,eAAemc,YACpB5nD,KAAKyrC,eAAeoc,gBACpB7nD,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAekC,eACpB3tC,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAI8K,IAC1Bv2C,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,eACvCjlC,KAAKyrC,eAAetE,qBAAuBsL,iBAC3CzyC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,uBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EAnGmD,+DCLhD,MAAgBsP,UAA4BjJ,IAChDttC,cACEwS,QACAvS,KAAKwuC,kBAAoB,aACzBxuC,KAAKyuC,qBAAuB,OAC5BzuC,KAAK+mC,aACN,EANiE,qHCK9D,MAAO6J,UAAmB0F,IAG9Bv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,qCAClBrwC,KAAK2uC,aAAa0B,iCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAC5B,OAAI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,GAEdA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeyK,oBACpBl2C,KAAKyrC,eAAeuK,eACpBh2C,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAema,sBACpB5lD,KAAKyrC,eAAeha,wBACpBzxB,KAAKyrC,eAAeiY,qBACpB1jD,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAeqc,mBACpB9nD,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACnB9vC,KAAKyrC,eAAekY,iBAAkE,IAA/C3jD,KAAKyrC,eAAekY,gBAAgBx0C,QAC5EnP,KAAKyrC,eAAemc,YACpB5nD,KAAKyrC,eAAeoc,gBACrB7nD,KAAKyrC,eAAehhB,SAAWimB,gBAC9B1wC,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAe0K,kBACpBn2C,KAAKyrC,eAAewK,aACpBj2C,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAIgL,IAC1Bz2C,KAAKyrC,eAAehhB,OAASimB,eAC7B1wC,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,eACvCjlC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,gBACA,SACA,cACA,gBACA,sBAEFrvC,KAAKyrC,eAAeiE,wBAAyB,EAE7C1vC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EAtGgD,qHCA7C,MAAOgf,UAAsB1P,IAGjCv2C,cACEwS,QAEAvS,KAAK0uC,aAAa2B,wCAClBrwC,KAAK2uC,aAAa0B,oCAClBrwC,KAAK4uC,sBAAsByB,gCAC5B,CAEM9H,sCAAsCrB,GAC3C,IAAI2H,EAAmB7uC,KAAK8uC,6BACxBC,EAAwBlE,+BAC5B,OAAI7qC,KAAKyrC,eAAezE,kBAA6D,IAAzChnC,KAAKyrC,eAAezE,oBAC9D+H,EAAwB/uC,KAAKyrC,eAAezE,iBAAiBgI,UAAU5yB,YAErE2yB,IAA0B7H,IAC5B2H,GAAmB,GAEdA,CACR,CAEMC,6BAKL,SAJK9uC,KAAKyrC,gBAAoBzrC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,aAKjDtvB,KAAKyrC,eAAe6G,oBAAwE,IAAlDtyC,KAAKyrC,eAAe6G,mBAAmBnjC,QACjFnP,KAAKyrC,eAAexgB,eAA8D,IAA7CjrB,KAAKyrC,eAAexgB,cAAc9b,QACxEnP,KAAKyrC,eAAe9Q,gBACpB36B,KAAKyrC,eAAeqI,wBACpB9zC,KAAKyrC,eAAeia,aACpB1lD,KAAKyrC,eAAewD,gBACpBjvC,KAAKyrC,eAAe+B,kBACpBxtC,KAAKyrC,eAAeyD,gBACpBlvC,KAAKyrC,eAAema,sBACpB5lD,KAAKyrC,eAAeha,wBACpBzxB,KAAKyrC,eAAeiY,qBACpB1jD,KAAKyrC,eAAeoI,uBACpB7zC,KAAKyrC,eAAeqc,mBACpB9nD,KAAKyrC,eAAegE,QACpBzvC,KAAKyrC,eAAekE,aACpB3vC,KAAKyrC,eAAemE,eACpB5vC,KAAKyrC,eAAeiE,wBACoB,IAAzC1vC,KAAKyrC,eAAevT,kBACnBl4B,KAAKyrC,eAAeoE,oBACpB7vC,KAAKyrC,eAAeqE,sBACpB9vC,KAAKyrC,eAAemc,YACpB5nD,KAAKyrC,eAAeoc,gBACrB7nD,KAAKyrC,eAAehhB,SAAWimB,gBAC9B1wC,KAAKyrC,eAAelB,YACpBvqC,KAAKyrC,eAAe0D,cACpBnvC,KAAKyrC,eAAegC,gBACpBztC,KAAKyrC,eAAe2D,cACnBpvC,KAAKsvB,WAAgC,IAAnBtvB,KAAKsvB,YACzBtvB,KAAKqpC,4BAMR,CAEMtC,cACL/mC,KAAKsvB,UAAY,EAEjBtvB,KAAKyrC,eAAiB,IAAI+d,IAC1BxpD,KAAKyrC,eAAeia,YAAc,KAClC1lD,KAAKyrC,eAAeiE,wBAAyB,EAC7C1vC,KAAKyrC,eAAehhB,OAASimB,eAC7B1wC,KAAKyrC,eAAevT,iBAAmB,EACvCl4B,KAAKyrC,eAAezE,iBAAmB/B,eACvCjlC,KAAKyrC,eAAelB,WAAa,GACjCvqC,KAAKyrC,eAAe4D,iBAAmB,CACrC,SACA,sBACA,eACA,mBACA,SACA,cACA,gBACA,sBAGFrvC,KAAKsvC,WACN,CAEOV,sBAAsBW,GAC5B,IAAIvI,EACJ,MAAMhjC,EAAO6e,aAAaC,QAAQysB,GAC9BvrC,IACFgjC,EAAmBl/B,KAAKC,MAAM/D,IAG5BgjC,IACFhnC,KAAKyrC,eAAezE,iBAAqCC,OAAOD,GAEnE,EAnGmD,gDCLhD,MAAOyiB,kBCFP,MAAOC,GCMP,MAAO7R,EACQz9B,eACjB,MAAM09B,EAAgB,IAAI2R,EAC1B3R,SAAc6R,SAAW,IAAIvkD,MACtB0yC,CACR,CAE0C19B,qCAACwvC,GAC1C,MAAMhS,EAAkB,IAAIxyC,MAC5BwkD,UAA4BhmD,QAASimD,IACnC,MAAM/R,EAAgB93C,KAAK8pD,0CAA0CD,GACrEjS,EAAgBp2C,KAAKs2C,EAArB,GAGKF,CACR,CAE0Bx9B,qBAAC2vC,GAC1B,MAAMnS,EAAkB,IAAIxyC,MAC5B2kD,UAAmBnmD,QAASomD,IAC1B,MAAMlS,EAAgB93C,KAAKy4C,aAAauR,GACxCpS,EAAgBp2C,KAAKs2C,EAArB,GAGKF,CACR,CAE0Bx9B,oBAAC6vC,GAC1B,MAAMnS,EAAgB93C,KAAK23C,QAC3BG,SAAcxuC,KAAO2gD,EAAiB3gD,KACtCwuC,EAAcc,aAAeqR,EAAiBrR,aAC9Cd,EAAcjsC,KAAOo+C,EAAiBp+C,KACtCisC,EAAc6R,SClCZ,MAAOO,EACQ9vC,eAEjB,OAD0B,IAAIsvC,CAE/B,CAE0BtvC,qBAAC+vC,GAC1B,MAAMC,EAAqB,IAAIhlD,MAC/B+kD,UAAuB78B,KAAK2kB,wBAA+BruC,QAASomD,IAClE,MAAMlS,EAAgB93C,KAAKy4C,aAAauR,GACxCI,EAAmB5oD,KAAKs2C,EAAxB,GAGKsS,CACR,CAE0BhwC,oBAAC4vC,GAC1B,MAAMK,EAAoBrqD,KAAK23C,QAC/B0S,SAAkBzR,aAAeoR,EAAqBpR,aACtDyR,EAAkBC,WAAaN,EAAqBM,WACpDD,EAAkBx+C,KAAOm+C,EAAqBn+C,KACvCw+C,CACR,GDY0BH,cAA2CD,EAAiBN,UACrF7R,EAAcyS,mBAAqBN,EAAiBN,SAAS5oC,KAAMriB,GAAMA,EAAEg7C,cAAc7tC,KAClFisC,CACR,CAEuD19B,iDAACyvC,GACvD,MAAM/R,EAAgB93C,KAAK23C,QAC3BG,SAAcc,aAAeiR,EAA0BjR,aACvDd,EAAcxuC,KAAOugD,EAA0BvgD,KAC/CwuC,EAAcjsC,KAAOg+C,EAA0Bh+C,KACxCisC,CACR,EA3CkC,0EED9B,IAAM6P,EAAb,MAAM,MAAOA,EAGoCvtC,2CAC7C,MAAM+uC,EAAoB,IAAI1Y,IAC9B0Y,SAAkBvQ,aAAe,EACjCuQ,EAAkB9mD,IAAMrC,KAAKwqD,gCAAgCpuC,WAC7D+sC,EAAkB59B,MAAQ,mBACnB49B,CACR,CAE0B/uC,qBAACqwC,EAAiDC,GAC3E,MAAMxC,EAAsB,IAAI9iD,MAChC8iD,SAAoB1mD,KAAKmmD,EAA6BgD,qCACtDF,EAAiBn9B,KAAK2kB,uCACtBwY,EAAiB7mD,QAASgnD,IACxB,IAAIC,GACAH,IAAoBE,EAAgBl9B,gBACtCm9B,EAAS7qD,KAAKy4C,aAAamS,EAAiB,MAC5C1C,EAAoB1mD,KAAKqpD,IAGvBD,EAAgBE,cAClBF,EAAgBE,YAAYx9B,KAAK2kB,uCACjC2Y,EAAgBE,YAAYlnD,QAASmnD,IACnC,GAAIL,IAAoBK,EAAmBr9B,aAAc,CACvD,MAAMs9B,EAAYhrD,KAAKy4C,aAAasS,EAAoBF,GACxD3C,EAAoB1mD,KAAKwpD,EAC1B,IAJH,GASG9C,CACR,CAE0B9tC,oBAACwwC,EAAyEjpD,GACnG,MAAMwnD,EAAoB,IAAI1Y,IAC9B0Y,SAAkBz7B,aAAek9B,EAAgBl9B,aACjDy7B,EAAkB9mD,IAAMuoD,EAAgB/+C,KACxCs9C,EAAkB59B,MAAQq/B,EAAgBr/B,MAC1C49B,EAAkBxnD,OAASA,EACpBwnD,CACR,EA1CaxB,0CAAkC,EADrCA,CAAb,oDCCM,MAAOriB,EAOXvlC,YAAmB4e,EAAe4M,EAAelM,EAAck8B,EAAgC0P,GAC7FjrD,KAAKu7C,cAAgBA,EACrBv7C,KAAK2e,MAAQA,EACb3e,KAAKurB,MAAQA,EACbvrB,KAAKqf,KAAOA,EACZrf,KAAKirD,OAASA,CACf,EAbyB,kJCL1BhnD,oBAEEA,0DAASA,sCAAkC,GAU3CA,sBACAA,kBAAwCA,SAAuBA,kCAP/DA,yBAFAA,yGAAqG,kCADrGA,wCASUA,4CAC8BA,qCCNrC,IAAMinD,EAAb,MAAM,MAAOA,EANbnrD,cAOmBC,8BAA2B,IAAIuT,MAChCvT,qBAAkB,OAClBA,uBAAmB,EACnBA,uBAAoB,GACpBA,qBAAkB,WAClBA,mBAAe,EAGfA,6BAAyB,EAEzBA,yBAAqB,EAEpBA,yBAAsB,IAAIuT,KAO5C,CALQ8oC,2BAA2B52C,GAChCA,EAAMo4C,kBACN79C,KAAKmrD,oBAAoBz3C,OACzB1T,KAAKorD,yBAAyB13C,MAC/B,+CAnBUw3C,EAA4B,0BAA5BA,EAA4B32C,yxBDRzCtQ,iBACEA,0BAeFA,eAdKA,mGCMQinD,CAAb,sICIIjnD,4CAAkDA,2DAClDA,oBAAmDA,SAAmBA,+BAAnBA,yEAZrDA,oBAEEA,0DAASA,yCAAqC,GAS9CA,4BACAA,4BACAA,kBAAwCA,SAAoBA,kCAT5DA,yGAAqG,+BADrGA,qCAQWA,yDACAA,0DAC6BA,kCCNrC,IAAMonD,EAAb,MAAM,MAAOA,EANbtrD,cAOkBC,mBAAe,EACdA,iCAA8B,IAAIuT,MACnCvT,mBAAgB,YAIhBA,6BAAyB,EAGzBA,yBAAqB,EAEpBA,yBAAsB,IAAIuT,MAEpCvT,8BAA0B,CAoBlC,CAlBQo9C,8BAA8B33C,GACnCA,EAAMo4C,kBACN79C,KAAKmrD,oBAAoBz3C,OACzB1T,KAAKsrD,4BAA4B53C,MAClC,CAEMC,cACL3T,KAAKurD,wBAA0BvrD,KAAKwrD,qBACrC,CAGMA,sBACL,QAAKxrD,KAAKyrD,cAKX,+CAjCUJ,EAA+B,0BAA/BA,EAA+B92C,mwBDR5CtQ,iBACEA,0BAeFA,eAdKA,0GCMQonD,CAAb,8ECDO,IAAMK,EAAb,MAAM,MAAOA,EAGX3rD,YAA2B4rD,6BAA2C,CAG/DC,aAAanmD,GACdzF,KAAK6rD,kBAAkB18C,OAAS,IAElC1J,EAAMsU,iBACN/Z,KAAK2rD,oBAAoBG,qBAAqBrqD,KAAK,CAAEgE,MAAOA,EAAOs7B,IAAK/gC,KAAK6rD,mBAEhF,+CAZUH,GAAoBznD,qCAApBynD,EAAoBn3C,4GAApBC,iBAAoB,sEAApBk3C,CAAb,4FCNEznD,oBAEEA,0DAASA,uCAAmC,GAS5CA,sBACAA,mBAAwCA,SAAkBA,kCAR1DA,kDAA0C,2DAA1CA,CAA0C,6BAD1CA,mCASwCA,wEAG1CA,qBAEEA,0DAASA,+CAA2C,GAQpDA,uBACAA,mBAAwCA,SAA0BA,kCAPlEA,kEAA0D,qCAD1DA,2CAQwCA,gFAG1CA,qBAEEA,0DAASA,gDAA4C,GAQrDA,uBACAA,mBAAwCA,SAAsBA,kCAP9DA,kEAA0D,iCAD1DA,uCAQwCA,4EAG1CA,qBAEEA,0DAASA,gDAA4C,GASrDA,uBACAA,mBAAwCA,SAAsBA,kCAT9DA,sDAA8C,2DAA9CA,CAA8C,iCAC9CA,uCAQwCA,4EAG1CA,qBAEEA,0DAASA,wDAAoD,GAO7DA,uBACAA,mBAAwCA,SAA8BA,kCANtEA,+CADAA,+CAOwCA,oFAG1CA,qBAEEA,0DAASA,mDAA+C,GASxDA,uBACAA,mBAAwCA,SAA8BA,kCATtEA,8DAAsD,2DAAtDA,CAAsD,yCACtDA,+CAQwCA,oFAG1CA,qBAEEA,0DAASA,gDAA4C,GAQrDA,uBACAA,mBAAwCA,SAAsBA,kCAP9DA,kEAA0D,iCAD1DA,uCAQwCA,oCCxFrC,IAAM8nD,EAAb,MAAM,MAAOA,EAuCXhsD,YAA2B4rD,8BAtCV3rD,mCAAgC,IAAIuT,MACrCvT,sBAAkB,EAClBA,sBAAmB,mCAElBA,mCAAgC,IAAIuT,MACrCvT,sBAAkB,EAClBA,sBAAmB,2BAGlBA,2CAAwC,IAAIuT,MAC7CvT,8BAA0B,EAC1BA,8BAA2B,qCAE1BA,mCAAgC,IAAIuT,MACrCvT,sBAAkB,EAClBA,sBAAmB,mCAElBA,2CAAwC,IAAIuT,MAC7CvT,8BAA0B,EAC1BA,8BAA2B,4BAI3BA,6BAAyB,EAEzBA,yBAAqB,EAEpBA,uCAAoC,IAAIuT,MACzCvT,0BAAsB,EACtBA,0BAAuB,0BAEtBA,+BAA4B,IAAIuT,MACjCvT,kBAAc,EACdA,kBAAe,gBAGdA,yBAAsB,IAAIuT,KAE2B,CAE/Dy4C,wBAAwBxyC,GAC7BxZ,KAAK2rD,oBAAoBM,qBAAqBxqD,KAAK+X,EACpD,CAEM0yC,qCAAqCzmD,GAC1CA,EAAMo4C,kBACN79C,KAAKmsD,8BAA8Bz4C,MACpC,CAEM04C,qCAAqC3mD,GAC1CA,EAAMo4C,kBACN79C,KAAKqsD,8BAA8B34C,MACpC,CAEM44C,6CAA6C7mD,GAClDA,EAAMo4C,kBACN79C,KAAKusD,sCAAsC74C,MAC5C,CAEM84C,qCAAqC/mD,GAC1CA,EAAMo4C,kBACN79C,KAAKysD,8BAA8B/4C,MACpC,CAEMg5C,wCAAwCjnD,GAC7CA,EAAMo4C,kBACN79C,KAAKmrD,oBAAoBz3C,OACzB1T,KAAK2sD,sCAAsCj5C,MAC5C,CAEMk5C,oCAAoCnnD,GACzCA,EAAMo4C,kBACN79C,KAAKmrD,oBAAoBz3C,OACzB1T,KAAK6sD,kCAAkCn5C,MACxC,CAEMo5C,4BAA4BrnD,GACjCA,EAAMo4C,kBACN79C,KAAK+sD,0BAA0Br5C,MAChC,+CAhFUq4C,GAA2B9nD,qCAA3B8nD,EAA2Bx3C,kyGDVxCtQ,iBAAKA,sCAAcuQ,4BAA+B,GAChDvQ,0BAeAA,0BAcAA,0BAcAA,0BAeAA,0BAaAA,0BAeAA,0BAaFA,eAlGKA,qCAeAA,6CAcAA,yCAcAA,yCAeAA,iDAaAA,iDAeAA,oGC9EQ8nD,CAAb,8ICiBO,IAAMiB,EAAb,MAAM,MAAOA,kDAAwB,0BAAxBA,gCAdTv7C,IACAC,KAKAu7C,gBAA4B,CAAEC,oBAAoB,IAClD5kC,KACA6kC,KACA9kC,KACAD,QAIS4kC,CAAb,8ICrBM/oD,8BAKFA,kCAXJA,eAA2B,UAA3BA,CAA2B,aAA3BA,CAA2B,gBAGuBA,qBAASA,UAEvDA,wBACEA,gCACFA,UAGFA,iBACEA,gCACFA,2CAVqCA,0CAAyB,uBAApDA,2BAISA,mDAKFA,oDCHZ,IAAMmpD,EAAb,MAAM,MAAOA,EANbrtD,cAQkBC,mBAAe,CAChC,+CAHYotD,EAA2B,0BAA3BA,EAA2B74C,oaDRxCtQ,6BAAMA,ibCQOmpD,CAAb,sICKInpD,6CAA6CA,sDAC7CA,oBAA8CA,SAAcA,+BAAdA,oEAbhDA,oBAEEA,4DAASA,sCAAgC,GAUzCA,4BACAA,4BACAA,mBAAwCA,SAAeA,kCAVvDA,kEAA0D,0BAD1DA,gCASWA,oDACAA,qDAC6BA,qDAexCA,6CAA6CA,sDAC7CA,oBAA8CA,SAAcA,+BAAdA,oEAbhDA,qBAEEA,4DAASA,sCAAgC,GAUzCA,4BACAA,4BACAA,mBAAwCA,SAAeA,kCAVvDA,sFAAgF,0BADhFA,gCASWA,oDACAA,qDAC6BA,qDAexCA,6CAA+CA,wDAC/CA,oBAAgDA,SAAgBA,+BAAhBA,sEAblDA,qBAEEA,4DAASA,wCAAkC,GAU3CA,4BACAA,4BACAA,mBAAwCA,SAAiBA,kCAVzDA,kEAA0D,4BAD1DA,kCASWA,sDACAA,uDAC6BA,oDAG1CA,0CAcEA,6CAAgDA,yDAChDA,oBAAiDA,SAAiBA,+BAAjBA,uEAbnDA,qBAEEA,4DAASA,yCAAmC,GAU5CA,4BACAA,4BACAA,mBAAwCA,SAAkBA,kCAV1DA,kEAA0D,6BAD1DA,mCASWA,uDACAA,wDAC6BA,wDAexCA,6CAA+CA,wDAC/CA,oBAAgDA,SAAgBA,+BAAhBA,sEAblDA,qBAGEA,4DAASA,wCAAkC,GAS3CA,4BACAA,4BACAA,mBAAwCA,SAAiBA,kCATzDA,wFAAkF,4BADlFA,kCAQWA,sDACAA,uDAC6BA,+BC7ErC,IAAMopD,EAAb,MAAM,MAAOA,EANbttD,cAOmBC,8BAA2B,IAAIuT,MAChCvT,yBAAqB,EACrBA,gBAAa,iBAGZA,+BAA4B,IAAIuT,MACjCvT,mBAAe,EACfA,iBAAc,SAGbA,8BAA2B,IAAIuT,MAChCvT,gBAAa,SAIbA,6BAAyB,EAGzBA,yBAAqB,EAEpBA,4BAAyB,IAAIuT,MAC9BvT,cAAW,WAEVA,yBAAsB,IAAIuT,MAE1BvT,4BAAyB,IAAIuT,MAC9BvT,uBAAmB,EACnBA,cAAW,WAEXA,iBAAa,EAEtBA,2BAAuB,EACvBA,4BAAwB,EACxBA,2BAAuB,EACvBA,yBAAqB,EACrBA,yBAAqB,CA6G7B,CA3GQy8C,2BAA2Bh3C,GAChCA,EAAMo4C,kBACN79C,KAAKmrD,oBAAoBz3C,OACzB1T,KAAKstD,yBAAyB55C,MAC/B,CAEMqpC,4BAA4Bt3C,GACjCA,EAAMo4C,kBACN79C,KAAKmrD,oBAAoBz3C,OACzB1T,KAAKutD,0BAA0B75C,MAChC,CAEM6pC,2BAA2B93C,GAChCA,EAAMo4C,kBACN79C,KAAKmrD,oBAAoBz3C,OACzB1T,KAAKwtD,yBAAyB95C,MAC/B,CAEMC,cACL3T,KAAKytD,qBAAuBztD,KAAK0tD,mBACjC1tD,KAAK2tD,sBAAwB3tD,KAAK4tD,oBAClC5tD,KAAK6tD,qBAAuB7tD,KAAK8tD,mBACjC9tD,KAAK+tD,mBAAqB/tD,KAAKguD,iBAC/BhuD,KAAKiuD,mBAAqBjuD,KAAKkuD,gBAChC,CAEMC,yBAAyB1oD,GAC9BA,EAAMo4C,kBACN79C,KAAKmrD,oBAAoBz3C,OACzB1T,KAAKouD,uBAAuB16C,MAC7B,CAGMg6C,mBAML,SALK1tD,KAAKquD,aAKNruD,KAAKsuD,eAAiBtuD,KAAK0tB,aAKhC,CAGMkgC,oBAML,SALK5tD,KAAKsuD,cAKNtuD,KAAK0tB,aAKV,CAGMogC,mBACL,QAAK9tD,KAAKuuD,eAKNvuD,KAAK0tB,YAKV,CAGMsgC,iBACL,QAAKhuD,KAAKwuD,aAKNxuD,KAAKyuD,UAKV,CAGMP,iBAML,SALKluD,KAAK0uD,WAKN1uD,KAAKyuD,WAKV,CAEME,yBAAyBlpD,GAC9BA,EAAMo4C,kBACN79C,KAAKmrD,oBAAoBz3C,OACzB1T,KAAK4uD,uBAAuBl7C,MAC7B,+CAhJU25C,EAA2B,0BAA3BA,EAA2B94C,85EDRxCtQ,iBACEA,0BAiBAA,0BAiBAA,0BAiBAA,uBAEAA,0BAiBAA,0BAgBFA,eArFKA,4CAiBAA,4CAiBAA,8CAgBGA,wHAGHA,+CAkBAA,uGCjEQopD,CAAb,6JCNIppD,iBAA2CA,SAA4DA,8BAA5DA,mGAGzCA,mBACEA,kCACFA,+BADEA,mHAEFA,mBAA2DA,SAAqBA,+BAArBA,mEAL7DA,iBAAyE,YACxCA,SAAiBA,QAChDA,wBAGAA,wBACFA,8BALiCA,qCACxBA,2CAGAA,sEAIPA,mBACEA,kCACFA,+BADEA,mHAEFA,mBAA2DA,SAAqBA,+BAArBA,mEAL7DA,iBAAyE,YACxCA,SAAiBA,QAChDA,wBAGAA,wBACFA,8BALiCA,qCACxBA,2CAGAA,sEAIPA,mBACEA,kCACFA,+BADEA,mHAEFA,mBAA2DA,SAAoBA,+BAApBA,kEAL7DA,iBAAyE,YACxCA,SAAiBA,QAChDA,wBAGAA,wBACFA,8BALiCA,qCACxBA,2CAGAA,sEAETA,iBAAkF,aAChCA,SAA0BA,gCAA1BA,uFAGpDA,qBAEEA,2DAASA,gEAA2D,GAOpEA,uBACFA,gCANEA,2DADAA,oGAQFA,qBAEEA,2DAASA,kDAA6C,GAOtDA,uBACFA,gCANEA,6CADAA,8CClCG,IAAM4qD,EAAb,MAAM,MAAOA,EANb9uD,cAmBmBC,uDAAoD,IAAIuT,MACzDvT,0CAAsC,EACtCA,0CAAuC,iCACtCA,yCAAsC,IAAIuT,MAC3CvT,4BAAwB,EACxBA,4BAAyB,sCAW1C,CATQ8uD,oDAAoDrpD,GACzDA,EAAMo4C,kBACN79C,KAAK+uD,kDAAkDr7C,MACxD,CAEM4rC,sCAAsC75C,GAC3CA,EAAMo4C,kBACN79C,KAAKgvD,oCAAoCt7C,MAC1C,+CA5BUm7C,EAAkB,0BAAlBA,EAAkBt6C,yuDDR/BtQ,iBAAmF,WAE/EA,uBACAA,uBAOAA,uBAOAA,uBAOAA,uBAGFA,QACAA,0BAWAA,0BAWFA,eAhDUA,+BACAA,oCAOAA,oCAOAA,oCAOAA,6CAKLA,6DAWAA,0kBChCQ4qD,CAAb,gJCCI5qD,uBAA6DA,0BAAcA,2GAR7EA,iBAQEA,4BACAA,mBACFA,+BAREA,8CACAA,+CAKWA,0CACLA,iFAGNA,8CACAA,uBAAuFA,0BAAcA,+BACrGA,sGASAA,0CAEEA,6EAGE,sFAGJA,mBAAqCA,SAAmBA,gCAAnBA,kEApBvCA,eACEA,6BACAA,4BACAA,6BAEAA,mBAOAA,yBAQAA,yBACFA,+BArB0BA,8CACbA,4CACAA,qEACAA,2CAGTA,wKAGE,+CAIDA,mCAOIA,2DAETA,4CAEAA,kBACEA,mBACFA,+BADQA,qFAiBNA,8CACAA,uBAA6DA,gBAAIA,gCACjEA,uBAA+DA,0BAAcA,+BAC7EA,0SAjBFA,kBAcEA,6BACAA,6BACAA,4BACAA,6BACAA,mBACFA,+BAjBEA,yPASE,kBAGSA,4CACAA,2CACAA,4CACAA,2CACLA,sEAAwD,yEAG9DA,8CAAgFA,wDAChFA,uBAAiFA,SAAcA,gCAAdA,wDAFnFA,kBACEA,6BACAA,6BACAA,mBACFA,+BAHaA,kEACAA,mEACLA,uFAGNA,8CAA0FA,8DAC1FA,uBAA2FA,SAAmBA,gCAAnBA,iIAF7FA,iBACEA,8BACAA,8BACAA,mBACFA,+BAJuBA,kDACVA,4EACAA,6EACLA,kGAERA,kBACEA,mBACFA,+BADQA,uEC5DH,IAAMgrD,EAAb,MAAM,MAAOA,EAwCXlvD,YAA2B6kC,8BAvCX5kC,eAAW,EAEXA,wBAAoB,EACpBA,wBAAoB,EAEpBA,uBAAmB,EACnBA,gBAA8E,aAE9EA,sBAAkB,EAClBA,cAAsE,SACtEA,cAA6B,OAC7BA,yBAAqB,EACrBA,wBAAqBgd,WACrBhd,uBAAmB,EACnBA,wBAAoB,EACpBA,yBAAqB,EACrBA,wBAAqBgd,WACrBhd,4BAAwB,EACxBA,yBAAqB,EAErBA,uBAAoBgd,WAGpBhd,4BAAyBgd,WAEzBhd,wBAAoB,EAEpBA,4BAAyBgd,WAEzBhd,wBAAoB,EACpBA,uBAAmB,EACnBA,wBAAoB,EACpBA,uBAAmB,EACnBA,gBAAuE,UAEvEA,2BAAuB,CAI2B,CAE3DkvD,eAAepyC,IACpB,OAAO9c,KAAKmvD,kBAAkBryC,GAAS9c,KAAKovD,mBAAoBpvD,KAAKqvD,mBACtE,CAEMC,aAAaxyC,IAClB,OAAO9c,KAAKmvD,kBAAkBryC,GAAS9c,KAAKuvD,iBAC7C,CAEMC,cAAc1yC,IACnB,OAAO9c,KAAKmvD,kBAAkBryC,GAAS9c,KAAKyvD,kBAAmBzvD,KAAK0vD,kBACrE,CAEMC,mBAAmB7yC,IACxB,OAAO9c,KAAKmvD,kBAAkBryC,GAAS9c,KAAKyvD,kBAAmBzvD,KAAK4vD,uBACrE,CAEMC,mBAAmB/yC,IACxB,OAAO9c,KAAKmvD,kBAAkBryC,GAAS9c,KAAKyvD,kBAAmBzvD,KAAK8vD,uBACrE,CAEMC,eAAejzC,IACpB,OAAO9c,KAAKmvD,kBAAkBryC,GAAS9c,KAAKgwD,mBAAoBhwD,KAAKiwD,mBACtE,CAEMC,kBAAkBpzC,IACvB,OAAO9c,KAAKmvD,kBAAkBryC,GAAS9c,KAAKmwD,sBAC7C,CAEMC,eAAetzC,IACpB,OAAO9c,KAAKmvD,kBAAkBryC,GAAS9c,KAAKqwD,mBAC7C,CAEOlB,kBAAkBryC,GAAiBwzC,GAAwBvzC,GAAgBC,YACjF,OAAIszC,GACKtwD,KAAK4kC,kBAAkB/nB,UAAUC,GAASC,IAG5Ce,WAAkBhB,GAC1B,iDAhFUmyC,GAAyBhrD,qCAAzBgrD,EAAyB16C,2/EDXtCtQ,iBACEA,uBAWAA,wBAsBAA,uBAEAA,uBAIAA,wBAoBAA,wBAKAA,wBAKAA,wBAGFA,gBAzEKA,4CAEAA,8BAUGA,qCAsBAA,qCAEAA,gCAKHA,gCAmBGA,+BAKAA,oCAKAA,ijCC3DKgrD,CAAb,yFCDO,IAAMsB,EAAb,MAAM,MAAOA,kDAAsB,0BAAtBA,gCAHD7+C,KAAc4W,QAGbioC,CAAb,qICFEtsD,sBAA6DA,0BAAcA,kCAR7EA,iBAQEA,4BACAA,kBACFA,8BAREA,0KAMWA,yCACLA,gFAERA,iBCDO,IAAMusD,EAAb,MAAM,MAAOA,EAWXzwD,YAA2B6kC,4BAVX5kC,sBAAkB,EAClBA,aAAS,EACTA,8BAA0B,EAI1BA,cAAsE,SAEtEA,cAA6B,MAEqB,CAE3D6c,UAAUC,GACf,OAAI9c,KAAKywD,wBACAzwD,KAAK4kC,kBAAkB/nB,UAAUC,GAGnCgB,WAAkBhB,EAC1B,+CAnBU0zC,GAAgBvsD,qCAAhBusD,EAAgBj8C,8ZDV7BtQ,uBAWAA,8BAVGA,yBAUGA,oFCDOusD,CAAb,uFCAO,IAAME,EAAb,MAAM,MAAOA,kDAAa,0BAAbA,gCAFDh/C,KAAc4W,QAEbooC,CAAb,oDCVM,MAAOnW,EAWXx6C,YAAmBwrB,EAAemC,GAAe,GAV1C1tB,mBAAe,EACfA,kBAAc,EACdA,oBAAgB,EAChBA,mBAAe,EACfA,sBAAkB,EAOvBA,KAAK0tB,aAAeA,EACpB1tB,KAAKurB,MAAQA,CACd,EAd8B,uJCG7BtnB,cAAmCA,aAACA,8BAGhCA,4CACAA,6CACAA,uBAA6FA,0BAAcA,+HAc3GA,mBAQGA,SAAkBA,wCANnBA,wEAMCA,mQA1BPA,cAAyC,WAErCA,4BACAA,4BACAA,4BACAA,iBAaAA,wBAUFA,8CA1BaA,yDACAA,wDACAA,yDAETA,gCAAuB,uCAAvBA,CAAuB,kMAatBA,qDAWPA,cAAiCA,eAAGA,SCvBjC,IAAM0sD,EAAb,MAAM,MAAOA,EAOX5wD,YAA2B6kC,4BALX5kC,oBAAgB,EAGzBA,kBAA4C,IAAIoF,KAEW,CAE3DyX,UAAUC,GACf,OAAI9c,KAAKswD,cACAtwD,KAAK4kC,kBAAkB/nB,UAAUC,GAGnCgB,WAAkBhB,EAC1B,CAEMnJ,cACD3T,KAAK4wD,WACP5wD,KAAK6wD,aAAe7wD,KAAK4wD,SAAS10C,MAAM,EAAG,GAE9C,+CArBUy0C,GAAiB1sD,qCAAjB0sD,EAAiBp8C,yuBDX9BtQ,iBAAyC,YACTA,SAAWA,QACzCA,cACEA,sBACAA,uBA8BAA,sBACFA,iBAlC8BA,wBAEvBA,qEACmBA,yCA8BnBA,quCCvBI0sD,CAAb,mJCRE1sD,gBAAyBA,SAAsBA,8BAAtBA,wCCQpB,IAAM6sD,EAAb,MAAM,MAAOA,EAOX/wD,YAA2B6kC,4BALX5kC,oBAAgB,CAKkC,CAE3D+wD,iBAAiBj0C,GACtB,OAAI9c,KAAKswD,cACAtwD,KAAK4kC,kBAAkB/nB,UAAUC,EAASE,aAG5Cc,WAAkBhB,EAC1B,+CAfUg0C,GAAkB7sD,qCAAlB6sD,EAAkBv8C,0RDX/BtQ,iBAA6BA,SAAWA,QACxCA,iBACEA,2CACAA,wBACFA,eAJ6BA,wBAErBA,yGACCA,kFCQI6sD,CAAb,6ECNO,IAAME,EAAb,MAAM,MAAOA,EAIQ52C,eAEjB,OAD+B,IAAI62C,GAEpC,CAEgC72C,2BAAC6Y,GAChC,OAAOjzB,KAAKkxD,2BAA2Bj+B,EACxC,CAEwC7Y,mCAAC+2C,GACxC,OAAOnxD,KAAKoxD,mCAAmCD,EAChD,CAEwC/2C,kCAAC6Y,GACxC,MAAMo+B,EAAyBrxD,KAAK23C,QAEpC0Z,SAAuBjhC,qBAAuBlZ,8BAAuC+b,EAAqB7C,sBAC1GihC,EAAuBhhC,aAAenZ,8BAAuC+b,EAAqB5C,cAClGghC,EAAuBC,uBACrBr+B,EAAqB5C,aAAe,GAAmD,IAA9C4C,EAAqB7C,qBAC1D,IACAlZ,UAAmBA,mBAA4B+b,EAAqB5C,aAAc4C,EAAqB7C,uBAEzGihC,EAAuBC,wBAA0BtxD,KAAKuxD,gCACxDF,EAAuBG,UAAW,GAE7BH,CACR,CAEgDj3C,0CAAC+2C,GAChD,MAAME,EAAyBrxD,KAAK23C,QAEpC0Z,SAAuBjhC,qBAAuBlZ,8BAAuCi6C,EAAwB/gC,sBAC7GihC,EAAuBhhC,aAAenZ,8BAAuCi6C,EAAwB9gC,cACrGghC,EAAuBC,uBACrBH,EAAwB9gC,aAAe,GAAsD,IAAjD8gC,EAAwB/gC,qBAChE,IACAlZ,UACEA,mBAA4Bi6C,EAAwB9gC,aAAc8gC,EAAwB/gC,uBAG9FihC,EAAuBC,wBAA0BtxD,KAAKuxD,gCACxDF,EAAuBG,UAAW,GAE7BH,CACR,EAhDaL,uCAAgC,GAChCA,iCAAiC,GAFpCA,CAAb,oDCLM,MAAOC,GAA2B,0ECYlC,MAAOtP,EAC0CvnC,+CACnDq3C,GAEA,MAAMC,EAAS,IAAItsD,MACnBqsD,SAAqC7tD,QAAS+tD,IAC5C,MAAM7O,EAAQ,IAAIrS,IAClBqS,EAAMpJ,YAAciY,EAAoCC,UACxD9O,EAAMzgD,IAAMsvD,EAAoC9lD,KAChDi3C,EAAMv3B,MAAQomC,EAAoCroD,KAClDooD,EAAOlwD,KAAKshD,EAAZ,GAGK4O,CACR,CAE0Ct3C,qCACzCy3C,EACA1nC,GAEA,MAAM2nC,EAAc,IAAI1sD,MAExBysD,SAA2BjuD,QAASmuD,IAClCD,EAAYtwD,KAAKxB,KAAKgyD,oCAAoCD,GAA1D,GAIE5nC,GAAuB4uB,KAAKrrB,cAC9BokC,EAAYtwD,KAAKxB,KAAKiyD,+BAA+B9nC,EAAsB4uB,OAG7E+Y,EAAYxkC,KAAK2kB,wDAEV6f,CACR,CAEgD13C,2CAAC23C,GAChD,MAAMnT,EAAa,IAAInO,IACvBmO,SAAWlF,YAAcqY,EAA0BrY,YACnDkF,EAAWlxB,aAAeqkC,EAA0BrkC,aACpDkxB,EAAWv8C,IAAM0vD,EAA0BlmD,KAC3C+yC,EAAWrzB,MAAQwmC,EAA0BxmC,MAEtCqzB,CACR,CAE8CxkC,yCAAC83C,GAC9C,MAAMJ,EAAc,IAAI1sD,MACxB8sD,SAA+BtuD,QAASuuD,IACtCL,EAAYtwD,KAAKxB,KAAKoyD,wCAAwCD,GAA9D,GAGFL,EAAYxkC,KAAK2kB,+BAEV6f,CACR,CAEoD13C,+CAAC+3C,GACpD,MAAMvT,EAAa,IAAInO,IACvBmO,SAAWlxB,aAAeykC,EAA8BzkC,aACxDkxB,EAAWv8C,IAAM8vD,EAA8BtmD,KAC/C+yC,EAAWrzB,MAAQ,GAAG4mC,EAA8B9lD,oBAAoB8lD,EAA8B5mC,QAEtGqzB,EAAWj9C,OAAS,IAAI8uC,IACxBmO,EAAWj9C,OAAOU,IAAM8vD,EAA8BE,QAAQxmD,KAC9D+yC,EAAWj9C,OAAO4pB,MAAQ4mC,EAA8BE,QAAQ9mC,MAEzDqzB,CACR,CAEoCxkC,+BAACk4C,GACpC,MAAMZ,EAAS,IAAItsD,MACnBktD,SAAqB1uD,QAAS2uD,IAC5B,MAAMzP,EAAQ,IAAIrS,IAClBqS,EAAMzgD,IAAMkwD,EAAoB1mD,KAChCi3C,EAAMv3B,MAAQgnC,EAAoBjpD,KAClCooD,EAAOlwD,KAAKshD,EAAZ,GAEK4O,CACR,CAE0Ct3C,qCAACm4C,GAC1C,IAAKA,EACH,OAGF,MAAMzP,EAAQ,IAAIrS,IAClBqS,SAAMzgD,IAAMkwD,EAAoB1mD,KAChCi3C,EAAMv3B,MAAQgnC,EAAoBjpD,KAE3Bw5C,CACR,CAEuC1oC,kCAACo4C,GACvC,MAAMV,EAAc,IAAI1sD,MACxBotD,SAAwB5uD,QAAS6uD,IAC/BX,EAAYtwD,KAAKxB,KAAK0yD,iCAAiCD,GAAvD,GAEFX,EAAYxkC,KAAK2kB,+BAEV6f,CACR,CAE6C13C,wCAACq4C,GAC7C,MAAM7T,EAAa,IAAInO,IACvBmO,SAAWlxB,aAAe+kC,EAAuB/kC,aACjDkxB,EAAWv8C,IAAMowD,EAAuB5mD,KACxC+yC,EAAWrzB,MAAQknC,EAAuBlnC,MAEnCqzB,CACR,CAE0CxkC,qCAACu4C,GAC1C,MAAMb,EAAc,IAAI1sD,MACxButD,SAA2B/uD,QAASgvD,IAClC,MAAMhU,EAAa,IAAInO,IACvBmO,EAAWlxB,aAAeklC,EAA0BllC,aACpDkxB,EAAWhG,aAAega,EAA0Bha,aACpDgG,EAAWv8C,IAAMuwD,EAA0B/mD,KAC3C+yC,EAAWrzB,MAAQqnC,EAA0BtpD,KAC7CwoD,EAAYtwD,KAAKo9C,EAAjB,GAGKkT,CACR,CAE8C13C,yCAACy4C,GAC9C,MAAMjU,EAAa,IAAInO,IACvBmO,SAAWlxB,aAAemlC,EAAwBnlC,aAClDkxB,EAAWv8C,IAAMwwD,EAAwBhnD,KACzC+yC,EAAWrzB,MAAQsnC,EAAwBtnC,MAEpCqzB,CACR,CAE8BxkC,yBAAC04C,GAC9B,IAAIC,EACJ,MAAMN,EAAyBK,EAAU/xC,KAAMsxC,GAAYA,EAAQ3Y,aACnE,OACEqZ,EADEN,EACe9Q,EAAiB+Q,iCAAiCD,GAElD,IAAIhiB,IAAW,KAAM,KAAM,KAAM,MAE7CsiB,CACR,CAE2B34C,sBAAC2Q,GAC3B,IAAIC,EACJ,MAAMgoC,EAAsBjoC,EAAMhK,KAAMg4B,GAASA,EAAKW,aACtD,OAAIsZ,IACFhoC,EAAc22B,EAAiBqQ,oCAAoCgB,IAG9DhoC,CACR,CAE4C5Q,sCAAC44C,GAC5C,MAAMpU,EAAa,IAAInO,IACvBmO,SAAWlxB,aAAeslC,EAAoBtlC,aAC9CkxB,EAAWv8C,IAAM2wD,EAAoBnnD,KACrC+yC,EAAWrzB,MAAQynC,EAAoBznC,MAEhCqzB,CACR,EAnK0B,gDCZvB,MAAOnO,EAQX1wC,YAAmBsC,EAAc,KAAMkpB,EAAgB,KAAMmC,GAAe,EAAO/rB,EAAqB,KAAM+3C,GAAc,GAPrH15C,kBAAc,EACdA,mBAAe,EAIfA,YAAqB,KAG1BA,KAAK05C,YAAcA,EACnB15C,KAAK0tB,aAAeA,EACpB1tB,KAAKqC,IAAMA,EACXrC,KAAKurB,MAAQA,EACbvrB,KAAK2B,OAASA,CACf,EAdoB,2SCajBsC,sBAGGA,gBAAIA,iCADLA,gHAGFA,sBAGGA,0BAAcA,iCADfA,gHAGFA,gBAIEA,SACFA,iCAHEA,yDAEAA,8FAlBJA,gCAIEA,4BAKAA,4BAKAA,wBAMAA,gBAA6DA,SAAkCA,kCAlB/FA,0JAGGA,6DAKAA,8DAKAA,qGAKGA,kEAAuDA,0HAG/DA,wBAAiH,YAC9EA,SAAuCA,kCADHA,4CACpCA,8EAGnCA,mDAGEA,oBAAoFA,gBAAIA,0CAA/CA,+DACzCA,oBAAqFA,0BAAcA,0CAAzDA,+DAC1CA,gBAKEA,SACFA,0CAJEA,kCAA0C,sBAG1CA,uEARJA,yBACEA,4BACAA,4BACAA,yBAOAA,gBAAiDA,SAAsBA,iDAV1BA,kBAAoB,qCACtDA,sCACAA,uCAERA,2DAMGA,2CAA2CA,uEAGrDA,qBAEEA,mDAASgvD,4BAA6BhvD,0BAAwB,GAQ9DA,oBAAUA,iBAAKA,gBAPfA,kFASFA,qBAAyDA,SAAmCA,gCAAnCA,kDClDpD,IAAMivD,GAAb,MAAM,MAAOA,GA4CXnzD,YAA2BozD,GAA+C7/C,GAA/CtT,2BAA+CA,qBAvC1DA,sBAAmB,IAAIyV,KAAwB,MAK/CzV,6BAAyB,EAEzBA,sBAAkB,EAQlBA,mBAAe,EAkBdA,oBAAiB,IAAIuT,MACrBvT,qBAAkB,IAAIuT,KAKkE,CAEjF6G,kBAACwkC,GAAwBwU,EAAuB1lC,GAAe,GACrF,MAAMtX,GAAa,GAKnB,OAJIg9C,GACFh9C,GAAW5U,KAAK6xD,cAMT,IAAI59C,KAHRmpC,IAAYv8C,IAGoB,CAAEiC,MAAOs6C,GAAY0U,SAAU5lC,GAF/B,CAAEppB,WAAOsT,EAAW07C,SAAU5lC,GAEiBtX,GAErF,CAEMm9C,4BACDvzD,KAAKwzD,cAAgBxzD,KAAKwzD,aAAanxD,MAAQrC,KAAKyzD,iBAAiBnvD,OAAOjC,MAGhFrC,KAAKyzD,iBAAiBpqC,SAASrpB,KAAKwzD,cACpCxzD,KAAK0zD,YAAY1zD,KAAKwzD,cACvB,CAEMG,eACL3zD,KAAKmzD,mBAAmBQ,cACzB,CAEMhgD,cACL,GAAI3T,KAAKwV,QAAS,CAChB,MAAM+mC,GAAWv8C,KAAKwV,QAAQuL,KAAMriB,GAAMA,EAAE2D,MAAQrC,KAAK4zD,aACzD5zD,KAAKyzD,iBAAiBpqC,SAASkzB,IAC/Bv8C,KAAK6zD,iBACN,CACF,CAEMC,yBAAyBC,IAC9B/zD,KAAKg0D,gBAAgBtgD,KAAKqgD,IAC1B/zD,KAAK6zD,iBACN,CAEMI,aACLj0D,KAAKyzD,iBAAiBpqC,cAASzR,EAChC,CAEMhE,WACL5T,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAKk0D,YAAY7/C,OAAjB,EAEH,CAEMq/C,YAAY9U,IACjB5+C,KAAKm0D,eAAezgD,KAAKkrC,IACzB5+C,KAAK6zD,iBACN,CAEOA,kBAEJ7zD,KAAKo0D,YADHp0D,KAAKyzD,iBAAiBnvD,QAAUtE,KAAKq0D,kCACpBr0D,KAAKs0D,kCAELt0D,KAAKq0D,iCAE3B,kDAzGUnB,IAAcjvD,mDAAdivD,GAAc3+C,8yCDb3BtQ,4BAA4H,oBAGxHA,wCAAeuQ,iBAAmB,EAAlCvQ,CAAmC,sCAChBuQ,8BAAgC,GAKnDvQ,sCAuBAA,8BAIAA,+BAEAA,+BAYFA,QACAA,2BAYAA,8BACAA,oBAAWA,UAAWA,kBAhERA,4CAAyC,2CAKrDA,iDAAgC,4BAAhCA,CAAgC,2BAK7BA,gDAsBUA,4EAICA,4EAEqBA,oCAclCA,yCAWSA,+DACDA,qsBCnDAivD,EAAb,8KCqBO,IAAMqB,EAAb,MAAM,MAAOA,kDAAW,0BAAXA,gCAlBT7iD,KAKAu7C,gBAA4B,CAAEC,oBAAoB,IAClDsH,KACAC,KACAnsC,KACAosC,IACAC,KACAtsC,KACAusC,IACAzH,KACA0H,QAISN,CAAb,uOCZItwD,8BAAqD,iBAChBA,yDAASA,kCAAyB,GAAkBA,SAAkBA,QACzGA,uBAAkCA,yDAASA,iCAAwB,GAAkBA,SAAiBA,kCADfA,+BACFA,6ECdpF,IAAM6wD,EAAb,MAAM,MAAOA,EAaX/0D,YAA2BuT,wBAZVtT,iBAAc,IAAIuT,MAEnBvT,kCAA8B,EAC9BA,wCAAoC,EACnCA,gBAAa,IAAIuT,MACjBvT,kBAAe,IAAIuT,MAEpBvT,+BAA2B,CAKe,CAEnDk4C,oBACLl4C,KAAKyT,WAAWC,MACjB,CAEMC,cACL3T,KAAK4T,UACN,CAEMC,yBACL7T,KAAKyT,WAAWC,OAChB1T,KAAK8T,YAAYJ,MAClB,CAEMK,0BACL/T,KAAKyT,WAAWC,OAChB1T,KAAKgU,aAAaN,MACnB,CAEME,WACD5T,KAAK+0D,0BAA4B/0D,KAAKiU,6BACxCjU,KAAKsT,cAAcY,yBAAyB,KACtClU,KAAKmU,kCACPnU,KAAKoU,gBAAgBC,QAErBrU,KAAKsU,eAAeD,OAApB,EAIP,+CA3CUygD,GAAuB7wD,qCAAvB6wD,EAAuBvgD,soCDVpCtQ,iBAAqF,UAArFA,CAAqF,WAEvDA,SAAWA,QACrCA,iBAAwE,cAEpEA,gCAASuQ,qBAAmB,GAM5BvQ,oBAAUA,iBAAKA,cAKrBA,iBAA4B,yBAA5BA,CAA4B,YAGtBA,UACFA,UAEFA,uCAIFA,iBAxB4BA,wBAItBA,iDAgBiBA,8MCZZ6wD,CAAb,+ICLI7wD,yDACAA,oBAEEA,yDAASA,gCAAuB,GAKhCA,SACFA,gCADEA,8EAEFA,yDAEAA,oBAEEA,yDAASA,gCAAuB,GAKhCA,SACFA,gCADEA,8EAGFA,yDACAA,oBAEEA,yDAASA,gCAAuB,GAKhCA,SACFA,gCADEA,8EAGFA,yDACAA,oBAEEA,yDAASA,gCAAuB,GAKhCA,SACFA,gCADEA,8EAGFA,yDACAA,oBAEEA,yDAASA,gCAAuB,GAKhCA,SACFA,gCADEA,kFAKAA,eAA4C,UACZA,SAAqBA,iCAAhDA,4CAA2BA,mEAEhCA,eAA4C,UACZA,SAAqBA,iCAAhDA,4CAA2BA,mEANlCA,iBAAyC,SAClCA,SAAeA,QACpBA,uBAGAA,uBAGFA,8BAPOA,4BACCA,wDAGAA,yDCvDL,IAAM+wD,EAAb,MAAM,MAAOA,EAeXj1D,YACS2U,EACkBgrC,GADlB1/C,iBAfQA,yBAAsB,IAAIuT,MAC1BvT,yBAAsB,IAAIuT,MAC1BvT,yBAAsB,IAAIuT,MAC1BvT,yBAAsB,IAAIuT,MAC1BvT,yBAAsB,IAAIuT,MAC1BvT,yBAAsB,IAAIuT,MAE1BvT,gBAAa,IAAIuT,MAW5BmsC,IACF1/C,KAAK0/C,iBAAmBA,GAE1B1/C,KAAKyT,WAAWjO,UAAU,KACxBkP,EAAUS,OAAV,EAEH,CAEM8/C,wBACLj1D,KAAKyT,WAAWC,OAChB1T,KAAKk1D,oBAAoBxhD,MAC1B,CAEMyhD,wBACLn1D,KAAKyT,WAAWC,OAChB1T,KAAKo1D,oBAAoB1hD,MAC1B,CAEM2hD,wBACLr1D,KAAKyT,WAAWC,OAChB1T,KAAKs1D,oBAAoB5hD,MAC1B,CAEM6hD,wBACLv1D,KAAKyT,WAAWC,OAChB1T,KAAKw1D,oBAAoB9hD,MAC1B,CAEM+hD,wBACLz1D,KAAKyT,WAAWC,OAChB1T,KAAK01D,oBAAoBhiD,MAC1B,CAEMiiD,wBACL31D,KAAKyT,WAAWC,OAChB1T,KAAK41D,oBAAoBliD,MAC1B,CAEMwkC,oBACLl4C,KAAKyT,WAAWC,MACjB,+CA3DUshD,GAAyB/wD,kBAiB1ByR,MAAe,0BAjBds/C,EAAyBzgD,8mCDVtCtQ,iCAAqBA,qCAAcuQ,qBAAmB,GACpDvQ,iBAA8G,cACpGA,gCAASuQ,yBAAuB,GACtCvQ,SACFA,QACAA,uBACAA,0BASAA,uBAEAA,0BAUAA,uBACAA,0BAUAA,wBACAA,2BAUAA,wBACAA,2BAUAA,wBASFA,iBArEsDA,wCAGlDA,wDAEIA,kEAEHA,uDAQGA,kEAGHA,uDASGA,kEAEHA,uDASGA,kEAEHA,uDASGA,kEAEHA,uDASGA,8jBClDG+wD,CAAb,oDCVM,MAAOa,GCEP,MAAOC,EACQ17C,eACjB,MAAMslC,EAAmB,IAAImW,EAC7BnW,SAAiBrG,MAAQ,kBAClBqG,CACR,EALqC,0GCmBjC,IAAMqW,EAAb,MAAM,MAAOA,kDAAe,0BAAfA,gCAXTrkD,KAKAu7C,gBAA4B,CAAEC,oBAAoB,IAClD5kC,KACAF,QAIS2tC,CAAb,oDCnBM,MAAO5qB,GAAwB,+CCA/B,MAAOid,GAAkC,gDCAzC,MAAO4N,EAQXj2D,YAAmBk2D,EAA+BC,GAN3Cl2D,2BAAuB,EACvBA,2BAAuB,EAEvBA,yBAAqB,EACrBA,yBAAqB,EAG1BA,KAAKi2D,qBAAuBA,EAC5Bj2D,KAAKk2D,mBAAqBA,CAC3B,EAX+B,6DCM5B,MAAOpkB,EACQ13B,aAAC4qC,EAA+B,MACjD,MAAMmR,EAAW,IAAIC,IACrB,OAAIpR,IACFmR,EAASE,UAAYrR,GAEhBmR,CACR,CAE6C/7C,wCAACs3B,GAC7C,MAAM4kB,EAA0Bt2D,KAAKu2D,0BAA0B7kB,GAE/D,OADiBI,EAAoB6F,MAAM2e,EAE5C,CAE0Cl8C,qCAACo8C,GAC1C,MAAML,EAAWrkB,EAAoB6F,QACrCwe,SAASE,UAAYr2D,KAAKy2D,UAAUD,EAA0BzkB,kBAAmBykB,EAA0BxkB,qBACpGmkB,CACR,CAEiD/7C,4CAACs8C,GACjD,MAAMP,EAAWrkB,EAAoB6F,QACrCwe,SAASE,UAAYr2D,KAAKy2D,UAAUC,EAA2B3kB,kBAAmB2kB,EAA2B1kB,qBACtGmkB,CACR,CAEyC/7C,oCAACu8C,GACzC,MAAMR,EAAWrkB,EAAoB6F,QACrCwe,SAASE,UAAYr2D,KAAKy2D,UAAUE,EAAyB5kB,kBAAmB4kB,EAAyB3kB,qBAClGmkB,CACR,CAEmC/7C,8BAACw8C,GACnC,MAAMT,EAAWrkB,EAAoB6F,QACrCwe,SAASE,UAAYr2D,KAAKy2D,UAAUG,EAAmB7kB,kBAAmB6kB,EAAmB5kB,qBACtFmkB,CACR,CAEsC/7C,iCAACy8C,GACtC,MAAMV,EAAWrkB,EAAoB6F,QACrCwe,SAASE,UAAYr2D,KAAKy2D,UAAUI,EAAsB9kB,kBAAmB8kB,EAAsB7kB,qBAC5FmkB,CACR,CAEsC/7C,iCAACs3B,GACtC,MAAMsT,EAAuBtT,GAAsB3wB,KAAMriB,GAAMA,EAAEg7C,aACjE,OAAIsL,EACKlT,EAAoB2kB,UAAUzR,EAAqBjT,kBAAmBiT,EAAqBhT,qBAE7F,IACR,CAEsB53B,iBAAC08C,EAAcC,GAIpC,OAHKD,GAAiB,IAATA,IAGRC,GAAqB,IAAXA,EACN,KAEF,GAAG/2D,KAAKg3D,SAASF,EAAK16C,WAAY,IAAK,MAAMpc,KAAKg3D,SAASD,EAAO36C,WAAY,IAAK,IAC3F,CAEmBhC,cAACw3B,GACnB,MAAMqlB,EAAwBrlB,EAAcjqC,MAAM,KAClD,GAAqC,IAAjCsvD,EAAsB9nD,OAAc,CACtC,MAAM+nD,EAAUD,EAAsB,GAAG50C,OACnC80C,EAASn3D,KAAKg3D,SAASC,EAAsB,GAAG50C,OAAQ,IAAK,GACnE,OAAO4kB,OAAO,GAAGiwB,IAAUC,IAC5B,CACD,OAAO,IACR,CAEwB/8C,mBAAC+7C,GACxB,IAAIpkB,EAAoB,KACpBC,EAAsB,KAC1B,GAAImkB,EAASE,UAAW,CACtB,MAAOe,EAAOC,GAAQlB,EAASE,UAAU1uD,MAAM,KAC/C,OACEoqC,EADEqlB,EACkBnwB,OAAOmwB,GAEP,KAGpBplB,EADEqlB,EACoBpwB,OAAOowB,GAEP,KAEjB,CACLtlB,kBAAmBA,EACnBC,oBAAqBA,EAExB,CACC,MAAO,CACLD,kBAAmB,KACnBC,oBAAqB,KAG1B,CAEsB53B,gBAAC8jB,EAAco5B,EAAiBC,GACrD,OAAQC,OAAOF,GAASG,OAAOF,GAAQr5B,GAAMhwB,QAAc,EAAPqpD,EAAWA,EAChE,EAtG6B,+CCR1B,MAAOnB,GAAa,gDCApB,MAAOjqB,EAGXpsC,YAAmBwqC,GACjBvqC,KAAKuqC,WAAaA,CACnB,EALyB,wMCWrB,IAAMmtB,EAAb,MAAM,MAAOA,EANb33D,cAQkBC,sBAAkB,EAEjBA,4BAAyB,IAAIuT,MAGvCvT,4BAAwB,CAyChC,CAvCQ49B,QACL,YAAK+5B,uBAAwB,EAC7B33D,KAAKgV,UAAUC,SAASs1B,WAAWlhB,SAAS,IAC5CrpB,KAAK43D,uBAAuBlkD,KAAK,KAG1B,CACR,CAEMC,cACA3T,KAAKyZ,aACRzZ,KAAKyZ,WAAa,IAAI0yB,IAAgB,KAGxCnsC,KAAK8U,cACL9U,KAAK23D,wBAAwB33D,KAAKyZ,WAAW8wB,UAC9C,CAEM32B,WACL5T,KAAK63D,kBAAkBC,eAAezjD,OACvC,CAEM0jD,oBACL,YAAKH,uBAAuBlkD,KAAK1T,KAAKgV,UAAUiB,cAAcs0B,YAC9DvqC,KAAK23D,uBAAwB,GAGtB,CACR,CAEMK,2BACLh4D,KAAK23D,uBAAwB,CAC9B,CAEO7iD,cACN9U,KAAKgV,UAAY,IAAIO,KAA+B,CAClDg1B,WAAY,IAAI90B,KAAoBzV,KAAKyZ,WAAW8wB,aAEvD,+CA/CUmtB,EAAmB,0BAAnBA,EAAmBnjD,w1BCXhCtQ,iBAA8C,YACdA,mCAAYuQ,qBAAmB,GAC3DvQ,4BAAqF,eAGjFA,kCAAWuQ,4BAA0B,GAFvCvQ,QAWAA,oBAAQA,gCAASuQ,qBAAmB,GAClCvQ,oBAAUA,kBAAMA,UAElBA,oBACEA,gCAASuQ,SAAO,GAQhBvQ,oBAAUA,kBAAKA,uBAzBfA,wCACgCA,6DAIhCA,qEAQoCA,uCAKpCA,iSDRKyzD,CAAb,6IEiBO,IAAMO,EAAb,MAAM,MAAOA,kDAAgB,0BAAhBA,gCAfTvmD,KAKAu7C,gBAA4B,CAAEC,oBAAoB,IAClDsH,KACAlsC,KACAD,KACAqsC,IACAvH,KACA0H,QAISoD,CAAb,yLCIQh0D,uBAAwEA,uBAAWA,+BAInFA,uBAAyEA,uBAAWA,+BAOpFA,uBAAwEA,uBAAWA,kCAFrFA,yBAAsD,yBACTA,SAAoBA,QAC/DA,4BACFA,4CAFoBA,gCAAyBA,wBAChCA,0HCjCZ,IAAMi0D,EAAb,MAAM,MAAOA,EANbn4D,cAOmBC,uBAAoB,IAAIuT,MACxBvT,0BAAuB,IAAIuT,MAC5BvT,mBAAiC,GAChCA,yBAAsB,IAAIuT,MAEpCvT,2BAAwB,IAAIyV,KAAoB,IAChDzV,8BAA2B,IAAIyV,KAAoB,GAuC3D,CAnCY8Z,eAAWya,GACpBhqC,KAAKm4D,sBAAsB9uC,SAAS2gB,EACrC,CAEUxa,kBAAc0a,GACvBlqC,KAAKo4D,yBAAyB/uC,SAAS6gB,EACxC,CAEU+B,4BACT,OAAOjsC,KAAKq4D,sBACb,CAEUpsB,0BAAsBqsB,GAC/Bt4D,KAAKq4D,uBAAyBC,CAC/B,CAEUtsB,mBACT,OAAOhsC,KAAKu4D,aACb,CAEUvsB,iBAAawsB,GACtBx4D,KAAKu4D,cAAgBC,CACtB,CAEMvvB,6BACLjpC,KAAKy4D,oBAAoB/kD,MAC1B,CAEMglD,mBACL14D,KAAK24D,kBAAkBjlD,KAAK1T,KAAKm4D,sBAAsB7zD,MACxD,CAEMs0D,sBACL54D,KAAK64D,qBAAqBnlD,KAAK1T,KAAKo4D,yBAAyB9zD,MAC9D,+CA7CU4zD,EAAiB,0BAAjBA,EAAiB3jD,w1BDV9BtQ,oBAYC,cACWA,oBAAQA,UAEpBA,2BAA8B,UAA9BA,CAA8B,cAGxBA,gCAASuQ,8BAA4B,GAOrCvQ,sBAAiCA,gBAAIA,YAGzCA,oBAAU,wBACSA,iCAAUuQ,uBAAqB,GAC9CvQ,0BAAe,yBAC+CA,0BAAaA,QACzEA,6BACFA,QACAA,0BAAe,yBACiDA,+BAAeA,QAC7EA,6BACFA,UAEFA,wBACAA,8BAAiBA,iCAAUuQ,oBAAkB,GAC3CvQ,kCAIFA,mCA3CFA,6BAA8B,mDAD9BA,2CAkBIA,6DAUgDA,yDAGnCA,uDAIAA,wDAIgCA,sDACTA,+VC/B7Bi0D,CAAb,+NCNMj0D,4CAA+EA,wDAC/EA,uBAAkEA,SAAeA,8BAAfA,sDAUhEA,6CAAkEA,2DAClEA,oBAAkDA,SAAkBA,+BAAlBA,yEAVpDA,qBAEEA,0DAASA,oCAA0B,GAOnCA,6BACAA,6BACFA,gCALEA,gCAHAA,gCAMWA,wDACAA,yHAUXA,uBACGA,SAAwBA,+BADYA,qDACpCA,oHATLA,kBAQEA,6BAGFA,8BATEA,8CAAsC,6CAM3BA,wEAKXA,gDAEEA,2CAAmC,sBAAnCA,CAAmC,sBAAnCA,CAAmC,kDAKrCA,kBAA4CA,SAAgBA,8BAAhBA,oDAexCA,8CACAA,uBAAmEA,gBAAIA,iCACvEA,uBAAqEA,0BAAcA,gCACnFA,kDAEAA,mBAAgCA,SAAcA,8BAAdA,6DAElCA,kBAA4CA,SAASA,8BAATA,+CAe5CA,oBAA2DA,oCAAwBA,iCACnFA,uBAAwEA,0BAAcA,mCAoB5FA,qBAMC,UACOA,SAAsBA,gCAL5BA,sCAKMA,0DAeZA,8JACAA,kBAA8C,eAM1CA,0DAASA,mCAAyB,GAIlCA,oBAAUA,eAAGA,oCARbA,mDAAqE,mCAArEA,CAAqE,+BACrEA,6DAUJA,0oBCtHO,IAAM60D,EAAb,MAAM,MAAOA,EAoEX/4D,YACUqX,EACA2hD,GACA/zD,GACAg0D,IAHAh5D,eACAA,4BACAA,gBACAA,8BAhEMA,+BAA2B,EAG3BA,eAAY,oBAEZA,kBAAe,aAEfA,yBAAqB,EAUrBA,4BAAwB,EAGxBA,+BAA2B,EAS3BA,cAAsE,SAEtEA,cAA6B,OAM7BA,+BAA2B,EAE3BA,gCAA4B,EAI5BA,4BAAwB,EAExBA,2BAAuB,EAEvBA,4BAAwB,EAExBA,2BAAuB,CAgBnC,CAEGi5D,0BACAj5D,KAAKsmD,4BAGRtmD,KAAKsmD,8BAFLtmD,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAKk5D,eAI/B,CAEMC,2BACDn5D,KAAKo5D,0BAA4Bp5D,KAAKq5D,gBACxCr5D,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAKq5D,iBAAkB,CAAE/gC,WAAYt4B,KAAKs5D,qBAG9Dt5D,KAAKu5D,6BAGRv5D,KAAKu5D,+BAFLv5D,KAAKg5D,sBAAsBz5B,gBAAgBv/B,KAAKq5D,gBAAiBr5D,KAAKs5D,mBAIzE,CAGME,gBAEHx5D,KAAKq5D,kBACJr5D,KAAK+4D,oBAAoBrgD,cAC1B1Y,KAAKoX,QAAQqiD,aACuB,IAApCz5D,KAAKoX,QAAQqiD,YAAYtqD,QAEzBnP,KAAKm5D,0BAER,CAEMjxB,WACLloC,KAAK05D,MAAQ15D,KAAKk5D,cAAgB,kBAAoB,oBACvD,+CA7GUJ,GAAe70D,wEAAf60D,EAAevkD,kHAAfC,oBAAqB,suHDdlCvQ,iBAA0E,UAA1EA,CAA0E,WAIpEA,4BACAA,4BACAA,0BAYAA,uBAYAA,iBACEA,gCAOAA,uBACAA,mBAYC,aAEGA,8BACAA,8BACAA,+BACAA,+BACAA,iBAAMA,UAAeA,QACrBA,2BACFA,QACAA,0BACFA,QACAA,mBAaEA,+BACAA,+BACAA,oBAMGA,UAAkBA,UAGvBA,UACFA,UAIFA,YAGAA,YAEAA,4BAUFA,UAGFA,mBAA4F,aAExFA,YACAA,YACFA,QACAA,YACFA,QAGAA,yBACAA,0BAaAA,iCAhIiBA,8EACAA,6EAERA,0CAYAA,+CAW6DA,qDAE3DA,mCAMGA,qCAEJA,uKAaaA,gDACAA,+CACAA,gDACAA,+CACLA,6BACCA,+BAEHA,8BAGNA,8KAYWA,oEACAA,mDAETA,iJAKCA,gCAcNA,0CAqBDA,yCACAA,wCAaAA,uzFC5HQpF,KAAc86D,oBAMfb,CAAb,uICZI70D,2CAAoEA,sDACpEA,sBAAqEA,SAAcA,8BAAdA,iDAIrEA,uCACAA,gBAAuBA,SAAcA,8BAAdA,iDACvBA,sDACAA,eAAqCA,0DAASA,8BAAoB,GAAEA,SAAcA,gCAAdA,4BCDjE,IAAM21D,EAAb,MAAM,MAAOA,EASX75D,YAA2BiF,kBARXhF,cAAW,mBAEVA,sBAAmB,IAAIuT,MAExBvT,cAAW,4DAImB,CAEvC65D,qBACL,GAAI75D,KAAKqf,KAAM,CACb,IAAIy6C,EACA95D,KAAK83B,cACPgiC,EAAmB,CACjBhiC,YAAa93B,KAAK83B,cAItB93B,KAAKgF,QAAQmzB,SAAS,CAACn4B,KAAKqf,MAAOy6C,EACpC,CACD95D,KAAK+5D,iBAAiBrmD,MACvB,+CAvBUkmD,GAAkB31D,sCAAlB21D,EAAkBrlD,8kBDT/BtQ,iBAA8E,WAE1EA,4BACAA,4BACFA,QACAA,iBAA6B,UACrBA,SAAcA,QACpBA,sBACAA,wBACAA,sBACAA,sBACFA,iBATaA,oDACAA,qDAGLA,2BACDA,kCACEA,kCACFA,kCACDA,8uBCDK21D,CAAb,6BCRE31D,kDAEEA,+CAAuC,oCAAvCA,CAAuC,6CAAvCA,CAAuC,2CAAvCA,CAAuC,sEAQzCA,kDAEEA,+CAAuC,oCAAvCA,CAAuC,6CAAvCA,CAAuC,2CAAvCA,CAAuC,sEAQzCA,kDAEEA,+CAAuC,oCAAvCA,CAAuC,6CAAvCA,CAAuC,2CAAvCA,CAAuC,sFAQzCA,4BAEEA,sEAAoBA,6CAAmC,GAQxDA,iCAPCA,wCAAgC,6BAAhCA,CAAgC,sCAAhCA,CAAgC,oCAAhCA,CAAgC,qCAAhCA,CAAgC,kEASlCA,iDAEAA,+DA7CFA,iBACEA,kCAUAA,kCAUAA,kCAUAA,kCAYAA,kCAEAA,8BACFA,8BA9CyCA,gCAEpCA,4CAUAA,4CAUAA,4CAUAA,2CAWcA,2CAEJA,6FCrCR,IAAM+1D,EAAb,MAAM,MAAOA,EANbj6D,cAOkBC,0BAAsB,EACtBA,yBAAsB,mBAErBA,qCAAkC,IAAIuT,MAOvCvT,gCAA6B,yBAO7BA,gCAA6B,yBAO7BA,gCAA6B,yBAStCA,iBAAsB,IAkD9B,CAzCQi6D,uBACL,OAAIj6D,KAAKiiD,YAAcjiD,KAAKiiD,WAAa,EAChC,QAE0B,IAA7BjiD,KAAKk6D,qBAALl6D,MAAqCA,KAAK0hD,cACrC,YAGL1hD,WAAKm6D,0BACHn6D,KAAKm6D,yBAA2B,EAC3B,aAIPn6D,WAAKo6D,0BACHp6D,KAAKo6D,yBAA2B,EAC3B,aAIPp6D,WAAKq6D,0BACHr6D,KAAKq6D,yBAA2B,EAC3B,aAINr6D,KAAK0hD,cAIH,YAHE,WAKZ,CAEM4Y,oCACLt6D,KAAKu6D,gCAAgC7mD,MACtC,CAEMC,cACL3T,KAAKw6D,YAAcx6D,KAAKi6D,sBACzB,+CAnFUD,EAAmB,0BAAnBA,EAAmBzlD,gqEDRhCtQ,6BAAsBA,qICQT+1D,CAAb,yFCEO,IAAMS,EAAb,MAAM,MAAOA,kDAAgB,0BAAhBA,gCAHD/oD,KAAcqkD,OAGb0E,CAAb,oDCVO,IAAKt3C,EAIX,aAJWA,QAAY,KACtBA,+BACAA,yBACAA,qBAHUA,EAAZ,IAAYA,GAIX,yJCIGlf,sBAA0EA,iBAAKA,8BAC/EA,4CACAA,uBAA8EA,mBAAOA,kCAGnFA,gBAAgCA,SAAuBA,8BAAvBA,6EAChCA,gBAA0BA,yDAASA,wBAAe,GAA2DA,SAAqBA,gCAArBA,yICH5G,IAAMy2D,EAAb,MAAM,MAAOA,EAOX36D,YAA2BiF,kBANVhF,sBAAmB,IAAIuT,MAEjCvT,mBAAgBmjB,UAChBnjB,yBAAsBmjB,gBACtBnjB,qBAAkBmjB,WAEqB,CAEvCK,gBACDxjB,KAAKwX,MAAQxX,KAAKwX,KAAK6H,OACzBrf,KAAKgF,QAAQ+J,cAAc/O,KAAKwX,KAAK6H,MACrCrf,KAAK+5D,iBAAiBrmD,OAEzB,+CAdUgnD,GAAaz2D,sCAAby2D,EAAanmD,+nBDX1BtQ,iBAMC,WAEGA,4BACAA,4BACAA,4BACAA,iBAAoD,UAC5CA,SAAkBA,QACxBA,wBACAA,qBACFA,mBAdFA,0IAOaA,yDACAA,+DACAA,2DAEHA,+BACCA,2CACHA,o4BCHGy2D,CAAb,oDCTM,MAAO90C,GAAS,+FCOf,IAAM+0C,EAAb,MAAM,MAAOA,EAGX56D,YAA2BuT,uBAA+B,CAEnDsnD,SAASh/B,EAAYC,GAC1B,MAAMg/B,EAAUj1D,OAAOk1D,IAAIC,gBAAgBn/B,GAC3C57B,KAAKg7D,SAASlD,cAAcmD,KAAOJ,EAGnC76D,KAAKg7D,SAASlD,cAAc8C,SAAW/+B,EACvC77B,KAAKg7D,SAASlD,cAAcoD,QAC5Bl7D,KAAKsT,cAAcY,yBAAyB,KAE1CtO,OAAOk1D,IAAIK,gBAAgBN,EAA3B,EACC,KACJ,CAEMljD,KAAKikB,EAAYC,GAEtB,MAAMu/B,EAAO,IAAIC,KAAK,CAACz/B,GAAOC,EAAU,CAAE15B,KAAM,oBAC1Cm5D,EAAU11D,OAAOk1D,IAAIC,gBAAgBK,GAC3Cx1D,OAAO+R,KAAK2jD,EAAS,UACrBt7D,KAAKsT,cAAcY,yBAAyB,KAE1CtO,OAAOk1D,IAAIK,gBAAgBG,EAA3B,EACC,KACJ,+CA3BUX,GAAkB12D,qCAAlB02D,EAAkBpmD,sOCT/BtQ,sCDSa02D,CAAb,8EEAO,IAAMY,EAAb,MAAM,MAAOA,kDAAe,0BAAfA,gCAHD7pD,QAGC6pD,CAAb,+ICOM,MAAOvyB,EACQ5uB,aAAC8sB,EAAkCwE,GACpD,MAAMtD,EAAe,IAAIozB,IACzBpzB,SAAapB,iBAAmBE,EAChCkB,EAAajB,qBAAuBuE,EACpCtD,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAW,KAC/CtzB,EAAaqzB,uBAAuBjV,OAAS,KAC7Cpe,EAAaliB,iBAAmBy1C,YACzBvzB,CACR,CAE6BhuB,wBAC5BqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeY,EAAoC2O,MACvDzQ,EACAnC,2BAEFqD,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,WAE5DqvB,EAAetE,uBACjBiB,EAAajB,qBAAuBsE,EAAetE,qBAAqB/qB,aAGtEqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GAEnEvqB,EAAeiC,iBACjBtF,EAAajB,qBAAuBpC,2BACpCqD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeiC,iBAC3GtF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAekC,gBAC5D,IAEOlC,EAAe6B,gBACxBlF,EAAajB,qBAAuBpC,0BACpCqD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe6B,gBAC3GlF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAe8B,eAC5D,IAEO9B,EAAe+B,kBACxBpF,EAAajB,qBAAuBpC,4BACpCqD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAGFrF,EAAajB,qBAAuBpC,2BAIjCqD,CACR,CAEmChuB,8BAClCqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeY,EAAoC2O,MACvDzQ,EACAuL,6BAEFrK,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,WAE5DqvB,EAAetE,uBACjBiB,EAAajB,qBAAuBsE,EAAetE,qBAAqB/qB,aAGtEqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACnEvqB,EAAeiC,iBACjBtF,EAAajB,qBAAuBsL,2BACpCrK,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeiC,iBAC3GtF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAekC,gBAC5D,IAEOlC,EAAe+B,kBACxBpF,EAAajB,qBAAuBsL,4BACpCrK,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAGFrF,EAAajB,qBAAuBsL,6BAIjCrK,CACR,CAEkChuB,6BACjCqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeY,EAAoC2O,MAAMzQ,EAA0B,KACzFkB,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,YAE5DqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAIGrF,CACR,CAE8BhuB,yBAC7BqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeY,EAAoC2O,MACvDzQ,EACAlC,4BAEFoD,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,WAE5DqvB,EAAetE,uBACjBiB,EAAajB,qBAAuBsE,EAAetE,qBAAqB/qB,aAGtEqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACnEvqB,EAAeiC,iBACjBtF,EAAajB,qBAAuBnC,2BACpCoD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeiC,iBAC3GtF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAekC,gBAC5D,IAEOlC,EAAe+B,kBACxBpF,EAAajB,qBAAuBnC,4BACpCoD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAGFrF,EAAajB,qBAAuBnC,4BAIjCoD,CACR,CAE+BhuB,0BAC9BqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeY,EAAoC2O,MACvDzQ,EACAlC,4BAEFoD,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,YAE5DqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DuT,EAAetE,uBACjBiB,EAAajB,qBAAuBsE,EAAetE,qBAAqB/qB,YAGtE8J,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACnEvqB,EAAeiC,iBACjBtF,EAAajB,qBAAuBnC,2BACpCoD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeiC,iBAC3GtF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAekC,gBAC5D,IAEOlC,EAAe+B,kBACxBpF,EAAajB,qBAAuBnC,4BACpCoD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAGFrF,EAAajB,qBAAuBnC,4BAIjCoD,CACR,CAE4BhuB,uBAC3BqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeY,EAAoC2O,MAAMzQ,EAA0B,KACzFkB,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,YAE5DqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeuK,eAC3G5N,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAewK,cAC5D,IAIG7N,CACR,CAE2BhuB,sBAC1BqxB,EACArD,EACAwzB,GAEA,IAAIC,EAuBJ,GArBEA,EADED,EAC4BxzB,EAAajB,qBAClCsE,EAAetE,qBACMsE,EAAetE,qBAAqB/qB,WACzDqvB,EAAe+B,iBACMzI,4BACrB0G,EAAeiC,gBACM3I,2BAEAA,0BAGhC0G,EAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe6B,eAAiB,KAChC7B,EAAe+B,iBAAmB,KAClC/B,EAAeiC,gBAAkB,KACjCjC,EAAe8B,aAAe,KAC9B9B,EAAegC,eAAiB,KAChChC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,+BACpC,OAAQgxB,QACD92B,4BACH0G,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAC9BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACGzhB,2BACH0G,EAAeiC,gBAAkBhM,gBAA4B0G,EAAaqzB,uBAAuBC,UAEjGjwB,EAAekC,cAAgBjM,gBAC7BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACGzhB,0BACH0G,EAAe6B,eAAiB5L,gBAA4B0G,EAAaqzB,uBAAuBC,UAEhGjwB,EAAe8B,aAAe7L,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,SAOlI,OAHA/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBAE9C60B,QACD92B,4BACH0G,EAAetE,qBAAuBpC,iBACtC,WACGA,2BACH0G,EAAetE,qBAAuBpC,gBACtC,WACGA,0BACH0G,EAAetE,qBAAuBpC,eAK5C,OAAO0G,CACR,CAEiCrxB,4BAACqxB,EAAoCrD,GACrEqD,SAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAeiC,gBAAkB,KACjCjC,EAAegC,eAAiB,KAChChC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,gCACpCY,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAEhI/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBACtDyE,EAAetE,qBAAuBsL,kBAGjChH,CACR,CAEgCrxB,2BAACqxB,EAAmCrD,GACnEqD,SAAezE,iBAAmB,KAClCyE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAegC,eAAiB,KAE5BrF,EAAapB,mBAAqB6D,gCACpCY,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAEhI/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,mBAGjDyE,CACR,CAEyCrxB,oCACxCqxB,EACArD,EACAwzB,GAEA,IAAIC,EAmBJ,GAjBEA,EADED,EAC4BxzB,EAAajB,qBAClCsE,EAAetE,qBACMsE,EAAetE,qBAAqB/qB,WACzDqvB,EAAeiC,gBACM+E,2BAEAA,4BAGhChH,EAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAeiC,gBAAkB,KACjCjC,EAAegC,eAAiB,KAChChC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,+BACpC,OAAQgxB,QACDppB,4BACHhH,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAC9BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACG/T,2BACHhH,EAAeiC,gBAAkBhM,gBAA4B0G,EAAaqzB,uBAAuBC,UAEjGjwB,EAAekC,cAAgBjM,gBAC7BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,SAQ1E,OAHA/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBAE9C60B,QACDppB,4BACHhH,EAAetE,qBAAuBsL,iBACtC,WACGA,2BACHhH,EAAetE,qBAAuBsL,gBAK5C,OAAOhH,CACR,CAE4BrxB,uBAC3BqxB,EACArD,EACAwzB,GAEA,IAAIC,EAmBJ,GAjBEA,EADED,EAC4BxzB,EAAajB,qBAClCsE,EAAetE,qBACMsE,EAAetE,qBAAqB/qB,WACzDqvB,EAAe+B,iBACMxI,4BAEAA,2BAGhCyG,EAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAeiC,gBAAkB,KACjCjC,EAAegC,eAAiB,KAChChC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,+BACpC,OAAQgxB,QACD72B,4BACHyG,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAC9BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACGxhB,2BACHyG,EAAeiC,gBAAkBhM,gBAA4B0G,EAAaqzB,uBAAuBC,UAEjGjwB,EAAekC,cAAgBjM,gBAC7BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,SAQ1E,OAHA/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBAE9C60B,QACD72B,4BACHyG,EAAetE,qBAAuBnC,iBACtC,WACGA,2BACHyG,EAAetE,qBAAuBnC,gBAK5C,OAAOyG,CACR,CAE6BrxB,wBAC5BqxB,EACArD,EACAwzB,GAEA,IAAIC,EAmBJ,GAjBEA,EADED,EAC4BxzB,EAAajB,qBAClCsE,EAAetE,qBACMsE,EAAetE,qBAAqB/qB,WACzDqvB,EAAe+B,iBACMxI,4BAEAA,2BAGhCyG,EAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAegC,eAAiB,KAChChC,EAAeiC,gBAAkB,KACjCjC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,+BACpC,OAAQgxB,QACD72B,4BACHyG,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAC9BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACGxhB,2BACHyG,EAAeiC,gBAAkBhM,gBAA4B0G,EAAaqzB,uBAAuBC,UAEjGjwB,EAAekC,cAAgBjM,gBAC7BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,SAQ1E,OAHA/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBAE9C60B,QACD72B,4BACHyG,EAAetE,qBAAuBnC,iBACtC,WACGA,2BACHyG,EAAetE,qBAAuBnC,gBAK5C,OAAOyG,CACR,CAE0BrxB,qBAACqxB,EAA6BrD,GACvDqD,SAAezE,iBAAmB,KAClCyE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAeuK,cAAgB,KAC/BvK,EAAewK,YAAc,KAC7BxK,EAAegC,eAAiB,KAE5BrF,EAAapB,mBAAqB6D,gCACpCY,EAAeuK,cAAgBtU,gBAA4B0G,EAAaqzB,uBAAuBC,UAE/FjwB,EAAewK,YAAcvU,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAE7H/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,mBAGjDyE,CACR,EAtmB6C,yECF1C,MAAOkwB,EACevhD,oBACxB0hD,GAYA,MAAM51C,EAAmBy1C,EAA4BhkB,QACrDzxB,SAAiB61C,qBAAuBD,EAAwBC,qBAChE71C,EAAiBgS,iBAAmB4jC,EAAwBzlC,WAAWhwB,OAAO6xB,iBAC9EhS,EAAiBw1C,SAAWh6B,iCAA6Co6B,EAAwBE,sBACjG91C,EAAiBsgC,OAAS9kB,YACxBA,iCAA6Co6B,EAAwBG,qBACrE,GAEK/1C,CACR,CAEkB9L,eACjB,MAAM8L,EAAmB,IAAIg2C,IAC7Bh2C,SAAiBgS,iBAAmB,EAC7BhS,CACR,CAE0B9L,qBAAC8d,GAC1B,MAAMhS,EAAmBy1C,EAA4BhkB,QACrDzxB,SAAiBgS,iBAAmBA,EACpChS,EAAiB61C,qBAAuB,MACjC71C,CACR,CAEuC9L,kCAAC+hD,GACvC,MAAMj2C,EAAmBy1C,EAA4BhkB,QACrDzxB,SAAiB61C,qBAAuBI,EAAuBJ,qBAC/D71C,EAAiBw1C,SAAWh6B,iCAA6Cy6B,EAAuBH,sBAChG91C,EAAiBsgC,OAAS9kB,YACxBA,iCAA6Cy6B,EAAuBF,qBACpE,GAEK/1C,CACR,CAE0B9L,qBACzB0hD,GAaA,OADyB97D,KAAKy4C,aAAaqjB,EAE5C,EAhEqC,iKCSlC,MAAOnX,EACQvqC,aAAC8sB,EAAkCwE,GACpD,MAAMtD,EAAe,IAAIozB,IACzBpzB,SAAapB,iBAAmBE,EAChCkB,EAAajB,qBAAuBuE,EACpCtD,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAW,KAC/CtzB,EAAaqzB,uBAAuBjV,OAAS,KAC7Cpe,EAAaliB,iBAAmBy1C,YACzBvzB,CACR,CAE0BhuB,uBACzB,MAAMguB,EAAeuc,EAAsChN,MAAM,KAAM,MACvEvP,SAAapB,iBAAmB/B,0BACzBmD,CACR,CAE6BhuB,wBAC5BqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MACzDzQ,EACAnC,2BAEFqD,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,WAE5DqvB,EAAetE,uBACjBiB,EAAajB,qBAAuBsE,EAAetE,qBAAqB/qB,aAGtEqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GAEnEvqB,EAAeiC,iBACjBtF,EAAajB,qBAAuBpC,2BACpCqD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeiC,iBAC3GtF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAekC,gBAC5D,IAEOlC,EAAe6B,gBACxBlF,EAAajB,qBAAuBpC,0BACpCqD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe6B,gBAC3GlF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAe8B,eAC5D,IAEO9B,EAAe+B,kBACxBpF,EAAajB,qBAAuBpC,4BACpCqD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAGFrF,EAAajB,qBAAuBpC,2BAIjCqD,CACR,CAEmChuB,8BAClCqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MACzDzQ,EACAuL,6BAEFrK,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,WAE5DqvB,EAAetE,uBACjBiB,EAAajB,qBAAuBsE,EAAetE,qBAAqB/qB,aAGtEqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACnEvqB,EAAeiC,iBACjBtF,EAAajB,qBAAuBsL,2BACpCrK,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeiC,iBAC3GtF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAekC,gBAC5D,IAEOlC,EAAe+B,kBACxBpF,EAAajB,qBAAuBsL,4BACpCrK,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAGFrF,EAAajB,qBAAuBsL,6BAIjCrK,CACR,CAEgChuB,2BAC/B/T,EACA6f,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MAAMzQ,EAA0B,KAC3FkB,SAAaliB,iBAAmBA,EAE5B7f,EAAO2gC,kBAAgD,IAA5B3gC,EAAO2gC,kBACpCoB,EAAapB,iBAAmB3gC,EAAO2gC,kBAAkB5qB,WAErD/V,EAAO8gC,uBACTiB,EAAajB,qBAAuB9gC,EAAO8gC,qBAAqB/qB,aAG9D/V,EAAO6xB,kBAAgD,IAA5B7xB,EAAO6xB,oBACpCkQ,EAAaliB,iBAAiBgS,iBAAmB7xB,EAAO6xB,kBAGtDhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACnE3vD,EAAO+1D,gBACTh0B,EAAajB,qBAAuBk1B,iCACpCj0B,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6Cr7B,EAAO+1D,gBACnGh0B,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6Cr7B,EAAOi2D,eACpD,IAEOj2D,EAAOk2D,sBAChBn0B,EAAajB,qBAAuBk1B,gCACpCj0B,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6Cr7B,EAAOk2D,sBACnGn0B,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6Cr7B,EAAOm2D,qBACpD,IAGFp0B,EAAajB,qBAAuBk1B,kCAIjCj0B,CACR,CAEkChuB,6BACjCqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MAAMzQ,EAA0B,KAC3FkB,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,YAE5DqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAIGrF,CACR,CAE8BhuB,yBAC7BqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MACzDzQ,EACAlC,4BAEFoD,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,WAE5DqvB,EAAetE,uBACjBiB,EAAajB,qBAAuBsE,EAAetE,qBAAqB/qB,aAGtEqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACnEvqB,EAAeiC,iBACjBtF,EAAajB,qBAAuBnC,2BACpCoD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeiC,iBAC3GtF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAekC,gBAC5D,IAEOlC,EAAe+B,kBACxBpF,EAAajB,qBAAuBnC,4BACpCoD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAGFrF,EAAajB,qBAAuBnC,4BAIjCoD,CACR,CAE8BhuB,yBAC7B/T,EACA6f,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MAAMzQ,EAA0B,KAC3FkB,SAAaliB,iBAAmBA,EAE5B7f,EAAO2gC,kBAAgD,IAA5B3gC,EAAO2gC,kBACpCoB,EAAapB,iBAAmB3gC,EAAO2gC,iBAAiB5qB,YAEpD/V,EAAO6xB,kBAAgD,IAA5B7xB,EAAO6xB,oBACpCkQ,EAAaliB,iBAAiBgS,iBAAmB7xB,EAAO6xB,kBAGtDhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6Cr7B,EAAOo2D,UACnGr0B,EAAaqzB,uBAAuBjV,OAAS9kB,YAAwBA,iCAA6Cr7B,EAAOq2D,SAAS,IAG7Ht0B,CACR,CAE6ChuB,wCAC5C/T,EACA6f,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MAAMzQ,EAA0B,KAC3FkB,SAAaliB,iBAAmBA,EAE5B7f,EAAO2gC,kBAAgD,IAA5B3gC,EAAO2gC,kBACpCoB,EAAapB,iBAAmB3gC,EAAO2gC,iBAAiB5qB,YAEpD/V,EAAO6xB,kBAAgD,IAA5B7xB,EAAO6xB,oBACpCkQ,EAAaliB,iBAAiBgS,iBAAmB7xB,EAAO6xB,kBAGtDhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6Cr7B,EAAOs2D,gCACnGv0B,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6Cr7B,EAAOu2D,+BACpD,IAIGx0B,CACR,CAE8BhuB,yBAC7B/T,EACA6f,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MAAMzQ,EAA0B,KAC3FkB,SAAaliB,iBAAmBA,EAE5B7f,EAAO2gC,kBAAgD,IAA5B3gC,EAAO2gC,kBACpCoB,EAAapB,iBAAmB3gC,EAAO2gC,kBAAkB5qB,YAErD/V,EAAO6xB,kBAAgD,IAA5B7xB,EAAO6xB,oBACpCkQ,EAAaliB,iBAAiBgS,iBAAmB7xB,EAAO6xB,kBAGtDhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6Cr7B,EAAOw2D,iBACnGz0B,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6Cr7B,EAAOy2D,gBACpD,IAIG10B,CACR,CAE+BhuB,0BAC9BqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MACzDzQ,EACAlC,4BAEFoD,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,YAE5DqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DuT,EAAetE,uBACjBiB,EAAajB,qBAAuBsE,EAAetE,qBAAqB/qB,YAGtE8J,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACnEvqB,EAAeiC,iBACjBtF,EAAajB,qBAAuBnC,2BACpCoD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeiC,iBAC3GtF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAekC,gBAC5D,IAEOlC,EAAe+B,kBACxBpF,EAAajB,qBAAuBnC,4BACpCoD,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAGFrF,EAAajB,qBAAuBnC,4BAIjCoD,CACR,CAE4BhuB,uBAC3BqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MAAMzQ,EAA0B,KAC3FkB,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,YAE5DqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAeuK,eAC3G5N,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAewK,cAC5D,IAIG7N,CACR,CAE+BhuB,0BAC9BqxB,EACAvlB,EACAghB,GAEA,MAAMkB,EAAeuc,EAAsChN,MAAMzQ,EAA0B,KAC3FkB,SAAaliB,iBAAmBA,EAE5BulB,EAAezE,kBAAwD,IAApCyE,EAAezE,kBACpDoB,EAAapB,iBAAmByE,EAAezE,iBAAiB5qB,YAE5DqvB,EAAevT,kBAAwD,IAApCuT,EAAevT,oBACpDkQ,EAAaliB,iBAAiBgS,iBAAmBuT,EAAevT,kBAG9DhS,GAAkBw1C,WACpBtzB,EAAaqzB,uBAAuBC,SAAWx1C,EAAiBw1C,UAG9Dx1C,GAAkBsgC,SACpBpe,EAAaqzB,uBAAuBjV,OAAStgC,EAAiBsgC,UAIhEpe,EAAapB,iBAAmB6D,+BAChCzC,EAAaqzB,uBAAyB,IAAIzF,KAAsB,GAAO,GACvE5tB,EAAaqzB,uBAAuBC,SAAWh6B,iCAA6C+J,EAAe+B,kBAC3GpF,EAAaqzB,uBAAuBjV,OAAS9kB,YAC3CA,iCAA6C+J,EAAegC,iBAC5D,IAIGrF,CACR,CAE2BhuB,sBAC1BqxB,EACArD,EACAwzB,GAEA,IAAIC,EAuBJ,GArBEA,EADED,EAC4BxzB,EAAajB,qBAClCsE,EAAetE,qBACMsE,EAAetE,qBAAqB/qB,WACzDqvB,EAAe+B,iBACMzI,4BACrB0G,EAAeiC,gBACM3I,2BAEAA,0BAGhC0G,EAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe6B,eAAiB,KAChC7B,EAAe+B,iBAAmB,KAClC/B,EAAeiC,gBAAkB,KACjCjC,EAAe8B,aAAe,KAC9B9B,EAAegC,eAAiB,KAChChC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,+BACpC,OAAQgxB,QACD92B,4BACH0G,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAC9BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACGzhB,2BACH0G,EAAeiC,gBAAkBhM,gBAA4B0G,EAAaqzB,uBAAuBC,UAEjGjwB,EAAekC,cAAgBjM,gBAC7BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACGzhB,0BACH0G,EAAe6B,eAAiB5L,gBAA4B0G,EAAaqzB,uBAAuBC,UAEhGjwB,EAAe8B,aAAe7L,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,SAOlI,OAHA/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBAE9C60B,QACD92B,4BACH0G,EAAetE,qBAAuBpC,iBACtC,WACGA,2BACH0G,EAAetE,qBAAuBpC,gBACtC,WACGA,0BACH0G,EAAetE,qBAAuBpC,eAK5C,OAAO0G,CACR,CAEiCrxB,4BAACqxB,EAAoCrD,GACrEqD,SAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAeiC,gBAAkB,KACjCjC,EAAegC,eAAiB,KAChChC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,gCACpCY,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAEhI/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBACtDyE,EAAetE,qBAAuBsL,kBAGjChH,CACR,CAE8BrxB,yBAC7B/T,EACA+hC,EACAwzB,GAEA,IAAIC,EAmBJ,GAjBEA,EADED,EAC4BxzB,EAAajB,qBAClC9gC,EAAO8gC,qBACc9gC,EAAO8gC,qBAAqB/qB,WACjD/V,EAAOk2D,qBACcF,gCAEAA,iCAGhCh2D,EAAO2gC,iBAAmB,KAC1B3gC,EAAO8gC,qBAAuB,KAC9B9gC,EAAO6xB,iBAAmB,EAC1B7xB,EAAOk2D,qBAAuB,KAC9Bl2D,EAAO+1D,eAAiB,KACxB/1D,EAAOm2D,mBAAqB,KAC5Bn2D,EAAOi2D,aAAe,KAElBl0B,EAAapB,mBAAqB6D,+BACpC,OAAQgxB,QACDQ,gCACHh2D,EAAOk2D,qBAAuB76B,gBAA4B0G,EAAaqzB,uBAAuBC,UAE9Fr1D,EAAOm2D,mBAAqB96B,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAC5H,WACG6V,iCACHh2D,EAAO+1D,eAAiB16B,gBAA4B0G,EAAaqzB,uBAAuBC,UAExFr1D,EAAOi2D,aAAe56B,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,SAO1H,OAHAngD,EAAO6xB,iBAAmBkQ,EAAaliB,iBAAiBgS,iBACxD7xB,EAAO2gC,iBAAmBC,OAAOmB,EAAapB,kBAEtC60B,QACDQ,gCACHh2D,EAAO8gC,qBAAuBk1B,qBAC9B,WACGA,iCACHh2D,EAAO8gC,qBAAuBk1B,sBAKpC,OAAOh2D,CACR,CAEgC+T,2BAACqxB,EAAmCrD,GACnEqD,SAAezE,iBAAmB,KAClCyE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAegC,eAAiB,KAE5BrF,EAAapB,mBAAqB6D,gCACpCY,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAEhI/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,mBAGjDyE,CACR,CAEyCrxB,oCACxCqxB,EACArD,EACAwzB,GAEA,IAAIC,EAmBJ,GAjBEA,EADED,EAC4BxzB,EAAajB,qBAClCsE,EAAetE,qBACMsE,EAAetE,qBAAqB/qB,WACzDqvB,EAAeiC,gBACM+E,2BAEAA,4BAGhChH,EAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAeiC,gBAAkB,KACjCjC,EAAegC,eAAiB,KAChChC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,+BACpC,OAAQgxB,QACDppB,4BACHhH,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAC9BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACG/T,2BACHhH,EAAeiC,gBAAkBhM,gBAA4B0G,EAAaqzB,uBAAuBC,UAEjGjwB,EAAekC,cAAgBjM,gBAC7BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,SAQ1E,OAHA/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBAE9C60B,QACDppB,4BACHhH,EAAetE,qBAAuBsL,iBACtC,WACGA,2BACHhH,EAAetE,qBAAuBsL,gBAK5C,OAAOhH,CACR,CAE4BrxB,uBAC3BqxB,EACArD,EACAwzB,GAEA,IAAIC,EAmBJ,GAjBEA,EADED,EAC4BxzB,EAAajB,qBAClCsE,EAAetE,qBACMsE,EAAetE,qBAAqB/qB,WACzDqvB,EAAe+B,iBACMxI,4BAEAA,2BAGhCyG,EAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAeiC,gBAAkB,KACjCjC,EAAegC,eAAiB,KAChChC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,+BACpC,OAAQgxB,QACD72B,4BACHyG,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAC9BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACGxhB,2BACHyG,EAAeiC,gBAAkBhM,gBAA4B0G,EAAaqzB,uBAAuBC,UAEjGjwB,EAAekC,cAAgBjM,gBAC7BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,SAQ1E,OAHA/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBAE9C60B,QACD72B,4BACHyG,EAAetE,qBAAuBnC,iBACtC,WACGA,2BACHyG,EAAetE,qBAAuBnC,gBAK5C,OAAOyG,CACR,CAE4BrxB,uBAAC/T,EAAuB+hC,GACnD/hC,SAAO2gC,iBAAmB,KAC1B3gC,EAAO6xB,iBAAmB,EAC1B7xB,EAAOo2D,SAAW,KAClBp2D,EAAOq2D,OAAS,KAEZt0B,EAAapB,mBAAqB6D,gCACpCxkC,EAAOo2D,SAAW/6B,gBAA4B0G,EAAaqzB,uBAAuBC,UAElFr1D,EAAOq2D,OAASh7B,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAEhHngD,EAAO6xB,iBAAmBkQ,EAAaliB,iBAAiBgS,iBACxD7xB,EAAO2gC,iBAAmBC,OAAOmB,EAAapB,mBAGzC3gC,CACR,CAE2C+T,sCAC1C/T,EACA+hC,GAEA/hC,SAAO2gC,iBAAmB,KAC1B3gC,EAAO6xB,iBAAmB,EAC1B7xB,EAAOinC,eAAiB,KACxBjnC,EAAOs2D,+BAAiC,KACxCt2D,EAAOqnC,gBAAkB,KACzBrnC,EAAOw2D,gBAAkB,KACzBx2D,EAAOknC,aAAe,KACtBlnC,EAAOu2D,6BAA+B,KACtCv2D,EAAOsnC,cAAgB,KACvBtnC,EAAOy2D,cAAgB,KAEnB10B,EAAapB,mBAAqB6D,gCACpCxkC,EAAOs2D,+BAAiCj7B,gBAA4B0G,EAAaqzB,uBAAuBC,UAExGr1D,EAAOu2D,6BAA+Bl7B,gBACpCA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAGtEngD,EAAO6xB,iBAAmBkQ,EAAaliB,iBAAiBgS,iBACxD7xB,EAAO2gC,iBAAmBC,OAAOmB,EAAapB,mBAGzC3gC,CACR,CAE4B+T,uBAAC/T,EAAuB+hC,GACnD/hC,SAAO2gC,iBAAmB,KAC1B3gC,EAAO6xB,iBAAmB,EAC1B7xB,EAAOw2D,gBAAkB,KACzBx2D,EAAOy2D,cAAgB,KAEnB10B,EAAapB,mBAAqB6D,gCACpCxkC,EAAOw2D,gBAAkBn7B,gBAA4B0G,EAAaqzB,uBAAuBC,UAEzFr1D,EAAOy2D,cAAgBp7B,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAEvHngD,EAAO6xB,iBAAmBkQ,EAAaliB,iBAAiBgS,iBACxD7xB,EAAO2gC,iBAAmBC,OAAOmB,EAAapB,mBAGzC3gC,CACR,CAE6B+T,wBAC5BqxB,EACArD,EACAwzB,GAEA,IAAIC,EAmBJ,GAjBEA,EADED,EAC4BxzB,EAAajB,qBAClCsE,EAAetE,qBACMsE,EAAetE,qBAAqB/qB,WACzDqvB,EAAe+B,iBACMxI,4BAEAA,2BAGhCyG,EAAezE,iBAAmB,KAClCyE,EAAetE,qBAAuB,KACtCsE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAegC,eAAiB,KAChChC,EAAeiC,gBAAkB,KACjCjC,EAAekC,cAAgB,KAE3BvF,EAAapB,mBAAqB6D,+BACpC,OAAQgxB,QACD72B,4BACHyG,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAC9BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,IAEtE,WACGxhB,2BACHyG,EAAeiC,gBAAkBhM,gBAA4B0G,EAAaqzB,uBAAuBC,UAEjGjwB,EAAekC,cAAgBjM,gBAC7BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,SAQ1E,OAHA/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,kBAE9C60B,QACD72B,4BACHyG,EAAetE,qBAAuBnC,iBACtC,WACGA,2BACHyG,EAAetE,qBAAuBnC,gBAK5C,OAAOyG,CACR,CAE0BrxB,qBAACqxB,EAA6BrD,GACvDqD,SAAezE,iBAAmB,KAClCyE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAeuK,cAAgB,KAC/BvK,EAAewK,YAAc,KAC7BxK,EAAegC,eAAiB,KAE5BrF,EAAapB,mBAAqB6D,gCACpCY,EAAeuK,cAAgBtU,gBAA4B0G,EAAaqzB,uBAAuBC,UAE/FjwB,EAAewK,YAAcvU,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAE7H/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,mBAGjDyE,CACR,CAE6BrxB,wBAACqxB,EAAgCrD,GAC7DqD,SAAezE,iBAAmB,KAClCyE,EAAevT,iBAAmB,EAClCuT,EAAe+B,iBAAmB,KAClC/B,EAAegC,eAAiB,KAE5BrF,EAAapB,mBAAqB6D,gCACpCY,EAAe+B,iBAAmB9L,gBAA4B0G,EAAaqzB,uBAAuBC,UAElGjwB,EAAegC,eAAiB/L,gBAA4BA,YAAwB0G,EAAaqzB,uBAAuBjV,OAAQ,MAEhI/a,EAAevT,iBAAmBkQ,EAAaliB,iBAAiBgS,iBAChEuT,EAAezE,iBAAmBC,OAAOmB,EAAapB,mBAGjDyE,CACR,EAt7B+C,+CCrB5C,MAAOywB,GAAqB,gDCC5B,MAAOV,GAAiB,2GCGxB,MAAO/f,EAC4BrhC,iCAAC/T,GACtC,OAAiC,IAA7BA,EAAOoF,mBAA4D,OAA9BpF,EAAOsF,mBACvC8vC,EAAwBshB,oBAAoBrY,YAEpB,OAA7Br+C,EAAOoF,oBAA4D,IAA9BpF,EAAOsF,mBACvC8vC,EAAwBshB,oBAAoBrY,mBAEpB,IAA7Br+C,EAAOoF,mBAA6D,OAA9BpF,EAAOsF,mBACxC8vC,EAAwBshB,oBAAoBrY,2BAEpB,OAA7Br+C,EAAOoF,oBAA4D,IAA9BpF,EAAOsF,mBACvC8vC,EAAwBshB,oBAAoBrY,4BAE9C,IACR,CAEyBtqC,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoBrY,aACtClvC,EAAQhU,KAAKxB,KAAK+8D,oBAAoBrY,mBACtClvC,EAAQhU,KAAKxB,KAAK+8D,oBAAoBrY,4BACtClvC,EAAQhU,KAAKxB,KAAK+8D,oBAAoBrY,6BAE/BlvC,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAOs9C,KAAmBn+C,SAASy2D,GAAY,CACxD,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE8BxkC,yBAC7B/T,EACA62D,EACA90D,GAEA,OAAK/B,KACHA,EAAS+B,IAAS2B,aAAgB,IAAIozD,IAAsB,IAAIC,KACzD1vC,cAAe,GAEpBwvC,GAAuB76D,IACrB66D,EAAsB76D,MAAQo5C,EAAwBshB,oBAAoBrY,YAA0BriD,KACtGgE,EAAOoF,mBAAoB,EAC3BpF,EAAOsF,mBAAqB,MACnBuxD,EAAsB76D,MAAQo5C,EAAwBshB,oBAAoBrY,kBAAgCriD,KACnHgE,EAAOoF,kBAAoB,KAC3BpF,EAAOsF,oBAAqB,GACnBuxD,EAAsB76D,MAAQo5C,EAAwBshB,oBAAoBrY,2BAAyCriD,KAC5HgE,EAAOoF,mBAAoB,EAC3BpF,EAAOsF,mBAAqB,MACnBuxD,EAAsB76D,MAAQo5C,EAAwBshB,oBAAoBrY,4BAA0CriD,MAC7HgE,EAAOoF,kBAAoB,KAC3BpF,EAAOsF,oBAAqB,IAG9BtF,EAAOoF,kBAAoB,KAC3BpF,EAAOsF,mBAAqB,MAEvBtF,CACR,CAE0B+T,qBAAC4iD,GAC1B,OAAIA,IAActY,WACT,UACEsY,IAActY,iBAChB,qBACEsY,IAActY,0BAChB,oBACEsY,IAActY,2BAChB,oCADF,CAIR,EA/EiC,gDCH7B,IAAKA,EAKX,aALWA,QAAiB,KAC3BA,qBACAA,mCACAA,qDACAA,uDAJUA,EAAZ,IAAYA,GAKX,kDCRK,MAAOtZ,GAAa,gDCEpB,MAAOid,GAAuB,gDCF9B,MAAOgV,EAyBXt9D,YAAmByL,EAAc8xD,EAAwBj7D,EAAakpB,EAAegyC,GAV9Ev9D,4BAAwB,EAGxBA,cAAsE,SACtEA,cAA6B,QAOlCA,KAAKwL,KAAOA,EACZxL,KAAKs9D,eAAiBA,EACtBt9D,KAAKqC,IAAMA,EACXrC,KAAKurB,MAAQA,EACbvrB,KAAKu9D,kBAAoBA,CAC1B,EA/BsB,iICKnB,MAAOC,EAAbz9D,cAWSC,0BAAsB,EAQtBA,4BAAwCgd,WAKxChd,4BAAwCgd,WAKxChd,4BAAwCgd,UAOhD,+YC7BO/Y,+CACAA,kEATFA,qBAEEA,yDAASA,8BAAqB,GAM9BA,8BACAA,8BACFA,iCANEA,yHADAA,yHAKWA,4DACAA,yGA4BLA,2BAGEA,oEAAkBA,mCAA+B,GAalDA,kCAZCA,oDAA4C,qBAA5CA,CAA4C,gDAA5CA,CAA4C,gQAA5CA,CAA4C,kBAA5CA,CAA4C,sCAA5CA,CAA4C,wFAA5CA,CAA4C,wHALhDA,kBACEA,+BAiBFA,+BAfKA,iJAkBHA,2BAGEA,oEAAkBA,uCAAmC,GAStDA,kCARCA,qDAA6C,oDAA7CA,CAA6C,iDAA7CA,CAA6C,mQAA7CA,CAA6C,kBAA7CA,CAA6C,uCAA7CA,CAA6C,yFAA7CA,CAA6C,wHALjDA,kBACEA,+BAaFA,+BAXKA,mIA+FGA,gEAEEA,2DAGAA,yGA/BJA,qBAaEA,qCAaAA,sCAOFA,oDA9BEA,4CAWEA,oCAA2B,2DAA3BA,CAA2B,2DAA3BA,CAA2B,yDAA3BA,CAA2B,2DAA3BA,CAA2B,iEAA3BA,CAA2B,kBAA3BA,CAA2B,oBAA3BA,CAA2B,2BAa1BA,gGAQLA,qBAMEA,qCAQFA,oDAVEA,2CAGEA,2EAA0D,2DAA1DA,CAA0D,oBAA1DA,CAA0D,iEA9EhEA,oBAGEA,kFAAwBA,kCAAqD,EAA7EA,CAA8E,6EACzDA,0BAAsB,EAD3CA,CAA8E,iEAErEA,0BAAsB,GAU/BA,qBACEA,qCAmBFA,QACAA,yBAmCAA,wBAeFA,gDAhFEA,6BAA0B,sBAA1BA,CAA0B,4BAA1BA,CAA0B,gCAA1BA,CAA0B,cASEA,qDAExBA,mDAA0C,yBAA1CA,CAA0C,YAA1CA,CAA0C,oCAA1CA,CAA0C,sBAA1CA,CAA0C,sBAA1CA,CAA0C,2DAA1CA,CAA0C,sCAA1CA,CAA0C,yDAA1CA,CAA0C,2DAA1CA,CAA0C,iEAA1CA,CAA0C,cAA1CA,CAA0C,gBAA1CA,CAA0C,+BAA1CA,CAA0C,8DAuB3CA,0HAgCAA,2FA5FXA,8BAEEA,mFAAmCA,iDAAwC,GAS3EA,kBAAiD,6BAG7CA,yEAAyBA,uCAA8B,EAAvDA,CAAwD,oEAC9BA,wCAA+B,GAKzDA,yBAwFAA,iBAAoC,UAApCA,CAAoC,sBAG9BA,yDAAQA,2BAAuB,GAMhCA,2CAlHTA,gEAAwD,yDAAxDA,CAAwD,+DAAxDA,CAAwD,yDAAxDA,CAAwD,mEAAxDA,CAAwD,6CAAxDA,CAAwD,gFAapDA,0DAAyC,4BAAzCA,CAAyC,wCAMnBA,kDA0FhBA,kCAAqB,mCAArBA,CAAqB,2CAArBA,CAAqB,yCAArBA,CAAqB,4BCvKpC,IAAMw5D,GAAb,MAAM,MAAOA,GAcX19D,YACUuT,EACAsxB,EACAlwB,EACiB1Q,GAHjBhE,qBACAA,yBACAA,iBAhBOA,mBAAgB,IAAIuT,MACpBvT,iBAAc,IAAIuT,MAS5BvT,gCAA4B,EASjCA,KAAK09D,aAAe15D,EACpBhE,KAAK29D,2BAA4B,CAClC,CAEMC,wBAAwBC,UACtB79D,KAAK09D,aAAaz+D,MAAM6+D,mCACxB99D,KAAK09D,aAAaz+D,MAAM8+D,+BAE3BF,IACEA,EAAmBl8D,OACrB3B,KAAK09D,aAAaz+D,MAAM8+D,+BAAiCF,EAAmBx7D,IAE5ErC,KAAK09D,aAAaz+D,MAAM6+D,4BAA8BD,EAAmBx7D,KAI7ErC,KAAKg+D,oBACN,CAEMC,cAActhB,GACnBA,SAAQuhB,uBAAwB,EAC5Bl+D,KAAK29D,4BACP39D,KAAK29D,2BAA4B,EACjChhB,EAAQuhB,uBAAwB,GAGlCl+D,KAAKm+D,cAAczqD,KAAKipC,GACpB38C,KAAK09D,aAAaU,uBACpBp+D,KAAK0U,UAAUS,SAEV,CACR,CAEMA,QACLnV,KAAK0U,UAAUS,OAChB,CAEMkpD,4BAA4BR,UAC1B79D,KAAK09D,aAAaz+D,MAAMq/D,6BAE3BT,IACF79D,KAAK09D,aAAaz+D,MAAMq/D,6BAA+BT,EAAmBx7D,KAG5ErC,KAAKg+D,oBACN,CAEMO,aACLv+D,KAAKkiD,YAAc,IAAIC,IAAYniD,KAAKoiD,sBAAsBC,UAC/D,CAEMmc,uBACDx+D,KAAK09D,aAAae,mBAAqBz+D,KAAK0+D,kBAC9C1+D,KAAK0+D,iBAAiBjL,iBAAiBjnC,SAE1C,CAEMmyC,sBACD3+D,KAAK09D,aAAakB,kBAAoB5+D,KAAK6+D,iBAC7C7+D,KAAK6+D,gBAAgBpL,iBAAiBjnC,SAEzC,CAEMsyC,yCACL9+D,KAAK0U,UAAUS,OAChB,CAEM4pD,eACL/+D,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAKg/D,uBAAuBC,aAAa,EAAzC,EAEH,CAEMC,oBACLl/D,KAAK0nC,sBAAsB9zB,UAC5B,CAEMurD,qBAAqBvgB,GAC1B,OAAKA,KAMDA,EAAWj9C,QAAU3B,KAAK09D,aAAaz+D,MAAM8+D,iCAAmCnf,EAAWv8C,MAG1Fu8C,EAAWj9C,QAAU3B,KAAK09D,aAAaz+D,MAAM6+D,8BAAgClf,EAAWv8C,MARtFrC,KAAK09D,aAAaz+D,MAAM8+D,iCAAmC/9D,KAAK09D,aAAaz+D,MAAM6+D,2BAY3F,CAEM7f,+BACDj+C,KAAKg/D,yBACPh/D,KAAKg/D,uBAAuBI,gBAAkB,MAEhDp/D,KAAKq/D,YAAY3rD,KAAK1T,KAAK09D,aAAaz+D,MACzC,CAEMi/C,gCACDl+C,KAAKg/D,yBACPh/D,KAAKg/D,uBAAuBI,gBAAkB,MAEhDp/D,KAAKq/D,YAAY3rD,KAAK1T,KAAK09D,aAAaz+D,MACzC,CAGMqgE,YAAY75D,GACjB,GAAIzF,KAAK09D,aAAa6B,sBAAuB,CAC3C,GAAI95D,EAAMgyD,OACR,OAEFz3D,KAAK09D,aAAaU,uBAAwB,CAC3C,CACF,CAGMoB,YACDx/D,KAAK09D,aAAa6B,wBACpBv/D,KAAK09D,aAAaU,uBAAwB,EAE7C,CAEMl2B,WACLloC,KAAKksC,gBAAgBlsC,KAAK09D,aAAaz+D,MAAMsrC,YACzCvqC,KAAK09D,aAAa+B,mBAAqBz/D,KAAK6+D,kBAC9C7+D,KAAK6+D,gBAAgBjL,YAAc5zD,KAAK09D,aAAa+B,kBAAkBp9D,IACvErC,KAAK0U,UAAU0sC,kBAAkBsc,aAAaz+D,MAAM6+D,4BAA8B99D,KAAK09D,aAAa+B,kBAAkBp9D,KAGpHrC,KAAK09D,aAAagC,oBAAsB1/D,KAAK0+D,mBAC/C1+D,KAAK0+D,iBAAiB9K,YAAc5zD,KAAK09D,aAAagC,mBAAmBr9D,IACzErC,KAAK0U,UAAU0sC,kBAAkBsc,aAAaz+D,MAAMq/D,6BAA+Bt+D,KAAK09D,aAAagC,mBAAmBr9D,KAG1HrC,KAAK2+D,sBACL3+D,KAAKw+D,sBACN,CAEMmB,sBACL3/D,KAAK09D,aAAaU,uBAAyBp+D,KAAK09D,aAAaU,qBAC9D,CAEM/zB,8BAA8BC,GACnCtqC,KAAK09D,aAAaz+D,MAAMsrC,WAAaD,EACrCtqC,KAAKksC,gBAAgBlsC,KAAK09D,aAAaz+D,MAAMsrC,YAE7CvqC,KAAKg+D,oBACN,CAEMA,qBACLh+D,KAAK09D,aAAaz+D,MAAMqwB,UAAY,EAIpC,MAAMrwB,EAAQmc,OAAOqF,OAAO,IAAIm/C,IAAe5/D,KAAK09D,aAAaz+D,OACjEe,KAAK09D,aAAaz+D,MAAQA,EAE1Be,KAAKq/D,YAAY3rD,KAAK1T,KAAK09D,aAAaz+D,MACzC,CAEM4gE,gBAAgB5gB,GACrBj/C,KAAK09D,aAAaz+D,MAAMqwB,UAAY2vB,EAAU3vB,UAC9CtvB,KAAK09D,aAAaz+D,MAAMuuB,SAAWyxB,EAAUzxB,SAC7CxtB,KAAKq/D,YAAY3rD,KAAK1T,KAAK09D,aAAaz+D,MACzC,CAEOitC,gBAAgB3B,GACtBvqC,KAAKyZ,WAAa,IAAI0yB,IAAgB5B,GACtCvqC,KAAK4kC,kBAAkBlpB,cAAc6uB,EACtC,gDA/LUkzB,IAAqBx5D,wCAkBtByR,MAAe,2BAlBd+nD,GAAqBlpD,ocAArBC,gBAAmB,+CAAnBA,cAAiB,yqHDrB9BvQ,iBAA2E,UAA3EA,CAA2E,WAE7CA,SAA6BA,QACvDA,iBACEA,2BAWAA,oBACEA,gCAASuQ,SAAO,GAMhBvQ,oBAAUA,iBAAKA,cAKrBA,8BAAoB,WAApBA,CAAoB,WAApBA,CAAoB,WAApBA,CAAoB,WAApBA,CAAoB,4BAORA,kDAA0BuQ,kCAAqC,GAIhEvQ,QAEDA,0BAoBAA,yBAeFA,QACAA,sCA2HFA,uBArMsBA,0CAGrBA,4DAYDA,iDAkBMA,qCAAyB,2BAKrBA,qGAoBAA,uGAiBLA,kwBCxDAw5D,EAAb,wHCCYx5D,yBACEA,mBACFA,8CAFwDA,mBAAgB,iBAChEA,mGApBdA,eAA+B,qBAA/BA,CAA+B,eASzBA,kEAAiBA,0BAAsB,GAPzCA,QASAA,iCACEA,0DAAUA,wBAAe,EAAzBA,CAA0B,oDAChBA,sBAAa,EADvBA,CAA0B,6DAERA,iCAA6B,GAK/CA,gCAGFA,gDAlBEA,4CAA2B,oBAA3BA,CAA2B,iCAW3BA,iCAI6BA,+FAUzCA,qBAEEA,yDAASA,uBAAc,GAOvBA,oBAAUA,qBAASA,mCALnBA,qCADAA,sCCCK,IAAM67D,GAAb,MAAM,MAAOA,GAiHX//D,YACUozD,EACA/7C,EACA9D,EACAsxB,EACAm7B,GACA3mD,IALApZ,0BACAA,eACAA,qBACAA,yBACAA,4BACAA,gBA7GOA,iBAAc,IAAIuT,MASnBvT,uBAAmB,EAKnBA,0BAAsB,EAEtBA,yBAAsB,mBAGtBA,4BAAyB,qBAOzBA,6BAAyB,EACzBA,4BAAyBgd,WACzBhd,4BAAwB,EACxBA,6BAAyB,EACzBA,gCAA4B,EAC5BA,6BAAyB,EACzBA,4BAAyBgd,WACzBhd,4BAAwB,EACxBA,6BAAyB,EACzBA,gCAA4B,EAC5BA,6BAAyB,EACzBA,4BAAyBgd,WAGxBhd,kBAAe,IAAIuT,MAKpBvT,4BAAwB,EAEvBA,kCAA+B,IAAIuT,MAGnCvT,mBAAgB,IAAIuT,MAErBvT,oBAAgB,EAGhBA,qBAAiB,EAEjBA,wBAAoB,EASpBA,gBAAa,EAMbA,4BAAwB,EAGvBA,iBAAc,IAAIuT,MAGlBvT,kBAAe,IAAIuT,MAG7BvT,aAAU,qBAIVA,oBAAgB,EAGhBA,iBAAmC,IAAIyV,KAAoB,IAG1DzV,6BAA0D,GAE1DA,6BAAyB,EAGzBA,sBAAmB,GAGnBA,0BAAsB,EAEtBA,sBAAiC,IAAIE,IASzC,CAGO8/D,2BAAuB17D,GAChCtE,KAAKigE,wBAA0B37D,EAC/BtE,KAAKkgE,wBAAyB,EAG5BlgE,KAAKmgE,qBACL77D,EAAM6K,OAAS,IACdnP,KAAKkgE,wBACNlgE,KAAKogE,YAAY97D,OAAO+d,SAAWriB,KAAKqgE,kBAExCrgE,KAAKsgE,oBAER,CACUN,6BACT,OAAOhgE,KAAKigE,uBACb,CAEMlnD,MACL,MAAMwnD,EAAqBvgE,KAAKogE,YAAY97D,MAG5C,OAAIi8D,GAAcA,EAAWpxD,QAAU,IACrCnP,KAAKwgE,YAAY9sD,KAAK6sD,EAAWE,eACjCzgE,KAAKogE,YAAY/2C,SAAS,KAE1BrpB,KAAK0gE,oBAGA,CACR,CAEMC,eACL,YAAKD,oBACE,CACR,CAEME,gBACL5gE,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAKoZ,QAAQynD,IAAI,KACf7gE,KAAKggE,uBAAyB,GAC9BhgE,KAAK+/D,oBAAoBe,wBAAyB,EAClD9gE,KAAKmzD,mBAAmB4N,eAAxB,EAHF,EAMH,CAGMC,eAAexnD,GACpBA,EAAOO,iBACP,MAAMknD,EAAoBjhE,KAAKogE,YAAY97D,OAAO+d,QAAU,IAGzDriB,KAAKkgE,wBAAkE,IAAxClgE,KAAKigE,wBAAwB9wD,QAAgB8xD,IAAsBjhE,KAAKqgE,mBACxGY,EAAkB9xD,OAAS,EAE3BnP,KAAKmgE,qBAAsB,EAI7BngE,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAKoZ,QAAQynD,IAAI,KACf7gE,KAAKsgE,oBAAL,EADF,EAIH,CAEMzjD,UAAUC,EAAiBC,EAAgBC,YAChD,OAAOhd,KAAK4kC,kBAAkB/nB,UAAUC,EAASC,EAClD,CAEMmkD,YACL,OAAOlhE,KAAKmhE,YAAcnhE,KAAKmhE,WAAWrJ,gBAAkBl/C,SAASiB,aACtE,CAEMlG,cACD3T,KAAK0U,WAAa1U,KAAK0U,UAAU0sC,mBAAqBphD,KAAK0U,UAAU0sC,kBAAkBsc,eACzF19D,KAAK0U,UAAU0sC,kBAAkBsc,aAAagC,mBAAqB1/D,KAAK0/D,mBACxE1/D,KAAK0U,UAAU0sC,kBAAkBsc,aAAae,kBAAoBz+D,KAAKy+D,kBACvEz+D,KAAK0U,UAAU0sC,kBAAkBsc,aAAa0D,cAAgBphE,KAAKohE,cACnEphE,KAAK0U,UAAU0sC,kBAAkBsc,aAAa2D,wCAA0CrhE,KAAKqhE,wCAC7FrhE,KAAK0U,UAAU0sC,kBAAkBsc,aAAa4D,sCAAwCthE,KAAKshE,sCAC3FthE,KAAK0U,UAAU0sC,kBAAkBsc,aAAaxD,oBAAsBl6D,KAAKk6D,oBACzEl6D,KAAK0U,UAAU0sC,kBAAkBsc,aAAa6D,WAAavhE,KAAKwhE,qBAChExhE,KAAK0U,UAAU0sC,kBAAkBsc,aAAa+D,aAAezhE,KAAKyhE,aAClEzhE,KAAK0U,UAAU0sC,kBAAkBsc,aAAa9M,SAAW5wD,KAAK4wD,SAC9D5wD,KAAK0U,UAAU0sC,kBAAkBsc,aAAahc,cAAgB1hD,KAAK0hD,cACnE1hD,KAAK0U,UAAU0sC,kBAAkBK,WAAazhD,KAAKyhD,WACnDzhD,KAAK0U,UAAU0sC,kBAAkBsc,aAAa+B,kBAAoBz/D,KAAKy/D,kBACvEz/D,KAAK0U,UAAU0sC,kBAAkBsc,aAAakB,iBAAmB5+D,KAAK4+D,iBACtE5+D,KAAK0U,UAAU0sC,kBAAkBud,sBACjC3+D,KAAK0U,UAAU0sC,kBAAkBsc,aAAagE,qCAAuC1hE,KAAK0hE,qCAC1F1hE,KAAK0U,UAAU0sC,kBAAkBsc,aAAaiE,uCAAyC3hE,KAAK2hE,uCAC5F3hE,KAAK0U,UAAU0sC,kBAAkBsc,aAAaz+D,MAAQe,KAAKf,MAC3De,KAAK0U,UAAU0sC,kBAAkBsc,aAAazb,WAAajiD,KAAKiiD,WAChEjiD,KAAK0U,UAAU0sC,kBAAkBsc,aAAakE,sBAAwB5hE,KAAK4hE,sBACvE5hE,KAAK6hE,gBACP7hE,KAAK0U,UAAU0sC,kBAAkB8d,oBACjCl/D,KAAK6hE,eAAgB,GAGvB7hE,KAAKsT,cAAcY,yBAAyB,KACtClU,KAAK0U,WAAa1U,KAAK0U,UAAU0sC,mBACnCphD,KAAK0U,UAAU0sC,kBAAkBmd,YAAjC,GAIP,CAEMtoC,cACLj2B,KAAK+/D,oBAAoBe,wBAAyB,EAGlD9gE,KAAKioC,iBAAiBxmC,OACtBzB,KAAKioC,iBAAiB1d,UACvB,CAEM2d,WAEAloC,KAAKu/D,wBACRv/D,KAAK8hE,QAAU,wBAGjB9hE,KAAKgb,QACDhb,KAAK+hE,mBACP/hE,KAAKogE,YAAY4B,aACd57D,QAAK67D,KAAa,MAClB77D,QAAKmsB,KAAUvyB,KAAKioC,mBACpBziC,UAAWimB,IACV,GAAc,OAAVA,EAAgB,CAClB,MAAMy2C,EAAez2C,EAAMpJ,OACC,IAAxB6/C,EAAa/yD,QACfnP,KAAKggE,uBAAyB,GAC9BhgE,KAAKqgE,iBAAmB,GACxBrgE,KAAKmgE,qBAAsB,EAC3BngE,KAAKmzD,mBAAmB4N,kBAEpBmB,EAAa/yD,OAASnP,KAAKqgE,iBAAiBlxD,SAC9CnP,KAAKmgE,qBAAsB,GAE7BngE,KAAKkgE,wBAAyB,EAC9BlgE,KAAKqgE,iBAAmB6B,EACxBliE,KAAK4kC,kBAAkBlpB,cAAcwmD,GACrCliE,KAAKmiE,aAAazuD,KAAKwuD,GAE1B,GAGR,CAEME,cACLpiE,KAAK+/D,oBAAoBe,wBAAyB,CACnD,CAEMJ,mBAEL1gE,KAAKgb,QAEL,MAAM0iD,EAAe,IAAIF,EACzBE,EAAagC,mBAAqB1/D,KAAK0/D,mBACvChC,EAAae,kBAAoBz+D,KAAKy+D,kBACtCf,EAAa0D,cAAgBphE,KAAKohE,cAClC1D,EAAa2D,wCAA0CrhE,KAAKqhE,wCAC5D3D,EAAa4D,sCAAwCthE,KAAKshE,sCAC1D5D,EAAaxD,oBAAsBl6D,KAAKk6D,oBACxCwD,EAAa2E,oBAAsBriE,KAAKqiE,oBACxC3E,EAAa4E,oBAAsBtiE,KAAKsiE,oBACxC5E,EAAa6E,yBAA2BviE,KAAKuiE,yBAC7C7E,EAAa8E,uBAAyBxiE,KAAKwiE,uBAC3C9E,EAAa9M,SAAW5wD,KAAK4wD,SAC7B8M,EAAahc,cAAgB1hD,KAAK0hD,cAClCgc,EAAa+E,uBAAyBziE,KAAKyiE,uBAC3C/E,EAAagF,uBAAyB1iE,KAAK0iE,uBAC3ChF,EAAaiF,sBAAwB3iE,KAAK2iE,sBAC1CjF,EAAakF,uBAAyB5iE,KAAK4iE,uBAC3ClF,EAAamF,0BAA4B7iE,KAAK6iE,0BAC9CnF,EAAaoF,uBAAyB9iE,KAAK8iE,uBAC3CpF,EAAaqF,uBAAyB/iE,KAAK+iE,uBAC3CrF,EAAasF,sBAAwBhjE,KAAKgjE,sBAC1CtF,EAAauF,uBAAyBjjE,KAAKijE,uBAC3CvF,EAAawF,0BAA4BljE,KAAKkjE,0BAC9CxF,EAAayF,uBAAyBnjE,KAAKmjE,uBAC3CzF,EAAa0F,uBAAyBpjE,KAAKojE,uBAC3C1F,EAAaU,sBAAwBp+D,KAAKo+D,sBAC1CV,EAAa6B,sBAAwBv/D,KAAKu/D,sBAC1C7B,EAAa+B,kBAAoBz/D,KAAKy/D,kBACtC/B,EAAakB,iBAAmB5+D,KAAK4+D,iBACrClB,EAAa+D,aAAezhE,KAAKyhE,aACjC/D,EAAagE,qCAAuC1hE,KAAK0hE,qCACzDhE,EAAaiE,uCAAyC3hE,KAAK2hE,uCAC3DjE,EAAaz+D,MAAQe,KAAKf,MAC1By+D,EAAaz+D,MAAM6+D,4BAA8B99D,KAAKy/D,mBAAmBp9D,IACzEq7D,EAAaz+D,MAAMq/D,6BAA+Bt+D,KAAK0/D,oBAAoBr9D,IAC3Eq7D,EAAa6D,WAAavhE,KAAKwhE,qBAC/B9D,EAAazb,WAAajiD,KAAKiiD,WAC/Byb,EAAakE,sBAAwB5hE,KAAK4hE,sBAE1C5hE,KAAKq/D,YAAY3rD,KAAK1T,KAAKf,OAE3B,MAAMokE,EAAe,IAAIC,KACzBD,EAAaE,cAAe,EAC5BF,EAAarrD,WAAY,EACzBqrD,EAAar/D,KAAO05D,EAEpB19D,KAAK0U,UAAY1U,KAAKoX,QAAQO,KAAK8lD,GAAuB4F,GAG1DrjE,KAAK0U,UAAU0sC,kBAAkBie,YAAY75D,UAAWxB,IACtDhE,KAAKq/D,YAAY3rD,KAAK1P,EAAtB,GAIFhE,KAAK0U,UAAU0sC,kBAAkB+c,cAAc34D,UAAWxB,IACxDhE,KAAKm+D,cAAczqD,KAAK1P,EAAxB,GAKFhE,KAAK0U,UAAU8uD,cAAch+D,UAAU,KACrCxF,KAAK6hE,eAAgB,EACrB7hE,KAAKyjE,6BAA6B/vD,MAAlC,EAEH,CAEMgwD,sBAAsBC,GAC3B3jE,KAAKmgE,qBAAsB,EAE3BngE,KAAKsT,cAAcY,yBAAyB,KACtClU,KAAKmhE,YAAYrJ,gBACnB93D,KAAKmhE,WAAWrJ,cAAc8L,OAE9B5jE,KAAKoZ,QAAQynD,IAAI,KACf7gE,KAAKggE,uBAAyB,GAC9BhgE,KAAKqgE,iBAAmB,GACxBrgE,KAAK6jE,aAAanwD,KAAKiwD,EAA6B/tB,OAAOv0C,IAC3DrB,KAAKogE,YAAY/2C,SAAS,GAAI,CAAEy6C,WAAW,IAC3C9jE,KAAKmzD,mBAAmB4N,eAAxB,GALF,EASL,CAEM/lD,QACLhb,KAAKggE,uBAAyB,GAC9BhgE,KAAKogE,YAAY/2C,SAAS,GAC3B,CAEMzV,WAEL5T,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAKmhE,YAAYrJ,eAAezjD,OAAhC,EAEH,CAGOisD,qBAEN,MAAMyD,EAAc/jE,KAAKigE,wBAAwB,GACjD,IAAK8D,EACH,OAGF,MAAMt+D,EAAQ,CACZmwC,OAAQ,CACNv0C,GAAI0iE,EAAYl4D,KAChBvH,MAAOy/D,EAAYx4C,QAIvBvrB,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAKoZ,QAAQynD,IAAI,KACf7gE,KAAK0jE,sBAAsBj+D,EAA3B,EADF,EAIH,gDA5YUq6D,IAAe77D,mGAAf67D,GAAevrD,y9FDpC5BtQ,iBAAyE,UAAzEA,CAAyE,WAGnEA,wBAyBAA,oBAAQA,gCAASuQ,gBAAc,GAAsEvQ,SAAoBA,cAI/HA,kCAhCKA,kDAGOA,2CAyB+FA,iCAKxGA,+mBCGU67D,EAAb,uSCqBO,IAAMkE,EAAb,MAAM,MAAOA,kDAAY,0BAAZA,gCA7BTzP,IACA7iD,KACAuyD,IACAC,KACAnO,IAKA9I,gBAA4B,CAAEC,oBAAoB,IAClDsH,KACAyD,IACA1H,IACAkK,IACA0J,KACA97C,KACA+7C,KACAC,KACA/7C,KACAosC,IACA4P,KACA/7C,KACA4kC,KACA0H,KACA0P,IACAC,OAISR,CAAb,yFCpDO,IAAeS,EAAtB,MAAM,MAAgBA,EAwBpB1kE,YAA6B4rD,EAAmD+Y,EAAmCC,GAAtF3kE,2BAAmDA,mBAAmCA,gBAvBlGA,0BAAuB,IAAIuT,MAC3BvT,4BAAyB,IAAIuT,MAC7BvT,gBAAa,IAAIuT,MAElBvT,gCAA4B,EAE5BA,+BAA2B,EAC1BA,uBAAoB,IAAIuT,MACxBvT,qBAAkB,IAAIuT,MAI7BvT,0BAAsB,EAGtBA,mCAA+B,EAG/BA,kBAAc,EAGdA,sBAAkB,EAK1BA,KAAK2kE,SAASC,aAAaF,EAAY5M,cAAe,WAAY,KAClE93D,KAAK0kE,YAAY5M,cAAcjyD,iBAAiB,QAAS,KACvD7F,KAAK6kE,kBAAL,EAEH,CAEMC,sBACL9kE,KAAK0kE,YAAY5M,cAAcjyD,iBAC7B,YACA,KACE7F,KAAK+kE,YAAL,EAEF,CAAEC,SAAS,GAEd,CAEMC,UACAjlE,KAAK2rD,oBAAoBuZ,yBACvBllE,KAAKmlE,+BACRnlE,KAAK0kE,YAAY5M,cAAch/C,UAAUG,OAAO,aAChDjZ,KAAKolE,iBAAkB,GAGzBplE,KAAKmlE,8BAA+B,EAEvC,CAEMjK,SACDl7D,KAAKqlE,qBAAuBC,aAA4BtlE,KAAKulE,4BAC/DvlE,KAAKqlE,qBAAsB,EAC3BrlE,KAAKwlE,WAAW9xD,OAEnB,CAEM+xD,qBACDzlE,KAAKqlE,qBAAuBC,aAA4BtlE,KAAKulE,4BAC/DvlE,KAAKqlE,qBAAsB,EAC3BrlE,KAAK0lE,uBAAuBhyD,OAE/B,CAMkCiyD,aACjC3lE,KAAK0kE,YAAY5M,cAAch/C,UAAUC,IAAI,eAC7C/Y,KAAKolE,iBAAkB,CACxB,CAGMQ,aACA5lE,KAAK2rD,oBAAoBuZ,yBAGvBllE,KAAKmlE,8BACRnlE,KAAK6lE,oBAGP7lE,KAAKmlE,8BAA+B,GAEtCnlE,KAAK8lE,gBAAgBpyD,MACtB,CAGMqyD,UAGA/lE,KAAKmlE,8BACRnlE,KAAK6lE,oBAGP7lE,KAAKmlE,8BAA+B,CACrC,CAEMa,iBAAiBC,GAClBA,EACFjmE,KAAKmlE,8BAA+B,EAEpCnlE,KAAK6lE,mBAER,CAEMK,YAgBAlmE,KAAKmmE,eAAiBnmE,KAAKolE,iBAAmBE,aAA4BtlE,KAAKomE,6BAClFpmE,KAAKqlE,qBAAsB,EAC3BrlE,KAAKwlE,WAAW9xD,QAGlB1T,KAAKmmE,aAAc,CACpB,CAEStB,mBACR7kE,KAAKqmE,qBAAqB3yD,KAAK1T,KAAK6L,MACpC7L,KAAK0kE,YAAY5M,cAAch/C,UAAUC,IAAI,aAC7C/Y,KAAKolE,iBAAkB,CACxB,CAESS,oBACR7lE,KAAK0kE,YAAY5M,cAAch/C,UAAUG,OAAO,eAChDjZ,KAAK0kE,YAAY5M,cAAch/C,UAAUG,OAAO,aAChDjZ,KAAKolE,iBAAkB,CACxB,CAESL,aACR/kE,KAAKmmE,aAAc,CACpB,+CApJmB1B,GAAoBxgE,+DAApBwgE,EAAoBlwD,kGAApBC,cAAY,mCAAZA,eAAkB,6BAAlBA,WAAS,8ZAATiwD,CAAtB,gWCJAxgE,gBAA6BA,yDAASA,0BAAiB,GACrDA,6BAEEA,iCAASuV,mBAAwB,EAAjCvV,CAAkC,qDACvBA,iCAAwB,EADnCA,CAAkC,sDAExBA,QAASqiE,qBAAoB,KAAI,GAO7CriE,kCANEA,gFAiBAA,kBAAqE,eAC3DA,0DAASA,sBAAa,GAC5BA,uBACFA,mCAFqEA,gDAArCA,gEAKhCA,iDAEEA,wDAAgD,iEAAhDA,CAAgD,mCAAhDA,CAAgD,mCAAhDA,CAAgD,6DAMlDA,iDAEEA,kDAA0C,2DAA1CA,CAA0C,6BAA1CA,CAA0C,6BAA1CA,CAA0C,8IAzBlDA,oBAGEA,yDAASA,gBAAO,EAAhBA,CAAiB,sDACLA,mBAAU,GAItBA,kBACEA,wBAKAA,eACEA,iCAQAA,iCAQAA,SACFA,oCA3BFA,gEAIQA,0CAODA,+CAQAA,kFA2BLA,kBAAqE,eAC3DA,0DAASA,sBAAa,GAC5BA,uBACFA,mCAFqEA,gDAArCA,gMAhBtCA,iBAEEA,yDAASA,gBAAO,EAAhBA,CAAiB,sDACLA,mBAAU,GAStBA,2BAA8D,qBAE9DA,kBACEA,wBAKAA,WACFA,kCAjBAA,qHAQcA,iDACAA,2CAENA,oFAwBNA,kBAAuE,eAC7DA,0DAASA,wBAAe,GAC9BA,uBACFA,mCAFyEA,kDAAvCA,mFAhBxCA,iBAEEA,yDAASA,gBAAO,EAAhBA,CAAiB,sDACLA,mBAAU,GAStBA,2BAA8D,qBAE9DA,kBACEA,yBAKAA,WACFA,kCAjBAA,yHAQcA,iDACAA,2CAENA,sFAwBNA,kBAAsE,eAC5DA,0DAASA,uBAAc,GAC7BA,uBACFA,mCAFuEA,iDAAtCA,kFAhBvCA,iBAEEA,yDAASA,gBAAO,EAAhBA,CAAiB,sDACLA,mBAAU,GAStBA,2BAA8D,qBAE9DA,kBACEA,yBAKAA,WACFA,kCAjBAA,uHAQcA,iDACAA,2CAENA,oFAmBNA,kBAAsE,eAC5DA,0DAASA,uBAAc,GAC7BA,uBACFA,mCAFuEA,iDAAtCA,6KAXvCA,iBAEEA,yDAASA,gBAAO,EAAhBA,CAAiB,sDACLA,mBAAU,GAItBA,2BAA8D,qBAE9DA,kBACEA,wBAKAA,WACFA,kCAZAA,4FAGcA,iDACAA,2CAENA,qFAmBNA,kBAAqE,eAC3DA,0DAASA,sBAAa,GAC5BA,uBACFA,mCAFqEA,gDAArCA,iFAXtCA,iBAEEA,yDAASA,gBAAO,EAAhBA,CAAiB,sDACLA,mBAAU,GAItBA,2BAA8D,qBAE9DA,kBACEA,yBAKAA,WACFA,kCAZAA,gEAGcA,iDACAA,2CAENA,2IASVA,iBAEEA,yDAASA,4BAAmB,EAA5BA,CAA6B,sDACjBA,mBAAU,GAItBA,2BAA8D,qBAE9DA,kBAAqC,YAEjCA,WACFA,oCARFA,kDAGcA,iDACAA,yXCnJT,IAAMsiE,GAAb,MAAM,MAAOA,UAA4B9B,IA2DvC1kE,YAAmB4rD,EAAyC+Y,GAAyB8B,GACnFj0D,MAAMo5C,EAAqB+Y,GAAa8B,GAzD1BxmE,uBAAmB,EAElBA,0BAAuB,IAAIuT,MAG3BvT,uBAAoB,IAAIuT,MAIxBvT,uBAAoB,IAAIuT,MAIxBvT,sBAAmB,IAAIuT,MAExBvT,6BAAyB,EACzBA,qCAAiC,EAIjCA,mCAA+B,EAC/BA,2CAAuC,EAMtCA,sBAAmB,IAAIuT,MAIvBvT,wBAAqB,IAAIuT,MAIzBvT,sBAAmB,IAAIuT,MAGxBvT,uBAAmB,EAEnBA,mBAAe,EAEfA,gCAA4B,EAC5BA,gCAA4B,EAC5BA,8BAA0B,EAC1BA,iCAA6B,EAC7BA,+BAA2B,EAC3BA,+BAA2B,EAC3BA,6BAAyB,EAIzBA,yBAAqB,EAEpBA,0BAAuB,IAAIuT,KAI3C,CAEMkzD,eACLzmE,KAAK0mE,kBAAkBhzD,MACxB,CAEMizD,eACL3mE,KAAK4mE,kBAAkBlzD,MACxB,CAEMmzD,cACL7mE,KAAK8mE,iBAAiBpzD,MACvB,CAEMqzD,cACL/mE,KAAKgnE,iBAAiBtzD,MACvB,CAEMuzD,gBACLjnE,KAAKknE,mBAAmBxzD,MACzB,CAEMyzD,cACLnnE,KAAKonE,iBAAiB1zD,MACvB,CAEM2zD,yBACLrnE,KAAK6kE,kBACN,CAEMyC,WACDtnE,KAAKunE,iBACPvnE,KAAKwnE,UAAUnzD,QAEfrU,KAAK0kE,YAAY5M,cAAczjD,OAElC,CAEMozD,kBACLznE,KAAK8kE,qBACN,CAEM4C,kBACL1nE,KAAK2nE,qBAAqBj0D,MAC3B,+CAzGU6yD,GAAmBtiE,+DAAnBsiE,EAAmBhyD,oyHDrBhCtQ,sBAcAA,sBAoCAA,uBAwBAA,uBAwBAA,uBAwBAA,uBAmBAA,uBAmBAA,8BAhKKA,kCAeFA,kCAoCAA,kCAwBAA,oCAwBAA,mCAwBAA,mCAmBAA,kCAmBAA,y8FC5IUsiE,CAAb,4ICKO,IAAMhC,EAAb,MAAM,MAAOA,kDAAgB,0BAAhBA,gCAdT7yD,KAKAu7C,gBAA4B,CAAEC,oBAAoB,IAClDwD,IACApoC,KACAD,KACAu/C,KACAza,QAISoX,CAAb,+GCfO,IAAMtjB,EAAb,MAAM,MAAOA,EAUXlhD,YACU8nE,EACA/iE,EACD4P,EACkB8qC,GAHjBx/C,4BACAA,sBACDA,iBAXQA,gBAAa,IAAIuT,MACjBvT,qCAAkC,IAAIuT,MACtCvT,qCAAkC,IAAIuT,MACtCvT,qCAAkC,IAAIuT,MACtCvT,qCAAkC,IAAIuT,MACtCvT,qCAAkC,IAAIuT,MACtCvT,qCAAkC,IAAIuT,MAQrDvT,KAAKw/C,kCAAoCA,EAEzCx/C,KAAKyT,WAAWjO,UAAU,KACxBkP,EAAUS,OAAV,GAIAnV,KAAKw/C,kCAAkCE,iBAAiBQ,cACxDV,EAAkCY,4BAElCpgD,KAAK8nE,gCAAgCtiE,UAAU,KAC7CxF,KAAK6nE,qBACF3yC,0BAA0BsqB,EAAkCY,4BAC5D56C,UAAW8mB,IACNA,GACFtsB,KAAK8E,eAAeggB,8BAA8B06B,EAAkCc,eAApF,EAJN,GAUFtgD,KAAKw/C,kCAAkCE,iBAAiBa,cACxDf,EAAkCgB,4BAElCxgD,KAAK+nE,gCAAgCviE,UAAU,KAC7CxF,KAAK6nE,qBACF3yC,0BAA0BsqB,EAAkCgB,4BAC5Dh7C,UAAW8mB,IACNA,GACFtsB,KAAK8E,eAAeggB,8BAA8B06B,EAAkCiB,eAApF,EAJN,GAUFzgD,KAAKw/C,kCAAkCE,iBAAiBgB,cACxDlB,EAAkCmB,4BAElC3gD,KAAKgoE,gCAAgCxiE,UAAU,KAC7CxF,KAAK6nE,qBACF3yC,0BAA0BsqB,EAAkCmB,4BAC5Dn7C,UAAW8mB,IACNA,GACFtsB,KAAK8E,eAAeggB,8BAA8B06B,EAAkCoB,eAApF,EAJN,GAUF5gD,KAAKw/C,kCAAkCE,iBAAiBmB,cACxDrB,EAAkCuB,4BAElC/gD,KAAKioE,gCAAgCziE,UAAU,KAC7CxF,KAAK6nE,qBACF3yC,0BAA0BsqB,EAAkCuB,4BAC5Dv7C,UAAW8mB,IACNA,GACFtsB,KAAK8E,eAAeggB,8BAA8B06B,EAAkCwB,eAApF,EAJN,GAUFhhD,KAAKw/C,kCAAkCE,iBAAiBwoB,cACxD1oB,EAAkC2oB,4BAElCnoE,KAAKooE,gCAAgC5iE,UAAU,KAC7CxF,KAAK6nE,qBACF3yC,0BAA0BsqB,EAAkC2oB,4BAC5D3iE,UAAW8mB,IACNA,GACFtsB,KAAK8E,eAAeggB,8BAA8B06B,EAAkC6oB,eAApF,EAJN,GAUFroE,KAAKw/C,kCAAkCE,iBAAiB4oB,cACxD9oB,EAAkC+oB,4BAElCvoE,KAAKwoE,gCAAgChjE,UAAU,KAC7CxF,KAAK6nE,qBACF3yC,0BAA0BsqB,EAAkC+oB,4BAC5D/iE,UAAW8mB,IACNA,GACFtsB,KAAK8E,eAAeggB,8BAA8B06B,EAAkCipB,eAApF,EAJN,EASL,+CA1GUxnB,GAA0Ch9C,wCAc3CyR,MAAe,0BAddurC,EAA0C1sC,g2BCZvDtQ,oCACEA,qCAAcuQ,mBAAiB,EAA/BvQ,CAAgC,wCACTuQ,wCAAsC,EAD7DvQ,CAAgC,wCAETuQ,wCAAsC,EAF7DvQ,CAAgC,wCAGTuQ,wCAAsC,EAH7DvQ,CAAgC,wCAITuQ,wCAAsC,EAJ7DvQ,CAAgC,wCAKTuQ,wCAAsC,EAL7DvQ,CAAgC,wCAMTuQ,wCAAsC,GAQ/DvQ,cAPEA,+EAAuE,oEAAvEA,CAAuE,oEAAvEA,CAAuE,gEAAvEA,CAAuE,gEAAvEA,CAAuE,mGDI5Dg9C,CAAb,kEETM,MAAOynB,GCAP,MAAO/oB,EACQvlC,eACjB,MAAMolC,EAAoC,IAAIkpB,EAC9ClpB,SAAkCE,iBAAmBoW,YACrDtW,EAAkCE,iBAAiBrG,MAAQ,yCACpDmG,CACR,EANsD,gDCDnD,MAAO2C,EAGXpiD,YAAmB4oE,GACjB3oE,KAAK2oE,KAAOA,CACb,EALqB,+PCWjB,IAAMC,EAAb,MAAM,MAAOA,EAUX7oE,YAA2BqX,EAA4B9D,EAAqCysD,GAAjE//D,eAA4BA,qBAAqCA,2BAT3EA,qBAAkB,IAAIuT,MACtBvT,2BAAwB,IAAIuT,MAC5BvT,4BAAyB,IAAIuT,KAOyF,CAEhIs1D,uBAAuBh9D,GAE5B7L,KAAKkiD,aAAaymB,KAAK/kE,QAAQ,CAACy6C,EAAK1/B,KAC/B0/B,EAAIxyC,OAASA,EACfwyC,EAAI4mB,UAEJjlE,KAAKo/D,gBAAkBzgD,GAG5B,CAEMsgD,aAAatgD,GAElB3e,KAAKkiD,aAAaymB,KAAK/kE,QAASy6C,IAC9BA,EAAI4mB,SAAJ,GAEFjlE,KAAKsT,cAAcY,yBAAyB,KAC1ClU,KAAKo/D,gBAAkBzgD,EACvB3e,KAAKkiD,aAAaymB,KAAK3oE,KAAKo/D,kBAAkBkI,UAA9C,EAEH,CAEMwB,WAEL9oE,KAAKkiD,aAAaymB,KAAK/kE,QAASy6C,IAC9BA,EAAI4mB,SAAJ,GAEFjlE,KAAKo/D,gBAAkB,IACxB,CAIM2J,WAAWvvD,GAChB,MAAMiS,EAAQjS,EAAOI,OACjB6R,IAAyB,SAAfA,EAAMtpB,MAAmC,KAAfspB,EAAMtpB,OAAgBspB,EAAMu9C,aAGpExvD,EAAOO,iBACP/Z,KAAKipE,gBAAgBv1D,OACtB,CAIMw1D,cAAc1vD,GACnBA,EAAOO,iBACP/Z,KAAKipE,gBAAgBv1D,MACtB,CAIMy1D,iBAAiB3vD,GACtB,GAAIxZ,KAAKopE,aAAa5vD,GAAS,CAC7B,MAAMiS,EAAQjS,EAAOI,OACrB,GAAI6R,IAAyB,UAAfA,EAAMtpB,MAAuC,eAAnBspB,EAAM3R,UAC5C,OAEF,IAAIuvD,EAAgBrpE,KAAKo/D,gBAIvBiK,EAHGA,GAAqC,IAAlBA,GAGLA,EAAgB,GAAKrpE,KAAKkiD,aAAaymB,KAAKx5D,OAF7C,EAKlBnP,KAAKi/D,aAAaoK,EACnB,CACF,CAIMC,iBAAiB9vD,GACtB,GAAIxZ,KAAKopE,aAAa5vD,GAAS,CAC7B,MAAMiS,EAAQjS,EAAOI,OACrB,GAAI6R,IAAyB,SAAfA,EAAMtpB,MAAmC,KAAfspB,EAAMtpB,OAAgBspB,EAAMu9C,WAClE,OAGF,GAAIhpE,KAAKupE,mBAAoB,CAC3B,MAAMF,EAAgBrpE,KAAKupE,mBAAmBj6C,UAAY,EACtD+5C,GAAiB,IACnBrpE,KAAKupE,mBAAmBj6C,UAAY+5C,EACpCrpE,KAAKwpE,sBAAsB91D,OAE9B,CACF,CACF,CAIM+1D,kBAAkBjwD,GACvB,GAAIxZ,KAAKopE,aAAa5vD,GAAS,CAC7B,MAAMiS,EAAQjS,EAAOI,OACrB,GAAI6R,IAAyB,SAAfA,EAAMtpB,MAAmC,KAAfspB,EAAMtpB,OAAgBspB,EAAMu9C,WAClE,OAGF,GAAIhpE,KAAKupE,mBAAoB,CAC3B,MAAM3hC,EAAY5nC,KAAKupE,mBAAmBj6C,UAAY,EAClDtvB,KAAKupE,mBAAmB/7C,UAAiD,IAArCxtB,KAAKupE,mBAAmB/7C,UAE1Doa,EADa5nC,KAAKiiD,WAAajiD,KAAKupE,mBAAmB/7C,WAEzDxtB,KAAKupE,mBAAmBj6C,UAAYsY,EACpC5nC,KAAK0pE,uBAAuBh2D,OAGjC,CACF,CACF,CAIMi2D,eAAenwD,GACpB,GAAIxZ,KAAKopE,aAAa5vD,GAAS,CAC7B,MAAMiS,EAAQjS,EAAOI,OACrB,GAAI6R,IAAyB,UAAfA,EAAMtpB,MAAuC,eAAnBspB,EAAM3R,UAC5C,OAEFN,EAAOO,iBACP,IAAI6tB,EAAY5nC,KAAKo/D,gBAChBx3B,GAA6B,IAAdA,GAGlBA,GAAwB,EACpBA,EAAY,IACdA,EAAY5nC,KAAKkiD,aAAaymB,KAAKx5D,OAAS,IAJ9Cy4B,EAAY5nC,KAAKkiD,aAAaymB,KAAKx5D,OAAS,EAO9CnP,KAAKi/D,aAAar3B,EACnB,CACF,CAIMgiC,aAAapwD,GAClB,IAAKxZ,KAAKo/D,iBAA4C,IAAzBp/D,KAAKo/D,kBAA0Bp/D,KAAK6pE,OAAO/R,cAAcgS,SAASlxD,SAASiB,eAAgB,CACtH,MAAM4R,EAAQjS,EAAOI,OACrB,GAAI6R,IAAyB,WAAfA,EAAMtpB,MAAoC,WAAfspB,EAAMtpB,MAC7C,OAGFnC,KAAKkiD,aAAaymB,KAAK3oE,KAAKo/D,iBAAiB2K,kBAAkBr2D,MAChE,CACF,CAGM+zB,WAAWhiC,GAChB,MAAMukE,EAAgBvkE,EAAMmU,OAGxBowD,IAAkBhqE,KAAK6pE,OAAO/R,cAAcgS,SAASE,IACvDhqE,KAAK8oE,UAER,CAGM/C,QAAQtgE,GACb,MAAMukE,EAAgBvkE,EAAMmU,OAGxBowD,IAAkBhqE,KAAK6pE,OAAO/R,cAAcgS,SAASE,IACvDhqE,KAAK8oE,UAER,CAEMM,aAAa5vD,GAElB,GAAIxZ,KAAK+/D,oBAAoBe,uBAC3B,OAAO,EAIT,GAAI9gE,KAAKoX,QAAQqiD,YAAYtqD,OAAS,EAMpC,KAJsBnP,KAAK6pE,OAAO/R,cAAcmS,QAAQ,qBAKtD,OAAO,EAKPzwD,EAAOO,gBALA,CAQX,OAAO,CACR,+CAtMU6uD,GAAqB3kE,4DAArB2kE,EAAqBr0D,mMAArBC,eAAkB,iDAAlBA,eAAkB,+CAAlBA,kBAAqB,qDAArBA,kBAAqB,mDAArBA,qBACb,2DADaA,qBACb,mDADaA,qBACb,2DADaA,qBACb,oDADaA,sBACZ,4DADYA,sBACZ,iDADYA,mBAAsB,yDAAtBA,mBAAsB,+CAAtBA,iBAAoB,8CAApBA,iBAAoB,oCAApBA,eAAkB,uCAAlBA,YAAe,2VCb5BvQ,SACAA,wBAAe,WAEXA,WACFA,QACAA,iBACEA,WACFA,QACAA,iBACEA,WACFA,gFDGW2kE,CAAb,8EEJO,IAAMpE,EAAb,MAAM,MAAOA,kDAAkB,0BAAlBA,gCAHD9yD,QAGC8yD,CAAb,8EC6BO,IAAMP,EAAb,MAAM,MAAOA,kDAAgB,0BAAhBA,gCAbDvyD,QAaCuyD,CAAb,mECpCA,MAAMiG,EAAW,WACXC,EAAe,eACfC,EAAY,WAMX,IAAMC,EAAb,MAAM,MAAOA,EAGXtqE,YAA2BuqE,EAA4B3F,GAA5B3kE,cAA4BA,gBAFvCA,iBAAa,CAEiD,CAEvE2T,cACL3T,KAAKuqE,eAAevqE,KAAKsqE,OAAOxS,cACjC,CAEOyS,eAAe5tB,GAsBrB,GArBI38C,KAAKwqE,WACF7tB,EAAQ8tB,aAAaP,KACxBlqE,KAAK2kE,SAASC,aAAajoB,EAASwtB,EAAc,IAClDnqE,KAAK2kE,SAASC,aAAajoB,EAASutB,EAAU,QAlBnC,MAqBPvtB,EAAQ+tB,QAAQC,eAClB3qE,KAAK2kE,SAASC,aAAajoB,EAASytB,EAAW,OAI/CztB,EAAQ8tB,aAAaN,KACgB,KAAnCxtB,EAAQiuB,aAAaV,IACvBvtB,EAAQkuB,gBAAgBX,GAE1BvtB,EAAQkuB,gBAAgBV,GA9Bb,MA+BPxtB,EAAQ+tB,QAAQC,eAClBhuB,EAAQkuB,gBAAgBT,IAI1BztB,EAAQ96C,SACV,UAAWipE,KAAOnuB,EAAQ96C,SACxB7B,KAAKuqE,eAAeO,EAGzB,+CApCUT,GAAgBpmE,oDAAhBomE,EAAgB91D,qFAAhB81D,CAAb,mECJO,IAAMU,EAAb,MAAM,MAAOA,EAGXhrE,YAA2B2kE,qBAA2B,CAK/CsG,cAAcvlE,GACnB,MAAMwlE,EAAWxlE,EAAMmU,OAAOsxD,eACxBhtC,EAAez4B,EAAMmU,OAAOtV,MAAM6mE,WACxC,IAAIniE,EAAS,GACTk1B,EAAK/uB,OAAS,IAChBnG,EAASk1B,EAAK,GAAGuiC,cACbviC,EAAK/uB,OAAS,IAChBnG,GAAUk1B,EAAKhwB,OAAO,EAAGgwB,EAAK/uB,UAIlCnP,KAAKorE,MAAM/hD,SAASrgB,GACpBhJ,KAAK0kE,YAAY5M,cAAcuT,kBAAkBJ,EAAUA,EAC5D,+CArBUF,GAA6B9mE,uCAA7B8mE,EAA6Bx2D,+GAA7BC,kBAAqB,yDAArBu2D,CAAb,8ECHM,MAAOlgC,EAGezwB,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoB93B,WACtCzvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoB93B,YACtCzvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoB93B,WACtCzvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoB93B,UAC/BzvB,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAO69B,KAAkB1+B,SAASy2D,GAAY,CACvD,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQ4iC,mBAAgC7oB,WACrD,OAAO6oB,SACF,GAAI2Z,EAAWv8C,MAAQ4iC,oBAAiC7oB,WAC7D,OAAO6oB,UACF,GAAI2Z,EAAWv8C,MAAQ4iC,mBAAgC7oB,WAC5D,OAAO6oB,SACF,GAAI2Z,EAAWv8C,MAAQ4iC,kBAA+B7oB,WAC3D,OAAO6oB,OAEV,CAGF,CAE0B7qB,qBAAC4iD,GAC1B,OAAIA,IAAc/3B,SACT,WACE+3B,IAAc/3B,UAChB,OACE+3B,IAAc/3B,SAChB,UACE+3B,IAAc/3B,QAChB,kBADF,CAKR,EAlDa4F,yBAAyB,IAAI4F,IAAW,KAAM,kBAArB,0ECDnC,MAAO5F,EAGezwB,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoB93B,iBACtCzvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoB93B,WACtCzvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoB93B,YACtCzvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoB93B,WACtCzvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoB93B,UAC/BzvB,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAO69B,KAAkB1+B,SAASy2D,GAAY,CACvD,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQ4iC,yBAAsC7oB,WAC3D,OAAO6oB,eACF,GAAI2Z,EAAWv8C,MAAQ4iC,mBAAgC7oB,WAC5D,OAAO6oB,SACF,GAAI2Z,EAAWv8C,MAAQ4iC,oBAAiC7oB,WAC7D,OAAO6oB,UACF,GAAI2Z,EAAWv8C,MAAQ4iC,mBAAgC7oB,WAC5D,OAAO6oB,SACF,GAAI2Z,EAAWv8C,MAAQ4iC,kBAA+B7oB,WAC3D,OAAO6oB,OAEV,CAGF,CAE0B7qB,qBAAC4iD,GAC1B,OAAIA,IAAc/3B,eACT,WACE+3B,IAAc/3B,SAChB,WACE+3B,IAAc/3B,UAChB,OACE+3B,IAAc/3B,SAChB,UACE+3B,IAAc/3B,QAChB,kBADF,CAKR,EAvDa4F,yBAAyB,IAAI4F,IAAW,KAAM,kBAArB,mFCAnC,MAAOoJ,EACez/B,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoBnjB,aACtCpkC,EAAQhU,KAAKxB,KAAK+8D,oBAAoBnjB,SACtCpkC,EAAQhU,KAAKxB,KAAK+8D,oBAAoBnjB,UACtCpkC,EAAQhU,KAAKxB,KAAK+8D,oBAAoBnjB,WACtCpkC,EAAQhU,KAAKxB,KAAK+8D,oBAAoBnjB,gBACtCpkC,EAAQ8X,KAAK2kB,+BACNz8B,CACR,CAEgC4E,2BAAC4iD,GAChC,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQu3C,qBAA8Bx9B,WACnD,OAAOw9B,WACF,GAAIgF,EAAWv8C,MAAQu3C,iBAA0Bx9B,WACtD,OAAOw9B,OACF,GAAIgF,EAAWv8C,MAAQu3C,kBAA2Bx9B,WACvD,OAAOw9B,QACF,GAAIgF,EAAWv8C,MAAQu3C,mBAA4Bx9B,WACxD,OAAOw9B,SACF,GAAIgF,EAAWv8C,MAAQu3C,wBAAiCx9B,WAC7D,OAAOw9B,aAEV,CAGF,CAE0Bx/B,qBAAC4iD,GAC1B,OAAIA,IAAcpjB,WACT,UACEojB,IAAcpjB,OAChB,WACEojB,IAAcpjB,QAChB,SACEojB,IAAcpjB,SAChB,QACEojB,IAAcpjB,cAChB,kBADF,CAIR,EAlD4B,oFCAzB,MAAON,EACel/B,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoBuO,aACtC91D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBuO,SACtC91D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBuO,UACtC91D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBuO,WACtC91D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBuO,gBACtC91D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBuO,iBACtC91D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBuO,cACtC91D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBuO,qBACtC91D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBuO,mBACtC91D,EAAQ8X,KAAK2kB,+BACNz8B,CACR,CAEgC4E,2BAAC4iD,GAChC,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WAEnCwiC,EAAWrzB,MADTyxC,IAAcsO,SACG,QAEAtrE,KAAKi9D,cAAcD,GAEjCpe,CACR,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQipE,qBAA+BlvD,WACpD,OAAOkvD,WACF,GAAI1sB,EAAWv8C,MAAQipE,iBAA2BlvD,WACvD,OAAOkvD,OACF,GAAI1sB,EAAWv8C,MAAQipE,kBAA4BlvD,WACxD,OAAOkvD,QACF,GAAI1sB,EAAWv8C,MAAQipE,mBAA6BlvD,WACzD,OAAOkvD,SACF,GAAI1sB,EAAWv8C,MAAQipE,wBAAkClvD,WAC9D,OAAOkvD,cACF,GAAI1sB,EAAWv8C,MAAQipE,yBAAmClvD,WAC/D,OAAOkvD,eACF,GAAI1sB,EAAWv8C,MAAQipE,sBAAgClvD,WAC5D,OAAOkvD,YACF,GAAI1sB,EAAWv8C,MAAQipE,6BAAuClvD,WACnE,OAAOkvD,mBACF,GAAI1sB,EAAWv8C,MAAQipE,2BAAqClvD,WACjE,OAAOkvD,gBAEV,CAGF,CAE0BlxD,qBAACmxD,GAC1B,OAAIA,IAAkBD,WACb,UACEC,IAAkBD,OACpB,WACEC,IAAkBD,QACpB,SACEC,IAAkBD,cACpB,aACEC,IAAkBD,SACpB,GACEC,IAAkBD,eACpB,cACEC,IAAkBD,YACpB,gBACEC,IAAkBD,mBACpB,mBACEC,IAAkBD,iBACpB,uBADF,CAIR,EA1E6B,qFCA1B,MAAO1vB,EACexhC,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoBhtC,6BACtCva,EAAQhU,KAAKxB,KAAK+8D,oBAAoBhtC,8BACtCva,EAAQhU,KAAKxB,KAAK+8D,oBAAoBhtC,gCACtCva,EAAQhU,KAAKxB,KAAK+8D,oBAAoBhtC,0BAE/Bva,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAO2oB,KAA4BxpB,SAASy2D,GAAY,CACjE,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQ0tB,qCAA4D3T,WACjF,OAAO2T,2BACF,GAAI6uB,EAAWv8C,MAAQ0tB,sCAA6D3T,WACzF,OAAO2T,4BACF,GAAI6uB,EAAWv8C,MAAQ0tB,wCAA+D3T,WAC3F,OAAO2T,8BACF,GAAI6uB,EAAWv8C,MAAQ0tB,kCAAyD3T,WACrF,OAAO2T,uBAEV,CAGF,CAE8B3V,yBAAC/T,EAA2BmlE,GACzD,OAAKnlE,KACHA,EAAS,IAAI+2D,KACN1vC,cAAe,GAGxBrnB,EAAOypB,2BAA6B9vB,KAAKyrE,cAAcD,GAChDnlE,CACR,CAE0B+T,qBAAC4iD,GAC1B,OAAIA,IAAcjtC,2BACT,iCACEitC,IAAcjtC,4BAChB,+BACEitC,IAAcjtC,8BAChB,+BACEitC,IAAcjtC,wBAChB,wBADF,CAKR,EA5D0C,oFCAvC,MAAO+gB,EACe12B,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoBrsB,eACtCl7B,EAAQhU,KAAKxB,KAAK+8D,oBAAoBrsB,WACtCl7B,EAAQhU,KAAKxB,KAAK+8D,oBAAoBrsB,iBACtCl7B,EAAQ8X,KAAK2kB,+BACNz8B,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAOspC,KAAgBnqC,SAASy2D,GAAY,CACrD,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQquC,uBAAkCt0B,WACvD,OAAOs0B,aACF,GAAIkO,EAAWv8C,MAAQquC,mBAA8Bt0B,WAC1D,OAAOs0B,SACF,GAAIkO,EAAWv8C,MAAQquC,yBAAoCt0B,WAChE,OAAOs0B,cAEV,CAEF,CAE0Bt2B,qBAAC4iD,GAC1B,OAAIA,IAActsB,aACT,aACEssB,IAActsB,SAChB,aACEssB,IAActsB,eAChB,gBADF,CAIR,EA3C8B,qFCA3B,MAAOg7B,EACetxD,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoB4O,cACtCn2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoB4O,qBACtCn2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoB4O,cACtCn2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoB4O,UACtCn2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoB4O,aAEtCn2D,EAAQ8X,KAAK2kB,+BACNz8B,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAOukE,KAAeplE,SAASy2D,GAAY,CACpD,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQspE,sBAAgCvvD,WACrD,OAAOuvD,YACF,GAAI/sB,EAAWv8C,MAAQspE,6BAAuCvvD,WACnE,OAAOuvD,mBACF,GAAI/sB,EAAWv8C,MAAQspE,sBAAgCvvD,WAC5D,OAAOuvD,YACF,GAAI/sB,EAAWv8C,MAAQspE,kBAA4BvvD,WACxD,OAAOuvD,QACF,GAAI/sB,EAAWv8C,MAAQspE,qBAA+BvvD,WAC3D,OAAOuvD,UAIV,CAEF,CAEkCvxD,6BAAC4iD,GAClC,OAAIA,IAAc2O,YACT,EACE3O,IAAc2O,mBAChB,EACE3O,IAAc2O,YAChB,EACE3O,IAAc2O,QAChB,EACE3O,IAAc2O,WAChB,OADF,CAKR,CAE0BvxD,qBAAC4iD,GAC1B,OAAIA,IAAc2O,YACT,UACE3O,IAAc2O,mBAChB,uBACE3O,IAAc2O,YAChB,eACE3O,IAAc2O,QAChB,cACE3O,IAAc2O,WAChB,oBADF,CAOR,CAEoCvxD,+BAAC4iD,GACpC,OAAIA,IAAc2O,YACT,oBACE3O,IAAc2O,mBAChB,4BACE3O,IAAc2O,YAChB,oBACE3O,IAAc2O,QAChB,gBACE3O,IAAc2O,WAChB,wBADF,CAOR,EA7F6B,qFCA1B,MAAOC,EACexxD,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoB8O,UACtCr2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoB8O,UACtCr2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoB8O,kBACtCr2D,EAAQ8X,KAAK2kB,+BACNz8B,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAOykE,KAAiBtlE,SAASy2D,GAAY,CACtD,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQwpE,kBAA8BzvD,WACnD,OAAOyvD,QACF,GAAIjtB,EAAWv8C,MAAQwpE,kBAA8BzvD,WAC1D,OAAOyvD,QACF,GAAIjtB,EAAWv8C,MAAQwpE,0BAAsCzvD,WAClE,OAAOyvD,eAEV,CAGF,CAE0BzxD,qBAAC4iD,GAC1B,OAAIA,IAAc6O,QACT,MACE7O,IAAc6O,QAChB,MACE7O,IAAc6O,gBAChB,aADF,CAIR,EA5C+B,qFCA5B,MAAOC,EACe1xD,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoBgP,uBACtCv2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBgP,YACtCv2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBgP,YACtCv2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBgP,WACtCv2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBgP,8BACtCv2D,EAAQhU,KAAKxB,KAAK+8D,oBAAoBgP,UACtCv2D,EAAQ8X,KAAK2kB,+BACNz8B,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAO2kE,KAAaxlE,SAASy2D,GAAY,CAClD,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQ0pE,mBAA2B3vD,WAChD,OAAO2vD,SACF,GAAIntB,EAAWv8C,MAAQ0pE,sCAA8C3vD,WAC1E,OAAO2vD,4BACF,GAAIntB,EAAWv8C,MAAQ0pE,oBAA4B3vD,WACxD,OAAO2vD,UACF,GAAIntB,EAAWv8C,MAAQ0pE,oBAA4B3vD,WACxD,OAAO2vD,UACF,GAAIntB,EAAWv8C,MAAQ0pE,kBAA0B3vD,WACtD,OAAO2vD,OAEV,CAGF,CAE0B3xD,qBAAC4iD,GAC1B,OAAIA,IAAc+O,SACT,2BACE/O,IAAc+O,4BAChB,iBACE/O,IAAc+O,UAChB,qBACE/O,IAAc+O,UAChB,oBACE/O,IAAc+O,QAChB,0BACE/O,IAAc+O,qBAChB,gCADF,CAIR,EAzD2B,+DCFxB,MAAO/3C,EACuC5Z,4CAACjL,EAAgBykB,GACjE,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoBu4C,aACtBH,EAAM,CACJC,UAAW,UAAU98D,qBACrB+8D,YAAa,UAAU/8D,sBAIXA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAEuC9xD,kCAACjL,EAAgBykB,GACvD,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoBu4C,aACtBH,EAAM,CACJC,UAAW,mBAAmB98D,wCAC9B+8D,YAAa,mBAAmB/8D,yCAIpBA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAE0B9xD,qBAAC4iD,EAA0BoP,GAAa,GACjE,GAAIpP,IAAcmP,WAChB,OAAOC,EAAa,mBAAqB,iBAG5C,EAlC6B,+DCA1B,MAAOr4C,EACuC3Z,4CAACjL,EAAgBykB,GACjE,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAC3F,OACEo0D,EADEp4C,IAAoBy4C,2BAChB,CACJJ,UAAW,UAAU98D,sBACrB+8D,YAAa,UAAU/8D,sBAEhBykB,IAAoBy4C,2BACvB,CACJJ,UAAW,UAAU98D,oCACrB+8D,YAAa,UAAU/8D,oCAEhBykB,IAAoBy4C,8BACvB,CACJJ,UAAW,UAAU98D,mCACrB+8D,YAAa,UAAU/8D,mCAEhBykB,IAAoBy4C,qCACvB,CACJJ,UAAW,UAAU98D,4CACrB+8D,YAAa,UAAU/8D,4CAEhBykB,IAAoBy4C,oCACvB,CACJJ,UAAW,UAAU98D,8CACrB+8D,YAAa,UAAU/8D,8CAEhBykB,IAAoBy4C,+BAKpBz4C,IAAoBy4C,8BAJvB,CACJJ,UAAW,UAAU98D,+BACrB+8D,YAAa,UAAU/8D,+BAQnB,CACJ88D,UAAW,UAAU98D,sBACrB+8D,YAAa,UAAU/8D,sBAGXA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAEuC9xD,kCAACjL,EAAgBykB,GACvD,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAC3F,OAAIgc,IAAoBy4C,2BACtBL,EAAM,CACJC,UAAW,mBAAmB98D,mDAC9B+8D,YAAa,mBAAmB/8D,mDAEzBykB,IAAoBy4C,2BAC7BL,EAAM,CACJC,UAAW,mBAAmB98D,iEAC9B+8D,YAAa,mBAAmB/8D,iEAEzBykB,IAAoBy4C,8BAC7BL,EAAM,CACJC,UAAW,mBAAmB98D,gEAC9B+8D,YAAa,mBAAmB/8D,gEAEzBykB,IAAoBy4C,qCAC7BL,EAAM,CACJC,UAAW,mBAAmB98D,yEAC9B+8D,YAAa,mBAAmB/8D,yEAEzBykB,IAAoBy4C,oCAC7BL,EAAM,CACJC,UAAW,mBAAmB98D,8CAC9B+8D,YAAa,mBAAmB/8D,+CAEzBykB,IAAoBy4C,+BAKpBz4C,IAAoBy4C,iCAJ7BL,EAAM,CACJC,UAAW,mBAAmB98D,6DAC9B+8D,YAAa,mBAAmB/8D,8DASpBA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAE0B9xD,qBAAC4iD,EAAgCoP,GAAa,GACvE,OAAIpP,IAAcqP,2BACTD,EAAa,oBAAsB,mBACjCpP,IAAcqP,2BAChBD,EAAa,kCAAoC,iCAC/CpP,IAAcqP,8BAChBD,EAAa,iCAAmC,gCAC9CpP,IAAcqP,qCAChBD,EAAa,0CAA4C,yCACvDpP,IAAcqP,oCAChBD,EAAa,4CAAqC,2CAChDpP,IAAcqP,8BAChBD,EAAa,oCAAsC,mCACjDpP,IAAcqP,8BAChBD,EAAa,oCAAsC,wCADrD,CAIR,EA5GmC,+DCAhC,MAAOn4C,EACuC7Z,4CAACjL,EAAgBykB,GACjE,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoB04C,iBAAkC14C,IAAoB04C,0BAC5EN,EAAM,CACJC,UAAW,UAAU98D,oBACrB+8D,YAAa,UAAU/8D,qBAEhBykB,IAAoB04C,8BAKpB14C,IAAoB04C,gCAJ7BN,EAAM,CACJC,UAAW,UAAU98D,6BACrB+8D,YAAa,UAAU/8D,8BASXA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAEuC9xD,kCAACjL,EAAgBykB,GACvD,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoB04C,2BAKb14C,IAAoB04C,gBAJ7BN,EAAM,CACJC,UAAW,mBAAmB98D,iDAC9B+8D,YAAa,mBAAmB/8D,kDAOzBykB,IAAoB04C,8BAKpB14C,IAAoB04C,gCAJ7BN,EAAM,CACJC,UAAW,mBAAmB98D,0DAC9B+8D,YAAa,mBAAmB/8D,2DASpBA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAE0B9xD,qBAAC4iD,EAA+BoP,GAAa,GACtE,OAAIpP,IAAcsP,2BAEPtP,IAAcsP,gBADhBF,EAAa,kBAAoB,iBAG/BpP,IAAcsP,6BAChBF,EAAa,kCAAoC,iCAC/CpP,IAAcsP,6BAChBF,EAAa,kCAAoC,sCADnD,CAIR,EAjEkC,+DCA/B,MAAOl4C,EACuC9Z,4CAACjL,EAAgBykB,GACjE,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoB24C,aAA0B34C,IAAoB24C,gBACpEP,EAAM,CACJC,UAAW,UAAU98D,aACrB+8D,YAAa,UAAU/8D,aAEhBykB,IAAoB24C,iCAC7BP,EAAM,CACJC,UAAW,UAAU98D,uBACrB+8D,YAAa,UAAU/8D,uBAEhBykB,IAAoB24C,6CAC7BP,EAAM,CACJC,UAAW,UAAU98D,oDACrB+8D,YAAa,UAAU/8D,mDAIXA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAEuC9xD,kCAACjL,EAAgBykB,GACvD,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoB24C,aAA0B34C,IAAoB24C,gBACpEP,EAAM,CACJC,UAAW,mBAAmB98D,0CAC9B+8D,YAAa,mBAAmB/8D,0CAEzBykB,IAAoB24C,iCAC7BP,EAAM,CACJC,UAAW,mBAAmB98D,oDAC9B+8D,YAAa,mBAAmB/8D,oDAEzBykB,IAAoB24C,6CAC7BP,EAAM,CACJC,UAAW,mBAAmB98D,iFAC9B+8D,YAAa,mBAAmB/8D,gFAIpBA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAE0B9xD,qBAAC4iD,EAA2BoP,GAAa,GAClE,OAAIpP,IAAcuP,aAA0BvP,IAAcuP,gBACjDH,EAAa,0BAAyB,wBACpCpP,IAAcuP,2CAChBH,EAAa,iDAA6C,+CACxDpP,IAAcuP,iCAChBH,EAAa,qBAAoB,yBADnC,CAIR,EA1D8B,+DCA3B,MAAOj4C,EACuC/Z,4CAACjL,EAAgBykB,GACjE,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoB+D,aACtBq0C,EAAM,CACJC,UAAW,UAAU98D,wBACrB+8D,YAAa,UAAU/8D,uBAEhBykB,IAAoB+D,oCAC7Bq0C,EAAM,CACJC,UAAW,UAAU98D,uBACrB+8D,YAAa,UAAU/8D,wBAIXA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAEuC9xD,kCAACjL,EAAgBykB,GACvD,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoB+D,aACtBq0C,EAAM,CACJC,UAAW,mBAAmB98D,4CAC9B+8D,YAAa,mBAAmB/8D,4CAEzBykB,IAAoB+D,oCAC7Bq0C,EAAM,CACJC,UAAW,mBAAmB98D,oDAC9B+8D,YAAa,mBAAmB/8D,qDAIpBA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAE0B9xD,qBAAC4iD,EAA4BoP,GAAa,GACnE,OAAIpP,IAAcrlC,aACTy0C,EAAa,qBAAuB,oBAClCpP,IAAcrlC,kCAChBy0C,EAAa,qBAAoB,yBADnC,CAIR,EA9C+B,+DCA5B,MAAOh4C,EACuCha,4CAACjL,EAAgBykB,GACjE,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoB44C,YACtBR,EAAM,CACJC,UAAW,UAAU98D,UACrB+8D,YAAa,UAAU/8D,YAGXA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAEuC9xD,kCAACjL,EAAgBykB,GACvD,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoB44C,YACtBR,EAAM,CACJC,UAAW,mBAAmB98D,uCAC9B+8D,YAAa,mBAAmB/8D,yCAIpBA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAE0B9xD,qBAAC4iD,EAAyBoP,GAAa,GAChE,GAAIpP,IAAcwP,UAChB,MAAoB,OAGvB,EAjC4B,+DCAzB,MAAOn4C,EACuCja,4CAACjL,EAAgBykB,GACjE,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAE3F,OAAIgc,IAAoB64C,wBAKb74C,IAAoB64C,aAJ7BT,EAAM,CACJC,UAAW,UAAU98D,oBACrB+8D,YAAa,UAAU/8D,qBAOhBykB,IAAoB64C,2BAKpB74C,IAAoB64C,6BAJ7BT,EAAM,CACJC,UAAW,UAAU98D,6BACrB+8D,YAAa,UAAU/8D,8BASXA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAEuC9xD,kCAACjL,EAAgBykB,GACvD,IAAIo4C,EAAkD,CAAEC,eAAWr0D,EAAWs0D,iBAAat0D,GAC3F,OAAIgc,IAAoB64C,wBAKb74C,IAAoB64C,aAJ7BT,EAAM,CACJC,UAAW,mBAAmB98D,iDAC9B+8D,YAAa,mBAAmB/8D,kDAOzBykB,IAAoB64C,2BAKpB74C,IAAoB64C,6BAJ7BT,EAAM,CACJC,UAAW,mBAAmB98D,0DAC9B+8D,YAAa,mBAAmB/8D,2DASpBA,EAAS,EAAI68D,EAAIC,UAAYD,EAAIE,WAElD,CAE0B9xD,qBAAC4iD,EAA4BoP,GAAa,GACnE,OAAIpP,IAAcyP,aACTL,EAAa,kBAAoB,iBAC/BpP,IAAcyP,0BAChBL,EAAa,kCAAoC,iCAC/CpP,IAAcyP,0BAChBL,EAAa,kCAAoC,sCADnD,CAIR,EAnE+B,0ECC5B,MAAOrhC,EACe3wB,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoBh4B,iBACtCvvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoBh4B,mBACtCvvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoBh4B,kBAC/BvvB,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAO29B,KAA4Bx+B,SAASy2D,GAAY,CACjE,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQ0iC,yBAAgD3oB,WACrE,OAAO2oB,eACF,GAAI6Z,EAAWv8C,MAAQ0iC,2BAAkD3oB,WAC9E,OAAO2oB,iBACF,GAAI6Z,EAAWv8C,MAAQ0iC,0BAAiD3oB,WAC7E,OAAO2oB,eAEV,CAGF,CAE0B3qB,qBAAC4iD,GAC1B,OAAIA,IAAcj4B,eACT,gBACEi4B,IAAcj4B,iBAChB,qBACEi4B,IAAcj4B,gBAChB,uCADF,CAKR,EA5C0C,wECAvC,MAAOiP,EACe55B,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoBtqB,mBACtCj9B,EAAQhU,KAAKxB,KAAK+8D,oBAAoBtqB,kBAC/Bj9B,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAOqrC,KAAkClsC,SAASy2D,GAAY,CACvE,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQowC,2BAAwDr2B,WAC7E,OAAOq2B,iBACF,GAAImM,EAAWv8C,MAAQowC,0BAAuDr2B,WACnF,OAAOq2B,eAEV,CAGF,CAE0Br4B,qBAAC4iD,GAC1B,OAAIA,IAAcvqB,iBACT,qBACEuqB,IAAcvqB,gBAChB,4BADF,CAKR,EAvCgD,0ECA7C,MAAOzH,EACe5wB,sBACxB,MAAM5E,EAAU,IAAIpQ,MACpBoQ,SAAQhU,KAAKxB,KAAK+8D,oBAAoB/3B,kBACtCxvB,EAAQhU,KAAKxB,KAAK+8D,oBAAoB/3B,mBAC/BxvB,CACR,CAEgC4E,2BAAC4iD,GAChC,GAAI5hD,OAAOhU,OAAO49B,KAA6Bz+B,SAASy2D,GAAY,CAClE,MAAMpe,EAAa,IAAInO,IACvBmO,SAAWv8C,IAAM26D,EAAUhuB,UAAU5yB,WACrCwiC,EAAWrzB,MAAQvrB,KAAKi9D,cAAcD,GAC/Bpe,CACR,CACC,OAAO,IAEV,CAE0BxkC,qBAACwkC,GAC1B,GAAIA,EAAY,CACd,GAAIA,EAAWv8C,MAAQ2iC,0BAAkD5oB,WACvE,OAAO4oB,gBACF,GAAI4Z,EAAWv8C,MAAQ2iC,2BAAmD5oB,WAC/E,OAAO4oB,gBAEV,CAGF,CAE0B5qB,qBAAC4iD,GAC1B,OAAIA,IAAch4B,gBACT,uBACEg4B,IAAch4B,iBAChB,0BADF,CAKR,EAvC2C,+DCDxC,MAAO0nC,EACgBtyD,qBAAC4iD,GAC1B,OAAIA,IAAc2P,mBACT,gCACE3P,IAAc2P,6BAChB,mCACE3P,IAAc2P,iCAChB,2BACE3P,IAAc2P,yBAChB,oCACE3P,IAAc2P,6BAChB,4BACE3P,IAAc2P,2BAChB,uCACE3P,IAAc2P,2BAChB,oCACE3P,IAAc2P,+BAChB,4BACE3P,IAAc2P,6BAChB,uCACE3P,IAAc2P,qCAChB,6CACE3P,IAAc2P,iDAChB,yCACE3P,IAAc2P,+CAChB,0CACE3P,IAAc2P,iDAChB,6CACE3P,IAAc2P,6CAChB,0CACE3P,IAAc2P,+CAChB,6CACE3P,IAAc2P,+CAEd3P,IAAc2P,6CADhB,sCAGE3P,IAAc2P,iDAEd3P,IAAc2P,+CADhB,kCAGE3P,IAAc2P,mCAEd3P,IAAc2P,iCADhB,oCAGE3P,IAAc2P,qCAEd3P,IAAc2P,mCADhB,gCAGE3P,IAAc2P,+CAChB,wDAEP,CAEH,EArDwC,+DCErC,MAAOxsB,EACgB/lC,qBAAC4iD,EAAkC32D,GAC5D,GAAI22D,IAAcjd,iBAAoC,CACpD,GAAI15C,EAAQ,CACV,GAAIA,EAAO2pC,aACT,MAAO,mBAET,GAAI3pC,EAAO6pC,aACT,MAAO,oBAEV,CAED,MAAO,mBACR,IAAU8sB,IAAcjd,qBAAwC,CAC/D,GAAI15C,EAAQ,CACV,GAAIA,EAAO2pC,aACT,MAAO,gCAET,GAAI3pC,EAAO6pC,aACT,MAAO,iCAEV,CAED,MAAO,gCACR,IAAU8sB,IAAcjd,mCAAsD,CAC7E,GAAI15C,EAAQ,CACV,GAAIA,EAAO2pC,aACT,MAAO,iCAET,GAAI3pC,EAAO6pC,aACT,MAAO,kCAEV,CAED,MAAO,iCACR,IAAU8sB,IAAcjd,gCAAmD,CAC1E,GAAI15C,EAAQ,CACV,GAAIA,EAAO2pC,aACT,MAAO,mCAET,GAAI3pC,EAAO6pC,aACT,MAAO,oCAEV,CAED,MAAO,mCACR,CAAM,GAAI8sB,IAAcjd,gBACvB,MAAO,kBACF,GAAIid,IAAcjd,oBACvB,MAAO,+BACF,GAAIid,IAAcjd,kCACvB,MAAO,gCACF,GAAIid,IAAcjd,+BACvB,MAAO,kCACF,GAAIid,IAAcjd,UACvB,MAAO,QACF,GAAIid,IAAcjd,cACvB,MAAO,qBACF,GAAIid,IAAcjd,4BACvB,MAAO,sBACF,GAAIid,IAAcjd,aACvB,MAAO,kBACF,GAAIid,IAAcjd,iBACvB,MAAO,+BACF,GAAIid,IAAcjd,+BACvB,MAAO,gCACF,GAAIid,IAAcjd,4BACvB,MAAO,kCACF,GAAIid,IAAcjd,aACvB,MAAO,UACF,GAAIid,IAAcjd,oBACvB,MAAO,uBACF,GAAIid,IAAcjd,yBACvB,MAAO,iCACF,GAAIid,IAAcjd,iBACvB,MAAO,aACF,GAAIid,IAAcjd,wBACvB,MAAO,0BACF,GAAIid,IAAcjd,SACvB,MAAO,WACF,GAAIid,IAAcjd,+BACvB,MAAO,wCACF,GAAIid,IAAcjd,aACvB,MAAO,sBACF,GAAIid,IAAcjd,uBACvB,MAAO,oBACF,GAAIid,IAAcjd,oBACvB,MAAO,2BACF,GAAIid,IAAcjd,gBACvB,MAAO,cACF,GAAIid,IAAcjd,2BACvB,MAAO,oCACF,GAAIid,IAAcjd,UACvB,MAAO,UACF,GAAIid,IAAcjd,qBACvB,MAAO,0BACF,GAAIid,IAAcjd,aACvB,MAAO,qBACF,GAAIid,IAAcjd,yBACvB,MAAO,qBACF,GAAIid,IAAcjd,6BACvB,MAAO,kCACF,GAAIid,IAAcjd,wCACvB,MAAO,qCACF,GAAIid,IAAcjd,YACvB,MAAO,0BACF,GAAIid,IAAcjd,wBACvB,MAAO,mBACF,GAAIid,IAAcjd,4BACvB,MAAO,gCACF,GAAIid,IAAcjd,uCACvB,MAAO,mCACF,GAAIid,IAAcjd,oBACvB,MAAO,gCACF,GAAIid,IAAcjd,0BACvB,MAAO,yBACF,GAAIid,IAAcjd,iCACvB,MAAO,4BACF,GAAIid,IAAcjd,WACvB,MAAO,mBACF,GAAIid,IAAcjd,uBACvB,MAAO,6BACF,GAAIid,IAAcjd,2BACvB,MAAO,0CACF,GAAIid,IAAcjd,sCACvB,MAAO,6CACF,GAAIid,IAAcjd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","names":["customAnimation","animation","style","opacity","transform","animate","params","duration","delay","scale","x","y","z","fuseAnimations","trigger","transition","useAnimation","state","query","stagger","animateChild","optional","height","position","top","bottom","left","right","sequence","group","FuseNavigationService","constructor","this","onItemCollapsed","Subject","onItemCollapseToggled","_currentNavigationKey","_onNavigationChanged","BehaviorSubject","_onNavigationRegistered","_onNavigationUnregistered","_onNavigationItemAdded","_onNavigationItemUpdated","_onNavigationItemRemoved","onNavigationChanged","asObservable","onNavigationItemAdded","onNavigationItemRemoved","onNavigationItemUpdated","onNavigationRegistered","onNavigationUnregistered","addNavigationItem","item","id","navigation","getCurrentNavigation","push","next","unshift","parent","getNavigationItem","children","getNavigation","console","warn","getFlatNavigation","flatNavigation","type","url","key","_registry","childItem","getNavigationItemParent","register","error","removeNavigationItem","splice","indexOf","setCurrentNavigation","unregister","updateNavigationItem","properties","navigationItem","merge","factory","FuseSidebarService","getSidebar","sidebar","FuseTranslationLoaderService","_translateService","loadTranslations","args","forEach","locale","setTranslation","lang","data","i0","CustomHttpParamEncoder","decodeKey","decodeURIComponent","decodeValue","value","encodeKey","encodeURIComponent","encodeValue","AuthService","_configurationService","_http","_localStorageService","_notifyService","_oauthService","_router","_sessionStorageService","_workingLaboratoryService","_workingCustomerService","Array","ReplaySubject","authService","events","subscribe","event","OAuthErrorEvent","log","window","addEventListener","validAccessTokenFlag","hasValidAccessToken","_isAuthenticatedSubject$","_isAccessTokenAboutToExpireSubject$","_isAccessTokenAboutToExpire","login","pipe","filter","e","includes","loadUserProfile","logout","setupAutomaticSilentRefresh","areaConfiguredFlag$","_areaConfiguredFlag$","isAccessTokenAboutToExpire$","isAuthenticated$","isDoneLoading$","_isDoneLoadingSubject$","canActivateProtectedRoutes$","combineLatest","map","values","every","b","accessToken","getAccessToken","accessTokenClaims","jwtBase64EncodedBody","split","jwtDecodedBody","atob","JSON","parse","allowedCustomerUuids","_allowedCustomerUuids","allowedLaboratoryUuids","_allowedLaboratoryUuids","area","_area","write","strKeyArea","removeItem","identityClaims","getIdentityClaims","identityServerAddress","_identityServerAddress","idToken","getIdToken","isAccessTokenAboutToExpire","result","isAdminOrSuperAdminFlag","_isInRole","isAuthenticated","isSuperAdminFlag","logoutUrl","name","claims","preferred_username","roles","role","userUuid","user_uuid","configureCustomerArea","customerUuid","Area","_getDefaultCustomerUuidToAuthenticate","tenantUuid","stringify","strKeyCustomerClaim","strKeyLaboratoryClaim","getInfoToRefreshCustomer","configureLaboratoryArea","laboratoryUuid","_getDefaultLaboratoryUuidToAuthenticate","getInfoToRefreshLaboratory","getAllowedTenants","Promise","resolve","reject","doNotDismissOnNextApiCall","get","ProthesisApiAddress","allowedTenantsProjection","_getDefaultCustomerUuidToExplore","successCallback","getInfo","infoUserCustomerProjection","customerCode","customer","code","customerGroupFlag","customerGroupName","customerMemberFlag","customerName","uuid","laboratoryCode","laboratoryDemoModeFlag","demoModeFlag","laboratoryName","laboratoryRateAutoPublishFlag","rateAutoPublishFlag","laboratoryTzDatabaseName","tzDatabaseName","_getDefaultLaboratoryUuidToExplore","infoUserLaboratoryProjection","laboratoryRole","laboratory","initialize","configure","clearHashAfterLogin","clientId","issuer","nonceStateSeparator","redirectUri","location","origin","requireHttps","responseType","sessionChecksEnabled","showDebugInformation","scope","silentRefreshRedirectUri","useSilentRefresh","targetUrl","initLoginFlow","logOut","refresh","silentRefresh","runInitialLoginSequence","hash","table","substr","kvp","loadDiscoveryDocument","then","tryLogin","catch","reason","_endInitialLoginSequence","connexionData","_getDataFromSessionStorageThenLocalStorage","setAreaConfiguredFlag","stateUrl","startsWith","navigateByUrl","_getDataFromLocalStorage","areaFromLocalStorage","tryGetArea","length","laboratoryUuidFromSessionStorage","read","customerUuidFromSessionStorage","areaFromSessionStorage","workingCustomerUuid","_getFirstCustomerUuid","workingLaboratoryUuid","_getFirstLaboratoryUuid","getAccessTokenExpiration","Date","now","isInRole","isArray","some","r","ConfigurationService","Feature1EnabledFlag","_feature1EnabledFlag","feature1EnabledFlag","Feature2EnabledFlag","_feature2EnabledFlag","feature2EnabledFlag","Feature3EnabledFlag","_feature3EnabledFlag","feature3EnabledFlag","Feature4EnabledFlag","_feature4EnabledFlag","feature4EnabledFlag","IdentityServerAddress","_prothesisApiAddress","prothesisApiAddress","ProthesisCustomerApiAddress","_prothesisCustomerApiAddress","prothesisCustomerApiAddress","ProthesisIdentityApiAddress","_prothesisIdentityApiAddress","prothesisIdentityApiAddress","ContextMenuModule","CommonModule","MatListModule","MatMenuModule","ContextMenuService","CorpTitleService","_title","setTitle","_pageTitle","CrudServiceBase","ReadServiceBase","_httpClient","_actionPath","_apiUrl","super","addQuiet","modelToAdd","post","_actionUrl","updateQuiet","modelToUpdate","put","_delete","delete","_deleteCollection","uuids","uuidCollectionViewModel","ViewModelHelper","AbstractActionConfirmationDialogComponent","_focusService","EventEmitter","linkClickedEventHandler","closeEvent","emit","ngOnChanges","setFocus","onAcceptClickedHandler","acceptEvent","onDeclineClickedHandler","declineEvent","cdkFocusInitialOnButtonFlag","setTimeoutOutsideAngular","cdkFocusInitialOnCancelButtonFlag","_declineButton","focus","_acceptButton","selectors","ctx","ActionConfirmationComboDialogComponent","dialogRef","_data","acceptLabel","declineLabel","_createForm","onAcceptWithCombo","formGroup","controls","selectedValue","close","onCloseClickedHandler","onDecline","dialogBoxData","FormGroup","options","FormControl","MAT_DIALOG_DATA","ActionConfirmationDialogValidator","optionValueFlag","userValidationRequired","ActionConfirmationDialogComponent","onAccept","onAcceptWithOption","getRawValue","dialogBoxValidators","requireValidationFlag","validators","ActionConfirmationInformationDialogComponent","_sanitizer","information","bypassSecurityTrustHtml","htmlMessage","ActionConfirmationMessageDialogComponent","message","ActionConfirmationNumberDialogComponent","numberPatternErrorLabel","numberPlaceholder","numberRequiredErrorLabel","numberValue","Validators","NumberHelper","DialogBoxService","_dialog","promptForAction","messageLine1","messageLine2","note","subMessageLine1","subMessageLine2","open","undefined","optionLabel","optionSubLabel","optionFlag","autoFocus","promptForActionWithCombo","comboPlaceHolder","promptForActionWithInformation","promptForActionWithMessage","promptForActionWithNumber","promptForActionWithOption","DragAndDropService","dragCanceledByEscapeFlag","_dragCanceledByEscapeFlag","draggingFlag","_draggingFlag","document","body","classList","add","cursor","remove","FocusService","_document","_ngZone","routerOutletLoadedHandler","routerOutletLoaded","setFocusOnGridFilter","$event","gridFilter","_isDescendant","_getLeftFuseSideBar","target","activeElement","nodeName","preventDefault","actionFunction","ms","runOutsideAngular","setTimeout","static","pParent","pChild","parentNode","getElementById","DOCUMENT","FormStateService","hasChanged","currentFormGroup","form","initialValue","compareValues","reset","val1","val2","keys1","Object","keys","keys2","isEqual","HighlightService","RegExp","compileFilter","caseInsensitiveAndAccentInsensitiveFilter","_buildCaseInsensitiveAndAccentInsensitiveFilter","_escapeRegex","phoneNumberFilter","replace","phoneNumberFilterWithoutPlus","regex","slice","match","toString","char","_phoneNumberRegEx","decimalFilter","parseFloat","isNaN","_decimalRegEx","chars","_caseInsensitiveAndAccentInsensitiveRegEx","highlight","content","highlightType","HighlightType","_highlightString","_highlightDecimal","_highlightPhoneNumber","_aRegExp","_oRegExp","_eRegExp","_cRegExp","_iRegExp","_uRegExp","_nRegExp","_sRegExp","_yRegExp","_zRegExp","HtmlHelper","positions","replacementValue","start","elt","legnth","end","i","overheadLength","substring","escapedValue","_splice","str","index","count","AreaMenu","LeftMenuService","_fuseNavigationService","classes","translate","icon","hideGroupTitleFlag","function","link","CA_ProductionFlowComponent","CA_InvoiceComponent","_navigationCustomerChildren","LA_ProductionFlowComponent","LA_InvoiceComponent","_navigationCustomerAndCustomerGroupChildren","from","_navigationCustomerChildRate","_navigationCustomerAndCustomerGroup","NavigationEnd","areaMenus","_areaMenus","currentNavigation","_currentFuseNavigation","adminOrSuperAdminFlag","areaMenu","_navigationLaboratory","workingLaboratoryService","exploringFlag","assign","setVisibilityForLaboratoryItemNavigation","customerModuleFlag","manufacturerModuleFlag","laboratoryResourceModuleFlag","navigationLaboratoryDirectory","find","itemModuleFlag","rawMaterialModuleFlag","shadeModuleFlag","navigationLaboratoryCatalog","rateModuleFlag","productionFlowModuleFlag","invoiceModuleFlag","paymentModuleFlag","journalModuleFlag","refreshClassesForNavigationLaboratory","_navigationAdmin","text2","workingCustomerService","_navigationCustomerMember","_navigationNoArea","laboratoryNavigation","addClasses","removeClasses","fuseNavigation","classToApply","classesTable","trim","join","fuseNavigationChild","itemId","itemVisibility","itemNavigation","hidden","LocalStorageService","localStorage","getItem","strArea","setItem","SmartSnackComponent","_snackBarRef","NoteTypeEnum","hasAction","notes","messageArrayFlag","dismissWithAction","performAction","MAT_SNACK_BAR_DATA","NotifyService","_snackBar","_displayMessagesNow","noteType","messageOrMessages","actionLabel","_flag","_pushMessages","displayMessages","flagDown","buildErrorMessage","errorMessage","entityValidationResult","validationResults","validationResult","memberNames","buildErrorMessageSingle","dismiss","_doNotDismissFlag","displayErrorMessagesNow","displayInformationMessagesNow","config","openFromComponent","_clear","displayWarningMessagesNow","flagUp","hasErrorName","errorName","pushErrorMessages","overwriteMessagesFlag","overwriteActionFlag","pushInformationMessages","pushWarningMessages","messages","NoteModel","concat","PeriodSearchService","periodSearchInfoSubject$","_periodSearchInfoSubject","nextPeriodSearchInfo","periodSearchInfo","PickerStateService","PreselectionService","getCategoryOrSubcategory","_categoryUuid","getFamilyOrSubfamily","_familyUuid","getFormDocumentSelection","_formDocumentSelection","getLaboratoryRole","_laboratoryRoleUuid","getPaymentCustomer","_paymentCustomerUuid","getProductionFlowCustomer","_productionFlowCustomerUuid","getScrollTop","_scrollTop","getShadeGuide","_shadeGuideUuid","setCategoryOrSubcategory","categoryUuid","setFamilyOrSubfamily","familyUuid","setFormDocumentSelection","formDocumentSelection","setLaboratoryRole","laboratoryRoleUuid","setPaymentCustomer","setProductionFlowCustomer","setScrollTop","scrollTop","setShadeGuide","shadeGuideUuid","ProgressBarModule","RouterModule","MatButtonModule","MatIconModule","MatProgressBarModule","ProgressBarService","_init","bufferValue","_bufferValue","mode","_mode","_value","visible","_visible","hide","_coutner","setBufferValue","setMode","setValue","show","NavigationStart","NavigationError","NavigationCancel","AccountStateViewModel","ViewModelBase","CustomerService","TenantCrudServiceBase","_dialogBoxService","_proFormaService","_rateService","_userCustomerService","addCustomer","readCustomerViewModel","Observable","observer","stopExploring","complete","HttpErrorResponse","status","addCustomerWithForeignGroupMembers","res","errorMessageFromApi","inCascadeFlag","assignRateToCustomerCollection","rates","defaultRate","customerUuids","CustomerFilter","any","anyCustomerMemberFlag","updateRateCustomerCollection","resultUuidCollection","label","autoComplete","input","maxResult","HttpParams","encoder","set","calculateAccountState","initialAccountState","accountStateViewModel","accountState","calculateInitialAccountState","groupFlag","UserCustomerFilter","customerMemberIncludedFlag","resultFlag","deleteCollection","disable","cancelAction","_disableCollection","disableCustomerGroupOnCascade","disableCollection","disableCollectionOnCascade","enable","_enableCollection","enableCustomerMemberOnCascade","enableCollection","enableCollectionOnCascade","initializeCreate","initializeEdit","initializePicker","sort","page","pageSize","initializeSearch","disabledFlag","initializeUpdateCustomerTaxCollection","sendEmailNotificationCollection","userCustomerUuids","sendConfirmationEmailCollection","updateCustomer","_updateCustomerWithForeignGroupMembers","updateCustomerAndCheckProForma","addedMemberFlag","deletedMemberFlag","ProFormaFilter","customerMembers","customerMemberUuidsIncludedFlag","hasProFormaFlag","_buildMessageLineForUpdateCustomerWithProForma","updateCustomerTaxCollection","updateCustomerTaxCollectionViewModel","resultUuidCollectionUpdatedNotUpdatedViewModel","total","updatedUuids","notUpdatedUuids","customerGroup","uuidViewModels","UuidCollectionInCascadeFlagViewModel","BuildUrlHelper","invoiceNumber","creditPstate","CreditState","pageIndex","sortActive","sortDirection","creditFilter","CreditFilter","customerPstate","CustomerState","customerFilter","customerUserCustomerStatus","CustomerUserCustomerStatus","LaboratoryHttpHeaderModel","subscriptionEndDate","lastSubscriptionEndDate","lastNonFreeSubscriptionProductType","storageCapacityLimit","storageUsage","suspendedFlag","LaboratoryHttpHeaderService","_onHttpHeaderChanged","onHttpHeaderChanged","getHttpHeader","_laboratoryHttpHeader","setHttpHeaderInfo","storageCapacityLimitNumber","ConvertHelper","storageUsageNumber","suspendedFlagBoolean","_previousSubscriptionEndDate","_previousLastSubscriptionEndDate","_previousLastNonFreeSubscriptionProductType","_previousStorageCapacityLimit","_previousStorageUsage","_previousSuspendedFlag","LaboratoryResourceService","LaboratoryResourceFilter","laboratoryResourceUuid","laboratoryResourceName","laboratoryResourceUuids","NotificationAlertType","NotificationFilter","TenantFilter","ListViewModel","NotificationService","_authService","_fuseSidebarService","_laboratoryHttpHeaderService","timer","_unsubscribeAll","exploredUuid$","takeUntil","distinctUntilChanged","switchMap","stopPulling","_httpHeaderLoadedFlag","take","tap","httpHeader","_laboratorySuspendedFlag","startPulling","laboratoryHttpHeader","wasNotLoaded","onNotificationRefreshed$","_onNotificationRefreshed$","onPopUpNotificationReceived$","_onPopUpNotificationReceived$","readNotificationViewmodel","discriminator","addPdfMergeNotificationViewModel","notifyMessage","counter","pdfDocumentType","pdfMergeType","PdfMergeType","PdfDeliveryFormTypeHelper","PdfCreditTypeHelper","PdfFittingFormTypeHelper","PdfInvoiceTypeHelper","PdfProFormaTypeHelper","PdfQuoteTypeHelper","PdfWorkFormTypeHelper","NotificationStatus","readDate","notificationDate","_lookForNotificiation","notificationUuids","generateExportAll","generateJournal","addJournalNotificationViewModel","generatePdfMerge","buildPdfMergeNotifyMessage","generateSpreadsheetDashboard","addSpreadsheetDashboardNotificationViewModel","generateSpreadsheetExport","addSpreadsheetExportNotificationViewModel","getExportAll","observe","getJournalFec","getJournalPdf","getJournalSpreadsheet","getJournalZip","getMergedPdf","getMergedZip","getSpreadsheetDashboard","getSpreadsheetExport","markAsReadCollection","readNotificationViewModels","readViewModels","ngOnDestroy","subscription","unsubscribe","pullingSubsriber$","resultList","activeNotificationFlag","unreadPopupNotifications","unreadNotificationFlag","alertType","SidebarComponent","toggleOpenOnly","ProFormaService","TenantCrudSummaryServiceBase","_activatedRoute","proForma","buildMessage","groupedInvoiceCustomers","addDeliveryFormCollection","addDeliveryFormCollectionByDate","addProFormaByDateViewModel","strProForma","freeze","_freeze","freezeCollection","getPdf","pdfProFormaType","PdfProFormaType","oldQueryParams","snapshot","queryParams","newQueryParams","pstate","proFormaFilter","periodSearchPage","navigate","relativeTo","queryParamsHandling","replaceUrl","replaceUrlFlag","markAsPrintedCollection","pushMessageFlag","_markAsPrintedCollection","publish","_publishCollection","customerWithoutActiveUserCustomerExistenceFlag","publishCollection","removeDeliveryForm","deliveryFormUuid","proFormaUuid","getById","readProFormaViewModel","remainingDeliveryFormsFlag","deliveryForms","buildMessageFromProForma","_removeDeliveryFormCollection","removeDeliveryForms","deliveryFormUuids","unmarkAsPrintedCollection","_unmarkAsPrintedCollection","unPublish","_unPublishCollection","unPublishCollection","unPublishReasonText","unPublishViewModel","UnPublishViewModel","ProductionFlowService","initializefilterDeliveryRouteOptionsSubject$","_initializefilterDeliveryRouteOptionsSubject","initializefilterSectorOptionsSubject$","_initializefilterSectorOptionsSubject","getFullById","getReadProductionFlowViewModel","_readProductionFlowViewModel","initializefilterDeliveryRouteOptions","deliveryRoutes","initializefilterSectorOptions","sectors","setReadProductionFlowViewModel","readProductionFlowViewModel","RateService","rateUuid","rateLabel","rateUuids","rateName","duplicate","duplicateRateViewModel","setTenantUuid","duplicateRate","getCustomerRatePdf","pdfCustomerRateType","PdfCustomerRateType","blob","filename","FileHelper","TimeZoneSingleton","timeZone","adminTimeZone","laboratoryTimeZone","instance","UserCustomerService","createByEmail","addUserCustomerByEmailViewModel","userCustomerUuid","userCustomerEmailAddress","WorkingLaboratoryService","_leftMenuService","_exploredUuidSubject","_exploringFlag","oldExploringFlag","_laboratoryCode","oldLaboratoryCode","_laboratoryDemoModeFlag","oldLaboratoryDemoModeFlag","_laboratoryName","oldLaboratoryName","_laboratoryRateAutoPublishFlag","oldLaboratoryRateAutoPublishFlag","_laboratoryRole","oldLaboratoryRole","_laboratoryTzDatabaseName","oldLaboratoryTzDatabaseName","_tenantUuid","oldTenantUuid","clear","explore","notifyFlag","exploreInternal","tryExploring","fuseNavigationItem","text","TenantReadServiceBase","WorkingCustomerService","_customerCode","oldCustomerCode","_customerGroupFlag","oldCustomerGroupFlag","_customerGroupName","oldCustomerGroupName","_customerMemberFlag","oldCustomerMemberFlag","_customerName","oldCustomerName","_isAdminOrSuperAdminFlag","buildAdminMenu","navigations","laboratoryNavigationItem","getAll","RouterHistoryService","previousUrl","_historyStack","goToPreviousUrl","defaultUrl","extras","pop","historyStackPopedFlag","newRoute","_regEx","lastRoute","history","maxNumberOfEntry","navigationStartUrl","nextState","nextPageTitle","nextURL","replaceState","SessionStorageService","json","CopyPropertiesFromJsonAndWriteOrRead","dest","jsonObj","deserializeJson","copy","objFromSessionStorage","sessionStorage","obj","strValue","src","propName","prototype","hasOwnProperty","call","_servicePath","tenantBasePath","TenantViewModelBase","getAllSummary","TimeZoneService","date","addDays","addMonths","addYears","addMinutes","clone","createMomentInAdminTimeZone","diff","diffDaysBetweenTwoMoments","Math","abs","moment","tz","month","year","newDate","nowInAdminTimeZone","_configureDate","createMomentInLaboratoryTimeZone","toISOString","date1","date2","startOf","format","barClosed","afterClosedHandler","_notificationSidebarComponent","markNotificationsAsRead","afterOpenedHandler","AdvancedFilterPanelModelHelper","advancedFilter","creditCancelledDisplayChoice","creditPaidFlagDisplayChoice","creditTypeDisplayChoice","invoiceCancelledDisplayChoice","invoicePaymentDisplayChoice","invoiceTypeDisplayChoice","canceledCreditNumber","advancedFilterPanel","resetValues","AdvancedFilterPanelModel","canceledFlag","paidFlag","creditFreeLineExistenceFlag","invoiceFilter","invoiceFreeLineExistenceFlag","InvoiceComponent","_corpTitleService","_customerService","_highlightService","_periodSearchService","InvoiceState","PeriodSearchCreditDateType","PeriodSearchInvoiceDateType","PeriodSearchType","ProFormaState","groupTitle","pageTitle","navLinks","RouterLinkModel","tabIndexProForma","gridSortModelProForma","tabIndexInvoice","gridSortModelInvoice","tabIndexCredit","gridSortModelCredit","advancedFilterAppliedHandler","_initAdvancedFilter","focusOnAdvancedFilterPanelToggleButtonFlag","_matButtonToggleAdvancedFilter","_matButtonToggleGroupFilter","_resetPageIndex","_saveStateAndSelfNavigate","customerFilterAppliedHandler","customerFilterPanel","customerFilterUuid","invoiceState","creditState","proFormaState","_updateCustomerFilterToggleButtonLabel","focusOnCustomerPanelToggleButtonFlag","_matButtonToggleCustomerFilter","eraseAdvancedFilter","eraseAllFiltersClickedHandler","resetFilter","periodSearchType","Number","periodSearchTypeFavorite","periodSearchDateType","periodSearchCreditDateTypeDefault","periodSearchInvoiceDateTypeDefault","periodSearchProFormaDateTypeDefault","eraseCustomerFilter","keydownPageDown","keydownTab","_gridFilterComponent","keyupPageDown","nextIndex","activeLink","tabClicked","keyupPageUp","_routerOutletLoadedSubscription","_unsubscribeAll$","ngOnInit","_initPeriodSearchFilter","periodSearch","_isCreditContext","filterSetToDefaultValueFlag","isFilterSetToDefaultAndFavoriteValues","_isInvoiceContext","_isProFormaContext","_buildPeriodSearchOptions","_loadState","_initCustomerContext","_initGridSortContext","_initTextFilterContext","periodSearchSubmitEventHandler","CustomerAreaPeriodSearchModelHelper","saveFavoriteClickedHandler","_saveCurrentState","strCreditKeyLocalStorageSort","sortSetToDefaultValueFlag","isSortSetToDefaultValues","strInvoiceKeyLocalStorageSort","strProFormaKeyLocalStorageSort","saveFavoritePeriodSearchTypeEventHandler","periodSearchTypeKey","newPeriodSearchType","strPeriodSearchTypeFavorite","periodSearchTypeSetToDefaultValueFlag","_invoiceAdvancedFilterComponent","_customerFilterPanelComponent","sortActiveChanged","newSortActive","sortDirectionChanged","newSortDirection","navLink","strCurrentTabLink","textFilterChangedEventHandler","newTextFilter","textFilter","toggleChange","toggle","source","buttonToggleGroup","periodSearchTypeOptions","PeriodSearchTypeHelper","periodSearchDateTypeOptions","PeriodSearchCreditDateTypeHelper","PeriodSearchInvoiceDateTypeHelper","_updateAdvancedFilterToggleButtonLabel","_initCustomer","CustomerFilterPanelModel","CustomerModel","_initFavoriteContext","shouldForceSortFlag","_initFavoriteSortFromLocalStorage","_initFavoritePeriodSearchTypeFromLocalStorage","documentFilter","periodSearchDateTypeDefault","strFavoritePeriodSearchType","periodSearchTypeDefault","initSort","_initGridSort","_gridSortComponent","sortFavorite","sortDirectionFavorite","_initTextFilter","GridFilterModel","_loadCreditState","shouldReloadFlag","strCreditState","_setCustomerUuid","_loadInvoiceState","strInvoiceState","_loadProFormaState","strProFormaState","_synchronizeInvoiceStateFromCreditState","_synchronizeProFormaStateFromCreditState","_synchronizeCreditStatefromInvoiceState","_synchronizeProFormaStateFromInvoiceState","_synchronizeCreditStatefromProFormaState","_synchronizeInvoiceStateFromProFormaState","_selfNavigate","strKeySortFavorite","updateFavoriteSortFromCurrentSort","PaginatedListState","fromCreditDate","toCreditDate","fromDeliveryDate","toDeliveryDate","fromInvoiceDate","toInvoiceDate","fromInvoiceDueDate","toInvoiceDueDate","fromDueDate","toDueDate","advancedFilterCounter","textButtonAdvancedFilter","constTextButtonAdvancedFilter","showEraseAdvancedFilterFlag","textButtonCustomerFilter","showEraseCustomerFilterFlag","customerFilterCounter","constTextButtonCustomerFilter","defaultSortActive","defaultSortDirection","initPageSize","initPageSort","_initPeriodSearchType","defaultValueFlag","isFilterSetToDefaultValues","statePeriodSearchType","valueOf","fromCreateDate","fromUpdateDate","toCreateDate","toUpdateDate","textFilterFields","resetSort","localStoragePeriodSearchTypeKey","InvoiceFilter","number","patientUnspecifiedFlag","patientCode","patientNumber","prescriptionNumber","productionFlowNumber","countValuesOfAdvancedFilterPanel","invoicedFlag","productionFlowUuid","proFormaFlag","documentFilterSynchronized","documentFilterOrigin","ProductionFlowComponent","_preselectionService","_productionFlowService","DeliveryFormState","ComboModel","DocumentStatus","FittingFormState","QuoteState","documentStateOptions","DocumentStatusHelper","documentStateDefaultValue","tabIndexQuote","gridSortQuote","tabIndexFittingForm","gridSortFittingForm","tabIndexDeliveryForm","gridSortDF","tabIndexProFormaDeliveryForm","tabIndexInvoicedDeliveryForm","gridSortIDF","buildFilterDeliveryRouteOptions","optionDeliveryRoutes","deliveryRouteFilterOptions","deliveryRoute","deliveryRouteFilterOption","FormTimeModelHelper","deliveryRouteHour","deliveryRouteMinute","SortHelper","deliveryRouteFilterOptionExcludedDeliveryRouteFlag","deliveryRouteFilterOptionNoneDeliveryRouteFlag","showCustomerMembersFlag","deliveryFormState","customerGroupUuids","fittingFormState","quoteState","PeriodSearchDeliveryFormDateType","_isDeliveryFormContext","_isFittingFormContext","_isQuoteContext","_setDeliveryRouteFilter","optionDeliveryRouteFilterChanged","selectedOptions","setDeliveryRouteFilter","optionDocumentStateChanged","strDeliveryFormKeyLocalStorageSort","strFittingFormKeyLocalStorageSort","strQuoteKeyLocalStorageSort","deliveryRoutesOptions","selectedOptionKeys","selectedDeliveryRouteNumbers","deliveryRoutesOption","unselectedDeliveryRouteNumbers","optionNoneDeliveryRouteFlag","optionExcludedDeliveryRouteFlag","hasSelectedDeliveryRouteFlag","noneDeliveryRouteFlag","excludedDeliveryRoutes","_advancedFilterComponent","PeriodSearchDeliveryFormDateTypeHelper","_loadDeliveryFormState","strDeliveryFormState","_loadFittingFormState","strFittingFormState","_setDocumentStatus","_loadQuoteState","strQuoteState","_synchronizeFittingFormStateFromDeliveryFormState","_synchronizeInvoiceStateFromDeliveryFormState","_synchronizeProFormaStateFromDeliveryFormState","_synchronizeQuoteStateFromDeliveryFormState","_synchronizeDeliveryFormStateFromFittingFormState","_synchronizeInvoiceStateFromFittingFormState","_synchronizeProFormaStateFromFittingFormState","_synchronizeQuoteStateFromFittingFormState","_synchronizeDeliveryFormStateFromInvoiceState","_synchronizeFittingFormStateFromInvoiceState","_synchronizeQuoteStateFromInvoiceState","_synchronizeDeliveryFormStateFromProFormaState","_synchronizeFittingFormStateFromProFormaState","_synchronizeQuoteStateFromProFormaState","_synchronizeDeliveryFormStateFromQuoteState","_synchronizeFittingFormStateFromQuoteState","_synchronizeInvoiceStateFromQuoteState","_synchronizeProFormaStateFromQuoteState","_deliveryRouteFilterSelection","optionDeliveryRoute","option","optionExcludedDeliveryRoutes","deliveryRouteFilterSelection","documentStateSelected","fromQuoteDate","toQuoteDate","fromExpirationDate","toExpirationDate","textButtonCustomerFilterShowCustomerMembers","constTextButtonCustomerFilterShowCustomerMembers","ProductionFlowState","DeliveryFormFilter","FittingFormFilter","QuoteFilter","CustomerComponent","codeStartsWith","customerGroupUuid","deliveryFormToInvoiceExistenceFlag","fromAccountState","textContains","toAccountState","fromAccountStateIncludedFlag","toAccountStateIncludedFlag","UpdateCustomerTaxCollectionViewModel","UpdateCustomerTaxesDialogModel","UpdateCustomerTaxesDialogModelHelper","updateCustomerTaxesDialog","tax1Flag","tax2Flag","tax3Flag","outInitUpdateCustomerTaxCollectionViewModel","build","laboratoryTaxes","LaboratoryTaxModelHelper","laboratoryTax","taxes","UpdateCustomerTaxesDialogComponent","acceptEventHandler","closeEventHandler","declineEventHandler","ExtendOptionUserCustomerModel","CustomerModelHelper","readCustomerViewModels","laboratoryTaxViewModel","customers","_createModel","taxFlags","notApplicableTaxeNames","displayOrder","notApplicableTaxeLabel","currencyCode","rate","rateDisabledFlag","groupDisabledFlag","groupUuid","groupName","setNotApplicableTaxes","title","CustomerTitleHelper","contacts","defaultContact","contact","defaultFlag","contactName","ContactTitle","ContactTitleHelper","firstName","lastName","contactEmailAddress","emailAddress","contactMobilePhoneNumber","mobilePhoneInternationalNumber","contactWorkPhoneNumber","workPhoneInternationalNumber","customerMember","ListCardElementModel","userCustomers","extendOptionUserCustomerViewModel","userCustomer","userEmailConfirmedFlag","waitingUserCustomers","userCustomerLabel","waitingUserCustomerLabel","ctx_r54","ctx_r56","_matDialog","SelectionModel","aggregateAmountDisplayFlag","customerAccountStateDisplayFlag","itemAmountDisplayFlag","userCustomerExplorationActionFlag","gridSortModel","customerGroupOptions","CustomerGroupEnumHelper","customerGroupDefaultValue","customerUserCustomerStatusOptions","CustomerUserCustomerStatusHelper","customerUserCustomerStatusDefaultValue","accountStates","accountStateToZeroCombo","accountStateDebitCombo","accountStateCreditCombo","disabledFlagModels","enabledComboModel","disabledComboModel","customButtonClickedHandler","selection","selected","_assignRateToCustomerMultiple","deleteButtonClickedHandler","rowElement","element","RowElementHelper","_refreshList","deleteMultipleButtonClickedHandler","disableButtonClickedHandler","elementToDisable","_disable","disableMultipleButtonClickedHandler","_disableMultiple","duplicateButtonClickedHandler","edit","tabNumber","enableButtonClickedHandler","elementToEnable","_enable","enableMultipleButtonClickedHandler","_enableMultiple","exploreCustomer","stopPropagation","isAllSelected","keydownAddEventHandler","creationRoute","keydownArrowLeftEventHandler","keydownArrowRightEventHandler","manageUser","masterToggle","row","select","_triggerRipple","_matPaginator","optionAccountStateChanged","accountStateOption","optionCustomerGroupChanged","comboModel","optionCustomerUserCustomerStatusChanged","optionDisabledFlagChanged","optionRateChanged","paginatorUpdated","pageEvent","previewCustomerRatesClickedEventHandler","strKeyLocalStorage","_updateFilterAndSortFlag","sendEmailNotificationMultipleButtonClickedHandler","spreadsheetExportButtonClickedHandler","strFilter","buttonListSpreadsheetExportDialog","CustomerSpreadsheetExportDialogModelHelper","buttonListDialog","ButtonListSpreadsheetExportDialogModelHelper","notificationDetailCustomer","ReadSpreadsheetExportNotificationDetailViewModelHelper","SpreadsheetExportFileType","SpreadsheetExportType","notificationDetailCustomerContact","notificationDetailCustomerUserCustomer","button1Label","SpreadsheetExportTypeHelper","addNotificationViewModels1","AddSpreadsheetExportNotificationViewModelHelper","notifyMessage1","button2Label","addNotificationViewModels2","notifyMessage2","button3Label","addNotificationViewModels3","notifyMessage3","button4Label","button4TopSeparatorFlag","addNotificationViewModels4","notifyMessage4","ButtonListSpreadsheetExportDialogComponent","stopExploringCustomer","updateCustomerTaxesButtonClickedEventHandler","componentInstance","rateModels","_initFavoritesSort","_initList","_load","loadedFlag","existenceFlag","ComboModelHelper","_setCustomerFilter","accountStateSum","aggregate","userCustomerCount","waitingUserCustomerCount","totalCount","tableConfig","TableConfig","_rowElementComponents","toArray","strKeyLocalStoragePageSize","_setAccountStateFilter","comboModelFilter","accountStateSelected","disabledFlagKeySelected","_setCustomerGroupFilter","_setCustomerUserCustomerStatusFilter","_setRateFilter","combo","customerGroupKeySelected","customerUserCustomerStatusKeySelected","rateModel","rateSelected","_matRipple","launch","centered","MatPaginator","MatRipple","documentMarkedAsPrintedFlagChoice","documentPublishStatusChoice","markedAsPrintedFlag","publishStatuses","PublishStatus","invoiceProcessingActionFlag","exportClickedHandler","InvoiceUnpaidReminderSpreadsheetExportDialogModelHelper","spreadsheetExport","notificationDetailInvoiceUnpaidReminder","notificationDetailInvoiceUnpaidReminderMailing","helpTitle","helpLinkLabel1","helpLinkLabel2","helpLinkUrl1","helpLinkUrl2","getAddButtonLink","customerPickerComboDefaultValue","CustomerGroupEnum","LaboratoryAreaPeriodSearchModelHelper","frozenFlag","FormDocumentSelectionModelHelper","documentTypeForSelection","deliveryDate","defaultDeliveryRoute","shouldInitFlag","today","FormDocumentSelectionModel","documentType","quoteDate","quoteDeliveryDate","expirationDate","DocumentType","forbiddenDocumentTypes","fittingFlag","description","laboratoryTaskNumber","fittingFlagChoice","synchronizeDocumentFilter","_laboratoryResourceService","WorkFormState","productionFlowProcessingActionFlag","gridSortFF","gridSortQ","gridSortWF","tabIndexWorkForm","addButtonClickCustomHandler","preselectedDate","dateTo","_isWorkFormContext","workFormState","eraseLaboratoryResourceFilter","laboratoryResourceFilterAppliedHandler","laboratoryResourceFilterPanel","laboratoryResourceFilterUuid","laboratoryResource","_updateLaboratoryResourceFilterToggleButtonLabel","focusOnLaboratoryResourcePanelToggleButtonFlag","_matButtonToggleLaboratoryResourceFilter","_buildComboSectors","_setSectorFilter","_initLaboratoryResourceContext","optionSectorOrSpecialtyChanged","selectedSectorOrSpecialty","setSectorFilter","strWorkFormKeyLocalStorageSort","_laboratoryResourceFilterPanelComponent","SectorOrSpecialtyModelHelper","sectorUuid","specialtyUuids","noneSpecialtyFlag","sectorOrSpecialtyUuidSelected","laboratoryResourceSectorOrSpecialtyDefaultValue","extendOptionSectorViewModels","sectorOrSpecialties","_initLaboratoryResource","LaboratoryResourceFilterPanelModel","LaboratoryResourceModel","_synchronizeWorkFormStateFromDeliveryFormState","_synchronizeWorkFormStateFromFittingFormState","_synchronizeWorkFormStateFromInvoiceState","_synchronizeWorkFormStateFromProFormaState","_synchronizeWorkFormStateFromQuoteState","_loadWorkFormState","_synchronizeDeliveryFormStateFromWorkFormState","_synchronizeFittingFormStateFromWorkFormState","_synchronizeInvoiceStateFromWorkFormState","_synchronizeProFormaStateFromWorkFormState","_synchronizeQuoteStateFromWorkFormState","strWorkFormState","sectorOrSpecialtyUuid","sectorOrSpecialty","textButtonLaboratoryResourceFilter","showEraseLaboratoryResourceFilterFlag","laboratoryResourceFilterCounter","constTextButtonLaboratoryResourceFilter","WorkFormFilter","LaboratoryTaxModel","LaboratoryTaxRateModel","taxRates","outInitCreditTaxViewModels","outInitCreditTaxViewModel","_createModelFromOutInitCreditTaxViewModel","readTaxViewModels","readTaxRateViewModel","readTaxViewModel","LaboratoryTaxRateModelHelper","readTaxRateViewModels","laboratoryTaxRates","laboratoryTaxRate","percentage","defaultTaxRateUuid","unspecifiedSectorOrSpecialtyKey","sectorViewModels","displayDisabled","buildUnSpecifiedSectorOrSpecialty","sectorViewModel","sector","specialties","specialtyViewModel","specialty","testId","CustomActionButtonsComponent","toggleSelectionFlag","customButtonClickedEvent","DuplicateActionButtonsComponent","duplicateButtonClickedEvent","showDuplicateButtonFlag","showDuplicateButton","duplicateLabel","ContextMenuDirective","_contextMenuService","rightClicked","contextMenuLines","openContextMenuEvent","PrintActionButtonsComponent","closeMenuContextHandler","hideContextMenuEvent","downloadFecLabelButtonClickedHandler","downloadFecButtonClickedEvent","downloadPdfLabelButtonClickedHandler","downloadPdfButtonClickedEvent","downloadSpreadsheetLabelButtonClickedHandler","downloadSpreadsheetButtonClickedEvent","downloadZipLabelButtonClickedHandler","downloadZipButtonClickedEvent","generateMultiplePdfButtonClickedHandler","generateMultiplePdfButtonClickedEvent","multiplePreviewButtonClickedHandler","multiplePreviewButtonClickedEvent","openPdfButtonClickedHandler","openPdfButtonClickedEvent","PrintActionButtonsModule","FlexLayoutModule","useColumnBasisZero","MatTooltipModule","SmartActionButtonsComponent","StateActionButtonsComponent","deleteButtonClickedEvent","disableButtonClickedEvent","enableButtonClickedEvent","showDeleteButtonFlag","showDeleteButton","showDisableButtonFlag","showDisableButton","showEnableButtonFlag","showEnableButton","showRedoButtonFlag","showRedoButton","showUndoButtonFlag","showUndoButton","redoButtonClickedHandler","redoButtonClickedEvent","deleteLabel","disableLabel","enableLabel","redoLabel","undoneFlag","undoLabel","undoButtonClickedHandler","undoButtonClickedEvent","AggregateComponent","simpleDocumentSpreadsheetExportButtonClickedHandler","simpleDocumentSpreadsheetExportButtonClickedEvent","spreadsheetExportButtonClickedEvent","GroupedLabelCardComponent","highlightGroup","highlightInternal","highlightGroupFlag","highlightGroupType","highlightHat","highlightHatFlag","highlightInfo","highlightInfoFlag","infoHighlightType","highlightInfoLine2","infoLine2HighlightType","highlightInfoLine3","infoLine3HighlightType","highlightLabel","highlightLabelFlag","highlightLabelType","highlightSubgroup","highlightSubgroupFlag","highlightTitle","highlightTitleFlag","highlightFlag","GroupedLabelCardModule","HatCardComponent","hatHighlightEnabledFlag","HatCardModule","ListCardComponent","elements","top5Elements","PriceCardComponent","highlightDecimal","ProgressBarStorageCardModelHelper","ProgressBarStorageCardModel","_createFromHttpHeaderModel","readLaboratoryViewModel","_createFromReadLaboratoryViewModel","progressBarStorageCard","storageUsagePercentage","storageUsagePercentageWarning","warnFlag","extendOptionLaboratoryRoleViewModels","combos","extendOptionLaboratoryRoleViewModel","adminFlag","extendOptionRateViewModels","comboModels","extendOptionRateViewModel","fromExtendOptionRateViewModelSingle","_fromOptionRateViewModelSingle","extendOptionTimeZoneViewModels","extendOptionTimeZoneViewModel","fromExtendOptionTimeZoneViewModelSingle","country","optionBankViewModels","optionBankViewModel","optionCountryViewModels","optionCountryViewModel","fromOptionCountryViewModelSingle","optionShadeGuideViewModels","optionShadeGuideViewModel","optionTimeZoneViewModel","countries","defaultCountry","optionRateViewModel","ctx_r17","ComboComponent","_changeDetectorRef","requiredFlag","CustomValidators","disabled","eraseFilterClickedHandler","defaultValue","comboFormControl","valueChange","markForCheck","keySelected","_setPlaceholder","onElementSelectionChange","matSelectChange","selectionChange","resetCombo","_matSelect","selectedChange","placeholder","placeholderWhenNoOptionIsSelected","placeholderWhenAnOptionIsSelected","ComboModule","FormsModule","MatOptionModule","MatInputModule","MatSelectModule","MatDividerModule","ReactiveFormsModule","AbstractDialogComponent","displayActionButtonsFlag","ButtonListDialogComponent","button1ClickedHandler","button1ClickedEvent","button2ClickedHandler","button2ClickedEvent","button3ClickedHandler","button3ClickedEvent","button4ClickedHandler","button4ClickedEvent","button5ClickedHandler","button5ClickedEvent","button6ClickedHandler","button6ClickedEvent","ButtonListDialogModel","ButtonListDialogModelHelper","EmptyListModule","FormDateIntervalModel","dateFromRequiredFlag","dateToRequiredFlag","formTime","FormTimeModel","timeValue","strDefaultDeliveryRoute","parseDefaultDeliveryRoute","readDeliveryFormViewModel","parseTime","readDeliveryRouteViewModel","readFittingFormViewModel","readQuoteViewModel","readWorkFormViewModel","hour","minute","_padLeft","splittedDeliveryRoute","strHour","strMin","hours","mins","padChar","size","String","repeat","GridFilterComponent","textFilterAppliedFlag","textFilterChangedEvent","_textFilterInput","nativeElement","textFilterApplied","textFilterChangedHandler","GridFilterModule","GridSortComponent","sortActiveFormControl","sortDirectionFormControl","_sortDirectionFavorite","newSortDirectionFavorite","_sortFavorite","newSortFavorite","saveFavoriteClicked","sortActiveChange","currentSortActive","sortDirectionChange","currentSortDirection","HeaderComponent","_dragAndDropService","_routerHistoryService","addButtonClickedHandler","addButtonLink","backButtonClickedHandler","alwaysUseDefaultBackLink","defaultBackLink","backLinkReplaceUrl","backButtonClickCustomHandler","keydownEscape","openDialogs","class","changeDetection","EmptyListComponent","linkClickedHandler","navigationExtras","linkClickedEvent","ListResultComponent","determineDisplayMode","disableCreationFlag","prerequisites1TotalCount","prerequisites2TotalCount","prerequisites3TotalCount","elementCreationLinkClickedHandler","elementCreationLinkClickedEvent","displayMode","ListResultModule","NoteComponent","PdfViewerComponent","download","blobURL","URL","createObjectURL","_pdfLink","href","click","revokeObjectURL","file","File","fileUrl","PdfViewerModule","PeriodSearchModel","customPeriodSearchDate","dateFrom","PeriodSearchInfoModelHelper","overridePeriodSearchDateType","workingPeriodSearchDateType","searchDocumentViewModel","periodSearchDateText","periodSearchFromDate","periodSearchToDate","PeriodSearchInfoModel","searchJournalViewModel","fromUploadDate","PeriodSearchFileAssetDateType","toUploadDate","fromPrescriptionDate","toPrescriptionDate","fromDate","toDate","fromMiscellaneousOperationDate","toMiscellaneousOperationDate","fromPaymentDate","toPaymentDate","convertToComboModel","enumValue","translateEnum","selectedCustomerGroup","CA_CustomerFilter","LA_CustomerFilter","ElementModel","containerLabel","subcontainerLabel","PickerDialogModel","PickerDialogComponent","pickerDialog","shouldBeFirstSerialNumber","changeSelectedContainer","selectedComboModel","filterSelectedContainerUuid","filterSelectedSubcontainerUuid","updateAndEmitState","chooseElement","firstSerialNumberFlag","selectElement","unpinnedByDefaultFlag","combo2SelectedChangeHandler","filter2SelectedContainerUuid","configRows","determineCombo2State","combo2DisableFlag","_combo2Component","determineComboState","comboDisableFlag","_comboComponent","elementCreationLinkClickedEventHandler","focusOnTable","_tableWrapperComponent","focusAtIndex","focusOnTextFilter","isComboModelSelected","indexFocusedRow","updateState","keydownCtrl","multipleSelectionFlag","keyupCtrl","comboDefaultValue","combo2DefaultValue","setCloseModeHandler","PickerState","updatePaginator","PickerComponent","_pickerStateService","autoCompleteResultList","_autoCompleteResultList","_isLoadingAutocomplete","_pendingEnterAction","formControl","_lastSearchValue","executeEnterAction","inputValue","codeChanged","toUpperCase","openPickerDialog","clickHandler","closedHandler","run","autocompleteOpenedFlag","detectChanges","handleEnterKey","currentInputValue","isFocused","_inputText","combo2Options","combo2PlaceholderWhenNoOptionIsSelected","combo2PlaceholderWhenOptionIsSelected","titleLabel","addIconButtonTooltip","comboOptions","comboPlaceholderWhenOptionIsSelected","comboPlaceholderWhenNoOptionIsSelected","truncatedContentWidth","firstLoadFlag","addIcon","showTextInputFlag","valueChanges","debounceTime","trimmedInput","inputChanged","openHandler","elementCreationIcon","elementCreationLink","elementCreationLinkLabel","elementCreationMessage","highlightCol1GroupFlag","highlightCol1GroupType","highlightCol1InfoFlag","highlightCol1LabelFlag","highlightCol1SubgroupFlag","highlightCol2GroupFlag","highlightCol2GroupType","highlightCol2InfoFlag","highlightCol2LabelFlag","highlightCol2SubgroupFlag","highlightCol3LabelFlag","highlightCol3LabelType","dialogConfig","MatDialogConfig","disableClose","afterClosed","pickerDialogAfterClosedEvent","optionSelectedHandler","matAutocompleteSelectedEvent","blur","uuidSelected","emitEvent","firstOption","PickerModule","DirectivesModule","DragDropModule","MatAutocompleteModule","MatDialogModule","MatFormFieldModule","MatPaginatorModule","RowElementModule","TableWrapperModule","AbstractRowComponent","_elementRef","renderer","setAttribute","_afterFocusedRow","addEventOnTouchMove","_touchMove","passive","blurRow","contextMenuVisibleFlag","_keepActionButtonVisibleFlag","_rowVisibleFlag","_eventFromTouchFlag","BreakpointHelper","clickOnlyOnTouchModeFlag","clickEvent","clickActionColumn","clickActionColumnEvent","mouseEnter","mouseLeave","_makeRowInvisible","mouseLeaveEvent","onClick","setSelectionFlag","selectionFlag","touchEnd","_movingFlag","clickOnlyOnLessThanXsFlag","afterRowFocusedEvent","ctx_r13","RowElementComponent","_renderer","editCardFive","cardFiveEditEvent","editCardFour","cardFourEditEvent","editCardOne","cardOneEditEvent","editCardSix","cardSixEditEvent","editCardThree","cardThreeEditEvent","editCardTwo","cardTwoEditEvent","focusinCheckboxHandler","focusRow","checkableRowFlag","_checkbox","ngAfterViewInit","toggleSelection","toggleSelectionEvent","MatCheckboxModule","_notificationService","generateSpreadsheetExport1Event","generateSpreadsheetExport2Event","generateSpreadsheetExport3Event","generateSpreadsheetExport4Event","button5Label","addNotificationViewModels5","generateSpreadsheetExport5Event","notifyMessage5","button6Label","addNotificationViewModels6","generateSpreadsheetExport6Event","notifyMessage6","ButtonListSpreadsheetExportDialogModel","rows","TableWrapperComponent","afterRowFocusedHandler","focusOut","keydownAdd","draggable","keydownAddEvent","keydownAltAdd","keydownArrowDown","proceedEvent","previousIndex","keydownArrowLeft","paginatedListState","keydownArrowLeftEvent","keydownArrowRight","keydownArrowRightEvent","keydownArrowUp","keydownEnter","_table","contains","keydownEnterEvent","targetElement","closest","DISABLED","APP_DISABLED","TAB_INDEX","DisableDirective","eleRef","disableElement","appDisable","hasAttribute","tagName","toLowerCase","getAttribute","removeAttribute","ele","FirstLetterUpperCaseDirective","onInputChange","caretPos","selectionStart","trimLeft","model","setSelectionRange","CustomerTitle","customerTitle","selectedUserCustomer","convertToEnum","FileAssetTypeHelper","FileAssetType","JournalFileTypeHelper","JournalFileType","JournalTypeHelper","JournalType","msg","msgPlural","msgSingular","PdfCreditType","pluralFlag","PdfDeliveryFormType","PdfFittingFormType","PdfInvoiceType","PdfQuoteType","PdfWorkFormType","SpreadsheetDashboardTypeHelper","SpreadsheetDashboardType","ProductType","AddSpreadsheetExportNotificationViewModel","spreadsheetExportFileType","spreadsheetExportType","readSpreadsheetExportViewModel","fromReadSpreadsheetExportViewModel","readSpreadsheetExportNotificationDetailViewModel","spreadsheetExportNotificationDetails","readSpreadsheetExportNotificationDetailViewModels","addNotificationViewModel","spreadsheetExportTypes","innerWidth","LgUpperBoundExcluded","MdUpperBoundExcluded","SmUpperBoundExcluded","XsUpperBoundExcluded","LgUpperBoundIncluded","MdUpperBoundIncluded","SmUpperBoundIncluded","XlUpperBoundIncluded","XsUpperBoundIncluded","contentDisposition","headers","entry","decodeURI","filetype","unsafe","_AmpRegExp","_doubleQuoteRegexp","_gtRegExp","_ltRegExp","_simpleQuoteRegexp","bytes","round","kbytes","mbytes","gbytes","EPSILON","ReadSpreadsheetExportNotificationDetailViewModel","VersionedViewModelBase","a","dateInterval","localeCompare","aDate","bDate","allItemCanceledFlag","allItemProceedFlag","hatLabel","fileAssetCard","fileAssetType","fileName","memberFlag","shade","taxDisplayOrder","laboratoryTask","UuidCollectionViewModel","CurrencySymbolPipe","getCurrencySymbol","pure","CustomDatePipe","DatePipe","offset","t","LooseCurrencyPipe","_currencyPipe","display","digitsInfo","PipeModule","PublishedDocumentFilter","DocumentFilter","StandardFilter","ComponentViewModelBase","SavedChangeGuard","_formStateService","canDeactivate","component","of","dialogBoxMessageLine1","dialogBoxMessageLine2","paginator","gridSort","localStoragePageSizeKey","localStoragePageSortKey","pageSort","filterDefaultSelectedContainerUuid","compareValue","greaterThan","notEqual","control","required","FuseSidebarModule","FUSE_CONFIG","InjectionToken","FuseConfigService","_platform","_config","_defaultConfig","_configSubject","getValue","defaultConfig","getConfig","resetToDefaults","cloneDeep","setConfig","opts","ResolveEnd","layout","FuseModule","parentModule","Error","ngModule","providers","provide","useValue","FuseDirectivesModule","FusePipesModule","FuseSharedModule","NAV","ADMIN","CATALOG","CUSTOMER","CUSTOMER_AREA","CUSTOMERAREA","PRODUCTION","RATE","DIRECTORY","HOME","TITLE","INVOICE","ITEM","JOURNAL","LABORATORY","LABORATORY_AREA","MANUFACTURER","MATERIAL","PAYMENT","RESOURCE","SPONSORSHIP","SHADE","USER","LoggerService","debug","allowLogFlag","datadogLogs","info","env","_env","clientToken","datacenter","Datacenter","isCollectingError","sampleRate","ThemingService","ref","_mediaQuery","matchMedia","_mediaQueryListener","handleMediaQueryChange","_subscription","Subscription","matches","currentTheme","theme","addListener","tick","FuseSplashScreenService","_animationBuilder","player","zIndex","create","splashScreenEl","play","querySelector","SettingsService","_currentLanguage","_languages","flag","version","getDefaultLanguage","getLanguage","language","getSupportedLanguageIds","getSupportedLanguages","setLanguage","ContextMenuHolderComponent","openContextMenuHandler","closeContextMenu","contextMenuLineClickHandler","contextMenuLine","action","documentClickHandler","contextMenuPosition","clientX","clientY","_contextMenu","menuData","menu","focusFirstItem","openMenu","MatMenuTrigger","CustomerAreaMessageService","getInfoCustomerAreaMessage","HttpHeaderModel","customerAreaMessageEtag","laboratoryAreaMessageEtag","previousCustomerAreaMessageEtag","previousLaboratoryAreaMessageEtag","HttpHeaderService","_httpHeader","customerAreaMessageEtagNumber","laboratoryAreaMessageEtagNumber","_previousCustomerAreaMessageEtag","_previousLaboratoryAreaMessageEtag","CustomerAreaMessageBannerComponent","_customerAreamessageService","_httpHeaderService","displayFlag","strKeyCustomerAreaMessageClosed","etagFromHttpHeader","isDoneLoadingFlag","httpHeaderModel","customerAreaMessageClosed","etag","textLink","getInfoCustomerAreaMessageScheduled","FuseMatchMediaService","_mediaObserver","activeMediaQuery","change","mqAlias","onMediaChange","FuseSidebarComponent","_fuseConfigService","_fuseMatchMediaService","foldedAutoTriggerOnHover","foldedWidth","foldedChanged","openedChanged","opened","invisibleOverlay","animationsEnabled","_folded","folded","sibling","styleRule","styleValue","nextElementSibling","previousElementSibling","fold","setStyle","addClass","unfold","removeStyle","removeClass","isLockedOpen","_enableAnimations","_hideBackdrop","_hideSidebar","foldTemporarily","wasUnfolded","unfolded","_setupVisibility","_setupPosition","_setupLockedOpen","_setupFolded","onMouseEnter","unfoldTemporarily","onMouseLeave","_showSidebar","showBackdropFlag","_showBackdrop","toggleCloseOnly","toggleFold","toggleOpen","touchUnfoldTemporarily","touchUnfold","saveUnfoldedState","_backdrop","_player","onDone","removeChild","lockedOpen","_wasActive","_wasFolded","isActive","createElement","appendChild","parentElement","ContentComponent","FooterComponent","LaboratoryAreaMessageService","getInfoLaboratoryAreaMessage","LaboratoryAreaMessageBannerComponent","_laboratoryAreamessageService","strKeyLaboratoryAreaMessageClosed","laboratoryAreaMessageClosed","getInfoLaboratoryAreaMessageScheduled","NavGroupComponent","NavItemComponent","ctx_r20","ctx_r23","ctx_r26","NavCollapsableComponent","collapse","isOpen","expand","isChildrenOf","child","isUrlInChildren","urlAfterRedirects","clickedItem","ev","styles","CustomerTenantModel","LaboratoryTenantModel","TenantSelectorModel","CustomerTenantModelHelper","viewModels","models","viewModel","_createModelFromInfoCustomerViewModel","_createModelFromReadAllowedCustomerViewModel","infoCustomerViewModel","customerTenant","readAllowedCustomerViewModel","AuthenticatedCustomerService","CustomerTenantPickerComponent","_authenticatedCustomerService","pickerDialogAfterClosedEventHandler","_viewModels","c","showPickerFlag","customerTenantAddedEvent","_pickerComponent","pickerState","uuidSelectedHandler","indexAllowedCustomerViewModel","_setPickerFilter","hat","hatStyle","hatWidth","LaboratoryTenantModelHelper","_createModelFromInfoLaboratoryViewModel","_createModelFromReadAllowedLaboratoryViewModel","infoLaboratoryViewModel","laboratoryTenant","readAllowedLaboratoryViewModel","AuthenticatedLaboratoryService","LaboratoryTenantPickerComponent","_authenticatedLaboratoryService","laboratoryTenantAddedEvent","indexManufacturerViewModel","TenantSelectorComponent","customerTenantClickHandler","_customerTenantPickerComponent","customerTenantPickerAddedHandler","laboratoryTenantClickHandler","_laboratoryTenantPickerComponent","laboratoryTenantPickerAddedHandler","tenantSelector","TenantSelectorModelHelper","displayCustomerTenantPickerFlag","displayLaboratoryTenantPickerFlag","_updateCustomerTenant","_updateLaboratoryTenant","NavigationComponent","NavbarVerticalStyle2Component","fuseConfig","toggleSidebarFolded","toggleSidebarOpened","NavbarComponent","_variant","variant","StorageBannerModel","StorageBannerComponent","storageBanner","StorageBannerModelHelper","areaConfiguredFlag","subscriptionSettingsFlag","SubscriptionBannerModel","SubscriptionBannerComponent","subscriptionBanner","SubscriptionBannerModelHelper","lastActiveSubscriptionDaysLeft","activeSubscriptionExistenceFlag","productType","parseInt","lastActiveSubscriptionDisplayLabel","isInteger","cssClass","decls","TOOLBAR","ACCOUNT_AREA","ACCOUNT_AREAS","APPLICATION_SETTINGS","COLOR_THEMES_TITLE","COLOR_THEMES","LIGHT","DARK","SYSTEM","LOGOUT","MY_ACCOUNT","USER_MANAGEMENT","AreaSelectorComponent","_configureArea","SHORTCUT","CLICK_TO_ADD","SEARCH_FOR_A_PAGE","NO_SHORTCUTS_YET","FuseShortcutsComponent","_fuseTranslationLoaderService","shortcutItems","displayableShortcutItems","searching","mobileShortcutsPanelActive","french","english","portuguese","hideMobileShortcutsPanel","shortcutsEl","isInShortcuts","filterDisplayableShortcutItems","filteredNavigationItems","navigationItems","shortcutItemsString","onMenuOpen","searchInputField","search","translatedNavigationItem","showMobileShortcutsPanel","toggleShortcut","itemToToggle","filteredNavigationItem","s","ThemeSelector","colorTheme","ThemeSelectorComponent","ToolbarComponent","_settingsService","topSeparatorFlag","languages","multiConnexionFlag","helpLinks","buildHelpLinks","setAreaFlag","applicationSettings","helpLinkReleaseNote","helpLinkDocs","helpLinkWarn","helpLinkContact","helpLinkSupport","customerAreaHelpLinkReleaseNote","goToProfile","myAccount","settings","horizontalNavbar","navbar","rightNavbar","hiddenNavbar","selectedLanguage","currentLang","isAuthenticate","username","applicationSettingsFlag","laboratorySettingsFlag","storageSettingsFlag","userCustomerSettingsFlag","taxSettingsFlag","fiscalYearSettingsFlag","userManagementFlag","laboratoryRoleSettingsFlag","userLaboratorySettingsFlag","notificationNumber","unreadNotificationNumber","notifications","laboratoryAreaFlag","customerAreaFlag","use","reload","toggleSidebarOpen","userManagement","LayoutComponent","sidebarOpenedChangedHandler","_sidebarComponent","ProgressBarComponent","_progressBarService","AppComponent","_loggerService","_themingService","_fuseSplashScreenService","_settingService","matIconRegistry","domSanitizer","addSvgIconSet","bypassSecurityTrustResourceUrl","_configureWithNewConfigApi","addLangs","setDefaultLang","navigationFrench","navigationEnglish","navigationPortuguese","ANDROID","IOS","buildNavigation","_themeSubscription","_unsubscrbieConfig$","colorThemeString","width","closed","_applyTheme","className","NoteModule","apiInterceptorProvider","HTTP_INTERCEPTORS","useClass","ApiInterceptor","intercept","request","_isApiRequest","_isApiAreaMessageRequest","_isApiGetAllowedTenantsRequest","handle","HttpResponse","_configureHttpHeaderData","_isProthesisApiRequest","_configureLaboratoryHttpHeaderData","_isGetInfoApiRequest","_apiHashCustomer","has","_apiHashLaboratory","_isProthesisCustomerApiRequest","_configureHash","_compareCustomerHash","apiHashCustomer","apiHashLaboratory","_compareLaboratoryHash","_laboratoryApiAreaMessagePathRegex","test","_customerApiAreaMessagePathRegex","_getAllowedTenantsApiPathRegex","multi","AuthInterceptor","httpRequest","requestUrl","pathname","endsWith","response","statusText","throwError","catchError","mergeMap","authRequest","setAuthHeaders","FormData","append","authInterceptorProvider","BlobErrorHttpInterceptor","req","err","Blob","_resolve","reader","FileReader","onload","errmsg","onerror","readAsText","blobErrorHttpInterceptorProvider","loadingStatusInterceptorProvider","LoadingStatusInterceptor","finalize","AuthGuardWithForcedLogin","canActivate","_","isDone","CoreModule","imports","HttpClientModule","OAuthModule","MatDatepickerModule","MatSlideToggleModule","MatMomentDateModule","MatSnackBarModule","primaryBackground","secondaryBackground","toolbar","customBackgroundColor","background","footer","sidepanel","GlobalErrorHandler","routerHistoryService","handleError","MatPaginatorIntlFr","MatPaginatorIntl","startIndex","max","min","ContentModule","FooterModule","MatToolbarModule","CustomerTenantPickerModule","LaboratoryTenantPickerModule","NavigationModule","MatRippleModule","TranslateModule","common","NavbarVerticalStyle2Module","NavbarModule","FuseShortcutsModule","AreaSelectorModule","MatRadioModule","ThemeSelectorModule","ToolbarModule","MatBadgeModule","CustomerAreaMessageBannerModule","MatCardModule","LaboratoryAreaMessageBannerModule","NotificationCardModule","NotificationSidebarModule","JobNotificationCardModel","AbstractNotificationCardModel","ExportAllNotificationCardModel","JournalNotificationCardModel","JournalNotificationModelHelper","readJournalNotificationViewModels","customDatePipe","journalNotifications","readJournalNotificationViewModel","journalNotification","journalNotificationCard","colorClass","journalNotificationDetail","journalFileType","buildMessageLine1","statusFailedFlag","statusNothingToDoFlag","statusPendingFlag","statusSucceedFlag","journalType","PdfMergeNotificationCardModel","SpreadsheetDashboardNotificationCardModel","SpreadsheetExportNotificationCardModel","AbstractNotificationCardComponent","JobNotificationCardComponent","ExportAllNotificationCardComponent","downloadAllButtonClickedHandler","downloadAllButtonEvent","JournalNotificationCardComponent","downloadJournalFecButtonClickedHandler","downloadJournalFecButtonEvent","downloadJournalPdfButtonClickedHandler","downloadJournalPdfButtonEvent","downloadJournalSpreadsheetButtonClickedHandler","downloadJournalSpreadsheetButtonEvent","openJournalPdfButtonClickedHandler","openJournalPdfButtonEvent","PdfMergeNotificationCardComponent","downloadPdfButtonClickedHandler","downloadMergedPdfButtonEvent","downloadZipButtonClickedHandler","downloadZipButtonEvent","openMergedPdfButtonEvent","SpreadsheetDashboardNotificationCardComponent","downloadSpreadsheetButtonClickedHandler","downloadSpreadsheetButtonEvent","SpreadsheetExportPdfNotificationCardComponent","openSpreadsheetButtonClickedHandler","openSpreadsheetButtonEvent","SpreadsheetExportXlsxNotificationCardComponent","NotificationSidebarComponent","_customDatePipe","noNotificationsLabel","closeClickedHandler","deleteAllNotificationsClickedHandler","_removeNotifications","deleteNotificationClickedHandler","notification","spreadsheetExportNotificationUuid","_pdfViewerComponent","journalNotificationUuid","downloadMergedPdfButtonClickedHandler","pdfMergeNotificationUuid","downloadSpreadsheetDashboardButtonClickedHandler","spreadsheetDashboardNotificationUuid","_readNotificationViewModels","openMergedPdfButtonClickedHandler","openSpreadsheetButtonClickHandler","AbstractNotificationCardModelHelper","readNotificationViewModel","readExportAllNotificationViewModel","ExportAllNotificationModelHelper","readExportAllNotificationViewModels","exportAllNotifications","exportAllNotification","exportAllNotificationCard","readPdfMergeNotificationViewModel","PdfMergeNotificationModelHelper","readPdfMergeNotificationViewModels","pdfMergeNotifications","pdfMergeNotification","creditPdfMergeNotifications","deliveryFormPdfMergeNotifications","fittingFormPdfMergeNotifications","invoicePdfMergeNotifications","proFormaPdfMergeNotifications","quotePdfMergeNotifications","workFormPdfMergeNotifications","readSpreadsheetExportNotificationViewModel","SpreadsheetExportNotificationCardModelHelper","readSpreadsheetExportNotificationViewModels","spreadsheetExportNotificationCards","spreadsheetExportNotificationCard","notificationPrefixLabel","allPdfFlag","multipleFileFlag","multipleFilesFlag","spreadsheetExportNotificationDetail","deliveryFormFilter","messagePrefix","readSpreadsheetDashboardNotificationViewModel","SpreadsheetDashboardNotificationCardModelHelper","readSpreadsheetDashboardNotificationViewModels","spreadsheetDashboardNotificationCards","spreadsheetDashboardNotificationCard","spreadsheetDashboardNotificationDetails","spreadsheetDashboardType","spreadsheetDashboardNotificationDetail","notificationIndex","n","readNotificationViewModelIndex","SidebarModule","StorageBannerModule","SubscriptionBannerModule","LayoutModule","ScrollingModule","appRoutes","path","loadChildren","__webpack_require__","m","HomeModule","HomeCustomerModule","InvoiceModule","PreviewModule","ProductionFlowModule","RateModule","AccountModule","ApplicationSettingsModule","CustomerModule","FileAssetModule","FiscalYearModule","HomeLaboratoryModule","ItemModule","FamilyModule","JournalModule","LaboratoryModule","LaboratoryRoleModule","ManufacturerModule","LaboratoryResourceModule","SectorModule","PaymentModule","CategoryModule","RawMaterialModule","ShadeModule","ShadeGuideModule","SubscriptionModule","UserLaboratoryModule","UserManagementModule","UserModule","UrlRedirectorModule","UrlSwitchModule","redirectTo","matTooltipDefaultOptions","showDelay","hideDelay","touchGestures","touchendHideDelay","disableTooltipInteractivity","AppModule","previousRouterService","registerLocaleData","localeFr","localePt","bootstrap","LOCALE_ID","deps","useFactory","settingsService","MAT_TOOLTIP_DEFAULT_OPTIONS","ErrorHandler","CurrencyPipe","BrowserModule","BrowserAnimationsModule","enableTracing","environment","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","defaultEncapsulation","ViewEncapsulation","webpackContext","module"],"sourceRoot":"webpack:///","sources":["./src/@fuse/animations/index.ts","./src/@fuse/components/navigation/navigation.service.ts","./src/@fuse/components/sidebar/sidebar.service.ts","./src/@fuse/services/translation-loader.service.ts","./src/app/core/customHttpParamEncoder.ts","./src/app/core/services/auth.service.ts","./src/app/core/services/configuration.service.ts","./src/app/core/services/context-menu/context-menu.module.ts","./src/app/core/services/context-menu/context-menu.service.ts","./src/app/core/services/corp-title.service.ts","./src/app/core/services/crud-service-base.ts","./src/app/core/services/dialog-box/abstract-action-confirmation-dialog/abstract-action-confirmation-dialog.component.html","./src/app/core/services/dialog-box/abstract-action-confirmation-dialog/abstract-action-confirmation-dialog.component.ts","./src/app/core/services/dialog-box/action-confirmation-combo-dialog/action-confirmation-combo-dialog.component.ts","./src/app/core/services/dialog-box/action-confirmation-combo-dialog/action-confirmation-combo-dialog.component.html","./src/app/core/services/dialog-box/action-confirmation-dialog/action-confirmation-dialog-validator.ts","./src/app/core/services/dialog-box/action-confirmation-dialog/action-confirmation-dialog.component.html","./src/app/core/services/dialog-box/action-confirmation-dialog/action-confirmation-dialog.component.ts","./src/app/core/services/dialog-box/action-confirmation-information-dialog/action-confirmation-information-dialog.component.ts","./src/app/core/services/dialog-box/action-confirmation-information-dialog/action-confirmation-information-dialog.component.html","./src/app/core/services/dialog-box/action-confirmation-message-dialog/action-confirmation-message-dialog.component.ts","./src/app/core/services/dialog-box/action-confirmation-message-dialog/action-confirmation-message-dialog.component.html","./src/app/core/services/dialog-box/action-confirmation-number-dialog/action-confirmation-number-dialog.component.html","./src/app/core/services/dialog-box/action-confirmation-number-dialog/action-confirmation-number-dialog.component.ts","./src/app/core/services/dialog-box/dialog-box.service.ts","./src/app/core/services/drag-and-drop.service.ts","./src/app/core/services/focus.service.ts","./src/app/core/services/form-state.service.ts","./src/app/core/services/highlight.service.ts","./src/app/core/services/left-menu/area-menu.enum.ts","./src/app/core/services/left-menu/left-menu.service.ts","./src/app/core/services/local-storage.service.ts","./src/app/core/services/notify/smart-snack/smart-snack.component.html","./src/app/core/services/notify/smart-snack/smart-snack.component.ts","./src/app/core/services/notify/notify.service.ts","./src/app/core/services/period-search.service.ts","./src/app/core/services/picker-state.service.ts","./src/app/core/services/preselection.service.ts","./src/app/core/services/progress-bar/progress-bar.module.ts","./src/app/core/services/progress-bar/progress-bar.service.ts","./src/app/shared/prothesis-api-view-models/account-state.view-model.ts","./src/app/core/services/prothesis-api/customer.service.ts","./src/app/core/services/prothesis-api/helper/build-url-helper.ts","./src/app/core/services/prothesis-api/laboratory-http-header-model.ts","./src/app/core/services/prothesis-api/laboratory-http-header.service.ts","./src/app/core/services/prothesis-api/laboratory-resource.service.ts","./src/app/shared/enums/notification-alert-type.enum.ts","./src/app/shared/prothesis-api-filters/notification-filter.ts","./src/app/shared/prothesis-base-api-view-models/list-view-model.ts","./src/app/core/services/prothesis-api/notification.service.ts","./src/app/core/services/prothesis-api/pro-forma.service.ts","./src/app/core/services/prothesis-api/production-flow.service.ts","./src/app/core/services/prothesis-api/rate.service.ts","./src/app/core/services/prothesis-api/time-zone-singleton.ts","./src/app/core/services/prothesis-api/user-customer.service.ts","./src/app/core/services/prothesis-api/working-laboratory.service.ts","./src/app/core/services/prothesis-customer-api/customer.service.ts","./src/app/core/services/prothesis-customer-api/production-flow.service.ts","./src/app/core/services/prothesis-customer-api/working-customer.service.ts","./src/app/core/services/read-service-base.ts","./src/app/core/services/router-history.service.ts","./src/app/core/services/session-storage.service.ts","./src/app/core/services/tenant-crud-service-base.ts","./src/app/core/services/tenant-crud-summary-service-base.ts","./src/app/core/services/tenant-read-service-base.ts","./src/app/core/services/time-zone.service.ts","./src/app/layout/components/sidebar/sidebar.component.ts","./src/app/layout/components/sidebar/sidebar.component.html","./src/app/pages/customer-area/invoice/model-helpers/advanced-filter-panel-model.helper.ts","./src/app/pages/customer-area/invoice/invoice.component.html","./src/app/pages/customer-area/invoice/invoice.component.ts","./src/app/pages/customer-area/invoice/models/advanced-filter-panel-model.ts","./src/app/pages/customer-area/invoice/state/credit-state.ts","./src/app/pages/customer-area/invoice/state/invoice-state.ts","./src/app/pages/customer-area/invoice/state/pro-forma-state.ts","./src/app/pages/customer-area/production-flow/models/advanced-filter-panel-model.ts","./src/app/pages/customer-area/production-flow/model-helpers/advanced-filter-panel-model.helper.ts","./src/app/pages/customer-area/production-flow/production-flow.component.html","./src/app/pages/customer-area/production-flow/production-flow.component.ts","./src/app/pages/customer-area/production-flow/production-flow/states/delivery-form-state.ts","./src/app/pages/customer-area/production-flow/production-flow/states/fitting-form-state.ts","./src/app/pages/customer-area/production-flow/production-flow/states/invoice-state.ts","./src/app/pages/customer-area/production-flow/production-flow/states/pro-forma-state.ts","./src/app/pages/customer-area/production-flow/production-flow/states/production-flow-state.ts","./src/app/pages/customer-area/production-flow/production-flow/states/quote-state.ts","./src/app/pages/laboratory-area/customer/customer-state.ts","./src/app/shared/prothesis-api-view-models/update-customer-tax-collection-view-model.ts","./src/app/shared/components/dialog/update-customer-taxes-dialog/models/update-customer-taxes-dialog-model.ts","./src/app/shared/components/dialog/update-customer-taxes-dialog/model-helpers/update-customer-taxes-dialog-model-helper.ts","./src/app/shared/components/dialog/update-customer-taxes-dialog/update-customer-taxes-dialog.component.html","./src/app/shared/components/dialog/update-customer-taxes-dialog/update-customer-taxes-dialog.component.ts","./src/app/pages/laboratory-area/customer/models/extend-option-user-customer.model.ts","./src/app/pages/laboratory-area/customer/model-helpers/customer-model.helper.ts","./src/app/pages/laboratory-area/customer/customer.component.html","./src/app/pages/laboratory-area/customer/customer.component.ts","./src/app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/model-helpers/customer-spreadsheet-export-dialog.helper.ts","./src/app/pages/laboratory-area/customer/models/customer-model.ts","./src/app/pages/laboratory-area/invoice/model-helpers/advanced-filter-panel-model.helper.ts","./src/app/pages/laboratory-area/invoice/invoice.component.html","./src/app/pages/laboratory-area/invoice/invoice.component.ts","./src/app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/model-helpers/invoice-unpaid-reminder-spreadsheet-export-dialog.helper.ts","./src/app/pages/laboratory-area/invoice/models/advanced-filter-panel-model.ts","./src/app/pages/laboratory-area/invoice/state/credit-state.ts","./src/app/pages/laboratory-area/invoice/state/invoice-state.ts","./src/app/pages/laboratory-area/invoice/state/pro-forma-state.ts","./src/app/pages/laboratory-area/production-flow/model-helpers/form-document-selection-model-helper.ts","./src/app/pages/laboratory-area/production-flow/models/advanced-filter-panel-model.ts","./src/app/pages/laboratory-area/production-flow/models/form-document-selection-model.ts","./src/app/pages/laboratory-area/production-flow/model-helpers/advanced-filter-panel-model.helper.ts","./src/app/pages/laboratory-area/production-flow/production-flow.component.html","./src/app/pages/laboratory-area/production-flow/production-flow.component.ts","./src/app/pages/laboratory-area/production-flow/states/delivery-form-state.ts","./src/app/pages/laboratory-area/production-flow/states/fitting-form-state.ts","./src/app/pages/laboratory-area/production-flow/states/invoice-state.ts","./src/app/pages/laboratory-area/production-flow/states/pro-forma-state.ts","./src/app/pages/laboratory-area/production-flow/states/production-flow-state.ts","./src/app/pages/laboratory-area/production-flow/states/quote-state.ts","./src/app/pages/laboratory-area/production-flow/states/work-form-state.ts","./src/app/shared/common-models/models/laboratory-tax-model.ts","./src/app/shared/common-models/models/laboratory-tax-rate-model.ts","./src/app/shared/common-models/model-helpers/laboratory-tax-model-helper.ts","./src/app/shared/common-models/model-helpers/laboratory-tax-rate-model-helper.ts","./src/app/shared/common-models/model-helpers/sector-or-specialty-model.helper.ts","./src/app/shared/common-models/models/routerLink.model.ts","./src/app/shared/components/action-buttons/custom-action-buttons/custom-action-buttons.component.html","./src/app/shared/components/action-buttons/custom-action-buttons/custom-action-buttons.component.ts","./src/app/shared/components/action-buttons/duplicate-action-buttons/duplicate-action-buttons.component.html","./src/app/shared/components/action-buttons/duplicate-action-buttons/duplicate-action-buttons.component.ts","./src/app/core/services/context-menu/context-menu.directive.ts","./src/app/shared/components/action-buttons/print-action-buttons/print-action-buttons.component.html","./src/app/shared/components/action-buttons/print-action-buttons/print-action-buttons.component.ts","./src/app/shared/components/action-buttons/print-action-buttons/print-action-buttons.module.ts","./src/app/shared/components/action-buttons/smart-action-buttons/smart-action-buttons.component.html","./src/app/shared/components/action-buttons/smart-action-buttons/smart-action-buttons.component.ts","./src/app/shared/components/action-buttons/state-action-buttons/state-action-buttons.component.html","./src/app/shared/components/action-buttons/state-action-buttons/state-action-buttons.component.ts","./src/app/shared/components/aggregate/aggregate.component.html","./src/app/shared/components/aggregate/aggregate.component.ts","./src/app/shared/components/cards/grouped-label-card/grouped-label-card.component.html","./src/app/shared/components/cards/grouped-label-card/grouped-label-card.component.ts","./src/app/shared/components/cards/grouped-label-card/grouped-label-card.module.ts","./src/app/shared/components/cards/hat-card/hat-card.component.html","./src/app/shared/components/cards/hat-card/hat-card.component.ts","./src/app/shared/components/cards/hat-card/hat-card.module.ts","./src/app/shared/components/cards/list-card/list-card-element.model.ts","./src/app/shared/components/cards/list-card/list-card.component.html","./src/app/shared/components/cards/list-card/list-card.component.ts","./src/app/shared/components/cards/price-card/price-card.component.html","./src/app/shared/components/cards/price-card/price-card.component.ts","./src/app/shared/components/cards/progress-bar-storage-card/model-helpers/progress-bar-storage-card-model-helper.ts","./src/app/shared/components/cards/progress-bar-storage-card/models/progress-bar-storage-card-model.ts","./src/app/shared/components/combo/combo-model.helper.ts","./src/app/shared/components/combo/combo-model.ts","./src/app/shared/components/combo/combo.component.html","./src/app/shared/components/combo/combo.component.ts","./src/app/shared/components/combo/combo.module.ts","./src/app/shared/components/dialog/abstract-dialog/abstract-dialog.component.html","./src/app/shared/components/dialog/abstract-dialog/abstract-dialog.component.ts","./src/app/shared/components/dialog/button-list-dialog/button-list-dialog.component.html","./src/app/shared/components/dialog/button-list-dialog/button-list-dialog.component.ts","./src/app/shared/components/dialog/button-list-dialog/models/button-list-dialog-model.ts","./src/app/shared/components/dialog/button-list-dialog/model-helpers/button-list-dialog-model-helper.ts","./src/app/shared/components/empty-list/empty-list.module.ts","./src/app/shared/components/filter-panels/customer-filter-panel/models/customer-filter-panel.model.ts","./src/app/shared/components/filter-panels/laboratory-resource-filter-panel/models/laboratory-resource-filter-panel.model.ts","./src/app/shared/components/form-date-interval/form-date-interval-model.ts","./src/app/shared/components/form-time/model-helpers/form-time-model-helper.ts","./src/app/shared/components/form-time/models/form-time-model.ts","./src/app/shared/components/grid-filter/grid-filter-model.ts","./src/app/shared/components/grid-filter/grid-filter.component.ts","./src/app/shared/components/grid-filter/grid-filter.component.html","./src/app/shared/components/grid-filter/grid-filter.module.ts","./src/app/shared/components/grid-sort/grid-sort.component.html","./src/app/shared/components/grid-sort/grid-sort.component.ts","./src/app/shared/components/header/header.component.html","./src/app/shared/components/header/header.component.ts","./src/app/shared/components/empty-list/empty-list.component.html","./src/app/shared/components/empty-list/empty-list.component.ts","./src/app/shared/components/list-result/list-result.component.html","./src/app/shared/components/list-result/list-result.component.ts","./src/app/shared/components/list-result/list-result.module.ts","./src/app/shared/components/note/note-type.enum.ts","./src/app/shared/components/note/note.component.html","./src/app/shared/components/note/note.component.ts","./src/app/shared/components/note/note.model.ts","./src/app/shared/components/pdf-viewer/pdf-viewer.component.ts","./src/app/shared/components/pdf-viewer/pdf-viewer.component.html","./src/app/shared/components/pdf-viewer/pdf-viewer.module.ts","./src/app/shared/components/period-search/model-helpers/customer-area-period-search-model-helper.ts","./src/app/shared/components/period-search/model-helpers/laboratory-area-period-search-info-model-helper.ts","./src/app/shared/components/period-search/model-helpers/laboratory-area-period-search-model-helper.ts","./src/app/shared/components/period-search/models/period-search-info-model.ts","./src/app/shared/components/period-search/models/period-search-model.ts","./src/app/shared/components/pickers/customer-picker/customer-group.enum.helper.ts","./src/app/shared/components/pickers/customer-picker/customer-group.enum.ts","./src/app/shared/components/pickers/customer-picker/models/customer.model.ts","./src/app/shared/components/pickers/laboratory-resource-picker/models/laboratory-resource-model.ts","./src/app/shared/components/pickers/picker/element.model.ts","./src/app/shared/components/pickers/picker/picker-dialog/picker-dialog-model.ts","./src/app/shared/components/pickers/picker/picker-dialog/picker-dialog.component.html","./src/app/shared/components/pickers/picker/picker-dialog/picker-dialog.component.ts","./src/app/shared/components/pickers/picker/picker.component.html","./src/app/shared/components/pickers/picker/picker.component.ts","./src/app/shared/components/pickers/picker/picker.module.ts","./src/app/shared/components/rows/abstract-row-component.ts","./src/app/shared/components/rows/row-element/row-element.component.html","./src/app/shared/components/rows/row-element/row-element.component.ts","./src/app/shared/components/rows/row-element/row-element.module.ts","./src/app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/button-list-spreadsheet-export-dialog.component.ts","./src/app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/button-list-spreadsheet-export-dialog.component.html","./src/app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/models/button-list-spreadsheet-export-dialog.model.ts","./src/app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/model-helpers/button-list-spreadsheet-export-dialog-model-helper.ts","./src/app/shared/components/table-wrapper/table-config.ts","./src/app/shared/components/table-wrapper/table-wrapper.component.ts","./src/app/shared/components/table-wrapper/table-wrapper.component.html","./src/app/shared/components/table-wrapper/table-wrapper.module.ts","./src/app/shared/directives/directives.module.ts","./src/app/shared/directives/disable-directive.ts","./src/app/shared/directives/first-letter-upper-case.directive.ts","./src/app/shared/enum-helpers/Customer/period-search-type.enum.helper.ts","./src/app/shared/enum-helpers/Laboratory/period-search-type.enum.helper.ts","./src/app/shared/enum-helpers/contact-title.enum.helper.ts","./src/app/shared/enum-helpers/customer-title.enum.helper.ts","./src/app/shared/enum-helpers/customer-user-customer-status.enum.helper.ts","./src/app/shared/enum-helpers/document-status.enum.helper.ts","./src/app/shared/enum-helpers/file-asset-type.enum.helper.ts","./src/app/shared/enum-helpers/journal-file-type.enum.helper.ts","./src/app/shared/enum-helpers/journal-type.enum.helper.ts","./src/app/shared/enum-helpers/pdf-credit-type-helper.ts","./src/app/shared/enum-helpers/pdf-delivery-form-type-helper.ts","./src/app/shared/enum-helpers/pdf-fitting-form-type-helper.ts","./src/app/shared/enum-helpers/pdf-invoice-type-helper.ts","./src/app/shared/enum-helpers/pdf-pro-forma-type-helper.ts","./src/app/shared/enum-helpers/pdf-quote-type-helper.ts","./src/app/shared/enum-helpers/pdf-work-form-type-helper.ts","./src/app/shared/enum-helpers/period-search-credit-date-type.enum.helper.ts","./src/app/shared/enum-helpers/period-search-delivery-form-date-type.enum.helper.ts","./src/app/shared/enum-helpers/period-search-invoice-date-type.enum.helper.ts","./src/app/shared/enum-helpers/spreadsheet-dashboard-type.enum.helper.ts","./src/app/shared/enum-helpers/spreadsheet-export-type.enum.helper.ts","./src/app/shared/enums/Customer/period-search-type.enum.ts","./src/app/shared/enums/Laboratory/period-search-type.enum.ts","./src/app/shared/enums/area.enum.ts","./src/app/shared/enums/contact-title.enum.ts","./src/app/shared/enums/customer-title.enum.ts","./src/app/shared/enums/customer-user-customer-status.enum.ts","./src/app/shared/enums/document-status.enum.ts","./src/app/shared/enums/document-type.enum.ts","./src/app/shared/enums/file-asset-type.enum.ts","./src/app/shared/enums/highlight-type.enum.ts","./src/app/shared/enums/journal-file-type.enum.ts","./src/app/shared/enums/journal-type.enum.ts","./src/app/shared/enums/notification-status.enum.ts","./src/app/shared/enums/pdf-credit-type.enum.ts","./src/app/shared/enums/pdf-customer-rate.enum.ts","./src/app/shared/enums/pdf-delivery-form-type.enum.ts","./src/app/shared/enums/pdf-fitting-form-type.enum.ts","./src/app/shared/enums/pdf-invoice-type.enum.ts","./src/app/shared/enums/pdf-merge-type.enum.ts","./src/app/shared/enums/pdf-pro-forma-type.enum.ts","./src/app/shared/enums/pdf-quote-type.enum.ts","./src/app/shared/enums/pdf-work-form-type.enum.ts","./src/app/shared/enums/period-search-credit-date-type.enum.ts","./src/app/shared/enums/period-search-delivery-form-date-type.enum.ts","./src/app/shared/enums/period-search-file-asset-date-type.enum.ts","./src/app/shared/enums/period-search-invoice-date-type.enum.ts","./src/app/shared/enums/product-type.enum.ts","./src/app/shared/enums/publish-status.enum.ts","./src/app/shared/enums/spreadsheet-dashboard-type.enum.ts","./src/app/shared/enums/spreadsheet-export-file-type.enum.ts","./src/app/shared/enums/spreadsheet-export-type.enum.ts","./src/app/shared/prothesis-api-view-models/add-spreadsheet-export-notification.view-model.ts","./src/app/shared/helpers/add-spreadsheet-export-notification.view-model-helper.ts","./src/app/shared/helpers/breakpoint-helper.ts","./src/app/shared/helpers/convert-helper.ts","./src/app/shared/helpers/file-helper.ts","./src/app/shared/helpers/html-helper.ts","./src/app/shared/helpers/number-helper.ts","./src/app/shared/prothesis-api-view-models/read-spreadsheet-export-notification-detail.view-model.ts","./src/app/shared/helpers/read-spreadsheet-export-notification-detail.view-model-helper.ts","./src/app/shared/helpers/row-element-helper.ts","./src/app/shared/helpers/sort-helper.ts","./src/app/shared/helpers/view-model-helper.ts","./src/app/shared/pipes/currency-symbol.pipe.ts","./src/app/shared/pipes/custom-date.pipe.ts","./src/app/shared/pipes/loose-currency.pipe.ts","./src/app/shared/pipes/pipe.module.ts","./src/app/shared/prothesis-api-filters/credit-filter.ts","./src/app/shared/prothesis-api-filters/customer-filter.ts","./src/app/shared/prothesis-api-filters/delivery-form-filter.ts","./src/app/shared/prothesis-api-filters/document-filter.ts","./src/app/shared/prothesis-api-filters/fitting-form-filter.ts","./src/app/shared/prothesis-api-filters/invoice-filter.ts","./src/app/shared/prothesis-api-filters/laboratory-resource-filter.ts","./src/app/shared/prothesis-api-filters/pro-forma-filter.ts","./src/app/shared/prothesis-api-filters/published-document-filter.ts","./src/app/shared/prothesis-api-filters/quote-filter.ts","./src/app/shared/prothesis-api-filters/user-customer-filter.ts","./src/app/shared/prothesis-api-filters/work-form-filter.ts","./src/app/shared/prothesis-api-view-models/un-publish.view-model.ts","./src/app/shared/prothesis-api-view-models/uuid-collection-in-cascade-flag.view-model.ts","./src/app/shared/prothesis-base-api-filters/standard-filter.ts","./src/app/shared/prothesis-base-api-filters/tenant-filter.ts","./src/app/shared/prothesis-base-api-view-models/component-view-model-base.ts","./src/app/shared/prothesis-base-api-view-models/tenant-view-model-base.ts","./src/app/shared/prothesis-base-api-view-models/uuid-collection.view-model.ts","./src/app/shared/prothesis-base-api-view-models/versioned-view-model-base.ts","./src/app/shared/prothesis-base-api-view-models/view-model-base.ts","./src/app/shared/prothesis-customer-api-filters/credit-filter.ts","./src/app/shared/prothesis-customer-api-filters/customer-filter.ts","./src/app/shared/prothesis-customer-api-filters/delivery-form-filter.ts","./src/app/shared/prothesis-customer-api-filters/document-filter.ts","./src/app/shared/prothesis-customer-api-filters/fitting-form-filter.ts","./src/app/shared/prothesis-customer-api-filters/invoice-filter.ts","./src/app/shared/prothesis-customer-api-filters/pro-forma-filter.ts","./src/app/shared/prothesis-customer-api-filters/quote-filter.ts","./src/app/shared/saved-change/saved-change.guard.ts","./src/app/shared/states/paginated-list-state.ts","./src/app/shared/states/picker-state.ts","./src/app/shared/validators/custom-validators.ts","./src/@fuse/components/sidebar/sidebar.module.ts","./src/@fuse/services/config.service.ts","./src/@fuse/fuse.module.ts","./src/@fuse/directives/directives.ts","./src/@fuse/pipes/pipes.module.ts","./src/@fuse/shared.module.ts","./src/app/core/services/left-menu/i18n/en.ts","./src/app/core/services/left-menu/i18n/fr.ts","./src/app/core/services/left-menu/i18n/pt.ts","./src/app/core/services/logger.service.ts","./src/app/core/services/theme.service.ts","./src/@fuse/services/splash-screen.service.ts","./src/app/core/services/settings.service.ts","./src/app/core/services/context-menu/context-menu-holder/context-menu-holder.component.html","./src/app/core/services/context-menu/context-menu-holder/context-menu-holder.component.ts","./src/app/core/services/prothesis-customer-api/pub/customer-area-message.service.ts","./src/app/core/services/http-header-model.ts","./src/app/core/services/http-header.service.ts","./src/app/layout/components/customer-area-message-banner/customer-area-message-banner.component.html","./src/app/layout/components/customer-area-message-banner/customer-area-message-banner.component.ts","./src/@fuse/services/match-media.service.ts","./src/@fuse/components/sidebar/sidebar.component.ts","./src/@fuse/components/sidebar/sidebar.component.html","./src/app/layout/components/content/content.component.html","./src/app/layout/components/content/content.component.ts","./src/app/layout/components/footer/footer.component.ts","./src/app/layout/components/footer/footer.component.html","./src/app/core/services/prothesis-api/pub/laboratory-area-message.service.ts","./src/app/layout/components/laboratory-area-message-banner/laboratory-area-message-banner.component.html","./src/app/layout/components/laboratory-area-message-banner/laboratory-area-message-banner.component.ts","./src/app/layout/components/navigation/nav-group/nav-group.component.html","./src/app/layout/components/navigation/nav-group/nav-group.component.ts","./src/app/layout/components/navigation/nav-item/nav-item.component.html","./src/app/layout/components/navigation/nav-item/nav-item.component.ts","./src/app/layout/components/navigation/nav-collapsable/nav-collapsable.component.html","./src/app/layout/components/navigation/nav-collapsable/nav-collapsable.component.ts","./src/app/shared/components/pickers/customer-tenant-picker/models/customer-tenant-model.ts","./src/app/shared/components/pickers/laboratory-tenant-picker/models/laboratory-tenant-model.ts","./src/app/layout/components/navigation/tenant-selector/models/tenant-selector.model.ts","./src/app/shared/components/pickers/customer-tenant-picker/model-helpers/customer-tenant-model-helper.ts","./src/app/core/services/prothesis-customer-api/authenticated/authenticated-customer.service.ts","./src/app/shared/components/pickers/customer-tenant-picker/customer-tenant-picker.component.ts","./src/app/shared/components/pickers/customer-tenant-picker/customer-tenant-picker.component.html","./src/app/shared/components/pickers/laboratory-tenant-picker/model-helpers/laboratory-tenant-model-helper.ts","./src/app/core/services/prothesis-api/authenticated/authenticated-laboratory.service.ts","./src/app/shared/components/pickers/laboratory-tenant-picker/laboratory-tenant-picker.component.ts","./src/app/shared/components/pickers/laboratory-tenant-picker/laboratory-tenant-picker.component.html","./src/app/layout/components/navigation/tenant-selector/tenant-selector.component.html","./src/app/layout/components/navigation/tenant-selector/tenant-selector.component.ts","./src/app/layout/components/navigation/tenant-selector/model-helpers/tenant-selector.model-helpers.ts","./src/app/layout/components/navigation/navigation.component.html","./src/app/layout/components/navigation/navigation.component.ts","./src/app/layout/components/navbar/vertical/style-2/style-2.component.ts","./src/app/layout/components/navbar/vertical/style-2/style-2.component.html","./src/app/layout/components/navbar/navbar.component.html","./src/app/layout/components/navbar/navbar.component.ts","./src/app/layout/components/storage-banner/storage-banner-model.ts","./src/app/layout/components/storage-banner/storage-banner.component.html","./src/app/layout/components/storage-banner/storage-banner.component.ts","./src/app/layout/components/storage-banner/storage-banner-model-helper.ts","./src/app/layout/components/subscription-banner/subscription-banner.model.ts","./src/app/layout/components/subscription-banner/subscription-banner.component.html","./src/app/layout/components/subscription-banner/subscription-banner.component.ts","./src/app/layout/components/subscription-banner/subscription-banner.model.helper.ts","./src/app/layout/components/toolbar/i18n/en.ts","./src/app/layout/components/toolbar/i18n/fr.ts","./src/app/layout/components/toolbar/i18n/pt.ts","./src/app/layout/components/toolbar/area-selector/area-selector.component.ts","./src/app/layout/components/toolbar/area-selector/area-selector.component.html","./src/@fuse/components/shortcuts/i18n/en.ts","./src/@fuse/components/shortcuts/i18n/fr.ts","./src/@fuse/components/shortcuts/i18n/pt.ts","./src/@fuse/components/shortcuts/shortcuts.component.html","./src/@fuse/components/shortcuts/shortcuts.component.ts","./src/@fuse/types/theme-selector.ts","./src/app/layout/components/toolbar/theme-selector/theme-selector.component.ts","./src/app/layout/components/toolbar/theme-selector/theme-selector.component.html","./src/app/layout/components/toolbar/toolbar.component.html","./src/app/layout/components/toolbar/toolbar.component.ts","./src/app/layout/layout.component.html","./src/app/layout/layout.component.ts","./src/app/core/services/progress-bar/progress-bar/progress-bar.component.html","./src/app/core/services/progress-bar/progress-bar/progress-bar.component.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/app/shared/components/note/note.module.ts","./src/app/core/api.interceptor.ts","./src/app/core/auth.interceptor.ts","./src/app/core/blob-error-http.interceptor.ts","./src/app/core/loading-status.interceptor.ts","./src/app/core/services/auth-guard-with-forced-login.service.ts","./src/app/core/core.module.ts","./src/app/fuse-config/index.ts","./src/app/global-error-handler.ts","./src/app/i18n/MatPaginatorIntlFr.ts","./src/app/layout/components/content/content.module.ts","./src/app/layout/components/footer/footer.module.ts","./src/app/shared/components/pickers/customer-tenant-picker/customer-tenant-picker.module.ts","./src/app/shared/components/pickers/laboratory-tenant-picker/laboratory-tenant-picker.module.ts","./src/app/layout/components/navigation/navigation.module.ts","./src/app/layout/components/navbar/vertical/style-2/style-2.module.ts","./src/app/layout/components/navbar/navbar.module.ts","./src/@fuse/components/shortcuts/shortcuts.module.ts","./src/app/layout/components/toolbar/area-selector/area-selector.module.ts","./src/app/layout/components/toolbar/theme-selector/theme-selector.module.ts","./src/app/layout/components/toolbar/toolbar.module.ts","./src/app/layout/components/customer-area-message-banner/customer-area-message-banner.module.ts","./src/app/layout/components/laboratory-area-message-banner/laboratory-area-message-banner.module.ts","./src/app/shared/components/notification-card/notification-card.module.ts","./src/app/layout/components/sidebar/notification-sidebar/notification-sidebar.module.ts","./src/app/shared/components/notification-card/job-notification-card/job-notification-card.model.ts","./src/app/shared/components/notification-card/abstract-notification-card/abstract-notification-card.model.ts","./src/app/shared/components/notification-card/job-notification-card/export-all-notification-card/export-all-notification-card.model.ts","./src/app/shared/components/notification-card/job-notification-card/journal-notification-card/journal-notification-card.model.ts","./src/app/shared/components/notification-card/job-notification-card/journal-notification-card/journal-notification.model.helper.ts","./src/app/shared/components/notification-card/job-notification-card/pdf-merge-notification-card/pdf-merge-notification-card.model.ts","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-dashboard-notification-card/spreadsheet-dashboard-notification-card.model.ts","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-export-notification-card/spreadsheet-export-notification-card.model.ts","./src/app/shared/components/notification-card/abstract-notification-card/abstract-notification-card.component.html","./src/app/shared/components/notification-card/abstract-notification-card/abstract-notification-card.component.ts","./src/app/shared/components/notification-card/job-notification-card/job-notification-card.component.html","./src/app/shared/components/notification-card/job-notification-card/job-notification-card.component.ts","./src/app/shared/components/notification-card/job-notification-card/export-all-notification-card/export-all-notification-card.component.ts","./src/app/shared/components/notification-card/job-notification-card/export-all-notification-card/export-all-notification-card.component.html","./src/app/shared/components/notification-card/job-notification-card/journal-notification-card/journal-notification-card.component.ts","./src/app/shared/components/notification-card/job-notification-card/journal-notification-card/journal-notification-card.component.html","./src/app/shared/components/notification-card/job-notification-card/pdf-merge-notification-card/pdf-merge-notification-card.component.ts","./src/app/shared/components/notification-card/job-notification-card/pdf-merge-notification-card/pdf-merge-notification-card.component.html","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-dashboard-notification-card/spreadsheet-dashboard-notification-card.component.ts","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-dashboard-notification-card/spreadsheet-dashboard-notification-card.component.html","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-export-notification-card/pdf/spreadsheet-export-pdf-notification-card.component.ts","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-export-notification-card/pdf/spreadsheet-export-pdf-notification-card.component.html","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-export-notification-card/xlsx/spreadsheet-export-xlsx-notification-card.component.ts","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-export-notification-card/xlsx/spreadsheet-export-xlsx-notification-card.component.html","./src/app/layout/components/sidebar/notification-sidebar/notification-sidebar.component.html","./src/app/layout/components/sidebar/notification-sidebar/notification-sidebar.component.ts","./src/app/shared/components/notification-card/abstract-notification-card/abstract-notification-card.model.helper.ts","./src/app/shared/components/notification-card/job-notification-card/export-all-notification-card/export-all-notification.model.helper.ts","./src/app/shared/components/notification-card/job-notification-card/pdf-merge-notification-card/pdf-merge-notification.model.helper.ts","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-export-notification-card/spreadsheet-export-notification-card.model.helper.ts","./src/app/shared/components/notification-card/job-notification-card/spreadsheet-dashboard-notification-card/spreadsheet-dashboard-notification-card.model.helper.ts","./src/app/layout/components/sidebar/sidebar.module.ts","./src/app/layout/components/storage-banner/storage-banner.module.ts","./src/app/layout/components/subscription-banner/subscription-banner.module.ts","./src/app/layout/layout.module.ts","./src/app/route.ts","./src/app/app.module.ts","./src/main.ts","./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["import {\n animate,\n animateChild,\n animation,\n group,\n query,\n sequence,\n stagger,\n state,\n style,\n transition,\n trigger,\n useAnimation,\n} from '@angular/animations';\n\nconst customAnimation = animation(\n [\n style({\n opacity: '{{opacity}}',\n transform: 'scale({{scale}}) translate3d({{x}}, {{y}}, {{z}})',\n }),\n animate('{{duration}} {{delay}} cubic-bezier(0.0, 0.0, 0.2, 1)', style('*')),\n ],\n {\n params: {\n duration: '200ms',\n delay: '0ms',\n opacity: '0',\n scale: '1',\n x: '0',\n y: '0',\n z: '0',\n },\n }\n);\n\nexport const fuseAnimations = [\n trigger('animate', [transition('void => *', [useAnimation(customAnimation)])]),\n\n trigger('animateStagger', [\n state('50', style('*')),\n state('100', style('*')),\n state('200', style('*')),\n\n transition('void => 50', query('@*', [stagger('50ms', [animateChild()])], { optional: true })),\n transition('void => 100', query('@*', [stagger('100ms', [animateChild()])], { optional: true })),\n transition('void => 200', query('@*', [stagger('200ms', [animateChild()])], { optional: true })),\n ]),\n\n trigger('fadeInOut', [\n state(\n '0, void',\n style({\n opacity: 0,\n })\n ),\n state(\n '1, *',\n style({\n opacity: 1,\n })\n ),\n transition('1 => 0', animate('300ms ease-out')),\n transition('0 => 1', animate('300ms ease-in')),\n transition('void <=> *', animate('300ms ease-in')),\n ]),\n\n trigger('slideInOut', [\n state(\n '0',\n style({\n height: '0px',\n })\n ),\n state(\n '1',\n style({\n height: '*',\n })\n ),\n transition('1 => 0', animate('300ms ease-out')),\n transition('0 => 1', animate('300ms ease-in')),\n ]),\n\n trigger('slideIn', [\n transition('void => left', [\n style({\n transform: 'translateX(100%)',\n }),\n animate(\n '300ms ease-in',\n style({\n transform: 'translateX(0)',\n })\n ),\n ]),\n transition('left => void', [\n style({\n transform: 'translateX(0)',\n }),\n animate(\n '300ms ease-in',\n style({\n transform: 'translateX(-100%)',\n })\n ),\n ]),\n transition('void => right', [\n style({\n transform: 'translateX(-100%)',\n }),\n animate(\n '300ms ease-in',\n style({\n transform: 'translateX(0)',\n })\n ),\n ]),\n transition('right => void', [\n style({\n transform: 'translateX(0)',\n }),\n animate(\n '300ms ease-in',\n style({\n transform: 'translateX(100%)',\n })\n ),\n ]),\n ]),\n\n trigger('slideInLeft', [\n state(\n 'void',\n style({\n transform: 'translateX(-100%)',\n })\n ),\n state(\n '*',\n style({\n transform: 'translateX(0)',\n })\n ),\n transition('void => *', animate('300ms')),\n transition('* => void', animate('300ms')),\n ]),\n\n trigger('slideInRight', [\n state(\n 'void',\n style({\n transform: 'translateX(100%)',\n })\n ),\n state(\n '*',\n style({\n transform: 'translateX(0)',\n })\n ),\n transition('void => *', animate('300ms')),\n transition('* => void', animate('300ms')),\n ]),\n\n trigger('slideInTop', [\n state(\n 'void',\n style({\n transform: 'translateY(-100%)',\n })\n ),\n state(\n '*',\n style({\n transform: 'translateY(0)',\n })\n ),\n transition('void => *', animate('300ms')),\n transition('* => void', animate('300ms')),\n ]),\n\n trigger('slideInBottom', [\n state(\n 'void',\n style({\n transform: 'translateY(100%)',\n })\n ),\n state(\n '*',\n style({\n transform: 'translateY(0)',\n })\n ),\n transition('void => *', animate('300ms')),\n transition('* => void', animate('300ms')),\n ]),\n\n trigger('expandCollapse', [\n state(\n 'void',\n style({\n height: '0px',\n })\n ),\n state(\n '*',\n style({\n height: '*',\n })\n ),\n transition('void => *', animate('300ms ease-out')),\n transition('* => void', animate('300ms ease-in')),\n ]),\n\n // -----------------------------------------------------------------------------------------------------\n // @ Router animations\n // -----------------------------------------------------------------------------------------------------\n\n trigger('routerTransitionLeft', [\n transition('* => *', [\n query(\n 'content > :enter, content > :leave',\n [\n style({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n ],\n { optional: true }\n ),\n query(\n 'content > :enter',\n [\n style({\n transform: 'translateX(100%)',\n opacity: 0,\n }),\n ],\n { optional: true }\n ),\n sequence([\n group([\n query(\n 'content > :leave',\n [\n style({\n transform: 'translateX(0)',\n opacity: 1,\n }),\n animate(\n '600ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n transform: 'translateX(-100%)',\n opacity: 0,\n })\n ),\n ],\n { optional: true }\n ),\n query(\n 'content > :enter',\n [\n style({ transform: 'translateX(100%)' }),\n animate(\n '600ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n transform: 'translateX(0%)',\n opacity: 1,\n })\n ),\n ],\n { optional: true }\n ),\n ]),\n query('content > :leave', animateChild(), { optional: true }),\n query('content > :enter', animateChild(), { optional: true }),\n ]),\n ]),\n ]),\n\n trigger('routerTransitionRight', [\n transition('* => *', [\n query(\n 'content > :enter, content > :leave',\n [\n style({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n ],\n { optional: true }\n ),\n query(\n 'content > :enter',\n [\n style({\n transform: 'translateX(-100%)',\n opacity: 0,\n }),\n ],\n { optional: true }\n ),\n sequence([\n group([\n query(\n 'content > :leave',\n [\n style({\n transform: 'translateX(0)',\n opacity: 1,\n }),\n animate(\n '600ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n transform: 'translateX(100%)',\n opacity: 0,\n })\n ),\n ],\n { optional: true }\n ),\n query(\n 'content > :enter',\n [\n style({ transform: 'translateX(-100%)' }),\n animate(\n '600ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n transform: 'translateX(0%)',\n opacity: 1,\n })\n ),\n ],\n { optional: true }\n ),\n ]),\n query('content > :leave', animateChild(), { optional: true }),\n query('content > :enter', animateChild(), { optional: true }),\n ]),\n ]),\n ]),\n\n trigger('routerTransitionUp', [\n transition('* => *', [\n query(\n 'content > :enter, content > :leave',\n [\n style({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n ],\n { optional: true }\n ),\n query(\n 'content > :enter',\n [\n style({\n transform: 'translateY(100%)',\n opacity: 0,\n }),\n ],\n { optional: true }\n ),\n group([\n query(\n 'content > :leave',\n [\n style({\n transform: 'translateY(0)',\n opacity: 1,\n }),\n animate(\n '600ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n transform: 'translateY(-100%)',\n opacity: 0,\n })\n ),\n ],\n { optional: true }\n ),\n query(\n 'content > :enter',\n [\n style({ transform: 'translateY(100%)' }),\n animate(\n '600ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n transform: 'translateY(0%)',\n opacity: 1,\n })\n ),\n ],\n { optional: true }\n ),\n ]),\n query('content > :leave', animateChild(), { optional: true }),\n query('content > :enter', animateChild(), { optional: true }),\n ]),\n ]),\n\n trigger('routerTransitionDown', [\n transition('* => *', [\n query(\n 'content > :enter, content > :leave',\n [\n style({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n ],\n { optional: true }\n ),\n query(\n 'content > :enter',\n [\n style({\n transform: 'translateY(-100%)',\n opacity: 0,\n }),\n ],\n { optional: true }\n ),\n sequence([\n group([\n query(\n 'content > :leave',\n [\n style({\n transform: 'translateY(0)',\n opacity: 1,\n }),\n animate(\n '600ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n transform: 'translateY(100%)',\n opacity: 0,\n })\n ),\n ],\n { optional: true }\n ),\n query(\n 'content > :enter',\n [\n style({ transform: 'translateY(-100%)' }),\n animate(\n '600ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n transform: 'translateY(0%)',\n opacity: 1,\n })\n ),\n ],\n { optional: true }\n ),\n ]),\n query('content > :leave', animateChild(), { optional: true }),\n query('content > :enter', animateChild(), { optional: true }),\n ]),\n ]),\n ]),\n\n trigger('routerTransitionFade', [\n transition(\n '* => *',\n group([\n query(\n 'content > :enter, content > :leave ',\n [\n style({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n ],\n { optional: true }\n ),\n\n query(\n 'content > :enter',\n [\n style({\n opacity: 0,\n }),\n ],\n { optional: true }\n ),\n query(\n 'content > :leave',\n [\n style({\n opacity: 1,\n }),\n animate(\n '300ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n opacity: 0,\n })\n ),\n ],\n { optional: true }\n ),\n query(\n 'content > :enter',\n [\n style({\n opacity: 0,\n }),\n animate(\n '300ms cubic-bezier(0.0, 0.0, 0.2, 1)',\n style({\n opacity: 1,\n })\n ),\n ],\n { optional: true }\n ),\n query('content > :enter', animateChild(), { optional: true }),\n query('content > :leave', animateChild(), { optional: true }),\n ])\n ),\n ]),\n];\n","import { Injectable } from '@angular/core';\nimport { NavigationItemInterface } from 'app/layout/components/navigation/models/navigation-item-interface';\nimport merge from 'lodash-es/merge';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FuseNavigationService {\n public onItemCollapsed: Subject;\n public onItemCollapseToggled: Subject;\n\n // Private\n private _currentNavigationKey: string;\n private _onNavigationChanged: BehaviorSubject;\n private _onNavigationItemAdded: BehaviorSubject;\n private _onNavigationItemRemoved: BehaviorSubject;\n private _onNavigationItemUpdated: BehaviorSubject;\n private _onNavigationRegistered: BehaviorSubject;\n private _onNavigationUnregistered: BehaviorSubject;\n private _registry: { [key: string]: any } = {};\n\n /**\n * Constructor\n */\n public constructor() {\n // Set the defaults\n this.onItemCollapsed = new Subject();\n this.onItemCollapseToggled = new Subject();\n\n // Set the private defaults\n this._currentNavigationKey = null;\n this._onNavigationChanged = new BehaviorSubject(null);\n this._onNavigationRegistered = new BehaviorSubject(null);\n this._onNavigationUnregistered = new BehaviorSubject(null);\n this._onNavigationItemAdded = new BehaviorSubject(null);\n this._onNavigationItemUpdated = new BehaviorSubject(null);\n this._onNavigationItemRemoved = new BehaviorSubject(null);\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Get onNavigationChanged\n *\n * @returns {Observable}\n */\n public get onNavigationChanged(): Observable {\n return this._onNavigationChanged.asObservable();\n }\n\n /**\n * Get onNavigationItemAdded\n *\n * @returns {Observable}\n */\n public get onNavigationItemAdded(): Observable {\n return this._onNavigationItemAdded.asObservable();\n }\n\n /**\n * Get onNavigationItemRemoved\n *\n * @returns {Observable}\n */\n public get onNavigationItemRemoved(): Observable {\n return this._onNavigationItemRemoved.asObservable();\n }\n\n /**\n * Get onNavigationItemUpdated\n *\n * @returns {Observable}\n */\n public get onNavigationItemUpdated(): Observable {\n return this._onNavigationItemUpdated.asObservable();\n }\n\n /**\n * Get onNavigationRegistered\n *\n * @returns {Observable}\n */\n public get onNavigationRegistered(): Observable {\n return this._onNavigationRegistered.asObservable();\n }\n\n /**\n * Get onNavigationUnregistered\n *\n * @returns {Observable}\n */\n public get onNavigationUnregistered(): Observable {\n return this._onNavigationUnregistered.asObservable();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Add a navigation item to the specified location\n *\n * @param item\n * @param id\n */\n public addNavigationItem(item, id): void {\n // Get the current navigation\n const navigation: any[] = this.getCurrentNavigation();\n\n // Add to the end of the navigation\n if (id === 'end') {\n navigation.push(item);\n\n // Trigger the observable\n this._onNavigationItemAdded.next(true);\n\n return;\n }\n\n // Add to the start of the navigation\n if (id === 'start') {\n navigation.unshift(item);\n\n // Trigger the observable\n this._onNavigationItemAdded.next(true);\n\n return;\n }\n\n // Add it to a specific location\n const parent: any = this.getNavigationItem(id);\n\n if (parent) {\n // Check if parent has a children entry,\n // and add it if it doesn't\n if (!parent.children) {\n parent.children = [];\n }\n\n // Add the item\n parent.children.push(item);\n }\n\n // Trigger the observable\n this._onNavigationItemAdded.next(true);\n }\n\n /**\n * Get the current navigation\n *\n * @returns {any}\n */\n public getCurrentNavigation(): any {\n if (!this._currentNavigationKey) {\n console.warn(`The current navigation is not set.`);\n\n return;\n }\n\n return this.getNavigation(this._currentNavigationKey);\n }\n\n /**\n * Get flattened navigation array\n *\n * @param navigation\n * @param flatNavigation\n * @returns {any[]}\n */\n public getFlatNavigation(navigation, flatNavigation: NavigationItemInterface[] = []): any {\n if (!navigation || !flatNavigation) {\n return [];\n }\n\n for (const item of navigation) {\n if (item.type === 'item') {\n // only menu items with url are supported as shortcut\n if (item.url) {\n flatNavigation.push(item);\n }\n\n continue;\n }\n\n if (item.type === 'collapsable' || item.type === 'group') {\n if (item.children) {\n this.getFlatNavigation(item.children, flatNavigation);\n }\n }\n }\n\n return flatNavigation;\n }\n\n /**\n * Get navigation from registry by key\n *\n * @param key\n * @returns {any}\n */\n public getNavigation(key): any {\n // Check if the navigation exists\n if (!this._registry[key]) {\n console.warn(`The navigation with the key '${key}' doesn't exist in the registry.`);\n\n return;\n }\n\n // Return the sidebar\n return this._registry[key];\n }\n\n /**\n * Get navigation item by id from the\n * current navigation\n *\n * @param id\n * @param {any} navigation\n * @returns {any | boolean}\n */\n public getNavigationItem(id, navigation = null): any | boolean {\n if (!navigation) {\n navigation = this.getCurrentNavigation();\n }\n\n for (const item of navigation) {\n if (item.id === id) {\n return item;\n }\n\n if (item.children) {\n const childItem = this.getNavigationItem(id, item.children);\n\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Get the parent of the navigation item\n * with the id\n *\n * @param id\n * @param {any} navigation\n * @param parent\n */\n public getNavigationItemParent(id, navigation = null, parent = null): any {\n if (!navigation) {\n navigation = this.getCurrentNavigation();\n parent = navigation;\n }\n\n for (const item of navigation) {\n if (item.id === id) {\n return parent;\n }\n\n if (item.children) {\n const childItem = this.getNavigationItemParent(id, item.children, item);\n\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Register the given navigation\n * with the given key\n *\n * @param key\n * @param navigation\n */\n public register(key, navigation): void {\n // Check if the key already being used\n if (this._registry[key]) {\n console.error(`The navigation with the key '${key}' already exists. Either unregister it first or use a unique key.`);\n\n return;\n }\n\n // Add to the registry\n this._registry[key] = navigation;\n\n this._onNavigationRegistered.next([key, navigation]);\n }\n\n /**\n * Remove navigation item with the given id\n *\n * @param id\n */\n public removeNavigationItem(id): void {\n const item = this.getNavigationItem(id);\n\n // Return, if there is not such an item\n if (!item) {\n return;\n }\n\n // Get the parent of the item\n let parent = this.getNavigationItemParent(id);\n\n // This check is required because of the first level\n // of the navigation, since the first level is not\n // inside the 'children' array\n parent = parent.children || parent;\n\n // Remove the item\n parent.splice(parent.indexOf(item), 1);\n\n // Trigger the observable\n this._onNavigationItemRemoved.next(true);\n }\n\n /**\n * Set the navigation with the key\n * as the current navigation\n *\n * @param key\n */\n public setCurrentNavigation(key): void {\n // Check if the sidebar exists\n if (!this._registry[key]) {\n console.warn(`The navigation with the key '${key}' doesn't exist in the registry.`);\n\n return;\n }\n\n // Set the current navigation key\n this._currentNavigationKey = key;\n\n this._onNavigationChanged.next(key);\n }\n\n /**\n * Unregister the navigation from the registry\n * @param key\n */\n public unregister(key): void {\n // Check if the navigation exists\n if (!this._registry[key]) {\n console.warn(`The navigation with the key '${key}' doesn't exist in the registry.`);\n }\n\n // Unregister the sidebar\n delete this._registry[key];\n\n this._onNavigationUnregistered.next(key);\n }\n\n /**\n * Update navigation item with the given id\n *\n * @param id\n * @param properties\n */\n public updateNavigationItem(id, properties): void {\n // Get the navigation item\n const navigationItem = this.getNavigationItem(id);\n\n // If there is no navigation with the give id, return\n if (!navigationItem) {\n return;\n }\n\n // Merge the navigation properties\n merge(navigationItem, properties);\n\n // Trigger the observable\n this._onNavigationItemUpdated.next(true);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FuseSidebarComponent } from './sidebar.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FuseSidebarService {\n // Private\n private _registry: { [key: string]: FuseSidebarComponent } = {};\n\n /**\n * Return the sidebar with the given key\n *\n * @param key\n * @returns {FuseSidebarComponent}\n */\n public getSidebar(key): FuseSidebarComponent {\n // Check if the sidebar exists\n if (!this._registry[key]) {\n console.warn(`The sidebar with the key '${key}' doesn't exist in the registry.`);\n\n return;\n }\n\n // Return the sidebar\n return this._registry[key];\n }\n\n /**\n * Add the sidebar to the registry\n *\n * @param key\n * @param sidebar\n */\n public register(key, sidebar): void {\n // Check if the key already being used\n if (this._registry[key]) {\n console.error(`The sidebar with the key '${key}' already exists. Either unregister it first or use a unique key.`);\n\n return;\n }\n\n // Add to the registry\n this._registry[key] = sidebar;\n }\n\n /**\n * Remove the sidebar from the registry\n *\n * @param key\n */\n public unregister(key): void {\n // Check if the sidebar exists\n if (!this._registry[key]) {\n console.warn(`The sidebar with the key '${key}' doesn't exist in the registry.`);\n }\n\n // Unregister the sidebar\n delete this._registry[key];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport interface Locale {\n lang: string;\n data: object;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FuseTranslationLoaderService {\n /**\n * Constructor\n *\n * @param {TranslateService} _translateService\n */\n public constructor(private _translateService: TranslateService) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Load translations\n *\n * @param {Locale} args\n */\n public loadTranslations(...args: Locale[]): void {\n const locales = [...args];\n\n locales.forEach((locale) => {\n // use setTranslation() with the third argument set to true\n // to append translations instead of replacing them\n this._translateService.setTranslation(locale.lang, locale.data, true);\n });\n }\n}\n","import { HttpParameterCodec } from '@angular/common/http';\nexport class CustomHttpParamEncoder implements HttpParameterCodec {\n public decodeKey(key: string): string {\n return decodeURIComponent(key);\n }\n\n public decodeValue(value: string): string {\n return decodeURIComponent(value);\n }\n\n public encodeKey(key: string): string {\n return encodeURIComponent(key);\n }\n\n public encodeValue(value: string): string {\n return encodeURIComponent(value);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { OAuthErrorEvent, OAuthEvent, OAuthService } from 'angular-oauth2-oidc';\nimport { AllowedTenantsProjection } from 'app/shared/prothesis-api-projections/allowed-tenants-projection';\nimport { InfoUserCustomerProjection } from 'app/shared/prothesis-api-projections/info-user-customer.projection';\nimport { InfoUserLaboratoryProjection } from 'app/shared/prothesis-api-projections/info-user-laboratory.projection';\nimport { BehaviorSubject, Observable, ReplaySubject, combineLatest } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { Area } from '../../shared/enums/area.enum';\nimport { ConfigurationService } from './configuration.service';\nimport { LocalStorageService } from './local-storage.service';\nimport { NotifyService } from './notify/notify.service';\nimport { WorkingLaboratoryService } from './prothesis-api/working-laboratory.service';\nimport { WorkingCustomerService } from './prothesis-customer-api/working-customer.service';\nimport { SessionStorageService } from './session-storage.service';\n\n/**\n * https://github.com/jeroenheijmans/sample-angular-oauth2-oidc-with-auth-guards\n */\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n public static strKeyArea = 'area';\n public static strKeyCustomerClaim = 'customer-claim';\n public static strKeyLaboratoryClaim = 'laboratory-claim';\n\n public areaConfiguredFlag$: Observable;\n\n /**\n * Publishes `true` if and only if (a) all the asynchronous initial\n * login calls have completed or errorred, and (b) the user ended up\n * being authenticated.\n *\n * In essence, it combines:\n *\n * - the latest known state of whether the user is authorized\n * - whether the ajax calls for initial log in have all been done\n */\n public canActivateProtectedRoutes$: Observable;\n\n public isAccessTokenAboutToExpire$: Observable;\n public isAuthenticated$: Observable;\n public isDoneLoading$: Observable;\n\n private _allowedCustomerUuids = new Array();\n private _allowedLaboratoryUuids = new Array();\n private _area: Area;\n private _areaConfiguredFlag$ = new BehaviorSubject(false);\n private _identityServerAddress: string;\n private _isAccessTokenAboutToExpireSubject$ = new BehaviorSubject(true);\n private _isAuthenticatedSubject$ = new BehaviorSubject(false);\n private _isDoneLoadingSubject$ = new ReplaySubject();\n\n public constructor(\n private _configurationService: ConfigurationService,\n private _http: HttpClient,\n private _localStorageService: LocalStorageService,\n private _notifyService: NotifyService,\n private _oauthService: OAuthService,\n private _router: Router,\n private _sessionStorageService: SessionStorageService,\n private _workingLaboratoryService: WorkingLaboratoryService,\n private _workingCustomerService: WorkingCustomerService\n ) {\n _workingCustomerService.authService = this;\n _workingLaboratoryService.authService = this;\n\n // Useful for debugging:\n // https://github.com/manfredsteyer/angular-oauth2-oidc/blob/master/projects/lib/src/events.ts\n this._oauthService.events.subscribe((event) => {\n if (event instanceof OAuthErrorEvent) {\n console.warn(event);\n } else {\n if (event.type !== 'session_unchanged') {\n console.log(event);\n }\n }\n });\n\n // This is tricky, as it might cause race conditions (where access_token is set in another tab before everything is said and done there.\n // Note: The storage event is only triggered when a window other than itself makes the changes.\n // https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_event_storage_storage\n window.addEventListener('storage', (event) => {\n // The `key` is `null` if the event was caused by `.clear()`\n if (event.key !== 'access_token' && event.key) {\n return;\n }\n\n console.warn('Noticed changes to access_token (most likely from another tab), updating isAuthenticated');\n const validAccessTokenFlag: boolean = this._oauthService.hasValidAccessToken();\n this._isAuthenticatedSubject$.next(validAccessTokenFlag);\n this._isAccessTokenAboutToExpireSubject$.next(this._isAccessTokenAboutToExpire());\n\n if (!validAccessTokenFlag) {\n this.login();\n }\n });\n\n this._oauthService.events.subscribe(() => {\n this._isAuthenticatedSubject$.next(this._oauthService.hasValidAccessToken());\n this._isAccessTokenAboutToExpireSubject$.next(this._isAccessTokenAboutToExpire());\n });\n\n this._oauthService.events\n .pipe(filter((e) => ['token_received'].includes(e.type)))\n .subscribe(() => this._oauthService.loadUserProfile());\n\n this._oauthService.events.pipe(filter((e) => ['session_terminated', 'session_error'].includes(e.type))).subscribe(() => this.logout());\n\n this._oauthService.setupAutomaticSilentRefresh();\n\n this.areaConfiguredFlag$ = this._areaConfiguredFlag$.asObservable();\n this.isAccessTokenAboutToExpire$ = this._isAccessTokenAboutToExpireSubject$.asObservable();\n this.isAuthenticated$ = this._isAuthenticatedSubject$.asObservable();\n this.isDoneLoading$ = this._isDoneLoadingSubject$.asObservable();\n this.canActivateProtectedRoutes$ = combineLatest([this.isAuthenticated$, this.isDoneLoading$]).pipe(\n map((values) => values.every((b) => b))\n );\n }\n\n public get accessToken(): string {\n return this._oauthService.getAccessToken();\n }\n\n public get accessTokenClaims(): any {\n const accessToken = this._oauthService.getAccessToken();\n\n if (!accessToken) {\n return null;\n }\n\n const jwtBase64EncodedBody = accessToken.split('.')[1];\n const jwtDecodedBody = window.atob(jwtBase64EncodedBody);\n const jwtBody = JSON.parse(jwtDecodedBody);\n\n return jwtBody;\n }\n\n public get allowedCustomerUuids(): string[] {\n return this._allowedCustomerUuids;\n }\n\n public get allowedLaboratoryUuids(): string[] {\n return this._allowedLaboratoryUuids;\n }\n\n public get area(): Area {\n return this._area;\n }\n\n public set area(value: Area) {\n this._area = value;\n\n if (this._area) {\n this._sessionStorageService.write(AuthService.strKeyArea, this._area);\n } else {\n this._sessionStorageService.removeItem(AuthService.strKeyArea);\n }\n }\n\n public get identityClaims(): object {\n return this._oauthService.getIdentityClaims();\n }\n\n public get identityServerAddress(): string {\n return this._identityServerAddress;\n }\n\n public get idToken(): string {\n return this._oauthService.getIdToken();\n }\n\n public get isAccessTokenAboutToExpire(): boolean {\n const result = this._isAccessTokenAboutToExpire();\n this._isAccessTokenAboutToExpireSubject$.next(result);\n return result;\n }\n\n public get isAdminOrSuperAdminFlag(): boolean {\n return this._isInRole('admin') || this._isInRole('superAdmin');\n }\n\n /*\n * Returns false if user not authenticated or access token is about to expire.\n * For instance if the access token has expired this method will return false.\n */\n public get isAuthenticated(): boolean {\n const validAccessTokenFlag = this._oauthService.hasValidAccessToken();\n this._isAuthenticatedSubject$.next(validAccessTokenFlag);\n return validAccessTokenFlag;\n }\n\n public get isSuperAdminFlag(): boolean {\n return this._isInRole('superAdmin');\n }\n\n public get logoutUrl(): string {\n return this._oauthService.logoutUrl;\n }\n\n public get name(): string {\n const claims = this._oauthService.getIdentityClaims();\n if (!claims) {\n return null;\n }\n\n return claims['preferred_username'];\n }\n\n public get roles(): string | string[] {\n if (!this.accessTokenClaims) {\n return null;\n }\n\n return this.accessTokenClaims['role'];\n }\n\n public get userUuid(): string {\n if (!this.accessTokenClaims) {\n return null;\n }\n\n return this.accessTokenClaims['user_uuid'];\n }\n\n public configureCustomerArea(customerUuid: string = null): Promise {\n this.area = Area.Customer;\n\n if (!customerUuid) {\n customerUuid = this._getDefaultCustomerUuidToAuthenticate();\n }\n this._workingCustomerService.tenantUuid = customerUuid;\n\n this._sessionStorageService.write(AuthService.strKeyArea, JSON.stringify(Area.Customer));\n this._sessionStorageService.write(AuthService.strKeyCustomerClaim, customerUuid);\n this._sessionStorageService.removeItem(AuthService.strKeyLaboratoryClaim);\n\n this._localStorageService.write(AuthService.strKeyArea, JSON.stringify(Area.Customer));\n this._localStorageService.write(AuthService.strKeyCustomerClaim, customerUuid);\n this._localStorageService.removeItem(AuthService.strKeyLaboratoryClaim);\n\n return this.getInfoToRefreshCustomer(customerUuid);\n }\n\n public configureLaboratoryArea(laboratoryUuid: string = null): Promise {\n this.area = Area.Laboratory;\n\n if (!laboratoryUuid) {\n laboratoryUuid = this._getDefaultLaboratoryUuidToAuthenticate();\n }\n this._workingLaboratoryService.tenantUuid = laboratoryUuid;\n\n this._sessionStorageService.write(AuthService.strKeyLaboratoryClaim, laboratoryUuid);\n this._sessionStorageService.removeItem(AuthService.strKeyCustomerClaim);\n this._sessionStorageService.write(AuthService.strKeyArea, JSON.stringify(Area.Laboratory));\n\n this._localStorageService.write(AuthService.strKeyArea, JSON.stringify(Area.Laboratory));\n this._localStorageService.write(AuthService.strKeyLaboratoryClaim, laboratoryUuid);\n this._localStorageService.removeItem(AuthService.strKeyCustomerClaim);\n\n return this.getInfoToRefreshLaboratory(laboratoryUuid);\n }\n\n public getAllowedTenants(): Promise {\n return new Promise((resolve, reject) => {\n // Add reject for error handling\n this._notifyService.doNotDismissOnNextApiCall();\n const actionUrl = `${this._configurationService.ProthesisApiAddress}/authenticated/User/GetAllowedTenants`;\n\n this._http.get(actionUrl).subscribe({\n // Use an object for subscribe to handle errors\n next: (allowedTenantsProjection: AllowedTenantsProjection) => {\n this._allowedCustomerUuids = allowedTenantsProjection.allowedCustomerUuids;\n this._allowedLaboratoryUuids = allowedTenantsProjection.allowedLaboratoryUuids;\n resolve(); // Call resolve when the HTTP request is successful\n },\n error: (error) => {\n // Handle errors!\n console.error('Error fetching allowed tenants /authenticated/User/GetAllowedTenants', error);\n reject(error); // Call reject if the HTTP request fails\n },\n });\n });\n }\n\n public getInfoToRefreshCustomer(customerUuid: string = null): Promise {\n if (!customerUuid) {\n customerUuid = this._getDefaultCustomerUuidToExplore();\n }\n return new Promise((successCallback) => {\n if (customerUuid) {\n this._notifyService.doNotDismissOnNextApiCall();\n this._workingCustomerService.getInfo(customerUuid).subscribe((infoUserCustomerProjection: InfoUserCustomerProjection) => {\n this._workingCustomerService.customerCode = infoUserCustomerProjection.customer.code;\n this._workingCustomerService.customerGroupFlag = infoUserCustomerProjection.customer.customerGroupFlag;\n this._workingCustomerService.customerGroupName = infoUserCustomerProjection.customer.customerGroupName;\n this._workingCustomerService.customerMemberFlag = infoUserCustomerProjection.customer.customerMemberFlag;\n this._workingCustomerService.customerName = infoUserCustomerProjection.customer.name;\n this._workingCustomerService.tenantUuid = infoUserCustomerProjection.customer.uuid;\n this._workingLaboratoryService.laboratoryCode = infoUserCustomerProjection.customer.laboratoryCode;\n this._workingLaboratoryService.laboratoryDemoModeFlag = infoUserCustomerProjection.customer.demoModeFlag;\n this._workingLaboratoryService.laboratoryName = infoUserCustomerProjection.customer.laboratoryName;\n this._workingLaboratoryService.laboratoryRateAutoPublishFlag = infoUserCustomerProjection.customer.rateAutoPublishFlag;\n this._workingLaboratoryService.laboratoryTzDatabaseName = infoUserCustomerProjection.customer.tzDatabaseName;\n this._workingLaboratoryService.tenantUuid = infoUserCustomerProjection.customer.laboratoryUuid;\n\n this._areaConfiguredFlag$.next(true);\n successCallback();\n });\n } else {\n successCallback();\n }\n });\n }\n\n public getInfoToRefreshLaboratory(laboratoryUuid: string = null): Promise {\n if (!laboratoryUuid) {\n laboratoryUuid = this._getDefaultLaboratoryUuidToExplore();\n }\n return new Promise((successCallback) => {\n if (laboratoryUuid) {\n this._notifyService.doNotDismissOnNextApiCall();\n this._workingLaboratoryService.getInfo(laboratoryUuid).subscribe((infoUserLaboratoryProjection: InfoUserLaboratoryProjection) => {\n this._workingLaboratoryService.laboratoryRole = infoUserLaboratoryProjection.laboratoryRole;\n this._workingLaboratoryService.laboratoryCode = infoUserLaboratoryProjection.laboratory.code;\n this._workingLaboratoryService.laboratoryDemoModeFlag = infoUserLaboratoryProjection.laboratory.demoModeFlag;\n this._workingLaboratoryService.laboratoryName = infoUserLaboratoryProjection.laboratory.name;\n this._workingLaboratoryService.laboratoryRateAutoPublishFlag = infoUserLaboratoryProjection.laboratory.rateAutoPublishFlag;\n this._workingLaboratoryService.laboratoryTzDatabaseName = infoUserLaboratoryProjection.laboratory.tzDatabaseName;\n this._workingLaboratoryService.tenantUuid = infoUserLaboratoryProjection.laboratory.uuid;\n\n this._areaConfiguredFlag$.next(true);\n successCallback();\n });\n } else {\n successCallback();\n }\n });\n }\n\n public initialize(identityServerAddress: string): void {\n this._identityServerAddress = identityServerAddress;\n this._oauthService.configure({\n // https://github.com/manfredsteyer/angular-oauth2-oidc/issues/457#issuecomment-431807040\n clearHashAfterLogin: false,\n clientId: 'Prothesis',\n issuer: this._identityServerAddress,\n nonceStateSeparator: 'semicolon', // Real semicolon gets mangled by IdentityServer's URI encoding\n redirectUri: window.location.origin,\n requireHttps: false,\n responseType: 'code',\n\n // https://manfredsteyer.github.io/angular-oauth2-oidc/docs/additional-documentation/session-checks.html\n sessionChecksEnabled: true,\n showDebugInformation: false, // Also requires enabling \"Verbose\" level in devtools\n scope: 'api openid permissions profile',\n silentRefreshRedirectUri: window.location.origin + '/assets/angular-oauth2-oidc/silent-refresh.html',\n useSilentRefresh: true, // Needed for Code Flow to suggest using iframe-based refreshes\n });\n }\n\n public login(targetUrl?: string): void {\n // Note: before version 9.1.0 of the library you needed to\n // call encodeURIComponent on the argument to the method.\n this._oauthService.initLoginFlow(targetUrl || this._router.url);\n }\n\n public logout(): void {\n this._oauthService.logOut();\n }\n\n public refresh(): Promise {\n return this._oauthService.silentRefresh();\n }\n\n public runInitialLoginSequence(): Promise {\n if (location.hash) {\n console.log('Encountered hash fragment, plotting as table...');\n console.table(\n location.hash\n .substr(1)\n .split('&')\n .map((kvp) => kvp.split('='))\n );\n }\n\n // 0. LOAD CONFIG:\n // First we have to check to see how the IdServer is\n // currently configured:\n return (\n this._oauthService\n .loadDiscoveryDocument()\n\n // 1. HASH LOGIN:\n // Try to log in via hash fragment after redirect back\n // from IdServer from initImplicitFlow:\n .then(() => this._oauthService.tryLogin())\n\n .then(() => {\n if (this._oauthService.hasValidAccessToken()) {\n return Promise.resolve();\n }\n\n // 2. SILENT LOGIN:\n // Try to log in via a refresh because the IdServer\n // might have a cookie to remember the user, so we can\n // prevent doing a redirect:\n return this._oauthService\n .silentRefresh()\n .then(() => Promise.resolve())\n .catch((result) => {\n // Handle silent refresh errors that are \"normal\"\n const normalSilentRefreshErrors = [\n 'silent_refresh_error',\n 'silent_refresh_timeout',\n 'invalid_nonce_in_state',\n 'token_validation_error',\n ];\n\n if (result?.reason?.type && normalSilentRefreshErrors.includes(result.reason.type)) {\n console.warn(\n 'Silent refresh or token error, we will wait for the user to manually log in or for the next silent retry success.'\n );\n return Promise.resolve();\n }\n\n // Subset of situations from https://openid.net/specs/openid-connect-core-1_0.html#AuthError\n // Only the ones where it's reasonably sure that sending the\n // user to the IdServer will help.\n const errorResponsesRequiringUserInteraction = [\n 'interaction_required',\n 'login_required',\n 'account_selection_required',\n 'consent_required',\n ];\n\n if (result && result.reason && errorResponsesRequiringUserInteraction.indexOf(result.reason.error) >= 0) {\n // 3. ASK FOR LOGIN:\n // At this point we know for sure that we have to ask the\n // user to log in, so we redirect them to the IdServer to\n // enter credentials.\n //\n // Enable this to ALWAYS force a user to login.\n // this.login();\n //\n // Instead, we'll now do this:\n console.warn('User interaction is needed to log in, we will wait for the user to manually log in.');\n return Promise.resolve();\n }\n\n // We can't handle the truth, just pass on the problem to the\n // next handler.\n return Promise.reject(result);\n });\n })\n\n .then(() => this.getAllowedTenants())\n\n .then(() => {\n this._workingCustomerService.isAdminOrSuperAdminFlag = this.isAdminOrSuperAdminFlag;\n if (this.isAdminOrSuperAdminFlag) {\n this.area = Area.Admin;\n this._endInitialLoginSequence();\n return Promise.resolve();\n } else {\n const connexionData: { area: Area; tenantUuid: string } = this._getDataFromSessionStorageThenLocalStorage();\n\n if (connexionData.area === Area.Laboratory) {\n return this.configureLaboratoryArea(connexionData.tenantUuid).then(() => {\n this._endInitialLoginSequence();\n });\n } else if (connexionData.area === Area.Customer) {\n return this.configureCustomerArea(connexionData.tenantUuid).then(() => {\n this._endInitialLoginSequence();\n });\n } else {\n this.area = Area.NoArea;\n this._endInitialLoginSequence();\n return Promise.resolve();\n }\n }\n })\n .catch((error) => {\n this._isDoneLoadingSubject$.next(true);\n console.warn('Error in runInitialLoginSequence:', error);\n })\n );\n }\n\n public setAreaConfiguredFlag(): void {\n this._areaConfiguredFlag$.next(true);\n }\n\n private _endInitialLoginSequence(): void {\n // Check for the strings 'undefined' and 'null' just to be sure. Our current\n // login(...) should never have this, but in case someone ever calls\n // initImplicitFlow(undefined | null) this could happen.\n if (this._oauthService.state && this._oauthService.state !== 'undefined' && this._oauthService.state !== 'null') {\n let stateUrl = this._oauthService.state;\n if (stateUrl.startsWith('/') === false) {\n stateUrl = decodeURIComponent(stateUrl);\n }\n console.log(`There was state of ${this._oauthService.state}, so we are sending you to: ${stateUrl}`);\n this._router.navigateByUrl(stateUrl);\n }\n\n this._isDoneLoadingSubject$.next(true);\n }\n\n private _getDataFromLocalStorage(): { area: Area; tenantUuid: string } {\n const areaFromLocalStorage = this._localStorageService.tryGetArea(AuthService.strKeyArea);\n\n if (!(this.allowedLaboratoryUuids?.length > 0 || this.allowedCustomerUuids?.length > 0)) {\n return { area: Area.NoArea, tenantUuid: null };\n }\n\n if (areaFromLocalStorage === Area.Laboratory) {\n if (this.allowedLaboratoryUuids?.length > 0) {\n const laboratoryUuidFromSessionStorage = this._localStorageService.read(AuthService.strKeyLaboratoryClaim);\n if (this.allowedLaboratoryUuids.indexOf(laboratoryUuidFromSessionStorage) !== -1) {\n return { area: Area.Laboratory, tenantUuid: laboratoryUuidFromSessionStorage };\n } else {\n return { area: Area.Laboratory, tenantUuid: null };\n }\n } else {\n return { area: Area.Customer, tenantUuid: null };\n }\n } else if (areaFromLocalStorage === Area.Customer) {\n if (this.allowedCustomerUuids?.length > 0) {\n const customerUuidFromSessionStorage = this._localStorageService.read(AuthService.strKeyCustomerClaim);\n if (this.allowedCustomerUuids.indexOf(customerUuidFromSessionStorage) !== -1) {\n return { area: Area.Customer, tenantUuid: customerUuidFromSessionStorage };\n } else {\n return { area: Area.Customer, tenantUuid: null };\n }\n } else {\n return { area: Area.Laboratory, tenantUuid: null };\n }\n } else {\n if (this.allowedLaboratoryUuids?.length > 0) {\n return { area: Area.Laboratory, tenantUuid: null };\n } else {\n return { area: Area.Customer, tenantUuid: null };\n }\n }\n }\n\n private _getDataFromSessionStorageThenLocalStorage(): { area: Area; tenantUuid: string } {\n const areaFromSessionStorage = this._sessionStorageService.tryGetArea(AuthService.strKeyArea);\n\n if (!(this.allowedLaboratoryUuids?.length > 0 || this.allowedCustomerUuids?.length > 0)) {\n return { area: Area.NoArea, tenantUuid: null };\n }\n\n if (areaFromSessionStorage === Area.Laboratory) {\n if (this.allowedLaboratoryUuids?.length > 0) {\n const laboratoryUuidFromSessionStorage = this._sessionStorageService.read(AuthService.strKeyLaboratoryClaim);\n if (this.allowedLaboratoryUuids.indexOf(laboratoryUuidFromSessionStorage) !== -1) {\n return { area: Area.Laboratory, tenantUuid: laboratoryUuidFromSessionStorage };\n }\n }\n } else if (areaFromSessionStorage === Area.Customer) {\n if (this.allowedCustomerUuids?.length > 0) {\n const customerUuidFromSessionStorage = this._sessionStorageService.read(AuthService.strKeyCustomerClaim);\n if (this.allowedCustomerUuids.indexOf(customerUuidFromSessionStorage) !== -1) {\n return { area: Area.Customer, tenantUuid: customerUuidFromSessionStorage };\n }\n }\n }\n\n return this._getDataFromLocalStorage();\n }\n\n private _getDefaultCustomerUuidToAuthenticate(): string {\n const workingCustomerUuid = this._sessionStorageService.read('working_customer_uuid');\n if (workingCustomerUuid) {\n if (this.allowedCustomerUuids.includes(workingCustomerUuid)) {\n return workingCustomerUuid;\n } else {\n return this._getFirstCustomerUuid();\n }\n } else {\n return this._getFirstCustomerUuid();\n }\n }\n\n private _getDefaultCustomerUuidToExplore(): string {\n const workingCustomerUuid = this._sessionStorageService.read('working_customer_uuid');\n if (workingCustomerUuid) {\n return workingCustomerUuid;\n } else {\n return undefined;\n }\n }\n\n private _getDefaultLaboratoryUuidToAuthenticate(): string {\n const workingLaboratoryUuid = this._sessionStorageService.read('working_laboratory_uuid');\n if (workingLaboratoryUuid) {\n if (this.allowedLaboratoryUuids.includes(workingLaboratoryUuid)) {\n return workingLaboratoryUuid;\n } else {\n return this._getFirstLaboratoryUuid();\n }\n } else {\n return this._getFirstLaboratoryUuid();\n }\n }\n\n private _getDefaultLaboratoryUuidToExplore(): string {\n const workingLaboratoryUuid = this._sessionStorageService.read('working_laboratory_uuid');\n if (workingLaboratoryUuid) {\n return workingLaboratoryUuid;\n } else {\n return undefined;\n }\n }\n\n private _getFirstCustomerUuid(): string {\n if (this.allowedCustomerUuids instanceof Array && this.allowedCustomerUuids.length > 0) {\n return this.allowedCustomerUuids[0];\n } else {\n return null;\n }\n }\n\n private _getFirstLaboratoryUuid(): string {\n if (this.allowedLaboratoryUuids instanceof Array && this.allowedLaboratoryUuids.length > 0) {\n return this.allowedLaboratoryUuids[0];\n } else {\n return null;\n }\n }\n\n private _isAccessTokenAboutToExpire(): boolean {\n const accessTokenExpiration = this._oauthService.getAccessTokenExpiration();\n const now = Date.now();\n const delta = accessTokenExpiration - now;\n\n if (delta < 30000) {\n return true;\n }\n\n return false;\n }\n\n private _isInRole(role: string): boolean {\n let isInRole = false;\n if (Array.isArray(this.roles)) {\n isInRole = this.roles.some((r) => r === role);\n } else {\n isInRole = this.roles === role;\n }\n\n return isInRole;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfigurationService {\n private _feature1EnabledFlag: boolean;\n private _feature2EnabledFlag: boolean;\n private _feature3EnabledFlag: boolean;\n private _feature4EnabledFlag: boolean;\n private _identityServerAddress: string;\n private _prothesisApiAddress: string;\n private _prothesisCustomerApiAddress: string;\n private _prothesisIdentityApiAddress: string;\n\n public get Feature1EnabledFlag(): boolean {\n return this._feature1EnabledFlag;\n }\n\n public set Feature1EnabledFlag(feature1EnabledFlag: boolean) {\n this._feature1EnabledFlag = feature1EnabledFlag;\n }\n\n public get Feature2EnabledFlag(): boolean {\n return this._feature2EnabledFlag;\n }\n\n public set Feature2EnabledFlag(feature2EnabledFlag: boolean) {\n this._feature2EnabledFlag = feature2EnabledFlag;\n }\n\n public get Feature3EnabledFlag(): boolean {\n return this._feature3EnabledFlag;\n }\n\n public set Feature3EnabledFlag(feature3EnabledFlag: boolean) {\n this._feature3EnabledFlag = feature3EnabledFlag;\n }\n\n public get Feature4EnabledFlag(): boolean {\n return this._feature4EnabledFlag;\n }\n\n public set Feature4EnabledFlag(feature4EnabledFlag: boolean) {\n this._feature4EnabledFlag = feature4EnabledFlag;\n }\n\n public get IdentityServerAddress(): string {\n return this._identityServerAddress;\n }\n\n public set IdentityServerAddress(identityServerAddress: string) {\n this._identityServerAddress = identityServerAddress;\n }\n\n public get ProthesisApiAddress(): string {\n return this._prothesisApiAddress;\n }\n\n public set ProthesisApiAddress(prothesisApiAddress: string) {\n this._prothesisApiAddress = prothesisApiAddress;\n }\n\n public get ProthesisCustomerApiAddress(): string {\n return this._prothesisCustomerApiAddress;\n }\n\n public set ProthesisCustomerApiAddress(prothesisCustomerApiAddress: string) {\n this._prothesisCustomerApiAddress = prothesisCustomerApiAddress;\n }\n\n public get ProthesisIdentityApiAddress(): string {\n return this._prothesisIdentityApiAddress;\n }\n\n public set ProthesisIdentityApiAddress(prothesisIdentityApiAddress: string) {\n this._prothesisIdentityApiAddress = prothesisIdentityApiAddress;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { ContextMenuHolderComponent } from './context-menu-holder/context-menu-holder.component';\nimport { ContextMenuDirective } from './context-menu.directive';\n\n@NgModule({\n declarations: [ContextMenuDirective, ContextMenuHolderComponent],\n imports: [CommonModule, MatListModule, MatMenuModule],\n exports: [ContextMenuDirective, ContextMenuHolderComponent],\n})\nexport class ContextMenuModule {}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ContextMenuLineModel } from './models/context-menu-line-model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ContextMenuService {\n public contextMenuVisibleFlag = false;\n\n public hideContextMenuEvent: Subject = new Subject();\n\n public openContextMenuEvent: Subject<{ event: MouseEvent; obj: ContextMenuLineModel[] }> = new Subject<{\n event: MouseEvent;\n obj: ContextMenuLineModel[];\n }>();\n}\n","import { Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CorpTitleService {\n public constructor(private _title: Title) {}\n\n public setTitle(_pageTitle: string): void {\n this._title.setTitle(_pageTitle + ' - PROTHESIS CLOUD');\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { ViewModelHelper } from 'app/shared/helpers/view-model-helper';\nimport { StandardFilter } from 'app/shared/prothesis-base-api-filters/standard-filter';\nimport { UuidCollectionViewModel } from 'app/shared/prothesis-base-api-view-models/uuid-collection.view-model';\nimport { VersionedViewModelBase } from 'app/shared/prothesis-base-api-view-models/versioned-view-model-base';\nimport { Observable } from 'rxjs';\nimport { ReadServiceBase } from './read-service-base';\n\nexport abstract class CrudServiceBase<\n TViewModel extends VersionedViewModelBase,\n TIndexViewModel,\n TFilter extends StandardFilter\n> extends ReadServiceBase {\n public constructor(protected _httpClient: HttpClient, protected _actionPath: () => string, protected _apiUrl: string) {\n super(_httpClient, _actionPath, _apiUrl);\n }\n\n public addQuiet(modelToAdd: TViewModel): Observable {\n return this._httpClient.post(`${this._actionUrl}Quiet`, JSON.stringify(modelToAdd));\n }\n\n public updateQuiet(uuid: string, modelToUpdate: TViewModel): Observable {\n return this._httpClient.put(`${this._actionUrl}${uuid}/Quiet`, JSON.stringify(modelToUpdate));\n }\n\n protected _delete(uuid: string): Observable {\n return this._httpClient.delete(`${this._actionUrl}${uuid}`);\n }\n\n protected _deleteCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(`${this._actionUrl}DeleteCollection`, JSON.stringify(uuidCollectionViewModel));\n }\n}\n","
\n
\n \n
\n {{ messageLine1 }}\n {{ messageLine2 }} \n
\n {{ subMessageLine1 }} \n {{ subMessageLine2 }} \n
\n \n \n
\n
\n \n \n \n {{ acceptLabel }}\n \n \n
\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatButton } from '@angular/material/button';\nimport { NoteModel } from 'app/shared/components/note/note.model';\nimport { FocusService } from '../../focus.service';\nimport { AbstractDialogBoxDataFormGroup } from './abstract-action-confirmation-dialog-form-group';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-abstract-action-confirmation-dialog',\n styleUrls: ['./abstract-action-confirmation-dialog.component.scss'],\n templateUrl: './abstract-action-confirmation-dialog.component.html',\n})\nexport class AbstractActionConfirmationDialogComponent implements OnChanges {\n @Output() public acceptEvent = new EventEmitter();\n @Input() public acceptLabel: string;\n @Input() public cdkFocusInitialOnButtonFlag = true;\n @Input() public cdkFocusInitialOnCancelButtonFlag = true;\n @Output() public closeEvent = new EventEmitter();\n @Output() public declineEvent = new EventEmitter();\n @Input() public declineLabel: string;\n @Input() public formGroup: FormGroup;\n @Input() public formInvalidFlag: boolean;\n @Input() public messageLine1: string;\n @Input() public messageLine2: string;\n @Input() public note: NoteModel;\n @Input() public subMessageLine1: string;\n @Input() public subMessageLine2: string;\n\n @ViewChild('_acceptButton') private _acceptButton: MatButton;\n @ViewChild('_declineButton') private _declineButton: MatButton;\n\n public constructor(private _focusService: FocusService) {}\n\n public linkClickedEventHandler(): void {\n this.closeEvent.emit();\n }\n\n public ngOnChanges(): void {\n this.setFocus();\n }\n\n public onAcceptClickedHandler(): void {\n this.acceptEvent.emit();\n }\n\n public onDeclineClickedHandler(): void {\n this.declineEvent.emit();\n }\n\n public setFocus(): void {\n if (this.cdkFocusInitialOnButtonFlag) {\n this._focusService.setTimeoutOutsideAngular(() => {\n if (this.cdkFocusInitialOnCancelButtonFlag) {\n this._declineButton?.focus();\n } else {\n this._acceptButton?.focus();\n }\n });\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { ActionConfirmationDialogComponent } from '../action-confirmation-dialog/action-confirmation-dialog.component';\nimport { ComboDialogBoxDataModel } from './combo-dialog-box-data.model';\nimport { ComboDialogBoxFormGroup } from './combo-dialog-box-form-group';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-action-confirmation-combo-dialog',\n styleUrls: ['./action-confirmation-combo-dialog.component.scss'],\n templateUrl: './action-confirmation-combo-dialog.component.html',\n})\nexport class ActionConfirmationComboDialogComponent {\n public data: ComboDialogBoxDataModel;\n public formGroup: FormGroup;\n\n public constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: ComboDialogBoxDataModel\n ) {\n this.data = _data;\n if (!this._data.acceptLabel) {\n this.data.acceptLabel = 'Oui';\n }\n if (!this._data.declineLabel) {\n this.data.declineLabel = 'Non';\n }\n this._createForm(_data);\n }\n\n public onAcceptClickedHandler(): void {\n if (this._data.onAcceptWithCombo) {\n this._data.onAcceptWithCombo(this.formGroup.controls?.selectedValue?.value);\n }\n this.dialogRef.close(true);\n }\n\n public onCloseClickedHandler(): void {\n this.dialogRef.close(true);\n }\n\n public onDeclineClickedHandler(): void {\n if (this._data.onDecline) {\n this._data.onDecline();\n }\n this.dialogRef.close(false);\n }\n\n private _createForm(dialogBoxData: ComboDialogBoxDataModel): void {\n this.formGroup = new FormGroup({\n options: new FormControl(dialogBoxData.options),\n selectedValue: new FormControl(dialogBoxData.selectedValue),\n });\n }\n}\n","\n
\n
\n \n \n
\n\n","import { FormGroup, ValidatorFn } from '@angular/forms';\nimport { DialogBoxFormGroup } from './dialog-box-form-group';\n\nexport const ActionConfirmationDialogValidator: ValidatorFn = (formGroup: FormGroup) => {\n if (!formGroup.controls.optionValueFlag) {\n return null;\n }\n\n if (!formGroup.controls.optionValueFlag.value) {\n return { userValidationRequired: { value: null } };\n }\n\n return null;\n};\n","\n
\n
\n
\n \n
\n {{ data.optionLabel }}\n {{ data.optionSubLabel }}\n
\n
\n
\n
\n
\n\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ActionConfirmationDialogValidator } from './action-confirmation-dialog-validator';\nimport { DialogBoxDataModel } from './dialog-box-data.model';\nimport { DialogBoxFormGroup } from './dialog-box-form-group';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-action-confirmation-dialog',\n styleUrls: ['./action-confirmation-dialog.component.scss'],\n templateUrl: './action-confirmation-dialog.component.html',\n})\nexport class ActionConfirmationDialogComponent {\n public data: DialogBoxDataModel;\n public formGroup: FormGroup;\n\n public constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: DialogBoxDataModel\n ) {\n this.data = _data;\n if (!this._data.acceptLabel) {\n this.data.acceptLabel = 'Oui';\n }\n if (!this._data.declineLabel) {\n this.data.declineLabel = 'Non';\n }\n this._createForm(_data);\n }\n\n public onAcceptClickedHandler(): void {\n if (this._data.onAccept) {\n this._data.onAccept();\n }\n if (this._data.onAcceptWithOption) {\n this._data.onAcceptWithOption(this.formGroup.getRawValue());\n }\n this.dialogRef.close(true);\n }\n\n public onCloseClickedHandler(): void {\n this.dialogRef.close(true);\n }\n\n public onDeclineClickedHandler(): void {\n if (this._data.onDecline) {\n this._data.onDecline();\n }\n this.dialogRef.close(false);\n }\n\n private _createForm(dialogBoxData: DialogBoxDataModel): void {\n const dialogBoxValidators = [];\n if (dialogBoxData.requireValidationFlag) {\n dialogBoxValidators.push(ActionConfirmationDialogValidator);\n }\n\n this.formGroup = new FormGroup(\n {\n optionValueFlag: new FormControl(dialogBoxData.optionValueFlag),\n },\n {\n validators: dialogBoxValidators,\n }\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { InformationDialogBoxDataFormGroup } from './information-dialog-box-data-form-group';\nimport { InformationDialogBoxDataModel } from './information-dialog-box-data.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-confirmation-action-information-dialog',\n styleUrls: ['./action-confirmation-information-dialog.component.scss'],\n templateUrl: './action-confirmation-information-dialog.component.html',\n})\nexport class ActionConfirmationInformationDialogComponent {\n public data: InformationDialogBoxDataModel;\n public formGroup: FormGroup;\n public information: SafeHtml;\n\n public constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: InformationDialogBoxDataModel,\n private _sanitizer: DomSanitizer\n ) {\n this.data = _data;\n if (!this._data.acceptLabel) {\n this.data.acceptLabel = 'Oui';\n }\n if (!this._data.declineLabel) {\n this.data.declineLabel = 'Non';\n }\n\n this.information = _sanitizer.bypassSecurityTrustHtml(this.data.htmlMessage);\n\n this._createForm();\n }\n\n public onAcceptClickedHandler(): void {\n if (this._data.onAccept) {\n this._data.onAccept();\n }\n this.dialogRef.close(true);\n }\n\n public onCloseClickedHandler(): void {\n this.dialogRef.close(true);\n }\n\n public onDeclineClickedHandler(): void {\n if (this._data.onDecline) {\n this._data.onDecline();\n }\n this.dialogRef.close(false);\n }\n\n private _createForm(): void {\n this.formGroup = new FormGroup({});\n }\n}\n","\n
\n
\n
\n info\n
\n
\n
\n
\n\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ActionConfirmationDialogComponent } from '../action-confirmation-dialog/action-confirmation-dialog.component';\nimport { MessageDialogBoxDataFormGroup } from './message-dialog-box-data-form-group';\nimport { MessageDialogBoxDataModel } from './message-dialog-box-data.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-action-confirmation-message-dialog',\n styleUrls: ['./action-confirmation-message-dialog.component.scss'],\n templateUrl: './action-confirmation-message-dialog.component.html',\n})\nexport class ActionConfirmationMessageDialogComponent {\n public data: MessageDialogBoxDataModel;\n public formGroup: FormGroup;\n\n public constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: MessageDialogBoxDataModel\n ) {\n this.data = _data;\n if (!this._data.acceptLabel) {\n this.data.acceptLabel = 'Oui';\n }\n if (!this._data.declineLabel) {\n this.data.declineLabel = 'Non';\n }\n this._createForm(_data);\n }\n\n public onAcceptClickedHandler(): void {\n if (this._data.onAccept) {\n this._data.onAccept(this.formGroup.controls?.message?.value);\n }\n this.dialogRef.close(true);\n }\n\n public onDeclineClickedHandler(): void {\n if (this._data.onDecline) {\n this._data.onDecline();\n }\n this.dialogRef.close(false);\n }\n\n private _createForm(dialogBoxData: MessageDialogBoxDataModel): void {\n this.formGroup = new FormGroup({\n message: new FormControl(dialogBoxData.message),\n });\n }\n}\n","\n
\n
\n \n \n \n
\n
\n\n","\n
\n
\n \n \n {{ data.numberRequiredErrorLabel }}.\n Doit être supérieur.\n Doit être inférieur.\n {{ data.numberPatternErrorLabel }}.\n \n
\n
\n\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { NumberHelper } from 'app/shared/helpers/number-helper';\nimport { ActionConfirmationDialogComponent } from '../action-confirmation-dialog/action-confirmation-dialog.component';\nimport { NumberDialogBoxDataFormGroup } from './number-dialog-box-data-form-group';\nimport { NumberDialogBoxDataModel } from './number-dialog-box-data.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-action-confirmation-number-dialog',\n styleUrls: ['./action-confirmation-number-dialog.component.scss'],\n templateUrl: './action-confirmation-number-dialog.component.html',\n})\nexport class ActionConfirmationNumberDialogComponent {\n public data: NumberDialogBoxDataModel;\n public formGroup: FormGroup;\n\n public constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: NumberDialogBoxDataModel\n ) {\n this.data = _data;\n if (!this._data.acceptLabel) {\n this.data.acceptLabel = 'Oui';\n }\n if (!this._data.declineLabel) {\n this.data.declineLabel = 'Non';\n }\n if (!this._data.numberPatternErrorLabel) {\n this.data.numberPatternErrorLabel = 'Nombre non valide';\n }\n if (!this._data.numberPlaceholder) {\n this.data.numberPlaceholder = 'Montant (€)';\n }\n if (!this._data.numberRequiredErrorLabel) {\n this.data.numberRequiredErrorLabel = 'Saisir le nombre';\n }\n this._createForm(_data);\n }\n\n public onAcceptClickedHandler(): void {\n if (this._data.onAccept) {\n this._data.onAccept(this.formGroup.controls?.numberValue?.value);\n }\n this.dialogRef.close(true);\n }\n\n public onDeclineClickedHandler(): void {\n if (this._data.onDecline) {\n this._data.onDecline();\n }\n this.dialogRef.close(false);\n }\n\n private _createForm(dialogBoxData: NumberDialogBoxDataModel): void {\n this.formGroup = new FormGroup({\n numberValue: new FormControl(dialogBoxData.numberValue, [\n Validators.min(NumberHelper.int32MinValue),\n Validators.max(NumberHelper.int32MaxValue),\n Validators.pattern(/^[-]?\\d{0,10}(\\.\\d{0,2})?$/),\n ]),\n numberPlaceholder: new FormControl(dialogBoxData.numberPlaceholder),\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { NoteModel } from 'app/shared/components/note/note.model';\nimport { ActionConfirmationComboDialogComponent } from './action-confirmation-combo-dialog/action-confirmation-combo-dialog.component';\nimport { ComboDialogBoxDataModel } from './action-confirmation-combo-dialog/combo-dialog-box-data.model';\nimport { ActionConfirmationDialogComponent } from './action-confirmation-dialog/action-confirmation-dialog.component';\nimport { DialogBoxDataModel } from './action-confirmation-dialog/dialog-box-data.model';\nimport { DialogBoxResultModel } from './action-confirmation-dialog/dialog-box-result.model';\nimport { ActionConfirmationInformationDialogComponent } from './action-confirmation-information-dialog/action-confirmation-information-dialog.component';\nimport { InformationDialogBoxDataModel } from './action-confirmation-information-dialog/information-dialog-box-data.model';\nimport { ActionConfirmationMessageDialogComponent } from './action-confirmation-message-dialog/action-confirmation-message-dialog.component';\nimport { MessageDialogBoxDataModel } from './action-confirmation-message-dialog/message-dialog-box-data.model';\nimport { ActionConfirmationNumberDialogComponent } from './action-confirmation-number-dialog/action-confirmation-number-dialog.component';\nimport { NumberDialogBoxDataModel } from './action-confirmation-number-dialog/number-dialog-box-data.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogBoxService {\n public constructor(private _dialog: MatDialog) {}\n\n public promptForAction({\n acceptLabel = 'Oui',\n cdkFocusInitialOnCancelButtonFlag = true,\n declineLabel = 'Non',\n messageLine1: messageLine1,\n messageLine2: messageLine2 = null,\n note = null,\n onAccept: onAccept = null,\n onDecline: onDecline = () => {},\n subMessageLine1: subMessageLine1 = null,\n subMessageLine2: subMessageLine2 = null,\n }: {\n acceptLabel?: string;\n cdkFocusInitialOnCancelButtonFlag?: boolean;\n declineLabel?: string;\n messageLine1: string;\n messageLine2?: string;\n note?: NoteModel;\n onAccept: () => void;\n onDecline?: () => void;\n subMessageLine1?: string;\n subMessageLine2?: string;\n }): MatDialogRef {\n const data: DialogBoxDataModel = {\n acceptLabel: acceptLabel,\n cdkFocusInitialOnButtonFlag: true,\n cdkFocusInitialOnCancelButtonFlag: cdkFocusInitialOnCancelButtonFlag,\n declineLabel: declineLabel,\n messageLine1: messageLine1,\n messageLine2: messageLine2,\n note: note,\n onAccept: onAccept,\n onAcceptWithOption: undefined,\n onDecline: onDecline,\n optionLabel: undefined,\n optionSubLabel: undefined,\n optionFlag: false,\n optionValueFlag: undefined,\n requireValidationFlag: false,\n subMessageLine1: subMessageLine1,\n subMessageLine2: subMessageLine2,\n };\n const dialogRef = this._dialog.open(ActionConfirmationDialogComponent, {\n data: data,\n autoFocus: false,\n });\n\n return dialogRef;\n }\n\n public promptForActionWithCombo({\n acceptLabel = 'Valider',\n cdkFocusInitialOnCancelButtonFlag = true,\n comboPlaceHolder = null,\n declineLabel = 'Annuler',\n messageLine1: messageLine1,\n messageLine2: messageLine2 = null,\n note = null,\n onAcceptWithCombo,\n onDecline = null,\n options: options,\n selectedValue = null,\n subMessageLine1: subMessageLine1 = null,\n subMessageLine2: subMessageLine2 = null,\n }: {\n acceptLabel?: string;\n cdkFocusInitialOnCancelButtonFlag?: boolean;\n comboPlaceHolder?: string;\n declineLabel?: string;\n messageLine1: string;\n messageLine2?: string;\n note?: NoteModel;\n onAcceptWithCombo: (item: ComboModel) => void;\n onDecline: () => void;\n options: ComboModel[];\n selectedValue?: ComboModel;\n subMessageLine1?: string;\n subMessageLine2?: string;\n }): MatDialogRef {\n const data: ComboDialogBoxDataModel = {\n acceptLabel: acceptLabel,\n cdkFocusInitialOnButtonFlag: true,\n cdkFocusInitialOnCancelButtonFlag: cdkFocusInitialOnCancelButtonFlag,\n comboPlaceHolder: comboPlaceHolder,\n declineLabel: declineLabel,\n messageLine1: messageLine1,\n messageLine2: messageLine2,\n note: note,\n onAcceptWithCombo: onAcceptWithCombo,\n onDecline: onDecline,\n options: options,\n selectedValue: selectedValue,\n subMessageLine1: subMessageLine1,\n subMessageLine2: subMessageLine2,\n };\n const dialogRef = this._dialog.open(ActionConfirmationComboDialogComponent, {\n data: data,\n autoFocus: false,\n });\n\n return dialogRef;\n }\n\n public promptForActionWithInformation({\n acceptLabel = 'Oui',\n cdkFocusInitialOnCancelButtonFlag = true,\n declineLabel = 'Non',\n htmlMessage = '',\n messageLine1: messageLine1,\n messageLine2: messageLine2 = null,\n note = null,\n onAccept: onAccept = null,\n onDecline: onDecline = () => {},\n subMessageLine1: subMessageLine1 = null,\n subMessageLine2: subMessageLine2 = null,\n }: {\n acceptLabel?: string;\n cdkFocusInitialOnCancelButtonFlag?: boolean;\n declineLabel?: string;\n htmlMessage: string;\n messageLine1: string;\n messageLine2?: string;\n note?: NoteModel;\n onAccept: () => void;\n onDecline?: () => void;\n subMessageLine1?: string;\n subMessageLine2?: string;\n }): MatDialogRef {\n const data: InformationDialogBoxDataModel = {\n acceptLabel: acceptLabel,\n cdkFocusInitialOnButtonFlag: true,\n cdkFocusInitialOnCancelButtonFlag: cdkFocusInitialOnCancelButtonFlag,\n declineLabel: declineLabel,\n messageLine1: messageLine1,\n messageLine2: messageLine2,\n note: note,\n onAccept: onAccept,\n onDecline: onDecline,\n subMessageLine1: subMessageLine1,\n subMessageLine2: subMessageLine2,\n htmlMessage: htmlMessage,\n };\n const dialogRef = this._dialog.open(ActionConfirmationInformationDialogComponent, {\n data: data,\n autoFocus: false,\n });\n\n return dialogRef;\n }\n\n public promptForActionWithMessage({\n acceptLabel = 'Oui',\n cdkFocusInitialOnCancelButtonFlag = true,\n declineLabel = 'Non',\n message = null,\n messageLine1: messageLine1,\n messageLine2: messageLine2 = null,\n note: note = null,\n onAccept,\n onDecline: onDecline = null,\n subMessageLine1 = null,\n subMessageLine2 = null,\n }: {\n acceptLabel?: string;\n cdkFocusInitialOnCancelButtonFlag?: boolean;\n declineLabel?: string;\n messageLine1: string;\n messageLine2?: string;\n message?: string;\n note?: NoteModel;\n onAccept: (message: string) => void;\n onDecline: () => void;\n subMessageLine1?: string;\n subMessageLine2?: string;\n }): MatDialogRef {\n const data: MessageDialogBoxDataModel = {\n acceptLabel: acceptLabel,\n cdkFocusInitialOnButtonFlag: true,\n cdkFocusInitialOnCancelButtonFlag: cdkFocusInitialOnCancelButtonFlag,\n declineLabel: declineLabel,\n messageLine1: messageLine1,\n messageLine2: messageLine2,\n message: message,\n note: note,\n onAccept: onAccept,\n onDecline: onDecline,\n subMessageLine1: subMessageLine1,\n subMessageLine2: subMessageLine2,\n };\n const dialogRef = this._dialog.open(ActionConfirmationMessageDialogComponent, {\n data: data,\n autoFocus: false,\n });\n\n return dialogRef;\n }\n\n public promptForActionWithNumber({\n acceptLabel = 'Oui',\n declineLabel = 'Non',\n messageLine1: messageLine1,\n messageLine2: messageLine2 = null,\n note: note = null,\n numberPatternErrorLabel = null,\n numberPlaceholder = null,\n numberRequiredErrorLabel = null,\n numberValue = 0,\n onAccept,\n onDecline: onDecline = null,\n subMessageLine1 = null,\n subMessageLine2 = null,\n }: {\n acceptLabel?: string;\n declineLabel?: string;\n messageLine1: string;\n messageLine2?: string;\n note?: NoteModel;\n numberPatternErrorLabel?: string;\n numberPlaceholder?: string;\n numberRequiredErrorLabel?: string;\n numberValue?: number;\n onAccept: (number: number) => void;\n onDecline: () => void;\n subMessageLine1?: string;\n subMessageLine2?: string;\n }): MatDialogRef {\n const data: NumberDialogBoxDataModel = {\n acceptLabel: acceptLabel,\n cdkFocusInitialOnButtonFlag: false,\n cdkFocusInitialOnCancelButtonFlag: true,\n declineLabel: declineLabel,\n messageLine1: messageLine1,\n messageLine2: messageLine2,\n note: note,\n numberPatternErrorLabel: numberPatternErrorLabel,\n numberPlaceholder: numberPlaceholder,\n numberRequiredErrorLabel: numberRequiredErrorLabel,\n numberValue: numberValue,\n onAccept: onAccept,\n onDecline: onDecline,\n subMessageLine1: subMessageLine1,\n subMessageLine2: subMessageLine2,\n };\n const dialogRef = this._dialog.open(ActionConfirmationNumberDialogComponent, {\n data: data,\n autoFocus: false,\n });\n\n return dialogRef;\n }\n\n public promptForActionWithOption({\n acceptLabel = 'Oui',\n declineLabel = 'Non',\n cdkFocusInitialOnCancelButtonFlag = true,\n messageLine1: messageLine1,\n messageLine2: messageLine2 = null,\n note = null,\n onAcceptWithOption,\n onDecline = null,\n optionFlag = true,\n optionLabel,\n optionSubLabel = null,\n optionValueFlag = false,\n requireValidationFlag = false,\n subMessageLine1: subMessageLine1 = null,\n subMessageLine2: subMessageLine2 = null,\n }: {\n acceptLabel?: string;\n cdkFocusInitialOnCancelButtonFlag?: boolean;\n declineLabel?: string;\n messageLine1: string;\n messageLine2?: string;\n note?: NoteModel;\n onAcceptWithOption: (result: DialogBoxResultModel) => void;\n onDecline: () => void;\n optionFlag?: boolean;\n optionLabel: string;\n optionSubLabel?: string;\n optionValueFlag?: boolean;\n requireValidationFlag?: boolean;\n subMessageLine1?: string;\n subMessageLine2?: string;\n }): MatDialogRef {\n const data: DialogBoxDataModel = {\n acceptLabel: acceptLabel,\n cdkFocusInitialOnButtonFlag: true,\n cdkFocusInitialOnCancelButtonFlag: cdkFocusInitialOnCancelButtonFlag,\n declineLabel: declineLabel,\n messageLine1: messageLine1,\n messageLine2: messageLine2,\n onAccept: undefined,\n onAcceptWithOption: onAcceptWithOption,\n onDecline: onDecline,\n note: note,\n optionFlag: optionFlag,\n optionLabel: optionLabel,\n optionSubLabel: optionSubLabel,\n optionValueFlag: optionValueFlag,\n requireValidationFlag: requireValidationFlag,\n subMessageLine1: subMessageLine1,\n subMessageLine2: subMessageLine2,\n };\n const dialogRef = this._dialog.open(ActionConfirmationDialogComponent, {\n data: data,\n autoFocus: false,\n });\n\n return dialogRef;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DragAndDropService {\n private _dragCanceledByEscapeFlag: boolean;\n private _draggingFlag: boolean;\n\n public get dragCanceledByEscapeFlag(): boolean {\n return this._dragCanceledByEscapeFlag;\n }\n\n public set dragCanceledByEscapeFlag(dragCanceledByEscapeFlag: boolean) {\n this._dragCanceledByEscapeFlag = dragCanceledByEscapeFlag;\n }\n\n public get draggingFlag(): boolean {\n return this._draggingFlag;\n }\n\n public set draggingFlag(draggingFlag: boolean) {\n if (draggingFlag) {\n document.body.classList.add('inheritCursors');\n document.body.style.cursor = 'move';\n } else {\n document.body.classList.remove('inheritCursors');\n document.body.style.cursor = 'unset';\n }\n\n this._draggingFlag = draggingFlag;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, NgZone } from '@angular/core';\nimport { GridFilterComponent } from 'app/shared/components/grid-filter/grid-filter.component';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FocusService {\n public focusOnAdvancedFilterPanelToggleButtonFlag: boolean;\n public focusOnCustomerPanelToggleButtonFlag: boolean;\n public focusOnLaboratoryResourcePanelToggleButtonFlag: boolean;\n public routerOutletLoaded = new Subject();\n\n public constructor(@Inject(DOCUMENT) private _document, private _ngZone: NgZone) {}\n\n public routerOutletLoadedHandler(): Observable {\n return this.routerOutletLoaded.asObservable();\n }\n\n public setFocusOnGridFilter($event: KeyboardEvent, gridFilter: GridFilterComponent): void {\n if (\n FocusService._isDescendant(this._getLeftFuseSideBar(), $event.target as HTMLElement) ||\n document.activeElement.nodeName === 'BODY'\n ) {\n $event.preventDefault();\n gridFilter.setFocus();\n }\n }\n\n // https://lukeliutingchun.medium.com/angular-performance-issue-caused-by-settimeout-and-setinterval-1a4a65c07be3\n public setTimeoutOutsideAngular(actionFunction: () => void, ms = 0): void {\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n actionFunction();\n }, ms);\n });\n }\n\n private static _isDescendant(pParent: HTMLElement, pChild: HTMLElement): boolean {\n while (pChild !== null) {\n if (pChild === pParent) {\n return true;\n } else {\n pChild = pChild.parentNode as HTMLElement;\n }\n }\n\n return false;\n }\n\n private _getLeftFuseSideBar(): HTMLElement {\n return this._document.getElementById('left-fuse-sidebar');\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { isEqual } from 'lodash-es';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormStateService {\n public currentFormGroup: NgForm;\n public initialValue: any;\n\n public hasChanged(): boolean {\n if (!this.currentFormGroup?.form || !this.initialValue) {\n return false;\n }\n\n return !this.compareValues(this.currentFormGroup.form.getRawValue(), this.initialValue);\n }\n\n public initialize(currentFormGroup: NgForm, initialValue: any): void {\n this.currentFormGroup = currentFormGroup;\n this.initialValue = initialValue;\n }\n\n public reset(): void {\n this.initialValue = null;\n }\n\n private compareValues(val1: any, val2: any): boolean {\n if ((val1 === null || val1 === '' || val1 === undefined) && (val2 === null || val2 === '' || val2 === undefined)) {\n return true;\n }\n\n if (typeof val1 === 'object' && typeof val2 === 'object') {\n if (!val1 || !val2) {\n return false;\n }\n\n const keys1 = Object.keys(val1);\n const keys2 = Object.keys(val2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n return keys1.every((key) => this.compareValues(val1[key], val2[key]));\n }\n\n return isEqual(val1, val2);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HighlightType } from 'app/shared/enums/highlight-type.enum';\nimport { HtmlHelper } from 'app/shared/helpers/html-helper';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HighlightService {\n private _aRegExp = new RegExp('[aàáâãäå]', 'gi');\n private _caseInsensitiveAndAccentInsensitiveRegEx: RegExp;\n private _cRegExp = new RegExp('[cç]', 'gi');\n private _decimalRegEx: RegExp;\n private _eRegExp = new RegExp('[eèéêëð]', 'gi');\n private _iRegExp = new RegExp('[iìíîï]', 'gi');\n private _nRegExp = new RegExp('[nñ]', 'gi');\n private _oRegExp = new RegExp('[oòóôõöø]', 'gi');\n private _phoneNumberRegEx: RegExp;\n private _sRegExp = new RegExp('[sš]', 'gi');\n private _uRegExp = new RegExp('[uùúûü]', 'gi');\n private _yRegExp = new RegExp('[yÿý]', 'gi');\n private _zRegExp = new RegExp('[zž]', 'gi');\n\n public compileFilter(filter: string): void {\n const caseInsensitiveAndAccentInsensitiveFilter = this._buildCaseInsensitiveAndAccentInsensitiveFilter(this._escapeRegex(filter));\n\n if (caseInsensitiveAndAccentInsensitiveFilter) {\n const phoneNumberFilter = caseInsensitiveAndAccentInsensitiveFilter.replace(/[\\s]/g, '').replace('-', '');\n let phoneNumberFilterWithoutPlus: string;\n let regex: string;\n if (phoneNumberFilter.startsWith('\\\\+')) {\n phoneNumberFilterWithoutPlus = phoneNumberFilter.slice('\\\\+'.length, phoneNumberFilter.length);\n regex = '[+]';\n } else {\n phoneNumberFilterWithoutPlus = phoneNumberFilter;\n regex = '';\n }\n\n if (phoneNumberFilterWithoutPlus && phoneNumberFilterWithoutPlus.match(/^[0-9]*$/g)) {\n const chars = phoneNumberFilterWithoutPlus.toString().split('');\n chars.forEach((char) => {\n regex += char + '[\\\\s\\\\-]?';\n });\n this._phoneNumberRegEx = new RegExp(regex, 'gi');\n } else {\n this._phoneNumberRegEx = null;\n }\n } else {\n this._phoneNumberRegEx = null;\n }\n\n if (filter) {\n const decimalFilter = parseFloat(filter.replace(/[\\s]/g, '').replace(',', '.'));\n if (!isNaN(decimalFilter)) {\n const chars = decimalFilter.toString().split('');\n let regex = '';\n chars.forEach((char) => {\n regex += char + '[\\\\s]?';\n });\n this._decimalRegEx = new RegExp(regex, 'g');\n } else {\n this._decimalRegEx = null;\n }\n } else {\n this._decimalRegEx = null;\n }\n\n if (caseInsensitiveAndAccentInsensitiveFilter) {\n this._caseInsensitiveAndAccentInsensitiveRegEx = new RegExp(caseInsensitiveAndAccentInsensitiveFilter, 'gi');\n } else {\n this._caseInsensitiveAndAccentInsensitiveRegEx = null;\n }\n }\n\n public highlight(content: string, highlightType: HighlightType = HighlightType.String): string {\n switch (highlightType) {\n case HighlightType.String:\n return this._highlightString(content);\n case HighlightType.Decimal:\n return this._highlightDecimal(content);\n case HighlightType.PhoneNumber:\n return this._highlightPhoneNumber(content);\n default:\n return this._highlightString(content);\n }\n }\n\n private _buildCaseInsensitiveAndAccentInsensitiveFilter(filter: string): string {\n return !filter\n ? filter\n : filter\n .replace(this._aRegExp, () => '[aàáâãäå]')\n .replace(this._oRegExp, () => '[oòóôõöø]')\n .replace(this._eRegExp, () => '[eèéêëð]')\n .replace(this._cRegExp, () => '[cç]')\n .replace(this._iRegExp, () => '[iìíîï]')\n .replace(this._uRegExp, () => '[uùúûü]')\n .replace(this._nRegExp, () => '[nñ]')\n .replace(this._sRegExp, () => '[sš]')\n .replace(this._yRegExp, () => '[yÿý]')\n .replace(this._zRegExp, () => '[zž]');\n }\n\n /*\n * RegEx have 12 special characters we need to escape.\n * https://www.regular-expressions.info/characters.html\n */\n private _escapeRegex(filter: string): string {\n return !filter\n ? filter\n : filter\n // This line first\n .replace(/\\\\/gi, () => '\\\\\\\\')\n\n // Other special characters\n .replace(/\\$/gi, () => '\\\\$')\n .replace(/\\^/gi, () => '\\\\^')\n .replace(/\\?/gi, () => '\\\\?')\n .replace(/\\(/gi, () => '\\\\(')\n .replace(/\\|/gi, () => '\\\\|')\n .replace(/\\{/gi, () => '\\\\{')\n .replace(/\\[/gi, () => '\\\\[')\n .replace(/\\)/gi, () => '\\\\)')\n .replace(/\\+/gi, () => '\\\\+')\n .replace(/\\./gi, () => '\\\\.')\n .replace(/\\*/gi, () => '\\\\*');\n }\n\n private _highlightDecimal(content: string): string {\n if (!this._decimalRegEx) {\n return HtmlHelper.escape(content);\n }\n\n if (!content) {\n return content;\n }\n\n return content.replace(this._decimalRegEx, (match) => {\n return `${HtmlHelper.escape(match)}`;\n });\n }\n\n private _highlightPhoneNumber(content: string): string {\n if (!this._phoneNumberRegEx) {\n return HtmlHelper.escape(content);\n }\n\n if (!content) {\n return content;\n }\n\n return content.replace(this._phoneNumberRegEx, (match) => {\n return `${HtmlHelper.escape(match)}`;\n });\n }\n\n private _highlightString(content: string): string {\n if (!this._caseInsensitiveAndAccentInsensitiveRegEx) {\n return HtmlHelper.escape(content);\n }\n\n if (!content) {\n return content;\n }\n\n const positions = [];\n\n let result: string = content.replace(this._caseInsensitiveAndAccentInsensitiveRegEx, (match, position) => {\n const replacementValue = `${HtmlHelper.escape(match)}`;\n let start = position;\n positions.forEach((elt) => {\n start += elt.legnth - match.length;\n });\n\n positions.push({ start: start, legnth: replacementValue.length, end: start + replacementValue.length });\n return replacementValue;\n });\n\n let i = 0;\n let overheadLength = 0;\n positions.forEach((elt) => {\n const end = elt.start + overheadLength;\n const value = result.substring(i, end);\n const escapedValue = HtmlHelper.escape(value);\n overheadLength += escapedValue.length - value.length;\n result = this._splice(result, i, value.length, escapedValue);\n i = elt.end + overheadLength;\n });\n\n if (i < result.length) {\n const value = result.substring(i, result.length);\n const escapedValue = HtmlHelper.escape(value);\n result = this._splice(result, i, value.length, escapedValue);\n }\n\n return result;\n }\n\n // https://stackoverflow.com/questions/20817618/is-there-a-splice-method-for-strings\n private _splice(str: string, index: number, count: number, add: string): string {\n // We cannot pass negative indexes directly to the 2nd slicing operation.\n if (index < 0) {\n index = str.length + index;\n if (index < 0) {\n index = 0;\n }\n }\n\n return str.slice(0, index) + (add || '') + str.slice(index + count);\n }\n}\n","/**\n * Indicates the Customer Title.\n */\nexport enum AreaMenu {\n Laboratory = 0,\n Admin = 1,\n CustomerAndCustomerGroup = 2,\n CustomerMember = 3,\n NoArea = 4,\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { NavigationInterface } from 'app/layout/components/navigation/models/navigation-interface';\nimport { NavigationItemInterface } from 'app/layout/components/navigation/models/navigation-item-interface';\n\nimport { InvoiceComponent as CA_InvoiceComponent } from 'app/pages/customer-area/invoice/invoice.component';\nimport { ProductionFlowComponent as CA_ProductionFlowComponent } from 'app/pages/customer-area/production-flow/production-flow.component';\nimport { InvoiceComponent as LA_InvoiceComponent } from 'app/pages/laboratory-area/invoice/invoice.component';\nimport { ProductionFlowComponent as LA_ProductionFlowComponent } from 'app/pages/laboratory-area/production-flow/production-flow.component';\nimport { Area } from '../../../shared/enums/area.enum';\nimport { LocalStorageService } from '../local-storage.service';\nimport { WorkingLaboratoryService } from '../prothesis-api/working-laboratory.service';\nimport { WorkingCustomerService } from '../prothesis-customer-api/working-customer.service';\nimport { AreaMenu } from './area-menu.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LeftMenuService {\n public workingCustomerService: WorkingCustomerService;\n public workingLaboratoryService: WorkingLaboratoryService;\n\n private _area: Area;\n\n private _areaMenus: AreaMenu[];\n\n private _currentFuseNavigation: NavigationInterface[];\n\n private _navigationAdmin: NavigationInterface = {\n id: 'admin',\n classes: 'nav-link-admin-area',\n translate: 'NAV.ADMIN',\n type: 'group',\n children: [\n {\n id: 'laboratory',\n classes: 'nav-link-admin-area',\n translate: 'NAV.LABORATORY',\n type: 'item',\n icon: 'svg_laboratory',\n url: '/admin/laboratory',\n },\n {\n id: 'user',\n classes: 'nav-link-admin-area',\n translate: 'NAV.USER',\n type: 'item',\n icon: 'svg_user',\n url: '/admin/user',\n },\n ],\n };\n\n private _navigationCustomerAndCustomerGroup: NavigationInterface = {\n id: 'customer-area',\n classes: 'nav-link-customer-area',\n hideGroupTitleFlag: true,\n translate: 'NAV.CUSTOMER_AREA',\n type: 'group',\n };\n\n private _navigationCustomerAndCustomerGroupChildren: NavigationItemInterface[];\n\n private _navigationCustomerChildRate: NavigationItemInterface = {\n id: 'customer-area-rate',\n classes: 'nav-link-customer-area',\n translate: 'NAV.CUSTOMERAREA.RATE',\n type: 'item',\n icon: 'svg_rate',\n url: '/customer-area/rate',\n };\n\n private _navigationCustomerChildren: NavigationItemInterface[] = [\n {\n id: 'customer-area-home',\n classes: 'nav-link-customer-area',\n translate: 'NAV.HOME.TITLE',\n type: 'item',\n icon: 'svg_home',\n url: '/customer-area/home',\n },\n {\n id: 'customer-area-production-flow',\n classes: 'nav-link-customer-area',\n translate: 'NAV.CUSTOMERAREA.PRODUCTION',\n type: 'item',\n icon: 'svg_production_flow',\n function: () => {\n const link = this._localStorageService.read(CA_ProductionFlowComponent.strCurrentTabLink);\n if (link) {\n this._router.navigateByUrl(`/customer-area/production-flow/${link}`);\n } else {\n this._router.navigateByUrl(`/customer-area/production-flow/delivery-form`);\n }\n return true;\n },\n url: '/customer-area/production-flow',\n },\n {\n id: 'customer-area-invoice',\n classes: 'nav-link-customer-area',\n translate: 'NAV.INVOICE',\n type: 'item',\n icon: 'svg_invoice',\n function: () => {\n const link = this._localStorageService.read(CA_InvoiceComponent.strCurrentTabLink);\n if (link) {\n this._router.navigateByUrl(`/customer-area/invoice/${link}`);\n } else {\n this._router.navigateByUrl(`/customer-area/invoice`);\n }\n return true;\n },\n url: '/customer-area/invoice',\n },\n ];\n\n private _navigationCustomerMember: NavigationInterface = {\n id: 'customer-area',\n classes: 'nav-link-customer-area',\n hideGroupTitleFlag: true,\n translate: 'NAV.CUSTOMER_AREA',\n type: 'group',\n children: this._navigationCustomerChildren,\n };\n\n private _navigationLaboratory: NavigationInterface = {\n id: 'laboratory-area',\n hideGroupTitleFlag: true,\n translate: 'NAV.LABORATORY_AREA',\n type: 'group',\n children: [\n {\n id: 'laboratory-area-home',\n translate: 'NAV.HOME.TITLE',\n type: 'item',\n icon: 'svg_home',\n url: '/laboratory-area/home',\n },\n {\n id: 'directory',\n translate: 'NAV.DIRECTORY',\n type: 'collapsable',\n icon: 'svg_contact',\n children: [\n {\n id: 'customer',\n translate: 'NAV.CUSTOMER',\n type: 'item',\n icon: 'svg_customer',\n url: '/customer',\n },\n {\n id: 'manufacturer',\n translate: 'NAV.MANUFACTURER',\n type: 'item',\n icon: 'svg_manufacturer',\n url: '/manufacturer',\n },\n {\n id: 'resource',\n translate: 'NAV.RESOURCE',\n type: 'item',\n icon: 'svg_laboratory_resource',\n url: '/resource',\n },\n ],\n },\n {\n id: 'catalog',\n translate: 'NAV.CATALOG',\n type: 'collapsable',\n icon: 'svg_catalog',\n children: [\n {\n id: 'item',\n translate: 'NAV.ITEM',\n type: 'item',\n icon: 'svg_item',\n url: '/item',\n },\n {\n id: 'material',\n translate: 'NAV.MATERIAL',\n type: 'item',\n icon: 'svg_raw_material',\n url: '/raw-material',\n },\n {\n id: 'shade',\n translate: 'NAV.SHADE',\n type: 'item',\n icon: 'svg_shade',\n url: '/shade',\n },\n ],\n },\n {\n id: 'rate',\n translate: 'NAV.RATE',\n type: 'item',\n icon: 'svg_rate',\n url: '/rate',\n },\n {\n id: 'production-flow',\n translate: 'NAV.PRODUCTION',\n type: 'item',\n icon: 'svg_production_flow',\n function: () => {\n const link = this._localStorageService.read(LA_ProductionFlowComponent.strCurrentTabLink);\n if (link) {\n this._router.navigateByUrl(`/production-flow/${link}`);\n } else {\n this._router.navigateByUrl(`/production-flow/delivery-form`);\n }\n return true;\n },\n url: '/production-flow',\n },\n {\n id: 'invoice',\n translate: 'NAV.INVOICE',\n type: 'item',\n icon: 'svg_invoice',\n function: () => {\n const link = this._localStorageService.read(LA_InvoiceComponent.strCurrentTabLink);\n if (link) {\n this._router.navigateByUrl(`/invoice/${link}`);\n } else {\n this._router.navigateByUrl(`/invoice`);\n }\n return true;\n },\n url: '/invoice',\n },\n {\n id: 'payment',\n translate: 'NAV.PAYMENT',\n type: 'item',\n icon: 'svg_payment',\n function: () => {\n const link = this._localStorageService.read('payment-current-tab-link');\n if (link) {\n this._router.navigateByUrl(`/payment/${link}`);\n } else {\n this._router.navigateByUrl(`/payment`);\n }\n return true;\n },\n url: '/payment',\n },\n {\n id: 'journal',\n translate: 'NAV.JOURNAL',\n type: 'item',\n icon: 'svg_journal',\n url: '/journal',\n },\n ],\n };\n\n private _navigationNoArea: NavigationInterface = {\n id: 'no-area',\n classes: 'nav-link-no-area',\n translate: 'NAV.HOME.TITLE',\n type: 'item',\n icon: 'svg_home',\n url: '/home',\n };\n\n public constructor(\n private _fuseNavigationService: FuseNavigationService,\n private _localStorageService: LocalStorageService,\n private _router: Router\n ) {\n this._navigationCustomerAndCustomerGroupChildren = Array.from(this._navigationCustomerChildren);\n this._navigationCustomerAndCustomerGroupChildren.splice(1, 0, this._navigationCustomerChildRate);\n this._navigationCustomerAndCustomerGroup.children = this._navigationCustomerAndCustomerGroupChildren;\n\n this._router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n if (event.url.startsWith('/customer-area/')) {\n this._area = Area.Customer;\n } else if (event.url.startsWith('/admin/')) {\n this._area = Area.Admin;\n } else {\n this._area = Area.Laboratory;\n }\n }\n });\n }\n\n public get area(): Area {\n return this._area;\n }\n\n public get areaMenus(): AreaMenu[] {\n return this._areaMenus;\n }\n\n public get currentNavigation(): NavigationInterface[] {\n return this._currentFuseNavigation;\n }\n\n public getNavigation(\n areaMenus: AreaMenu[],\n laboratoryDemoModeFlag: boolean = null,\n adminOrSuperAdminFlag: boolean,\n laboratoryName = null\n ): NavigationInterface[] {\n this._areaMenus = areaMenus;\n this._currentFuseNavigation = new Array();\n\n for (const areaMenu of areaMenus) {\n if (areaMenu === AreaMenu.Laboratory) {\n if (laboratoryName) {\n this._navigationLaboratory.translate = laboratoryName;\n }\n this._navigationLaboratory.hideGroupTitleFlag =\n this.workingLaboratoryService.authService.allowedLaboratoryUuids?.length !== 1 && !this.workingLaboratoryService.exploringFlag;\n this._currentFuseNavigation.push(Object.assign({}, this._navigationLaboratory));\n\n if (this.workingLaboratoryService.laboratoryRole) {\n this.setVisibilityForLaboratoryItemNavigation(\n this._navigationLaboratory,\n 'directory',\n this.workingLaboratoryService.laboratoryRole?.customerModuleFlag ||\n this.workingLaboratoryService.laboratoryRole?.manufacturerModuleFlag ||\n this.workingLaboratoryService.laboratoryRole?.laboratoryResourceModuleFlag\n );\n const navigationLaboratoryDirectory = this._navigationLaboratory.children.find((x) => x.id === 'directory');\n this.setVisibilityForLaboratoryItemNavigation(\n navigationLaboratoryDirectory,\n 'customer',\n this.workingLaboratoryService.laboratoryRole?.customerModuleFlag\n );\n this.setVisibilityForLaboratoryItemNavigation(\n navigationLaboratoryDirectory,\n 'manufacturer',\n this.workingLaboratoryService.laboratoryRole?.manufacturerModuleFlag\n );\n this.setVisibilityForLaboratoryItemNavigation(\n navigationLaboratoryDirectory,\n 'resource',\n this.workingLaboratoryService.laboratoryRole?.laboratoryResourceModuleFlag\n );\n\n this.setVisibilityForLaboratoryItemNavigation(\n this._navigationLaboratory,\n 'catalog',\n this.workingLaboratoryService.laboratoryRole?.itemModuleFlag ||\n this.workingLaboratoryService.laboratoryRole?.rawMaterialModuleFlag ||\n this.workingLaboratoryService.laboratoryRole?.shadeModuleFlag\n );\n const navigationLaboratoryCatalog = this._navigationLaboratory.children.find((x) => x.id === 'catalog');\n this.setVisibilityForLaboratoryItemNavigation(\n navigationLaboratoryCatalog,\n 'item',\n this.workingLaboratoryService.laboratoryRole?.itemModuleFlag\n );\n this.setVisibilityForLaboratoryItemNavigation(\n navigationLaboratoryCatalog,\n 'material',\n this.workingLaboratoryService.laboratoryRole?.rawMaterialModuleFlag\n );\n this.setVisibilityForLaboratoryItemNavigation(\n navigationLaboratoryCatalog,\n 'shade',\n this.workingLaboratoryService.laboratoryRole?.shadeModuleFlag\n );\n\n this.setVisibilityForLaboratoryItemNavigation(\n this._navigationLaboratory,\n 'rate',\n this.workingLaboratoryService.laboratoryRole?.rateModuleFlag\n );\n\n this.setVisibilityForLaboratoryItemNavigation(\n this._navigationLaboratory,\n 'production-flow',\n this.workingLaboratoryService.laboratoryRole?.productionFlowModuleFlag\n );\n\n this.setVisibilityForLaboratoryItemNavigation(\n this._navigationLaboratory,\n 'invoice',\n this.workingLaboratoryService.laboratoryRole?.invoiceModuleFlag\n );\n\n this.setVisibilityForLaboratoryItemNavigation(\n this._navigationLaboratory,\n 'payment',\n this.workingLaboratoryService.laboratoryRole?.paymentModuleFlag\n );\n\n this.setVisibilityForLaboratoryItemNavigation(\n this._navigationLaboratory,\n 'journal',\n this.workingLaboratoryService.laboratoryRole?.journalModuleFlag\n );\n }\n\n this.refreshClassesForNavigationLaboratory(laboratoryDemoModeFlag, adminOrSuperAdminFlag);\n } else if (areaMenu === AreaMenu.Admin) {\n this._currentFuseNavigation.push(Object.assign({}, this._navigationAdmin));\n } else if (areaMenu === AreaMenu.CustomerAndCustomerGroup) {\n if (laboratoryName) {\n this._navigationCustomerAndCustomerGroup.translate = laboratoryName;\n }\n this._navigationCustomerAndCustomerGroup.text2 = null;\n if (!this.workingCustomerService.exploringFlag) {\n this._navigationCustomerAndCustomerGroup.text2 = this.workingCustomerService.customerName;\n }\n this._navigationCustomerAndCustomerGroup.hideGroupTitleFlag =\n this.workingCustomerService.authService.allowedCustomerUuids?.length !== 1 && !this.workingCustomerService.exploringFlag;\n this._currentFuseNavigation.push(Object.assign({}, this._navigationCustomerAndCustomerGroup));\n } else if (areaMenu === AreaMenu.CustomerMember) {\n if (laboratoryName) {\n this._navigationCustomerMember.translate = laboratoryName;\n }\n this._navigationCustomerMember.text2 = null;\n if (!this.workingCustomerService.exploringFlag) {\n this._navigationCustomerMember.text2 = this.workingCustomerService.customerName;\n }\n this._navigationCustomerMember.hideGroupTitleFlag =\n this.workingCustomerService.authService.allowedCustomerUuids?.length !== 1 && !this.workingCustomerService.exploringFlag;\n this._currentFuseNavigation.push(Object.assign({}, this._navigationCustomerMember));\n } else if (areaMenu === AreaMenu.NoArea) {\n this._currentFuseNavigation.push(Object.assign({}, this._navigationNoArea));\n }\n }\n\n return this._currentFuseNavigation;\n }\n\n public refreshClassesForNavigationLaboratory(laboratoryDemoModeFlag: boolean, adminOrSuperAdminFlag: boolean): void {\n const laboratoryNavigation = this._currentFuseNavigation.find((x) => x.id === 'laboratory-area');\n if (laboratoryNavigation) {\n // Add or remove specific class for laboratory navigation when laboratory is in production mode\n if (laboratoryDemoModeFlag === false && adminOrSuperAdminFlag) {\n LeftMenuService.addClasses(laboratoryNavigation, 'nav-link-explore-laboratory-production-mode');\n } else {\n LeftMenuService.removeClasses(laboratoryNavigation, 'nav-link-explore-laboratory-production-mode');\n }\n\n this._fuseNavigationService.updateNavigationItem('laboratory-area', laboratoryNavigation);\n }\n }\n\n private static addClasses(fuseNavigation: NavigationInterface, classToApply: string): void {\n let classesTable: Array;\n if (fuseNavigation.classes) {\n classesTable = fuseNavigation.classes.trim().split(/[ ]+/);\n if (!classesTable.includes(classToApply)) {\n classesTable.push(classToApply);\n }\n } else {\n classesTable = [classToApply.trim()];\n }\n\n fuseNavigation.classes = classesTable.join(' ');\n\n if (fuseNavigation.children?.length > 0) {\n fuseNavigation.children?.forEach((fuseNavigationChild: NavigationInterface) => {\n this.addClasses(fuseNavigationChild, classToApply);\n });\n }\n }\n\n private static removeClasses(fuseNavigation: NavigationInterface, classToApply: string): void {\n if (fuseNavigation.classes && fuseNavigation.classes.includes(classToApply)) {\n fuseNavigation.classes = fuseNavigation.classes.replace(classToApply, '').replace(/[ ]+/g, ' ').trim();\n }\n\n if (fuseNavigation.children?.length > 0) {\n fuseNavigation.children?.forEach((fuseNavigationChild: NavigationInterface) => {\n this.removeClasses(fuseNavigationChild, classToApply);\n });\n }\n }\n\n private setVisibilityForLaboratoryItemNavigation(fuseNavigation: NavigationInterface, itemId: string, itemVisibility: boolean): void {\n if (fuseNavigation) {\n const itemNavigation = fuseNavigation.children.find((x) => x.id === itemId);\n if (itemNavigation) {\n itemNavigation.hidden = !itemVisibility;\n this._fuseNavigationService.updateNavigationItem(itemId, itemNavigation);\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Area } from '../../shared/enums/area.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LocalStorageService {\n public read(key: string): any {\n const data = localStorage.getItem(key);\n if (data) {\n return JSON.parse(data);\n }\n\n return;\n }\n\n public removeItem(key: string): void {\n localStorage.removeItem(key);\n }\n\n public tryGetArea(key: string): Area {\n let area: Area;\n const strArea = this.read(key);\n if (strArea) {\n area = JSON.parse(strArea);\n }\n return area;\n }\n\n public write(key: string, value: any): void {\n localStorage.setItem(key, JSON.stringify(value));\n }\n}\n","
\n \n \n
\n","import { Component, Inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';\nimport { NoteTypeEnum } from 'app/shared/components/note/note-type.enum';\nimport { SmartSnackDataModel } from './smart-snack-data.model';\n\n@Component({\n selector: 'app-smart-snack',\n styleUrls: ['./smart-snack.component.scss'],\n templateUrl: './smart-snack.component.html',\n})\nexport class SmartSnackComponent {\n public hasAction = false;\n public messageArrayFlag = false;\n public messageTypeError = NoteTypeEnum.Error;\n public messageTypeInformation = NoteTypeEnum.Information;\n public messageTypeWarning = NoteTypeEnum.Warning;\n\n public constructor(\n @Inject(MAT_SNACK_BAR_DATA) public data: SmartSnackDataModel,\n private _snackBarRef: MatSnackBarRef\n ) {\n if (this.data.actionFunction) {\n this.hasAction = true;\n }\n\n if (this.data.notes instanceof Array) {\n this.messageArrayFlag = true;\n }\n }\n\n public close(): void {\n this._snackBarRef.dismissWithAction();\n }\n\n public performAction(): void {\n if (this.data) {\n this.data.actionFunction();\n }\n this.close();\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { NoteTypeEnum } from 'app/shared/components/note/note-type.enum';\nimport { NoteModel } from 'app/shared/components/note/note.model';\nimport { EntityValidationResult } from 'app/shared/prothesis-api-view-models/entity-validation-result';\nimport { SmartSnackDataModel } from './smart-snack/smart-snack-data.model';\nimport { SmartSnackComponent } from './smart-snack/smart-snack.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotifyService {\n private _data: SmartSnackDataModel = null;\n private _doNotDismissFlag = false;\n private _flag = false;\n\n public constructor(private _snackBar: MatSnackBar) {}\n\n /**\n * Display one or more messages immediately, only if the \"flagUp\" was not called.\n */\n public _displayMessagesNow(\n noteType: NoteTypeEnum,\n messageOrMessages: string | string[],\n actionFunction: () => void = null,\n actionLabel = null\n ): void {\n if (!this._flag) {\n this._pushMessages(noteType, messageOrMessages, actionFunction, actionLabel);\n this.displayMessages();\n }\n\n this.flagDown();\n }\n\n /**\n * Display an error message.\n */\n public buildErrorMessage(error: HttpErrorResponse): Array {\n const errorMessage = new Array();\n\n if (error && error.error) {\n const entityValidationResult: EntityValidationResult = error.error;\n if (entityValidationResult.validationResults && entityValidationResult.validationResults.length > 0) {\n entityValidationResult.validationResults.forEach((validationResult) => {\n if (validationResult.memberNames.length === 0) {\n errorMessage.push(validationResult.errorMessage);\n }\n });\n }\n }\n\n return errorMessage;\n }\n\n /**\n * Display first error message.\n */\n public buildErrorMessageSingle(error: HttpErrorResponse): string {\n return `${this.buildErrorMessage(error)}`;\n }\n\n /**\n * Close the snackBar (in case of api call).\n */\n public dismiss(): void {\n if (this._doNotDismissFlag) {\n this._doNotDismissFlag = false;\n } else {\n this._snackBar.dismiss();\n }\n }\n\n /**\n * Display one or more ERROR messages immediately, only if the \"flagUp\" was not called.\n */\n public displayErrorMessagesNow(messageOrMessages: string | string[], actionFunction: () => void = null, actionLabel = null): void {\n this._displayMessagesNow(NoteTypeEnum.Error, messageOrMessages, actionFunction, actionLabel);\n }\n\n /**\n * Display one or more INFORMATION messages immediately, only if the \"flagUp\" was not called.\n */\n public displayInformationMessagesNow(messageOrMessages: string | string[], actionFunction: () => void = null, actionLabel = null): void {\n this._displayMessagesNow(NoteTypeEnum.Information, messageOrMessages, actionFunction, actionLabel);\n }\n\n /**\n * Display one or more messages already pushed by \"PushMessages\".\n */\n public displayMessages(): void {\n if (this._data) {\n const config: { [k: string]: any } = {};\n config.data = this._data;\n\n this._snackBar.openFromComponent(SmartSnackComponent, config);\n this._clear();\n }\n }\n\n /**\n * Display one or more WARNING messages immediately, only if the \"flagUp\" was not called.\n */\n public displayWarningMessagesNow(messageOrMessages: string | string[], actionFunction: () => void = null, actionLabel = null): void {\n this._displayMessagesNow(NoteTypeEnum.Warning, messageOrMessages, actionFunction, actionLabel);\n }\n\n public doNotDismissOnNextApiCall(): void {\n this._doNotDismissFlag = true;\n }\n\n /**\n * Reset default behavior. Any error will show up on next API call.\n */\n public flagDown(): void {\n this._flag = false;\n }\n\n /**\n * Do not notify on next API call.\n * The method is usually called to suppress the display of messages by the ApiInterceptor when error handling will be managed by the caller of this method.\n */\n public flagUp(): void {\n this._flag = true;\n }\n\n /**\n * Returns true if the error.error.errorName is equal to the errorName provided.\n */\n public hasErrorName(error: HttpErrorResponse, errorName: string): boolean {\n if (error) {\n const entityValidationResult: EntityValidationResult = error.error;\n if (entityValidationResult && entityValidationResult.errorName === errorName) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Push one or more ERROR message. Displayable by calling \"DisplayMessages\".\n */\n public pushErrorMessages(\n messageOrMessages: string | string[],\n actionFunction: () => void = null,\n actionLabel = 'Annuler',\n overwriteMessagesFlag = true,\n overwriteActionFlag = true\n ): void {\n this._pushMessages(NoteTypeEnum.Error, messageOrMessages, actionFunction, actionLabel, overwriteMessagesFlag, overwriteActionFlag);\n }\n\n /**\n * Push one or more INFORMATION message. Displayable by calling \"DisplayMessages\".\n */\n public pushInformationMessages(\n messageOrMessages: string | string[],\n actionFunction: () => void = null,\n actionLabel = 'Annuler',\n overwriteMessagesFlag = true,\n overwriteActionFlag = true\n ): void {\n this._pushMessages(\n NoteTypeEnum.Information,\n messageOrMessages,\n actionFunction,\n actionLabel,\n overwriteMessagesFlag,\n overwriteActionFlag\n );\n }\n\n /**\n * Push one or more WARNING message. Displayable by calling \"DisplayMessages\".\n */\n public pushWarningMessages(\n messageOrMessages: string | string[],\n actionFunction: () => void = null,\n actionLabel = 'Annuler',\n overwriteMessagesFlag = true,\n overwriteActionFlag = true\n ): void {\n this._pushMessages(NoteTypeEnum.Warning, messageOrMessages, actionFunction, actionLabel, overwriteMessagesFlag, overwriteActionFlag);\n }\n\n /**\n * Clear a message already pushed by \"PushMessage\".\n */\n private _clear(): void {\n this._data = null;\n }\n\n /**\n * Push one or more messages. Displayable by calling \"DisplayMessages\".\n */\n private _pushMessages(\n noteType: NoteTypeEnum,\n messageOrMessages: string | string[],\n actionFunction: () => void = null,\n actionLabel = 'Annuler',\n overwriteMessagesFlag = true,\n overwriteActionFlag = true\n ): void {\n let messages: string[];\n if (messageOrMessages instanceof Array) {\n messages = messageOrMessages;\n } else {\n messages = [messageOrMessages];\n }\n\n const notes: NoteModel[] = [];\n\n messages.forEach((message) => {\n const note = new NoteModel();\n note.message = message;\n note.noteType = noteType;\n notes.push(note);\n });\n\n this._data = {\n notes: overwriteMessagesFlag ? notes : this._data.notes.concat(notes),\n actionFunction: overwriteActionFlag ? actionFunction : this._data.actionFunction,\n actionLabel: overwriteActionFlag ? actionLabel : this._data.actionLabel,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PeriodSearchInfoModel } from 'app/shared/components/period-search/models/period-search-info-model';\nimport { Observable, ReplaySubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PeriodSearchService {\n public periodSearchInfoSubject$: Observable;\n\n private _periodSearchInfoSubject = new ReplaySubject(1);\n\n public constructor() {\n this.periodSearchInfoSubject$ = this._periodSearchInfoSubject.asObservable();\n }\n\n public nextPeriodSearchInfo(periodSearchInfo: PeriodSearchInfoModel): void {\n this._periodSearchInfoSubject.next(periodSearchInfo);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PickerStateService {\n public autocompleteOpenedFlag = false;\n}\n","import { Injectable } from '@angular/core';\nimport { FormDocumentSelectionModel } from 'app/pages/laboratory-area/production-flow/models/form-document-selection-model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PreselectionService {\n private _categoryUuid: string;\n private _familyUuid: string;\n private _formDocumentSelection: FormDocumentSelectionModel;\n private _laboratoryRoleUuid: string;\n private _paymentCustomerUuid: string;\n private _productionFlowCustomerUuid: string;\n private _scrollTop: number;\n private _shadeGuideUuid: string;\n\n public getCategoryOrSubcategory(): string {\n return this._categoryUuid;\n }\n\n public getFamilyOrSubfamily(): string {\n return this._familyUuid;\n }\n\n public getFormDocumentSelection(): FormDocumentSelectionModel {\n return this._formDocumentSelection;\n }\n\n public getLaboratoryRole(): string {\n return this._laboratoryRoleUuid;\n }\n\n public getPaymentCustomer(): string {\n return this._paymentCustomerUuid;\n }\n\n public getProductionFlowCustomer(): string {\n return this._productionFlowCustomerUuid;\n }\n\n public getScrollTop(): number {\n return this._scrollTop;\n }\n\n public getShadeGuide(): string {\n return this._shadeGuideUuid;\n }\n\n public setCategoryOrSubcategory(categoryUuid: string): void {\n this._categoryUuid = categoryUuid;\n }\n\n public setFamilyOrSubfamily(familyUuid: string): void {\n this._familyUuid = familyUuid;\n }\n\n public setFormDocumentSelection(formDocumentSelection: FormDocumentSelectionModel): void {\n this._formDocumentSelection = formDocumentSelection;\n }\n\n public setLaboratoryRole(laboratoryRoleUuid: string): void {\n this._laboratoryRoleUuid = laboratoryRoleUuid;\n }\n\n public setPaymentCustomer(customerUuid: string): void {\n this._paymentCustomerUuid = customerUuid;\n }\n\n public setProductionFlowCustomer(customerUuid: string): void {\n this._productionFlowCustomerUuid = customerUuid;\n }\n\n public setScrollTop(scrollTop: number): void {\n this._scrollTop = scrollTop;\n }\n\n public setShadeGuide(shadeGuideUuid: string): void {\n this._shadeGuideUuid = shadeGuideUuid;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { RouterModule } from '@angular/router';\nimport { ProgressBarComponent } from './progress-bar/progress-bar.component';\n\n@NgModule({\n declarations: [ProgressBarComponent],\n imports: [CommonModule, RouterModule, MatButtonModule, MatIconModule, MatProgressBarModule],\n exports: [ProgressBarComponent],\n})\nexport class ProgressBarModule {}\n","import { Injectable } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProgressBarService {\n private _bufferValue = new BehaviorSubject(0);\n private _coutner = 0;\n private _mode = new BehaviorSubject('indeterminate');\n private _value = new BehaviorSubject(0);\n private _visible = new BehaviorSubject(false);\n\n public constructor(private _router: Router) {\n // Initialize the service\n this._init();\n }\n\n public get bufferValue(): Observable {\n return this._bufferValue.asObservable();\n }\n\n public get mode(): Observable {\n return this._mode.asObservable();\n }\n\n public get value(): Observable {\n return this._value.asObservable();\n }\n\n public get visible(): Observable {\n return this._visible.asObservable();\n }\n\n /**\n * Hide the progress bar\n */\n public hide(): void {\n this._coutner -= 1;\n if (this._coutner === 0) {\n this._visible.next(false);\n }\n\n if (this._coutner < 0) {\n this._coutner = 0;\n console.warn('ProgressBarService: hide has been called with no corresponding show call.');\n this._visible.next(false);\n }\n }\n\n public setBufferValue(value: number): void {\n this._bufferValue.next(value);\n }\n\n public setMode(value: 'determinate' | 'indeterminate' | 'buffer' | 'query'): void {\n this._mode.next(value);\n }\n\n public setValue(value: number): void {\n this._value.next(value);\n }\n\n /**\n * Show the progress bar\n */\n public show(): void {\n this._coutner += 1;\n if (this._coutner === 1) {\n this._visible.next(true);\n }\n }\n\n private _init(): void {\n // Subscribe to the router events to show/hide the loading bar\n this._router.events.pipe(filter((event) => event instanceof NavigationStart)).subscribe(() => {\n this.show();\n });\n\n this._router.events\n .pipe(filter((event) => event instanceof NavigationEnd || event instanceof NavigationError || event instanceof NavigationCancel))\n .subscribe(() => {\n this.hide();\n });\n }\n}\n","import { ViewModelBase } from '../prothesis-base-api-view-models/view-model-base';\n\nexport class AccountStateViewModel extends ViewModelBase {\n public accountState: number;\n}\n","import { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { CustomHttpParamEncoder } from 'app/core/customHttpParamEncoder';\nimport { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { CustomerFilter } from 'app/shared/prothesis-api-filters/customer-filter';\nimport { ProFormaFilter } from 'app/shared/prothesis-api-filters/pro-forma-filter';\nimport { UserCustomerFilter } from 'app/shared/prothesis-api-filters/user-customer-filter';\nimport { AutoCompleteResultProjection } from 'app/shared/prothesis-api-projections/auto-complete-result.projection';\nimport { AccountStateViewModel } from 'app/shared/prothesis-api-view-models/account-state.view-model';\nimport { EditCustomerViewModel } from 'app/shared/prothesis-api-view-models/edit-customer.view-model';\nimport { IndexCustomerViewModel } from 'app/shared/prothesis-api-view-models/index-customer.view-model';\nimport { InfoCustomerRateViewModel } from 'app/shared/prothesis-api-view-models/info-customer-rate-view-model';\nimport { OutInitUpdateCustomerTaxCollectionViewModel } from 'app/shared/prothesis-api-view-models/out-init-update-customer-tax-collection-view-model';\nimport { PickerCustomerViewModel } from 'app/shared/prothesis-api-view-models/picker-customer.view-model';\nimport { ReadCustomerViewModel } from 'app/shared/prothesis-api-view-models/read-customer.view-model';\nimport { SearchCustomerViewModel } from 'app/shared/prothesis-api-view-models/search-customer.view-model';\nimport { UpdateCustomerTaxCollectionViewModel } from 'app/shared/prothesis-api-view-models/update-customer-tax-collection-view-model';\nimport { UuidCollectionInCascadeFlagViewModel } from 'app/shared/prothesis-api-view-models/uuid-collection-in-cascade-flag.view-model';\nimport { UuidCollectionUpdatedNotUpdatedViewModel } from 'app/shared/prothesis-api-view-models/uuid-collection-updated-not-updated.view-model';\nimport { UuidViewModel } from 'app/shared/prothesis-base-api-view-models/uuid.view-model';\nimport { Observable } from 'rxjs';\nimport { ConfigurationService } from '../configuration.service';\nimport { DialogBoxService } from '../dialog-box/dialog-box.service';\nimport { NotifyService } from '../notify/notify.service';\nimport { WorkingCustomerService } from '../prothesis-customer-api/working-customer.service';\nimport { TenantCrudServiceBase } from '../tenant-crud-service-base';\nimport { ProFormaService } from './pro-forma.service';\nimport { RateService } from './rate.service';\nimport { UserCustomerService } from './user-customer.service';\nimport { WorkingLaboratoryService } from './working-laboratory.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomerService extends TenantCrudServiceBase {\n public constructor(\n protected _configurationService: ConfigurationService,\n private _dialogBoxService: DialogBoxService,\n protected _httpClient: HttpClient,\n private _notifyService: NotifyService,\n private _proFormaService: ProFormaService,\n private _rateService: RateService,\n private _userCustomerService: UserCustomerService,\n protected _workingLaboratoryService: WorkingLaboratoryService,\n protected _workingCustomerService: WorkingCustomerService\n ) {\n super(_httpClient, '/Customer/', _configurationService.ProthesisApiAddress, _workingLaboratoryService);\n }\n\n public addCustomer(readCustomerViewModel: ReadCustomerViewModel): Observable {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n\n return new Observable((observer) => {\n this.addQuiet(readCustomerViewModel).subscribe(\n () => {\n if (this._workingCustomerService.exploringFlag) {\n this._workingCustomerService.stopExploring();\n }\n this._notifyService.pushInformationMessages(`Client ${readCustomerViewModel.name} correctement ajouté.`);\n observer.next(true);\n observer.complete();\n },\n (error) => {\n if (error instanceof HttpErrorResponse) {\n if (error.status === 400) {\n if (this._notifyService.hasErrorName(error as HttpErrorResponse, 'Customer.InCascade')) {\n this.addCustomerWithForeignGroupMembers(readCustomerViewModel).subscribe(\n (res) => {\n observer.next(res);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n } else {\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n if (errorMessageFromApi.length !== 0) {\n this._notifyService.displayErrorMessagesNow(errorMessageFromApi);\n }\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(false);\n observer.complete();\n }\n }\n );\n });\n }\n\n public addCustomerWithForeignGroupMembers(readCustomerViewModel: ReadCustomerViewModel): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Certains clients appartiennent déjà à un groupe de facturation. Changer ces clients de groupe ?`,\n onAccept: () => {\n readCustomerViewModel.inCascadeFlag = true;\n this.addQuiet(readCustomerViewModel).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Client ${readCustomerViewModel.name} correctement ajouté.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n\n public assignRateToCustomerCollection(rates: ComboModel[], defaultRate: ComboModel, customerUuids: string[]): Observable {\n return new Observable((observer) => {\n const filter = new CustomerFilter();\n filter.uuids = customerUuids;\n filter.customerMemberFlag = true;\n this.any(filter).subscribe(\n (anyCustomerMemberFlag: boolean) => {\n this._dialogBoxService.promptForActionWithCombo({\n acceptLabel: 'Valider',\n cdkFocusInitialOnCancelButtonFlag: true,\n comboPlaceHolder: 'Tarif Client',\n declineLabel: 'Annuler',\n messageLine1:\n customerUuids.length > 1 ? `Affecter un tarif aux clients sélectionnés` : `Affecter un tarif au client sélectionné`,\n onAcceptWithCombo: (result: ComboModel) => {\n this._rateService.updateRateCustomerCollection(result.key, customerUuids).subscribe(\n (resultUuidCollection) => {\n this._notifyService.pushInformationMessages(\n resultUuidCollection.uuids.length > 1\n ? `Tarif ${result.label} correctement affecté aux ${resultUuidCollection.uuids.length} clients.`\n : `Tarif ${result.label} correctement affecté au client.`\n );\n if (anyCustomerMemberFlag) {\n this._notifyService.pushWarningMessages(\n 'Les tarifs ne sont pas directement affectés aux membres de groupe, car ils sont soumis au tarif de leur groupe.',\n null,\n null,\n false,\n false\n );\n }\n\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n options: rates,\n selectedValue: defaultRate,\n });\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public autoComplete(filter: CustomerFilter, input: string, maxResult = 10): Observable {\n if (input === null || input.trim().length === 0) {\n return new Observable();\n }\n\n if (!filter) {\n filter = new CustomerFilter();\n }\n\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('input', input)\n .set('maxResult', maxResult.toString());\n\n return this._httpClient.get(`${this._actionUrl}AutoComplete`, { params: params });\n }\n\n public calculateAccountState(uuid: string, initialAccountState: number): Observable {\n const accountStateViewModel = new AccountStateViewModel();\n accountStateViewModel.accountState = initialAccountState;\n\n return this._httpClient.post(\n `${this._actionUrl}${uuid}/CalculateAccountState`,\n JSON.stringify(accountStateViewModel)\n );\n }\n\n public calculateInitialAccountState(uuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}${uuid}/CalculateInitialAccountState`);\n }\n\n public delete(customerUuid: string, customerName: string, groupFlag: boolean): Observable {\n return new Observable((observer) => {\n let messageLine1: string;\n let messageLine2: string;\n if (groupFlag) {\n // GroupCustomer\n messageLine1 = `Supprimer définitivement le groupe ${customerName} ainsi que ses membres ?`;\n messageLine2 = `Groupe ${customerName} ainsi que ses membres définitivement supprimés.`;\n } else {\n // Classic customer & CustomerMember\n messageLine1 = `Supprimer définitivement le client ${customerName} ?`;\n messageLine2 = `Client ${customerName} définitivement supprimé.`;\n }\n\n const filter = new UserCustomerFilter();\n filter.customerUuids = customerUuid ? [customerUuid] : null;\n filter.customerMemberIncludedFlag = true;\n this._userCustomerService.any(filter).subscribe(\n (resultFlag) => {\n let subMessageLine1: string;\n if (resultFlag) {\n subMessageLine1 = 'Les espaces clients associés seront également supprimés. Toute connexion sera alors impossible.';\n }\n\n this._dialogBoxService.promptForAction({\n messageLine1: messageLine1,\n onAccept: () => {\n this._delete(customerUuid).subscribe(\n () => {\n this._notifyService.pushInformationMessages(messageLine2);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n acceptLabel: 'Oui',\n declineLabel: 'Non',\n subMessageLine1: subMessageLine1,\n });\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public deleteCollection(customerUuids: string[], groupFlag: boolean): Observable {\n return new Observable((observer) => {\n let subMessageLine1: string;\n if (groupFlag) {\n // GroupCustomer\n subMessageLine1 = 'Les membres des groupes sélectionnés seront également supprimés.';\n }\n const filter = new UserCustomerFilter();\n filter.customerUuids = customerUuids;\n filter.customerMemberIncludedFlag = true;\n this._userCustomerService.any(filter).subscribe(\n (resultFlag) => {\n let subMessageLine2: string;\n if (resultFlag) {\n subMessageLine2 = 'Les espaces clients associés seront également supprimés. Toute connexion sera alors impossible.';\n }\n\n this._dialogBoxService.promptForAction({\n messageLine1: `Supprimer définitivement ${customerUuids.length} clients sélectionnés ?`,\n onAccept: () => {\n this._deleteCollection(customerUuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(\n `${customerUuids.length} clients ainsi que leurs membres définitivement supprimés.`\n );\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n subMessageLine1: subMessageLine1,\n subMessageLine2: subMessageLine2,\n });\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public disable(customerUuid: string, customerName: string, cancelAction: () => void): Observable {\n return new Observable((observer) => {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n\n this._disableCollection([customerUuid], false).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Client ${customerName} correctement désactivé.`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n (error) => {\n if (error instanceof HttpErrorResponse) {\n if (error.status === 400) {\n this.disableCustomerGroupOnCascade(customerUuid, customerName).subscribe(\n (resultFlag) => {\n observer.next(resultFlag);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n } else {\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(false);\n observer.complete();\n }\n }\n );\n });\n }\n\n public disableCollection(customerUuids: string[], cancelAction: () => void): Observable {\n return new Observable((observer) => {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n\n this._disableCollection(customerUuids, false).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`${customerUuids.length} clients correctement désactivés.`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n (error) => {\n if (error instanceof HttpErrorResponse) {\n if (error.status === 400) {\n this.disableCollectionOnCascade(customerUuids).subscribe(\n (resultFlag) => {\n observer.next(resultFlag);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n } else {\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(false);\n observer.complete();\n }\n }\n );\n });\n }\n\n public disableCollectionOnCascade(customerUuids: string[]): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Désactiver ${customerUuids.length} clients ?`,\n onAccept: () => {\n this._disableCollection(customerUuids, true).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`${customerUuids.length} clients ainsi que leurs membres désactivés.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n subMessageLine1: 'Les membres des groupes sélectionnés seront également désactivés.',\n });\n });\n }\n\n public disableCustomerGroupOnCascade(customerUuid: string, customerName: string): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Désactiver le groupe ${customerName} ainsi que ses membres ?`,\n onAccept: () => {\n this._disableCollection([customerUuid], true).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Groupe ${customerName} ainsi que ses membres correctement désactivés.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n\n public enable(customerUuid: string, customerName: string, customerGroupName: string, cancelAction: () => void): Observable {\n return new Observable((observer) => {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n\n this._enableCollection([customerUuid], false).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Client ${customerName} correctement activé.`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n (error) => {\n if (error instanceof HttpErrorResponse) {\n if (error.status === 400) {\n this.enableCustomerMemberOnCascade(customerUuid, customerName, customerGroupName).subscribe(\n (resultFlag) => {\n observer.next(resultFlag);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n } else {\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(false);\n observer.complete();\n }\n }\n );\n });\n }\n\n public enableCollection(customerUuids: string[], cancelAction: () => void): Observable {\n return new Observable((observer) => {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n\n this._enableCollection(customerUuids, false).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`${customerUuids.length} clients correctement activés.`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n (error) => {\n if (error instanceof HttpErrorResponse) {\n if (error.status === 400) {\n this.enableCollectionOnCascade(customerUuids).subscribe(\n (resultFlag) => {\n observer.next(resultFlag);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n } else {\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(false);\n observer.complete();\n }\n }\n );\n });\n }\n\n public enableCollectionOnCascade(customerUuids: string[]): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Activer ${customerUuids.length} clients ?`,\n onAccept: () => {\n this._enableCollection(customerUuids, true).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`${customerUuids.length} clients ainsi que leurs groupes correctement activés.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n subMessageLine1: 'Les groupes des membres sélectionnés seront également activés.',\n });\n });\n }\n\n public enableCustomerMemberOnCascade(customerUuid: string, customerName: string, customerGroupName: string): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Activer le membre ${customerName} ainsi que son groupe ${customerGroupName} ?`,\n onAccept: () => {\n this._enableCollection([customerUuid], true).subscribe(\n () => {\n this._notifyService.pushInformationMessages(\n `Membre ${customerName} ainsi que son groupe ${customerGroupName} correctement activés.`\n );\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n\n public getInfo(customerUuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}Customer/${customerUuid}/GetInfo`);\n }\n\n public initializeCreate(): Observable {\n return this._httpClient.get(`${this._actionUrl}InitializeCreate`);\n }\n\n public initializeEdit(uuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}${uuid}/InitializeEdit`);\n }\n\n public initializePicker(filter: CustomerFilter, sort: string, page: number, pageSize: number): Observable {\n if (!filter) {\n filter = new CustomerFilter();\n }\n\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}InitializePicker`, { params: params });\n }\n\n public initializeSearch(filter: CustomerFilter, sort: string, page: number, pageSize: number): Observable {\n if (filter) {\n if (!filter.disabledFlag) {\n filter.disabledFlag = false;\n }\n } else {\n filter = new CustomerFilter();\n }\n\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}InitializeSearch`, { params: params });\n }\n\n public initializeUpdateCustomerTaxCollection(): Observable {\n return this._httpClient.get(`${this._actionUrl}initializeUpdateCustomerTaxCollection`);\n }\n\n public sendEmailNotificationCollection(userCustomerUuids: string[]): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForActionWithInformation({\n messageLine1: \"Renvoyer l'e-mail de création de compte\",\n htmlMessage: `
\n
\n Cet e-mail, expédié par system@prothesis.cloud, invite les utilisateurs à créer leur mot de passe.\n
\n
\n Si vos clients possèdent un filtre de message anti-spam, il doivent autoriser les e-mails provenant de l'adresse\n system@prothesis.cloud pour recevoir les messages de la plateforme.\n
\n
\n Vous pouvez également faire découvrir le service à vos clients, en leur partageant cette\n courte vidéo explicative et/ou ce\n document PDF.\n
\n
`,\n onAccept: () => {\n if (!userCustomerUuids || userCustomerUuids.length === 0) {\n this._notifyService.pushWarningMessages(\n `Aucun utilisateur en attente de création trouvé dans les espaces clients sélectionnés.`\n );\n observer.next(true);\n observer.complete();\n } else if (userCustomerUuids.length > 200) {\n this._notifyService.pushErrorMessages(\n `Votre sélection comporte trop d'utilisateurs en attente. Aucun mail n'a été envoyé. Veuillez sélectionner moins de clients.`\n );\n observer.next(true);\n observer.complete();\n } else {\n this._userCustomerService.sendConfirmationEmailCollection(userCustomerUuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(\n `E-mail envoyé à ${userCustomerUuids.length} utilisateurs en attente de création de compte.`\n );\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n }\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n subMessageLine1:\n \"L'e-mail de création de compte va être renvoyé à tous les utilisateurs en attente de création dans les espaces clients sélectionnés.\",\n });\n });\n }\n\n public updateCustomer(readCustomerViewModel: ReadCustomerViewModel): Observable {\n return new Observable((observer) => {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n\n this.updateQuiet(readCustomerViewModel.uuid, readCustomerViewModel).subscribe(\n () => {\n if (this._workingCustomerService.exploringFlag) {\n this._workingCustomerService.stopExploring();\n }\n observer.next(true);\n observer.complete();\n },\n (error) => {\n if (error instanceof HttpErrorResponse) {\n if (error.status === 400) {\n if (this._notifyService.hasErrorName(error as HttpErrorResponse, 'Customer.InCascade')) {\n this._updateCustomerWithForeignGroupMembers(readCustomerViewModel).subscribe(\n (res) => {\n observer.next(res);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n } else {\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n if (errorMessageFromApi.length !== 0) {\n this._notifyService.displayErrorMessagesNow(errorMessageFromApi);\n }\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(false);\n observer.complete();\n }\n }\n );\n });\n }\n\n public updateCustomerAndCheckProForma(\n readCustomerViewModel: ReadCustomerViewModel,\n addedMemberFlag: boolean,\n deletedMemberFlag: boolean\n ): Observable {\n return new Observable((observer) => {\n const filter = new ProFormaFilter();\n filter.customerUuids = [readCustomerViewModel.uuid].concat(readCustomerViewModel.customerMembers.map((x) => x.uuid));\n filter.customerMemberUuidsIncludedFlag = true;\n\n this._proFormaService.any(filter).subscribe(\n (hasProFormaFlag) => {\n if (!hasProFormaFlag) {\n this.updateCustomer(readCustomerViewModel).subscribe(\n (resultFlag) => {\n observer.next(resultFlag);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n } else {\n const messages = this._buildMessageLineForUpdateCustomerWithProForma(readCustomerViewModel, addedMemberFlag, deletedMemberFlag);\n\n this._dialogBoxService.promptForAction({\n messageLine1: messages.messageLine1,\n onAccept: () => {\n this.updateCustomer(readCustomerViewModel).subscribe(\n (resultFlag) => {\n observer.next(resultFlag);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n messageLine2: messages.messageLine2,\n acceptLabel: 'Continuer',\n declineLabel: 'Annuler',\n });\n }\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public updateCustomerTaxCollection(updateCustomerTaxCollectionViewModel: UpdateCustomerTaxCollectionViewModel): Observable {\n return new Observable((observer) => {\n const filter = new CustomerFilter();\n filter.uuids = updateCustomerTaxCollectionViewModel.uuids.map((x) => x.uuid);\n filter.customerMemberFlag = true;\n this.any(filter).subscribe(\n (anyCustomerMemberFlag: boolean) => {\n this._httpClient\n .post(\n `${this._actionUrl}UpdateCustomerTaxCollection`,\n JSON.stringify(updateCustomerTaxCollectionViewModel)\n )\n .subscribe(\n (resultUuidCollectionUpdatedNotUpdatedViewModel: UuidCollectionUpdatedNotUpdatedViewModel) => {\n const total =\n resultUuidCollectionUpdatedNotUpdatedViewModel.updatedUuids.length +\n resultUuidCollectionUpdatedNotUpdatedViewModel.notUpdatedUuids.length;\n if (total > 0) {\n this._notifyService.pushInformationMessages(\n total > 1\n ? `Taxes applicables correctement modifiées sur ${total} clients.`\n : `Taxes applicables correctement modifiées sur ${total} client.`\n );\n if (anyCustomerMemberFlag) {\n this._notifyService.pushWarningMessages(\n `Les taxes applicables ne sont pas directement affectés aux membres de groupe, car ils sont soumis au taxes applicables de leur groupe.`,\n null,\n null,\n false,\n false\n );\n }\n }\n\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n private _buildMessageLineForUpdateCustomerWithProForma(\n readCustomerViewModel: ReadCustomerViewModel,\n addedMemberFlag: boolean,\n deletedMemberFlag: boolean\n ): { messageLine1: string; messageLine2: string } {\n let messageLine1 = `Les pro formas du `;\n let messageLine2 = `vont être mises à jour.`;\n if (addedMemberFlag) {\n if (deletedMemberFlag) {\n // Added and Deleted Members\n messageLine1 = `${messageLine1}groupe ${readCustomerViewModel.name}`;\n messageLine2 = `et des membres entrants et sortants ${messageLine2}`;\n } else {\n // Added Members\n messageLine1 = `${messageLine1}groupe ${readCustomerViewModel.name}`;\n messageLine2 = `et des membres entrants ${messageLine2}`;\n }\n } else {\n if (deletedMemberFlag) {\n // Deleted Members\n messageLine1 = `${messageLine1}groupe ${readCustomerViewModel.name}`;\n messageLine2 = `et des membres sortants ${messageLine2}`;\n } else {\n if (readCustomerViewModel.customerGroup) {\n // Members\n messageLine1 = `${messageLine1}groupe ${readCustomerViewModel.name}`;\n } else {\n if (readCustomerViewModel.customerMembers && readCustomerViewModel.customerMembers.length > 0) {\n // Group\n messageLine1 = `${messageLine1}groupe ${readCustomerViewModel.name}`;\n } else {\n // Classic customer\n messageLine1 = `${messageLine1}client ${readCustomerViewModel.name}`;\n }\n }\n }\n }\n return { messageLine1: messageLine1, messageLine2: messageLine2 };\n }\n\n private _disableCollection(uuids: string[], inCascadeFlag: boolean): Observable {\n const uuidViewModels: UuidViewModel[] = [];\n uuids.forEach((uuid) => {\n uuidViewModels.push({\n uuid: uuid,\n });\n });\n const uuidCollectionViewModel = new UuidCollectionInCascadeFlagViewModel();\n uuidCollectionViewModel.uuids = uuidViewModels;\n uuidCollectionViewModel.inCascadeFlag = inCascadeFlag;\n\n return this._httpClient.post(\n `${this._actionUrl}DisableCollection`,\n JSON.stringify(uuidCollectionViewModel)\n );\n }\n\n private _enableCollection(uuids: string[], inCascadeFlag: boolean): Observable {\n const uuidViewModels: UuidViewModel[] = [];\n uuids.forEach((uuid) => {\n uuidViewModels.push({\n uuid: uuid,\n });\n });\n const uuidCollectionViewModel = new UuidCollectionInCascadeFlagViewModel();\n uuidCollectionViewModel.uuids = uuidViewModels;\n uuidCollectionViewModel.inCascadeFlag = inCascadeFlag;\n\n return this._httpClient.post(\n `${this._actionUrl}EnableCollection`,\n JSON.stringify(uuidCollectionViewModel)\n );\n }\n\n private _updateCustomerWithForeignGroupMembers(readCustomerViewModel: ReadCustomerViewModel): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Certains clients appartiennent déjà à un groupe de facturation. Changer ces clients de groupe ?`,\n onAccept: () => {\n readCustomerViewModel.inCascadeFlag = true;\n this.updateQuiet(readCustomerViewModel.uuid, readCustomerViewModel).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Client ${readCustomerViewModel.name} correctement modifié.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n}\n","import { CustomerState } from 'app/pages/laboratory-area/customer/customer-state';\nimport { CreditState } from 'app/pages/laboratory-area/invoice/state/credit-state';\nimport { CustomerUserCustomerStatus } from 'app/shared/enums/customer-user-customer-status.enum';\nimport { CreditFilter } from 'app/shared/prothesis-api-filters/credit-filter';\nimport { CustomerFilter } from 'app/shared/prothesis-api-filters/customer-filter';\n\nexport class BuildUrlHelper {\n public static buildCreditFromInvoiceNumberListUrl(invoiceNumber: string): string {\n const creditPstate = new CreditState();\n creditPstate.pageIndex = 0;\n creditPstate.sortActive = 'number';\n creditPstate.sortDirection = 'desc';\n creditPstate.creditFilter = new CreditFilter();\n creditPstate.creditFilter.invoiceNumber = invoiceNumber;\n return `/invoice/credit?pstate=${encodeURIComponent(JSON.stringify(creditPstate))}`;\n }\n\n public static buildCustomerUserCustomerListUrl(customerUuid: string): string {\n return `/customer/${customerUuid}/user-customer`;\n }\n\n public static buildCustomerWithoutActiveUserCustomerListUrl(): string {\n const customerPstate = new CustomerState();\n customerPstate.pageIndex = 0;\n customerPstate.sortActive = 'waitingUserCustomerCount';\n customerPstate.sortDirection = 'desc';\n\n customerPstate.customerFilter = new CustomerFilter();\n customerPstate.customerFilter.customerUserCustomerStatus = CustomerUserCustomerStatus.WithoutActiveUserCustomer;\n return `/customer?pstate=${encodeURIComponent(JSON.stringify(customerPstate))}`;\n }\n}\n","export class LaboratoryHttpHeaderModel {\n public lastNonFreeSubscriptionProductType: string;\n public lastSubscriptionEndDate: string;\n public storageCapacityLimit: number;\n public storageUsage: number;\n public subscriptionEndDate: string;\n public suspendedFlag: boolean;\n\n public constructor(\n /**\n * The subscription end date of the current subscription.\n * We define \"current subscription\" as the subscription that is not disabled and with StartDate <= utcNow < EndDate.\n * If there is no current subscription, CurrentSubscriptionEndDate is null.\n */\n subscriptionEndDate: string,\n\n /**\n * The last non disabled subscription end date.\n * Please note that a laboratory could have no current subscription end date but a last subscription end date.\n */\n lastSubscriptionEndDate: string,\n\n /**\n * The product type of the last non free and not disabled subscription.\n */\n lastNonFreeSubscriptionProductType: string,\n storageCapacityLimit: number,\n storageUsage: number,\n suspendedFlag: boolean\n ) {\n this.lastNonFreeSubscriptionProductType = lastNonFreeSubscriptionProductType;\n this.lastSubscriptionEndDate = lastSubscriptionEndDate;\n this.storageCapacityLimit = storageCapacityLimit;\n this.storageUsage = storageUsage;\n this.subscriptionEndDate = subscriptionEndDate;\n this.suspendedFlag = suspendedFlag;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ConvertHelper } from 'app/shared/helpers/convert-helper';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { LaboratoryHttpHeaderModel } from './laboratory-http-header-model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LaboratoryHttpHeaderService {\n private _laboratoryHttpHeader: LaboratoryHttpHeaderModel;\n private _onHttpHeaderChanged: BehaviorSubject;\n private _previousLastNonFreeSubscriptionProductType: string;\n private _previousLastSubscriptionEndDate: string;\n private _previousStorageCapacityLimit: number;\n private _previousStorageUsage: number;\n private _previousSubscriptionEndDate: string;\n private _previousSuspendedFlag: boolean;\n\n public constructor() {\n this._onHttpHeaderChanged = new BehaviorSubject(null);\n }\n\n public get onHttpHeaderChanged(): Observable {\n return this._onHttpHeaderChanged.asObservable();\n }\n\n public getHttpHeader(): LaboratoryHttpHeaderModel {\n return this._laboratoryHttpHeader;\n }\n\n public setHttpHeaderInfo(\n subscriptionEndDate: string,\n lastSubscriptionEndDate: string,\n lastNonFreeSubscriptionProductType: string,\n storageCapacityLimit: string,\n storageUsage: string,\n suspendedFlag: string\n ): void {\n const storageCapacityLimitNumber = ConvertHelper.toNumber(storageCapacityLimit);\n const storageUsageNumber = ConvertHelper.toNumber(storageUsage);\n const suspendedFlagBoolean = ConvertHelper.toBoolean(suspendedFlag);\n const hasChangedFlag =\n this._previousSubscriptionEndDate !== subscriptionEndDate ||\n this._previousLastSubscriptionEndDate !== lastSubscriptionEndDate ||\n this._previousLastNonFreeSubscriptionProductType !== lastNonFreeSubscriptionProductType ||\n this._previousStorageCapacityLimit !== storageCapacityLimitNumber ||\n this._previousStorageUsage !== storageUsageNumber ||\n this._previousSuspendedFlag !== suspendedFlagBoolean;\n\n if (!this._laboratoryHttpHeader || hasChangedFlag) {\n this._laboratoryHttpHeader = new LaboratoryHttpHeaderModel(\n subscriptionEndDate,\n lastSubscriptionEndDate,\n lastNonFreeSubscriptionProductType,\n storageCapacityLimitNumber,\n storageUsageNumber,\n suspendedFlagBoolean\n );\n\n this._previousSubscriptionEndDate = subscriptionEndDate;\n this._previousLastSubscriptionEndDate = lastSubscriptionEndDate;\n this._previousLastNonFreeSubscriptionProductType = lastNonFreeSubscriptionProductType;\n this._previousStorageCapacityLimit = storageCapacityLimitNumber;\n this._previousStorageUsage = storageUsageNumber;\n this._previousSuspendedFlag = suspendedFlagBoolean;\n\n this._onHttpHeaderChanged.next(this._laboratoryHttpHeader);\n }\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { CustomHttpParamEncoder } from 'app/core/customHttpParamEncoder';\nimport { ViewModelHelper } from 'app/shared/helpers/view-model-helper';\nimport { LaboratoryResourceFilter } from 'app/shared/prothesis-api-filters/laboratory-resource-filter';\nimport { AutoCompleteResultProjection } from 'app/shared/prothesis-api-projections/auto-complete-result.projection';\nimport { EditLaboratoryResourceViewModel } from 'app/shared/prothesis-api-view-models/edit-laboratory-resource.view-model';\nimport { IndexLaboratoryResourceViewModel } from 'app/shared/prothesis-api-view-models/index-laboratory-resource.view-model';\nimport { PickerLaboratoryResourceViewModel } from 'app/shared/prothesis-api-view-models/picker-laboratory-resource.view-model';\nimport { ReadLaboratoryResourceViewModel } from 'app/shared/prothesis-api-view-models/read-laboratory-resource.view-model';\nimport { SearchLaboratoryResourceViewModel } from 'app/shared/prothesis-api-view-models/search-laboratory-resource.view-model';\nimport { UuidCollectionViewModel } from 'app/shared/prothesis-base-api-view-models/uuid-collection.view-model';\nimport { Observable } from 'rxjs';\nimport { ConfigurationService } from '../configuration.service';\nimport { DialogBoxService } from '../dialog-box/dialog-box.service';\nimport { NotifyService } from '../notify/notify.service';\nimport { TenantCrudServiceBase } from '../tenant-crud-service-base';\nimport { WorkingLaboratoryService } from './working-laboratory.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LaboratoryResourceService extends TenantCrudServiceBase<\n ReadLaboratoryResourceViewModel,\n IndexLaboratoryResourceViewModel,\n LaboratoryResourceFilter\n> {\n public constructor(\n protected _configurationService: ConfigurationService,\n private _dialogBoxService: DialogBoxService,\n protected _httpClient: HttpClient,\n private _notifyService: NotifyService,\n protected _workingLaboratoryService: WorkingLaboratoryService\n ) {\n super(_httpClient, '/LaboratoryResource/', _configurationService.ProthesisApiAddress, _workingLaboratoryService);\n }\n\n public autoComplete(filter: LaboratoryResourceFilter, input: string, maxResult = 10): Observable {\n if (input === null || input.trim().length === 0) {\n return new Observable();\n }\n\n if (filter) {\n if (!filter.disabledFlag) {\n filter.disabledFlag = false;\n }\n } else {\n filter = new LaboratoryResourceFilter();\n }\n\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('input', input)\n .set('maxResult', maxResult.toString());\n\n return this._httpClient.get(`${this._actionUrl}AutoComplete`, { params: params });\n }\n\n public delete(customerUuid: string, customerName: string): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Supprimer définitivement la ressource ${customerName} ?`,\n onAccept: () => {\n this._delete(customerUuid).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Ressource ${customerName} définitivement supprimée.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n\n public deleteCollection(customerUuids: string[]): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Supprimer définitivement ${customerUuids.length} ressources sélectionnées ?`,\n onAccept: () => {\n this._deleteCollection(customerUuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`${customerUuids.length} ressources définitivement supprimées.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n\n public disable(laboratoryResourceUuid: string, laboratoryResourceName: string, cancelAction: () => void): Observable {\n return new Observable((observer) => {\n this._disableCollection([laboratoryResourceUuid]).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Ressource ${laboratoryResourceName} correctement désactivée.`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public disableCollection(laboratoryResourceUuids: string[], cancelAction: () => void): Observable {\n return new Observable((observer) => {\n this._disableCollection(laboratoryResourceUuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(\n `${laboratoryResourceUuids.length} ressource(s) correctement désactivée(s).`,\n cancelAction\n );\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public enable(laboratoryResourceUuid: string, laboratoryResourceName: string, cancelAction: () => void): Observable {\n return new Observable((observer) => {\n this._enableCollection([laboratoryResourceUuid]).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Ressource ${laboratoryResourceName} correctement activée.`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public enableCollection(laboratoryResourceUuids: string[], cancelAction: () => void): Observable {\n return new Observable((observer) => {\n this._enableCollection(laboratoryResourceUuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(\n `${laboratoryResourceUuids.length} ressource(s) correctement activée(s).`,\n cancelAction\n );\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public initializeCreate(): Observable {\n return this._httpClient.get(`${this._actionUrl}InitializeCreate`);\n }\n\n public initializeEdit(uuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}${uuid}/InitializeEdit`);\n }\n\n public initializePicker(\n filter: LaboratoryResourceFilter,\n sort: string,\n page: number,\n pageSize: number\n ): Observable {\n if (filter) {\n if (!filter.disabledFlag) {\n filter.disabledFlag = false;\n }\n } else {\n filter = new LaboratoryResourceFilter();\n }\n\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}InitializePicker`, { params: params });\n }\n\n public initializeSearch(\n filter: LaboratoryResourceFilter,\n sort: string,\n page: number,\n pageSize: number\n ): Observable {\n if (filter) {\n if (!filter.disabledFlag) {\n filter.disabledFlag = false;\n }\n } else {\n filter = new LaboratoryResourceFilter();\n }\n\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}InitializeSearch`, { params: params });\n }\n\n private _disableCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(`${this._actionUrl}DisableCollection`, JSON.stringify(uuidCollectionViewModel));\n }\n\n private _enableCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(`${this._actionUrl}EnableCollection`, JSON.stringify(uuidCollectionViewModel));\n }\n}\n","export enum NotificationAlertType {\n Discreet = 0,\n Popup = 1,\n}\n","import { NotificationAlertType } from '../enums/notification-alert-type.enum';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class NotificationFilter extends TenantFilter {\n public notificationAlertType: NotificationAlertType;\n}\n","import { ViewModelBase } from './view-model-base';\n\nexport class ListViewModel extends ViewModelBase {\n public values: T[];\n}\n","import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';\nimport { CustomHttpParamEncoder } from 'app/core/customHttpParamEncoder';\nimport { SidebarComponent } from 'app/layout/components/sidebar/sidebar.component';\nimport { PdfCreditTypeHelper } from 'app/shared/enum-helpers/pdf-credit-type-helper';\nimport { PdfDeliveryFormTypeHelper } from 'app/shared/enum-helpers/pdf-delivery-form-type-helper';\nimport { PdfFittingFormTypeHelper } from 'app/shared/enum-helpers/pdf-fitting-form-type-helper';\nimport { PdfInvoiceTypeHelper } from 'app/shared/enum-helpers/pdf-invoice-type-helper';\nimport { PdfProFormaTypeHelper } from 'app/shared/enum-helpers/pdf-pro-forma-type-helper';\nimport { PdfQuoteTypeHelper } from 'app/shared/enum-helpers/pdf-quote-type-helper';\nimport { PdfWorkFormTypeHelper } from 'app/shared/enum-helpers/pdf-work-form-type-helper';\nimport { Area } from 'app/shared/enums/area.enum';\nimport { NotificationAlertType } from 'app/shared/enums/notification-alert-type.enum';\nimport { NotificationStatus } from 'app/shared/enums/notification-status.enum';\nimport { PdfMergeType } from 'app/shared/enums/pdf-merge-type.enum';\nimport { NotificationFilter } from 'app/shared/prothesis-api-filters/notification-filter';\nimport { AddJournalNotificationViewModel } from 'app/shared/prothesis-api-view-models/add-journal-notification.view-model';\nimport { AddPdfMergeNotificationViewModel } from 'app/shared/prothesis-api-view-models/add-pdf-merge-notification.view-model';\nimport { AddSpreadsheetDashboardNotificationViewModel } from 'app/shared/prothesis-api-view-models/add-spreadsheet-dashboard-notification.view-model';\nimport { AddSpreadsheetExportNotificationViewModel } from 'app/shared/prothesis-api-view-models/add-spreadsheet-export-notification.view-model';\nimport { IndexNotificationViewModel } from 'app/shared/prothesis-api-view-models/index-notification.view-model';\nimport { ReadExportAllNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-export-all-notification.view-model';\nimport { ReadJournalNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-journal-notification-view-model';\nimport { ReadNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-notification.view-model';\nimport { ReadPdfMergeNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-pdf-merge-notification.view-model';\nimport { ReadSpreadsheetDashboardNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-spreadsheet-dashboard-notification.view-model';\nimport { ReadSpreadsheetExportNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-spreadsheet-export-notification.view-model';\nimport { SearchNotificationViewModel } from 'app/shared/prothesis-api-view-models/search-notification.view-model';\nimport { ListViewModel } from 'app/shared/prothesis-base-api-view-models/list-view-model';\nimport { BehaviorSubject, Observable, Subject, Subscription, timer } from 'rxjs';\nimport { distinctUntilChanged, filter, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { AuthService } from '../auth.service';\nimport { ConfigurationService } from '../configuration.service';\nimport { CrudServiceBase } from '../crud-service-base';\nimport { NotifyService } from '../notify/notify.service';\nimport { LaboratoryHttpHeaderModel } from './laboratory-http-header-model';\nimport { LaboratoryHttpHeaderService } from './laboratory-http-header.service';\nimport { WorkingLaboratoryService } from './working-laboratory.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService\n extends CrudServiceBase\n implements OnDestroy\n{\n public onNotificationRefreshed$: Observable;\n public onPopUpNotificationReceived$: Observable;\n public pullingSubsriber$: Observable = timer(2000, 2000);\n private _httpHeaderLoadedFlag = false;\n private _laboratorySuspendedFlag = false;\n private _onNotificationRefreshed$ = new BehaviorSubject(null);\n private _onPopUpNotificationReceived$ = new BehaviorSubject(null);\n private _unsubscribeAll: Subject;\n private subscription: Subscription;\n\n public constructor(\n private _authService: AuthService,\n protected _configurationService: ConfigurationService,\n private _fuseSidebarService: FuseSidebarService,\n protected _httpClient: HttpClient,\n private _laboratoryHttpHeaderService: LaboratoryHttpHeaderService,\n private _notifyService: NotifyService,\n protected _workingLaboratoryService: WorkingLaboratoryService\n ) {\n super(_httpClient, () => '/Notification/', _configurationService.ProthesisApiAddress);\n this._unsubscribeAll = new Subject();\n\n this._workingLaboratoryService.exploredUuid$\n .pipe(\n takeUntil(this._unsubscribeAll),\n distinctUntilChanged(),\n filter((laboratoryUuid) => laboratoryUuid !== null && laboratoryUuid !== undefined),\n switchMap(() => {\n this.stopPulling();\n this._httpHeaderLoadedFlag = false;\n\n return this._laboratoryHttpHeaderService.onHttpHeaderChanged.pipe(\n take(1),\n tap((httpHeader) => {\n this._httpHeaderLoadedFlag = true;\n this._laboratorySuspendedFlag = httpHeader?.suspendedFlag || false;\n })\n );\n })\n )\n .subscribe(() => {\n this.startPulling();\n });\n\n this._workingLaboratoryService.exploredUuid$\n .pipe(\n takeUntil(this._unsubscribeAll),\n distinctUntilChanged(),\n filter((laboratoryUuid) => !laboratoryUuid)\n )\n .subscribe(() => {\n this.stopPulling();\n this._httpHeaderLoadedFlag = false;\n });\n\n this._laboratoryHttpHeaderService.onHttpHeaderChanged\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe((laboratoryHttpHeader: LaboratoryHttpHeaderModel) => {\n if (laboratoryHttpHeader) {\n const wasNotLoaded = !this._httpHeaderLoadedFlag;\n this._httpHeaderLoadedFlag = true;\n this._laboratorySuspendedFlag = laboratoryHttpHeader.suspendedFlag || false;\n\n if (wasNotLoaded && !this._laboratorySuspendedFlag) {\n if (this._authService.area === Area.Laboratory) {\n this.startPulling();\n }\n }\n }\n });\n\n this.onNotificationRefreshed$ = this._onNotificationRefreshed$.asObservable();\n this.onPopUpNotificationReceived$ = this._onPopUpNotificationReceived$.asObservable();\n }\n\n protected get _actionUrl(): string {\n return `${this._configurationService.ProthesisApiAddress}/Laboratory/${this._workingLaboratoryService.tenantUuid}/Notification/`;\n }\n\n public static activeNotificationFlag(readNotificationViewmodel: ReadNotificationViewModel): boolean {\n if (\n readNotificationViewmodel.discriminator === 'ExportAll' &&\n !(readNotificationViewmodel as ReadExportAllNotificationViewModel).status\n ) {\n return true;\n } else if (\n readNotificationViewmodel.discriminator === 'Journal' &&\n !(readNotificationViewmodel as ReadJournalNotificationViewModel).status\n ) {\n return true;\n } else if (\n readNotificationViewmodel.discriminator === 'PdfMerge' &&\n !(readNotificationViewmodel as ReadPdfMergeNotificationViewModel).status\n ) {\n return true;\n } else if (\n readNotificationViewmodel.discriminator === 'SpreadsheetExport' &&\n !(readNotificationViewmodel as ReadSpreadsheetExportNotificationViewModel).status\n ) {\n return true;\n } else if (\n readNotificationViewmodel.discriminator === 'SpreadsheetDashboard' &&\n !(readNotificationViewmodel as ReadSpreadsheetDashboardNotificationViewModel).status\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n public static buildPdfMergeNotifyMessage(addPdfMergeNotificationViewModel: AddPdfMergeNotificationViewModel): string {\n let notifyMessage = 'PDF multiple en cours de génération';\n const counter = addPdfMergeNotificationViewModel.uuids.length;\n const pdfDocumentType = addPdfMergeNotificationViewModel.pdfDocumentType;\n\n if (addPdfMergeNotificationViewModel.pdfMergeType === PdfMergeType.deliveryForm) {\n notifyMessage = PdfDeliveryFormTypeHelper.buildPdfMergeNotifyMessage(counter, pdfDocumentType);\n } else if (addPdfMergeNotificationViewModel.pdfMergeType === PdfMergeType.credit) {\n notifyMessage = PdfCreditTypeHelper.buildPdfMergeNotifyMessage(counter, pdfDocumentType);\n } else if (addPdfMergeNotificationViewModel.pdfMergeType === PdfMergeType.fittingForm) {\n notifyMessage = PdfFittingFormTypeHelper.buildPdfMergeNotifyMessage(counter, pdfDocumentType);\n } else if (addPdfMergeNotificationViewModel.pdfMergeType === PdfMergeType.invoice) {\n notifyMessage = PdfInvoiceTypeHelper.buildPdfMergeNotifyMessage(counter, pdfDocumentType);\n } else if (addPdfMergeNotificationViewModel.pdfMergeType === PdfMergeType.proForma) {\n notifyMessage = PdfProFormaTypeHelper.buildPdfMergeNotifyMessage(counter, pdfDocumentType);\n } else if (addPdfMergeNotificationViewModel.pdfMergeType === PdfMergeType.quote) {\n notifyMessage = PdfQuoteTypeHelper.buildPdfMergeNotifyMessage(counter, pdfDocumentType);\n } else if (addPdfMergeNotificationViewModel.pdfMergeType === PdfMergeType.workForm) {\n notifyMessage = PdfWorkFormTypeHelper.buildPdfMergeNotifyMessage(counter, pdfDocumentType);\n }\n\n return notifyMessage;\n }\n\n public static finishedNotificationFlag(readNotificationViewmodel: ReadNotificationViewModel): boolean {\n if (\n readNotificationViewmodel.discriminator === 'ExportAll' &&\n ((readNotificationViewmodel as ReadExportAllNotificationViewModel).status === NotificationStatus.Succeed ||\n (readNotificationViewmodel as ReadExportAllNotificationViewModel).status === NotificationStatus.Failed)\n ) {\n return true;\n } else if (\n readNotificationViewmodel.discriminator === 'Journal' &&\n ((readNotificationViewmodel as ReadJournalNotificationViewModel).status === NotificationStatus.Succeed ||\n (readNotificationViewmodel as ReadJournalNotificationViewModel).status === NotificationStatus.Failed)\n ) {\n return true;\n } else if (\n readNotificationViewmodel.discriminator === 'PdfMerge' &&\n ((readNotificationViewmodel as ReadPdfMergeNotificationViewModel).status === NotificationStatus.Succeed ||\n (readNotificationViewmodel as ReadPdfMergeNotificationViewModel).status === NotificationStatus.Failed)\n ) {\n return true;\n } else if (\n readNotificationViewmodel.discriminator === 'SpreadsheetExport' &&\n ((readNotificationViewmodel as ReadSpreadsheetExportNotificationViewModel).status === NotificationStatus.Succeed ||\n (readNotificationViewmodel as ReadSpreadsheetExportNotificationViewModel).status === NotificationStatus.Failed)\n ) {\n return true;\n } else if (\n readNotificationViewmodel.discriminator === 'SpreadsheetDashboard' &&\n ((readNotificationViewmodel as ReadSpreadsheetDashboardNotificationViewModel).status === NotificationStatus.Succeed ||\n (readNotificationViewmodel as ReadSpreadsheetDashboardNotificationViewModel).status === NotificationStatus.Failed)\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n public static unreadNotificationFlag(readNotificationViewmodel: ReadNotificationViewModel): boolean {\n if (!readNotificationViewmodel.readDate || readNotificationViewmodel.readDate < readNotificationViewmodel.notificationDate) {\n return true;\n } else {\n return false;\n }\n }\n\n public delete(uuid: string): Observable {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n\n return new Observable((observer) => {\n this._delete(uuid).subscribe(\n () => {\n this._lookForNotificiation();\n observer.next();\n observer.complete();\n },\n () => {\n observer.next();\n observer.complete();\n }\n );\n });\n }\n\n public deleteCollection(notificationUuids: string[]): Observable {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n\n return new Observable((observer) => {\n this._deleteCollection(notificationUuids).subscribe(\n () => {\n this._lookForNotificiation();\n observer.next();\n observer.complete();\n },\n () => {\n observer.next();\n observer.complete();\n }\n );\n });\n }\n\n public generateExportAll(): Observable {\n return new Observable((observer) => {\n this._httpClient.post(`${this._actionUrl}GenerateExportAll`, '').subscribe(\n () => {\n this.startPulling();\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public generateJournal(addJournalNotificationViewModel: AddJournalNotificationViewModel): Observable {\n return new Observable((observer) => {\n this._httpClient.post(`${this._actionUrl}GenerateJournal`, addJournalNotificationViewModel).subscribe(\n () => {\n this.startPulling();\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public generatePdfMerge(addPdfMergeNotificationViewModel: AddPdfMergeNotificationViewModel): Observable {\n return new Observable((observer) => {\n this._httpClient\n .post(`${this._actionUrl}GeneratePdfMerge`, addPdfMergeNotificationViewModel)\n .subscribe(\n () => {\n const notifyMessage = NotificationService.buildPdfMergeNotifyMessage(addPdfMergeNotificationViewModel);\n this._notifyService.doNotDismissOnNextApiCall();\n this._notifyService.displayInformationMessagesNow(notifyMessage);\n this.startPulling();\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public generateSpreadsheetDashboard(\n addSpreadsheetDashboardNotificationViewModel: AddSpreadsheetDashboardNotificationViewModel\n ): Observable {\n return new Observable((observer) => {\n this._httpClient\n .post(\n `${this._actionUrl}GenerateSpreadsheetDashboard`,\n addSpreadsheetDashboardNotificationViewModel\n )\n .subscribe(\n () => {\n this.startPulling();\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public generateSpreadsheetExport(\n addSpreadsheetExportNotificationViewModel: AddSpreadsheetExportNotificationViewModel\n ): Observable {\n return new Observable((observer) => {\n this._httpClient\n .post(\n `${this._actionUrl}GenerateSpreadsheetExport`,\n addSpreadsheetExportNotificationViewModel\n )\n .subscribe(\n () => {\n this.startPulling();\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public getExportAll(uuid: string): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetExportAll`, { observe: 'response', responseType: 'blob' });\n }\n\n public getJournalFec(uuid: string): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetJournalFec`, { observe: 'response', responseType: 'blob' });\n }\n\n public getJournalPdf(uuid: string): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetJournalPdf`, { observe: 'response', responseType: 'blob' });\n }\n\n public getJournalSpreadsheet(uuid: string): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetJournalSpreadsheet`, { observe: 'response', responseType: 'blob' });\n }\n\n public getJournalZip(uuid: string): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetJournalZip`, { observe: 'response', responseType: 'blob' });\n }\n\n public getMergedPdf(uuid: string): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetMergedPdf`, { observe: 'response', responseType: 'blob' });\n }\n\n public getMergedZip(uuid: string): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetMergedZip`, { observe: 'response', responseType: 'blob' });\n }\n\n public getSpreadsheetDashboard(uuid: string): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetSpreadsheetDashboard`, { observe: 'response', responseType: 'blob' });\n }\n\n public getSpreadsheetExport(uuid: string): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetSpreadsheetExport`, { observe: 'response', responseType: 'blob' });\n }\n\n public initializeSearch(\n filter: NotificationFilter,\n sort: string,\n page: number,\n pageSize: number\n ): Observable {\n if (!filter) {\n filter = new NotificationFilter();\n }\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}InitializeSearch`, { params: params });\n }\n\n public markAsReadCollection(readNotificationViewModels: ReadNotificationViewModel[]): Observable {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n\n const readViewModels = new ListViewModel();\n readViewModels.values = readNotificationViewModels;\n\n return new Observable((observer) => {\n this._httpClient\n .post>(`${this._actionUrl}MarkAsReadCollection`, JSON.stringify(readViewModels))\n .subscribe(\n () => {\n this._lookForNotificiation();\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n public startPulling(): void {\n if (this.subscription) {\n return;\n }\n\n this._lookForNotificiation();\n if (this._workingLaboratoryService.tenantUuid) {\n this.subscription = this.pullingSubsriber$.subscribe(() => {\n this._lookForNotificiation();\n });\n }\n }\n\n public stopPulling(): void {\n this.subscription?.unsubscribe();\n this.subscription = null;\n }\n\n private _lookForNotificiation(): void {\n if (!this._httpHeaderLoadedFlag || !this._workingLaboratoryService.tenantUuid) {\n return;\n }\n if (this._laboratorySuspendedFlag) {\n this.stopPulling();\n return;\n }\n this._notifyService.doNotDismissOnNextApiCall();\n const filter = new NotificationFilter();\n\n this.initializeSearch(filter, null, 0, 100).subscribe(\n (result) => {\n if (result.resultList?.values) {\n this._onNotificationRefreshed$.next(result.resultList.values);\n }\n\n if (result.resultList?.values?.length > 0) {\n // Stop pulling if there are no more active notifications\n const activeNotifications = result.resultList.values.filter((x) => NotificationService.activeNotificationFlag(x));\n if (activeNotifications?.length === 0) {\n this.stopPulling();\n }\n\n // Open the sidebar if there is at least one unread popup notification.\n const unreadPopupNotifications = result.resultList.values.filter(\n (x) => NotificationService.unreadNotificationFlag(x) && x.alertType === NotificationAlertType.Popup\n );\n\n if (unreadPopupNotifications.length > 0) {\n this._fuseSidebarService.getSidebar(SidebarComponent.key).toggleOpenOnly();\n this._onPopUpNotificationReceived$.next(unreadPopupNotifications);\n }\n } else {\n this.stopPulling();\n }\n },\n (error) => {\n console.error(error);\n this.stopPulling();\n }\n );\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CustomHttpParamEncoder } from 'app/core/customHttpParamEncoder';\nimport { ProFormaState } from 'app/pages/laboratory-area/invoice/state/pro-forma-state';\nimport { PdfProFormaType } from 'app/shared/enums/pdf-pro-forma-type.enum';\nimport { ViewModelHelper } from 'app/shared/helpers/view-model-helper';\nimport { ProFormaFilter } from 'app/shared/prothesis-api-filters/pro-forma-filter';\nimport { AddProFormaByDateViewModel } from 'app/shared/prothesis-api-view-models/add-pro-forma-by-date-view-model';\nimport { IndexProFormaViewModel } from 'app/shared/prothesis-api-view-models/index-pro-forma.view-model';\nimport { PublishDocumentViewModel } from 'app/shared/prothesis-api-view-models/publish-document-view-model';\nimport { ReadProFormaViewModel } from 'app/shared/prothesis-api-view-models/read-pro-forma.view-model';\nimport { SearchProFormaViewModel } from 'app/shared/prothesis-api-view-models/search-pro-forma.view-model';\nimport { SummaryIndexProFormaViewModel } from 'app/shared/prothesis-api-view-models/summary-index-pro-forma.view-model';\nimport { UnPublishViewModel } from 'app/shared/prothesis-api-view-models/un-publish.view-model';\nimport { UuidCollectionUpdatedCreatedViewModel } from 'app/shared/prothesis-api-view-models/uuid-collection-updated-created.view-model';\nimport { UuidCollectionUpdatedDeletedViewModel } from 'app/shared/prothesis-api-view-models/uuid-collection-updated-deleted.view-model';\nimport { UuidCollectionUpdatedViewModel } from 'app/shared/prothesis-api-view-models/uuid-collection-updated.view-model';\nimport { UuidCollectionViewModel } from 'app/shared/prothesis-base-api-view-models/uuid-collection.view-model';\nimport { Observable } from 'rxjs';\nimport { ConfigurationService } from '../configuration.service';\nimport { DialogBoxService } from '../dialog-box/dialog-box.service';\nimport { NotifyService } from '../notify/notify.service';\nimport { TenantCrudSummaryServiceBase } from '../tenant-crud-summary-service-base';\nimport { BuildUrlHelper } from './helper/build-url-helper';\nimport { WorkingLaboratoryService } from './working-laboratory.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProFormaService extends TenantCrudSummaryServiceBase<\n ReadProFormaViewModel,\n IndexProFormaViewModel,\n SummaryIndexProFormaViewModel,\n ProFormaFilter\n> {\n public constructor(\n private _activatedRoute: ActivatedRoute,\n protected _configurationService: ConfigurationService,\n private _dialogBoxService: DialogBoxService,\n protected _httpClient: HttpClient,\n private _notifyService: NotifyService,\n private _router: Router,\n protected _workingLaboratoryService: WorkingLaboratoryService\n ) {\n super(_httpClient, '/ProForma/', _configurationService.ProthesisApiAddress, _workingLaboratoryService);\n }\n\n public static buildMessage(customerName: string, customerGroupName: string, groupFlag: boolean): string {\n let message = `La pro forma du `;\n if (groupFlag) {\n // Members\n message = `${message}groupe ${customerGroupName}`;\n } else {\n // Group or Classic customer\n message = `${message}client ${customerName}`;\n }\n\n return message;\n }\n\n public static buildMessageFromProForma(proForma: ReadProFormaViewModel): string {\n return this.buildMessage(proForma.customerName, proForma.customerName, proForma.groupedInvoiceCustomers.length > 0);\n }\n\n public addDeliveryFormCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n\n return this._httpClient.post(\n `${this._actionUrl}AddDeliveryFormCollection`,\n JSON.stringify(uuidCollectionViewModel)\n );\n }\n\n public addDeliveryFormCollectionByDate(\n addProFormaByDateViewModel: AddProFormaByDateViewModel\n ): Observable {\n return this._httpClient.post(\n `${this._actionUrl}AddDeliveryFormCollectionByDate`,\n JSON.stringify(addProFormaByDateViewModel)\n );\n }\n\n public delete(uuid: string, customer: string): Observable {\n const strProForma = `du client ${customer}`;\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Supprimer définitivement la pro forma ${strProForma} ?`,\n onAccept: () => {\n super._delete(uuid).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Pro forma ${strProForma} correctement supprimée.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n\n public deleteCollection(uuids: string[]): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Supprimer définitivement ${uuids.length} pro forma(s) sélectionné(s) ?`,\n onAccept: () => {\n this._deleteCollection(uuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`${uuids.length} pro forma(s) définitivement supprimé(s).`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n\n public freeze(uuid: string, customer: string): Observable {\n const strProForma = `du client ${customer}`;\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Figer la pro forma ${strProForma} ?`,\n onAccept: () => {\n this._freeze([uuid]).subscribe(\n (result) => {\n this._notifyService.pushInformationMessages(`Pro forma ${strProForma} correctement figée.`);\n observer.next(result.updatedUuids.length > 0);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n subMessageLine1: `Les nouveaux bons du client ne seront plus ajoutés sur cette pro forma. Toutefois, il sera toujours possible de la supprimer ou d'en retirer les bons.`,\n });\n });\n }\n\n public freezeCollection(uuids: string[]): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Figer les pro formas ?`,\n onAccept: () => {\n this._freeze(uuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Pro formas correctement figées.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n subMessageLine1: `Les nouveaux bons des clients ne seront plus ajoutés sur ces pro formas. Toutefois, il sera toujours possible de les supprimer ou d'en retirer les bons.`,\n });\n });\n }\n\n public getPdf(uuid: string, pdfProFormaType: PdfProFormaType = PdfProFormaType.ProForma): Observable> {\n return this._httpClient.get(`${this._actionUrl}${uuid}/GetPdf/${pdfProFormaType}`, { observe: 'response', responseType: 'blob' });\n }\n\n public initializeSearch(filter: ProFormaFilter, sort: string, page: number, pageSize: number): Observable {\n if (!filter) {\n filter = new ProFormaFilter();\n }\n\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return new Observable((observer) => {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n this._httpClient.get(`${this._actionUrl}InitializeSearch`, { params: params }).subscribe(\n (res) => {\n observer.next(res);\n observer.complete();\n },\n (error) => {\n if (error.status === 400) {\n if (this._notifyService.hasErrorName(error as HttpErrorResponse, 'FiscalYear.MissingOnPeriodSearch')) {\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n const actionLabel = filter.periodSearchPage === 0 ? \"Revenir à l'exercice précédent\" : \"Revenir à l'exercice courant\";\n this._notifyService.pushErrorMessages(\n errorMessageFromApi,\n () => {\n const oldQueryParams = this._activatedRoute.snapshot.queryParams;\n let newQueryParams: { pstate: string }, pstate: ProFormaState;\n if (oldQueryParams?.pstate) {\n pstate = JSON.parse(oldQueryParams.pstate);\n if (pstate?.proFormaFilter?.periodSearchPage || pstate?.proFormaFilter?.periodSearchPage === 0) {\n pstate.proFormaFilter.periodSearchPage = pstate.proFormaFilter.periodSearchPage === 0 ? -1 : 0;\n newQueryParams = { pstate: JSON.stringify(pstate) };\n }\n }\n\n this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams: newQueryParams,\n queryParamsHandling: 'merge',\n replaceUrl: true,\n state: { replaceUrlFlag: true },\n });\n },\n actionLabel\n );\n\n if (filter.periodSearchPage === 0) {\n this._notifyService.pushWarningMessages(\n \"Le nouvel exercice sera créé automatiquement lors de l'ajout d'un bon, d'une facture ou d'une opération comptable sur cette période.\",\n null,\n null,\n false,\n false\n );\n }\n\n this._notifyService.displayMessages();\n\n observer.error(error);\n } else {\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n if (errorMessageFromApi.length !== 0) {\n this._notifyService.displayErrorMessagesNow(errorMessageFromApi);\n }\n }\n }\n\n observer.complete();\n }\n );\n });\n }\n\n public markAsPrintedCollection(uuids: string[], pushMessageFlag: boolean): Observable {\n return new Observable((observer) => {\n this._markAsPrintedCollection(uuids).subscribe(\n () => {\n if (pushMessageFlag) {\n if (uuids.length > 1) {\n this._notifyService.pushInformationMessages(`${uuids.length} pro formas correctement marquées comme éditées`);\n } else {\n this._notifyService.pushInformationMessages(`Pro forma correctement marquée comme éditée`);\n }\n }\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public publish(uuid: string, customerName: string, customerUuid: string): Observable {\n return new Observable((observer) => {\n this._publishCollection([uuid]).subscribe(\n (result: PublishDocumentViewModel) => {\n this._notifyService.pushInformationMessages(\n `Pro forma du client ${customerName} ainsi que ses bons de livraison correctement publiés.`\n );\n if (result.customerWithoutActiveUserCustomerExistenceFlag) {\n if (this._workingLaboratoryService.laboratoryRole?.customerModuleFlag) {\n this._notifyService.pushWarningMessages(\n `Cet espace client ne possède aucun utilisateur activé.`,\n () => {\n this._router.navigateByUrl(BuildUrlHelper.buildCustomerUserCustomerListUrl(customerUuid));\n },\n `Gérer les utilisateurs de l'espace client`,\n false,\n true\n );\n } else {\n this._notifyService.pushWarningMessages(`Cet espace client ne possède aucun utilisateur activé.`, null, null, false, false);\n }\n }\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public publishCollection(uuids: string[]): Observable {\n return new Observable((observer) => {\n this._publishCollection(uuids).subscribe(\n (result: PublishDocumentViewModel) => {\n this._notifyService.pushInformationMessages(\n `${uuids.length} pro forma(s) ainsi que leurs bons de livraison correctement publiés.`\n );\n if (result.customerWithoutActiveUserCustomerExistenceFlag) {\n this._notifyService.pushWarningMessages(\n `Au moins un des espaces clients ne possède aucun utilisateur activé.`,\n () => {\n this._router.navigateByUrl(BuildUrlHelper.buildCustomerWithoutActiveUserCustomerListUrl());\n },\n `Voir les espaces clients non-activés`,\n false,\n true\n );\n }\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public removeDeliveryForm(deliveryFormUuid: string, proFormaUuid: string): Observable {\n return new Observable((observer) => {\n // Obtain the linked pro forma\n this.getById(proFormaUuid).subscribe(\n (readProFormaViewModel) => {\n // Check presence of others deliveryForms linked to this pro forma :\n const remainingDeliveryFormsFlag = readProFormaViewModel.deliveryForms.some((x) => x.uuid !== deliveryFormUuid);\n\n const strProForma = ProFormaService.buildMessageFromProForma(readProFormaViewModel);\n\n this._dialogBoxService.promptForAction({\n messageLine1: strProForma,\n onAccept: () => {\n this._removeDeliveryFormCollection([deliveryFormUuid]).subscribe(\n () => {\n this._notifyService.pushInformationMessages(\n `${strProForma} a été ${remainingDeliveryFormsFlag ? 'mise à jour' : 'supprimée'}.`\n );\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n messageLine2: `va être ${remainingDeliveryFormsFlag ? 'mise à jour' : 'supprimée'}.`,\n acceptLabel: 'Continuer',\n declineLabel: 'Annuler',\n });\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public removeDeliveryForms(deliveryFormUuids: string[]): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Les pro formas correspondantes aux ${deliveryFormUuids.length} bons de livraison`,\n onAccept: () => {\n this._removeDeliveryFormCollection(deliveryFormUuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(\n `Pro formas des ${deliveryFormUuids.length} bons de livraison correctement modifiées / supprimées.`\n );\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n messageLine2: `vont être modifiées ou supprimées.`,\n acceptLabel: 'Continuer',\n declineLabel: 'Annuler',\n });\n });\n }\n\n public unmarkAsPrintedCollection(uuids: string[]): Observable {\n return new Observable((observer) => {\n this._unmarkAsPrintedCollection(uuids).subscribe(\n () => {\n if (uuids.length > 1) {\n this._notifyService.pushInformationMessages(`${uuids.length} pro formas correctement marquées comme non-éditées`);\n } else {\n this._notifyService.pushInformationMessages(`Pro forma correctement marquée comme non-éditée`);\n }\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public unPublish(uuid: string, customer: string): Observable {\n return new Observable((observer) =>\n this._unPublishCollection([uuid]).subscribe(\n (resultFlag: boolean) => {\n if (resultFlag) {\n this._notifyService.pushInformationMessages(\n `Pro forma du client ${customer} ainsi que ses bons de livraison correctement dépubliés.`\n );\n observer.next(true);\n observer.complete();\n } else {\n observer.next(false);\n observer.complete();\n }\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n )\n );\n }\n\n public unPublishCollection(uuids: string[]): Observable {\n return new Observable((observer) =>\n this._unPublishCollection(uuids).subscribe(\n (resultFlag: boolean) => {\n if (resultFlag) {\n this._notifyService.pushInformationMessages(\n `${uuids.length} pro forma(s) ainsi que leurs bons de livraison correctement dépubliés.`\n );\n observer.next(true);\n observer.complete();\n } else {\n observer.next(false);\n observer.complete();\n }\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n )\n );\n }\n\n private _freeze(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(\n `${this._actionUrl}FreezeCollection`,\n JSON.stringify(uuidCollectionViewModel)\n );\n }\n\n private _markAsPrintedCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(`${this._actionUrl}MarkAsPrintedCollection`, JSON.stringify(uuidCollectionViewModel));\n }\n\n private _publishCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(`${this._actionUrl}PublishCollection`, JSON.stringify(uuidCollectionViewModel));\n }\n\n private _removeDeliveryFormCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n\n return this._httpClient.post(\n `${this._actionUrl}RemoveDeliveryFormCollection`,\n JSON.stringify(uuidCollectionViewModel)\n );\n }\n\n private _unmarkAsPrintedCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(`${this._actionUrl}UnmarkAsPrintedCollection`, JSON.stringify(uuidCollectionViewModel));\n }\n\n private _unPublishCollection(uuids: string[]): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForActionWithMessage({\n messageLine1: `Des utilisateurs ont peut-être déjà accédé ou été notifiés de ce document. Merci d'indiquer la raison de son indisponibilité.`,\n onAccept: (unPublishReasonText: string) => {\n const unPublishViewModel = new UnPublishViewModel();\n unPublishViewModel.uuids = ViewModelHelper.toUuidViewModels(uuids);\n unPublishViewModel.unPublishReasonText = unPublishReasonText;\n this._httpClient\n .post(`${this._actionUrl}UnPublishCollection`, JSON.stringify(unPublishViewModel))\n .subscribe(\n () => {\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n acceptLabel: 'Continuer',\n declineLabel: 'Annuler',\n subMessageLine1: 'Les bons concernés par cette pro forma seront également dépubliés',\n });\n });\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { EditProductionFlowViewModel } from 'app/shared/prothesis-api-view-models/edit-production-flow.view-model';\nimport { ExtendOptionSectorViewModel } from 'app/shared/prothesis-api-view-models/extend-option-sector.view-model';\nimport { FullProductionFlowViewModel } from 'app/shared/prothesis-api-view-models/full-production-flow.view-model';\nimport { IndexProductionFlowViewModel } from 'app/shared/prothesis-api-view-models/index-production-flow.view-model';\nimport { OptionDeliveryRouteViewModel } from 'app/shared/prothesis-api-view-models/option-delivery-route.view-model';\nimport { ReadProductionFlowViewModel } from 'app/shared/prothesis-api-view-models/read-production-flow.view-model';\nimport { TenantFilter } from 'app/shared/prothesis-base-api-filters/tenant-filter';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { ConfigurationService } from '../configuration.service';\nimport { TenantCrudServiceBase } from '../tenant-crud-service-base';\nimport { WorkingLaboratoryService } from './working-laboratory.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProductionFlowService extends TenantCrudServiceBase {\n public initializefilterDeliveryRouteOptionsSubject$: Observable;\n public initializefilterSectorOptionsSubject$: Observable;\n private _initializefilterDeliveryRouteOptionsSubject = new ReplaySubject();\n private _initializefilterSectorOptionsSubject = new ReplaySubject();\n private _readProductionFlowViewModel: ReadProductionFlowViewModel;\n\n public constructor(\n protected _configurationService: ConfigurationService,\n protected _httpClient: HttpClient,\n protected _workingLaboratoryService: WorkingLaboratoryService\n ) {\n super(_httpClient, '/ProductionFlow/', _configurationService.ProthesisApiAddress, _workingLaboratoryService);\n this.initializefilterDeliveryRouteOptionsSubject$ = this._initializefilterDeliveryRouteOptionsSubject.asObservable();\n this.initializefilterSectorOptionsSubject$ = this._initializefilterSectorOptionsSubject.asObservable();\n }\n\n public getFullById(uuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}${uuid}/Full`);\n }\n\n public getReadProductionFlowViewModel(): ReadProductionFlowViewModel {\n return this._readProductionFlowViewModel;\n }\n\n public initializeCreate(): Observable {\n return this._httpClient.get(`${this._actionUrl}InitializeCreate`);\n }\n\n public initializeEdit(uuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}${uuid}/InitializeEdit`);\n }\n\n public initializefilterDeliveryRouteOptions(deliveryRoutes: OptionDeliveryRouteViewModel[]): void {\n this._initializefilterDeliveryRouteOptionsSubject.next(deliveryRoutes);\n }\n\n public initializefilterSectorOptions(sectors: ExtendOptionSectorViewModel[]): void {\n this._initializefilterSectorOptionsSubject.next(sectors);\n }\n\n public setReadProductionFlowViewModel(readProductionFlowViewModel: ReadProductionFlowViewModel): void {\n this._readProductionFlowViewModel = readProductionFlowViewModel;\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { CustomHttpParamEncoder } from 'app/core/customHttpParamEncoder';\nimport { PdfCustomerRateType } from 'app/shared/enums/pdf-customer-rate.enum';\nimport { FileHelper } from 'app/shared/helpers/file-helper';\nimport { ViewModelHelper } from 'app/shared/helpers/view-model-helper';\nimport { RateFilter } from 'app/shared/prothesis-api-filters/rate-filter';\nimport { DuplicateRateViewModel } from 'app/shared/prothesis-api-view-models/duplicate-rate-view-model';\nimport { IndexRateViewModel } from 'app/shared/prothesis-api-view-models/index-rate.view-model';\nimport { InfoCustomerRateViewModel } from 'app/shared/prothesis-api-view-models/info-customer-rate-view-model';\nimport { ReadRateViewModel } from 'app/shared/prothesis-api-view-models/read-rate.view-model';\nimport { SummaryIndexRateViewModel } from 'app/shared/prothesis-api-view-models/summary-index-rate.view-model';\nimport { UuidCollectionViewModel } from 'app/shared/prothesis-base-api-view-models/uuid-collection.view-model';\nimport { Observable } from 'rxjs';\nimport { ConfigurationService } from '../configuration.service';\nimport { DialogBoxService } from '../dialog-box/dialog-box.service';\nimport { NotifyService } from '../notify/notify.service';\nimport { TenantCrudSummaryServiceBase } from '../tenant-crud-summary-service-base';\nimport { WorkingLaboratoryService } from './working-laboratory.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RateService extends TenantCrudSummaryServiceBase<\n ReadRateViewModel,\n IndexRateViewModel,\n SummaryIndexRateViewModel,\n RateFilter\n> {\n public constructor(\n protected _configurationService: ConfigurationService,\n private _dialogBoxService: DialogBoxService,\n protected _httpClient: HttpClient,\n private _notifyService: NotifyService,\n private _router: Router,\n protected _workingLaboratoryService: WorkingLaboratoryService\n ) {\n super(_httpClient, '/Rate/', _configurationService.ProthesisApiAddress, _workingLaboratoryService);\n }\n\n public delete(rateUuid: string, rateLabel: string): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Supprimer définitivement le tarif ${rateLabel} ?`,\n onAccept: () => {\n this._delete(rateUuid).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Tarif ${rateLabel} définitivement supprimé.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n\n public deleteCollection(rateUuids: string[]): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Supprimer définitivement ${rateUuids.length} tarifs sélectionnés ?`,\n onAccept: () => {\n this._deleteCollection(rateUuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`${rateUuids.length} tarifs définitivement supprimés.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n });\n });\n }\n\n public disable(rateUuid: string, rateName: string, cancelAction: () => void): Observable {\n return new Observable((observer) => {\n this._disableCollection([rateUuid]).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Tarif ${rateName} correctement désactivé.`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public disableCollection(rateUuids: string[], cancelAction: () => void): Observable {\n return new Observable((observer) => {\n this._disableCollection(rateUuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`${rateUuids.length} tarif(s) correctement désactivé(s).`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public duplicate(duplicateRateViewModel: DuplicateRateViewModel): Observable {\n this.setTenantUuid(duplicateRateViewModel.duplicateRate);\n return this._httpClient.post(`${this._actionUrl}Duplicate`, JSON.stringify(duplicateRateViewModel));\n }\n\n public enable(rateUuid: string, rateName: string, cancelAction: () => void): Observable {\n return new Observable((observer) => {\n this._enableCollection([rateUuid]).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Tarif ${rateName} correctement activé.`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public enableCollection(rateUuids: string[], cancelAction: () => void): Observable {\n return new Observable((observer) => {\n this._enableCollection(rateUuids).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`${rateUuids.length} tarif(s) correctement activé(s).`, cancelAction);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n });\n }\n\n public getCustomerRatePdf(\n customerUuid: string,\n pdfCustomerRateType: PdfCustomerRateType = PdfCustomerRateType.TaxIncluded\n ): Observable<{ blob: Blob; filename: string }> {\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() }).set('pdfCustomerRateType', pdfCustomerRateType.toString());\n\n return new Observable((observer) => {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n this._httpClient\n .get(`${this._actionUrl}Customer/${customerUuid}/GetPdf?pdfCustomerRateType=${pdfCustomerRateType}`, {\n params: params,\n observe: 'response',\n responseType: 'blob',\n })\n .subscribe(\n (res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n observer.next({ blob, filename });\n observer.complete();\n },\n (error) => {\n if (error.status === 400) {\n if (this._notifyService.hasErrorName(error as HttpErrorResponse, 'LaboratoryInformation.Missing')) {\n this._notifyService.displayErrorMessagesNow(\n 'Les données nécessaires à la facturation ne sont pas renseignées dans les paramètres du laboratoire.',\n () => {\n this._router.navigateByUrl('/account/create-laboratory-settings');\n },\n 'paramètres du laboratoire'\n );\n } else {\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n if (errorMessageFromApi.length !== 0) {\n this._notifyService.displayErrorMessagesNow(errorMessageFromApi);\n }\n }\n } else if (error.status === 404) {\n const errorMessage = \"L'enregistrement auquel vous essayez d'accéder n'existe pas.\";\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n if (errorMessageFromApi.length === 0) {\n this._notifyService.displayErrorMessagesNow(errorMessage);\n } else {\n this._notifyService.displayErrorMessagesNow(errorMessageFromApi);\n }\n }\n\n observer.complete();\n }\n );\n });\n }\n\n public getInfo(customerUuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}Customer/${customerUuid}/GetInfo`);\n }\n\n public getPdf(uuid: string): Observable<{ blob: Blob; filename: string }> {\n return new Observable((observer) => {\n // Suppress the display of messages by the ApiInterceptor, as error handling will be managed here.\n this._notifyService.flagUp();\n this._httpClient.get(`${this._actionUrl}${uuid}/GetPdf`, { observe: 'response', responseType: 'blob' }).subscribe(\n (res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n observer.next({ blob, filename });\n observer.complete();\n },\n (error) => {\n if (error.status === 400) {\n if (this._notifyService.hasErrorName(error as HttpErrorResponse, 'LaboratoryInformation.Missing')) {\n this._notifyService.displayErrorMessagesNow(\n 'Les données nécessaires à la facturation ne sont pas renseignées dans les paramètres du laboratoire.',\n () => {\n this._router.navigateByUrl('/account/create-laboratory-settings');\n },\n 'paramètres du laboratoire'\n );\n } else {\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n if (errorMessageFromApi.length !== 0) {\n this._notifyService.displayErrorMessagesNow(errorMessageFromApi);\n }\n }\n } else if (error.status === 404) {\n const errorMessage = \"L'enregistrement auquel vous essayez d'accéder n'existe pas.\";\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n if (errorMessageFromApi.length === 0) {\n this._notifyService.displayErrorMessagesNow(errorMessage);\n } else {\n this._notifyService.displayErrorMessagesNow(errorMessageFromApi);\n }\n }\n\n observer.complete();\n }\n );\n });\n }\n\n public updateRateCustomerCollection(rateUuid: string, customerUuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(customerUuids);\n return this._httpClient.post(\n `${this._actionUrl}${rateUuid}/UpdateRateCustomerCollection`,\n JSON.stringify(uuidCollectionViewModel)\n );\n }\n\n private _disableCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(`${this._actionUrl}DisableCollection`, JSON.stringify(uuidCollectionViewModel));\n }\n\n private _enableCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(`${this._actionUrl}EnableCollection`, JSON.stringify(uuidCollectionViewModel));\n }\n}\n","export class TimeZoneSingleton {\n public adminTimeZone: string;\n\n public laboratoryTimeZone: string;\n\n private static instance: TimeZoneSingleton;\n\n private constructor(timeZone: string, adminTimeZone: string) {\n this.adminTimeZone = adminTimeZone;\n this.laboratoryTimeZone = timeZone;\n }\n\n public static getInstance(): TimeZoneSingleton {\n return this.instance;\n }\n\n public static setInstance(laboratoryTimeZone: string): void {\n this.instance = new TimeZoneSingleton(laboratoryTimeZone, 'Europe/Paris');\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { CustomHttpParamEncoder } from 'app/core/customHttpParamEncoder';\nimport { ViewModelHelper } from 'app/shared/helpers/view-model-helper';\nimport { UserCustomerFilter } from 'app/shared/prothesis-api-filters/user-customer-filter';\nimport { AddUserCustomerByEmailViewModel } from 'app/shared/prothesis-api-view-models/add-user-customer-by-email-view-model';\nimport { EditUserCustomerViewModel } from 'app/shared/prothesis-api-view-models/edit-user-customer.view-model';\nimport { IndexUserCustomerViewModel } from 'app/shared/prothesis-api-view-models/index-user-customer.view-model';\nimport { ReadUserCustomerViewModel } from 'app/shared/prothesis-api-view-models/read-user-customer.view-model';\nimport { SearchUserCustomerViewModel } from 'app/shared/prothesis-api-view-models/search-user-customer.view-model';\nimport { Observable } from 'rxjs';\nimport { ConfigurationService } from '../configuration.service';\nimport { DialogBoxService } from '../dialog-box/dialog-box.service';\nimport { NotifyService } from '../notify/notify.service';\nimport { TenantCrudServiceBase } from '../tenant-crud-service-base';\nimport { WorkingLaboratoryService } from './working-laboratory.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserCustomerService extends TenantCrudServiceBase {\n public constructor(\n protected _configurationService: ConfigurationService,\n private _dialogBoxService: DialogBoxService,\n protected _httpClient: HttpClient,\n private _notifyService: NotifyService,\n protected _workingLaboratoryService: WorkingLaboratoryService\n ) {\n super(_httpClient, '/UserCustomer/', _configurationService.ProthesisApiAddress, _workingLaboratoryService);\n }\n\n public createByEmail(addUserCustomerByEmailViewModel: AddUserCustomerByEmailViewModel): Observable {\n return this._httpClient.post(\n `${this._actionUrl}CreateByEmail`,\n JSON.stringify(addUserCustomerByEmailViewModel)\n );\n }\n\n public delete(userCustomerUuid: string, userCustomerEmailAddress: string): Observable {\n return new Observable((observer) => {\n this._dialogBoxService.promptForAction({\n messageLine1: `Dissocier l'utilisateur ${userCustomerEmailAddress} de l'espace client ?`,\n onAccept: () => {\n this._delete(userCustomerUuid).subscribe(\n () => {\n this._notifyService.pushInformationMessages(`Utilisateur ${userCustomerEmailAddress} dissocié.`);\n observer.next(true);\n observer.complete();\n },\n () => {\n observer.next(false);\n observer.complete();\n }\n );\n },\n onDecline: () => {\n observer.next(false);\n observer.complete();\n },\n subMessageLine1: `L'utilisateur n'accèdera plus à cet espace client`,\n });\n });\n }\n\n public initializeCreate(customerUuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}InitializeCreate/Customer/${customerUuid}`);\n }\n\n public initializeEdit(uuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}${uuid}/InitializeEdit`);\n }\n\n public initializeSearch(\n filter: UserCustomerFilter,\n sort: string,\n page: number,\n pageSize: number,\n customerUuid: string\n ): Observable {\n if (!filter) {\n filter = new UserCustomerFilter();\n }\n\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n filter.customerUuids = customerUuid ? [customerUuid] : null;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}InitializeSearch`, { params: params });\n }\n\n public sendConfirmationEmailCollection(uuids: string[]): Observable {\n const uuidCollectionViewModel = ViewModelHelper.toUuidCollectionViewModel(uuids);\n return this._httpClient.post(`${this._actionUrl}SendConfirmationEmailCollection`, JSON.stringify(uuidCollectionViewModel));\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { NavigationInterface } from 'app/layout/components/navigation/models/navigation-interface';\nimport { InfoLaboratoryRoleProjection } from 'app/shared/prothesis-api-projections/info-laboratory-role.projection';\nimport { InfoUserLaboratoryProjection } from 'app/shared/prothesis-api-projections/info-user-laboratory.projection';\nimport isEqual from 'lodash-es/isEqual';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { AuthService } from '../auth.service';\nimport { ConfigurationService } from '../configuration.service';\nimport { AreaMenu } from '../left-menu/area-menu.enum';\nimport { LeftMenuService } from '../left-menu/left-menu.service';\nimport { NotifyService } from '../notify/notify.service';\nimport { SessionStorageService } from '../session-storage.service';\nimport { WorkingTenantServiceInterface } from '../working-tenant-service.interface';\nimport { TimeZoneSingleton } from './time-zone-singleton';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkingLaboratoryService implements WorkingTenantServiceInterface {\n public authService: AuthService;\n public exploredUuid$: Observable;\n public tenantBasePath = '/Laboratory';\n private _exploredUuidSubject = new ReplaySubject();\n private _exploringFlag = false;\n private _laboratoryCode: string;\n private _laboratoryDemoModeFlag: boolean;\n private _laboratoryName: string;\n private _laboratoryRateAutoPublishFlag: boolean;\n private _laboratoryRole: InfoLaboratoryRoleProjection;\n private _laboratoryTzDatabaseName: string;\n private _tenantUuid: string;\n\n public constructor(\n private _configurationService: ConfigurationService,\n private _fuseNavigationService: FuseNavigationService,\n private _httpClient: HttpClient,\n private _leftMenuService: LeftMenuService,\n private _notifyService: NotifyService,\n private _sessionStorageService: SessionStorageService\n ) {\n this._leftMenuService.workingLaboratoryService = this;\n this.exploredUuid$ = this._exploredUuidSubject.asObservable();\n }\n\n public get exploringFlag(): boolean {\n return this._exploringFlag ?? false;\n }\n\n public set exploringFlag(value: boolean) {\n const oldExploringFlag = this._exploringFlag;\n this._exploringFlag = value;\n\n if (this._exploringFlag !== oldExploringFlag) {\n if (this._exploringFlag !== undefined && this._exploringFlag !== null) {\n this._sessionStorageService.write('working_laboratory_exploringFlag', this._exploringFlag);\n } else {\n this._sessionStorageService.removeItem('working_laboratory_exploringFlag');\n }\n }\n }\n\n public get laboratoryCode(): string {\n return this._laboratoryCode;\n }\n\n public set laboratoryCode(value: string) {\n const oldLaboratoryCode = this._laboratoryCode;\n this._laboratoryCode = value;\n\n if (this._laboratoryCode !== oldLaboratoryCode) {\n if (this._laboratoryCode) {\n this._sessionStorageService.write('working_laboratory_code', this._laboratoryCode);\n } else {\n this._sessionStorageService.removeItem('working_laboratory_code');\n }\n }\n }\n\n public get laboratoryDemoModeFlag(): boolean {\n return this._laboratoryDemoModeFlag;\n }\n\n public set laboratoryDemoModeFlag(value: boolean) {\n const oldLaboratoryDemoModeFlag = this._laboratoryDemoModeFlag;\n this._laboratoryDemoModeFlag = value;\n\n if (this.laboratoryDemoModeFlag !== oldLaboratoryDemoModeFlag) {\n if (this._laboratoryDemoModeFlag !== null && this._laboratoryDemoModeFlag !== undefined) {\n this._sessionStorageService.write('working_laboratory_demoModeFlag', this._laboratoryDemoModeFlag);\n } else {\n this._sessionStorageService.removeItem('working_laboratory_demoModeFlag');\n }\n }\n }\n\n public get laboratoryName(): string {\n return this._laboratoryName;\n }\n\n public set laboratoryName(value: string) {\n const oldLaboratoryName = this._laboratoryName;\n this._laboratoryName = value;\n\n if (this._laboratoryName !== oldLaboratoryName) {\n if (this._laboratoryName) {\n this._sessionStorageService.write('working_laboratory_name', this._laboratoryName);\n } else {\n this._sessionStorageService.removeItem('working_laboratory_name');\n }\n }\n }\n\n public get laboratoryRateAutoPublishFlag(): boolean {\n return this._laboratoryRateAutoPublishFlag;\n }\n\n public set laboratoryRateAutoPublishFlag(value: boolean) {\n const oldLaboratoryRateAutoPublishFlag = this._laboratoryRateAutoPublishFlag;\n this._laboratoryRateAutoPublishFlag = value;\n\n if (this._laboratoryRateAutoPublishFlag !== oldLaboratoryRateAutoPublishFlag) {\n if (this._laboratoryRateAutoPublishFlag !== undefined && this._laboratoryRateAutoPublishFlag !== null) {\n this._sessionStorageService.write('working_laboratory_rate_auto_publish_flag', this._laboratoryRateAutoPublishFlag);\n } else {\n this._sessionStorageService.removeItem('working_laboratory_rate_auto_publish_flag');\n }\n }\n }\n\n public get laboratoryRole(): InfoLaboratoryRoleProjection {\n return this._laboratoryRole;\n }\n\n public set laboratoryRole(value: InfoLaboratoryRoleProjection) {\n const oldLaboratoryRole = this._laboratoryRole;\n this._laboratoryRole = value;\n\n if (!isEqual(this._laboratoryRole, oldLaboratoryRole)) {\n if (this._laboratoryRole) {\n this._sessionStorageService.write('working_laboratory_role', this._laboratoryRole);\n } else {\n this._sessionStorageService.removeItem('working_laboratory_role');\n }\n }\n }\n\n public get laboratoryTzDatabaseName(): string {\n return this._laboratoryTzDatabaseName;\n }\n\n public set laboratoryTzDatabaseName(value: string) {\n const oldLaboratoryTzDatabaseName = this._laboratoryTzDatabaseName;\n this._laboratoryTzDatabaseName = value;\n\n if (this._laboratoryTzDatabaseName !== oldLaboratoryTzDatabaseName) {\n TimeZoneSingleton.setInstance(this._laboratoryTzDatabaseName);\n if (this._laboratoryTzDatabaseName) {\n this._sessionStorageService.write('working_laboratory_tzDatabaseName', this._laboratoryTzDatabaseName);\n } else {\n this._sessionStorageService.removeItem('working_laboratory_tzDatabaseName');\n }\n }\n }\n\n public get tenantUuid(): string {\n return this._tenantUuid;\n }\n\n public set tenantUuid(value: string) {\n const oldTenantUuid = this._tenantUuid;\n this._tenantUuid = value;\n\n if (this._tenantUuid !== oldTenantUuid) {\n if (this._tenantUuid) {\n this._sessionStorageService.write('working_laboratory_uuid', this._tenantUuid);\n } else {\n this._sessionStorageService.removeItem('working_laboratory_uuid');\n }\n }\n }\n\n public clear(): void {\n this.exploringFlag = null;\n this.laboratoryCode = null;\n this.laboratoryDemoModeFlag = null;\n this.laboratoryName = null;\n this.laboratoryRateAutoPublishFlag = null;\n this.laboratoryRole = null;\n this.laboratoryTzDatabaseName = null;\n this.tenantUuid = null;\n }\n\n public explore(laboratoryUuid: string, notifyFlag = true): Observable {\n this.exploringFlag = true;\n\n return new Observable((observer) => {\n this.getInfo(laboratoryUuid).subscribe(\n (infoUserLaboratoryProjection: InfoUserLaboratoryProjection) => {\n this.laboratoryCode = infoUserLaboratoryProjection.laboratory.code;\n this.laboratoryDemoModeFlag = infoUserLaboratoryProjection.laboratory.demoModeFlag;\n this.laboratoryName = infoUserLaboratoryProjection.laboratory.name;\n this.laboratoryRateAutoPublishFlag = infoUserLaboratoryProjection.laboratory.rateAutoPublishFlag;\n this.laboratoryRole = infoUserLaboratoryProjection.laboratoryRole;\n this.laboratoryTzDatabaseName = infoUserLaboratoryProjection.laboratory.tzDatabaseName;\n this.tenantUuid = infoUserLaboratoryProjection.laboratory.uuid;\n this.exploreInternal(notifyFlag);\n observer.next(infoUserLaboratoryProjection);\n observer.complete();\n },\n () => {\n observer.complete();\n }\n );\n });\n }\n\n public getInfo(laboratoryUuid: string): Observable {\n const actionUrl = `${this._configurationService.ProthesisApiAddress}/Laboratory/${laboratoryUuid}/GetInfo`;\n return this._httpClient.get(actionUrl);\n }\n\n public stopExploring(): void {\n const laboratoryName = this._laboratoryName;\n this.clear();\n\n // Set navigation menu\n const navigation = this._leftMenuService.getNavigation([AreaMenu.Admin], null, true, laboratoryName);\n this._fuseNavigationService.unregister('main');\n this._fuseNavigationService.register('main', navigation);\n\n if (laboratoryName) {\n this._notifyService.displayInformationMessagesNow(`${laboratoryName} n'est plus en cours d'exploration.`);\n }\n\n this._exploredUuidSubject.next(null);\n }\n\n public tryExploring(): void {\n this._exploringFlag = this._sessionStorageService.read('working_laboratory_exploringFlag');\n this._laboratoryCode = this._sessionStorageService.read('working_laboratory_code');\n this._laboratoryDemoModeFlag = this._sessionStorageService.read('working_laboratory_demoModeFlag');\n this._laboratoryName = this._sessionStorageService.read('working_laboratory_name');\n this._laboratoryRateAutoPublishFlag = this._sessionStorageService.read('working_laboratory_rate_auto_publish_flag');\n this._laboratoryRole = this._sessionStorageService.read('working_laboratory_role');\n this._laboratoryTzDatabaseName = this._sessionStorageService.read('working_laboratory_tzDatabaseName');\n TimeZoneSingleton.setInstance(this._laboratoryTzDatabaseName);\n this._tenantUuid = this._sessionStorageService.read('working_laboratory_uuid');\n\n if (\n this._laboratoryRole &&\n this._exploringFlag !== null &&\n this._exploringFlag !== undefined &&\n this._laboratoryCode &&\n this._laboratoryDemoModeFlag !== null &&\n this._laboratoryDemoModeFlag !== undefined &&\n this._laboratoryName &&\n this._laboratoryRateAutoPublishFlag !== null &&\n this._laboratoryRateAutoPublishFlag !== undefined &&\n this._laboratoryTzDatabaseName &&\n this._tenantUuid\n ) {\n this.exploreInternal(false);\n }\n }\n\n private exploreInternal(notifyFlag: boolean): void {\n // Set navigation menu\n const navigation = this._leftMenuService.getNavigation(\n [AreaMenu.Admin, AreaMenu.Laboratory],\n this.laboratoryDemoModeFlag,\n true,\n this._laboratoryName\n );\n\n const navigationItem: NavigationInterface = navigation.find(\n (fuseNavigationItem: NavigationInterface) => fuseNavigationItem.id === 'laboratory-area'\n );\n navigationItem.translate = undefined;\n navigationItem.text = `${this.laboratoryCode} - ${this._laboratoryName}`;\n this._fuseNavigationService.unregister('main');\n this._fuseNavigationService.register('main', navigation);\n\n if (notifyFlag) {\n this._notifyService.displayInformationMessagesNow(`${this._laboratoryName} en cours d'exploration.`);\n }\n\n this._exploredUuidSubject.next(this.tenantUuid);\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { CustomHttpParamEncoder } from 'app/core/customHttpParamEncoder';\nimport { AutoCompleteResultProjection } from 'app/shared/prothesis-api-projections/auto-complete-result.projection';\nimport { CustomerFilter } from 'app/shared/prothesis-customer-api-filters/customer-filter';\nimport { IndexCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/index-customer.view-model';\nimport { PickerCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/picker-customer.view-model';\nimport { ReadCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/read-customer.view-model';\nimport { Observable } from 'rxjs';\nimport { ConfigurationService } from '../configuration.service';\nimport { TenantReadServiceBase } from '../tenant-read-service-base';\nimport { WorkingCustomerService } from './working-customer.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomerService extends TenantReadServiceBase {\n public constructor(\n protected _configurationService: ConfigurationService,\n protected _httpClient: HttpClient,\n protected _workingCustomerService: WorkingCustomerService\n ) {\n super(_httpClient, '/Customer/', _configurationService.ProthesisCustomerApiAddress, _workingCustomerService);\n }\n\n public autoComplete(filter: CustomerFilter, input: string, maxResult = 10): Observable {\n if (input === null || input.trim().length === 0) {\n return new Observable();\n }\n\n if (!filter) {\n filter = new CustomerFilter();\n }\n\n filter.tenantUuid = `${this._workingCustomerService.tenantUuid}`;\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('input', input)\n .set('maxResult', maxResult.toString());\n\n return this._httpClient.get(`${this._actionUrl}AutoComplete`, { params: params });\n }\n\n public initializePicker(filter: CustomerFilter, sort: string, page: number, pageSize: number): Observable {\n if (!filter) {\n filter = new CustomerFilter();\n }\n\n filter.tenantUuid = `${this._workingCustomerService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}InitializePicker`, { params: params });\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { DocumentFilter } from 'app/shared/prothesis-customer-api-filters/document-filter';\nimport { FullProductionFlowViewModel } from 'app/shared/prothesis-customer-api-view-models/full-production-flow.view-model';\nimport { IndexProductionFlowViewModel } from 'app/shared/prothesis-customer-api-view-models/index-production-flow.view-model';\nimport { OptionDeliveryRouteViewModel } from 'app/shared/prothesis-customer-api-view-models/option-delivery-route.view-model';\nimport { ReadProductionFlowViewModel } from 'app/shared/prothesis-customer-api-view-models/read-production-flow.view-model';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { ConfigurationService } from '../configuration.service';\nimport { TenantReadServiceBase } from '../tenant-read-service-base';\nimport { WorkingCustomerService } from './working-customer.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProductionFlowService extends TenantReadServiceBase<\n ReadProductionFlowViewModel,\n IndexProductionFlowViewModel,\n DocumentFilter\n> {\n public initializefilterDeliveryRouteOptionsSubject$: Observable;\n private _initializefilterDeliveryRouteOptionsSubject = new ReplaySubject();\n\n public constructor(\n protected _configurationService: ConfigurationService,\n protected _httpClient: HttpClient,\n protected _workingCustomerService: WorkingCustomerService\n ) {\n super(_httpClient, '/ProductionFlow/', _configurationService.ProthesisCustomerApiAddress, _workingCustomerService);\n this.initializefilterDeliveryRouteOptionsSubject$ = this._initializefilterDeliveryRouteOptionsSubject.asObservable();\n }\n\n public getFullById(uuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}${uuid}/Full`);\n }\n\n public initializefilterDeliveryRouteOptions(deliveryRoutes: OptionDeliveryRouteViewModel[]): void {\n this._initializefilterDeliveryRouteOptionsSubject.next(deliveryRoutes);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { NavigationInterface } from 'app/layout/components/navigation/models/navigation-interface';\nimport { InfoUserCustomerProjection } from 'app/shared/prothesis-api-projections/info-user-customer.projection';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { AuthService } from '../auth.service';\nimport { ConfigurationService } from '../configuration.service';\nimport { AreaMenu } from '../left-menu/area-menu.enum';\nimport { LeftMenuService } from '../left-menu/left-menu.service';\nimport { NotifyService } from '../notify/notify.service';\nimport { WorkingLaboratoryService } from '../prothesis-api/working-laboratory.service';\nimport { SessionStorageService } from '../session-storage.service';\nimport { WorkingTenantServiceInterface } from '../working-tenant-service.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkingCustomerService implements WorkingTenantServiceInterface {\n public authService: AuthService;\n public exploredUuid$: Observable;\n public tenantBasePath = '/Customer';\n private _customerCode: string;\n private _customerGroupFlag: boolean;\n private _customerGroupName: string;\n private _customerMemberFlag: boolean;\n private _customerName: string;\n private _exploredUuidSubject = new ReplaySubject();\n private _exploringFlag = false;\n private _isAdminOrSuperAdminFlag: boolean;\n private _tenantUuid: string;\n\n public constructor(\n private _configurationService: ConfigurationService,\n private _fuseNavigationService: FuseNavigationService,\n private _httpClient: HttpClient,\n private _leftMenuService: LeftMenuService,\n private _notifyService: NotifyService,\n private _sessionStorageService: SessionStorageService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {\n this._leftMenuService.workingCustomerService = this;\n this.exploredUuid$ = this._exploredUuidSubject.asObservable();\n }\n\n public get customerCode(): string {\n return this._customerCode;\n }\n\n public set customerCode(value: string) {\n const oldCustomerCode = this._customerCode;\n this._customerCode = value;\n\n if (this._customerCode !== oldCustomerCode) {\n if (this._customerCode) {\n this._sessionStorageService.write('working_customer_code', this._customerCode);\n } else {\n this._sessionStorageService.removeItem('working_customer_code');\n }\n }\n }\n\n public get customerGroupFlag(): boolean {\n return this._customerGroupFlag;\n }\n\n public set customerGroupFlag(value: boolean) {\n const oldCustomerGroupFlag = this._customerGroupFlag;\n this._customerGroupFlag = value;\n\n if (this._customerGroupFlag !== oldCustomerGroupFlag) {\n if (this._customerGroupFlag !== undefined && this._customerGroupFlag !== null) {\n this._sessionStorageService.write('working_customer_group_flag', this._customerGroupFlag);\n } else {\n this._sessionStorageService.removeItem('working_customer_group_flag');\n }\n }\n }\n\n public get customerGroupName(): string {\n return this._customerGroupName;\n }\n\n public set customerGroupName(value: string) {\n const oldCustomerGroupName = this._customerGroupName;\n this._customerGroupName = value;\n\n if (this._customerGroupName !== oldCustomerGroupName) {\n if (this._customerGroupName) {\n this._sessionStorageService.write('working_customer_group_name', this._customerGroupName);\n } else {\n this._sessionStorageService.removeItem('working_customer_group_name');\n }\n }\n }\n\n public get customerMemberFlag(): boolean {\n return this._customerMemberFlag;\n }\n\n public set customerMemberFlag(value: boolean) {\n const oldCustomerMemberFlag = this._customerMemberFlag;\n this._customerMemberFlag = value;\n\n if (this._customerMemberFlag !== oldCustomerMemberFlag) {\n if (this._customerMemberFlag !== undefined && this._customerMemberFlag !== null) {\n this._sessionStorageService.write('working_customer_member_flag', this._customerMemberFlag);\n } else {\n this._sessionStorageService.removeItem('working_customer_member_flag');\n }\n }\n }\n\n public get customerName(): string {\n return this._customerName;\n }\n\n public set customerName(value: string) {\n const oldCustomerName = this._customerName;\n this._customerName = value;\n\n if (this._customerName !== oldCustomerName) {\n if (this._customerName) {\n this._sessionStorageService.write('working_customer_name', this._customerName);\n } else {\n this._sessionStorageService.removeItem('working_customer_name');\n }\n }\n }\n\n public get exploringFlag(): boolean {\n return this._exploringFlag ?? false;\n }\n\n public set exploringFlag(value: boolean) {\n const oldExploringFlag = this._exploringFlag;\n this._exploringFlag = value;\n\n if (this._exploringFlag !== oldExploringFlag) {\n if (this._exploringFlag !== undefined && this._exploringFlag !== null) {\n this._sessionStorageService.write('working_customer_exploringFlag', this._exploringFlag);\n } else {\n this._sessionStorageService.removeItem('working_customer_exploringFlag');\n }\n }\n }\n\n public get isAdminOrSuperAdminFlag(): boolean {\n return this._isAdminOrSuperAdminFlag;\n }\n\n public set isAdminOrSuperAdminFlag(value: boolean) {\n this._isAdminOrSuperAdminFlag = value;\n }\n\n public get tenantUuid(): string {\n return this._tenantUuid;\n }\n\n public set tenantUuid(value: string) {\n const oldTenantUuid = this._tenantUuid;\n this._tenantUuid = value;\n\n if (this._tenantUuid !== oldTenantUuid) {\n if (this._tenantUuid) {\n this._sessionStorageService.write('working_customer_uuid', this._tenantUuid);\n } else {\n this._sessionStorageService.removeItem('working_customer_uuid');\n }\n }\n }\n\n public clear(): void {\n this.customerCode = null;\n this.customerGroupFlag = null;\n this.customerGroupName = null;\n this.customerMemberFlag = null;\n this.customerName = null;\n this.exploringFlag = null;\n this.tenantUuid = null;\n }\n\n public explore(customerUuid: string, notifyFlag = true): Observable {\n this.exploringFlag = true;\n\n return new Observable((observer) => {\n this.getInfo(customerUuid).subscribe(\n (infoUserCustomerProjection: InfoUserCustomerProjection) => {\n this.customerCode = infoUserCustomerProjection.customer.code;\n this.customerGroupFlag = infoUserCustomerProjection.customer.customerGroupFlag;\n this.customerGroupName = infoUserCustomerProjection.customer.customerGroupName;\n this.customerMemberFlag = infoUserCustomerProjection.customer.customerMemberFlag;\n this.customerName = infoUserCustomerProjection.customer.name;\n this.tenantUuid = infoUserCustomerProjection.customer.uuid;\n this.exploreInternal(notifyFlag);\n observer.next(infoUserCustomerProjection);\n observer.complete();\n },\n () => {\n observer.complete();\n }\n );\n });\n }\n\n public getInfo(customerUuid: string): Observable {\n const actionUrl = `${this._configurationService.ProthesisCustomerApiAddress}/Customer/${customerUuid}/Customer/GetInfo`;\n return this._httpClient.get(actionUrl);\n }\n\n public stopExploring(): void {\n const customerName = this._customerName;\n const customerCode = this._customerCode;\n this.clear();\n\n // Set navigation menu\n const areaMenus = [AreaMenu.Laboratory];\n if (this.isAdminOrSuperAdminFlag) {\n areaMenus.unshift(AreaMenu.Admin);\n }\n const navigation = this._leftMenuService.getNavigation(\n areaMenus,\n this._workingLaboratoryService.laboratoryDemoModeFlag,\n this.isAdminOrSuperAdminFlag,\n this._workingLaboratoryService.laboratoryName\n );\n if (this.isAdminOrSuperAdminFlag) {\n this.buildAdminMenu(navigation);\n }\n\n this._fuseNavigationService.unregister('main');\n this._fuseNavigationService.register('main', navigation);\n if (customerCode && customerName) {\n this._notifyService.displayInformationMessagesNow(\n `Espace client ${customerCode} - ${customerName} n'est plus en cours d'exploration.`\n );\n }\n\n this._exploredUuidSubject.next(null);\n }\n\n public tryExploring(): void {\n this._customerCode = this._sessionStorageService.read('working_customer_code');\n this._customerGroupFlag = this._sessionStorageService.read('working_customer_group_flag');\n this._customerGroupName = this._sessionStorageService.read('working_customer_group_name');\n this._customerMemberFlag = this._sessionStorageService.read('working_customer_member_flag');\n this._customerName = this._sessionStorageService.read('working_customer_name');\n this._exploringFlag = this._sessionStorageService.read('working_customer_exploringFlag');\n this._tenantUuid = this._sessionStorageService.read('working_customer_uuid');\n\n if (\n this._customerCode &&\n this._exploringFlag !== null &&\n this._exploringFlag !== undefined &&\n this._customerGroupFlag !== null &&\n this._customerGroupFlag !== undefined &&\n this._customerMemberFlag !== null &&\n this._customerMemberFlag !== undefined &&\n this._customerName &&\n this._tenantUuid\n ) {\n this.exploreInternal(false);\n }\n }\n\n private buildAdminMenu(navigations: NavigationInterface[]): void {\n const laboratoryName = this._workingLaboratoryService.laboratoryName;\n const laboratoryCode = this._workingLaboratoryService.laboratoryCode;\n const laboratoryNavigationItem: NavigationInterface = navigations.find(\n (fuseNavigationItem: NavigationInterface) => fuseNavigationItem.id === 'laboratory-area'\n );\n laboratoryNavigationItem.translate = undefined;\n laboratoryNavigationItem.text = `${laboratoryCode} - ${laboratoryName}`;\n }\n\n private exploreInternal(notifyFlag: boolean): void {\n // Set navigation menu\n const areaMenus = [AreaMenu.Laboratory];\n if (this.isAdminOrSuperAdminFlag) {\n areaMenus.unshift(AreaMenu.Admin);\n }\n\n if (this.customerMemberFlag || !this._workingLaboratoryService.laboratoryRateAutoPublishFlag) {\n areaMenus.push(AreaMenu.CustomerMember);\n } else {\n areaMenus.push(AreaMenu.CustomerAndCustomerGroup);\n }\n\n const navigation: NavigationInterface[] = this._leftMenuService.getNavigation(\n areaMenus,\n this._workingLaboratoryService.laboratoryDemoModeFlag,\n this.isAdminOrSuperAdminFlag,\n this._workingLaboratoryService.laboratoryName\n );\n const navigationItem: NavigationInterface = navigation.find(\n (fuseNavigationItem: NavigationInterface) => fuseNavigationItem.id === 'customer-area'\n );\n navigationItem.translate = undefined;\n navigationItem.text = `${this.customerCode} - ${this._customerName}`;\n\n if (this.isAdminOrSuperAdminFlag) {\n this.buildAdminMenu(navigation);\n }\n\n this._fuseNavigationService.unregister('main');\n this._fuseNavigationService.register('main', navigation);\n\n if (notifyFlag) {\n this._notifyService.displayInformationMessagesNow(\n `Espace client ${this._customerCode} - ${this._customerName} en cours d'exploration.`\n );\n }\n\n this._exploredUuidSubject.next(this.tenantUuid);\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { StandardFilter } from 'app/shared/prothesis-base-api-filters/standard-filter';\nimport { VersionedViewModelBase } from 'app/shared/prothesis-base-api-view-models/versioned-view-model-base';\nimport { Observable } from 'rxjs';\nimport { CustomHttpParamEncoder } from '../customHttpParamEncoder';\n\nexport abstract class ReadServiceBase {\n public constructor(protected _httpClient: HttpClient, protected _actionPath: () => string, protected _apiUrl: string) {}\n\n protected get _actionUrl(): string {\n return `${this._apiUrl}${this._actionPath()}`;\n }\n\n public getAll(filter: TFilter, sort = '', page = 0, pageSize = 10): Observable {\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}`, { params: params });\n }\n\n public getById(uuid: string): Observable {\n return this._httpClient.get(`${this._actionUrl}${uuid}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationEnd, NavigationExtras, NavigationStart, Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RouterHistoryService {\n public navigationStartUrl: string;\n private _historyStack: string[] = [];\n private _regEx = new RegExp('^([^?]*).*$', 'gi');\n\n public constructor(private _router: Router) {}\n\n public get previousUrl(): string {\n if (this._historyStack.length === 0) {\n return null;\n } else {\n return this._historyStack[this._historyStack.length - 2];\n }\n }\n\n public goToPreviousUrl(defaultUrl: string, replaceUrlFlag: boolean): void {\n let extras: NavigationExtras;\n if (replaceUrlFlag) {\n extras = {\n replaceUrl: true,\n state: { replaceUrlFlag: true },\n };\n }\n\n if (this.previousUrl && !this.previousUrl?.startsWith('/url-switch') && !this.previousUrl?.startsWith('/u/')) {\n const url = this.previousUrl;\n this._historyStack.pop();\n this._router.navigateByUrl(url, extras);\n } else {\n this._router.navigate([defaultUrl], extras);\n }\n }\n\n public initialize(): void {\n this._router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n let historyStackPopedFlag = false;\n if (this._historyStack.length > 0) {\n const newRoute = event.url.replace(this._regEx, '$1');\n const lastRoute = this._historyStack[this._historyStack.length - 1].replace(this._regEx, '$1');\n if (lastRoute !== '' && newRoute === lastRoute) {\n this._historyStack.pop();\n historyStackPopedFlag = true;\n }\n }\n\n if (!historyStackPopedFlag && history.state.replaceUrlFlag) {\n this._historyStack.pop();\n historyStackPopedFlag = true;\n }\n this._historyStack.push(event.url);\n\n const maxNumberOfEntry = 10;\n if (this._historyStack.length > maxNumberOfEntry) {\n this._historyStack.splice(0, this._historyStack.length - maxNumberOfEntry);\n }\n }\n\n if (event instanceof NavigationStart) {\n this.navigationStartUrl = event.url;\n }\n });\n }\n\n public replaceUrl(nextState: any, nextPageTitle: string, nextURL: string): void {\n // replace url without reloading\n // https://www.30secondsofcode.org/articles/s/javascript-modify-url-without-reload\n window.history.replaceState(nextState, nextPageTitle, nextURL);\n\n // replace router history\n this._historyStack.pop();\n this._historyStack.push(nextURL);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Area } from '../../shared/enums/area.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SessionStorageService {\n /**\n * Deserialize the given json and return it. If the JSON parsing fails a friendly message is output to the console\n * @param json the json to deserialize\n * @return undefined if a serialization error occured or the deserialized json\n */\n public static deserializeJson(json: string): any {\n try {\n if (!json) {\n return undefined;\n }\n\n // 'null' is correctly handled by JSON.parse because null is part of the Json spec while undefined is not\n // cf. https://stackoverflow.com/questions/17648150/how-does-json-parse-manage-undefined\n\n const obj = JSON.parse(json);\n return obj;\n } catch (error) {\n console.warn('Unable to deserialize obj json. \\n', json, '\\n', error);\n return undefined;\n }\n }\n\n /**\n * Copy properties from the given json or from the session storage to dest.\n * If json is not null the copy is tried from the json and the result is stored to the session storage using the given key.\n * If json is null the copy is tried from the session storage using the given key.\n * @param dest the destination object\n * @param json a JSON of the same type as the destinationObj (may be null)\n * @param key\n * @return true if an object has been read from the session storage, else false.\n */\n public CopyPropertiesFromJsonAndWriteOrRead(dest: T, json: string, key: string): boolean {\n if (json) {\n const jsonObj = SessionStorageService.deserializeJson(json);\n SessionStorageService.copy(dest, jsonObj);\n this.write(key, dest);\n } else {\n const objFromSessionStorage = this.read(key);\n if (objFromSessionStorage) {\n SessionStorageService.copy(dest, objFromSessionStorage);\n return true;\n }\n }\n\n return false;\n }\n\n public read(key: string): any {\n const json = sessionStorage.getItem(key);\n return SessionStorageService.deserializeJson(json);\n }\n\n public removeItem(key: string): void {\n sessionStorage.removeItem(key);\n }\n\n public tryGetArea(key: string): Area {\n let area: Area;\n const strArea = this.read(key);\n if (strArea) {\n area = JSON.parse(strArea);\n }\n return area;\n }\n\n /**\n * Serialize an object to a json string and write it to the session storage\n * @param obj the obj to store to the session storage\n * @param key the key where the obj is stored to the session storage\n */\n public write(key: string, obj: any): void {\n try {\n const strValue = JSON.stringify(obj);\n sessionStorage.setItem(key, strValue);\n } catch (error) {\n console.error(`Unable to register obj. key = ${key} \\n`, error);\n }\n }\n\n /**\n * Copy an object to another object\n * @param dest the destination object\n * @param src the source object\n */\n private static copy(dest: T, src: any): void {\n for (const propName in src) {\n const hasPropertyFlag = Object.prototype.hasOwnProperty.call(src, propName);\n if (hasPropertyFlag) {\n try {\n dest[propName] = src[propName];\n } catch (error) {\n console.warn(error);\n }\n }\n }\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { TenantFilter } from 'app/shared/prothesis-base-api-filters/tenant-filter';\nimport { TenantViewModelBase } from 'app/shared/prothesis-base-api-view-models/tenant-view-model-base';\nimport { Observable } from 'rxjs';\nimport { CustomHttpParamEncoder } from '../customHttpParamEncoder';\nimport { CrudServiceBase } from './crud-service-base';\nimport { WorkingTenantServiceInterface } from './working-tenant-service.interface';\n\nexport abstract class TenantCrudServiceBase<\n TViewModel extends TenantViewModelBase,\n TIndexViewModel,\n TFilter extends TenantFilter\n> extends CrudServiceBase {\n public constructor(\n protected _httpClient: HttpClient,\n protected _servicePath: string,\n protected _apiUrl: string,\n protected _workingLaboratoryService: WorkingTenantServiceInterface\n ) {\n super(\n _httpClient,\n () => `${this._workingLaboratoryService.tenantBasePath}/${this._workingLaboratoryService.tenantUuid}${_servicePath}`,\n _apiUrl\n );\n }\n\n public addQuiet(modelToAdd: TViewModel): Observable {\n this.setTenantUuid(modelToAdd);\n return this._httpClient.post(`${this._actionUrl}Quiet`, JSON.stringify(modelToAdd));\n }\n\n public any(filter: TFilter): Observable {\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() }).set('filter', JSON.stringify(filter));\n return this._httpClient.get(`${this._actionUrl}Any`, { params: params });\n }\n\n public getAll(filter: TFilter, sort = '', page = 0, pageSize = 10): Observable {\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n return this._httpClient.get(`${this._actionUrl}`, { params: params });\n }\n\n protected setTenantUuid(modelToAdd: TViewModel): void {\n // Nothing to do if the input is null or undefined\n if (!modelToAdd) {\n return;\n }\n\n if (modelToAdd instanceof TenantViewModelBase) {\n modelToAdd.tenantUuid = this._workingLaboratoryService.tenantUuid;\n }\n\n Object.keys(modelToAdd).forEach((key) => {\n // Ignore primitive types (string, number, boolean, etc...), null and undefined\n // typeof(null) returns 'object'\n // typeof(undefined) returns 'undefined'\n if (typeof modelToAdd[key] === 'object') {\n this.setTenantUuid(modelToAdd[key]);\n }\n });\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { TenantFilter } from 'app/shared/prothesis-base-api-filters/tenant-filter';\nimport { TenantViewModelBase } from 'app/shared/prothesis-base-api-view-models/tenant-view-model-base';\nimport { Observable } from 'rxjs';\nimport { CustomHttpParamEncoder } from '../customHttpParamEncoder';\nimport { TenantCrudServiceBase } from './tenant-crud-service-base';\nimport { WorkingTenantServiceInterface } from './working-tenant-service.interface';\n\nexport abstract class TenantCrudSummaryServiceBase<\n TViewModel extends TenantViewModelBase,\n TIndexViewModel,\n TSummaryIndexViewModel,\n TFilter extends TenantFilter\n> extends TenantCrudServiceBase {\n public constructor(\n protected _httpClient: HttpClient,\n protected _servicePath: string,\n protected _apiUrl: string,\n protected _workingLaboratoryService: WorkingTenantServiceInterface\n ) {\n super(_httpClient, _servicePath, _apiUrl, _workingLaboratoryService);\n }\n\n public getAllSummary(filter: TFilter, sort = '', page = 0, pageSize = 10): Observable {\n filter.tenantUuid = `${this._workingLaboratoryService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n return this._httpClient.get(`${this._actionUrl}Summary`, { params: params });\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { TenantFilter } from 'app/shared/prothesis-base-api-filters/tenant-filter';\nimport { TenantViewModelBase } from 'app/shared/prothesis-base-api-view-models/tenant-view-model-base';\nimport { Observable } from 'rxjs';\nimport { CustomHttpParamEncoder } from '../customHttpParamEncoder';\nimport { WorkingCustomerService } from './prothesis-customer-api/working-customer.service';\nimport { ReadServiceBase } from './read-service-base';\n\nexport abstract class TenantReadServiceBase<\n TViewModel extends TenantViewModelBase,\n TIndexViewModel,\n TFilter extends TenantFilter\n> extends ReadServiceBase {\n public constructor(\n protected _httpClient: HttpClient,\n protected _servicePath: string,\n protected _apiUrl: string,\n protected _workingCustomerService: WorkingCustomerService\n ) {\n super(\n _httpClient,\n () => `${this._workingCustomerService.tenantBasePath}/${this._workingCustomerService.tenantUuid}${_servicePath}`,\n _apiUrl\n );\n }\n\n public any(filter: TFilter): Observable {\n filter.tenantUuid = `${this._workingCustomerService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() }).set('filter', JSON.stringify(filter));\n return this._httpClient.get(`${this._actionUrl}Any`, { params: params });\n }\n\n public getAll(filter: TFilter, sort = '', page = 0, pageSize = 10): Observable {\n filter.tenantUuid = `${this._workingCustomerService.tenantUuid}`;\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n return this._httpClient.get(`${this._actionUrl}`, { params: params });\n }\n\n protected setTenantUuid(modelToAdd: TViewModel): void {\n // Nothing to do if the input is null or undefined\n if (!modelToAdd) {\n return;\n }\n\n if (modelToAdd instanceof TenantViewModelBase) {\n modelToAdd.tenantUuid = this._workingCustomerService.tenantUuid;\n }\n\n Object.keys(modelToAdd).forEach((key) => {\n // Ignore primitive types (string, number, boolean, etc...), null and undefined\n // typeof(null) returns 'object'\n // typeof(undefined) returns 'undefined'\n if (typeof modelToAdd[key] === 'object') {\n this.setTenantUuid(modelToAdd[key]);\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as moment from 'moment-timezone';\nimport { TimeZoneSingleton } from './prothesis-api/time-zone-singleton';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimeZoneService {\n public static addTime(date: moment.Moment, addDays = 0, addMonths = 0, addYears = 0, addMinutes = 0): moment.Moment {\n if (!date) {\n return null;\n }\n\n const result = date.clone();\n\n if (addDays !== 0) {\n result.add(addDays, 'days');\n }\n\n if (addMonths !== 0) {\n result.add(addMonths, 'months');\n }\n\n if (addYears !== 0) {\n result.add(addYears, 'years');\n }\n\n if (addMinutes !== 0) {\n result.add(addMinutes, 'minutes');\n }\n\n return result;\n }\n\n public static adminDateExpiredFlag(date: moment.Moment): boolean {\n return this.createMomentInAdminTimeZone() >= date;\n }\n\n public static adminDiffDaysBetweenNow(date: moment.Moment): number {\n const diff = this.diffDaysBetweenTwoMoments(date, this.createMomentInAdminTimeZone());\n return Math.abs(diff);\n }\n\n public static createMomentDateTimeInLaboratoryTimeZone(): moment.Moment {\n const timeZone = TimeZoneSingleton.getInstance().laboratoryTimeZone;\n if (!timeZone) {\n return null;\n }\n\n const newDate = moment().tz(timeZone);\n return newDate;\n }\n\n public static createMomentInAdminTimeZone(date: number = null, month: number = null, year: number = null): moment.Moment {\n const newDate = this.nowInAdminTimeZone();\n return this._configureDate(newDate, date, month, year);\n }\n\n public static createMomentInLaboratoryTimeZone(date: number = null, month: number = null, year: number = null): moment.Moment {\n const timeZone = TimeZoneSingleton.getInstance().laboratoryTimeZone;\n if (!timeZone) {\n return null;\n }\n\n const newDate = moment().tz(timeZone);\n return this._configureDate(newDate, date, month, year);\n }\n\n public static createMomentInLaboratoryTimeZoneToISOString(date: number = null, month: number = null, year: number = null): string {\n const laboratoryTimeZone = TimeZoneSingleton.getInstance().laboratoryTimeZone;\n if (!laboratoryTimeZone) {\n return null;\n }\n return this.createMomentInLaboratoryTimeZone(date, month, year).toISOString();\n }\n\n public static dateExpiredFlag(date: moment.Moment): boolean {\n return this.createMomentInLaboratoryTimeZone() >= date;\n }\n\n public static diffDaysBetweenNow(date: moment.Moment): number {\n const diff = this.diffDaysBetweenTwoMoments(date, this.createMomentInLaboratoryTimeZone());\n return Math.abs(diff);\n }\n\n public static diffDaysBetweenTwoMoments(date1: moment.Moment, date2: moment.Moment): number {\n if (!date1 || !date2) {\n return undefined;\n }\n\n const diff = date1.startOf('day').diff(date2.startOf('day'), 'days');\n return Math.abs(diff);\n }\n\n public static nowInAdminTimeZone(): moment.Moment {\n const timeZone = TimeZoneSingleton.getInstance().adminTimeZone;\n return moment().tz(timeZone);\n }\n\n public static offset(date: moment.Moment): string {\n return date.format('ZZ');\n }\n\n public static toISOString(date: moment.Moment): string {\n if (!date) {\n return null;\n }\n if (!moment.isMoment(date)) {\n return date;\n }\n\n return date.toISOString();\n }\n\n public static toMomentInAdminTimeZone(date: string): moment.Moment {\n if (!date) {\n return null;\n }\n\n return moment(date).tz(TimeZoneSingleton.getInstance().adminTimeZone);\n }\n\n public static toMomentInLaboratoryTimeZone(date: string): moment.Moment {\n if (!date) {\n return null;\n }\n\n return moment(date).tz(TimeZoneSingleton.getInstance().laboratoryTimeZone);\n }\n\n private static _configureDate(newDate: moment.Moment, date: number = null, month: number = null, year: number = null): moment.Moment {\n if (year) {\n newDate.set('year', year);\n }\n\n if (month || month === 0) {\n newDate.set('month', month);\n }\n\n if (date) {\n newDate.set('date', date);\n }\n\n newDate.startOf('day');\n\n return newDate;\n }\n}\n","import { Component, HostBinding, ViewChild } from '@angular/core';\nimport { NotificationSidebarComponent } from './notification-sidebar/notification-sidebar.component';\n\n@Component({\n selector: 'app-sidebar',\n styleUrls: ['./sidebar.component.scss'],\n templateUrl: './sidebar.component.html',\n})\nexport class SidebarComponent {\n @HostBinding('class.bar-closed') public barClosed: boolean;\n @ViewChild('_notificationSidebarComponent') private _notificationSidebarComponent: NotificationSidebarComponent;\n public static key = 'rightSidebar';\n public title: string;\n\n public constructor() {\n this.barClosed = true;\n }\n\n public afterClosedHandler(): void {\n this._notificationSidebarComponent.markNotificationsAsRead();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public afterOpenedHandler(): void {}\n}\n","
\n \n
\n","import { CreditFilter } from 'app/shared/prothesis-customer-api-filters/credit-filter';\nimport { InvoiceFilter } from 'app/shared/prothesis-customer-api-filters/invoice-filter';\nimport { ProFormaFilter } from 'app/shared/prothesis-customer-api-filters/pro-forma-filter';\nimport { AdvancedFilterPanelModel } from '../models/advanced-filter-panel-model';\n\nexport class AdvancedFilterPanelModelHelper {\n public static countValuesOfAdvancedCreditFilter(advancedFilter: AdvancedFilterPanelModel): number {\n let counter = 0;\n\n if (advancedFilter.creditCancelledDisplayChoice !== 3) {\n counter++;\n }\n\n if (advancedFilter.creditPaidFlagDisplayChoice !== 1) {\n counter++;\n }\n\n if (advancedFilter.creditTypeDisplayChoice !== 1) {\n counter++;\n }\n\n counter = advancedFilter.invoiceNumber ? counter + 1 : counter;\n\n return counter;\n }\n\n public static countValuesOfAdvancedInvoiceFilter(advancedFilter: AdvancedFilterPanelModel): number {\n let counter = 0;\n\n if (advancedFilter.invoiceCancelledDisplayChoice !== 3) {\n counter++;\n }\n\n if (advancedFilter.invoicePaymentDisplayChoice !== 1) {\n counter++;\n }\n\n if (advancedFilter.invoiceTypeDisplayChoice !== 1) {\n counter++;\n }\n\n counter = advancedFilter.canceledCreditNumber ? counter + 1 : counter;\n\n return counter;\n }\n\n public static fromCreditFilter(creditFilter: CreditFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n\n // Determines credit cancelled display\n if (!creditFilter.canceledFlag) {\n advancedFilterPanel.creditCancelledDisplayChoice = 1;\n }\n if (creditFilter.canceledFlag === true) {\n advancedFilterPanel.creditCancelledDisplayChoice = 2;\n }\n if (creditFilter.canceledFlag === false) {\n advancedFilterPanel.creditCancelledDisplayChoice = 3;\n }\n\n // Determines credit paidFlag display\n if (!creditFilter.paidFlag) {\n advancedFilterPanel.creditPaidFlagDisplayChoice = 1;\n }\n if (creditFilter.paidFlag === true) {\n advancedFilterPanel.creditPaidFlagDisplayChoice = 3;\n }\n if (creditFilter.paidFlag === false) {\n advancedFilterPanel.creditPaidFlagDisplayChoice = 2;\n }\n\n // Determines credit type display\n if (!creditFilter.creditFreeLineExistenceFlag) {\n advancedFilterPanel.creditTypeDisplayChoice = 1;\n }\n if (creditFilter.creditFreeLineExistenceFlag === true) {\n advancedFilterPanel.creditTypeDisplayChoice = 3;\n }\n if (creditFilter.creditFreeLineExistenceFlag === false) {\n advancedFilterPanel.creditTypeDisplayChoice = 2;\n }\n\n advancedFilterPanel.invoiceNumber = creditFilter.invoiceNumber;\n\n return advancedFilterPanel;\n }\n\n public static fromInvoiceFilter(invoiceFilter: InvoiceFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n if (invoiceFilter) {\n // Determines invoice cancelled display\n if (!invoiceFilter.canceledFlag) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 1;\n }\n if (invoiceFilter.canceledFlag === true) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 2;\n }\n if (invoiceFilter.canceledFlag === false) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 3;\n }\n\n // Determines invoice payment display\n if (!invoiceFilter.paidFlag) {\n advancedFilterPanel.invoicePaymentDisplayChoice = 1;\n }\n if (invoiceFilter.paidFlag === true) {\n advancedFilterPanel.invoicePaymentDisplayChoice = 2;\n }\n if (invoiceFilter.paidFlag === false) {\n advancedFilterPanel.invoicePaymentDisplayChoice = 3;\n }\n\n // Determines invoice type display\n if (!invoiceFilter.invoiceFreeLineExistenceFlag) {\n advancedFilterPanel.invoiceTypeDisplayChoice = 1;\n }\n if (invoiceFilter.invoiceFreeLineExistenceFlag === true) {\n advancedFilterPanel.invoiceTypeDisplayChoice = 3;\n }\n if (invoiceFilter.invoiceFreeLineExistenceFlag === false) {\n advancedFilterPanel.invoiceTypeDisplayChoice = 2;\n }\n }\n\n advancedFilterPanel.canceledCreditNumber = invoiceFilter.canceledCreditNumber;\n\n return advancedFilterPanel;\n }\n\n public static resetValues(advancedFilter: AdvancedFilterPanelModel): AdvancedFilterPanelModel {\n advancedFilter.canceledCreditNumber = '';\n advancedFilter.creditCancelledDisplayChoice = 3;\n advancedFilter.creditPaidFlagDisplayChoice = 1;\n advancedFilter.creditTypeDisplayChoice = 1;\n advancedFilter.invoiceCancelledDisplayChoice = 3;\n advancedFilter.invoiceNumber = '';\n advancedFilter.invoicePaymentDisplayChoice = 1;\n advancedFilter.invoiceTypeDisplayChoice = 1;\n return advancedFilter;\n }\n\n public static toCreditFilter(advancedFilterPanel: AdvancedFilterPanelModel, creditFilter: CreditFilter): CreditFilter {\n // Display canceled credits\n if (advancedFilterPanel.creditCancelledDisplayChoice === 1) {\n creditFilter.canceledFlag = undefined;\n } else if (advancedFilterPanel.creditCancelledDisplayChoice === 2) {\n creditFilter.canceledFlag = true;\n } else if (advancedFilterPanel.creditCancelledDisplayChoice === 3) {\n creditFilter.canceledFlag = false;\n }\n\n // Display credit paidFlag\n if (advancedFilterPanel.creditPaidFlagDisplayChoice === 1) {\n creditFilter.paidFlag = undefined;\n } else if (advancedFilterPanel.creditPaidFlagDisplayChoice === 3) {\n creditFilter.paidFlag = true;\n } else if (advancedFilterPanel.creditPaidFlagDisplayChoice === 2) {\n creditFilter.paidFlag = false;\n }\n\n // Display credit types\n if (advancedFilterPanel.creditTypeDisplayChoice === 1) {\n creditFilter.creditFreeLineExistenceFlag = undefined;\n } else if (advancedFilterPanel.creditTypeDisplayChoice === 3) {\n creditFilter.creditFreeLineExistenceFlag = true;\n } else if (advancedFilterPanel.creditTypeDisplayChoice === 2) {\n creditFilter.creditFreeLineExistenceFlag = false;\n }\n\n creditFilter.invoiceNumber = advancedFilterPanel.invoiceNumber;\n\n return creditFilter;\n }\n\n public static toInvoiceFilter(advancedFilterPanel: AdvancedFilterPanelModel, invoiceFilter: InvoiceFilter): InvoiceFilter {\n // Display canceled invoices\n if (advancedFilterPanel.invoiceCancelledDisplayChoice === 1) {\n invoiceFilter.canceledFlag = undefined;\n } else if (advancedFilterPanel.invoiceCancelledDisplayChoice === 2) {\n invoiceFilter.canceledFlag = true;\n } else if (advancedFilterPanel.invoiceCancelledDisplayChoice === 3) {\n invoiceFilter.canceledFlag = false;\n }\n\n // Display paid invoices\n if (advancedFilterPanel.invoicePaymentDisplayChoice === 1) {\n invoiceFilter.paidFlag = undefined;\n } else if (advancedFilterPanel.invoicePaymentDisplayChoice === 2) {\n invoiceFilter.paidFlag = true;\n } else if (advancedFilterPanel.invoicePaymentDisplayChoice === 3) {\n invoiceFilter.paidFlag = false;\n }\n\n // Display invoice types\n if (advancedFilterPanel.invoiceTypeDisplayChoice === 1) {\n invoiceFilter.invoiceFreeLineExistenceFlag = undefined;\n } else if (advancedFilterPanel.invoiceTypeDisplayChoice === 3) {\n invoiceFilter.invoiceFreeLineExistenceFlag = true;\n } else if (advancedFilterPanel.invoiceTypeDisplayChoice === 2) {\n invoiceFilter.invoiceFreeLineExistenceFlag = false;\n }\n\n // Date filter\n invoiceFilter.canceledCreditNumber = advancedFilterPanel.canceledCreditNumber;\n\n return invoiceFilter;\n }\n\n public static toProFormaFilter(advancedFilterPanel: AdvancedFilterPanelModel, proFormaFilter: ProFormaFilter): ProFormaFilter {\n return proFormaFilter;\n }\n}\n","\n
\n
\n \n
\n
\n \n
\n \n \n \n 0 ? 'active-filter' : 'no-filter'\">\n {{ textButtonCustomerFilter }}\n \n \n\n \n clear\n \n\n \n 0 ? 'active-filter' : 'no-filter'\">\n {{ textButtonAdvancedFilter }}\n \n \n\n \n clear\n \n \n
\n
\n
\n \n \n
\n
\n
\n \n \n \n highlight_off\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, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MatButtonToggle, MatButtonToggleChange, MatButtonToggleGroup } from '@angular/material/button-toggle';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { fuseAnimations } from '@fuse/animations';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { CorpTitleService } from 'app/core/services/corp-title.service';\nimport { FocusService } from 'app/core/services/focus.service';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { LocalStorageService } from 'app/core/services/local-storage.service';\nimport { NotifyService } from 'app/core/services/notify/notify.service';\nimport { PeriodSearchService } from 'app/core/services/period-search.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { CustomerService } from 'app/core/services/prothesis-customer-api/customer.service';\nimport { WorkingCustomerService } from 'app/core/services/prothesis-customer-api/working-customer.service';\nimport { SessionStorageService } from 'app/core/services/session-storage.service';\nimport { RouterLinkModel } from 'app/shared/common-models/models/routerLink.model';\nimport { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { CustomerFilterPanelComponent } from 'app/shared/components/filter-panels/customer-filter-panel/customer-filter-panel.component';\nimport { CustomerFilterPanelModel } from 'app/shared/components/filter-panels/customer-filter-panel/models/customer-filter-panel.model';\nimport { GridFilterModel } from 'app/shared/components/grid-filter/grid-filter-model';\nimport { GridFilterComponent } from 'app/shared/components/grid-filter/grid-filter.component';\nimport { GridSortComponent } from 'app/shared/components/grid-sort/grid-sort.component';\nimport { GridSortModel } from 'app/shared/components/grid-sort/grid-sort.model';\nimport { CustomerAreaPeriodSearchModelHelper } from 'app/shared/components/period-search/model-helpers/customer-area-period-search-model-helper';\nimport { PeriodSearchInfoModel } from 'app/shared/components/period-search/models/period-search-info-model';\nimport { PeriodSearchModel } from 'app/shared/components/period-search/models/period-search-model';\nimport { CustomerModel } from 'app/shared/components/pickers/customer-picker/models/customer.model';\nimport { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { PeriodSearchCreditDateTypeHelper } from 'app/shared/enum-helpers/period-search-credit-date-type.enum.helper';\nimport { PeriodSearchInvoiceDateTypeHelper } from 'app/shared/enum-helpers/period-search-invoice-date-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { Area } from 'app/shared/enums/area.enum';\nimport { PeriodSearchCreditDateType } from 'app/shared/enums/period-search-credit-date-type.enum';\nimport { PeriodSearchInvoiceDateType } from 'app/shared/enums/period-search-invoice-date-type.enum';\nimport { CreditFilter } from 'app/shared/prothesis-customer-api-filters/credit-filter';\nimport { InvoiceFilter } from 'app/shared/prothesis-customer-api-filters/invoice-filter';\nimport { ProFormaFilter } from 'app/shared/prothesis-customer-api-filters/pro-forma-filter';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { InvoiceAdvancedFilterComponent } from './filter/invoice-advanced-filter/invoice-advanced-filter.component';\nimport { AdvancedFilterPanelModelHelper } from './model-helpers/advanced-filter-panel-model.helper';\nimport { AdvancedFilterPanelModel } from './models/advanced-filter-panel-model';\nimport { CreditState } from './state/credit-state';\nimport { InvoiceState } from './state/invoice-state';\nimport { ProFormaState } from './state/pro-forma-state';\n\n@Component({\n animations: fuseAnimations,\n selector: 'app-invoice',\n styleUrls: ['./invoice.component.scss'],\n templateUrl: './invoice.component.html',\n})\nexport class InvoiceComponent implements OnDestroy, OnInit {\n @ViewChild('_customerFilterPanelComponent') private _customerFilterPanelComponent: CustomerFilterPanelComponent;\n @ViewChild('_gridFilterComponent', { static: true }) private _gridFilterComponent: GridFilterComponent;\n @ViewChild('_gridSortComponent', { static: true }) private _gridSortComponent: GridSortComponent;\n @ViewChild('_invoiceAdvancedFilterComponent') private _invoiceAdvancedFilterComponent: InvoiceAdvancedFilterComponent;\n @ViewChild('_matButtonToggleAdvancedFilter') private _matButtonToggleAdvancedFilter: MatButtonToggle;\n @ViewChild('_matButtonToggleCustomerFilter') private _matButtonToggleCustomerFilter: MatButtonToggle;\n @ViewChild('_matButtonToggleGroupFilter', { static: true }) private _matButtonToggleGroupFilter: MatButtonToggleGroup;\n public static strCreditKeyLocalStoragePageSize = 'customer-area-credit-page-size';\n public static strCreditKeyLocalStorageSort = 'customer-area-credit-sort-favorite';\n public static strCreditState = 'customer-area-credit-state';\n public static strCurrentTabLink = 'customer-area-invoice-current-tab-link';\n public static strInvoiceKeyLocalStoragePageSize = 'customer-area-invoice-page-size';\n public static strInvoiceKeyLocalStorageSort = 'customer-area-invoice-sort-favorite';\n public static strInvoiceState = 'customer-area-invoice-state';\n public static strPeriodSearchTypeFavorite = 'customer-area-invoice-period-search-favorite';\n public static strProFormaKeyLocalStoragePageSize = 'customer-area-pro-forma-page-size';\n public static strProFormaKeyLocalStorageSort = 'customer-area-pro-forma-sort-favorite';\n public static strProFormaState = 'customer-area-pro-forma-state';\n public activeGridSortModel: GridSortModel[];\n public activeLink: RouterLinkModel;\n public advancedFilterCounter: number;\n public advancedFilterPanel: AdvancedFilterPanelModel;\n public area = Area.Customer;\n public constTextButtonAdvancedFilter = 'Filtres avancés';\n public constTextButtonCustomerFilter = 'Tous les clients';\n public creditState: CreditState = new CreditState();\n public customerFilterCounter: number;\n public customerFilterPanel: CustomerFilterPanelModel;\n public customerFilterUuid: string;\n public demoModeFlag: boolean;\n public filterSetToDefaultValueFlag = true;\n public gridFilter: GridFilterModel;\n public gridSortModelCredit: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'number', label: 'Par numéro de facture' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public gridSortModelInvoice: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'number', label: 'Par numéro de facture' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public gridSortModelProForma: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public groupTitle: string;\n public invoiceState: InvoiceState = new InvoiceState();\n public navLinks: RouterLinkModel[];\n public pageTitle = 'Factures';\n public periodSearch: PeriodSearchModel;\n public periodSearchCreditDateTypeDefault: string = PeriodSearchCreditDateType.CreditDate.toString();\n public periodSearchDateTypeOptions: ComboModel[];\n public periodSearchInvoiceDateTypeDefault: string = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n public periodSearchProFormaDateTypeDefault: string = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n public periodSearchTypeDefault = PeriodSearchType.Year.toString();\n public periodSearchTypeFavorite: string;\n public periodSearchTypeOptions: ComboModel[];\n public periodSearchTypeSetToDefaultValueFlag = true;\n public proFormaState: ProFormaState = new ProFormaState();\n public showEraseAdvancedFilterFlag = false;\n public showEraseCustomerFilterFlag = false;\n public sortSetToDefaultValueFlag = true;\n public tabIndexCredit = 2;\n public tabIndexInvoice = 1;\n public tabIndexProForma = 0;\n public textButtonAdvancedFilter = 'Filtres avancés';\n public textButtonCustomerFilter = 'Tous les clients';\n private _routerOutletLoadedSubscription: Subscription;\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n public workingCustomerService: WorkingCustomerService,\n private _activatedRoute: ActivatedRoute,\n private _authService: AuthService,\n private _corpTitleService: CorpTitleService,\n private _customerService: CustomerService,\n private _focusService: FocusService,\n private _highlightService: HighlightService,\n private _localStorageService: LocalStorageService,\n private _notifyService: NotifyService,\n private _periodSearchService: PeriodSearchService,\n private _router: Router,\n private _sessionStorageService: SessionStorageService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {\n this.groupTitle = `Laboratoire ${this._workingLaboratoryService.laboratoryName}`;\n this._corpTitleService.setTitle(`${this.pageTitle} - ${this.groupTitle}`);\n\n this.navLinks = [\n new RouterLinkModel(\n this.tabIndexProForma,\n 'Factures pro forma',\n './pro-forma',\n this.gridSortModelProForma,\n 'tab-link-invoice-pro-forma'\n ),\n new RouterLinkModel(this.tabIndexInvoice, 'Factures définitives', './', this.gridSortModelInvoice, 'tab-link-invoice-final'),\n new RouterLinkModel(this.tabIndexCredit, `Factures d'avoir`, './credit', this.gridSortModelCredit, 'tab-link-invoice-credit'),\n ];\n }\n\n public advancedFilterAppliedHandler(advancedFilterPanel: AdvancedFilterPanelModel): void {\n this._initAdvancedFilter(advancedFilterPanel);\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = true;\n this._matButtonToggleAdvancedFilter.focus();\n\n // Reset Toggle and page index\n this._matButtonToggleGroupFilter.value = null;\n this._resetPageIndex();\n\n // refresh page\n this._saveStateAndSelfNavigate();\n }\n\n public customerFilterAppliedHandler(customerFilterPanel: CustomerFilterPanelModel): void {\n this.customerFilterPanel = customerFilterPanel;\n\n // copy the customer filter for all state\n this.customerFilterUuid = customerFilterPanel?.customer ? customerFilterPanel.customer.uuid : null;\n\n this.invoiceState.invoiceFilter.customerUuids = this.customerFilterUuid ? [this.customerFilterUuid] : null;\n this.creditState.creditFilter.customerUuids = this.customerFilterUuid ? [this.customerFilterUuid] : null;\n this.proFormaState.proFormaFilter.customerUuids = this.customerFilterUuid ? [this.customerFilterUuid] : null;\n this.proFormaState.proFormaFilter.customerMemberUuidsIncludedFlag = true;\n\n // update label of advanced filter button\n this._updateCustomerFilterToggleButtonLabel();\n\n // Reset Toggle and page index\n this._matButtonToggleGroupFilter.value = null;\n this._focusService.focusOnCustomerPanelToggleButtonFlag = true;\n this._focusService.setTimeoutOutsideAngular(() => {\n this._matButtonToggleCustomerFilter.focus();\n });\n this._resetPageIndex();\n\n // refresh page\n this._saveStateAndSelfNavigate();\n }\n\n public eraseAdvancedFilter(): void {\n AdvancedFilterPanelModelHelper.resetValues(this.advancedFilterPanel);\n this.advancedFilterAppliedHandler(this.advancedFilterPanel);\n }\n\n public eraseAllFiltersClickedHandler(): void {\n this.creditState.resetFilter();\n this.creditState.creditFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.creditState.creditFilter.periodSearchDateType = Number(this.periodSearchCreditDateTypeDefault);\n\n this.invoiceState.resetFilter();\n this.invoiceState.invoiceFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.invoiceState.invoiceFilter.periodSearchDateType = Number(this.periodSearchInvoiceDateTypeDefault);\n\n this.proFormaState.resetFilter();\n this.proFormaState.proFormaFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.proFormaState.proFormaFilter.periodSearchDateType = Number(this.periodSearchProFormaDateTypeDefault);\n\n this._saveStateAndSelfNavigate();\n }\n\n public eraseCustomerFilter(): void {\n this.customerFilterAppliedHandler(null);\n }\n\n @HostListener('window:keydown.PageDown', ['$event'])\n public keydownPageDown($event: KeyboardEvent): void {\n $event.preventDefault();\n }\n\n @HostListener('window:keydown.Tab', ['$event'])\n public keydownTab($event: KeyboardEvent): void {\n this._focusService.setFocusOnGridFilter($event, this._gridFilterComponent);\n }\n\n @HostListener('window:keyup.PageDown', ['$event'])\n public keyupPageDown(): void {\n let nextIndex = this.activeLink.index - 1;\n if (nextIndex < 0) {\n nextIndex = this.navLinks.length - 1;\n }\n this.tabClicked(this.navLinks[nextIndex]);\n }\n\n @HostListener('window:keyup.PageUp', ['$event'])\n public keyupPageUp(): void {\n const nextIndex = (this.activeLink.index + 1) % this.navLinks.length;\n this.tabClicked(this.navLinks[nextIndex]);\n }\n\n public ngOnDestroy(): void {\n this._routerOutletLoadedSubscription.unsubscribe();\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n // Set nav tab\n if (this._router.url.startsWith('/customer-area/invoice/pro-forma')) {\n this.activeLink = this.navLinks[this.tabIndexProForma];\n } else if (this._router.url.startsWith('/customer-area/invoice/credit')) {\n this.activeLink = this.navLinks[this.tabIndexCredit];\n } else {\n this.activeLink = this.navLinks[this.tabIndexInvoice];\n }\n\n this._periodSearchService.periodSearchInfoSubject$\n .pipe(takeUntil(this._unsubscribeAll$))\n .subscribe((periodSearchInfo: PeriodSearchInfoModel) => {\n this._initPeriodSearchFilter(this.periodSearch);\n this.periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (this._isCreditContext()) {\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n });\n\n this._activatedRoute.queryParams.pipe(takeUntil(this._unsubscribeAll$)).subscribe((params) => {\n this._buildPeriodSearchOptions();\n this._loadState(params['pstate']);\n this._initAdvancedFilter(this.advancedFilterPanel);\n this._initCustomerContext();\n this._initGridSortContext();\n this._initPeriodSearchFilter(this.periodSearch);\n this._initTextFilterContext();\n });\n\n this._authService.areaConfiguredFlag$.pipe(takeUntil(this._unsubscribeAll$)).subscribe(() => {\n this.demoModeFlag = this._workingLaboratoryService.laboratoryDemoModeFlag;\n });\n\n this._routerOutletLoadedSubscription = this._focusService.routerOutletLoadedHandler().subscribe(() => {\n if (this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag) {\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = false;\n this._matButtonToggleGroupFilter.value = null;\n this._matButtonToggleAdvancedFilter.focus();\n } else if (this._focusService.focusOnCustomerPanelToggleButtonFlag) {\n this._focusService.focusOnCustomerPanelToggleButtonFlag = false;\n this._matButtonToggleGroupFilter.value = null;\n this._matButtonToggleCustomerFilter.focus();\n } else {\n this.setFocus();\n }\n });\n }\n\n public periodSearchSubmitEventHandler(periodSearch: PeriodSearchModel): void {\n this.creditState.creditFilter = CustomerAreaPeriodSearchModelHelper.toCreditFilter(\n this.creditState.creditFilter,\n periodSearch,\n this._isCreditContext()\n );\n this.invoiceState.invoiceFilter = CustomerAreaPeriodSearchModelHelper.toInvoiceFilter(\n this.invoiceState.invoiceFilter,\n periodSearch,\n this._isInvoiceContext()\n );\n this.proFormaState.proFormaFilter = CustomerAreaPeriodSearchModelHelper.toProFormaFilter(\n this.proFormaState.proFormaFilter,\n periodSearch,\n this._isProFormaContext()\n );\n\n this._resetPageIndex();\n this._saveStateAndSelfNavigate(true);\n }\n\n public saveFavoriteClickedHandler(): void {\n // Save into the local storage the new favorites\n const sort = new Array();\n if (this._isCreditContext()) {\n this._saveCurrentState(sort, this.creditState, InvoiceComponent.strCreditKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.creditState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this._saveCurrentState(sort, this.invoiceState, InvoiceComponent.strInvoiceKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this._saveCurrentState(sort, this.proFormaState, InvoiceComponent.strProFormaKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._notifyService.displayInformationMessagesNow('Tris favoris mémorisés');\n }\n\n public saveFavoritePeriodSearchTypeEventHandler(periodSearchTypeKey: string): void {\n // Save into the local storage the new favorites\n this.periodSearchTypeFavorite = periodSearchTypeKey;\n\n let newPeriodSearchType = periodSearchTypeKey;\n if (newPeriodSearchType === '-1') {\n newPeriodSearchType = null;\n }\n\n // Save favorite period search type current\n this._localStorageService.write(InvoiceComponent.strPeriodSearchTypeFavorite, newPeriodSearchType);\n\n // Update current favorite\n this.periodSearchTypeSetToDefaultValueFlag = this.periodSearch.periodSearchType === this.periodSearchTypeFavorite;\n\n if (this._isCreditContext()) {\n this.sortSetToDefaultValueFlag = this.creditState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._notifyService.displayInformationMessagesNow(`Type de période favori mémorisé`);\n }\n\n public setFocus(): void {\n this._focusService.setTimeoutOutsideAngular(() => {\n if (this._matButtonToggleGroupFilter.value === 'advancedFilter') {\n this._invoiceAdvancedFilterComponent?.setFocus();\n } else if (this._matButtonToggleGroupFilter.value === 'customerFilter') {\n this._customerFilterPanelComponent?.setFocus();\n }\n });\n }\n\n public sortActiveChanged(newSortActive: string): void {\n if (this._isCreditContext()) {\n this.creditState.sortActive = newSortActive;\n } else if (this._isInvoiceContext()) {\n this.invoiceState.sortActive = newSortActive;\n } else if (this._isProFormaContext()) {\n this.proFormaState.sortActive = newSortActive;\n }\n\n this._saveStateAndSelfNavigate(true);\n }\n\n public sortDirectionChanged(newSortDirection: string): void {\n if (this._isCreditContext()) {\n this.creditState.sortDirection = newSortDirection;\n } else if (this._isInvoiceContext()) {\n this.invoiceState.sortDirection = newSortDirection;\n } else if (this._isProFormaContext()) {\n this.proFormaState.sortDirection = newSortDirection;\n }\n\n this._saveStateAndSelfNavigate(true);\n }\n\n public tabClicked(navLink: RouterLinkModel): void {\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = false;\n this._focusService.focusOnCustomerPanelToggleButtonFlag = false;\n this.activeLink = navLink;\n this._localStorageService.write(InvoiceComponent.strCurrentTabLink, this.activeLink.link.replace('./', ''));\n this._buildPeriodSearchOptions();\n this._loadState(undefined);\n this._initAdvancedFilter(this.advancedFilterPanel);\n this._initCustomerContext();\n this._initGridSortContext();\n this._initPeriodSearchFilter(this.periodSearch);\n this._initTextFilterContext();\n }\n\n public textFilterChangedEventHandler(newTextFilter: string): void {\n this._highlightService.compileFilter(newTextFilter);\n\n this.invoiceState.invoiceFilter.textFilter = newTextFilter;\n this.creditState.creditFilter.textFilter = newTextFilter;\n this.proFormaState.proFormaFilter.textFilter = newTextFilter;\n\n this._resetPageIndex();\n\n this._saveStateAndSelfNavigate();\n }\n\n public toggleChange($event: MatButtonToggleChange): void {\n const toggle = $event.source;\n if (toggle) {\n const group = toggle.buttonToggleGroup;\n if ($event.value.some((item) => item === toggle.value)) {\n group.value = [toggle.value];\n }\n }\n }\n\n private _buildPeriodSearchOptions(): void {\n this.periodSearchTypeOptions = PeriodSearchTypeHelper.buildOptions();\n if (this._isCreditContext()) {\n this.periodSearchDateTypeOptions = PeriodSearchCreditDateTypeHelper.buildOptions();\n } else if (this._isInvoiceContext()) {\n this.periodSearchDateTypeOptions = PeriodSearchInvoiceDateTypeHelper.buildOptions();\n } else if (this._isProFormaContext()) {\n this.periodSearchDateTypeOptions = PeriodSearchInvoiceDateTypeHelper.buildOptions();\n }\n }\n\n private _initAdvancedFilter(advancedFilterPanel: AdvancedFilterPanelModel): void {\n this.advancedFilterPanel = advancedFilterPanel;\n if (this._isCreditContext()) {\n this.creditState.creditFilter = AdvancedFilterPanelModelHelper.toCreditFilter(advancedFilterPanel, this.creditState.creditFilter);\n } else if (this._isInvoiceContext()) {\n this.invoiceState.invoiceFilter = AdvancedFilterPanelModelHelper.toInvoiceFilter(\n advancedFilterPanel,\n this.invoiceState.invoiceFilter\n );\n } else if (this._isProFormaContext()) {\n this.proFormaState.proFormaFilter = AdvancedFilterPanelModelHelper.toProFormaFilter(\n advancedFilterPanel,\n this.proFormaState.proFormaFilter\n );\n }\n this._updateAdvancedFilterToggleButtonLabel();\n }\n\n private _initCustomer(customerUuids: string[]): void {\n if (customerUuids && customerUuids.length > 0) {\n this._customerService.getById(customerUuids[0]).subscribe((res) => {\n this.customerFilterPanel = new CustomerFilterPanelModel();\n this.customerFilterPanel.customer = new CustomerModel();\n this.customerFilterPanel.customer.code = res.code;\n this.customerFilterPanel.customer.name = res.name;\n this.customerFilterPanel.customer.uuid = res.uuid;\n\n this._updateCustomerFilterToggleButtonLabel();\n });\n } else {\n this.customerFilterPanel = null;\n this._updateCustomerFilterToggleButtonLabel();\n }\n }\n\n private _initCustomerContext(): void {\n if (this._isCreditContext()) {\n if (this.creditState && this.creditState.creditFilter) {\n this._initCustomer(this.creditState.creditFilter.customerUuids);\n }\n }\n\n if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.invoiceFilter) {\n this._initCustomer(this.invoiceState.invoiceFilter.customerUuids);\n }\n }\n\n if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.proFormaFilter) {\n this._initCustomer(this.proFormaState.proFormaFilter.customerUuids);\n }\n }\n }\n\n private _initFavoriteContext(shouldForceSortFlag: boolean): void {\n if (this.creditState) {\n this._initFavoriteSortFromLocalStorage(InvoiceComponent.strCreditKeyLocalStorageSort, this.creditState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n InvoiceComponent.strPeriodSearchTypeFavorite,\n this.creditState.creditFilter,\n this.periodSearchCreditDateTypeDefault,\n shouldForceSortFlag\n );\n }\n if (this.invoiceState) {\n this._initFavoriteSortFromLocalStorage(InvoiceComponent.strInvoiceKeyLocalStorageSort, this.invoiceState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n InvoiceComponent.strPeriodSearchTypeFavorite,\n this.invoiceState.invoiceFilter,\n this.periodSearchInvoiceDateTypeDefault,\n shouldForceSortFlag\n );\n }\n if (this.proFormaState) {\n this._initFavoriteSortFromLocalStorage(InvoiceComponent.strProFormaKeyLocalStorageSort, this.proFormaState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n InvoiceComponent.strPeriodSearchTypeFavorite,\n this.proFormaState.proFormaFilter,\n this.periodSearchProFormaDateTypeDefault,\n shouldForceSortFlag\n );\n }\n }\n\n private _initFavoritePeriodSearchTypeFromLocalStorage(\n key: string,\n documentFilter: InvoiceFilter | ProFormaFilter | CreditFilter,\n periodSearchDateTypeDefault: string,\n shouldForceSortFlag: boolean\n ): void {\n const strFavoritePeriodSearchType = this._localStorageService?.read(key);\n if (!strFavoritePeriodSearchType) {\n // No favorites stored into the local storage\n this.periodSearchTypeFavorite = this.periodSearchTypeDefault;\n } else {\n this.periodSearchTypeFavorite = strFavoritePeriodSearchType;\n }\n // No session period search type\n if (!this.periodSearch?.periodSearchType || shouldForceSortFlag) {\n if (!this.periodSearch) {\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, periodSearchDateTypeDefault);\n } else {\n this.periodSearch.periodSearchType = this.periodSearchTypeFavorite;\n }\n\n documentFilter.periodSearchType = Number(this.periodSearch.periodSearchType);\n }\n\n this.periodSearchTypeSetToDefaultValueFlag = this.periodSearch?.periodSearchType === this.periodSearchTypeFavorite;\n }\n\n private _initFavoriteSortFromLocalStorage(key: string, state: PaginatedListState, shouldForceSortFlag: boolean): void {\n const sort = this._localStorageService.read(key);\n state.initSort(shouldForceSortFlag, sort);\n this.sortSetToDefaultValueFlag = state.isSortSetToDefaultValues();\n }\n\n private _initGridSort(state: PaginatedListState): void {\n if (this._gridSortComponent.sortActive !== state.sortActive) {\n this._gridSortComponent.sortActive = state.sortActive;\n }\n\n if (this._gridSortComponent.sortDirection !== state.sortDirection) {\n this._gridSortComponent.sortDirection = state.sortDirection;\n }\n\n if (this._gridSortComponent.sortFavorite !== state.sortFavorite) {\n this._gridSortComponent.sortFavorite = state.sortFavorite;\n }\n\n if (this._gridSortComponent.sortDirectionFavorite !== state.sortDirectionFavorite) {\n this._gridSortComponent.sortDirectionFavorite = state.sortDirectionFavorite;\n }\n }\n\n private _initGridSortContext(): void {\n if (this._isCreditContext()) {\n this._initGridSort(this.creditState);\n } else if (this._isInvoiceContext()) {\n this._initGridSort(this.invoiceState);\n } else if (this._isProFormaContext()) {\n this._initGridSort(this.proFormaState);\n }\n }\n\n private _initPeriodSearchFilter(periodSearch: PeriodSearchModel): void {\n if (this._isCreditContext()) {\n if (!periodSearch) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, this.periodSearchCreditDateTypeDefault);\n }\n if (this.creditState) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.fromCreditFilter(\n this.creditState.creditFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n if (this._isInvoiceContext()) {\n if (!periodSearch) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, this.periodSearchInvoiceDateTypeDefault);\n }\n if (this.invoiceState) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.fromInvoiceFilter(\n this.invoiceState.invoiceFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n if (this._isProFormaContext()) {\n if (!periodSearch) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, this.periodSearchProFormaDateTypeDefault);\n }\n if (this.proFormaState) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.fromProFormaFilter(\n this.proFormaState.proFormaFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n this.periodSearch = periodSearch;\n }\n\n private _initTextFilter(textFilter: string): void {\n this.gridFilter = new GridFilterModel(textFilter);\n this._highlightService.compileFilter(textFilter);\n }\n\n private _initTextFilterContext(): void {\n if (this._isCreditContext()) {\n if (this.creditState && this.creditState.creditFilter) {\n this._initTextFilter(this.creditState.creditFilter.textFilter);\n }\n }\n\n if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.invoiceFilter) {\n this._initTextFilter(this.invoiceState.invoiceFilter.textFilter);\n }\n }\n\n if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.proFormaFilter) {\n this._initTextFilter(this.proFormaState.proFormaFilter.textFilter);\n }\n }\n }\n\n private _isCreditContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexCredit].label;\n }\n\n private _isInvoiceContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexInvoice].label;\n }\n\n private _isProFormaContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexProForma].label;\n }\n\n private _loadCreditState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.creditState,\n stateUrl,\n InvoiceComponent.strCreditState\n );\n\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.creditState.creditFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromCreditFilter(this.creditState.creditFilter);\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.fromCreditFilter(\n this.creditState.creditFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadInvoiceState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.invoiceState,\n stateUrl,\n InvoiceComponent.strInvoiceState\n );\n\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.invoiceState.invoiceFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromInvoiceFilter(this.invoiceState.invoiceFilter);\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.fromInvoiceFilter(\n this.invoiceState.invoiceFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadProFormaState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.proFormaState,\n stateUrl,\n InvoiceComponent.strProFormaState\n );\n\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.proFormaState.proFormaFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.resetValues(new AdvancedFilterPanelModel());\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.fromProFormaFilter(\n this.proFormaState.proFormaFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadState(stateUrl: string): void {\n let shouldReloadFlag = true;\n this._initFavoriteContext(!stateUrl);\n\n if (this._isCreditContext()) {\n shouldReloadFlag = this._loadCreditState(stateUrl, shouldReloadFlag);\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.creditState.isSortSetToDefaultValues();\n this._synchronizeInvoiceStateFromCreditState();\n this._synchronizeProFormaStateFromCreditState();\n }\n\n if (this._isInvoiceContext()) {\n shouldReloadFlag = this._loadInvoiceState(stateUrl, shouldReloadFlag);\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this._synchronizeCreditStatefromInvoiceState();\n this._synchronizeProFormaStateFromInvoiceState();\n }\n\n if (this._isProFormaContext()) {\n shouldReloadFlag = this._loadProFormaState(stateUrl, shouldReloadFlag);\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this._synchronizeCreditStatefromProFormaState();\n this._synchronizeInvoiceStateFromProFormaState();\n }\n\n if (shouldReloadFlag) {\n this._selfNavigate(true);\n return;\n }\n }\n\n private _resetPageIndex(): void {\n if (this.creditState) {\n this.creditState.pageIndex = 0;\n }\n\n if (this.invoiceState) {\n this.invoiceState.pageIndex = 0;\n }\n\n if (this.proFormaState) {\n this.proFormaState.pageIndex = 0;\n }\n }\n\n private _saveCurrentState(sort: string[], state: PaginatedListState, strKeySortFavorite: string): void {\n sort.push(state.sortDirection, state.sortActive);\n this._localStorageService.write(strKeySortFavorite, sort);\n\n // Update current favorite into the gridsort\n state.updateFavoriteSortFromCurrentSort();\n PaginatedListState.setSortState(this._gridSortComponent, state);\n }\n\n private _saveStateAndSelfNavigate(replaceUrl = false): void {\n this._sessionStorageService.write(InvoiceComponent.strCreditState, this.creditState);\n this._sessionStorageService.write(InvoiceComponent.strInvoiceState, this.invoiceState);\n this._sessionStorageService.write(InvoiceComponent.strProFormaState, this.proFormaState);\n\n if (this._isCreditContext()) {\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.creditState.isSortSetToDefaultValues();\n } else if (this._isInvoiceContext()) {\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n } else if (this._isProFormaContext()) {\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n }\n\n this._selfNavigate(replaceUrl);\n }\n\n private _selfNavigate(replaceUrl = false): void {\n if (this._isCreditContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.creditState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isInvoiceContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.invoiceState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isProFormaContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.proFormaState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n }\n }\n\n private _setCustomerUuid(filter: CreditFilter | InvoiceFilter | ProFormaFilter): void {\n let customerUuid = null;\n if (filter.customerUuids && filter.customerUuids.length > 0) {\n customerUuid = filter.customerUuids[0];\n }\n this.customerFilterUuid = customerUuid;\n }\n\n private _synchronizeCreditStatefromInvoiceState(): void {\n // synchronize the credit state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.creditState, null, InvoiceComponent.strCreditState);\n\n this.creditState.creditFilter.customerUuids = this.invoiceState.invoiceFilter.customerUuids;\n\n // synchronize period search\n this.creditState.creditFilter.periodSearchPage = this.invoiceState.invoiceFilter.periodSearchPage;\n this.creditState.creditFilter.periodSearchType = this.invoiceState.invoiceFilter.periodSearchType;\n\n if (!this.invoiceState.invoiceFilter.periodSearchType && this.invoiceState.invoiceFilter.periodSearchType !== 0) {\n if (this.creditState.creditFilter.fromDeliveryDate) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromDeliveryDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.creditState.creditFilter.toDeliveryDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromDeliveryDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.creditState.creditFilter.toDeliveryDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromInvoiceDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.creditState.creditFilter.toInvoiceDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromInvoiceDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.creditState.creditFilter.toInvoiceDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n } else {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromCreditDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.creditState.creditFilter.toCreditDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromCreditDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.creditState.creditFilter.toCreditDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n }\n } else {\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n }\n\n this.creditState.creditFilter.fromInvoiceDueDate = null;\n this.creditState.creditFilter.toInvoiceDueDate = null;\n\n // register the synchronized credit state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strCreditState, this.creditState);\n }\n\n private _synchronizeCreditStatefromProFormaState(): void {\n // synchronize the credit state with the loaded pro forma state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.creditState, null, InvoiceComponent.strCreditState);\n\n this.creditState.creditFilter.customerUuids = this.proFormaState.proFormaFilter.customerUuids;\n\n // synchronize period search\n this.creditState.creditFilter.periodSearchPage = this.proFormaState.proFormaFilter.periodSearchPage;\n this.creditState.creditFilter.periodSearchType = this.proFormaState.proFormaFilter.periodSearchType;\n\n if (!this.proFormaState.proFormaFilter.periodSearchType && this.proFormaState.proFormaFilter.periodSearchType !== 0) {\n if (this.creditState.creditFilter.fromDeliveryDate) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromDeliveryDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.creditState.creditFilter.toDeliveryDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromDeliveryDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.creditState.creditFilter.toDeliveryDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromInvoiceDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.creditState.creditFilter.toInvoiceDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromInvoiceDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.creditState.creditFilter.toInvoiceDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n } else {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromCreditDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.creditState.creditFilter.toCreditDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromCreditDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.creditState.creditFilter.toCreditDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n }\n } else {\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n }\n\n this.creditState.creditFilter.fromInvoiceDueDate = null;\n this.creditState.creditFilter.toInvoiceDueDate = null;\n\n // register the synchronized credit state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strCreditState, this.creditState);\n }\n\n private _synchronizeInvoiceStateFromCreditState(): void {\n // synchronize the invoice state with the loaded credit state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, InvoiceComponent.strInvoiceState);\n\n this.invoiceState.invoiceFilter.customerUuids = this.creditState.creditFilter.customerUuids;\n\n // synchronize period search\n this.invoiceState.invoiceFilter.periodSearchPage = this.creditState.creditFilter.periodSearchPage;\n this.invoiceState.invoiceFilter.periodSearchType = this.creditState.creditFilter.periodSearchType;\n\n if (!this.creditState.creditFilter.periodSearchType && this.creditState.creditFilter.periodSearchType !== 0) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n if (this.creditState.creditFilter.fromCreditDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.creditState.creditFilter.fromCreditDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.creditState.creditFilter.toCreditDate;\n } else if (this.creditState.creditFilter.fromDeliveryDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.creditState.creditFilter.fromDeliveryDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.creditState.creditFilter.toDeliveryDate;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.creditState.creditFilter.fromInvoiceDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.creditState.creditFilter.toInvoiceDate;\n }\n\n this.invoiceState.invoiceFilter.fromInvoiceDate = null;\n this.invoiceState.invoiceFilter.toInvoiceDate = null;\n } else {\n if (this.creditState.creditFilter.fromCreditDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.creditState.creditFilter.fromCreditDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.creditState.creditFilter.toCreditDate;\n } else if (this.creditState.creditFilter.fromDeliveryDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.creditState.creditFilter.fromDeliveryDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.creditState.creditFilter.toDeliveryDate;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.creditState.creditFilter.fromInvoiceDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.creditState.creditFilter.toInvoiceDate;\n }\n\n this.invoiceState.invoiceFilter.fromDeliveryDate = null;\n this.invoiceState.invoiceFilter.toDeliveryDate = null;\n }\n } else {\n this.invoiceState.invoiceFilter.fromDeliveryDate = null;\n this.invoiceState.invoiceFilter.toDeliveryDate = null;\n this.invoiceState.invoiceFilter.fromInvoiceDate = null;\n this.invoiceState.invoiceFilter.toInvoiceDate = null;\n }\n\n this.invoiceState.invoiceFilter.fromDueDate = null;\n this.invoiceState.invoiceFilter.toDueDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeInvoiceStateFromProFormaState(): void {\n // synchronize the invoice state with the loaded pro forma state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, InvoiceComponent.strInvoiceState);\n\n this.invoiceState.invoiceFilter.customerUuids = this.proFormaState.proFormaFilter.customerUuids;\n\n // synchronize period search\n this.invoiceState.invoiceFilter.periodSearchPage = this.proFormaState.proFormaFilter.periodSearchPage;\n this.invoiceState.invoiceFilter.periodSearchType = this.proFormaState.proFormaFilter.periodSearchType;\n\n if (!this.proFormaState.proFormaFilter.periodSearchType && this.proFormaState.proFormaFilter.periodSearchType !== 0) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.invoiceState.invoiceFilter.fromInvoiceDate = null;\n this.invoiceState.invoiceFilter.toInvoiceDate = null;\n } else {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.invoiceState.invoiceFilter.fromDeliveryDate = null;\n this.invoiceState.invoiceFilter.toDeliveryDate = null;\n }\n } else {\n this.invoiceState.invoiceFilter.fromDeliveryDate = null;\n this.invoiceState.invoiceFilter.toDeliveryDate = null;\n this.invoiceState.invoiceFilter.fromInvoiceDate = null;\n this.invoiceState.invoiceFilter.toInvoiceDate = null;\n }\n\n this.invoiceState.invoiceFilter.fromDueDate = null;\n this.invoiceState.invoiceFilter.toDueDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeProFormaStateFromCreditState(): void {\n // synchronize the pro forma state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, InvoiceComponent.strProFormaState);\n\n this.proFormaState.proFormaFilter.customerUuids = this.creditState.creditFilter.customerUuids;\n\n // synchronize period search\n this.proFormaState.proFormaFilter.periodSearchPage = this.creditState.creditFilter.periodSearchPage;\n this.proFormaState.proFormaFilter.periodSearchType = this.creditState.creditFilter.periodSearchType;\n\n if (!this.creditState.creditFilter.periodSearchType && this.creditState.creditFilter.periodSearchType !== 0) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n if (this.creditState.creditFilter.fromCreditDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.creditState.creditFilter.fromCreditDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.creditState.creditFilter.toCreditDate;\n } else if (this.creditState.creditFilter.fromDeliveryDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.creditState.creditFilter.fromDeliveryDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.creditState.creditFilter.toDeliveryDate;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.creditState.creditFilter.fromInvoiceDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.creditState.creditFilter.toInvoiceDate;\n }\n\n this.proFormaState.proFormaFilter.fromInvoiceDate = null;\n this.proFormaState.proFormaFilter.toInvoiceDate = null;\n } else {\n if (this.creditState.creditFilter.fromCreditDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.creditState.creditFilter.fromCreditDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.creditState.creditFilter.toCreditDate;\n } else if (this.creditState.creditFilter.fromDeliveryDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.creditState.creditFilter.fromDeliveryDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.creditState.creditFilter.toDeliveryDate;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.creditState.creditFilter.fromInvoiceDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.creditState.creditFilter.toInvoiceDate;\n }\n\n this.proFormaState.proFormaFilter.fromDeliveryDate = null;\n this.proFormaState.proFormaFilter.toDeliveryDate = null;\n }\n } else {\n this.proFormaState.proFormaFilter.fromDeliveryDate = null;\n this.proFormaState.proFormaFilter.toDeliveryDate = null;\n this.proFormaState.proFormaFilter.fromInvoiceDate = null;\n this.proFormaState.proFormaFilter.toInvoiceDate = null;\n }\n\n // register the synchronized credit state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeProFormaStateFromInvoiceState(): void {\n // synchronize the pro forma state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, InvoiceComponent.strProFormaState);\n\n this.proFormaState.proFormaFilter.customerUuids = this.invoiceState.invoiceFilter.customerUuids;\n\n // synchronize period search\n this.proFormaState.proFormaFilter.periodSearchPage = this.invoiceState.invoiceFilter.periodSearchPage;\n this.proFormaState.proFormaFilter.periodSearchType = this.invoiceState.invoiceFilter.periodSearchType;\n\n if (!this.invoiceState.invoiceFilter.periodSearchType && this.invoiceState.invoiceFilter.periodSearchType !== 0) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.proFormaState.proFormaFilter.fromInvoiceDate = null;\n this.proFormaState.proFormaFilter.toInvoiceDate = null;\n } else {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.proFormaState.proFormaFilter.fromDeliveryDate = null;\n this.proFormaState.proFormaFilter.toDeliveryDate = null;\n }\n } else {\n this.proFormaState.proFormaFilter.fromDeliveryDate = null;\n this.proFormaState.proFormaFilter.toDeliveryDate = null;\n this.proFormaState.proFormaFilter.fromInvoiceDate = null;\n this.proFormaState.proFormaFilter.toInvoiceDate = null;\n }\n\n // register the synchronized credit state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strProFormaState, this.proFormaState);\n }\n\n private _updateAdvancedFilterToggleButtonLabel(): void {\n if (this._isCreditContext()) {\n if (this.creditState && this.creditState.creditFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedCreditFilter(this.advancedFilterPanel);\n }\n } else if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.invoiceFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedInvoiceFilter(this.advancedFilterPanel);\n }\n } else if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.proFormaFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedInvoiceFilter(this.advancedFilterPanel);\n }\n }\n\n this.textButtonAdvancedFilter = this.constTextButtonAdvancedFilter;\n if (this.advancedFilterCounter && this.advancedFilterCounter > 0) {\n this.showEraseAdvancedFilterFlag = true;\n } else {\n this.showEraseAdvancedFilterFlag = false;\n this.advancedFilterCounter = undefined;\n }\n }\n\n private _updateCustomerFilterToggleButtonLabel(): void {\n // Update label of advanced filter button\n if (!this.customerFilterPanel?.customer?.uuid) {\n this.textButtonCustomerFilter = this.constTextButtonCustomerFilter;\n this.showEraseCustomerFilterFlag = false;\n this.customerFilterCounter = undefined;\n } else {\n this.textButtonCustomerFilter = this.customerFilterPanel.customer.name;\n this.showEraseCustomerFilterFlag = true;\n this.customerFilterCounter = 1;\n }\n }\n}\n","export class AdvancedFilterPanelModel {\n public canceledCreditNumber: string;\n public creditCancelledDisplayChoice: number;\n public creditPaidFlagDisplayChoice: number;\n public creditTypeDisplayChoice: number;\n public invoiceCancelledDisplayChoice: number;\n public invoiceNumber: string;\n public invoicePaymentDisplayChoice: number;\n public invoiceTypeDisplayChoice: number;\n public number: string;\n}\n","import { InvoiceComponent } from 'app/pages/customer-area/invoice/invoice.component';\nimport { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { PeriodSearchCreditDateType } from 'app/shared/enums/period-search-credit-date-type.enum';\nimport { CreditFilter } from 'app/shared/prothesis-customer-api-filters/credit-filter';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\n\nexport class CreditState extends PaginatedListState {\n public creditFilter: CreditFilter;\n\n public constructor() {\n super();\n this.defaultSortActive = 'createDate';\n this.defaultSortDirection = 'desc';\n this.resetFilter();\n\n this.initPageSize(InvoiceComponent.strCreditKeyLocalStoragePageSize);\n this.initPageSort(InvoiceComponent.strCreditKeyLocalStorageSort);\n this._initPeriodSearchType(InvoiceComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.creditFilter.periodSearchType || this.creditFilter.periodSearchType === 0) {\n statePeriodSearchType = this.creditFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n if (this.creditFilter.periodSearchDateType || this.creditFilter.periodSearchDateType === 0) {\n const periodSearchDateType = this.creditFilter.periodSearchDateType.valueOf().toString();\n const periodSearchDateTypeDefault = PeriodSearchCreditDateType.CreditDate.valueOf().toString();\n if (periodSearchDateType !== periodSearchDateTypeDefault) {\n defaultValueFlag = false;\n }\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.creditFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.creditFilter.customerUuids || this.creditFilter.customerUuids.length === 0) &&\n !this.creditFilter.fromCreateDate &&\n !this.creditFilter.fromCreditDate &&\n !this.creditFilter.fromDeliveryDate &&\n !this.creditFilter.fromInvoiceDate &&\n !this.creditFilter.fromInvoiceDueDate &&\n !this.creditFilter.fromUpdateDate &&\n this.creditFilter.periodSearchPage === 0 &&\n !this.creditFilter.textFilter &&\n !this.creditFilter.toCreateDate &&\n !this.creditFilter.toCreditDate &&\n !this.creditFilter.toDeliveryDate &&\n !this.creditFilter.toInvoiceDate &&\n !this.creditFilter.toInvoiceDueDate &&\n !this.creditFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.creditFilter = new CreditFilter();\n this.creditFilter.periodSearchPage = 0;\n this.creditFilter.periodSearchType = PeriodSearchType.Year;\n this.creditFilter.periodSearchDateType = PeriodSearchCreditDateType.CreditDate;\n this.creditFilter.canceledFlag = false;\n this.creditFilter.textFilter = '';\n this.creditFilter.textFilterFields = ['amount', 'amountTaxesIncluded', 'customer', 'invoiceNumber', 'number'];\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.creditFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { InvoiceComponent } from 'app/pages/customer-area/invoice/invoice.component';\nimport { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { PeriodSearchInvoiceDateType } from 'app/shared/enums/period-search-invoice-date-type.enum';\nimport { InvoiceFilter } from 'app/shared/prothesis-customer-api-filters/invoice-filter';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\n\nexport class InvoiceState extends PaginatedListState {\n public invoiceFilter: InvoiceFilter;\n\n public constructor() {\n super();\n this.defaultSortActive = 'createDate';\n this.defaultSortDirection = 'desc';\n this.resetFilter();\n\n this.initPageSize(InvoiceComponent.strInvoiceKeyLocalStoragePageSize);\n this.initPageSort(InvoiceComponent.strInvoiceKeyLocalStorageSort);\n this._initPeriodSearchType(InvoiceComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.invoiceFilter.periodSearchType || this.invoiceFilter.periodSearchType === 0) {\n statePeriodSearchType = this.invoiceFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n if (this.invoiceFilter.periodSearchDateType || this.invoiceFilter.periodSearchDateType === 0) {\n const periodSearchDateType = this.invoiceFilter.periodSearchDateType.valueOf().toString();\n const periodSearchDateTypeDefault = PeriodSearchInvoiceDateType.InvoiceDate.valueOf().toString();\n if (periodSearchDateType !== periodSearchDateTypeDefault) {\n defaultValueFlag = false;\n }\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.invoiceFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n const onlyInvoicePaidPaymentDisplayChoice = this.invoiceFilter.paidFlag === true;\n const onlyInvoiceNotPaidPaymentDisplayChoice = this.invoiceFilter.paidFlag === false;\n\n if (\n this.invoiceFilter.canceledFlag === false &&\n (!this.invoiceFilter.customerUuids || this.invoiceFilter.customerUuids.length === 0) &&\n !this.invoiceFilter.fromCreateDate &&\n !this.invoiceFilter.fromDeliveryDate &&\n !this.invoiceFilter.fromDueDate &&\n !this.invoiceFilter.fromInvoiceDate &&\n !this.invoiceFilter.fromUpdateDate &&\n this.invoiceFilter.periodSearchPage === 0 &&\n !this.invoiceFilter.textFilter &&\n !this.invoiceFilter.toCreateDate &&\n !this.invoiceFilter.toDeliveryDate &&\n !this.invoiceFilter.toDueDate &&\n !this.invoiceFilter.toInvoiceDate &&\n !this.invoiceFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n !onlyInvoicePaidPaymentDisplayChoice &&\n !onlyInvoiceNotPaidPaymentDisplayChoice &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.invoiceFilter = new InvoiceFilter();\n this.invoiceFilter.periodSearchPage = 0;\n this.invoiceFilter.periodSearchType = PeriodSearchType.Year;\n this.invoiceFilter.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate;\n this.invoiceFilter.canceledFlag = false;\n this.invoiceFilter.textFilter = '';\n this.invoiceFilter.textFilterFields = ['amount', 'amountTaxesIncluded', 'customer', 'number'];\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.invoiceFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { InvoiceComponent } from 'app/pages/customer-area/invoice/invoice.component';\nimport { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { PeriodSearchInvoiceDateType } from 'app/shared/enums/period-search-invoice-date-type.enum';\nimport { ProFormaFilter } from 'app/shared/prothesis-customer-api-filters/pro-forma-filter';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\n\nexport class ProFormaState extends PaginatedListState {\n public proFormaFilter: ProFormaFilter;\n\n public constructor() {\n super();\n this.defaultSortActive = 'createDate';\n this.defaultSortDirection = 'desc';\n this.resetFilter();\n\n this.initPageSize(InvoiceComponent.strProFormaKeyLocalStoragePageSize);\n this.initPageSort(InvoiceComponent.strProFormaKeyLocalStorageSort);\n this._initPeriodSearchType(InvoiceComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.proFormaFilter.periodSearchType || this.proFormaFilter.periodSearchType === 0) {\n statePeriodSearchType = this.proFormaFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n if (this.proFormaFilter.periodSearchDateType || this.proFormaFilter.periodSearchDateType === 0) {\n const periodSearchDateType = this.proFormaFilter.periodSearchDateType.valueOf().toString();\n const periodSearchDateTypeDefault = PeriodSearchInvoiceDateType.InvoiceDate.valueOf().toString();\n if (periodSearchDateType !== periodSearchDateTypeDefault) {\n defaultValueFlag = false;\n }\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.proFormaFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.pageIndex || this.pageIndex === 0) &&\n (!this.proFormaFilter.customerUuids || this.proFormaFilter.customerUuids.length === 0) &&\n !this.proFormaFilter.fromCreateDate &&\n !this.proFormaFilter.fromDeliveryDate &&\n !this.proFormaFilter.fromInvoiceDate &&\n !this.proFormaFilter.fromUpdateDate &&\n this.proFormaFilter.periodSearchPage === 0 &&\n !this.proFormaFilter.textFilter &&\n !this.proFormaFilter.toCreateDate &&\n !this.proFormaFilter.toDeliveryDate &&\n !this.proFormaFilter.toInvoiceDate &&\n !this.proFormaFilter.toUpdateDate &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.proFormaFilter = new ProFormaFilter();\n this.proFormaFilter.periodSearchPage = 0;\n this.proFormaFilter.periodSearchType = PeriodSearchType.Year;\n this.proFormaFilter.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate;\n this.proFormaFilter.textFilter = '';\n this.proFormaFilter.textFilterFields = ['amount', 'amountTaxesIncluded', 'customer'];\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.proFormaFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","export class AdvancedFilterPanelModel {\n public invoiceCancelledDisplayChoice: number;\n public invoicedFlag: boolean | null;\n public invoiceNumber: string;\n public number: string;\n public patientCode: string;\n public patientNumber: string;\n public patientUnspecifiedFlag: boolean | null;\n public prescriptionNumber: string;\n public productionFlowNumber: string;\n public productionFlowUuid: string | null;\n public proFormaFlag: boolean | null;\n}\n","import { DeliveryFormFilter } from 'app/shared/prothesis-customer-api-filters/delivery-form-filter';\nimport { DocumentFilter } from 'app/shared/prothesis-customer-api-filters/document-filter';\nimport { FittingFormFilter } from 'app/shared/prothesis-customer-api-filters/fitting-form-filter';\nimport { QuoteFilter } from 'app/shared/prothesis-customer-api-filters/quote-filter';\nimport { AdvancedFilterPanelModel } from '../models/advanced-filter-panel-model';\n\nexport class AdvancedFilterPanelModelHelper {\n public static countValuesOfAdvancedFilterPanel(advancedFilter: AdvancedFilterPanelModel): number {\n let counter = 0;\n\n counter = advancedFilter.number ? counter + 1 : counter;\n if (!advancedFilter.patientUnspecifiedFlag) {\n counter = advancedFilter.patientCode ? counter + 1 : counter;\n counter = advancedFilter.patientNumber ? counter + 1 : counter;\n }\n counter = advancedFilter.patientUnspecifiedFlag ? counter + 1 : counter;\n counter = advancedFilter.prescriptionNumber ? counter + 1 : counter;\n counter = advancedFilter.productionFlowNumber ? counter + 1 : counter;\n\n return counter;\n }\n\n public static countValuesOfAdvancedFilterPanelForDeliveryForms(advancedFilter: AdvancedFilterPanelModel): number {\n return this.countValuesOfAdvancedFilterPanel(advancedFilter);\n }\n\n public static countValuesOfAdvancedFilterPanelForFittingForms(advancedFilter: AdvancedFilterPanelModel): number {\n return this.countValuesOfAdvancedFilterPanel(advancedFilter);\n }\n\n public static countValuesOfAdvancedFilterPanelForInvoicedDeliveryForms(advancedFilter: AdvancedFilterPanelModel): number {\n let counter = this.countValuesOfAdvancedFilterPanel(advancedFilter);\n\n if (advancedFilter.invoiceCancelledDisplayChoice !== 3) {\n counter++;\n }\n\n counter = advancedFilter.invoiceNumber ? counter + 1 : counter;\n\n return counter;\n }\n\n public static countValuesOfAdvancedFilterPanelForProFormaDeliveryForms(advancedFilter: AdvancedFilterPanelModel): number {\n return this.countValuesOfAdvancedFilterPanel(advancedFilter);\n }\n\n public static countValuesOfAdvancedFilterPanelForQuotes(advancedFilter: AdvancedFilterPanelModel): number {\n return this.countValuesOfAdvancedFilterPanel(advancedFilter);\n }\n\n public static fromDeliveryFormFilter(filter: DeliveryFormFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n if (filter) {\n // Determines invoice cancelled display\n if (!filter.canceledFlag) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 1;\n }\n if (filter.canceledFlag === true) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 2;\n }\n if (filter.canceledFlag === false) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 3;\n }\n\n advancedFilterPanel.invoicedFlag = filter.invoicedFlag;\n advancedFilterPanel.invoiceNumber = filter.invoiceNumber;\n advancedFilterPanel.number = filter.number;\n advancedFilterPanel.patientCode = filter.patientCode;\n advancedFilterPanel.patientNumber = filter.patientNumber;\n advancedFilterPanel.patientUnspecifiedFlag = filter.patientUnspecifiedFlag;\n advancedFilterPanel.prescriptionNumber = filter.prescriptionNumber;\n advancedFilterPanel.productionFlowNumber = filter.productionFlowNumber;\n advancedFilterPanel.productionFlowUuid = filter.productionFlowUuid;\n advancedFilterPanel.proFormaFlag = filter.proFormaFlag;\n }\n return advancedFilterPanel;\n }\n\n public static fromFittingFormFilter(filter: FittingFormFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n if (filter) {\n advancedFilterPanel.number = filter.number;\n advancedFilterPanel.patientCode = filter.patientCode;\n advancedFilterPanel.patientNumber = filter.patientNumber;\n advancedFilterPanel.patientUnspecifiedFlag = filter.patientUnspecifiedFlag;\n advancedFilterPanel.prescriptionNumber = filter.prescriptionNumber;\n advancedFilterPanel.productionFlowNumber = filter.productionFlowNumber;\n advancedFilterPanel.productionFlowUuid = filter.productionFlowUuid;\n }\n return advancedFilterPanel;\n }\n\n public static fromQuoteFilter(filter: QuoteFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n if (filter) {\n advancedFilterPanel.number = filter.number;\n advancedFilterPanel.patientCode = filter.patientCode;\n advancedFilterPanel.patientNumber = filter.patientNumber;\n advancedFilterPanel.patientUnspecifiedFlag = filter.patientUnspecifiedFlag;\n advancedFilterPanel.prescriptionNumber = filter.prescriptionNumber;\n advancedFilterPanel.productionFlowNumber = filter.productionFlowNumber;\n advancedFilterPanel.productionFlowUuid = filter.productionFlowUuid;\n }\n return advancedFilterPanel;\n }\n\n public static resetValues(advancedFilter: AdvancedFilterPanelModel): AdvancedFilterPanelModel {\n advancedFilter.invoiceCancelledDisplayChoice = 3;\n advancedFilter.invoiceNumber = '';\n advancedFilter.number = '';\n advancedFilter.patientCode = '';\n advancedFilter.patientNumber = '';\n advancedFilter.patientUnspecifiedFlag = false;\n advancedFilter.prescriptionNumber = '';\n advancedFilter.productionFlowNumber = '';\n advancedFilter.productionFlowUuid = null;\n\n return advancedFilter;\n }\n\n public static synchronizeDocumentFilter(\n documentFilterSynchronized: DocumentFilter,\n documentFilterOrigin: DocumentFilter\n ): DocumentFilter {\n documentFilterSynchronized.fromDeliveryDate = documentFilterOrigin.fromDeliveryDate;\n documentFilterSynchronized.number = documentFilterOrigin.number;\n documentFilterSynchronized.patientCode = documentFilterOrigin.patientCode;\n documentFilterSynchronized.patientNumber = documentFilterOrigin.patientNumber;\n documentFilterSynchronized.patientUnspecifiedFlag = documentFilterOrigin.patientUnspecifiedFlag;\n documentFilterSynchronized.prescriptionNumber = documentFilterOrigin.prescriptionNumber;\n documentFilterSynchronized.productionFlowNumber = documentFilterOrigin.productionFlowNumber;\n documentFilterSynchronized.productionFlowUuid = documentFilterOrigin.productionFlowUuid;\n documentFilterSynchronized.toDeliveryDate = documentFilterOrigin.toDeliveryDate;\n\n return documentFilterSynchronized;\n }\n\n public static toDeliveryFormFilter(advancedFilterPanel: AdvancedFilterPanelModel, filter: DeliveryFormFilter): DeliveryFormFilter {\n filter.invoicedFlag = advancedFilterPanel.invoicedFlag;\n if (advancedFilterPanel.invoicedFlag) {\n // Display canceled invoices\n if (advancedFilterPanel.invoiceCancelledDisplayChoice === 1) {\n filter.canceledFlag = undefined;\n } else if (advancedFilterPanel.invoiceCancelledDisplayChoice === 2) {\n filter.canceledFlag = true;\n } else if (advancedFilterPanel.invoiceCancelledDisplayChoice === 3) {\n filter.canceledFlag = false;\n }\n }\n filter.invoiceNumber = advancedFilterPanel.invoiceNumber;\n filter.number = advancedFilterPanel.number;\n filter.patientCode = advancedFilterPanel.patientCode;\n filter.patientNumber = advancedFilterPanel.patientNumber;\n filter.patientUnspecifiedFlag = advancedFilterPanel.patientUnspecifiedFlag;\n filter.prescriptionNumber = advancedFilterPanel.prescriptionNumber;\n filter.productionFlowNumber = advancedFilterPanel.productionFlowNumber;\n filter.productionFlowUuid = advancedFilterPanel.productionFlowUuid;\n filter.proFormaFlag = advancedFilterPanel.proFormaFlag;\n\n return filter;\n }\n\n public static toFittingFormFilter(advancedFilterPanel: AdvancedFilterPanelModel, filter: FittingFormFilter): FittingFormFilter {\n filter.number = advancedFilterPanel.number;\n filter.patientCode = advancedFilterPanel.patientCode;\n filter.patientNumber = advancedFilterPanel.patientNumber;\n filter.patientUnspecifiedFlag = advancedFilterPanel.patientUnspecifiedFlag;\n filter.prescriptionNumber = advancedFilterPanel.prescriptionNumber;\n filter.productionFlowNumber = advancedFilterPanel.productionFlowNumber;\n filter.productionFlowUuid = advancedFilterPanel.productionFlowUuid;\n return filter;\n }\n\n public static toQuoteFilter(advancedFilterPanel: AdvancedFilterPanelModel, filter: QuoteFilter): QuoteFilter {\n filter.number = advancedFilterPanel.number;\n filter.patientCode = advancedFilterPanel.patientCode;\n filter.patientNumber = advancedFilterPanel.patientNumber;\n filter.patientUnspecifiedFlag = advancedFilterPanel.patientUnspecifiedFlag;\n filter.prescriptionNumber = advancedFilterPanel.prescriptionNumber;\n filter.productionFlowNumber = advancedFilterPanel.productionFlowNumber;\n filter.productionFlowUuid = advancedFilterPanel.productionFlowUuid;\n\n return filter;\n }\n}\n","\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n \n 0 ? 'active-filter' : 'no-filter'\">\n {{ textButtonCustomerFilter }}\n {{ textButtonCustomerFilterShowCustomerMembers }} \n \n \n\n \n clear\n \n\n \n 0 ? 'active-filter' : 'no-filter'\">\n {{ textButtonAdvancedFilter }}\n \n \n\n \n clear\n \n \n
\n
\n
\n
\n
\n \n \n \n highlight_off\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","import { Component, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MatButtonToggle, MatButtonToggleChange, MatButtonToggleGroup } from '@angular/material/button-toggle';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { CorpTitleService } from 'app/core/services/corp-title.service';\nimport { FocusService } from 'app/core/services/focus.service';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { LocalStorageService } from 'app/core/services/local-storage.service';\nimport { NotifyService } from 'app/core/services/notify/notify.service';\nimport { PeriodSearchService } from 'app/core/services/period-search.service';\nimport { PreselectionService } from 'app/core/services/preselection.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { CustomerService } from 'app/core/services/prothesis-customer-api/customer.service';\nimport { ProductionFlowService } from 'app/core/services/prothesis-customer-api/production-flow.service';\nimport { WorkingCustomerService } from 'app/core/services/prothesis-customer-api/working-customer.service';\nimport { SessionStorageService } from 'app/core/services/session-storage.service';\nimport { RouterLinkModel } from 'app/shared/common-models/models/routerLink.model';\nimport { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { CustomerFilterPanelComponent } from 'app/shared/components/filter-panels/customer-filter-panel/customer-filter-panel.component';\nimport { CustomerFilterPanelModel } from 'app/shared/components/filter-panels/customer-filter-panel/models/customer-filter-panel.model';\nimport { FormTimeModelHelper } from 'app/shared/components/form-time/model-helpers/form-time-model-helper';\nimport { GridFilterModel } from 'app/shared/components/grid-filter/grid-filter-model';\nimport { GridFilterComponent } from 'app/shared/components/grid-filter/grid-filter.component';\nimport { GridSortComponent } from 'app/shared/components/grid-sort/grid-sort.component';\nimport { GridSortModel } from 'app/shared/components/grid-sort/grid-sort.model';\nimport { CustomerAreaPeriodSearchModelHelper } from 'app/shared/components/period-search/model-helpers/customer-area-period-search-model-helper';\nimport { PeriodSearchInfoModel } from 'app/shared/components/period-search/models/period-search-info-model';\nimport { PeriodSearchModel } from 'app/shared/components/period-search/models/period-search-model';\nimport { CustomerModel } from 'app/shared/components/pickers/customer-picker/models/customer.model';\nimport { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { DocumentStatusHelper } from 'app/shared/enum-helpers/document-status.enum.helper';\nimport { PeriodSearchDeliveryFormDateTypeHelper } from 'app/shared/enum-helpers/period-search-delivery-form-date-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { Area } from 'app/shared/enums/area.enum';\nimport { DocumentStatus } from 'app/shared/enums/document-status.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { SortHelper } from 'app/shared/helpers/sort-helper';\nimport { DocumentFilter } from 'app/shared/prothesis-customer-api-filters/document-filter';\nimport { OptionDeliveryRouteViewModel } from 'app/shared/prothesis-customer-api-view-models/option-delivery-route.view-model';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AdvancedFilterPanelModelHelper } from './model-helpers/advanced-filter-panel-model.helper';\nimport { AdvancedFilterPanelModel } from './models/advanced-filter-panel-model';\nimport { AdvancedFilterComponent } from './production-flow/advanced-filter/advanced-filter.component';\nimport { DeliveryFormState } from './production-flow/states/delivery-form-state';\nimport { FittingFormState } from './production-flow/states/fitting-form-state';\nimport { InvoiceState } from './production-flow/states/invoice-state';\nimport { ProFormaState } from './production-flow/states/pro-forma-state';\nimport { QuoteState } from './production-flow/states/quote-state';\n\n@Component({\n selector: 'app-production-flow',\n styleUrls: ['./production-flow.component.scss'],\n templateUrl: './production-flow.component.html',\n})\nexport class ProductionFlowComponent implements OnDestroy, OnInit {\n @ViewChild('_advancedFilterComponent', { static: true }) private _advancedFilterComponent: AdvancedFilterComponent;\n @ViewChild('_customerFilterPanelComponent', { static: true }) private _customerFilterPanelComponent: CustomerFilterPanelComponent;\n @ViewChild('_gridFilterComponent', { static: true }) private _gridFilterComponent: GridFilterComponent;\n @ViewChild('_gridSortComponent', { static: true }) private _gridSortComponent: GridSortComponent;\n @ViewChild('_matButtonToggleAdvancedFilter') private _matButtonToggleAdvancedFilter: MatButtonToggle;\n @ViewChild('_matButtonToggleCustomerFilter') private _matButtonToggleCustomerFilter: MatButtonToggle;\n @ViewChild('_matButtonToggleGroupFilter', { static: true }) private _matButtonToggleGroupFilter: MatButtonToggleGroup;\n public static strCurrentTabLink = 'customer-area-production-flow-current-tab-link';\n public static strDeliveryFormKeyLocalStoragePageSize = 'customer-area-delivery-form-page-size';\n public static strDeliveryFormKeyLocalStorageSort = 'customer-area-delivery-form-sort-favorite';\n public static strDeliveryFormState = 'customer-area-delivery-form-state';\n public static strFittingFormKeyLocalStoragePageSize = 'customer-area-fitting-form-page-size';\n public static strFittingFormKeyLocalStorageSort = 'customer-area-fitting-form-sort-favorite';\n public static strFittingFormState = 'customer-area-fitting-form-state';\n public static strInvoiceKeyLocalStoragePageSize = 'customer-area-invoiced-delivery-form-page-size';\n public static strInvoiceKeyLocalStorageSort = 'customer-area-delivery-form-invoice-sort-favorite';\n public static strInvoiceState = 'customer-area-delivery-form-invoice-state';\n public static strPeriodSearchTypeFavorite = 'customer-area-production-flow-period-search-favorite';\n public static strProFormaKeyLocalStoragePageSize = 'customer-area-pro-forma-page-size';\n public static strProFormaKeyLocalStorageSort = 'customer-area-delivery-form-pro-forma-sort-favorite';\n public static strProFormaState = 'customer-area-delivery-form-pro-forma-state';\n public static strQuoteKeyLocalStoragePageSize = 'customer-area-quote-page-size';\n public static strQuoteKeyLocalStorageSort = 'customer-area-quote-sort-favorite';\n public static strQuoteState = 'customer-area-quote-state';\n public activeLink: RouterLinkModel;\n public advancedFilterCounter: number;\n public advancedFilterPanel: AdvancedFilterPanelModel;\n public area = Area.Customer;\n public constTextButtonAdvancedFilter = 'Filtres avancés';\n public constTextButtonCustomerFilter = 'Tous les clients';\n public constTextButtonCustomerFilterShowCustomerMembers = 'et ses membres';\n public customerFilterCounter: number;\n public customerFilterPanel: CustomerFilterPanelModel;\n public customerFilterUuid: string;\n public deliveryFormState: DeliveryFormState = new DeliveryFormState();\n public deliveryRouteFilterDefaultValue: ComboModel;\n public deliveryRouteFilterOptionExcludedDeliveryRouteFlag = new ComboModel('1', 'Autres tournées renseignées');\n public deliveryRouteFilterOptionNoneDeliveryRouteFlag = new ComboModel('0', 'Aucune tournée renseignée');\n public deliveryRouteFilterOptions: ComboModel[];\n public deliveryRouteFilterSelection: ComboModel[];\n public demoModeFlag: boolean;\n public documentStateDefaultValue: ComboModel;\n public documentStateOptions: ComboModel[];\n public documentStateSelected: ComboModel;\n public documentStatusCanceled = DocumentStatus.Canceled.toString();\n public documentStatusDone = DocumentStatus.Done.toString();\n public filterSetToDefaultValueFlag = true;\n public fittingFormState: FittingFormState = new FittingFormState();\n public gridFilter: GridFilterModel;\n public gridSortDF: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public gridSortFittingForm: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public gridSortIDF: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'invoiceDate', label: 'Par date de facturation' },\n { value: 'invoiceNumber', label: 'Par numéro de facture' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public gridSortQuote: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'quoteDate', label: 'Par date de devis' },\n { value: 'number', label: 'Par numéro de devis' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public groupTitle: string;\n public invoiceState: InvoiceState = new InvoiceState();\n public navLinks: RouterLinkModel[];\n public pageTitle = 'Documents';\n public periodSearch: PeriodSearchModel;\n public periodSearchDateTypeOptions: ComboModel[];\n public periodSearchTypeDefault = PeriodSearchType.Year.toString();\n public periodSearchTypeFavorite: string;\n public periodSearchTypeOptions: ComboModel[];\n public periodSearchTypeSetToDefaultValueFlag = true;\n public proFormaState: ProFormaState = new ProFormaState();\n public quoteState: QuoteState = new QuoteState();\n public showEraseAdvancedFilterFlag = false;\n public showEraseCustomerFilterFlag = false;\n public sortSetToDefaultValueFlag = true;\n public tabIndexDeliveryForm = 2;\n public tabIndexFittingForm = 1;\n public tabIndexInvoicedDeliveryForm = 4;\n public tabIndexProFormaDeliveryForm = 3;\n public tabIndexQuote = 0;\n public textButtonAdvancedFilter = 'Filtres avancés';\n public textButtonCustomerFilter = 'Tous les clients';\n public textButtonCustomerFilterShowCustomerMembers = '';\n private _routerOutletLoadedSubscription: Subscription;\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n public workingCustomerService: WorkingCustomerService,\n private _activatedRoute: ActivatedRoute,\n private _authService: AuthService,\n private _corpTitleService: CorpTitleService,\n private _customerService: CustomerService,\n private _focusService: FocusService,\n private _highlightService: HighlightService,\n private _localStorageService: LocalStorageService,\n private _notifyService: NotifyService,\n private _periodSearchService: PeriodSearchService,\n private _preselectionService: PreselectionService,\n private _productionFlowService: ProductionFlowService,\n private _workingLaboratoryService: WorkingLaboratoryService,\n private _router: Router,\n private _sessionStorageService: SessionStorageService\n ) {\n this.documentStateOptions = DocumentStatusHelper.buildOptions();\n this.documentStateDefaultValue = DocumentStatusHelper.convertToComboModel(DocumentStatus.InProgress);\n\n this.groupTitle = `Laboratoire ${this._workingLaboratoryService.laboratoryName}`;\n this._corpTitleService.setTitle(`${this.pageTitle} - ${this.groupTitle}`);\n\n this.navLinks = [\n new RouterLinkModel(this.tabIndexQuote, 'Devis', './quote', this.gridSortQuote, 'tab-link-quote'),\n new RouterLinkModel(this.tabIndexFittingForm, \"Bons d'essayage\", './fitting-form', this.gridSortFittingForm, 'tab-link-fitting-form'),\n new RouterLinkModel(this.tabIndexDeliveryForm, 'Bons de livraison', './delivery-form', this.gridSortDF, 'tab-link-delivery-form'),\n new RouterLinkModel(\n this.tabIndexProFormaDeliveryForm,\n 'Bons sur pro forma',\n './delivery-form/pro-forma',\n this.gridSortDF,\n 'tab-link-delivery-form-pro-forma'\n ),\n new RouterLinkModel(\n this.tabIndexInvoicedDeliveryForm,\n 'Bons facturés',\n './delivery-form/invoice',\n this.gridSortIDF,\n 'tab-link-delivery-form-invoice'\n ),\n ];\n }\n\n public advancedFilterAppliedHandler(advancedFilterPanel: AdvancedFilterPanelModel): void {\n this._initAdvancedFilter(advancedFilterPanel);\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = true;\n this._matButtonToggleAdvancedFilter.focus();\n\n // Reset Toggle and page index\n this._matButtonToggleGroupFilter.value = null;\n this._resetPageIndex();\n\n // refresh page\n this._saveStateAndSelfNavigate();\n }\n\n public buildFilterDeliveryRouteOptions(optionDeliveryRoutes: OptionDeliveryRouteViewModel[]): Array {\n let deliveryRouteFilterOptions = new Array();\n optionDeliveryRoutes.forEach((deliveryRoute) => {\n const deliveryRouteFilterOption = new ComboModel();\n deliveryRouteFilterOption.key = deliveryRoute.uuid;\n deliveryRouteFilterOption.label = FormTimeModelHelper.parseTime(deliveryRoute.deliveryRouteHour, deliveryRoute.deliveryRouteMinute);\n deliveryRouteFilterOptions.push(deliveryRouteFilterOption);\n });\n deliveryRouteFilterOptions = deliveryRouteFilterOptions.sort(SortHelper.sortByLabelAlphabetically);\n deliveryRouteFilterOptions.push(this.deliveryRouteFilterOptionExcludedDeliveryRouteFlag);\n deliveryRouteFilterOptions.push(this.deliveryRouteFilterOptionNoneDeliveryRouteFlag);\n return deliveryRouteFilterOptions;\n }\n\n public customerFilterAppliedHandler(customerFilterPanel: CustomerFilterPanelModel): void {\n this.customerFilterPanel = customerFilterPanel;\n\n // copy the customer filter for all state\n this.customerFilterUuid = customerFilterPanel?.customer ? customerFilterPanel.customer.uuid : null;\n\n if (customerFilterPanel?.customer && customerFilterPanel.showCustomerMembersFlag) {\n this.deliveryFormState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n this.fittingFormState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n this.invoiceState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n this.proFormaState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n this.quoteState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n } else {\n this.deliveryFormState.documentFilter.customerGroupUuids = null;\n this.fittingFormState.documentFilter.customerGroupUuids = null;\n this.invoiceState.documentFilter.customerGroupUuids = null;\n this.proFormaState.documentFilter.customerGroupUuids = null;\n this.quoteState.documentFilter.customerGroupUuids = null;\n }\n\n if (customerFilterPanel?.customer && !customerFilterPanel.showCustomerMembersFlag) {\n this.deliveryFormState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n this.fittingFormState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n this.invoiceState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n this.proFormaState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n this.quoteState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n } else {\n this.deliveryFormState.documentFilter.customerUuids = null;\n this.fittingFormState.documentFilter.customerUuids = null;\n this.invoiceState.documentFilter.customerUuids = null;\n this.proFormaState.documentFilter.customerUuids = null;\n this.quoteState.documentFilter.customerUuids = null;\n }\n\n // set the customer to the preselection service\n if (this.customerFilterPanel?.customer) {\n this._preselectionService.setProductionFlowCustomer(this.customerFilterPanel.customer.uuid);\n }\n\n // update label of advanced filter button\n this._updateCustomerFilterToggleButtonLabel();\n\n // Reset Toggle and page index\n this._matButtonToggleGroupFilter.value = null;\n this._focusService.focusOnCustomerPanelToggleButtonFlag = true;\n this._focusService.setTimeoutOutsideAngular(() => {\n this._matButtonToggleCustomerFilter.focus();\n });\n\n this._resetPageIndex();\n\n // refresh page\n this._saveStateAndSelfNavigate();\n }\n\n public eraseAdvancedFilter(): void {\n AdvancedFilterPanelModelHelper.resetValues(this.advancedFilterPanel);\n this.advancedFilterAppliedHandler(this.advancedFilterPanel);\n }\n\n public eraseAllFiltersClickedHandler(): void {\n this.deliveryFormState.resetFilter();\n this.deliveryFormState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.deliveryFormState.documentFilter.periodSearchDateType = (\n Number(PeriodSearchDeliveryFormDateType.DeliveryDate.toString())\n );\n\n this.fittingFormState.resetFilter();\n this.fittingFormState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n\n this.invoiceState.resetFilter();\n this.invoiceState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.invoiceState.documentFilter.periodSearchDateType = (\n Number(PeriodSearchDeliveryFormDateType.DeliveryDate.toString())\n );\n\n this.proFormaState.resetFilter();\n this.proFormaState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.proFormaState.documentFilter.periodSearchDateType = (\n Number(PeriodSearchDeliveryFormDateType.DeliveryDate.toString())\n );\n\n this.quoteState.resetFilter();\n this.quoteState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n\n this._saveStateAndSelfNavigate();\n }\n\n public eraseCustomerFilter(): void {\n this.customerFilterAppliedHandler(null);\n }\n\n @HostListener('window:keydown.PageDown', ['$event'])\n public keydownPageDown($event: KeyboardEvent): void {\n $event.preventDefault();\n }\n\n @HostListener('window:keydown.Tab', ['$event'])\n public keydownTab($event: KeyboardEvent): void {\n this._focusService.setFocusOnGridFilter($event, this._gridFilterComponent);\n }\n\n @HostListener('window:keyup.PageDown', ['$event'])\n public keyupPageDown(): void {\n let nextIndex = this.activeLink.index - 1;\n if (nextIndex < 0) {\n nextIndex = this.navLinks.length - 1;\n }\n this.tabClicked(this.navLinks[nextIndex]);\n }\n\n @HostListener('window:keyup.PageUp', ['$event'])\n public keyupPageUp(): void {\n const nextIndex = (this.activeLink.index + 1) % this.navLinks.length;\n this.tabClicked(this.navLinks[nextIndex]);\n }\n\n public ngOnDestroy(): void {\n this._routerOutletLoadedSubscription.unsubscribe();\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n // Set nav tab\n if (this._router.url.startsWith('/customer-area/production-flow/quote')) {\n this.activeLink = this.navLinks[this.tabIndexQuote];\n } else if (this._router.url.startsWith('/customer-area/production-flow/fitting-form')) {\n this.activeLink = this.navLinks[this.tabIndexFittingForm];\n } else if (this._router.url.startsWith('/customer-area/production-flow/delivery-form/invoice')) {\n this.activeLink = this.navLinks[this.tabIndexInvoicedDeliveryForm];\n } else if (this._router.url.startsWith('/customer-area/production-flow/delivery-form/pro-forma')) {\n this.activeLink = this.navLinks[this.tabIndexProFormaDeliveryForm];\n } else {\n this.activeLink = this.navLinks[this.tabIndexDeliveryForm];\n }\n\n this._periodSearchService.periodSearchInfoSubject$\n .pipe(takeUntil(this._unsubscribeAll$))\n .subscribe((periodSearchInfo: PeriodSearchInfoModel) => {\n this._initPeriodSearchFilter(this.periodSearch);\n this.periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (this._isDeliveryFormContext()) {\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isFittingFormContext()) {\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isQuoteContext()) {\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n });\n\n this._productionFlowService.initializefilterDeliveryRouteOptionsSubject$\n .pipe(takeUntil(this._unsubscribeAll$))\n .subscribe((deliveryRoutes: OptionDeliveryRouteViewModel[]) => {\n this.deliveryRouteFilterOptions = this.buildFilterDeliveryRouteOptions(deliveryRoutes);\n if (this._isDeliveryFormContext()) {\n this._setDeliveryRouteFilter(this.deliveryFormState.documentFilter);\n } else if (this._isFittingFormContext()) {\n this._setDeliveryRouteFilter(this.fittingFormState.documentFilter);\n } else if (this._isInvoiceContext()) {\n this._setDeliveryRouteFilter(this.invoiceState.documentFilter);\n } else if (this._isProFormaContext()) {\n this._setDeliveryRouteFilter(this.proFormaState.documentFilter);\n } else if (this._isQuoteContext()) {\n this._setDeliveryRouteFilter(this.quoteState.documentFilter);\n }\n });\n\n this._activatedRoute.queryParams.pipe(takeUntil(this._unsubscribeAll$)).subscribe((params) => {\n this._buildPeriodSearchOptions();\n this._loadState(params['pstate']);\n this._initAdvancedFilter(this.advancedFilterPanel);\n this._initCustomerContext();\n this._initGridSortContext();\n this._initPeriodSearchFilter(this.periodSearch);\n this._initTextFilterContext();\n });\n\n this._authService.areaConfiguredFlag$.pipe(takeUntil(this._unsubscribeAll$)).subscribe(() => {\n this.demoModeFlag = this._workingLaboratoryService.laboratoryDemoModeFlag;\n });\n\n this._routerOutletLoadedSubscription = this._focusService.routerOutletLoadedHandler().subscribe(() => {\n if (this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag) {\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = false;\n this._matButtonToggleGroupFilter.value = null;\n this._matButtonToggleAdvancedFilter.focus();\n } else if (this._focusService.focusOnCustomerPanelToggleButtonFlag) {\n this._focusService.focusOnCustomerPanelToggleButtonFlag = false;\n this._matButtonToggleGroupFilter.value = null;\n this._matButtonToggleCustomerFilter.focus();\n } else {\n this.setFocus();\n }\n });\n }\n\n public optionDeliveryRouteFilterChanged(selectedOptions: ComboModel[]): void {\n if (this._isDeliveryFormContext()) {\n this.setDeliveryRouteFilter(this.deliveryFormState.documentFilter, selectedOptions);\n } else if (this._isFittingFormContext()) {\n this.setDeliveryRouteFilter(this.fittingFormState.documentFilter, selectedOptions);\n } else if (this._isInvoiceContext()) {\n this.setDeliveryRouteFilter(this.invoiceState.documentFilter, selectedOptions);\n } else if (this._isProFormaContext()) {\n this.setDeliveryRouteFilter(this.proFormaState.documentFilter, selectedOptions);\n } else if (this._isQuoteContext()) {\n this.setDeliveryRouteFilter(this.quoteState.documentFilter, selectedOptions);\n }\n\n this._resetPageIndex();\n this._saveStateAndSelfNavigate();\n }\n\n public optionDocumentStateChanged(optionLabel: ComboModel): void {\n if (this._isDeliveryFormContext()) {\n return;\n } else if (this._isFittingFormContext()) {\n if (optionLabel) {\n this.fittingFormState.documentFilter.status = DocumentStatusHelper.convertToEnum(optionLabel);\n } else {\n delete this.fittingFormState.documentFilter.status;\n }\n } else if (this._isInvoiceContext()) {\n return;\n } else if (this._isProFormaContext()) {\n return;\n } else if (this._isQuoteContext()) {\n if (optionLabel) {\n this.quoteState.documentFilter.status = DocumentStatusHelper.convertToEnum(optionLabel);\n } else {\n delete this.quoteState.documentFilter.status;\n }\n }\n\n // Reset to page 1\n this._resetPageIndex();\n this._saveStateAndSelfNavigate();\n }\n\n public periodSearchSubmitEventHandler(periodSearch: PeriodSearchModel): void {\n this.deliveryFormState.documentFilter = CustomerAreaPeriodSearchModelHelper.toDeliveryFormFilter(\n this.deliveryFormState.documentFilter,\n periodSearch\n );\n this.fittingFormState.documentFilter = CustomerAreaPeriodSearchModelHelper.toFittingFormFilter(\n this.fittingFormState.documentFilter,\n periodSearch\n );\n this.invoiceState.documentFilter = CustomerAreaPeriodSearchModelHelper.toInvoicedDeliveryFormFilter(\n this.invoiceState.documentFilter,\n periodSearch,\n this._isInvoiceContext()\n );\n this.proFormaState.documentFilter = CustomerAreaPeriodSearchModelHelper.toDeliveryFormFilter(\n this.proFormaState.documentFilter,\n periodSearch\n );\n this.quoteState.documentFilter = CustomerAreaPeriodSearchModelHelper.toQuoteFilter(this.quoteState.documentFilter, periodSearch);\n\n this._resetPageIndex();\n this._saveStateAndSelfNavigate(true);\n }\n\n public saveFavoriteClickedHandler(): void {\n // Save into the local storage the new favorites\n const sort = new Array();\n\n if (this._isDeliveryFormContext()) {\n this._saveCurrentState(sort, this.deliveryFormState, ProductionFlowComponent.strDeliveryFormKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.deliveryFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isFittingFormContext()) {\n this._saveCurrentState(sort, this.fittingFormState, ProductionFlowComponent.strFittingFormKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.fittingFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this._saveCurrentState(sort, this.invoiceState, ProductionFlowComponent.strInvoiceKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this._saveCurrentState(sort, this.proFormaState, ProductionFlowComponent.strProFormaKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isQuoteContext()) {\n this._saveCurrentState(sort, this.quoteState, ProductionFlowComponent.strQuoteKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.quoteState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._notifyService.displayInformationMessagesNow('Tris favoris mémorisés');\n }\n\n public saveFavoritePeriodSearchTypeEventHandler(periodSearchTypeKey: string): void {\n // Save into the local storage the new favorites\n this.periodSearchTypeFavorite = periodSearchTypeKey;\n\n let newPeriodSearchType = periodSearchTypeKey;\n if (newPeriodSearchType === '-1') {\n newPeriodSearchType = null;\n }\n\n // Save favorite period search type current\n this._localStorageService.write(ProductionFlowComponent.strPeriodSearchTypeFavorite, newPeriodSearchType);\n\n // Update current favorite\n this.periodSearchTypeSetToDefaultValueFlag = this.periodSearch.periodSearchType === this.periodSearchTypeFavorite;\n\n if (this._isDeliveryFormContext()) {\n this.sortSetToDefaultValueFlag = this.deliveryFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isFittingFormContext()) {\n this.sortSetToDefaultValueFlag = this.fittingFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isQuoteContext()) {\n this.sortSetToDefaultValueFlag = this.quoteState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._notifyService.displayInformationMessagesNow(`Type de période favori mémorisé`);\n }\n\n public setDeliveryRouteFilter(documentFilter: DocumentFilter, options: ComboModel[]): void {\n if (options) {\n const deliveryRoutesOptions = this.deliveryRouteFilterOptions.filter(\n (x) =>\n !(x.key in [this.deliveryRouteFilterOptionNoneDeliveryRouteFlag.key, this.deliveryRouteFilterOptionExcludedDeliveryRouteFlag.key])\n );\n const selectedOptionKeys = options.map((x) => x.key);\n\n const selectedDeliveryRouteNumbers = [];\n deliveryRoutesOptions.forEach((deliveryRoutesOption) => {\n if (selectedOptionKeys.some((x) => x === deliveryRoutesOption.key)) {\n selectedDeliveryRouteNumbers.push(FormTimeModelHelper.toTime(deliveryRoutesOption.label));\n }\n });\n\n const unselectedDeliveryRouteNumbers = [];\n deliveryRoutesOptions.forEach((deliveryRoutesOption) => {\n if (!selectedOptionKeys.some((x) => x === deliveryRoutesOption.key)) {\n unselectedDeliveryRouteNumbers.push(FormTimeModelHelper.toTime(deliveryRoutesOption.label));\n }\n });\n\n const optionNoneDeliveryRouteFlag = options.some((x) => x.key === this.deliveryRouteFilterOptionNoneDeliveryRouteFlag.key);\n const optionExcludedDeliveryRouteFlag = options.some((x) => x.key === this.deliveryRouteFilterOptionExcludedDeliveryRouteFlag.key);\n const hasSelectedDeliveryRouteFlag = selectedDeliveryRouteNumbers?.length > 0;\n\n if (optionNoneDeliveryRouteFlag) {\n documentFilter.noneDeliveryRouteFlag = true;\n if (hasSelectedDeliveryRouteFlag && optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = selectedDeliveryRouteNumbers;\n documentFilter.excludedDeliveryRoutes = unselectedDeliveryRouteNumbers;\n }\n if (hasSelectedDeliveryRouteFlag && !optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = selectedDeliveryRouteNumbers;\n documentFilter.excludedDeliveryRoutes = null;\n }\n if (!hasSelectedDeliveryRouteFlag && optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = unselectedDeliveryRouteNumbers;\n }\n if (!hasSelectedDeliveryRouteFlag && !optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = null;\n }\n } else {\n documentFilter.noneDeliveryRouteFlag = null;\n if (hasSelectedDeliveryRouteFlag && optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = selectedDeliveryRouteNumbers;\n documentFilter.excludedDeliveryRoutes = unselectedDeliveryRouteNumbers;\n }\n if (hasSelectedDeliveryRouteFlag && !optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = selectedDeliveryRouteNumbers;\n documentFilter.excludedDeliveryRoutes = null;\n }\n if (!hasSelectedDeliveryRouteFlag && optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = unselectedDeliveryRouteNumbers;\n }\n if (!hasSelectedDeliveryRouteFlag && !optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = null;\n }\n }\n } else {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = null;\n documentFilter.noneDeliveryRouteFlag = null;\n }\n }\n\n public setFocus(): void {\n this._focusService.setTimeoutOutsideAngular(() => {\n if (this._matButtonToggleGroupFilter.value === 'advancedFilter') {\n this._advancedFilterComponent?.setFocus();\n } else if (this._matButtonToggleGroupFilter.value === 'customerFilter') {\n this._customerFilterPanelComponent?.setFocus();\n }\n });\n }\n\n public sortActiveChanged(newSortActive: string): void {\n if (this._isDeliveryFormContext()) {\n this.deliveryFormState.sortActive = newSortActive;\n } else if (this._isFittingFormContext()) {\n this.fittingFormState.sortActive = newSortActive;\n } else if (this._isInvoiceContext()) {\n this.invoiceState.sortActive = newSortActive;\n } else if (this._isProFormaContext()) {\n this.proFormaState.sortActive = newSortActive;\n } else if (this._isQuoteContext()) {\n this.quoteState.sortActive = newSortActive;\n }\n\n this._saveStateAndSelfNavigate(true);\n }\n\n public sortDirectionChanged(newSortDirection: string): void {\n if (this._isDeliveryFormContext()) {\n this.deliveryFormState.sortDirection = newSortDirection;\n } else if (this._isFittingFormContext()) {\n this.fittingFormState.sortDirection = newSortDirection;\n } else if (this._isInvoiceContext()) {\n this.invoiceState.sortDirection = newSortDirection;\n } else if (this._isProFormaContext()) {\n this.proFormaState.sortDirection = newSortDirection;\n } else if (this._isQuoteContext()) {\n this.quoteState.sortDirection = newSortDirection;\n }\n\n this._saveStateAndSelfNavigate(true);\n }\n\n public tabClicked(navLink: RouterLinkModel): void {\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = false;\n this._focusService.focusOnCustomerPanelToggleButtonFlag = false;\n this.activeLink = navLink;\n this._localStorageService.write(ProductionFlowComponent.strCurrentTabLink, this.activeLink.link.replace('./', ''));\n this._loadState(undefined);\n this._buildPeriodSearchOptions();\n this._initAdvancedFilter(this.advancedFilterPanel);\n this._initCustomerContext();\n this._initGridSortContext();\n this._initPeriodSearchFilter(this.periodSearch);\n this._initTextFilterContext();\n }\n\n public textFilterChangedEventHandler(newTextFilter: string): void {\n this._highlightService.compileFilter(newTextFilter);\n\n this.deliveryFormState.documentFilter.textFilter = newTextFilter;\n this.fittingFormState.documentFilter.textFilter = newTextFilter;\n this.invoiceState.documentFilter.textFilter = newTextFilter;\n this.proFormaState.documentFilter.textFilter = newTextFilter;\n this.quoteState.documentFilter.textFilter = newTextFilter;\n\n this._resetPageIndex();\n\n this._saveStateAndSelfNavigate();\n }\n\n public toggleChange($event: MatButtonToggleChange): void {\n const toggle = $event.source;\n if (toggle) {\n const group = toggle.buttonToggleGroup;\n if ($event.value.some((item) => item === toggle.value)) {\n group.value = [toggle.value];\n }\n }\n }\n\n private _buildPeriodSearchOptions(): void {\n this.periodSearchTypeOptions = PeriodSearchTypeHelper.buildOptions();\n if (this._isDeliveryFormContext()) {\n this.periodSearchDateTypeOptions = null;\n } else if (this._isFittingFormContext()) {\n this.periodSearchDateTypeOptions = null;\n } else if (this._isInvoiceContext()) {\n this.periodSearchDateTypeOptions = PeriodSearchDeliveryFormDateTypeHelper.buildOptions();\n } else if (this._isProFormaContext()) {\n this.periodSearchDateTypeOptions = null;\n } else if (this._isQuoteContext()) {\n this.periodSearchDateTypeOptions = null;\n }\n }\n\n private _initAdvancedFilter(advancedFilterPanel: AdvancedFilterPanelModel): void {\n this.advancedFilterPanel = advancedFilterPanel;\n if (this._isDeliveryFormContext()) {\n this.deliveryFormState.documentFilter = AdvancedFilterPanelModelHelper.toDeliveryFormFilter(\n advancedFilterPanel,\n this.deliveryFormState.documentFilter\n );\n } else if (this._isFittingFormContext()) {\n this.fittingFormState.documentFilter = AdvancedFilterPanelModelHelper.toFittingFormFilter(\n advancedFilterPanel,\n this.fittingFormState.documentFilter\n );\n } else if (this._isInvoiceContext()) {\n this.invoiceState.documentFilter = AdvancedFilterPanelModelHelper.toDeliveryFormFilter(\n advancedFilterPanel,\n this.invoiceState.documentFilter\n );\n } else if (this._isProFormaContext()) {\n this.proFormaState.documentFilter = AdvancedFilterPanelModelHelper.toDeliveryFormFilter(\n advancedFilterPanel,\n this.proFormaState.documentFilter\n );\n } else if (this._isQuoteContext()) {\n this.quoteState.documentFilter = AdvancedFilterPanelModelHelper.toQuoteFilter(advancedFilterPanel, this.quoteState.documentFilter);\n }\n this._updateAdvancedFilterToggleButtonLabel();\n }\n\n private _initCustomer(documentFilter: DocumentFilter): void {\n let customerUuid: string;\n if (documentFilter) {\n if (documentFilter.customerGroupUuids && documentFilter.customerGroupUuids.length > 0) {\n customerUuid = documentFilter.customerGroupUuids[0];\n } else {\n if (documentFilter.customerUuids && documentFilter.customerUuids.length > 0) {\n customerUuid = documentFilter.customerUuids[0];\n }\n }\n }\n\n if (customerUuid) {\n this._customerService.getById(customerUuid).subscribe((res) => {\n this.customerFilterPanel = new CustomerFilterPanelModel();\n this.customerFilterPanel.customer = new CustomerModel();\n this.customerFilterPanel.customer.code = res.code;\n this.customerFilterPanel.customer.groupFlag = res.customerMembers && res.customerMembers.length > 0;\n this.customerFilterPanel.customer.name = res.name;\n this.customerFilterPanel.customer.uuid = res.uuid;\n\n if (documentFilter.customerGroupUuids && documentFilter.customerGroupUuids.length > 0) {\n this.customerFilterPanel.showCustomerMembersFlag = true;\n }\n\n this._updateCustomerFilterToggleButtonLabel();\n });\n } else {\n this.customerFilterPanel = null;\n\n this._updateCustomerFilterToggleButtonLabel();\n }\n }\n\n private _initCustomerContext(): void {\n if (this._isDeliveryFormContext()) {\n if (this.deliveryFormState) {\n this._initCustomer(this.deliveryFormState.documentFilter);\n }\n }\n\n if (this._isFittingFormContext()) {\n if (this.fittingFormState) {\n this._initCustomer(this.fittingFormState.documentFilter);\n }\n }\n\n if (this._isInvoiceContext()) {\n if (this.invoiceState) {\n this._initCustomer(this.invoiceState.documentFilter);\n }\n }\n\n if (this._isProFormaContext()) {\n if (this.proFormaState) {\n this._initCustomer(this.proFormaState.documentFilter);\n }\n }\n\n if (this._isQuoteContext()) {\n if (this.quoteState) {\n this._initCustomer(this.quoteState.documentFilter);\n }\n }\n }\n\n private _initFavoriteContext(shouldForceSortFlag: boolean): void {\n if (this.deliveryFormState) {\n this._initFavoriteSortFromLocalStorage(\n ProductionFlowComponent.strDeliveryFormKeyLocalStorageSort,\n this.deliveryFormState,\n shouldForceSortFlag\n );\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.deliveryFormState.documentFilter,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString(),\n shouldForceSortFlag\n );\n }\n\n if (this.fittingFormState) {\n this._initFavoriteSortFromLocalStorage(\n ProductionFlowComponent.strFittingFormKeyLocalStorageSort,\n this.fittingFormState,\n shouldForceSortFlag\n );\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.fittingFormState.documentFilter,\n '0',\n shouldForceSortFlag\n );\n }\n\n if (this.invoiceState) {\n this._initFavoriteSortFromLocalStorage(ProductionFlowComponent.strInvoiceKeyLocalStorageSort, this.invoiceState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.invoiceState.documentFilter,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString(),\n shouldForceSortFlag\n );\n }\n\n if (this.proFormaState) {\n this._initFavoriteSortFromLocalStorage(\n ProductionFlowComponent.strProFormaKeyLocalStorageSort,\n this.proFormaState,\n shouldForceSortFlag\n );\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.proFormaState.documentFilter,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString(),\n shouldForceSortFlag\n );\n }\n\n if (this.quoteState) {\n this._initFavoriteSortFromLocalStorage(ProductionFlowComponent.strQuoteKeyLocalStorageSort, this.quoteState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.quoteState.documentFilter,\n '0',\n shouldForceSortFlag\n );\n }\n }\n\n private _initFavoritePeriodSearchTypeFromLocalStorage(\n key: string,\n documentFilter: DocumentFilter,\n periodSearchDateTypeDefault: string,\n shouldForceSortFlag: boolean\n ): void {\n const strFavoritePeriodSearchType = this._localStorageService?.read(key);\n if (!strFavoritePeriodSearchType) {\n // No favorites stored into the local storage\n this.periodSearchTypeFavorite = this.periodSearchTypeDefault;\n } else {\n this.periodSearchTypeFavorite = strFavoritePeriodSearchType;\n }\n // No session period search type\n if (!this.periodSearch?.periodSearchType || shouldForceSortFlag) {\n if (!this.periodSearch) {\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, periodSearchDateTypeDefault);\n } else {\n this.periodSearch.periodSearchType = this.periodSearchTypeFavorite;\n }\n\n documentFilter.periodSearchType = Number(this.periodSearch.periodSearchType);\n }\n\n this.periodSearchTypeSetToDefaultValueFlag = this.periodSearch?.periodSearchType === this.periodSearchTypeFavorite;\n }\n\n private _initFavoriteSortFromLocalStorage(key: string, state: PaginatedListState, shouldForceSortFlag: boolean): void {\n const sort = this._localStorageService.read(key);\n state.initSort(shouldForceSortFlag, sort);\n this.sortSetToDefaultValueFlag = state.isSortSetToDefaultValues();\n }\n\n private _initGridSort(state: PaginatedListState): void {\n if (this._gridSortComponent.sortActive !== state.sortActive) {\n this._gridSortComponent.sortActive = state.sortActive;\n }\n\n if (this._gridSortComponent.sortDirection !== state.sortDirection) {\n this._gridSortComponent.sortDirection = state.sortDirection;\n }\n\n if (this._gridSortComponent.sortFavorite !== state.sortFavorite) {\n this._gridSortComponent.sortFavorite = state.sortFavorite;\n }\n\n if (this._gridSortComponent.sortDirectionFavorite !== state.sortDirectionFavorite) {\n this._gridSortComponent.sortDirectionFavorite = state.sortDirectionFavorite;\n }\n }\n\n private _initGridSortContext(): void {\n if (this._isDeliveryFormContext()) {\n this._initGridSort(this.deliveryFormState);\n } else if (this._isFittingFormContext()) {\n this._initGridSort(this.fittingFormState);\n } else if (this._isInvoiceContext()) {\n this._initGridSort(this.invoiceState);\n } else if (this._isProFormaContext()) {\n this._initGridSort(this.proFormaState);\n } else if (this._isQuoteContext()) {\n this._initGridSort(this.quoteState);\n }\n }\n\n private _initPeriodSearchFilter(periodSearch: PeriodSearchModel): void {\n if (this._isDeliveryFormContext()) {\n if (!periodSearch) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.build(\n this.periodSearchTypeFavorite,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString()\n );\n }\n\n if (this.deliveryFormState) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.deliveryFormState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n if (this._isFittingFormContext()) {\n if (!periodSearch) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, '0');\n }\n\n if (this.fittingFormState) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.fromFittingFormFilter(\n this.fittingFormState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n if (this._isInvoiceContext()) {\n if (!periodSearch) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.build(\n this.periodSearchTypeFavorite,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString()\n );\n }\n\n if (this.invoiceState) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.invoiceState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n if (this._isProFormaContext()) {\n if (!periodSearch) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.build(\n this.periodSearchTypeFavorite,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString()\n );\n }\n\n if (this.proFormaState) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.proFormaState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n if (this._isQuoteContext()) {\n if (!periodSearch) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, '0');\n }\n\n if (this.quoteState) {\n periodSearch = CustomerAreaPeriodSearchModelHelper.fromQuoteFilter(\n this.quoteState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n this.periodSearch = periodSearch;\n }\n\n private _initTextFilter(textFilter: string): void {\n this.gridFilter = new GridFilterModel(textFilter);\n this._highlightService.compileFilter(textFilter);\n }\n\n private _initTextFilterContext(): void {\n if (this._isDeliveryFormContext()) {\n if (this.deliveryFormState && this.deliveryFormState.documentFilter) {\n this._initTextFilter(this.deliveryFormState.documentFilter.textFilter);\n }\n }\n\n if (this._isFittingFormContext()) {\n if (this.fittingFormState && this.fittingFormState.documentFilter) {\n this._initTextFilter(this.fittingFormState.documentFilter.textFilter);\n }\n }\n\n if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.documentFilter) {\n this._initTextFilter(this.invoiceState.documentFilter.textFilter);\n }\n }\n\n if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.documentFilter) {\n this._initTextFilter(this.proFormaState.documentFilter.textFilter);\n }\n }\n\n if (this._isQuoteContext()) {\n if (this.quoteState && this.quoteState.documentFilter) {\n this._initTextFilter(this.quoteState.documentFilter.textFilter);\n }\n }\n }\n\n private _isDeliveryFormContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexDeliveryForm].label;\n }\n\n private _isFittingFormContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexFittingForm].label;\n }\n\n private _isInvoiceContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexInvoicedDeliveryForm].label;\n }\n\n private _isProFormaContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexProFormaDeliveryForm].label;\n }\n\n private _isQuoteContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexQuote].label;\n }\n\n private _loadDeliveryFormState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n stateUrl,\n ProductionFlowComponent.strDeliveryFormState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.deliveryFormState.documentFilter);\n this._setDeliveryRouteFilter(this.deliveryFormState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromDeliveryFormFilter(this.deliveryFormState.documentFilter);\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.deliveryFormState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadFittingFormState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n stateUrl,\n ProductionFlowComponent.strFittingFormState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.fittingFormState.documentFilter);\n this._setDeliveryRouteFilter(this.fittingFormState.documentFilter);\n this._setDocumentStatus(this.fittingFormState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromFittingFormFilter(this.fittingFormState.documentFilter);\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.fromFittingFormFilter(\n this.fittingFormState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadInvoiceState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.invoiceState,\n stateUrl,\n ProductionFlowComponent.strInvoiceState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.invoiceState.documentFilter);\n this._setDeliveryRouteFilter(this.invoiceState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromDeliveryFormFilter(this.invoiceState.documentFilter);\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.invoiceState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadProFormaState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.proFormaState,\n stateUrl,\n ProductionFlowComponent.strProFormaState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.proFormaState.documentFilter);\n this._setDeliveryRouteFilter(this.proFormaState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromDeliveryFormFilter(this.proFormaState.documentFilter);\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.proFormaState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadQuoteState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.quoteState,\n stateUrl,\n ProductionFlowComponent.strQuoteState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.quoteState.documentFilter);\n this._setDocumentStatus(this.quoteState.documentFilter);\n this._setDeliveryRouteFilter(this.quoteState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromQuoteFilter(this.quoteState.documentFilter);\n this.periodSearch = CustomerAreaPeriodSearchModelHelper.fromQuoteFilter(\n this.quoteState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadState(stateUrl: string): void {\n let shouldReloadFlag = true;\n this._initFavoriteContext(!stateUrl);\n\n if (this._isDeliveryFormContext()) {\n shouldReloadFlag = this._loadDeliveryFormState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.deliveryFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeFittingFormStateFromDeliveryFormState();\n this._synchronizeInvoiceStateFromDeliveryFormState();\n this._synchronizeProFormaStateFromDeliveryFormState();\n this._synchronizeQuoteStateFromDeliveryFormState();\n }\n\n if (this._isFittingFormContext()) {\n shouldReloadFlag = this._loadFittingFormState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.fittingFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeDeliveryFormStateFromFittingFormState();\n this._synchronizeInvoiceStateFromFittingFormState();\n this._synchronizeProFormaStateFromFittingFormState();\n this._synchronizeQuoteStateFromFittingFormState();\n }\n\n if (this._isInvoiceContext()) {\n shouldReloadFlag = this._loadInvoiceState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeDeliveryFormStateFromInvoiceState();\n this._synchronizeFittingFormStateFromInvoiceState();\n this._synchronizeProFormaStateFromInvoiceState();\n this._synchronizeQuoteStateFromInvoiceState();\n }\n\n if (this._isProFormaContext()) {\n shouldReloadFlag = this._loadProFormaState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeDeliveryFormStateFromProFormaState();\n this._synchronizeFittingFormStateFromProFormaState();\n this._synchronizeInvoiceStateFromProFormaState();\n this._synchronizeQuoteStateFromProFormaState();\n }\n\n if (this._isQuoteContext()) {\n shouldReloadFlag = this._loadQuoteState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.quoteState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeDeliveryFormStateFromQuoteState();\n this._synchronizeFittingFormStateFromQuoteState();\n this._synchronizeInvoiceStateFromQuoteState();\n this._synchronizeProFormaStateFromQuoteState();\n }\n\n if (shouldReloadFlag) {\n this._selfNavigate(true);\n return;\n }\n }\n\n private _resetPageIndex(): void {\n if (this.deliveryFormState) {\n this.deliveryFormState.pageIndex = 0;\n }\n\n if (this.fittingFormState) {\n this.fittingFormState.pageIndex = 0;\n }\n\n if (this.invoiceState) {\n this.invoiceState.pageIndex = 0;\n }\n\n if (this.proFormaState) {\n this.proFormaState.pageIndex = 0;\n }\n\n if (this.quoteState) {\n this.quoteState.pageIndex = 0;\n }\n }\n\n private _saveCurrentState(sort: string[], state: PaginatedListState, strKeySortFavorite: string): void {\n sort.push(state.sortDirection, state.sortActive);\n this._localStorageService.write(strKeySortFavorite, sort);\n\n // Update current favorite into the gridsort\n state.updateFavoriteSortFromCurrentSort();\n PaginatedListState.setSortState(this._gridSortComponent, state);\n }\n\n private _saveStateAndSelfNavigate(replaceUrl = false): void {\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n\n if (this._isDeliveryFormContext()) {\n this.sortSetToDefaultValueFlag = this.deliveryFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isFittingFormContext()) {\n this.sortSetToDefaultValueFlag = this.fittingFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isQuoteContext()) {\n this.sortSetToDefaultValueFlag = this.quoteState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._selfNavigate(replaceUrl);\n }\n\n private _selfNavigate(replaceUrl = false): void {\n if (this._isDeliveryFormContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.deliveryFormState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isFittingFormContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.fittingFormState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isInvoiceContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.invoiceState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isProFormaContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.proFormaState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isQuoteContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.quoteState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n }\n }\n\n private _setCustomerUuid(documentFilter: DocumentFilter): void {\n let customerUuid = null;\n if (documentFilter.customerGroupUuids && documentFilter.customerGroupUuids.length > 0) {\n customerUuid = documentFilter.customerGroupUuids[0];\n } else {\n if (documentFilter.customerUuids && documentFilter.customerUuids.length > 0) {\n customerUuid = documentFilter.customerUuids[0];\n }\n }\n this.customerFilterUuid = customerUuid;\n\n this._preselectionService.setProductionFlowCustomer(customerUuid);\n }\n\n private _setDeliveryRouteFilter(documentFilter: DocumentFilter): void {\n let _deliveryRouteFilterSelection = new Array();\n\n const optionDeliveryRoutes = new Array();\n documentFilter.deliveryRoutes?.forEach((optionDeliveryRoute: number) => {\n const option = this.deliveryRouteFilterOptions?.find((x) => FormTimeModelHelper.toTime(x.label) === optionDeliveryRoute);\n if (option) {\n optionDeliveryRoutes.push(option);\n }\n });\n const optionExcludedDeliveryRoutes = new Array();\n documentFilter.excludedDeliveryRoutes?.forEach((optionDeliveryRoute: number) => {\n const option = this.deliveryRouteFilterOptions?.find((x) => FormTimeModelHelper.toTime(x.label) === optionDeliveryRoute);\n if (option) {\n optionExcludedDeliveryRoutes.push(option);\n }\n });\n const optionNoneDeliveryRouteFlag = this.deliveryRouteFilterOptions?.find((x) => x.key === '0');\n const optionExcludedDeliveryRouteFlag = this.deliveryRouteFilterOptions?.find((x) => x.key === '1');\n\n if (documentFilter.noneDeliveryRouteFlag) {\n if (documentFilter.deliveryRoutes && documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = optionDeliveryRoutes;\n _deliveryRouteFilterSelection.push(optionNoneDeliveryRouteFlag);\n _deliveryRouteFilterSelection.push(optionExcludedDeliveryRouteFlag);\n }\n\n if (!documentFilter.deliveryRoutes && !documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection.push(optionNoneDeliveryRouteFlag);\n }\n\n if (documentFilter.deliveryRoutes && !documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = optionDeliveryRoutes;\n _deliveryRouteFilterSelection.push(optionNoneDeliveryRouteFlag);\n }\n\n if (!documentFilter.deliveryRoutes && documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection.push(optionExcludedDeliveryRouteFlag);\n _deliveryRouteFilterSelection.push(optionNoneDeliveryRouteFlag);\n }\n } else {\n if (documentFilter.deliveryRoutes && documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = optionDeliveryRoutes;\n _deliveryRouteFilterSelection.push(optionExcludedDeliveryRouteFlag);\n }\n if (!documentFilter.deliveryRoutes && !documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = new Array();\n }\n if (documentFilter.deliveryRoutes && !documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = optionDeliveryRoutes;\n }\n if (!documentFilter.deliveryRoutes && documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection.push(optionExcludedDeliveryRouteFlag);\n }\n }\n\n this.deliveryRouteFilterSelection = _deliveryRouteFilterSelection;\n }\n\n private _setDocumentStatus(documentFilter: DocumentFilter): void {\n this.documentStateSelected = DocumentStatusHelper.convertToComboModel(documentFilter.status);\n }\n\n private _synchronizeDeliveryFormStateFromFittingFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n null,\n ProductionFlowComponent.strDeliveryFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.deliveryFormState.documentFilter, this.fittingFormState.documentFilter);\n\n this.deliveryFormState.documentFilter.customerGroupUuids = this.fittingFormState.documentFilter.customerGroupUuids;\n this.deliveryFormState.documentFilter.customerUuids = this.fittingFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.deliveryFormState.documentFilter.deliveryRoutes = this.fittingFormState.documentFilter.deliveryRoutes;\n this.deliveryFormState.documentFilter.excludedDeliveryRoutes = this.fittingFormState.documentFilter.excludedDeliveryRoutes;\n this.deliveryFormState.documentFilter.noneDeliveryRouteFlag = this.fittingFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.deliveryFormState.documentFilter.periodSearchPage = this.fittingFormState.documentFilter.periodSearchPage;\n this.deliveryFormState.documentFilter.periodSearchType = this.fittingFormState.documentFilter.periodSearchType;\n\n if (!this.fittingFormState.documentFilter.periodSearchType && this.fittingFormState.documentFilter.periodSearchType !== 0) {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.fittingFormState.documentFilter.toDeliveryDate;\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = null;\n this.deliveryFormState.documentFilter.toDeliveryDate = null;\n }\n\n this.deliveryFormState.documentFilter.fromInvoiceDate = null;\n this.deliveryFormState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n }\n\n private _synchronizeDeliveryFormStateFromInvoiceState(): void {\n // synchronize the delivery form state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n null,\n ProductionFlowComponent.strDeliveryFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.deliveryFormState.documentFilter, this.invoiceState.documentFilter);\n\n this.deliveryFormState.documentFilter.customerGroupUuids = this.invoiceState.documentFilter.customerGroupUuids;\n this.deliveryFormState.documentFilter.customerUuids = this.invoiceState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.deliveryFormState.documentFilter.deliveryRoutes = this.invoiceState.documentFilter.deliveryRoutes;\n this.deliveryFormState.documentFilter.excludedDeliveryRoutes = this.invoiceState.documentFilter.excludedDeliveryRoutes;\n this.deliveryFormState.documentFilter.noneDeliveryRouteFlag = this.invoiceState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.deliveryFormState.documentFilter.periodSearchPage = this.invoiceState.documentFilter.periodSearchPage;\n this.deliveryFormState.documentFilter.periodSearchType = this.invoiceState.documentFilter.periodSearchType;\n\n if (!this.invoiceState.documentFilter.periodSearchType && this.invoiceState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromDeliveryDate) {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromDeliveryDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toDeliveryDate;\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromInvoiceDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toInvoiceDate;\n }\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = null;\n this.deliveryFormState.documentFilter.toDeliveryDate = null;\n }\n\n this.deliveryFormState.documentFilter.fromInvoiceDate = null;\n this.deliveryFormState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n }\n\n private _synchronizeDeliveryFormStateFromProFormaState(): void {\n // synchronize the delivery form state with the loaded pro forma state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n null,\n ProductionFlowComponent.strDeliveryFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.deliveryFormState.documentFilter, this.proFormaState.documentFilter);\n\n this.deliveryFormState.documentFilter.customerGroupUuids = this.proFormaState.documentFilter.customerGroupUuids;\n this.deliveryFormState.documentFilter.customerUuids = this.proFormaState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.deliveryFormState.documentFilter.deliveryRoutes = this.proFormaState.documentFilter.deliveryRoutes;\n this.deliveryFormState.documentFilter.excludedDeliveryRoutes = this.proFormaState.documentFilter.excludedDeliveryRoutes;\n this.deliveryFormState.documentFilter.noneDeliveryRouteFlag = this.proFormaState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.deliveryFormState.documentFilter.periodSearchPage = this.proFormaState.documentFilter.periodSearchPage;\n this.deliveryFormState.documentFilter.periodSearchType = this.proFormaState.documentFilter.periodSearchType;\n\n if (!this.proFormaState.documentFilter.periodSearchType && this.proFormaState.documentFilter.periodSearchType !== 0) {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.proFormaState.documentFilter.toDeliveryDate;\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = null;\n this.deliveryFormState.documentFilter.toDeliveryDate = null;\n }\n\n this.deliveryFormState.documentFilter.fromInvoiceDate = null;\n this.deliveryFormState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n }\n\n private _synchronizeDeliveryFormStateFromQuoteState(): void {\n // synchronize the delivery form state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n null,\n ProductionFlowComponent.strDeliveryFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.deliveryFormState.documentFilter, this.quoteState.documentFilter);\n\n this.deliveryFormState.documentFilter.customerGroupUuids = this.quoteState.documentFilter.customerGroupUuids;\n this.deliveryFormState.documentFilter.customerUuids = this.quoteState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.deliveryFormState.documentFilter.deliveryRoutes = this.quoteState.documentFilter.deliveryRoutes;\n this.deliveryFormState.documentFilter.excludedDeliveryRoutes = this.quoteState.documentFilter.excludedDeliveryRoutes;\n this.deliveryFormState.documentFilter.noneDeliveryRouteFlag = this.quoteState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.deliveryFormState.documentFilter.periodSearchPage = this.quoteState.documentFilter.periodSearchPage;\n this.deliveryFormState.documentFilter.periodSearchType = this.quoteState.documentFilter.periodSearchType;\n\n if (!this.quoteState.documentFilter.periodSearchType && this.quoteState.documentFilter.periodSearchType !== 0) {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.quoteState.documentFilter.fromQuoteDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.quoteState.documentFilter.toQuoteDate;\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = null;\n this.deliveryFormState.documentFilter.toDeliveryDate = null;\n }\n\n this.deliveryFormState.documentFilter.fromInvoiceDate = null;\n this.deliveryFormState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n }\n\n private _synchronizeFittingFormStateFromDeliveryFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n null,\n ProductionFlowComponent.strFittingFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.fittingFormState.documentFilter, this.deliveryFormState.documentFilter);\n\n this.fittingFormState.documentFilter.customerGroupUuids = this.deliveryFormState.documentFilter.customerGroupUuids;\n this.fittingFormState.documentFilter.customerUuids = this.deliveryFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.fittingFormState.documentFilter.deliveryRoutes = this.deliveryFormState.documentFilter.deliveryRoutes;\n this.fittingFormState.documentFilter.excludedDeliveryRoutes = this.deliveryFormState.documentFilter.excludedDeliveryRoutes;\n this.fittingFormState.documentFilter.noneDeliveryRouteFlag = this.deliveryFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.fittingFormState.documentFilter.periodSearchPage = this.deliveryFormState.documentFilter.periodSearchPage;\n this.fittingFormState.documentFilter.periodSearchType = this.deliveryFormState.documentFilter.periodSearchType;\n\n if (!this.deliveryFormState.documentFilter.periodSearchType && this.deliveryFormState.documentFilter.periodSearchType !== 0) {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = null;\n this.fittingFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n }\n\n private _synchronizeFittingFormStateFromInvoiceState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n null,\n ProductionFlowComponent.strFittingFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.fittingFormState.documentFilter, this.invoiceState.documentFilter);\n\n this.fittingFormState.documentFilter.customerGroupUuids = this.invoiceState.documentFilter.customerGroupUuids;\n this.fittingFormState.documentFilter.customerUuids = this.invoiceState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.fittingFormState.documentFilter.deliveryRoutes = this.invoiceState.documentFilter.deliveryRoutes;\n this.fittingFormState.documentFilter.excludedDeliveryRoutes = this.invoiceState.documentFilter.excludedDeliveryRoutes;\n this.fittingFormState.documentFilter.noneDeliveryRouteFlag = this.invoiceState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.fittingFormState.documentFilter.periodSearchPage = this.invoiceState.documentFilter.periodSearchPage;\n this.fittingFormState.documentFilter.periodSearchType = this.invoiceState.documentFilter.periodSearchType;\n\n if (!this.invoiceState.documentFilter.periodSearchType && this.invoiceState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromDeliveryDate) {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromDeliveryDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toDeliveryDate;\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromInvoiceDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toInvoiceDate;\n }\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = null;\n this.fittingFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n }\n\n private _synchronizeFittingFormStateFromProFormaState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n null,\n ProductionFlowComponent.strFittingFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.fittingFormState.documentFilter, this.proFormaState.documentFilter);\n\n this.fittingFormState.documentFilter.customerGroupUuids = this.proFormaState.documentFilter.customerGroupUuids;\n this.fittingFormState.documentFilter.customerUuids = this.proFormaState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.fittingFormState.documentFilter.deliveryRoutes = this.proFormaState.documentFilter.deliveryRoutes;\n this.fittingFormState.documentFilter.excludedDeliveryRoutes = this.proFormaState.documentFilter.excludedDeliveryRoutes;\n this.fittingFormState.documentFilter.noneDeliveryRouteFlag = this.proFormaState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.fittingFormState.documentFilter.periodSearchPage = this.proFormaState.documentFilter.periodSearchPage;\n this.fittingFormState.documentFilter.periodSearchType = this.proFormaState.documentFilter.periodSearchType;\n\n if (!this.proFormaState.documentFilter.periodSearchType && this.proFormaState.documentFilter.periodSearchType !== 0) {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.proFormaState.documentFilter.toDeliveryDate;\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = null;\n this.fittingFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n }\n\n private _synchronizeFittingFormStateFromQuoteState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n null,\n ProductionFlowComponent.strFittingFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.fittingFormState.documentFilter, this.quoteState.documentFilter);\n\n this.fittingFormState.documentFilter.customerGroupUuids = this.quoteState.documentFilter.customerGroupUuids;\n this.fittingFormState.documentFilter.customerUuids = this.quoteState.documentFilter.customerUuids;\n this.fittingFormState.documentFilter.status = this.quoteState.documentFilter.status;\n // synchronize delivery routes filter\n this.fittingFormState.documentFilter.deliveryRoutes = this.quoteState.documentFilter.deliveryRoutes;\n this.fittingFormState.documentFilter.excludedDeliveryRoutes = this.quoteState.documentFilter.excludedDeliveryRoutes;\n this.fittingFormState.documentFilter.noneDeliveryRouteFlag = this.quoteState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.fittingFormState.documentFilter.periodSearchPage = this.quoteState.documentFilter.periodSearchPage;\n this.fittingFormState.documentFilter.periodSearchType = this.quoteState.documentFilter.periodSearchType;\n\n if (!this.quoteState.documentFilter.periodSearchType && this.quoteState.documentFilter.periodSearchType !== 0) {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.quoteState.documentFilter.fromQuoteDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.quoteState.documentFilter.toQuoteDate;\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = null;\n this.fittingFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n }\n\n private _synchronizeInvoiceStateFromDeliveryFormState(): void {\n // synchronize the invoice state with the loaded delivery form state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, ProductionFlowComponent.strInvoiceState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.invoiceState.documentFilter, this.deliveryFormState.documentFilter);\n\n this.invoiceState.documentFilter.customerGroupUuids = this.deliveryFormState.documentFilter.customerGroupUuids;\n this.invoiceState.documentFilter.customerUuids = this.deliveryFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.invoiceState.documentFilter.deliveryRoutes = this.deliveryFormState.documentFilter.deliveryRoutes;\n this.invoiceState.documentFilter.excludedDeliveryRoutes = this.deliveryFormState.documentFilter.excludedDeliveryRoutes;\n this.invoiceState.documentFilter.noneDeliveryRouteFlag = this.deliveryFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.invoiceState.documentFilter.periodSearchPage = this.deliveryFormState.documentFilter.periodSearchPage;\n this.invoiceState.documentFilter.periodSearchType = this.deliveryFormState.documentFilter.periodSearchType;\n\n if (!this.deliveryFormState.documentFilter.periodSearchType && this.deliveryFormState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromInvoiceDate) {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toInvoiceDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toDeliveryDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeInvoiceStateFromFittingFormState(): void {\n // synchronize the invoice state with the loaded delivery form state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, ProductionFlowComponent.strInvoiceState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.invoiceState.documentFilter, this.fittingFormState.documentFilter);\n\n this.invoiceState.documentFilter.customerGroupUuids = this.fittingFormState.documentFilter.customerGroupUuids;\n this.invoiceState.documentFilter.customerUuids = this.fittingFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.invoiceState.documentFilter.deliveryRoutes = this.fittingFormState.documentFilter.deliveryRoutes;\n this.invoiceState.documentFilter.excludedDeliveryRoutes = this.fittingFormState.documentFilter.excludedDeliveryRoutes;\n this.invoiceState.documentFilter.noneDeliveryRouteFlag = this.fittingFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.invoiceState.documentFilter.periodSearchPage = this.fittingFormState.documentFilter.periodSearchPage;\n this.invoiceState.documentFilter.periodSearchType = this.fittingFormState.documentFilter.periodSearchType;\n\n if (!this.fittingFormState.documentFilter.periodSearchType && this.fittingFormState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromInvoiceDate) {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toInvoiceDate = this.fittingFormState.documentFilter.toDeliveryDate;\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toDeliveryDate = this.fittingFormState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeInvoiceStateFromProFormaState(): void {\n // synchronize the invoice state with the loaded pro forma state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, ProductionFlowComponent.strInvoiceState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.invoiceState.documentFilter, this.proFormaState.documentFilter);\n\n this.invoiceState.documentFilter.customerGroupUuids = this.proFormaState.documentFilter.customerGroupUuids;\n this.invoiceState.documentFilter.customerUuids = this.proFormaState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.invoiceState.documentFilter.deliveryRoutes = this.proFormaState.documentFilter.deliveryRoutes;\n this.invoiceState.documentFilter.excludedDeliveryRoutes = this.proFormaState.documentFilter.excludedDeliveryRoutes;\n this.invoiceState.documentFilter.noneDeliveryRouteFlag = this.proFormaState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.invoiceState.documentFilter.periodSearchPage = this.proFormaState.documentFilter.periodSearchPage;\n this.invoiceState.documentFilter.periodSearchType = this.proFormaState.documentFilter.periodSearchType;\n\n if (!this.proFormaState.documentFilter.periodSearchType && this.proFormaState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromInvoiceDate) {\n this.invoiceState.documentFilter.fromInvoiceDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toInvoiceDate = this.proFormaState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toDeliveryDate = this.proFormaState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeInvoiceStateFromQuoteState(): void {\n // synchronize the invoice state with the loaded quote state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, ProductionFlowComponent.strInvoiceState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.invoiceState.documentFilter, this.quoteState.documentFilter);\n\n this.invoiceState.documentFilter.customerGroupUuids = this.quoteState.documentFilter.customerGroupUuids;\n this.invoiceState.documentFilter.customerUuids = this.quoteState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.invoiceState.documentFilter.deliveryRoutes = this.quoteState.documentFilter.deliveryRoutes;\n this.invoiceState.documentFilter.excludedDeliveryRoutes = this.quoteState.documentFilter.excludedDeliveryRoutes;\n this.invoiceState.documentFilter.noneDeliveryRouteFlag = this.quoteState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.invoiceState.documentFilter.periodSearchPage = this.quoteState.documentFilter.periodSearchPage;\n this.invoiceState.documentFilter.periodSearchType = this.quoteState.documentFilter.periodSearchType;\n\n if (!this.quoteState.documentFilter.periodSearchType && this.quoteState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromInvoiceDate) {\n this.invoiceState.documentFilter.fromInvoiceDate = this.quoteState.documentFilter.fromQuoteDate;\n this.invoiceState.documentFilter.toInvoiceDate = this.quoteState.documentFilter.toQuoteDate;\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = this.quoteState.documentFilter.fromQuoteDate;\n this.invoiceState.documentFilter.toDeliveryDate = this.quoteState.documentFilter.toQuoteDate;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeProFormaStateFromDeliveryFormState(): void {\n // synchronize the pro forma state with the loaded delivery form state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, ProductionFlowComponent.strProFormaState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.proFormaState.documentFilter, this.deliveryFormState.documentFilter);\n\n this.proFormaState.documentFilter.customerGroupUuids = this.deliveryFormState.documentFilter.customerGroupUuids;\n this.proFormaState.documentFilter.customerUuids = this.deliveryFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.proFormaState.documentFilter.deliveryRoutes = this.deliveryFormState.documentFilter.deliveryRoutes;\n this.proFormaState.documentFilter.excludedDeliveryRoutes = this.deliveryFormState.documentFilter.excludedDeliveryRoutes;\n this.proFormaState.documentFilter.noneDeliveryRouteFlag = this.deliveryFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.proFormaState.documentFilter.periodSearchPage = this.deliveryFormState.documentFilter.periodSearchPage;\n this.proFormaState.documentFilter.periodSearchType = this.deliveryFormState.documentFilter.periodSearchType;\n\n if (!this.deliveryFormState.documentFilter.periodSearchType && this.deliveryFormState.documentFilter.periodSearchType !== 0) {\n this.proFormaState.documentFilter.fromDeliveryDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = null;\n this.proFormaState.documentFilter.toDeliveryDate = null;\n }\n\n this.proFormaState.documentFilter.fromInvoiceDate = null;\n this.proFormaState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized pro forma state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeProFormaStateFromFittingFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, ProductionFlowComponent.strProFormaState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.proFormaState.documentFilter, this.fittingFormState.documentFilter);\n\n this.proFormaState.documentFilter.customerGroupUuids = this.fittingFormState.documentFilter.customerGroupUuids;\n this.proFormaState.documentFilter.customerUuids = this.fittingFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.proFormaState.documentFilter.deliveryRoutes = this.fittingFormState.documentFilter.deliveryRoutes;\n this.proFormaState.documentFilter.excludedDeliveryRoutes = this.fittingFormState.documentFilter.excludedDeliveryRoutes;\n this.proFormaState.documentFilter.noneDeliveryRouteFlag = this.fittingFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.proFormaState.documentFilter.periodSearchPage = this.fittingFormState.documentFilter.periodSearchPage;\n this.proFormaState.documentFilter.periodSearchType = this.fittingFormState.documentFilter.periodSearchType;\n\n if (!this.fittingFormState.documentFilter.periodSearchType && this.fittingFormState.documentFilter.periodSearchType !== 0) {\n this.proFormaState.documentFilter.fromDeliveryDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.fittingFormState.documentFilter.toDeliveryDate;\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = null;\n this.proFormaState.documentFilter.toDeliveryDate = null;\n }\n\n this.proFormaState.documentFilter.fromInvoiceDate = null;\n this.proFormaState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized pro forma state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeProFormaStateFromInvoiceState(): void {\n // synchronize the pro forma state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, ProductionFlowComponent.strProFormaState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.proFormaState.documentFilter, this.invoiceState.documentFilter);\n\n this.proFormaState.documentFilter.customerGroupUuids = this.invoiceState.documentFilter.customerGroupUuids;\n this.proFormaState.documentFilter.customerUuids = this.invoiceState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.proFormaState.documentFilter.deliveryRoutes = this.invoiceState.documentFilter.deliveryRoutes;\n this.proFormaState.documentFilter.excludedDeliveryRoutes = this.invoiceState.documentFilter.excludedDeliveryRoutes;\n this.proFormaState.documentFilter.noneDeliveryRouteFlag = this.invoiceState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.proFormaState.documentFilter.periodSearchPage = this.invoiceState.documentFilter.periodSearchPage;\n this.proFormaState.documentFilter.periodSearchType = this.invoiceState.documentFilter.periodSearchType;\n\n if (!this.invoiceState.documentFilter.periodSearchType && this.invoiceState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromDeliveryDate) {\n this.proFormaState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromDeliveryDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toDeliveryDate;\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromInvoiceDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toInvoiceDate;\n }\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = null;\n this.proFormaState.documentFilter.toDeliveryDate = null;\n }\n\n this.proFormaState.documentFilter.fromInvoiceDate = null;\n this.proFormaState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized pro forma state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeProFormaStateFromQuoteState(): void {\n // synchronize the pro forma state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, ProductionFlowComponent.strProFormaState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.proFormaState.documentFilter, this.quoteState.documentFilter);\n\n this.proFormaState.documentFilter.customerGroupUuids = this.quoteState.documentFilter.customerGroupUuids;\n this.proFormaState.documentFilter.customerUuids = this.quoteState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.proFormaState.documentFilter.deliveryRoutes = this.quoteState.documentFilter.deliveryRoutes;\n this.proFormaState.documentFilter.excludedDeliveryRoutes = this.quoteState.documentFilter.excludedDeliveryRoutes;\n this.proFormaState.documentFilter.noneDeliveryRouteFlag = this.quoteState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.proFormaState.documentFilter.periodSearchPage = this.quoteState.documentFilter.periodSearchPage;\n this.proFormaState.documentFilter.periodSearchType = this.quoteState.documentFilter.periodSearchType;\n\n if (!this.quoteState.documentFilter.periodSearchType && this.quoteState.documentFilter.periodSearchType !== 0) {\n this.proFormaState.documentFilter.fromDeliveryDate = this.quoteState.documentFilter.fromQuoteDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.quoteState.documentFilter.toQuoteDate;\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = null;\n this.proFormaState.documentFilter.toDeliveryDate = null;\n }\n\n this.proFormaState.documentFilter.fromInvoiceDate = null;\n this.proFormaState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized pro forma state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeQuoteStateFromDeliveryFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.quoteState, null, ProductionFlowComponent.strQuoteState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.quoteState.documentFilter, this.deliveryFormState.documentFilter);\n\n this.quoteState.documentFilter.customerGroupUuids = this.deliveryFormState.documentFilter.customerGroupUuids;\n this.quoteState.documentFilter.customerUuids = this.deliveryFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.quoteState.documentFilter.deliveryRoutes = this.deliveryFormState.documentFilter.deliveryRoutes;\n this.quoteState.documentFilter.excludedDeliveryRoutes = this.deliveryFormState.documentFilter.excludedDeliveryRoutes;\n this.quoteState.documentFilter.noneDeliveryRouteFlag = this.deliveryFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.quoteState.documentFilter.periodSearchPage = this.deliveryFormState.documentFilter.periodSearchPage;\n this.quoteState.documentFilter.periodSearchType = this.deliveryFormState.documentFilter.periodSearchType;\n\n if (!this.deliveryFormState.documentFilter.periodSearchType && this.deliveryFormState.documentFilter.periodSearchType !== 0) {\n this.quoteState.documentFilter.fromQuoteDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.quoteState.documentFilter.toQuoteDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n } else {\n this.quoteState.documentFilter.fromQuoteDate = null;\n this.quoteState.documentFilter.toQuoteDate = null;\n }\n\n this.quoteState.documentFilter.fromDeliveryDate = null;\n this.quoteState.documentFilter.toDeliveryDate = null;\n this.quoteState.documentFilter.fromExpirationDate = null;\n this.quoteState.documentFilter.toExpirationDate = null;\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n }\n\n private _synchronizeQuoteStateFromFittingFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.quoteState, null, ProductionFlowComponent.strQuoteState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.quoteState.documentFilter, this.fittingFormState.documentFilter);\n\n this.quoteState.documentFilter.customerGroupUuids = this.fittingFormState.documentFilter.customerGroupUuids;\n this.quoteState.documentFilter.customerUuids = this.fittingFormState.documentFilter.customerUuids;\n this.quoteState.documentFilter.status = this.fittingFormState.documentFilter.status;\n // synchronize delivery routes filter\n this.quoteState.documentFilter.deliveryRoutes = this.fittingFormState.documentFilter.deliveryRoutes;\n this.quoteState.documentFilter.excludedDeliveryRoutes = this.fittingFormState.documentFilter.excludedDeliveryRoutes;\n this.quoteState.documentFilter.noneDeliveryRouteFlag = this.fittingFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.quoteState.documentFilter.periodSearchPage = this.fittingFormState.documentFilter.periodSearchPage;\n this.quoteState.documentFilter.periodSearchType = this.fittingFormState.documentFilter.periodSearchType;\n\n if (!this.fittingFormState.documentFilter.periodSearchType && this.fittingFormState.documentFilter.periodSearchType !== 0) {\n this.quoteState.documentFilter.fromQuoteDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.quoteState.documentFilter.toQuoteDate = this.fittingFormState.documentFilter.toDeliveryDate;\n } else {\n this.quoteState.documentFilter.fromQuoteDate = null;\n this.quoteState.documentFilter.toQuoteDate = null;\n }\n\n this.quoteState.documentFilter.fromDeliveryDate = null;\n this.quoteState.documentFilter.toDeliveryDate = null;\n this.quoteState.documentFilter.fromExpirationDate = null;\n this.quoteState.documentFilter.toExpirationDate = null;\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n }\n\n private _synchronizeQuoteStateFromInvoiceState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.quoteState, null, ProductionFlowComponent.strQuoteState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.quoteState.documentFilter, this.invoiceState.documentFilter);\n\n this.quoteState.documentFilter.customerGroupUuids = this.invoiceState.documentFilter.customerGroupUuids;\n this.quoteState.documentFilter.customerUuids = this.invoiceState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.quoteState.documentFilter.deliveryRoutes = this.invoiceState.documentFilter.deliveryRoutes;\n this.quoteState.documentFilter.excludedDeliveryRoutes = this.invoiceState.documentFilter.excludedDeliveryRoutes;\n this.quoteState.documentFilter.noneDeliveryRouteFlag = this.invoiceState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.quoteState.documentFilter.periodSearchPage = this.invoiceState.documentFilter.periodSearchPage;\n this.quoteState.documentFilter.periodSearchType = this.invoiceState.documentFilter.periodSearchType;\n\n if (!this.invoiceState.documentFilter.periodSearchType && this.invoiceState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromDeliveryDate) {\n this.quoteState.documentFilter.fromQuoteDate = this.invoiceState.documentFilter.fromDeliveryDate;\n this.quoteState.documentFilter.toQuoteDate = this.invoiceState.documentFilter.toDeliveryDate;\n } else {\n this.quoteState.documentFilter.fromQuoteDate = this.invoiceState.documentFilter.fromInvoiceDate;\n this.quoteState.documentFilter.toQuoteDate = this.invoiceState.documentFilter.toInvoiceDate;\n }\n } else {\n this.quoteState.documentFilter.fromQuoteDate = null;\n this.quoteState.documentFilter.toQuoteDate = null;\n }\n\n this.quoteState.documentFilter.fromDeliveryDate = null;\n this.quoteState.documentFilter.toDeliveryDate = null;\n this.quoteState.documentFilter.fromExpirationDate = null;\n this.quoteState.documentFilter.toExpirationDate = null;\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n }\n\n private _synchronizeQuoteStateFromProFormaState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.quoteState, null, ProductionFlowComponent.strQuoteState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.quoteState.documentFilter, this.proFormaState.documentFilter);\n\n this.quoteState.documentFilter.customerGroupUuids = this.proFormaState.documentFilter.customerGroupUuids;\n this.quoteState.documentFilter.customerUuids = this.proFormaState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.quoteState.documentFilter.deliveryRoutes = this.proFormaState.documentFilter.deliveryRoutes;\n this.quoteState.documentFilter.excludedDeliveryRoutes = this.proFormaState.documentFilter.excludedDeliveryRoutes;\n this.quoteState.documentFilter.noneDeliveryRouteFlag = this.proFormaState.documentFilter.noneDeliveryRouteFlag;\n // synchronize period search\n this.quoteState.documentFilter.periodSearchPage = this.proFormaState.documentFilter.periodSearchPage;\n this.quoteState.documentFilter.periodSearchType = this.proFormaState.documentFilter.periodSearchType;\n\n if (!this.proFormaState.documentFilter.periodSearchType && this.proFormaState.documentFilter.periodSearchType !== 0) {\n this.quoteState.documentFilter.fromQuoteDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.quoteState.documentFilter.toQuoteDate = this.proFormaState.documentFilter.toDeliveryDate;\n } else {\n this.quoteState.documentFilter.fromQuoteDate = null;\n this.quoteState.documentFilter.toQuoteDate = null;\n }\n\n this.quoteState.documentFilter.fromDeliveryDate = null;\n this.quoteState.documentFilter.toDeliveryDate = null;\n this.quoteState.documentFilter.fromExpirationDate = null;\n this.quoteState.documentFilter.toExpirationDate = null;\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n }\n\n private _updateAdvancedFilterToggleButtonLabel(): void {\n if (this._isDeliveryFormContext()) {\n if (this.deliveryFormState && this.deliveryFormState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanelForDeliveryForms(\n this.advancedFilterPanel\n );\n }\n } else if (this._isFittingFormContext()) {\n if (this.fittingFormState && this.fittingFormState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanelForFittingForms(\n this.advancedFilterPanel\n );\n }\n } else if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanelForInvoicedDeliveryForms(\n this.advancedFilterPanel\n );\n }\n } else if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanelForProFormaDeliveryForms(\n this.advancedFilterPanel\n );\n }\n } else if (this._isQuoteContext()) {\n if (this.quoteState && this.quoteState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanelForQuotes(this.advancedFilterPanel);\n }\n }\n\n this.textButtonAdvancedFilter = this.constTextButtonAdvancedFilter;\n if (this.advancedFilterCounter && this.advancedFilterCounter > 0) {\n this.showEraseAdvancedFilterFlag = true;\n } else {\n this.showEraseAdvancedFilterFlag = false;\n this.advancedFilterCounter = undefined;\n }\n }\n\n private _updateCustomerFilterToggleButtonLabel(): void {\n // Update label of advanced filter button\n if (!this.customerFilterPanel?.customer?.uuid) {\n this.textButtonCustomerFilter = this.constTextButtonCustomerFilter;\n this.textButtonCustomerFilterShowCustomerMembers = '';\n this.showEraseCustomerFilterFlag = false;\n this.customerFilterCounter = undefined;\n } else {\n this.textButtonCustomerFilter = this.customerFilterPanel.customer.name;\n this.textButtonCustomerFilterShowCustomerMembers = !this.customerFilterPanel.showCustomerMembersFlag\n ? ''\n : this.constTextButtonCustomerFilterShowCustomerMembers;\n this.showEraseCustomerFilterFlag = true;\n this.customerFilterCounter = 1;\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-customer-api-filters/delivery-form-filter';\nimport { ProductionFlowComponent } from '../../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class DeliveryFormState extends ProductionFlowState {\n public documentFilter: DeliveryFormFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strDeliveryFormKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strDeliveryFormKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromInvoiceDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toInvoiceDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new DeliveryFormFilter();\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.Year;\n this.documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'deliveryFormItemText',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { DocumentStatus } from 'app/shared/enums/document-status.enum';\nimport { FittingFormFilter } from 'app/shared/prothesis-customer-api-filters/fitting-form-filter';\nimport { ProductionFlowComponent } from '../../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class FittingFormState extends ProductionFlowState {\n public documentFilter: FittingFormFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strFittingFormKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strFittingFormKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n this.documentFilter.status === DocumentStatus.InProgress &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new FittingFormFilter();\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.Year;\n this.documentFilter.status = DocumentStatus.InProgress;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'fittingFormItemText',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-customer-api-filters/delivery-form-filter';\nimport { ProductionFlowComponent } from '../../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class InvoiceState extends ProductionFlowState {\n public documentFilter: DeliveryFormFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strInvoiceKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strInvoiceKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n if (this.documentFilter.periodSearchDateType || this.documentFilter.periodSearchDateType === 0) {\n const periodSearchDateType = this.documentFilter.periodSearchDateType.valueOf().toString();\n const periodSearchDateTypeDefault = PeriodSearchDeliveryFormDateType.DeliveryDate.valueOf().toString();\n if (periodSearchDateType !== periodSearchDateTypeDefault) {\n defaultValueFlag = false;\n }\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n this.documentFilter.canceledFlag === false &&\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromInvoiceDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.invoiceNumber &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toInvoiceDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new DeliveryFormFilter();\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.Year;\n this.documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n this.documentFilter.canceledFlag = false;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'deliveryFormItemText',\n 'invoiceNumber',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-customer-api-filters/delivery-form-filter';\nimport { ProductionFlowComponent } from '../../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class ProFormaState extends ProductionFlowState {\n public documentFilter: DeliveryFormFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strProFormaKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strProFormaKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromInvoiceDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toInvoiceDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new DeliveryFormFilter();\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.Year;\n this.documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'deliveryFormItemText',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PaginatedListState } from 'app/shared/states/paginated-list-state';\n\nexport abstract class ProductionFlowState extends PaginatedListState {\n public constructor() {\n super();\n this.defaultSortActive = 'createDate';\n this.defaultSortDirection = 'desc';\n this.resetFilter();\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\nimport { DocumentStatus } from 'app/shared/enums/document-status.enum';\nimport { QuoteFilter } from 'app/shared/prothesis-customer-api-filters/quote-filter';\nimport { ProductionFlowComponent } from '../../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class QuoteState extends ProductionFlowState {\n public documentFilter: QuoteFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strQuoteKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strQuoteKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromExpirationDate &&\n !this.documentFilter.fromQuoteDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n this.documentFilter.status === DocumentStatus.InProgress &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toExpirationDate &&\n !this.documentFilter.toQuoteDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new QuoteFilter();\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.Year;\n this.documentFilter.status = DocumentStatus.InProgress;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'quoteItemText',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { CustomerFilter } from 'app/shared/prothesis-api-filters/customer-filter';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { CustomerComponent } from './customer.component';\n\nexport class CustomerState extends PaginatedListState {\n public customerFilter: CustomerFilter;\n\n public constructor() {\n super();\n this.initPageSize(CustomerComponent.strKeyLocalStoragePageSize);\n this.defaultSortActive = 'name';\n this.defaultSortDirection = 'asc';\n this.resetFilter();\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.customerFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n const accountStateToZero =\n this.customerFilter.fromAccountStateIncludedFlag === true &&\n this.customerFilter.toAccountStateIncludedFlag === true &&\n this.customerFilter.fromAccountState === 0 &&\n this.customerFilter.toAccountState === 0;\n const accountStatePositive =\n this.customerFilter.fromAccountStateIncludedFlag === false &&\n this.customerFilter.fromAccountState === 0 &&\n !this.customerFilter.toAccountState &&\n !this.customerFilter.toAccountStateIncludedFlag;\n const accountStateNegative =\n this.customerFilter.toAccountStateIncludedFlag === false &&\n this.customerFilter.toAccountState === 0 &&\n !this.customerFilter.fromAccountState &&\n !this.customerFilter.fromAccountStateIncludedFlag;\n\n if (\n !this.customerFilter.code &&\n !this.customerFilter.codeStartsWith &&\n (this.customerFilter.customerMemberFlag === null || this.customerFilter.customerMemberFlag === undefined) &&\n (this.customerFilter.customerGroupFlag === null || this.customerFilter.customerGroupFlag === undefined) &&\n !this.customerFilter.customerGroupUuid &&\n (this.customerFilter.customerUserCustomerStatus === null || this.customerFilter.customerUserCustomerStatus === undefined) &&\n !this.customerFilter.deliveryFormToInvoiceExistenceFlag &&\n !this.customerFilter.disabledFlag &&\n !this.customerFilter.fromAccountState &&\n !this.customerFilter.fromCreateDate &&\n !this.customerFilter.fromUpdateDate &&\n !this.customerFilter.rateUuid &&\n !this.customerFilter.textContains &&\n !this.customerFilter.textFilter &&\n !this.customerFilter.toAccountState &&\n !this.customerFilter.toCreateDate &&\n !this.customerFilter.toUpdateDate &&\n !accountStateToZero &&\n !accountStatePositive &&\n !accountStateNegative &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.customerFilter = new CustomerFilter();\n this.customerFilter.textFilterFields = [\n 'accountState',\n 'code',\n 'contactEmailAddress',\n 'contactFirstName',\n 'contactLastName',\n 'contactMobilePhoneNumber',\n 'contactWorkPhoneNumber',\n 'customerGroupCode',\n 'customerGroupName',\n 'customerMemberName',\n 'name',\n ];\n this.customerFilter.textFilter = '';\n this.customerFilter.disabledFlag = false;\n\n this.resetSort();\n }\n}\n","import { UuidViewModel } from '../prothesis-base-api-view-models/uuid.view-model';\nimport { ViewModelBase } from '../prothesis-base-api-view-models/view-model-base';\n\nexport class UpdateCustomerTaxCollectionViewModel extends ViewModelBase {\n public tax1Flag: boolean;\n public tax2Flag: boolean;\n public tax3Flag: boolean;\n public uuids: UuidViewModel[];\n}\n","import { LaboratoryTaxModel } from 'app/shared/common-models/models/laboratory-tax-model';\n\nexport class UpdateCustomerTaxesDialogModel {\n public laboratoryTaxes: LaboratoryTaxModel[];\n public tax1Flag: boolean;\n public tax2Flag: boolean;\n public tax3Flag: boolean;\n}\n","import { LaboratoryTaxModelHelper } from 'app/shared/common-models/model-helpers/laboratory-tax-model-helper';\nimport { SortHelper } from 'app/shared/helpers/sort-helper';\nimport { ViewModelHelper } from 'app/shared/helpers/view-model-helper';\nimport { OutInitUpdateCustomerTaxCollectionViewModel } from 'app/shared/prothesis-api-view-models/out-init-update-customer-tax-collection-view-model';\nimport { UpdateCustomerTaxCollectionViewModel } from 'app/shared/prothesis-api-view-models/update-customer-tax-collection-view-model';\nimport { UpdateCustomerTaxesDialogModel } from '../models/update-customer-taxes-dialog-model';\n\nexport class UpdateCustomerTaxesDialogModelHelper {\n public static build(): UpdateCustomerTaxesDialogModel {\n const updateCustomerTaxesDialog = new UpdateCustomerTaxesDialogModel();\n updateCustomerTaxesDialog.tax1Flag = true;\n updateCustomerTaxesDialog.tax2Flag = true;\n updateCustomerTaxesDialog.tax3Flag = true;\n return updateCustomerTaxesDialog;\n }\n\n public static fromViewModel(\n outInitUpdateCustomerTaxCollectionViewModel: OutInitUpdateCustomerTaxCollectionViewModel\n ): UpdateCustomerTaxesDialogModel {\n const updateCustomerTaxesDialog = this.build();\n updateCustomerTaxesDialog.laboratoryTaxes = LaboratoryTaxModelHelper.fromViewModel(\n outInitUpdateCustomerTaxCollectionViewModel.laboratoryTax.taxes\n );\n updateCustomerTaxesDialog.laboratoryTaxes.sort(SortHelper.sortByDisplayOrder);\n return updateCustomerTaxesDialog;\n }\n\n public static toViewModel(\n updateCustomerTaxesDialog: UpdateCustomerTaxesDialogModel,\n uuids: string[]\n ): UpdateCustomerTaxCollectionViewModel {\n const updateCustomerTaxCollectionViewModel = new UpdateCustomerTaxCollectionViewModel();\n updateCustomerTaxCollectionViewModel.tax1Flag = updateCustomerTaxesDialog.tax1Flag;\n updateCustomerTaxCollectionViewModel.tax2Flag = updateCustomerTaxesDialog.tax2Flag;\n updateCustomerTaxCollectionViewModel.tax3Flag = updateCustomerTaxesDialog.tax3Flag;\n updateCustomerTaxCollectionViewModel.uuids = ViewModelHelper.toUuidViewModels(uuids);\n return updateCustomerTaxCollectionViewModel;\n }\n}\n","\n
\n
\n
\n
\n
\n {{formGroup.controls?.laboratoryTaxes?.value[0].name}}\n {{formGroup.controls?.laboratoryTaxes?.value[1].name}}\n {{formGroup.controls?.laboratoryTaxes?.value[2].name}}\n
\n
\n
\n
\n
\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Output } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { LaboratoryTaxModel } from 'app/shared/common-models/models/laboratory-tax-model';\nimport { UpdateCustomerTaxesDialogFormGroup } from './form-groups/update-customer-taxes-dialog-form-group';\nimport { UpdateCustomerTaxesDialogModel } from './models/update-customer-taxes-dialog-model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-update-customer-taxes-dialog',\n styleUrls: ['./update-customer-taxes-dialog.component.scss'],\n templateUrl: './update-customer-taxes-dialog.component.html',\n})\nexport class UpdateCustomerTaxesDialogComponent {\n @Output() public acceptEvent = new EventEmitter();\n @Output() public closeEvent = new EventEmitter();\n @Output() public declineEvent = new EventEmitter();\n public formGroup: FormGroup;\n public updateCustomerTaxesDialog: UpdateCustomerTaxesDialogModel;\n\n public constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) updateCustomerTaxesDialog: UpdateCustomerTaxesDialogModel\n ) {\n if (updateCustomerTaxesDialog) {\n this.updateCustomerTaxesDialog = updateCustomerTaxesDialog;\n this._createForm(this.updateCustomerTaxesDialog);\n }\n this.closeEvent.subscribe(() => {\n dialogRef.close();\n });\n }\n\n public acceptEventHandler(): void {\n this.acceptEvent.emit(this.formGroup.getRawValue());\n }\n\n public closeEventHandler(): void {\n this.closeEvent.emit();\n }\n\n public declineEventHandler(): void {\n this.declineEvent.emit();\n }\n\n private _createForm(updateCustomerTaxesDialog: UpdateCustomerTaxesDialogModel): void {\n this.formGroup = new FormGroup({\n laboratoryTaxes: new FormControl(updateCustomerTaxesDialog.laboratoryTaxes),\n tax1Flag: new FormControl(updateCustomerTaxesDialog.tax1Flag),\n tax2Flag: new FormControl(updateCustomerTaxesDialog.tax2Flag),\n tax3Flag: new FormControl(updateCustomerTaxesDialog.tax3Flag),\n });\n }\n}\n","export class ExtendOptionUserCustomerModel {\n public userEmailConfirmedFlag = false;\n public uuid: string;\n}\n","import { ListCardElementModel } from 'app/shared/components/cards/list-card/list-card-element.model';\nimport { ContactTitleHelper } from 'app/shared/enum-helpers/contact-title.enum.helper';\nimport { CustomerTitleHelper } from 'app/shared/enum-helpers/customer-title.enum.helper';\nimport { ContactTitle } from 'app/shared/enums/contact-title.enum';\nimport { SortHelper } from 'app/shared/helpers/sort-helper';\nimport { ReadCustomerViewModel } from 'app/shared/prothesis-api-view-models/read-customer.view-model';\nimport { ReadLaboratoryTaxViewModel } from 'app/shared/prothesis-api-view-models/read-laboratory-tax-view-model';\nimport { CustomerModel } from '../models/customer-model';\nimport { ExtendOptionUserCustomerModel } from '../models/extend-option-user-customer.model';\n\nexport class CustomerModelHelper {\n public static fromViewModel(\n readCustomerViewModels: ReadCustomerViewModel[],\n laboratoryTaxViewModel: ReadLaboratoryTaxViewModel\n ): Array {\n const customers = new Array();\n readCustomerViewModels.forEach((readCustomerViewModel) => {\n const customer = this._createModel(readCustomerViewModel, laboratoryTaxViewModel);\n customers.push(customer);\n });\n\n return customers;\n }\n\n public static setNotApplicableTaxes(\n readCustomerViewModel: ReadCustomerViewModel,\n laboratoryTaxViewModel: ReadLaboratoryTaxViewModel,\n customer: CustomerModel\n ) {\n const taxFlags = [readCustomerViewModel.tax1Flag, readCustomerViewModel.tax2Flag, readCustomerViewModel.tax3Flag];\n const notApplicableTaxeNames = [1, 2, 3]\n .filter((i) => !taxFlags[i - 1])\n .map((i) => laboratoryTaxViewModel.taxes.find((x) => x.displayOrder === i).name);\n\n if (notApplicableTaxeNames.length === 0) {\n customer.notApplicableTaxeLabel = '';\n } else if (notApplicableTaxeNames.length === 1) {\n customer.notApplicableTaxeLabel = 'Taxe non-applicable :';\n } else {\n customer.notApplicableTaxeLabel = 'Taxes non-applicables :';\n }\n\n customer.notApplicableTaxeNames = notApplicableTaxeNames.join(', ');\n }\n\n private static _createModel(\n readCustomerViewModel: ReadCustomerViewModel,\n laboratoryTaxViewModel: ReadLaboratoryTaxViewModel\n ): CustomerModel {\n const customer = new CustomerModel();\n customer.accountState = readCustomerViewModel.accountState;\n customer.code = readCustomerViewModel.code;\n customer.currencyCode = readCustomerViewModel.currencyCode;\n\n customer.rate = readCustomerViewModel.rate.label;\n customer.rateDisabledFlag = readCustomerViewModel.rate.disabledFlag;\n // if customer belongs to one group, the rate of the group is displayed.\n if (readCustomerViewModel.customerGroup) {\n customer.rate = readCustomerViewModel.customerGroup.rate.label;\n customer.rateDisabledFlag = readCustomerViewModel.customerGroup.rate.disabledFlag;\n customer.groupDisabledFlag = readCustomerViewModel.customerGroup.disabledFlag;\n customer.groupUuid = readCustomerViewModel.customerGroup.uuid;\n customer.groupName = `${readCustomerViewModel.customerGroup.name} (${readCustomerViewModel.customerGroup.code})`;\n }\n\n customer.disabledFlag = readCustomerViewModel.disabledFlag;\n customer.customerMemberFlag = false;\n if (readCustomerViewModel.customerGroup) {\n customer.customerMemberFlag = true;\n }\n customer.groupFlag = readCustomerViewModel.customerMembers && readCustomerViewModel.customerMembers.length > 0;\n customer.name = readCustomerViewModel.name;\n\n CustomerModelHelper.setNotApplicableTaxes(readCustomerViewModel, laboratoryTaxViewModel, customer);\n\n customer.title = CustomerTitleHelper.translateEnum(readCustomerViewModel.title);\n customer.uuid = readCustomerViewModel.uuid;\n\n // Get the main contact of customer\n if (readCustomerViewModel.contacts) {\n const defaultContact = readCustomerViewModel.contacts.find((contact) => contact.defaultFlag);\n if (defaultContact) {\n if (defaultContact.title !== ContactTitle.None) {\n customer.contactName = ContactTitleHelper.translateEnum(defaultContact.title) + ' ';\n } else {\n customer.contactName = '';\n }\n if (defaultContact.firstName) {\n customer.contactName += defaultContact.firstName + ' ';\n }\n if (defaultContact.lastName) {\n customer.contactName += defaultContact.lastName;\n }\n customer.contactEmailAddress = defaultContact.emailAddress;\n customer.contactMobilePhoneNumber = defaultContact.mobilePhoneInternationalNumber;\n customer.contactWorkPhoneNumber = defaultContact.workPhoneInternationalNumber;\n }\n }\n\n if (customer.groupFlag) {\n customer.customerMembers = new Array();\n readCustomerViewModel.customerMembers.forEach((customerMember) => {\n customer.customerMembers.push(new ListCardElementModel(customerMember.name, customerMember.disabledFlag));\n });\n customer.customerMembers.sort(SortHelper.sortByLabelAlphabetically);\n }\n\n if (readCustomerViewModel.userCustomers) {\n customer.userCustomers = new Array();\n readCustomerViewModel.userCustomers.forEach((extendOptionUserCustomerViewModel) => {\n const userCustomer = new ExtendOptionUserCustomerModel();\n userCustomer.userEmailConfirmedFlag = extendOptionUserCustomerViewModel.userEmailConfirmedFlag;\n userCustomer.uuid = extendOptionUserCustomerViewModel.uuid;\n customer.userCustomers.push(userCustomer);\n });\n }\n\n const userCustomers = readCustomerViewModel.userCustomers.filter((x) => x.userEmailConfirmedFlag);\n const waitingUserCustomers = readCustomerViewModel.userCustomers.filter((x) => !x.userEmailConfirmedFlag);\n\n if (userCustomers.length > 1) {\n customer.userCustomerLabel = userCustomers.length + ' utilisateurs';\n } else if (userCustomers.length > 0) {\n customer.userCustomerLabel = userCustomers.length + ' utilisateur';\n } else {\n if (waitingUserCustomers.length > 0) {\n customer.userCustomerLabel = '';\n } else {\n customer.userCustomerLabel = 'Aucun utilisateur';\n }\n }\n\n if (waitingUserCustomers.length > 1) {\n customer.waitingUserCustomerLabel = waitingUserCustomers.length + ' attentes';\n } else if (waitingUserCustomers.length > 0) {\n customer.waitingUserCustomerLabel = waitingUserCustomers.length + ' attente';\n } else {\n customer.waitingUserCustomerLabel = '';\n }\n\n return customer;\n }\n}\n","
\n
\n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n
\n \n \n \n highlight_off\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 Explorer l'espace client\n \n\n \n \n Arrêter l'exploration\n \n\n \n \n Gérer les utilisateurs de l'espace client\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
Traitements multiples
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n\n\n \n \n
\n \n \n \n \n
\n \n
\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { Component, HostListener, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { MatRipple } from '@angular/material/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { fuseAnimations } from '@fuse/animations';\nimport { CorpTitleService } from 'app/core/services/corp-title.service';\nimport { FocusService } from 'app/core/services/focus.service';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { LocalStorageService } from 'app/core/services/local-storage.service';\nimport { NotifyService } from 'app/core/services/notify/notify.service';\nimport { CustomerService } from 'app/core/services/prothesis-api/customer.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { WorkingCustomerService } from 'app/core/services/prothesis-customer-api/working-customer.service';\nimport { SessionStorageService } from 'app/core/services/session-storage.service';\nimport { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { ComboModelHelper } from 'app/shared/components/combo/combo-model.helper';\nimport { UpdateCustomerTaxesDialogModelHelper } from 'app/shared/components/dialog/update-customer-taxes-dialog/model-helpers/update-customer-taxes-dialog-model-helper';\nimport { UpdateCustomerTaxesDialogModel } from 'app/shared/components/dialog/update-customer-taxes-dialog/models/update-customer-taxes-dialog-model';\nimport { UpdateCustomerTaxesDialogComponent } from 'app/shared/components/dialog/update-customer-taxes-dialog/update-customer-taxes-dialog.component';\nimport { GridFilterModel } from 'app/shared/components/grid-filter/grid-filter-model';\nimport { GridFilterComponent } from 'app/shared/components/grid-filter/grid-filter.component';\nimport { GridSortComponent } from 'app/shared/components/grid-sort/grid-sort.component';\nimport { GridSortModel } from 'app/shared/components/grid-sort/grid-sort.model';\nimport { CustomerGroupEnumHelper } from 'app/shared/components/pickers/customer-picker/customer-group.enum.helper';\nimport { RowElementComponent } from 'app/shared/components/rows/row-element/row-element.component';\nimport { ButtonListSpreadsheetExportDialogComponent } from 'app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/button-list-spreadsheet-export-dialog.component';\nimport { CustomerSpreadsheetExportDialogModelHelper } from 'app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/model-helpers/customer-spreadsheet-export-dialog.helper';\nimport { TableConfig } from 'app/shared/components/table-wrapper/table-config';\nimport { CustomerUserCustomerStatusHelper } from 'app/shared/enum-helpers/customer-user-customer-status.enum.helper';\nimport { Area } from 'app/shared/enums/area.enum';\nimport { HighlightType } from 'app/shared/enums/highlight-type.enum';\nimport { RowElementHelper } from 'app/shared/helpers/row-element-helper';\nimport { CustomerFilter } from 'app/shared/prothesis-api-filters/customer-filter';\nimport { OutInitUpdateCustomerTaxCollectionViewModel } from 'app/shared/prothesis-api-view-models/out-init-update-customer-tax-collection-view-model';\nimport { SearchCustomerViewModel } from 'app/shared/prothesis-api-view-models/search-customer.view-model';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CustomerState } from './customer-state';\nimport { CustomerModelHelper } from './model-helpers/customer-model.helper';\nimport { CustomerModel } from './models/customer-model';\n\n@Component({\n animations: fuseAnimations,\n selector: 'app-customer',\n styleUrls: ['./customer.component.scss'],\n templateUrl: './customer.component.html',\n})\nexport class CustomerComponent implements OnDestroy, OnInit {\n @ViewChild('_gridFilterComponent', { static: true }) private _gridFilterComponent: GridFilterComponent;\n @ViewChild('_gridSortComponent', { static: true }) private _gridSortComponent: GridSortComponent;\n @ViewChild(MatPaginator) private _matPaginator: MatPaginator;\n @ViewChild(MatRipple) private _matRipple: MatRipple;\n @ViewChildren('_rowElementComponent') private _rowElementComponents: QueryList;\n\n public static creationRoute = '/customer/create';\n public static strKeyLocalStorage = 'customer-sort-favorite';\n public static strKeyLocalStoragePageSize = 'customer-page-size';\n\n public accountStateCreditCombo = new ComboModel('2', 'Soldes créditeurs');\n public accountStateDebitCombo = new ComboModel('1', 'Soldes débiteurs');\n public accountStates: ComboModel[];\n public accountStateSelected: ComboModel;\n public accountStateSum = 0;\n public accountStateSumCurrencyCode = 'EUR';\n public accountStateToZeroCombo = new ComboModel('0', 'Soldes à zéro');\n public aggregateAmountDisplayFlag: boolean;\n public customerAccountStateDisplayFlag: boolean;\n public customerGroupDefaultValue: ComboModel;\n public customerGroupKeySelected: string;\n public customerGroupOptions: ComboModel[];\n public customers: CustomerModel[];\n public customerUserCustomerStatusDefaultValue: ComboModel;\n public customerUserCustomerStatusKeySelected: string;\n public customerUserCustomerStatusOptions: ComboModel[];\n public disabledComboModel = new ComboModel('1', 'désactivés');\n public disabledFlagKeySelected: string;\n public disabledFlagModels: ComboModel[];\n public enabledComboModel = new ComboModel('0', 'activés');\n public existenceFlag: boolean;\n public filterSetToDefaultValueFlag = true;\n public gridFilter: GridFilterModel;\n public gridSortModel: GridSortModel[];\n public readonly highlightTypePhoneNumber = HighlightType.PhoneNumber;\n public itemAmountDisplayFlag: boolean;\n public loadedFlag: boolean;\n public pageSizeOptions: number[] = [5, 10, 25, 100];\n public pageTitle = 'Clients';\n public rate: ComboModel;\n public rateModels: ComboModel[];\n public rateSelected: ComboModel;\n public selection = new SelectionModel(true, []);\n public sortSetToDefaultValueFlag = true;\n public state: CustomerState;\n public tableConfig: TableConfig;\n public totalCount = 0;\n public userCustomerCount = 0;\n public userCustomerExplorationActionFlag: boolean;\n public waitingUserCustomerCount = 0;\n\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _activatedRoute: ActivatedRoute,\n private _corpTitleService: CorpTitleService,\n private _customerService: CustomerService,\n private _dialog: MatDialog,\n private _focusService: FocusService,\n private _highlightService: HighlightService,\n private _localStorageService: LocalStorageService,\n private _matDialog: MatDialog,\n private _notifyService: NotifyService,\n private _router: Router,\n private _sessionStorageService: SessionStorageService,\n public workingCustomerService: WorkingCustomerService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {\n this.aggregateAmountDisplayFlag = this._workingLaboratoryService.laboratoryRole?.aggregateAmountDisplayFlag;\n this.customerAccountStateDisplayFlag = this._workingLaboratoryService.laboratoryRole?.customerAccountStateDisplayFlag;\n this.itemAmountDisplayFlag = this._workingLaboratoryService.laboratoryRole?.itemAmountDisplayFlag;\n this.userCustomerExplorationActionFlag = this._workingLaboratoryService.laboratoryRole?.userCustomerExplorationActionFlag;\n\n this.gridSortModel = this.customerAccountStateDisplayFlag\n ? [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'name', label: 'Par nom' },\n { value: 'code', label: 'Par code' },\n { value: 'accountState', label: 'Par solde' },\n { value: 'userCustomerCount', label: \"Par utilisateurs d'espaces clients\" },\n { value: 'waitingUserCustomerCount', label: \"Par attentes d'espaces clients\" },\n ]\n : [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'name', label: 'Par nom' },\n { value: 'code', label: 'Par code' },\n { value: 'userCustomerCount', label: \"Par utilisateurs d'espaces clients\" },\n { value: 'waitingUserCustomerCount', label: \"Par attentes d'espaces clients\" },\n ];\n\n this._corpTitleService.setTitle(this.pageTitle);\n this.customerGroupOptions = CustomerGroupEnumHelper.buildOptions();\n this.customerGroupDefaultValue = CustomerGroupEnumHelper.convertToComboModel(null);\n\n this.customerUserCustomerStatusOptions = CustomerUserCustomerStatusHelper.buildOptions();\n this.customerUserCustomerStatusDefaultValue = CustomerUserCustomerStatusHelper.convertToComboModel(null);\n\n this.accountStates = [this.accountStateToZeroCombo, this.accountStateDebitCombo, this.accountStateCreditCombo];\n this.disabledFlagModels = [this.enabledComboModel, this.disabledComboModel];\n }\n\n public customButtonClickedHandler(): void {\n if (this.selection.selected && this.selection.selected.length > 0) {\n if (this.selection.selected.length === 1) {\n const customer = this.selection.selected[0];\n this._assignRateToCustomerMultiple([customer.uuid]);\n } else {\n const uuids = this.selection.selected.map((x) => x.uuid);\n this._assignRateToCustomerMultiple(uuids);\n }\n }\n }\n\n public deleteButtonClickedHandler(uuid: string, rowElement?: RowElementComponent): void {\n const customer = this.customers.find((element) => element.uuid === uuid);\n\n this._customerService.delete(customer.uuid, customer.name, customer.groupFlag).subscribe((resultFlag) => {\n RowElementHelper.unselectRow(rowElement);\n if (resultFlag) {\n this._refreshList();\n }\n });\n }\n\n public deleteMultipleButtonClickedHandler(): void {\n if (this.selection.selected && this.selection.selected.length > 0) {\n if (this.selection.selected.length === 1) {\n const customer = this.selection.selected[0];\n\n this._customerService.delete(customer.uuid, customer.name, customer.groupFlag).subscribe((resultFlag) => {\n if (resultFlag) {\n this._refreshList();\n }\n });\n } else {\n this._customerService\n .deleteCollection(\n this.selection.selected.map((x) => x.uuid),\n this.selection.selected.some((x) => x.groupFlag === true)\n )\n .subscribe((resultFlag) => {\n if (resultFlag) {\n this._refreshList();\n }\n });\n }\n }\n }\n\n public disableButtonClickedHandler(uuid: string): void {\n const elementToDisable = this.customers.find((element) => element.uuid === uuid);\n this._disable(elementToDisable);\n }\n\n public disableMultipleButtonClickedHandler(): void {\n if (this.selection.selected && this.selection.selected.length > 0) {\n if (this.selection.selected.length === 1) {\n const customer = this.selection.selected[0];\n this._disable(customer);\n } else {\n const uuids = this.selection.selected.map((x) => x.uuid);\n this._disableMultiple(uuids);\n }\n }\n }\n\n public duplicateButtonClickedHandler(uuid: string): void {\n this._router.navigate(['/customer/duplicate', uuid]);\n }\n\n public edit(uuid: string, tabNumber = 0): void {\n this._router.navigate(['/customer/edit', uuid], { queryParams: { pstate: tabNumber } });\n }\n\n public enableButtonClickedHandler(uuid: string): void {\n const elementToEnable = this.customers.find((element) => element.uuid === uuid);\n this._enable(elementToEnable);\n }\n\n public enableMultipleButtonClickedHandler(): void {\n if (this.selection.selected && this.selection.selected.length > 0) {\n if (this.selection.selected.length === 1) {\n const customer = this.selection.selected[0];\n this._enable(customer);\n } else {\n const uuids = this.selection.selected.map((x) => x.uuid);\n this._enableMultiple(uuids);\n }\n }\n }\n\n public eraseAllFiltersClickedHandler(): void {\n this.state.resetFilter();\n this._saveStateAndSelfNavigate();\n }\n\n public exploreCustomer(\n event: any,\n customerUuid: string,\n customerCode: string,\n customerName: string,\n customerGroupFlag: boolean,\n customerMemberFlag: boolean\n ): void {\n event.stopPropagation();\n this.workingCustomerService.explore(customerUuid, customerMemberFlag).subscribe();\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n public isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n const numRows = this.customers.length;\n return numSelected === numRows;\n }\n\n public keydownAddEventHandler(): void {\n this._router.navigateByUrl(CustomerComponent.creationRoute);\n }\n\n public keydownArrowLeftEventHandler(): void {\n this._saveStateAndSelfNavigate();\n }\n\n public keydownArrowRightEventHandler(): void {\n this._saveStateAndSelfNavigate();\n }\n\n @HostListener('window:keydown.Tab', ['$event'])\n public keydownTab($event: KeyboardEvent): void {\n this._focusService.setFocusOnGridFilter($event, this._gridFilterComponent);\n }\n\n public manageUser(event: any, customerUuid: string): void {\n event.stopPropagation();\n this._router.navigate([`/customer/${customerUuid}/user-customer`]);\n }\n\n /** Selects all rows if they are not all selected; otherwise clear selection. */\n public masterToggle(): void {\n this.isAllSelected() ? this.selection.clear() : this.customers.forEach((row) => this.selection.select(row));\n this._triggerRipple();\n }\n\n public ngOnDestroy(): void {\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n if (!this.state) {\n this.state = new CustomerState();\n }\n\n this._activatedRoute.queryParams.pipe(takeUntil(this._unsubscribeAll$)).subscribe((params) => {\n const shouldReloadFlag = this._loadState(params['pstate']);\n if (shouldReloadFlag) {\n return;\n }\n\n this._initTextFilter(this.state.customerFilter.textFilter);\n PaginatedListState.setPaginatorState(this._matPaginator, this.state);\n PaginatedListState.setSortState(this._gridSortComponent, this.state);\n\n this._refreshList();\n });\n }\n\n public optionAccountStateChanged(accountStateOption: ComboModel): void {\n if (accountStateOption) {\n // Soldes à zéro\n if (accountStateOption.key === '0') {\n this.state.customerFilter.fromAccountStateIncludedFlag = true;\n this.state.customerFilter.toAccountStateIncludedFlag = true;\n this.state.customerFilter.fromAccountState = 0;\n this.state.customerFilter.toAccountState = 0;\n }\n // Soldes débiteurs\n else if (accountStateOption.key === '1') {\n this.state.customerFilter.fromAccountStateIncludedFlag = false;\n this.state.customerFilter.fromAccountState = 0;\n delete this.state.customerFilter.toAccountState;\n delete this.state.customerFilter.toAccountStateIncludedFlag;\n }\n // Soldes créditeurs\n else if (accountStateOption.key === '2') {\n this.state.customerFilter.toAccountStateIncludedFlag = false;\n this.state.customerFilter.toAccountState = 0;\n delete this.state.customerFilter.fromAccountState;\n delete this.state.customerFilter.fromAccountStateIncludedFlag;\n }\n } else {\n delete this.state.customerFilter.fromAccountState;\n delete this.state.customerFilter.fromAccountStateIncludedFlag;\n delete this.state.customerFilter.toAccountState;\n delete this.state.customerFilter.toAccountStateIncludedFlag;\n }\n\n // Reset to page 1\n this.state.pageIndex = 0;\n this._saveStateAndSelfNavigate();\n }\n\n public optionCustomerGroupChanged(comboModel: ComboModel): void {\n this.state.customerFilter = CustomerGroupEnumHelper.setCustomerFilter(\n this.state.customerFilter,\n comboModel,\n Area.Laboratory\n ) as CustomerFilter;\n\n // Reset to page 1\n this.state.pageIndex = 0;\n this._saveStateAndSelfNavigate();\n }\n\n public optionCustomerUserCustomerStatusChanged(comboModel: ComboModel): void {\n this.state.customerFilter = CustomerUserCustomerStatusHelper.setCustomerFilter(this.state.customerFilter, comboModel) as CustomerFilter;\n\n // Reset to page 1\n this.state.pageIndex = 0;\n this._saveStateAndSelfNavigate();\n }\n\n public optionDisabledFlagChanged(comboModel: ComboModel): void {\n if (comboModel.key === '1') {\n this.state.customerFilter.disabledFlag = true;\n } else {\n delete this.state.customerFilter.disabledFlag;\n }\n\n // Reset to page 1\n this.state.pageIndex = 0;\n this._saveStateAndSelfNavigate();\n }\n\n public optionRateChanged(optionLabel: ComboModel): void {\n if (optionLabel) {\n this.state.customerFilter.rateUuid = optionLabel.key;\n } else {\n delete this.state.customerFilter.rateUuid;\n }\n\n // Reset to page 1\n this.state.pageIndex = 0;\n this._saveStateAndSelfNavigate();\n }\n\n public paginatorUpdated(pageEvent: PageEvent): void {\n this.state.pageIndex = pageEvent.pageIndex;\n this.state.pageSize = pageEvent.pageSize;\n\n this._saveStateAndSelfNavigate();\n }\n\n public previewCustomerRatesClickedEventHandler(uuid: string): void {\n this._router.navigate([`/preview/customer/${uuid}/rate`]);\n }\n\n public saveFavoriteClickedHandler(): void {\n // Save into the local storage the new favorites\n const sort = new Array();\n sort.push(this.state.sortDirection, this.state.sortActive);\n this._localStorageService.write(CustomerComponent.strKeyLocalStorage, sort);\n\n // Update current favorite into the gridsort\n this.state.updateFavoriteSortFromCurrentSort();\n PaginatedListState.setSortState(this._gridSortComponent, this.state);\n this._updateFilterAndSortFlag();\n\n this._notifyService.displayInformationMessagesNow('Tris favoris mémorisés');\n }\n\n public sendEmailNotificationMultipleButtonClickedHandler(): void {\n if (this.selection.selected && this.selection.selected.length > 0) {\n const waitingUserCustomers = new Array();\n this.selection.selected.forEach((customer) => {\n customer.userCustomers.forEach((userCustomer) => {\n if (!userCustomer.userEmailConfirmedFlag) {\n waitingUserCustomers.push(userCustomer.uuid);\n }\n });\n });\n this._customerService.sendEmailNotificationCollection(waitingUserCustomers).subscribe((resultFlag) => {\n if (resultFlag) {\n this._refreshList();\n }\n });\n }\n }\n\n public sortActiveChanged(newSortActive: string): void {\n this.state.sortActive = newSortActive;\n this._saveStateAndSelfNavigate();\n }\n\n public sortDirectionChanged(newSortDirection: string): void {\n this.state.sortDirection = newSortDirection;\n this._saveStateAndSelfNavigate();\n }\n\n public spreadsheetExportButtonClickedHandler(): void {\n const strFilter = JSON.stringify(this.state.customerFilter);\n const buttonListSpreadsheetExportDialog = CustomerSpreadsheetExportDialogModelHelper.build(\n strFilter,\n this.state.sortActive,\n this.state.sortDirection\n );\n this._dialog.open(ButtonListSpreadsheetExportDialogComponent, {\n data: buttonListSpreadsheetExportDialog,\n autoFocus: false,\n });\n }\n\n public stopExploringCustomer(event: any): void {\n event.stopPropagation();\n this.workingCustomerService.stopExploring();\n }\n\n public textFilterChangedEventHandler(newTextFilter: string): void {\n this._highlightService.compileFilter(newTextFilter);\n this.state.customerFilter.textFilter = newTextFilter;\n\n // Reset to page 1\n this.state.pageIndex = 0;\n this._saveStateAndSelfNavigate();\n }\n\n public updateCustomerTaxesButtonClickedEventHandler(): void {\n if (this.selection.selected && this.selection.selected.length > 0) {\n this._customerService.initializeUpdateCustomerTaxCollection().subscribe((res: OutInitUpdateCustomerTaxCollectionViewModel) => {\n const updateCustomerTaxesDialog = UpdateCustomerTaxesDialogModelHelper.fromViewModel(res);\n const _dialogRef = this._matDialog.open(UpdateCustomerTaxesDialogComponent, {\n data: updateCustomerTaxesDialog,\n autoFocus: false,\n });\n _dialogRef.componentInstance.acceptEvent.subscribe((updateCustomerTaxesDialog: UpdateCustomerTaxesDialogModel) => {\n const updateCustomerTaxCollection = UpdateCustomerTaxesDialogModelHelper.toViewModel(\n updateCustomerTaxesDialog,\n this.selection.selected.map((x) => x.uuid)\n );\n this._customerService.updateCustomerTaxCollection(updateCustomerTaxCollection).subscribe((resultFlag) => {\n if (resultFlag) {\n this._refreshList();\n }\n });\n });\n });\n }\n }\n\n private _assignRateToCustomerMultiple(uuids: string[]): void {\n if (uuids && uuids.length > 0) {\n this._customerService\n .assignRateToCustomerCollection(\n this.rateModels.filter((x) => !x.disabledFlag),\n this.rate,\n uuids\n )\n .subscribe((resultFlag) => {\n if (resultFlag) {\n this._refreshList();\n }\n });\n }\n }\n\n private _disable(customer: CustomerModel): void {\n this._customerService\n .disable(customer.uuid, customer.name, () => this._enable(customer))\n .subscribe((resultFlag) => {\n if (resultFlag) {\n this._refreshList();\n }\n });\n }\n\n private _disableMultiple(uuids: string[]): void {\n if (uuids && uuids.length > 0) {\n this._customerService\n .disableCollection(uuids, () => this._enableMultiple(uuids))\n .subscribe((resultFlag) => {\n if (resultFlag) {\n this._refreshList();\n }\n });\n }\n }\n\n private _enable(customer: CustomerModel): void {\n this._customerService\n .enable(customer.uuid, customer.name, customer.groupName, () => {\n this._disable(customer);\n })\n .subscribe((resultFlag) => {\n if (resultFlag) {\n this._refreshList();\n }\n });\n }\n\n private _enableMultiple(uuids: string[]): void {\n if (uuids && uuids.length > 0) {\n this._customerService\n .enableCollection(uuids, () => this._disableMultiple(uuids))\n .subscribe((resultFlag) => {\n if (resultFlag) {\n this._refreshList();\n }\n });\n }\n }\n\n private _initFavoritesSort(shouldForceSortFlag: boolean): void {\n const sort = this._localStorageService.read(CustomerComponent.strKeyLocalStorage);\n this.state.initSort(shouldForceSortFlag, sort);\n this.sortSetToDefaultValueFlag = this.state.isSortSetToDefaultValues();\n }\n\n private _initList(): void {\n // Clear selection\n this.selection.clear();\n }\n\n private _initTextFilter(textFilter: string): void {\n this.gridFilter = new GridFilterModel(textFilter);\n this._highlightService.compileFilter(textFilter);\n }\n\n private _load(): Observable {\n this._updateFilterAndSortFlag();\n const sort = this.state.sortActive + '_' + this.state.sortDirection;\n return this._customerService.initializeSearch(this.state.customerFilter, sort, this.state.pageIndex, this.state.pageSize);\n }\n\n private _loadState(stateUrl: string): boolean {\n const shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.state, stateUrl, 'customer-state');\n if (shouldReloadFlag) {\n this._selfNavigate(true);\n return true;\n }\n if (!this.state) {\n this.state = new CustomerState();\n }\n\n this._initFavoritesSort(!stateUrl);\n\n return false;\n }\n\n private _refreshList(): void {\n this.loadedFlag = false;\n this._load().subscribe((result: SearchCustomerViewModel) => {\n this._initList();\n this.existenceFlag = result.existenceFlag;\n\n // Load filter combos\n this.rateModels = ComboModelHelper.fromExtendOptionRateViewModel(result.rates, null);\n\n // Load default values\n this.rate = ComboModelHelper.getDefaultRate(result.rates);\n\n this._initFavoritesSort(false);\n\n // Apply sort and filter state\n this._setCustomerFilter(this.state.customerFilter);\n PaginatedListState.setSortState(this._gridSortComponent, this.state);\n\n if (result.resultList) {\n this.accountStateSum = result.resultList.aggregate?.accountStateSum;\n this.userCustomerCount = result.resultList.aggregate?.userCustomerCount;\n this.waitingUserCustomerCount = result.resultList.aggregate?.waitingUserCustomerCount;\n this.totalCount = result.resultList.aggregate?.count;\n this.customers = CustomerModelHelper.fromViewModel(result.resultList.values, result.laboratoryTax);\n\n this._focusService.setTimeoutOutsideAngular(() => {\n this.tableConfig = new TableConfig(this._rowElementComponents.toArray());\n });\n }\n\n this._notifyService.displayMessages();\n this.loadedFlag = true;\n });\n }\n\n private _saveStateAndSelfNavigate(): void {\n this._initTextFilter(this.state.customerFilter.textFilter);\n\n this._sessionStorageService.write('customer-state', this.state);\n\n this._localStorageService.write(CustomerComponent.strKeyLocalStoragePageSize, this.state.pageSize);\n\n this._updateFilterAndSortFlag();\n\n this._selfNavigate();\n }\n\n private _selfNavigate(replaceUrl = false): void {\n this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.state) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n }\n\n private _setAccountStateFilter(customerFilter: CustomerFilter, shouldReloadFlag: boolean): boolean {\n let comboModelFilter: ComboModel;\n if (customerFilter.fromAccountState === 0 && customerFilter.toAccountState === 0) {\n comboModelFilter = new ComboModel('0', 'Soldes à zéro');\n } else if (customerFilter.fromAccountState >= 0) {\n comboModelFilter = new ComboModel('1', 'Soldes débiteurs');\n } else if (customerFilter.toAccountState <= 0) {\n comboModelFilter = new ComboModel('2', 'Soldes créditeurs');\n } else {\n comboModelFilter = null;\n }\n\n if (this.accountStateSelected && !comboModelFilter) {\n this.accountStateSelected = null;\n shouldReloadFlag = true;\n }\n\n if (!this.accountStateSelected || this.accountStateSelected.key !== comboModelFilter.key) {\n this.accountStateSelected = comboModelFilter;\n shouldReloadFlag = true;\n }\n return shouldReloadFlag;\n }\n\n private _setCustomerFilter(customerFilter: CustomerFilter): void {\n let shouldReloadFlag = false;\n\n // Disabled Filter\n this.disabledFlagKeySelected = customerFilter.disabledFlag ? '1' : '0';\n\n // Text Filter\n this._initTextFilter(customerFilter.textFilter);\n\n // CustomerGroupFilter\n shouldReloadFlag = this._setCustomerGroupFilter(customerFilter, shouldReloadFlag);\n\n // CustomerUserCustomerStatusFilter\n shouldReloadFlag = this._setCustomerUserCustomerStatusFilter(customerFilter, shouldReloadFlag);\n\n // Accounting Filter\n shouldReloadFlag = this._setAccountStateFilter(customerFilter, shouldReloadFlag);\n\n // Rate Filter\n shouldReloadFlag = this._setRateFilter(customerFilter, shouldReloadFlag);\n\n if (shouldReloadFlag) {\n this._selfNavigate();\n }\n }\n\n private _setCustomerGroupFilter(customerFilter: CustomerFilter, shouldReloadFlag: boolean): boolean {\n const combo = CustomerGroupEnumHelper.buildComboModelFromFilter(customerFilter);\n\n if (this.customerGroupKeySelected && !combo) {\n this.customerGroupKeySelected = null;\n shouldReloadFlag = true;\n }\n\n if (!this.customerGroupKeySelected || this.customerGroupKeySelected !== combo?.key) {\n this.customerGroupKeySelected = combo?.key;\n shouldReloadFlag = true;\n }\n\n return shouldReloadFlag;\n }\n\n private _setCustomerUserCustomerStatusFilter(customerFilter: CustomerFilter, shouldReloadFlag: boolean): boolean {\n const combo = CustomerUserCustomerStatusHelper.convertToComboModel(customerFilter.customerUserCustomerStatus);\n\n if (this.customerUserCustomerStatusKeySelected && !combo) {\n this.customerUserCustomerStatusKeySelected = null;\n shouldReloadFlag = true;\n }\n\n if (!this.customerUserCustomerStatusKeySelected || this.customerUserCustomerStatusKeySelected !== combo?.key) {\n this.customerUserCustomerStatusKeySelected = combo?.key;\n shouldReloadFlag = true;\n }\n\n return shouldReloadFlag;\n }\n\n private _setRateFilter(customerFilter: CustomerFilter, shouldReloadFlag: boolean): boolean {\n // Try to find the rate filter inside the rate models\n const rateUuid = customerFilter.rateUuid ? customerFilter.rateUuid : null;\n const rateModel = this.rateModels.find((rate) => rate.key === rateUuid);\n\n if (this.rateSelected !== rateModel) {\n this.rateSelected = rateModel;\n shouldReloadFlag = true;\n }\n\n return shouldReloadFlag;\n }\n\n private _triggerRipple(): void {\n this._matRipple.launch({ centered: true });\n }\n\n private _updateFilterAndSortFlag(): void {\n this.filterSetToDefaultValueFlag = this.state.isFilterSetToDefaultValues();\n this.sortSetToDefaultValueFlag = this.state.isSortSetToDefaultValues();\n }\n}\n","import { SpreadsheetExportTypeHelper } from 'app/shared/enum-helpers/spreadsheet-export-type.enum.helper';\nimport { SpreadsheetExportFileType } from 'app/shared/enums/spreadsheet-export-file-type.enum';\nimport { SpreadsheetExportType } from 'app/shared/enums/spreadsheet-export-type.enum';\nimport { AddSpreadsheetExportNotificationViewModelHelper } from 'app/shared/helpers/add-spreadsheet-export-notification.view-model-helper';\nimport { ReadSpreadsheetExportNotificationDetailViewModelHelper } from 'app/shared/helpers/read-spreadsheet-export-notification-detail.view-model-helper';\nimport { ButtonListSpreadsheetExportDialogModel } from '../models/button-list-spreadsheet-export-dialog.model';\nimport { ButtonListSpreadsheetExportDialogModelHelper } from './button-list-spreadsheet-export-dialog-model-helper';\n\nexport class CustomerSpreadsheetExportDialogModelHelper {\n public static build(strFilter: string, sortActive: string, sortDirection: string): ButtonListSpreadsheetExportDialogModel {\n const buttonListDialog = ButtonListSpreadsheetExportDialogModelHelper.build();\n const notificationDetailCustomer = ReadSpreadsheetExportNotificationDetailViewModelHelper.fromParams(\n strFilter,\n sortActive,\n sortDirection,\n SpreadsheetExportFileType.Xlsx,\n SpreadsheetExportType.Customer\n );\n const notificationDetailCustomerContact = ReadSpreadsheetExportNotificationDetailViewModelHelper.fromParams(\n strFilter,\n sortActive,\n sortDirection,\n SpreadsheetExportFileType.Xlsx,\n SpreadsheetExportType.CustomerContact\n );\n const notificationDetailCustomerUserCustomer = ReadSpreadsheetExportNotificationDetailViewModelHelper.fromParams(\n strFilter,\n sortActive,\n sortDirection,\n SpreadsheetExportFileType.Xlsx,\n SpreadsheetExportType.CustomerUserCustomer\n );\n\n // Export Customers\n buttonListDialog.buttonListDialog.button1Label = SpreadsheetExportTypeHelper.translateEnum(SpreadsheetExportType.Customer, null);\n buttonListDialog.addNotificationViewModels1 = AddSpreadsheetExportNotificationViewModelHelper.fromReadSpreadsheetExportViewModels([\n notificationDetailCustomer,\n ]);\n buttonListDialog.notifyMessage1 = `Excel - Clients en cours de génération`;\n\n // Export Customers Contacts\n buttonListDialog.buttonListDialog.button2Label = SpreadsheetExportTypeHelper.translateEnum(SpreadsheetExportType.CustomerContact, null);\n buttonListDialog.addNotificationViewModels2 = AddSpreadsheetExportNotificationViewModelHelper.fromReadSpreadsheetExportViewModels([\n notificationDetailCustomerContact,\n ]);\n buttonListDialog.notifyMessage2 = `Excel - Contacts de clients en cours de génération`;\n\n // Export Customers UserCustomers\n buttonListDialog.buttonListDialog.button3Label = SpreadsheetExportTypeHelper.translateEnum(\n SpreadsheetExportType.CustomerUserCustomer,\n null\n );\n buttonListDialog.addNotificationViewModels3 = AddSpreadsheetExportNotificationViewModelHelper.fromReadSpreadsheetExportViewModels([\n notificationDetailCustomerUserCustomer,\n ]);\n buttonListDialog.notifyMessage3 = `Excel - Utilisateurs d'espaces clients en cours de génération`;\n\n // Export All\n buttonListDialog.buttonListDialog.button4Label = 'Exporter tout';\n buttonListDialog.buttonListDialog.button4TopSeparatorFlag = true;\n buttonListDialog.addNotificationViewModels4 = AddSpreadsheetExportNotificationViewModelHelper.fromReadSpreadsheetExportViewModels([\n notificationDetailCustomer,\n notificationDetailCustomerContact,\n notificationDetailCustomerUserCustomer,\n ]);\n buttonListDialog.notifyMessage4 = `Excel multiples - Clients en cours de génération`;\n\n return buttonListDialog;\n }\n}\n","import { ListCardElementModel } from 'app/shared/components/cards/list-card/list-card-element.model';\nimport { ExtendOptionUserCustomerModel } from './extend-option-user-customer.model';\n\nexport class CustomerModel {\n public accountState: number;\n public code: string;\n public contactEmailAddress: string;\n public contactMobilePhoneNumber: string;\n public contactName: string;\n public contactWorkPhoneNumber: string;\n public currencyCode: string;\n public customerMemberFlag: boolean;\n public customerMembers: ListCardElementModel[];\n public disabledFlag: boolean;\n public groupDisabledFlag: boolean;\n public groupFlag: boolean;\n public groupName: string;\n public groupUuid: string;\n public name: string;\n public notApplicableTaxeLabel: string;\n public notApplicableTaxeNames: string;\n public rate: string;\n public rateDisabledFlag: boolean;\n public title: string;\n public userCustomerLabel: string;\n public userCustomers: ExtendOptionUserCustomerModel[];\n public uuid: string;\n public waitingUserCustomerLabel: string;\n}\n","import { PublishStatus } from 'app/shared/enums/publish-status.enum';\nimport { CreditFilter } from 'app/shared/prothesis-api-filters/credit-filter';\nimport { InvoiceFilter } from 'app/shared/prothesis-api-filters/invoice-filter';\nimport { ProFormaFilter } from 'app/shared/prothesis-api-filters/pro-forma-filter';\nimport { AdvancedFilterPanelModel } from '../models/advanced-filter-panel-model';\n\nexport class AdvancedFilterPanelModelHelper {\n public static countValuesOfAdvancedCreditFilter(advancedFilter: AdvancedFilterPanelModel): number {\n let counter = 0;\n\n if (advancedFilter.creditCancelledDisplayChoice !== 3) {\n counter++;\n }\n\n if (advancedFilter.creditPaidFlagDisplayChoice !== 1) {\n counter++;\n }\n\n if (advancedFilter.creditTypeDisplayChoice !== 1) {\n counter++;\n }\n\n if (advancedFilter.documentMarkedAsPrintedFlagChoice !== 1) {\n counter++;\n }\n\n if (advancedFilter.documentPublishStatusChoice !== 1) {\n counter++;\n }\n\n counter = advancedFilter.invoiceNumber ? counter + 1 : counter;\n\n return counter;\n }\n\n public static countValuesOfAdvancedInvoiceFilter(advancedFilter: AdvancedFilterPanelModel): number {\n let counter = 0;\n\n if (advancedFilter.documentMarkedAsPrintedFlagChoice !== 1) {\n counter++;\n }\n\n if (advancedFilter.documentPublishStatusChoice !== 1) {\n counter++;\n }\n\n if (advancedFilter.invoiceCancelledDisplayChoice !== 3) {\n counter++;\n }\n\n if (advancedFilter.invoicePaymentDisplayChoice !== 1) {\n counter++;\n }\n\n if (advancedFilter.invoiceTypeDisplayChoice !== 1) {\n counter++;\n }\n\n counter = advancedFilter.canceledCreditNumber ? counter + 1 : counter;\n\n return counter;\n }\n\n public static fromCreditFilter(creditFilter: CreditFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n\n if (creditFilter) {\n // Determines credit cancelled display\n if (!creditFilter.canceledFlag) {\n advancedFilterPanel.creditCancelledDisplayChoice = 1;\n }\n if (creditFilter.canceledFlag === true) {\n advancedFilterPanel.creditCancelledDisplayChoice = 2;\n }\n if (creditFilter.canceledFlag === false) {\n advancedFilterPanel.creditCancelledDisplayChoice = 3;\n }\n\n // Determines credit paidFlag display\n if (!creditFilter.paidFlag) {\n advancedFilterPanel.creditPaidFlagDisplayChoice = 1;\n }\n if (creditFilter.paidFlag === true) {\n advancedFilterPanel.creditPaidFlagDisplayChoice = 3;\n }\n if (creditFilter.paidFlag === false) {\n advancedFilterPanel.creditPaidFlagDisplayChoice = 2;\n }\n\n // Determines credit type display\n if (!creditFilter.creditFreeLineExistenceFlag) {\n advancedFilterPanel.creditTypeDisplayChoice = 1;\n }\n if (creditFilter.creditFreeLineExistenceFlag === true) {\n advancedFilterPanel.creditTypeDisplayChoice = 3;\n }\n if (creditFilter.creditFreeLineExistenceFlag === false) {\n advancedFilterPanel.creditTypeDisplayChoice = 2;\n }\n\n // Determines document marked as printed flag\n if (!creditFilter.markedAsPrintedFlag) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 1;\n }\n if (creditFilter.markedAsPrintedFlag === true) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 2;\n }\n if (creditFilter.markedAsPrintedFlag === false) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 3;\n }\n\n // Determines document Publish Status\n if (!creditFilter.publishStatuses || creditFilter.publishStatuses.length === 0) {\n advancedFilterPanel.documentPublishStatusChoice = 1;\n }\n if (creditFilter.publishStatuses && creditFilter.publishStatuses.indexOf(PublishStatus.Published) !== -1) {\n advancedFilterPanel.documentPublishStatusChoice = 2;\n }\n if (\n creditFilter.publishStatuses &&\n creditFilter.publishStatuses.indexOf(PublishStatus.NotPublished) !== -1 &&\n creditFilter.publishStatuses.indexOf(PublishStatus.UnPublished) !== -1\n ) {\n advancedFilterPanel.documentPublishStatusChoice = 3;\n }\n }\n advancedFilterPanel.invoiceNumber = creditFilter.invoiceNumber;\n return advancedFilterPanel;\n }\n\n public static fromInvoiceFilter(invoiceFilter: InvoiceFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n\n if (invoiceFilter) {\n // Determines document marked as printed flag\n if (!invoiceFilter.markedAsPrintedFlag) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 1;\n }\n if (invoiceFilter.markedAsPrintedFlag === true) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 2;\n }\n if (invoiceFilter.markedAsPrintedFlag === false) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 3;\n }\n\n // Determines document Publish Status\n if (!invoiceFilter.publishStatuses || invoiceFilter.publishStatuses.length === 0) {\n advancedFilterPanel.documentPublishStatusChoice = 1;\n }\n if (invoiceFilter.publishStatuses && invoiceFilter.publishStatuses.indexOf(PublishStatus.Published) !== -1) {\n advancedFilterPanel.documentPublishStatusChoice = 2;\n }\n if (\n invoiceFilter.publishStatuses &&\n invoiceFilter.publishStatuses.indexOf(PublishStatus.NotPublished) !== -1 &&\n invoiceFilter.publishStatuses.indexOf(PublishStatus.UnPublished) !== -1\n ) {\n advancedFilterPanel.documentPublishStatusChoice = 3;\n }\n\n // Determines invoice cancelled display\n if (!invoiceFilter.canceledFlag) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 1;\n }\n if (invoiceFilter.canceledFlag === true) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 2;\n }\n if (invoiceFilter.canceledFlag === false) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 3;\n }\n\n // Determines invoice payment display\n if (!invoiceFilter.paidFlag) {\n advancedFilterPanel.invoicePaymentDisplayChoice = 1;\n }\n if (invoiceFilter.paidFlag === true) {\n advancedFilterPanel.invoicePaymentDisplayChoice = 2;\n }\n if (invoiceFilter.paidFlag === false) {\n advancedFilterPanel.invoicePaymentDisplayChoice = 3;\n }\n\n // Determines invoice type display\n if (!invoiceFilter.invoiceFreeLineExistenceFlag) {\n advancedFilterPanel.invoiceTypeDisplayChoice = 1;\n }\n if (invoiceFilter.invoiceFreeLineExistenceFlag === true) {\n advancedFilterPanel.invoiceTypeDisplayChoice = 3;\n }\n if (invoiceFilter.invoiceFreeLineExistenceFlag === false) {\n advancedFilterPanel.invoiceTypeDisplayChoice = 2;\n }\n }\n\n advancedFilterPanel.canceledCreditNumber = invoiceFilter.canceledCreditNumber;\n\n return advancedFilterPanel;\n }\n\n public static fromProFormaFilter(proFormaFilter: ProFormaFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n\n if (proFormaFilter) {\n // Determines document marked as printed flag\n if (!proFormaFilter.markedAsPrintedFlag) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 1;\n }\n if (proFormaFilter.markedAsPrintedFlag === true) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 2;\n }\n if (proFormaFilter.markedAsPrintedFlag === false) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 3;\n }\n\n // Determines document Publish Status\n if (!proFormaFilter.publishStatuses || proFormaFilter.publishStatuses.length === 0) {\n advancedFilterPanel.documentPublishStatusChoice = 1;\n }\n if (proFormaFilter.publishStatuses && proFormaFilter.publishStatuses.indexOf(PublishStatus.Published) !== -1) {\n advancedFilterPanel.documentPublishStatusChoice = 2;\n }\n if (\n proFormaFilter.publishStatuses &&\n proFormaFilter.publishStatuses.indexOf(PublishStatus.NotPublished) !== -1 &&\n proFormaFilter.publishStatuses.indexOf(PublishStatus.UnPublished) !== -1\n ) {\n advancedFilterPanel.documentPublishStatusChoice = 3;\n }\n }\n return advancedFilterPanel;\n }\n\n public static resetValues(advancedFilter: AdvancedFilterPanelModel): AdvancedFilterPanelModel {\n advancedFilter.canceledCreditNumber = '';\n advancedFilter.creditCancelledDisplayChoice = 3;\n advancedFilter.creditPaidFlagDisplayChoice = 1;\n advancedFilter.creditTypeDisplayChoice = 1;\n advancedFilter.documentMarkedAsPrintedFlagChoice = 1;\n advancedFilter.documentPublishStatusChoice = 1;\n advancedFilter.invoiceCancelledDisplayChoice = 3;\n advancedFilter.invoiceNumber = '';\n advancedFilter.invoicePaymentDisplayChoice = 1;\n advancedFilter.invoiceTypeDisplayChoice = 1;\n return advancedFilter;\n }\n\n public static toCreditFilter(advancedFilterPanel: AdvancedFilterPanelModel, creditFilter: CreditFilter): CreditFilter {\n // Display canceled credits\n if (advancedFilterPanel.creditCancelledDisplayChoice === 1) {\n creditFilter.canceledFlag = undefined;\n } else if (advancedFilterPanel.creditCancelledDisplayChoice === 2) {\n creditFilter.canceledFlag = true;\n } else if (advancedFilterPanel.creditCancelledDisplayChoice === 3) {\n creditFilter.canceledFlag = false;\n }\n\n // Display credit paidFlag\n if (advancedFilterPanel.creditPaidFlagDisplayChoice === 1) {\n creditFilter.paidFlag = undefined;\n } else if (advancedFilterPanel.creditPaidFlagDisplayChoice === 3) {\n creditFilter.paidFlag = true;\n } else if (advancedFilterPanel.creditPaidFlagDisplayChoice === 2) {\n creditFilter.paidFlag = false;\n }\n\n // Display credit types\n if (advancedFilterPanel.creditTypeDisplayChoice === 1) {\n creditFilter.creditFreeLineExistenceFlag = undefined;\n } else if (advancedFilterPanel.creditTypeDisplayChoice === 3) {\n creditFilter.creditFreeLineExistenceFlag = true;\n } else if (advancedFilterPanel.creditTypeDisplayChoice === 2) {\n creditFilter.creditFreeLineExistenceFlag = false;\n }\n\n // Display Marked As Printed Flag\n if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 1) {\n creditFilter.markedAsPrintedFlag = undefined;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 2) {\n creditFilter.markedAsPrintedFlag = true;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 3) {\n creditFilter.markedAsPrintedFlag = false;\n }\n\n // Display Publish Status\n if (advancedFilterPanel.documentPublishStatusChoice === 1) {\n creditFilter.publishStatuses = undefined;\n } else if (advancedFilterPanel.documentPublishStatusChoice === 2) {\n creditFilter.publishStatuses = [PublishStatus.Published];\n } else if (advancedFilterPanel.documentPublishStatusChoice === 3) {\n creditFilter.publishStatuses = [PublishStatus.NotPublished, PublishStatus.UnPublished];\n }\n\n creditFilter.invoiceNumber = advancedFilterPanel.invoiceNumber;\n\n return creditFilter;\n }\n\n public static toInvoiceFilter(advancedFilterPanel: AdvancedFilterPanelModel, invoiceFilter: InvoiceFilter): InvoiceFilter {\n // Display Marked As Printed Flag\n if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 1) {\n invoiceFilter.markedAsPrintedFlag = undefined;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 2) {\n invoiceFilter.markedAsPrintedFlag = true;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 3) {\n invoiceFilter.markedAsPrintedFlag = false;\n }\n\n // Display Publish Status\n if (advancedFilterPanel.documentPublishStatusChoice === 1) {\n invoiceFilter.publishStatuses = undefined;\n } else if (advancedFilterPanel.documentPublishStatusChoice === 2) {\n invoiceFilter.publishStatuses = [PublishStatus.Published];\n } else if (advancedFilterPanel.documentPublishStatusChoice === 3) {\n invoiceFilter.publishStatuses = [PublishStatus.NotPublished, PublishStatus.UnPublished];\n }\n\n // Display canceled invoices\n if (advancedFilterPanel.invoiceCancelledDisplayChoice === 1) {\n invoiceFilter.canceledFlag = undefined;\n } else if (advancedFilterPanel.invoiceCancelledDisplayChoice === 2) {\n invoiceFilter.canceledFlag = true;\n } else if (advancedFilterPanel.invoiceCancelledDisplayChoice === 3) {\n invoiceFilter.canceledFlag = false;\n }\n\n // Display paid invoices\n if (advancedFilterPanel.invoicePaymentDisplayChoice === 1) {\n invoiceFilter.paidFlag = undefined;\n } else if (advancedFilterPanel.invoicePaymentDisplayChoice === 2) {\n invoiceFilter.paidFlag = true;\n } else if (advancedFilterPanel.invoicePaymentDisplayChoice === 3) {\n invoiceFilter.paidFlag = false;\n }\n\n // Display invoice types\n if (advancedFilterPanel.invoiceTypeDisplayChoice === 1) {\n invoiceFilter.invoiceFreeLineExistenceFlag = undefined;\n } else if (advancedFilterPanel.invoiceTypeDisplayChoice === 3) {\n invoiceFilter.invoiceFreeLineExistenceFlag = true;\n } else if (advancedFilterPanel.invoiceTypeDisplayChoice === 2) {\n invoiceFilter.invoiceFreeLineExistenceFlag = false;\n }\n invoiceFilter.canceledCreditNumber = advancedFilterPanel.canceledCreditNumber;\n\n return invoiceFilter;\n }\n\n public static toProFormaFilter(advancedFilterPanel: AdvancedFilterPanelModel, proFormaFilter: ProFormaFilter): ProFormaFilter {\n // Display Marked As Printed Flag\n if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 1) {\n proFormaFilter.markedAsPrintedFlag = undefined;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 2) {\n proFormaFilter.markedAsPrintedFlag = true;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 3) {\n proFormaFilter.markedAsPrintedFlag = false;\n }\n\n // Display Publish Status\n if (advancedFilterPanel.documentPublishStatusChoice === 1) {\n proFormaFilter.publishStatuses = undefined;\n } else if (advancedFilterPanel.documentPublishStatusChoice === 2) {\n proFormaFilter.publishStatuses = [PublishStatus.Published];\n } else if (advancedFilterPanel.documentPublishStatusChoice === 3) {\n proFormaFilter.publishStatuses = [PublishStatus.NotPublished, PublishStatus.UnPublished];\n }\n return proFormaFilter;\n }\n}\n","
\n
\n \n \n
\n
\n \n
\n \n \n \n 0 ? 'active-filter' : 'no-filter'\">\n {{ textButtonCustomerFilter }}\n \n \n\n \n clear\n \n\n \n 0 ? 'active-filter' : 'no-filter'\">\n {{ textButtonAdvancedFilter }}\n \n \n\n \n clear\n \n \n
\n
\n
\n \n \n
\n
\n
\n \n \n \n highlight_off\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 Exporter les relances vers Excel\n \n
\n
\n","import { Component, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MatButtonToggle, MatButtonToggleChange, MatButtonToggleGroup } from '@angular/material/button-toggle';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { fuseAnimations } from '@fuse/animations';\nimport { CorpTitleService } from 'app/core/services/corp-title.service';\nimport { FocusService } from 'app/core/services/focus.service';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { LocalStorageService } from 'app/core/services/local-storage.service';\nimport { NotifyService } from 'app/core/services/notify/notify.service';\nimport { PeriodSearchService } from 'app/core/services/period-search.service';\nimport { CustomerService } from 'app/core/services/prothesis-api/customer.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { SessionStorageService } from 'app/core/services/session-storage.service';\nimport { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { RouterLinkModel } from 'app/shared/common-models/models/routerLink.model';\nimport { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { CustomerFilterPanelComponent } from 'app/shared/components/filter-panels/customer-filter-panel/customer-filter-panel.component';\nimport { CustomerFilterPanelModel } from 'app/shared/components/filter-panels/customer-filter-panel/models/customer-filter-panel.model';\nimport { GridFilterModel } from 'app/shared/components/grid-filter/grid-filter-model';\nimport { GridFilterComponent } from 'app/shared/components/grid-filter/grid-filter.component';\nimport { GridSortComponent } from 'app/shared/components/grid-sort/grid-sort.component';\nimport { GridSortModel } from 'app/shared/components/grid-sort/grid-sort.model';\nimport { LaboratoryAreaPeriodSearchModelHelper } from 'app/shared/components/period-search/model-helpers/laboratory-area-period-search-model-helper';\nimport { PeriodSearchInfoModel } from 'app/shared/components/period-search/models/period-search-info-model';\nimport { PeriodSearchModel } from 'app/shared/components/period-search/models/period-search-model';\nimport { CustomerGroupEnum } from 'app/shared/components/pickers/customer-picker/customer-group.enum';\nimport { CustomerGroupEnumHelper } from 'app/shared/components/pickers/customer-picker/customer-group.enum.helper';\nimport { CustomerModel } from 'app/shared/components/pickers/customer-picker/models/customer.model';\nimport { ButtonListSpreadsheetExportDialogComponent } from 'app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/button-list-spreadsheet-export-dialog.component';\nimport { InvoiceUnpaidReminderSpreadsheetExportDialogModelHelper } from 'app/shared/components/spreadsheet-dialog/button-list-spreadsheet-export-dialog/model-helpers/invoice-unpaid-reminder-spreadsheet-export-dialog.helper';\nimport { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchCreditDateTypeHelper } from 'app/shared/enum-helpers/period-search-credit-date-type.enum.helper';\nimport { PeriodSearchInvoiceDateTypeHelper } from 'app/shared/enum-helpers/period-search-invoice-date-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchCreditDateType } from 'app/shared/enums/period-search-credit-date-type.enum';\nimport { PeriodSearchInvoiceDateType } from 'app/shared/enums/period-search-invoice-date-type.enum';\nimport { CreditFilter } from 'app/shared/prothesis-api-filters/credit-filter';\nimport { InvoiceFilter } from 'app/shared/prothesis-api-filters/invoice-filter';\nimport { ProFormaFilter } from 'app/shared/prothesis-api-filters/pro-forma-filter';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { InvoiceAdvancedFilterComponent } from './filter/invoice-advanced-filter/invoice-advanced-filter.component';\nimport { AdvancedFilterPanelModelHelper } from './model-helpers/advanced-filter-panel-model.helper';\nimport { AdvancedFilterPanelModel } from './models/advanced-filter-panel-model';\nimport { CreditState } from './state/credit-state';\nimport { InvoiceState } from './state/invoice-state';\nimport { ProFormaState } from './state/pro-forma-state';\n\n@Component({\n animations: fuseAnimations,\n selector: 'app-invoice',\n styleUrls: ['./invoice.component.scss'],\n templateUrl: './invoice.component.html',\n})\nexport class InvoiceComponent implements OnDestroy, OnInit {\n @ViewChild('_customerFilterPanelComponent') private _customerFilterPanelComponent: CustomerFilterPanelComponent;\n @ViewChild('_gridFilterComponent', { static: true }) private _gridFilterComponent: GridFilterComponent;\n @ViewChild('_gridSortComponent', { static: true }) private _gridSortComponent: GridSortComponent;\n @ViewChild('_invoiceAdvancedFilterComponent') private _invoiceAdvancedFilterComponent: InvoiceAdvancedFilterComponent;\n @ViewChild('_matButtonToggleAdvancedFilter') private _matButtonToggleAdvancedFilter: MatButtonToggle;\n @ViewChild('_matButtonToggleCustomerFilter') private _matButtonToggleCustomerFilter: MatButtonToggle;\n @ViewChild('_matButtonToggleGroupFilter', { static: true }) private _matButtonToggleGroupFilter: MatButtonToggleGroup;\n public static strCreditKeyLocalStoragePageSize = 'credit-page-size';\n public static strCreditKeyLocalStorageSort = 'credit-sort-favorite';\n public static strCreditState = 'credit-state';\n public static strCurrentTabLink = 'invoice-current-tab-link';\n public static strInvoiceKeyLocalStoragePageSize = 'invoice-page-size';\n public static strInvoiceKeyLocalStorageSort = 'invoice-sort-favorite';\n public static strInvoiceState = 'invoice-state';\n public static strPeriodSearchTypeFavorite = 'invoice-period-search-type-favorite';\n public static strProFormaKeyLocalStoragePageSize = 'pro-forma-page-size';\n public static strProFormaKeyLocalStorageSort = 'pro-forma-sort-favorite';\n public static strProFormaState = 'pro-forma-state';\n public activeGridSortModel: GridSortModel[];\n public activeLink: RouterLinkModel;\n public advancedFilterCounter: number;\n public advancedFilterPanel: AdvancedFilterPanelModel;\n public constTextButtonAdvancedFilter = 'Filtres avancés';\n public constTextButtonCustomerFilter = 'Tous les clients';\n public creditState: CreditState = new CreditState();\n public customerFilterCounter: number;\n public customerFilterPanel: CustomerFilterPanelModel;\n public customerFilterUuid: string;\n public customerPickerComboDefaultValue: ComboModel;\n public filterSetToDefaultValueFlag = true;\n public gridFilter: GridFilterModel;\n public gridSortModelCredit: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'number', label: 'Par numéro de facture' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public gridSortModelInvoice: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'number', label: 'Par numéro de facture' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public gridSortModelProForma: GridSortModel[] = [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ];\n public invoiceProcessingActionFlag: boolean;\n public invoiceState: InvoiceState = new InvoiceState();\n public navLinks: RouterLinkModel[];\n public pageTitle = 'Factures';\n public periodSearch: PeriodSearchModel;\n public periodSearchCreditDateTypeDefault: string = PeriodSearchCreditDateType.CreditDate.toString();\n public periodSearchDateTypeOptions: ComboModel[];\n public periodSearchInvoiceDateTypeDefault: string = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n public periodSearchProFormaDateTypeDefault: string = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n public periodSearchTypeDefault = PeriodSearchType.FiscalYear.toString();\n public periodSearchTypeFavorite: string;\n public periodSearchTypeOptions: ComboModel[];\n public periodSearchTypeSetToDefaultValueFlag = true;\n public proFormaState: ProFormaState = new ProFormaState();\n public showEraseAdvancedFilterFlag = false;\n public showEraseCustomerFilterFlag = false;\n public sortSetToDefaultValueFlag = true;\n public tabIndexCredit = 2;\n public tabIndexInvoice = 1;\n public tabIndexProForma = 0;\n public textButtonAdvancedFilter = 'Filtres avancés';\n public textButtonCustomerFilter = 'Tous les clients';\n private _routerOutletLoadedSubscription: Subscription;\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _activatedRoute: ActivatedRoute,\n private _corpTitleService: CorpTitleService,\n private _customerService: CustomerService,\n private _focusService: FocusService,\n private _highlightService: HighlightService,\n private _localStorageService: LocalStorageService,\n private _matDialog: MatDialog,\n private _notifyService: NotifyService,\n private _periodSearchService: PeriodSearchService,\n private _router: Router,\n private _sessionStorageService: SessionStorageService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {\n this.invoiceProcessingActionFlag = this._workingLaboratoryService.laboratoryRole?.invoiceProcessingActionFlag;\n\n this._corpTitleService.setTitle(this.pageTitle);\n\n this.navLinks = [\n new RouterLinkModel(\n this.tabIndexProForma,\n 'Factures pro forma',\n './pro-forma',\n this.gridSortModelProForma,\n 'tab-link-invoice-pro-forma'\n ),\n new RouterLinkModel(this.tabIndexInvoice, 'Factures définitives', './', this.gridSortModelInvoice, 'tab-link-invoice-final'),\n new RouterLinkModel(this.tabIndexCredit, `Factures d'avoir`, './credit', this.gridSortModelCredit, 'tab-link-invoice-credit'),\n ];\n }\n\n public advancedFilterAppliedHandler(advancedFilterPanel: AdvancedFilterPanelModel): void {\n this._initAdvancedFilter(advancedFilterPanel);\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = true;\n this._matButtonToggleAdvancedFilter.focus();\n\n // Reset Toggle and page index\n this._matButtonToggleGroupFilter.value = null;\n this._resetPageIndex();\n\n // refresh page\n this._saveStateAndSelfNavigate();\n }\n\n public customerFilterAppliedHandler(customerFilterPanel: CustomerFilterPanelModel): void {\n this.customerFilterPanel = customerFilterPanel;\n\n // copy the customer filter for all state\n this.customerFilterUuid = customerFilterPanel?.customer ? customerFilterPanel.customer.uuid : null;\n\n this.invoiceState.invoiceFilter.customerUuids = this.customerFilterUuid ? [this.customerFilterUuid] : null;\n this.creditState.creditFilter.customerUuids = this.customerFilterUuid ? [this.customerFilterUuid] : null;\n this.proFormaState.proFormaFilter.customerUuids = this.customerFilterUuid ? [this.customerFilterUuid] : null;\n this.proFormaState.proFormaFilter.customerMemberUuidsIncludedFlag = true;\n\n // update label of advanced filter button\n this._updateCustomerFilterToggleButtonLabel();\n\n // Reset Toggle and page index\n this._matButtonToggleGroupFilter.value = null;\n this._focusService.focusOnCustomerPanelToggleButtonFlag = true;\n this._focusService.setTimeoutOutsideAngular(() => {\n this._matButtonToggleCustomerFilter.focus();\n });\n this._resetPageIndex();\n\n // refresh page\n this._saveStateAndSelfNavigate();\n }\n\n public eraseAdvancedFilter(): void {\n AdvancedFilterPanelModelHelper.resetValues(this.advancedFilterPanel);\n this.advancedFilterAppliedHandler(this.advancedFilterPanel);\n }\n\n public eraseAllFiltersClickedHandler(): void {\n this.creditState.resetFilter();\n this.creditState.creditFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.creditState.creditFilter.periodSearchDateType = Number(this.periodSearchCreditDateTypeDefault);\n\n this.invoiceState.resetFilter();\n this.invoiceState.invoiceFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.invoiceState.invoiceFilter.periodSearchDateType = Number(this.periodSearchInvoiceDateTypeDefault);\n\n this.proFormaState.resetFilter();\n this.proFormaState.proFormaFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.proFormaState.proFormaFilter.periodSearchDateType = Number(this.periodSearchProFormaDateTypeDefault);\n\n this._saveStateAndSelfNavigate();\n }\n\n public eraseCustomerFilter(): void {\n this.customerFilterAppliedHandler(null);\n }\n\n public exportClickedHandler(): void {\n const filter = new InvoiceFilter();\n filter.paidFlag = false;\n filter.toDueDate = TimeZoneService.toISOString(TimeZoneService.addTime(TimeZoneService.createMomentInLaboratoryTimeZone(), 1));\n const strFilter = JSON.stringify(filter);\n const buttonListSpreadsheetExportDialog = InvoiceUnpaidReminderSpreadsheetExportDialogModelHelper.build(strFilter, 'dueDate', 'asc');\n\n this._matDialog.open(ButtonListSpreadsheetExportDialogComponent, {\n data: buttonListSpreadsheetExportDialog,\n autoFocus: false,\n });\n }\n\n public getAddButtonLink(): string {\n if (this.invoiceProcessingActionFlag) {\n return '/invoice/create';\n }\n return null;\n }\n\n @HostListener('window:keydown.PageDown', ['$event'])\n public keydownPageDown($event: KeyboardEvent): void {\n $event.preventDefault();\n }\n\n @HostListener('window:keydown.Tab', ['$event'])\n public keydownTab($event: KeyboardEvent): void {\n this._focusService.setFocusOnGridFilter($event, this._gridFilterComponent);\n }\n\n @HostListener('window:keyup.PageDown', ['$event'])\n public keyupPageDown(): void {\n let nextIndex = this.activeLink.index - 1;\n if (nextIndex < 0) {\n nextIndex = this.navLinks.length - 1;\n }\n this.tabClicked(this.navLinks[nextIndex]);\n }\n\n @HostListener('window:keyup.PageUp', ['$event'])\n public keyupPageUp(): void {\n const nextIndex = (this.activeLink.index + 1) % this.navLinks.length;\n this.tabClicked(this.navLinks[nextIndex]);\n }\n\n public ngOnDestroy(): void {\n this._routerOutletLoadedSubscription.unsubscribe();\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n this.customerPickerComboDefaultValue = CustomerGroupEnumHelper.convertToComboModel(CustomerGroupEnum.CustomersExceptMembers);\n\n // Set nav tab\n if (this._router.url.startsWith('/invoice/pro-forma')) {\n this.activeLink = this.navLinks[this.tabIndexProForma];\n } else if (this._router.url.startsWith('/invoice/credit')) {\n this.activeLink = this.navLinks[this.tabIndexCredit];\n } else {\n this.activeLink = this.navLinks[this.tabIndexInvoice];\n }\n\n this._periodSearchService.periodSearchInfoSubject$\n .pipe(takeUntil(this._unsubscribeAll$))\n .subscribe((periodSearchInfo: PeriodSearchInfoModel) => {\n this._initPeriodSearchFilter(this.periodSearch);\n this.periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (this._isCreditContext()) {\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n });\n\n this._activatedRoute.queryParams.pipe(takeUntil(this._unsubscribeAll$)).subscribe((params) => {\n this._buildPeriodSearchOptions();\n this._loadState(params['pstate']);\n this._initAdvancedFilter(this.advancedFilterPanel);\n this._initCustomerContext();\n this._initGridSortContext();\n this._initPeriodSearchFilter(this.periodSearch);\n this._initTextFilterContext();\n });\n\n this._routerOutletLoadedSubscription = this._focusService.routerOutletLoadedHandler().subscribe(() => {\n if (this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag) {\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = false;\n this._matButtonToggleGroupFilter.value = null;\n this._matButtonToggleAdvancedFilter.focus();\n } else if (this._focusService.focusOnCustomerPanelToggleButtonFlag) {\n this._focusService.focusOnCustomerPanelToggleButtonFlag = false;\n this._matButtonToggleGroupFilter.value = null;\n this._matButtonToggleCustomerFilter.focus();\n } else {\n this.setFocus();\n }\n });\n }\n\n public periodSearchSubmitEventHandler(periodSearch: PeriodSearchModel): void {\n this.creditState.creditFilter = LaboratoryAreaPeriodSearchModelHelper.toCreditFilter(\n this.creditState.creditFilter,\n periodSearch,\n this._isCreditContext()\n );\n this.invoiceState.invoiceFilter = LaboratoryAreaPeriodSearchModelHelper.toInvoiceFilter(\n this.invoiceState.invoiceFilter,\n periodSearch,\n this._isInvoiceContext()\n );\n this.proFormaState.proFormaFilter = LaboratoryAreaPeriodSearchModelHelper.toProFormaFilter(\n this.proFormaState.proFormaFilter,\n periodSearch,\n this._isProFormaContext()\n );\n\n this._resetPageIndex();\n this._saveStateAndSelfNavigate(true);\n }\n\n public saveFavoriteClickedHandler(): void {\n // Save into the local storage the new favorites\n const sort = new Array();\n if (this._isCreditContext()) {\n this._saveCurrentState(sort, this.creditState, InvoiceComponent.strCreditKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.creditState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this._saveCurrentState(sort, this.invoiceState, InvoiceComponent.strInvoiceKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this._saveCurrentState(sort, this.proFormaState, InvoiceComponent.strProFormaKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._notifyService.displayInformationMessagesNow('Tris favoris mémorisés');\n }\n\n public saveFavoritePeriodSearchTypeEventHandler(periodSearchTypeKey: string): void {\n // Save into the local storage the new favorites\n this.periodSearchTypeFavorite = periodSearchTypeKey;\n\n let newPeriodSearchType = periodSearchTypeKey;\n if (newPeriodSearchType === '-1') {\n newPeriodSearchType = null;\n }\n\n // Save favorite period search type current\n this._localStorageService.write(InvoiceComponent.strPeriodSearchTypeFavorite, newPeriodSearchType);\n\n // Update current favorite\n this.periodSearchTypeSetToDefaultValueFlag = this.periodSearch.periodSearchType === this.periodSearchTypeFavorite;\n\n if (this._isCreditContext()) {\n this.sortSetToDefaultValueFlag = this.creditState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._notifyService.displayInformationMessagesNow(`Type de période favori mémorisé`);\n }\n\n public setFocus(): void {\n this._focusService.setTimeoutOutsideAngular(() => {\n if (this._matButtonToggleGroupFilter.value === 'advancedFilter') {\n this._invoiceAdvancedFilterComponent?.setFocus();\n } else if (this._matButtonToggleGroupFilter.value === 'customerFilter') {\n this._customerFilterPanelComponent?.setFocus();\n }\n });\n }\n\n public sortActiveChanged(newSortActive: string): void {\n if (this._isCreditContext()) {\n this.creditState.sortActive = newSortActive;\n } else if (this._isInvoiceContext()) {\n this.invoiceState.sortActive = newSortActive;\n } else if (this._isProFormaContext()) {\n this.proFormaState.sortActive = newSortActive;\n }\n\n this._saveStateAndSelfNavigate(true);\n }\n\n public sortDirectionChanged(newSortDirection: string): void {\n if (this._isCreditContext()) {\n this.creditState.sortDirection = newSortDirection;\n } else if (this._isInvoiceContext()) {\n this.invoiceState.sortDirection = newSortDirection;\n } else if (this._isProFormaContext()) {\n this.proFormaState.sortDirection = newSortDirection;\n }\n\n this._saveStateAndSelfNavigate(true);\n }\n\n public tabClicked(navLink: RouterLinkModel): void {\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = false;\n this._focusService.focusOnCustomerPanelToggleButtonFlag = false;\n this.activeLink = navLink;\n this._localStorageService.write(InvoiceComponent.strCurrentTabLink, this.activeLink.link.replace('./', ''));\n this._buildPeriodSearchOptions();\n this._loadState(undefined);\n this._initAdvancedFilter(this.advancedFilterPanel);\n this._initCustomerContext();\n this._initGridSortContext();\n this._initPeriodSearchFilter(this.periodSearch);\n this._initTextFilterContext();\n }\n\n public textFilterChangedEventHandler(newTextFilter: string): void {\n this._highlightService.compileFilter(newTextFilter);\n\n this.invoiceState.invoiceFilter.textFilter = newTextFilter;\n this.creditState.creditFilter.textFilter = newTextFilter;\n this.proFormaState.proFormaFilter.textFilter = newTextFilter;\n\n this._resetPageIndex();\n\n this._saveStateAndSelfNavigate();\n }\n\n public toggleChange($event: MatButtonToggleChange): void {\n const toggle = $event.source;\n if (toggle) {\n const group = toggle.buttonToggleGroup;\n if ($event.value.some((item) => item === toggle.value)) {\n group.value = [toggle.value];\n }\n }\n }\n\n private _buildPeriodSearchOptions(): void {\n this.periodSearchTypeOptions = PeriodSearchTypeHelper.buildOptions();\n if (this._isCreditContext()) {\n this.periodSearchDateTypeOptions = PeriodSearchCreditDateTypeHelper.buildOptions();\n } else if (this._isInvoiceContext()) {\n this.periodSearchDateTypeOptions = PeriodSearchInvoiceDateTypeHelper.buildOptions();\n } else if (this._isProFormaContext()) {\n this.periodSearchDateTypeOptions = PeriodSearchInvoiceDateTypeHelper.buildOptions();\n }\n }\n\n private _initAdvancedFilter(advancedFilterPanel: AdvancedFilterPanelModel): void {\n this.advancedFilterPanel = advancedFilterPanel;\n\n if (this._isCreditContext()) {\n this.creditState.creditFilter = AdvancedFilterPanelModelHelper.toCreditFilter(advancedFilterPanel, this.creditState.creditFilter);\n } else if (this._isInvoiceContext()) {\n this.invoiceState.invoiceFilter = AdvancedFilterPanelModelHelper.toInvoiceFilter(\n advancedFilterPanel,\n this.invoiceState.invoiceFilter\n );\n } else if (this._isProFormaContext()) {\n this.proFormaState.proFormaFilter = AdvancedFilterPanelModelHelper.toProFormaFilter(\n advancedFilterPanel,\n this.proFormaState.proFormaFilter\n );\n }\n\n this._updateAdvancedFilterToggleButtonLabel();\n }\n\n private _initCustomer(customerUuids: string[]): void {\n if (customerUuids && customerUuids.length > 0) {\n this._customerService.getById(customerUuids[0]).subscribe((res) => {\n this.customerFilterPanel = new CustomerFilterPanelModel();\n this.customerFilterPanel.customer = new CustomerModel();\n this.customerFilterPanel.customer.code = res.code;\n this.customerFilterPanel.customer.name = res.name;\n this.customerFilterPanel.customer.uuid = res.uuid;\n\n this._updateCustomerFilterToggleButtonLabel();\n });\n } else {\n this.customerFilterPanel = null;\n this._updateCustomerFilterToggleButtonLabel();\n }\n }\n\n private _initCustomerContext(): void {\n if (this._isCreditContext()) {\n if (this.creditState && this.creditState.creditFilter) {\n this._initCustomer(this.creditState.creditFilter.customerUuids);\n }\n }\n\n if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.invoiceFilter) {\n this._initCustomer(this.invoiceState.invoiceFilter.customerUuids);\n }\n }\n\n if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.proFormaFilter) {\n this._initCustomer(this.proFormaState.proFormaFilter.customerUuids);\n }\n }\n }\n\n private _initFavoriteContext(shouldForceSortFlag: boolean): void {\n if (this.creditState) {\n this._initFavoriteSortFromLocalStorage(InvoiceComponent.strCreditKeyLocalStorageSort, this.creditState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n InvoiceComponent.strPeriodSearchTypeFavorite,\n this.creditState.creditFilter,\n this.periodSearchCreditDateTypeDefault,\n shouldForceSortFlag\n );\n }\n if (this.invoiceState) {\n this._initFavoriteSortFromLocalStorage(InvoiceComponent.strInvoiceKeyLocalStorageSort, this.invoiceState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n InvoiceComponent.strPeriodSearchTypeFavorite,\n this.invoiceState.invoiceFilter,\n this.periodSearchInvoiceDateTypeDefault,\n shouldForceSortFlag\n );\n }\n if (this.proFormaState) {\n this._initFavoriteSortFromLocalStorage(InvoiceComponent.strProFormaKeyLocalStorageSort, this.proFormaState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n InvoiceComponent.strPeriodSearchTypeFavorite,\n this.proFormaState.proFormaFilter,\n this.periodSearchProFormaDateTypeDefault,\n shouldForceSortFlag\n );\n }\n }\n\n private _initFavoritePeriodSearchTypeFromLocalStorage(\n key: string,\n documentFilter: InvoiceFilter | ProFormaFilter | CreditFilter,\n periodSearchDateTypeDefault: string,\n shouldForceSortFlag: boolean\n ): void {\n const strFavoritePeriodSearchType = this._localStorageService?.read(key);\n if (!strFavoritePeriodSearchType) {\n // No favorites stored into the local storage\n this.periodSearchTypeFavorite = this.periodSearchTypeDefault;\n } else {\n this.periodSearchTypeFavorite = strFavoritePeriodSearchType;\n }\n // No session period search type\n if (!this.periodSearch?.periodSearchType || shouldForceSortFlag) {\n if (!this.periodSearch) {\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, periodSearchDateTypeDefault);\n } else {\n this.periodSearch.periodSearchType = this.periodSearchTypeFavorite;\n }\n\n documentFilter.periodSearchType = Number(this.periodSearch.periodSearchType);\n }\n\n this.periodSearchTypeSetToDefaultValueFlag = this.periodSearch?.periodSearchType === this.periodSearchTypeFavorite;\n }\n\n private _initFavoriteSortFromLocalStorage(key: string, state: PaginatedListState, shouldForceSortFlag: boolean): void {\n const sort = this._localStorageService.read(key);\n state.initSort(shouldForceSortFlag, sort);\n this.sortSetToDefaultValueFlag = state.isSortSetToDefaultValues();\n }\n\n private _initGridSort(state: PaginatedListState): void {\n if (this._gridSortComponent.sortActive !== state.sortActive) {\n this._gridSortComponent.sortActive = state.sortActive;\n }\n\n if (this._gridSortComponent.sortDirection !== state.sortDirection) {\n this._gridSortComponent.sortDirection = state.sortDirection;\n }\n\n if (this._gridSortComponent.sortFavorite !== state.sortFavorite) {\n this._gridSortComponent.sortFavorite = state.sortFavorite;\n }\n\n if (this._gridSortComponent.sortDirectionFavorite !== state.sortDirectionFavorite) {\n this._gridSortComponent.sortDirectionFavorite = state.sortDirectionFavorite;\n }\n }\n\n private _initGridSortContext(): void {\n if (this._isCreditContext()) {\n this._initGridSort(this.creditState);\n } else if (this._isInvoiceContext()) {\n this._initGridSort(this.invoiceState);\n } else if (this._isProFormaContext()) {\n this._initGridSort(this.proFormaState);\n }\n }\n\n private _initPeriodSearchFilter(periodSearch: PeriodSearchModel): void {\n if (this._isCreditContext()) {\n if (!periodSearch) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, this.periodSearchCreditDateTypeDefault);\n }\n if (this.creditState) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromCreditFilter(\n this.creditState.creditFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n if (this._isInvoiceContext()) {\n if (!periodSearch) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, this.periodSearchInvoiceDateTypeDefault);\n }\n if (this.invoiceState) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromInvoiceFilter(\n this.invoiceState.invoiceFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n if (this._isProFormaContext()) {\n if (!periodSearch) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, this.periodSearchProFormaDateTypeDefault);\n }\n if (this.proFormaState) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromProFormaFilter(\n this.proFormaState.proFormaFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n this.periodSearch = periodSearch;\n }\n\n private _initTextFilter(textFilter: string): void {\n this.gridFilter = new GridFilterModel(textFilter);\n this._highlightService.compileFilter(textFilter);\n }\n\n private _initTextFilterContext(): void {\n if (this._isCreditContext()) {\n if (this.creditState && this.creditState.creditFilter) {\n this._initTextFilter(this.creditState.creditFilter.textFilter);\n }\n }\n\n if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.invoiceFilter) {\n this._initTextFilter(this.invoiceState.invoiceFilter.textFilter);\n }\n }\n\n if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.proFormaFilter) {\n this._initTextFilter(this.proFormaState.proFormaFilter.textFilter);\n }\n }\n }\n\n private _isCreditContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexCredit].label;\n }\n\n private _isInvoiceContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexInvoice].label;\n }\n\n private _isProFormaContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexProForma].label;\n }\n\n private _loadCreditState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.creditState,\n stateUrl,\n InvoiceComponent.strCreditState\n );\n\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.creditState.creditFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromCreditFilter(this.creditState.creditFilter);\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromCreditFilter(\n this.creditState.creditFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadInvoiceState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.invoiceState,\n stateUrl,\n InvoiceComponent.strInvoiceState\n );\n\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.invoiceState.invoiceFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromInvoiceFilter(this.invoiceState.invoiceFilter);\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromInvoiceFilter(\n this.invoiceState.invoiceFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadProFormaState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.proFormaState,\n stateUrl,\n InvoiceComponent.strProFormaState\n );\n\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.proFormaState.proFormaFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromProFormaFilter(this.proFormaState.proFormaFilter);\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromProFormaFilter(\n this.proFormaState.proFormaFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadState(stateUrl: string): void {\n let shouldReloadFlag = true;\n this._initFavoriteContext(!stateUrl);\n\n if (this._isCreditContext()) {\n shouldReloadFlag = this._loadCreditState(stateUrl, shouldReloadFlag);\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.creditState.isSortSetToDefaultValues();\n this._synchronizeInvoiceStateFromCreditState();\n this._synchronizeProFormaStateFromCreditState();\n }\n\n if (this._isInvoiceContext()) {\n shouldReloadFlag = this._loadInvoiceState(stateUrl, shouldReloadFlag);\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this._synchronizeCreditStatefromInvoiceState();\n this._synchronizeProFormaStateFromInvoiceState();\n }\n\n if (this._isProFormaContext()) {\n shouldReloadFlag = this._loadProFormaState(stateUrl, shouldReloadFlag);\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this._synchronizeCreditStatefromProFormaState();\n this._synchronizeInvoiceStateFromProFormaState();\n }\n\n if (shouldReloadFlag) {\n this._selfNavigate(true);\n return;\n }\n }\n\n private _resetPageIndex(): void {\n if (this.creditState) {\n this.creditState.pageIndex = 0;\n }\n\n if (this.invoiceState) {\n this.invoiceState.pageIndex = 0;\n }\n\n if (this.proFormaState) {\n this.proFormaState.pageIndex = 0;\n }\n }\n\n private _saveCurrentState(sort: string[], state: PaginatedListState, strKeySortFavorite: string): void {\n sort.push(state.sortDirection, state.sortActive);\n this._localStorageService.write(strKeySortFavorite, sort);\n\n // Update current favorite into the gridsort\n state.updateFavoriteSortFromCurrentSort();\n PaginatedListState.setSortState(this._gridSortComponent, state);\n }\n\n private _saveStateAndSelfNavigate(replaceUrl = false): void {\n this._sessionStorageService.write(InvoiceComponent.strCreditState, this.creditState);\n this._sessionStorageService.write(InvoiceComponent.strInvoiceState, this.invoiceState);\n this._sessionStorageService.write(InvoiceComponent.strProFormaState, this.proFormaState);\n\n if (this._isCreditContext()) {\n this.filterSetToDefaultValueFlag = this.creditState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.creditState.isSortSetToDefaultValues();\n } else if (this._isInvoiceContext()) {\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n } else if (this._isProFormaContext()) {\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n }\n\n this._selfNavigate(replaceUrl);\n }\n\n private _selfNavigate(replaceUrl = false): void {\n if (this._isCreditContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.creditState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isInvoiceContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.invoiceState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isProFormaContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.proFormaState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n }\n }\n\n private _setCustomerUuid(filter: CreditFilter | InvoiceFilter | ProFormaFilter): void {\n let customerUuid = null;\n if (filter.customerUuids && filter.customerUuids.length > 0) {\n customerUuid = filter.customerUuids[0];\n }\n this.customerFilterUuid = customerUuid;\n }\n\n private _synchronizeCreditStatefromInvoiceState(): void {\n // synchronize the credit state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.creditState, null, InvoiceComponent.strCreditState);\n\n this.creditState.creditFilter.customerUuids = this.invoiceState.invoiceFilter.customerUuids;\n this.creditState.creditFilter.publishStatuses = this.invoiceState.invoiceFilter.publishStatuses;\n\n // synchronize period search\n this.creditState.creditFilter.periodSearchPage = this.invoiceState.invoiceFilter.periodSearchPage;\n this.creditState.creditFilter.periodSearchType = this.invoiceState.invoiceFilter.periodSearchType;\n\n if (!this.invoiceState.invoiceFilter.periodSearchType && this.invoiceState.invoiceFilter.periodSearchType !== 0) {\n if (this.creditState.creditFilter.fromDeliveryDate) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromDeliveryDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.creditState.creditFilter.toDeliveryDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromDeliveryDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.creditState.creditFilter.toDeliveryDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromInvoiceDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.creditState.creditFilter.toInvoiceDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromInvoiceDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.creditState.creditFilter.toInvoiceDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n } else {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromCreditDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.creditState.creditFilter.toCreditDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromCreditDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.creditState.creditFilter.toCreditDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n }\n } else {\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n }\n\n this.creditState.creditFilter.fromInvoiceDueDate = null;\n this.creditState.creditFilter.toInvoiceDueDate = null;\n\n // register the synchronized credit state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strCreditState, this.creditState);\n }\n\n private _synchronizeCreditStatefromProFormaState(): void {\n // synchronize the credit state with the loaded pro forma state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.creditState, null, InvoiceComponent.strCreditState);\n\n this.creditState.creditFilter.customerUuids = this.proFormaState.proFormaFilter.customerUuids;\n this.creditState.creditFilter.publishStatuses = this.proFormaState.proFormaFilter.publishStatuses;\n\n // synchronize period search\n this.creditState.creditFilter.periodSearchPage = this.proFormaState.proFormaFilter.periodSearchPage;\n this.creditState.creditFilter.periodSearchType = this.proFormaState.proFormaFilter.periodSearchType;\n\n if (!this.proFormaState.proFormaFilter.periodSearchType && this.proFormaState.proFormaFilter.periodSearchType !== 0) {\n if (this.creditState.creditFilter.fromDeliveryDate) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromDeliveryDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.creditState.creditFilter.toDeliveryDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromDeliveryDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.creditState.creditFilter.toDeliveryDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromInvoiceDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.creditState.creditFilter.toInvoiceDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromInvoiceDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.creditState.creditFilter.toInvoiceDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n } else {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.creditState.creditFilter.fromCreditDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.creditState.creditFilter.toCreditDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.creditState.creditFilter.fromCreditDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.creditState.creditFilter.toCreditDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n }\n } else {\n this.creditState.creditFilter.fromCreditDate = null;\n this.creditState.creditFilter.toCreditDate = null;\n this.creditState.creditFilter.fromDeliveryDate = null;\n this.creditState.creditFilter.toDeliveryDate = null;\n this.creditState.creditFilter.fromInvoiceDate = null;\n this.creditState.creditFilter.toInvoiceDate = null;\n }\n\n this.creditState.creditFilter.fromInvoiceDueDate = null;\n this.creditState.creditFilter.toInvoiceDueDate = null;\n\n // register the synchronized credit state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strCreditState, this.creditState);\n }\n\n private _synchronizeInvoiceStateFromCreditState(): void {\n // synchronize the invoice state with the loaded credit state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, InvoiceComponent.strInvoiceState);\n\n this.invoiceState.invoiceFilter.customerUuids = this.creditState.creditFilter.customerUuids;\n this.invoiceState.invoiceFilter.publishStatuses = this.creditState.creditFilter.publishStatuses;\n\n // synchronize period search\n this.invoiceState.invoiceFilter.periodSearchPage = this.creditState.creditFilter.periodSearchPage;\n this.invoiceState.invoiceFilter.periodSearchType = this.creditState.creditFilter.periodSearchType;\n\n if (!this.creditState.creditFilter.periodSearchType && this.creditState.creditFilter.periodSearchType !== 0) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n if (this.creditState.creditFilter.fromCreditDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.creditState.creditFilter.fromCreditDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.creditState.creditFilter.toCreditDate;\n } else if (this.creditState.creditFilter.fromDeliveryDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.creditState.creditFilter.fromDeliveryDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.creditState.creditFilter.toDeliveryDate;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.creditState.creditFilter.fromInvoiceDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.creditState.creditFilter.toInvoiceDate;\n }\n\n this.invoiceState.invoiceFilter.fromInvoiceDate = null;\n this.invoiceState.invoiceFilter.toInvoiceDate = null;\n } else {\n if (this.creditState.creditFilter.fromCreditDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.creditState.creditFilter.fromCreditDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.creditState.creditFilter.toCreditDate;\n } else if (this.creditState.creditFilter.fromDeliveryDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.creditState.creditFilter.fromDeliveryDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.creditState.creditFilter.toDeliveryDate;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.creditState.creditFilter.fromInvoiceDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.creditState.creditFilter.toInvoiceDate;\n }\n\n this.invoiceState.invoiceFilter.fromDeliveryDate = null;\n this.invoiceState.invoiceFilter.toDeliveryDate = null;\n }\n } else {\n this.invoiceState.invoiceFilter.fromDeliveryDate = null;\n this.invoiceState.invoiceFilter.toDeliveryDate = null;\n this.invoiceState.invoiceFilter.fromInvoiceDate = null;\n this.invoiceState.invoiceFilter.toInvoiceDate = null;\n }\n\n this.invoiceState.invoiceFilter.fromDueDate = null;\n this.invoiceState.invoiceFilter.toDueDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeInvoiceStateFromProFormaState(): void {\n // synchronize the invoice state with the loaded pro forma state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, InvoiceComponent.strInvoiceState);\n\n this.invoiceState.invoiceFilter.customerUuids = this.proFormaState.proFormaFilter.customerUuids;\n this.invoiceState.invoiceFilter.publishStatuses = this.proFormaState.proFormaFilter.publishStatuses;\n\n // synchronize period search\n this.invoiceState.invoiceFilter.periodSearchPage = this.proFormaState.proFormaFilter.periodSearchPage;\n this.invoiceState.invoiceFilter.periodSearchType = this.proFormaState.proFormaFilter.periodSearchType;\n\n if (!this.proFormaState.proFormaFilter.periodSearchType && this.proFormaState.proFormaFilter.periodSearchType !== 0) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.invoiceState.invoiceFilter.fromDeliveryDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.invoiceState.invoiceFilter.toDeliveryDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.invoiceState.invoiceFilter.fromInvoiceDate = null;\n this.invoiceState.invoiceFilter.toInvoiceDate = null;\n } else {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.proFormaState.proFormaFilter.fromDeliveryDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.proFormaState.proFormaFilter.toDeliveryDate;\n } else if (this.proFormaState.proFormaFilter.fromInvoiceDate) {\n this.invoiceState.invoiceFilter.fromInvoiceDate = this.proFormaState.proFormaFilter.fromInvoiceDate;\n this.invoiceState.invoiceFilter.toInvoiceDate = this.proFormaState.proFormaFilter.toInvoiceDate;\n }\n\n this.invoiceState.invoiceFilter.fromDeliveryDate = null;\n this.invoiceState.invoiceFilter.toDeliveryDate = null;\n }\n } else {\n this.invoiceState.invoiceFilter.fromDeliveryDate = null;\n this.invoiceState.invoiceFilter.toDeliveryDate = null;\n this.invoiceState.invoiceFilter.fromInvoiceDate = null;\n this.invoiceState.invoiceFilter.toInvoiceDate = null;\n }\n\n this.invoiceState.invoiceFilter.fromDueDate = null;\n this.invoiceState.invoiceFilter.toDueDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeProFormaStateFromCreditState(): void {\n // synchronize the pro forma state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, InvoiceComponent.strProFormaState);\n\n this.proFormaState.proFormaFilter.customerUuids = this.creditState.creditFilter.customerUuids;\n this.proFormaState.proFormaFilter.publishStatuses = this.creditState.creditFilter.publishStatuses;\n\n // synchronize period search\n this.proFormaState.proFormaFilter.periodSearchPage = this.creditState.creditFilter.periodSearchPage;\n this.proFormaState.proFormaFilter.periodSearchType = this.creditState.creditFilter.periodSearchType;\n\n if (!this.creditState.creditFilter.periodSearchType && this.creditState.creditFilter.periodSearchType !== 0) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n if (this.creditState.creditFilter.fromCreditDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.creditState.creditFilter.fromCreditDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.creditState.creditFilter.toCreditDate;\n } else if (this.creditState.creditFilter.fromDeliveryDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.creditState.creditFilter.fromDeliveryDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.creditState.creditFilter.toDeliveryDate;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.creditState.creditFilter.fromInvoiceDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.creditState.creditFilter.toInvoiceDate;\n }\n\n this.proFormaState.proFormaFilter.fromInvoiceDate = null;\n this.proFormaState.proFormaFilter.toInvoiceDate = null;\n } else {\n if (this.creditState.creditFilter.fromCreditDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.creditState.creditFilter.fromCreditDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.creditState.creditFilter.toCreditDate;\n } else if (this.creditState.creditFilter.fromDeliveryDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.creditState.creditFilter.fromDeliveryDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.creditState.creditFilter.toDeliveryDate;\n } else if (this.creditState.creditFilter.fromInvoiceDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.creditState.creditFilter.fromInvoiceDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.creditState.creditFilter.toInvoiceDate;\n }\n\n this.proFormaState.proFormaFilter.fromDeliveryDate = null;\n this.proFormaState.proFormaFilter.toDeliveryDate = null;\n }\n } else {\n this.proFormaState.proFormaFilter.fromDeliveryDate = null;\n this.proFormaState.proFormaFilter.toDeliveryDate = null;\n this.proFormaState.proFormaFilter.fromInvoiceDate = null;\n this.proFormaState.proFormaFilter.toInvoiceDate = null;\n }\n\n // register the synchronized credit state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeProFormaStateFromInvoiceState(): void {\n // synchronize the pro forma state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, InvoiceComponent.strProFormaState);\n\n this.proFormaState.proFormaFilter.customerUuids = this.invoiceState.invoiceFilter.customerUuids;\n this.proFormaState.proFormaFilter.publishStatuses = this.invoiceState.invoiceFilter.publishStatuses;\n\n // synchronize period search\n this.proFormaState.proFormaFilter.periodSearchPage = this.invoiceState.invoiceFilter.periodSearchPage;\n this.proFormaState.proFormaFilter.periodSearchType = this.invoiceState.invoiceFilter.periodSearchType;\n\n if (!this.invoiceState.invoiceFilter.periodSearchType && this.invoiceState.invoiceFilter.periodSearchType !== 0) {\n if (this.proFormaState.proFormaFilter.fromDeliveryDate) {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.proFormaState.proFormaFilter.fromDeliveryDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.proFormaState.proFormaFilter.toDeliveryDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.proFormaState.proFormaFilter.fromInvoiceDate = null;\n this.proFormaState.proFormaFilter.toInvoiceDate = null;\n } else {\n if (this.invoiceState.invoiceFilter.fromDeliveryDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.invoiceState.invoiceFilter.fromDeliveryDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.invoiceState.invoiceFilter.toDeliveryDate;\n } else if (this.invoiceState.invoiceFilter.fromInvoiceDate) {\n this.proFormaState.proFormaFilter.fromInvoiceDate = this.invoiceState.invoiceFilter.fromInvoiceDate;\n this.proFormaState.proFormaFilter.toInvoiceDate = this.invoiceState.invoiceFilter.toInvoiceDate;\n }\n\n this.proFormaState.proFormaFilter.fromDeliveryDate = null;\n this.proFormaState.proFormaFilter.toDeliveryDate = null;\n }\n } else {\n this.proFormaState.proFormaFilter.fromDeliveryDate = null;\n this.proFormaState.proFormaFilter.toDeliveryDate = null;\n this.proFormaState.proFormaFilter.fromInvoiceDate = null;\n this.proFormaState.proFormaFilter.toInvoiceDate = null;\n }\n\n // register the synchronized credit state to the session storage\n this._sessionStorageService.write(InvoiceComponent.strProFormaState, this.proFormaState);\n }\n\n private _updateAdvancedFilterToggleButtonLabel(): void {\n if (this._isCreditContext()) {\n if (this.creditState && this.creditState.creditFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedCreditFilter(this.advancedFilterPanel);\n }\n } else if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.invoiceFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedInvoiceFilter(this.advancedFilterPanel);\n }\n } else if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.proFormaFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedInvoiceFilter(this.advancedFilterPanel);\n }\n }\n\n this.textButtonAdvancedFilter = this.constTextButtonAdvancedFilter;\n if (this.advancedFilterCounter && this.advancedFilterCounter > 0) {\n this.showEraseAdvancedFilterFlag = true;\n } else {\n this.showEraseAdvancedFilterFlag = false;\n this.advancedFilterCounter = undefined;\n }\n }\n\n private _updateCustomerFilterToggleButtonLabel(): void {\n // Update label of advanced filter button\n if (!this.customerFilterPanel?.customer?.uuid) {\n this.textButtonCustomerFilter = this.constTextButtonCustomerFilter;\n this.showEraseCustomerFilterFlag = false;\n this.customerFilterCounter = undefined;\n } else {\n this.textButtonCustomerFilter = this.customerFilterPanel.customer.name;\n this.showEraseCustomerFilterFlag = true;\n this.customerFilterCounter = 1;\n }\n }\n}\n","import { SpreadsheetExportTypeHelper } from 'app/shared/enum-helpers/spreadsheet-export-type.enum.helper';\nimport { SpreadsheetExportFileType } from 'app/shared/enums/spreadsheet-export-file-type.enum';\nimport { SpreadsheetExportType } from 'app/shared/enums/spreadsheet-export-type.enum';\nimport { AddSpreadsheetExportNotificationViewModelHelper } from 'app/shared/helpers/add-spreadsheet-export-notification.view-model-helper';\nimport { ReadSpreadsheetExportNotificationDetailViewModelHelper } from 'app/shared/helpers/read-spreadsheet-export-notification-detail.view-model-helper';\nimport { ButtonListSpreadsheetExportDialogModel } from '../models/button-list-spreadsheet-export-dialog.model';\nimport { ButtonListSpreadsheetExportDialogModelHelper } from './button-list-spreadsheet-export-dialog-model-helper';\n\nexport class InvoiceUnpaidReminderSpreadsheetExportDialogModelHelper {\n public static build(strFilter: string, sortActive: string, sortDirection: string): ButtonListSpreadsheetExportDialogModel {\n const spreadsheetExport = ButtonListSpreadsheetExportDialogModelHelper.build();\n\n const notificationDetailInvoiceUnpaidReminder = ReadSpreadsheetExportNotificationDetailViewModelHelper.fromParams(\n strFilter,\n sortActive,\n sortDirection,\n SpreadsheetExportFileType.Xlsx,\n SpreadsheetExportType.InvoiceUnpaidReminder\n );\n const notificationDetailInvoiceUnpaidReminderMailing = ReadSpreadsheetExportNotificationDetailViewModelHelper.fromParams(\n strFilter,\n sortActive,\n sortDirection,\n SpreadsheetExportFileType.Xlsx,\n SpreadsheetExportType.InvoiceUnpaidReminderMailing\n );\n\n // Export Invoice unpaid reminder\n spreadsheetExport.buttonListDialog.button1Label = SpreadsheetExportTypeHelper.translateEnum(\n SpreadsheetExportType.InvoiceUnpaidReminder,\n null\n );\n spreadsheetExport.addNotificationViewModels1 = AddSpreadsheetExportNotificationViewModelHelper.fromReadSpreadsheetExportViewModels([\n notificationDetailInvoiceUnpaidReminder,\n ]);\n spreadsheetExport.notifyMessage1 = `Excel - Factures à relancer en cours de génération`;\n\n // Export Invoice unpaid reminder mailing\n spreadsheetExport.buttonListDialog.button2Label = SpreadsheetExportTypeHelper.translateEnum(\n SpreadsheetExportType.InvoiceUnpaidReminderMailing,\n null\n );\n spreadsheetExport.addNotificationViewModels2 = AddSpreadsheetExportNotificationViewModelHelper.fromReadSpreadsheetExportViewModels([\n notificationDetailInvoiceUnpaidReminderMailing,\n ]);\n spreadsheetExport.notifyMessage2 = `Excel - Publipostage des relances en cours de génération`;\n\n // Export All\n spreadsheetExport.buttonListDialog.button4Label = 'Exporter tout';\n spreadsheetExport.buttonListDialog.button4TopSeparatorFlag = true;\n spreadsheetExport.addNotificationViewModels4 = AddSpreadsheetExportNotificationViewModelHelper.fromReadSpreadsheetExportViewModels([\n notificationDetailInvoiceUnpaidReminder,\n notificationDetailInvoiceUnpaidReminderMailing,\n ]);\n spreadsheetExport.notifyMessage4 = `Excel multiples - Relances en cours de génération`;\n\n // Help area\n spreadsheetExport.helpTitle = 'Téléchargez nos modèles de lettres :';\n spreadsheetExport.helpLinkLabel1 = 'Modèle de lettre de relance niveau 1';\n spreadsheetExport.helpLinkLabel2 = 'Modèle de lettre de relance niveau 2';\n spreadsheetExport.helpLinkUrl1 = 'https://prothesis.cloud/downloads/templates/Modele-de-lettre-de-relance-niveau-1.docx';\n spreadsheetExport.helpLinkUrl2 = 'https://prothesis.cloud/downloads/templates/Modele-de-lettre-de-relance-niveau-2.docx';\n\n return spreadsheetExport;\n }\n}\n","export class AdvancedFilterPanelModel {\n public canceledCreditNumber: string;\n public creditCancelledDisplayChoice: number;\n public creditPaidFlagDisplayChoice: number;\n public creditTypeDisplayChoice: number;\n public documentMarkedAsPrintedFlagChoice: number;\n public documentPublishStatusChoice: number;\n public invoiceCancelledDisplayChoice: number;\n public invoiceNumber: string;\n public invoicePaymentDisplayChoice: number;\n public invoiceTypeDisplayChoice: number;\n public number: string;\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchCreditDateType } from 'app/shared/enums/period-search-credit-date-type.enum';\nimport { CreditFilter } from 'app/shared/prothesis-api-filters/credit-filter';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { InvoiceComponent } from '../invoice.component';\n\nexport class CreditState extends PaginatedListState {\n public creditFilter: CreditFilter;\n\n public constructor() {\n super();\n this.defaultSortActive = 'createDate';\n this.defaultSortDirection = 'desc';\n this.resetFilter();\n\n this.initPageSize(InvoiceComponent.strCreditKeyLocalStoragePageSize);\n this.initPageSort(InvoiceComponent.strCreditKeyLocalStorageSort);\n this._initPeriodSearchType(InvoiceComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.creditFilter.periodSearchType || this.creditFilter.periodSearchType === 0) {\n statePeriodSearchType = this.creditFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n if (this.creditFilter.periodSearchDateType || this.creditFilter.periodSearchDateType === 0) {\n const periodSearchDateType = this.creditFilter.periodSearchDateType.valueOf().toString();\n const periodSearchDateTypeDefault = PeriodSearchCreditDateType.CreditDate.valueOf().toString();\n if (periodSearchDateType !== periodSearchDateTypeDefault) {\n defaultValueFlag = false;\n }\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.creditFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n this.creditFilter.canceledFlag === false &&\n !(this.creditFilter.creditFreeLineExistenceFlag === true || this.creditFilter.creditFreeLineExistenceFlag === false) &&\n (!this.creditFilter.customerUuids || this.creditFilter.customerUuids.length === 0) &&\n !this.creditFilter.fromCreateDate &&\n !this.creditFilter.fromCreditDate &&\n !this.creditFilter.fromDeliveryDate &&\n !this.creditFilter.fromInvoiceDate &&\n !this.creditFilter.fromInvoiceDueDate &&\n !this.creditFilter.fromUpdateDate &&\n !this.creditFilter.invoiceNumber &&\n !(this.creditFilter.markedAsPrintedFlag === true || this.creditFilter.markedAsPrintedFlag === false) &&\n !(this.creditFilter.paidFlag === true || this.creditFilter.paidFlag === false) &&\n this.creditFilter.periodSearchPage === 0 &&\n !this.creditFilter.publishStatuses &&\n !this.creditFilter.textFilter &&\n !this.creditFilter.toCreateDate &&\n !this.creditFilter.toCreditDate &&\n !this.creditFilter.toDeliveryDate &&\n !this.creditFilter.toInvoiceDate &&\n !this.creditFilter.toInvoiceDueDate &&\n !this.creditFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.creditFilter = new CreditFilter();\n this.creditFilter.periodSearchPage = 0;\n this.creditFilter.periodSearchType = PeriodSearchType.FiscalYear;\n this.creditFilter.periodSearchDateType = PeriodSearchCreditDateType.CreditDate;\n this.creditFilter.canceledFlag = false;\n this.creditFilter.textFilter = '';\n this.creditFilter.textFilterFields = ['amount', 'amountTaxesIncluded', 'customer', 'invoiceNumber', 'number'];\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.creditFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchInvoiceDateType } from 'app/shared/enums/period-search-invoice-date-type.enum';\nimport { InvoiceFilter } from 'app/shared/prothesis-api-filters/invoice-filter';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { InvoiceComponent } from '../invoice.component';\n\nexport class InvoiceState extends PaginatedListState {\n public invoiceFilter: InvoiceFilter;\n\n public constructor() {\n super();\n this.defaultSortActive = 'createDate';\n this.defaultSortDirection = 'desc';\n this.resetFilter();\n\n this.initPageSize(InvoiceComponent.strInvoiceKeyLocalStoragePageSize);\n this.initPageSort(InvoiceComponent.strInvoiceKeyLocalStorageSort);\n this._initPeriodSearchType(InvoiceComponent.strPeriodSearchTypeFavorite);\n }\n\n public _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.invoiceFilter.periodSearchType = Number(periodSearchType);\n }\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.invoiceFilter.periodSearchType || this.invoiceFilter.periodSearchType === 0) {\n statePeriodSearchType = this.invoiceFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n if (this.invoiceFilter.periodSearchDateType || this.invoiceFilter.periodSearchDateType === 0) {\n const periodSearchDateType = this.invoiceFilter.periodSearchDateType.valueOf().toString();\n const periodSearchDateTypeDefault = PeriodSearchInvoiceDateType.InvoiceDate.valueOf().toString();\n if (periodSearchDateType !== periodSearchDateTypeDefault) {\n defaultValueFlag = false;\n }\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.invoiceFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n !this.invoiceFilter.canceledCreditNumber &&\n this.invoiceFilter.canceledFlag === false &&\n (!this.invoiceFilter.customerUuids || this.invoiceFilter.customerUuids.length === 0) &&\n !this.invoiceFilter.fromCreateDate &&\n !this.invoiceFilter.fromDeliveryDate &&\n !this.invoiceFilter.fromDueDate &&\n !this.invoiceFilter.fromInvoiceDate &&\n !this.invoiceFilter.fromUpdateDate &&\n !(this.invoiceFilter.invoiceFreeLineExistenceFlag === true || this.invoiceFilter.invoiceFreeLineExistenceFlag === false) &&\n !(this.invoiceFilter.markedAsPrintedFlag === true || this.invoiceFilter.markedAsPrintedFlag === false) &&\n !(this.invoiceFilter.paidFlag === true || this.invoiceFilter.paidFlag === false) &&\n this.invoiceFilter.periodSearchPage === 0 &&\n !this.invoiceFilter.publishStatuses &&\n !this.invoiceFilter.textFilter &&\n !this.invoiceFilter.toCreateDate &&\n !this.invoiceFilter.toDeliveryDate &&\n !this.invoiceFilter.toDueDate &&\n !this.invoiceFilter.toInvoiceDate &&\n !this.invoiceFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.invoiceFilter = new InvoiceFilter();\n this.invoiceFilter.periodSearchPage = 0;\n this.invoiceFilter.periodSearchType = PeriodSearchType.FiscalYear;\n this.invoiceFilter.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate;\n this.invoiceFilter.canceledFlag = false;\n this.invoiceFilter.textFilter = '';\n this.invoiceFilter.textFilterFields = ['amount', 'amountTaxesIncluded', 'customer', 'number'];\n\n this.resetSort();\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchInvoiceDateType } from 'app/shared/enums/period-search-invoice-date-type.enum';\nimport { ProFormaFilter } from 'app/shared/prothesis-api-filters/pro-forma-filter';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { InvoiceComponent } from '../invoice.component';\n\nexport class ProFormaState extends PaginatedListState {\n public proFormaFilter: ProFormaFilter;\n\n public constructor() {\n super();\n this.defaultSortActive = 'createDate';\n this.defaultSortDirection = 'desc';\n this.resetFilter();\n\n this.initPageSize(InvoiceComponent.strProFormaKeyLocalStoragePageSize);\n this.initPageSort(InvoiceComponent.strProFormaKeyLocalStorageSort);\n this._initPeriodSearchType(InvoiceComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.proFormaFilter.periodSearchType || this.proFormaFilter.periodSearchType === 0) {\n statePeriodSearchType = this.proFormaFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n if (this.proFormaFilter.periodSearchDateType || this.proFormaFilter.periodSearchDateType === 0) {\n const periodSearchDateType = this.proFormaFilter.periodSearchDateType.valueOf().toString();\n const periodSearchDateTypeDefault = PeriodSearchInvoiceDateType.InvoiceDate.valueOf().toString();\n if (periodSearchDateType !== periodSearchDateTypeDefault) {\n defaultValueFlag = false;\n }\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.proFormaFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.proFormaFilter.customerUuids || this.proFormaFilter.customerUuids.length === 0) &&\n !(this.proFormaFilter.frozenFlag === true || this.proFormaFilter.frozenFlag === false) &&\n !this.proFormaFilter.fromCreateDate &&\n !this.proFormaFilter.fromDeliveryDate &&\n !this.proFormaFilter.fromInvoiceDate &&\n !this.proFormaFilter.fromUpdateDate &&\n !(this.proFormaFilter.markedAsPrintedFlag === true || this.proFormaFilter.markedAsPrintedFlag === false) &&\n this.proFormaFilter.periodSearchPage === 0 &&\n !this.proFormaFilter.publishStatuses &&\n !this.proFormaFilter.textFilter &&\n !this.proFormaFilter.toCreateDate &&\n !this.proFormaFilter.toDeliveryDate &&\n !this.proFormaFilter.toInvoiceDate &&\n !this.proFormaFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.proFormaFilter = new ProFormaFilter();\n this.proFormaFilter.periodSearchPage = 0;\n this.proFormaFilter.periodSearchType = PeriodSearchType.FiscalYear;\n this.proFormaFilter.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate;\n this.proFormaFilter.textFilter = '';\n this.proFormaFilter.textFilterFields = ['amount', 'amountTaxesIncluded', 'customer'];\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.proFormaFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { FormTimeModelHelper } from 'app/shared/components/form-time/model-helpers/form-time-model-helper';\nimport { DocumentType } from 'app/shared/enums/document-type.enum';\nimport { Moment } from 'moment-timezone';\nimport { FormDocumentSelectionModel } from '../models/form-document-selection-model';\n\nexport class FormDocumentSelectionModelHelper {\n public static build(\n documentTypeForSelection: DocumentType,\n deliveryDate: Moment,\n defaultDeliveryRoute: string,\n shouldInitFlag: boolean\n ): FormDocumentSelectionModel {\n const today = TimeZoneService.createMomentInLaboratoryTimeZone();\n const formDocumentSelection = new FormDocumentSelectionModel();\n formDocumentSelection.documentType = documentTypeForSelection;\n formDocumentSelection.deliveryDate = deliveryDate ? deliveryDate : today;\n formDocumentSelection.deliveryRoute = FormTimeModelHelper.build(defaultDeliveryRoute);\n formDocumentSelection.quoteDate = today;\n formDocumentSelection.quoteDeliveryDate = null;\n formDocumentSelection.expirationDate = today.clone().add(30, 'days');\n formDocumentSelection.shouldInitFlag = shouldInitFlag;\n\n return formDocumentSelection;\n }\n\n public static buildForFittingFormTransform(defaultDeliveryRoute: string): FormDocumentSelectionModel {\n const formDocumentSelection = this.build(DocumentType.WorkForm, null, defaultDeliveryRoute, false);\n\n formDocumentSelection.forbiddenDocumentTypes = [DocumentType.Quote];\n return formDocumentSelection;\n }\n\n public static buildForQuoteTransform(defaultDeliveryRoute: string): FormDocumentSelectionModel {\n const formDocumentSelection = this.build(DocumentType.WorkForm, null, defaultDeliveryRoute, false);\n formDocumentSelection.forbiddenDocumentTypes = [DocumentType.Quote];\n return formDocumentSelection;\n }\n\n public static buildForWorkFormTransform(defaultDeliveryRoute: string, fittingFlag: boolean): FormDocumentSelectionModel {\n let documentType = DocumentType.DeliveryForm;\n if (fittingFlag) {\n documentType = DocumentType.FittingForm;\n }\n const formDocumentSelection = this.build(documentType, null, defaultDeliveryRoute, false);\n formDocumentSelection.forbiddenDocumentTypes = [DocumentType.Quote];\n return formDocumentSelection;\n }\n}\n","export class AdvancedFilterPanelModel {\n public description: string;\n public documentMarkedAsPrintedFlagChoice: number;\n public documentPublishStatusChoice: number;\n public fittingFlagChoice: number;\n public invoiceCancelledDisplayChoice: number;\n public invoicedFlag: boolean | null;\n public invoiceNumber: string;\n public laboratoryTaskNumber: string;\n public number: string;\n public patientCode: string;\n public patientNumber: string;\n public patientUnspecifiedFlag: boolean | null;\n public prescriptionNumber: string;\n public productionFlowNumber: string;\n public productionFlowUuid: string | null;\n public proFormaFlag: boolean | null;\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { FormTimeModel } from 'app/shared/components/form-time/models/form-time-model';\nimport { DocumentType } from 'app/shared/enums/document-type.enum';\nimport { Moment } from 'moment-timezone';\n\nexport class FormDocumentSelectionModel {\n public deliveryDate: Moment;\n public deliveryRoute: FormTimeModel;\n public documentType: DocumentType;\n public expirationDate: Moment;\n public fittingFlag: boolean;\n public forbiddenDocumentTypes: DocumentType[];\n public quoteDate: Moment;\n public quoteDeliveryDate: Moment;\n public shouldInitFlag: boolean;\n public transformationType: ComboModel;\n}\n","import { PublishStatus } from 'app/shared/enums/publish-status.enum';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-api-filters/delivery-form-filter';\nimport { DocumentFilter } from 'app/shared/prothesis-api-filters/document-filter';\nimport { FittingFormFilter } from 'app/shared/prothesis-api-filters/fitting-form-filter';\nimport { PublishedDocumentFilter } from 'app/shared/prothesis-api-filters/published-document-filter';\nimport { QuoteFilter } from 'app/shared/prothesis-api-filters/quote-filter';\nimport { WorkFormFilter } from 'app/shared/prothesis-api-filters/work-form-filter';\nimport { AdvancedFilterPanelModel } from '../models/advanced-filter-panel-model';\n\nexport class AdvancedFilterPanelModelHelper {\n public static countValuesOfAdvancedFilterPanel(advancedFilter: AdvancedFilterPanelModel): number {\n let counter = 0;\n\n if (advancedFilter.documentMarkedAsPrintedFlagChoice !== 1) {\n counter++;\n }\n\n if (advancedFilter.documentPublishStatusChoice !== 1) {\n counter++;\n }\n\n counter = advancedFilter.description ? counter + 1 : counter;\n counter = advancedFilter.laboratoryTaskNumber ? counter + 1 : counter;\n counter = advancedFilter.number ? counter + 1 : counter;\n if (!advancedFilter.patientUnspecifiedFlag) {\n counter = advancedFilter.patientCode ? counter + 1 : counter;\n counter = advancedFilter.patientNumber ? counter + 1 : counter;\n }\n counter = advancedFilter.patientUnspecifiedFlag ? counter + 1 : counter;\n counter = advancedFilter.prescriptionNumber ? counter + 1 : counter;\n counter = advancedFilter.productionFlowNumber ? counter + 1 : counter;\n\n return counter;\n }\n\n public static countValuesOfAdvancedFilterPanelForInvoicedDeliveryForms(advancedFilter: AdvancedFilterPanelModel): number {\n let counter = this.countValuesOfAdvancedFilterPanel(advancedFilter);\n\n if (advancedFilter.invoiceCancelledDisplayChoice !== 3) {\n counter++;\n }\n\n counter = advancedFilter.invoiceNumber ? counter + 1 : counter;\n\n return counter;\n }\n\n public static countValuesOfAdvancedFilterPanelForWorkForms(advancedFilter: AdvancedFilterPanelModel): number {\n let counter = this.countValuesOfAdvancedFilterPanel(advancedFilter);\n counter = advancedFilter.fittingFlagChoice !== 1 ? counter + 1 : counter;\n\n return counter;\n }\n\n public static fromDeliveryFormFilter(filter: DeliveryFormFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n if (filter) {\n // Determines document marked as printed flag\n if (!filter.markedAsPrintedFlag) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 1;\n }\n if (filter.markedAsPrintedFlag === true) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 2;\n }\n if (filter.markedAsPrintedFlag === false) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 3;\n }\n\n // Determines document Publish Status\n if (!filter.publishStatuses || filter.publishStatuses.length === 0) {\n advancedFilterPanel.documentPublishStatusChoice = 1;\n }\n if (filter.publishStatuses && filter.publishStatuses.indexOf(PublishStatus.Published) !== -1) {\n advancedFilterPanel.documentPublishStatusChoice = 2;\n }\n if (\n filter.publishStatuses &&\n filter.publishStatuses.indexOf(PublishStatus.NotPublished) !== -1 &&\n filter.publishStatuses.indexOf(PublishStatus.UnPublished) !== -1\n ) {\n advancedFilterPanel.documentPublishStatusChoice = 3;\n }\n\n // Determines invoice cancelled display\n if (!filter.canceledFlag) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 1;\n }\n if (filter.canceledFlag === true) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 2;\n }\n if (filter.canceledFlag === false) {\n advancedFilterPanel.invoiceCancelledDisplayChoice = 3;\n }\n\n advancedFilterPanel.description = filter.description;\n advancedFilterPanel.invoicedFlag = filter.invoicedFlag;\n advancedFilterPanel.invoiceNumber = filter.invoiceNumber;\n advancedFilterPanel.laboratoryTaskNumber = filter.laboratoryTaskNumber;\n advancedFilterPanel.number = filter.number;\n advancedFilterPanel.patientCode = filter.patientCode;\n advancedFilterPanel.patientNumber = filter.patientNumber;\n advancedFilterPanel.patientUnspecifiedFlag = filter.patientUnspecifiedFlag;\n advancedFilterPanel.prescriptionNumber = filter.prescriptionNumber;\n advancedFilterPanel.productionFlowNumber = filter.productionFlowNumber;\n advancedFilterPanel.productionFlowUuid = filter.productionFlowUuid;\n advancedFilterPanel.proFormaFlag = filter.proFormaFlag;\n }\n return advancedFilterPanel;\n }\n\n public static fromFittingFormFilter(filter: FittingFormFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n if (filter) {\n // Determines document marked as printed flag\n if (!filter.markedAsPrintedFlag) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 1;\n }\n if (filter.markedAsPrintedFlag === true) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 2;\n }\n if (filter.markedAsPrintedFlag === false) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 3;\n }\n\n // Determines document Publish Status\n if (!filter.publishStatuses || filter.publishStatuses.length === 0) {\n advancedFilterPanel.documentPublishStatusChoice = 1;\n }\n if (filter.publishStatuses && filter.publishStatuses.indexOf(PublishStatus.Published) !== -1) {\n advancedFilterPanel.documentPublishStatusChoice = 2;\n }\n if (\n filter.publishStatuses &&\n filter.publishStatuses.indexOf(PublishStatus.NotPublished) !== -1 &&\n filter.publishStatuses.indexOf(PublishStatus.UnPublished) !== -1\n ) {\n advancedFilterPanel.documentPublishStatusChoice = 3;\n }\n\n advancedFilterPanel.description = filter.description;\n advancedFilterPanel.laboratoryTaskNumber = filter.laboratoryTaskNumber;\n advancedFilterPanel.number = filter.number;\n advancedFilterPanel.patientCode = filter.patientCode;\n advancedFilterPanel.patientNumber = filter.patientNumber;\n advancedFilterPanel.patientUnspecifiedFlag = filter.patientUnspecifiedFlag;\n advancedFilterPanel.prescriptionNumber = filter.prescriptionNumber;\n advancedFilterPanel.productionFlowNumber = filter.productionFlowNumber;\n advancedFilterPanel.productionFlowUuid = filter.productionFlowUuid;\n }\n return advancedFilterPanel;\n }\n\n public static fromQuoteFilter(filter: QuoteFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n if (filter) {\n // Determines document marked as printed flag\n if (!filter.markedAsPrintedFlag) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 1;\n }\n if (filter.markedAsPrintedFlag === true) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 2;\n }\n if (filter.markedAsPrintedFlag === false) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 3;\n }\n\n // Determines document Publish Status\n if (!filter.publishStatuses || filter.publishStatuses.length === 0) {\n advancedFilterPanel.documentPublishStatusChoice = 1;\n }\n if (filter.publishStatuses && filter.publishStatuses.indexOf(PublishStatus.Published) !== -1) {\n advancedFilterPanel.documentPublishStatusChoice = 2;\n }\n if (\n filter.publishStatuses &&\n filter.publishStatuses.indexOf(PublishStatus.NotPublished) !== -1 &&\n filter.publishStatuses.indexOf(PublishStatus.UnPublished) !== -1\n ) {\n advancedFilterPanel.documentPublishStatusChoice = 3;\n }\n\n advancedFilterPanel.description = filter.description;\n advancedFilterPanel.laboratoryTaskNumber = filter.laboratoryTaskNumber;\n advancedFilterPanel.number = filter.number;\n advancedFilterPanel.patientCode = filter.patientCode;\n advancedFilterPanel.patientNumber = filter.patientNumber;\n advancedFilterPanel.patientUnspecifiedFlag = filter.patientUnspecifiedFlag;\n advancedFilterPanel.prescriptionNumber = filter.prescriptionNumber;\n advancedFilterPanel.productionFlowNumber = filter.productionFlowNumber;\n advancedFilterPanel.productionFlowUuid = filter.productionFlowUuid;\n }\n return advancedFilterPanel;\n }\n\n public static fromWorkFormFilter(filter: WorkFormFilter): AdvancedFilterPanelModel {\n const advancedFilterPanel = this.resetValues(new AdvancedFilterPanelModel());\n if (filter) {\n // Determines document marked as printed flag\n if (!filter.markedAsPrintedFlag) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 1;\n }\n if (filter.markedAsPrintedFlag === true) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 2;\n }\n if (filter.markedAsPrintedFlag === false) {\n advancedFilterPanel.documentMarkedAsPrintedFlagChoice = 3;\n }\n\n // Determines document fitting flag choice\n if (!filter.fittingFlag) {\n advancedFilterPanel.fittingFlagChoice = 1;\n }\n if (filter.fittingFlag === true) {\n advancedFilterPanel.fittingFlagChoice = 2;\n }\n if (filter.fittingFlag === false) {\n advancedFilterPanel.fittingFlagChoice = 3;\n }\n\n advancedFilterPanel.description = filter.description;\n advancedFilterPanel.laboratoryTaskNumber = filter.laboratoryTaskNumber;\n advancedFilterPanel.number = filter.number;\n advancedFilterPanel.patientCode = filter.patientCode;\n advancedFilterPanel.patientNumber = filter.patientNumber;\n advancedFilterPanel.patientUnspecifiedFlag = filter.patientUnspecifiedFlag;\n advancedFilterPanel.prescriptionNumber = filter.prescriptionNumber;\n advancedFilterPanel.productionFlowNumber = filter.productionFlowNumber;\n advancedFilterPanel.productionFlowUuid = filter.productionFlowUuid;\n }\n return advancedFilterPanel;\n }\n\n public static resetValues(advancedFilter: AdvancedFilterPanelModel): AdvancedFilterPanelModel {\n advancedFilter.description = '';\n advancedFilter.documentMarkedAsPrintedFlagChoice = 1;\n advancedFilter.documentPublishStatusChoice = 1;\n advancedFilter.fittingFlagChoice = 1;\n advancedFilter.invoiceCancelledDisplayChoice = 3;\n advancedFilter.invoiceNumber = '';\n advancedFilter.laboratoryTaskNumber = '';\n advancedFilter.number = '';\n advancedFilter.patientCode = '';\n advancedFilter.patientNumber = '';\n advancedFilter.patientUnspecifiedFlag = false;\n advancedFilter.prescriptionNumber = '';\n advancedFilter.productionFlowNumber = '';\n advancedFilter.productionFlowUuid = null;\n\n return advancedFilter;\n }\n\n public static synchronizeDocumentFilter(\n documentFilterSynchronized: DocumentFilter,\n documentFilterOrigin: DocumentFilter\n ): DocumentFilter {\n documentFilterSynchronized.description = documentFilterOrigin.description;\n documentFilterSynchronized.fromDeliveryDate = documentFilterOrigin.fromDeliveryDate;\n documentFilterSynchronized.laboratoryTaskNumber = documentFilterOrigin.laboratoryTaskNumber;\n documentFilterSynchronized.number = documentFilterOrigin.number;\n documentFilterSynchronized.patientCode = documentFilterOrigin.patientCode;\n documentFilterSynchronized.patientNumber = documentFilterOrigin.patientNumber;\n documentFilterSynchronized.patientUnspecifiedFlag = documentFilterOrigin.patientUnspecifiedFlag;\n documentFilterSynchronized.prescriptionNumber = documentFilterOrigin.prescriptionNumber;\n documentFilterSynchronized.productionFlowNumber = documentFilterOrigin.productionFlowNumber;\n documentFilterSynchronized.productionFlowUuid = documentFilterOrigin.productionFlowUuid;\n documentFilterSynchronized.toDeliveryDate = documentFilterOrigin.toDeliveryDate;\n\n return documentFilterSynchronized;\n }\n\n public static synchronizePublishedDocumentFilter(\n documentFilterSynchronized: PublishedDocumentFilter,\n documentFilterOrigin: PublishedDocumentFilter\n ): PublishedDocumentFilter {\n this.synchronizeDocumentFilter(documentFilterSynchronized, documentFilterOrigin);\n documentFilterSynchronized.publishStatuses = documentFilterOrigin.publishStatuses;\n\n return documentFilterSynchronized;\n }\n\n public static toDeliveryFormFilter(advancedFilterPanel: AdvancedFilterPanelModel, filter: DeliveryFormFilter): DeliveryFormFilter {\n // Display Marked As Printed Flag\n if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 1) {\n filter.markedAsPrintedFlag = undefined;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 2) {\n filter.markedAsPrintedFlag = true;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 3) {\n filter.markedAsPrintedFlag = false;\n }\n\n // Display Publish Status\n if (advancedFilterPanel.documentPublishStatusChoice === 1) {\n filter.publishStatuses = undefined;\n } else if (advancedFilterPanel.documentPublishStatusChoice === 2) {\n filter.publishStatuses = [PublishStatus.Published];\n } else if (advancedFilterPanel.documentPublishStatusChoice === 3) {\n filter.publishStatuses = [PublishStatus.NotPublished, PublishStatus.UnPublished];\n }\n\n filter.invoicedFlag = advancedFilterPanel.invoicedFlag;\n if (advancedFilterPanel.invoicedFlag) {\n // Display canceled invoices\n if (advancedFilterPanel.invoiceCancelledDisplayChoice === 1) {\n filter.canceledFlag = undefined;\n } else if (advancedFilterPanel.invoiceCancelledDisplayChoice === 2) {\n filter.canceledFlag = true;\n } else if (advancedFilterPanel.invoiceCancelledDisplayChoice === 3) {\n filter.canceledFlag = false;\n }\n }\n\n filter.description = advancedFilterPanel.description;\n filter.laboratoryTaskNumber = advancedFilterPanel.laboratoryTaskNumber;\n filter.invoiceNumber = advancedFilterPanel.invoiceNumber;\n filter.number = advancedFilterPanel.number;\n filter.patientCode = advancedFilterPanel.patientCode;\n filter.patientNumber = advancedFilterPanel.patientNumber;\n filter.patientUnspecifiedFlag = advancedFilterPanel.patientUnspecifiedFlag;\n filter.prescriptionNumber = advancedFilterPanel.prescriptionNumber;\n filter.productionFlowNumber = advancedFilterPanel.productionFlowNumber;\n filter.productionFlowUuid = advancedFilterPanel.productionFlowUuid;\n filter.proFormaFlag = advancedFilterPanel.proFormaFlag;\n\n return filter;\n }\n\n public static toFittingFormFilter(advancedFilterPanel: AdvancedFilterPanelModel, filter: FittingFormFilter): FittingFormFilter {\n // Display Marked As Printed Flag\n if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 1) {\n filter.markedAsPrintedFlag = undefined;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 2) {\n filter.markedAsPrintedFlag = true;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 3) {\n filter.markedAsPrintedFlag = false;\n }\n\n // Display Publish Status\n if (advancedFilterPanel.documentPublishStatusChoice === 1) {\n filter.publishStatuses = undefined;\n } else if (advancedFilterPanel.documentPublishStatusChoice === 2) {\n filter.publishStatuses = [PublishStatus.Published];\n } else if (advancedFilterPanel.documentPublishStatusChoice === 3) {\n filter.publishStatuses = [PublishStatus.NotPublished, PublishStatus.UnPublished];\n }\n\n filter.description = advancedFilterPanel.description;\n filter.laboratoryTaskNumber = advancedFilterPanel.laboratoryTaskNumber;\n filter.number = advancedFilterPanel.number;\n filter.patientCode = advancedFilterPanel.patientCode;\n filter.patientNumber = advancedFilterPanel.patientNumber;\n filter.patientUnspecifiedFlag = advancedFilterPanel.patientUnspecifiedFlag;\n filter.prescriptionNumber = advancedFilterPanel.prescriptionNumber;\n filter.productionFlowNumber = advancedFilterPanel.productionFlowNumber;\n filter.productionFlowUuid = advancedFilterPanel.productionFlowUuid;\n\n return filter;\n }\n\n public static toQuoteFilter(advancedFilterPanel: AdvancedFilterPanelModel, filter: QuoteFilter): QuoteFilter {\n // Display Marked As Printed Flag\n if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 1) {\n filter.markedAsPrintedFlag = undefined;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 2) {\n filter.markedAsPrintedFlag = true;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 3) {\n filter.markedAsPrintedFlag = false;\n }\n\n // Display Publish Status\n if (advancedFilterPanel.documentPublishStatusChoice === 1) {\n filter.publishStatuses = undefined;\n } else if (advancedFilterPanel.documentPublishStatusChoice === 2) {\n filter.publishStatuses = [PublishStatus.Published];\n } else if (advancedFilterPanel.documentPublishStatusChoice === 3) {\n filter.publishStatuses = [PublishStatus.NotPublished, PublishStatus.UnPublished];\n }\n\n filter.description = advancedFilterPanel.description;\n filter.laboratoryTaskNumber = advancedFilterPanel.laboratoryTaskNumber;\n filter.number = advancedFilterPanel.number;\n filter.patientCode = advancedFilterPanel.patientCode;\n filter.patientNumber = advancedFilterPanel.patientNumber;\n filter.patientUnspecifiedFlag = advancedFilterPanel.patientUnspecifiedFlag;\n filter.prescriptionNumber = advancedFilterPanel.prescriptionNumber;\n filter.productionFlowNumber = advancedFilterPanel.productionFlowNumber;\n filter.productionFlowUuid = advancedFilterPanel.productionFlowUuid;\n\n return filter;\n }\n\n public static toWorkFormFilter(advancedFilterPanel: AdvancedFilterPanelModel, filter: WorkFormFilter): WorkFormFilter {\n // Display Marked As Printed Flag\n if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 1) {\n filter.markedAsPrintedFlag = undefined;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 2) {\n filter.markedAsPrintedFlag = true;\n } else if (advancedFilterPanel.documentMarkedAsPrintedFlagChoice === 3) {\n filter.markedAsPrintedFlag = false;\n }\n\n // Display FittingFlag\n if (advancedFilterPanel.fittingFlagChoice === 1) {\n filter.fittingFlag = undefined;\n } else if (advancedFilterPanel.fittingFlagChoice === 2) {\n filter.fittingFlag = true;\n } else if (advancedFilterPanel.fittingFlagChoice === 3) {\n filter.fittingFlag = false;\n }\n\n filter.description = advancedFilterPanel.description;\n filter.laboratoryTaskNumber = advancedFilterPanel.laboratoryTaskNumber;\n filter.number = advancedFilterPanel.number;\n filter.patientCode = advancedFilterPanel.patientCode;\n filter.patientNumber = advancedFilterPanel.patientNumber;\n filter.patientUnspecifiedFlag = advancedFilterPanel.patientUnspecifiedFlag;\n filter.prescriptionNumber = advancedFilterPanel.prescriptionNumber;\n filter.productionFlowNumber = advancedFilterPanel.productionFlowNumber;\n filter.productionFlowUuid = advancedFilterPanel.productionFlowUuid;\n\n return filter;\n }\n}\n","
\n \n \n
\n
\n
\n \n \n \n
\n
\n \n \n \n 0 ? 'active-filter' : 'no-filter'\">\n {{ textButtonCustomerFilter }}\n {{ textButtonCustomerFilterShowCustomerMembers }} \n \n \n\n \n clear\n \n\n \n 0 ? 'active-filter' : 'no-filter'\">\n {{ textButtonLaboratoryResourceFilter }}\n \n \n\n \n clear\n \n\n \n 0 ? 'active-filter' : 'no-filter'\">\n {{ textButtonAdvancedFilter }}\n \n \n\n \n clear\n \n \n
\n
\n
\n\n \n \n \n \n
\n
\n
\n \n \n \n highlight_off\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, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MatButtonToggle, MatButtonToggleChange, MatButtonToggleGroup } from '@angular/material/button-toggle';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { fuseAnimations } from '@fuse/animations';\nimport { CorpTitleService } from 'app/core/services/corp-title.service';\nimport { FocusService } from 'app/core/services/focus.service';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { LocalStorageService } from 'app/core/services/local-storage.service';\nimport { NotifyService } from 'app/core/services/notify/notify.service';\nimport { PeriodSearchService } from 'app/core/services/period-search.service';\nimport { PreselectionService } from 'app/core/services/preselection.service';\nimport { CustomerService } from 'app/core/services/prothesis-api/customer.service';\nimport { LaboratoryResourceService } from 'app/core/services/prothesis-api/laboratory-resource.service';\nimport { ProductionFlowService } from 'app/core/services/prothesis-api/production-flow.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { SessionStorageService } from 'app/core/services/session-storage.service';\nimport { SectorOrSpecialtyModelHelper } from 'app/shared/common-models/model-helpers/sector-or-specialty-model.helper';\nimport { RouterLinkModel } from 'app/shared/common-models/models/routerLink.model';\nimport { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { CustomerFilterPanelComponent } from 'app/shared/components/filter-panels/customer-filter-panel/customer-filter-panel.component';\nimport { CustomerFilterPanelModel } from 'app/shared/components/filter-panels/customer-filter-panel/models/customer-filter-panel.model';\nimport { LaboratoryResourceFilterPanelComponent } from 'app/shared/components/filter-panels/laboratory-resource-filter-panel/laboratory-resource-filter-panel.component';\nimport { LaboratoryResourceFilterPanelModel } from 'app/shared/components/filter-panels/laboratory-resource-filter-panel/models/laboratory-resource-filter-panel.model';\nimport { FormTimeModelHelper } from 'app/shared/components/form-time/model-helpers/form-time-model-helper';\nimport { GridFilterModel } from 'app/shared/components/grid-filter/grid-filter-model';\nimport { GridFilterComponent } from 'app/shared/components/grid-filter/grid-filter.component';\nimport { GridSortComponent } from 'app/shared/components/grid-sort/grid-sort.component';\nimport { GridSortModel } from 'app/shared/components/grid-sort/grid-sort.model';\nimport { LaboratoryAreaPeriodSearchModelHelper } from 'app/shared/components/period-search/model-helpers/laboratory-area-period-search-model-helper';\nimport { PeriodSearchInfoModel } from 'app/shared/components/period-search/models/period-search-info-model';\nimport { PeriodSearchModel } from 'app/shared/components/period-search/models/period-search-model';\nimport { CustomerModel } from 'app/shared/components/pickers/customer-picker/models/customer.model';\nimport { LaboratoryResourceModel } from 'app/shared/components/pickers/laboratory-resource-picker/models/laboratory-resource-model';\nimport { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { DocumentStatusHelper } from 'app/shared/enum-helpers/document-status.enum.helper';\nimport { PeriodSearchDeliveryFormDateTypeHelper } from 'app/shared/enum-helpers/period-search-delivery-form-date-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { DocumentStatus } from 'app/shared/enums/document-status.enum';\nimport { DocumentType } from 'app/shared/enums/document-type.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { SortHelper } from 'app/shared/helpers/sort-helper';\nimport { DocumentFilter } from 'app/shared/prothesis-api-filters/document-filter';\nimport { ExtendOptionSectorViewModel } from 'app/shared/prothesis-api-view-models/extend-option-sector.view-model';\nimport { OptionDeliveryRouteViewModel } from 'app/shared/prothesis-api-view-models/option-delivery-route.view-model';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AdvancedFilterPanelModelHelper } from './model-helpers/advanced-filter-panel-model.helper';\nimport { FormDocumentSelectionModelHelper } from './model-helpers/form-document-selection-model-helper';\nimport { AdvancedFilterPanelModel } from './models/advanced-filter-panel-model';\nimport { FormDocumentSelectionModel } from './models/form-document-selection-model';\nimport { AdvancedFilterComponent } from './production-flow/advanced-filter/advanced-filter.component';\nimport { DeliveryFormState } from './states/delivery-form-state';\nimport { FittingFormState } from './states/fitting-form-state';\nimport { InvoiceState } from './states/invoice-state';\nimport { ProFormaState } from './states/pro-forma-state';\nimport { QuoteState } from './states/quote-state';\nimport { WorkFormState } from './states/work-form-state';\n\n@Component({\n animations: fuseAnimations,\n selector: 'app-production-flow',\n styleUrls: ['./production-flow.component.scss'],\n templateUrl: './production-flow.component.html',\n})\nexport class ProductionFlowComponent implements OnDestroy, OnInit {\n @ViewChild('_advancedFilterComponent', { static: true }) private _advancedFilterComponent: AdvancedFilterComponent;\n @ViewChild('_customerFilterPanelComponent', { static: true }) private _customerFilterPanelComponent: CustomerFilterPanelComponent;\n @ViewChild('_gridFilterComponent', { static: true }) private _gridFilterComponent: GridFilterComponent;\n @ViewChild('_gridSortComponent', { static: true }) private _gridSortComponent: GridSortComponent;\n @ViewChild('_laboratoryResourceFilterPanelComponent', { static: true })\n private _laboratoryResourceFilterPanelComponent: LaboratoryResourceFilterPanelComponent;\n @ViewChild('_matButtonToggleAdvancedFilter') private _matButtonToggleAdvancedFilter: MatButtonToggle;\n @ViewChild('_matButtonToggleCustomerFilter') private _matButtonToggleCustomerFilter: MatButtonToggle;\n @ViewChild('_matButtonToggleGroupFilter', { static: true }) private _matButtonToggleGroupFilter: MatButtonToggleGroup;\n @ViewChild('_matButtonToggleLaboratoryResourceFilter') private _matButtonToggleLaboratoryResourceFilter: MatButtonToggle;\n\n public static creationRoute = '/production-flow/create';\n public static strCurrentTabLink = 'production-flow-current-tab-link';\n public static strDeliveryFormKeyLocalStoragePageSize = 'delivery-form-page-size';\n public static strDeliveryFormKeyLocalStorageSort = 'delivery-form-sort-favorite';\n public static strDeliveryFormState = 'delivery-form-state';\n public static strFittingFormKeyLocalStoragePageSize = 'fitting-form-page-size';\n public static strFittingFormKeyLocalStorageSort = 'fitting-form-sort-favorite';\n public static strFittingFormState = 'fitting-form-state';\n public static strInvoiceKeyLocalStoragePageSize = 'invoiced-delivery-form-page-size';\n public static strInvoiceKeyLocalStorageSort = 'delivery-form-invoice-sort-favorite';\n public static strInvoiceState = 'delivery-form-invoice-state';\n public static strPeriodSearchTypeFavorite = 'production-flow-period-search-favorite';\n public static strProFormaKeyLocalStoragePageSize = 'pro-forma-page-size';\n public static strProFormaKeyLocalStorageSort = 'delivery-form-pro-forma-sort-favorite';\n public static strProFormaState = 'delivery-form-pro-forma-state';\n public static strQuoteKeyLocalStoragePageSize = 'quote-page-size';\n public static strQuoteKeyLocalStorageSort = 'quote-sort-favorite';\n public static strQuoteState = 'quote-state';\n public static strWorkFormKeyLocalStoragePageSize = 'work-form-page-size';\n public static strWorkFormKeyLocalStorageSort = 'work-form-sort-favorite';\n public static strWorkFormPeriodSearchTypeFavorite = 'work-form-search-favorite';\n public static strWorkFormState = 'work-form-state';\n public activeLink: RouterLinkModel;\n public advancedFilterCounter: number;\n public advancedFilterPanel: AdvancedFilterPanelModel;\n public constTextButtonAdvancedFilter = 'Filtres avancés';\n public constTextButtonCustomerFilter = 'Tous les clients';\n public constTextButtonCustomerFilterShowCustomerMembers = 'et ses membres';\n public constTextButtonLaboratoryResourceFilter = 'Toutes les ressources';\n public customerFilterCounter: number;\n public customerFilterPanel: CustomerFilterPanelModel;\n public customerFilterUuid: string;\n public deliveryFormState: DeliveryFormState = new DeliveryFormState();\n public deliveryRouteFilterDefaultValue: ComboModel;\n public deliveryRouteFilterOptionExcludedDeliveryRouteFlag = new ComboModel('1', 'Autres tournées renseignées');\n public deliveryRouteFilterOptionNoneDeliveryRouteFlag = new ComboModel('0', 'Aucune tournée renseignée');\n public deliveryRouteFilterOptions: ComboModel[];\n public deliveryRouteFilterSelection: ComboModel[];\n public documentStateDefaultValue: ComboModel;\n public documentStateOptions: ComboModel[];\n public documentStateSelected: ComboModel;\n public documentStatusCanceled = DocumentStatus.Canceled.toString();\n public documentStatusDone = DocumentStatus.Done.toString();\n public filterSetToDefaultValueFlag = true;\n public fittingFormState: FittingFormState = new FittingFormState();\n public gridFilter: GridFilterModel;\n public gridSortDF: GridSortModel[];\n public gridSortFF: GridSortModel[];\n public gridSortIDF: GridSortModel[];\n public gridSortQ: GridSortModel[];\n public gridSortWF: GridSortModel[];\n public invoiceState: InvoiceState = new InvoiceState();\n public laboratoryResourceFilterCounter: number;\n public laboratoryResourceFilterPanel: LaboratoryResourceFilterPanelModel;\n public laboratoryResourceFilterUuid: string;\n public laboratoryResourceSectorOrSpecialtyDefaultValue: ComboModel;\n public navLinks: RouterLinkModel[];\n public pageTitle = 'Flux de production';\n public periodSearch: PeriodSearchModel;\n public periodSearchDateTypeOptions: ComboModel[];\n public periodSearchTypeDefault = PeriodSearchType.FiscalYear.toString();\n public periodSearchTypeFavorite: string;\n public periodSearchTypeOptions: ComboModel[];\n public periodSearchTypeSetToDefaultValueFlag = true;\n public productionFlowProcessingActionFlag: boolean;\n public proFormaState: ProFormaState = new ProFormaState();\n public quoteState: QuoteState = new QuoteState();\n public sectorOrSpecialties = new Array();\n public sectorOrSpecialtyUuidSelected: string;\n public showEraseAdvancedFilterFlag = false;\n public showEraseCustomerFilterFlag = false;\n public showEraseLaboratoryResourceFilterFlag = false;\n public sortSetToDefaultValueFlag = true;\n public tabIndexDeliveryForm = 3;\n public tabIndexFittingForm = 2;\n public tabIndexInvoicedDeliveryForm = 5;\n public tabIndexProFormaDeliveryForm = 4;\n public tabIndexQuote = 0;\n public tabIndexWorkForm = 1;\n public textButtonAdvancedFilter = 'Filtres avancés';\n public textButtonCustomerFilter = 'Tous les clients';\n public textButtonCustomerFilterShowCustomerMembers = '';\n public textButtonLaboratoryResourceFilter = 'Toutes les ressources';\n public workFormState: WorkFormState = new WorkFormState();\n private _routerOutletLoadedSubscription: Subscription;\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _activatedRoute: ActivatedRoute,\n private _corpTitleService: CorpTitleService,\n private _customerService: CustomerService,\n private _focusService: FocusService,\n private _highlightService: HighlightService,\n private _laboratoryResourceService: LaboratoryResourceService,\n private _localStorageService: LocalStorageService,\n private _notifyService: NotifyService,\n private _periodSearchService: PeriodSearchService,\n private _preselectionService: PreselectionService,\n private _productionFlowService: ProductionFlowService,\n private _router: Router,\n private _sessionStorageService: SessionStorageService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {\n this.productionFlowProcessingActionFlag = this._workingLaboratoryService.laboratoryRole?.productionFlowProcessingActionFlag;\n\n this.gridSortDF = this._workingLaboratoryService.laboratoryRole?.itemAmountDisplayFlag\n ? [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ]\n : [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'customerName', label: 'Par nom de client' },\n ];\n this.gridSortFF = this._workingLaboratoryService.laboratoryRole?.itemAmountDisplayFlag\n ? [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ]\n : [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'customerName', label: 'Par nom de client' },\n ];\n this.gridSortIDF = this._workingLaboratoryService.laboratoryRole?.itemAmountDisplayFlag\n ? [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'invoiceDate', label: 'Par date de facturation' },\n { value: 'invoiceNumber', label: 'Par numéro de facture' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ]\n : [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'invoiceDate', label: 'Par date de facturation' },\n { value: 'invoiceNumber', label: 'Par numéro de facture' },\n { value: 'customerName', label: 'Par nom de client' },\n ];\n this.gridSortQ = this._workingLaboratoryService.laboratoryRole?.itemAmountDisplayFlag\n ? [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'quoteDate', label: 'Par date de devis' },\n { value: 'number', label: 'Par numéro de devis' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ]\n : [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'quoteDate', label: 'Par date de devis' },\n { value: 'number', label: 'Par numéro de devis' },\n { value: 'customerName', label: 'Par nom de client' },\n ];\n this.gridSortWF = this._workingLaboratoryService.laboratoryRole?.itemAmountDisplayFlag\n ? [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'customerName', label: 'Par nom de client' },\n { value: 'amount', label: 'Par montant HT' },\n { value: 'amountTaxesIncluded', label: 'Par montant TTC' },\n ]\n : [\n { value: 'createDate', label: 'Par date de création' },\n { value: 'deliveryDate', label: 'Par date de livraison' },\n { value: 'number', label: 'Par numéro de bon' },\n { value: 'customerName', label: 'Par nom de client' },\n ];\n\n this.documentStateOptions = DocumentStatusHelper.buildOptions();\n this.documentStateDefaultValue = DocumentStatusHelper.convertToComboModel(DocumentStatus.InProgress);\n\n this._corpTitleService.setTitle(this.pageTitle);\n this.navLinks = [\n new RouterLinkModel(this.tabIndexQuote, 'Devis', './quote', this.gridSortQ, 'tab-link-quote'),\n new RouterLinkModel(this.tabIndexWorkForm, 'Bons de travail', './work-form', this.gridSortWF, 'tab-link-work-form'),\n new RouterLinkModel(this.tabIndexFittingForm, \"Bons d'essayage\", './fitting-form', this.gridSortFF, 'tab-link-fitting-form'),\n new RouterLinkModel(this.tabIndexDeliveryForm, 'Bons de livraison', './delivery-form', this.gridSortDF, 'tab-link-delivery-form'),\n new RouterLinkModel(\n this.tabIndexProFormaDeliveryForm,\n 'Bons sur pro forma',\n './delivery-form/pro-forma',\n this.gridSortDF,\n 'tab-link-delivery-form-pro-forma'\n ),\n new RouterLinkModel(\n this.tabIndexInvoicedDeliveryForm,\n 'Bons facturés',\n './delivery-form/invoice',\n this.gridSortIDF,\n 'tab-link-delivery-form-invoice'\n ),\n ];\n }\n\n public addButtonClickCustomHandler(): () => void {\n const preselectedDate =\n this.periodSearch.periodSearchType === PeriodSearchType.Day.valueOf().toString() ? this.periodSearch.periodSearchInfo.dateTo : null;\n return () => {\n this._productionFlowService.setReadProductionFlowViewModel(undefined);\n let formDocumentSelection: FormDocumentSelectionModel;\n if (this._isDeliveryFormContext() || this._isProFormaContext() || this._isInvoiceContext()) {\n formDocumentSelection = FormDocumentSelectionModelHelper.build(DocumentType.DeliveryForm, preselectedDate, null, true);\n } else if (this._isFittingFormContext()) {\n formDocumentSelection = FormDocumentSelectionModelHelper.build(DocumentType.FittingForm, preselectedDate, null, true);\n } else if (this._isQuoteContext()) {\n formDocumentSelection = FormDocumentSelectionModelHelper.build(DocumentType.Quote, preselectedDate, null, true);\n } else if (this._isWorkFormContext()) {\n formDocumentSelection = FormDocumentSelectionModelHelper.build(DocumentType.WorkForm, preselectedDate, null, true);\n }\n\n this._preselectionService.setFormDocumentSelection(formDocumentSelection);\n\n this._router.navigate([ProductionFlowComponent.creationRoute]);\n };\n }\n\n public advancedFilterAppliedHandler(advancedFilterPanel: AdvancedFilterPanelModel): void {\n this._initAdvancedFilter(advancedFilterPanel);\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = true;\n this._matButtonToggleAdvancedFilter.focus();\n\n // Reset Toggle and page index\n this._matButtonToggleGroupFilter.value = null;\n this._resetPageIndex();\n\n // refresh page\n this._saveStateAndSelfNavigate();\n }\n\n public buildFilterDeliveryRouteOptions(optionDeliveryRoutes: OptionDeliveryRouteViewModel[]): Array {\n let deliveryRouteFilterOptions = new Array();\n optionDeliveryRoutes.forEach((deliveryRoute) => {\n const deliveryRouteFilterOption = new ComboModel();\n deliveryRouteFilterOption.key = deliveryRoute.uuid;\n deliveryRouteFilterOption.label = FormTimeModelHelper.parseTime(deliveryRoute.deliveryRouteHour, deliveryRoute.deliveryRouteMinute);\n deliveryRouteFilterOptions.push(deliveryRouteFilterOption);\n });\n deliveryRouteFilterOptions = deliveryRouteFilterOptions.sort(SortHelper.sortByLabelAlphabetically);\n deliveryRouteFilterOptions.push(this.deliveryRouteFilterOptionExcludedDeliveryRouteFlag);\n deliveryRouteFilterOptions.push(this.deliveryRouteFilterOptionNoneDeliveryRouteFlag);\n return deliveryRouteFilterOptions;\n }\n\n public customerFilterAppliedHandler(customerFilterPanel: CustomerFilterPanelModel): void {\n this.customerFilterPanel = customerFilterPanel;\n\n // copy the customer filter for all state\n this.customerFilterUuid = customerFilterPanel?.customer ? customerFilterPanel.customer.uuid : null;\n\n if (customerFilterPanel?.customer && customerFilterPanel.showCustomerMembersFlag) {\n this.deliveryFormState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n this.fittingFormState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n this.invoiceState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n this.proFormaState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n this.quoteState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n this.workFormState.documentFilter.customerGroupUuids = [customerFilterPanel.customer.uuid];\n } else {\n this.deliveryFormState.documentFilter.customerGroupUuids = null;\n this.fittingFormState.documentFilter.customerGroupUuids = null;\n this.invoiceState.documentFilter.customerGroupUuids = null;\n this.proFormaState.documentFilter.customerGroupUuids = null;\n this.quoteState.documentFilter.customerGroupUuids = null;\n this.workFormState.documentFilter.customerGroupUuids = null;\n }\n\n if (customerFilterPanel?.customer && !customerFilterPanel.showCustomerMembersFlag) {\n this.deliveryFormState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n this.fittingFormState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n this.invoiceState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n this.proFormaState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n this.quoteState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n this.workFormState.documentFilter.customerUuids = [customerFilterPanel.customer.uuid];\n } else {\n this.deliveryFormState.documentFilter.customerUuids = null;\n this.fittingFormState.documentFilter.customerUuids = null;\n this.invoiceState.documentFilter.customerUuids = null;\n this.proFormaState.documentFilter.customerUuids = null;\n this.quoteState.documentFilter.customerUuids = null;\n this.workFormState.documentFilter.customerUuids = null;\n }\n\n // set the customer to the preselection service\n if (this.customerFilterPanel?.customer) {\n this._preselectionService.setProductionFlowCustomer(this.customerFilterPanel.customer.uuid);\n }\n\n // update label of advanced filter button\n this._updateCustomerFilterToggleButtonLabel();\n\n // Reset Toggle and page index\n this._matButtonToggleGroupFilter.value = null;\n this._focusService.focusOnCustomerPanelToggleButtonFlag = true;\n this._focusService.setTimeoutOutsideAngular(() => {\n this._matButtonToggleCustomerFilter.focus();\n });\n\n this._resetPageIndex();\n\n // refresh page\n this._saveStateAndSelfNavigate();\n }\n\n public eraseAdvancedFilter(): void {\n AdvancedFilterPanelModelHelper.resetValues(this.advancedFilterPanel);\n this.advancedFilterAppliedHandler(this.advancedFilterPanel);\n }\n\n public eraseAllFiltersClickedHandler(): void {\n this.deliveryFormState.resetFilter();\n this.deliveryFormState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.deliveryFormState.documentFilter.periodSearchDateType = (\n Number(PeriodSearchDeliveryFormDateType.DeliveryDate.toString())\n );\n\n this.fittingFormState.resetFilter();\n this.fittingFormState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n\n this.invoiceState.resetFilter();\n this.invoiceState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.invoiceState.documentFilter.periodSearchDateType = (\n Number(PeriodSearchDeliveryFormDateType.DeliveryDate.toString())\n );\n\n this.proFormaState.resetFilter();\n this.proFormaState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n this.proFormaState.documentFilter.periodSearchDateType = (\n Number(PeriodSearchDeliveryFormDateType.DeliveryDate.toString())\n );\n\n this.quoteState.resetFilter();\n this.quoteState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n\n this.workFormState.resetFilter();\n this.workFormState.documentFilter.periodSearchType = Number(this.periodSearchTypeFavorite);\n\n this._saveStateAndSelfNavigate();\n }\n\n public eraseCustomerFilter(): void {\n this.customerFilterAppliedHandler(null);\n }\n\n public eraseLaboratoryResourceFilter(): void {\n this.laboratoryResourceFilterAppliedHandler(null);\n }\n\n public getAddButtonLink(): string {\n if (this.productionFlowProcessingActionFlag) {\n return '/production-flow/create';\n }\n return null;\n }\n\n @HostListener('window:keydown.PageDown', ['$event'])\n public keydownPageDown($event: KeyboardEvent): void {\n $event.preventDefault();\n }\n\n @HostListener('window:keydown.Tab', ['$event'])\n public keydownTab($event: KeyboardEvent): void {\n this._focusService.setFocusOnGridFilter($event, this._gridFilterComponent);\n }\n\n @HostListener('window:keyup.PageDown', ['$event'])\n public keyupPageDown(): void {\n let nextIndex = this.activeLink.index - 1;\n if (nextIndex < 0) {\n nextIndex = this.navLinks.length - 1;\n }\n this.tabClicked(this.navLinks[nextIndex]);\n }\n\n @HostListener('window:keyup.PageUp', ['$event'])\n public keyupPageUp(): void {\n const nextIndex = (this.activeLink.index + 1) % this.navLinks.length;\n this.tabClicked(this.navLinks[nextIndex]);\n }\n\n public laboratoryResourceFilterAppliedHandler(laboratoryResourceFilterPanel: LaboratoryResourceFilterPanelModel): void {\n this.laboratoryResourceFilterPanel = laboratoryResourceFilterPanel;\n\n // copy the laboratoryResource filter for all state\n this.laboratoryResourceFilterUuid = laboratoryResourceFilterPanel?.laboratoryResource\n ? laboratoryResourceFilterPanel.laboratoryResource.uuid\n : null;\n\n if (laboratoryResourceFilterPanel?.laboratoryResource) {\n this.deliveryFormState.documentFilter.laboratoryResourceUuid = laboratoryResourceFilterPanel.laboratoryResource.uuid;\n this.fittingFormState.documentFilter.laboratoryResourceUuid = laboratoryResourceFilterPanel.laboratoryResource.uuid;\n this.invoiceState.documentFilter.laboratoryResourceUuid = laboratoryResourceFilterPanel.laboratoryResource.uuid;\n this.proFormaState.documentFilter.laboratoryResourceUuid = laboratoryResourceFilterPanel.laboratoryResource.uuid;\n this.quoteState.documentFilter.laboratoryResourceUuid = laboratoryResourceFilterPanel.laboratoryResource.uuid;\n this.workFormState.documentFilter.laboratoryResourceUuid = laboratoryResourceFilterPanel.laboratoryResource.uuid;\n } else {\n this.deliveryFormState.documentFilter.laboratoryResourceUuid = null;\n this.fittingFormState.documentFilter.laboratoryResourceUuid = null;\n this.invoiceState.documentFilter.laboratoryResourceUuid = null;\n this.proFormaState.documentFilter.laboratoryResourceUuid = null;\n this.quoteState.documentFilter.laboratoryResourceUuid = null;\n this.workFormState.documentFilter.laboratoryResourceUuid = null;\n }\n\n // update label of advanced filter button\n this._updateLaboratoryResourceFilterToggleButtonLabel();\n\n // Reset Toggle and page index\n this._matButtonToggleGroupFilter.value = null;\n this._focusService.focusOnLaboratoryResourcePanelToggleButtonFlag = true;\n this._focusService.setTimeoutOutsideAngular(() => {\n this._matButtonToggleLaboratoryResourceFilter.focus();\n });\n\n this._resetPageIndex();\n\n // refresh page\n this._saveStateAndSelfNavigate();\n }\n\n public ngOnDestroy(): void {\n this._routerOutletLoadedSubscription.unsubscribe();\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n // Set nav tab\n if (this._router.url.startsWith('/production-flow/quote')) {\n this.activeLink = this.navLinks[this.tabIndexQuote];\n } else if (this._router.url.startsWith('/production-flow/fitting-form')) {\n this.activeLink = this.navLinks[this.tabIndexFittingForm];\n } else if (this._router.url.startsWith('/production-flow/delivery-form/invoice')) {\n this.activeLink = this.navLinks[this.tabIndexInvoicedDeliveryForm];\n } else if (this._router.url.startsWith('/production-flow/delivery-form/pro-forma')) {\n this.activeLink = this.navLinks[this.tabIndexProFormaDeliveryForm];\n } else if (this._router.url.startsWith('/production-flow/work-form')) {\n this.activeLink = this.navLinks[this.tabIndexWorkForm];\n } else {\n this.activeLink = this.navLinks[this.tabIndexDeliveryForm];\n }\n\n this._periodSearchService.periodSearchInfoSubject$\n .pipe(takeUntil(this._unsubscribeAll$))\n .subscribe((periodSearchInfo: PeriodSearchInfoModel) => {\n this._initPeriodSearchFilter(this.periodSearch);\n this.periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (this._isDeliveryFormContext()) {\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isFittingFormContext()) {\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isQuoteContext()) {\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isWorkFormContext()) {\n this.filterSetToDefaultValueFlag = this.workFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n });\n\n this._productionFlowService.initializefilterDeliveryRouteOptionsSubject$\n .pipe(takeUntil(this._unsubscribeAll$))\n .subscribe((deliveryRoutes: OptionDeliveryRouteViewModel[]) => {\n this.deliveryRouteFilterOptions = this.buildFilterDeliveryRouteOptions(deliveryRoutes);\n if (this._isDeliveryFormContext()) {\n this._setDeliveryRouteFilter(this.deliveryFormState.documentFilter);\n } else if (this._isFittingFormContext()) {\n this._setDeliveryRouteFilter(this.fittingFormState.documentFilter);\n } else if (this._isInvoiceContext()) {\n this._setDeliveryRouteFilter(this.invoiceState.documentFilter);\n } else if (this._isProFormaContext()) {\n this._setDeliveryRouteFilter(this.proFormaState.documentFilter);\n } else if (this._isQuoteContext()) {\n this._setDeliveryRouteFilter(this.quoteState.documentFilter);\n } else if (this._isWorkFormContext()) {\n this._setDeliveryRouteFilter(this.workFormState.documentFilter);\n }\n });\n\n this._productionFlowService.initializefilterSectorOptionsSubject$\n .pipe(takeUntil(this._unsubscribeAll$))\n .subscribe((sectors: ExtendOptionSectorViewModel[]) => {\n this._buildComboSectors(sectors);\n if (this._isDeliveryFormContext()) {\n this._setSectorFilter(this.deliveryFormState.documentFilter);\n } else if (this._isFittingFormContext()) {\n this._setSectorFilter(this.fittingFormState.documentFilter);\n } else if (this._isInvoiceContext()) {\n this._setSectorFilter(this.invoiceState.documentFilter);\n } else if (this._isProFormaContext()) {\n this._setSectorFilter(this.proFormaState.documentFilter);\n } else if (this._isQuoteContext()) {\n this._setSectorFilter(this.quoteState.documentFilter);\n } else if (this._isWorkFormContext()) {\n this._setSectorFilter(this.workFormState.documentFilter);\n }\n });\n\n this._activatedRoute.queryParams.pipe(takeUntil(this._unsubscribeAll$)).subscribe((params) => {\n this._buildPeriodSearchOptions();\n this._loadState(params['pstate']);\n this._initAdvancedFilter(this.advancedFilterPanel);\n this._initCustomerContext();\n this._initLaboratoryResourceContext();\n this._initGridSortContext();\n this._initPeriodSearchFilter(this.periodSearch);\n this._initTextFilterContext();\n });\n\n this._routerOutletLoadedSubscription = this._focusService.routerOutletLoadedHandler().subscribe(() => {\n if (this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag) {\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = false;\n this._matButtonToggleGroupFilter.value = null;\n this._matButtonToggleAdvancedFilter.focus();\n } else if (this._focusService.focusOnCustomerPanelToggleButtonFlag) {\n this._focusService.focusOnCustomerPanelToggleButtonFlag = false;\n this._matButtonToggleGroupFilter.value = null;\n this._matButtonToggleCustomerFilter.focus();\n } else if (this._focusService.focusOnLaboratoryResourcePanelToggleButtonFlag) {\n this._focusService.focusOnLaboratoryResourcePanelToggleButtonFlag = false;\n this._matButtonToggleGroupFilter.value = null;\n this._matButtonToggleLaboratoryResourceFilter.focus();\n } else {\n this.setFocus();\n }\n });\n }\n\n public optionDeliveryRouteFilterChanged(selectedOptions: ComboModel[]): void {\n if (this._isDeliveryFormContext()) {\n this.setDeliveryRouteFilter(this.deliveryFormState.documentFilter, selectedOptions);\n } else if (this._isFittingFormContext()) {\n this.setDeliveryRouteFilter(this.fittingFormState.documentFilter, selectedOptions);\n } else if (this._isInvoiceContext()) {\n this.setDeliveryRouteFilter(this.invoiceState.documentFilter, selectedOptions);\n } else if (this._isProFormaContext()) {\n this.setDeliveryRouteFilter(this.proFormaState.documentFilter, selectedOptions);\n } else if (this._isQuoteContext()) {\n this.setDeliveryRouteFilter(this.quoteState.documentFilter, selectedOptions);\n } else if (this._isWorkFormContext()) {\n this.setDeliveryRouteFilter(this.workFormState.documentFilter, selectedOptions);\n }\n\n this._resetPageIndex();\n this._saveStateAndSelfNavigate();\n }\n\n public optionDocumentStateChanged(optionLabel: ComboModel): void {\n if (this._isDeliveryFormContext()) {\n return;\n } else if (this._isFittingFormContext()) {\n if (optionLabel) {\n this.fittingFormState.documentFilter.status = DocumentStatusHelper.convertToEnum(optionLabel);\n } else {\n delete this.fittingFormState.documentFilter.status;\n }\n } else if (this._isInvoiceContext()) {\n return;\n } else if (this._isProFormaContext()) {\n return;\n } else if (this._isQuoteContext()) {\n if (optionLabel) {\n this.quoteState.documentFilter.status = DocumentStatusHelper.convertToEnum(optionLabel);\n } else {\n delete this.quoteState.documentFilter.status;\n }\n } else if (this._isWorkFormContext()) {\n if (optionLabel) {\n this.workFormState.documentFilter.status = DocumentStatusHelper.convertToEnum(optionLabel);\n } else {\n delete this.workFormState.documentFilter.status;\n }\n }\n\n // Reset to page 1\n this._resetPageIndex();\n this._saveStateAndSelfNavigate();\n }\n\n public optionSectorOrSpecialtyChanged(selectedSectorOrSpecialty: ComboModel): void {\n if (this._isDeliveryFormContext()) {\n this.setSectorFilter(this.deliveryFormState.documentFilter, selectedSectorOrSpecialty);\n } else if (this._isFittingFormContext()) {\n this.setSectorFilter(this.fittingFormState.documentFilter, selectedSectorOrSpecialty);\n } else if (this._isInvoiceContext()) {\n this.setSectorFilter(this.invoiceState.documentFilter, selectedSectorOrSpecialty);\n } else if (this._isProFormaContext()) {\n this.setSectorFilter(this.proFormaState.documentFilter, selectedSectorOrSpecialty);\n } else if (this._isQuoteContext()) {\n this.setSectorFilter(this.quoteState.documentFilter, selectedSectorOrSpecialty);\n } else if (this._isWorkFormContext()) {\n this.setSectorFilter(this.workFormState.documentFilter, selectedSectorOrSpecialty);\n }\n\n this._resetPageIndex();\n this._saveStateAndSelfNavigate();\n }\n\n public periodSearchSubmitEventHandler(periodSearch: PeriodSearchModel): void {\n this.deliveryFormState.documentFilter = LaboratoryAreaPeriodSearchModelHelper.toDeliveryFormFilter(\n this.deliveryFormState.documentFilter,\n periodSearch\n );\n this.fittingFormState.documentFilter = LaboratoryAreaPeriodSearchModelHelper.toFittingFormFilter(\n this.fittingFormState.documentFilter,\n periodSearch\n );\n this.invoiceState.documentFilter = LaboratoryAreaPeriodSearchModelHelper.toInvoicedDeliveryFormFilter(\n this.invoiceState.documentFilter,\n periodSearch,\n this._isInvoiceContext()\n );\n this.proFormaState.documentFilter = LaboratoryAreaPeriodSearchModelHelper.toDeliveryFormFilter(\n this.proFormaState.documentFilter,\n periodSearch\n );\n this.quoteState.documentFilter = LaboratoryAreaPeriodSearchModelHelper.toQuoteFilter(this.quoteState.documentFilter, periodSearch);\n this.workFormState.documentFilter = LaboratoryAreaPeriodSearchModelHelper.toWorkFormFilter(\n this.workFormState.documentFilter,\n periodSearch\n );\n\n this._resetPageIndex();\n this._saveStateAndSelfNavigate(true);\n }\n\n public saveFavoriteClickedHandler(): void {\n // Save into the local storage the new favorites\n const sort = new Array();\n\n if (this._isDeliveryFormContext()) {\n this._saveCurrentState(sort, this.deliveryFormState, ProductionFlowComponent.strDeliveryFormKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.deliveryFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isFittingFormContext()) {\n this._saveCurrentState(sort, this.fittingFormState, ProductionFlowComponent.strFittingFormKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.fittingFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this._saveCurrentState(sort, this.invoiceState, ProductionFlowComponent.strInvoiceKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this._saveCurrentState(sort, this.proFormaState, ProductionFlowComponent.strProFormaKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isQuoteContext()) {\n this._saveCurrentState(sort, this.quoteState, ProductionFlowComponent.strQuoteKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.quoteState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isWorkFormContext()) {\n this._saveCurrentState(sort, this.workFormState, ProductionFlowComponent.strWorkFormKeyLocalStorageSort);\n this.sortSetToDefaultValueFlag = this.workFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.workFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._notifyService.displayInformationMessagesNow('Tris favoris mémorisés');\n }\n\n public saveFavoritePeriodSearchTypeEventHandler(periodSearchTypeKey: string): void {\n // Save into the local storage the new favorites\n this.periodSearchTypeFavorite = periodSearchTypeKey;\n\n let newPeriodSearchType = periodSearchTypeKey;\n if (newPeriodSearchType === '-1') {\n newPeriodSearchType = null;\n }\n\n // Save favorite period search type current\n this._localStorageService.write(ProductionFlowComponent.strPeriodSearchTypeFavorite, newPeriodSearchType);\n\n // Update current favorite\n this.periodSearchTypeSetToDefaultValueFlag = this.periodSearch.periodSearchType === this.periodSearchTypeFavorite;\n\n if (this._isDeliveryFormContext()) {\n this.sortSetToDefaultValueFlag = this.deliveryFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isFittingFormContext()) {\n this.sortSetToDefaultValueFlag = this.fittingFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isQuoteContext()) {\n this.sortSetToDefaultValueFlag = this.quoteState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isWorkFormContext()) {\n this.sortSetToDefaultValueFlag = this.workFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.workFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._notifyService.displayInformationMessagesNow(`Type de période favori mémorisé`);\n }\n\n public setDeliveryRouteFilter(documentFilter: DocumentFilter, options: ComboModel[]): void {\n if (options) {\n const deliveryRoutesOptions = this.deliveryRouteFilterOptions.filter(\n (x) =>\n !(x.key in [this.deliveryRouteFilterOptionNoneDeliveryRouteFlag.key, this.deliveryRouteFilterOptionExcludedDeliveryRouteFlag.key])\n );\n const selectedOptionKeys = options.map((x) => x.key);\n\n const selectedDeliveryRouteNumbers = [];\n deliveryRoutesOptions.forEach((deliveryRoutesOption) => {\n if (selectedOptionKeys.some((x) => x === deliveryRoutesOption.key)) {\n selectedDeliveryRouteNumbers.push(FormTimeModelHelper.toTime(deliveryRoutesOption.label));\n }\n });\n\n const unselectedDeliveryRouteNumbers = [];\n deliveryRoutesOptions.forEach((deliveryRoutesOption) => {\n if (!selectedOptionKeys.some((x) => x === deliveryRoutesOption.key)) {\n unselectedDeliveryRouteNumbers.push(FormTimeModelHelper.toTime(deliveryRoutesOption.label));\n }\n });\n\n const optionNoneDeliveryRouteFlag = options.some((x) => x.key === this.deliveryRouteFilterOptionNoneDeliveryRouteFlag.key);\n const optionExcludedDeliveryRouteFlag = options.some((x) => x.key === this.deliveryRouteFilterOptionExcludedDeliveryRouteFlag.key);\n const hasSelectedDeliveryRouteFlag = selectedDeliveryRouteNumbers?.length > 0;\n\n if (optionNoneDeliveryRouteFlag) {\n documentFilter.noneDeliveryRouteFlag = true;\n if (hasSelectedDeliveryRouteFlag && optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = selectedDeliveryRouteNumbers;\n documentFilter.excludedDeliveryRoutes = unselectedDeliveryRouteNumbers;\n }\n if (hasSelectedDeliveryRouteFlag && !optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = selectedDeliveryRouteNumbers;\n documentFilter.excludedDeliveryRoutes = null;\n }\n if (!hasSelectedDeliveryRouteFlag && optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = unselectedDeliveryRouteNumbers;\n }\n if (!hasSelectedDeliveryRouteFlag && !optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = null;\n }\n } else {\n documentFilter.noneDeliveryRouteFlag = null;\n if (hasSelectedDeliveryRouteFlag && optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = selectedDeliveryRouteNumbers;\n documentFilter.excludedDeliveryRoutes = unselectedDeliveryRouteNumbers;\n }\n if (hasSelectedDeliveryRouteFlag && !optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = selectedDeliveryRouteNumbers;\n documentFilter.excludedDeliveryRoutes = null;\n }\n if (!hasSelectedDeliveryRouteFlag && optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = unselectedDeliveryRouteNumbers;\n }\n if (!hasSelectedDeliveryRouteFlag && !optionExcludedDeliveryRouteFlag) {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = null;\n }\n }\n } else {\n documentFilter.deliveryRoutes = null;\n documentFilter.excludedDeliveryRoutes = null;\n documentFilter.noneDeliveryRouteFlag = null;\n }\n }\n\n public setFocus(): void {\n this._focusService.setTimeoutOutsideAngular(() => {\n if (this._matButtonToggleGroupFilter.value === 'advancedFilter') {\n this._advancedFilterComponent?.setFocus();\n } else if (this._matButtonToggleGroupFilter.value === 'customerFilter') {\n this._customerFilterPanelComponent?.setFocus();\n } else if (this._matButtonToggleGroupFilter.value === 'laboratoryResourceFilter') {\n this._laboratoryResourceFilterPanelComponent?.setFocus();\n }\n });\n }\n\n public setSectorFilter(documentFilter: DocumentFilter, selectedSectorOrSpecialty: ComboModel): void {\n if (selectedSectorOrSpecialty && selectedSectorOrSpecialty.key) {\n if (selectedSectorOrSpecialty.key === SectorOrSpecialtyModelHelper.unspecifiedSectorOrSpecialtyKey.toString()) {\n documentFilter.sectorUuid = null;\n documentFilter.specialtyUuids = null;\n documentFilter.noneSpecialtyFlag = true;\n } else if (!selectedSectorOrSpecialty.parent) {\n documentFilter.sectorUuid = selectedSectorOrSpecialty.key;\n documentFilter.specialtyUuids = null;\n documentFilter.noneSpecialtyFlag = null;\n } else {\n documentFilter.sectorUuid = null;\n documentFilter.noneSpecialtyFlag = null;\n documentFilter.specialtyUuids = [selectedSectorOrSpecialty.key];\n }\n } else {\n documentFilter.sectorUuid = null;\n documentFilter.specialtyUuids = null;\n documentFilter.noneSpecialtyFlag = null;\n\n this.sectorOrSpecialtyUuidSelected = null;\n this.laboratoryResourceSectorOrSpecialtyDefaultValue = null;\n }\n }\n\n public sortActiveChanged(newSortActive: string): void {\n if (this._isDeliveryFormContext()) {\n this.deliveryFormState.sortActive = newSortActive;\n } else if (this._isFittingFormContext()) {\n this.fittingFormState.sortActive = newSortActive;\n } else if (this._isInvoiceContext()) {\n this.invoiceState.sortActive = newSortActive;\n } else if (this._isProFormaContext()) {\n this.proFormaState.sortActive = newSortActive;\n } else if (this._isQuoteContext()) {\n this.quoteState.sortActive = newSortActive;\n } else if (this._isWorkFormContext()) {\n this.workFormState.sortActive = newSortActive;\n }\n\n this._saveStateAndSelfNavigate(true);\n }\n\n public sortDirectionChanged(newSortDirection: string): void {\n if (this._isDeliveryFormContext()) {\n this.deliveryFormState.sortDirection = newSortDirection;\n } else if (this._isFittingFormContext()) {\n this.fittingFormState.sortDirection = newSortDirection;\n } else if (this._isInvoiceContext()) {\n this.invoiceState.sortDirection = newSortDirection;\n } else if (this._isProFormaContext()) {\n this.proFormaState.sortDirection = newSortDirection;\n } else if (this._isQuoteContext()) {\n this.quoteState.sortDirection = newSortDirection;\n } else if (this._isWorkFormContext()) {\n this.workFormState.sortDirection = newSortDirection;\n }\n\n this._saveStateAndSelfNavigate(true);\n }\n\n public tabClicked(navLink: RouterLinkModel): void {\n this._focusService.focusOnAdvancedFilterPanelToggleButtonFlag = false;\n this._focusService.focusOnCustomerPanelToggleButtonFlag = false;\n this._focusService.focusOnLaboratoryResourcePanelToggleButtonFlag = false;\n this.activeLink = navLink;\n this._localStorageService.write(ProductionFlowComponent.strCurrentTabLink, this.activeLink.link.replace('./', ''));\n this._loadState(undefined);\n this._buildPeriodSearchOptions();\n this._initAdvancedFilter(this.advancedFilterPanel);\n this._initCustomerContext();\n this._initLaboratoryResourceContext();\n this._initGridSortContext();\n this._initPeriodSearchFilter(this.periodSearch);\n this._initTextFilterContext();\n }\n\n public textFilterChangedEventHandler(newTextFilter: string): void {\n this._highlightService.compileFilter(newTextFilter);\n\n this.deliveryFormState.documentFilter.textFilter = newTextFilter;\n this.fittingFormState.documentFilter.textFilter = newTextFilter;\n this.invoiceState.documentFilter.textFilter = newTextFilter;\n this.proFormaState.documentFilter.textFilter = newTextFilter;\n this.quoteState.documentFilter.textFilter = newTextFilter;\n this.workFormState.documentFilter.textFilter = newTextFilter;\n\n this._resetPageIndex();\n\n this._saveStateAndSelfNavigate();\n }\n\n public toggleChange($event: MatButtonToggleChange): void {\n const toggle = $event.source;\n if (toggle) {\n const group = toggle.buttonToggleGroup;\n if ($event.value.some((item) => item === toggle.value)) {\n group.value = [toggle.value];\n }\n }\n }\n\n private _buildComboSectors(extendOptionSectorViewModels: ExtendOptionSectorViewModel[]): void {\n if (extendOptionSectorViewModels) {\n this.sectorOrSpecialties = SectorOrSpecialtyModelHelper.fromViewModel(extendOptionSectorViewModels, true);\n }\n }\n\n private _buildPeriodSearchOptions(): void {\n this.periodSearchTypeOptions = PeriodSearchTypeHelper.buildOptions();\n if (this._isDeliveryFormContext()) {\n this.periodSearchDateTypeOptions = null;\n } else if (this._isFittingFormContext()) {\n this.periodSearchDateTypeOptions = null;\n } else if (this._isInvoiceContext()) {\n this.periodSearchDateTypeOptions = PeriodSearchDeliveryFormDateTypeHelper.buildOptions();\n } else if (this._isProFormaContext()) {\n this.periodSearchDateTypeOptions = null;\n } else if (this._isQuoteContext()) {\n this.periodSearchDateTypeOptions = null;\n } else if (this._isWorkFormContext()) {\n this.periodSearchDateTypeOptions = null;\n }\n }\n\n private _initAdvancedFilter(advancedFilterPanel: AdvancedFilterPanelModel): void {\n this.advancedFilterPanel = advancedFilterPanel;\n if (this._isDeliveryFormContext()) {\n this.deliveryFormState.documentFilter = AdvancedFilterPanelModelHelper.toDeliveryFormFilter(\n advancedFilterPanel,\n this.deliveryFormState.documentFilter\n );\n } else if (this._isFittingFormContext()) {\n this.fittingFormState.documentFilter = AdvancedFilterPanelModelHelper.toFittingFormFilter(\n advancedFilterPanel,\n this.fittingFormState.documentFilter\n );\n } else if (this._isInvoiceContext()) {\n this.invoiceState.documentFilter = AdvancedFilterPanelModelHelper.toDeliveryFormFilter(\n advancedFilterPanel,\n this.invoiceState.documentFilter\n );\n } else if (this._isProFormaContext()) {\n this.proFormaState.documentFilter = AdvancedFilterPanelModelHelper.toDeliveryFormFilter(\n advancedFilterPanel,\n this.proFormaState.documentFilter\n );\n } else if (this._isQuoteContext()) {\n this.quoteState.documentFilter = AdvancedFilterPanelModelHelper.toQuoteFilter(advancedFilterPanel, this.quoteState.documentFilter);\n } else if (this._isWorkFormContext()) {\n this.workFormState.documentFilter = AdvancedFilterPanelModelHelper.toWorkFormFilter(\n advancedFilterPanel,\n this.workFormState.documentFilter\n );\n }\n this._updateAdvancedFilterToggleButtonLabel();\n }\n\n private _initCustomer(documentFilter: DocumentFilter): void {\n let customerUuid: string;\n if (documentFilter) {\n if (documentFilter.customerGroupUuids && documentFilter.customerGroupUuids.length > 0) {\n customerUuid = documentFilter.customerGroupUuids[0];\n } else {\n if (documentFilter.customerUuids && documentFilter.customerUuids.length > 0) {\n customerUuid = documentFilter.customerUuids[0];\n }\n }\n }\n\n if (customerUuid) {\n this._customerService.getById(customerUuid).subscribe((res) => {\n this.customerFilterPanel = new CustomerFilterPanelModel();\n this.customerFilterPanel.customer = new CustomerModel();\n this.customerFilterPanel.customer.code = res.code;\n this.customerFilterPanel.customer.groupFlag = res.customerMembers && res.customerMembers.length > 0;\n this.customerFilterPanel.customer.name = res.name;\n this.customerFilterPanel.customer.uuid = res.uuid;\n\n if (documentFilter.customerGroupUuids && documentFilter.customerGroupUuids.length > 0) {\n this.customerFilterPanel.showCustomerMembersFlag = true;\n }\n\n this._updateCustomerFilterToggleButtonLabel();\n });\n } else {\n this.customerFilterPanel = null;\n\n this._updateCustomerFilterToggleButtonLabel();\n }\n }\n\n private _initCustomerContext(): void {\n if (this._isDeliveryFormContext()) {\n if (this.deliveryFormState) {\n this._initCustomer(this.deliveryFormState.documentFilter);\n }\n }\n\n if (this._isFittingFormContext()) {\n if (this.fittingFormState) {\n this._initCustomer(this.fittingFormState.documentFilter);\n }\n }\n\n if (this._isInvoiceContext()) {\n if (this.invoiceState) {\n this._initCustomer(this.invoiceState.documentFilter);\n }\n }\n\n if (this._isProFormaContext()) {\n if (this.proFormaState) {\n this._initCustomer(this.proFormaState.documentFilter);\n }\n }\n\n if (this._isQuoteContext()) {\n if (this.quoteState) {\n this._initCustomer(this.quoteState.documentFilter);\n }\n }\n\n if (this._isWorkFormContext()) {\n if (this.workFormState) {\n this._initCustomer(this.workFormState.documentFilter);\n }\n }\n }\n\n private _initFavoriteContext(shouldForceSortFlag: boolean): void {\n if (this.deliveryFormState) {\n this._initFavoriteSortFromLocalStorage(\n ProductionFlowComponent.strDeliveryFormKeyLocalStorageSort,\n this.deliveryFormState,\n shouldForceSortFlag\n );\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.deliveryFormState.documentFilter,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString(),\n shouldForceSortFlag\n );\n }\n\n if (this.fittingFormState) {\n this._initFavoriteSortFromLocalStorage(\n ProductionFlowComponent.strFittingFormKeyLocalStorageSort,\n this.fittingFormState,\n shouldForceSortFlag\n );\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.fittingFormState.documentFilter,\n '0',\n shouldForceSortFlag\n );\n }\n\n if (this.invoiceState) {\n this._initFavoriteSortFromLocalStorage(ProductionFlowComponent.strInvoiceKeyLocalStorageSort, this.invoiceState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.invoiceState.documentFilter,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString(),\n shouldForceSortFlag\n );\n }\n\n if (this.proFormaState) {\n this._initFavoriteSortFromLocalStorage(\n ProductionFlowComponent.strProFormaKeyLocalStorageSort,\n this.proFormaState,\n shouldForceSortFlag\n );\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.proFormaState.documentFilter,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString(),\n shouldForceSortFlag\n );\n }\n\n if (this.quoteState) {\n this._initFavoriteSortFromLocalStorage(ProductionFlowComponent.strQuoteKeyLocalStorageSort, this.quoteState, shouldForceSortFlag);\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.quoteState.documentFilter,\n '0',\n shouldForceSortFlag\n );\n }\n\n if (this.workFormState) {\n this._initFavoriteSortFromLocalStorage(\n ProductionFlowComponent.strWorkFormKeyLocalStorageSort,\n this.workFormState,\n shouldForceSortFlag\n );\n this._initFavoritePeriodSearchTypeFromLocalStorage(\n ProductionFlowComponent.strPeriodSearchTypeFavorite,\n this.workFormState.documentFilter,\n '0',\n shouldForceSortFlag\n );\n }\n }\n\n private _initFavoritePeriodSearchTypeFromLocalStorage(\n key: string,\n documentFilter: DocumentFilter,\n periodSearchDateTypeDefault: string,\n shouldForceSortFlag: boolean\n ): void {\n const strFavoritePeriodSearchType = this._localStorageService?.read(key);\n if (!strFavoritePeriodSearchType) {\n // No favorites stored into the local storage\n this.periodSearchTypeFavorite = this.periodSearchTypeDefault;\n } else {\n this.periodSearchTypeFavorite = strFavoritePeriodSearchType;\n }\n // No session period search type\n if (!this.periodSearch?.periodSearchType || shouldForceSortFlag) {\n if (!this.periodSearch) {\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, periodSearchDateTypeDefault);\n } else {\n this.periodSearch.periodSearchType = this.periodSearchTypeFavorite;\n }\n\n documentFilter.periodSearchType = Number(this.periodSearch.periodSearchType);\n }\n\n this.periodSearchTypeSetToDefaultValueFlag = this.periodSearch?.periodSearchType === this.periodSearchTypeFavorite;\n }\n\n private _initFavoriteSortFromLocalStorage(key: string, state: PaginatedListState, shouldForceSortFlag: boolean): void {\n const sort = this._localStorageService.read(key);\n state.initSort(shouldForceSortFlag, sort);\n this.sortSetToDefaultValueFlag = state.isSortSetToDefaultValues();\n }\n\n private _initGridSort(state: PaginatedListState): void {\n if (this._gridSortComponent.sortActive !== state.sortActive) {\n this._gridSortComponent.sortActive = state.sortActive;\n }\n\n if (this._gridSortComponent.sortDirection !== state.sortDirection) {\n this._gridSortComponent.sortDirection = state.sortDirection;\n }\n\n if (this._gridSortComponent.sortFavorite !== state.sortFavorite) {\n this._gridSortComponent.sortFavorite = state.sortFavorite;\n }\n\n if (this._gridSortComponent.sortDirectionFavorite !== state.sortDirectionFavorite) {\n this._gridSortComponent.sortDirectionFavorite = state.sortDirectionFavorite;\n }\n }\n\n private _initGridSortContext(): void {\n if (this._isDeliveryFormContext()) {\n this._initGridSort(this.deliveryFormState);\n } else if (this._isFittingFormContext()) {\n this._initGridSort(this.fittingFormState);\n } else if (this._isInvoiceContext()) {\n this._initGridSort(this.invoiceState);\n } else if (this._isProFormaContext()) {\n this._initGridSort(this.proFormaState);\n } else if (this._isQuoteContext()) {\n this._initGridSort(this.quoteState);\n } else if (this._isWorkFormContext()) {\n this._initGridSort(this.workFormState);\n }\n }\n\n private _initLaboratoryResource(documentFilter: DocumentFilter): void {\n let laboratoryResourceUuid: string;\n if (documentFilter) {\n if (documentFilter.laboratoryResourceUuid) {\n laboratoryResourceUuid = documentFilter.laboratoryResourceUuid;\n }\n }\n\n if (laboratoryResourceUuid) {\n this._laboratoryResourceService.getById(laboratoryResourceUuid).subscribe((res) => {\n this.laboratoryResourceFilterPanel = new LaboratoryResourceFilterPanelModel();\n this.laboratoryResourceFilterPanel.laboratoryResource = new LaboratoryResourceModel();\n this.laboratoryResourceFilterPanel.laboratoryResource.code = res.code;\n this.laboratoryResourceFilterPanel.laboratoryResource.name = res.name;\n this.laboratoryResourceFilterPanel.laboratoryResource.uuid = res.uuid;\n\n this._updateLaboratoryResourceFilterToggleButtonLabel();\n });\n } else {\n this.laboratoryResourceFilterPanel = null;\n\n this._updateLaboratoryResourceFilterToggleButtonLabel();\n }\n }\n\n private _initLaboratoryResourceContext(): void {\n if (this._isDeliveryFormContext()) {\n if (this.deliveryFormState) {\n this._initLaboratoryResource(this.deliveryFormState.documentFilter);\n }\n }\n\n if (this._isFittingFormContext()) {\n if (this.fittingFormState) {\n this._initLaboratoryResource(this.fittingFormState.documentFilter);\n }\n }\n\n if (this._isInvoiceContext()) {\n if (this.invoiceState) {\n this._initLaboratoryResource(this.invoiceState.documentFilter);\n }\n }\n\n if (this._isProFormaContext()) {\n if (this.proFormaState) {\n this._initLaboratoryResource(this.proFormaState.documentFilter);\n }\n }\n\n if (this._isQuoteContext()) {\n if (this.quoteState) {\n this._initLaboratoryResource(this.quoteState.documentFilter);\n }\n }\n\n if (this._isWorkFormContext()) {\n if (this.workFormState) {\n this._initLaboratoryResource(this.workFormState.documentFilter);\n }\n }\n }\n\n private _initPeriodSearchFilter(periodSearch: PeriodSearchModel): void {\n if (this._isDeliveryFormContext()) {\n if (!periodSearch) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(\n this.periodSearchTypeFavorite,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString()\n );\n }\n\n if (this.deliveryFormState) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.deliveryFormState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n if (this._isFittingFormContext()) {\n if (!periodSearch) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, '0');\n }\n\n if (this.fittingFormState) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromFittingFormFilter(\n this.fittingFormState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n if (this._isInvoiceContext()) {\n if (!periodSearch) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(\n this.periodSearchTypeFavorite,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString()\n );\n }\n\n if (this.invoiceState) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.invoiceState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n if (this._isProFormaContext()) {\n if (!periodSearch) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(\n this.periodSearchTypeFavorite,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString()\n );\n }\n\n if (this.proFormaState) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.proFormaState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n if (this._isQuoteContext()) {\n if (!periodSearch) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, '0');\n }\n\n if (this.quoteState) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromQuoteFilter(\n this.quoteState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n if (this._isWorkFormContext()) {\n if (!periodSearch) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(this.periodSearchTypeFavorite, '0');\n }\n\n if (this.workFormState) {\n periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromWorkFormFilter(\n this.workFormState.documentFilter,\n periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n }\n }\n\n this.periodSearch = periodSearch;\n }\n\n private _initTextFilter(textFilter: string): void {\n this.gridFilter = new GridFilterModel(textFilter);\n this._highlightService.compileFilter(textFilter);\n }\n\n private _initTextFilterContext(): void {\n if (this._isDeliveryFormContext()) {\n if (this.deliveryFormState && this.deliveryFormState.documentFilter) {\n this._initTextFilter(this.deliveryFormState.documentFilter.textFilter);\n }\n }\n\n if (this._isFittingFormContext()) {\n if (this.fittingFormState && this.fittingFormState.documentFilter) {\n this._initTextFilter(this.fittingFormState.documentFilter.textFilter);\n }\n }\n\n if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.documentFilter) {\n this._initTextFilter(this.invoiceState.documentFilter.textFilter);\n }\n }\n\n if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.documentFilter) {\n this._initTextFilter(this.proFormaState.documentFilter.textFilter);\n }\n }\n\n if (this._isQuoteContext()) {\n if (this.quoteState && this.quoteState.documentFilter) {\n this._initTextFilter(this.quoteState.documentFilter.textFilter);\n }\n }\n\n if (this._isWorkFormContext()) {\n if (this.workFormState && this.workFormState.documentFilter) {\n this._initTextFilter(this.workFormState.documentFilter.textFilter);\n }\n }\n }\n\n private _isDeliveryFormContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexDeliveryForm].label;\n }\n\n private _isFittingFormContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexFittingForm].label;\n }\n\n private _isInvoiceContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexInvoicedDeliveryForm].label;\n }\n\n private _isProFormaContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexProFormaDeliveryForm].label;\n }\n\n private _isQuoteContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexQuote].label;\n }\n\n private _isWorkFormContext(): boolean {\n return this.activeLink.label === this.navLinks[this.tabIndexWorkForm].label;\n }\n\n private _loadDeliveryFormState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n stateUrl,\n ProductionFlowComponent.strDeliveryFormState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.deliveryFormState.documentFilter);\n this._setDeliveryRouteFilter(this.deliveryFormState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromDeliveryFormFilter(this.deliveryFormState.documentFilter);\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.deliveryFormState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadFittingFormState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n stateUrl,\n ProductionFlowComponent.strFittingFormState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.fittingFormState.documentFilter);\n this._setDeliveryRouteFilter(this.fittingFormState.documentFilter);\n this._setDocumentStatus(this.fittingFormState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromFittingFormFilter(this.fittingFormState.documentFilter);\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromFittingFormFilter(\n this.fittingFormState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadInvoiceState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.invoiceState,\n stateUrl,\n ProductionFlowComponent.strInvoiceState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.invoiceState.documentFilter);\n this._setDeliveryRouteFilter(this.invoiceState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromDeliveryFormFilter(this.invoiceState.documentFilter);\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.invoiceState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadProFormaState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.proFormaState,\n stateUrl,\n ProductionFlowComponent.strProFormaState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.proFormaState.documentFilter);\n this._setDeliveryRouteFilter(this.proFormaState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromDeliveryFormFilter(this.proFormaState.documentFilter);\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromDeliveryFormFilter(\n this.proFormaState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadQuoteState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.quoteState,\n stateUrl,\n ProductionFlowComponent.strQuoteState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.quoteState.documentFilter);\n this._setDocumentStatus(this.quoteState.documentFilter);\n this._setDeliveryRouteFilter(this.quoteState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromQuoteFilter(this.quoteState.documentFilter);\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromQuoteFilter(\n this.quoteState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _loadState(stateUrl: string): void {\n let shouldReloadFlag = true;\n this._initFavoriteContext(!stateUrl);\n\n if (this._isDeliveryFormContext()) {\n shouldReloadFlag = this._loadDeliveryFormState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.deliveryFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeFittingFormStateFromDeliveryFormState();\n this._synchronizeInvoiceStateFromDeliveryFormState();\n this._synchronizeProFormaStateFromDeliveryFormState();\n this._synchronizeQuoteStateFromDeliveryFormState();\n this._synchronizeWorkFormStateFromDeliveryFormState();\n }\n\n if (this._isFittingFormContext()) {\n shouldReloadFlag = this._loadFittingFormState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.fittingFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeDeliveryFormStateFromFittingFormState();\n this._synchronizeInvoiceStateFromFittingFormState();\n this._synchronizeProFormaStateFromFittingFormState();\n this._synchronizeQuoteStateFromFittingFormState();\n this._synchronizeWorkFormStateFromFittingFormState();\n }\n\n if (this._isInvoiceContext()) {\n shouldReloadFlag = this._loadInvoiceState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeDeliveryFormStateFromInvoiceState();\n this._synchronizeFittingFormStateFromInvoiceState();\n this._synchronizeProFormaStateFromInvoiceState();\n this._synchronizeQuoteStateFromInvoiceState();\n this._synchronizeWorkFormStateFromInvoiceState();\n }\n\n if (this._isProFormaContext()) {\n shouldReloadFlag = this._loadProFormaState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeDeliveryFormStateFromProFormaState();\n this._synchronizeFittingFormStateFromProFormaState();\n this._synchronizeInvoiceStateFromProFormaState();\n this._synchronizeQuoteStateFromProFormaState();\n this._synchronizeWorkFormStateFromProFormaState();\n }\n\n if (this._isQuoteContext()) {\n shouldReloadFlag = this._loadQuoteState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.quoteState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeDeliveryFormStateFromQuoteState();\n this._synchronizeFittingFormStateFromQuoteState();\n this._synchronizeInvoiceStateFromQuoteState();\n this._synchronizeProFormaStateFromQuoteState();\n this._synchronizeWorkFormStateFromQuoteState();\n }\n\n if (this._isWorkFormContext()) {\n shouldReloadFlag = this._loadWorkFormState(stateUrl, shouldReloadFlag);\n this.sortSetToDefaultValueFlag = this.workFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.workFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n this._synchronizeDeliveryFormStateFromWorkFormState();\n this._synchronizeFittingFormStateFromWorkFormState();\n this._synchronizeInvoiceStateFromWorkFormState();\n this._synchronizeProFormaStateFromWorkFormState();\n this._synchronizeQuoteStateFromWorkFormState();\n }\n\n if (shouldReloadFlag) {\n this._selfNavigate(true);\n return;\n }\n }\n\n private _loadWorkFormState(stateUrl: string, shouldReloadFlag: boolean): boolean {\n shouldReloadFlag = this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.workFormState,\n stateUrl,\n ProductionFlowComponent.strWorkFormState\n );\n this._initFavoriteContext(false);\n this._setCustomerUuid(this.workFormState.documentFilter);\n this._setDocumentStatus(this.workFormState.documentFilter);\n this._setDeliveryRouteFilter(this.workFormState.documentFilter);\n this.advancedFilterPanel = AdvancedFilterPanelModelHelper.fromWorkFormFilter(this.workFormState.documentFilter);\n this.periodSearch = LaboratoryAreaPeriodSearchModelHelper.fromWorkFormFilter(\n this.workFormState.documentFilter,\n this.periodSearch.periodSearchInfo,\n this.periodSearchTypeFavorite\n );\n\n return shouldReloadFlag;\n }\n\n private _resetPageIndex(): void {\n if (this.deliveryFormState) {\n this.deliveryFormState.pageIndex = 0;\n }\n\n if (this.fittingFormState) {\n this.fittingFormState.pageIndex = 0;\n }\n\n if (this.invoiceState) {\n this.invoiceState.pageIndex = 0;\n }\n\n if (this.proFormaState) {\n this.proFormaState.pageIndex = 0;\n }\n\n if (this.quoteState) {\n this.quoteState.pageIndex = 0;\n }\n\n if (this.workFormState) {\n this.workFormState.pageIndex = 0;\n }\n }\n\n private _saveCurrentState(sort: string[], state: PaginatedListState, strKeySortFavorite: string): void {\n sort.push(state.sortDirection, state.sortActive);\n this._localStorageService.write(strKeySortFavorite, sort);\n\n // Update current favorite into the gridsort\n state.updateFavoriteSortFromCurrentSort();\n PaginatedListState.setSortState(this._gridSortComponent, state);\n }\n\n private _saveStateAndSelfNavigate(replaceUrl = false): void {\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n this._sessionStorageService.write(ProductionFlowComponent.strWorkFormState, this.workFormState);\n\n if (this._isDeliveryFormContext()) {\n this.sortSetToDefaultValueFlag = this.deliveryFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.deliveryFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isFittingFormContext()) {\n this.sortSetToDefaultValueFlag = this.fittingFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.fittingFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isInvoiceContext()) {\n this.sortSetToDefaultValueFlag = this.invoiceState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.invoiceState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isProFormaContext()) {\n this.sortSetToDefaultValueFlag = this.proFormaState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.proFormaState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isQuoteContext()) {\n this.sortSetToDefaultValueFlag = this.quoteState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.quoteState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n } else if (this._isWorkFormContext()) {\n this.sortSetToDefaultValueFlag = this.workFormState.isSortSetToDefaultValues();\n this.filterSetToDefaultValueFlag = this.workFormState.isFilterSetToDefaultAndFavoriteValues(this.periodSearchTypeFavorite);\n }\n\n this._selfNavigate(replaceUrl);\n }\n\n private _selfNavigate(replaceUrl = false): void {\n if (this._isDeliveryFormContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.deliveryFormState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isFittingFormContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.fittingFormState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isInvoiceContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.invoiceState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isProFormaContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.proFormaState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isQuoteContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.quoteState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n } else if (this._isWorkFormContext()) {\n this._router.navigate([this.activeLink.link], {\n relativeTo: this._activatedRoute,\n queryParams: { pstate: JSON.stringify(this.workFormState) },\n queryParamsHandling: 'merge',\n replaceUrl: replaceUrl,\n state: { replaceUrlFlag: replaceUrl },\n });\n }\n }\n\n private _setCustomerUuid(documentFilter: DocumentFilter): void {\n let customerUuid = null;\n if (documentFilter.customerGroupUuids && documentFilter.customerGroupUuids.length > 0) {\n customerUuid = documentFilter.customerGroupUuids[0];\n } else {\n if (documentFilter.customerUuids && documentFilter.customerUuids.length > 0) {\n customerUuid = documentFilter.customerUuids[0];\n }\n }\n this.customerFilterUuid = customerUuid;\n\n this._preselectionService.setProductionFlowCustomer(customerUuid);\n }\n\n private _setDeliveryRouteFilter(documentFilter: DocumentFilter): void {\n let _deliveryRouteFilterSelection = new Array();\n\n const optionDeliveryRoutes = new Array();\n documentFilter.deliveryRoutes?.forEach((optionDeliveryRoute: number) => {\n const option = this.deliveryRouteFilterOptions?.find((x) => FormTimeModelHelper.toTime(x.label) === optionDeliveryRoute);\n if (option) {\n optionDeliveryRoutes.push(option);\n }\n });\n const optionExcludedDeliveryRoutes = new Array();\n documentFilter.excludedDeliveryRoutes?.forEach((optionDeliveryRoute: number) => {\n const option = this.deliveryRouteFilterOptions?.find((x) => FormTimeModelHelper.toTime(x.label) === optionDeliveryRoute);\n if (option) {\n optionExcludedDeliveryRoutes.push(option);\n }\n });\n const optionNoneDeliveryRouteFlag = this.deliveryRouteFilterOptions?.find((x) => x.key === '0');\n const optionExcludedDeliveryRouteFlag = this.deliveryRouteFilterOptions?.find((x) => x.key === '1');\n\n if (documentFilter.noneDeliveryRouteFlag) {\n if (documentFilter.deliveryRoutes && documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = optionDeliveryRoutes;\n _deliveryRouteFilterSelection.push(optionNoneDeliveryRouteFlag);\n _deliveryRouteFilterSelection.push(optionExcludedDeliveryRouteFlag);\n }\n\n if (!documentFilter.deliveryRoutes && !documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection.push(optionNoneDeliveryRouteFlag);\n }\n\n if (documentFilter.deliveryRoutes && !documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = optionDeliveryRoutes;\n _deliveryRouteFilterSelection.push(optionNoneDeliveryRouteFlag);\n }\n\n if (!documentFilter.deliveryRoutes && documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection.push(optionExcludedDeliveryRouteFlag);\n _deliveryRouteFilterSelection.push(optionNoneDeliveryRouteFlag);\n }\n } else {\n if (documentFilter.deliveryRoutes && documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = optionDeliveryRoutes;\n _deliveryRouteFilterSelection.push(optionExcludedDeliveryRouteFlag);\n }\n if (!documentFilter.deliveryRoutes && !documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = new Array();\n }\n if (documentFilter.deliveryRoutes && !documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection = optionDeliveryRoutes;\n }\n if (!documentFilter.deliveryRoutes && documentFilter.excludedDeliveryRoutes) {\n _deliveryRouteFilterSelection.push(optionExcludedDeliveryRouteFlag);\n }\n }\n\n this.deliveryRouteFilterSelection = _deliveryRouteFilterSelection;\n }\n\n private _setDocumentStatus(documentFilter: DocumentFilter): void {\n this.documentStateSelected = DocumentStatusHelper.convertToComboModel(documentFilter.status);\n }\n\n private _setSectorFilter(documentFilter: DocumentFilter): void {\n let sectorOrSpecialtyUuid: string;\n if (documentFilter.specialtyUuids && documentFilter.specialtyUuids.length > 0) {\n sectorOrSpecialtyUuid = documentFilter.specialtyUuids[0];\n } else if (documentFilter.sectorUuid) {\n sectorOrSpecialtyUuid = documentFilter.sectorUuid;\n } else if (documentFilter.noneSpecialtyFlag) {\n sectorOrSpecialtyUuid = SectorOrSpecialtyModelHelper.unspecifiedSectorOrSpecialtyKey.toString();\n } else {\n sectorOrSpecialtyUuid = null;\n }\n\n if (this.sectorOrSpecialtyUuidSelected && !sectorOrSpecialtyUuid) {\n this.sectorOrSpecialtyUuidSelected = null;\n }\n if (sectorOrSpecialtyUuid) {\n // Try to find the sectorOrSpecialty filter inside the sectorOrSpecialties\n const sectorOrSpecialty = this.sectorOrSpecialties.find((sectorOrSpecialty) => sectorOrSpecialty.key === sectorOrSpecialtyUuid);\n if (sectorOrSpecialty) {\n this.sectorOrSpecialtyUuidSelected = sectorOrSpecialty.key;\n this.laboratoryResourceSectorOrSpecialtyDefaultValue = sectorOrSpecialty;\n }\n // If not found inside the sectorModels, remove this filter from the state\n // Then ask for a registration in session storage and a reload\n if (!sectorOrSpecialty) {\n this.sectorOrSpecialtyUuidSelected = null;\n this.laboratoryResourceSectorOrSpecialtyDefaultValue = null;\n }\n }\n }\n\n private _synchronizeDeliveryFormStateFromFittingFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n null,\n ProductionFlowComponent.strDeliveryFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.deliveryFormState.documentFilter,\n this.fittingFormState.documentFilter\n );\n\n this.deliveryFormState.documentFilter.customerGroupUuids = this.fittingFormState.documentFilter.customerGroupUuids;\n this.deliveryFormState.documentFilter.customerUuids = this.fittingFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.deliveryFormState.documentFilter.deliveryRoutes = this.fittingFormState.documentFilter.deliveryRoutes;\n this.deliveryFormState.documentFilter.excludedDeliveryRoutes = this.fittingFormState.documentFilter.excludedDeliveryRoutes;\n this.deliveryFormState.documentFilter.noneDeliveryRouteFlag = this.fittingFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.deliveryFormState.documentFilter.sectorUuid = this.fittingFormState.documentFilter.sectorUuid;\n this.deliveryFormState.documentFilter.specialtyUuids = this.fittingFormState.documentFilter.specialtyUuids;\n this.deliveryFormState.documentFilter.noneSpecialtyFlag = this.fittingFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.deliveryFormState.documentFilter.periodSearchPage = this.fittingFormState.documentFilter.periodSearchPage;\n this.deliveryFormState.documentFilter.periodSearchType = this.fittingFormState.documentFilter.periodSearchType;\n\n if (!this.fittingFormState.documentFilter.periodSearchType && this.fittingFormState.documentFilter.periodSearchType !== 0) {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.fittingFormState.documentFilter.toDeliveryDate;\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = null;\n this.deliveryFormState.documentFilter.toDeliveryDate = null;\n }\n\n this.deliveryFormState.documentFilter.fromInvoiceDate = null;\n this.deliveryFormState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n }\n\n private _synchronizeDeliveryFormStateFromInvoiceState(): void {\n // synchronize the delivery form state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n null,\n ProductionFlowComponent.strDeliveryFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.deliveryFormState.documentFilter,\n this.invoiceState.documentFilter\n );\n\n this.deliveryFormState.documentFilter.customerGroupUuids = this.invoiceState.documentFilter.customerGroupUuids;\n this.deliveryFormState.documentFilter.customerUuids = this.invoiceState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.deliveryFormState.documentFilter.deliveryRoutes = this.invoiceState.documentFilter.deliveryRoutes;\n this.deliveryFormState.documentFilter.excludedDeliveryRoutes = this.invoiceState.documentFilter.excludedDeliveryRoutes;\n this.deliveryFormState.documentFilter.noneDeliveryRouteFlag = this.invoiceState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.deliveryFormState.documentFilter.sectorUuid = this.invoiceState.documentFilter.sectorUuid;\n this.deliveryFormState.documentFilter.specialtyUuids = this.invoiceState.documentFilter.specialtyUuids;\n this.deliveryFormState.documentFilter.noneSpecialtyFlag = this.invoiceState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.deliveryFormState.documentFilter.periodSearchPage = this.invoiceState.documentFilter.periodSearchPage;\n this.deliveryFormState.documentFilter.periodSearchType = this.invoiceState.documentFilter.periodSearchType;\n\n if (!this.invoiceState.documentFilter.periodSearchType && this.invoiceState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromDeliveryDate) {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromDeliveryDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toDeliveryDate;\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromInvoiceDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toInvoiceDate;\n }\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = null;\n this.deliveryFormState.documentFilter.toDeliveryDate = null;\n }\n\n this.deliveryFormState.documentFilter.fromInvoiceDate = null;\n this.deliveryFormState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n }\n\n private _synchronizeDeliveryFormStateFromProFormaState(): void {\n // synchronize the delivery form state with the loaded pro forma state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n null,\n ProductionFlowComponent.strDeliveryFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.deliveryFormState.documentFilter,\n this.proFormaState.documentFilter\n );\n\n this.deliveryFormState.documentFilter.customerGroupUuids = this.proFormaState.documentFilter.customerGroupUuids;\n this.deliveryFormState.documentFilter.customerUuids = this.proFormaState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.deliveryFormState.documentFilter.deliveryRoutes = this.proFormaState.documentFilter.deliveryRoutes;\n this.deliveryFormState.documentFilter.excludedDeliveryRoutes = this.proFormaState.documentFilter.excludedDeliveryRoutes;\n this.deliveryFormState.documentFilter.noneDeliveryRouteFlag = this.proFormaState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.deliveryFormState.documentFilter.sectorUuid = this.proFormaState.documentFilter.sectorUuid;\n this.deliveryFormState.documentFilter.specialtyUuids = this.proFormaState.documentFilter.specialtyUuids;\n this.deliveryFormState.documentFilter.noneSpecialtyFlag = this.proFormaState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.deliveryFormState.documentFilter.periodSearchPage = this.proFormaState.documentFilter.periodSearchPage;\n this.deliveryFormState.documentFilter.periodSearchType = this.proFormaState.documentFilter.periodSearchType;\n\n if (!this.proFormaState.documentFilter.periodSearchType && this.proFormaState.documentFilter.periodSearchType !== 0) {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.proFormaState.documentFilter.toDeliveryDate;\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = null;\n this.deliveryFormState.documentFilter.toDeliveryDate = null;\n }\n\n this.deliveryFormState.documentFilter.fromInvoiceDate = null;\n this.deliveryFormState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n }\n\n private _synchronizeDeliveryFormStateFromQuoteState(): void {\n // synchronize the delivery form state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n null,\n ProductionFlowComponent.strDeliveryFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.deliveryFormState.documentFilter,\n this.quoteState.documentFilter\n );\n\n this.deliveryFormState.documentFilter.customerGroupUuids = this.quoteState.documentFilter.customerGroupUuids;\n this.deliveryFormState.documentFilter.customerUuids = this.quoteState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.deliveryFormState.documentFilter.deliveryRoutes = this.quoteState.documentFilter.deliveryRoutes;\n this.deliveryFormState.documentFilter.excludedDeliveryRoutes = this.quoteState.documentFilter.excludedDeliveryRoutes;\n this.deliveryFormState.documentFilter.noneDeliveryRouteFlag = this.quoteState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.deliveryFormState.documentFilter.sectorUuid = this.quoteState.documentFilter.sectorUuid;\n this.deliveryFormState.documentFilter.specialtyUuids = this.quoteState.documentFilter.specialtyUuids;\n this.deliveryFormState.documentFilter.noneSpecialtyFlag = this.quoteState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.deliveryFormState.documentFilter.periodSearchPage = this.quoteState.documentFilter.periodSearchPage;\n this.deliveryFormState.documentFilter.periodSearchType = this.quoteState.documentFilter.periodSearchType;\n\n if (!this.quoteState.documentFilter.periodSearchType && this.quoteState.documentFilter.periodSearchType !== 0) {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.quoteState.documentFilter.fromQuoteDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.quoteState.documentFilter.toQuoteDate;\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = null;\n this.deliveryFormState.documentFilter.toDeliveryDate = null;\n }\n\n this.deliveryFormState.documentFilter.fromInvoiceDate = null;\n this.deliveryFormState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n }\n\n private _synchronizeDeliveryFormStateFromWorkFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.deliveryFormState,\n null,\n ProductionFlowComponent.strDeliveryFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.deliveryFormState.documentFilter, this.workFormState.documentFilter);\n\n this.deliveryFormState.documentFilter.customerGroupUuids = this.workFormState.documentFilter.customerGroupUuids;\n this.deliveryFormState.documentFilter.customerUuids = this.workFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.deliveryFormState.documentFilter.deliveryRoutes = this.workFormState.documentFilter.deliveryRoutes;\n this.deliveryFormState.documentFilter.excludedDeliveryRoutes = this.workFormState.documentFilter.excludedDeliveryRoutes;\n this.deliveryFormState.documentFilter.noneDeliveryRouteFlag = this.workFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.deliveryFormState.documentFilter.sectorUuid = this.workFormState.documentFilter.sectorUuid;\n this.deliveryFormState.documentFilter.specialtyUuids = this.workFormState.documentFilter.specialtyUuids;\n this.deliveryFormState.documentFilter.noneSpecialtyFlag = this.workFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.deliveryFormState.documentFilter.periodSearchPage = this.workFormState.documentFilter.periodSearchPage;\n this.deliveryFormState.documentFilter.periodSearchType = this.workFormState.documentFilter.periodSearchType;\n\n if (!this.workFormState.documentFilter.periodSearchType && this.workFormState.documentFilter.periodSearchType !== 0) {\n this.deliveryFormState.documentFilter.fromDeliveryDate = this.workFormState.documentFilter.fromDeliveryDate;\n this.deliveryFormState.documentFilter.toDeliveryDate = this.workFormState.documentFilter.toDeliveryDate;\n } else {\n this.deliveryFormState.documentFilter.fromDeliveryDate = null;\n this.deliveryFormState.documentFilter.toDeliveryDate = null;\n }\n\n this.deliveryFormState.documentFilter.fromInvoiceDate = null;\n this.deliveryFormState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strDeliveryFormState, this.deliveryFormState);\n }\n\n private _synchronizeFittingFormStateFromDeliveryFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n null,\n ProductionFlowComponent.strFittingFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.fittingFormState.documentFilter,\n this.deliveryFormState.documentFilter\n );\n\n this.fittingFormState.documentFilter.customerGroupUuids = this.deliveryFormState.documentFilter.customerGroupUuids;\n this.fittingFormState.documentFilter.customerUuids = this.deliveryFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.fittingFormState.documentFilter.deliveryRoutes = this.deliveryFormState.documentFilter.deliveryRoutes;\n this.fittingFormState.documentFilter.excludedDeliveryRoutes = this.deliveryFormState.documentFilter.excludedDeliveryRoutes;\n this.fittingFormState.documentFilter.noneDeliveryRouteFlag = this.deliveryFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.fittingFormState.documentFilter.sectorUuid = this.deliveryFormState.documentFilter.sectorUuid;\n this.fittingFormState.documentFilter.specialtyUuids = this.deliveryFormState.documentFilter.specialtyUuids;\n this.fittingFormState.documentFilter.noneSpecialtyFlag = this.deliveryFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.fittingFormState.documentFilter.periodSearchPage = this.deliveryFormState.documentFilter.periodSearchPage;\n this.fittingFormState.documentFilter.periodSearchType = this.deliveryFormState.documentFilter.periodSearchType;\n\n if (!this.deliveryFormState.documentFilter.periodSearchType && this.deliveryFormState.documentFilter.periodSearchType !== 0) {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = null;\n this.fittingFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n }\n\n private _synchronizeFittingFormStateFromInvoiceState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n null,\n ProductionFlowComponent.strFittingFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.fittingFormState.documentFilter,\n this.invoiceState.documentFilter\n );\n\n this.fittingFormState.documentFilter.customerGroupUuids = this.invoiceState.documentFilter.customerGroupUuids;\n this.fittingFormState.documentFilter.customerUuids = this.invoiceState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.fittingFormState.documentFilter.deliveryRoutes = this.invoiceState.documentFilter.deliveryRoutes;\n this.fittingFormState.documentFilter.excludedDeliveryRoutes = this.invoiceState.documentFilter.excludedDeliveryRoutes;\n this.fittingFormState.documentFilter.noneDeliveryRouteFlag = this.invoiceState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.fittingFormState.documentFilter.sectorUuid = this.invoiceState.documentFilter.sectorUuid;\n this.fittingFormState.documentFilter.specialtyUuids = this.invoiceState.documentFilter.specialtyUuids;\n this.fittingFormState.documentFilter.noneSpecialtyFlag = this.invoiceState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.fittingFormState.documentFilter.periodSearchPage = this.invoiceState.documentFilter.periodSearchPage;\n this.fittingFormState.documentFilter.periodSearchType = this.invoiceState.documentFilter.periodSearchType;\n\n if (!this.invoiceState.documentFilter.periodSearchType && this.invoiceState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromDeliveryDate) {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromDeliveryDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toDeliveryDate;\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromInvoiceDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toInvoiceDate;\n }\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = null;\n this.fittingFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n }\n\n private _synchronizeFittingFormStateFromProFormaState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n null,\n ProductionFlowComponent.strFittingFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.fittingFormState.documentFilter,\n this.proFormaState.documentFilter\n );\n\n this.fittingFormState.documentFilter.customerGroupUuids = this.proFormaState.documentFilter.customerGroupUuids;\n this.fittingFormState.documentFilter.customerUuids = this.proFormaState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.fittingFormState.documentFilter.deliveryRoutes = this.proFormaState.documentFilter.deliveryRoutes;\n this.fittingFormState.documentFilter.excludedDeliveryRoutes = this.proFormaState.documentFilter.excludedDeliveryRoutes;\n this.fittingFormState.documentFilter.noneDeliveryRouteFlag = this.proFormaState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.fittingFormState.documentFilter.sectorUuid = this.proFormaState.documentFilter.sectorUuid;\n this.fittingFormState.documentFilter.specialtyUuids = this.proFormaState.documentFilter.specialtyUuids;\n this.fittingFormState.documentFilter.noneSpecialtyFlag = this.proFormaState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.fittingFormState.documentFilter.periodSearchPage = this.proFormaState.documentFilter.periodSearchPage;\n this.fittingFormState.documentFilter.periodSearchType = this.proFormaState.documentFilter.periodSearchType;\n\n if (!this.proFormaState.documentFilter.periodSearchType && this.proFormaState.documentFilter.periodSearchType !== 0) {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.proFormaState.documentFilter.toDeliveryDate;\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = null;\n this.fittingFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n }\n\n private _synchronizeFittingFormStateFromQuoteState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n null,\n ProductionFlowComponent.strFittingFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(this.fittingFormState.documentFilter, this.quoteState.documentFilter);\n\n this.fittingFormState.documentFilter.customerGroupUuids = this.quoteState.documentFilter.customerGroupUuids;\n this.fittingFormState.documentFilter.customerUuids = this.quoteState.documentFilter.customerUuids;\n this.fittingFormState.documentFilter.status = this.quoteState.documentFilter.status;\n // synchronize delivery routes filter\n this.fittingFormState.documentFilter.deliveryRoutes = this.quoteState.documentFilter.deliveryRoutes;\n this.fittingFormState.documentFilter.excludedDeliveryRoutes = this.quoteState.documentFilter.excludedDeliveryRoutes;\n this.fittingFormState.documentFilter.noneDeliveryRouteFlag = this.quoteState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.fittingFormState.documentFilter.sectorUuid = this.quoteState.documentFilter.sectorUuid;\n this.fittingFormState.documentFilter.specialtyUuids = this.quoteState.documentFilter.specialtyUuids;\n this.fittingFormState.documentFilter.noneSpecialtyFlag = this.quoteState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.fittingFormState.documentFilter.periodSearchPage = this.quoteState.documentFilter.periodSearchPage;\n this.fittingFormState.documentFilter.periodSearchType = this.quoteState.documentFilter.periodSearchType;\n\n if (!this.quoteState.documentFilter.periodSearchType && this.quoteState.documentFilter.periodSearchType !== 0) {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.quoteState.documentFilter.fromQuoteDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.quoteState.documentFilter.toQuoteDate;\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = null;\n this.fittingFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n }\n\n private _synchronizeFittingFormStateFromWorkFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(\n this.fittingFormState,\n null,\n ProductionFlowComponent.strFittingFormState\n );\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.fittingFormState.documentFilter, this.workFormState.documentFilter);\n\n this.fittingFormState.documentFilter.customerGroupUuids = this.workFormState.documentFilter.customerGroupUuids;\n this.fittingFormState.documentFilter.customerUuids = this.workFormState.documentFilter.customerUuids;\n this.fittingFormState.documentFilter.status = this.workFormState.documentFilter.status;\n // synchronize delivery routes filter\n this.fittingFormState.documentFilter.deliveryRoutes = this.workFormState.documentFilter.deliveryRoutes;\n this.fittingFormState.documentFilter.excludedDeliveryRoutes = this.workFormState.documentFilter.excludedDeliveryRoutes;\n this.fittingFormState.documentFilter.noneDeliveryRouteFlag = this.workFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.fittingFormState.documentFilter.sectorUuid = this.workFormState.documentFilter.sectorUuid;\n this.fittingFormState.documentFilter.specialtyUuids = this.workFormState.documentFilter.specialtyUuids;\n this.fittingFormState.documentFilter.noneSpecialtyFlag = this.workFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.fittingFormState.documentFilter.periodSearchPage = this.workFormState.documentFilter.periodSearchPage;\n this.fittingFormState.documentFilter.periodSearchType = this.workFormState.documentFilter.periodSearchType;\n\n if (!this.workFormState.documentFilter.periodSearchType && this.workFormState.documentFilter.periodSearchType !== 0) {\n this.fittingFormState.documentFilter.fromDeliveryDate = this.workFormState.documentFilter.fromDeliveryDate;\n this.fittingFormState.documentFilter.toDeliveryDate = this.workFormState.documentFilter.toDeliveryDate;\n } else {\n this.fittingFormState.documentFilter.fromDeliveryDate = null;\n this.fittingFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strFittingFormState, this.fittingFormState);\n }\n\n private _synchronizeInvoiceStateFromDeliveryFormState(): void {\n // synchronize the invoice state with the loaded delivery form state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, ProductionFlowComponent.strInvoiceState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.invoiceState.documentFilter,\n this.deliveryFormState.documentFilter\n );\n\n this.invoiceState.documentFilter.customerGroupUuids = this.deliveryFormState.documentFilter.customerGroupUuids;\n this.invoiceState.documentFilter.customerUuids = this.deliveryFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.invoiceState.documentFilter.deliveryRoutes = this.deliveryFormState.documentFilter.deliveryRoutes;\n this.invoiceState.documentFilter.excludedDeliveryRoutes = this.deliveryFormState.documentFilter.excludedDeliveryRoutes;\n this.invoiceState.documentFilter.noneDeliveryRouteFlag = this.deliveryFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.invoiceState.documentFilter.sectorUuid = this.deliveryFormState.documentFilter.sectorUuid;\n this.invoiceState.documentFilter.specialtyUuids = this.deliveryFormState.documentFilter.specialtyUuids;\n this.invoiceState.documentFilter.noneSpecialtyFlag = this.deliveryFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.invoiceState.documentFilter.periodSearchPage = this.deliveryFormState.documentFilter.periodSearchPage;\n this.invoiceState.documentFilter.periodSearchType = this.deliveryFormState.documentFilter.periodSearchType;\n\n if (!this.deliveryFormState.documentFilter.periodSearchType && this.deliveryFormState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromInvoiceDate) {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toInvoiceDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toDeliveryDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeInvoiceStateFromFittingFormState(): void {\n // synchronize the invoice state with the loaded delivery form state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, ProductionFlowComponent.strInvoiceState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.invoiceState.documentFilter,\n this.fittingFormState.documentFilter\n );\n\n this.invoiceState.documentFilter.customerGroupUuids = this.fittingFormState.documentFilter.customerGroupUuids;\n this.invoiceState.documentFilter.customerUuids = this.fittingFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.invoiceState.documentFilter.deliveryRoutes = this.fittingFormState.documentFilter.deliveryRoutes;\n this.invoiceState.documentFilter.excludedDeliveryRoutes = this.fittingFormState.documentFilter.excludedDeliveryRoutes;\n this.invoiceState.documentFilter.noneDeliveryRouteFlag = this.fittingFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.invoiceState.documentFilter.sectorUuid = this.fittingFormState.documentFilter.sectorUuid;\n this.invoiceState.documentFilter.specialtyUuids = this.fittingFormState.documentFilter.specialtyUuids;\n this.invoiceState.documentFilter.noneSpecialtyFlag = this.fittingFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.invoiceState.documentFilter.periodSearchPage = this.fittingFormState.documentFilter.periodSearchPage;\n this.invoiceState.documentFilter.periodSearchType = this.fittingFormState.documentFilter.periodSearchType;\n\n if (!this.fittingFormState.documentFilter.periodSearchType && this.fittingFormState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromInvoiceDate) {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toInvoiceDate = this.fittingFormState.documentFilter.toDeliveryDate;\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toDeliveryDate = this.fittingFormState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeInvoiceStateFromProFormaState(): void {\n // synchronize the invoice state with the loaded pro forma state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, ProductionFlowComponent.strInvoiceState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(this.invoiceState.documentFilter, this.proFormaState.documentFilter);\n\n this.invoiceState.documentFilter.customerGroupUuids = this.proFormaState.documentFilter.customerGroupUuids;\n this.invoiceState.documentFilter.customerUuids = this.proFormaState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.invoiceState.documentFilter.deliveryRoutes = this.proFormaState.documentFilter.deliveryRoutes;\n this.invoiceState.documentFilter.excludedDeliveryRoutes = this.proFormaState.documentFilter.excludedDeliveryRoutes;\n this.invoiceState.documentFilter.noneDeliveryRouteFlag = this.proFormaState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.invoiceState.documentFilter.sectorUuid = this.proFormaState.documentFilter.sectorUuid;\n this.invoiceState.documentFilter.specialtyUuids = this.proFormaState.documentFilter.specialtyUuids;\n this.invoiceState.documentFilter.noneSpecialtyFlag = this.proFormaState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.invoiceState.documentFilter.periodSearchPage = this.proFormaState.documentFilter.periodSearchPage;\n this.invoiceState.documentFilter.periodSearchType = this.proFormaState.documentFilter.periodSearchType;\n\n if (!this.proFormaState.documentFilter.periodSearchType && this.proFormaState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromInvoiceDate) {\n this.invoiceState.documentFilter.fromInvoiceDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toInvoiceDate = this.proFormaState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toDeliveryDate = this.proFormaState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeInvoiceStateFromQuoteState(): void {\n // synchronize the invoice state with the loaded quote state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, ProductionFlowComponent.strInvoiceState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(this.invoiceState.documentFilter, this.quoteState.documentFilter);\n\n this.invoiceState.documentFilter.customerGroupUuids = this.quoteState.documentFilter.customerGroupUuids;\n this.invoiceState.documentFilter.customerUuids = this.quoteState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.invoiceState.documentFilter.deliveryRoutes = this.quoteState.documentFilter.deliveryRoutes;\n this.invoiceState.documentFilter.excludedDeliveryRoutes = this.quoteState.documentFilter.excludedDeliveryRoutes;\n this.invoiceState.documentFilter.noneDeliveryRouteFlag = this.quoteState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.invoiceState.documentFilter.sectorUuid = this.quoteState.documentFilter.sectorUuid;\n this.invoiceState.documentFilter.specialtyUuids = this.quoteState.documentFilter.specialtyUuids;\n this.invoiceState.documentFilter.noneSpecialtyFlag = this.quoteState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.invoiceState.documentFilter.periodSearchPage = this.quoteState.documentFilter.periodSearchPage;\n this.invoiceState.documentFilter.periodSearchType = this.quoteState.documentFilter.periodSearchType;\n\n if (!this.quoteState.documentFilter.periodSearchType && this.quoteState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromInvoiceDate) {\n this.invoiceState.documentFilter.fromInvoiceDate = this.quoteState.documentFilter.fromQuoteDate;\n this.invoiceState.documentFilter.toInvoiceDate = this.quoteState.documentFilter.toQuoteDate;\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = this.quoteState.documentFilter.fromQuoteDate;\n this.invoiceState.documentFilter.toDeliveryDate = this.quoteState.documentFilter.toQuoteDate;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeInvoiceStateFromWorkFormState(): void {\n // synchronize the invoice state with the loaded delivery form state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.invoiceState, null, ProductionFlowComponent.strInvoiceState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.invoiceState.documentFilter, this.workFormState.documentFilter);\n\n this.invoiceState.documentFilter.customerGroupUuids = this.workFormState.documentFilter.customerGroupUuids;\n this.invoiceState.documentFilter.customerUuids = this.workFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.invoiceState.documentFilter.deliveryRoutes = this.workFormState.documentFilter.deliveryRoutes;\n this.invoiceState.documentFilter.excludedDeliveryRoutes = this.workFormState.documentFilter.excludedDeliveryRoutes;\n this.invoiceState.documentFilter.noneDeliveryRouteFlag = this.workFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.invoiceState.documentFilter.sectorUuid = this.workFormState.documentFilter.sectorUuid;\n this.invoiceState.documentFilter.specialtyUuids = this.workFormState.documentFilter.specialtyUuids;\n this.invoiceState.documentFilter.noneSpecialtyFlag = this.workFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.invoiceState.documentFilter.periodSearchPage = this.workFormState.documentFilter.periodSearchPage;\n this.invoiceState.documentFilter.periodSearchType = this.workFormState.documentFilter.periodSearchType;\n\n if (!this.workFormState.documentFilter.periodSearchType && this.workFormState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromInvoiceDate) {\n this.invoiceState.documentFilter.fromInvoiceDate = this.workFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toInvoiceDate = this.workFormState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = this.workFormState.documentFilter.fromDeliveryDate;\n this.invoiceState.documentFilter.toDeliveryDate = this.workFormState.documentFilter.toDeliveryDate;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n } else {\n this.invoiceState.documentFilter.fromDeliveryDate = null;\n this.invoiceState.documentFilter.toDeliveryDate = null;\n this.invoiceState.documentFilter.fromInvoiceDate = null;\n this.invoiceState.documentFilter.toInvoiceDate = null;\n }\n\n // register the synchronized invoice state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strInvoiceState, this.invoiceState);\n }\n\n private _synchronizeProFormaStateFromDeliveryFormState(): void {\n // synchronize the pro forma state with the loaded delivery form state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, ProductionFlowComponent.strProFormaState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.proFormaState.documentFilter,\n this.deliveryFormState.documentFilter\n );\n\n this.proFormaState.documentFilter.customerGroupUuids = this.deliveryFormState.documentFilter.customerGroupUuids;\n this.proFormaState.documentFilter.customerUuids = this.deliveryFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.proFormaState.documentFilter.deliveryRoutes = this.deliveryFormState.documentFilter.deliveryRoutes;\n this.proFormaState.documentFilter.excludedDeliveryRoutes = this.deliveryFormState.documentFilter.excludedDeliveryRoutes;\n this.proFormaState.documentFilter.noneDeliveryRouteFlag = this.deliveryFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.proFormaState.documentFilter.sectorUuid = this.deliveryFormState.documentFilter.sectorUuid;\n this.proFormaState.documentFilter.specialtyUuids = this.deliveryFormState.documentFilter.specialtyUuids;\n this.proFormaState.documentFilter.noneSpecialtyFlag = this.deliveryFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.proFormaState.documentFilter.periodSearchPage = this.deliveryFormState.documentFilter.periodSearchPage;\n this.proFormaState.documentFilter.periodSearchType = this.deliveryFormState.documentFilter.periodSearchType;\n\n if (!this.deliveryFormState.documentFilter.periodSearchType && this.deliveryFormState.documentFilter.periodSearchType !== 0) {\n this.proFormaState.documentFilter.fromDeliveryDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = null;\n this.proFormaState.documentFilter.toDeliveryDate = null;\n }\n\n this.proFormaState.documentFilter.fromInvoiceDate = null;\n this.proFormaState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized pro forma state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeProFormaStateFromFittingFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, ProductionFlowComponent.strProFormaState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.proFormaState.documentFilter,\n this.fittingFormState.documentFilter\n );\n\n this.proFormaState.documentFilter.customerGroupUuids = this.fittingFormState.documentFilter.customerGroupUuids;\n this.proFormaState.documentFilter.customerUuids = this.fittingFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.proFormaState.documentFilter.deliveryRoutes = this.fittingFormState.documentFilter.deliveryRoutes;\n this.proFormaState.documentFilter.excludedDeliveryRoutes = this.fittingFormState.documentFilter.excludedDeliveryRoutes;\n this.proFormaState.documentFilter.noneDeliveryRouteFlag = this.fittingFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.proFormaState.documentFilter.sectorUuid = this.fittingFormState.documentFilter.sectorUuid;\n this.proFormaState.documentFilter.specialtyUuids = this.fittingFormState.documentFilter.specialtyUuids;\n this.proFormaState.documentFilter.noneSpecialtyFlag = this.fittingFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.proFormaState.documentFilter.periodSearchPage = this.fittingFormState.documentFilter.periodSearchPage;\n this.proFormaState.documentFilter.periodSearchType = this.fittingFormState.documentFilter.periodSearchType;\n\n if (!this.fittingFormState.documentFilter.periodSearchType && this.fittingFormState.documentFilter.periodSearchType !== 0) {\n this.proFormaState.documentFilter.fromDeliveryDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.fittingFormState.documentFilter.toDeliveryDate;\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = null;\n this.proFormaState.documentFilter.toDeliveryDate = null;\n }\n\n this.proFormaState.documentFilter.fromInvoiceDate = null;\n this.proFormaState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized pro forma state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeProFormaStateFromInvoiceState(): void {\n // synchronize the pro forma state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, ProductionFlowComponent.strProFormaState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(this.proFormaState.documentFilter, this.invoiceState.documentFilter);\n\n this.proFormaState.documentFilter.customerGroupUuids = this.invoiceState.documentFilter.customerGroupUuids;\n this.proFormaState.documentFilter.customerUuids = this.invoiceState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.proFormaState.documentFilter.deliveryRoutes = this.invoiceState.documentFilter.deliveryRoutes;\n this.proFormaState.documentFilter.excludedDeliveryRoutes = this.invoiceState.documentFilter.excludedDeliveryRoutes;\n this.proFormaState.documentFilter.noneDeliveryRouteFlag = this.invoiceState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.proFormaState.documentFilter.sectorUuid = this.invoiceState.documentFilter.sectorUuid;\n this.proFormaState.documentFilter.specialtyUuids = this.invoiceState.documentFilter.specialtyUuids;\n this.proFormaState.documentFilter.noneSpecialtyFlag = this.invoiceState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.proFormaState.documentFilter.periodSearchPage = this.invoiceState.documentFilter.periodSearchPage;\n this.proFormaState.documentFilter.periodSearchType = this.invoiceState.documentFilter.periodSearchType;\n\n if (!this.invoiceState.documentFilter.periodSearchType && this.invoiceState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromDeliveryDate) {\n this.proFormaState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromDeliveryDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toDeliveryDate;\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromInvoiceDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toInvoiceDate;\n }\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = null;\n this.proFormaState.documentFilter.toDeliveryDate = null;\n }\n\n this.proFormaState.documentFilter.fromInvoiceDate = null;\n this.proFormaState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized pro forma state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeProFormaStateFromQuoteState(): void {\n // synchronize the pro forma state with the loaded invoice state\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, ProductionFlowComponent.strProFormaState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(this.proFormaState.documentFilter, this.quoteState.documentFilter);\n\n this.proFormaState.documentFilter.customerGroupUuids = this.quoteState.documentFilter.customerGroupUuids;\n this.proFormaState.documentFilter.customerUuids = this.quoteState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.proFormaState.documentFilter.deliveryRoutes = this.quoteState.documentFilter.deliveryRoutes;\n this.proFormaState.documentFilter.excludedDeliveryRoutes = this.quoteState.documentFilter.excludedDeliveryRoutes;\n this.proFormaState.documentFilter.noneDeliveryRouteFlag = this.quoteState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.proFormaState.documentFilter.sectorUuid = this.quoteState.documentFilter.sectorUuid;\n this.proFormaState.documentFilter.specialtyUuids = this.quoteState.documentFilter.specialtyUuids;\n this.proFormaState.documentFilter.noneSpecialtyFlag = this.quoteState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.proFormaState.documentFilter.periodSearchPage = this.quoteState.documentFilter.periodSearchPage;\n this.proFormaState.documentFilter.periodSearchType = this.quoteState.documentFilter.periodSearchType;\n\n if (!this.quoteState.documentFilter.periodSearchType && this.quoteState.documentFilter.periodSearchType !== 0) {\n this.proFormaState.documentFilter.fromDeliveryDate = this.quoteState.documentFilter.fromQuoteDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.quoteState.documentFilter.toQuoteDate;\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = null;\n this.proFormaState.documentFilter.toDeliveryDate = null;\n }\n\n this.proFormaState.documentFilter.fromInvoiceDate = null;\n this.proFormaState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized pro forma state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeProFormaStateFromWorkFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.proFormaState, null, ProductionFlowComponent.strProFormaState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.proFormaState.documentFilter, this.workFormState.documentFilter);\n\n this.proFormaState.documentFilter.customerGroupUuids = this.workFormState.documentFilter.customerGroupUuids;\n this.proFormaState.documentFilter.customerUuids = this.workFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.proFormaState.documentFilter.deliveryRoutes = this.workFormState.documentFilter.deliveryRoutes;\n this.proFormaState.documentFilter.excludedDeliveryRoutes = this.workFormState.documentFilter.excludedDeliveryRoutes;\n this.proFormaState.documentFilter.noneDeliveryRouteFlag = this.workFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.proFormaState.documentFilter.sectorUuid = this.workFormState.documentFilter.sectorUuid;\n this.proFormaState.documentFilter.specialtyUuids = this.workFormState.documentFilter.specialtyUuids;\n this.proFormaState.documentFilter.noneSpecialtyFlag = this.workFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.proFormaState.documentFilter.periodSearchPage = this.workFormState.documentFilter.periodSearchPage;\n this.proFormaState.documentFilter.periodSearchType = this.workFormState.documentFilter.periodSearchType;\n\n if (!this.workFormState.documentFilter.periodSearchType && this.workFormState.documentFilter.periodSearchType !== 0) {\n this.proFormaState.documentFilter.fromDeliveryDate = this.workFormState.documentFilter.fromDeliveryDate;\n this.proFormaState.documentFilter.toDeliveryDate = this.workFormState.documentFilter.toDeliveryDate;\n } else {\n this.proFormaState.documentFilter.fromDeliveryDate = null;\n this.proFormaState.documentFilter.toDeliveryDate = null;\n }\n\n this.proFormaState.documentFilter.fromInvoiceDate = null;\n this.proFormaState.documentFilter.toInvoiceDate = null;\n\n // register the synchronized pro forma state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strProFormaState, this.proFormaState);\n }\n\n private _synchronizeQuoteStateFromDeliveryFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.quoteState, null, ProductionFlowComponent.strQuoteState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(\n this.quoteState.documentFilter,\n this.deliveryFormState.documentFilter\n );\n\n this.quoteState.documentFilter.customerGroupUuids = this.deliveryFormState.documentFilter.customerGroupUuids;\n this.quoteState.documentFilter.customerUuids = this.deliveryFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.quoteState.documentFilter.deliveryRoutes = this.deliveryFormState.documentFilter.deliveryRoutes;\n this.quoteState.documentFilter.excludedDeliveryRoutes = this.deliveryFormState.documentFilter.excludedDeliveryRoutes;\n this.quoteState.documentFilter.noneDeliveryRouteFlag = this.deliveryFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.quoteState.documentFilter.sectorUuid = this.deliveryFormState.documentFilter.sectorUuid;\n this.quoteState.documentFilter.specialtyUuids = this.deliveryFormState.documentFilter.specialtyUuids;\n this.quoteState.documentFilter.noneSpecialtyFlag = this.deliveryFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.quoteState.documentFilter.periodSearchPage = this.deliveryFormState.documentFilter.periodSearchPage;\n this.quoteState.documentFilter.periodSearchType = this.deliveryFormState.documentFilter.periodSearchType;\n\n if (!this.deliveryFormState.documentFilter.periodSearchType && this.deliveryFormState.documentFilter.periodSearchType !== 0) {\n this.quoteState.documentFilter.fromQuoteDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.quoteState.documentFilter.toQuoteDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n } else {\n this.quoteState.documentFilter.fromQuoteDate = null;\n this.quoteState.documentFilter.toQuoteDate = null;\n }\n\n this.quoteState.documentFilter.fromDeliveryDate = null;\n this.quoteState.documentFilter.toDeliveryDate = null;\n this.quoteState.documentFilter.fromExpirationDate = null;\n this.quoteState.documentFilter.toExpirationDate = null;\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n }\n\n private _synchronizeQuoteStateFromFittingFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.quoteState, null, ProductionFlowComponent.strQuoteState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(this.quoteState.documentFilter, this.fittingFormState.documentFilter);\n\n this.quoteState.documentFilter.customerGroupUuids = this.fittingFormState.documentFilter.customerGroupUuids;\n this.quoteState.documentFilter.customerUuids = this.fittingFormState.documentFilter.customerUuids;\n this.quoteState.documentFilter.status = this.fittingFormState.documentFilter.status;\n // synchronize delivery routes filter\n this.quoteState.documentFilter.deliveryRoutes = this.fittingFormState.documentFilter.deliveryRoutes;\n this.quoteState.documentFilter.excludedDeliveryRoutes = this.fittingFormState.documentFilter.excludedDeliveryRoutes;\n this.quoteState.documentFilter.noneDeliveryRouteFlag = this.fittingFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.quoteState.documentFilter.sectorUuid = this.fittingFormState.documentFilter.sectorUuid;\n this.quoteState.documentFilter.specialtyUuids = this.fittingFormState.documentFilter.specialtyUuids;\n this.quoteState.documentFilter.noneSpecialtyFlag = this.fittingFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.quoteState.documentFilter.periodSearchPage = this.fittingFormState.documentFilter.periodSearchPage;\n this.quoteState.documentFilter.periodSearchType = this.fittingFormState.documentFilter.periodSearchType;\n\n if (!this.fittingFormState.documentFilter.periodSearchType && this.fittingFormState.documentFilter.periodSearchType !== 0) {\n this.quoteState.documentFilter.fromQuoteDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.quoteState.documentFilter.toQuoteDate = this.fittingFormState.documentFilter.toDeliveryDate;\n } else {\n this.quoteState.documentFilter.fromQuoteDate = null;\n this.quoteState.documentFilter.toQuoteDate = null;\n }\n\n this.quoteState.documentFilter.fromDeliveryDate = null;\n this.quoteState.documentFilter.toDeliveryDate = null;\n this.quoteState.documentFilter.fromExpirationDate = null;\n this.quoteState.documentFilter.toExpirationDate = null;\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n }\n\n private _synchronizeQuoteStateFromInvoiceState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.quoteState, null, ProductionFlowComponent.strQuoteState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(this.quoteState.documentFilter, this.invoiceState.documentFilter);\n\n this.quoteState.documentFilter.customerGroupUuids = this.invoiceState.documentFilter.customerGroupUuids;\n this.quoteState.documentFilter.customerUuids = this.invoiceState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.quoteState.documentFilter.deliveryRoutes = this.invoiceState.documentFilter.deliveryRoutes;\n this.quoteState.documentFilter.excludedDeliveryRoutes = this.invoiceState.documentFilter.excludedDeliveryRoutes;\n this.quoteState.documentFilter.noneDeliveryRouteFlag = this.invoiceState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.quoteState.documentFilter.sectorUuid = this.invoiceState.documentFilter.sectorUuid;\n this.quoteState.documentFilter.specialtyUuids = this.invoiceState.documentFilter.specialtyUuids;\n this.quoteState.documentFilter.noneSpecialtyFlag = this.invoiceState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.quoteState.documentFilter.periodSearchPage = this.invoiceState.documentFilter.periodSearchPage;\n this.quoteState.documentFilter.periodSearchType = this.invoiceState.documentFilter.periodSearchType;\n\n if (!this.invoiceState.documentFilter.periodSearchType && this.invoiceState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromDeliveryDate) {\n this.quoteState.documentFilter.fromQuoteDate = this.invoiceState.documentFilter.fromDeliveryDate;\n this.quoteState.documentFilter.toQuoteDate = this.invoiceState.documentFilter.toDeliveryDate;\n } else {\n this.quoteState.documentFilter.fromQuoteDate = this.invoiceState.documentFilter.fromInvoiceDate;\n this.quoteState.documentFilter.toQuoteDate = this.invoiceState.documentFilter.toInvoiceDate;\n }\n } else {\n this.quoteState.documentFilter.fromQuoteDate = null;\n this.quoteState.documentFilter.toQuoteDate = null;\n }\n\n this.quoteState.documentFilter.fromDeliveryDate = null;\n this.quoteState.documentFilter.toDeliveryDate = null;\n this.quoteState.documentFilter.fromExpirationDate = null;\n this.quoteState.documentFilter.toExpirationDate = null;\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n }\n\n private _synchronizeQuoteStateFromProFormaState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.quoteState, null, ProductionFlowComponent.strQuoteState);\n\n AdvancedFilterPanelModelHelper.synchronizePublishedDocumentFilter(this.quoteState.documentFilter, this.proFormaState.documentFilter);\n\n this.quoteState.documentFilter.customerGroupUuids = this.proFormaState.documentFilter.customerGroupUuids;\n this.quoteState.documentFilter.customerUuids = this.proFormaState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.quoteState.documentFilter.deliveryRoutes = this.proFormaState.documentFilter.deliveryRoutes;\n this.quoteState.documentFilter.excludedDeliveryRoutes = this.proFormaState.documentFilter.excludedDeliveryRoutes;\n this.quoteState.documentFilter.noneDeliveryRouteFlag = this.proFormaState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.quoteState.documentFilter.sectorUuid = this.proFormaState.documentFilter.sectorUuid;\n this.quoteState.documentFilter.specialtyUuids = this.proFormaState.documentFilter.specialtyUuids;\n this.quoteState.documentFilter.noneSpecialtyFlag = this.proFormaState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.quoteState.documentFilter.periodSearchPage = this.proFormaState.documentFilter.periodSearchPage;\n this.quoteState.documentFilter.periodSearchType = this.proFormaState.documentFilter.periodSearchType;\n\n if (!this.proFormaState.documentFilter.periodSearchType && this.proFormaState.documentFilter.periodSearchType !== 0) {\n this.quoteState.documentFilter.fromQuoteDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.quoteState.documentFilter.toQuoteDate = this.proFormaState.documentFilter.toDeliveryDate;\n } else {\n this.quoteState.documentFilter.fromQuoteDate = null;\n this.quoteState.documentFilter.toQuoteDate = null;\n }\n\n this.quoteState.documentFilter.fromDeliveryDate = null;\n this.quoteState.documentFilter.toDeliveryDate = null;\n this.quoteState.documentFilter.fromExpirationDate = null;\n this.quoteState.documentFilter.toExpirationDate = null;\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n }\n\n private _synchronizeQuoteStateFromWorkFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.quoteState, null, ProductionFlowComponent.strQuoteState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.quoteState.documentFilter, this.workFormState.documentFilter);\n\n this.quoteState.documentFilter.customerGroupUuids = this.workFormState.documentFilter.customerGroupUuids;\n this.quoteState.documentFilter.customerUuids = this.workFormState.documentFilter.customerUuids;\n\n this.quoteState.documentFilter.status = this.workFormState.documentFilter.status;\n // synchronize delivery routes filter\n this.quoteState.documentFilter.deliveryRoutes = this.workFormState.documentFilter.deliveryRoutes;\n this.quoteState.documentFilter.excludedDeliveryRoutes = this.workFormState.documentFilter.excludedDeliveryRoutes;\n this.quoteState.documentFilter.noneDeliveryRouteFlag = this.workFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.quoteState.documentFilter.sectorUuid = this.workFormState.documentFilter.sectorUuid;\n this.quoteState.documentFilter.specialtyUuids = this.workFormState.documentFilter.specialtyUuids;\n this.quoteState.documentFilter.noneSpecialtyFlag = this.workFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.quoteState.documentFilter.periodSearchPage = this.workFormState.documentFilter.periodSearchPage;\n this.quoteState.documentFilter.periodSearchType = this.workFormState.documentFilter.periodSearchType;\n\n if (!this.workFormState.documentFilter.periodSearchType && this.workFormState.documentFilter.periodSearchType !== 0) {\n this.quoteState.documentFilter.fromQuoteDate = this.workFormState.documentFilter.fromDeliveryDate;\n this.quoteState.documentFilter.toQuoteDate = this.workFormState.documentFilter.toDeliveryDate;\n } else {\n this.quoteState.documentFilter.fromQuoteDate = null;\n this.quoteState.documentFilter.toQuoteDate = null;\n }\n\n this.quoteState.documentFilter.fromDeliveryDate = null;\n this.quoteState.documentFilter.toDeliveryDate = null;\n this.quoteState.documentFilter.fromExpirationDate = null;\n this.quoteState.documentFilter.toExpirationDate = null;\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strQuoteState, this.quoteState);\n }\n\n private _synchronizeWorkFormStateFromDeliveryFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.workFormState, null, ProductionFlowComponent.strWorkFormState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.workFormState.documentFilter, this.deliveryFormState.documentFilter);\n\n this.workFormState.documentFilter.customerGroupUuids = this.deliveryFormState.documentFilter.customerGroupUuids;\n this.workFormState.documentFilter.customerUuids = this.deliveryFormState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.workFormState.documentFilter.deliveryRoutes = this.deliveryFormState.documentFilter.deliveryRoutes;\n this.workFormState.documentFilter.excludedDeliveryRoutes = this.deliveryFormState.documentFilter.excludedDeliveryRoutes;\n this.workFormState.documentFilter.noneDeliveryRouteFlag = this.deliveryFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.workFormState.documentFilter.sectorUuid = this.deliveryFormState.documentFilter.sectorUuid;\n this.workFormState.documentFilter.specialtyUuids = this.deliveryFormState.documentFilter.specialtyUuids;\n this.workFormState.documentFilter.noneSpecialtyFlag = this.deliveryFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.workFormState.documentFilter.periodSearchPage = this.deliveryFormState.documentFilter.periodSearchPage;\n this.workFormState.documentFilter.periodSearchType = this.deliveryFormState.documentFilter.periodSearchType;\n\n if (!this.deliveryFormState.documentFilter.periodSearchType && this.deliveryFormState.documentFilter.periodSearchType !== 0) {\n this.workFormState.documentFilter.fromDeliveryDate = this.deliveryFormState.documentFilter.fromDeliveryDate;\n this.workFormState.documentFilter.toDeliveryDate = this.deliveryFormState.documentFilter.toDeliveryDate;\n } else {\n this.workFormState.documentFilter.fromDeliveryDate = null;\n this.workFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized quote state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strWorkFormState, this.workFormState);\n }\n\n private _synchronizeWorkFormStateFromFittingFormState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.workFormState, null, ProductionFlowComponent.strWorkFormState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.workFormState.documentFilter, this.fittingFormState.documentFilter);\n\n this.workFormState.documentFilter.customerGroupUuids = this.fittingFormState.documentFilter.customerGroupUuids;\n this.workFormState.documentFilter.customerUuids = this.fittingFormState.documentFilter.customerUuids;\n this.workFormState.documentFilter.status = this.fittingFormState.documentFilter.status;\n // synchronize delivery routes filter\n this.workFormState.documentFilter.deliveryRoutes = this.fittingFormState.documentFilter.deliveryRoutes;\n this.workFormState.documentFilter.excludedDeliveryRoutes = this.fittingFormState.documentFilter.excludedDeliveryRoutes;\n this.workFormState.documentFilter.noneDeliveryRouteFlag = this.fittingFormState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.workFormState.documentFilter.sectorUuid = this.fittingFormState.documentFilter.sectorUuid;\n this.workFormState.documentFilter.specialtyUuids = this.fittingFormState.documentFilter.specialtyUuids;\n this.workFormState.documentFilter.noneSpecialtyFlag = this.fittingFormState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.workFormState.documentFilter.periodSearchPage = this.fittingFormState.documentFilter.periodSearchPage;\n this.workFormState.documentFilter.periodSearchType = this.fittingFormState.documentFilter.periodSearchType;\n\n if (!this.fittingFormState.documentFilter.periodSearchType && this.fittingFormState.documentFilter.periodSearchType !== 0) {\n this.workFormState.documentFilter.fromDeliveryDate = this.fittingFormState.documentFilter.fromDeliveryDate;\n this.workFormState.documentFilter.toDeliveryDate = this.fittingFormState.documentFilter.toDeliveryDate;\n } else {\n this.workFormState.documentFilter.fromDeliveryDate = null;\n this.workFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized work form state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strWorkFormState, this.workFormState);\n }\n\n private _synchronizeWorkFormStateFromInvoiceState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.workFormState, null, ProductionFlowComponent.strWorkFormState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.workFormState.documentFilter, this.invoiceState.documentFilter);\n\n this.workFormState.documentFilter.customerGroupUuids = this.invoiceState.documentFilter.customerGroupUuids;\n this.workFormState.documentFilter.customerUuids = this.invoiceState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.workFormState.documentFilter.deliveryRoutes = this.invoiceState.documentFilter.deliveryRoutes;\n this.workFormState.documentFilter.excludedDeliveryRoutes = this.invoiceState.documentFilter.excludedDeliveryRoutes;\n this.workFormState.documentFilter.noneDeliveryRouteFlag = this.invoiceState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.workFormState.documentFilter.sectorUuid = this.invoiceState.documentFilter.sectorUuid;\n this.workFormState.documentFilter.specialtyUuids = this.invoiceState.documentFilter.specialtyUuids;\n this.workFormState.documentFilter.noneSpecialtyFlag = this.invoiceState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.workFormState.documentFilter.periodSearchPage = this.invoiceState.documentFilter.periodSearchPage;\n this.workFormState.documentFilter.periodSearchType = this.invoiceState.documentFilter.periodSearchType;\n\n if (!this.invoiceState.documentFilter.periodSearchType && this.invoiceState.documentFilter.periodSearchType !== 0) {\n if (this.invoiceState.documentFilter.fromDeliveryDate) {\n this.workFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromDeliveryDate;\n this.workFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toDeliveryDate;\n } else {\n this.workFormState.documentFilter.fromDeliveryDate = this.invoiceState.documentFilter.fromInvoiceDate;\n this.workFormState.documentFilter.toDeliveryDate = this.invoiceState.documentFilter.toInvoiceDate;\n }\n } else {\n this.workFormState.documentFilter.fromDeliveryDate = null;\n this.workFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized work form state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strWorkFormState, this.workFormState);\n }\n\n private _synchronizeWorkFormStateFromProFormaState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.workFormState, null, ProductionFlowComponent.strWorkFormState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.workFormState.documentFilter, this.proFormaState.documentFilter);\n\n this.workFormState.documentFilter.customerGroupUuids = this.proFormaState.documentFilter.customerGroupUuids;\n this.workFormState.documentFilter.customerUuids = this.proFormaState.documentFilter.customerUuids;\n // synchronize delivery routes filter\n this.workFormState.documentFilter.deliveryRoutes = this.proFormaState.documentFilter.deliveryRoutes;\n this.workFormState.documentFilter.excludedDeliveryRoutes = this.proFormaState.documentFilter.excludedDeliveryRoutes;\n this.workFormState.documentFilter.noneDeliveryRouteFlag = this.proFormaState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.workFormState.documentFilter.sectorUuid = this.proFormaState.documentFilter.sectorUuid;\n this.workFormState.documentFilter.specialtyUuids = this.proFormaState.documentFilter.specialtyUuids;\n this.workFormState.documentFilter.noneSpecialtyFlag = this.proFormaState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.workFormState.documentFilter.periodSearchPage = this.proFormaState.documentFilter.periodSearchPage;\n this.workFormState.documentFilter.periodSearchType = this.proFormaState.documentFilter.periodSearchType;\n\n if (!this.proFormaState.documentFilter.periodSearchType && this.proFormaState.documentFilter.periodSearchType !== 0) {\n this.workFormState.documentFilter.fromDeliveryDate = this.proFormaState.documentFilter.fromDeliveryDate;\n this.workFormState.documentFilter.toDeliveryDate = this.proFormaState.documentFilter.toDeliveryDate;\n } else {\n this.workFormState.documentFilter.fromDeliveryDate = null;\n this.workFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized work form state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strWorkFormState, this.workFormState);\n }\n\n private _synchronizeWorkFormStateFromQuoteState(): void {\n this._sessionStorageService.CopyPropertiesFromJsonAndWriteOrRead(this.workFormState, null, ProductionFlowComponent.strWorkFormState);\n\n AdvancedFilterPanelModelHelper.synchronizeDocumentFilter(this.workFormState.documentFilter, this.quoteState.documentFilter);\n\n this.workFormState.documentFilter.customerGroupUuids = this.quoteState.documentFilter.customerGroupUuids;\n this.workFormState.documentFilter.customerUuids = this.quoteState.documentFilter.customerUuids;\n this.workFormState.documentFilter.status = this.quoteState.documentFilter.status;\n // synchronize delivery routes filter\n this.workFormState.documentFilter.deliveryRoutes = this.quoteState.documentFilter.deliveryRoutes;\n this.workFormState.documentFilter.excludedDeliveryRoutes = this.quoteState.documentFilter.excludedDeliveryRoutes;\n this.workFormState.documentFilter.noneDeliveryRouteFlag = this.quoteState.documentFilter.noneDeliveryRouteFlag;\n // synchronize sectors filter\n this.workFormState.documentFilter.sectorUuid = this.quoteState.documentFilter.sectorUuid;\n this.workFormState.documentFilter.specialtyUuids = this.quoteState.documentFilter.specialtyUuids;\n this.workFormState.documentFilter.noneSpecialtyFlag = this.quoteState.documentFilter.noneSpecialtyFlag;\n // synchronize period search\n this.workFormState.documentFilter.periodSearchPage = this.quoteState.documentFilter.periodSearchPage;\n this.workFormState.documentFilter.periodSearchType = this.quoteState.documentFilter.periodSearchType;\n\n if (!this.quoteState.documentFilter.periodSearchType && this.quoteState.documentFilter.periodSearchType !== 0) {\n this.workFormState.documentFilter.fromDeliveryDate = this.quoteState.documentFilter.fromQuoteDate;\n this.workFormState.documentFilter.toDeliveryDate = this.quoteState.documentFilter.toQuoteDate;\n } else {\n this.workFormState.documentFilter.fromDeliveryDate = null;\n this.workFormState.documentFilter.toDeliveryDate = null;\n }\n\n // register the synchronized work form state to the session storage\n this._sessionStorageService.write(ProductionFlowComponent.strWorkFormState, this.workFormState);\n }\n\n private _updateAdvancedFilterToggleButtonLabel(): void {\n if (this._isDeliveryFormContext()) {\n if (this.deliveryFormState && this.deliveryFormState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanel(this.advancedFilterPanel);\n }\n } else if (this._isFittingFormContext()) {\n if (this.fittingFormState && this.fittingFormState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanel(this.advancedFilterPanel);\n }\n } else if (this._isInvoiceContext()) {\n if (this.invoiceState && this.invoiceState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanelForInvoicedDeliveryForms(\n this.advancedFilterPanel\n );\n }\n } else if (this._isProFormaContext()) {\n if (this.proFormaState && this.proFormaState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanel(this.advancedFilterPanel);\n }\n } else if (this._isQuoteContext()) {\n if (this.quoteState && this.quoteState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanel(this.advancedFilterPanel);\n }\n } else if (this._isWorkFormContext()) {\n if (this.workFormState && this.workFormState.documentFilter) {\n this.advancedFilterCounter = AdvancedFilterPanelModelHelper.countValuesOfAdvancedFilterPanelForWorkForms(this.advancedFilterPanel);\n }\n }\n\n this.textButtonAdvancedFilter = this.constTextButtonAdvancedFilter;\n if (this.advancedFilterCounter && this.advancedFilterCounter > 0) {\n this.showEraseAdvancedFilterFlag = true;\n } else {\n this.showEraseAdvancedFilterFlag = false;\n this.advancedFilterCounter = undefined;\n }\n }\n\n private _updateCustomerFilterToggleButtonLabel(): void {\n // Update label of advanced filter button\n if (!this.customerFilterPanel?.customer?.uuid) {\n this.textButtonCustomerFilter = this.constTextButtonCustomerFilter;\n this.textButtonCustomerFilterShowCustomerMembers = '';\n this.showEraseCustomerFilterFlag = false;\n this.customerFilterCounter = undefined;\n } else {\n this.textButtonCustomerFilter = this.customerFilterPanel.customer.name;\n this.textButtonCustomerFilterShowCustomerMembers = !this.customerFilterPanel.showCustomerMembersFlag\n ? ''\n : this.constTextButtonCustomerFilterShowCustomerMembers;\n this.showEraseCustomerFilterFlag = true;\n this.customerFilterCounter = 1;\n }\n }\n\n private _updateLaboratoryResourceFilterToggleButtonLabel(): void {\n // Update label of advanced filter button\n if (!this.laboratoryResourceFilterPanel?.laboratoryResource?.uuid) {\n this.textButtonLaboratoryResourceFilter = this.constTextButtonLaboratoryResourceFilter;\n this.showEraseLaboratoryResourceFilterFlag = false;\n this.laboratoryResourceFilterCounter = undefined;\n } else {\n this.textButtonLaboratoryResourceFilter = this.laboratoryResourceFilterPanel.laboratoryResource.name;\n this.showEraseLaboratoryResourceFilterFlag = true;\n this.laboratoryResourceFilterCounter = 1;\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-api-filters/delivery-form-filter';\nimport { ProductionFlowComponent } from '../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class DeliveryFormState extends ProductionFlowState {\n public documentFilter: DeliveryFormFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strDeliveryFormKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strDeliveryFormKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromInvoiceDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.laboratoryTaskNumber &&\n !this.documentFilter.laboratoryResourceUuid &&\n !this.documentFilter.markedAsPrintedFlag &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.noneSpecialtyFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n (!this.documentFilter.publishStatuses || this.documentFilter.publishStatuses.length === 0) &&\n !this.documentFilter.sectorUuid &&\n !this.documentFilter.specialtyUuids &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toInvoiceDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new DeliveryFormFilter();\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.FiscalYear;\n this.documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'deliveryFormItemText',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { DocumentStatus } from 'app/shared/enums/document-status.enum';\nimport { FittingFormFilter } from 'app/shared/prothesis-api-filters/fitting-form-filter';\nimport { ProductionFlowComponent } from '../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class FittingFormState extends ProductionFlowState {\n public documentFilter: FittingFormFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strFittingFormKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strFittingFormKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.laboratoryTaskNumber &&\n !this.documentFilter.laboratoryResourceUuid &&\n !this.documentFilter.markedAsPrintedFlag &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.noneSpecialtyFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n (!this.documentFilter.publishStatuses || this.documentFilter.publishStatuses.length === 0) &&\n !this.documentFilter.sectorUuid &&\n !this.documentFilter.specialtyUuids &&\n this.documentFilter.status === DocumentStatus.InProgress &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new FittingFormFilter();\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.FiscalYear;\n this.documentFilter.status = DocumentStatus.InProgress;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'fittingFormItemText',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-api-filters/delivery-form-filter';\nimport { ProductionFlowComponent } from '../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class InvoiceState extends ProductionFlowState {\n public documentFilter: DeliveryFormFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strInvoiceKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strInvoiceKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n\n if (this.documentFilter.periodSearchDateType || this.documentFilter.periodSearchDateType === 0) {\n const periodSearchDateType = this.documentFilter.periodSearchDateType.valueOf().toString();\n const periodSearchDateTypeDefault = PeriodSearchDeliveryFormDateType.DeliveryDate.valueOf().toString();\n if (periodSearchDateType !== periodSearchDateTypeDefault) {\n defaultValueFlag = false;\n }\n }\n\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n this.documentFilter.canceledFlag === false &&\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromInvoiceDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.invoiceNumber &&\n !this.documentFilter.laboratoryTaskNumber &&\n !this.documentFilter.laboratoryResourceUuid &&\n !this.documentFilter.markedAsPrintedFlag &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.noneSpecialtyFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n (!this.documentFilter.publishStatuses || this.documentFilter.publishStatuses.length === 0) &&\n !this.documentFilter.sectorUuid &&\n !this.documentFilter.specialtyUuids &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toInvoiceDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new DeliveryFormFilter();\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n this.documentFilter.periodSearchType = PeriodSearchType.FiscalYear;\n this.documentFilter.canceledFlag = false;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'deliveryFormItemText',\n 'invoiceNumber',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-api-filters/delivery-form-filter';\nimport { ProductionFlowComponent } from '../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class ProFormaState extends ProductionFlowState {\n public documentFilter: DeliveryFormFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strProFormaKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strProFormaKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromInvoiceDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.laboratoryTaskNumber &&\n !this.documentFilter.laboratoryResourceUuid &&\n !this.documentFilter.markedAsPrintedFlag &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.noneSpecialtyFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n (!this.documentFilter.publishStatuses || this.documentFilter.publishStatuses.length === 0) &&\n !this.documentFilter.sectorUuid &&\n !this.documentFilter.specialtyUuids &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toInvoiceDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new DeliveryFormFilter();\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.FiscalYear;\n this.documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'deliveryFormItemText',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PaginatedListState } from 'app/shared/states/paginated-list-state';\n\nexport abstract class ProductionFlowState extends PaginatedListState {\n public constructor() {\n super();\n this.defaultSortActive = 'createDate';\n this.defaultSortDirection = 'desc';\n this.resetFilter();\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { DocumentStatus } from 'app/shared/enums/document-status.enum';\nimport { QuoteFilter } from 'app/shared/prothesis-api-filters/quote-filter';\nimport { ProductionFlowComponent } from '../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class QuoteState extends ProductionFlowState {\n public documentFilter: QuoteFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strQuoteKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strQuoteKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromExpirationDate &&\n !this.documentFilter.fromQuoteDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.laboratoryTaskNumber &&\n !this.documentFilter.laboratoryResourceUuid &&\n !this.documentFilter.markedAsPrintedFlag &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.noneSpecialtyFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n (!this.documentFilter.publishStatuses || this.documentFilter.publishStatuses.length === 0) &&\n !this.documentFilter.sectorUuid &&\n !this.documentFilter.specialtyUuids &&\n this.documentFilter.status === DocumentStatus.InProgress &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toExpirationDate &&\n !this.documentFilter.toQuoteDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new QuoteFilter();\n this.documentFilter.status = DocumentStatus.InProgress;\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.FiscalYear;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'quoteItemText',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n this.documentFilter.patientUnspecifiedFlag = false;\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { DocumentStatus } from 'app/shared/enums/document-status.enum';\nimport { WorkFormFilter } from 'app/shared/prothesis-api-filters/work-form-filter';\nimport { ProductionFlowComponent } from '../production-flow.component';\nimport { ProductionFlowState } from './production-flow-state';\n\nexport class WorkFormState extends ProductionFlowState {\n public documentFilter: WorkFormFilter;\n\n public constructor() {\n super();\n\n this.initPageSize(ProductionFlowComponent.strWorkFormKeyLocalStoragePageSize);\n this.initPageSort(ProductionFlowComponent.strWorkFormKeyLocalStorageSort);\n this._initPeriodSearchType(ProductionFlowComponent.strPeriodSearchTypeFavorite);\n }\n\n public isFilterSetToDefaultAndFavoriteValues(periodSearchTypeFavorite: string): boolean {\n let defaultValueFlag = this.isFilterSetToDefaultValues();\n let statePeriodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n if (this.documentFilter.periodSearchType || this.documentFilter.periodSearchType === 0) {\n statePeriodSearchType = this.documentFilter.periodSearchType.valueOf().toString();\n }\n if (statePeriodSearchType !== periodSearchTypeFavorite) {\n defaultValueFlag = false;\n }\n return defaultValueFlag;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (!this.documentFilter && (!this.pageIndex || this.pageIndex === 0)) {\n return true;\n }\n\n if (\n (!this.documentFilter.customerGroupUuids || this.documentFilter.customerGroupUuids.length === 0) &&\n (!this.documentFilter.customerUuids || this.documentFilter.customerUuids.length === 0) &&\n !this.documentFilter.deliveryRoutes &&\n !this.documentFilter.excludedDeliveryRoutes &&\n !this.documentFilter.fittingFlag &&\n !this.documentFilter.fromCreateDate &&\n !this.documentFilter.fromDeliveryDate &&\n !this.documentFilter.fromUpdateDate &&\n !this.documentFilter.laboratoryTaskNumber &&\n !this.documentFilter.laboratoryResourceUuid &&\n !this.documentFilter.markedAsPrintedFlag &&\n !this.documentFilter.noneDeliveryRouteFlag &&\n !this.documentFilter.noneSpecialtyFlag &&\n !this.documentFilter.number &&\n !this.documentFilter.patientCode &&\n !this.documentFilter.patientNumber &&\n !this.documentFilter.patientUnspecifiedFlag &&\n this.documentFilter.periodSearchPage === 0 &&\n !this.documentFilter.prescriptionNumber &&\n !this.documentFilter.productionFlowNumber &&\n !this.documentFilter.sectorUuid &&\n !this.documentFilter.specialtyUuids &&\n this.documentFilter.status === DocumentStatus.InProgress &&\n !this.documentFilter.textFilter &&\n !this.documentFilter.toCreateDate &&\n !this.documentFilter.toDeliveryDate &&\n !this.documentFilter.toUpdateDate &&\n (!this.pageIndex || this.pageIndex === 0) &&\n this.isSortSetToDefaultValues()\n ) {\n return true;\n }\n\n return false;\n }\n\n public resetFilter(): void {\n this.pageIndex = 0;\n\n this.documentFilter = new WorkFormFilter();\n this.documentFilter.fittingFlag = null;\n this.documentFilter.patientUnspecifiedFlag = false;\n this.documentFilter.status = DocumentStatus.InProgress;\n this.documentFilter.periodSearchPage = 0;\n this.documentFilter.periodSearchType = PeriodSearchType.FiscalYear;\n this.documentFilter.textFilter = '';\n this.documentFilter.textFilterFields = [\n 'amount',\n 'amountTaxesIncluded',\n 'customerName',\n 'workFormItemText',\n 'number',\n 'patientCode',\n 'patientNumber',\n 'prescriptionNumber',\n ];\n\n this.resetSort();\n }\n\n private _initPeriodSearchType(localStoragePeriodSearchTypeKey: string): void {\n let periodSearchType: string;\n const data = localStorage.getItem(localStoragePeriodSearchTypeKey);\n if (data) {\n periodSearchType = JSON.parse(data);\n }\n\n if (periodSearchType) {\n this.documentFilter.periodSearchType = Number(periodSearchType);\n }\n }\n}\n","import { LaboratoryTaxRateModel } from './laboratory-tax-rate-model';\n\nexport class LaboratoryTaxModel {\n public defaultTaxRateUuid: string;\n public displayOrder: number;\n public name: string;\n public taxRates: LaboratoryTaxRateModel[];\n public uuid: string;\n}\n","export class LaboratoryTaxRateModel {\n public displayOrder: number;\n public percentage: number;\n public uuid: string;\n}\n","import { OutInitCreditTaxViewModel } from 'app/shared/prothesis-api-view-models/out-init-credit-tax.view-model';\nimport { ReadTaxViewModel } from 'app/shared/prothesis-api-view-models/read-tax-view-model';\nimport { LaboratoryTaxModel } from '../models/laboratory-tax-model';\nimport { LaboratoryTaxRateModel } from '../models/laboratory-tax-rate-model';\nimport { LaboratoryTaxRateModelHelper } from './laboratory-tax-rate-model-helper';\n\nexport class LaboratoryTaxModelHelper {\n public static build(): LaboratoryTaxModel {\n const laboratoryTax = new LaboratoryTaxModel();\n laboratoryTax.taxRates = new Array();\n return laboratoryTax;\n }\n\n public static fromOutInitCreditTaxViewModel(outInitCreditTaxViewModels: OutInitCreditTaxViewModel[]): Array {\n const laboratoryTaxes = new Array();\n outInitCreditTaxViewModels?.forEach((outInitCreditTaxViewModel) => {\n const laboratoryTax = this._createModelFromOutInitCreditTaxViewModel(outInitCreditTaxViewModel);\n laboratoryTaxes.push(laboratoryTax);\n });\n\n return laboratoryTaxes;\n }\n\n public static fromViewModel(readTaxViewModels: ReadTaxViewModel[]): Array {\n const laboratoryTaxes = new Array();\n readTaxViewModels?.forEach((readTaxRateViewModel) => {\n const laboratoryTax = this._createModel(readTaxRateViewModel);\n laboratoryTaxes.push(laboratoryTax);\n });\n\n return laboratoryTaxes;\n }\n\n private static _createModel(readTaxViewModel: ReadTaxViewModel): LaboratoryTaxModel {\n const laboratoryTax = this.build();\n laboratoryTax.name = readTaxViewModel.name;\n laboratoryTax.displayOrder = readTaxViewModel.displayOrder;\n laboratoryTax.uuid = readTaxViewModel.uuid;\n laboratoryTax.taxRates = LaboratoryTaxRateModelHelper.fromViewModel(readTaxViewModel.taxRates);\n laboratoryTax.defaultTaxRateUuid = readTaxViewModel.taxRates.find((x) => x.defaultFlag)?.uuid;\n return laboratoryTax;\n }\n\n private static _createModelFromOutInitCreditTaxViewModel(outInitCreditTaxViewModel: OutInitCreditTaxViewModel): LaboratoryTaxModel {\n const laboratoryTax = this.build();\n laboratoryTax.displayOrder = outInitCreditTaxViewModel.displayOrder;\n laboratoryTax.name = outInitCreditTaxViewModel.name;\n laboratoryTax.uuid = outInitCreditTaxViewModel.uuid;\n return laboratoryTax;\n }\n}\n","import { SortHelper } from 'app/shared/helpers/sort-helper';\nimport { ReadTaxRateViewModel } from 'app/shared/prothesis-api-view-models/read-tax-rate-view-model';\nimport { LaboratoryTaxRateModel } from '../models/laboratory-tax-rate-model';\n\nexport class LaboratoryTaxRateModelHelper {\n public static build(): LaboratoryTaxRateModel {\n const laboratoryTaxRate = new LaboratoryTaxRateModel();\n return laboratoryTaxRate;\n }\n\n public static fromViewModel(readTaxRateViewModels: ReadTaxRateViewModel[]): Array {\n const laboratoryTaxRates = new Array();\n readTaxRateViewModels?.sort(SortHelper.sortByDisplayOrder).forEach((readTaxRateViewModel) => {\n const laboratoryTax = this._createModel(readTaxRateViewModel);\n laboratoryTaxRates.push(laboratoryTax);\n });\n\n return laboratoryTaxRates;\n }\n\n private static _createModel(readTaxRateViewModel: ReadTaxRateViewModel): LaboratoryTaxRateModel {\n const laboratoryTaxRate = this.build();\n laboratoryTaxRate.displayOrder = readTaxRateViewModel.displayOrder;\n laboratoryTaxRate.percentage = readTaxRateViewModel.percentage;\n laboratoryTaxRate.uuid = readTaxRateViewModel.uuid;\n return laboratoryTaxRate;\n }\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { SortHelper } from 'app/shared/helpers/sort-helper';\nimport { ExtendOptionSectorViewModel } from 'app/shared/prothesis-api-view-models/extend-option-sector.view-model';\nimport { OptionSpecialtyViewModel } from 'app/shared/prothesis-api-view-models/option-specialty.view-model';\n\nexport class SectorOrSpecialtyModelHelper {\n public static unspecifiedSectorOrSpecialtyKey = -1;\n\n public static buildUnSpecifiedSectorOrSpecialty(): ComboModel {\n const sectorOrSpecialty = new ComboModel();\n sectorOrSpecialty.displayOrder = 0;\n sectorOrSpecialty.key = this.unspecifiedSectorOrSpecialtyKey.toString();\n sectorOrSpecialty.label = 'Non renseigné';\n return sectorOrSpecialty;\n }\n\n public static fromViewModel(sectorViewModels: ExtendOptionSectorViewModel[], displayDisabled: boolean): Array {\n const sectorOrSpecialties = new Array();\n sectorOrSpecialties.push(SectorOrSpecialtyModelHelper.buildUnSpecifiedSectorOrSpecialty());\n sectorViewModels.sort(SortHelper.sortByDisabledFlagAndDisplayOrder);\n sectorViewModels.forEach((sectorViewModel) => {\n let sector: ComboModel;\n if (displayDisabled || !sectorViewModel.disabledFlag) {\n sector = this._createModel(sectorViewModel, null);\n sectorOrSpecialties.push(sector);\n }\n\n if (sectorViewModel.specialties) {\n sectorViewModel.specialties.sort(SortHelper.sortByDisabledFlagAndDisplayOrder);\n sectorViewModel.specialties.forEach((specialtyViewModel) => {\n if (displayDisabled || !specialtyViewModel.disabledFlag) {\n const specialty = this._createModel(specialtyViewModel, sector);\n sectorOrSpecialties.push(specialty);\n }\n });\n }\n });\n\n return sectorOrSpecialties;\n }\n\n private static _createModel(sectorViewModel: ExtendOptionSectorViewModel | OptionSpecialtyViewModel, parent: ComboModel): ComboModel {\n const sectorOrSpecialty = new ComboModel();\n sectorOrSpecialty.disabledFlag = sectorViewModel.disabledFlag;\n sectorOrSpecialty.key = sectorViewModel.uuid;\n sectorOrSpecialty.label = sectorViewModel.label;\n sectorOrSpecialty.parent = parent;\n return sectorOrSpecialty;\n }\n}\n","import { GridSortModel } from 'app/shared/components/grid-sort/grid-sort.model';\n\n/**\n * Model FormProductionFlow.\n * This model is intended to display the needed data of a router link.\n */\nexport class RouterLinkModel {\n public gridSortModel: GridSortModel[];\n public index: number;\n public label: string;\n public link: string;\n public testId: string;\n\n public constructor(index: number, label: string, link: string, gridSortModel: GridSortModel[], testId?: string) {\n this.gridSortModel = gridSortModel;\n this.index = index;\n this.label = label;\n this.link = link;\n this.testId = testId;\n }\n}\n","
\n \n \n {{ customButtonLabel }}\n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-custom-action-buttons',\n styleUrls: ['./custom-action-buttons.component.scss'],\n templateUrl: './custom-action-buttons.component.html',\n})\nexport class CustomActionButtonsComponent {\n @Output() public customButtonClickedEvent = new EventEmitter();\n @Input() public customButtonCss = 'mr-8';\n @Input() public customButtonFlag = false;\n @Input() public customButtonLabel = '';\n @Input() public customButtonSvg = 'svg_rate';\n @Input() public disabledFlag = false;\n\n // Determines if there is selected elements to apply the buttons.\n @Input() public hasSelectedElementFlag = true;\n // Determines if those action buttons are intended to be use in a multiple choices context.\n @Input() public multipleActionFlag = false;\n\n @Output() public toggleSelectionFlag = new EventEmitter();\n\n public customButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.toggleSelectionFlag.emit();\n this.customButtonClickedEvent.emit();\n }\n}\n","
\n \n \n {{ duplicateIcon }}\n {{ duplicateLabel }}\n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-duplicate-action-buttons',\n templateUrl: './duplicate-action-buttons.component.html',\n styleUrls: ['./duplicate-action-buttons.component.scss'],\n})\nexport class DuplicateActionButtonsComponent implements OnChanges {\n @Input() public disabledFlag = false;\n @Output() public duplicateButtonClickedEvent = new EventEmitter();\n @Input() public duplicateIcon = 'file_copy';\n @Input() public duplicateLabel: string;\n\n // Determines if there is selected elements to apply the buttons.\n @Input() public hasSelectedElementFlag = true;\n\n // Determines if those action buttons are intended to be use in a multiple choices context.\n @Input() public multipleActionFlag = false;\n\n @Output() public toggleSelectionFlag = new EventEmitter();\n\n public showDuplicateButtonFlag = true;\n\n public duplicateButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.toggleSelectionFlag.emit();\n this.duplicateButtonClickedEvent.emit();\n }\n\n public ngOnChanges(): void {\n this.showDuplicateButtonFlag = this.showDuplicateButton();\n }\n\n // determines when to permit the user to duplicate an element\n public showDuplicateButton(): boolean {\n if (!this.duplicateLabel) {\n return false;\n }\n\n return true;\n }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { ContextMenuService } from './context-menu.service';\nimport { ContextMenuLineModel } from './models/context-menu-line-model';\n\n@Directive({\n selector: '[appContextMenu]',\n})\nexport class ContextMenuDirective {\n @Input('appContextMenu') public contextMenuLines: ContextMenuLineModel[];\n\n public constructor(private _contextMenuService: ContextMenuService) {}\n\n @HostListener('contextmenu', ['$event'])\n public rightClicked(event: MouseEvent) {\n if (this.contextMenuLines?.length > 0) {\n //event.preventDefault to prevent the browser contextmenu\n event.preventDefault();\n this._contextMenuService.openContextMenuEvent.next({ event: event, obj: this.contextMenuLines });\n }\n }\n}\n","
\n \n \n {{ openPdfLabel }}\n \n\n \n \n {{ multiplePreviewLabel }}\n \n\n \n \n {{ downloadFecLabel }}\n \n\n \n \n {{ downloadPdfLabel }}\n \n\n \n \n {{ downloadSpreadsheetLabel }}\n \n\n \n \n {{ generateMultiplePdfLabel }}\n \n\n \n \n {{ downloadZipLabel }}\n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ContextMenuService } from 'app/core/services/context-menu/context-menu.service';\nimport { ContextMenuLineModel } from 'app/core/services/context-menu/models/context-menu-line-model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-print-action-buttons',\n styleUrls: ['./print-action-buttons.component.scss'],\n templateUrl: './print-action-buttons.component.html',\n})\nexport class PrintActionButtonsComponent {\n @Output() public downloadFecButtonClickedEvent = new EventEmitter();\n @Input() public downloadFecFlag = false;\n @Input() public downloadFecLabel = 'Télécharger le fichier FEC';\n\n @Output() public downloadPdfButtonClickedEvent = new EventEmitter();\n @Input() public downloadPdfFlag = false;\n @Input() public downloadPdfLabel = 'Télécharger le PDF';\n @Input() public downloadPdfMenuContextLines: ContextMenuLineModel[];\n\n @Output() public downloadSpreadsheetButtonClickedEvent = new EventEmitter();\n @Input() public downloadSpreadsheetFlag = false;\n @Input() public downloadSpreadsheetLabel = 'Télécharger le fichier Excel';\n\n @Output() public downloadZipButtonClickedEvent = new EventEmitter();\n @Input() public downloadZipFlag = false;\n @Input() public downloadZipLabel = 'Télécharger le fichier Zip';\n\n @Output() public generateMultiplePdfButtonClickedEvent = new EventEmitter();\n @Input() public generateMultiplePdfFlag = false;\n @Input() public generateMultiplePdfLabel = 'Obtenir les PDF multiples';\n @Input() public generateMultiplePdfMenuContextLines: ContextMenuLineModel[];\n\n // Determines if there is selected elements to apply the buttons.\n @Input() public hasSelectedElementFlag = true;\n\n @Input() public multipleActionFlag = false;\n\n @Output() public multiplePreviewButtonClickedEvent = new EventEmitter();\n @Input() public multiplePreviewFlag = false;\n @Input() public multiplePreviewLabel = 'Aperçu des documents';\n\n @Output() public openPdfButtonClickedEvent = new EventEmitter();\n @Input() public openPdfFlag = false;\n @Input() public openPdfLabel = 'Ouvrir le PDF';\n @Input() public openPdfMenuContextLines: ContextMenuLineModel[];\n\n @Output() public toggleSelectionFlag = new EventEmitter();\n\n public constructor(private _contextMenuService: ContextMenuService) {}\n\n public closeMenuContextHandler($event: MouseEvent): void {\n this._contextMenuService.hideContextMenuEvent.next($event);\n }\n\n public downloadFecLabelButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.downloadFecButtonClickedEvent.emit();\n }\n\n public downloadPdfLabelButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.downloadPdfButtonClickedEvent.emit();\n }\n\n public downloadSpreadsheetLabelButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.downloadSpreadsheetButtonClickedEvent.emit();\n }\n\n public downloadZipLabelButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.downloadZipButtonClickedEvent.emit();\n }\n\n public generateMultiplePdfButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.toggleSelectionFlag.emit();\n this.generateMultiplePdfButtonClickedEvent.emit();\n }\n\n public multiplePreviewButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.toggleSelectionFlag.emit();\n this.multiplePreviewButtonClickedEvent.emit();\n }\n\n public openPdfButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.openPdfButtonClickedEvent.emit();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { ContextMenuModule } from 'app/core/services/context-menu/context-menu.module';\nimport { PrintActionButtonsComponent } from './print-action-buttons.component';\n\n@NgModule({\n declarations: [PrintActionButtonsComponent],\n imports: [\n ContextMenuModule,\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n RouterModule,\n ],\n exports: [PrintActionButtonsComponent],\n})\nexport class PrintActionButtonsModule {}\n","
\n
\n \n \n \n \n
\n\n
\n \n
\n
\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-smart-action-buttons',\n templateUrl: './smart-action-buttons.component.html',\n styleUrls: ['./smart-action-buttons.component.scss'],\n})\nexport class SmartActionButtonsComponent {\n @Input() public actionButtons: TemplateRef;\n @Input() public disabledFlag = false;\n}\n","
\n \n \n {{ redoIcon }}\n {{ redoLabel }}\n \n\n \n \n {{ undoIcon }}\n {{ undoLabel }}\n \n\n \n \n {{ enableIcon }}\n {{ enableLabel }}\n \n\n
\n\n \n \n {{ disableIcon }}\n {{ disableLabel }}\n \n\n \n \n {{ deleteIcon }}\n {{ deleteLabel }}\n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-state-action-buttons',\n styleUrls: ['./state-action-buttons.component.scss'],\n templateUrl: './state-action-buttons.component.html',\n})\nexport class StateActionButtonsComponent implements OnChanges {\n @Output() public deleteButtonClickedEvent = new EventEmitter();\n @Input() public deleteDisabledFlag = false;\n @Input() public deleteIcon = 'delete_forever';\n @Input() public deleteLabel: string;\n\n @Output() public disableButtonClickedEvent = new EventEmitter();\n @Input() public disabledFlag = false;\n @Input() public disableIcon = 'delete';\n @Input() public disableLabel: string;\n\n @Output() public enableButtonClickedEvent = new EventEmitter();\n @Input() public enableIcon = 'launch';\n @Input() public enableLabel: string;\n\n // Determines if there is selected elements to apply the buttons.\n @Input() public hasSelectedElementFlag = true;\n\n // Determines if those action buttons are intended to be use in a multiple choices context.\n @Input() public multipleActionFlag = false;\n\n @Output() public redoButtonClickedEvent = new EventEmitter();\n @Input() public redoIcon = 'svg_redo';\n @Input() public redoLabel: string;\n @Output() public toggleSelectionFlag = new EventEmitter();\n\n @Output() public undoButtonClickedEvent = new EventEmitter();\n @Input() public undoDisabledFlag = false;\n @Input() public undoIcon = 'svg_undo';\n @Input() public undoLabel: string;\n @Input() public undoneFlag = false;\n\n public showDeleteButtonFlag = true;\n public showDisableButtonFlag = true;\n public showEnableButtonFlag = true;\n public showRedoButtonFlag = true;\n public showUndoButtonFlag = true;\n\n public deleteButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.toggleSelectionFlag.emit();\n this.deleteButtonClickedEvent.emit();\n }\n\n public disableButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.toggleSelectionFlag.emit();\n this.disableButtonClickedEvent.emit();\n }\n\n public enableButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.toggleSelectionFlag.emit();\n this.enableButtonClickedEvent.emit();\n }\n\n public ngOnChanges(): void {\n this.showDeleteButtonFlag = this.showDeleteButton();\n this.showDisableButtonFlag = this.showDisableButton();\n this.showEnableButtonFlag = this.showEnableButton();\n this.showRedoButtonFlag = this.showRedoButton();\n this.showUndoButtonFlag = this.showUndoButton();\n }\n\n public redoButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.toggleSelectionFlag.emit();\n this.redoButtonClickedEvent.emit();\n }\n\n // determines when to permit the user to delete an element\n public showDeleteButton(): boolean {\n if (!this.deleteLabel) {\n return false;\n }\n\n // The element must be disabled if the deletion is not direct.\n if (this.disableLabel && !this.disabledFlag) {\n return false;\n }\n\n return true;\n }\n\n // determines when to permit the user to disable an element\n public showDisableButton(): boolean {\n if (!this.disableLabel) {\n return false;\n }\n\n // The element must be enabled\n if (this.disabledFlag) {\n return false;\n }\n\n return true;\n }\n\n // determines when to permit the user to enable an element\n public showEnableButton(): boolean {\n if (!this.enableLabel) {\n return false;\n }\n\n // The element must be disabled.\n if (this.disabledFlag) {\n return true;\n }\n\n return false;\n }\n\n // determines when to permit the user to enable an element\n public showRedoButton(): boolean {\n if (!this.redoLabel) {\n return false;\n }\n\n // The element must be disabled.\n if (this.undoneFlag) {\n return true;\n }\n\n return false;\n }\n\n // determines when to permit the user to undo an element\n public showUndoButton(): boolean {\n if (!this.undoLabel) {\n return false;\n }\n\n // The element must be enabled\n if (this.undoneFlag) {\n return false;\n }\n\n return true;\n }\n\n public undoButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.toggleSelectionFlag.emit();\n this.undoButtonClickedEvent.emit();\n }\n}\n","
\n
\n
{{ count > 1 ? count + \" résultats\" : count + \" résultat\" }}
\n
\n {{ labelLine1 }} \n \n {{ aggregateLine1 | looseCurrency: currencyCodeLine1:\"symbol\":\"1.2-2\" }}\n \n {{ aggregateLine1 }} \n
\n
\n {{ labelLine2 }} \n \n {{ aggregateLine2 | looseCurrency: currencyCodeLine2:\"symbol\":\"1.2-2\" }}\n \n {{ aggregateLine2 }} \n
\n
\n {{ labelLine3 }} \n \n {{ aggregateLine3 | looseCurrency: currencyCodeLine3:\"symbol\":\"1.2-2\" }}\n \n {{ aggregateLine3 }}\n
\n
\n {{ labelFullBottomLine }} \n
\n
\n \n \n \n \n \n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-aggregate',\n styleUrls: ['./aggregate.component.scss'],\n templateUrl: './aggregate.component.html',\n})\nexport class AggregateComponent {\n @Input() public aggregateLine1: string;\n @Input() public aggregateLine2: string;\n @Input() public aggregateLine3: string;\n @Input() public count: number;\n @Input() public currencyCodeLine1: string;\n @Input() public currencyCodeLine2: string;\n @Input() public currencyCodeLine3: string;\n @Input() public labelFullBottomLine: string;\n @Input() public labelLine1: string;\n @Input() public labelLine2: string;\n @Input() public labelLine3: string;\n\n @Output() public simpleDocumentSpreadsheetExportButtonClickedEvent = new EventEmitter();\n @Input() public simpleDocumentSpreadsheetExportFlag = false;\n @Input() public simpleDocumentSpreadsheetExportLabel = 'Obtenir la liste au format PDF';\n @Output() public spreadsheetExportButtonClickedEvent = new EventEmitter();\n @Input() public spreadsheetExportFlag = false;\n @Input() public spreadsheetExportLabel = 'Exporter les résultats vers Excel';\n\n public simpleDocumentSpreadsheetExportButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.simpleDocumentSpreadsheetExportButtonClickedEvent.emit();\n }\n\n public spreadsheetExportButtonClickedHandler(event: any): void {\n event.stopPropagation();\n this.spreadsheetExportButtonClickedEvent.emit();\n }\n}\n","
\n \n not_interested\n \n
\n
\n \n not_interested\n \n\n \n \n  {{groupNote}}\n
\n
\n\n
\n \n
\n\n \n \n star\n not_interested\n \n \n \n
\n \n {{ infoIcon }}\n \n
\n
\n \n {{ infoLine2Icon }}\n \n
\n
\n \n
\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { HighlightType } from 'app/shared/enums/highlight-type.enum';\nimport { HtmlHelper } from 'app/shared/helpers/html-helper';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-grouped-label-card',\n styleUrls: ['./grouped-label-card.component.scss'],\n templateUrl: './grouped-label-card.component.html',\n})\nexport class GroupedLabelCardComponent {\n @Input() public disabled = false;\n @Input() public group: string;\n @Input() public groupCanceledFlag = false;\n @Input() public groupDisabledFlag = false;\n @Input() public groupNote: string;\n @Input() public groupProceedFlag = false;\n @Input() public groupStyle: 'active-text' | 'accent-fg' | 'customer-area-fg' | 'primary-fg' = 'primary-fg';\n @Input() public hat: string;\n @Input() public hatDisabledFlag = false;\n @Input() public hatStyle: 'accent' | 'accent-border' | 'primary' | 'primary-border' = 'accent';\n @Input() public hatWidth: 'auto' | 'fixed' = 'auto';\n @Input() public highlightGroupFlag = false;\n @Input() public highlightGroupType = HighlightType.String;\n @Input() public highlightHatFlag = false;\n @Input() public highlightInfoFlag = false;\n @Input() public highlightLabelFlag = false;\n @Input() public highlightLabelType = HighlightType.String;\n @Input() public highlightSubgroupFlag = false;\n @Input() public highlightTitleFlag = false;\n @Input() public info: string;\n @Input() public infoHighlightType = HighlightType.String;\n @Input() public infoIcon: string;\n @Input() public infoLine2: string;\n @Input() public infoLine2HighlightType = HighlightType.String;\n @Input() public infoLine2Icon: string;\n @Input() public infoLine2WarnFlag = false;\n @Input() public infoLine3: string;\n @Input() public infoLine3HighlightType = HighlightType.String;\n @Input() public label: string;\n @Input() public labelCanceledFlag = false;\n @Input() public labelDefaultFlag = false;\n @Input() public labelDisabledFlag = false;\n @Input() public labelProceedFlag = false;\n @Input() public labelStyle: 'active-text' | 'default' | 'medium-text' | 'small-text' = 'default';\n @Input() public subGroup: string;\n @Input() public subGroupDisabledFlag = false;\n @Input() public title: string;\n @Input() public truncatedContentWidth: string;\n\n public constructor(private _highlightService: HighlightService) {}\n\n public highlightGroup(content: string): string {\n return this.highlightInternal(content, this.highlightGroupFlag, this.highlightGroupType);\n }\n\n public highlightHat(content: string): string {\n return this.highlightInternal(content, this.highlightHatFlag);\n }\n\n public highlightInfo(content: string): string {\n return this.highlightInternal(content, this.highlightInfoFlag, this.infoHighlightType);\n }\n\n public highlightInfoLine2(content: string): string {\n return this.highlightInternal(content, this.highlightInfoFlag, this.infoLine2HighlightType);\n }\n\n public highlightInfoLine3(content: string): string {\n return this.highlightInternal(content, this.highlightInfoFlag, this.infoLine3HighlightType);\n }\n\n public highlightLabel(content: string): string {\n return this.highlightInternal(content, this.highlightLabelFlag, this.highlightLabelType);\n }\n\n public highlightSubgroup(content: string): string {\n return this.highlightInternal(content, this.highlightSubgroupFlag);\n }\n\n public highlightTitle(content: string): string {\n return this.highlightInternal(content, this.highlightTitleFlag);\n }\n\n private highlightInternal(content: string, highlightFlag: boolean, highlightType = HighlightType.String): string {\n if (highlightFlag) {\n return this._highlightService.highlight(content, highlightType);\n }\n\n return HtmlHelper.escape(content);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { GroupedLabelCardComponent } from './grouped-label-card.component';\n\n@NgModule({\n declarations: [GroupedLabelCardComponent],\n imports: [CommonModule, MatIconModule],\n exports: [GroupedLabelCardComponent],\n})\nexport class GroupedLabelCardModule {}\n","\n not_interested\n \n\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { HtmlHelper } from 'app/shared/helpers/html-helper';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-hat-card',\n styleUrls: ['./hat-card.component.scss'],\n templateUrl: './hat-card.component.html',\n})\nexport class HatCardComponent {\n @Input() public hatDisabledFlag = false;\n @Input() public hatGap = false;\n @Input() public hatHighlightEnabledFlag = false;\n // Label at the top of header.\n @Input() public hatLabel: string;\n // Style of label at the top of header.\n @Input() public hatStyle: 'accent' | 'accent-border' | 'primary' | 'primary-border' = 'accent';\n // Width label at the top of header.\n @Input() public hatWidth: 'auto' | 'fixed' = 'auto';\n\n public constructor(private _highlightService: HighlightService) {}\n\n public highlight(content: string): string {\n if (this.hatHighlightEnabledFlag) {\n return this._highlightService.highlight(content);\n }\n\n return HtmlHelper.escape(content);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { HatCardComponent } from './hat-card.component';\n\n@NgModule({\n declarations: [HatCardComponent],\n exports: [HatCardComponent],\n imports: [CommonModule, MatIconModule],\n})\nexport class HatCardModule {}\n","export class ListCardElementModel {\n public canceledFlag = false;\n public checkedFlag = false;\n public convertedFlag = false;\n public disabledFlag = false;\n public displayIconFlag = true;\n public info: string;\n public label: string;\n public number: string;\n public uuid: string;\n\n public constructor(label: string, disabledFlag = false) {\n this.disabledFlag = disabledFlag;\n this.label = label;\n }\n}\n","
\n {{ title }}\n
    \n
  • -
  • \n
  • \n
    \n \n \n not_interested\n
    \n {{ element.info }}\n
\n \n
  • 5\">...
  • \n \n\n","import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { HtmlHelper } from 'app/shared/helpers/html-helper';\nimport { ListCardElementModel } from './list-card-element.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-list-card',\n styleUrls: ['./list-card.component.scss'],\n templateUrl: './list-card.component.html',\n})\nexport class ListCardComponent implements OnChanges {\n @Input() public elements: Array;\n @Input() public highlightFlag = false;\n @Input() public title: string;\n @Input() public truncatedContentWidth: string;\n public top5Elements: Array = new Array();\n\n public constructor(private _highlightService: HighlightService) {}\n\n public highlight(content: string): string {\n if (this.highlightFlag) {\n return this._highlightService.highlight(content);\n }\n\n return HtmlHelper.escape(content);\n }\n\n public ngOnChanges(): void {\n if (this.elements) {\n this.top5Elements = this.elements.slice(0, 5);\n }\n }\n}\n","
    {{ label }}
    \n
    \n \n  {{ priceLabel }}\n
    \n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { HighlightType } from 'app/shared/enums/highlight-type.enum';\nimport { HtmlHelper } from 'app/shared/helpers/html-helper';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-price-card',\n styleUrls: ['./price-card.component.scss'],\n templateUrl: './price-card.component.html',\n})\nexport class PriceCardComponent {\n @Input() public currencyCode: string;\n @Input() public highlightFlag = false;\n @Input() public label: string;\n @Input() public price: number;\n @Input() public priceLabel: string;\n\n public constructor(private _highlightService: HighlightService) {}\n\n public highlightDecimal(content: string): string {\n if (this.highlightFlag) {\n return this._highlightService.highlight(content, HighlightType.Decimal);\n }\n\n return HtmlHelper.escape(content);\n }\n}\n","import { LaboratoryHttpHeaderModel } from 'app/core/services/prothesis-api/laboratory-http-header-model';\nimport { NumberHelper } from 'app/shared/helpers/number-helper';\nimport { ReadLaboratoryViewModel } from 'app/shared/prothesis-api-view-models/read-laboratory.view-model';\nimport { ProgressBarStorageCardModel } from '../models/progress-bar-storage-card-model';\n\nexport class ProgressBarStorageCardModelHelper {\n public static storageUsagePercentageWarning = 90;\n public static storageUsagePercentageWarning2 = 99;\n\n public static build(): ProgressBarStorageCardModel {\n const progressBarStorageCard = new ProgressBarStorageCardModel();\n return progressBarStorageCard;\n }\n\n public static fromHttpHeaderModel(laboratoryHttpHeader: LaboratoryHttpHeaderModel): ProgressBarStorageCardModel {\n return this._createFromHttpHeaderModel(laboratoryHttpHeader);\n }\n\n public static fromReadLaboratoryViewModel(readLaboratoryViewModel: ReadLaboratoryViewModel): ProgressBarStorageCardModel {\n return this._createFromReadLaboratoryViewModel(readLaboratoryViewModel);\n }\n\n private static _createFromHttpHeaderModel(laboratoryHttpHeader: LaboratoryHttpHeaderModel): ProgressBarStorageCardModel {\n const progressBarStorageCard = this.build();\n\n progressBarStorageCard.storageCapacityLimit = NumberHelper.calcHumanReadableFileSize(laboratoryHttpHeader.storageCapacityLimit);\n progressBarStorageCard.storageUsage = NumberHelper.calcHumanReadableFileSize(laboratoryHttpHeader.storageUsage);\n progressBarStorageCard.storageUsagePercentage =\n laboratoryHttpHeader.storageUsage > 0 && laboratoryHttpHeader.storageCapacityLimit === 0\n ? 100\n : NumberHelper.round(NumberHelper.calcPercentage(laboratoryHttpHeader.storageUsage, laboratoryHttpHeader.storageCapacityLimit));\n\n if (progressBarStorageCard.storageUsagePercentage >= this.storageUsagePercentageWarning) {\n progressBarStorageCard.warnFlag = true;\n }\n return progressBarStorageCard;\n }\n\n private static _createFromReadLaboratoryViewModel(readLaboratoryViewModel: ReadLaboratoryViewModel): ProgressBarStorageCardModel {\n const progressBarStorageCard = this.build();\n\n progressBarStorageCard.storageCapacityLimit = NumberHelper.calcHumanReadableFileSize(readLaboratoryViewModel.storageCapacityLimit);\n progressBarStorageCard.storageUsage = NumberHelper.calcHumanReadableFileSize(readLaboratoryViewModel.storageUsage);\n progressBarStorageCard.storageUsagePercentage =\n readLaboratoryViewModel.storageUsage > 0 && readLaboratoryViewModel.storageCapacityLimit === 0\n ? 100\n : NumberHelper.round(\n NumberHelper.calcPercentage(readLaboratoryViewModel.storageUsage, readLaboratoryViewModel.storageCapacityLimit)\n );\n\n if (progressBarStorageCard.storageUsagePercentage >= this.storageUsagePercentageWarning) {\n progressBarStorageCard.warnFlag = true;\n }\n return progressBarStorageCard;\n }\n}\n","export class ProgressBarStorageCardModel {\n public storageCapacityLimit: string;\n public storageUsage: string;\n public storageUsagePercentage: number;\n public warnFlag: boolean;\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { SortHelper } from 'app/shared/helpers/sort-helper';\nimport { ExtendOptionLaboratoryRoleViewModel } from 'app/shared/prothesis-api-view-models/extend-option-laboratory-role.view-model';\nimport { ExtendOptionRateViewModel } from 'app/shared/prothesis-api-view-models/extend-option-rate.view-model';\nimport { ExtendOptionTimeZoneViewModel } from 'app/shared/prothesis-api-view-models/extend-option-time-zone.view-model';\nimport { OptionBankViewModel } from 'app/shared/prothesis-api-view-models/option-bank.view-model';\nimport { OptionCountryViewModel } from 'app/shared/prothesis-api-view-models/option-country.view-model';\nimport { OptionRateViewModel } from 'app/shared/prothesis-api-view-models/option-rate.view-model';\nimport { OptionShadeGuideViewModel } from 'app/shared/prothesis-api-view-models/option-shade-guide.view-model';\nimport { OptionTimeZoneViewModel } from 'app/shared/prothesis-api-view-models/option-time-zone.view-model';\nimport { ReadCustomerViewModel } from 'app/shared/prothesis-api-view-models/read-customer.view-model';\n\nexport class ComboModelHelper {\n public static fromExtendOptionLaboratoryRoleViewModel(\n extendOptionLaboratoryRoleViewModels: ExtendOptionLaboratoryRoleViewModel[]\n ): Array {\n const combos = new Array();\n extendOptionLaboratoryRoleViewModels.forEach((extendOptionLaboratoryRoleViewModel) => {\n const combo = new ComboModel();\n combo.defaultFlag = extendOptionLaboratoryRoleViewModel.adminFlag;\n combo.key = extendOptionLaboratoryRoleViewModel.uuid;\n combo.label = extendOptionLaboratoryRoleViewModel.name;\n combos.push(combo);\n });\n\n return combos;\n }\n\n public static fromExtendOptionRateViewModel(\n extendOptionRateViewModels: ExtendOptionRateViewModel[],\n readCustomerViewModel: ReadCustomerViewModel\n ): Array {\n const comboModels = new Array();\n\n extendOptionRateViewModels.forEach((extendOptionRateViewModel) => {\n comboModels.push(this.fromExtendOptionRateViewModelSingle(extendOptionRateViewModel));\n });\n\n // Add customer rate if disabled\n if (readCustomerViewModel?.rate.disabledFlag) {\n comboModels.push(this._fromOptionRateViewModelSingle(readCustomerViewModel.rate));\n }\n\n comboModels.sort(SortHelper.sortByDefaultFlagThenByDisabledFlagThenByRateLabel);\n\n return comboModels;\n }\n\n public static fromExtendOptionRateViewModelSingle(extendOptionRateViewModel: ExtendOptionRateViewModel): ComboModel {\n const comboModel = new ComboModel();\n comboModel.defaultFlag = extendOptionRateViewModel.defaultFlag;\n comboModel.disabledFlag = extendOptionRateViewModel.disabledFlag;\n comboModel.key = extendOptionRateViewModel.uuid;\n comboModel.label = extendOptionRateViewModel.label;\n\n return comboModel;\n }\n\n public static fromExtendOptionTimeZoneViewModel(extendOptionTimeZoneViewModels: ExtendOptionTimeZoneViewModel[]): Array {\n const comboModels = new Array();\n extendOptionTimeZoneViewModels.forEach((extendOptionTimeZoneViewModel) => {\n comboModels.push(this.fromExtendOptionTimeZoneViewModelSingle(extendOptionTimeZoneViewModel));\n });\n\n comboModels.sort(SortHelper.sortByLabelAlphabetically);\n\n return comboModels;\n }\n\n public static fromExtendOptionTimeZoneViewModelSingle(extendOptionTimeZoneViewModel: ExtendOptionTimeZoneViewModel): ComboModel {\n const comboModel = new ComboModel();\n comboModel.disabledFlag = extendOptionTimeZoneViewModel.disabledFlag;\n comboModel.key = extendOptionTimeZoneViewModel.uuid;\n comboModel.label = `${extendOptionTimeZoneViewModel.tzDatabaseName} - ${extendOptionTimeZoneViewModel.label}`;\n\n comboModel.parent = new ComboModel();\n comboModel.parent.key = extendOptionTimeZoneViewModel.country.uuid;\n comboModel.parent.label = extendOptionTimeZoneViewModel.country.label;\n\n return comboModel;\n }\n\n public static fromOptionBankViewModel(optionBankViewModels: OptionBankViewModel[]): Array {\n const combos = new Array();\n optionBankViewModels.forEach((optionBankViewModel) => {\n const combo = new ComboModel();\n combo.key = optionBankViewModel.uuid;\n combo.label = optionBankViewModel.name;\n combos.push(combo);\n });\n return combos;\n }\n\n public static fromOptionBankViewModelSingle(optionBankViewModel: OptionBankViewModel): ComboModel {\n if (!optionBankViewModel) {\n return undefined;\n }\n\n const combo = new ComboModel();\n combo.key = optionBankViewModel.uuid;\n combo.label = optionBankViewModel.name;\n\n return combo;\n }\n\n public static fromOptionCountryViewModel(optionCountryViewModels: OptionCountryViewModel[]): Array {\n const comboModels = new Array();\n optionCountryViewModels.forEach((optionCountryViewModel) => {\n comboModels.push(this.fromOptionCountryViewModelSingle(optionCountryViewModel));\n });\n comboModels.sort(SortHelper.sortByLabelAlphabetically);\n\n return comboModels;\n }\n\n public static fromOptionCountryViewModelSingle(optionCountryViewModel: OptionCountryViewModel): ComboModel {\n const comboModel = new ComboModel();\n comboModel.disabledFlag = optionCountryViewModel.disabledFlag;\n comboModel.key = optionCountryViewModel.uuid;\n comboModel.label = optionCountryViewModel.label;\n\n return comboModel;\n }\n\n public static fromOptionShadeGuideViewModel(optionShadeGuideViewModels: OptionShadeGuideViewModel[]): Array {\n const comboModels = new Array();\n optionShadeGuideViewModels.forEach((optionShadeGuideViewModel) => {\n const comboModel = new ComboModel();\n comboModel.disabledFlag = optionShadeGuideViewModel.disabledFlag;\n comboModel.displayOrder = optionShadeGuideViewModel.displayOrder;\n comboModel.key = optionShadeGuideViewModel.uuid;\n comboModel.label = optionShadeGuideViewModel.name;\n comboModels.push(comboModel);\n });\n\n return comboModels;\n }\n\n public static fromOptionTimeZoneViewModelSingle(optionTimeZoneViewModel: OptionTimeZoneViewModel): ComboModel {\n const comboModel = new ComboModel();\n comboModel.disabledFlag = optionTimeZoneViewModel.disabledFlag;\n comboModel.key = optionTimeZoneViewModel.uuid;\n comboModel.label = optionTimeZoneViewModel.label;\n\n return comboModel;\n }\n\n public static getDefaultCountry(countries: OptionCountryViewModel[]): ComboModel {\n let defaultCountry: ComboModel;\n const optionCountryViewModel = countries.find((country) => country.defaultFlag);\n if (optionCountryViewModel) {\n defaultCountry = ComboModelHelper.fromOptionCountryViewModelSingle(optionCountryViewModel);\n } else {\n defaultCountry = new ComboModel(null, null, null, null);\n }\n return defaultCountry;\n }\n\n public static getDefaultRate(rates: ExtendOptionRateViewModel[]): ComboModel {\n let defaultRate: ComboModel;\n const optionRateViewModel = rates.find((rate) => rate.defaultFlag);\n if (optionRateViewModel) {\n defaultRate = ComboModelHelper.fromExtendOptionRateViewModelSingle(optionRateViewModel);\n }\n\n return defaultRate;\n }\n\n private static _fromOptionRateViewModelSingle(optionRateViewModel: OptionRateViewModel): ComboModel {\n const comboModel = new ComboModel();\n comboModel.disabledFlag = optionRateViewModel.disabledFlag;\n comboModel.key = optionRateViewModel.uuid;\n comboModel.label = optionRateViewModel.label;\n\n return comboModel;\n }\n}\n","export class ComboModel {\n public defaultFlag = false;\n public disabledFlag = false;\n public displayOrder: number;\n public key: string;\n public label: string;\n public parent: ComboModel = null;\n\n public constructor(key: string = null, label: string = null, disabledFlag = false, parent: ComboModel = null, defaultFlag = false) {\n this.defaultFlag = defaultFlag;\n this.disabledFlag = disabledFlag;\n this.key = key;\n this.label = label;\n this.parent = parent;\n }\n}\n","\n \n \n star\n not_interested\n \n {{ comboFormControl.value.parent.label }} /\n \n {{ comboFormControl.value.label }}\n \n\n \n {{ placeholderWhenNoOptionIsSelected }}\n \n\n \n\n \n star\n not_interested\n \n {{ comboModel.parent.label }} /\n \n {{ comboModel.label }}\n \n \n \n clear\n \n {{ requiredFieldValidatorMessage }}\n {{ hint }} \n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatSelect, MatSelectChange } from '@angular/material/select';\nimport { FocusService } from 'app/core/services/focus.service';\nimport { CustomValidators } from 'app/shared/validators/custom-validators';\nimport { ComboModel } from './combo-model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-combo',\n styleUrls: ['./combo.component.scss'],\n templateUrl: './combo.component.html',\n})\nexport class ComboComponent implements OnChanges {\n @ViewChild('_matSelect') public _matSelect: MatSelect;\n // The form control associated with the mat-select\n // For filters in list: the default value is used\n // For create and edit form: the input should be set by the parent component\n @Input() public comboFormControl = new FormControl(null);\n\n @Input() public defaultValue: ComboModel;\n\n // Indicates whether the combo choice will display information about his existing parent inside combo.\n @Input() public displayParentLabelFlag = true;\n\n @Input() public eraseButtonFlag = false;\n\n @Input() public hint: string;\n\n // The selected uuid\n @Input() public keySelected: string | boolean;\n\n // Add specific css class when context is a list\n @Input() public listModeFlag = false;\n\n // Available options\n @Input() public options: ComboModel[];\n\n // Placeholder displayed when an option is selected\n @Input() public placeholderWhenAnOptionIsSelected: string;\n\n // Placeholder displayed when no option is selected\n @Input() public placeholderWhenNoOptionIsSelected: string;\n\n // The message to display if the required validator fails.\n @Input() public requiredFieldValidatorMessage: string;\n\n // Whether the field is required. if true a star will be displayed next to the field label.\n @Input() public requiredFlag: boolean;\n\n // Emitted every time a user change the selected value\n @Output() public selectedChange = new EventEmitter();\n @Output() public selectionChange = new EventEmitter();\n\n // The actual placeholder beeing displayed\n public placeholder: string;\n\n public constructor(private _changeDetectorRef: ChangeDetectorRef, private _focusService: FocusService) {}\n\n public static createForm(comboModel: ComboModel, requiredFlag: boolean, disabledFlag = false): FormControl {\n const validators = [];\n if (requiredFlag) {\n validators.push(CustomValidators.required);\n }\n\n if (!comboModel?.key) {\n return new FormControl({ value: undefined, disabled: disabledFlag }, validators);\n } else {\n return new FormControl({ value: comboModel, disabled: disabledFlag }, validators);\n }\n }\n\n public eraseFilterClickedHandler(): void {\n if (this.defaultValue && this.defaultValue.key === this.comboFormControl.value?.key) {\n return;\n }\n this.comboFormControl.setValue(this.defaultValue);\n this.valueChange(this.defaultValue);\n }\n\n public markForCheck(): void {\n this._changeDetectorRef.markForCheck();\n }\n\n public ngOnChanges(): void {\n if (this.options) {\n const selected = this.options.find((x) => x.key === this.keySelected);\n this.comboFormControl.setValue(selected);\n this._setPlaceholder();\n }\n }\n\n public onElementSelectionChange(matSelectChange: MatSelectChange): void {\n this.selectionChange.emit(matSelectChange);\n this._setPlaceholder();\n }\n\n public resetCombo(): void {\n this.comboFormControl.setValue(undefined);\n }\n\n public setFocus(): void {\n this._focusService.setTimeoutOutsideAngular(() => {\n this._matSelect?.focus();\n });\n }\n\n public valueChange(comboModel: ComboModel): void {\n this.selectedChange.emit(comboModel);\n this._setPlaceholder();\n }\n\n private _setPlaceholder(): void {\n if (this.comboFormControl.value || !this.placeholderWhenNoOptionIsSelected) {\n this.placeholder = this.placeholderWhenAnOptionIsSelected;\n } else {\n this.placeholder = this.placeholderWhenNoOptionIsSelected;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ComboComponent } from './combo.component';\n\n@NgModule({\n declarations: [ComboComponent],\n imports: [\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n FormsModule,\n MatOptionModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatButtonModule,\n MatDividerModule,\n MatTooltipModule,\n ReactiveFormsModule,\n ],\n exports: [ComboComponent],\n})\nexport class ComboModule {}\n","
    \n
    \n
    {{ title }}
    \n
    \n \n close\n \n
    \n
    \n\n
    \n \n
    \n \n
    \n
    \n \n \n \n \n
    \n
    \n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { FocusService } from 'app/core/services/focus.service';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-abstract-dialog',\n styleUrls: ['./abstract-dialog.component.scss'],\n templateUrl: './abstract-dialog.component.html',\n})\nexport class AbstractDialogComponent implements OnChanges {\n @Output() public acceptEvent = new EventEmitter();\n @Input() public acceptLabel: string;\n @Input() public cdkFocusInitialOnButtonFlag = true;\n @Input() public cdkFocusInitialOnCancelButtonFlag = false;\n @Output() public closeEvent = new EventEmitter();\n @Output() public declineEvent = new EventEmitter();\n @Input() public declineLabel: string;\n @Input() public displayActionButtonsFlag = false;\n @Input() public title: string;\n @ViewChild('_acceptButton') private _acceptButton: MatButton;\n @ViewChild('_declineButton') private _declineButton: MatButton;\n\n public constructor(private _focusService: FocusService) {}\n\n public closeEventHandler(): void {\n this.closeEvent.emit();\n }\n\n public ngOnChanges(): void {\n this.setFocus();\n }\n\n public onAcceptClickedHandler(): void {\n this.closeEvent.emit();\n this.acceptEvent.emit();\n }\n\n public onDeclineClickedHandler(): void {\n this.closeEvent.emit();\n this.declineEvent.emit();\n }\n\n public setFocus(): void {\n if (this.displayActionButtonsFlag && this.cdkFocusInitialOnButtonFlag) {\n this._focusService.setTimeoutOutsideAngular(() => {\n if (this.cdkFocusInitialOnCancelButtonFlag) {\n this._declineButton?.focus();\n } else {\n this._acceptButton?.focus();\n }\n });\n }\n }\n}\n","\n
    \n \n
    \n \n {{ buttonListDialog.button2Label }}\n \n
    \n\n \n {{ buttonListDialog.button3Label }}\n \n\n
    \n \n {{ buttonListDialog.button4Label }}\n \n\n
    \n \n {{ buttonListDialog.button5Label }}\n \n\n
    \n \n {{ buttonListDialog.button6Label }}\n \n\n
    \n
    {{ helpTitle }}
    \n \n \n
    \n
    \n
    \n","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ButtonListDialogModel } from './models/button-list-dialog-model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-button-list-dialog',\n styleUrls: ['./button-list-dialog.component.scss'],\n templateUrl: './button-list-dialog.component.html',\n})\nexport class ButtonListDialogComponent {\n @Output() public button1ClickedEvent = new EventEmitter();\n @Output() public button2ClickedEvent = new EventEmitter();\n @Output() public button3ClickedEvent = new EventEmitter();\n @Output() public button4ClickedEvent = new EventEmitter();\n @Output() public button5ClickedEvent = new EventEmitter();\n @Output() public button6ClickedEvent = new EventEmitter();\n @Input() public buttonListDialog: ButtonListDialogModel;\n @Output() public closeEvent = new EventEmitter();\n @Input() public helpLinkLabel1: string;\n @Input() public helpLinkLabel2: string;\n @Input() public helpLinkUrl1: string;\n @Input() public helpLinkUrl2: string;\n @Input() public helpTitle: string;\n\n public constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) buttonListDialog: ButtonListDialogModel\n ) {\n if (buttonListDialog) {\n this.buttonListDialog = buttonListDialog;\n }\n this.closeEvent.subscribe(() => {\n dialogRef.close();\n });\n }\n\n public button1ClickedHandler(): void {\n this.closeEvent.emit();\n this.button1ClickedEvent.emit();\n }\n\n public button2ClickedHandler(): void {\n this.closeEvent.emit();\n this.button2ClickedEvent.emit();\n }\n\n public button3ClickedHandler(): void {\n this.closeEvent.emit();\n this.button3ClickedEvent.emit();\n }\n\n public button4ClickedHandler(): void {\n this.closeEvent.emit();\n this.button4ClickedEvent.emit();\n }\n\n public button5ClickedHandler(): void {\n this.closeEvent.emit();\n this.button5ClickedEvent.emit();\n }\n\n public button6ClickedHandler(): void {\n this.closeEvent.emit();\n this.button6ClickedEvent.emit();\n }\n\n public closeEventHandler(): void {\n this.closeEvent.emit();\n }\n}\n","export class ButtonListDialogModel {\n public button1Label: string;\n public button2Label: string;\n public button2TopSeparatorFlag: boolean;\n public button3Label: string;\n public button3TopSeparatorFlag: boolean;\n public button4Label: string;\n public button4TopSeparatorFlag: boolean;\n public button5Label: string;\n public button5TopSeparatorFlag: boolean;\n public button6Label: string;\n public button6TopSeparatorFlag: boolean;\n public title: string;\n}\n","import { ButtonListDialogModel } from '../models/button-list-dialog-model';\n\nexport class ButtonListDialogModelHelper {\n public static build(): ButtonListDialogModel {\n const buttonListDialog = new ButtonListDialogModel();\n buttonListDialog.title = 'Sélectionner';\n return buttonListDialog;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterModule } from '@angular/router';\nimport { EmptyListComponent } from './empty-list.component';\n\n@NgModule({\n declarations: [EmptyListComponent],\n imports: [\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n MatIconModule,\n RouterModule,\n ],\n exports: [EmptyListComponent],\n})\nexport class EmptyListModule {}\n","import { CustomerModel } from 'app/shared/components/pickers/customer-picker/models/customer.model';\n\nexport class CustomerFilterPanelModel {\n public customer: CustomerModel;\n public showCustomerMembersFlag: boolean;\n}\n","import { LaboratoryResourceModel } from 'app/shared/components/pickers/laboratory-resource-picker/models/laboratory-resource-model';\n\nexport class LaboratoryResourceFilterPanelModel {\n public laboratoryResource: LaboratoryResourceModel;\n}\n","import { Moment } from 'moment';\n\nexport class FormDateIntervalModel {\n public dateFrom: Moment;\n public dateFromDisabledFlag = false;\n public dateFromRequiredFlag = false;\n public dateTo: Moment;\n public dateToDisabledFlag = false;\n public dateToRequiredFlag = false;\n\n public constructor(dateFromRequiredFlag: boolean, dateToRequiredFlag: boolean) {\n this.dateFromRequiredFlag = dateFromRequiredFlag;\n this.dateToRequiredFlag = dateToRequiredFlag;\n }\n}\n","import { OptionDeliveryRouteViewModel } from 'app/shared/prothesis-api-view-models/option-delivery-route.view-model';\nimport { ReadDeliveryFormViewModel } from 'app/shared/prothesis-api-view-models/read-delivery-form.view-model';\nimport { ReadDeliveryRouteViewModel } from 'app/shared/prothesis-api-view-models/read-delivery-route.view-model';\nimport { ReadFittingFormViewModel } from 'app/shared/prothesis-api-view-models/read-fitting-form.view-model';\nimport { ReadQuoteViewModel } from 'app/shared/prothesis-api-view-models/read-quote.view-model';\nimport { ReadWorkFormViewModel } from 'app/shared/prothesis-api-view-models/read-work-form.view-model';\nimport { FormTimeModel } from '../models/form-time-model';\n\nexport class FormTimeModelHelper {\n public static build(defaultDeliveryRoute: string = null): FormTimeModel {\n const formTime = new FormTimeModel();\n if (defaultDeliveryRoute) {\n formTime.timeValue = defaultDeliveryRoute;\n }\n return formTime;\n }\n\n public static fromOptionDeliveryRouteViewModel(optionDeliveryRoutes: OptionDeliveryRouteViewModel[]): FormTimeModel {\n const strDefaultDeliveryRoute = this.parseDefaultDeliveryRoute(optionDeliveryRoutes);\n const formTime = FormTimeModelHelper.build(strDefaultDeliveryRoute);\n return formTime;\n }\n\n public static fromReadDeliveryFormViewModel(readDeliveryFormViewModel: ReadDeliveryFormViewModel): FormTimeModel {\n const formTime = FormTimeModelHelper.build();\n formTime.timeValue = this.parseTime(readDeliveryFormViewModel.deliveryRouteHour, readDeliveryFormViewModel.deliveryRouteMinute);\n return formTime;\n }\n\n public static fromReadDeliveryRouteViewModelSingle(readDeliveryRouteViewModel: ReadDeliveryRouteViewModel): FormTimeModel {\n const formTime = FormTimeModelHelper.build();\n formTime.timeValue = this.parseTime(readDeliveryRouteViewModel.deliveryRouteHour, readDeliveryRouteViewModel.deliveryRouteMinute);\n return formTime;\n }\n\n public static fromReadFittingFormViewModel(readFittingFormViewModel: ReadFittingFormViewModel): FormTimeModel {\n const formTime = FormTimeModelHelper.build();\n formTime.timeValue = this.parseTime(readFittingFormViewModel.deliveryRouteHour, readFittingFormViewModel.deliveryRouteMinute);\n return formTime;\n }\n\n public static fromReadQuoteViewModel(readQuoteViewModel: ReadQuoteViewModel): FormTimeModel {\n const formTime = FormTimeModelHelper.build();\n formTime.timeValue = this.parseTime(readQuoteViewModel.deliveryRouteHour, readQuoteViewModel.deliveryRouteMinute);\n return formTime;\n }\n\n public static fromReadWorkFormViewModel(readWorkFormViewModel: ReadWorkFormViewModel): FormTimeModel {\n const formTime = FormTimeModelHelper.build();\n formTime.timeValue = this.parseTime(readWorkFormViewModel.deliveryRouteHour, readWorkFormViewModel.deliveryRouteMinute);\n return formTime;\n }\n\n public static parseDefaultDeliveryRoute(optionDeliveryRoutes: OptionDeliveryRouteViewModel[]): string {\n const defaultDeliveryRoute = optionDeliveryRoutes?.find((x) => x.defaultFlag);\n if (defaultDeliveryRoute) {\n return FormTimeModelHelper.parseTime(defaultDeliveryRoute.deliveryRouteHour, defaultDeliveryRoute.deliveryRouteMinute);\n }\n return null;\n }\n\n public static parseTime(hour: number, minute: number) {\n if (!hour && hour !== 0) {\n return null;\n }\n if (!minute && minute !== 0) {\n return null;\n }\n return `${this._padLeft(hour.toString(), '0', 2)}:${this._padLeft(minute.toString(), '0', 2)}`;\n }\n\n public static toTime(deliveryRoute: string): number {\n const splittedDeliveryRoute = deliveryRoute.split(':');\n if (splittedDeliveryRoute.length === 2) {\n const strHour = splittedDeliveryRoute[0].trim();\n const strMin = this._padLeft(splittedDeliveryRoute[1].trim(), '0', 2);\n return Number(`${strHour}${strMin}`);\n }\n return null;\n }\n\n public static toViewModel(formTime: FormTimeModel): { deliveryRouteHour: number; deliveryRouteMinute: number } {\n let deliveryRouteHour = null;\n let deliveryRouteMinute = null;\n if (formTime.timeValue) {\n const [hours, mins] = formTime.timeValue.split(':');\n if (hours) {\n deliveryRouteHour = Number(hours);\n } else {\n deliveryRouteHour = null;\n }\n if (mins) {\n deliveryRouteMinute = Number(mins);\n } else {\n deliveryRouteMinute = null;\n }\n return {\n deliveryRouteHour: deliveryRouteHour,\n deliveryRouteMinute: deliveryRouteMinute,\n };\n } else {\n return {\n deliveryRouteHour: null,\n deliveryRouteMinute: null,\n };\n }\n }\n\n private static _padLeft(text: string, padChar: string, size: number): string {\n return (String(padChar).repeat(size) + text).substr(size * -1, size);\n }\n}\n","export class FormTimeModel {\n public timeValue: string;\n}\n","export class GridFilterModel {\n public textFilter: string;\n\n public constructor(textFilter: string) {\n this.textFilter = textFilter;\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { GridFilterFormGroup } from './grid-filter-form-group';\nimport { GridFilterModel } from './grid-filter-model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-grid-filter',\n styleUrls: ['./grid-filter.component.scss'],\n templateUrl: './grid-filter.component.html',\n})\nexport class GridFilterComponent implements OnChanges {\n // Determines if label of textfilter input should be accent or primary color\n @Input() public accentThemeFlag = true;\n @Input() public gridFilter: GridFilterModel;\n @Output() public textFilterChangedEvent = new EventEmitter();\n @ViewChild('_textFilterInput', { static: true }) private _textFilterInput: ElementRef;\n public formGroup: FormGroup;\n public textFilterAppliedFlag = false;\n\n public clear(): boolean {\n this.textFilterAppliedFlag = false;\n this.formGroup.controls.textFilter.setValue('');\n this.textFilterChangedEvent.emit('');\n\n // Don't submit a form if app-grid-filter is used inside a form\n return false;\n }\n\n public ngOnChanges(): void {\n if (!this.gridFilter) {\n this.gridFilter = new GridFilterModel('');\n }\n\n this._createForm();\n this.textFilterAppliedFlag = this.gridFilter.textFilter ? true : false;\n }\n\n public setFocus(): void {\n this._textFilterInput?.nativeElement?.focus();\n }\n\n public textFilterApplied(): boolean {\n this.textFilterChangedEvent.emit(this.formGroup.getRawValue().textFilter);\n this.textFilterAppliedFlag = true;\n\n // Don't submit a form if app-grid-filter is used inside a form\n return false;\n }\n\n public textFilterChangedHandler(): void {\n this.textFilterAppliedFlag = false;\n }\n\n private _createForm(): void {\n this.formGroup = new FormGroup({\n textFilter: new FormControl(this.gridFilter.textFilter),\n });\n }\n}\n","
    \n
    \n \n \n \n \n clear\n \n \n
    \n
    \n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { GridFilterComponent } from './grid-filter.component';\n\n@NgModule({\n declarations: [GridFilterComponent],\n imports: [\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n FormsModule,\n MatIconModule,\n MatButtonModule,\n MatInputModule,\n MatTooltipModule,\n ReactiveFormsModule,\n ],\n exports: [GridFilterComponent],\n})\nexport class GridFilterModule {}\n","\n sort_off\n\n\n
    \n \n star\n \n
    \n \n \n \n Tri croissant\n star_border\n \n \n Tri décroissant\n star_border\n \n \n \n \n \n {{ sortItem.label }}\n star_border\n \n \n \n
    \n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { GridSortModel } from './grid-sort.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-grid-sort',\n styleUrls: ['./grid-sort.component.scss'],\n templateUrl: './grid-sort.component.html',\n})\nexport class GridSortComponent {\n @Output() public currentSortActive = new EventEmitter();\n @Output() public currentSortDirection = new EventEmitter();\n @Input() public gridSortModel: GridSortModel[] = [];\n @Output() public saveFavoriteClicked = new EventEmitter();\n @Input() public sortSetToDefaultValueFlag: boolean;\n public sortActiveFormControl = new FormControl('');\n public sortDirectionFormControl = new FormControl('');\n private _sortDirectionFavorite: string;\n private _sortFavorite: string;\n\n public set sortActive(newSortActive: string) {\n this.sortActiveFormControl.setValue(newSortActive);\n }\n\n public set sortDirection(newSortDirection: string) {\n this.sortDirectionFormControl.setValue(newSortDirection);\n }\n\n public get sortDirectionFavorite(): string {\n return this._sortDirectionFavorite;\n }\n\n public set sortDirectionFavorite(newSortDirectionFavorite: string) {\n this._sortDirectionFavorite = newSortDirectionFavorite;\n }\n\n public get sortFavorite(): string {\n return this._sortFavorite;\n }\n\n public set sortFavorite(newSortFavorite: string) {\n this._sortFavorite = newSortFavorite;\n }\n\n public saveFavoriteClickedHandler(): void {\n this.saveFavoriteClicked.emit();\n }\n\n public sortActiveChange(): void {\n this.currentSortActive.emit(this.sortActiveFormControl.value);\n }\n\n public sortDirectionChange(): void {\n this.currentSortDirection.emit(this.sortDirectionFormControl.value);\n }\n}\n","
    \n
    \n \n
    \n \n {{ titleIcon }}\n \n \n {{ backLinkIcon }}\n \n \n {{dateIndicatorIconSvg}}\n
    \n
    \n \n
    {{ groupTitle }}
    \n \n
    \n \n star\n not_interested\n \n {{ pageTitle }}\n  {{note}}\n
    \n
    {{ tag }}
    \n
    \n \n subdirectory_arrow_right\n not_interested\n {{ pageSubTitle }}\n
    \n \n
    \n \n \n \n \n \n \n \n\n \n {{ rightButtonLabel }}\n \n \n \n\n\n
    \n
    \n \n \n
    \n \n
    \n\n\n
    \n
    \n \n add\n \n
    \n
    \n\n","import { ChangeDetectionStrategy, Component, HostBinding, HostListener, Input, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { fuseAnimations } from '@fuse/animations';\nimport { DragAndDropService } from 'app/core/services/drag-and-drop.service';\nimport { RouterHistoryService } from 'app/core/services/router-history.service';\n\n@Component({\n animations: fuseAnimations,\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-header',\n styleUrls: ['./header.component.scss'],\n templateUrl: './header.component.html',\n})\nexport class HeaderComponent implements OnInit {\n @Input() public addButtonClickCustomHandler: () => void;\n // Label of the button \"add\" present on the lists.\n @Input() public addButtonLabel: string;\n // Link for the button \"add\". If no link in input, it doesn't display the add button.\n @Input() public addButtonLink: string;\n // When true : a click on the back button will always use the @see defaultBackLink.\n // When false : a click on the back button will use the navigation history if not empty else the @see defaultBackLink.\n @Input() public alwaysUseDefaultBackLink = false;\n @Input() public backButtonClickCustomHandler: () => void;\n // Label of the button \"return\".\n @Input() public backLabel = 'Retour [Échap]';\n // Icon of the the button \"return\".\n @Input() public backLinkIcon = 'arrow_back';\n // Indicates whether a click on the back link should replace the last entry in window.history\n @Input() public backLinkReplaceUrl = true;\n @HostBinding('class') public class;\n // DateIndicator\n @Input() public dateIndicatorBgColor: string;\n @Input() public dateIndicatorIconColor: string;\n @Input() public dateIndicatorIconSvg: string;\n @Input() public dateIndicatorMatTooltip: string;\n // Link used by the back button if there is no navigation history.\n @Input() public defaultBackLink: string;\n // Disable or enable the \"add\" button.\n @Input() public disabledAddButtonFlag = false;\n // Sometimes, the title and sub title are linked (ex : family and subfamily).\n // This input determines the displaying of an icon that implies this special bound between title and subtitle.\n @Input() public displaySubTitleArrowFlag = false;\n // Title of group\n @Input() public groupTitle: string;\n // Sometimes, the hat represents an object that can be disabled or not.\n // If this represented object is disabled, display a special icon to implies this notion.\n @Input() public hatDisabledFlag: false;\n // Label at the top of header.\n @Input() public hatLabel: string;\n // Style of label at the top of header.\n @Input() public hatStyle: 'accent' | 'accent-border' | 'primary' | 'primary-border' = 'accent';\n // Width label at the top of header.\n @Input() public hatWidth: 'auto' | 'fixed' = 'auto';\n @Input() public note: string;\n // Label of the subtitle.\n @Input() public pageSubTitle: string;\n // Sometimes, the sub title represents an object that can be disabled or not.\n // If this represented object is disabled, display a special icon to implies this notion.\n @Input() public pageSubTitleDisabledFlag = false;\n // Decide if pageSubTitle must be emphasized or de-emphasized by font size\n @Input() public pageSubTitleEmphasizeFlag = false;\n // Label of the title.\n @Input() public pageTitle: string;\n // If page title represents a disabled object, display a canceled icon.\n @Input() public pageTitleCanceledFlag = false;\n // If page title represents a default object, display a star icon.\n @Input() public pageTitleDefaultFlag = false;\n // If page title represents a disabled object, display a disabled icon.\n @Input() public pageTitleDisabledFlag = false;\n // If page title represents a proceed object, display a proceed icon.\n @Input() public pageTitleProceedFlag = false;\n // Label of the right button.\n @Input() public rightButtonLabel: string;\n // This input determines the display of a special label for documents\n // Link of the right button. If no link in input, it doesn't display the right button.\n @Input() public rightButtonLink: string;\n @Input() public tag: string;\n // Icon of the page\n @Input() public titleIcon: string;\n\n @Input() public truncatedContentWidth: string;\n public constructor(\n private _dialog: MatDialog,\n private _dragAndDropService: DragAndDropService,\n private _router: Router,\n private _routerHistoryService: RouterHistoryService\n ) {}\n\n public addButtonClickedHandler(): void {\n if (!this.addButtonClickCustomHandler) {\n this._router.navigate([this.addButtonLink]);\n } else {\n this.addButtonClickCustomHandler();\n }\n }\n\n public backButtonClickedHandler(): void {\n if (this.alwaysUseDefaultBackLink && this.defaultBackLink) {\n this._router.navigate([this.defaultBackLink], { replaceUrl: this.backLinkReplaceUrl });\n return;\n }\n if (!this.backButtonClickCustomHandler) {\n this._routerHistoryService.goToPreviousUrl(this.defaultBackLink, this.backLinkReplaceUrl);\n } else {\n this.backButtonClickCustomHandler();\n }\n }\n\n @HostListener('window:keydown.escape', ['$event'])\n public keydownEscape(): void {\n if (\n this.defaultBackLink &&\n !this._dragAndDropService.draggingFlag &&\n this._dialog.openDialogs &&\n this._dialog.openDialogs.length === 0\n ) {\n this.backButtonClickedHandler();\n }\n }\n\n public ngOnInit(): void {\n this.class = this.addButtonLink ? 'host-add-button' : 'host-no-add-button';\n }\n}\n","
    \n
    \n \n {{ iconName }}\n
    \n
    \n {{ message1 }}\n
    \n {{ message2 }}\n
    \n {{ linkText }}\n
    \n
    \n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-empty-list',\n styleUrls: ['./empty-list.component.scss'],\n templateUrl: './empty-list.component.html',\n})\nexport class EmptyListComponent {\n @Input() public iconName = 'svg_search_guide';\n @Input() public link: string;\n @Output() public linkClickedEvent = new EventEmitter();\n @Input() public linkText: string;\n @Input() public message1 = 'Aucun résultat pour les critères sélectionnés.';\n @Input() public message2: string;\n @Input() public queryParams: JSON;\n\n public constructor(private _router: Router) {}\n\n public linkClickedHandler(): void {\n if (this.link) {\n let navigationExtras: NavigationExtras;\n if (this.queryParams) {\n navigationExtras = {\n queryParams: this.queryParams,\n };\n }\n\n this._router.navigate([this.link], navigationExtras);\n }\n this.linkClickedEvent.emit();\n }\n}\n","
    \n \n\n \n\n \n\n \n\n \n\n \n
    \n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-list-result',\n styleUrls: ['./list-result.component.scss'],\n templateUrl: './list-result.component.html',\n})\nexport class ListResultComponent implements OnChanges {\n @Input() public disableCreationFlag = false;\n @Input() public elementCreationIcon = 'svg_search_guide';\n @Input() public elementCreationLink: string;\n @Output() public elementCreationLinkClickedEvent = new EventEmitter();\n @Input() public elementCreationLinkLabel: string;\n @Input() public elementCreationMessage: string;\n @Input() public elementCreationMessage2: string;\n @Input() public elementCreationQueryParams: JSON;\n @Input() public existenceFlag: boolean;\n\n @Input() public prerequisites1CreationIcon = 'sentiment_dissatisfied';\n @Input() public prerequisites1CreationLink: string;\n @Input() public prerequisites1CreationLinkLabel: string;\n @Input() public prerequisites1CreationMessage: string;\n @Input() public prerequisites1CreationMessage2: string;\n @Input() public prerequisites1TotalCount: number;\n\n @Input() public prerequisites2CreationIcon = 'sentiment_dissatisfied';\n @Input() public prerequisites2CreationLink: string;\n @Input() public prerequisites2CreationLinkLabel: string;\n @Input() public prerequisites2CreationMessage: string;\n @Input() public prerequisites2CreationMessage2: string;\n @Input() public prerequisites2TotalCount: number;\n\n @Input() public prerequisites3CreationIcon = 'sentiment_dissatisfied';\n @Input() public prerequisites3CreationLink: string;\n @Input() public prerequisites3CreationLinkLabel: string;\n @Input() public prerequisites3CreationMessage: string;\n @Input() public prerequisites3CreationMessage2: string;\n @Input() public prerequisites3TotalCount: number;\n\n @Input() public totalCount: number;\n\n public displayMode: string = null;\n\n /**\n * Determine which view to display inside the page:\n * nothing : used at the first loading when we don't want to show \"no result\" screen to the user waiting the API answer.\n * the list\n * the 'no result for the selected criteria' icon\n * the 'no 'element', please create one' icon\n */\n public determineDisplayMode(): string {\n if (this.totalCount && this.totalCount > 0) {\n return 'List';\n } else {\n if (this.disableCreationFlag === true || this.existenceFlag === null || this.existenceFlag === undefined) {\n return 'EmptyList';\n }\n\n if (this.prerequisites1TotalCount !== null && this.prerequisites1TotalCount !== undefined) {\n if (this.prerequisites1TotalCount < 1) {\n return 'NoOptions1';\n }\n }\n\n if (this.prerequisites2TotalCount !== null && this.prerequisites2TotalCount !== undefined) {\n if (this.prerequisites2TotalCount < 1) {\n return 'NoOptions2';\n }\n }\n\n if (this.prerequisites3TotalCount !== null && this.prerequisites3TotalCount !== undefined) {\n if (this.prerequisites3TotalCount < 1) {\n return 'NoOptions3';\n }\n }\n\n if (!this.existenceFlag) {\n return 'NoElement';\n }\n\n return 'EmptyList';\n }\n }\n\n public elementCreationLinkClickedHandler(): void {\n this.elementCreationLinkClickedEvent.emit();\n }\n\n public ngOnChanges(): void {\n this.displayMode = this.determineDisplayMode();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EmptyListModule } from '../empty-list/empty-list.module';\nimport { ListResultComponent } from './list-result.component';\n\n@NgModule({\n declarations: [ListResultComponent],\n imports: [CommonModule, EmptyListModule],\n exports: [ListResultComponent],\n})\nexport class ListResultModule {}\n","export enum NoteTypeEnum {\n Information = 0,\n Warning = 1,\n Error = 2,\n}\n","\n
    \n error\n \n warning\n
    \n {{ note.message }}\n {{ note.messageLine2 }}\n {{ note.linkLabel }} \n
    \n
    \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NoteTypeEnum } from './note-type.enum';\nimport { NoteModel } from './note.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-note',\n templateUrl: './note.component.html',\n styleUrls: ['./note.component.scss'],\n})\nexport class NoteComponent {\n @Output() public linkClickedEvent = new EventEmitter();\n @Input() public note: NoteModel;\n public noteTypeError = NoteTypeEnum.Error;\n public noteTypeInformation = NoteTypeEnum.Information;\n public noteTypeWarning = NoteTypeEnum.Warning;\n\n public constructor(private _router: Router) {}\n\n public performAction(): void {\n if (this.note && this.note.link) {\n this._router.navigateByUrl(this.note.link);\n this.linkClickedEvent.emit();\n }\n }\n}\n","import { NoteTypeEnum } from './note-type.enum';\n\nexport class NoteModel {\n public link: string;\n public linkLabel: string;\n public message: string;\n public messageLine2: string;\n public noteType: NoteTypeEnum;\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, ViewChild } from '@angular/core';\nimport { FocusService } from 'app/core/services/focus.service';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-pdf-viewer',\n styleUrls: ['./pdf-viewer.component.scss'],\n templateUrl: './pdf-viewer.component.html',\n})\nexport class PdfViewerComponent {\n @ViewChild('_pdfLink') private _pdfLink: ElementRef;\n\n public constructor(private _focusService: FocusService) {}\n\n public download(blob: Blob, filename: string): void {\n const blobURL = window.URL.createObjectURL(blob);\n this._pdfLink.nativeElement.href = blobURL;\n\n // Add a download attribute to force the browser to download the PDF instead of opening it.\n this._pdfLink.nativeElement.download = filename;\n this._pdfLink.nativeElement.click();\n this._focusService.setTimeoutOutsideAngular(() => {\n // For Chrome and Safari, it's necessary to delay revoking the ObjectUrl\n window.URL.revokeObjectURL(blobURL);\n }, 3600000);\n }\n\n public open(blob: Blob, filename: string): void {\n // https://stackoverflow.com/questions/53548182/can-i-set-the-filename-of-a-pdf-object-displayed-in-chrome\n const file = new File([blob], filename, { type: 'application/pdf' });\n const fileUrl = window.URL.createObjectURL(file);\n window.open(fileUrl, '_blank');\n this._focusService.setTimeoutOutsideAngular(() => {\n // For Chrome and Safari, it's necessary to delay revoking the ObjectUrl\n window.URL.revokeObjectURL(fileUrl);\n }, 3600000);\n }\n}\n","\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { PdfViewerComponent } from './pdf-viewer.component';\n\n@NgModule({\n declarations: [PdfViewerComponent],\n imports: [CommonModule],\n exports: [PdfViewerComponent],\n})\nexport class PdfViewerModule {}\n","import { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Customer/period-search-type.enum.helper';\nimport { PeriodSearchCreditDateType } from 'app/shared/enums/period-search-credit-date-type.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { PeriodSearchInvoiceDateType } from 'app/shared/enums/period-search-invoice-date-type.enum';\nimport { CreditFilter } from 'app/shared/prothesis-customer-api-filters/credit-filter';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-customer-api-filters/delivery-form-filter';\nimport { FittingFormFilter } from 'app/shared/prothesis-customer-api-filters/fitting-form-filter';\nimport { InvoiceFilter } from 'app/shared/prothesis-customer-api-filters/invoice-filter';\nimport { ProFormaFilter } from 'app/shared/prothesis-customer-api-filters/pro-forma-filter';\nimport { QuoteFilter } from 'app/shared/prothesis-customer-api-filters/quote-filter';\nimport { FormDateIntervalModel } from '../../form-date-interval/form-date-interval-model';\nimport { PeriodSearchInfoModel } from '../models/period-search-info-model';\nimport { PeriodSearchModel } from '../models/period-search-model';\nimport { PeriodSearchInfoModelHelper } from './laboratory-area-period-search-info-model-helper';\n\nexport class CustomerAreaPeriodSearchModelHelper {\n public static build(periodSearchTypeFavorite: string, periodSearchDateTypeDefault: string): PeriodSearchModel {\n const periodSearch = new PeriodSearchModel();\n periodSearch.periodSearchType = periodSearchTypeFavorite;\n periodSearch.periodSearchDateType = periodSearchDateTypeDefault;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = null;\n periodSearch.customPeriodSearchDate.dateTo = null;\n periodSearch.periodSearchInfo = PeriodSearchInfoModelHelper.build();\n return periodSearch;\n }\n\n public static fromCreditFilter(\n documentFilter: CreditFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = CustomerAreaPeriodSearchModelHelper.build(\n periodSearchTypeFavorite,\n PeriodSearchCreditDateType.CreditDate.toString()\n );\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchDateType) {\n periodSearch.periodSearchDateType = documentFilter.periodSearchDateType.toString();\n }\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n\n if (documentFilter.fromInvoiceDate) {\n periodSearch.periodSearchDateType = PeriodSearchCreditDateType.InvoiceDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromInvoiceDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toInvoiceDate),\n -1\n );\n } else if (documentFilter.fromCreditDate) {\n periodSearch.periodSearchDateType = PeriodSearchCreditDateType.CreditDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromCreditDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toCreditDate),\n -1\n );\n } else if (documentFilter.fromDeliveryDate) {\n periodSearch.periodSearchDateType = PeriodSearchCreditDateType.DeliveryDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n } else {\n periodSearch.periodSearchDateType = PeriodSearchCreditDateType.CreditDate.toString();\n }\n }\n\n return periodSearch;\n }\n\n public static fromDeliveryFormFilter(\n documentFilter: DeliveryFormFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = CustomerAreaPeriodSearchModelHelper.build(\n periodSearchTypeFavorite,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString()\n );\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchDateType) {\n periodSearch.periodSearchDateType = documentFilter.periodSearchDateType.toString();\n }\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n if (documentFilter.fromInvoiceDate) {\n periodSearch.periodSearchDateType = PeriodSearchDeliveryFormDateType.InvoiceDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromInvoiceDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toInvoiceDate),\n -1\n );\n } else if (documentFilter.fromDeliveryDate) {\n periodSearch.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n } else {\n periodSearch.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate.toString();\n }\n }\n\n return periodSearch;\n }\n\n public static fromFittingFormFilter(\n documentFilter: FittingFormFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = CustomerAreaPeriodSearchModelHelper.build(periodSearchTypeFavorite, '0');\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n }\n\n return periodSearch;\n }\n\n public static fromInvoiceFilter(\n documentFilter: InvoiceFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = CustomerAreaPeriodSearchModelHelper.build(\n periodSearchTypeFavorite,\n PeriodSearchInvoiceDateType.InvoiceDate.toString()\n );\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchDateType) {\n periodSearch.periodSearchDateType = documentFilter.periodSearchDateType.toString();\n }\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n if (documentFilter.fromInvoiceDate) {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromInvoiceDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toInvoiceDate),\n -1\n );\n } else if (documentFilter.fromDeliveryDate) {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n } else {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n }\n }\n\n return periodSearch;\n }\n\n public static fromProFormaFilter(\n documentFilter: ProFormaFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = CustomerAreaPeriodSearchModelHelper.build(\n periodSearchTypeFavorite,\n PeriodSearchInvoiceDateType.InvoiceDate.toString()\n );\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (documentFilter.periodSearchDateType) {\n periodSearch.periodSearchDateType = documentFilter.periodSearchDateType.toString();\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n if (documentFilter.fromInvoiceDate) {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromInvoiceDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toInvoiceDate),\n -1\n );\n } else if (documentFilter.fromDeliveryDate) {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n } else {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n }\n }\n\n return periodSearch;\n }\n\n public static fromQuoteFilter(\n documentFilter: QuoteFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = CustomerAreaPeriodSearchModelHelper.build(periodSearchTypeFavorite, '0');\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromQuoteDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toQuoteDate),\n -1\n );\n }\n\n return periodSearch;\n }\n\n public static toCreditFilter(\n documentFilter: CreditFilter,\n periodSearch: PeriodSearchModel,\n overridePeriodSearchDateType: boolean\n ): CreditFilter {\n let workingPeriodSearchDateType: string;\n if (overridePeriodSearchDateType) {\n workingPeriodSearchDateType = periodSearch.periodSearchDateType;\n } else if (documentFilter.periodSearchDateType) {\n workingPeriodSearchDateType = documentFilter.periodSearchDateType.toString();\n } else if (documentFilter.fromDeliveryDate) {\n workingPeriodSearchDateType = PeriodSearchCreditDateType.DeliveryDate.toString();\n } else if (documentFilter.fromInvoiceDate) {\n workingPeriodSearchDateType = PeriodSearchCreditDateType.InvoiceDate.toString();\n } else {\n workingPeriodSearchDateType = PeriodSearchCreditDateType.CreditDate.toString();\n }\n\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromCreditDate = null;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toCreditDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n switch (workingPeriodSearchDateType) {\n case PeriodSearchCreditDateType.DeliveryDate.toString():\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchCreditDateType.InvoiceDate.toString():\n documentFilter.fromInvoiceDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toInvoiceDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchCreditDateType.CreditDate.toString():\n documentFilter.fromCreditDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toCreditDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n break;\n }\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n\n switch (workingPeriodSearchDateType) {\n case PeriodSearchCreditDateType.DeliveryDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchCreditDateType.DeliveryDate;\n break;\n case PeriodSearchCreditDateType.InvoiceDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchCreditDateType.InvoiceDate;\n break;\n case PeriodSearchCreditDateType.CreditDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchCreditDateType.CreditDate;\n break;\n }\n }\n\n return documentFilter;\n }\n\n public static toDeliveryFormFilter(documentFilter: DeliveryFormFilter, periodSearch: PeriodSearchModel): DeliveryFormFilter {\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n }\n\n return documentFilter;\n }\n\n public static toFittingFormFilter(documentFilter: FittingFormFilter, periodSearch: PeriodSearchModel): FittingFormFilter {\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.toDeliveryDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n }\n\n return documentFilter;\n }\n\n public static toInvoicedDeliveryFormFilter(\n documentFilter: DeliveryFormFilter,\n periodSearch: PeriodSearchModel,\n overridePeriodSearchDateType: boolean\n ): DeliveryFormFilter {\n let workingPeriodSearchDateType: string;\n if (overridePeriodSearchDateType) {\n workingPeriodSearchDateType = periodSearch.periodSearchDateType;\n } else if (documentFilter.periodSearchDateType) {\n workingPeriodSearchDateType = documentFilter.periodSearchDateType.toString();\n } else if (documentFilter.fromInvoiceDate) {\n workingPeriodSearchDateType = PeriodSearchDeliveryFormDateType.InvoiceDate.toString();\n } else {\n workingPeriodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate.toString();\n }\n\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n switch (workingPeriodSearchDateType) {\n case PeriodSearchDeliveryFormDateType.DeliveryDate.toString():\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchDeliveryFormDateType.InvoiceDate.toString():\n documentFilter.fromInvoiceDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toInvoiceDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n }\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n\n switch (workingPeriodSearchDateType) {\n case PeriodSearchDeliveryFormDateType.DeliveryDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n break;\n case PeriodSearchDeliveryFormDateType.InvoiceDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.InvoiceDate;\n break;\n }\n }\n\n return documentFilter;\n }\n\n public static toInvoiceFilter(\n documentFilter: InvoiceFilter,\n periodSearch: PeriodSearchModel,\n overridePeriodSearchDateType: boolean\n ): InvoiceFilter {\n let workingPeriodSearchDateType: string;\n if (overridePeriodSearchDateType) {\n workingPeriodSearchDateType = periodSearch.periodSearchDateType;\n } else if (documentFilter.periodSearchDateType) {\n workingPeriodSearchDateType = documentFilter.periodSearchDateType.toString();\n } else if (documentFilter.fromDeliveryDate) {\n workingPeriodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate.toString();\n } else {\n workingPeriodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n }\n\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n switch (workingPeriodSearchDateType) {\n case PeriodSearchInvoiceDateType.DeliveryDate.toString():\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchInvoiceDateType.InvoiceDate.toString():\n documentFilter.fromInvoiceDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toInvoiceDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n }\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n\n switch (workingPeriodSearchDateType) {\n case PeriodSearchInvoiceDateType.DeliveryDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate;\n break;\n case PeriodSearchInvoiceDateType.InvoiceDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate;\n break;\n }\n }\n\n return documentFilter;\n }\n\n public static toProFormaFilter(\n documentFilter: ProFormaFilter,\n periodSearch: PeriodSearchModel,\n overridePeriodSearchDateType: boolean\n ): ProFormaFilter {\n let workingPeriodSearchDateType: string;\n if (overridePeriodSearchDateType) {\n workingPeriodSearchDateType = periodSearch.periodSearchDateType;\n } else if (documentFilter.periodSearchDateType) {\n workingPeriodSearchDateType = documentFilter.periodSearchDateType.toString();\n } else if (documentFilter.fromDeliveryDate) {\n workingPeriodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate.toString();\n } else {\n workingPeriodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n }\n\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n switch (workingPeriodSearchDateType) {\n case PeriodSearchInvoiceDateType.DeliveryDate.toString():\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchInvoiceDateType.InvoiceDate.toString():\n documentFilter.fromInvoiceDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toInvoiceDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n }\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n\n switch (workingPeriodSearchDateType) {\n case PeriodSearchInvoiceDateType.DeliveryDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate;\n break;\n case PeriodSearchInvoiceDateType.InvoiceDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate;\n break;\n }\n }\n\n return documentFilter;\n }\n\n public static toQuoteFilter(documentFilter: QuoteFilter, periodSearch: PeriodSearchModel): QuoteFilter {\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromQuoteDate = null;\n documentFilter.toQuoteDate = null;\n documentFilter.toDeliveryDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n documentFilter.fromQuoteDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toQuoteDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n }\n\n return documentFilter;\n }\n}\n","import { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { SearchCreditViewModel } from 'app/shared/prothesis-api-view-models/search-credit.view-model';\nimport { SearchDeliveryFormViewModel } from 'app/shared/prothesis-api-view-models/search-delivery-form.view-model';\nimport { SearchFileAssetViewModel } from 'app/shared/prothesis-api-view-models/search-file-asset-view-model';\nimport { SearchFittingFormViewModel } from 'app/shared/prothesis-api-view-models/search-fitting-form.view-model';\nimport { SearchInvoiceViewModel } from 'app/shared/prothesis-api-view-models/search-invoice.view-model';\nimport { SearchJournalViewModel } from 'app/shared/prothesis-api-view-models/search-journal.view-model';\nimport { SearchMiscellaneousOperationViewModel } from 'app/shared/prothesis-api-view-models/search-miscellaneous-operation.view-model';\nimport { SearchPaymentViewModel } from 'app/shared/prothesis-api-view-models/search-payment.view-model';\nimport { SearchProFormaViewModel } from 'app/shared/prothesis-api-view-models/search-pro-forma.view-model';\nimport { SearchQuoteViewModel } from 'app/shared/prothesis-api-view-models/search-quote.view-model';\nimport { SearchWorkFormViewModel } from 'app/shared/prothesis-api-view-models/search-work-form.view-model';\nimport { PeriodSearchInfoModel } from '../models/period-search-info-model';\n\nexport class PeriodSearchInfoModelHelper {\n public static _createModel(\n searchDocumentViewModel:\n | SearchCreditViewModel\n | SearchDeliveryFormViewModel\n | SearchFileAssetViewModel\n | SearchFittingFormViewModel\n | SearchInvoiceViewModel\n | SearchMiscellaneousOperationViewModel\n | SearchPaymentViewModel\n | SearchProFormaViewModel\n | SearchQuoteViewModel\n | SearchWorkFormViewModel\n ): PeriodSearchInfoModel {\n const periodSearchInfo = PeriodSearchInfoModelHelper.build();\n periodSearchInfo.periodSearchDateText = searchDocumentViewModel.periodSearchDateText;\n periodSearchInfo.periodSearchPage = searchDocumentViewModel.resultList.filter.periodSearchPage;\n periodSearchInfo.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(searchDocumentViewModel.periodSearchFromDate);\n periodSearchInfo.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(searchDocumentViewModel.periodSearchToDate),\n -1\n );\n return periodSearchInfo;\n }\n\n public static build(): PeriodSearchInfoModel {\n const periodSearchInfo = new PeriodSearchInfoModel();\n periodSearchInfo.periodSearchPage = 0;\n return periodSearchInfo;\n }\n\n public static buildNoPeriod(periodSearchPage: number): PeriodSearchInfoModel {\n const periodSearchInfo = PeriodSearchInfoModelHelper.build();\n periodSearchInfo.periodSearchPage = periodSearchPage;\n periodSearchInfo.periodSearchDateText = '...';\n return periodSearchInfo;\n }\n\n public static fromSearchJournalViewModel(searchJournalViewModel: SearchJournalViewModel): PeriodSearchInfoModel {\n const periodSearchInfo = PeriodSearchInfoModelHelper.build();\n periodSearchInfo.periodSearchDateText = searchJournalViewModel.periodSearchDateText;\n periodSearchInfo.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(searchJournalViewModel.periodSearchFromDate);\n periodSearchInfo.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(searchJournalViewModel.periodSearchToDate),\n -1\n );\n return periodSearchInfo;\n }\n\n public static fromViewModel(\n searchDocumentViewModel:\n | SearchCreditViewModel\n | SearchDeliveryFormViewModel\n | SearchFileAssetViewModel\n | SearchFittingFormViewModel\n | SearchInvoiceViewModel\n | SearchMiscellaneousOperationViewModel\n | SearchPaymentViewModel\n | SearchProFormaViewModel\n | SearchQuoteViewModel\n | SearchWorkFormViewModel\n ): PeriodSearchInfoModel {\n const periodSearchInfo = this._createModel(searchDocumentViewModel);\n return periodSearchInfo;\n }\n}\n","import { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { PeriodSearchTypeHelper } from 'app/shared/enum-helpers/Laboratory/period-search-type.enum.helper';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchCreditDateType } from 'app/shared/enums/period-search-credit-date-type.enum';\nimport { PeriodSearchDeliveryFormDateType } from 'app/shared/enums/period-search-delivery-form-date-type.enum';\nimport { PeriodSearchFileAssetDateType } from 'app/shared/enums/period-search-file-asset-date-type.enum';\nimport { PeriodSearchInvoiceDateType } from 'app/shared/enums/period-search-invoice-date-type.enum';\nimport { CreditFilter } from 'app/shared/prothesis-api-filters/credit-filter';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-api-filters/delivery-form-filter';\nimport { FileAssetFilter } from 'app/shared/prothesis-api-filters/file-asset-filter';\nimport { FittingFormFilter } from 'app/shared/prothesis-api-filters/fitting-form-filter';\nimport { InvoiceFilter } from 'app/shared/prothesis-api-filters/invoice-filter';\nimport { JournalFilter } from 'app/shared/prothesis-api-filters/journal-filter';\nimport { MiscellaneousOperationFilter } from 'app/shared/prothesis-api-filters/miscellaneous-operation-filter';\nimport { PaymentFilter } from 'app/shared/prothesis-api-filters/payment-filter';\nimport { ProFormaFilter } from 'app/shared/prothesis-api-filters/pro-forma-filter';\nimport { QuoteFilter } from 'app/shared/prothesis-api-filters/quote-filter';\nimport { WorkFormFilter } from 'app/shared/prothesis-api-filters/work-form-filter';\nimport { FormDateIntervalModel } from '../../form-date-interval/form-date-interval-model';\nimport { PeriodSearchInfoModel } from '../models/period-search-info-model';\nimport { PeriodSearchModel } from '../models/period-search-model';\nimport { PeriodSearchInfoModelHelper } from './laboratory-area-period-search-info-model-helper';\n\nexport class LaboratoryAreaPeriodSearchModelHelper {\n public static build(periodSearchTypeFavorite: string, periodSearchDateTypeDefault: string): PeriodSearchModel {\n const periodSearch = new PeriodSearchModel();\n periodSearch.periodSearchType = periodSearchTypeFavorite;\n periodSearch.periodSearchDateType = periodSearchDateTypeDefault;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = null;\n periodSearch.customPeriodSearchDate.dateTo = null;\n periodSearch.periodSearchInfo = PeriodSearchInfoModelHelper.build();\n return periodSearch;\n }\n\n public static buildNoPeriod(): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(null, null);\n periodSearch.periodSearchType = PeriodSearchType.FiscalYear.toString();\n return periodSearch;\n }\n\n public static fromCreditFilter(\n documentFilter: CreditFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(\n periodSearchTypeFavorite,\n PeriodSearchCreditDateType.CreditDate.toString()\n );\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchDateType) {\n periodSearch.periodSearchDateType = documentFilter.periodSearchDateType.toString();\n }\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n\n if (documentFilter.fromInvoiceDate) {\n periodSearch.periodSearchDateType = PeriodSearchCreditDateType.InvoiceDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromInvoiceDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toInvoiceDate),\n -1\n );\n } else if (documentFilter.fromCreditDate) {\n periodSearch.periodSearchDateType = PeriodSearchCreditDateType.CreditDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromCreditDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toCreditDate),\n -1\n );\n } else if (documentFilter.fromDeliveryDate) {\n periodSearch.periodSearchDateType = PeriodSearchCreditDateType.DeliveryDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n } else {\n periodSearch.periodSearchDateType = PeriodSearchCreditDateType.CreditDate.toString();\n }\n }\n\n return periodSearch;\n }\n\n public static fromDeliveryFormFilter(\n documentFilter: DeliveryFormFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(\n periodSearchTypeFavorite,\n PeriodSearchDeliveryFormDateType.DeliveryDate.toString()\n );\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchDateType) {\n periodSearch.periodSearchDateType = documentFilter.periodSearchDateType.toString();\n }\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n if (documentFilter.fromInvoiceDate) {\n periodSearch.periodSearchDateType = PeriodSearchDeliveryFormDateType.InvoiceDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromInvoiceDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toInvoiceDate),\n -1\n );\n } else if (documentFilter.fromDeliveryDate) {\n periodSearch.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n } else {\n periodSearch.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate.toString();\n }\n }\n\n return periodSearch;\n }\n\n public static fromFileAssetFilter(\n filter: FileAssetFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(periodSearchTypeFavorite, '0');\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (filter.periodSearchType || filter.periodSearchType === 0) {\n periodSearch.periodSearchType = filter.periodSearchType?.toString();\n\n if (filter.periodSearchDateType) {\n periodSearch.periodSearchDateType = filter.periodSearchDateType.toString();\n }\n\n if (filter.periodSearchPage || filter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = filter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n if (filter.fromUploadDate) {\n periodSearch.periodSearchDateType = PeriodSearchFileAssetDateType.AssetUploadedDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(filter.fromUploadDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(filter.toUploadDate),\n -1\n );\n } else if (filter.fromPrescriptionDate) {\n periodSearch.periodSearchDateType = PeriodSearchFileAssetDateType.PrescriptionDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(filter.fromPrescriptionDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(filter.toPrescriptionDate),\n -1\n );\n } else {\n periodSearch.periodSearchDateType = PeriodSearchFileAssetDateType.AssetUploadedDate.toString();\n }\n }\n\n return periodSearch;\n }\n\n public static fromFittingFormFilter(\n documentFilter: FittingFormFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(periodSearchTypeFavorite, '0');\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n }\n\n return periodSearch;\n }\n\n public static fromInvoiceFilter(\n documentFilter: InvoiceFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(\n periodSearchTypeFavorite,\n PeriodSearchInvoiceDateType.InvoiceDate.toString()\n );\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchDateType) {\n periodSearch.periodSearchDateType = documentFilter.periodSearchDateType.toString();\n }\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n if (documentFilter.fromInvoiceDate) {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromInvoiceDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toInvoiceDate),\n -1\n );\n } else if (documentFilter.fromDeliveryDate) {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n } else {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n }\n }\n\n return periodSearch;\n }\n\n public static fromJournalFilter(\n filter: JournalFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(periodSearchTypeFavorite, '0');\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (filter.periodSearchType || filter.periodSearchType === 0) {\n periodSearch.periodSearchType = filter.periodSearchType.toString();\n\n if (filter.periodSearchPage || filter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = filter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(filter.fromDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(TimeZoneService.toMomentInLaboratoryTimeZone(filter.toDate), -1);\n }\n\n return periodSearch;\n }\n\n public static fromMiscellaneousOperationFilter(\n filter: MiscellaneousOperationFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(periodSearchTypeFavorite, '0');\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (filter.periodSearchType || filter.periodSearchType === 0) {\n periodSearch.periodSearchType = filter.periodSearchType.toString();\n\n if (filter.periodSearchPage || filter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = filter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(filter.fromMiscellaneousOperationDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(filter.toMiscellaneousOperationDate),\n -1\n );\n }\n\n return periodSearch;\n }\n\n public static fromPaymentFilter(\n filter: PaymentFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(periodSearchTypeFavorite, '0');\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (filter.periodSearchType || filter.periodSearchType === 0) {\n periodSearch.periodSearchType = filter.periodSearchType?.toString();\n\n if (filter.periodSearchPage || filter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = filter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(filter.fromPaymentDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(filter.toPaymentDate),\n -1\n );\n }\n\n return periodSearch;\n }\n\n public static fromProFormaFilter(\n documentFilter: ProFormaFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(\n periodSearchTypeFavorite,\n PeriodSearchInvoiceDateType.InvoiceDate.toString()\n );\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (documentFilter.periodSearchDateType) {\n periodSearch.periodSearchDateType = documentFilter.periodSearchDateType.toString();\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n if (documentFilter.fromInvoiceDate) {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromInvoiceDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toInvoiceDate),\n -1\n );\n } else if (documentFilter.fromDeliveryDate) {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate.toString();\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n } else {\n periodSearch.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n }\n }\n\n return periodSearch;\n }\n\n public static fromQuoteFilter(\n documentFilter: QuoteFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(periodSearchTypeFavorite, '0');\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromQuoteDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toQuoteDate),\n -1\n );\n }\n\n return periodSearch;\n }\n\n public static fromWorkFormFilter(\n documentFilter: WorkFormFilter,\n periodSearchInfo: PeriodSearchInfoModel,\n periodSearchTypeFavorite: string\n ): PeriodSearchModel {\n const periodSearch = LaboratoryAreaPeriodSearchModelHelper.build(periodSearchTypeFavorite, '0');\n periodSearch.periodSearchInfo = periodSearchInfo;\n\n if (documentFilter.periodSearchType || documentFilter.periodSearchType === 0) {\n periodSearch.periodSearchType = documentFilter.periodSearchType.toString();\n\n if (documentFilter.periodSearchPage || documentFilter.periodSearchPage === 0) {\n periodSearch.periodSearchInfo.periodSearchPage = documentFilter.periodSearchPage;\n }\n\n if (periodSearchInfo?.dateFrom) {\n periodSearch.customPeriodSearchDate.dateFrom = periodSearchInfo.dateFrom;\n }\n\n if (periodSearchInfo?.dateTo) {\n periodSearch.customPeriodSearchDate.dateTo = periodSearchInfo.dateTo;\n }\n } else {\n // Cas custom search\n periodSearch.periodSearchType = PeriodSearchTypeHelper.periodSearchTypeCustom.key;\n periodSearch.customPeriodSearchDate = new FormDateIntervalModel(false, false);\n periodSearch.customPeriodSearchDate.dateFrom = TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.fromDeliveryDate);\n periodSearch.customPeriodSearchDate.dateTo = TimeZoneService.addTime(\n TimeZoneService.toMomentInLaboratoryTimeZone(documentFilter.toDeliveryDate),\n -1\n );\n }\n\n return periodSearch;\n }\n\n public static toCreditFilter(\n documentFilter: CreditFilter,\n periodSearch: PeriodSearchModel,\n overridePeriodSearchDateType: boolean\n ): CreditFilter {\n let workingPeriodSearchDateType: string;\n if (overridePeriodSearchDateType) {\n workingPeriodSearchDateType = periodSearch.periodSearchDateType;\n } else if (documentFilter.periodSearchDateType) {\n workingPeriodSearchDateType = documentFilter.periodSearchDateType.toString();\n } else if (documentFilter.fromDeliveryDate) {\n workingPeriodSearchDateType = PeriodSearchCreditDateType.DeliveryDate.toString();\n } else if (documentFilter.fromInvoiceDate) {\n workingPeriodSearchDateType = PeriodSearchCreditDateType.InvoiceDate.toString();\n } else {\n workingPeriodSearchDateType = PeriodSearchCreditDateType.CreditDate.toString();\n }\n\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromCreditDate = null;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toCreditDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n switch (workingPeriodSearchDateType) {\n case PeriodSearchCreditDateType.DeliveryDate.toString():\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchCreditDateType.InvoiceDate.toString():\n documentFilter.fromInvoiceDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toInvoiceDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchCreditDateType.CreditDate.toString():\n documentFilter.fromCreditDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toCreditDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n break;\n }\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n\n switch (workingPeriodSearchDateType) {\n case PeriodSearchCreditDateType.DeliveryDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchCreditDateType.DeliveryDate;\n break;\n case PeriodSearchCreditDateType.InvoiceDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchCreditDateType.InvoiceDate;\n break;\n case PeriodSearchCreditDateType.CreditDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchCreditDateType.CreditDate;\n break;\n }\n }\n\n return documentFilter;\n }\n\n public static toDeliveryFormFilter(documentFilter: DeliveryFormFilter, periodSearch: PeriodSearchModel): DeliveryFormFilter {\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n }\n\n return documentFilter;\n }\n\n public static toFileAssetFilter(\n filter: FileAssetFilter,\n periodSearch: PeriodSearchModel,\n overridePeriodSearchDateType: boolean\n ): FileAssetFilter {\n let workingPeriodSearchDateType: string;\n if (overridePeriodSearchDateType) {\n workingPeriodSearchDateType = periodSearch.periodSearchDateType;\n } else if (filter.periodSearchDateType) {\n workingPeriodSearchDateType = filter.periodSearchDateType.toString();\n } else if (filter.fromPrescriptionDate) {\n workingPeriodSearchDateType = PeriodSearchFileAssetDateType.PrescriptionDate.toString();\n } else {\n workingPeriodSearchDateType = PeriodSearchFileAssetDateType.AssetUploadedDate.toString();\n }\n\n filter.periodSearchType = null;\n filter.periodSearchDateType = null;\n filter.periodSearchPage = 0;\n filter.fromPrescriptionDate = null;\n filter.fromUploadDate = null;\n filter.toPrescriptionDate = null;\n filter.toUploadDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n switch (workingPeriodSearchDateType) {\n case PeriodSearchFileAssetDateType.PrescriptionDate.toString():\n filter.fromPrescriptionDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n filter.toPrescriptionDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n break;\n case PeriodSearchFileAssetDateType.AssetUploadedDate.toString():\n filter.fromUploadDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n filter.toUploadDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n break;\n }\n } else {\n filter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n filter.periodSearchType = Number(periodSearch.periodSearchType);\n\n switch (workingPeriodSearchDateType) {\n case PeriodSearchFileAssetDateType.PrescriptionDate.toString():\n filter.periodSearchDateType = PeriodSearchFileAssetDateType.PrescriptionDate;\n break;\n case PeriodSearchFileAssetDateType.AssetUploadedDate.toString():\n filter.periodSearchDateType = PeriodSearchFileAssetDateType.AssetUploadedDate;\n break;\n }\n }\n\n return filter;\n }\n\n public static toFittingFormFilter(documentFilter: FittingFormFilter, periodSearch: PeriodSearchModel): FittingFormFilter {\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.toDeliveryDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n }\n\n return documentFilter;\n }\n\n public static toInvoicedDeliveryFormFilter(\n documentFilter: DeliveryFormFilter,\n periodSearch: PeriodSearchModel,\n overridePeriodSearchDateType: boolean\n ): DeliveryFormFilter {\n let workingPeriodSearchDateType: string;\n if (overridePeriodSearchDateType) {\n workingPeriodSearchDateType = periodSearch.periodSearchDateType;\n } else if (documentFilter.periodSearchDateType) {\n workingPeriodSearchDateType = documentFilter.periodSearchDateType.toString();\n } else if (documentFilter.fromInvoiceDate) {\n workingPeriodSearchDateType = PeriodSearchDeliveryFormDateType.InvoiceDate.toString();\n } else {\n workingPeriodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate.toString();\n }\n\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n switch (workingPeriodSearchDateType) {\n case PeriodSearchDeliveryFormDateType.DeliveryDate.toString():\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchDeliveryFormDateType.InvoiceDate.toString():\n documentFilter.fromInvoiceDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toInvoiceDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n }\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n\n switch (workingPeriodSearchDateType) {\n case PeriodSearchDeliveryFormDateType.DeliveryDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.DeliveryDate;\n break;\n case PeriodSearchDeliveryFormDateType.InvoiceDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchDeliveryFormDateType.InvoiceDate;\n break;\n }\n }\n\n return documentFilter;\n }\n\n public static toInvoiceFilter(\n documentFilter: InvoiceFilter,\n periodSearch: PeriodSearchModel,\n overridePeriodSearchDateType: boolean\n ): InvoiceFilter {\n let workingPeriodSearchDateType: string;\n if (overridePeriodSearchDateType) {\n workingPeriodSearchDateType = periodSearch.periodSearchDateType;\n } else if (documentFilter.periodSearchDateType) {\n workingPeriodSearchDateType = documentFilter.periodSearchDateType.toString();\n } else if (documentFilter.fromDeliveryDate) {\n workingPeriodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate.toString();\n } else {\n workingPeriodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n }\n\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n switch (workingPeriodSearchDateType) {\n case PeriodSearchInvoiceDateType.DeliveryDate.toString():\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchInvoiceDateType.InvoiceDate.toString():\n documentFilter.fromInvoiceDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toInvoiceDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n }\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n\n switch (workingPeriodSearchDateType) {\n case PeriodSearchInvoiceDateType.DeliveryDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate;\n break;\n case PeriodSearchInvoiceDateType.InvoiceDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate;\n break;\n }\n }\n\n return documentFilter;\n }\n\n public static toJournalFilter(filter: JournalFilter, periodSearch: PeriodSearchModel): JournalFilter {\n filter.periodSearchType = null;\n filter.periodSearchPage = 0;\n filter.fromDate = null;\n filter.toDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n filter.fromDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n filter.toDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n } else {\n filter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n filter.periodSearchType = Number(periodSearch.periodSearchType);\n }\n\n return filter;\n }\n\n public static toMiscellaneousOperationFilter(\n filter: MiscellaneousOperationFilter,\n periodSearch: PeriodSearchModel\n ): MiscellaneousOperationFilter {\n filter.periodSearchType = null;\n filter.periodSearchPage = 0;\n filter.fromCreditDate = null;\n filter.fromMiscellaneousOperationDate = null;\n filter.fromInvoiceDate = null;\n filter.fromPaymentDate = null;\n filter.toCreditDate = null;\n filter.toMiscellaneousOperationDate = null;\n filter.toInvoiceDate = null;\n filter.toPaymentDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n filter.fromMiscellaneousOperationDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n filter.toMiscellaneousOperationDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n } else {\n filter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n filter.periodSearchType = Number(periodSearch.periodSearchType);\n }\n\n return filter;\n }\n\n public static toPaymentFilter(filter: PaymentFilter, periodSearch: PeriodSearchModel): PaymentFilter {\n filter.periodSearchType = null;\n filter.periodSearchPage = 0;\n filter.fromPaymentDate = null;\n filter.toPaymentDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n filter.fromPaymentDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n filter.toPaymentDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n } else {\n filter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n filter.periodSearchType = Number(periodSearch.periodSearchType);\n }\n\n return filter;\n }\n\n public static toProFormaFilter(\n documentFilter: ProFormaFilter,\n periodSearch: PeriodSearchModel,\n overridePeriodSearchDateType: boolean\n ): ProFormaFilter {\n let workingPeriodSearchDateType: string;\n if (overridePeriodSearchDateType) {\n workingPeriodSearchDateType = periodSearch.periodSearchDateType;\n } else if (documentFilter.periodSearchDateType) {\n workingPeriodSearchDateType = documentFilter.periodSearchDateType.toString();\n } else if (documentFilter.fromDeliveryDate) {\n workingPeriodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate.toString();\n } else {\n workingPeriodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate.toString();\n }\n\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchDateType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.toDeliveryDate = null;\n documentFilter.fromInvoiceDate = null;\n documentFilter.toInvoiceDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n switch (workingPeriodSearchDateType) {\n case PeriodSearchInvoiceDateType.DeliveryDate.toString():\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n case PeriodSearchInvoiceDateType.InvoiceDate.toString():\n documentFilter.fromInvoiceDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toInvoiceDate = TimeZoneService.toISOString(\n TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1)\n );\n break;\n }\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n\n switch (workingPeriodSearchDateType) {\n case PeriodSearchInvoiceDateType.DeliveryDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchInvoiceDateType.DeliveryDate;\n break;\n case PeriodSearchInvoiceDateType.InvoiceDate.toString():\n documentFilter.periodSearchDateType = PeriodSearchInvoiceDateType.InvoiceDate;\n break;\n }\n }\n\n return documentFilter;\n }\n\n public static toQuoteFilter(documentFilter: QuoteFilter, periodSearch: PeriodSearchModel): QuoteFilter {\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.fromQuoteDate = null;\n documentFilter.toQuoteDate = null;\n documentFilter.toDeliveryDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n documentFilter.fromQuoteDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // Filter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toQuoteDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n }\n\n return documentFilter;\n }\n\n public static toWorkFormFilter(documentFilter: WorkFormFilter, periodSearch: PeriodSearchModel): WorkFormFilter {\n documentFilter.periodSearchType = null;\n documentFilter.periodSearchPage = 0;\n documentFilter.fromDeliveryDate = null;\n documentFilter.toDeliveryDate = null;\n\n if (periodSearch.periodSearchType === PeriodSearchTypeHelper.periodSearchTypeCustom.key) {\n documentFilter.fromDeliveryDate = TimeZoneService.toISOString(periodSearch.customPeriodSearchDate.dateFrom);\n // documentFilter.ToXXXDate are exclusive - Add 1 day\n documentFilter.toDeliveryDate = TimeZoneService.toISOString(TimeZoneService.addTime(periodSearch.customPeriodSearchDate.dateTo, 1));\n } else {\n documentFilter.periodSearchPage = periodSearch.periodSearchInfo.periodSearchPage;\n documentFilter.periodSearchType = Number(periodSearch.periodSearchType);\n }\n\n return documentFilter;\n }\n}\n","import { Moment } from 'moment';\n\nexport class PeriodSearchInfoModel {\n public dateFrom: Moment;\n public dateTo: Moment;\n public periodSearchDateText: string;\n public periodSearchPage: number;\n}\n","import { FormDateIntervalModel } from '../../form-date-interval/form-date-interval-model';\nimport { PeriodSearchInfoModel } from './period-search-info-model';\n\nexport class PeriodSearchModel {\n public customPeriodSearchDate: FormDateIntervalModel;\n public periodSearchDateType: string;\n public periodSearchInfo: PeriodSearchInfoModel;\n public periodSearchType: string;\n}\n","import { Area } from 'app/shared/enums/area.enum';\nimport { CustomerFilter as LA_CustomerFilter } from 'app/shared/prothesis-api-filters/customer-filter';\nimport { CustomerFilter as CA_CustomerFilter } from 'app/shared/prothesis-customer-api-filters/customer-filter';\nimport { ComboModel } from '../../combo/combo-model';\nimport { CustomerGroupEnum } from './customer-group.enum';\n\nexport class CustomerGroupEnumHelper {\n public static buildComboModelFromFilter(filter: LA_CustomerFilter | CA_CustomerFilter): ComboModel {\n if (filter.customerGroupFlag === true && filter.customerMemberFlag === null) {\n return CustomerGroupEnumHelper.convertToComboModel(CustomerGroupEnum.Groups);\n }\n if (filter.customerGroupFlag === null && filter.customerMemberFlag === true) {\n return CustomerGroupEnumHelper.convertToComboModel(CustomerGroupEnum.GroupMembers);\n }\n if (filter.customerGroupFlag === false && filter.customerMemberFlag === null) {\n return CustomerGroupEnumHelper.convertToComboModel(CustomerGroupEnum.CustomersExceptGroups);\n }\n if (filter.customerGroupFlag === null && filter.customerMemberFlag === false) {\n return CustomerGroupEnumHelper.convertToComboModel(CustomerGroupEnum.CustomersExceptMembers);\n }\n return null;\n }\n\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(CustomerGroupEnum.Groups));\n options.push(this.convertToComboModel(CustomerGroupEnum.GroupMembers));\n options.push(this.convertToComboModel(CustomerGroupEnum.CustomersExceptGroups));\n options.push(this.convertToComboModel(CustomerGroupEnum.CustomersExceptMembers));\n\n return options;\n }\n\n public static convertToComboModel(enumValue: CustomerGroupEnum): ComboModel {\n if (Object.values(CustomerGroupEnum).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static setCustomerFilter(\n filter: LA_CustomerFilter | CA_CustomerFilter,\n selectedCustomerGroup: ComboModel,\n area: Area\n ): LA_CustomerFilter | CA_CustomerFilter {\n if (!filter) {\n filter = area === Area.Customer ? new CA_CustomerFilter() : new LA_CustomerFilter();\n filter.disabledFlag = false;\n }\n if (selectedCustomerGroup?.key) {\n if (selectedCustomerGroup.key === CustomerGroupEnumHelper.convertToComboModel(CustomerGroupEnum.Groups).key) {\n filter.customerGroupFlag = true;\n filter.customerMemberFlag = null;\n } else if (selectedCustomerGroup.key === CustomerGroupEnumHelper.convertToComboModel(CustomerGroupEnum.GroupMembers).key) {\n filter.customerGroupFlag = null;\n filter.customerMemberFlag = true;\n } else if (selectedCustomerGroup.key === CustomerGroupEnumHelper.convertToComboModel(CustomerGroupEnum.CustomersExceptGroups).key) {\n filter.customerGroupFlag = false;\n filter.customerMemberFlag = null;\n } else if (selectedCustomerGroup.key === CustomerGroupEnumHelper.convertToComboModel(CustomerGroupEnum.CustomersExceptMembers).key) {\n filter.customerGroupFlag = null;\n filter.customerMemberFlag = false;\n }\n } else {\n filter.customerGroupFlag = null;\n filter.customerMemberFlag = null;\n }\n return filter;\n }\n\n public static translateEnum(enumValue: CustomerGroupEnum): string {\n if (enumValue === CustomerGroupEnum.Groups) {\n return 'Groupes';\n } else if (enumValue === CustomerGroupEnum.GroupMembers) {\n return 'Membres de groupes';\n } else if (enumValue === CustomerGroupEnum.CustomersExceptGroups) {\n return 'Tous sauf groupes';\n } else if (enumValue === CustomerGroupEnum.CustomersExceptMembers) {\n return 'Tous sauf membres de groupes';\n }\n return undefined;\n }\n}\n","/**\n * Indicates the Customer group type.\n */\nexport enum CustomerGroupEnum {\n Groups = 0,\n GroupMembers = 1,\n CustomersExceptGroups = 2,\n CustomersExceptMembers = 3,\n}\n","export class CustomerModel {\n public code: string;\n public disabledFlag: boolean;\n public groupCode: string;\n public groupDisabledFlag: boolean;\n public groupFlag: boolean;\n public groupName: string;\n public name: string;\n public title: string;\n public uuid: string;\n}\n","import { LaboratoryResourceType } from 'app/shared/enums/laboratory-resource-type.enum';\n\nexport class LaboratoryResourceModel {\n public code: string;\n public disabledFlag: boolean;\n public laboratoryResourceType: LaboratoryResourceType;\n public laboratoryResourceTypeLabel: string;\n public name: string;\n public uuid: string;\n}\n","export class ElementModel {\n public code: string;\n\n public col2BufferValue: number;\n public col2Group: string;\n public col2Info: string;\n public col2Label: string;\n public col2ProgressValue: number;\n public col2SubGroup: string;\n public col3Group: string;\n public col3Label: string;\n public containerLabel: string;\n public disabledFlag: boolean;\n // firstSerialNumberFlag: indicates if the selected element is the first one of the selection.\n // it's used to set the focus on the first element of the selection when multiple selection.\n public firstSerialNumberFlag = false;\n public hat: string;\n public hatDisabledFlag: boolean;\n public hatStyle: 'accent' | 'accent-border' | 'primary' | 'primary-border' = 'accent';\n public hatWidth: 'auto' | 'fixed' = 'fixed';\n public highlightHatFlag: boolean;\n public key: string;\n public label: string;\n public subcontainerLabel: string;\n\n public constructor(code: string, containerLabel: string, key: string, label: string, subcontainerLabel: string) {\n this.code = code;\n this.containerLabel = containerLabel;\n this.key = key;\n this.label = label;\n this.subcontainerLabel = subcontainerLabel;\n }\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { HighlightType } from 'app/shared/enums/highlight-type.enum';\nimport { PickerState } from '../../../../states/picker-state';\nimport { ElementModel } from '../element.model';\n\nexport class PickerDialogModel {\n public combo2DefaultValue: ComboModel;\n public combo2DisableFlag: boolean;\n public combo2Options: ComboModel[];\n public combo2PlaceholderWhenNoOptionIsSelected: string;\n public combo2PlaceholderWhenOptionIsSelected: string;\n public comboDefaultValue: ComboModel;\n public comboDisableFlag: boolean;\n public comboOptions: ComboModel[];\n public comboPlaceholderWhenNoOptionIsSelected: string;\n public comboPlaceholderWhenOptionIsSelected: string;\n public disableCreationFlag = false;\n public elementCreationIcon: string;\n public elementCreationLink: string;\n public elementCreationLinkLabel: string;\n public elementCreationMessage: string;\n public elements: ElementModel[];\n public existenceFlag: boolean;\n public highlightCol1GroupFlag: boolean;\n public highlightCol1GroupType: HighlightType = HighlightType.String;\n public highlightCol1InfoFlag: boolean;\n public highlightCol1LabelFlag: boolean;\n public highlightCol1SubgroupFlag: boolean;\n public highlightCol2GroupFlag: boolean;\n public highlightCol2GroupType: HighlightType = HighlightType.String;\n public highlightCol2InfoFlag: boolean;\n public highlightCol2LabelFlag: boolean;\n public highlightCol2SubgroupFlag: boolean;\n public highlightCol3LabelFlag: boolean;\n public highlightCol3LabelType: HighlightType = HighlightType.String;\n public multipleSelectionFlag: boolean;\n public state: PickerState;\n public titleLabel: string;\n public totalCount: number;\n public truncatedContentWidth: string;\n public unpinnedByDefaultFlag: boolean;\n}\n","
    \n
    \n
    {{ pickerDialog.titleLabel }}
    \n
    \n \n \n \n \n \n close\n \n
    \n
    \n\n \n
    \n
    \n
    \n
    \n \n\n
    0)\" class=\"ml-16\" fxFlex=\"1 0 80px\">\n 0\"\n (selectedChange)=\"changeSelectedContainer($event)\"\n [appDisable]=\"pickerDialog.comboDisableFlag\"\n [eraseButtonFlag]=\"true\"\n [defaultValue]=\"pickerDialog.comboDefaultValue\"\n [keySelected]=\"\n pickerDialog.state?.filterSelectedContainerUuid\n ? pickerDialog.state?.filterSelectedContainerUuid\n : pickerDialog.state?.filterSelectedSubcontainerUuid\n \"\n [listModeFlag]=\"true\"\n [options]=\"pickerDialog.comboOptions\"\n [placeholderWhenAnOptionIsSelected]=\"pickerDialog.comboPlaceholderWhenOptionIsSelected\"\n [placeholderWhenNoOptionIsSelected]=\"pickerDialog.comboPlaceholderWhenNoOptionIsSelected\"\n >\n
    \n\n
    0)\" fxFlex=\"grow\">\n 0\"\n (selectedChange)=\"combo2SelectedChangeHandler($event)\"\n [appDisable]=\"pickerDialog.combo2DisableFlag\"\n [eraseButtonFlag]=\"!pickerDialog.combo2DisableFlag\"\n [defaultValue]=\"pickerDialog.combo2DefaultValue\"\n [keySelected]=\"pickerDialog.state?.filter2SelectedContainerUuid ? pickerDialog.state?.filter2SelectedContainerUuid : pickerDialog.state?.filter2SelectedSubcontainerUuid\"\n [listModeFlag]=\"true\"\n [options]=\"pickerDialog.combo2Options\"\n [placeholderWhenAnOptionIsSelected]=\"pickerDialog.combo2PlaceholderWhenOptionIsSelected\"\n [placeholderWhenNoOptionIsSelected]=\"pickerDialog.combo2PlaceholderWhenNoOptionIsSelected\"\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","import { Component, EventEmitter, HostListener, Inject, OnInit, Output, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { PageEvent } from '@angular/material/paginator';\nimport { FocusService } from 'app/core/services/focus.service';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { ComboComponent } from 'app/shared/components/combo/combo.component';\nimport { GridFilterModel } from 'app/shared/components/grid-filter/grid-filter-model';\nimport { GridFilterComponent } from 'app/shared/components/grid-filter/grid-filter.component';\nimport { RowElementComponent } from 'app/shared/components/rows/row-element/row-element.component';\nimport { TableConfig } from 'app/shared/components/table-wrapper/table-config';\nimport { TableWrapperComponent } from 'app/shared/components/table-wrapper/table-wrapper.component';\nimport { PickerState } from '../../../../states/picker-state';\nimport { ElementModel } from '../element.model';\nimport { PickerDialogModel } from './picker-dialog-model';\n\n@Component({\n selector: 'app-picker-dialog',\n styleUrls: ['./picker-dialog.component.scss'],\n templateUrl: './picker-dialog.component.html',\n})\nexport class PickerDialogComponent implements OnInit {\n @Output() public selectElement = new EventEmitter();\n @Output() public updateState = new EventEmitter();\n @ViewChild('_combo2Component') private _combo2Component: ComboComponent;\n @ViewChild('_comboComponent') private _comboComponent: ComboComponent;\n @ViewChild('_gridFilterComponent', { static: true }) private _gridFilterComponent: GridFilterComponent;\n @ViewChildren('_rowElementComponent') private _rowElementComponents: QueryList;\n @ViewChild('_tableWrapperComponent') private _tableWrapperComponent: TableWrapperComponent;\n public gridFilter: GridFilterModel;\n public loadedFlag: boolean;\n public pickerDialog: PickerDialogModel;\n public shouldBeFirstSerialNumber = false;\n public tableConfig: TableConfig;\n\n public constructor(\n private _focusService: FocusService,\n private _highlightService: HighlightService,\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) data\n ) {\n this.pickerDialog = data;\n this.shouldBeFirstSerialNumber = true;\n }\n\n public changeSelectedContainer(selectedComboModel: ComboModel): void {\n delete this.pickerDialog.state.filterSelectedContainerUuid;\n delete this.pickerDialog.state.filterSelectedSubcontainerUuid;\n\n if (selectedComboModel) {\n if (selectedComboModel.parent) {\n this.pickerDialog.state.filterSelectedSubcontainerUuid = selectedComboModel.key;\n } else {\n this.pickerDialog.state.filterSelectedContainerUuid = selectedComboModel.key;\n }\n }\n\n this.updateAndEmitState();\n }\n\n public chooseElement(element: ElementModel): boolean {\n element.firstSerialNumberFlag = false;\n if (this.shouldBeFirstSerialNumber) {\n this.shouldBeFirstSerialNumber = false;\n element.firstSerialNumberFlag = true;\n }\n\n this.selectElement.emit(element);\n if (this.pickerDialog.unpinnedByDefaultFlag) {\n this.dialogRef.close();\n }\n return false;\n }\n\n public close(): void {\n this.dialogRef.close();\n }\n\n public combo2SelectedChangeHandler(selectedComboModel: ComboModel): void {\n delete this.pickerDialog.state.filter2SelectedContainerUuid;\n\n if (selectedComboModel) {\n this.pickerDialog.state.filter2SelectedContainerUuid = selectedComboModel.key;\n }\n\n this.updateAndEmitState();\n }\n\n public configRows(): void {\n this.tableConfig = new TableConfig(this._rowElementComponents.toArray());\n }\n\n public determineCombo2State(): void {\n if (this.pickerDialog.combo2DisableFlag && this._combo2Component) {\n this._combo2Component.comboFormControl.disable();\n }\n }\n\n public determineComboState(): void {\n if (this.pickerDialog.comboDisableFlag && this._comboComponent) {\n this._comboComponent.comboFormControl.disable();\n }\n }\n\n public elementCreationLinkClickedEventHandler(): void {\n this.dialogRef.close();\n }\n\n public focusOnTable(): void {\n this._focusService.setTimeoutOutsideAngular(() => {\n this._tableWrapperComponent.focusAtIndex(0);\n });\n }\n\n public focusOnTextFilter(): void {\n this._gridFilterComponent?.setFocus();\n }\n\n public isComboModelSelected(comboModel: ComboModel): boolean {\n if (!comboModel) {\n if (!this.pickerDialog.state.filterSelectedSubcontainerUuid && !this.pickerDialog.state.filterSelectedContainerUuid) {\n return true;\n }\n return false;\n }\n if (comboModel.parent && this.pickerDialog.state.filterSelectedSubcontainerUuid === comboModel.key) {\n return true;\n }\n if (!comboModel.parent && this.pickerDialog.state.filterSelectedContainerUuid === comboModel.key) {\n return true;\n }\n return false;\n }\n\n public keydownArrowLeftEventHandler(): void {\n if (this._tableWrapperComponent) {\n this._tableWrapperComponent.indexFocusedRow = null;\n }\n this.updateState.emit(this.pickerDialog.state);\n }\n\n public keydownArrowRightEventHandler(): void {\n if (this._tableWrapperComponent) {\n this._tableWrapperComponent.indexFocusedRow = null;\n }\n this.updateState.emit(this.pickerDialog.state);\n }\n\n @HostListener('window:keydown.control', ['$event'])\n public keydownCtrl(event: KeyboardEvent): void {\n if (this.pickerDialog.multipleSelectionFlag) {\n if (event.repeat) {\n return;\n }\n this.pickerDialog.unpinnedByDefaultFlag = false;\n }\n }\n\n @HostListener('window:keyup.control', ['$event'])\n public keyupCtrl(): void {\n if (this.pickerDialog.multipleSelectionFlag) {\n this.pickerDialog.unpinnedByDefaultFlag = true;\n }\n }\n\n public ngOnInit(): void {\n this._initTextFilter(this.pickerDialog.state.textFilter);\n if (this.pickerDialog.comboDefaultValue && this._comboComponent) {\n this._comboComponent.keySelected = this.pickerDialog.comboDefaultValue.key;\n this.dialogRef.componentInstance.pickerDialog.state.filterSelectedContainerUuid = this.pickerDialog.comboDefaultValue.key;\n }\n\n if (this.pickerDialog.combo2DefaultValue && this._combo2Component) {\n this._combo2Component.keySelected = this.pickerDialog.combo2DefaultValue.key;\n this.dialogRef.componentInstance.pickerDialog.state.filter2SelectedContainerUuid = this.pickerDialog.combo2DefaultValue.key;\n }\n\n this.determineComboState();\n this.determineCombo2State();\n }\n\n public setCloseModeHandler(): void {\n this.pickerDialog.unpinnedByDefaultFlag = !this.pickerDialog.unpinnedByDefaultFlag;\n }\n\n public textFilterChangedEventHandler(newTextFilter: string): void {\n this.pickerDialog.state.textFilter = newTextFilter;\n this._initTextFilter(this.pickerDialog.state.textFilter);\n\n this.updateAndEmitState();\n }\n\n public updateAndEmitState(): void {\n this.pickerDialog.state.pageIndex = 0;\n\n // Here, a new object has to be assigned to pickerDialog\n // for raise ngOnChanges on app-list-result that has pickerDialog.state as an input.\n const state = Object.assign(new PickerState(), this.pickerDialog.state);\n this.pickerDialog.state = state;\n\n this.updateState.emit(this.pickerDialog.state);\n }\n\n public updatePaginator(pageEvent: PageEvent): void {\n this.pickerDialog.state.pageIndex = pageEvent.pageIndex;\n this.pickerDialog.state.pageSize = pageEvent.pageSize;\n this.updateState.emit(this.pickerDialog.state);\n }\n\n private _initTextFilter(textFilter: string): void {\n this.gridFilter = new GridFilterModel(textFilter);\n this._highlightService.compileFilter(textFilter);\n }\n}\n","
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n
    \n \n
    \n
    \n
    \n\n autorenew\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { FocusService } from 'app/core/services/focus.service';\nimport { HighlightService } from 'app/core/services/highlight.service';\nimport { PickerStateService } from 'app/core/services/picker-state.service';\nimport { HighlightType } from 'app/shared/enums/highlight-type.enum';\nimport { AutoCompleteResultProjection } from 'app/shared/prothesis-api-projections/auto-complete-result.projection';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { PickerState } from '../../../states/picker-state';\nimport { ComboModel } from '../../combo/combo-model';\nimport { ElementModel } from './element.model';\nimport { PickerDialogModel } from './picker-dialog/picker-dialog-model';\nimport { PickerDialogComponent } from './picker-dialog/picker-dialog.component';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-picker',\n styleUrls: ['./picker.component.scss'],\n templateUrl: './picker.component.html',\n})\nexport class PickerComponent implements OnChanges, OnDestroy, OnInit {\n @ViewChild('_inputText') public _inputText: ElementRef;\n\n // Label of the Add Button\n @Input() public addButtonLabel: string;\n\n // Tooltip Label of the Add Icon Button\n @Input() public addIconButtonTooltip: string;\n\n // The input element code is sent through this output\n @Output() public codeChanged = new EventEmitter();\n\n @Input() public combo2DefaultValue: ComboModel;\n @Input() public combo2DisableFlag: boolean;\n @Input() public combo2Options: ComboModel[];\n @Input() public combo2PlaceholderWhenNoOptionIsSelected: string;\n @Input() public combo2PlaceholderWhenOptionIsSelected: string;\n\n @Input() public comboDefaultValue: ComboModel;\n @Input() public comboDisableFlag = false;\n @Input() public comboOptions: ComboModel[];\n @Input() public comboPlaceholderWhenNoOptionIsSelected: string;\n @Input() public comboPlaceholderWhenOptionIsSelected: string;\n\n @Input() public disableCreationFlag = false;\n\n @Input() public elementCreationIcon = 'svg_search_guide';\n @Input() public elementCreationLink: string;\n @Input() public elementCreationLinkLabel: string;\n @Input() public elementCreationMessage = 'Aucun résultat.';\n\n // Element to display in the picker\n @Input() public elements: ElementModel[];\n @Input() public existenceFlag: boolean;\n\n // Indicates whethear to highlight the parts of the picker list.\n @Input() public highlightCol1GroupFlag = false;\n @Input() public highlightCol1GroupType = HighlightType.String;\n @Input() public highlightCol1InfoFlag = false;\n @Input() public highlightCol1LabelFlag = false;\n @Input() public highlightCol1SubgroupFlag = false;\n @Input() public highlightCol2GroupFlag = false;\n @Input() public highlightCol2GroupType = HighlightType.String;\n @Input() public highlightCol2InfoFlag = false;\n @Input() public highlightCol2LabelFlag = false;\n @Input() public highlightCol2SubgroupFlag = false;\n @Input() public highlightCol3LabelFlag = false;\n @Input() public highlightCol3LabelType = HighlightType.String;\n\n // Event raise when the autocomplete input change (only if auto complete feature was enabled)\n @Output() public inputChanged = new EventEmitter();\n\n @Input() public loadedFlag: boolean;\n\n // Indicates the possibilitys to have a multiple selection.\n @Input() public multipleSelectionFlag = true;\n\n @Output() public pickerDialogAfterClosedEvent = new EventEmitter();\n\n // The selected element is sent through this output\n @Output() public selectElement = new EventEmitter();\n\n @Input() public showInputFlag = true;\n\n // Indicates wether we are displaying the research part or not\n @Input() public showPickerFlag = true;\n\n @Input() public showTextInputFlag = true;\n\n // The picker state.\n @Input() public state: PickerState;\n\n // Text displayed on the code place holder\n @Input() public textPlaceholder: string;\n\n // The length of the total number of element that are being paginated. Defaulted to 0.\n @Input() public totalCount = 0;\n\n // The length of the truncated content if specified. Default is null (others values are small, medium, large)\n @Input() public truncatedContentWidth: string;\n\n // Determines if the pin is unpined when the picker is opened.\n @Input() public unpinnedByDefaultFlag = true;\n\n // picker state updated are sent through this output.\n @Output() public updateState = new EventEmitter();\n\n // Value of the uuid selected in case of autocomplete feature enabled\n @Output() public uuidSelected = new EventEmitter();\n\n // Icon used to go to the drop down list picker research\n public addIcon = 'add_circle_outline';\n\n public dialogRef: MatDialogRef;\n\n public firstLoadFlag = true;\n\n // The form control associated with the code input\n public formControl: FormControl = new FormControl('');\n\n // Result of the autoComplete Api search\n private _autoCompleteResultList: AutoCompleteResultProjection[] = [];\n\n private _isLoadingAutocomplete = false;\n\n // Memorize the last searched vaue\n private _lastSearchValue = '';\n\n // A flag to know if the \"enter\" key was pressed\n private _pendingEnterAction = false;\n\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _dialog: MatDialog,\n private _focusService: FocusService,\n private _highlightService: HighlightService,\n private _pickerStateService: PickerStateService,\n private _ngZone: NgZone\n ) {}\n\n @Input()\n public set autoCompleteResultList(value: AutoCompleteResultProjection[]) {\n this._autoCompleteResultList = value;\n this._isLoadingAutocomplete = false;\n\n if (\n this._pendingEnterAction &&\n value.length > 0 &&\n !this._isLoadingAutocomplete &&\n this.formControl.value?.trim() === this._lastSearchValue\n ) {\n this.executeEnterAction();\n }\n }\n public get autoCompleteResultList(): AutoCompleteResultProjection[] {\n return this._autoCompleteResultList;\n }\n\n public add(): boolean {\n const inputValue: string = this.formControl.value;\n // Don't try to add if the input is more than 10 characters, code max length is 10\n // and the api return a 400 if we try to add an entity whose code is greater than 10.\n if (inputValue && inputValue.length <= 10) {\n this.codeChanged.emit(inputValue.toUpperCase());\n this.formControl.setValue('');\n } else {\n this.openPickerDialog();\n }\n\n return false;\n }\n\n public clickHandler(): boolean {\n this.openPickerDialog();\n return false;\n }\n\n public closedHandler(): void {\n this._focusService.setTimeoutOutsideAngular(() => {\n this._ngZone.run(() => {\n this.autoCompleteResultList = [];\n this._pickerStateService.autocompleteOpenedFlag = false;\n this._changeDetectorRef.detectChanges();\n });\n });\n }\n\n // Handle the \"enter\" key to add special conditions before doing it\n public handleEnterKey($event: KeyboardEvent): void {\n $event.preventDefault();\n const currentInputValue = this.formControl.value?.trim() || '';\n\n if (\n (this._isLoadingAutocomplete || this._autoCompleteResultList.length === 0 || currentInputValue !== this._lastSearchValue) &&\n currentInputValue.length > 0\n ) {\n this._pendingEnterAction = true;\n return;\n }\n\n this._focusService.setTimeoutOutsideAngular(() => {\n this._ngZone.run(() => {\n this.executeEnterAction();\n });\n });\n }\n\n public highlight(content: string, highlightType = HighlightType.String): string {\n return this._highlightService.highlight(content, highlightType);\n }\n\n public isFocused(): boolean {\n return this._inputText && this._inputText.nativeElement === document.activeElement;\n }\n\n public ngOnChanges(): void {\n if (this.dialogRef && this.dialogRef.componentInstance && this.dialogRef.componentInstance.pickerDialog) {\n this.dialogRef.componentInstance.pickerDialog.combo2DefaultValue = this.combo2DefaultValue;\n this.dialogRef.componentInstance.pickerDialog.combo2DisableFlag = this.combo2DisableFlag;\n this.dialogRef.componentInstance.pickerDialog.combo2Options = this.combo2Options;\n this.dialogRef.componentInstance.pickerDialog.combo2PlaceholderWhenNoOptionIsSelected = this.combo2PlaceholderWhenNoOptionIsSelected;\n this.dialogRef.componentInstance.pickerDialog.combo2PlaceholderWhenOptionIsSelected = this.combo2PlaceholderWhenOptionIsSelected;\n this.dialogRef.componentInstance.pickerDialog.disableCreationFlag = this.disableCreationFlag;\n this.dialogRef.componentInstance.pickerDialog.titleLabel = this.addIconButtonTooltip;\n this.dialogRef.componentInstance.pickerDialog.comboOptions = this.comboOptions;\n this.dialogRef.componentInstance.pickerDialog.elements = this.elements;\n this.dialogRef.componentInstance.pickerDialog.existenceFlag = this.existenceFlag;\n this.dialogRef.componentInstance.loadedFlag = this.loadedFlag;\n this.dialogRef.componentInstance.pickerDialog.comboDefaultValue = this.comboDefaultValue;\n this.dialogRef.componentInstance.pickerDialog.comboDisableFlag = this.comboDisableFlag;\n this.dialogRef.componentInstance.determineComboState();\n this.dialogRef.componentInstance.pickerDialog.comboPlaceholderWhenOptionIsSelected = this.comboPlaceholderWhenOptionIsSelected;\n this.dialogRef.componentInstance.pickerDialog.comboPlaceholderWhenNoOptionIsSelected = this.comboPlaceholderWhenNoOptionIsSelected;\n this.dialogRef.componentInstance.pickerDialog.state = this.state;\n this.dialogRef.componentInstance.pickerDialog.totalCount = this.totalCount;\n this.dialogRef.componentInstance.pickerDialog.truncatedContentWidth = this.truncatedContentWidth;\n if (this.firstLoadFlag) {\n this.dialogRef.componentInstance.focusOnTextFilter();\n this.firstLoadFlag = false;\n }\n\n this._focusService.setTimeoutOutsideAngular(() => {\n if (this.dialogRef && this.dialogRef.componentInstance) {\n this.dialogRef.componentInstance.configRows();\n }\n });\n }\n }\n\n public ngOnDestroy(): void {\n this._pickerStateService.autocompleteOpenedFlag = false;\n\n // Unsubscribe from all subscriptions\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n // Change Icon when single selection\n if (!this.multipleSelectionFlag) {\n this.addIcon = 'check_circle_outline';\n }\n\n this.reset();\n if (this.showTextInputFlag) {\n this.formControl.valueChanges\n .pipe(debounceTime(250))\n .pipe(takeUntil(this._unsubscribeAll$))\n .subscribe((input) => {\n if (input !== null) {\n const trimmedInput = input.trim();\n if (trimmedInput.length === 0) {\n this.autoCompleteResultList = [];\n this._lastSearchValue = '';\n this._pendingEnterAction = false;\n this._changeDetectorRef.detectChanges();\n } else {\n if (trimmedInput.length < this._lastSearchValue.length) {\n this._pendingEnterAction = false;\n }\n this._isLoadingAutocomplete = true;\n this._lastSearchValue = trimmedInput;\n this._highlightService.compileFilter(trimmedInput);\n this.inputChanged.emit(trimmedInput);\n }\n }\n });\n }\n }\n\n public openHandler(): void {\n this._pickerStateService.autocompleteOpenedFlag = true;\n }\n\n public openPickerDialog(): void {\n // open PickerDialog\n this.reset();\n\n const pickerDialog = new PickerDialogModel();\n pickerDialog.combo2DefaultValue = this.combo2DefaultValue;\n pickerDialog.combo2DisableFlag = this.combo2DisableFlag;\n pickerDialog.combo2Options = this.combo2Options;\n pickerDialog.combo2PlaceholderWhenNoOptionIsSelected = this.combo2PlaceholderWhenNoOptionIsSelected;\n pickerDialog.combo2PlaceholderWhenOptionIsSelected = this.combo2PlaceholderWhenOptionIsSelected;\n pickerDialog.disableCreationFlag = this.disableCreationFlag;\n pickerDialog.elementCreationIcon = this.elementCreationIcon;\n pickerDialog.elementCreationLink = this.elementCreationLink;\n pickerDialog.elementCreationLinkLabel = this.elementCreationLinkLabel;\n pickerDialog.elementCreationMessage = this.elementCreationMessage;\n pickerDialog.elements = this.elements;\n pickerDialog.existenceFlag = this.existenceFlag;\n pickerDialog.highlightCol1GroupFlag = this.highlightCol1GroupFlag;\n pickerDialog.highlightCol1GroupType = this.highlightCol1GroupType;\n pickerDialog.highlightCol1InfoFlag = this.highlightCol1InfoFlag;\n pickerDialog.highlightCol1LabelFlag = this.highlightCol1LabelFlag;\n pickerDialog.highlightCol1SubgroupFlag = this.highlightCol1SubgroupFlag;\n pickerDialog.highlightCol2GroupFlag = this.highlightCol2GroupFlag;\n pickerDialog.highlightCol2GroupType = this.highlightCol2GroupType;\n pickerDialog.highlightCol2InfoFlag = this.highlightCol2InfoFlag;\n pickerDialog.highlightCol2LabelFlag = this.highlightCol2LabelFlag;\n pickerDialog.highlightCol2SubgroupFlag = this.highlightCol2SubgroupFlag;\n pickerDialog.highlightCol3LabelFlag = this.highlightCol3LabelFlag;\n pickerDialog.highlightCol3LabelType = this.highlightCol3LabelType;\n pickerDialog.unpinnedByDefaultFlag = this.unpinnedByDefaultFlag;\n pickerDialog.multipleSelectionFlag = this.multipleSelectionFlag;\n pickerDialog.comboDefaultValue = this.comboDefaultValue;\n pickerDialog.comboDisableFlag = this.comboDisableFlag;\n pickerDialog.comboOptions = this.comboOptions;\n pickerDialog.comboPlaceholderWhenOptionIsSelected = this.comboPlaceholderWhenOptionIsSelected;\n pickerDialog.comboPlaceholderWhenNoOptionIsSelected = this.comboPlaceholderWhenNoOptionIsSelected;\n pickerDialog.state = this.state;\n pickerDialog.state.filterSelectedContainerUuid = this.comboDefaultValue?.key;\n pickerDialog.state.filter2SelectedContainerUuid = this.combo2DefaultValue?.key;\n pickerDialog.titleLabel = this.addIconButtonTooltip;\n pickerDialog.totalCount = this.totalCount;\n pickerDialog.truncatedContentWidth = this.truncatedContentWidth;\n\n this.updateState.emit(this.state);\n\n const dialogConfig = new MatDialogConfig();\n dialogConfig.disableClose = false;\n dialogConfig.autoFocus = false;\n dialogConfig.data = pickerDialog;\n\n this.dialogRef = this._dialog.open(PickerDialogComponent, dialogConfig);\n\n // Output doesn't need to be unsubscribed.\n this.dialogRef.componentInstance.updateState.subscribe((data) => {\n this.updateState.emit(data);\n });\n\n // Output doesn't need to be unsubscribed.\n this.dialogRef.componentInstance.selectElement.subscribe((data) => {\n this.selectElement.emit(data);\n });\n\n // AfterClosed event is completed when the matdialog is closed.\n // https://stackoverflow.com/questions/58198544/angular-dialogref-unsubscribe-do-i-need-to-unsubscribe-from-afterclosed\n this.dialogRef.afterClosed().subscribe(() => {\n this.firstLoadFlag = true;\n this.pickerDialogAfterClosedEvent.emit();\n });\n }\n\n public optionSelectedHandler(matAutocompleteSelectedEvent: MatAutocompleteSelectedEvent): void {\n this._pendingEnterAction = false;\n\n this._focusService.setTimeoutOutsideAngular(() => {\n if (this._inputText?.nativeElement) {\n this._inputText.nativeElement.blur();\n\n this._ngZone.run(() => {\n this.autoCompleteResultList = [];\n this._lastSearchValue = '';\n this.uuidSelected.emit(matAutocompleteSelectedEvent.option.id);\n this.formControl.setValue('', { emitEvent: false });\n this._changeDetectorRef.detectChanges();\n });\n }\n });\n }\n\n public reset(): void {\n this.autoCompleteResultList = [];\n this.formControl.setValue('');\n }\n\n public setFocus(): void {\n // Some component using the picker may use *ngIf, so setTimeout is required.\n this._focusService.setTimeoutOutsideAngular(() => {\n this._inputText?.nativeElement?.focus();\n });\n }\n\n // Fire the optionSelectedHandler when the \"enter\" key was pressed and API call finished\n private executeEnterAction(): void {\n // If the user hit \"enter\" fast enought to go here (API haven't finished yet) we assume he want the first option\n const firstOption = this._autoCompleteResultList[0];\n if (!firstOption) {\n return;\n }\n\n const event = {\n option: {\n id: firstOption.uuid,\n value: firstOption.label,\n },\n } as MatAutocompleteSelectedEvent;\n\n this._focusService.setTimeoutOutsideAngular(() => {\n this._ngZone.run(() => {\n this.optionSelectedHandler(event);\n });\n });\n }\n}\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DirectivesModule } from 'app/shared/directives/directives.module';\nimport { GroupedLabelCardModule } from '../../cards/grouped-label-card/grouped-label-card.module';\nimport { ComboModule } from '../../combo/combo.module';\nimport { EmptyListModule } from '../../empty-list/empty-list.module';\nimport { GridFilterModule } from '../../grid-filter/grid-filter.module';\nimport { ListResultModule } from '../../list-result/list-result.module';\nimport { RowElementModule } from '../../rows/row-element/row-element.module';\nimport { TableWrapperModule } from '../../table-wrapper/table-wrapper.module';\nimport { PickerDialogComponent } from './picker-dialog/picker-dialog.component';\nimport { PickerComponent } from './picker.component';\n\n@NgModule({\n declarations: [PickerComponent, PickerDialogComponent],\n imports: [\n ComboModule,\n CommonModule,\n DirectivesModule,\n DragDropModule,\n EmptyListModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n FormsModule,\n GridFilterModule,\n GroupedLabelCardModule,\n ListResultModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatPaginatorModule,\n MatProgressBarModule,\n MatTooltipModule,\n ReactiveFormsModule,\n RowElementModule,\n TableWrapperModule,\n ],\n exports: [PickerComponent],\n})\nexport class PickerModule {}\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, Input, Output, Renderer2 } from '@angular/core';\nimport { ContextMenuService } from 'app/core/services/context-menu/context-menu.service';\nimport { BreakpointHelper } from 'app/shared/helpers/breakpoint-helper';\n\n@Component({ template: '', changeDetection: ChangeDetectionStrategy.OnPush })\nexport abstract class AbstractRowComponent {\n @Output() public afterRowFocusedEvent = new EventEmitter();\n @Output() public clickActionColumnEvent = new EventEmitter();\n @Output() public clickEvent = new EventEmitter();\n // Indicates if the row click event should be fire when xs\n @Input() public clickOnlyOnLessThanXsFlag = false;\n // Indicates if the row click event should be fire when no touch mode\n @Input() public clickOnlyOnTouchModeFlag = false;\n @Output() public keydownEnterEvent = new EventEmitter();\n @Output() public mouseLeaveEvent = new EventEmitter();\n @Input() public uuid: string;\n\n // Indicates whether an event comes from a touch\n protected _eventFromTouchFlag = false;\n\n // Indicates whether the row should remain visible when the user clicks on an action button and a dialog shows up\n protected _keepActionButtonVisibleFlag = false;\n\n // Indicates whether the user is moving his finger on the touch screen (scrolling)\n protected _movingFlag = false;\n\n // Indicates whether the mouse is over a row\n protected _rowVisibleFlag = false;\n\n public constructor(protected _contextMenuService: ContextMenuService, protected _elementRef: ElementRef, protected renderer: Renderer2) {\n // tabindex attribute makes the row focusable\n // https://stackoverflow.com/questions/50492141/how-to-add-focus-to-a-table-row-tr\n this.renderer.setAttribute(_elementRef.nativeElement, 'tabindex', '0');\n this._elementRef.nativeElement.addEventListener('focus', () => {\n this._afterFocusedRow();\n });\n }\n\n public addEventOnTouchMove(): void {\n this._elementRef.nativeElement.addEventListener(\n 'touchmove',\n () => {\n this._touchMove();\n },\n { passive: true }\n );\n }\n\n public blurRow(): void {\n if (!this._contextMenuService.contextMenuVisibleFlag) {\n if (!this._keepActionButtonVisibleFlag) {\n this._elementRef.nativeElement.classList.remove('focus-row');\n this._rowVisibleFlag = false;\n }\n\n this._keepActionButtonVisibleFlag = false;\n }\n }\n\n public click(): void {\n if (this._eventFromTouchFlag || BreakpointHelper.isXs() || !this.clickOnlyOnTouchModeFlag) {\n this._eventFromTouchFlag = false;\n this.clickEvent.emit();\n }\n }\n\n public clickActionColumn(): void {\n if (this._eventFromTouchFlag || BreakpointHelper.isXs() || !this.clickOnlyOnTouchModeFlag) {\n this._eventFromTouchFlag = false;\n this.clickActionColumnEvent.emit();\n }\n }\n\n public abstract focusRow(): void;\n\n // Add specific style class to the row when mouse enter\n // In order to display the border around the box\n @HostListener('mouseenter') public mouseEnter(): void {\n this._elementRef.nativeElement.classList.add('visible-row');\n this._rowVisibleFlag = true;\n }\n\n @HostListener('mouseleave', ['$event'])\n public mouseLeave(): void {\n if (!this._contextMenuService.contextMenuVisibleFlag) {\n // Don't remove action button if asked for\n // (ex: when hitting the delete action button we want to continue to see action buttons of the current row)\n if (!this._keepActionButtonVisibleFlag) {\n this._makeRowInvisible();\n }\n\n this._keepActionButtonVisibleFlag = false;\n }\n this.mouseLeaveEvent.emit();\n }\n\n @HostListener('document:click')\n public onClick(): void {\n // Don't remove action button if asked for\n // (ex: when hitting the delete action button we want to continue to see action buttons of the current row)\n if (!this._keepActionButtonVisibleFlag) {\n this._makeRowInvisible();\n }\n\n this._keepActionButtonVisibleFlag = false;\n }\n\n public setSelectionFlag(selectionFlag: boolean): void {\n if (selectionFlag) {\n this._keepActionButtonVisibleFlag = true;\n } else {\n this._makeRowInvisible();\n }\n }\n\n public touchEnd(): void {\n // If the touchend event occurs:\n // - not because of a drag (!_movingFlag) and\n // - the buttons are not displayed, this means:\n // * the row is not visible (!_rowVisibleFlag) or\n // * The screen with is extra small\n // Then edit the row\n // | _movingFlag | _rowVisibleFlag | BreakpointHelper.isXs() | Action | Note\n // | false | false | false | Do not Edit | Official version with no row visible and not scrolling\n // | false | false | true | Edit | Mobile version with no row visible and not scrolling\n // | false | true | false | Do not Edit | Official version with a row visible and not scrolling\n // | false | true | true | Edit | Mobile version with a row visible and not scrolling\n // | true | false | false | Do not Edit | Official version with no row visible and scrolling\n // | true | false | true | Do not Edit | Mobile version with no row visible and scrolling\n // | true | true | false | Do not Edit | Official version with a row visible and scrolling\n // | true | true | true | Do not Edit | Mobile version with a row visible and scrolling\n if (!this._movingFlag && (!this._rowVisibleFlag || BreakpointHelper.isXs() || !this.clickOnlyOnLessThanXsFlag)) {\n this._eventFromTouchFlag = true;\n this.clickEvent.emit();\n }\n\n this._movingFlag = false;\n }\n\n protected _afterFocusedRow(): void {\n this.afterRowFocusedEvent.emit(this.uuid);\n this._elementRef.nativeElement.classList.add('focus-row');\n this._rowVisibleFlag = true;\n }\n\n protected _makeRowInvisible(): void {\n this._elementRef.nativeElement.classList.remove('visible-row');\n this._elementRef.nativeElement.classList.remove('focus-row');\n this._rowVisibleFlag = false;\n }\n\n protected _touchMove(): void {\n this._movingFlag = true;\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
    \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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { ContextMenuService } from 'app/core/services/context-menu/context-menu.service';\nimport { AbstractRowComponent } from '../abstract-row-component';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[app-row-element]',\n styleUrls: ['./row-element.component.scss'],\n templateUrl: './row-element.component.html',\n})\nexport class RowElementComponent extends AbstractRowComponent implements AfterViewInit {\n @ViewChild('_checkbox') public _checkbox: HTMLElement;\n\n @Input() public actionColumnFlag = true;\n\n @Output() public afterRowFocusedEvent = new EventEmitter();\n\n @ContentChild('cardFive') public cardFive: any;\n @Output() public cardFiveEditEvent = new EventEmitter();\n @Input() public cardFiveEditLabel;\n\n @ContentChild('cardFour') public cardFour: any;\n @Output() public cardFourEditEvent = new EventEmitter();\n @Input() public cardFourEditLabel;\n\n @ContentChild('cardOne') public cardOne: any;\n @Output() public cardOneEditEvent = new EventEmitter();\n @Input() public cardOneEditLabel: string;\n @Input() public cardOneHatDisabledFlag = false;\n @Input() public cardOneHatHighlightEnabledFlag = false;\n @Input() public cardOneHatLabel: string;\n @Input() public cardOneHatStyle: string;\n @Input() public cardOneHatWidth: string;\n @Input() public cardOneSecondHatDisabledFlag = false;\n @Input() public cardOneSecondHatHighlightEnabledFlag = false;\n @Input() public cardOneSecondHatLabel: string;\n @Input() public cardOneSecondHatStyle: string;\n @Input() public cardOneSecondHatWidth: string;\n\n @ContentChild('cardSix') public cardSix: any;\n @Output() public cardSixEditEvent = new EventEmitter();\n @Input() public cardSixEditLabel;\n\n @ContentChild('cardThree') public cardThree: any;\n @Output() public cardThreeEditEvent = new EventEmitter();\n @Input() public cardThreeEditLabel;\n\n @ContentChild('cardTwo') public cardTwo: any;\n @Output() public cardTwoEditEvent = new EventEmitter();\n @Input() public cardTwoEditLabel;\n\n @Input() public checkableRowFlag = true;\n @Input() public checkedRow: boolean;\n @Input() public clickableRow = true;\n\n @Input() public columnFiveGtXsVisibleFlag = false;\n @Input() public columnFourGtXsVisibleFlag = false;\n @Input() public columnFourXsVisibleFlag = false;\n @Input() public columnThreeGtXsVisibleFlag = false;\n @Input() public columnThreeXsVisibleFlag = false;\n @Input() public columnTwoGtXsVisibleFlag = false;\n @Input() public columnTwoXsVisibleFlag = false;\n\n // If true, action buttons will replace (float over) the last column.\n // To work nicely only one column width could be dynamic in the table.\n @Input() public hoverActionButtons = false;\n\n @Output() public toggleSelectionEvent = new EventEmitter();\n\n public constructor(_contextMenuService: ContextMenuService, _elementRef: ElementRef, _renderer: Renderer2) {\n super(_contextMenuService, _elementRef, _renderer);\n }\n\n public editCardFive(): void {\n this.cardFiveEditEvent.emit();\n }\n\n public editCardFour(): void {\n this.cardFourEditEvent.emit();\n }\n\n public editCardOne(): void {\n this.cardOneEditEvent.emit();\n }\n\n public editCardSix(): void {\n this.cardSixEditEvent.emit();\n }\n\n public editCardThree(): void {\n this.cardThreeEditEvent.emit();\n }\n\n public editCardTwo(): void {\n this.cardTwoEditEvent.emit();\n }\n\n public focusinCheckboxHandler(): void {\n this._afterFocusedRow();\n }\n\n public focusRow(): void {\n if (this.checkableRowFlag) {\n this._checkbox.focus();\n } else {\n this._elementRef.nativeElement.focus();\n }\n }\n\n public ngAfterViewInit(): void {\n this.addEventOnTouchMove();\n }\n\n public toggleSelection(): void {\n this.toggleSelectionEvent.emit();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { HatCardModule } from '../../cards/hat-card/hat-card.module';\nimport { RowElementComponent } from './row-element.component';\n\n@NgModule({\n declarations: [RowElementComponent],\n imports: [\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n HatCardModule,\n MatIconModule,\n MatButtonModule,\n MatCheckboxModule,\n MatTooltipModule,\n ],\n exports: [RowElementComponent],\n})\nexport class RowElementModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { NotifyService } from 'app/core/services/notify/notify.service';\nimport { NotificationService } from 'app/core/services/prothesis-api/notification.service';\nimport { ButtonListSpreadsheetExportDialogModel } from './models/button-list-spreadsheet-export-dialog.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-button-list-spreadsheet-export-dialog',\n styleUrls: ['./button-list-spreadsheet-export-dialog.component.scss'],\n templateUrl: './button-list-spreadsheet-export-dialog.component.html',\n})\nexport class ButtonListSpreadsheetExportDialogComponent {\n @Input() public buttonListSpreadsheetExportDialog: ButtonListSpreadsheetExportDialogModel;\n @Output() public closeEvent = new EventEmitter();\n @Output() public generateSpreadsheetExport1Event = new EventEmitter();\n @Output() public generateSpreadsheetExport2Event = new EventEmitter();\n @Output() public generateSpreadsheetExport3Event = new EventEmitter();\n @Output() public generateSpreadsheetExport4Event = new EventEmitter();\n @Output() public generateSpreadsheetExport5Event = new EventEmitter();\n @Output() public generateSpreadsheetExport6Event = new EventEmitter();\n\n public constructor(\n private _notificationService: NotificationService,\n private _notifyService: NotifyService,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) buttonListSpreadsheetExportDialog: ButtonListSpreadsheetExportDialogModel\n ) {\n this.buttonListSpreadsheetExportDialog = buttonListSpreadsheetExportDialog;\n\n this.closeEvent.subscribe(() => {\n dialogRef.close();\n });\n\n if (\n this.buttonListSpreadsheetExportDialog.buttonListDialog.button1Label &&\n buttonListSpreadsheetExportDialog.addNotificationViewModels1\n ) {\n this.generateSpreadsheetExport1Event.subscribe(() => {\n this._notificationService\n .generateSpreadsheetExport(buttonListSpreadsheetExportDialog.addNotificationViewModels1)\n .subscribe((resultFlag: boolean) => {\n if (resultFlag) {\n this._notifyService.displayInformationMessagesNow(buttonListSpreadsheetExportDialog.notifyMessage1);\n }\n });\n });\n }\n if (\n this.buttonListSpreadsheetExportDialog.buttonListDialog.button2Label &&\n buttonListSpreadsheetExportDialog.addNotificationViewModels2\n ) {\n this.generateSpreadsheetExport2Event.subscribe(() => {\n this._notificationService\n .generateSpreadsheetExport(buttonListSpreadsheetExportDialog.addNotificationViewModels2)\n .subscribe((resultFlag: boolean) => {\n if (resultFlag) {\n this._notifyService.displayInformationMessagesNow(buttonListSpreadsheetExportDialog.notifyMessage2);\n }\n });\n });\n }\n if (\n this.buttonListSpreadsheetExportDialog.buttonListDialog.button3Label &&\n buttonListSpreadsheetExportDialog.addNotificationViewModels3\n ) {\n this.generateSpreadsheetExport3Event.subscribe(() => {\n this._notificationService\n .generateSpreadsheetExport(buttonListSpreadsheetExportDialog.addNotificationViewModels3)\n .subscribe((resultFlag: boolean) => {\n if (resultFlag) {\n this._notifyService.displayInformationMessagesNow(buttonListSpreadsheetExportDialog.notifyMessage3);\n }\n });\n });\n }\n if (\n this.buttonListSpreadsheetExportDialog.buttonListDialog.button4Label &&\n buttonListSpreadsheetExportDialog.addNotificationViewModels4\n ) {\n this.generateSpreadsheetExport4Event.subscribe(() => {\n this._notificationService\n .generateSpreadsheetExport(buttonListSpreadsheetExportDialog.addNotificationViewModels4)\n .subscribe((resultFlag: boolean) => {\n if (resultFlag) {\n this._notifyService.displayInformationMessagesNow(buttonListSpreadsheetExportDialog.notifyMessage4);\n }\n });\n });\n }\n if (\n this.buttonListSpreadsheetExportDialog.buttonListDialog.button5Label &&\n buttonListSpreadsheetExportDialog.addNotificationViewModels5\n ) {\n this.generateSpreadsheetExport5Event.subscribe(() => {\n this._notificationService\n .generateSpreadsheetExport(buttonListSpreadsheetExportDialog.addNotificationViewModels5)\n .subscribe((resultFlag: boolean) => {\n if (resultFlag) {\n this._notifyService.displayInformationMessagesNow(buttonListSpreadsheetExportDialog.notifyMessage5);\n }\n });\n });\n }\n if (\n this.buttonListSpreadsheetExportDialog.buttonListDialog.button6Label &&\n buttonListSpreadsheetExportDialog.addNotificationViewModels6\n ) {\n this.generateSpreadsheetExport6Event.subscribe(() => {\n this._notificationService\n .generateSpreadsheetExport(buttonListSpreadsheetExportDialog.addNotificationViewModels6)\n .subscribe((resultFlag: boolean) => {\n if (resultFlag) {\n this._notifyService.displayInformationMessagesNow(buttonListSpreadsheetExportDialog.notifyMessage6);\n }\n });\n });\n }\n }\n}\n","\n\n","import { ButtonListDialogModel } from 'app/shared/components/dialog/button-list-dialog/models/button-list-dialog-model';\nimport { AddSpreadsheetExportNotificationViewModel } from 'app/shared/prothesis-api-view-models/add-spreadsheet-export-notification.view-model';\n\nexport class ButtonListSpreadsheetExportDialogModel {\n public addNotificationViewModels1: AddSpreadsheetExportNotificationViewModel;\n public addNotificationViewModels2: AddSpreadsheetExportNotificationViewModel;\n public addNotificationViewModels3: AddSpreadsheetExportNotificationViewModel;\n public addNotificationViewModels4: AddSpreadsheetExportNotificationViewModel;\n public addNotificationViewModels5: AddSpreadsheetExportNotificationViewModel;\n public addNotificationViewModels6: AddSpreadsheetExportNotificationViewModel;\n public buttonListDialog: ButtonListDialogModel;\n public helpLinkLabel1: string;\n public helpLinkLabel2: string;\n public helpLinkUrl1: string;\n public helpLinkUrl2: string;\n public helpTitle: string;\n public notifyMessage1: string;\n public notifyMessage2: string;\n public notifyMessage3: string;\n public notifyMessage4: string;\n public notifyMessage5: string;\n public notifyMessage6: string;\n}\n","import { ButtonListDialogModelHelper } from 'app/shared/components/dialog/button-list-dialog/model-helpers/button-list-dialog-model-helper';\nimport { ButtonListSpreadsheetExportDialogModel } from '../models/button-list-spreadsheet-export-dialog.model';\n\nexport class ButtonListSpreadsheetExportDialogModelHelper {\n public static build(): ButtonListSpreadsheetExportDialogModel {\n const buttonListSpreadsheetExportDialog = new ButtonListSpreadsheetExportDialogModel();\n buttonListSpreadsheetExportDialog.buttonListDialog = ButtonListDialogModelHelper.build();\n buttonListSpreadsheetExportDialog.buttonListDialog.title = 'Sélectionner la liste à exporter';\n return buttonListSpreadsheetExportDialog;\n }\n}\n","import { AbstractRowComponent } from '../rows/abstract-row-component';\n\nexport class TableConfig {\n public rows: AbstractRowComponent[];\n\n public constructor(rows: AbstractRowComponent[]) {\n this.rows = rows;\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FocusService } from 'app/core/services/focus.service';\nimport { PickerStateService } from 'app/core/services/picker-state.service';\nimport { PaginatedListState } from 'app/shared/states/paginated-list-state';\nimport { TableConfig } from './table-config';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-table-wrapper',\n templateUrl: './table-wrapper.component.html',\n styleUrls: ['./table-wrapper.component.scss'],\n})\nexport class TableWrapperComponent {\n @Output() public keydownAddEvent = new EventEmitter();\n @Output() public keydownArrowLeftEvent = new EventEmitter();\n @Output() public keydownArrowRightEvent = new EventEmitter();\n @Input() public paginatedListState: PaginatedListState;\n @Input() public tableConfig: TableConfig;\n @Input() public totalCount: number;\n @ViewChild('_table') private _table: ElementRef;\n public indexFocusedRow: number;\n\n public constructor(private _dialog: MatDialog, private _focusService: FocusService, private _pickerStateService: PickerStateService) {}\n\n public afterRowFocusedHandler(uuid: string): void {\n // Blur other rows and make sure the indexFocusRow is rightely set\n this.tableConfig?.rows.forEach((row, index) => {\n if (row.uuid !== uuid) {\n row.blurRow();\n } else {\n this.indexFocusedRow = index;\n }\n });\n }\n\n public focusAtIndex(index: number): void {\n // Blur all rows and make sure the indexFocusRow is rightely set\n this.tableConfig?.rows.forEach((row) => {\n row.blurRow();\n });\n this._focusService.setTimeoutOutsideAngular(() => {\n this.indexFocusedRow = index;\n this.tableConfig?.rows[this.indexFocusedRow]?.focusRow();\n });\n }\n\n public focusOut(): void {\n // Blur all rows and make sure the indexFocusRow is rightely set\n this.tableConfig?.rows.forEach((row) => {\n row.blurRow();\n });\n this.indexFocusedRow = null;\n }\n\n @HostListener('window:keydown.+', ['$event'])\n @HostListener('window:keydown.shift.+', ['$event'])\n public keydownAdd($event: KeyboardEvent): void {\n const input = $event.target as HTMLInputElement;\n if (input && (input.type === 'text' || (input.type === '' && !input.draggable))) {\n return;\n }\n $event.preventDefault();\n this.keydownAddEvent.emit();\n }\n\n @HostListener('window:keydown.alt.+', ['$event'])\n @HostListener('window:keydown.alt.shift.+', ['$event'])\n public keydownAltAdd($event: KeyboardEvent): void {\n $event.preventDefault();\n this.keydownAddEvent.emit();\n }\n\n @HostListener('window:keydown.ArrowDown', ['$event'])\n @HostListener('window:keydown.control.ArrowDown', ['$event'])\n public keydownArrowDown($event: KeyboardEvent): void {\n if (this.proceedEvent($event)) {\n const input = $event.target as HTMLInputElement;\n if (input && (input.type === 'radio' || input.nodeName === 'MAT-SELECT')) {\n return;\n }\n let previousIndex = this.indexFocusedRow;\n if (!previousIndex && !(previousIndex === 0)) {\n previousIndex = 0;\n } else {\n previousIndex = (previousIndex + 1) % this.tableConfig?.rows.length;\n }\n\n this.focusAtIndex(previousIndex);\n }\n }\n\n @HostListener('window:keydown.ArrowLeft', ['$event'])\n @HostListener('window:keydown.control.ArrowLeft', ['$event'])\n public keydownArrowLeft($event: KeyboardEvent): void {\n if (this.proceedEvent($event)) {\n const input = $event.target as HTMLInputElement;\n if (input && (input.type === 'text' || (input.type === '' && !input.draggable))) {\n return;\n }\n\n if (this.paginatedListState) {\n const previousIndex = this.paginatedListState.pageIndex - 1;\n if (previousIndex >= 0) {\n this.paginatedListState.pageIndex = previousIndex;\n this.keydownArrowLeftEvent.emit();\n }\n }\n }\n }\n\n @HostListener('window:keydown.ArrowRight', ['$event'])\n @HostListener('window:keydown.control.ArrowRight', ['$event'])\n public keydownArrowRight($event: KeyboardEvent): void {\n if (this.proceedEvent($event)) {\n const input = $event.target as HTMLInputElement;\n if (input && (input.type === 'text' || (input.type === '' && !input.draggable))) {\n return;\n }\n\n if (this.paginatedListState) {\n const nextIndex = this.paginatedListState.pageIndex + 1;\n if (this.paginatedListState.pageSize && this.paginatedListState.pageSize !== 0) {\n const maxIndex = this.totalCount / this.paginatedListState.pageSize;\n if (nextIndex < maxIndex) {\n this.paginatedListState.pageIndex = nextIndex;\n this.keydownArrowRightEvent.emit();\n }\n }\n }\n }\n }\n\n @HostListener('window:keydown.ArrowUp', ['$event'])\n @HostListener('window:keydown.control.ArrowUp', ['$event'])\n public keydownArrowUp($event: KeyboardEvent): void {\n if (this.proceedEvent($event)) {\n const input = $event.target as HTMLInputElement;\n if (input && (input.type === 'radio' || input.nodeName === 'MAT-SELECT')) {\n return;\n }\n $event.preventDefault();\n let nextIndex = this.indexFocusedRow;\n if (!nextIndex && !(nextIndex === 0)) {\n nextIndex = this.tableConfig?.rows.length - 1;\n } else {\n nextIndex = nextIndex - 1;\n if (nextIndex < 0) {\n nextIndex = this.tableConfig?.rows.length - 1;\n }\n }\n this.focusAtIndex(nextIndex);\n }\n }\n\n @HostListener('keydown.Enter', ['$event'])\n @HostListener('keydown.control.Enter', ['$event'])\n public keydownEnter($event: KeyboardEvent): void {\n if ((this.indexFocusedRow || this.indexFocusedRow === 0) && this._table.nativeElement.contains(document.activeElement)) {\n const input = $event.target as HTMLButtonElement;\n if (input && (input.type === 'button' || input.type === 'submit')) {\n return;\n }\n\n this.tableConfig?.rows[this.indexFocusedRow].keydownEnterEvent.emit();\n }\n }\n\n @HostListener('window:keydown.tab', ['$event'])\n public keydownTab(event: MouseEvent): void {\n const targetElement = event.target as HTMLElement;\n\n // Check if the click was outside the element\n if (targetElement && !this._table.nativeElement.contains(targetElement)) {\n this.focusOut();\n }\n }\n\n @HostListener('window:click', ['$event'])\n public onClick(event: MouseEvent): void {\n const targetElement = event.target as HTMLElement;\n\n // Check if the click was outside the element\n if (targetElement && !this._table.nativeElement.contains(targetElement)) {\n this.focusOut();\n }\n }\n\n public proceedEvent($event: KeyboardEvent): boolean {\n // If a mat-autocomplete of a picker is open somewhere, return false to ignore the keyboard event.\n if (this._pickerStateService.autocompleteOpenedFlag) {\n return false;\n }\n\n // If an app-picker-dialog is open\n if (this._dialog.openDialogs.length > 0) {\n // Search for an optional closest picker dialog in the parents of the current element.\n const closestPicker = this._table.nativeElement.closest('app-picker-dialog');\n\n // If this instance of the table-wrapper is not child of the picker-dialog,\n // return false to ignore the keyboard event.\n if (!closestPicker) {\n return false;\n }\n // else (this instance of the table-wrapper is a child of the app-picker-dialog)\n // preventDefault and return true to handle the keyboard event.\n else {\n $event.preventDefault();\n }\n }\n return true;\n }\n}\n","\n\n \n \n \n \n \n \n \n \n \n
    \n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TableWrapperComponent } from './table-wrapper.component';\n\n@NgModule({\n declarations: [TableWrapperComponent],\n imports: [CommonModule],\n exports: [TableWrapperComponent],\n})\nexport class TableWrapperModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AutofocusDirective } from './autofocus.directive';\nimport { CapitalizeDirective } from './capitalize.directive';\nimport { ClickElsewhereDirective } from './click-elsewhere.directive';\nimport { DisableDirective } from './disable-directive';\nimport { DropZoneDirective } from './drop-zone.directive';\nimport { FileSelectDirective } from './file-select.directive';\nimport { FirstLetterUpperCaseDirective } from './first-letter-upper-case.directive';\nimport { RemovePunctuationDirective } from './remove-punctuation.directive';\nimport { UpperCaseTextDirective } from './upper-case-text.directive';\n\n@NgModule({\n declarations: [\n AutofocusDirective,\n CapitalizeDirective,\n ClickElsewhereDirective,\n DisableDirective,\n DropZoneDirective,\n FileSelectDirective,\n FirstLetterUpperCaseDirective,\n UpperCaseTextDirective,\n RemovePunctuationDirective,\n CapitalizeDirective,\n ],\n imports: [CommonModule],\n exports: [\n AutofocusDirective,\n CapitalizeDirective,\n ClickElsewhereDirective,\n DisableDirective,\n DropZoneDirective,\n FileSelectDirective,\n FirstLetterUpperCaseDirective,\n RemovePunctuationDirective,\n UpperCaseTextDirective,\n ],\n})\nexport class DirectivesModule {}\n","import { Directive, ElementRef, Input, OnChanges, Renderer2 } from '@angular/core';\n\nconst DISABLED = 'disabled';\nconst APP_DISABLED = 'app-disabled';\nconst TAB_INDEX = 'tabindex';\nconst TAG_ANCHOR = 'a';\n\n@Directive({\n selector: '[appDisable]',\n})\nexport class DisableDirective implements OnChanges {\n @Input() public appDisable = true;\n\n public constructor(private eleRef: ElementRef, private renderer: Renderer2) {}\n\n public ngOnChanges() {\n this.disableElement(this.eleRef.nativeElement);\n }\n\n private disableElement(element: any) {\n if (this.appDisable) {\n if (!element.hasAttribute(DISABLED)) {\n this.renderer.setAttribute(element, APP_DISABLED, '');\n this.renderer.setAttribute(element, DISABLED, 'true');\n\n // disabling anchor tab keyboard event\n if (element.tagName.toLowerCase() === TAG_ANCHOR) {\n this.renderer.setAttribute(element, TAB_INDEX, '-1');\n }\n }\n } else {\n if (element.hasAttribute(APP_DISABLED)) {\n if (element.getAttribute(DISABLED) !== '') {\n element.removeAttribute(DISABLED);\n }\n element.removeAttribute(APP_DISABLED);\n if (element.tagName.toLowerCase() === TAG_ANCHOR) {\n element.removeAttribute(TAB_INDEX);\n }\n }\n }\n if (element.children) {\n for (const ele of element.children) {\n this.disableElement(ele);\n }\n }\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\n@Directive({\n selector: '[appFirstLetterUpperCase]',\n})\nexport class FirstLetterUpperCaseDirective {\n @Input('appFirstLetterUpperCase') public model: AbstractControl;\n\n public constructor(private _elementRef: ElementRef) {}\n\n // input event: https://developer.mozilla.org/en-US/docs/Web/Events/input\n // https://angular.io/guide/attribute-directives\n @HostListener('input', ['$event'])\n public onInputChange(event: any): void {\n const caretPos = event.target.selectionStart;\n const text: string = event.target.value.trimLeft();\n let result = '';\n if (text.length > 0) {\n result = text[0].toUpperCase();\n if (text.length > 1) {\n result += text.substr(1, text.length);\n }\n }\n\n this.model.setValue(result);\n this._elementRef.nativeElement.setSelectionRange(caretPos, caretPos);\n }\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { PeriodSearchType } from 'app/shared/enums/Customer/period-search-type.enum';\n\nexport class PeriodSearchTypeHelper {\n public static periodSearchTypeCustom = new ComboModel('-1', 'Personnalisé');\n\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(PeriodSearchType.Year));\n options.push(this.convertToComboModel(PeriodSearchType.Month));\n options.push(this.convertToComboModel(PeriodSearchType.Week));\n options.push(this.convertToComboModel(PeriodSearchType.Day));\n return options;\n }\n\n public static convertToComboModel(enumValue: PeriodSearchType): ComboModel {\n if (Object.values(PeriodSearchType).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): PeriodSearchType {\n if (comboModel) {\n if (comboModel.key === PeriodSearchType.Year.valueOf().toString()) {\n return PeriodSearchType.Year;\n } else if (comboModel.key === PeriodSearchType.Month.valueOf().toString()) {\n return PeriodSearchType.Month;\n } else if (comboModel.key === PeriodSearchType.Week.valueOf().toString()) {\n return PeriodSearchType.Week;\n } else if (comboModel.key === PeriodSearchType.Day.valueOf().toString()) {\n return PeriodSearchType.Day;\n }\n }\n\n return undefined;\n }\n\n public static translateEnum(enumValue: PeriodSearchType): string {\n if (enumValue === PeriodSearchType.Year) {\n return 'Année';\n } else if (enumValue === PeriodSearchType.Month) {\n return 'Mois';\n } else if (enumValue === PeriodSearchType.Week) {\n return 'Semaine';\n } else if (enumValue === PeriodSearchType.Day) {\n return 'Journée';\n }\n\n return undefined;\n }\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { PeriodSearchType } from 'app/shared/enums/Laboratory/period-search-type.enum';\n\nexport class PeriodSearchTypeHelper {\n public static periodSearchTypeCustom = new ComboModel('-1', 'Personnalisé');\n\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(PeriodSearchType.FiscalYear));\n options.push(this.convertToComboModel(PeriodSearchType.Year));\n options.push(this.convertToComboModel(PeriodSearchType.Month));\n options.push(this.convertToComboModel(PeriodSearchType.Week));\n options.push(this.convertToComboModel(PeriodSearchType.Day));\n return options;\n }\n\n public static convertToComboModel(enumValue: PeriodSearchType): ComboModel {\n if (Object.values(PeriodSearchType).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): PeriodSearchType {\n if (comboModel) {\n if (comboModel.key === PeriodSearchType.FiscalYear.valueOf().toString()) {\n return PeriodSearchType.FiscalYear;\n } else if (comboModel.key === PeriodSearchType.Year.valueOf().toString()) {\n return PeriodSearchType.Year;\n } else if (comboModel.key === PeriodSearchType.Month.valueOf().toString()) {\n return PeriodSearchType.Month;\n } else if (comboModel.key === PeriodSearchType.Week.valueOf().toString()) {\n return PeriodSearchType.Week;\n } else if (comboModel.key === PeriodSearchType.Day.valueOf().toString()) {\n return PeriodSearchType.Day;\n }\n }\n\n return undefined;\n }\n\n public static translateEnum(enumValue: PeriodSearchType): string {\n if (enumValue === PeriodSearchType.FiscalYear) {\n return 'Exercice';\n } else if (enumValue === PeriodSearchType.Year) {\n return 'Année';\n } else if (enumValue === PeriodSearchType.Month) {\n return 'Mois';\n } else if (enumValue === PeriodSearchType.Week) {\n return 'Semaine';\n } else if (enumValue === PeriodSearchType.Day) {\n return 'Journée';\n }\n\n return undefined;\n }\n}\n","import { ComboModel } from '../components/combo/combo-model';\nimport { ContactTitle } from '../enums/contact-title.enum';\nimport { SortHelper } from '../helpers/sort-helper';\n\nexport class ContactTitleHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(ContactTitle.Doctor));\n options.push(this.convertToComboModel(ContactTitle.Mr));\n options.push(this.convertToComboModel(ContactTitle.Mrs));\n options.push(this.convertToComboModel(ContactTitle.None));\n options.push(this.convertToComboModel(ContactTitle.Professor));\n options.sort(SortHelper.sortByLabelAlphabetically);\n return options;\n }\n\n public static convertToComboModel(enumValue: ContactTitle): ComboModel {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n }\n\n public static convertToEnum(comboModel: ComboModel): ContactTitle {\n if (comboModel) {\n if (comboModel.key === ContactTitle.Doctor.valueOf().toString()) {\n return ContactTitle.Doctor;\n } else if (comboModel.key === ContactTitle.Mr.valueOf().toString()) {\n return ContactTitle.Mr;\n } else if (comboModel.key === ContactTitle.Mrs.valueOf().toString()) {\n return ContactTitle.Mrs;\n } else if (comboModel.key === ContactTitle.None.valueOf().toString()) {\n return ContactTitle.None;\n } else if (comboModel.key === ContactTitle.Professor.valueOf().toString()) {\n return ContactTitle.Professor;\n }\n }\n\n return undefined;\n }\n\n public static translateEnum(enumValue: ContactTitle): string {\n if (enumValue === ContactTitle.Doctor) {\n return 'Docteur';\n } else if (enumValue === ContactTitle.Mr) {\n return 'Monsieur';\n } else if (enumValue === ContactTitle.Mrs) {\n return 'Madame';\n } else if (enumValue === ContactTitle.None) {\n return 'Aucun';\n } else if (enumValue === ContactTitle.Professor) {\n return 'Professeur';\n }\n return undefined;\n }\n}\n","import { ComboModel } from '../components/combo/combo-model';\nimport { CustomerTitle } from '../enums/customer-title.enum';\nimport { SortHelper } from '../helpers/sort-helper';\n\nexport class CustomerTitleHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(CustomerTitle.Doctor));\n options.push(this.convertToComboModel(CustomerTitle.Mr));\n options.push(this.convertToComboModel(CustomerTitle.Mrs));\n options.push(this.convertToComboModel(CustomerTitle.None));\n options.push(this.convertToComboModel(CustomerTitle.Professor));\n options.push(this.convertToComboModel(CustomerTitle.Laboratory));\n options.push(this.convertToComboModel(CustomerTitle.Company));\n options.push(this.convertToComboModel(CustomerTitle.DentalPractice));\n options.push(this.convertToComboModel(CustomerTitle.DentalCenter));\n options.sort(SortHelper.sortByLabelAlphabetically);\n return options;\n }\n\n public static convertToComboModel(enumValue: CustomerTitle): ComboModel {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n if (enumValue === CustomerTitle.None) {\n comboModel.label = 'Aucun';\n } else {\n comboModel.label = this.translateEnum(enumValue);\n }\n return comboModel;\n }\n\n public static convertToEnum(comboModel: ComboModel): CustomerTitle {\n if (comboModel) {\n if (comboModel.key === CustomerTitle.Doctor.valueOf().toString()) {\n return CustomerTitle.Doctor;\n } else if (comboModel.key === CustomerTitle.Mr.valueOf().toString()) {\n return CustomerTitle.Mr;\n } else if (comboModel.key === CustomerTitle.Mrs.valueOf().toString()) {\n return CustomerTitle.Mrs;\n } else if (comboModel.key === CustomerTitle.None.valueOf().toString()) {\n return CustomerTitle.None;\n } else if (comboModel.key === CustomerTitle.Professor.valueOf().toString()) {\n return CustomerTitle.Professor;\n } else if (comboModel.key === CustomerTitle.Laboratory.valueOf().toString()) {\n return CustomerTitle.Laboratory;\n } else if (comboModel.key === CustomerTitle.Company.valueOf().toString()) {\n return CustomerTitle.Company;\n } else if (comboModel.key === CustomerTitle.DentalPractice.valueOf().toString()) {\n return CustomerTitle.DentalPractice;\n } else if (comboModel.key === CustomerTitle.DentalCenter.valueOf().toString()) {\n return CustomerTitle.DentalCenter;\n }\n }\n\n return undefined;\n }\n\n public static translateEnum(customerTitle: CustomerTitle): string {\n if (customerTitle === CustomerTitle.Doctor) {\n return 'Docteur';\n } else if (customerTitle === CustomerTitle.Mr) {\n return 'Monsieur';\n } else if (customerTitle === CustomerTitle.Mrs) {\n return 'Madame';\n } else if (customerTitle === CustomerTitle.Professor) {\n return 'Professeur';\n } else if (customerTitle === CustomerTitle.None) {\n return '';\n } else if (customerTitle === CustomerTitle.Laboratory) {\n return 'Laboratoire';\n } else if (customerTitle === CustomerTitle.Company) {\n return 'Société';\n } else if (customerTitle === CustomerTitle.DentalPractice) {\n return 'Cabinet Dentaire';\n } else if (customerTitle === CustomerTitle.DentalCenter) {\n return 'Centre Dentaire';\n }\n return undefined;\n }\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { CustomerFilter as LA_CustomerFilter } from 'app/shared/prothesis-api-filters/customer-filter';\nimport { CustomerUserCustomerStatus } from '../enums/customer-user-customer-status.enum';\n\nexport class CustomerUserCustomerStatusHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(CustomerUserCustomerStatus.WithActiveUserCustomer));\n options.push(this.convertToComboModel(CustomerUserCustomerStatus.WithWaitingUserCustomer));\n options.push(this.convertToComboModel(CustomerUserCustomerStatus.WithoutActiveUserCustomer));\n options.push(this.convertToComboModel(CustomerUserCustomerStatus.WithoutUserCustomer));\n\n return options;\n }\n\n public static convertToComboModel(enumValue: CustomerUserCustomerStatus): ComboModel {\n if (Object.values(CustomerUserCustomerStatus).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): CustomerUserCustomerStatus {\n if (comboModel) {\n if (comboModel.key === CustomerUserCustomerStatus.WithActiveUserCustomer.valueOf().toString()) {\n return CustomerUserCustomerStatus.WithActiveUserCustomer;\n } else if (comboModel.key === CustomerUserCustomerStatus.WithWaitingUserCustomer.valueOf().toString()) {\n return CustomerUserCustomerStatus.WithWaitingUserCustomer;\n } else if (comboModel.key === CustomerUserCustomerStatus.WithoutActiveUserCustomer.valueOf().toString()) {\n return CustomerUserCustomerStatus.WithoutActiveUserCustomer;\n } else if (comboModel.key === CustomerUserCustomerStatus.WithoutUserCustomer.valueOf().toString()) {\n return CustomerUserCustomerStatus.WithoutUserCustomer;\n }\n }\n\n return undefined;\n }\n\n public static setCustomerFilter(filter: LA_CustomerFilter, selectedUserCustomer: ComboModel): LA_CustomerFilter {\n if (!filter) {\n filter = new LA_CustomerFilter();\n filter.disabledFlag = false;\n }\n\n filter.customerUserCustomerStatus = this.convertToEnum(selectedUserCustomer);\n return filter;\n }\n\n public static translateEnum(enumValue: CustomerUserCustomerStatus): string {\n if (enumValue === CustomerUserCustomerStatus.WithActiveUserCustomer) {\n return 'Avec utilisateurs connectés';\n } else if (enumValue === CustomerUserCustomerStatus.WithWaitingUserCustomer) {\n return 'Avec utilisateurs en attente';\n } else if (enumValue === CustomerUserCustomerStatus.WithoutActiveUserCustomer) {\n return 'Sans utilisateur connecté';\n } else if (enumValue === CustomerUserCustomerStatus.WithoutUserCustomer) {\n return 'Sans utilisateur';\n }\n\n return undefined;\n }\n}\n","import { ComboModel } from '../components/combo/combo-model';\nimport { DocumentStatus } from '../enums/document-status.enum';\nimport { SortHelper } from '../helpers/sort-helper';\n\nexport class DocumentStatusHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(DocumentStatus.Canceled));\n options.push(this.convertToComboModel(DocumentStatus.Done));\n options.push(this.convertToComboModel(DocumentStatus.InProgress));\n options.sort(SortHelper.sortByLabelAlphabetically);\n return options;\n }\n\n public static convertToComboModel(enumValue: DocumentStatus): ComboModel {\n if (Object.values(DocumentStatus).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): DocumentStatus {\n if (comboModel) {\n if (comboModel.key === DocumentStatus.Canceled.valueOf().toString()) {\n return DocumentStatus.Canceled;\n } else if (comboModel.key === DocumentStatus.Done.valueOf().toString()) {\n return DocumentStatus.Done;\n } else if (comboModel.key === DocumentStatus.InProgress.valueOf().toString()) {\n return DocumentStatus.InProgress;\n }\n }\n return undefined;\n }\n\n public static translateEnum(enumValue: DocumentStatus): string {\n if (enumValue === DocumentStatus.Canceled) {\n return 'Annulés';\n } else if (enumValue === DocumentStatus.Done) {\n return 'Traités';\n } else if (enumValue === DocumentStatus.InProgress) {\n return 'En cours';\n }\n return undefined;\n }\n}\n","import { ComboModel } from '../components/combo/combo-model';\nimport { FileAssetType } from '../enums/file-asset-type.enum';\nimport { SortHelper } from '../helpers/sort-helper';\n\nexport class FileAssetTypeHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(FileAssetType.Archive));\n options.push(this.convertToComboModel(FileAssetType.MedicalImaging));\n options.push(this.convertToComboModel(FileAssetType.Model3D));\n options.push(this.convertToComboModel(FileAssetType.Pdf));\n options.push(this.convertToComboModel(FileAssetType.Photos));\n /* options.push(this.convertToComboModel(FileAssetType.Unknown)); In purpose, \"Unknown\" FileAssetType is not allowed. */\n options.sort(SortHelper.sortByLabelAlphabetically);\n return options;\n }\n\n public static convertToComboModel(enumValue: FileAssetType): ComboModel {\n if (Object.values(FileAssetType).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): FileAssetType {\n if (comboModel) {\n if (comboModel.key === FileAssetType.Archive.valueOf().toString()) {\n return FileAssetType.Archive;\n } else if (comboModel.key === FileAssetType.MedicalImaging.valueOf().toString()) {\n return FileAssetType.MedicalImaging;\n } else if (comboModel.key === FileAssetType.Model3D.valueOf().toString()) {\n return FileAssetType.Model3D;\n } else if (comboModel.key === FileAssetType.Pdf.valueOf().toString()) {\n return FileAssetType.Pdf;\n } else if (comboModel.key === FileAssetType.Photos.valueOf().toString()) {\n return FileAssetType.Photos;\n /* } else if (comboModel.key === FileAssetType.Unknown.valueOf().toString()) {\n return FileAssetType.Unknown; In purpose, \"Unknown\" FileAssetType is not allowed. */\n }\n }\n return undefined;\n }\n\n public static translateDisplayOrder(enumValue: FileAssetType): number {\n if (enumValue === FileAssetType.Archive) {\n return 5;\n } else if (enumValue === FileAssetType.MedicalImaging) {\n return 3;\n } else if (enumValue === FileAssetType.Model3D) {\n return 4;\n } else if (enumValue === FileAssetType.Pdf) {\n return 1;\n } else if (enumValue === FileAssetType.Photos) {\n return 2;\n }\n\n return undefined;\n }\n\n public static translateEnum(enumValue: FileAssetType): string {\n if (enumValue === FileAssetType.Archive) {\n return 'Archive';\n } else if (enumValue === FileAssetType.MedicalImaging) {\n return 'Imagerie médicale';\n } else if (enumValue === FileAssetType.Model3D) {\n return 'Modèle 3D';\n } else if (enumValue === FileAssetType.Pdf) {\n return 'Fichier PDF';\n } else if (enumValue === FileAssetType.Photos) {\n return 'Photographie';\n /* } else if (enumValue === FileAssetType.Unknown) {\n return 'Inconnu'; In purpose, \"Unknown\" FileAssetType is not allowed. */\n }\n\n return undefined;\n }\n\n public static translateEnumToCssClass(enumValue: FileAssetType): string {\n if (enumValue === FileAssetType.Archive) {\n return 'file-type-archive';\n } else if (enumValue === FileAssetType.MedicalImaging) {\n return 'file-type-medical-imaging';\n } else if (enumValue === FileAssetType.Model3D) {\n return 'file-type-model3d';\n } else if (enumValue === FileAssetType.Pdf) {\n return 'file-type-pdf';\n } else if (enumValue === FileAssetType.Photos) {\n return 'file-type-photos';\n /* } else if (enumValue === FileAssetType.Unknown) {\n return 'file-type-unknown'; In purpose, \"Unknown\" FileAssetType is not allowed. */\n }\n\n return undefined;\n }\n}\n","import { ComboModel } from '../components/combo/combo-model';\nimport { JournalFileType } from '../enums/journal-file-type.enum';\nimport { SortHelper } from '../helpers/sort-helper';\n\nexport class JournalFileTypeHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(JournalFileType.Fec));\n options.push(this.convertToComboModel(JournalFileType.Pdf));\n options.push(this.convertToComboModel(JournalFileType.Spreadsheet));\n options.sort(SortHelper.sortByLabelAlphabetically);\n return options;\n }\n\n public static convertToComboModel(enumValue: JournalFileType): ComboModel {\n if (Object.values(JournalFileType).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): JournalFileType {\n if (comboModel) {\n if (comboModel.key === JournalFileType.Fec.valueOf().toString()) {\n return JournalFileType.Fec;\n } else if (comboModel.key === JournalFileType.Pdf.valueOf().toString()) {\n return JournalFileType.Pdf;\n } else if (comboModel.key === JournalFileType.Spreadsheet.valueOf().toString()) {\n return JournalFileType.Spreadsheet;\n }\n }\n\n return undefined;\n }\n\n public static translateEnum(enumValue: JournalFileType): string {\n if (enumValue === JournalFileType.Fec) {\n return 'FEC';\n } else if (enumValue === JournalFileType.Pdf) {\n return 'PDF';\n } else if (enumValue === JournalFileType.Spreadsheet) {\n return 'Excel';\n }\n return undefined;\n }\n}\n","import { ComboModel } from '../components/combo/combo-model';\nimport { JournalType } from '../enums/journal-type.enum';\nimport { SortHelper } from '../helpers/sort-helper';\n\nexport class JournalTypeHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(JournalType.AccountStatement));\n options.push(this.convertToComboModel(JournalType.Sales));\n options.push(this.convertToComboModel(JournalType.Taxes));\n options.push(this.convertToComboModel(JournalType.Cash));\n options.push(this.convertToComboModel(JournalType.MiscellaneousOperations));\n options.push(this.convertToComboModel(JournalType.All));\n options.sort(SortHelper.sortByLabelAlphabetically);\n return options;\n }\n\n public static convertToComboModel(enumValue: JournalType): ComboModel {\n if (Object.values(JournalType).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): JournalType {\n if (comboModel) {\n if (comboModel.key === JournalType.Cash.valueOf().toString()) {\n return JournalType.Cash;\n } else if (comboModel.key === JournalType.MiscellaneousOperations.valueOf().toString()) {\n return JournalType.MiscellaneousOperations;\n } else if (comboModel.key === JournalType.Sales.valueOf().toString()) {\n return JournalType.Sales;\n } else if (comboModel.key === JournalType.Taxes.valueOf().toString()) {\n return JournalType.Taxes;\n } else if (comboModel.key === JournalType.All.valueOf().toString()) {\n return JournalType.All;\n }\n }\n\n return undefined;\n }\n\n public static translateEnum(enumValue: JournalType): string {\n if (enumValue === JournalType.Cash) {\n return 'Journal de trésorerie';\n } else if (enumValue === JournalType.MiscellaneousOperations) {\n return 'Journal des OD';\n } else if (enumValue === JournalType.Sales) {\n return 'Journal des ventes';\n } else if (enumValue === JournalType.Taxes) {\n return 'Journal des taxes';\n } else if (enumValue === JournalType.All) {\n return 'Export comptable global';\n } else if (enumValue === JournalType.AccountStatement) {\n return 'Extrait de compte client';\n }\n return undefined;\n }\n}\n","import { PdfCreditType } from '../enums/pdf-credit-type.enum';\n\nexport class PdfCreditTypeHelper {\n public static buildPdfMergeNotificationCardMessage(length: number, pdfDocumentType: PdfCreditType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfCreditType.Credit) {\n msg = {\n msgPlural: `PDF de ${length} factures d'avoir`,\n msgSingular: `PDF de ${length} facture d'avoir`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static buildPdfMergeNotifyMessage(length: number, pdfDocumentType: PdfCreditType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfCreditType.Credit) {\n msg = {\n msgPlural: `PDF multiple de ${length} avoirs en cours de génération`,\n msgSingular: `PDF multiple de ${length} avoir en cours de génération`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static translateEnum(enumValue: PdfCreditType, pluralFlag = false): string {\n if (enumValue === PdfCreditType.Credit) {\n return pluralFlag ? \"Factures d'avoir\" : \"Facture d'avoir\";\n }\n return undefined;\n }\n}\n","import { PdfDeliveryFormType } from '../enums/pdf-delivery-form-type.enum';\n\nexport class PdfDeliveryFormTypeHelper {\n public static buildPdfMergeNotificationCardMessage(length: number, pdfDocumentType: PdfDeliveryFormType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormWithParams) {\n msg = {\n msgPlural: `PDF de ${length} bons de livraison`,\n msgSingular: `PDF de ${length} bon de livraison`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormWithAmount) {\n msg = {\n msgPlural: `PDF de ${length} bons de livraison avec montants`,\n msgSingular: `PDF de ${length} bon de livraison avec montants`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormWithoutAmount) {\n msg = {\n msgPlural: `PDF de ${length} bons de livraison sans montant`,\n msgSingular: `PDF de ${length} bon de livraison sans montant`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormWithAndWithoutAmount) {\n msg = {\n msgPlural: `PDF de ${length} bons de livraison avec et sans montants`,\n msgSingular: `PDF de ${length} bon de livraison avec et sans montants`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormDMSMAndTraceability) {\n msg = {\n msgPlural: `PDF de ${length} déclarations DMSM et traçabilité`,\n msgSingular: `PDF de ${length} déclaration DMSM et traçabilité`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormLabelTag89x28) {\n msg = {\n msgPlural: `PDF de ${length} étiquettes de livraison`,\n msgSingular: `PDF de ${length} étiquette de livraison`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormLabelTag23x23) {\n msg = {\n msgPlural: `PDF de ${length} étiquettes de livraison`,\n msgSingular: `PDF de ${length} étiquette de livraison`,\n };\n } else {\n msg = {\n msgPlural: `PDF de ${length} bons de livraison`,\n msgSingular: `PDF de ${length} bon de livraison`,\n };\n }\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static buildPdfMergeNotifyMessage(length: number, pdfDocumentType: PdfDeliveryFormType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormWithParams) {\n msg = {\n msgPlural: `PDF multiple de ${length} bons de livraison en cours de génération`,\n msgSingular: `PDF multiple de ${length} bon de livraison en cours de génération`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormWithAmount) {\n msg = {\n msgPlural: `PDF multiple de ${length} bons de livraison avec montants en cours de génération`,\n msgSingular: `PDF multiple de ${length} bon de livraison avec montants en cours de génération`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormWithoutAmount) {\n msg = {\n msgPlural: `PDF multiple de ${length} bons de livraison sans montant en cours de génération`,\n msgSingular: `PDF multiple de ${length} bon de livraison sans montant en cours de génération`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormWithAndWithoutAmount) {\n msg = {\n msgPlural: `PDF multiple de ${length} bons de livraison avec et sans montants en cours de génération`,\n msgSingular: `PDF multiple de ${length} bon de livraison avec et sans montants en cours de génération`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormDMSMAndTraceability) {\n msg = {\n msgPlural: `PDF multiple de ${length} déclarations DMSM et traçabilité`,\n msgSingular: `PDF multiple de ${length} déclaration DMSM et traçabilité`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormLabelTag89x28) {\n msg = {\n msgPlural: `PDF multiple de ${length} étiquettes de livraison en cours de génération`,\n msgSingular: `PDF multiple de ${length} étiquette de livraison en cours de génération`,\n };\n } else if (pdfDocumentType === PdfDeliveryFormType.DeliveryFormLabelTag23x23) {\n msg = {\n msgPlural: `PDF multiple de ${length} étiquettes de livraison en cours de génération`,\n msgSingular: `PDF multiple de ${length} étiquette de livraison en cours de génération`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static translateEnum(enumValue: PdfDeliveryFormType, pluralFlag = false): string {\n if (enumValue === PdfDeliveryFormType.DeliveryFormWithParams) {\n return pluralFlag ? 'Bons de livraison' : 'Bon de livraison';\n } else if (enumValue === PdfDeliveryFormType.DeliveryFormWithAmount) {\n return pluralFlag ? 'Bons de livraison avec montants' : 'Bon de livraison avec montants';\n } else if (enumValue === PdfDeliveryFormType.DeliveryFormWithoutAmount) {\n return pluralFlag ? 'Bons de livraison sans montant' : 'Bon de livraison sans montant';\n } else if (enumValue === PdfDeliveryFormType.DeliveryFormWithAndWithoutAmount) {\n return pluralFlag ? 'Bons de livraison avec et sans montants' : 'Bon de livraison avec et sans montants';\n } else if (enumValue === PdfDeliveryFormType.DeliveryFormDMSMAndTraceability) {\n return pluralFlag ? 'Déclarations DMSM et traçabilité' : 'Déclaration DMSM et traçabilité';\n } else if (enumValue === PdfDeliveryFormType.DeliveryFormLabelTag89x28) {\n return pluralFlag ? 'Etiquettes de livraison (89x28mm)' : 'Etiquette de livraison (89x28mm)';\n } else if (enumValue === PdfDeliveryFormType.DeliveryFormLabelTag23x23) {\n return pluralFlag ? 'Etiquettes de livraison (23x23mm)' : 'Etiquette de livraison (23x23mm)';\n }\n return undefined;\n }\n}\n","import { PdfFittingFormType } from '../enums/pdf-fitting-form-type.enum';\n\nexport class PdfFittingFormTypeHelper {\n public static buildPdfMergeNotificationCardMessage(length: number, pdfDocumentType: PdfFittingFormType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfFittingFormType.FittingForm || pdfDocumentType === PdfFittingFormType.FittingFormWithParams) {\n msg = {\n msgPlural: `PDF de ${length} bons d'essayage`,\n msgSingular: `PDF de ${length} bon d'essayage`,\n };\n } else if (pdfDocumentType === PdfFittingFormType.FittingFormLabelTag89x28) {\n msg = {\n msgPlural: `PDF de ${length} étiquettes d'essayage`,\n msgSingular: `PDF de ${length} étiquette d'essayage`,\n };\n } else if (pdfDocumentType === PdfFittingFormType.FittingFormLabelTag23x23) {\n msg = {\n msgPlural: `PDF de ${length} étiquettes d'essayage`,\n msgSingular: `PDF de ${length} étiquette d'essayage`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static buildPdfMergeNotifyMessage(length: number, pdfDocumentType: PdfFittingFormType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfFittingFormType.FittingFormWithParams) {\n msg = {\n msgPlural: `PDF multiple de ${length} bons d'essayage en cours de génération`,\n msgSingular: `PDF multiple de ${length} bon d'essayage en cours de génération`,\n };\n } else if (pdfDocumentType === PdfFittingFormType.FittingForm) {\n msg = {\n msgPlural: `PDF multiple de ${length} bons d'essayage en cours de génération`,\n msgSingular: `PDF multiple de ${length} bon d'essayage en cours de génération`,\n };\n } else if (pdfDocumentType === PdfFittingFormType.FittingFormLabelTag89x28) {\n msg = {\n msgPlural: `PDF multiple de ${length} étiquettes d'essayage en cours de génération`,\n msgSingular: `PDF multiple de ${length} étiquette d'essayage en cours de génération`,\n };\n } else if (pdfDocumentType === PdfFittingFormType.FittingFormLabelTag23x23) {\n msg = {\n msgPlural: `PDF multiple de ${length} étiquettes d'essayage en cours de génération`,\n msgSingular: `PDF multiple de ${length} étiquette d'essayage en cours de génération`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static translateEnum(enumValue: PdfFittingFormType, pluralFlag = false): string {\n if (enumValue === PdfFittingFormType.FittingFormWithParams) {\n return pluralFlag ? \"Bons d'essayage\" : \"Bon d'essayage\";\n } else if (enumValue === PdfFittingFormType.FittingForm) {\n return pluralFlag ? \"Bons d'essayage\" : \"Bon d'essayage\";\n } else if (enumValue === PdfFittingFormType.FittingFormLabelTag89x28) {\n return pluralFlag ? \"Etiquettes d'essayage (89x28mm)\" : \"Etiquette d'essayage (89x28mm)\";\n } else if (enumValue === PdfFittingFormType.FittingFormLabelTag23x23) {\n return pluralFlag ? \"Etiquettes d'essayage (23x23mm)\" : \"Etiquette d'essayage (23x23mm)\";\n }\n return undefined;\n }\n}\n","import { PdfInvoiceType } from '../enums/pdf-invoice-type.enum';\n\nexport class PdfInvoiceTypeHelper {\n public static buildPdfMergeNotificationCardMessage(length: number, pdfDocumentType: PdfInvoiceType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfInvoiceType.Invoice || pdfDocumentType === PdfInvoiceType.InvoiceOnly) {\n msg = {\n msgPlural: `PDF de ${length} factures`,\n msgSingular: `PDF de ${length} facture`,\n };\n } else if (pdfDocumentType === PdfInvoiceType.InvoiceDeliveryFormStatement) {\n msg = {\n msgPlural: `PDF de ${length} relevés de bons`,\n msgSingular: `PDF de ${length} relevé de bons`,\n };\n } else if (pdfDocumentType === PdfInvoiceType.InvoiceAndInvoiceDeliveryFormStatement) {\n msg = {\n msgPlural: `PDF de ${length} factures définitives avec relevés de bons`,\n msgSingular: `PDF de ${length} facture définitive avec relevé de bons`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static buildPdfMergeNotifyMessage(length: number, pdfDocumentType: PdfInvoiceType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfInvoiceType.Invoice || pdfDocumentType === PdfInvoiceType.InvoiceOnly) {\n msg = {\n msgPlural: `PDF multiple de ${length} factures en cours de génération`,\n msgSingular: `PDF multiple de ${length} facture en cours de génération`,\n };\n } else if (pdfDocumentType === PdfInvoiceType.InvoiceDeliveryFormStatement) {\n msg = {\n msgPlural: `PDF multiple de ${length} relevés de bons en cours de génération`,\n msgSingular: `PDF multiple de ${length} relevé de bons en cours de génération`,\n };\n } else if (pdfDocumentType === PdfInvoiceType.InvoiceAndInvoiceDeliveryFormStatement) {\n msg = {\n msgPlural: `PDF multiple de ${length} factures définitives avec relevés de bons en cours de génération`,\n msgSingular: `PDF multiple de ${length} facture définitive avec relevé de bons en cours de génération`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static translateEnum(enumValue: PdfInvoiceType, pluralFlag = false): string {\n if (enumValue === PdfInvoiceType.Invoice || enumValue === PdfInvoiceType.InvoiceOnly) {\n return pluralFlag ? 'Factures définitives' : 'Facture définitive';\n } else if (enumValue === PdfInvoiceType.InvoiceAndInvoiceDeliveryFormStatement) {\n return pluralFlag ? 'Factures définitives avec relevé de bons' : 'Facture définitive avec relevé de bons';\n } else if (enumValue === PdfInvoiceType.InvoiceDeliveryFormStatement) {\n return pluralFlag ? 'Relevés de bons' : 'Relevé de bons';\n }\n return undefined;\n }\n}\n","import { PdfProFormaType } from '../enums/pdf-pro-forma-type.enum';\n\nexport class PdfProFormaTypeHelper {\n public static buildPdfMergeNotificationCardMessage(length: number, pdfDocumentType: PdfProFormaType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfProFormaType.ProForma) {\n msg = {\n msgPlural: `PDF de ${length} factures pro formas`,\n msgSingular: `PDF de ${length} facture pro forma`,\n };\n } else if (pdfDocumentType === PdfProFormaType.ProFormaDeliveryFormStatement) {\n msg = {\n msgPlural: `PDF de ${length} relevés de bons`,\n msgSingular: `PDF de ${length} relevé de bons`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static buildPdfMergeNotifyMessage(length: number, pdfDocumentType: PdfProFormaType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfProFormaType.ProForma) {\n msg = {\n msgPlural: `PDF multiple de ${length} pro formas en cours de génération`,\n msgSingular: `PDF multiple de ${length} pro forma en cours de génération`,\n };\n } else if (pdfDocumentType === PdfProFormaType.ProFormaDeliveryFormStatement) {\n msg = {\n msgPlural: `PDF multiple de ${length} relevés de bons en cours de génération`,\n msgSingular: `PDF multiple de ${length} relevé de bons en cours de génération`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static translateEnum(enumValue: PdfProFormaType, pluralFlag = false): string {\n if (enumValue === PdfProFormaType.ProForma) {\n return pluralFlag ? 'Factures pro forma' : 'Facture pro forma';\n } else if (enumValue === PdfProFormaType.ProFormaDeliveryFormStatement) {\n return pluralFlag ? 'Relevés de bons' : 'Relevé de bons';\n }\n return undefined;\n }\n}\n","import { PdfQuoteType } from '../enums/pdf-quote-type.enum';\n\nexport class PdfQuoteTypeHelper {\n public static buildPdfMergeNotificationCardMessage(length: number, pdfDocumentType: PdfQuoteType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfQuoteType.Quote) {\n msg = {\n msgPlural: `PDF de ${length} devis`,\n msgSingular: `PDF de ${length} devis`,\n };\n }\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static buildPdfMergeNotifyMessage(length: number, pdfDocumentType: PdfQuoteType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfQuoteType.Quote) {\n msg = {\n msgPlural: `PDF multiple de ${length} devis en cours de génération`,\n msgSingular: `PDF multiple de ${length} devis en cours de génération`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static translateEnum(enumValue: PdfQuoteType, pluralFlag = false): string {\n if (enumValue === PdfQuoteType.Quote) {\n return pluralFlag ? 'Devis' : 'Devis';\n }\n return undefined;\n }\n}\n","import { PdfWorkFormType } from '../enums/pdf-work-form-type.enum';\n\nexport class PdfWorkFormTypeHelper {\n public static buildPdfMergeNotificationCardMessage(length: number, pdfDocumentType: PdfWorkFormType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n\n if (pdfDocumentType === PdfWorkFormType.WorkFormWithParams) {\n msg = {\n msgPlural: `PDF de ${length} bons de travail`,\n msgSingular: `PDF de ${length} bon de travail`,\n };\n } else if (pdfDocumentType === PdfWorkFormType.WorkForm) {\n msg = {\n msgPlural: `PDF de ${length} bons de travail`,\n msgSingular: `PDF de ${length} bon de travail`,\n };\n } else if (pdfDocumentType === PdfWorkFormType.WorkFormLabelTag23x23) {\n msg = {\n msgPlural: `PDF de ${length} étiquettes de travail`,\n msgSingular: `PDF de ${length} étiquette de travail`,\n };\n } else if (pdfDocumentType === PdfWorkFormType.WorkFormLabelTag89x28) {\n msg = {\n msgPlural: `PDF de ${length} étiquettes de travail`,\n msgSingular: `PDF de ${length} étiquette de travail`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static buildPdfMergeNotifyMessage(length: number, pdfDocumentType: PdfWorkFormType): string {\n let msg: { msgPlural: string; msgSingular: string } = { msgPlural: undefined, msgSingular: undefined };\n if (pdfDocumentType === PdfWorkFormType.WorkFormWithParams) {\n msg = {\n msgPlural: `PDF multiple de ${length} bons de travail en cours de génération`,\n msgSingular: `PDF multiple de ${length} bon de travail en cours de génération`,\n };\n } else if (pdfDocumentType === PdfWorkFormType.WorkForm) {\n msg = {\n msgPlural: `PDF multiple de ${length} bons de travail en cours de génération`,\n msgSingular: `PDF multiple de ${length} bon de travail en cours de génération`,\n };\n } else if (pdfDocumentType === PdfWorkFormType.WorkFormLabelTag23x23) {\n msg = {\n msgPlural: `PDF multiple de ${length} étiquettes de travail en cours de génération`,\n msgSingular: `PDF multiple de ${length} étiquette de travail en cours de génération`,\n };\n } else if (pdfDocumentType === PdfWorkFormType.WorkFormLabelTag89x28) {\n msg = {\n msgPlural: `PDF multiple de ${length} étiquettes de travail en cours de génération`,\n msgSingular: `PDF multiple de ${length} étiquette de travail en cours de génération`,\n };\n }\n\n const message = length > 1 ? msg.msgPlural : msg.msgSingular;\n return message;\n }\n\n public static translateEnum(enumValue: PdfWorkFormType, pluralFlag = false): string {\n if (enumValue === PdfWorkFormType.WorkForm) {\n return pluralFlag ? 'Bons de travail' : 'Bon de travail';\n } else if (enumValue === PdfWorkFormType.WorkFormLabelTag23x23) {\n return pluralFlag ? 'Etiquettes de travail (23x23mm)' : 'Etiquette de travail (23x23mm)';\n } else if (enumValue === PdfWorkFormType.WorkFormLabelTag89x28) {\n return pluralFlag ? 'Etiquettes de travail (89x28mm)' : 'Etiquette de travail (89x28mm)';\n }\n return undefined;\n }\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { PeriodSearchCreditDateType } from '../enums/period-search-credit-date-type.enum';\n\nexport class PeriodSearchCreditDateTypeHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(PeriodSearchCreditDateType.CreditDate));\n options.push(this.convertToComboModel(PeriodSearchCreditDateType.DeliveryDate));\n options.push(this.convertToComboModel(PeriodSearchCreditDateType.InvoiceDate));\n return options;\n }\n\n public static convertToComboModel(enumValue: PeriodSearchCreditDateType): ComboModel {\n if (Object.values(PeriodSearchCreditDateType).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): PeriodSearchCreditDateType {\n if (comboModel) {\n if (comboModel.key === PeriodSearchCreditDateType.CreditDate.valueOf().toString()) {\n return PeriodSearchCreditDateType.CreditDate;\n } else if (comboModel.key === PeriodSearchCreditDateType.DeliveryDate.valueOf().toString()) {\n return PeriodSearchCreditDateType.DeliveryDate;\n } else if (comboModel.key === PeriodSearchCreditDateType.InvoiceDate.valueOf().toString()) {\n return PeriodSearchCreditDateType.InvoiceDate;\n }\n }\n\n return undefined;\n }\n\n public static translateEnum(enumValue: PeriodSearchCreditDateType): string {\n if (enumValue === PeriodSearchCreditDateType.CreditDate) {\n return \"Dates d'avoir\";\n } else if (enumValue === PeriodSearchCreditDateType.DeliveryDate) {\n return 'Dates de livraison';\n } else if (enumValue === PeriodSearchCreditDateType.InvoiceDate) {\n return 'Dates des factures associées';\n }\n\n return undefined;\n }\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { PeriodSearchDeliveryFormDateType } from '../enums/period-search-delivery-form-date-type.enum';\n\nexport class PeriodSearchDeliveryFormDateTypeHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(PeriodSearchDeliveryFormDateType.DeliveryDate));\n options.push(this.convertToComboModel(PeriodSearchDeliveryFormDateType.InvoiceDate));\n return options;\n }\n\n public static convertToComboModel(enumValue: PeriodSearchDeliveryFormDateType): ComboModel {\n if (Object.values(PeriodSearchDeliveryFormDateType).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): PeriodSearchDeliveryFormDateType {\n if (comboModel) {\n if (comboModel.key === PeriodSearchDeliveryFormDateType.DeliveryDate.valueOf().toString()) {\n return PeriodSearchDeliveryFormDateType.DeliveryDate;\n } else if (comboModel.key === PeriodSearchDeliveryFormDateType.InvoiceDate.valueOf().toString()) {\n return PeriodSearchDeliveryFormDateType.InvoiceDate;\n }\n }\n\n return undefined;\n }\n\n public static translateEnum(enumValue: PeriodSearchDeliveryFormDateType): string {\n if (enumValue === PeriodSearchDeliveryFormDateType.DeliveryDate) {\n return 'Dates de livraison';\n } else if (enumValue === PeriodSearchDeliveryFormDateType.InvoiceDate) {\n return 'Dates de facturation';\n }\n\n return undefined;\n }\n}\n","import { ComboModel } from 'app/shared/components/combo/combo-model';\nimport { PeriodSearchInvoiceDateType } from '../enums/period-search-invoice-date-type.enum';\n\nexport class PeriodSearchInvoiceDateTypeHelper {\n public static buildOptions(): ComboModel[] {\n const options = new Array();\n options.push(this.convertToComboModel(PeriodSearchInvoiceDateType.InvoiceDate));\n options.push(this.convertToComboModel(PeriodSearchInvoiceDateType.DeliveryDate));\n return options;\n }\n\n public static convertToComboModel(enumValue: PeriodSearchInvoiceDateType): ComboModel {\n if (Object.values(PeriodSearchInvoiceDateType).includes(enumValue)) {\n const comboModel = new ComboModel();\n comboModel.key = enumValue.valueOf().toString();\n comboModel.label = this.translateEnum(enumValue);\n return comboModel;\n } else {\n return null;\n }\n }\n\n public static convertToEnum(comboModel: ComboModel): PeriodSearchInvoiceDateType {\n if (comboModel) {\n if (comboModel.key === PeriodSearchInvoiceDateType.InvoiceDate.valueOf().toString()) {\n return PeriodSearchInvoiceDateType.InvoiceDate;\n } else if (comboModel.key === PeriodSearchInvoiceDateType.DeliveryDate.valueOf().toString()) {\n return PeriodSearchInvoiceDateType.DeliveryDate;\n }\n }\n\n return undefined;\n }\n\n public static translateEnum(enumValue: PeriodSearchInvoiceDateType): string {\n if (enumValue === PeriodSearchInvoiceDateType.InvoiceDate) {\n return 'Dates de facturation';\n } else if (enumValue === PeriodSearchInvoiceDateType.DeliveryDate) {\n return 'Dates de livraison';\n }\n\n return undefined;\n }\n}\n","import { SpreadsheetDashboardType } from '../enums/spreadsheet-dashboard-type.enum';\n\nexport class SpreadsheetDashboardTypeHelper {\n public static translateEnum(enumValue: SpreadsheetDashboardType): string {\n if (enumValue === SpreadsheetDashboardType.InvoicesByYear) {\n return 'Comparatif annuel (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByCustomerAmount) {\n return 'Statistiques clients (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByCustomerPercentage) {\n return 'Statistiques clients (%)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByItemAmount) {\n return 'Statistiques articles (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByItemPercentage) {\n return 'Statistiques articles (%)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByItemQuantity) {\n return 'Statistiques articles (quantités)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByFamilyAmount) {\n return 'Statistiques familles (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByFamilyPercentage) {\n return 'Statistiques familles (%)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByFamilyQuantity) {\n return 'Statistiques familles (quantités)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByCustomerDiscountAmount) {\n return 'Remises sur facture par client (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByCustomerDeliveryFormDiscountAmount) {\n return 'Remises sur bon par client (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByFamilyDeliveryFormDiscountAmount) {\n return 'Remises sur bon par famille (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByFamilyDeliveryFormDiscountQuantity) {\n return 'Remises sur bon par famille (quantités)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByItemDeliveryFormDiscountAmount) {\n return 'Remises sur bon par article (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.InvoicesByItemDeliveryFormDiscountQuantity) {\n return 'Remises sur bon par article (quantités)';\n } else if (enumValue === SpreadsheetDashboardType.ActivityByLaboratoryResourceAmountByMonth) {\n return 'Statistiques ressources (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.ActivityByLaboratoryResourceAmountByYear) {\n return 'Statistiques ressources (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.ActivityByLaboratoryResourceDurationByMonth) {\n return 'Statistiques ressources (temps)';\n } else if (enumValue === SpreadsheetDashboardType.ActivityByLaboratoryResourceDurationByYear) {\n return 'Statistiques ressources (temps)';\n } else if (enumValue === SpreadsheetDashboardType.ActivityBySectorAmountByMonth) {\n return 'Statistiques secteurs (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.ActivityBySectorAmountByYear) {\n return 'Statistiques secteurs (€ HT)';\n } else if (enumValue === SpreadsheetDashboardType.ActivityBySectorDurationByMonth) {\n return 'Statistiques secteurs (temps)';\n } else if (enumValue === SpreadsheetDashboardType.ActivityBySectorDurationByYear) {\n return 'Statistiques secteurs (temps)';\n } else if (enumValue === SpreadsheetDashboardType.ActivityByItemQuantityByLaboratoryResource) {\n return 'Synthèse ressources - articles (quantités)';\n } else {\n return undefined;\n }\n }\n}\n","import { DeliveryFormFilter as LA_DeliveryFormFilter } from 'app/shared/prothesis-api-filters/delivery-form-filter';\nimport { DeliveryFormFilter as CA_DeliveryFormFilter } from 'app/shared/prothesis-customer-api-filters/delivery-form-filter';\nimport { SpreadsheetExportType } from '../enums/spreadsheet-export-type.enum';\n\nexport class SpreadsheetExportTypeHelper {\n public static translateEnum(enumValue: SpreadsheetExportType, filter: LA_DeliveryFormFilter | CA_DeliveryFormFilter): string {\n if (enumValue === SpreadsheetExportType.DeliveryForm) {\n if (filter) {\n if (filter.invoicedFlag) {\n return 'Bons facturés';\n }\n if (filter.proFormaFlag) {\n return 'Bons sur pro forma';\n }\n }\n\n return 'Bons de livraison';\n } else if (enumValue === SpreadsheetExportType.DeliveryFormItem) {\n if (filter) {\n if (filter.invoicedFlag) {\n return 'Articles des bons facturés';\n }\n if (filter.proFormaFlag) {\n return 'Articles des bons sur pro forma';\n }\n }\n\n return 'Articles des bons de livraison';\n } else if (enumValue === SpreadsheetExportType.DeliveryFormItemLaboratoryTask) {\n if (filter) {\n if (filter.invoicedFlag) {\n return 'Tâches des bons facturés';\n }\n if (filter.proFormaFlag) {\n return 'Tâches des bons sur pro forma';\n }\n }\n\n return 'Tâches des bons de livraison';\n } else if (enumValue === SpreadsheetExportType.DeliveryFormItemRawMaterial) {\n if (filter) {\n if (filter.invoicedFlag) {\n return 'Matières des bons facturés';\n }\n if (filter.proFormaFlag) {\n return 'Matières des bons sur pro forma';\n }\n }\n\n return 'Matières des bons de livraison';\n } else if (enumValue === SpreadsheetExportType.FittingForm) {\n return \"Bons d'essayage\";\n } else if (enumValue === SpreadsheetExportType.FittingFormItem) {\n return \"Articles des bons d'essayage\";\n } else if (enumValue === SpreadsheetExportType.FittingFormItemLaboratoryTask) {\n return \"Tâches des bons d'essayage\";\n } else if (enumValue === SpreadsheetExportType.FittingFormItemRawMaterial) {\n return \"Matières des bons d'essayage\";\n } else if (enumValue === SpreadsheetExportType.Quote) {\n return 'Devis';\n } else if (enumValue === SpreadsheetExportType.QuoteItem) {\n return 'Articles des devis';\n } else if (enumValue === SpreadsheetExportType.QuoteItemLaboratoryTask) {\n return 'Tâches des devis';\n } else if (enumValue === SpreadsheetExportType.WorkForm) {\n return 'Bons de travail';\n } else if (enumValue === SpreadsheetExportType.WorkFormItem) {\n return 'Articles des bons de travail';\n } else if (enumValue === SpreadsheetExportType.WorkFormItemLaboratoryTask) {\n return 'Tâches des bons de travail';\n } else if (enumValue === SpreadsheetExportType.WorkFormItemRawMaterial) {\n return 'Matières des bons de travail';\n } else if (enumValue === SpreadsheetExportType.Customer) {\n return 'Clients';\n } else if (enumValue === SpreadsheetExportType.CustomerContact) {\n return 'Contacts des clients';\n } else if (enumValue === SpreadsheetExportType.CustomerUserCustomer) {\n return \"Utilisateurs d'espaces clients\";\n } else if (enumValue === SpreadsheetExportType.Manufacturer) {\n return 'Fabricants';\n } else if (enumValue === SpreadsheetExportType.ManufacturerContact) {\n return 'Contacts des fabricants';\n } else if (enumValue === SpreadsheetExportType.Item) {\n return 'Articles';\n } else if (enumValue === SpreadsheetExportType.ItemLaboratoryTaskTemplate) {\n return 'Tâches programmées des articles';\n } else if (enumValue === SpreadsheetExportType.ItemRate) {\n return 'Tarifs des articles';\n } else if (enumValue === SpreadsheetExportType.ItemRateComparison) {\n return 'Comparatif tarifs';\n } else if (enumValue === SpreadsheetExportType.ItemRawMaterial) {\n return 'Matières des articles';\n } else if (enumValue === SpreadsheetExportType.RawMaterial) {\n return 'Matières';\n } else if (enumValue === SpreadsheetExportType.RawMaterialBatchNumber) {\n return 'Numéros de lot des matières';\n } else if (enumValue === SpreadsheetExportType.Shade) {\n return 'Teintes';\n } else if (enumValue === SpreadsheetExportType.ShadeRawMaterial) {\n return 'Matières des teintes';\n } else if (enumValue === SpreadsheetExportType.ProForma) {\n return 'Factures pro forma';\n } else if (enumValue === SpreadsheetExportType.ProFormaDeliveryForm) {\n return 'Bons sur pro forma';\n } else if (enumValue === SpreadsheetExportType.ProFormaDeliveryFormItem) {\n return 'Articles des bons sur pro forma';\n } else if (enumValue === SpreadsheetExportType.ProFormaDeliveryFormItemRawMaterial) {\n return 'Matières des bons sur pro forma';\n } else if (enumValue === SpreadsheetExportType.Invoice) {\n return 'Factures définitives';\n } else if (enumValue === SpreadsheetExportType.InvoiceDeliveryForm) {\n return 'Bons facturés';\n } else if (enumValue === SpreadsheetExportType.InvoiceDeliveryFormItem) {\n return 'Articles des bons facturés';\n } else if (enumValue === SpreadsheetExportType.InvoiceDeliveryFormItemRawMaterial) {\n return 'Matières des bons facturés';\n } else if (enumValue === SpreadsheetExportType.InvoiceFreeLine) {\n return \"Lignes d'annulations d'avoirs\";\n } else if (enumValue === SpreadsheetExportType.InvoiceUnpaidReminder) {\n return 'Factures à relancer';\n } else if (enumValue === SpreadsheetExportType.InvoiceUnpaidReminderMailing) {\n return 'Publipostage des relances';\n } else if (enumValue === SpreadsheetExportType.Credit) {\n return \"Factures d'avoir\";\n } else if (enumValue === SpreadsheetExportType.CreditDeliveryForm) {\n return 'Bons sur avoir intégral';\n } else if (enumValue === SpreadsheetExportType.CreditDeliveryFormItem) {\n return 'Articles des bons sur avoir intégral';\n } else if (enumValue === SpreadsheetExportType.CreditDeliveryFormItemRawMaterial) {\n return 'Matières des bons sur avoir intégral';\n } else if (enumValue === SpreadsheetExportType.CreditFreeLine) {\n return \"Lignes d'avoirs libres\";\n } else if (enumValue === SpreadsheetExportType.ItemFamily) {\n return 'Familles';\n } else if (enumValue === SpreadsheetExportType.RawMaterialCategory) {\n return 'Catégories';\n } else if (enumValue === SpreadsheetExportType.ShadeGuide) {\n return 'Teintiers';\n } else if (enumValue === SpreadsheetExportType.Rate) {\n return 'Tarifs';\n } else if (enumValue === SpreadsheetExportType.MiscellaneousOperation) {\n return 'Opérations diverses';\n } else if (enumValue === SpreadsheetExportType.Payment) {\n return 'Règlements';\n } else if (enumValue === SpreadsheetExportType.FiscalYear) {\n return 'Exercices comptables';\n } else if (enumValue === SpreadsheetExportType.LaboratoryInformation) {\n return 'Paramètres du laboratoire';\n } else if (enumValue === SpreadsheetExportType.LaboratoryInformationBank) {\n return 'Banques du laboratoire';\n } else if (enumValue === SpreadsheetExportType.LaboratoryInformationContact) {\n return 'Contacts du laboratoire';\n } else if (enumValue === SpreadsheetExportType.LaboratoryInformationDeliveryRoute) {\n return 'Tournées du laboratoire';\n } else if (enumValue === SpreadsheetExportType.LaboratoryRole) {\n return 'Rôles';\n } else if (enumValue === SpreadsheetExportType.LaboratoryUserCustomerSetting) {\n return 'Paramètres des espaces clients';\n } else if (enumValue === SpreadsheetExportType.LaboratoryTax) {\n return 'Paramètre des taxes';\n } else if (enumValue === SpreadsheetExportType.LaboratoryTaskNameSuggestion) {\n return 'Désignation des tâches du laboratoire';\n } else if (enumValue === SpreadsheetExportType.All) {\n return 'Intégralité des données du laboratoire';\n } else if (enumValue === SpreadsheetExportType.SimpleDetailedDeliveryForm) {\n if (filter) {\n if (filter.invoicedFlag) {\n return 'bons facturés';\n }\n if (filter.proFormaFlag) {\n return 'bons sur pro forma';\n }\n }\n\n return 'bons de livraison';\n } else if (enumValue === SpreadsheetExportType.SimpleDetailedFittingForm) {\n return \"bons d'essayage\";\n } else if (enumValue === SpreadsheetExportType.SimpleDetailedQuote) {\n return 'devis';\n } else if (enumValue === SpreadsheetExportType.SimpleDetailedWorkForm) {\n return 'bons de travail';\n } else if (enumValue === SpreadsheetExportType.SimpleDeliveryForm) {\n if (filter) {\n if (filter.invoicedFlag) {\n return 'bons facturés';\n }\n if (filter.proFormaFlag) {\n return 'bons sur pro forma';\n }\n }\n\n return 'bons de livraison';\n } else if (enumValue === SpreadsheetExportType.SimpleFittingForm) {\n return \"bons d'essayage\";\n } else if (enumValue === SpreadsheetExportType.SimpleQuote) {\n return 'devis';\n } else if (enumValue === SpreadsheetExportType.SimpleWorkForm) {\n return 'bons de travail';\n } else if (enumValue === SpreadsheetExportType.Sector) {\n return 'Secteurs';\n } else if (enumValue === SpreadsheetExportType.LaboratoryResource) {\n return 'Ressources';\n } else if (enumValue === SpreadsheetExportType.LaboratoryResourceContact) {\n return 'Contacts des ressources';\n } else if (enumValue === SpreadsheetExportType.UserLaboratory) {\n return 'Utilisateurs du laboratoire';\n }\n\n return undefined;\n }\n}\n","/**\n * Indicate the Period Search Type.\n */\nexport enum PeriodSearchType {\n Year = 0,\n Month = 1,\n Week = 2,\n Day = 3,\n}\n","/**\n * Indicate the Period Search Type.\n */\nexport enum PeriodSearchType {\n Year = 0,\n Month = 1,\n Week = 2,\n Day = 3,\n FiscalYear = 4,\n}\n","/**\n * Indicates the Customer Title.\n */\nexport enum Area {\n Laboratory = 0,\n Admin = 1,\n Customer = 2,\n NoArea = 3,\n}\n","export enum ContactTitle {\n Doctor = 0,\n Mr = 1,\n Mrs = 2,\n None = 3,\n Professor = 4,\n}\n","export enum CustomerTitle {\n Doctor = 0,\n Mr = 1,\n Mrs = 2,\n Professor = 3,\n None = 4,\n Laboratory = 5,\n Company = 6,\n DentalPractice = 7,\n DentalCenter = 8,\n}\n","/**\n * Indicates the Customer's UserCustomer status.\n */\nexport enum CustomerUserCustomerStatus {\n WithActiveUserCustomer = 0,\n WithWaitingUserCustomer = 1,\n WithoutActiveUserCustomer = 2,\n WithoutUserCustomer = 3,\n}\n","export enum DocumentStatus {\n Canceled = 0,\n Done = 1,\n InProgress = 2,\n}\n","export enum DocumentType {\n DeliveryForm = 0,\n FittingForm = 1,\n Quote = 2,\n WorkForm = 3,\n}\n","export enum FileAssetType {\n Unknown = 0,\n Archive = 1,\n MedicalImaging = 2,\n Model3D = 3,\n Pdf = 4,\n Photos = 5,\n}\n","export enum HighlightType {\n String = 0,\n Decimal = 1,\n PhoneNumber = 2,\n}\n","export enum JournalFileType {\n Fec = 0,\n Pdf = 2,\n Spreadsheet = 3,\n}\n","export enum JournalType {\n Cash = 0,\n MiscellaneousOperations = 1,\n Sales = 2,\n All = 3,\n Taxes = 4,\n AccountStatement = 5,\n}\n","export enum NotificationStatus {\n Pending = 0,\n Succeed = 1,\n Failed = 2,\n NothingToDo = 3,\n}\n","export enum PdfCreditType {\n Credit = 0,\n}\n","export enum PdfCustomerRateType {\n TaxIncluded = 0,\n TaxNotIncluded = 1,\n}\n","export enum PdfDeliveryFormType {\n DeliveryFormWithParams = 0,\n DeliveryFormWithAmount = 1,\n DeliveryFormWithoutAmount = 2,\n DeliveryFormWithAndWithoutAmount = 3,\n DeliveryFormDMSMAndTraceability = 4,\n DeliveryFormLabelTag89x28 = 5,\n DeliveryFormLabelTag23x23 = 6,\n}\n","export enum PdfFittingFormType {\n FittingFormWithParams = 0,\n FittingForm = 1,\n FittingFormLabelTag89x28 = 2,\n FittingFormLabelTag23x23 = 3,\n}\n","export enum PdfInvoiceType {\n Invoice = 0,\n InvoiceDeliveryFormStatement = 1,\n InvoiceAndInvoiceDeliveryFormStatement = 2,\n InvoiceOnly = 3,\n}\n","export enum PdfMergeType {\n credit = 0,\n deliveryForm = 1,\n fittingForm = 2,\n invoice = 3,\n proForma = 4,\n quote = 5,\n workForm = 6,\n}\n","export enum PdfProFormaType {\n ProForma = 0,\n ProFormaDeliveryFormStatement = 1,\n}\n","export enum PdfQuoteType {\n Quote = 0,\n}\n","export enum PdfWorkFormType {\n WorkForm = 0,\n WorkFormWithParams = 1,\n WorkFormLabelTag89x28 = 2,\n WorkFormLabelTag23x23 = 3,\n}\n","/**\n * Indicate the Credit Date Period Search Type.\n */\nexport enum PeriodSearchCreditDateType {\n CreditDate = 0,\n InvoiceDate = 1,\n DeliveryDate = 2,\n}\n","/**\n * Indicate the DeliveryForm Date Period Search Type.\n */\nexport enum PeriodSearchDeliveryFormDateType {\n DeliveryDate = 0,\n InvoiceDate = 1,\n}\n","/**\n * Indicate the file asset Date Period Search Type.\n */\nexport enum PeriodSearchFileAssetDateType {\n AssetUploadedDate = 0,\n PrescriptionDate = 1,\n}\n","/**\n * Indicate the Invoice Date Period Search Type.\n */\nexport enum PeriodSearchInvoiceDateType {\n InvoiceDate = 0,\n DeliveryDate = 1,\n}\n","export enum ProductType {\n Regular = 0,\n Discovery = 1,\n Free = 2,\n}\n","export enum PublishStatus {\n NotPublished = 0,\n Published = 1,\n UnPublished = 2,\n}\n","export enum SpreadsheetDashboardType {\n InvoicesByCustomerAmount = 0,\n InvoicesByCustomerPercentage = 1,\n InvoicesByFamilyAmount = 2,\n InvoicesByFamilyPercentage = 3,\n InvoicesByFamilyQuantity = 4,\n InvoicesByItemAmount = 5,\n InvoicesByItemPercentage = 6,\n InvoicesByItemQuantity = 7,\n InvoicesByYear = 8,\n InvoicesByCustomerDiscountAmount = 9,\n InvoicesByCustomerDeliveryFormDiscountAmount = 10,\n InvoicesByFamilyDeliveryFormDiscountAmount = 11,\n InvoicesByFamilyDeliveryFormDiscountQuantity = 12,\n InvoicesByItemDeliveryFormDiscountAmount = 13,\n InvoicesByItemDeliveryFormDiscountQuantity = 14,\n ActivityByLaboratoryResourceAmountByMonth = 15,\n ActivityByLaboratoryResourceAmountByYear = 16,\n ActivityByLaboratoryResourceDurationByMonth = 17,\n ActivityByLaboratoryResourceDurationByYear = 18,\n ActivityBySectorAmountByMonth = 19,\n ActivityBySectorAmountByYear = 20,\n ActivityBySectorDurationByMonth = 21,\n ActivityBySectorDurationByYear = 22,\n ActivityByItemQuantityByLaboratoryResource = 23,\n}\n","export enum SpreadsheetExportFileType {\n Xlsx = 0,\n Pdf = 1,\n}\n","export enum SpreadsheetExportType {\n DeliveryForm = 0,\n DeliveryFormItem = 1,\n DeliveryFormItemRawMaterial = 2,\n FittingForm = 3,\n FittingFormItem = 4,\n FittingFormItemRawMaterial = 5,\n Quote = 6,\n QuoteItem = 7,\n Customer = 8,\n CustomerContact = 9,\n CustomerUserCustomer = 10,\n Manufacturer = 11,\n ManufacturerContact = 12,\n Item = 13,\n ItemRate = 14,\n ItemRawMaterial = 15,\n RawMaterial = 16,\n RawMaterialBatchNumber = 17,\n Shade = 18,\n ShadeRawMaterial = 19,\n ProForma = 20,\n ProFormaDeliveryForm = 21,\n ProFormaDeliveryFormItem = 22,\n ProFormaDeliveryFormItemRawMaterial = 23,\n Invoice = 24,\n InvoiceDeliveryForm = 25,\n InvoiceDeliveryFormItem = 26,\n InvoiceDeliveryFormItemRawMaterial = 27,\n Credit = 28,\n CreditDeliveryForm = 29,\n CreditDeliveryFormItem = 30,\n CreditDeliveryFormItemRawMaterial = 31,\n ItemFamily = 32,\n RawMaterialCategory = 33,\n ShadeGuide = 34,\n Rate = 35,\n MiscellaneousOperation = 36,\n Payment = 37,\n FiscalYear = 38,\n LaboratoryInformation = 39,\n LaboratoryInformationBank = 40,\n LaboratoryInformationContact = 41,\n All = 42,\n InvoiceUnpaidReminder = 43,\n InvoiceUnpaidReminderMailing = 44,\n CreditFreeLine = 45,\n InvoiceFreeLine = 46,\n LaboratoryUserCustomerSetting = 47,\n LaboratoryTax = 48,\n LaboratoryInformationDeliveryRoute = 49,\n WorkForm = 50,\n WorkFormItem = 51,\n WorkFormItemRawMaterial = 52,\n SimpleDeliveryForm = 53,\n SimpleFittingForm = 54,\n SimpleQuote = 55,\n SimpleWorkForm = 56,\n ItemRateComparison = 57,\n Sector = 58,\n LaboratoryResource = 59,\n LaboratoryResourceContact = 60,\n LaboratoryTaskNameSuggestion = 61,\n ItemLaboratoryTaskTemplate = 62,\n DeliveryFormItemLaboratoryTask = 63,\n FittingFormItemLaboratoryTask = 64,\n QuoteItemLaboratoryTask = 65,\n WorkFormItemLaboratoryTask = 66,\n SimpleDetailedDeliveryForm = 67,\n SimpleDetailedFittingForm = 68,\n SimpleDetailedQuote = 69,\n SimpleDetailedWorkForm = 70,\n InvoiceDeliveryFormItemLaboratoryTask = 71,\n ProFormaDeliveryFormItemLaboratoryTask = 72,\n LaboratoryRole = 73,\n UserLaboratory = 74,\n}\n","import { ViewModelBase } from '../prothesis-base-api-view-models/view-model-base';\nimport { ReadSpreadsheetExportNotificationDetailViewModel } from './read-spreadsheet-export-notification-detail.view-model';\n\nexport class AddSpreadsheetExportNotificationViewModel extends ViewModelBase {\n public spreadsheetExportNotificationDetails: ReadSpreadsheetExportNotificationDetailViewModel[];\n}\n","import { SpreadsheetExportFileType } from '../enums/spreadsheet-export-file-type.enum';\nimport { SpreadsheetExportType } from '../enums/spreadsheet-export-type.enum';\nimport { AddSpreadsheetExportNotificationViewModel } from '../prothesis-api-view-models/add-spreadsheet-export-notification.view-model';\nimport { ReadSpreadsheetExportNotificationDetailViewModel } from '../prothesis-api-view-models/read-spreadsheet-export-notification-detail.view-model';\nimport { ReadSpreadsheetExportNotificationDetailViewModelHelper } from './read-spreadsheet-export-notification-detail.view-model-helper';\n\nexport class AddSpreadsheetExportNotificationViewModelHelper {\n public static fromParams(\n filter: string,\n sortActive: string,\n sortDirection: string,\n spreadsheetExportFileType: SpreadsheetExportFileType,\n spreadsheetExportType: SpreadsheetExportType\n ): AddSpreadsheetExportNotificationViewModel {\n const readSpreadsheetExportViewModel = ReadSpreadsheetExportNotificationDetailViewModelHelper.fromParams(\n filter,\n sortActive,\n sortDirection,\n spreadsheetExportFileType,\n spreadsheetExportType\n );\n return AddSpreadsheetExportNotificationViewModelHelper.fromReadSpreadsheetExportViewModel(readSpreadsheetExportViewModel);\n }\n\n public static fromReadSpreadsheetExportViewModel(\n readSpreadsheetExportNotificationDetailViewModel: ReadSpreadsheetExportNotificationDetailViewModel\n ): AddSpreadsheetExportNotificationViewModel {\n const addSpreadsheetExportNotificationViewModel = new AddSpreadsheetExportNotificationViewModel();\n addSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails =\n new Array();\n addSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.push(readSpreadsheetExportNotificationDetailViewModel);\n return addSpreadsheetExportNotificationViewModel;\n }\n\n public static fromReadSpreadsheetExportViewModels(\n readSpreadsheetExportNotificationDetailViewModels: Array\n ): AddSpreadsheetExportNotificationViewModel {\n const addNotificationViewModel = new AddSpreadsheetExportNotificationViewModel();\n addNotificationViewModel.spreadsheetExportNotificationDetails = readSpreadsheetExportNotificationDetailViewModels;\n return addNotificationViewModel;\n }\n\n public static fromSpreadsheetExportTypes(\n strFilter: string,\n sortActive: string,\n sortDirection: string,\n spreadsheetExportTypes: Array\n ): AddSpreadsheetExportNotificationViewModel {\n const addNotificationViewModel = new AddSpreadsheetExportNotificationViewModel();\n addNotificationViewModel.spreadsheetExportNotificationDetails = new Array();\n spreadsheetExportTypes.forEach((spreadsheetExportType: SpreadsheetExportType) => {\n addNotificationViewModel.spreadsheetExportNotificationDetails.push(\n ReadSpreadsheetExportNotificationDetailViewModelHelper.fromParams(\n strFilter,\n sortActive,\n sortDirection,\n SpreadsheetExportFileType.Xlsx,\n spreadsheetExportType\n )\n );\n });\n\n return addNotificationViewModel;\n }\n}\n","// This file should be in sync with @fuse/scss/partials/plugins/_breakpoints.scss.\nexport class BreakpointHelper {\n public static readonly LgUpperBoundExcluded = 1920;\n public static readonly LgUpperBoundIncluded = 1919;\n public static readonly MdUpperBoundExcluded = 1280;\n public static readonly MdUpperBoundIncluded = 1279;\n public static readonly SmUpperBoundExcluded = 960;\n public static readonly SmUpperBoundIncluded = 959;\n public static readonly XlUpperBoundIncluded = 5000;\n public static readonly XsUpperBoundExcluded = 600;\n public static readonly XsUpperBoundIncluded = 599;\n\n public static greaterThanLg(): boolean {\n return window.innerWidth >= BreakpointHelper.LgUpperBoundExcluded;\n }\n\n public static greaterThanMd(): boolean {\n return window.innerWidth >= BreakpointHelper.MdUpperBoundExcluded;\n }\n\n public static greaterThanSm(): boolean {\n return window.innerWidth >= BreakpointHelper.SmUpperBoundExcluded;\n }\n\n public static greaterThanXs(): boolean {\n return window.innerWidth >= BreakpointHelper.XsUpperBoundExcluded;\n }\n\n public static isLg(): boolean {\n return window.innerWidth >= BreakpointHelper.MdUpperBoundExcluded && window.innerWidth <= BreakpointHelper.LgUpperBoundIncluded;\n }\n\n public static isMd(): boolean {\n return window.innerWidth >= BreakpointHelper.SmUpperBoundExcluded && window.innerWidth <= BreakpointHelper.MdUpperBoundIncluded;\n }\n\n public static isSm(): boolean {\n return window.innerWidth >= BreakpointHelper.XsUpperBoundExcluded && window.innerWidth <= BreakpointHelper.SmUpperBoundIncluded;\n }\n\n public static isXl(): boolean {\n return window.innerWidth >= BreakpointHelper.LgUpperBoundExcluded && window.innerWidth <= BreakpointHelper.XlUpperBoundIncluded;\n }\n\n public static isXs(): boolean {\n return window.innerWidth <= BreakpointHelper.XsUpperBoundIncluded;\n }\n\n public static lessThanLg(): boolean {\n return window.innerWidth <= BreakpointHelper.MdUpperBoundIncluded;\n }\n\n public static lessThanMd(): boolean {\n return window.innerWidth <= BreakpointHelper.SmUpperBoundIncluded;\n }\n\n public static lessThanSm(): boolean {\n return window.innerWidth <= BreakpointHelper.XsUpperBoundIncluded;\n }\n\n public static lessThanXl(): boolean {\n return window.innerWidth <= BreakpointHelper.LgUpperBoundIncluded;\n }\n}\n","export class ConvertHelper {\n public static toBoolean(str: string): boolean {\n if (str === undefined) {\n return undefined;\n }\n\n if (str) {\n return str.toLowerCase() === 'true';\n }\n\n return false;\n }\n\n public static toNumber(str: string): number {\n if (str === undefined) {\n return undefined;\n }\n\n if (str && !isNaN(Number(str))) {\n return Number(str);\n }\n\n return null;\n }\n}\n","import { HttpResponse } from '@angular/common/http';\n\nexport class FileHelper {\n public static getBlobAndFilename(res: HttpResponse): { blob: Blob; filename: string } {\n const headers = res.headers;\n const blob = res.body;\n const contentDisposition = headers.get('Content-Disposition');\n let filename: string;\n contentDisposition.split(';').forEach((x) => {\n const entry = x.trim();\n if (entry.startsWith('filename')) {\n filename = entry.split('=')[1];\n filename = filename.replace(/[\"]+/g, '');\n filename = decodeURI(filename);\n }\n });\n return { blob, filename };\n }\n\n public static getBlobAndFilenameAndFiletype(res: HttpResponse): { blob: Blob; filename: string; filetype: string } {\n const headers = res.headers;\n const blob = res.body;\n const contentDisposition = headers.get('Content-Disposition');\n let filename: string;\n contentDisposition.split(';').forEach((x) => {\n const entry = x.trim();\n if (entry.startsWith('filename')) {\n filename = entry.split('=')[1];\n filename = filename.replace(/[\"]+/g, '');\n filename = decodeURI(filename);\n }\n });\n\n const contentType = headers.get('Content-Type');\n const filetype: string = contentType.split(';')[0];\n\n return { blob, filename, filetype };\n }\n\n public static getExtension(filename: string) {\n return filename?.indexOf('.') > 0 ? filename?.split('.')?.pop() : '';\n }\n}\n","export class HtmlHelper {\n private static _AmpRegExp = new RegExp('&', 'g');\n private static _doubleQuoteRegexp = new RegExp('\"', 'g');\n private static _gtRegExp = new RegExp('>', 'g');\n private static _ltRegExp = new RegExp('<', 'g');\n private static _simpleQuoteRegexp = new RegExp(`'`, 'g');\n\n public static escape(unsafe: string): string {\n // null, undefined, ''\n if (!unsafe) {\n return unsafe;\n }\n\n return unsafe\n .replace(HtmlHelper._AmpRegExp, '&')\n .replace(HtmlHelper._doubleQuoteRegexp, '"')\n .replace(HtmlHelper._gtRegExp, '>')\n .replace(HtmlHelper._ltRegExp, '<')\n .replace(HtmlHelper._simpleQuoteRegexp, ''');\n }\n}\n","export class NumberHelper {\n public static int32MaxValue = 2147483647;\n public static int32MinValue = -2147483647;\n\n public static calcHumanReadableFileSize(bytes: number): string {\n if (!bytes && bytes !== 0) {\n return '';\n }\n\n // bytes\n if (bytes < 1024) {\n return `${NumberHelper.round(bytes)} octets`;\n }\n\n // kilobytes\n const kbytes = bytes / 1024;\n if (NumberHelper.round(kbytes) < 1024) {\n return `${NumberHelper.round(kbytes)} Ko`;\n }\n\n // megabytes\n const mbytes = kbytes / 1024;\n if (NumberHelper.round(mbytes) < 1024) {\n return `${NumberHelper.round(mbytes)} Mo`;\n }\n\n // gigabytes\n const gbytes = mbytes / 1024;\n if (NumberHelper.round(gbytes) < 1024) {\n return `${NumberHelper.round(gbytes)} Go`;\n }\n\n // terabytes\n const tbytes = gbytes / 1024;\n return `${NumberHelper.round(tbytes)} To`;\n }\n\n public static calcPercentage(x: number, total: number): number {\n if (total === 0) {\n return 0;\n } else {\n return (x / total) * 100;\n }\n }\n\n public static round(x: number): number {\n return Math.round((x + Number.EPSILON) * 100) / 100;\n }\n}\n","import { SpreadsheetExportFileType } from '../enums/spreadsheet-export-file-type.enum';\nimport { SpreadsheetExportType } from '../enums/spreadsheet-export-type.enum';\nimport { VersionedViewModelBase } from '../prothesis-base-api-view-models/versioned-view-model-base';\n\nexport class ReadSpreadsheetExportNotificationDetailViewModel extends VersionedViewModelBase {\n public filter: string;\n public sort: string;\n public spreadsheetExportFileType: SpreadsheetExportFileType;\n public spreadsheetExportType: SpreadsheetExportType;\n}\n","import { SpreadsheetExportFileType } from '../enums/spreadsheet-export-file-type.enum';\nimport { SpreadsheetExportType } from '../enums/spreadsheet-export-type.enum';\nimport { ReadSpreadsheetExportNotificationDetailViewModel } from '../prothesis-api-view-models/read-spreadsheet-export-notification-detail.view-model';\n\nexport class ReadSpreadsheetExportNotificationDetailViewModelHelper {\n public static fromParams(\n filter: string,\n sortActive: string,\n sortDirection: string,\n spreadsheetExportFileType: SpreadsheetExportFileType,\n spreadsheetExportType: SpreadsheetExportType\n ): ReadSpreadsheetExportNotificationDetailViewModel {\n const readSpreadsheetExportNotificationDetailViewModel = new ReadSpreadsheetExportNotificationDetailViewModel();\n readSpreadsheetExportNotificationDetailViewModel.filter = filter;\n if (!sortActive && !sortDirection) {\n readSpreadsheetExportNotificationDetailViewModel.sort = '';\n } else {\n readSpreadsheetExportNotificationDetailViewModel.sort = `${sortActive}_${sortDirection}`;\n }\n readSpreadsheetExportNotificationDetailViewModel.spreadsheetExportFileType = spreadsheetExportFileType;\n readSpreadsheetExportNotificationDetailViewModel.spreadsheetExportType = spreadsheetExportType;\n\n return readSpreadsheetExportNotificationDetailViewModel;\n }\n}\n","import { DraggableRowElementComponent } from '../components/rows/draggable-row-element/draggable-row-element.component';\nimport { RowElementComponent } from '../components/rows/row-element/row-element.component';\n\nexport class RowElementHelper {\n public static unselectDraggableRow(rowElement?: DraggableRowElementComponent): void {\n // Unselect the current line\n if (rowElement) {\n rowElement.setSelectionFlag(false);\n }\n }\n\n public static unselectRow(rowElement?: RowElementComponent): void {\n // Unselect the current line\n if (rowElement) {\n rowElement.setSelectionFlag(false);\n }\n }\n}\n","import { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { FileAssetCardModel } from '../components/cards/file-asset-card/models/file-asset-card-model';\nimport { FormDateIntervalModel } from '../components/form-date-interval/form-date-interval-model';\nimport { FormTimeModel } from '../components/form-time/models/form-time-model';\nimport { FileAssetTypeHelper } from '../enum-helpers/file-asset-type.enum.helper';\n\nexport class SortHelper {\n public static sortByDateInterval = function (a: { dateInterval: FormDateIntervalModel }, b: { dateInterval: FormDateIntervalModel }) {\n if (a.dateInterval.dateTo < b.dateInterval.dateTo) {\n return 1;\n }\n\n if (b.dateInterval.dateTo < a.dateInterval.dateTo) {\n return -1;\n }\n\n return 1;\n };\n\n public static sortByDefaultFlag = function (a: { defaultFlag: boolean }, b: { defaultFlag: boolean }) {\n if (a.defaultFlag && !b.defaultFlag) {\n return -1;\n }\n\n if (!a.defaultFlag && b.defaultFlag) {\n return 1;\n }\n\n return 0;\n };\n\n public static sortByDefaultFlagThenByDisabledFlagThenByRateLabel = function (\n a: { defaultFlag: boolean; disabledFlag: boolean; label: string },\n b: { defaultFlag: boolean; disabledFlag: boolean; label: string }\n ) {\n if (a.defaultFlag && !b.defaultFlag) {\n return -1;\n }\n\n if (!a.defaultFlag && b.defaultFlag) {\n return 1;\n }\n\n if (a.disabledFlag && !b.disabledFlag) {\n return 1;\n }\n\n if (!a.disabledFlag && b.disabledFlag) {\n return -1;\n }\n\n return ('' + a.label).localeCompare(b.label);\n };\n\n public static sortByDefaultFlagThenByLabelAlphabetically = function (\n a: { defaultFlag: boolean; label: string },\n b: { defaultFlag: boolean; label: string }\n ) {\n if (a.defaultFlag && !b.defaultFlag) {\n return -1;\n }\n\n if (!a.defaultFlag && b.defaultFlag) {\n return 1;\n }\n\n return ('' + a.label).localeCompare(b.label);\n };\n\n public static sortByDeliveryDateDesc = function (\n a: { deliveryDate: string; number: string },\n b: { deliveryDate: string; number: string }\n ) {\n if (a.deliveryDate && !b.deliveryDate) {\n return 1;\n }\n\n if (b.deliveryDate && !a.deliveryDate) {\n return -1;\n }\n\n const aDate = TimeZoneService.toMomentInLaboratoryTimeZone(a.deliveryDate);\n const bDate = TimeZoneService.toMomentInLaboratoryTimeZone(b.deliveryDate);\n if (aDate < bDate) {\n return 1;\n }\n\n if (bDate < aDate) {\n return -1;\n }\n\n return a.number.localeCompare(b.number);\n };\n\n public static sortByDeliveryRoute = function (a: { deliveryRoute: FormTimeModel }, b: { deliveryRoute: FormTimeModel }) {\n return ('' + a.deliveryRoute.timeValue).localeCompare(b.deliveryRoute.timeValue);\n };\n\n public static sortByDisabledFlag = function (a: { disabledFlag: boolean }, b: { disabledFlag: boolean }) {\n if (a.disabledFlag && !b.disabledFlag) {\n return 1;\n }\n\n if (!a.disabledFlag && b.disabledFlag) {\n return -1;\n }\n\n return 0;\n };\n\n public static sortByDisabledFlagAndDisplayOrder = function (\n a: { disabledFlag: boolean; displayOrder: number },\n b: { disabledFlag: boolean; displayOrder: number }\n ) {\n if (a.disabledFlag && !b.disabledFlag) {\n return 1;\n }\n\n if (!a.disabledFlag && b.disabledFlag) {\n return -1;\n }\n\n if (a.displayOrder > b.displayOrder) {\n return 1;\n }\n\n if (a.displayOrder < b.displayOrder) {\n return -1;\n }\n\n return 0;\n };\n\n public static sortByDisabledFlagAndNameAlphabetically = function (\n a: { disabledFlag: boolean; name: string },\n b: { disabledFlag: boolean; name: string }\n ) {\n if (a.disabledFlag && !b.disabledFlag) {\n return 1;\n }\n\n if (!a.disabledFlag && b.disabledFlag) {\n return -1;\n }\n\n return ('' + a.name).localeCompare(b.name);\n };\n\n public static sortByDisplayOrder = function (a: { displayOrder: number }, b: { displayOrder: number }) {\n if (a.displayOrder > b.displayOrder) {\n return 1;\n }\n\n if (a.displayOrder < b.displayOrder) {\n return -1;\n }\n\n return 0;\n };\n\n // Sort order for delivery form Status : InProgress without hat / InProgress with hat / Done / Canceled\n public static sortByDocumentStatus = function (\n a: { allItemCanceledFlag: boolean; allItemProceedFlag: boolean; hatLabel: string },\n b: { allItemCanceledFlag: boolean; allItemProceedFlag: boolean; hatLabel: string }\n ) {\n if (a.allItemCanceledFlag && !b.allItemCanceledFlag) {\n return 1;\n }\n\n if (!a.allItemCanceledFlag && b.allItemCanceledFlag) {\n return -1;\n }\n\n if (a.allItemProceedFlag && !b.allItemProceedFlag) {\n return 1;\n }\n\n if (!a.allItemProceedFlag && b.allItemProceedFlag) {\n return -1;\n }\n\n if (a.hatLabel && !b.hatLabel) {\n return 1;\n }\n\n if (!a.hatLabel && b.hatLabel) {\n return -1;\n }\n\n return 0;\n };\n\n public static sortByFileAssetTypeThenByName = function (\n a: { fileAssetCard: FileAssetCardModel },\n b: { fileAssetCard: FileAssetCardModel }\n ) {\n if (\n FileAssetTypeHelper.translateDisplayOrder(a.fileAssetCard.fileAssetType) >\n FileAssetTypeHelper.translateDisplayOrder(b.fileAssetCard.fileAssetType)\n ) {\n return 1;\n }\n\n if (\n FileAssetTypeHelper.translateDisplayOrder(a.fileAssetCard.fileAssetType) <\n FileAssetTypeHelper.translateDisplayOrder(b.fileAssetCard.fileAssetType)\n ) {\n return -1;\n }\n\n return ('' + a.fileAssetCard.fileName).localeCompare(b.fileAssetCard.fileName);\n };\n\n public static sortByLabelAlphabetically = function (a: { label: string }, b: { label: string }) {\n return ('' + a.label).localeCompare(b.label);\n };\n\n public static sortByMemberFlagAndName = function (a: { memberFlag: boolean; name: string }, b: { memberFlag: boolean; name: string }) {\n if (a.memberFlag && !b.memberFlag) {\n return 1;\n }\n\n if (!a.memberFlag && b.memberFlag) {\n return -1;\n }\n\n return ('' + a.name).localeCompare(b.name);\n };\n\n public static sortByNameAlphabetically = function (a: { name: string }, b: { name: string }) {\n return ('' + a.name).localeCompare(b.name);\n };\n\n public static sortByNumberAlphabetically = function (a: { number: string }, b: { number: string }) {\n return ('' + a.number).localeCompare(b.number);\n };\n\n public static sortByQuoteDateDesc = function (a: { quoteDate: string; number: string }, b: { quoteDate: string; number: string }) {\n if (a.quoteDate && !b.quoteDate) {\n return 1;\n }\n\n if (b.quoteDate && !a.quoteDate) {\n return -1;\n }\n\n const aDate = TimeZoneService.toMomentInLaboratoryTimeZone(a.quoteDate);\n const bDate = TimeZoneService.toMomentInLaboratoryTimeZone(b.quoteDate);\n if (aDate < bDate) {\n return 1;\n }\n\n if (bDate < aDate) {\n return -1;\n }\n\n return a.number.localeCompare(b.number);\n };\n\n public static sortBySectorDisabledFlagAndDisplayOrderThenBySpecialtyDisabledFlagAndDisplayOrder = function (\n a: { sector: { displayOrder: number; disabledFlag: boolean }; specialty: { displayOrder: number; disabledFlag: boolean } },\n b: { sector: { displayOrder: number; disabledFlag: boolean }; specialty: { displayOrder: number; disabledFlag: boolean } }\n ) {\n if (a.sector.disabledFlag && !b.sector.disabledFlag) {\n return 1;\n }\n\n if (!a.sector.disabledFlag && b.sector.disabledFlag) {\n return -1;\n }\n\n if (a.sector.displayOrder > b.sector.displayOrder) {\n return 1;\n }\n\n if (a.sector.displayOrder < b.sector.displayOrder) {\n return -1;\n }\n\n if (a.specialty && !b.specialty) {\n return 1;\n }\n if (!a.specialty && b.specialty) {\n return -1;\n }\n\n if (a.specialty.disabledFlag && !b.specialty.disabledFlag) {\n return 1;\n }\n\n if (!a.specialty.disabledFlag && b.specialty.disabledFlag) {\n return -1;\n }\n\n if (a.specialty.displayOrder > b.specialty.displayOrder) {\n return 1;\n }\n\n if (a.specialty.displayOrder < b.specialty.displayOrder) {\n return -1;\n }\n\n return 0;\n };\n\n public static sortByShadeDisabledFlag = function (a: { shade: { disabledFlag: boolean } }, b: { shade: { disabledFlag: boolean } }) {\n if (a.shade.disabledFlag && !b.shade.disabledFlag) {\n return 1;\n }\n\n if (!a.shade.disabledFlag && b.shade.disabledFlag) {\n return -1;\n }\n\n return 0;\n };\n\n public static sortByTaxDisplayOrderThenByDisplayOrder = function (\n a: { displayOrder: number; taxDisplayOrder: number },\n b: { displayOrder: number; taxDisplayOrder: number }\n ) {\n if (a.displayOrder && !b.displayOrder) {\n return 1;\n }\n\n if (!a.displayOrder && b.displayOrder) {\n return -1;\n }\n\n if (a.taxDisplayOrder > b.taxDisplayOrder) {\n return 1;\n }\n\n if (a.taxDisplayOrder < b.taxDisplayOrder) {\n return -1;\n }\n\n return 0;\n };\n\n public static sortFileAssetCardByFileAssetTypeThenByName = function (a: FileAssetCardModel, b: FileAssetCardModel) {\n if (FileAssetTypeHelper.translateDisplayOrder(a.fileAssetType) > FileAssetTypeHelper.translateDisplayOrder(b.fileAssetType)) {\n return 1;\n }\n\n if (FileAssetTypeHelper.translateDisplayOrder(a.fileAssetType) < FileAssetTypeHelper.translateDisplayOrder(b.fileAssetType)) {\n return -1;\n }\n\n return ('' + a.fileName).localeCompare(b.fileName);\n };\n\n public static sortLaboratoryTaskByDisplayOrder = function (\n a: { laboratoryTask: { displayOrder: number } },\n b: { laboratoryTask: { displayOrder: number } }\n ) {\n if (a.laboratoryTask.displayOrder > b.laboratoryTask.displayOrder) {\n return 1;\n }\n\n if (a.laboratoryTask.displayOrder < b.laboratoryTask.displayOrder) {\n return -1;\n }\n\n return 0;\n };\n\n public static sortLaboratoryTaxByDisplayOrder = function (\n a: { laboratoryTax: { displayOrder: number } },\n b: { laboratoryTax: { displayOrder: number } }\n ) {\n if (a.laboratoryTax.displayOrder > b.laboratoryTax.displayOrder) {\n return 1;\n }\n\n if (a.laboratoryTax.displayOrder < b.laboratoryTax.displayOrder) {\n return -1;\n }\n\n return 0;\n };\n\n public static sortRateByDefaultFlagThenByDisabledFlagThenByAlphabeticalOrder = function (\n a: { rate: { defaultFlag: boolean; disabledFlag: boolean; label: string } },\n b: { rate: { defaultFlag: boolean; disabledFlag: boolean; label: string } }\n ) {\n if (a.rate.defaultFlag && !b.rate.defaultFlag) {\n return -1;\n }\n\n if (!a.rate.defaultFlag && b.rate.defaultFlag) {\n return 1;\n }\n\n if (a.rate.disabledFlag && !b.rate.disabledFlag) {\n return 1;\n }\n\n if (!a.rate.disabledFlag && b.rate.disabledFlag) {\n return -1;\n }\n\n return ('' + a.rate.label).localeCompare(b.rate.label);\n };\n\n public static sortUserAreaByLaboratoryNameThenByLaboratoryCode = function (\n a: { laboratory: { code: string; name: string } },\n b: { laboratory: { code: string; name: string } }\n ) {\n const result = ('' + a.laboratory.name).localeCompare(b.laboratory.name);\n if (result === 0) {\n return ('' + a.laboratory.code).localeCompare(b.laboratory.code);\n }\n\n return result;\n };\n}\n","import { UuidCollectionViewModel } from '../prothesis-base-api-view-models/uuid-collection.view-model';\nimport { UuidViewModel } from '../prothesis-base-api-view-models/uuid.view-model';\n\nexport class ViewModelHelper {\n public static toUuidCollectionViewModel(uuids: string[]): UuidCollectionViewModel {\n const uuidViewModels: UuidViewModel[] = [];\n uuids.forEach((uuid) => {\n uuidViewModels.push({\n uuid: uuid,\n });\n });\n const uuidCollectionViewModel = new UuidCollectionViewModel();\n uuidCollectionViewModel.uuids = uuidViewModels;\n return uuidCollectionViewModel;\n }\n\n public static toUuidViewModels(uuids: string[]): UuidViewModel[] {\n const uuidViewModels: UuidViewModel[] = [];\n uuids.forEach((uuid) => {\n uuidViewModels.push({\n uuid: uuid,\n });\n });\n return uuidViewModels;\n }\n}\n","import { getCurrencySymbol } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'currencySymbol',\n})\nexport class CurrencySymbolPipe implements PipeTransform {\n public transform(currencyCode: string, format: 'wide' | 'narrow' = 'narrow', locale?: string): string {\n return getCurrencySymbol(currencyCode, format, locale);\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { TimeZoneService } from 'app/core/services/time-zone.service';\n\n@Pipe({\n name: 'customDate',\n})\nexport class CustomDatePipe extends DatePipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(value: any, args?: any): any {\n if (!value) {\n return null;\n }\n\n if (!args) {\n args = 'mediumDate';\n }\n\n const offset = TimeZoneService.offset(value);\n return super.transform(value, args, offset);\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'looseCurrency',\n})\nexport class LooseCurrencyPipe implements PipeTransform {\n public constructor(private _currencyPipe: CurrencyPipe) {}\n\n public transform(value: any, currencyCode?: string, display?: string | boolean, digitsInfo?: string): string {\n // Convert strings to numbers if possible\n if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n value = Number(value);\n }\n\n // If value is a string this means the try to convert it to number failled.\n if (typeof value === 'string') {\n return value;\n }\n\n // Here there'are 2 options:\n // 1) value is a number\n // 2) value is not a number neither a string. In this case let Angular's CurrencyPipe throw an exception\n return this._currencyPipe.transform(value, currencyCode, display, digitsInfo);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LooseCurrencyPipe } from 'app/shared/pipes/loose-currency.pipe';\nimport { CurrencySymbolPipe } from './currency-symbol.pipe';\nimport { CustomDatePipe } from './custom-date.pipe';\nimport { FileSizePipe } from './file-size.pipe';\nimport { RedoneStatusPipe } from './redone-status.pipe';\nimport { SafePipe } from './safe.pipe';\n\n@NgModule({\n declarations: [CustomDatePipe, CurrencySymbolPipe, FileSizePipe, LooseCurrencyPipe, SafePipe, RedoneStatusPipe],\n imports: [],\n exports: [CustomDatePipe, CurrencySymbolPipe, FileSizePipe, LooseCurrencyPipe, SafePipe, RedoneStatusPipe],\n})\nexport class PipeModule {}\n","import { PeriodSearchType } from '../enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchCreditDateType } from '../enums/period-search-credit-date-type.enum';\nimport { PublishStatus } from '../enums/publish-status.enum';\nimport { IPeriodSearchFilter } from '../prothesis-api-filters-interfaces/Laboratory/i-period-search-filter';\nimport { IPublishableFilter } from '../prothesis-api-filters-interfaces/i-publishable-filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class CreditFilter extends TenantFilter implements IPeriodSearchFilter, IPublishableFilter {\n public canceledFlag: boolean;\n public creditFreeLineExistenceFlag: boolean;\n public customerNameContains: string;\n public customerUuids: string[];\n public excludedPublishStatuses: PublishStatus[];\n public fromCreditDate: string;\n public fromDeliveryDate: string;\n public fromInvoiceDate: string;\n public fromInvoiceDueDate: string;\n public invoicedCustomerUuids: string[];\n public invoiceFreeLineExistenceFlag: boolean;\n public invoiceNumber: string;\n public markedAsPrintedFlag: boolean;\n public number: string;\n public numberStartWith: string;\n public paidFlag: boolean;\n public periodSearchDateType: PeriodSearchCreditDateType;\n public periodSearchPage: number;\n public periodSearchType: PeriodSearchType;\n public publishStatuses: PublishStatus[];\n public toCreditDate: string;\n public toDeliveryDate: string;\n public toInvoiceDate: string;\n public toInvoiceDueDate: string;\n}\n","import { CustomerUserCustomerStatus } from '../enums/customer-user-customer-status.enum';\nimport { IAutoCompleteFilter } from '../prothesis-api-filters-interfaces/i-auto-complete.filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class CustomerFilter extends TenantFilter implements IAutoCompleteFilter {\n public code: string;\n public codeStartsWith: string;\n public customerGroupFlag: boolean;\n public customerGroupUuid: string;\n public customerMemberFlag: boolean;\n public customerUserCustomerStatus: CustomerUserCustomerStatus;\n public deliveryFormToInvoiceExistenceFlag: boolean;\n public disabledFlag: boolean;\n public fromAccountState: number;\n public fromAccountStateIncludedFlag: boolean;\n public rateUuid: string;\n public textContains: string;\n public toAccountState: number;\n public toAccountStateIncludedFlag: boolean;\n}\n","import { PeriodSearchDeliveryFormDateType } from '../enums/period-search-delivery-form-date-type.enum';\nimport { PublishedDocumentFilter } from './published-document-filter';\n\nexport class DeliveryFormFilter extends PublishedDocumentFilter {\n public canceledFlag: boolean;\n public deliveryFormCanceledFlag: boolean;\n public fromInvoiceDate: string;\n public invoicedFlag: boolean;\n public invoiceNumber: string;\n public markedAsPrintedFlag: boolean;\n public numberStartWith: string;\n public patientCodeStartWith: string;\n public patientNumberStartWith: string;\n public periodSearchDateType: PeriodSearchDeliveryFormDateType;\n public proFormaFlag: boolean;\n public toInvoiceDate: string;\n}\n","import { PeriodSearchType } from '../enums/Laboratory/period-search-type.enum';\nimport { DocumentStatus } from '../enums/document-status.enum';\nimport { IPeriodSearchFilter } from '../prothesis-api-filters-interfaces/Laboratory/i-period-search-filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class DocumentFilter extends TenantFilter implements IPeriodSearchFilter {\n public customerGroupUuids: string[];\n public customerUuids: string[];\n public deliveryRoutes: number[];\n public description: string;\n public excludedDeliveryRoutes: number[];\n public fromDeliveryDate: string;\n public laboratoryResourceUuid: string;\n public laboratoryTaskNumber: string;\n public markedAsPrintedFlag: boolean;\n public noneDeliveryRouteFlag: boolean;\n public noneSpecialtyFlag: boolean;\n public number: string;\n public patientCode: string;\n public patientNumber: string;\n public patientUnspecifiedFlag: boolean;\n public periodSearchPage: number;\n public periodSearchType: PeriodSearchType;\n public prescriptionNumber: string;\n public productionFlowNumber: string;\n public productionFlowUuid: string;\n public sectorUuid: string;\n public specialtyUuids: string[];\n public status: DocumentStatus;\n public toDeliveryDate: string;\n}\n","import { PublishedDocumentFilter } from './published-document-filter';\n\nexport class FittingFormFilter extends PublishedDocumentFilter {}\n","import { PeriodSearchType } from '../enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchInvoiceDateType } from '../enums/period-search-invoice-date-type.enum';\nimport { PublishStatus } from '../enums/publish-status.enum';\nimport { IPeriodSearchFilter } from '../prothesis-api-filters-interfaces/Laboratory/i-period-search-filter';\nimport { IPublishableFilter } from '../prothesis-api-filters-interfaces/i-publishable-filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class InvoiceFilter extends TenantFilter implements IPeriodSearchFilter, IPublishableFilter {\n public canceledCreditNumber: string;\n public canceledFlag: boolean;\n public creditFreeLineExistenceFlag: boolean;\n public customerNameContains: string;\n public customerUuids: string[];\n public excludedPublishStatuses: PublishStatus[];\n public fromDeliveryDate: string;\n public fromDueDate: string;\n public fromInvoiceDate: string;\n public invoicedCustomerUuids: string[];\n public invoiceFreeLineExistenceFlag: boolean;\n public markedAsPrintedFlag: boolean;\n public number: string;\n public numberStartWith: string;\n public paidFlag: boolean;\n public periodSearchDateType: PeriodSearchInvoiceDateType;\n public periodSearchPage: number;\n public periodSearchType: PeriodSearchType;\n public publishStatuses: PublishStatus[];\n public toDeliveryDate: string;\n public toDueDate: string;\n public toInvoiceDate: string;\n}\n","import { LaboratoryResourceType } from '../enums/laboratory-resource-type.enum';\nimport { IAutoCompleteFilter } from '../prothesis-api-filters-interfaces/i-auto-complete.filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class LaboratoryResourceFilter extends TenantFilter implements IAutoCompleteFilter {\n public code: string;\n public codeStartsWith: string;\n public disabledFlag: boolean;\n public laboratoryResourceType: LaboratoryResourceType;\n public noneSpecialtyFlag: boolean;\n public sectorUuid: string;\n public specialtyUuids: string[];\n public textContains: string;\n}\n","import { PeriodSearchType } from '../enums/Laboratory/period-search-type.enum';\nimport { PeriodSearchInvoiceDateType } from '../enums/period-search-invoice-date-type.enum';\nimport { PublishStatus } from '../enums/publish-status.enum';\nimport { IPeriodSearchFilter } from '../prothesis-api-filters-interfaces/Laboratory/i-period-search-filter';\nimport { IPublishableFilter } from '../prothesis-api-filters-interfaces/i-publishable-filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class ProFormaFilter extends TenantFilter implements IPeriodSearchFilter, IPublishableFilter {\n public accountStateDisplayedOnInvoiceFlag: boolean;\n public customerMemberUuidsIncludedFlag: boolean;\n public customerUuids: string[];\n public excludedPublishStatuses: PublishStatus[];\n public fromDeliveryDate: string;\n public fromInvoiceDate: string;\n public frozenFlag: boolean;\n public groupedProFormaCustomerUuidsIncludedFlag: boolean;\n public markedAsPrintedFlag: boolean;\n public periodSearchDateType: PeriodSearchInvoiceDateType;\n public periodSearchPage: number;\n public periodSearchType: PeriodSearchType;\n public publishStatuses: PublishStatus[];\n public toDeliveryDate: string;\n public toInvoiceDate: string;\n}\n","import { PublishStatus } from '../enums/publish-status.enum';\nimport { IPublishableFilter } from '../prothesis-api-filters-interfaces/i-publishable-filter';\nimport { DocumentFilter } from './document-filter';\n\nexport class PublishedDocumentFilter extends DocumentFilter implements IPublishableFilter {\n public excludedPublishStatuses: PublishStatus[];\n public publishStatuses: PublishStatus[];\n}\n","import { PublishedDocumentFilter } from './published-document-filter';\n\nexport class QuoteFilter extends PublishedDocumentFilter {\n public fromExpirationDate: string;\n public fromQuoteDate: string;\n public toExpirationDate: string;\n public toQuoteDate: string;\n}\n","import { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class UserCustomerFilter extends TenantFilter {\n public customerMemberIncludedFlag: boolean;\n public customerUuids: string[];\n public userEmailConfirmedFlag: boolean;\n public userUuid: string;\n}\n","import { DocumentFilter } from './document-filter';\n\nexport class WorkFormFilter extends DocumentFilter {\n public fittingFlag: boolean;\n}\n","import { UuidViewModel } from '../prothesis-base-api-view-models/uuid.view-model';\nimport { ViewModelBase } from '../prothesis-base-api-view-models/view-model-base';\n\nexport class UnPublishViewModel extends ViewModelBase {\n public unPublishReasonText: string;\n public uuids: UuidViewModel[];\n}\n","import { UuidViewModel } from '../prothesis-base-api-view-models/uuid.view-model';\nimport { ViewModelBase } from '../prothesis-base-api-view-models/view-model-base';\n\nexport class UuidCollectionInCascadeFlagViewModel extends ViewModelBase {\n /**\n * Gets or sets a value indicating whether all related ViewModels have to be updated or not.\n */\n public inCascadeFlag: boolean;\n public uuids: UuidViewModel[];\n}\n","export class StandardFilter {\n /**\n * Gets or sets the UUID of the user who created this model.\n */\n public createdBy: string;\n\n /**\n * Gets or sets the collection of model's UUID to exclude.\n */\n public excludedUuids: string[];\n\n /**\n * Gets or sets the FROM CreateDate.\n * Time should be set to \"00:00:00\" for comparison on Date \"only\".\n */\n public fromCreateDate: string;\n\n /**\n * Gets or sets the FROM UpdateDate.\n * Time should be set to \"00:00:00\" for comparison on Date \"only\".\n */\n public fromUpdateDate: string;\n\n /**\n * Gets or sets a free text search filter.\n */\n public textFilter: string;\n\n /**\n * Gets or sets the list of fields the textFilter applies to.\n */\n public textFilterFields: string[];\n\n /**\n * Gets or sets the TO CreateDate.\n * Time should be set to \"23:59:59\" for comparison on Date \"only\".\n */\n public toCreateDate: string;\n\n /**\n * Gets or sets the TO UpdateDate.\n * Time should be set to \"23:59:59\" for comparison on Date \"only\".\n */\n public toUpdateDate: string;\n\n /**\n * Gets or sets the UUID of the user who updated this model.\n */\n public updatedBy: string;\n\n /**\n * Gets or sets the collection of model's UUID.\n */\n public uuids: string[];\n}\n","import { StandardFilter } from './standard-filter';\n\nexport class TenantFilter extends StandardFilter {\n /**\n * Gets or sets the tenant UUID.\n * Used to make sure we don't load data from another tenant.\n */\n public tenantUuid: string;\n}\n","import { ViewModelBase } from './view-model-base';\n\n/**\n * Base class for all component view models.\n */\nexport abstract class ComponentViewModelBase extends ViewModelBase {\n /**\n * Gets or sets the unique identifier of the component.\n */\n public uuid: string;\n}\n","import { VersionedViewModelBase } from './versioned-view-model-base';\n\n/**\n * Base class for ReadXxxViewModel classes.\n */\nexport abstract class TenantViewModelBase extends VersionedViewModelBase {\n public tenantUuid: string;\n}\n","import { UuidViewModel } from './uuid.view-model';\nimport { ViewModelBase } from './view-model-base';\n\nexport class UuidCollectionViewModel extends ViewModelBase {\n public uuids: UuidViewModel[];\n}\n","import { ComponentViewModelBase } from './component-view-model-base';\n\nexport abstract class VersionedViewModelBase extends ComponentViewModelBase {\n /**\n * Gets or sets the component tag used for detecting optimistic concurrency.\n */\n public etag: string;\n}\n","/**\n * A base class all view models should inherit from.\n * Most view models would need to inherit this class to be handle by a standard CRUD service.\n */\nexport abstract class ViewModelBase {}\n","import { PeriodSearchType } from '../enums/Customer/period-search-type.enum';\nimport { PeriodSearchCreditDateType } from '../enums/period-search-credit-date-type.enum';\nimport { PublishStatus } from '../enums/publish-status.enum';\nimport { IPeriodSearchFilter } from '../prothesis-api-filters-interfaces/Customer/i-period-search-filter';\nimport { IPublishableFilter } from '../prothesis-api-filters-interfaces/i-publishable-filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class CreditFilter extends TenantFilter implements IPeriodSearchFilter, IPublishableFilter {\n public canceledFlag: boolean;\n public creditFreeLineExistenceFlag: boolean;\n public customerUuids: string[];\n public excludedPublishStatuses: PublishStatus[];\n public fromCreditDate: string;\n public fromDeliveryDate: string;\n public fromInvoiceDate: string;\n public fromInvoiceDueDate: string;\n public invoiceFreeLineExistenceFlag: boolean;\n public invoiceNumber: string;\n public number: string;\n public paidFlag: boolean;\n public periodSearchDateType: PeriodSearchCreditDateType;\n public periodSearchPage: number;\n public periodSearchType: PeriodSearchType;\n public publishStatuses: PublishStatus[];\n public toCreditDate: string;\n public toDeliveryDate: string;\n public toInvoiceDate: string;\n public toInvoiceDueDate: string;\n}\n","import { IAutoCompleteFilter } from '../prothesis-api-filters-interfaces/i-auto-complete.filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class CustomerFilter extends TenantFilter implements IAutoCompleteFilter {\n public code: string;\n public codeStartsWith: string;\n public customerGroupFlag: boolean;\n public customerMemberFlag: boolean;\n public disabledFlag: boolean;\n public textContains: string;\n}\n","import { PeriodSearchDeliveryFormDateType } from '../enums/period-search-delivery-form-date-type.enum';\nimport { DocumentFilter } from './document-filter';\n\nexport class DeliveryFormFilter extends DocumentFilter {\n public canceledFlag: boolean;\n public deliveryFormCanceledFlag: boolean;\n public fromInvoiceDate: string;\n public invoicedFlag: boolean;\n public invoiceNumber: string;\n public periodSearchDateType: PeriodSearchDeliveryFormDateType;\n public proFormaFlag: boolean;\n public toInvoiceDate: string;\n}\n","import { PeriodSearchType } from '../enums/Customer/period-search-type.enum';\nimport { DocumentStatus } from '../enums/document-status.enum';\nimport { PublishStatus } from '../enums/publish-status.enum';\nimport { IPeriodSearchFilter } from '../prothesis-api-filters-interfaces/Customer/i-period-search-filter';\nimport { IPublishableFilter } from '../prothesis-api-filters-interfaces/i-publishable-filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class DocumentFilter extends TenantFilter implements IPeriodSearchFilter, IPublishableFilter {\n public customerGroupUuids: string[];\n public customerUuids: string[];\n public deliveryRoutes: number[];\n public excludedDeliveryRoutes: number[];\n public excludedPublishStatuses: PublishStatus[];\n public fromDeliveryDate: string;\n public noneDeliveryRouteFlag: boolean;\n public number: string;\n public patientCode: string;\n public patientNumber: string;\n public patientUnspecifiedFlag: boolean;\n public periodSearchPage: number;\n public periodSearchType: PeriodSearchType;\n public prescriptionNumber: string;\n public productionFlowNumber: string;\n public productionFlowUuid: string;\n public publishStatuses: PublishStatus[];\n public status: DocumentStatus;\n public toDeliveryDate: string;\n}\n","import { DocumentFilter } from './document-filter';\n\nexport class FittingFormFilter extends DocumentFilter {}\n","import { PeriodSearchType } from '../enums/Customer/period-search-type.enum';\nimport { PeriodSearchInvoiceDateType } from '../enums/period-search-invoice-date-type.enum';\nimport { PublishStatus } from '../enums/publish-status.enum';\nimport { IPeriodSearchFilter } from '../prothesis-api-filters-interfaces/Customer/i-period-search-filter';\nimport { IPublishableFilter } from '../prothesis-api-filters-interfaces/i-publishable-filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class InvoiceFilter extends TenantFilter implements IPeriodSearchFilter, IPublishableFilter {\n public canceledCreditNumber: string;\n public canceledFlag: boolean;\n public creditFreeLineExistenceFlag: boolean;\n public customerUuids: string[];\n public excludedPublishStatuses: PublishStatus[];\n public fromDeliveryDate: string;\n public fromDueDate: string;\n public fromInvoiceDate: string;\n public invoiceFreeLineExistenceFlag: boolean;\n public number: string;\n public paidFlag: boolean;\n public periodSearchDateType: PeriodSearchInvoiceDateType;\n public periodSearchPage: number;\n public periodSearchType: PeriodSearchType;\n public publishStatuses: PublishStatus[];\n public toDeliveryDate: string;\n public toDueDate: string;\n public toInvoiceDate: string;\n}\n","import { PeriodSearchType } from '../enums/Customer/period-search-type.enum';\nimport { PeriodSearchInvoiceDateType } from '../enums/period-search-invoice-date-type.enum';\nimport { PublishStatus } from '../enums/publish-status.enum';\nimport { IPeriodSearchFilter } from '../prothesis-api-filters-interfaces/Customer/i-period-search-filter';\nimport { IPublishableFilter } from '../prothesis-api-filters-interfaces/i-publishable-filter';\nimport { TenantFilter } from '../prothesis-base-api-filters/tenant-filter';\n\nexport class ProFormaFilter extends TenantFilter implements IPeriodSearchFilter, IPublishableFilter {\n public customerMemberUuidsIncludedFlag: boolean;\n public customerUuids: string[];\n public excludedPublishStatuses: PublishStatus[];\n public fromDeliveryDate: string;\n public fromInvoiceDate: string;\n public periodSearchDateType: PeriodSearchInvoiceDateType;\n public periodSearchPage: number;\n public periodSearchType: PeriodSearchType;\n public publishStatuses: PublishStatus[];\n public toDeliveryDate: string;\n public toInvoiceDate: string;\n}\n","import { DocumentFilter } from './document-filter';\n\nexport class QuoteFilter extends DocumentFilter {\n public fromExpirationDate: string;\n public fromQuoteDate: string;\n public toExpirationDate: string;\n public toQuoteDate: string;\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { DialogBoxService } from 'app/core/services/dialog-box/dialog-box.service';\nimport { FormStateService } from 'app/core/services/form-state.service';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { SavedChangeFormComponent } from './saved-change-form.component';\n\n@Injectable()\nexport class SavedChangeGuard implements CanDeactivate {\n private dialogBoxMessageLine1 = \"Vous n'avez pas enregistré vos modifications.\";\n private dialogBoxMessageLine2 = 'Quitter quand-même ce formulaire ?';\n\n public constructor(private _dialogBoxService: DialogBoxService, protected _formStateService: FormStateService) {}\n\n public canDeactivate(component: SavedChangeFormComponent): Observable {\n if (!component.canDeactivate()) {\n const dialogRef = this._dialogBoxService.promptForAction({\n messageLine1: this.dialogBoxMessageLine1,\n onAccept: () => {},\n onDecline: () => {},\n messageLine2: this.dialogBoxMessageLine2,\n });\n\n return dialogRef.afterClosed().pipe(\n // map the dialog result to a true/false indicating whether\n // the route can deactivate\n map((result) => {\n return result === true;\n })\n );\n }\n\n return of(true);\n }\n}\n","import { MatPaginator } from '@angular/material/paginator';\nimport { GridSortComponent } from 'app/shared/components/grid-sort/grid-sort.component';\nimport { ListStateInterface } from './list-state.interface';\n\nexport abstract class PaginatedListState implements ListStateInterface {\n public defaultSortActive: string;\n public defaultSortDirection: string;\n public pageIndex: number;\n public pageSize: number;\n public sortActive: string;\n public sortDirection: string;\n public sortDirectionFavorite: string;\n public sortFavorite: string;\n\n public constructor() {\n this.defaultSortActive = 'createDate';\n this.defaultSortDirection = 'desc';\n this.pageSize = 10;\n this.pageIndex = 0;\n this.sortActive = 'createDate';\n this.sortDirection = 'desc';\n this.sortDirectionFavorite = '';\n this.sortFavorite = '';\n }\n\n public static setPaginatorState(paginator: MatPaginator, state: PaginatedListState): void {\n if (paginator && state) {\n // Update local cmp states\n // Update only if different to avoid input changes that may cause unuseful screen refresh\n if (paginator.pageIndex !== state.pageIndex) {\n paginator.pageIndex = state.pageIndex;\n }\n\n if (paginator.pageSize !== state.pageSize) {\n paginator.pageSize = state.pageSize;\n }\n }\n }\n\n public static setSortState(gridSort: GridSortComponent, state: PaginatedListState): void {\n if (gridSort && state) {\n // Sort active and sort Direction\n // Update only if different to avoid input changes that may cause unuseful screen refresh\n if (gridSort.sortActive !== state.sortActive) {\n gridSort.sortActive = state.sortActive;\n }\n\n if (gridSort.sortDirection !== state.sortDirection) {\n gridSort.sortDirection = state.sortDirection;\n }\n\n if (gridSort.sortFavorite !== state.sortFavorite) {\n gridSort.sortFavorite = state.sortFavorite;\n }\n\n if (gridSort.sortDirectionFavorite !== state.sortDirectionFavorite) {\n gridSort.sortDirectionFavorite = state.sortDirectionFavorite;\n }\n }\n }\n\n public initSort(shouldForceSortFlag: boolean, sort: Array): void {\n if (!sort) {\n // No favorites sort stored into the local storage\n this.sortDirectionFavorite = this.defaultSortDirection;\n this.sortFavorite = this.defaultSortActive;\n } else {\n this.sortDirectionFavorite = sort[0];\n this.sortFavorite = sort[1];\n // No session sort\n if ((!this.sortActive && !this.sortDirection) || shouldForceSortFlag) {\n this.sortActive = this.sortFavorite;\n this.sortDirection = this.sortDirectionFavorite;\n }\n }\n }\n\n public abstract isFilterSetToDefaultValues(): boolean;\n\n public isSortSetToDefaultValues(): boolean {\n if (this.sortActive !== this.sortFavorite || this.sortDirection !== this.sortDirectionFavorite) {\n return false;\n }\n return true;\n }\n\n public abstract resetFilter(): void;\n\n public resetSort(): void {\n this.sortActive = this.defaultSortActive;\n this.sortDirection = this.defaultSortDirection;\n\n // Init for the favorites\n if (!this.sortFavorite) {\n this.sortFavorite = this.sortActive;\n } else {\n this.sortActive = this.sortFavorite;\n }\n if (!this.sortDirectionFavorite) {\n this.sortDirectionFavorite = this.sortDirection;\n } else {\n this.sortDirection = this.sortDirectionFavorite;\n }\n }\n\n public updateFavoriteSortFromCurrentSort(): void {\n // Update current favorite into the gridsort\n this.sortFavorite = this.sortActive;\n this.sortDirectionFavorite = this.sortDirection;\n }\n\n protected initPageSize(localStoragePageSizeKey: string): void {\n let pageSize: number;\n const data = localStorage.getItem(localStoragePageSizeKey);\n if (data) {\n pageSize = JSON.parse(data);\n }\n\n if (pageSize) {\n this.pageSize = pageSize;\n }\n }\n\n protected initPageSort(localStoragePageSortKey: string): void {\n let pageSort: string;\n const data = localStorage.getItem(localStoragePageSortKey);\n if (data) {\n pageSort = JSON.parse(data);\n }\n\n if (pageSort) {\n this.sortActive = pageSort[0];\n this.sortDirection = pageSort[1];\n }\n }\n}\n","import { ListStateInterface } from './list-state.interface';\n\nexport class PickerState implements ListStateInterface {\n public filter2DefaultSelectedContainerUuid: string;\n public filter2SelectedContainerUuid: string;\n public filter2SelectedSubcontainerUuid: string;\n public filterDefaultSelectedContainerUuid: string;\n public filterSelectedContainerUuid: string;\n public filterSelectedSubcontainerUuid: string;\n public pageIndex: number;\n public pageSize: number;\n public textFilter: string;\n\n public constructor() {\n this.textFilter = '';\n this.pageSize = 5;\n this.pageIndex = 0;\n }\n\n public isFilterSetToDefaultValues(): boolean {\n if (\n !this.textFilter &&\n this.filterSelectedContainerUuid === this.filterDefaultSelectedContainerUuid &&\n !this.filterSelectedSubcontainerUuid &&\n (!this.pageIndex || this.pageIndex === 0)\n ) {\n return true;\n }\n\n return false;\n }\n}\n","import { AbstractControl, FormControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\n\nexport class CustomValidators {\n public static greaterThan(compareValue: number): ValidatorFn {\n return (formControl: FormControl) => {\n if (formControl.value || formControl.value === 0) {\n return formControl.value > compareValue ? null : { greaterThan: true };\n }\n return null;\n };\n }\n\n public static notEqual(compareValue: number): ValidatorFn {\n return (formControl: FormControl) => {\n if (formControl.value || formControl.value === 0) {\n return formControl.value !== compareValue ? null : { notEqual: true };\n }\n return null;\n };\n }\n\n public static required(control: AbstractControl): ValidationErrors | null {\n // Check control is a string that can be trimmed\n if (control.value && control.value.trim) {\n return control.value.trim() === '' ? { required: true } : null;\n }\n\n // Not a string, use default required Validators\n return Validators.required(control);\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { FuseSidebarComponent } from './sidebar.component';\n\n@NgModule({\n declarations: [FuseSidebarComponent],\n exports: [FuseSidebarComponent],\n})\nexport class FuseSidebarModule {}\n","import { Platform } from '@angular/cdk/platform';\nimport { Inject, Injectable, InjectionToken } from '@angular/core';\nimport { ResolveEnd, Router } from '@angular/router';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport isEqual from 'lodash-es/isEqual';\nimport merge from 'lodash-es/merge';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n// Create the injection token for the custom settings\nexport const FUSE_CONFIG = new InjectionToken('fuseCustomConfig');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FuseConfigService {\n // Private\n private _configSubject: BehaviorSubject;\n private readonly _defaultConfig: any;\n\n /**\n * Constructor\n *\n * @param {Platform} _platform\n * @param {Router} _router\n * @param _config\n */\n public constructor(private _platform: Platform, private _router: Router, @Inject(FUSE_CONFIG) private _config) {\n // Set the default config from the user provided config (from forRoot)\n this._defaultConfig = _config;\n\n // Initialize the service\n this._init();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Set and get the config\n */\n public set config(value) {\n // Get the value from the behavior subject\n let config = this._configSubject.getValue();\n\n // Merge the new config\n config = merge({}, config, value);\n\n // Notify the observers\n this._configSubject.next(config);\n }\n\n public get config(): any | Observable {\n return this._configSubject.asObservable();\n }\n\n /**\n * Get default config\n *\n * @returns {any}\n */\n public get defaultConfig(): any {\n return this._defaultConfig;\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Get config\n *\n * @returns {Observable}\n */\n public getConfig(): Observable {\n return this._configSubject.asObservable();\n }\n\n /**\n * Reset to the default config\n */\n public resetToDefaults(): void {\n // Set the config from the default config\n this._configSubject.next(cloneDeep(this._defaultConfig));\n }\n\n /**\n * Set config\n *\n * @param value\n * @param {{emitEvent: boolean}} opts\n */\n public setConfig(value, opts = { emitEvent: true }): void {\n // Get the value from the behavior subject\n let config = this._configSubject.getValue();\n\n // Merge the new config\n config = merge({}, config, value);\n\n // If emitEvent option is true...\n if (opts.emitEvent === true) {\n // Notify the observers\n this._configSubject.next(config);\n }\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Initialize\n *\n * @private\n */\n private _init(): void {\n // Set the config from the default config\n this._configSubject = new BehaviorSubject(cloneDeep(this._defaultConfig));\n\n // Reload the default layout config on every RoutesRecognized event\n // if the current layout config is different from the default one\n this._router.events.pipe(filter((event) => event instanceof ResolveEnd)).subscribe(() => {\n if (!isEqual(this._configSubject.getValue().layout, this._defaultConfig.layout)) {\n // Clone the current config\n const config = cloneDeep(this._configSubject.getValue());\n\n // Reset the layout from the default config\n config.layout = cloneDeep(this._defaultConfig.layout);\n\n // Set the config\n this._configSubject.next(config);\n }\n });\n }\n}\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\n\nimport { FUSE_CONFIG } from '@fuse/services/config.service';\n\n@NgModule()\nexport class FuseModule {\n public constructor(@Optional() @SkipSelf() parentModule: FuseModule) {\n if (parentModule) {\n throw new Error('FuseModule is already loaded. Import it in the AppModule only!');\n }\n }\n\n public static forRoot(config): ModuleWithProviders {\n return {\n ngModule: FuseModule,\n providers: [\n {\n provide: FUSE_CONFIG,\n useValue: config,\n },\n ],\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FuseIfOnDomDirective } from '@fuse/directives/fuse-if-on-dom/fuse-if-on-dom.directive';\nimport { FuseInnerScrollDirective } from '@fuse/directives/fuse-inner-scroll/fuse-inner-scroll.directive';\nimport {\n FuseMatSidenavHelperDirective,\n FuseMatSidenavTogglerDirective,\n} from '@fuse/directives/fuse-mat-sidenav/fuse-mat-sidenav.directive';\n\n@NgModule({\n declarations: [FuseIfOnDomDirective, FuseInnerScrollDirective, FuseMatSidenavHelperDirective, FuseMatSidenavTogglerDirective],\n imports: [],\n exports: [FuseIfOnDomDirective, FuseInnerScrollDirective, FuseMatSidenavHelperDirective, FuseMatSidenavTogglerDirective],\n})\nexport class FuseDirectivesModule {}\n","import { NgModule } from '@angular/core';\n\nimport { CamelCaseToDashPipe } from './camelCaseToDash.pipe';\nimport { FilterPipe } from './filter.pipe';\nimport { GetByIdPipe } from './getById.pipe';\nimport { HtmlToPlaintextPipe } from './htmlToPlaintext.pipe';\nimport { KeysPipe } from './keys.pipe';\n\n@NgModule({\n declarations: [KeysPipe, GetByIdPipe, HtmlToPlaintextPipe, FilterPipe, CamelCaseToDashPipe],\n imports: [],\n exports: [KeysPipe, GetByIdPipe, HtmlToPlaintextPipe, FilterPipe, CamelCaseToDashPipe],\n})\nexport class FusePipesModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FuseDirectivesModule } from '@fuse/directives/directives';\nimport { FusePipesModule } from '@fuse/pipes/pipes.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n FuseDirectivesModule,\n FusePipesModule,\n ],\n exports: [CommonModule, FormsModule, ReactiveFormsModule, FlexLayoutModule, FuseDirectivesModule, FusePipesModule],\n})\nexport class FuseSharedModule {}\n","export const locale = {\n lang: 'en',\n data: {\n NAV: {\n ADMIN: 'Admin space',\n CATALOG: 'Catalog',\n CUSTOMER: 'Customer',\n CUSTOMER_AREA: 'Customer area',\n CUSTOMERAREA: {\n PRODUCTION: 'Documents',\n RATE: 'Rate',\n },\n DIRECTORY: 'Directory',\n HOME: {\n TITLE: 'Home',\n },\n INVOICE: 'Invoices',\n ITEM: 'Items',\n JOURNAL: 'Journals',\n LABORATORY: 'Laboratories',\n LABORATORY_AREA: 'Prothesist area',\n MANUFACTURER: 'Manufacturers',\n MATERIAL: 'Raw Materials',\n PAYMENT: 'Payments',\n PRODUCTION: 'Production Flows',\n RATE: 'Rates',\n RESOURCE: 'Resources',\n SPONSORSHIP: 'Sponsorship offer',\n SHADE: 'Shades',\n USER: 'User accounts',\n },\n },\n};\n","export const locale = {\n lang: 'fr',\n data: {\n NAV: {\n ADMIN: 'Espace admin',\n CATALOG: 'Catalogue',\n CUSTOMER: 'Clients',\n CUSTOMER_AREA: 'Espace client',\n CUSTOMERAREA: {\n PRODUCTION: 'Documents',\n RATE: 'Tarif',\n },\n DIRECTORY: 'Annuaire',\n HOME: {\n TITLE: 'Accueil',\n },\n INVOICE: 'Factures',\n ITEM: 'Articles',\n JOURNAL: 'Journaux',\n LABORATORY: 'Laboratoires',\n LABORATORY_AREA: 'Espace Laboratoire',\n MANUFACTURER: 'Fabricants',\n MATERIAL: 'Matières premières',\n PAYMENT: 'Règlements',\n PRODUCTION: 'Flux de production',\n RATE: 'Tarifs',\n RESOURCE: 'Ressources',\n SHADE: 'Teintes',\n USER: 'Comptes utilisateurs',\n },\n },\n};\n","export const locale = {\n lang: 'pt',\n data: {\n NAV: {\n ADMIN: 'Área Administrativa',\n CATALOG: 'Catálogo',\n CUSTOMER: 'Clientes',\n CUSTOMER_AREA: 'Área Clientes',\n CUSTOMERAREA: {\n PRODUCTION: 'Documentos',\n RATE: 'Preço',\n },\n DIRECTORY: 'Directorio',\n HOME: {\n TITLE: 'Página inicial',\n },\n INVOICE: 'Faturas',\n ITEM: 'Artigos',\n JOURNAL: 'Jornales',\n LABORATORY: 'Laboratórios',\n LABORATORY_AREA: 'Área Prothesist',\n MANUFACTURER: 'Fabricantes',\n MATERIAL: 'Matéria prima',\n PAYMENT: 'Regulamentos',\n PRODUCTION: 'Fluxo de trabalho',\n RATE: 'Preços',\n RESOURCE: 'Recursos',\n SHADE: 'Cores',\n USER: 'Contas de utilizador',\n },\n },\n};\n","import { Injectable, NgZone } from '@angular/core';\nimport { Datacenter, datadogLogs } from '@datadog/browser-logs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggerService {\n private _env: string;\n private allowLogFlag = false;\n\n public constructor(private _ngZone: NgZone) {}\n\n public debug(msg: string): void {\n // eslint-disable-next-line no-console\n console.debug(msg);\n }\n\n public error(msg: string): void {\n if (this.allowLogFlag) {\n datadogLogs.logger.error(msg);\n }\n console.error(msg);\n }\n\n public info(msg: string): void {\n if (this.allowLogFlag) {\n datadogLogs.logger.info(msg);\n }\n // eslint-disable-next-line no-console\n console.info(msg);\n }\n\n public initialize(env: string): void {\n this._env = env;\n this.allowLogFlag = this._env === 'aws_production' || this._env === 'aws_demo';\n\n this._ngZone.runOutsideAngular(() => {\n if (this.allowLogFlag) {\n console.log(`Initializating Datadog`);\n // definition of the clientToken key inside datadog :\n // https://app.datadoghq.eu/account/settings#api\n datadogLogs.init({\n clientToken: 'puba350e36b0584d9708f3fd2af792a7a74',\n datacenter: Datacenter.EU,\n isCollectingError: true,\n sampleRate: 100,\n });\n\n datadogLogs.setLoggerGlobalContext({ env: this._env });\n console.log(`Datadog initialized`);\n }\n });\n }\n\n public warn(msg: string): void {\n if (this.allowLogFlag) {\n datadogLogs.logger.warn(msg);\n }\n console.warn(msg);\n }\n}\n","import { ApplicationRef, Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemingService implements OnDestroy {\n public currentTheme: string;\n public theme = new BehaviorSubject('theme-default');\n public themes = ['theme-blue-gray-dark', 'theme-default'];\n\n private _mediaQuery: MediaQueryList;\n private _mediaQueryListener: () => void;\n private _subscription: Subscription;\n\n public constructor(private ref: ApplicationRef) {\n this._mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this._mediaQueryListener = () => this.handleMediaQueryChange();\n this._subscription = new Subscription();\n\n // Initially check if dark mode is enabled on the system\n const darkModeOn = this._mediaQuery.matches;\n\n if (darkModeOn) {\n this.currentTheme = 'theme-blue-gray-dark';\n this.theme.next(this.currentTheme);\n }\n\n // Watch for changes of the preference\n if (this._mediaQuery.addEventListener) {\n console.info('ThemingService: Listening to the operating system theme with addEventListener');\n this._subscription.add(this._mediaQuery.addEventListener('change', this._mediaQueryListener));\n } else {\n // Try the deprecated addListener. old versions of Safari doesn't support addEventListener.\n if (this._mediaQuery.addListener) {\n console.info('ThemingService: Listening to the operating system theme with addListener');\n this._subscription.add(this._mediaQuery.addListener(this._mediaQueryListener));\n } else {\n console.warn('ThemingService: This browser does not support listening to changes in the operating system theme.');\n }\n }\n }\n\n public ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\n\n private handleMediaQueryChange(): void {\n const darkModeOn = this._mediaQuery.matches;\n this.currentTheme = darkModeOn ? 'theme-blue-gray-dark' : 'theme-default';\n this.theme.next(this.currentTheme);\n this.ref.tick();\n }\n}\n","import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter, take } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FuseSplashScreenService {\n public player: AnimationPlayer;\n public splashScreenEl: any;\n\n /**\n * Constructor\n *\n * @param {AnimationBuilder} _animationBuilder\n * @param _document\n * @param {Router} _router\n */\n public constructor(private _animationBuilder: AnimationBuilder, @Inject(DOCUMENT) private _document: any, private _router: Router) {\n // Initialize\n this._init();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Hide the splash screen\n */\n public hide(): void {\n this.player = this._animationBuilder\n .build([\n style({ opacity: '1' }),\n animate(\n '400ms ease',\n style({\n opacity: '0',\n zIndex: '-10',\n })\n ),\n ])\n .create(this.splashScreenEl);\n\n setTimeout(() => {\n this.player.play();\n }, 0);\n\n setTimeout(() => {\n this.splashScreenEl.style.display = 'none';\n }, 500);\n }\n\n /**\n * Show the splash screen\n */\n public show(): void {\n this.player = this._animationBuilder\n .build([\n style({\n opacity: '0',\n zIndex: '99999',\n }),\n animate('400ms ease', style({ opacity: '1' })),\n ])\n .create(this.splashScreenEl);\n\n setTimeout(() => {\n this.player.play();\n }, 0);\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Initialize\n *\n * @private\n */\n private _init(): void {\n // Get the splash screen element\n this.splashScreenEl = this._document.body.querySelector('#fuse-splash-screen');\n\n // If the splash screen element exists...\n if (this.splashScreenEl) {\n // Hide it on the first NavigationEnd event\n this._router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n take(1)\n )\n .subscribe(() => {\n setTimeout(() => {\n this.hide();\n });\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport settings from '../../../../settings.json';\nimport { LocalStorageService } from './local-storage.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SettingsService {\n private _currentLanguage: string;\n private _languages: any[];\n\n public constructor(private _localStorageService: LocalStorageService) {\n this._currentLanguage = 'fr';\n this._languages = [\n /*{\n id : 'en',\n title: 'English',\n flag : 'us'\n },*/\n {\n id: 'fr',\n title: 'Français',\n flag: 'fr',\n } /*,\n {\n id : 'pt',\n title: 'português',\n flag : 'pt'\n }*/,\n ];\n }\n\n // https://stackoverflow.com/questions/34907682/how-to-display-the-app-version-in-angular\n public get version(): string {\n return settings.version;\n }\n\n public getDefaultLanguage(): string {\n return 'fr';\n }\n\n public getLanguage(): string {\n const language = this._localStorageService.read('language');\n if (language) {\n this._currentLanguage = language;\n } else {\n this._currentLanguage = this.getDefaultLanguage();\n }\n\n return this._currentLanguage;\n }\n\n public getSupportedLanguageIds(): string[] {\n return this._languages.map((language) => language.id);\n }\n\n public getSupportedLanguages(): any[] {\n return this._languages;\n }\n\n public setLanguage(language: string): void {\n this._localStorageService.write('language', language);\n }\n}\n","\n\n \n \n
    \n \n
    \n
    \n
    \n","import { Component, HostListener, ViewChild } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { Router } from '@angular/router';\nimport { ContextMenuService } from '../context-menu.service';\nimport { ContextMenuLineModel } from '../models/context-menu-line-model';\n\n@Component({\n selector: 'app-context-menu-holder',\n styleUrls: ['./context-menu-holder.component.scss'],\n templateUrl: './context-menu-holder.component.html',\n})\nexport class ContextMenuHolderComponent {\n @ViewChild(MatMenuTrigger) private _contextMenu: MatMenuTrigger;\n public contextMenuLines: ContextMenuLineModel[];\n public contextMenuPosition = { x: '0px', y: '0px' };\n\n public constructor(private _contextMenuService: ContextMenuService, private _router: Router) {\n this._contextMenuService.openContextMenuEvent.subscribe((e: { event: MouseEvent; obj: ContextMenuLineModel[] }) => {\n this.openContextMenuHandler(e.event, e.obj);\n });\n this._contextMenuService.hideContextMenuEvent.subscribe(() => {\n this.closeContextMenu();\n });\n }\n\n public closeContextMenu() {\n this._contextMenuService.contextMenuVisibleFlag = false;\n this.contextMenuLines = [];\n }\n\n public contextMenuLineClickHandler(contextMenuLine: ContextMenuLineModel) {\n if (contextMenuLine.action) {\n contextMenuLine.action();\n }\n }\n\n @HostListener('document:click')\n public documentClickHandler(): void {\n this.closeContextMenu();\n }\n\n @HostListener('window:keydown.escape', ['$event'])\n public keydownEscape(): void {\n this.closeContextMenu();\n }\n\n public openContextMenuHandler(event: MouseEvent, contextMenuLines: ContextMenuLineModel[]) {\n this._contextMenuService.contextMenuVisibleFlag = true;\n this.contextMenuLines = contextMenuLines;\n this.contextMenuPosition.x = event.clientX + 'px';\n this.contextMenuPosition.y = event.clientY + 'px';\n this._contextMenu.menuData = { item: contextMenuLines };\n this._contextMenu.menu.focusFirstItem('mouse');\n this._contextMenu.openMenu();\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { InfoCustomerAreaMessageViewModel } from 'app/shared/prothesis-customer-api-view-models/info-customer-area-message.view-model';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { ConfigurationService } from '../../configuration.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomerAreaMessageService {\n public constructor(protected _configurationService: ConfigurationService, protected _httpClient: HttpClient) {}\n\n protected get _actionUrl(): string {\n return `${this._configurationService.ProthesisCustomerApiAddress}${'/CustomerAreaMessage/'}`;\n }\n\n public getInfoCustomerAreaMessage(): Observable {\n return this._httpClient.get(this._actionUrl);\n }\n}\n","export class HttpHeaderModel {\n public customerAreaMessageEtag: number;\n public laboratoryAreaMessageEtag: number;\n public previousCustomerAreaMessageEtag: number;\n public previousLaboratoryAreaMessageEtag: number;\n\n public constructor(\n customerAreaMessageEtag: number,\n laboratoryAreaMessageEtag: number,\n previousCustomerAreaMessageEtag: number,\n previousLaboratoryAreaMessageEtag: number\n ) {\n this.customerAreaMessageEtag = customerAreaMessageEtag;\n this.laboratoryAreaMessageEtag = laboratoryAreaMessageEtag;\n this.previousCustomerAreaMessageEtag = previousCustomerAreaMessageEtag;\n this.previousLaboratoryAreaMessageEtag = previousLaboratoryAreaMessageEtag;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ConvertHelper } from 'app/shared/helpers/convert-helper';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { HttpHeaderModel } from './http-header-model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HttpHeaderService {\n private _httpHeader: HttpHeaderModel;\n private _onHttpHeaderChanged: BehaviorSubject;\n private _previousCustomerAreaMessageEtag: number;\n private _previousLaboratoryAreaMessageEtag: number;\n\n public constructor() {\n this._onHttpHeaderChanged = new BehaviorSubject(null);\n }\n\n public get onHttpHeaderChanged(): Observable {\n return this._onHttpHeaderChanged.asObservable();\n }\n\n public getHttpHeader(): HttpHeaderModel {\n return this._httpHeader;\n }\n\n public setHttpHeaderInfo(customerAreaMessageEtag: string, laboratoryAreaMessageEtag: string): void {\n const customerAreaMessageEtagNumber = ConvertHelper.toNumber(customerAreaMessageEtag);\n const laboratoryAreaMessageEtagNumber = ConvertHelper.toNumber(laboratoryAreaMessageEtag);\n const hasChangedFlag =\n customerAreaMessageEtagNumber !== this._previousCustomerAreaMessageEtag ||\n laboratoryAreaMessageEtagNumber !== this._previousLaboratoryAreaMessageEtag;\n\n if (!this._httpHeader || hasChangedFlag) {\n this._httpHeader = new HttpHeaderModel(\n customerAreaMessageEtagNumber,\n laboratoryAreaMessageEtagNumber,\n this._previousCustomerAreaMessageEtag,\n this._previousLaboratoryAreaMessageEtag\n );\n\n this._previousCustomerAreaMessageEtag = customerAreaMessageEtagNumber;\n this._previousLaboratoryAreaMessageEtag = laboratoryAreaMessageEtagNumber;\n\n this._onHttpHeaderChanged.next(this._httpHeader);\n }\n }\n}\n","
    \n \n Message espaces clients\n \n \n {{ text }}\n {{ textLink }}\n \n close\n \n \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { HttpHeaderModel } from 'app/core/services/http-header-model';\nimport { HttpHeaderService } from 'app/core/services/http-header.service';\nimport { LocalStorageService } from 'app/core/services/local-storage.service';\nimport { CustomerAreaMessageService } from 'app/core/services/prothesis-customer-api/pub/customer-area-message.service';\nimport { Area } from 'app/shared/enums/area.enum';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-customer-area-message-banner',\n styleUrls: ['./customer-area-message-banner.component.scss'],\n templateUrl: './customer-area-message-banner.component.html',\n})\nexport class CustomerAreaMessageBannerComponent implements OnInit {\n public static strKeyCustomerAreaMessageClosed = 'customer-area-message-closed';\n public customerAreaMessageClosed: number;\n public displayFlag: boolean;\n public etag: number;\n public etagFromHttpHeader: number;\n public getInfoCustomerAreaMessageScheduled = false;\n public isAdminOrSuperAdminFlag = false;\n public link: string;\n public style: string;\n public text: string;\n public textLink: string;\n\n private _unsubscribeAll: Subject;\n\n public constructor(\n private _authService: AuthService,\n private _changeDetectorRef: ChangeDetectorRef,\n private _customerAreamessageService: CustomerAreaMessageService,\n private _httpHeaderService: HttpHeaderService,\n private _localStorageService: LocalStorageService\n ) {\n this._unsubscribeAll = new Subject();\n }\n\n public close(): void {\n this.displayFlag = false;\n this._localStorageService.write(CustomerAreaMessageBannerComponent.strKeyCustomerAreaMessageClosed, this.etagFromHttpHeader);\n }\n\n public ngOnInit(): void {\n this._authService.isDoneLoading$.pipe(takeUntil(this._unsubscribeAll)).subscribe((isDoneLoadingFlag) => {\n this._httpHeaderService.onHttpHeaderChanged.pipe(takeUntil(this._unsubscribeAll)).subscribe((httpHeaderModel: HttpHeaderModel) => {\n if (isDoneLoadingFlag) {\n this.isAdminOrSuperAdminFlag = this._authService.isAdminOrSuperAdminFlag;\n this.customerAreaMessageClosed = Number(\n this._localStorageService.read(CustomerAreaMessageBannerComponent.strKeyCustomerAreaMessageClosed)\n );\n this.etagFromHttpHeader = httpHeaderModel?.customerAreaMessageEtag;\n this.displayFlag =\n this.etagFromHttpHeader !== null &&\n this.etagFromHttpHeader !== undefined &&\n this.etagFromHttpHeader !== this.customerAreaMessageClosed &&\n (this._authService.area === Area.Customer || this._authService.area === Area.Admin || this._authService.area === Area.NoArea);\n\n if (this.etagFromHttpHeader === undefined || this.etagFromHttpHeader === null) {\n this.etag = null;\n this.link = null;\n this.style = null;\n this.text = null;\n this.textLink = null;\n } else if (this.etagFromHttpHeader !== httpHeaderModel?.previousCustomerAreaMessageEtag) {\n if (!this.getInfoCustomerAreaMessageScheduled) {\n this.getInfoCustomerAreaMessageScheduled = true;\n this.text = 'Un message est en cours de chargement...';\n setTimeout(() => {\n this._customerAreamessageService.getInfoCustomerAreaMessage().subscribe((res) => {\n this.etag = res.etag;\n this.link = res.link;\n this.style = res.style;\n this.text = res.text;\n this.textLink = res.textLink;\n\n this.getInfoCustomerAreaMessageScheduled = false;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }, 1000);\n }\n }\n }\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MediaChange, MediaObserver } from '@angular/flex-layout';\nimport { BehaviorSubject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FuseMatchMediaService {\n public activeMediaQuery: string;\n public onMediaChange: BehaviorSubject = new BehaviorSubject('');\n\n /**\n * Constructor\n *\n * @param {ObservableMedia} _observableMedia\n */\n public constructor(private _mediaObserver: MediaObserver) {\n // Set the defaults\n this.activeMediaQuery = '';\n\n // Initialize\n this._init();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Initialize\n *\n * @private\n */\n private _init(): void {\n this._mediaObserver\n .asObservable()\n .pipe(debounceTime(500), distinctUntilChanged())\n .subscribe((change: MediaChange[]) => {\n if (this.activeMediaQuery !== change[0].mqAlias) {\n this.activeMediaQuery = change[0].mqAlias;\n this.onMediaChange.next(change[0].mqAlias);\n }\n });\n }\n}\n","import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MediaObserver } from '@angular/flex-layout';\nimport { FuseConfigService } from '@fuse/services/config.service';\nimport { FuseMatchMediaService } from '@fuse/services/match-media.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FuseSidebarService } from './sidebar.service';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'fuse-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class FuseSidebarComponent implements OnInit, OnDestroy {\n @HostBinding('class.animations-enabled')\n public animationsEnabled: boolean;\n\n // Folded auto trigger on hover\n @Input()\n public foldedAutoTriggerOnHover: boolean;\n\n // Folded changed\n @Output()\n public foldedChanged: EventEmitter;\n\n // Folded width\n @Input()\n public foldedWidth: number;\n\n // Invisible overlay\n @Input()\n public invisibleOverlay: boolean;\n\n // isLockedOpen\n @HostBinding('class.locked-open')\n public isLockedOpen: boolean;\n\n // Key\n @Input()\n public key: string;\n\n // Locked Open\n @Input()\n public lockedOpen: string;\n\n // Name\n @Input()\n public name: string;\n\n // Open\n @HostBinding('class.open')\n public opened: boolean;\n\n // Opened changed\n @Output()\n public openedChanged: EventEmitter;\n\n // Position\n @Input()\n public position: 'left' | 'right';\n\n // Show backdrop flag when sidebar is opened\n @Input()\n public showBackdropFlag = true;\n\n // Folded unfolded\n @HostBinding('class.unfolded')\n public unfolded: boolean;\n\n // Save last unfolded state\n public wasUnfolded: boolean;\n\n // Private\n private _backdrop: HTMLElement | null = null;\n private _folded: boolean;\n private _player: AnimationPlayer;\n private _unsubscribeAll: Subject;\n private _wasActive: boolean;\n private _wasFolded: boolean;\n\n /**\n * Constructor\n *\n * @param {AnimationBuilder} _animationBuilder\n * @param {ChangeDetectorRef} _changeDetectorRef\n * @param {ElementRef} _elementRef\n * @param {FuseConfigService} _fuseConfigService\n * @param {FuseMatchMediaService} _fuseMatchMediaService\n * @param {FuseSidebarService} _fuseSidebarService\n * @param {MediaObserver} _mediaObserver\n * @param {Renderer2} _renderer\n */\n public constructor(\n private _animationBuilder: AnimationBuilder,\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef,\n private _fuseConfigService: FuseConfigService,\n private _fuseMatchMediaService: FuseMatchMediaService,\n private _fuseSidebarService: FuseSidebarService,\n private _mediaObserver: MediaObserver,\n private _renderer: Renderer2\n ) {\n // Set the defaults\n this.foldedAutoTriggerOnHover = true;\n this.foldedWidth = 64;\n this.foldedChanged = new EventEmitter();\n this.openedChanged = new EventEmitter();\n this.opened = false;\n this.position = 'left';\n this.invisibleOverlay = false;\n\n // Set the private defaults\n this.animationsEnabled = false;\n this._folded = false;\n this._unsubscribeAll = new Subject();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Folded\n *\n * @param {boolean} value\n */\n @Input()\n public set folded(value: boolean) {\n // Set the folded\n this._folded = value;\n\n // Return if the sidebar is closed\n if (!this.opened) {\n return;\n }\n\n // Programmatically add/remove padding to the element\n // that comes after or before based on the position\n let sibling: Element;\n let styleRule: string;\n\n const styleValue = this.foldedWidth + 'px';\n\n // Get the sibling and set the style rule\n if (this.position === 'left') {\n sibling = this._elementRef.nativeElement.nextElementSibling;\n styleRule = 'padding-left';\n } else {\n sibling = this._elementRef.nativeElement.previousElementSibling;\n styleRule = 'padding-right';\n }\n\n // If there is no sibling, return...\n if (!sibling) {\n return;\n }\n\n // If folded...\n if (value) {\n // Fold the sidebar\n this.fold();\n\n // Set the folded width\n this._renderer.setStyle(this._elementRef.nativeElement, 'width', styleValue);\n this._renderer.setStyle(this._elementRef.nativeElement, 'min-width', styleValue);\n this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);\n\n // Set the style and class\n this._renderer.setStyle(sibling, styleRule, styleValue);\n this._renderer.addClass(this._elementRef.nativeElement, 'folded');\n }\n // If unfolded...\n else {\n // Unfold the sidebar\n this.unfold();\n\n // Remove the folded width\n this._renderer.removeStyle(this._elementRef.nativeElement, 'width');\n this._renderer.removeStyle(this._elementRef.nativeElement, 'min-width');\n this._renderer.removeStyle(this._elementRef.nativeElement, 'max-width');\n\n // Remove the style and class\n this._renderer.removeStyle(sibling, styleRule);\n this._renderer.removeClass(this._elementRef.nativeElement, 'folded');\n }\n\n // Emit the 'foldedChanged' event\n this.foldedChanged.emit(this.folded);\n }\n\n public get folded(): boolean {\n return this._folded;\n }\n\n /**\n * Close the sidebar\n */\n public close(): void {\n if (!this.opened || this.isLockedOpen) {\n return;\n }\n\n // Enable the animations\n this._enableAnimations();\n\n // Hide the backdrop\n this._hideBackdrop();\n\n // Set the opened status\n this.opened = false;\n\n // Emit the 'openedChanged' event\n this.openedChanged.emit(this.opened);\n\n // Hide the sidebar\n this._hideSidebar();\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Fold the sidebar permanently\n */\n public fold(): void {\n // Only work if the sidebar is not folded\n if (this.folded) {\n return;\n }\n\n // Enable the animations\n this._enableAnimations();\n\n // Fold\n this.folded = true;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Fold the temporarily unfolded sidebar back\n */\n public foldTemporarily(): void {\n // Only work if the sidebar is folded\n if (!this.folded) {\n return;\n }\n\n // Enable the animations\n this._enableAnimations();\n\n // reset last unfolded state\n this.wasUnfolded = true;\n\n // Fold the sidebar back\n this.unfolded = false;\n\n // Set the folded width\n const styleValue = this.foldedWidth + 'px';\n\n this._renderer.setStyle(this._elementRef.nativeElement, 'width', styleValue);\n this._renderer.setStyle(this._elementRef.nativeElement, 'min-width', styleValue);\n this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // If the sidebar is folded, unfold it to revert modifications\n if (this.folded) {\n this.unfold();\n }\n\n // Unregister the sidebar\n this._fuseSidebarService.unregister(this.name);\n\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Subscribe to config changes\n this._fuseConfigService.config.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {});\n\n // Register the sidebar\n this._fuseSidebarService.register(this.name, this);\n\n // Setup visibility\n this._setupVisibility();\n\n // Setup position\n this._setupPosition();\n\n // Setup lockedOpen\n this._setupLockedOpen();\n\n // Setup folded\n this._setupFolded();\n }\n\n /**\n * Mouseenter\n */\n @HostListener('mouseenter')\n public onMouseEnter(): void {\n // Only work if the auto trigger is enabled\n if (!this.foldedAutoTriggerOnHover) {\n return;\n }\n\n this.unfoldTemporarily();\n }\n\n /**\n * Mouseleave\n */\n @HostListener('mouseleave')\n public onMouseLeave(): void {\n // Only work if the auto trigger is enabled\n if (!this.foldedAutoTriggerOnHover) {\n return;\n }\n\n this.foldTemporarily();\n }\n\n /**\n * Open the sidebar\n */\n public open(): void {\n if (this.opened || this.isLockedOpen) {\n return;\n }\n\n // Enable the animations\n this._enableAnimations();\n\n // Show the sidebar\n this._showSidebar();\n\n // Show the backdrop\n if (this.showBackdropFlag) {\n this._showBackdrop();\n }\n\n // Set the opened status\n this.opened = true;\n\n // Emit the 'openedChanged' event\n this.openedChanged.emit(this.opened);\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n public toggleCloseOnly(): void {\n if (this.opened) {\n this.close();\n }\n }\n\n /**\n * Toggle the sidebar fold/unfold permanently\n */\n public toggleFold(): void {\n if (this.folded) {\n this.unfold();\n } else {\n this.fold();\n }\n }\n\n /**\n * Toggle open/close the sidebar\n */\n public toggleOpen(): void {\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n public toggleOpenOnly(): void {\n if (!this.opened) {\n this.open();\n }\n }\n\n /**\n * Force unfoldTemporarily on touchEnd\n */\n public touchUnfoldTemporarily(touchUnfold: boolean): void {\n // Only work if the auto trigger is enabled\n if (!this.foldedAutoTriggerOnHover) {\n return;\n }\n\n if (touchUnfold) {\n this.unfoldTemporarily(true);\n } else {\n this.foldTemporarily();\n }\n }\n\n /**\n * Unfold the sidebar permanently\n */\n public unfold(): void {\n // Only work if the sidebar is folded\n if (!this.folded) {\n return;\n }\n\n // Enable the animations\n this._enableAnimations();\n\n // Unfold\n this.folded = false;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Unfold the sidebar temporarily\n */\n public unfoldTemporarily(saveUnfoldedState = false): void {\n // Only work if the sidebar is folded\n if (!this.folded) {\n return;\n }\n\n // Enable the animations\n this._enableAnimations();\n\n if (saveUnfoldedState) {\n // Save last unfolded state\n this.wasUnfolded = this.unfolded;\n }\n\n // Unfold the sidebar temporarily\n this.unfolded = true;\n\n // Remove the folded width\n this._renderer.removeStyle(this._elementRef.nativeElement, 'width');\n this._renderer.removeStyle(this._elementRef.nativeElement, 'min-width');\n this._renderer.removeStyle(this._elementRef.nativeElement, 'max-width');\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Enable the animations\n *\n * @private\n */\n private _enableAnimations(): void {\n // Return if animations already enabled\n if (this.animationsEnabled) {\n return;\n }\n\n // Enable the animations\n this.animationsEnabled = true;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Hide the backdrop\n *\n * @private\n */\n private _hideBackdrop(): void {\n if (!this._backdrop) {\n return;\n }\n\n // Create the leave animation and attach it to the player\n this._player = this._animationBuilder.build([animate('300ms ease', style({ opacity: 0 }))]).create(this._backdrop);\n\n // Play the animation\n this._player.play();\n\n // Once the animation is done...\n this._player.onDone(() => {\n // If the backdrop still exists...\n if (this._backdrop) {\n // Remove the backdrop\n this._backdrop.parentNode.removeChild(this._backdrop);\n this._backdrop = null;\n }\n });\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Change some properties of the sidebar\n * and make it invisible\n *\n * @private\n */\n private _hideSidebar(delay = true): void {\n const delayAmount = delay ? 300 : 0;\n\n // Add a delay so close animation can play\n setTimeout(() => {\n // Remove the box-shadow\n this._renderer.setStyle(this._elementRef.nativeElement, 'box-shadow', 'none');\n\n // Make the sidebar invisible\n this._renderer.setStyle(this._elementRef.nativeElement, 'visibility', 'hidden');\n this._renderer.setStyle(this._elementRef.nativeElement, 'width', '0px');\n this._renderer.setStyle(this._elementRef.nativeElement, 'min-width', '0px');\n this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', '0px');\n }, delayAmount);\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Setup the initial folded status\n *\n * @private\n */\n private _setupFolded(): void {\n // Return, if sidebar is not folded\n if (!this.folded) {\n return;\n }\n\n // Return if the sidebar is closed\n if (!this.opened) {\n return;\n }\n\n // Programmatically add/remove padding to the element\n // that comes after or before based on the position\n let sibling: Element;\n let styleRule: string;\n\n const styleValue = this.foldedWidth + 'px';\n\n // Get the sibling and set the style rule\n if (this.position === 'left') {\n sibling = this._elementRef.nativeElement.nextElementSibling;\n styleRule = 'padding-left';\n } else {\n sibling = this._elementRef.nativeElement.previousElementSibling;\n styleRule = 'padding-right';\n }\n\n // If there is no sibling, return...\n if (!sibling) {\n return;\n }\n\n // Fold the sidebar\n this.fold();\n\n // Set the folded width\n this._renderer.setStyle(this._elementRef.nativeElement, 'width', styleValue);\n this._renderer.setStyle(this._elementRef.nativeElement, 'min-width', styleValue);\n this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);\n\n // Set the style and class\n this._renderer.setStyle(sibling, styleRule, styleValue);\n this._renderer.addClass(this._elementRef.nativeElement, 'folded');\n }\n\n /**\n * Setup the lockedOpen handler\n *\n * @private\n */\n private _setupLockedOpen(): void {\n // Return if the lockedOpen wasn't set\n if (!this.lockedOpen) {\n // Return\n return;\n }\n\n // Set the wasActive for the first time\n this._wasActive = false;\n\n // Set the wasFolded\n this._wasFolded = this.folded;\n\n // Show the sidebar\n this._showSidebar();\n\n // Act on every media change\n this._fuseMatchMediaService.onMediaChange.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {\n // Get the active status\n const isActive = this._mediaObserver.isActive(this.lockedOpen);\n\n // If the both status are the same, don't act\n if (this._wasActive === isActive) {\n return;\n }\n\n // Activate the lockedOpen\n if (isActive) {\n // Set the lockedOpen status\n this.isLockedOpen = true;\n\n // Show the sidebar\n this._showSidebar();\n\n // Force the the opened status to true\n this.opened = true;\n\n // Emit the 'openedChanged' event\n this.openedChanged.emit(this.opened);\n\n // If the sidebar was folded, forcefully fold it again\n if (this._wasFolded) {\n // Enable the animations\n this._enableAnimations();\n\n // Fold\n this.folded = true;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n // Hide the backdrop if any exists\n this._hideBackdrop();\n }\n // De-Activate the lockedOpen\n else {\n // Set the lockedOpen status\n this.isLockedOpen = false;\n\n // Unfold the sidebar in case if it was folded\n this.unfold();\n\n // Force the the opened status to close\n this.opened = false;\n\n // Emit the 'openedChanged' event\n this.openedChanged.emit(this.opened);\n\n // Hide the sidebar\n this._hideSidebar();\n }\n\n // Store the new active status\n this._wasActive = isActive;\n });\n }\n\n /**\n * Setup the sidebar position\n *\n * @private\n */\n private _setupPosition(): void {\n // Add the correct class name to the sidebar\n // element depending on the position attribute\n if (this.position === 'right') {\n this._renderer.addClass(this._elementRef.nativeElement, 'right-positioned');\n } else {\n this._renderer.addClass(this._elementRef.nativeElement, 'left-positioned');\n }\n }\n\n /**\n * Setup the visibility of the sidebar\n *\n * @private\n */\n private _setupVisibility(): void {\n // Remove the existing box-shadow\n this._renderer.setStyle(this._elementRef.nativeElement, 'box-shadow', 'none');\n\n // Make the sidebar invisible\n this._renderer.setStyle(this._elementRef.nativeElement, 'visibility', 'hidden');\n this._renderer.setStyle(this._elementRef.nativeElement, 'width', '0px');\n this._renderer.setStyle(this._elementRef.nativeElement, 'min-width', '0px');\n this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', '0px');\n }\n\n /**\n * Show the backdrop\n *\n * @private\n */\n private _showBackdrop(): void {\n // Create the backdrop element\n this._backdrop = this._renderer.createElement('div');\n\n // Add a class to the backdrop element\n this._backdrop.classList.add('fuse-sidebar-overlay');\n\n // Add a class depending on the invisibleOverlay option\n if (this.invisibleOverlay) {\n this._backdrop.classList.add('fuse-sidebar-overlay-invisible');\n }\n\n // Append the backdrop to the parent of the sidebar\n this._renderer.appendChild(this._elementRef.nativeElement.parentElement, this._backdrop);\n\n // Create the enter animation and attach it to the player\n this._player = this._animationBuilder.build([animate('300ms ease', style({ opacity: 1 }))]).create(this._backdrop);\n\n // Play the animation\n this._player.play();\n\n // Add an event listener to the overlay\n this._backdrop.addEventListener('click', () => {\n this.close();\n });\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Change some properties of the sidebar\n * and make it visible\n *\n * @private\n */\n private _showSidebar(): void {\n // Remove the box-shadow style\n this._renderer.removeStyle(this._elementRef.nativeElement, 'box-shadow');\n\n // Make the sidebar invisible\n this._renderer.removeStyle(this._elementRef.nativeElement, 'visibility');\n this._renderer.removeStyle(this._elementRef.nativeElement, 'width');\n this._renderer.removeStyle(this._elementRef.nativeElement, 'min-width');\n this._renderer.removeStyle(this._elementRef.nativeElement, 'max-width');\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n}\n","\n","\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-content',\n styleUrls: ['./content.component.scss'],\n templateUrl: './content.component.html',\n})\nexport class ContentComponent {}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-footer',\n styleUrls: ['./footer.component.scss'],\n templateUrl: './footer.component.html',\n})\nexport class FooterComponent {}\n","\n\n \n\n\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { InfoLaboratoryAreaMessageViewModel } from 'app/shared/prothesis-api-view-models/info-laboratory-area-message.view-model';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { ConfigurationService } from '../../configuration.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LaboratoryAreaMessageService {\n public constructor(protected _configurationService: ConfigurationService, protected _httpClient: HttpClient) {}\n\n protected get _actionUrl(): string {\n return `${this._configurationService.ProthesisApiAddress}${'/LaboratoryAreaMessage/'}`;\n }\n\n public getInfoLaboratoryAreaMessage(): Observable {\n return this._httpClient.get(this._actionUrl);\n }\n}\n","
    \n \n Message espaces laboratoires\n \n \n {{ text }}\n {{ textLink }}\n \n close\n \n \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { HttpHeaderModel } from 'app/core/services/http-header-model';\nimport { HttpHeaderService } from 'app/core/services/http-header.service';\nimport { LocalStorageService } from 'app/core/services/local-storage.service';\nimport { LaboratoryAreaMessageService } from 'app/core/services/prothesis-api/pub/laboratory-area-message.service';\nimport { Area } from 'app/shared/enums/area.enum';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-laboratory-area-message-banner',\n styleUrls: ['./laboratory-area-message-banner.component.scss'],\n templateUrl: './laboratory-area-message-banner.component.html',\n})\nexport class LaboratoryAreaMessageBannerComponent implements OnInit {\n public static strKeyLaboratoryAreaMessageClosed = 'laboratory-area-message-closed';\n public displayFlag: boolean;\n public etag: number;\n public etagFromHttpHeader: number;\n public getInfoLaboratoryAreaMessageScheduled = false;\n public isAdminOrSuperAdminFlag = false;\n public laboratoryAreaMessageClosed: number;\n public link: string;\n public style: string;\n public text: string;\n public textLink: string;\n\n private _unsubscribeAll: Subject;\n\n public constructor(\n private _authService: AuthService,\n private _changeDetectorRef: ChangeDetectorRef,\n private _httpHeaderService: HttpHeaderService,\n private _laboratoryAreamessageService: LaboratoryAreaMessageService,\n private _localStorageService: LocalStorageService\n ) {\n this._unsubscribeAll = new Subject();\n }\n\n public close(): void {\n this.displayFlag = false;\n this._localStorageService.write(LaboratoryAreaMessageBannerComponent.strKeyLaboratoryAreaMessageClosed, this.etagFromHttpHeader);\n }\n\n public ngOnInit(): void {\n this._authService.isDoneLoading$.pipe(takeUntil(this._unsubscribeAll)).subscribe((isDoneLoadingFlag) => {\n this._httpHeaderService.onHttpHeaderChanged.pipe(takeUntil(this._unsubscribeAll)).subscribe((httpHeaderModel: HttpHeaderModel) => {\n if (isDoneLoadingFlag) {\n this.isAdminOrSuperAdminFlag = this._authService.isAdminOrSuperAdminFlag;\n this.laboratoryAreaMessageClosed = Number(\n this._localStorageService.read(LaboratoryAreaMessageBannerComponent.strKeyLaboratoryAreaMessageClosed)\n );\n this.etagFromHttpHeader = httpHeaderModel?.laboratoryAreaMessageEtag;\n this.displayFlag =\n this.etagFromHttpHeader !== null &&\n this.etagFromHttpHeader !== undefined &&\n this.etagFromHttpHeader !== this.laboratoryAreaMessageClosed &&\n (this._authService.area === Area.Laboratory || this._authService.area === Area.Admin || this._authService.area === Area.NoArea);\n\n if (this.etagFromHttpHeader === undefined || this.etagFromHttpHeader === null) {\n this.etag = null;\n this.link = null;\n this.style = null;\n this.text = null;\n this.textLink = null;\n } else if (this.etagFromHttpHeader !== httpHeaderModel?.previousLaboratoryAreaMessageEtag) {\n if (!this.getInfoLaboratoryAreaMessageScheduled) {\n this.getInfoLaboratoryAreaMessageScheduled = true;\n this.text = 'Un message est en cours de chargement...';\n setTimeout(() => {\n this._laboratoryAreamessageService.getInfoLaboratoryAreaMessage().subscribe((res) => {\n this.etag = res.etag;\n this.link = res.link;\n this.style = res.style;\n this.text = res.text;\n this.textLink = res.textLink;\n\n this.getInfoLaboratoryAreaMessageScheduled = false;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }, 1000);\n }\n }\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n });\n });\n }\n}\n","\n
    \n
    {{ item.text2 }}
    \n
    \n \n {{ item.text }}\n
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { NavigationItemInterface } from '../models/navigation-item-interface';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-nav-group',\n styleUrls: ['./nav-group.component.scss'],\n templateUrl: './nav-group.component.html',\n})\nexport class NavGroupComponent implements OnInit, OnDestroy {\n @HostBinding('class') public classes = 'nav-group nav-item';\n @Input() public item: NavigationItemInterface;\n\n private _unsubscribeAll: Subject;\n\n public constructor(private _changeDetectorRef: ChangeDetectorRef, private _fuseNavigationService: FuseNavigationService) {\n // Set the private defaults\n this._unsubscribeAll = new Subject();\n }\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n public ngOnInit(): void {\n // Subscribe to navigation item\n merge(\n this._fuseNavigationService.onNavigationItemAdded,\n this._fuseNavigationService.onNavigationItemUpdated,\n this._fuseNavigationService.onNavigationItemRemoved\n )\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\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 {{ item.icon }}\n \n {{ item.text }}\n \n {{ item.badge.title }}\n \n \n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { NavigationItemInterface } from '../models/navigation-item-interface';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-nav-item',\n styleUrls: ['./nav-item.component.scss'],\n templateUrl: './nav-item.component.html',\n})\nexport class NavItemComponent implements OnInit, OnDestroy {\n @HostBinding('class') public classes = 'nav-item';\n @Input() public item: NavigationItemInterface;\n\n private _unsubscribeAll: Subject;\n\n public constructor(private _changeDetectorRef: ChangeDetectorRef, private _fuseNavigationService: FuseNavigationService) {\n // Set the private defaults\n this._unsubscribeAll = new Subject();\n }\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n public ngOnInit(): void {\n // Subscribe to navigation item\n merge(\n this._fuseNavigationService.onNavigationItemAdded,\n this._fuseNavigationService.onNavigationItemUpdated,\n this._fuseNavigationService.onNavigationItemRemoved\n )\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\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 {{ item.icon }}\n \n {{ item.text }}\n \n {{ item.badge.title }}\n \n keyboard_arrow_right\n \n\n
    \n \n \n \n \n \n
    \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, OnDestroy, OnInit } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { fuseAnimations } from '@fuse/animations';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';\n\nimport { merge, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { NavigationItemInterface } from '../models/navigation-item-interface';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-nav-collapsable',\n templateUrl: './nav-collapsable.component.html',\n styleUrls: ['./nav-collapsable.component.scss'],\n animations: fuseAnimations,\n})\nexport class NavCollapsableComponent implements OnInit, OnDestroy {\n @HostBinding('class')\n public classes = 'nav-collapsable nav-item';\n\n @HostBinding('class.open')\n public isOpen = false;\n\n @Input()\n public item: NavigationItemInterface;\n\n // Private\n private _unsubscribeAll: Subject;\n\n /**\n * Constructor\n *\n * @param {ChangeDetectorRef} _changeDetectorRef\n * @param {FuseNavigationService} _fuseNavigationService\n * @param {Router} _router\n */\n public constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _fuseNavigationService: FuseNavigationService,\n private _fuseSidebarService: FuseSidebarService,\n private _router: Router\n ) {\n // Set the private defaults\n this._unsubscribeAll = new Subject();\n }\n\n /**\n * Collapse the collapsable navigation\n */\n public collapse(): void {\n if (!this.isOpen) {\n return;\n }\n\n this.isOpen = false;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n this._fuseNavigationService.onItemCollapseToggled.next();\n }\n\n /**\n * Expand the collapsable navigation\n */\n public expand(): void {\n if (this.isOpen) {\n return;\n }\n\n this.isOpen = true;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n this._fuseNavigationService.onItemCollapseToggled.next();\n }\n\n /**\n * Check if the given parent has the\n * given item in one of its children\n *\n * @param parent\n * @param item\n * @returns {boolean}\n */\n public isChildrenOf(parent, item): boolean {\n const children = parent.children;\n\n if (!children) {\n return false;\n }\n\n if (children.indexOf(item) > -1) {\n return true;\n }\n\n for (const child of children) {\n if (child.children) {\n if (this.isChildrenOf(child, item)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Check if the given url can be found\n * in one of the given parent's children\n *\n * @param parent\n * @param url\n * @returns {boolean}\n */\n public isUrlInChildren(parent, url): boolean {\n const children = parent.children;\n\n if (!children) {\n return false;\n }\n\n for (const child of children) {\n if (child.children) {\n if (this.isUrlInChildren(child, url)) {\n return true;\n }\n }\n\n if (child.url === url || url.includes(child.url)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Listen for router events\n this._router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe((event: NavigationEnd) => {\n // Check if the url can be found in\n // one of the children of this item\n if (this.isUrlInChildren(this.item, event.urlAfterRedirects)) {\n this.expand();\n } else {\n this.collapse();\n }\n });\n\n // Listen for collapsing of any navigation item\n this._fuseNavigationService.onItemCollapsed.pipe(takeUntil(this._unsubscribeAll)).subscribe((clickedItem) => {\n if (clickedItem && clickedItem.children) {\n // Check if the clicked item is one\n // of the children of this item\n if (this.isChildrenOf(this.item, clickedItem)) {\n return;\n }\n\n // Check if the url can be found in\n // one of the children of this item\n if (this.isUrlInChildren(this.item, this._router.url)) {\n return;\n }\n\n // If the clicked item is not this item, collapse...\n if (this.item !== clickedItem) {\n this.collapse();\n }\n }\n });\n\n // Check if the url can be found in\n // one of the children of this item\n if (this.isUrlInChildren(this.item, this._router.url)) {\n this.expand();\n } else {\n this.collapse();\n }\n\n // Subscribe to navigation item\n merge(\n this._fuseNavigationService.onNavigationItemAdded,\n this._fuseNavigationService.onNavigationItemUpdated,\n this._fuseNavigationService.onNavigationItemRemoved\n )\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * Toggle collapse\n *\n * @param ev\n */\n public toggleOpen(ev): void {\n ev.preventDefault();\n\n // If the collapsable component is already opened, and the sidebar folded and is opening,\n // the collapsable component doesn't need to toggle\n if (this.isOpen && this._fuseSidebarService.getSidebar('navbar').folded && !this._fuseSidebarService.getSidebar('navbar').wasUnfolded) {\n return;\n }\n\n this.isOpen = !this.isOpen;\n\n // Navigation collapse toggled...\n this._fuseNavigationService.onItemCollapsed.next(this.item);\n this._fuseNavigationService.onItemCollapseToggled.next();\n }\n}\n","export class CustomerTenantModel {\n public code: string;\n public customerGroupFlag: boolean;\n public customerGroupName: string;\n public laboratoryName: string;\n public name: string;\n public uuid: string;\n}\n","export class LaboratoryTenantModel {\n public code: string;\n public demoModeFlag: boolean;\n public name: string;\n public tzDatabaseName: string;\n public uuid: string;\n}\n","import { CustomerTenantModel } from 'app/shared/components/pickers/customer-tenant-picker/models/customer-tenant-model';\nimport { LaboratoryTenantModel } from 'app/shared/components/pickers/laboratory-tenant-picker/models/laboratory-tenant-model';\n\nexport class TenantSelectorModel {\n public customerTenant: CustomerTenantModel;\n public displayCustomerTenantPickerFlag = false;\n public displayLaboratoryTenantPickerFlag = false;\n public laboratoryTenant: LaboratoryTenantModel;\n}\n","import { InfoCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/info-customer.view-model';\nimport { ReadAllowedCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/read-allowed-customer.view-model';\nimport { CustomerTenantModel } from '../models/customer-tenant-model';\n\nexport class CustomerTenantModelHelper {\n public static fromInfoCustomerViewModel(viewModels: InfoCustomerViewModel[]): Array {\n const models = new Array();\n viewModels.forEach((viewModel) => {\n const model = this._createModelFromInfoCustomerViewModel(viewModel);\n models.push(model);\n });\n\n return models;\n }\n\n public static fromInfoCustomerViewModelSingle(viewModel: InfoCustomerViewModel): CustomerTenantModel {\n return this._createModelFromInfoCustomerViewModel(viewModel);\n }\n\n public static fromReadAllowedCustomerViewModel(viewModels: ReadAllowedCustomerViewModel[]): Array {\n const models = new Array();\n viewModels.forEach((viewModel) => {\n const model = this._createModelFromReadAllowedCustomerViewModel(viewModel);\n models.push(model);\n });\n\n return models;\n }\n\n public static fromReadAllowedCustomerViewModelSingle(viewModel: ReadAllowedCustomerViewModel): CustomerTenantModel {\n return this._createModelFromReadAllowedCustomerViewModel(viewModel);\n }\n\n private static _createModelFromInfoCustomerViewModel(infoCustomerViewModel: InfoCustomerViewModel): CustomerTenantModel {\n const customerTenant = new CustomerTenantModel();\n customerTenant.code = infoCustomerViewModel.code;\n customerTenant.customerGroupFlag = infoCustomerViewModel.customerGroupFlag;\n customerTenant.customerGroupName = infoCustomerViewModel.customerGroupName;\n customerTenant.laboratoryName = infoCustomerViewModel.laboratoryName;\n customerTenant.name = infoCustomerViewModel.name;\n customerTenant.uuid = infoCustomerViewModel.uuid;\n return customerTenant;\n }\n\n private static _createModelFromReadAllowedCustomerViewModel(\n readAllowedCustomerViewModel: ReadAllowedCustomerViewModel\n ): CustomerTenantModel {\n const customerTenant = new CustomerTenantModel();\n customerTenant.code = readAllowedCustomerViewModel.code;\n customerTenant.customerGroupFlag = readAllowedCustomerViewModel.customerGroupFlag;\n customerTenant.customerGroupName = readAllowedCustomerViewModel.customerGroupName;\n customerTenant.laboratoryName = readAllowedCustomerViewModel.laboratoryName;\n customerTenant.name = readAllowedCustomerViewModel.name;\n customerTenant.uuid = readAllowedCustomerViewModel.uuid;\n return customerTenant;\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { CustomHttpParamEncoder } from 'app/core/customHttpParamEncoder';\nimport { TenantFilter } from 'app/shared/prothesis-base-api-filters/tenant-filter';\nimport { IndexAllowedCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/index-allowed-customer.view-model';\nimport { PickerAllowedCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/picker-allowed-customer.view-model';\nimport { ReadAllowedCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/read-allowed-customer.view-model';\nimport { Observable } from 'rxjs';\nimport { ConfigurationService } from '../../configuration.service';\nimport { ReadServiceBase } from '../../read-service-base';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthenticatedCustomerService extends ReadServiceBase<\n ReadAllowedCustomerViewModel,\n IndexAllowedCustomerViewModel,\n TenantFilter\n> {\n public constructor(protected _configurationService: ConfigurationService, protected _httpClient: HttpClient) {\n super(_httpClient, () => '/Customer/authenticated/Customer/', _configurationService.ProthesisCustomerApiAddress);\n }\n\n public initializePicker(filter: TenantFilter, sort: string, page: number, pageSize: number): Observable {\n if (!filter) {\n filter = new TenantFilter();\n }\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}InitializePicker`, { params: params });\n }\n}\n","import { ChangeDetectorRef, Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { NotifyService } from 'app/core/services/notify/notify.service';\nimport { AuthenticatedCustomerService } from 'app/core/services/prothesis-customer-api/authenticated/authenticated-customer.service';\nimport { AutoCompleteResultProjection } from 'app/shared/prothesis-api-projections/auto-complete-result.projection';\nimport { TenantFilter } from 'app/shared/prothesis-base-api-filters/tenant-filter';\nimport { InfoCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/info-customer.view-model';\nimport { PickerAllowedCustomerViewModel } from 'app/shared/prothesis-customer-api-view-models/picker-allowed-customer.view-model';\nimport { PickerState } from 'app/shared/states/picker-state';\nimport { Observable } from 'rxjs';\nimport { ComboModel } from '../../combo/combo-model';\nimport { ElementModel } from '../picker/element.model';\nimport { PickerComponent } from '../picker/picker.component';\nimport { CustomerTenantModelHelper } from './model-helpers/customer-tenant-model-helper';\nimport { CustomerTenantModel } from './models/customer-tenant-model';\n\n@Component({\n selector: 'app-customer-tenant-picker',\n templateUrl: './customer-tenant-picker.component.html',\n styleUrls: ['./customer-tenant-picker.component.scss'],\n})\nexport class CustomerTenantPickerComponent {\n @ViewChild('_pickerComponent', { static: true }) public _pickerComponent: PickerComponent;\n @Output() public customerTenantAddedEvent = new EventEmitter();\n @Output() public pickerDialogAfterClosedEvent = new EventEmitter();\n public autoCompleteResultList: AutoCompleteResultProjection[];\n public elements: ElementModel[] = new Array();\n public existenceFlag = false;\n public families: ComboModel[] = new Array();\n public loadedFlag: boolean;\n public pickerState: PickerState = new PickerState();\n public showPickerFlag = true;\n public totalCount = 0;\n private _viewModels: InfoCustomerViewModel[] = new Array();\n\n public constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _notifyService: NotifyService,\n private _authenticatedCustomerService: AuthenticatedCustomerService\n ) {}\n\n public pickerDialogAfterClosedEventHandler(): void {\n this.pickerDialogAfterClosedEvent.emit();\n }\n\n public selectElement(element: ElementModel): void {\n const viewModel = this._viewModels.find((c) => c.uuid === element.key);\n if (viewModel) {\n const models = CustomerTenantModelHelper.fromInfoCustomerViewModel([viewModel]);\n this.showPickerFlag = false;\n this.customerTenantAddedEvent.emit(models[0]);\n }\n }\n\n public setFocus(): void {\n this._pickerComponent?.setFocus();\n }\n\n public updateState(pickerState: PickerState): void {\n this.pickerState = pickerState;\n this._refreshList();\n }\n\n public uuidSelectedHandler(uuid: string): void {\n const filter = new TenantFilter();\n filter.uuids = [uuid];\n this._authenticatedCustomerService.getAll(filter, 'code_asc', 0, 1).subscribe((indexAllowedCustomerViewModel) => {\n if (indexAllowedCustomerViewModel.resultList && indexAllowedCustomerViewModel.resultList.values) {\n if (indexAllowedCustomerViewModel.resultList.values.length === 1) {\n const models = CustomerTenantModelHelper.fromReadAllowedCustomerViewModel(indexAllowedCustomerViewModel.resultList.values);\n this.customerTenantAddedEvent.emit(models[0]);\n } else {\n this._notifyService.displayErrorMessagesNow(`Laboratoire inexistant.`);\n }\n }\n });\n }\n\n private _load(): Observable {\n const filter = this._setPickerFilter();\n const sort = 'label_asc';\n return this._authenticatedCustomerService.initializePicker(filter, sort, this.pickerState.pageIndex, this.pickerState.pageSize);\n }\n\n private _refreshList(): void {\n this.loadedFlag = false;\n this._load().subscribe((result: PickerAllowedCustomerViewModel) => {\n this.existenceFlag = result.existenceFlag;\n\n // Handle resultList\n if (result.resultList) {\n this.totalCount = result.resultList.aggregate?.count;\n\n // View model to model conversion\n this.elements = [];\n this._changeDetectorRef.markForCheck();\n this._viewModels = result.resultList.values;\n const models = CustomerTenantModelHelper.fromInfoCustomerViewModel(this._viewModels);\n models.forEach((model) => {\n const element = new ElementModel(null, model.name, model.uuid, model.laboratoryName, null);\n\n if (model.customerGroupName) {\n element.hat = `${model.customerGroupName}`;\n element.hatStyle = 'primary-border';\n element.hatWidth = 'fixed';\n element.highlightHatFlag = true;\n }\n\n if (model.customerGroupFlag) {\n element.hat = 'Groupe de facturation';\n element.hatStyle = 'primary';\n element.hatWidth = 'fixed';\n element.highlightHatFlag = false;\n }\n\n this.elements.push(element);\n });\n }\n\n this.loadedFlag = true;\n this._notifyService.displayMessages();\n });\n }\n\n private _setPickerFilter(): TenantFilter {\n const filter = new TenantFilter();\n filter.textFilter = this.pickerState.textFilter;\n filter.textFilterFields = ['customerGroupName', 'laboratoryName', 'name'];\n return filter;\n }\n}\n","\n","import { InfoLaboratoryViewModel } from 'app/shared/prothesis-api-view-models/info-laboratory.view-model';\nimport { ReadAllowedLaboratoryViewModel } from 'app/shared/prothesis-api-view-models/read-allowed-laboratory.view-model';\nimport { LaboratoryTenantModel } from '../models/laboratory-tenant-model';\n\nexport class LaboratoryTenantModelHelper {\n public static fromInfoLaboratoryViewModel(viewModels: InfoLaboratoryViewModel[]): Array {\n const models = new Array();\n viewModels.forEach((viewModel) => {\n const model = this._createModelFromInfoLaboratoryViewModel(viewModel);\n models.push(model);\n });\n\n return models;\n }\n\n public static fromInfoLaboratoryViewModelSingle(viewModel: InfoLaboratoryViewModel): LaboratoryTenantModel {\n return this._createModelFromInfoLaboratoryViewModel(viewModel);\n }\n\n public static fromReadAllowedLaboratoryViewModel(viewModels: ReadAllowedLaboratoryViewModel[]): Array {\n const models = new Array();\n viewModels.forEach((viewModel) => {\n const model = this._createModelFromReadAllowedLaboratoryViewModel(viewModel);\n models.push(model);\n });\n\n return models;\n }\n\n public static fromReadAllowedLaboratoryViewModelSingle(viewModel: ReadAllowedLaboratoryViewModel): LaboratoryTenantModel {\n return this._createModelFromReadAllowedLaboratoryViewModel(viewModel);\n }\n\n private static _createModelFromInfoLaboratoryViewModel(infoLaboratoryViewModel: InfoLaboratoryViewModel): LaboratoryTenantModel {\n const laboratoryTenant = new LaboratoryTenantModel();\n laboratoryTenant.demoModeFlag = infoLaboratoryViewModel.demoModeFlag;\n laboratoryTenant.name = infoLaboratoryViewModel.name;\n laboratoryTenant.tzDatabaseName = infoLaboratoryViewModel.tzDatabaseName;\n laboratoryTenant.uuid = infoLaboratoryViewModel.uuid;\n return laboratoryTenant;\n }\n\n private static _createModelFromReadAllowedLaboratoryViewModel(\n readAllowedLaboratoryViewModel: ReadAllowedLaboratoryViewModel\n ): LaboratoryTenantModel {\n const laboratoryTenant = new LaboratoryTenantModel();\n laboratoryTenant.demoModeFlag = readAllowedLaboratoryViewModel.demoModeFlag;\n laboratoryTenant.name = readAllowedLaboratoryViewModel.name;\n laboratoryTenant.tzDatabaseName = readAllowedLaboratoryViewModel.tzDatabaseName;\n laboratoryTenant.uuid = readAllowedLaboratoryViewModel.uuid;\n return laboratoryTenant;\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { CustomHttpParamEncoder } from 'app/core/customHttpParamEncoder';\nimport { IndexAllowedLaboratoryViewModel } from 'app/shared/prothesis-api-view-models/index-allowed-laboratory.view-model';\nimport { PickerAllowedLaboratoryViewModel } from 'app/shared/prothesis-api-view-models/picker-allowed-laboratory.view-model';\nimport { ReadAllowedLaboratoryViewModel } from 'app/shared/prothesis-api-view-models/read-allowed-laboratory.view-model';\nimport { StandardFilter } from 'app/shared/prothesis-base-api-filters/standard-filter';\nimport { Observable } from 'rxjs';\nimport { ConfigurationService } from '../../configuration.service';\nimport { ReadServiceBase } from '../../read-service-base';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthenticatedLaboratoryService extends ReadServiceBase<\n ReadAllowedLaboratoryViewModel,\n IndexAllowedLaboratoryViewModel,\n StandardFilter\n> {\n public constructor(protected _configurationService: ConfigurationService, protected _httpClient: HttpClient) {\n super(_httpClient, () => '/authenticated/Laboratory/', _configurationService.ProthesisApiAddress);\n }\n\n public initializePicker(\n filter: StandardFilter,\n sort: string,\n page: number,\n pageSize: number\n ): Observable {\n if (!filter) {\n filter = new StandardFilter();\n }\n\n const params = new HttpParams({ encoder: new CustomHttpParamEncoder() })\n .set('filter', JSON.stringify(filter))\n .set('page', page.toString())\n .set('pageSize', pageSize.toString())\n .set('sort', sort);\n\n return this._httpClient.get(`${this._actionUrl}InitializePicker`, { params: params });\n }\n}\n","import { ChangeDetectorRef, Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { NotifyService } from 'app/core/services/notify/notify.service';\nimport { AuthenticatedLaboratoryService } from 'app/core/services/prothesis-api/authenticated/authenticated-laboratory.service';\nimport { AutoCompleteResultProjection } from 'app/shared/prothesis-api-projections/auto-complete-result.projection';\nimport { InfoLaboratoryViewModel } from 'app/shared/prothesis-api-view-models/info-laboratory.view-model';\nimport { PickerAllowedLaboratoryViewModel } from 'app/shared/prothesis-api-view-models/picker-allowed-laboratory.view-model';\nimport { TenantFilter } from 'app/shared/prothesis-base-api-filters/tenant-filter';\nimport { PickerState } from 'app/shared/states/picker-state';\nimport { Observable } from 'rxjs';\nimport { ElementModel } from '../picker/element.model';\nimport { PickerComponent } from '../picker/picker.component';\nimport { LaboratoryTenantModelHelper } from './model-helpers/laboratory-tenant-model-helper';\nimport { LaboratoryTenantModel } from './models/laboratory-tenant-model';\n\n@Component({\n selector: 'app-laboratory-tenant-picker',\n templateUrl: './laboratory-tenant-picker.component.html',\n styleUrls: ['./laboratory-tenant-picker.component.scss'],\n})\nexport class LaboratoryTenantPickerComponent {\n @ViewChild('_pickerComponent', { static: true }) public _pickerComponent: PickerComponent;\n @Output() public laboratoryTenantAddedEvent = new EventEmitter();\n @Output() public pickerDialogAfterClosedEvent = new EventEmitter();\n public autoCompleteResultList: AutoCompleteResultProjection[];\n public elements: ElementModel[] = new Array();\n public existenceFlag = false;\n public loadedFlag: boolean;\n public pickerState: PickerState = new PickerState();\n public showPickerFlag = true;\n public totalCount = 0;\n private _viewModels: InfoLaboratoryViewModel[] = new Array();\n\n public constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _notifyService: NotifyService,\n private _authenticatedLaboratoryService: AuthenticatedLaboratoryService\n ) {}\n\n public pickerDialogAfterClosedEventHandler(): void {\n this.pickerDialogAfterClosedEvent.emit();\n }\n\n public selectElement(element: ElementModel): void {\n const viewModel = this._viewModels.find((c) => c.uuid === element.key);\n if (viewModel) {\n const models = LaboratoryTenantModelHelper.fromInfoLaboratoryViewModel([viewModel]);\n this.showPickerFlag = false;\n this.laboratoryTenantAddedEvent.emit(models[0]);\n }\n }\n\n public setFocus(): void {\n this._pickerComponent?.setFocus();\n }\n\n public updateState(pickerState: PickerState): void {\n this.pickerState = pickerState;\n this._refreshList();\n }\n\n public uuidSelectedHandler(uuid: string): void {\n const filter = new TenantFilter();\n filter.uuids = [uuid];\n this._authenticatedLaboratoryService.getAll(filter, 'code_asc', 0, 1).subscribe((indexManufacturerViewModel) => {\n if (indexManufacturerViewModel.resultList && indexManufacturerViewModel.resultList.values) {\n if (indexManufacturerViewModel.resultList.values.length === 1) {\n const models = LaboratoryTenantModelHelper.fromReadAllowedLaboratoryViewModel(indexManufacturerViewModel.resultList.values);\n this.laboratoryTenantAddedEvent.emit(models[0]);\n } else {\n this._notifyService.displayErrorMessagesNow(`Laboratoire inexistant.`);\n }\n }\n });\n }\n\n private _load(): Observable {\n const filter = this._setPickerFilter();\n const sort = 'label_asc';\n return this._authenticatedLaboratoryService.initializePicker(filter, sort, this.pickerState.pageIndex, this.pickerState.pageSize);\n }\n\n private _refreshList(): void {\n this.loadedFlag = false;\n this._load().subscribe((result: PickerAllowedLaboratoryViewModel) => {\n this.existenceFlag = result.existenceFlag;\n\n // Handle resultList\n if (result.resultList) {\n this.totalCount = result.resultList.aggregate?.count;\n\n // View model to model conversion\n this.elements = [];\n this._changeDetectorRef.markForCheck();\n this._viewModels = result.resultList.values;\n const models = LaboratoryTenantModelHelper.fromInfoLaboratoryViewModel(this._viewModels);\n models.forEach((model) => {\n this.elements.push(new ElementModel(model.code, 'Laboratoire', model.uuid, model.name, null));\n });\n }\n\n this.loadedFlag = true;\n this._notifyService.displayMessages();\n });\n }\n\n private _setPickerFilter(): TenantFilter {\n const filter = new TenantFilter();\n filter.textFilter = this.pickerState.textFilter;\n filter.textFilterFields = ['name'];\n return filter;\n }\n}\n","\n"," 1) ||\n (formGroup.controls.displayLaboratoryTenantPickerFlag?.value && allowedLaboratoryUuids?.length > 1)\n \"\n [formGroup]=\"formGroup\"\n class=\"nav-group\"\n>\n \n 1\"\n class=\"tenant-selector-container\"\n fxFlex\n fxLayout=\"row\"\n fxLayoutAlign=\"space-between center\"\n >\n
    \n \n 1\"\n [group]=\"formGroup.controls.customerTenant?.value?.name\"\n [hat]=\"\n formGroup.controls.customerTenant?.value?.customerGroupFlag\n ? 'Groupe de facturation'\n : formGroup.controls.customerTenant?.value?.customerGroupName\n \"\n [hatStyle]=\"formGroup.controls.customerTenant?.value?.customerGroupFlag ? 'primary' : 'primary-border'\"\n [hatWidth]=\"'fixed'\"\n [label]=\"formGroup.controls.customerTenant?.value?.laboratoryName\"\n class=\"customer-card m-16\"\n >\n
    \n 0\"\n (customerTenantAddedEvent)=\"customerTenantPickerAddedHandler($event)\"\n (pickerDialogAfterClosedEvent)=\"pickerDialogAfterClosedEventHandler()\"\n >\n \n\n \n 1\"\n class=\"tenant-selector-container\"\n fxFlex\n fxLayout=\"row\"\n fxLayoutAlign=\"space-between center\"\n >\n
    \n \n 1\"\n [group]=\"'Laboratoire'\"\n [label]=\"formGroup.controls.laboratoryTenant?.value?.name\"\n class=\"customer-card m-16\"\n >\n
    \n 0\"\n (laboratoryTenantAddedEvent)=\"laboratoryTenantPickerAddedHandler($event)\"\n (pickerDialogAfterClosedEvent)=\"pickerDialogAfterClosedEventHandler()\"\n >\n \n \n\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { WorkingCustomerService } from 'app/core/services/prothesis-customer-api/working-customer.service';\nimport { CustomerTenantPickerComponent } from 'app/shared/components/pickers/customer-tenant-picker/customer-tenant-picker.component';\nimport { CustomerTenantModel } from 'app/shared/components/pickers/customer-tenant-picker/models/customer-tenant-model';\nimport { LaboratoryTenantPickerComponent } from 'app/shared/components/pickers/laboratory-tenant-picker/laboratory-tenant-picker.component';\nimport { LaboratoryTenantModel } from 'app/shared/components/pickers/laboratory-tenant-picker/models/laboratory-tenant-model';\nimport { Area } from 'app/shared/enums/area.enum';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TenantSelectorFormGroup } from './form-groups/tenant-selector-form-group';\nimport { TenantSelectorModelHelper } from './model-helpers/tenant-selector.model-helpers';\nimport { TenantSelectorModel } from './models/tenant-selector.model';\n\n@Component({\n selector: 'app-tenant-selector',\n styleUrls: ['./tenant-selector.component.scss'],\n templateUrl: './tenant-selector.component.html',\n})\nexport class TenantSelectorComponent implements OnInit, OnDestroy {\n @ViewChild('_customerTenantPickerComponent') private _customerTenantPickerComponent: CustomerTenantPickerComponent;\n @ViewChild('_laboratoryTenantPickerComponent') private _laboratoryTenantPickerComponent: LaboratoryTenantPickerComponent;\n public allowedCustomerUuids: string[];\n public allowedLaboratoryUuids: string[];\n public formGroup: FormGroup;\n public tenantSelector: TenantSelectorModel;\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _authService: AuthService,\n private _router: Router,\n private _workingCustomerService: WorkingCustomerService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {}\n\n public customerTenantClickHandler(): boolean {\n this._customerTenantPickerComponent._pickerComponent.openPickerDialog();\n return false;\n }\n\n public customerTenantPickerAddedHandler(customerTenant: CustomerTenantModel): boolean {\n this._workingLaboratoryService.clear();\n this._workingCustomerService.clear();\n this._authService.configureCustomerArea(customerTenant.uuid).then(() => {\n this._router.navigateByUrl('');\n });\n return true;\n }\n\n public laboratoryTenantClickHandler(): boolean {\n this._laboratoryTenantPickerComponent._pickerComponent.openPickerDialog();\n return false;\n }\n\n public laboratoryTenantPickerAddedHandler(laboratoryTenant: LaboratoryTenantModel): boolean {\n this._workingLaboratoryService.clear();\n this._workingCustomerService.clear();\n this._authService.configureLaboratoryArea(laboratoryTenant.uuid).then(() => {\n this._router.navigateByUrl('');\n });\n return true;\n }\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n const tenantSelector = TenantSelectorModelHelper.build();\n\n this.formGroup = new FormGroup({\n customerTenant: new FormControl(tenantSelector.customerTenant),\n displayCustomerTenantPickerFlag: new FormControl(tenantSelector.displayCustomerTenantPickerFlag),\n displayLaboratoryTenantPickerFlag: new FormControl(tenantSelector.displayLaboratoryTenantPickerFlag),\n laboratoryTenant: new FormControl(tenantSelector.laboratoryTenant),\n });\n\n this._authService.isDoneLoading$.pipe(takeUntil(this._unsubscribeAll$)).subscribe((isDoneLoadingFlag) => {\n if (isDoneLoadingFlag) {\n this.allowedCustomerUuids = this._authService.allowedCustomerUuids;\n this.allowedLaboratoryUuids = this._authService.allowedLaboratoryUuids;\n }\n });\n\n this._authService.areaConfiguredFlag$.pipe(takeUntil(this._unsubscribeAll$)).subscribe(() => {\n if (this._authService.area === Area.Customer) {\n this._updateCustomerTenant();\n } else if (this._authService.area === Area.Laboratory) {\n this._updateLaboratoryTenant();\n } else {\n this.formGroup.controls.laboratoryTenant.setValue(undefined);\n this.formGroup.controls.customerTenant.setValue(undefined);\n this.formGroup.controls.displayCustomerTenantPickerFlag.setValue(false);\n this.formGroup.controls.displayLaboratoryTenantPickerFlag.setValue(false);\n }\n });\n }\n\n public pickerDialogAfterClosedEventHandler(): void {\n if (this.formGroup.controls.displayCustomerTenantPickerFlag?.value) {\n this._customerTenantPickerComponent?.setFocus();\n } else {\n this._laboratoryTenantPickerComponent?.setFocus();\n }\n }\n\n private _updateCustomerTenant(): void {\n const customerTenant = new CustomerTenantModel();\n customerTenant.customerGroupFlag = this._workingCustomerService?.customerGroupFlag;\n customerTenant.customerGroupName = this._workingCustomerService?.customerMemberFlag\n ? this._workingCustomerService?.customerGroupName\n : null;\n customerTenant.laboratoryName = this._workingLaboratoryService?.laboratoryName;\n customerTenant.name = this._workingCustomerService?.customerName;\n customerTenant.uuid = this._workingCustomerService?.tenantUuid;\n this.formGroup.controls.customerTenant.setValue(customerTenant);\n this.formGroup.controls.displayCustomerTenantPickerFlag.setValue(true);\n this.formGroup.controls.displayLaboratoryTenantPickerFlag.setValue(false);\n }\n\n private _updateLaboratoryTenant(): void {\n const laboratoryTenant = new LaboratoryTenantModel();\n laboratoryTenant.name = this._workingLaboratoryService?.laboratoryName;\n laboratoryTenant.uuid = this._workingLaboratoryService?.tenantUuid;\n this.formGroup.controls.laboratoryTenant.setValue(laboratoryTenant);\n this.formGroup.controls.displayCustomerTenantPickerFlag.setValue(false);\n this.formGroup.controls.displayLaboratoryTenantPickerFlag.setValue(true);\n }\n}\n","import { CustomerTenantModel } from 'app/shared/components/pickers/customer-tenant-picker/models/customer-tenant-model';\nimport { LaboratoryTenantModel } from 'app/shared/components/pickers/laboratory-tenant-picker/models/laboratory-tenant-model';\nimport { TenantSelectorModel } from '../models/tenant-selector.model';\n\nexport class TenantSelectorModelHelper {\n public static build(): TenantSelectorModel {\n const tenantSelector = new TenantSelectorModel();\n tenantSelector.customerTenant = new CustomerTenantModel();\n tenantSelector.displayCustomerTenantPickerFlag = false;\n tenantSelector.displayLaboratoryTenantPickerFlag = false;\n tenantSelector.laboratoryTenant = new LaboratoryTenantModel();\n return tenantSelector;\n }\n}\n","
    \n \n \n \n \n \n \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-navigation',\n styleUrls: ['./navigation.component.scss'],\n templateUrl: './navigation.component.html',\n})\nexport class NavigationComponent implements OnInit {\n @Input() public navigation: any;\n public allowedCustomerUuids: string[];\n public allowedLaboratoryUuids: string[];\n private _unsubscribeAll: Subject;\n\n public constructor(\n private _authService: AuthService,\n private _changeDetectorRef: ChangeDetectorRef,\n private _fuseNavigationService: FuseNavigationService\n ) {\n // Set the private defaults\n this._unsubscribeAll = new Subject();\n }\n\n public ngOnInit(): void {\n // Load the navigation either from the input or from the service\n this.navigation = this.navigation || this._fuseNavigationService.getCurrentNavigation();\n\n this._authService.isDoneLoading$.pipe(takeUntil(this._unsubscribeAll)).subscribe((isDoneLoadingFlag) => {\n if (isDoneLoadingFlag) {\n // list of owned laboratories\n this.allowedCustomerUuids = this._authService.allowedCustomerUuids;\n this.allowedLaboratoryUuids = this._authService.allowedLaboratoryUuids;\n }\n });\n\n // Subscribe to the current navigation changes\n this._fuseNavigationService.onNavigationChanged.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {\n // Load the navigation\n this.navigation = this._fuseNavigationService.getCurrentNavigation();\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n\n // Subscribe to navigation item\n merge(\n this._fuseNavigationService.onNavigationItemAdded,\n this._fuseNavigationService.onNavigationItemUpdated,\n this._fuseNavigationService.onNavigationItemRemoved\n )\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n\n this._fuseNavigationService.onNavigationRegistered.subscribe(() => {\n this.navigation = this._fuseNavigationService.getCurrentNavigation();\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';\nimport { FuseConfigService } from '@fuse/services/config.service';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-navbar-vertical-style-2',\n styleUrls: ['./style-2.component.scss'],\n templateUrl: './style-2.component.html',\n})\nexport class NavbarVerticalStyle2Component implements OnInit, OnDestroy {\n public fuseConfig: any;\n public navigation: any;\n\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _fuseConfigService: FuseConfigService,\n private _fuseNavigationService: FuseNavigationService,\n private _fuseSidebarService: FuseSidebarService,\n private _router: Router\n ) {}\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n this._router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll$)\n )\n .subscribe(() => {\n if (this._fuseSidebarService.getSidebar('navbar')) {\n this._fuseSidebarService.getSidebar('navbar').close();\n }\n });\n\n // Get current navigation\n this._fuseNavigationService.onNavigationChanged\n .pipe(\n filter((value) => value !== null),\n takeUntil(this._unsubscribeAll$)\n )\n .subscribe(() => {\n this.navigation = this._fuseNavigationService.getCurrentNavigation();\n });\n\n // Subscribe to the config changes\n this._fuseConfigService.config.pipe(takeUntil(this._unsubscribeAll$)).subscribe((config) => {\n this.fuseConfig = config;\n });\n }\n\n /**\n * Toggle sidebar folded status\n */\n public toggleSidebarFolded(): void {\n this._fuseSidebarService.getSidebar('navbar').toggleFold();\n }\n\n /**\n * Toggle sidebar opened status\n */\n public toggleSidebarOpened(): void {\n this._fuseSidebarService.getSidebar('navbar').toggleOpen();\n }\n\n /**\n * TouchEnd event\n */\n public touchUnfoldTemporarily(touchUnfold: boolean): void {\n this._fuseSidebarService.getSidebar('navbar').touchUnfoldTemporarily(touchUnfold);\n }\n}\n","
    \n
    \n \n \n
    \n\n \n menu\n \n\n \n
    \n\n
    \n \n
    \n","\n \n\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, Renderer2, ViewEncapsulation } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n selector: 'app-navbar',\n styleUrls: ['./navbar.component.scss'],\n templateUrl: './navbar.component.html',\n})\nexport class NavbarComponent {\n // Private\n private _variant: string;\n\n /**\n * Constructor\n *\n * @param {ElementRef} _elementRef\n * @param {Renderer2} _renderer\n */\n public constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n // Set the private defaults\n this._variant = 'vertical-style-2';\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Variant\n */\n public get variant(): string {\n return this._variant;\n }\n\n @Input() public set variant(value: string) {\n // Remove the old class name\n this._renderer.removeClass(this._elementRef.nativeElement, this.variant);\n\n // Store the variant value\n this._variant = value;\n\n // Add the new class name\n this._renderer.addClass(this._elementRef.nativeElement, value);\n }\n}\n","export class StorageBannerModel {\n public cssClass: string;\n public displayFlag: boolean;\n public storageCapacityLimit: number;\n public storageUsage: number;\n public storageUsagePercentage: number;\n}\n","
    \n \n \n Votre espace de stockage est bientôt saturé.\n
    \n Votre espace de stockage est bientôt saturé. Cliquez sur la section \n Votre abonnement\n pour plus d'informations.\n
    \n
    \n
    = storageUsagePercentageWarning2\">\n Votre espace de stockage est saturé.\n
    \n Votre espace de stockage est saturé. Cliquez sur la section \n Votre abonnement\n pour plus d'informations.\n
    \n
    \n \n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { LaboratoryHttpHeaderService } from 'app/core/services/prothesis-api/laboratory-http-header.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { ProgressBarStorageCardModelHelper } from 'app/shared/components/cards/progress-bar-storage-card/model-helpers/progress-bar-storage-card-model-helper';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { StorageBannerModel } from './storage-banner-model';\nimport { StorageBannerModelHelper } from './storage-banner-model-helper';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-storage-banner',\n styleUrls: ['./storage-banner.component.scss'],\n templateUrl: './storage-banner.component.html',\n})\nexport class StorageBannerComponent implements OnInit {\n public storageBanner: StorageBannerModel;\n public storageUsagePercentageWarning = ProgressBarStorageCardModelHelper.storageUsagePercentageWarning;\n public storageUsagePercentageWarning2 = ProgressBarStorageCardModelHelper.storageUsagePercentageWarning2;\n public subscriptionSettingsFlag: boolean;\n private _unsubscribeAll: Subject;\n\n public constructor(\n private _authService: AuthService,\n private _changeDetectorRef: ChangeDetectorRef,\n private _laboratoryHttpHeaderService: LaboratoryHttpHeaderService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {\n // Set the private defaults\n this._unsubscribeAll = new Subject();\n }\n\n public ngOnInit(): void {\n this._laboratoryHttpHeaderService.onHttpHeaderChanged.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {\n const httpHeader = this._laboratoryHttpHeaderService.getHttpHeader();\n this.storageBanner = StorageBannerModelHelper.fromHttpHeader(httpHeader);\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n\n this._authService.areaConfiguredFlag$.subscribe((areaConfiguredFlag: boolean) => {\n if (areaConfiguredFlag && this._workingLaboratoryService.laboratoryRole) {\n this.subscriptionSettingsFlag = this._workingLaboratoryService.laboratoryRole?.subscriptionSettingsFlag;\n }\n });\n }\n}\n","import { LaboratoryHttpHeaderModel } from 'app/core/services/prothesis-api/laboratory-http-header-model';\nimport { StorageBannerModel } from './storage-banner-model';\n\nexport class StorageBannerModelHelper {\n public static fromHttpHeader(laboratoryHttpHeader: LaboratoryHttpHeaderModel): StorageBannerModel {\n const storageBanner = new StorageBannerModel();\n storageBanner.storageCapacityLimit = laboratoryHttpHeader?.storageCapacityLimit;\n storageBanner.storageUsage = laboratoryHttpHeader?.storageUsage;\n if (laboratoryHttpHeader?.storageCapacityLimit) {\n storageBanner.storageUsagePercentage = (storageBanner.storageUsage / storageBanner.storageCapacityLimit) * 100;\n } else {\n storageBanner.storageUsagePercentage = 0;\n }\n storageBanner.displayFlag = storageBanner.storageUsagePercentage >= 90;\n return storageBanner;\n }\n}\n","import { Moment } from 'moment-timezone';\n\nexport class SubscriptionBannerModel {\n /**\n * Indicates wheather there's an active subscription.\n */\n public activeSubscriptionExistenceFlag: boolean;\n\n /**\n * CSS class applied to the subscription banner.\n */\n public cssClass: string;\n\n /**\n * indicates wheather to display the subscription banner.\n */\n public displayFlag: boolean;\n\n /**\n * The number of days left from now to the last active subscription end dated.\n */\n public lastActiveSubscriptionDaysLeft: number;\n\n /**\n * The last active subscription display label (ex: essai gratuit, ex: abonnement)\n */\n public lastActiveSubscriptionDisplayLabel: string;\n\n /**\n * End date of the current active subscription.\n */\n public lastSubscriptionEndDate: Moment;\n\n public suspendedFlag: boolean;\n}\n","
    \n \n
    \n Votre abonnement PROTHESIS CLOUD est {{subscriptionBanner.suspendedFlag? 'suspendu': 'terminé'}}, votre accès au service CLOUD a été\n désactivé.\n
    \n Pour réactiver votre abonnement, nous vous invitons à\n \n contacter le service client Prothesis Dental Solutions.\n
    \n\n \n
    \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { LaboratoryHttpHeaderService } from 'app/core/services/prothesis-api/laboratory-http-header.service';\nimport { CustomDatePipe } from 'app/shared/pipes/custom-date.pipe';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SubscriptionBannerModel } from './subscription-banner.model';\nimport { SubscriptionBannerModelHelper } from './subscription-banner.model.helper';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CustomDatePipe],\n selector: 'app-subscription-banner',\n styleUrls: ['./subscription-banner.component.scss'],\n templateUrl: './subscription-banner.component.html',\n})\nexport class SubscriptionBannerComponent implements OnInit {\n public subscriptionBanner: SubscriptionBannerModel;\n private _unsubscribeAll: Subject;\n\n public constructor(private _changeDetectorRef: ChangeDetectorRef, private _laboratoryHttpHeaderService: LaboratoryHttpHeaderService) {\n // Set the private defaults\n this._unsubscribeAll = new Subject();\n }\n\n public ngOnInit(): void {\n this._laboratoryHttpHeaderService.onHttpHeaderChanged.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {\n const httpHeader = this._laboratoryHttpHeaderService.getHttpHeader();\n this.subscriptionBanner = SubscriptionBannerModelHelper.fromHttpHeader(httpHeader);\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n","import { LaboratoryHttpHeaderModel } from 'app/core/services/prothesis-api/laboratory-http-header-model';\nimport { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { ProductType } from 'app/shared/enums/product-type.enum';\nimport { SubscriptionBannerModel } from './subscription-banner.model';\n\nexport class SubscriptionBannerModelHelper {\n public static fromHttpHeader(laboratoryHttpHeader: LaboratoryHttpHeaderModel): SubscriptionBannerModel {\n const subscriptionBanner = new SubscriptionBannerModel();\n if (laboratoryHttpHeader?.lastSubscriptionEndDate) {\n const lastSubscriptionEndDate = TimeZoneService.toMomentInLaboratoryTimeZone(laboratoryHttpHeader.lastSubscriptionEndDate);\n subscriptionBanner.lastSubscriptionEndDate = TimeZoneService.addTime(lastSubscriptionEndDate, 0, 0, 0, -1);\n subscriptionBanner.lastActiveSubscriptionDaysLeft = TimeZoneService.diffDaysBetweenNow(lastSubscriptionEndDate);\n } else if (laboratoryHttpHeader?.lastSubscriptionEndDate === null) {\n subscriptionBanner.lastActiveSubscriptionDaysLeft = null;\n }\n\n if (laboratoryHttpHeader?.subscriptionEndDate) {\n subscriptionBanner.activeSubscriptionExistenceFlag = true;\n } else {\n subscriptionBanner.activeSubscriptionExistenceFlag = false;\n }\n\n subscriptionBanner.suspendedFlag = laboratoryHttpHeader?.suspendedFlag;\n\n if (laboratoryHttpHeader?.lastNonFreeSubscriptionProductType) {\n const productType = parseInt(laboratoryHttpHeader.lastNonFreeSubscriptionProductType, 10);\n if (Number.isInteger(productType) && Object.values(ProductType).includes(productType)) {\n subscriptionBanner.lastActiveSubscriptionDisplayLabel = productType === ProductType.Discovery ? 'essai gratuit' : 'abonnement';\n } else {\n subscriptionBanner.lastActiveSubscriptionDisplayLabel = 'abonnement';\n }\n } else {\n subscriptionBanner.lastActiveSubscriptionDisplayLabel = 'abonnement';\n }\n\n if (\n !laboratoryHttpHeader ||\n laboratoryHttpHeader.lastSubscriptionEndDate === undefined ||\n laboratoryHttpHeader.lastNonFreeSubscriptionProductType === undefined\n ) {\n subscriptionBanner.displayFlag = false;\n } else {\n if (\n subscriptionBanner.suspendedFlag ||\n !subscriptionBanner.activeSubscriptionExistenceFlag ||\n (subscriptionBanner.activeSubscriptionExistenceFlag && subscriptionBanner.lastActiveSubscriptionDaysLeft < 31)\n ) {\n subscriptionBanner.displayFlag = true;\n } else {\n subscriptionBanner.displayFlag = false;\n }\n }\n\n subscriptionBanner.cssClass =\n !subscriptionBanner.suspendedFlag &&\n subscriptionBanner.activeSubscriptionExistenceFlag &&\n 7 < subscriptionBanner.lastActiveSubscriptionDaysLeft &&\n subscriptionBanner.lastActiveSubscriptionDaysLeft < 31\n ? 'black'\n : '';\n\n return subscriptionBanner;\n }\n}\n","export const locale = {\n lang: 'en',\n data: {\n TOOLBAR: {\n ACCOUNT_AREA: 'Type of account',\n ACCOUNT_AREAS: { CUSTOMER: 'Client area', LABORATORY: 'Laboratory area' },\n APPLICATION_SETTINGS: 'Application Settings',\n COLOR_THEMES_TITLE: 'Theme',\n COLOR_THEMES: { LIGHT: 'Light', DARK: 'Dark', SYSTEM: 'System' },\n LOGOUT: 'Sing Out',\n MY_ACCOUNT: 'My Account',\n USER_MANAGEMENT: 'user management',\n },\n },\n};\n","export const locale = {\n lang: 'fr',\n data: {\n TOOLBAR: {\n ACCOUNT_AREA: 'Type de compte',\n ACCOUNT_AREAS: { CUSTOMER: 'Espace client', LABORATORY: 'Espace laboratoire' },\n APPLICATION_SETTINGS: \"Paramètres de l'application\",\n COLOR_THEMES_TITLE: 'Thème',\n COLOR_THEMES: { LIGHT: 'Clair', DARK: 'Sombre', SYSTEM: 'Système' },\n LOGOUT: 'Déconnexion',\n MY_ACCOUNT: 'Mon compte',\n USER_MANAGEMENT: 'Gestion des utilisateurs',\n },\n },\n};\n","export const locale = {\n lang: 'pt',\n data: {\n TOOLBAR: {\n ACCOUNT_AREA: 'Tipo de conta',\n ACCOUNT_AREAS: { CUSTOMER: 'Área do cliente', LABORATORY: 'Área do laboratório' },\n APPLICATION_SETTINGS: 'Configurações do aplicativo',\n COLOR_THEMES_TITLE: 'Tema',\n COLOR_THEMES: { LIGHT: 'Claro', DARK: 'Sombrio', SYSTEM: 'Sistema' },\n LOGOUT: 'Cantar',\n MY_ACCOUNT: 'Minha conta',\n USER_MANAGEMENT: 'Gestão de usuários',\n },\n },\n};\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { WorkingCustomerService } from 'app/core/services/prothesis-customer-api/working-customer.service';\nimport { Area } from 'app/shared/enums/area.enum';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AreaSelectorFormGroup } from './area-selector-form-group';\n\n@Component({\n selector: 'app-area-selector',\n styleUrls: ['./area-selector.component.scss'],\n templateUrl: './area-selector.component.html',\n})\nexport class AreaSelectorComponent implements OnDestroy, OnInit {\n public customerArea = Area.Customer;\n public formGroup: FormGroup;\n public fuseConfig: any;\n public laboratoryArea = Area.Laboratory;\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _authService: AuthService,\n private _router: Router,\n private _workingCustomerService: WorkingCustomerService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {}\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n this.formGroup = new FormGroup({\n area: new FormControl(null),\n });\n\n this._authService.areaConfiguredFlag$.pipe(takeUntil(this._unsubscribeAll$)).subscribe(() => {\n // Set the config form values without emitting an event so that we don't end up with an infinite loop\n this.formGroup.setValue({ area: this._authService.area }, { emitEvent: false });\n });\n\n // Subscribe to the form value changes\n this.formGroup.valueChanges.pipe(takeUntil(this._unsubscribeAll$)).subscribe((config) => {\n this._configureArea(config.area);\n });\n }\n\n private _configureArea(area: Area): void {\n if (area === Area.Laboratory) {\n this._workingCustomerService.clear();\n this._workingLaboratoryService.clear();\n this._authService.configureLaboratoryArea().then(() => {\n this._router.navigateByUrl('');\n });\n } else if (area === Area.Customer) {\n this._workingCustomerService.clear();\n this._workingLaboratoryService.clear();\n this._authService.configureCustomerArea().then(() => {\n this._router.navigateByUrl('');\n });\n } else {\n console.error('Unknown area');\n }\n }\n}\n","
    \n \n {{ \"TOOLBAR.ACCOUNT_AREAS.CUSTOMER\" | translate }}\n {{ \"TOOLBAR.ACCOUNT_AREAS.LABORATORY\" | translate }}\n \n
    \n","export const locale = {\n lang: 'en',\n data: {\n SHORTCUT: {\n CLICK_TO_ADD: 'Click to add/remove shortcut',\n SEARCH_FOR_A_PAGE: 'Search for a page',\n NO_SHORTCUTS_YET: 'No shortcuts yet!',\n },\n },\n};\n","export const locale = {\n lang: 'fr',\n data: {\n SHORTCUT: {\n CLICK_TO_ADD: 'Cliquez pour ajouter / supprimer un raccourci',\n SEARCH_FOR_A_PAGE: 'Rechercher une page',\n NO_SHORTCUTS_YET: 'Pas de raccourcis pour le moment !',\n },\n },\n};\n","export const locale = {\n lang: 'pt',\n data: {\n SHORTCUT: {\n CLICK_TO_ADD: 'Clique para adicionar / remover um atalho',\n SEARCH_FOR_A_PAGE: 'Pesquisar uma página',\n NO_SHORTCUTS_YET: 'Ainda não há atalhos!',\n },\n },\n};\n","
    \n
    \n \n
    \n
    \n \n\n \n \n \n \n\n \n\n \n \n
    \n \n {{\n shortcutItem.icon\n }}\n \n {{ (shortcutItem.translate | translate).substr(0, 1).toUpperCase() }}\n \n\n

    {{ shortcutItem.translate | translate }}

    \n\n star\n
    \n
    \n\n \n

    \n {{ \"SHORTCUT.NO_SHORTCUTS_YET\" | translate }}\n

    \n
    \n
    \n\n \n \n
    \n \n {{\n navigationItem.icon\n }}\n \n {{ (navigationItem.translate | translate).substr(0, 1).toUpperCase() }}\n \n\n

    {{ navigationItem.translate | translate }}

    \n\n star\n
    \n
    \n
    \n
    \n
    \n
    \n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { MediaObserver } from '@angular/flex-layout';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { FuseMatchMediaService } from '@fuse/services/match-media.service';\nimport { FuseTranslationLoaderService } from '@fuse/services/translation-loader.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LocalStorageService } from 'app/core/services/local-storage.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { locale as english } from './i18n/en';\nimport { locale as french } from './i18n/fr';\nimport { locale as portuguese } from './i18n/pt';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'fuse-shortcuts',\n styleUrls: ['./shortcuts.component.scss'],\n templateUrl: './shortcuts.component.html',\n})\nexport class FuseShortcutsComponent implements OnChanges, OnInit, AfterViewInit, OnDestroy {\n @Input() public navigation: any;\n @ViewChild('searchInput') public searchInputField;\n @ViewChild('shortcuts') public shortcutsEl: ElementRef;\n public displayableShortcutItems: any[];\n public filteredNavigationItems: any[];\n public mobileShortcutsPanelActive: boolean;\n public navigationItems: any[];\n public searching: boolean;\n public shortcutItems: any[];\n\n private _unsubscribeAll: Subject;\n\n public constructor(\n private _localStorageService: LocalStorageService,\n private _fuseMatchMediaService: FuseMatchMediaService,\n private _fuseNavigationService: FuseNavigationService,\n private _mediaObserver: MediaObserver,\n private _renderer: Renderer2,\n private _fuseTranslationLoaderService: FuseTranslationLoaderService,\n private _translateService: TranslateService\n ) {\n // Set the defaults\n this.shortcutItems = [];\n this.displayableShortcutItems = [];\n this.searching = false;\n this.mobileShortcutsPanelActive = false;\n\n // Set the private defaults\n this._unsubscribeAll = new Subject();\n\n this._fuseTranslationLoaderService.loadTranslations(french, english, portuguese);\n }\n\n public hideMobileShortcutsPanel(): void {\n this.mobileShortcutsPanelActive = false;\n this._renderer.removeClass(this.shortcutsEl.nativeElement, 'show-mobile-panel');\n }\n\n public isInShortcuts(navigationItem): any {\n return this.displayableShortcutItems.find((item) => {\n return item.url === navigationItem.url;\n });\n }\n\n public ngAfterViewInit(): void {\n this.filterDisplayableShortcutItems();\n\n // Subscribe to media changes\n this._fuseMatchMediaService.onMediaChange.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {\n if (this._mediaObserver.isActive('gt-sm')) {\n this.hideMobileShortcutsPanel();\n }\n });\n }\n\n public ngOnChanges(): void {\n // Get the navigation items and flatten them\n this.filteredNavigationItems = this.navigationItems = this._fuseNavigationService.getFlatNavigation(this.navigation);\n this.filterDisplayableShortcutItems();\n }\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n public ngOnInit(): void {\n const shortcutItemsString = this._localStorageService.read('FUSE2.shortcuts');\n\n if (shortcutItemsString) {\n this.shortcutItems = JSON.parse(shortcutItemsString);\n } else {\n // Default user's shortcut items\n this.shortcutItems = [\n {\n id: 'item',\n title: 'Items',\n translate: 'NAV.ITEMS',\n type: 'item',\n icon: 'layers',\n url: '/item',\n },\n ];\n }\n }\n\n public onMenuOpen(): void {\n setTimeout(() => {\n this.searchInputField.nativeElement.focus();\n });\n }\n\n public search(event): void {\n const value = event.target.value.toLowerCase();\n\n if (value === '') {\n this.searching = false;\n this.filteredNavigationItems = this.navigationItems;\n\n return;\n }\n\n this.searching = true;\n this.filteredNavigationItems = [];\n this.navigationItems.forEach((navigationItem) => {\n this._translateService.get(navigationItem.translate).subscribe((translatedNavigationItem) => {\n if (translatedNavigationItem.toLowerCase().includes(value)) {\n this.filteredNavigationItems.push(navigationItem);\n }\n });\n });\n }\n\n public showMobileShortcutsPanel(): void {\n this.mobileShortcutsPanelActive = true;\n this._renderer.addClass(this.shortcutsEl.nativeElement, 'show-mobile-panel');\n }\n\n public toggleShortcut(event, itemToToggle): void {\n event.stopPropagation();\n\n for (let i = 0; i < this.shortcutItems.length; i++) {\n if (this.shortcutItems[i].url === itemToToggle.url) {\n this.shortcutItems.splice(i, 1);\n this.filterDisplayableShortcutItems();\n\n // Save to the cookies\n this._localStorageService.write('FUSE2.shortcuts', JSON.stringify(this.shortcutItems));\n\n return;\n }\n }\n\n this.shortcutItems.push(itemToToggle);\n this.filterDisplayableShortcutItems();\n\n // Save to the cookies\n this._localStorageService.write('FUSE2.shortcuts', JSON.stringify(this.shortcutItems));\n }\n\n private filterDisplayableShortcutItems(): void {\n this.displayableShortcutItems = this.navigationItems.filter((filteredNavigationItem) =>\n this.shortcutItems.find((s) => s.id === filteredNavigationItem.id)\n );\n }\n}\n","import { IThemeSelector } from './theme-selector-interface';\n\nexport class ThemeSelector implements IThemeSelector {\n public colorTheme: string;\n\n public constructor(colorTheme: string) {\n this.colorTheme = colorTheme;\n }\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { FuseConfigService } from '@fuse/services/config.service';\nimport { FuseConfig } from '@fuse/types';\nimport { LocalStorageService } from 'app/core/services/local-storage.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ThemeSelector } from '../../../../../@fuse/types/theme-selector';\nimport { ThemeSelectorFormGroup } from './theme-selector-form-group';\n\n@Component({\n selector: 'app-theme-selector',\n styleUrls: ['./theme-selector.component.scss'],\n templateUrl: './theme-selector.component.html',\n})\nexport class ThemeSelectorComponent implements OnInit, OnDestroy {\n public formGroup: FormGroup;\n public fuseConfig: FuseConfig;\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(private _fuseConfigService: FuseConfigService, private _localStorageService: LocalStorageService) {}\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n // Build the config form\n // noinspection TypeScriptValidateTypes\n this.formGroup = new FormGroup({\n colorTheme: new FormControl(null),\n });\n\n // Subscribe to the config changes\n this._fuseConfigService.config.pipe(takeUntil(this._unsubscribeAll$)).subscribe((config) => {\n // Update the stored config\n this.fuseConfig = config;\n\n // Set the config form values without emitting an event\n // so that we don't end up with an infinite loop\n this.formGroup.setValue(new ThemeSelector(config.colorTheme), { emitEvent: false });\n });\n\n // Subscribe to the form value changes\n this.formGroup.valueChanges.pipe(takeUntil(this._unsubscribeAll$)).subscribe((config) => {\n // Update the config\n this._fuseConfigService.config = config;\n this._localStorageService.write('THEME', JSON.stringify(config));\n });\n }\n}\n","
    \n \n {{ \"TOOLBAR.COLOR_THEMES.LIGHT\" | translate }}\n {{ \"TOOLBAR.COLOR_THEMES.DARK\" | translate }}\n {{ \"TOOLBAR.COLOR_THEMES.SYSTEM\" | translate }}\n \n
    \n","\n
    \n
    \n \n menu\n \n\n
    \n\n
    \n \n
    \n\n
    \n \n
    \n
    \n\n
    \n\n
    \n \n\n \n \n
    \n \n \n {{ helpLink.icon }}\n {{ helpLink.label }}\n \n\n \n \n {{ helpLink.icon }}\n {{ helpLink.label }}\n \n
    \n
    \n\n
    \n\n \n\n \n \n\n
    \n\n \n\n
    \n \n
    \n\n \n \n {{ \"TOOLBAR.APPLICATION_SETTINGS\" | translate }}\n \n\n \n \n {{ \"TOOLBAR.USER_MANAGEMENT\" | translate }}\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 0 ? unreadNotificationNumber : '' }}\"\n matBadgePosition=\"above after\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n >\n 0\" class=\"accent-fg s-20\" svgIcon=\"svg_notifications_active\">\n notifications\n \n\n
    \n\n \n menu\n \n
    \n \n
    \n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';\nimport { FuseConfigService } from '@fuse/services/config.service';\nimport { FuseTranslationLoaderService } from '@fuse/services/translation-loader.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { ConfigurationService } from 'app/core/services/configuration.service';\nimport { NotificationService } from 'app/core/services/prothesis-api/notification.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { WorkingCustomerService } from 'app/core/services/prothesis-customer-api/working-customer.service';\nimport { SettingsService } from 'app/core/services/settings.service';\nimport { Area } from 'app/shared/enums/area.enum';\nimport find from 'lodash-es/find';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\nimport { locale as english } from './i18n/en';\nimport { locale as french } from './i18n/fr';\nimport { locale as portuguese } from './i18n/pt';\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-toolbar',\n styleUrls: ['./toolbar.component.scss'],\n templateUrl: './toolbar.component.html',\n})\nexport class ToolbarComponent implements OnInit, OnDestroy {\n public applicationSettingsFlag: boolean;\n public customerAreaFlag: boolean;\n public customerAreaHelpLinkReleaseNote = {\n displayFlag: true,\n icon: 'sticky_note_2',\n label: `Notes de version (version ${this._settingsService.version})`,\n topSeparatorFlag: false,\n url: 'https://prothesis.cloud/category/customer-area-release-notes/',\n };\n public helpLinkContact = {\n displayFlag: true,\n icon: 'phone',\n label: 'Contacter Prothesis Dental Solutions',\n topSeparatorFlag: false,\n url: 'https://prothesis.cloud/contact-us',\n };\n public helpLinkDocs = {\n displayFlag: true,\n icon: 'menu_book',\n label: 'Documentation en ligne',\n topSeparatorFlag: true,\n url: 'https://prothesis.cloud/docs',\n };\n public helpLinkReleaseNote = {\n displayFlag: true,\n icon: 'sticky_note_2',\n label: `Notes de version (version ${this._settingsService.version})`,\n topSeparatorFlag: false,\n url: 'https://prothesis.cloud/category/release-notes/',\n };\n public helpLinks: {\n action?: () => boolean;\n displayFlag: boolean;\n icon: string;\n isDisabledAction?: () => boolean;\n label: string;\n topSeparatorFlag: boolean;\n url?: string;\n }[];\n public helpLinkSupport = {\n displayFlag: true,\n icon: 'svg_support',\n label: 'Téléassistance PROTHESIS',\n topSeparatorFlag: false,\n url: 'https://prothesis.cloud/support/',\n };\n public helpLinkWarn = {\n displayFlag: true,\n icon: 'chat',\n label: 'Signaler un problème / donner mon avis',\n topSeparatorFlag: true,\n url: 'https://prothesis.cloud/contact-us/#contact-form',\n };\n\n public hiddenNavbar: boolean;\n public horizontalNavbar: boolean;\n public laboratoryAreaFlag: boolean;\n public languages: any;\n public multiConnexionFlag = false;\n public navigation: any;\n public notificationNumber: number = undefined;\n public rightNavbar: boolean;\n public selectedLanguage: any;\n public unreadNotificationNumber: number = undefined;\n public userManagementFlag: boolean;\n public username: string;\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _authService: AuthService,\n private _configurationService: ConfigurationService,\n private _fuseConfigService: FuseConfigService,\n private _fuseTranslationLoaderService: FuseTranslationLoaderService,\n private _fuseNavigationService: FuseNavigationService,\n private _fuseSidebarService: FuseSidebarService,\n private _notificationService: NotificationService,\n private _router: Router,\n private _settingsService: SettingsService,\n private _translateService: TranslateService,\n private _workingCustomerService: WorkingCustomerService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {\n this.languages = _settingsService.getSupportedLanguages();\n\n this._authService.isDoneLoading$.pipe(takeUntil(this._unsubscribeAll$)).subscribe((isDoneLoadingFlag) => {\n if (isDoneLoadingFlag) {\n if (this._authService.allowedCustomerUuids?.length > 0 && this._authService.allowedLaboratoryUuids?.length > 0) {\n this.multiConnexionFlag = true;\n }\n }\n });\n\n this._authService.areaConfiguredFlag$.pipe(takeUntil(this._unsubscribeAll$)).subscribe((areaConfiguredFlag) => {\n if (areaConfiguredFlag) {\n this.helpLinks = this.buildHelpLinks(this._authService.area);\n this.setAreaFlag();\n }\n });\n\n this.navigation = [];\n this._fuseTranslationLoaderService.loadTranslations(french, english, portuguese);\n\n this.helpLinks = this.buildHelpLinks(this._authService.area);\n this.setAreaFlag();\n }\n\n public applicationSettings(): void {\n this._router.navigateByUrl('/application-settings');\n }\n\n public buildHelpLinks(area: Area): any {\n if (this._authService.isAdminOrSuperAdminFlag) {\n return [this.helpLinkReleaseNote, this.helpLinkDocs, this.helpLinkWarn, this.helpLinkContact, this.helpLinkSupport];\n }\n if (area === Area.Customer) {\n return [this.customerAreaHelpLinkReleaseNote, this.helpLinkWarn];\n } else if (area === Area.Laboratory) {\n return [this.helpLinkReleaseNote, this.helpLinkDocs, this.helpLinkWarn, this.helpLinkContact, this.helpLinkSupport];\n } else {\n return [this.helpLinkWarn];\n }\n }\n\n public goToProfile(): void {\n this._router.navigateByUrl('');\n }\n\n public logout(): void {\n this._workingCustomerService.clear();\n this._workingLaboratoryService.clear();\n this._authService.logout();\n }\n\n /**\n * Redirect to identity server account page\n */\n public myAccount(): void {\n this._router.navigateByUrl('/account');\n }\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n this._fuseNavigationService.onNavigationRegistered.pipe(takeUntil(this._unsubscribeAll$)).subscribe(() => {\n this.navigation = this._fuseNavigationService.getCurrentNavigation();\n });\n\n // Subscribe to the config changes\n this._fuseConfigService.config.pipe(takeUntil(this._unsubscribeAll$)).subscribe((settings) => {\n this.horizontalNavbar = settings.layout.navbar.position === 'top';\n this.rightNavbar = settings.layout.navbar.position === 'right';\n this.hiddenNavbar = settings.layout.navbar.hidden === true;\n });\n\n // Set the selected language from default languages\n this.selectedLanguage = find(this.languages, { id: this._translateService.currentLang });\n\n this._authService.isAuthenticated$\n .pipe(filter((isAuthenticate) => isAuthenticate))\n .pipe(takeUntil(this._unsubscribeAll$))\n .subscribe(() => {\n this.username = this._authService.name;\n });\n\n this._authService.areaConfiguredFlag$.subscribe((areaConfiguredFlag: boolean) => {\n if (areaConfiguredFlag && this._workingLaboratoryService.laboratoryRole) {\n // Laboratory roles\n const laboratoryRole = this._workingLaboratoryService.laboratoryRole;\n this.applicationSettingsFlag =\n laboratoryRole.subscriptionSettingsFlag ||\n laboratoryRole.laboratorySettingsFlag ||\n laboratoryRole.storageSettingsFlag ||\n laboratoryRole.userCustomerSettingsFlag ||\n laboratoryRole.taxSettingsFlag ||\n laboratoryRole.fiscalYearSettingsFlag;\n this.userManagementFlag = laboratoryRole.laboratoryRoleSettingsFlag || laboratoryRole.userLaboratorySettingsFlag;\n }\n });\n\n this._workingLaboratoryService.exploredUuid$\n .pipe(takeUntil(this._unsubscribeAll$))\n .pipe(distinctUntilChanged())\n .pipe(filter((laboratoryUuid) => !laboratoryUuid))\n .subscribe(() => {\n this.notificationNumber = 0;\n this.unreadNotificationNumber = 0;\n });\n\n this._notificationService.onNotificationRefreshed$.pipe(takeUntil(this._unsubscribeAll$)).subscribe((notifications) => {\n this.notificationNumber = notifications?.length;\n this.unreadNotificationNumber = notifications?.filter((x) => NotificationService.unreadNotificationFlag(x))?.length;\n });\n }\n\n public setAreaFlag(): void {\n this.laboratoryAreaFlag = this._authService.area === Area.Laboratory || this._workingLaboratoryService.exploringFlag;\n this.customerAreaFlag = this._authService.area === Area.Customer || this._workingCustomerService.exploringFlag;\n }\n\n public setLanguage(lang): void {\n // Set the selected language for the toolbar\n this.selectedLanguage = lang;\n\n // Use the selected language for translations\n this._translateService.use(lang.id);\n\n this._settingsService.setLanguage(lang.id);\n\n window.location.reload();\n }\n\n public toggleSidebarOpen(key): void {\n this._fuseSidebarService.getSidebar(key).toggleOpen();\n }\n\n public userManagement(): void {\n this._router.navigateByUrl('/user-management');\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 \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\n","import { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FuseConfigService } from '@fuse/services/config.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SidebarComponent } from './components/sidebar/sidebar.component';\nimport { SubscriptionBannerModel } from './components/subscription-banner/subscription-banner.model';\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-vertical-layout-1',\n styleUrls: ['./layout.component.scss'],\n templateUrl: './layout.component.html',\n})\nexport class LayoutComponent implements OnInit, OnDestroy {\n @ViewChild('_sidebarComponent') private _sidebarComponent: SidebarComponent;\n public fuseConfig: any;\n public subscriptionBanner: SubscriptionBannerModel;\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(private _fuseConfigService: FuseConfigService) {}\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n // Subscribe to config changes\n this._fuseConfigService.config.pipe(takeUntil(this._unsubscribeAll$)).subscribe((config) => {\n this.fuseConfig = config;\n });\n }\n\n public sidebarOpenedChangedHandler(opened: boolean): void {\n if (opened) {\n this._sidebarComponent.afterOpenedHandler();\n } else {\n this._sidebarComponent.afterClosedHandler();\n }\n }\n}\n","\n \n\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ProgressBarService } from '../progress-bar.service';\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-progress-bar',\n styleUrls: ['./progress-bar.component.scss'],\n templateUrl: './progress-bar.component.html',\n})\nexport class ProgressBarComponent implements OnInit, OnDestroy {\n public bufferValue: number;\n public mode: 'determinate' | 'indeterminate' | 'buffer' | 'query';\n public value: number;\n public visible: boolean;\n\n // Private\n private _unsubscribeAll$: Subject = new Subject();\n\n /**\n * Constructor\n *\n * @param {ProgressBarService} _progressBarService\n */\n public constructor(private _progressBarService: ProgressBarService) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Subscribe to the progress bar service properties\n\n // Buffer value\n this._progressBarService.bufferValue.pipe(takeUntil(this._unsubscribeAll$)).subscribe((bufferValue) => {\n this.bufferValue = bufferValue;\n });\n\n // Mode\n this._progressBarService.mode.pipe(takeUntil(this._unsubscribeAll$)).subscribe((mode) => {\n this.mode = mode;\n });\n\n // Value\n this._progressBarService.value.pipe(takeUntil(this._unsubscribeAll$)).subscribe((value) => {\n this.value = value;\n });\n\n // Visible\n this._progressBarService.visible.pipe(takeUntil(this._unsubscribeAll$)).subscribe((visible) => {\n this.visible = visible;\n });\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n}\n","\n\n\n\n\n\n \n\n\n","import { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\nimport { FuseConfigService } from '@fuse/services/config.service';\nimport { FuseSplashScreenService } from '@fuse/services/splash-screen.service';\nimport { FuseTranslationLoaderService } from '@fuse/services/translation-loader.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { locale as navigationEnglish } from 'app/core/services/left-menu/i18n/en';\nimport { locale as navigationFrench } from 'app/core/services/left-menu/i18n/fr';\nimport { locale as navigationPortuguese } from 'app/core/services/left-menu/i18n/pt';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AuthService } from './core/services/auth.service';\nimport { ConfigurationService } from './core/services/configuration.service';\nimport { AreaMenu } from './core/services/left-menu/area-menu.enum';\nimport { LeftMenuService } from './core/services/left-menu/left-menu.service';\nimport { LocalStorageService } from './core/services/local-storage.service';\nimport { LoggerService } from './core/services/logger.service';\nimport { WorkingLaboratoryService } from './core/services/prothesis-api/working-laboratory.service';\nimport { WorkingCustomerService } from './core/services/prothesis-customer-api/working-customer.service';\nimport { SettingsService } from './core/services/settings.service';\nimport { ThemingService } from './core/services/theme.service';\nimport { NavigationInterface } from './layout/components/navigation/models/navigation-interface';\nimport { Area } from './shared/enums/area.enum';\n\n@Component({\n selector: 'app-root',\n styleUrls: ['./app.component.scss'],\n templateUrl: './app.component.html',\n})\nexport class AppComponent implements OnDestroy, OnInit {\n public fuseConfig: any;\n private _themeSubscription: Subscription;\n private _unsubscrbieConfig$: Subject = new Subject();\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _authService: AuthService,\n @Inject(DOCUMENT) private _document: any,\n private _configurationService: ConfigurationService,\n private _http: HttpClient,\n private _localStorageService: LocalStorageService,\n private _platform: Platform,\n private _fuseConfigService: FuseConfigService,\n private _fuseNavigationService: FuseNavigationService,\n private _fuseTranslationLoaderService: FuseTranslationLoaderService,\n private _loggerService: LoggerService,\n private _leftMenuService: LeftMenuService,\n private _themingService: ThemingService,\n private _translateService: TranslateService,\n private _workingCustomerService: WorkingCustomerService,\n private _workingLaboratoryService: WorkingLaboratoryService,\n _fuseSplashScreenService: FuseSplashScreenService,\n _settingService: SettingsService,\n matIconRegistry: MatIconRegistry,\n domSanitizer: DomSanitizer\n ) {\n matIconRegistry.addSvgIconSet(domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/prothesis-icons.svg'));\n matIconRegistry.addSvgIconSet(domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/teeth-icons.svg'));\n\n this._configureWithNewConfigApi();\n\n // Register the navigation to the service\n this._fuseNavigationService.register('main', new Array());\n\n // Set the main navigation as our current navigation\n this._fuseNavigationService.setCurrentNavigation('main');\n\n // Add languages\n this._translateService.addLangs(_settingService.getSupportedLanguageIds());\n\n // Set the default language\n this._translateService.setDefaultLang(_settingService.getDefaultLanguage());\n\n // Set the navigation translations\n this._fuseTranslationLoaderService.loadTranslations(navigationFrench, navigationEnglish, navigationPortuguese);\n\n // Use a language\n this._translateService.use(_settingService.getLanguage());\n\n /**\n * ----------------------------------------------------------------------------------------------------\n * ngxTranslate Fix Start\n * ----------------------------------------------------------------------------------------------------\n */\n\n /**\n * If you are using a language other than the default one, i.e. Turkish in this case,\n * you may encounter an issue where some of the components are not actually being\n * translated when your app first initialized.\n *\n * This is related to ngxTranslate module and below there is a temporary fix while we\n * are moving the multi language implementation over to the Angular's core language\n * service.\n */\n\n // Set the default language to 'en' and then back to 'tr'.\n // '.use' cannot be used here as ngxTranslate won't switch to a language that's already\n // been selected and there is no way to force it, so we overcome the issue by switching\n // the default language back and forth.\n // setTimeout(() => {\n // this._translateService.setDefaultLang('en');\n // this._translateService.setDefaultLang('tr');\n // });\n\n /**\n * ----------------------------------------------------------------------------------------------------\n * ngxTranslate Fix End\n * ----------------------------------------------------------------------------------------------------\n */\n\n // Add is-mobile class to the body if the platform is mobile\n if (this._platform.ANDROID || this._platform.IOS) {\n this._document.body.classList.add('is-mobile');\n }\n }\n\n public buildNavigation(): void {\n // Set the navigation menu\n const isAdminOrSuperAdminFlag: boolean = this._authService.isAdminOrSuperAdminFlag;\n const areaMenus: Array = [];\n if (isAdminOrSuperAdminFlag) {\n areaMenus.push(AreaMenu.Admin);\n } else if (this._authService.area === Area.Laboratory && this._authService.allowedLaboratoryUuids) {\n areaMenus.push(AreaMenu.Laboratory);\n } else if (this._authService.area === Area.Customer && this._authService.allowedCustomerUuids) {\n if (this._workingCustomerService.customerMemberFlag || !this._workingLaboratoryService.laboratoryRateAutoPublishFlag) {\n areaMenus.push(AreaMenu.CustomerMember);\n } else {\n areaMenus.push(AreaMenu.CustomerAndCustomerGroup);\n }\n } else {\n areaMenus.push(AreaMenu.NoArea);\n }\n const navigation = this._leftMenuService.getNavigation(\n areaMenus,\n null,\n isAdminOrSuperAdminFlag,\n this._workingLaboratoryService.laboratoryName\n );\n this._fuseNavigationService.unregister('main');\n this._fuseNavigationService.register('main', navigation);\n\n // Try exploring\n if (isAdminOrSuperAdminFlag) {\n this._workingLaboratoryService.tryExploring();\n }\n\n if (isAdminOrSuperAdminFlag || this._authService.area === Area.Laboratory) {\n this._workingCustomerService.tryExploring();\n }\n }\n\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._themeSubscription.unsubscribe();\n\n this._unsubscrbieConfig$.next();\n this._unsubscrbieConfig$.complete();\n\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n const colorThemeString = this._localStorageService.read('THEME');\n if (colorThemeString) {\n const colorTheme = JSON.parse(colorThemeString);\n this._fuseConfigService.config = colorTheme;\n }\n\n this._authService.isDoneLoading$.pipe(takeUntil(this._unsubscribeAll$)).subscribe((isDoneLoadingFlag) => {\n if (isDoneLoadingFlag) {\n this._authService.areaConfiguredFlag$.pipe(takeUntil(this._unsubscribeAll$)).subscribe(() => this.buildNavigation());\n }\n });\n\n // Subscribe to config changes\n this._fuseConfigService.config.pipe(takeUntil(this._unsubscrbieConfig$)).subscribe((config) => {\n this.fuseConfig = config;\n\n // Boxed\n if (this.fuseConfig.layout.width === 'boxed') {\n this._document.body.classList.add('boxed');\n } else {\n this._document.body.classList.remove('boxed');\n }\n\n console.info(`AppComponent: fuse config changed : ${config.colorTheme}`);\n if (config.colorTheme === 'system') {\n if (!this._themeSubscription || this._themeSubscription.closed) {\n console.info('AppComponent: Selected theme is System, subscribing to ThemeService.theme');\n this._themeSubscription = this._themingService.theme.subscribe((theme) => {\n this._applyTheme(theme);\n });\n }\n } else {\n if (this._themeSubscription && !this._themeSubscription.closed) {\n this._themeSubscription.unsubscribe();\n }\n\n this._applyTheme(this.fuseConfig.colorTheme);\n }\n });\n }\n\n private _applyTheme(theme: string) {\n for (const className of this._document.body.classList) {\n if (className.startsWith('theme-')) {\n this._document.body.classList.remove(className);\n }\n }\n\n this._document.body.classList.add(theme);\n }\n\n private _configureWithNewConfigApi(): void {\n this._http.get('/Configuration').subscribe((res) => {\n this._authService.initialize(res['identityServerAddress']);\n this._loggerService.initialize(res['env']);\n this._configurationService.Feature1EnabledFlag = res['feature1EnabledFlag'];\n this._configurationService.Feature2EnabledFlag = res['feature2EnabledFlag'];\n this._configurationService.Feature3EnabledFlag = res['feature3EnabledFlag'];\n this._configurationService.Feature4EnabledFlag = res['feature4EnabledFlag'];\n this._configurationService.IdentityServerAddress = res['identityServerAddress'];\n this._configurationService.ProthesisApiAddress = res['prothesisApiAddress'];\n this._configurationService.ProthesisCustomerApiAddress = res['prothesisCustomerApiAddress'];\n this._configurationService.ProthesisIdentityApiAddress = res['prothesisIdentityApiAddress'];\n this._authService.runInitialLoginSequence();\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NoteComponent } from './note.component';\n\n@NgModule({\n declarations: [NoteComponent],\n imports: [\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n MatIconModule,\n ],\n exports: [NoteComponent],\n})\nexport class NoteModule {}\n","import {\n HTTP_INTERCEPTORS,\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpHeaders,\n HttpInterceptor,\n HttpRequest,\n HttpResponse,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { Area } from '../shared/enums/area.enum';\nimport { AuthService } from './services/auth.service';\nimport { ConfigurationService } from './services/configuration.service';\nimport { HttpHeaderService } from './services/http-header.service';\nimport { NotifyService } from './services/notify/notify.service';\nimport { LaboratoryHttpHeaderService } from './services/prothesis-api/laboratory-http-header.service';\nimport { TimeZoneSingleton } from './services/prothesis-api/time-zone-singleton';\n\n// From https://medium.com/@MetonymyQT/angular-http-interceptors-what-are-they-and-how-to-use-them-52e060321088\n@Injectable()\nexport class ApiInterceptor implements HttpInterceptor {\n private _apiHashCustomer: string;\n private _apiHashLaboratory: string;\n private _customerApiAreaMessagePathRegex = /^.*api\\/CustomerAreaMessage[/]{0,1}$/;\n private _getAllowedTenantsApiPathRegex = /^.*\\/api\\/authenticated\\/User\\/GetAllowedTenants[/]{0,1}$/;\n private _laboratoryApiAreaMessagePathRegex = /^.*api\\/LaboratoryAreaMessage[/]{0,1}$/;\n\n public constructor(\n private _authService: AuthService,\n private _configurationService: ConfigurationService,\n private _httpHeaderService: HttpHeaderService,\n private _laboratoryHttpHeaderService: LaboratoryHttpHeaderService,\n private _notifyService: NotifyService,\n private _router: Router\n ) {}\n\n public intercept(request: HttpRequest, next: HttpHandler): Observable> {\n if (\n this._isApiRequest(request.url) &&\n !this._isApiAreaMessageRequest(request.url) &&\n !this._isApiGetAllowedTenantsRequest(request.url)\n ) {\n this._notifyService.dismiss();\n }\n\n return next.handle(request).pipe(\n tap(\n (event) => {\n if (event instanceof HttpResponse) {\n if (this._isApiRequest(event.url)) {\n this._notifyService.flagDown();\n }\n\n this._configureHttpHeaderData(event.headers);\n if (this._isProthesisApiRequest(event.url)) {\n this._configureLaboratoryHttpHeaderData(event.headers);\n }\n\n if (this._isGetInfoApiRequest(event.url)) {\n this._apiHashCustomer = event.headers.has('X-hash-customer') ? event.headers.get('X-hash-customer') : undefined;\n this._apiHashLaboratory = event.headers.has('X-hash-laboratory') ? event.headers.get('X-hash-laboratory') : undefined;\n } else if (this._isProthesisApiRequest(event.url) || this._isProthesisCustomerApiRequest(event.url)) {\n this._configureHash(event.headers, event.url);\n }\n }\n },\n (error) => {\n if (error instanceof HttpErrorResponse) {\n this._configureHttpHeaderData(error.headers);\n if (this._isProthesisApiRequest(error.url)) {\n this._configureLaboratoryHttpHeaderData(error.headers);\n }\n\n if (error.status === 0) {\n this._notifyService.flagDown();\n this._notifyService.displayErrorMessagesNow('Impossible de se connecter à Prothesis. Vérifier votre connection internet.');\n } else if (error.status === -1) {\n this._notifyService.flagDown();\n this._notifyService.displayErrorMessagesNow(\n 'Vous devez choisir un laboratoire à explorer avant de pouvoir accéder à ses données.',\n () => {\n this._router.navigateByUrl('/admin/laboratory');\n },\n 'Laboratoires'\n );\n } else if (error.status === -2) {\n this._notifyService.flagDown();\n this._notifyService.displayErrorMessagesNow(\n 'Vous devez choisir un client à explorer avant de pouvoir accéder à ses données.',\n () => {\n this._router.navigateByUrl('/customer');\n },\n 'Clients'\n );\n } else if (error.status === 400) {\n const errorMessage = \"Une erreur imprévue s'est produite.\";\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n if (errorMessageFromApi.length === 0) {\n this._notifyService.flagDown();\n this._notifyService.displayErrorMessagesNow(errorMessage);\n } else {\n this._notifyService.displayErrorMessagesNow(errorMessageFromApi);\n }\n } else if (error.status === 404) {\n const errorMessage = \"L'enregistrement auquel vous essayez d'accéder n'existe pas.\";\n const errorMessageFromApi = this._notifyService.buildErrorMessage(error);\n if (errorMessageFromApi.length === 0) {\n this._notifyService.displayErrorMessagesNow(errorMessage);\n } else {\n this._notifyService.displayErrorMessagesNow(errorMessageFromApi);\n }\n } else if (error.status === 403) {\n this._notifyService.flagDown();\n this._notifyService.displayErrorMessagesNow(\"Vous n'êtes pas autorisé à effectuer cette opération.\");\n } else if (error.status === 401) {\n // Starts the oidc login flow\n this._authService.login();\n } else if (error.status === 503) {\n this._notifyService.flagDown();\n this._notifyService.displayErrorMessagesNow(error.error);\n } else {\n /* For 500 errors and any unexpected HTTP error code */\n this._notifyService.flagDown();\n this._notifyService.displayErrorMessagesNow(\"Une erreur imprévue s'est produite.\");\n }\n }\n }\n )\n );\n }\n\n private _compareCustomerHash(apiHashCustomer, apiHashLaboratory): void {\n if (\n (apiHashCustomer && this._apiHashCustomer !== apiHashCustomer) ||\n (apiHashLaboratory && this._apiHashLaboratory !== apiHashLaboratory)\n ) {\n this._apiHashCustomer = apiHashCustomer;\n this._apiHashLaboratory = apiHashLaboratory;\n this._authService.getInfoToRefreshCustomer();\n }\n }\n\n private _compareLaboratoryHash(apiHashLaboratory): void {\n if (apiHashLaboratory && this._apiHashLaboratory !== apiHashLaboratory) {\n this._apiHashLaboratory = apiHashLaboratory;\n this._authService.getInfoToRefreshLaboratory();\n }\n }\n\n private _configureHash(headers: HttpHeaders, url: string): void {\n const apiHashCustomer = headers.has('X-hash-customer') ? headers.get('X-hash-customer') : undefined;\n const apiHashLaboratory = headers.has('X-hash-laboratory') ? headers.get('X-hash-laboratory') : undefined;\n\n if (this._authService.area !== 0 && !this._authService.area) {\n return;\n }\n if (this._authService.area === Area.Admin || this._authService.area === Area.Laboratory) {\n if (this._isProthesisApiRequest(url)) {\n this._compareLaboratoryHash(apiHashLaboratory);\n } else if (this._isProthesisCustomerApiRequest(url)) {\n this._compareLaboratoryHash(apiHashLaboratory);\n this._compareCustomerHash(apiHashCustomer, apiHashLaboratory);\n }\n }\n if (this._authService.area === Area.Customer) {\n this._compareCustomerHash(apiHashCustomer, apiHashLaboratory);\n }\n }\n\n private _configureHttpHeaderData(headers: HttpHeaders): void {\n if (headers !== null) {\n // If X-Customer-Area-Message-Update-Etag and X-Laboratory-Area-Message-Update-Etag are not set, this means we should remove the banner.\n // So we need to pass undefined to the setHttpHeaderInfo method bellow.\n // This http headers are working differently than the subscription, storage and suspended http headers.\n this._httpHeaderService.setHttpHeaderInfo(\n headers.has('X-Customer-Area-Message-Update-Etag') ? headers.get('X-Customer-Area-Message-Update-Etag') : undefined,\n headers.has('X-Laboratory-Area-Message-Update-Etag') ? headers.get('X-Laboratory-Area-Message-Update-Etag') : undefined\n );\n }\n }\n\n private _configureLaboratoryHttpHeaderData(headers: HttpHeaders): void {\n if (TimeZoneSingleton.getInstance() && TimeZoneSingleton.getInstance().laboratoryTimeZone) {\n // If the subscription, storage and suspended http headers are not set, this means that the request is not a laboratory request\n // and we don't want to call the setHttpHeaderInfo as we don't have the information at this time for the subscription banner.\n // This http headers are working differently than the X-Customer-Area-Message-Update-Etag and X-Laboratory-Area-Message-Update-Etag.\n if (\n headers.has('X-Subscription-End-Date') &&\n headers.has('X-Last-Subscription-End-Date') &&\n headers.has('X-Last-Nonfree-Subscription-Product-Type') &&\n headers.has('X-Storage-Capacity-Limit') &&\n headers.has('X-Storage-Usage') &&\n headers.has('X-Suspended-Flag')\n ) {\n this._laboratoryHttpHeaderService.setHttpHeaderInfo(\n headers.get('X-Subscription-End-Date'),\n headers.get('X-Last-Subscription-End-Date'),\n headers.get('X-Last-Nonfree-Subscription-Product-Type'),\n headers.get('X-Storage-Capacity-Limit'),\n headers.get('X-Storage-Usage'),\n headers.get('X-Suspended-Flag')\n );\n }\n }\n }\n\n private _isApiAreaMessageRequest(url: string): boolean {\n return this._laboratoryApiAreaMessagePathRegex.test(url) || this._customerApiAreaMessagePathRegex.test(url);\n }\n\n private _isApiGetAllowedTenantsRequest(url: string): boolean {\n return this._getAllowedTenantsApiPathRegex.test(url);\n }\n\n private _isApiRequest(url: string): boolean {\n return (\n url.startsWith(this._configurationService.ProthesisApiAddress) ||\n url.startsWith(this._configurationService.ProthesisCustomerApiAddress) ||\n url.startsWith(this._configurationService.ProthesisIdentityApiAddress)\n );\n }\n\n private _isGetInfoApiRequest(url: string): boolean {\n return url.indexOf('GetInfo') !== -1;\n }\n\n private _isProthesisApiRequest(url: string): boolean {\n return url.startsWith(this._configurationService.ProthesisApiAddress);\n }\n\n private _isProthesisCustomerApiRequest(url: string): boolean {\n return url.startsWith(this._configurationService.ProthesisCustomerApiAddress);\n }\n}\n\nexport const apiInterceptorProvider = [{ provide: HTTP_INTERCEPTORS, useClass: ApiInterceptor, multi: true }];\n","import {\n HTTP_INTERCEPTORS,\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpParams,\n HttpRequest,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { from, Observable, throwError } from 'rxjs';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { AuthService } from './services/auth.service';\nimport { WorkingLaboratoryService } from './services/prothesis-api/working-laboratory.service';\nimport { WorkingCustomerService } from './services/prothesis-customer-api/working-customer.service';\n\n// From https://medium.com/@MetonymyQT/angular-http-interceptors-what-are-they-and-how-to-use-them-52e060321088\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n public constructor(\n private _authService: AuthService,\n private _workingCustomerService: WorkingCustomerService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {}\n\n public intercept(httpRequest: HttpRequest, next: HttpHandler): Observable> {\n if (httpRequest.url.startsWith('http')) {\n const requestUrl = new URL(httpRequest.url);\n if (\n requestUrl.pathname.indexOf('/api/') === 0 ||\n requestUrl.pathname.indexOf('/identity/api/') === 0 ||\n requestUrl.pathname.indexOf('/customer/api/') === 0\n ) {\n if (\n this._authService.isAdminOrSuperAdminFlag &&\n !this._workingLaboratoryService.tenantUuid &&\n !requestUrl.pathname.startsWith('/api/admin') &&\n !requestUrl.pathname.startsWith('/identity/api') &&\n !requestUrl.pathname.startsWith('/api/LaboratoryAreaMessage/') &&\n !requestUrl.pathname.startsWith('/customer/api/CustomerAreaMessage/') &&\n requestUrl.pathname !== '/api/authenticated/User/GetAllowedTenants' &&\n !requestUrl.pathname.endsWith('/GetInfo') &&\n !requestUrl.pathname.endsWith('/GetInfo')\n ) {\n // dans l'url si tenantuuid est là mais pas défini\n console.log('Vous devez choisir un laboratoire à explorer avant de pouvoir accéder à ses données.');\n const response = new HttpErrorResponse({\n status: -1,\n statusText: 'Canceled because laboratoryUuid is undefined',\n url: httpRequest.url,\n });\n\n return throwError(response);\n }\n\n if (\n !this._workingCustomerService.tenantUuid &&\n requestUrl.pathname.startsWith('/customer/api') &&\n !requestUrl.pathname.startsWith('/customer/api/Customer/authenticated/Customer/InitializePicker') &&\n !requestUrl.pathname.startsWith('/customer/api/CustomerAreaMessage/') &&\n !requestUrl.pathname.endsWith('/GetInfo')\n ) {\n // dans l'url si tenantuuid est là mais pas défini\n console.log('Vous devez choisir un client à explorer avant de pouvoir accéder à ses données.');\n const response = new HttpErrorResponse({\n status: -2,\n statusText: 'Canceled because customerUuid is undefined',\n url: httpRequest.url,\n });\n\n return throwError(response);\n }\n\n if (this._authService.isAccessTokenAboutToExpire) {\n return from(this._authService.refresh()).pipe(\n catchError((error) => {\n console.warn('Silent refresh failed, redirecting to login', error);\n this._authService.login();\n return throwError(\n new HttpErrorResponse({\n status: -3,\n statusText: 'Authentication required after failed token refresh',\n url: httpRequest.url,\n })\n );\n }),\n mergeMap(() => {\n const authRequest: HttpRequest = this.setAuthHeaders(httpRequest);\n return next.handle(authRequest);\n })\n );\n }\n const authRequest: HttpRequest = this.setAuthHeaders(httpRequest);\n return next.handle(authRequest);\n }\n }\n\n return next.handle(httpRequest);\n }\n\n public setAuthHeaders(httpRequest: HttpRequest): HttpRequest {\n let headers = httpRequest.headers;\n\n // Don't set the Content-Type and Accept if the body a FormData (in case of a file upload for instance)\n if (!(httpRequest.body instanceof FormData)) {\n headers = headers.append('Content-Type', 'application/json');\n }\n\n headers = headers.append('Accept', 'application/json');\n\n // If an access token is set, send it as part of the request.\n const accessToken = this._authService.accessToken;\n if (accessToken) {\n const authorizationValue = 'Bearer ' + accessToken;\n headers = headers.append('Authorization', authorizationValue);\n }\n\n const httpParams: HttpParams = httpRequest.params;\n const authReq = httpRequest.clone({\n headers: headers,\n params: httpParams,\n });\n\n return authReq;\n }\n}\n\nexport const authInterceptorProvider = [{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }];\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\n@Injectable()\nexport class BlobErrorHttpInterceptor implements HttpInterceptor {\n public intercept(req: HttpRequest, next: HttpHandler): Observable> {\n return next.handle(req).pipe(\n catchError((err) => {\n if (err instanceof HttpErrorResponse && err.error instanceof Blob && err.error.type === 'application/json') {\n // https://github.com/angular/angular/issues/19888\n // https://stackoverflow.com/questions/48500822/how-to-handle-error-for-response-type-blob-in-httprequest#answer-57530044\n // When request of type Blob, the error is also in Blob instead of object of the json data\n return new Promise((_resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e: Event) => {\n try {\n const errmsg = JSON.parse((e.target as any).result);\n reject(\n new HttpErrorResponse({\n error: errmsg,\n headers: err.headers,\n status: err.status,\n statusText: err.statusText,\n url: err.url,\n })\n );\n } catch (e) {\n reject(err);\n }\n };\n reader.onerror = () => {\n reject(err);\n };\n reader.readAsText(err.error);\n });\n }\n return throwError(err);\n })\n );\n }\n}\n\nexport const blobErrorHttpInterceptorProvider = [{ provide: HTTP_INTERCEPTORS, useClass: BlobErrorHttpInterceptor, multi: true }];\n","import { HTTP_INTERCEPTORS, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { ProgressBarService } from './services/progress-bar/progress-bar.service';\n\n@Injectable()\nexport class LoadingStatusInterceptor implements HttpInterceptor {\n public constructor(private _progressBarService: ProgressBarService) {}\n\n public intercept(request: HttpRequest, next: HttpHandler): Observable> {\n if (request.url.startsWith('http')) {\n const requestUrl = new URL(request.url);\n if (\n requestUrl.pathname.indexOf('/api/') === 0 ||\n requestUrl.pathname.indexOf('/identity/api/') === 0 ||\n requestUrl.pathname.indexOf('/customer/api/') === 0\n ) {\n this._progressBarService.show();\n\n return next.handle(request).pipe(\n // Both solution worked but I chose the first one because it's far less verbose.\n // https://stackoverflow.com/a/50620910/1501861\n // https://stackoverflow.com/questions/47218216/angular-how-to-know-if-request-has-been-cancelled-in-httpclient/49536421#49536421\n finalize(() => {\n // request completes, errors, or is cancelled\n this._progressBarService.hide();\n })\n );\n }\n }\n\n return next.handle(request);\n }\n}\n\nexport const loadingStatusInterceptorProvider = [{ provide: HTTP_INTERCEPTORS, useClass: LoadingStatusInterceptor, multi: true }];\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { filter, map, tap } from 'rxjs/operators';\nimport { AuthService } from './auth.service';\n\n@Injectable()\nexport class AuthGuardWithForcedLogin implements CanActivate {\n public constructor(private _authService: AuthService, private _router: Router) {}\n\n public canActivate(_: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | boolean {\n return this._authService.isDoneLoading$\n .pipe(filter((isDone) => isDone))\n .pipe(tap(() => this._authService.isAuthenticated || this._authService.login(state.url)))\n .pipe(map(() => this._authService.isAuthenticated));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { OAuthModule } from 'angular-oauth2-oidc';\nimport { ComboModule } from 'app/shared/components/combo/combo.module';\nimport { NoteModule } from 'app/shared/components/note/note.module';\nimport { DirectivesModule } from 'app/shared/directives/directives.module';\nimport { CurrencySymbolPipe } from 'app/shared/pipes/currency-symbol.pipe';\nimport { CustomDatePipe } from 'app/shared/pipes/custom-date.pipe';\nimport { PipeModule } from 'app/shared/pipes/pipe.module';\nimport { SavedChangeGuard } from 'app/shared/saved-change/saved-change.guard';\nimport { apiInterceptorProvider } from './api.interceptor';\nimport { authInterceptorProvider } from './auth.interceptor';\nimport { blobErrorHttpInterceptorProvider } from './blob-error-http.interceptor';\nimport { loadingStatusInterceptorProvider } from './loading-status.interceptor';\nimport { AuthGuardWithForcedLogin } from './services/auth-guard-with-forced-login.service';\nimport { AuthService } from './services/auth.service';\nimport { ContextMenuModule } from './services/context-menu/context-menu.module';\nimport { AbstractActionConfirmationDialogComponent } from './services/dialog-box/abstract-action-confirmation-dialog/abstract-action-confirmation-dialog.component';\nimport { ActionConfirmationComboDialogComponent } from './services/dialog-box/action-confirmation-combo-dialog/action-confirmation-combo-dialog.component';\nimport { ActionConfirmationDialogComponent } from './services/dialog-box/action-confirmation-dialog/action-confirmation-dialog.component';\nimport { ActionConfirmationInformationDialogComponent } from './services/dialog-box/action-confirmation-information-dialog/action-confirmation-information-dialog.component';\nimport { ActionConfirmationMessageDialogComponent } from './services/dialog-box/action-confirmation-message-dialog/action-confirmation-message-dialog.component';\nimport { ActionConfirmationNumberDialogComponent } from './services/dialog-box/action-confirmation-number-dialog/action-confirmation-number-dialog.component';\nimport { SmartSnackComponent } from './services/notify/smart-snack/smart-snack.component';\nimport { ProgressBarModule } from './services/progress-bar/progress-bar.module';\nimport { ProgressBarComponent } from './services/progress-bar/progress-bar/progress-bar.component';\n\n@NgModule({\n imports: [\n ComboModule,\n CommonModule,\n DirectivesModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n HttpClientModule,\n OAuthModule.forRoot(),\n MatButtonModule,\n MatProgressBarModule,\n MatDatepickerModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSlideToggleModule,\n MatIconModule,\n MatInputModule,\n MatMomentDateModule,\n MatSnackBarModule,\n NoteModule,\n PipeModule,\n ProgressBarModule,\n ReactiveFormsModule,\n ContextMenuModule,\n ],\n providers: [CustomDatePipe, CurrencySymbolPipe],\n declarations: [\n SmartSnackComponent,\n AbstractActionConfirmationDialogComponent,\n ActionConfirmationComboDialogComponent,\n ActionConfirmationDialogComponent,\n ActionConfirmationInformationDialogComponent,\n ActionConfirmationMessageDialogComponent,\n ActionConfirmationNumberDialogComponent,\n ],\n exports: [ProgressBarComponent],\n})\nexport class CoreModule {\n public constructor(@Optional() @SkipSelf() parentModule: CoreModule) {\n if (parentModule) {\n throw new Error('CoreModule is already loaded. Import it in the AppModule only');\n }\n }\n\n public static forRoot(): ModuleWithProviders {\n return {\n ngModule: CoreModule,\n providers: [\n apiInterceptorProvider,\n authInterceptorProvider,\n loadingStatusInterceptorProvider,\n // /!\\ THIS SHOULD COME AFTER apiInterceptorProvider? BECAUSE IT NEEDS TO BE EXECUTED BEFORE apiInterceptorProvider /!\\\n blobErrorHttpInterceptorProvider,\n AuthGuardWithForcedLogin,\n AuthService,\n SavedChangeGuard,\n ],\n };\n }\n}\n","import { FuseConfig } from '@fuse/types';\n\n/**\n * Default Fuse Configuration\n *\n * You can edit these options to change the default options. All these options also can be\n * changed per component basis. See `app/pages/authentication/login/login.component.ts`\n * constructor method to learn more about changing these options per component basis.\n */\n\nexport const fuseConfig: FuseConfig = {\n // Color themes can be defined in src/app/app.theme.scss\n colorTheme: 'system',\n layout: {\n style: 'vertical-layout-1',\n width: 'fullwidth',\n navbar: {\n primaryBackground: 'fuse-white-700',\n secondaryBackground: 'fuse-white-900',\n folded: false,\n hidden: false,\n position: 'left',\n variant: 'vertical-style-2',\n },\n toolbar: {\n customBackgroundColor: false,\n background: 'fuse-white-500',\n hidden: false,\n position: 'below-fixed',\n },\n footer: {\n customBackgroundColor: true,\n background: 'fuse-navy-900',\n hidden: true,\n position: 'below-fixed',\n },\n sidepanel: {\n hidden: false,\n position: 'right',\n },\n },\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { ErrorHandler, Injectable } from '@angular/core';\nimport { RouterHistoryService } from './core/services/router-history.service';\n\n@Injectable()\nexport class GlobalErrorHandler implements ErrorHandler {\n // https://medium.com/@kamrankhatti/angular-lazy-routes-loading-chunk-failed-42b16c22a377\n\n public constructor(private routerHistoryService: RouterHistoryService) {}\n\n public handleError(error: any): void {\n const chunkFailedMessage = /Loading chunk [^ ]+ failed/;\n\n if (chunkFailedMessage.test(error.message)) {\n console.log(`Chunk load failed, reloading the application to : ${this.routerHistoryService.navigationStartUrl}`);\n window.location.href = this.routerHistoryService.navigationStartUrl;\n return;\n }\n\n if (error instanceof HttpErrorResponse) {\n if (\n error.status === 404 ||\n error.status === 403 ||\n error.status === 401 ||\n error.status === 400 ||\n error.status === -1 ||\n error.status === -2\n ) {\n console.log(error);\n return;\n }\n }\n\n console.error(error);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MatPaginatorIntlFr extends MatPaginatorIntl {\n public firstPageLabel = 'Première page';\n public itemsPerPageLabel = 'Résultats par page';\n public lastPageLabel = 'Dernière page';\n public nextPageLabel = 'Page suivante';\n public previousPageLabel = 'Page Précédente';\n\n public getRangeLabel = (page: number, pageSize: number, length: number) => {\n if (length === 0 || pageSize === 0) {\n return '0 sur ' + length;\n }\n\n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\n return startIndex + 1 + ' à ' + endIndex + ' sur ' + length;\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { FuseSharedModule } from '@fuse/shared.module';\n\nimport { ContentComponent } from 'app/layout/components/content/content.component';\n\n@NgModule({\n declarations: [ContentComponent],\n imports: [CommonModule, RouterModule, FuseSharedModule],\n exports: [ContentComponent],\n})\nexport class ContentModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { RouterModule } from '@angular/router';\n\nimport { FuseSharedModule } from '@fuse/shared.module';\n\nimport { FooterComponent } from 'app/layout/components/footer/footer.component';\n\n@NgModule({\n declarations: [FooterComponent],\n imports: [CommonModule, RouterModule, MatButtonModule, MatIconModule, MatToolbarModule, FuseSharedModule],\n exports: [FooterComponent],\n})\nexport class FooterModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { PickerModule } from '../picker/picker.module';\nimport { CustomerTenantPickerComponent } from './customer-tenant-picker.component';\n\n@NgModule({\n declarations: [CustomerTenantPickerComponent],\n imports: [CommonModule, PickerModule],\n exports: [CustomerTenantPickerComponent],\n})\nexport class CustomerTenantPickerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { PickerModule } from '../picker/picker.module';\nimport { LaboratoryTenantPickerComponent } from './laboratory-tenant-picker.component';\n\n@NgModule({\n declarations: [LaboratoryTenantPickerComponent],\n imports: [CommonModule, PickerModule],\n exports: [LaboratoryTenantPickerComponent],\n})\nexport class LaboratoryTenantPickerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { GroupedLabelCardModule } from 'app/shared/components/cards/grouped-label-card/grouped-label-card.module';\nimport { CustomerTenantPickerModule } from 'app/shared/components/pickers/customer-tenant-picker/customer-tenant-picker.module';\nimport { LaboratoryTenantPickerModule } from 'app/shared/components/pickers/laboratory-tenant-picker/laboratory-tenant-picker.module';\nimport { NavCollapsableComponent } from './nav-collapsable/nav-collapsable.component';\nimport { NavGroupComponent } from './nav-group/nav-group.component';\nimport { NavItemComponent } from './nav-item/nav-item.component';\nimport { NavigationComponent } from './navigation.component';\nimport { TenantSelectorComponent } from './tenant-selector/tenant-selector.component';\n\n@NgModule({\n declarations: [NavigationComponent, NavGroupComponent, NavItemComponent, NavCollapsableComponent, TenantSelectorComponent],\n imports: [\n CustomerTenantPickerModule,\n LaboratoryTenantPickerModule,\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n GroupedLabelCardModule,\n RouterModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatRippleModule,\n ReactiveFormsModule,\n TranslateModule.forChild(),\n ],\n exports: [NavigationComponent],\n})\nexport class NavigationModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FuseSharedModule } from '@fuse/shared.module';\nimport { NavbarVerticalStyle2Component } from 'app/layout/components/navbar/vertical/style-2/style-2.component';\nimport { NavigationModule } from 'app/layout/components/navigation/navigation.module';\nimport { CustomerTenantPickerModule } from 'app/shared/components/pickers/customer-tenant-picker/customer-tenant-picker.module';\nimport { LaboratoryTenantPickerModule } from 'app/shared/components/pickers/laboratory-tenant-picker/laboratory-tenant-picker.module';\n\n@NgModule({\n declarations: [NavbarVerticalStyle2Component],\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n FuseSharedModule,\n NavigationModule,\n CustomerTenantPickerModule,\n LaboratoryTenantPickerModule,\n ],\n exports: [NavbarVerticalStyle2Component],\n})\nexport class NavbarVerticalStyle2Module {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FuseSharedModule } from '@fuse/shared.module';\nimport { NavbarComponent } from 'app/layout/components/navbar/navbar.component';\nimport { NavbarVerticalStyle2Module } from 'app/layout/components/navbar/vertical/style-2/style-2.module';\n\n@NgModule({\n declarations: [NavbarComponent],\n imports: [CommonModule, FuseSharedModule, NavbarVerticalStyle2Module],\n exports: [NavbarComponent],\n})\nexport class NavbarModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { FuseShortcutsComponent } from './shortcuts.component';\n\n@NgModule({\n declarations: [FuseShortcutsComponent],\n imports: [\n CommonModule,\n RouterModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n MatButtonModule,\n MatDividerModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatMenuModule,\n MatListModule,\n MatTooltipModule,\n TranslateModule,\n ],\n exports: [FuseShortcutsComponent],\n providers: [],\n})\nexport class FuseShortcutsModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AreaSelectorComponent } from './area-selector.component';\n\n@NgModule({\n declarations: [AreaSelectorComponent],\n exports: [AreaSelectorComponent],\n imports: [CommonModule, MatFormFieldModule, MatIconModule, MatOptionModule, MatRadioModule, ReactiveFormsModule, TranslateModule],\n})\nexport class AreaSelectorModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ThemeSelectorComponent } from './theme-selector.component';\n\n@NgModule({\n declarations: [ThemeSelectorComponent],\n exports: [ThemeSelectorComponent],\n imports: [CommonModule, MatFormFieldModule, MatIconModule, MatOptionModule, MatRadioModule, ReactiveFormsModule, TranslateModule],\n})\nexport class ThemeSelectorModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { RouterModule } from '@angular/router';\nimport { FuseShortcutsModule } from '@fuse/components';\nimport { FuseSharedModule } from '@fuse/shared.module';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ToolbarComponent } from 'app/layout/components/toolbar/toolbar.component';\nimport { AreaSelectorModule } from './area-selector/area-selector.module';\nimport { ThemeSelectorModule } from './theme-selector/theme-selector.module';\n\n@NgModule({\n declarations: [ToolbarComponent],\n imports: [\n AreaSelectorModule,\n CommonModule,\n RouterModule,\n MatBadgeModule,\n MatButtonModule,\n MatIconModule,\n MatMenuModule,\n MatToolbarModule,\n FuseSharedModule,\n FuseShortcutsModule,\n ThemeSelectorModule,\n TranslateModule,\n ],\n exports: [ToolbarComponent],\n})\nexport class ToolbarModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CustomerAreaMessageBannerComponent } from './customer-area-message-banner.component';\n\n@NgModule({\n declarations: [CustomerAreaMessageBannerComponent],\n imports: [CommonModule, MatButtonModule, MatCardModule, MatIconModule, MatTooltipModule],\n exports: [CustomerAreaMessageBannerComponent],\n})\nexport class CustomerAreaMessageBannerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { LaboratoryAreaMessageBannerComponent } from './laboratory-area-message-banner.component';\n\n@NgModule({\n declarations: [LaboratoryAreaMessageBannerComponent],\n imports: [CommonModule, MatButtonModule, MatCardModule, MatIconModule, MatTooltipModule],\n exports: [LaboratoryAreaMessageBannerComponent],\n})\nexport class LaboratoryAreaMessageBannerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PrintActionButtonsModule } from '../action-buttons/print-action-buttons/print-action-buttons.module';\nimport { AbstractNotificationCardComponent } from './abstract-notification-card/abstract-notification-card.component';\nimport { ExportAllNotificationCardComponent } from './job-notification-card/export-all-notification-card/export-all-notification-card.component';\nimport { JobNotificationCardComponent } from './job-notification-card/job-notification-card.component';\nimport { JournalNotificationCardComponent } from './job-notification-card/journal-notification-card/journal-notification-card.component';\nimport { PdfMergeNotificationCardComponent } from './job-notification-card/pdf-merge-notification-card/pdf-merge-notification-card.component';\nimport { SpreadsheetDashboardNotificationCardComponent } from './job-notification-card/spreadsheet-dashboard-notification-card/spreadsheet-dashboard-notification-card.component';\nimport { SpreadsheetExportPdfNotificationCardComponent } from './job-notification-card/spreadsheet-export-notification-card/pdf/spreadsheet-export-pdf-notification-card.component';\nimport { SpreadsheetExportXlsxNotificationCardComponent } from './job-notification-card/spreadsheet-export-notification-card/xlsx/spreadsheet-export-xlsx-notification-card.component';\n\n@NgModule({\n declarations: [\n AbstractNotificationCardComponent,\n ExportAllNotificationCardComponent,\n JobNotificationCardComponent,\n JournalNotificationCardComponent,\n PdfMergeNotificationCardComponent,\n SpreadsheetDashboardNotificationCardComponent,\n SpreadsheetExportPdfNotificationCardComponent,\n SpreadsheetExportXlsxNotificationCardComponent,\n ],\n imports: [\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n MatButtonModule,\n MatIconModule,\n MatProgressBarModule,\n MatTooltipModule,\n PrintActionButtonsModule,\n ],\n exports: [\n ExportAllNotificationCardComponent,\n JournalNotificationCardComponent,\n PdfMergeNotificationCardComponent,\n SpreadsheetDashboardNotificationCardComponent,\n SpreadsheetExportPdfNotificationCardComponent,\n SpreadsheetExportXlsxNotificationCardComponent,\n ],\n})\nexport class NotificationCardModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FuseSidebarModule } from '@fuse/components';\nimport { FuseDirectivesModule } from '@fuse/directives/directives';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NotificationCardModule } from 'app/shared/components/notification-card/notification-card.module';\nimport { PdfViewerModule } from 'app/shared/components/pdf-viewer/pdf-viewer.module';\nimport { NotificationSidebarComponent } from './notification-sidebar.component';\n\n@NgModule({\n declarations: [NotificationSidebarComponent],\n exports: [NotificationSidebarComponent],\n imports: [\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n FuseDirectivesModule,\n FuseSidebarModule,\n MatButtonModule,\n MatDividerModule,\n MatIconModule,\n NotificationCardModule,\n PdfViewerModule,\n TranslateModule,\n ],\n})\nexport class NotificationSidebarModule {}\n","import { AbstractNotificationCardModel } from '../abstract-notification-card/abstract-notification-card.model';\n\nexport class JobNotificationCardModel extends AbstractNotificationCardModel {\n public statusFailedFlag: boolean;\n public statusNothingToDoFlag: boolean;\n public statusPendingFlag: boolean;\n public statusSucceedFlag: boolean;\n}\n","import { Moment } from 'moment-timezone';\n\nexport abstract class AbstractNotificationCardModel {\n public colorClass: 'notification-green' | 'notification-accent';\n public discriminator: string;\n public messageLine1: string;\n public notificationDate: Moment;\n public readDate: Moment;\n public title: string;\n public uuid: string;\n}\n","import { JobNotificationCardModel } from '../job-notification-card.model';\n\nexport class ExportAllNotificationCardModel extends JobNotificationCardModel {}\n","import { JournalFileType } from 'app/shared/enums/journal-file-type.enum';\nimport { JobNotificationCardModel } from '../job-notification-card.model';\n\nexport class JournalNotificationCardModel extends JobNotificationCardModel {\n public journalFileType: JournalFileType;\n}\n","import { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { JournalFileTypeHelper } from 'app/shared/enum-helpers/journal-file-type.enum.helper';\nimport { JournalTypeHelper } from 'app/shared/enum-helpers/journal-type.enum.helper';\nimport { JournalFileType } from 'app/shared/enums/journal-file-type.enum';\nimport { NotificationStatus } from 'app/shared/enums/notification-status.enum';\nimport { CustomDatePipe } from 'app/shared/pipes/custom-date.pipe';\nimport { ReadJournalNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-journal-notification-view-model';\nimport { JournalNotificationCardModel } from './journal-notification-card.model';\n\nexport class JournalNotificationModelHelper {\n public static build(): JournalNotificationCardModel {\n const journalNotificationCard = new JournalNotificationCardModel();\n return journalNotificationCard;\n }\n\n public static fromViewModel(\n readJournalNotificationViewModels: ReadJournalNotificationViewModel[],\n customDatePipe: CustomDatePipe\n ): Array {\n const journalNotifications = new Array();\n readJournalNotificationViewModels.forEach((readJournalNotificationViewModel) => {\n const journalNotification = this._createModel(readJournalNotificationViewModel, customDatePipe);\n journalNotifications.push(journalNotification);\n });\n\n return journalNotifications;\n }\n\n public static fromViewModelSingle(\n readJournalNotificationViewModel: ReadJournalNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): JournalNotificationCardModel {\n return this._createModel(readJournalNotificationViewModel, customDatePipe);\n }\n\n private static _createModel(\n readJournalNotificationViewModel: ReadJournalNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): JournalNotificationCardModel {\n const journalNotificationCard = new JournalNotificationCardModel();\n if (readJournalNotificationViewModel.journalNotificationDetail.journalFileType === JournalFileType.Pdf) {\n journalNotificationCard.colorClass = 'notification-accent';\n } else if (readJournalNotificationViewModel.journalNotificationDetail.journalFileType === JournalFileType.Spreadsheet) {\n journalNotificationCard.colorClass = 'notification-green';\n } else {\n journalNotificationCard.colorClass = 'notification-green';\n }\n journalNotificationCard.discriminator = readJournalNotificationViewModel.discriminator;\n journalNotificationCard.notificationDate = TimeZoneService.toMomentInLaboratoryTimeZone(\n readJournalNotificationViewModel.notificationDate\n );\n journalNotificationCard.readDate = TimeZoneService.toMomentInLaboratoryTimeZone(readJournalNotificationViewModel.readDate);\n journalNotificationCard.title = `Journal - ${customDatePipe.transform(\n journalNotificationCard.notificationDate\n )} ${customDatePipe.transform(journalNotificationCard.notificationDate, 'HH:mm')}`;\n\n journalNotificationCard.messageLine1 = JournalNotificationModelHelper.buildMessageLine1(readJournalNotificationViewModel);\n journalNotificationCard.journalFileType = readJournalNotificationViewModel.journalNotificationDetail.journalFileType;\n\n journalNotificationCard.statusFailedFlag = readJournalNotificationViewModel.status === NotificationStatus.Failed;\n journalNotificationCard.statusNothingToDoFlag = readJournalNotificationViewModel.status === NotificationStatus.NothingToDo;\n journalNotificationCard.statusPendingFlag = readJournalNotificationViewModel.status === NotificationStatus.Pending;\n journalNotificationCard.statusSucceedFlag = readJournalNotificationViewModel.status === NotificationStatus.Succeed;\n\n journalNotificationCard.uuid = readJournalNotificationViewModel.uuid;\n return journalNotificationCard;\n }\n\n private static buildMessageLine1(readJournalNotificationViewModel: ReadJournalNotificationViewModel): string {\n switch (readJournalNotificationViewModel.journalNotificationDetail.journalFileType) {\n case JournalFileType.Fec:\n case JournalFileType.Spreadsheet:\n case JournalFileType.Pdf:\n return (\n JournalFileTypeHelper.translateEnum(readJournalNotificationViewModel.journalNotificationDetail.journalFileType) +\n ' - ' +\n JournalTypeHelper.translateEnum(readJournalNotificationViewModel.journalNotificationDetail.journalType)\n );\n default:\n return '';\n }\n }\n}\n","import { JobNotificationCardModel } from '../job-notification-card.model';\n\nexport class PdfMergeNotificationCardModel extends JobNotificationCardModel {}\n","import { JobNotificationCardModel } from '../job-notification-card.model';\n\nexport class SpreadsheetDashboardNotificationCardModel extends JobNotificationCardModel {}\n","import { SpreadsheetExportFileType } from 'app/shared/enums/spreadsheet-export-file-type.enum';\nimport { JobNotificationCardModel } from '../job-notification-card.model';\n\nexport class SpreadsheetExportNotificationCardModel extends JobNotificationCardModel {\n public multipleFilesFlag: boolean;\n public spreadsheetExportFileType: SpreadsheetExportFileType;\n}\n","= notification.notificationDate\n ? 'notification-card notification-card-read'\n : 'notification-card'\n \"\n fxLayout=\"column\"\n>\n
    \n
    \n \n {{ notificationIcon }}\n {{ notification.title }}\n
    \n\n \n
    \n
    \n {{ notification.messageLine1 }}\n
    \n \n
    \n
    \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { AbstractNotificationCardModel } from './abstract-notification-card.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-abstract-notification-card',\n styleUrls: ['./abstract-notification-card.component.scss'],\n templateUrl: './abstract-notification-card.component.html',\n})\nexport class AbstractNotificationCardComponent {\n @Output() public closeEvent = new EventEmitter();\n @Input() public notification: AbstractNotificationCardModel;\n @Input() public notificationIcon = 'alarm';\n\n public onCloseClickedHandler(): void {\n this.closeEvent.emit();\n }\n}\n","\n
    \n
    \n \n Fichiers en cours de préparation\n
    \n
    \n Fichiers disponibles\n
    \n \n
    \n
    \n
    \n Erreur imprévue. Veuillez recommencer.\n
    \n
    \n Documents inexistants. Veuillez rafraîchir la liste.\n
    \n
    \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { JobNotificationCardModel } from './job-notification-card.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-job-notification-card',\n styleUrls: ['./job-notification-card.component.scss'],\n templateUrl: './job-notification-card.component.html',\n})\nexport class JobNotificationCardComponent {\n @Output() public closeEvent = new EventEmitter();\n @Input() public jobNotification: JobNotificationCardModel;\n @Input() public notificationIcon = 'alarm';\n\n public onCloseClickedHandler(): void {\n this.closeEvent.emit();\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ExportAllNotificationCardModel } from './export-all-notification-card.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-export-all-notification-card',\n styleUrls: ['./export-all-notification-card.component.scss'],\n templateUrl: './export-all-notification-card.component.html',\n})\nexport class ExportAllNotificationCardComponent {\n @Output() public closeEvent = new EventEmitter();\n @Output() public downloadAllButtonEvent = new EventEmitter();\n @Input() public exportAllNotificationCard: ExportAllNotificationCardModel;\n\n public downloadAllButtonClickedHandler(): void {\n this.downloadAllButtonEvent.emit();\n }\n\n public onCloseClickedHandler(): void {\n this.closeEvent.emit();\n }\n}\n","\n
    \n \n
    \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { JournalFileType } from 'app/shared/enums/journal-file-type.enum';\nimport { JournalNotificationCardModel } from './journal-notification-card.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-journal-notification-card',\n styleUrls: ['./journal-notification-card.component.scss'],\n templateUrl: './journal-notification-card.component.html',\n})\nexport class JournalNotificationCardComponent {\n @Output() public closeEvent = new EventEmitter();\n @Output() public downloadJournalFecButtonEvent = new EventEmitter();\n @Output() public downloadJournalPdfButtonEvent = new EventEmitter();\n @Output() public downloadJournalSpreadsheetButtonEvent = new EventEmitter();\n @Input() public journalNotificationCard: JournalNotificationCardModel;\n @Output() public openJournalPdfButtonEvent = new EventEmitter();\n public journalFileTypeFec = JournalFileType.Fec;\n public journalFileTypePdf = JournalFileType.Pdf;\n public journalFileTypeSpreadsheet = JournalFileType.Spreadsheet;\n\n public downloadJournalFecButtonClickedHandler(): void {\n this.downloadJournalFecButtonEvent.emit();\n }\n\n public downloadJournalPdfButtonClickedHandler(): void {\n this.downloadJournalPdfButtonEvent.emit();\n }\n\n public downloadJournalSpreadsheetButtonClickedHandler(): void {\n this.downloadJournalSpreadsheetButtonEvent.emit();\n }\n\n public onCloseClickedHandler(): void {\n this.closeEvent.emit();\n }\n\n public openJournalPdfButtonClickedHandler(): void {\n this.openJournalPdfButtonEvent.emit();\n }\n}\n","\n
    \n \n
    \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PdfMergeNotificationCardModel } from './pdf-merge-notification-card.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-pdf-merge-notification-card',\n styleUrls: ['./pdf-merge-notification-card.component.scss'],\n templateUrl: './pdf-merge-notification-card.component.html',\n})\nexport class PdfMergeNotificationCardComponent {\n @Output() public closeEvent = new EventEmitter();\n @Output() public downloadMergedPdfButtonEvent = new EventEmitter();\n @Output() public downloadZipButtonEvent = new EventEmitter();\n @Output() public openMergedPdfButtonEvent = new EventEmitter();\n @Input() public pdfMergeNotification: PdfMergeNotificationCardModel;\n\n public downloadPdfButtonClickedHandler(): void {\n this.downloadMergedPdfButtonEvent.emit();\n }\n\n public downloadZipButtonClickedHandler(): void {\n this.downloadZipButtonEvent.emit();\n }\n\n public onCloseClickedHandler(): void {\n this.closeEvent.emit();\n }\n\n public openPdfButtonClickedHandler(): void {\n this.openMergedPdfButtonEvent.emit();\n }\n}\n","\n
    \n \n
    \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { SpreadsheetDashboardNotificationCardModel } from './spreadsheet-dashboard-notification-card.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-spreadsheet-dashboard-notification-card',\n templateUrl: './spreadsheet-dashboard-notification-card.component.html',\n styleUrls: ['./spreadsheet-dashboard-notification-card.component.scss'],\n})\nexport class SpreadsheetDashboardNotificationCardComponent {\n @Output() public closeEvent = new EventEmitter();\n @Output() public downloadSpreadsheetButtonEvent = new EventEmitter();\n @Input() public spreadsheetDashboardNotificationCard: SpreadsheetDashboardNotificationCardModel;\n\n public downloadSpreadsheetButtonClickedHandler(): void {\n this.downloadSpreadsheetButtonEvent.emit();\n }\n\n public onCloseClickedHandler(): void {\n this.closeEvent.emit();\n }\n}\n","\n
    \n \n
    \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { SpreadsheetExportNotificationCardModel } from '../spreadsheet-export-notification-card.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-spreadsheet-export-pdf-notification-card',\n styleUrls: ['./spreadsheet-export-pdf-notification-card.component.scss'],\n templateUrl: './spreadsheet-export-pdf-notification-card.component.html',\n})\nexport class SpreadsheetExportPdfNotificationCardComponent {\n @Output() public closeEvent = new EventEmitter();\n @Output() public downloadSpreadsheetButtonEvent = new EventEmitter();\n @Output() public openSpreadsheetButtonEvent = new EventEmitter();\n @Input() public spreadsheetExportNotificationCard: SpreadsheetExportNotificationCardModel;\n\n public downloadSpreadsheetButtonClickedHandler(): void {\n this.downloadSpreadsheetButtonEvent.emit();\n }\n\n public onCloseClickedHandler(): void {\n this.closeEvent.emit();\n }\n\n public openSpreadsheetButtonClickedHandler(): void {\n this.openSpreadsheetButtonEvent.emit();\n }\n}\n","\n
    \n \n
    \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { SpreadsheetExportNotificationCardModel } from '../spreadsheet-export-notification-card.model';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-spreadsheet-export-notification-card',\n styleUrls: ['./spreadsheet-export-xlsx-notification-card.component.scss'],\n templateUrl: './spreadsheet-export-xlsx-notification-card.component.html',\n})\nexport class SpreadsheetExportXlsxNotificationCardComponent {\n @Output() public closeEvent = new EventEmitter();\n @Output() public downloadSpreadsheetButtonEvent = new EventEmitter();\n @Input() public spreadsheetExportNotificationCard: SpreadsheetExportNotificationCardModel;\n\n public downloadSpreadsheetButtonClickedHandler(): void {\n this.downloadSpreadsheetButtonEvent.emit();\n }\n\n public onCloseClickedHandler(): void {\n this.closeEvent.emit();\n }\n}\n","\n
    \n \n
    \n\n","
    \n
    \n \n
    \n
    {{ title }}
    \n
    {{ notifications.length }} notification
    \n
    1\">{{ notifications.length }} notifications
    \n
    \n
    \n
    \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n 0\"\n (click)=\"deleteAllNotificationsClickedHandler()\"\n class=\"erase-notifications-button\"\n color=\"primary\"\n mat-raised-button\n type=\"button\"\n >\n Supprimer toutes les notifications\n \n
    \n","import { Component, HostBinding, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';\nimport { AuthService } from 'app/core/services/auth.service';\nimport { NotificationService } from 'app/core/services/prothesis-api/notification.service';\nimport { WorkingLaboratoryService } from 'app/core/services/prothesis-api/working-laboratory.service';\nimport { AbstractNotificationCardModel } from 'app/shared/components/notification-card/abstract-notification-card/abstract-notification-card.model';\nimport { AbstractNotificationCardModelHelper } from 'app/shared/components/notification-card/abstract-notification-card/abstract-notification-card.model.helper';\nimport { PdfViewerComponent } from 'app/shared/components/pdf-viewer/pdf-viewer.component';\nimport { Area } from 'app/shared/enums/area.enum';\nimport { SpreadsheetExportFileType } from 'app/shared/enums/spreadsheet-export-file-type.enum';\nimport { FileHelper } from 'app/shared/helpers/file-helper';\nimport { CustomDatePipe } from 'app/shared/pipes/custom-date.pipe';\nimport { ReadNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-notification.view-model';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { SidebarComponent } from '../sidebar.component';\n\n@Component({\n selector: 'app-notification-sidebar',\n templateUrl: './notification-sidebar.component.html',\n styleUrls: ['./notification-sidebar.component.scss'],\n})\nexport class NotificationSidebarComponent implements OnDestroy, OnInit {\n @HostBinding('class.bar-closed') public barClosed: boolean;\n @ViewChild('_pdfViewerComponent') private _pdfViewerComponent: PdfViewerComponent;\n public noNotificationsLabel = 'Aucune notification.';\n public notifications: AbstractNotificationCardModel[];\n public spreadsheetExportFileType = SpreadsheetExportFileType;\n public title = this.noNotificationsLabel;\n\n private _readNotificationViewModels: ReadNotificationViewModel[];\n private _unsubscribeAll$: Subject = new Subject();\n\n public constructor(\n private _authService: AuthService,\n private _customDatePipe: CustomDatePipe,\n private _fuseSidebarService: FuseSidebarService,\n private _notificationService: NotificationService,\n private _workingLaboratoryService: WorkingLaboratoryService\n ) {\n this.barClosed = true;\n }\n\n public closeClickedHandler(): void {\n this._fuseSidebarService.getSidebar(SidebarComponent.key).close();\n }\n\n public deleteAllNotificationsClickedHandler(): void {\n this._notificationService.deleteCollection(this.notifications.map((x) => x.uuid)).subscribe(() => {\n this._removeNotifications(this.notifications.map((x) => x.uuid));\n this._fuseSidebarService.getSidebar(SidebarComponent.key).close();\n });\n }\n\n public deleteNotificationClickedHandler(notification: AbstractNotificationCardModel): void {\n this._notificationService.delete(notification.uuid).subscribe(() => {\n this._removeNotifications([notification.uuid]);\n });\n }\n\n public downloadAllButtonClickedHandler(spreadsheetExportNotificationUuid: string): void {\n this._notificationService.getExportAll(spreadsheetExportNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.download(blob, filename);\n });\n }\n\n public downloadJournalFecButtonClickedHandler(journalNotificationUuid: string): void {\n this._notificationService.getJournalFec(journalNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.download(blob, filename);\n });\n }\n\n public downloadJournalPdfButtonClickedHandler(journalNotificationUuid: string): void {\n this._notificationService.getJournalPdf(journalNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.download(blob, filename);\n });\n }\n\n public downloadJournalSpreadsheetButtonClickedHandler(journalNotificationUuid: string): void {\n this._notificationService.getJournalSpreadsheet(journalNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.download(blob, filename);\n });\n }\n\n public downloadMergedPdfButtonClickedHandler(pdfMergeNotificationUuid: string): void {\n this._notificationService.getMergedPdf(pdfMergeNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.download(blob, filename);\n });\n }\n\n public downloadSpreadsheetButtonClickedHandler(spreadsheetExportNotificationUuid: string): void {\n this._notificationService.getSpreadsheetExport(spreadsheetExportNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.download(blob, filename);\n });\n }\n\n public downloadSpreadsheetDashboardButtonClickedHandler(spreadsheetDashboardNotificationUuid: string): void {\n this._notificationService.getSpreadsheetDashboard(spreadsheetDashboardNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.download(blob, filename);\n });\n }\n\n public downloadZipButtonClickedHandler(pdfMergeNotificationUuid: string): void {\n this._notificationService.getMergedZip(pdfMergeNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.download(blob, filename);\n });\n }\n\n public markNotificationsAsRead(): void {\n if (this._workingLaboratoryService.tenantUuid && this._readNotificationViewModels?.length > 0) {\n this._notificationService.markAsReadCollection(this._readNotificationViewModels.filter((x) => !x.readDate)).subscribe();\n }\n }\n\n public ngOnDestroy(): void {\n this._unsubscribeAll$.next();\n this._unsubscribeAll$.complete();\n }\n\n public ngOnInit(): void {\n this._notificationService.onNotificationRefreshed$.subscribe((readNotificationViewModels: ReadNotificationViewModel[]) => {\n if (readNotificationViewModels) {\n this.refresh(readNotificationViewModels);\n }\n });\n\n this._notificationService.onPopUpNotificationReceived$.subscribe((readNotificationViewModels: ReadNotificationViewModel[]) => {\n if (readNotificationViewModels) {\n this._fuseSidebarService.getSidebar(SidebarComponent.key).toggleOpenOnly();\n }\n });\n\n this._authService.isDoneLoading$.pipe(takeUntil(this._unsubscribeAll$)).subscribe((isDoneLoadingFlag) => {\n if (isDoneLoadingFlag && (this._authService.area === Area.Laboratory || this._workingLaboratoryService.exploringFlag)) {\n this._notificationService.startPulling();\n }\n });\n\n this._workingLaboratoryService.exploredUuid$\n .pipe(takeUntil(this._unsubscribeAll$), distinctUntilChanged())\n .subscribe((laboratoryUuid) => {\n if (laboratoryUuid) {\n this._notificationService.startPulling();\n } else {\n this._notificationService.stopPulling();\n this.notifications = [];\n this._fuseSidebarService.getSidebar(SidebarComponent.key).close();\n }\n });\n }\n\n public openJournalPdfButtonClickedHandler(journalNotificationUuid: string): void {\n this._notificationService.getJournalPdf(journalNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.open(blob, filename);\n });\n }\n\n public openMergedPdfButtonClickedHandler(pdfMergeNotificationUuid: string): void {\n this._notificationService.getMergedPdf(pdfMergeNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.open(blob, filename);\n });\n }\n\n public openSpreadsheetButtonClickHandler(spreadsheetExportNotificationUuid: string): void {\n this._notificationService.getSpreadsheetExport(spreadsheetExportNotificationUuid).subscribe((res) => {\n const { blob, filename }: { blob: Blob; filename: string } = FileHelper.getBlobAndFilename(res);\n this._pdfViewerComponent.open(blob, filename);\n });\n }\n\n public refresh(readNotificationViewModels: ReadNotificationViewModel[]): void {\n if (!this._workingLaboratoryService.tenantUuid) {\n this.title = 'Vous devez choisir un laboratoire à explorer avant de pouvoir accéder à ses données.';\n this._notificationService.stopPulling();\n } else {\n this.title = this.noNotificationsLabel;\n\n this._readNotificationViewModels = readNotificationViewModels;\n this.notifications = AbstractNotificationCardModelHelper.fromViewModel(readNotificationViewModels, this._customDatePipe);\n\n if (this.notifications.length === 0) {\n this._fuseSidebarService.getSidebar(SidebarComponent.key).close();\n }\n }\n }\n\n private _removeNotifications(uuids: string[]): void {\n uuids.forEach((uuid) => {\n const notificationIndex = this.notifications.indexOf(this.notifications.find((n) => n.uuid === uuid));\n this.notifications.splice(notificationIndex, 1);\n\n const readNotificationViewModelIndex = this._readNotificationViewModels.indexOf(\n this._readNotificationViewModels.find((n) => n.uuid === uuid)\n );\n this._readNotificationViewModels.splice(readNotificationViewModelIndex, 1);\n\n if (this.notifications.length === 0) {\n this._fuseSidebarService.getSidebar(SidebarComponent.key).close();\n }\n });\n }\n}\n","import { CustomDatePipe } from 'app/shared/pipes/custom-date.pipe';\nimport { ReadExportAllNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-export-all-notification.view-model';\nimport { ReadJournalNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-journal-notification-view-model';\nimport { ReadNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-notification.view-model';\nimport { ReadPdfMergeNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-pdf-merge-notification.view-model';\nimport { ReadSpreadsheetDashboardNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-spreadsheet-dashboard-notification.view-model';\nimport { ReadSpreadsheetExportNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-spreadsheet-export-notification.view-model';\nimport { ExportAllNotificationModelHelper } from '../job-notification-card/export-all-notification-card/export-all-notification.model.helper';\nimport { JournalNotificationModelHelper } from '../job-notification-card/journal-notification-card/journal-notification.model.helper';\nimport { PdfMergeNotificationModelHelper } from '../job-notification-card/pdf-merge-notification-card/pdf-merge-notification.model.helper';\nimport { SpreadsheetDashboardNotificationCardModelHelper } from '../job-notification-card/spreadsheet-dashboard-notification-card/spreadsheet-dashboard-notification-card.model.helper';\nimport { SpreadsheetExportNotificationCardModelHelper } from '../job-notification-card/spreadsheet-export-notification-card/spreadsheet-export-notification-card.model.helper';\nimport { AbstractNotificationCardModel } from './abstract-notification-card.model';\n\nexport class AbstractNotificationCardModelHelper {\n public static fromViewModel(\n readNotificationViewModels: ReadNotificationViewModel[],\n customDatePipe: CustomDatePipe\n ): Array {\n const notifications = new Array();\n readNotificationViewModels.forEach((readNotificationViewModel) => {\n const notification = this._createModel(readNotificationViewModel, customDatePipe);\n notifications.push(notification);\n });\n\n return notifications;\n }\n\n private static _createModel(\n readNotificationViewModel: ReadNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): AbstractNotificationCardModel {\n let notification: AbstractNotificationCardModel;\n\n if (readNotificationViewModel.discriminator === 'ExportAll') {\n const readExportAllNotificationViewModel = readNotificationViewModel as ReadExportAllNotificationViewModel;\n notification = ExportAllNotificationModelHelper.fromViewModelSingle(readExportAllNotificationViewModel, customDatePipe);\n }\n if (readNotificationViewModel.discriminator === 'Journal') {\n const readJournalNotificationViewModel = readNotificationViewModel as ReadJournalNotificationViewModel;\n notification = JournalNotificationModelHelper.fromViewModelSingle(readJournalNotificationViewModel, customDatePipe);\n }\n if (readNotificationViewModel.discriminator === 'PdfMerge') {\n const readPdfMergeNotificationViewModel = readNotificationViewModel as ReadPdfMergeNotificationViewModel;\n notification = PdfMergeNotificationModelHelper.fromViewModelSingle(readPdfMergeNotificationViewModel, customDatePipe);\n }\n if (readNotificationViewModel.discriminator === 'SpreadsheetExport') {\n const readSpreadsheetExportNotificationViewModel = readNotificationViewModel as ReadSpreadsheetExportNotificationViewModel;\n notification = SpreadsheetExportNotificationCardModelHelper.fromViewModelSingle(\n readSpreadsheetExportNotificationViewModel,\n customDatePipe\n );\n }\n if (readNotificationViewModel.discriminator === 'SpreadsheetDashboard') {\n const readSpreadsheetDashboardNotificationViewModel = readNotificationViewModel as ReadSpreadsheetDashboardNotificationViewModel;\n notification = SpreadsheetDashboardNotificationCardModelHelper.fromViewModelSingle(\n readSpreadsheetDashboardNotificationViewModel,\n customDatePipe\n );\n }\n\n return notification;\n }\n}\n","import { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { NotificationStatus } from 'app/shared/enums/notification-status.enum';\nimport { CustomDatePipe } from 'app/shared/pipes/custom-date.pipe';\nimport { ReadExportAllNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-export-all-notification.view-model';\nimport { ExportAllNotificationCardModel } from './export-all-notification-card.model';\n\nexport class ExportAllNotificationModelHelper {\n public static build(): ExportAllNotificationCardModel {\n const exportAllNotification = new ExportAllNotificationCardModel();\n return exportAllNotification;\n }\n\n public static fromViewModel(\n readExportAllNotificationViewModels: ReadExportAllNotificationViewModel[],\n customDatePipe: CustomDatePipe\n ): Array {\n const exportAllNotifications = new Array();\n readExportAllNotificationViewModels.forEach((readExportAllNotificationViewModel) => {\n const exportAllNotification = this._createModel(readExportAllNotificationViewModel, customDatePipe);\n exportAllNotifications.push(exportAllNotification);\n });\n\n return exportAllNotifications;\n }\n\n public static fromViewModelSingle(\n readExportAllNotificationViewModel: ReadExportAllNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): ExportAllNotificationCardModel {\n return this._createModel(readExportAllNotificationViewModel, customDatePipe);\n }\n\n private static _createModel(\n readExportAllNotificationViewModel: ReadExportAllNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): ExportAllNotificationCardModel {\n const exportAllNotificationCard = new ExportAllNotificationCardModel();\n exportAllNotificationCard.colorClass = 'notification-green';\n exportAllNotificationCard.discriminator = readExportAllNotificationViewModel.discriminator;\n exportAllNotificationCard.notificationDate = TimeZoneService.toMomentInLaboratoryTimeZone(\n readExportAllNotificationViewModel.notificationDate\n );\n exportAllNotificationCard.readDate = TimeZoneService.toMomentInLaboratoryTimeZone(readExportAllNotificationViewModel.readDate);\n exportAllNotificationCard.title = `Export intégral - ${customDatePipe.transform(\n exportAllNotificationCard.notificationDate\n )} ${customDatePipe.transform(exportAllNotificationCard.notificationDate, 'HH:mm')}`;\n\n exportAllNotificationCard.messageLine1 = `Export intégral`;\n\n exportAllNotificationCard.statusFailedFlag = readExportAllNotificationViewModel.status === NotificationStatus.Failed;\n exportAllNotificationCard.statusNothingToDoFlag = readExportAllNotificationViewModel.status === NotificationStatus.NothingToDo;\n exportAllNotificationCard.statusPendingFlag = readExportAllNotificationViewModel.status === NotificationStatus.Pending;\n exportAllNotificationCard.statusSucceedFlag = readExportAllNotificationViewModel.status === NotificationStatus.Succeed;\n\n exportAllNotificationCard.uuid = readExportAllNotificationViewModel.uuid;\n return exportAllNotificationCard;\n }\n}\n","import { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { PdfCreditTypeHelper } from 'app/shared/enum-helpers/pdf-credit-type-helper';\nimport { PdfDeliveryFormTypeHelper } from 'app/shared/enum-helpers/pdf-delivery-form-type-helper';\nimport { PdfFittingFormTypeHelper } from 'app/shared/enum-helpers/pdf-fitting-form-type-helper';\nimport { PdfInvoiceTypeHelper } from 'app/shared/enum-helpers/pdf-invoice-type-helper';\nimport { PdfProFormaTypeHelper } from 'app/shared/enum-helpers/pdf-pro-forma-type-helper';\nimport { PdfQuoteTypeHelper } from 'app/shared/enum-helpers/pdf-quote-type-helper';\nimport { PdfWorkFormTypeHelper } from 'app/shared/enum-helpers/pdf-work-form-type-helper';\nimport { NotificationStatus } from 'app/shared/enums/notification-status.enum';\nimport { CustomDatePipe } from 'app/shared/pipes/custom-date.pipe';\nimport { ReadPdfMergeNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-pdf-merge-notification.view-model';\nimport { PdfMergeNotificationCardModel } from './pdf-merge-notification-card.model';\n\nexport class PdfMergeNotificationModelHelper {\n public static build(): PdfMergeNotificationCardModel {\n const pdfMergeNotification = new PdfMergeNotificationCardModel();\n return pdfMergeNotification;\n }\n\n public static fromViewModel(\n readPdfMergeNotificationViewModels: ReadPdfMergeNotificationViewModel[],\n customDatePipe: CustomDatePipe\n ): Array {\n const pdfMergeNotifications = new Array();\n readPdfMergeNotificationViewModels.forEach((readPdfMergeNotificationViewModel) => {\n const pdfMergeNotification = this._createModel(readPdfMergeNotificationViewModel, customDatePipe);\n pdfMergeNotifications.push(pdfMergeNotification);\n });\n\n return pdfMergeNotifications;\n }\n\n public static fromViewModelSingle(\n readPdfMergeNotificationViewModel: ReadPdfMergeNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): PdfMergeNotificationCardModel {\n return this._createModel(readPdfMergeNotificationViewModel, customDatePipe);\n }\n\n private static _createModel(\n readPdfMergeNotificationViewModel: ReadPdfMergeNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): PdfMergeNotificationCardModel {\n const pdfMergeNotification = new PdfMergeNotificationCardModel();\n pdfMergeNotification.colorClass = 'notification-accent';\n pdfMergeNotification.discriminator = readPdfMergeNotificationViewModel.discriminator;\n pdfMergeNotification.notificationDate = TimeZoneService.toMomentInLaboratoryTimeZone(\n readPdfMergeNotificationViewModel.notificationDate\n );\n pdfMergeNotification.readDate = TimeZoneService.toMomentInLaboratoryTimeZone(readPdfMergeNotificationViewModel.readDate);\n pdfMergeNotification.title = `PDF multiple - ${customDatePipe.transform(\n pdfMergeNotification.notificationDate\n )} ${customDatePipe.transform(pdfMergeNotification.notificationDate, 'HH:mm')}`;\n\n if (readPdfMergeNotificationViewModel.creditPdfMergeNotifications.length > 0) {\n pdfMergeNotification.messageLine1 = PdfCreditTypeHelper.buildPdfMergeNotificationCardMessage(\n readPdfMergeNotificationViewModel.creditPdfMergeNotifications.length,\n readPdfMergeNotificationViewModel.creditPdfMergeNotifications[0].pdfDocumentType\n );\n }\n if (readPdfMergeNotificationViewModel.deliveryFormPdfMergeNotifications.length > 0) {\n pdfMergeNotification.messageLine1 = PdfDeliveryFormTypeHelper.buildPdfMergeNotificationCardMessage(\n readPdfMergeNotificationViewModel.deliveryFormPdfMergeNotifications.length,\n readPdfMergeNotificationViewModel.deliveryFormPdfMergeNotifications[0].pdfDocumentType\n );\n }\n if (readPdfMergeNotificationViewModel.fittingFormPdfMergeNotifications.length > 0) {\n pdfMergeNotification.messageLine1 = PdfFittingFormTypeHelper.buildPdfMergeNotificationCardMessage(\n readPdfMergeNotificationViewModel.fittingFormPdfMergeNotifications.length,\n readPdfMergeNotificationViewModel.fittingFormPdfMergeNotifications[0].pdfDocumentType\n );\n }\n if (readPdfMergeNotificationViewModel.invoicePdfMergeNotifications.length > 0) {\n pdfMergeNotification.messageLine1 = PdfInvoiceTypeHelper.buildPdfMergeNotificationCardMessage(\n readPdfMergeNotificationViewModel.invoicePdfMergeNotifications.length,\n readPdfMergeNotificationViewModel.invoicePdfMergeNotifications[0].pdfDocumentType\n );\n }\n if (readPdfMergeNotificationViewModel.proFormaPdfMergeNotifications.length > 0) {\n pdfMergeNotification.messageLine1 = PdfProFormaTypeHelper.buildPdfMergeNotificationCardMessage(\n readPdfMergeNotificationViewModel.proFormaPdfMergeNotifications.length,\n readPdfMergeNotificationViewModel.proFormaPdfMergeNotifications[0].pdfDocumentType\n );\n }\n if (readPdfMergeNotificationViewModel.quotePdfMergeNotifications.length > 0) {\n pdfMergeNotification.messageLine1 = PdfQuoteTypeHelper.buildPdfMergeNotificationCardMessage(\n readPdfMergeNotificationViewModel.quotePdfMergeNotifications.length,\n readPdfMergeNotificationViewModel.quotePdfMergeNotifications[0].pdfDocumentType\n );\n }\n if (readPdfMergeNotificationViewModel.workFormPdfMergeNotifications.length > 0) {\n pdfMergeNotification.messageLine1 = PdfWorkFormTypeHelper.buildPdfMergeNotificationCardMessage(\n readPdfMergeNotificationViewModel.workFormPdfMergeNotifications.length,\n readPdfMergeNotificationViewModel.workFormPdfMergeNotifications[0].pdfDocumentType\n );\n }\n\n pdfMergeNotification.statusFailedFlag = readPdfMergeNotificationViewModel.status === NotificationStatus.Failed;\n pdfMergeNotification.statusNothingToDoFlag = readPdfMergeNotificationViewModel.status === NotificationStatus.NothingToDo;\n pdfMergeNotification.statusPendingFlag = readPdfMergeNotificationViewModel.status === NotificationStatus.Pending;\n pdfMergeNotification.statusSucceedFlag = readPdfMergeNotificationViewModel.status === NotificationStatus.Succeed;\n pdfMergeNotification.uuid = readPdfMergeNotificationViewModel.uuid;\n return pdfMergeNotification;\n }\n}\n","import { SessionStorageService } from 'app/core/services/session-storage.service';\nimport { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { SpreadsheetExportTypeHelper } from 'app/shared/enum-helpers/spreadsheet-export-type.enum.helper';\nimport { NotificationStatus } from 'app/shared/enums/notification-status.enum';\nimport { SpreadsheetExportFileType } from 'app/shared/enums/spreadsheet-export-file-type.enum';\nimport { SpreadsheetExportType } from 'app/shared/enums/spreadsheet-export-type.enum';\nimport { CustomDatePipe } from 'app/shared/pipes/custom-date.pipe';\nimport { DeliveryFormFilter } from 'app/shared/prothesis-api-filters/delivery-form-filter';\nimport { ReadSpreadsheetExportNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-spreadsheet-export-notification.view-model';\nimport { SpreadsheetExportNotificationCardModel } from './spreadsheet-export-notification-card.model';\n\nexport class SpreadsheetExportNotificationCardModelHelper {\n public static build(): SpreadsheetExportNotificationCardModel {\n const spreadsheetExportNotificationCard = new SpreadsheetExportNotificationCardModel();\n return spreadsheetExportNotificationCard;\n }\n\n public static fromViewModel(\n readSpreadsheetExportNotificationViewModels: ReadSpreadsheetExportNotificationViewModel[],\n customDatePipe: CustomDatePipe\n ): Array {\n const spreadsheetExportNotificationCards = new Array();\n readSpreadsheetExportNotificationViewModels.forEach((readSpreadsheetExportNotificationViewModel) => {\n const spreadsheetExportNotificationCard = this._createModel(readSpreadsheetExportNotificationViewModel, customDatePipe);\n spreadsheetExportNotificationCards.push(spreadsheetExportNotificationCard);\n });\n\n return spreadsheetExportNotificationCards;\n }\n\n public static fromViewModelSingle(\n readSpreadsheetExportNotificationViewModel: ReadSpreadsheetExportNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): SpreadsheetExportNotificationCardModel {\n return this._createModel(readSpreadsheetExportNotificationViewModel, customDatePipe);\n }\n\n private static _createModel(\n readSpreadsheetExportNotificationViewModel: ReadSpreadsheetExportNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): SpreadsheetExportNotificationCardModel {\n let notificationPrefixLabel = `Export Excel`;\n const allPdfFlag = readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every(\n (x) => x.spreadsheetExportFileType === SpreadsheetExportFileType.Pdf\n );\n\n const multipleFileFlag = readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.length > 1;\n const spreadsheetExportNotificationCard = new SpreadsheetExportNotificationCardModel();\n if (allPdfFlag) {\n notificationPrefixLabel = `PDF de liste`;\n spreadsheetExportNotificationCard.spreadsheetExportFileType = SpreadsheetExportFileType.Pdf;\n } else {\n spreadsheetExportNotificationCard.spreadsheetExportFileType = SpreadsheetExportFileType.Xlsx;\n }\n\n spreadsheetExportNotificationCard.colorClass = allPdfFlag ? 'notification-accent' : 'notification-green';\n spreadsheetExportNotificationCard.discriminator = readSpreadsheetExportNotificationViewModel.discriminator;\n spreadsheetExportNotificationCard.multipleFilesFlag = multipleFileFlag;\n spreadsheetExportNotificationCard.notificationDate = TimeZoneService.toMomentInLaboratoryTimeZone(\n readSpreadsheetExportNotificationViewModel.notificationDate\n );\n\n spreadsheetExportNotificationCard.readDate = TimeZoneService.toMomentInLaboratoryTimeZone(\n readSpreadsheetExportNotificationViewModel.readDate\n );\n spreadsheetExportNotificationCard.title = `${notificationPrefixLabel} - ${customDatePipe.transform(\n spreadsheetExportNotificationCard.notificationDate\n )} ${customDatePipe.transform(spreadsheetExportNotificationCard.notificationDate, 'HH:mm')}`;\n spreadsheetExportNotificationCard.messageLine1 = this.buildMessageLine1(readSpreadsheetExportNotificationViewModel);\n\n spreadsheetExportNotificationCard.statusFailedFlag = readSpreadsheetExportNotificationViewModel.status === NotificationStatus.Failed;\n spreadsheetExportNotificationCard.statusNothingToDoFlag =\n readSpreadsheetExportNotificationViewModel.status === NotificationStatus.NothingToDo;\n spreadsheetExportNotificationCard.statusPendingFlag = readSpreadsheetExportNotificationViewModel.status === NotificationStatus.Pending;\n spreadsheetExportNotificationCard.statusSucceedFlag = readSpreadsheetExportNotificationViewModel.status === NotificationStatus.Succeed;\n spreadsheetExportNotificationCard.uuid = readSpreadsheetExportNotificationViewModel.uuid;\n return spreadsheetExportNotificationCard;\n }\n\n private static buildMessageLine1(readSpreadsheetExportNotificationViewModel: ReadSpreadsheetExportNotificationViewModel): string {\n if (readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.length > 0) {\n if (readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.length === 1) {\n const spreadsheetExportNotificationDetail = readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails[0];\n const deliveryFormFilter = SessionStorageService.deserializeJson(spreadsheetExportNotificationDetail.filter) as DeliveryFormFilter;\n let messagePrefix =\n spreadsheetExportNotificationDetail.spreadsheetExportFileType === SpreadsheetExportFileType.Pdf ? 'PDF - Liste des ' : 'Excel - ';\n switch (spreadsheetExportNotificationDetail.spreadsheetExportType) {\n case SpreadsheetExportType.SimpleDetailedDeliveryForm:\n case SpreadsheetExportType.SimpleDetailedFittingForm:\n case SpreadsheetExportType.SimpleDetailedQuote:\n case SpreadsheetExportType.SimpleDetailedWorkForm:\n messagePrefix = 'PDF - Liste détaillée des ';\n break;\n case SpreadsheetExportType.SimpleDeliveryForm:\n case SpreadsheetExportType.SimpleFittingForm:\n case SpreadsheetExportType.SimpleQuote:\n case SpreadsheetExportType.SimpleWorkForm:\n messagePrefix = 'PDF - Liste simple des ';\n }\n\n return (\n messagePrefix +\n SpreadsheetExportTypeHelper.translateEnum(spreadsheetExportNotificationDetail.spreadsheetExportType, deliveryFormFilter)\n );\n } else {\n if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [\n SpreadsheetExportType.Credit,\n SpreadsheetExportType.CreditDeliveryForm,\n SpreadsheetExportType.CreditDeliveryFormItem,\n SpreadsheetExportType.CreditDeliveryFormItemRawMaterial,\n SpreadsheetExportType.CreditFreeLine,\n ].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n return \"Excel multiples - Factures d'avoir\";\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [\n SpreadsheetExportType.DeliveryForm,\n SpreadsheetExportType.DeliveryFormItem,\n SpreadsheetExportType.DeliveryFormItemLaboratoryTask,\n SpreadsheetExportType.DeliveryFormItemRawMaterial,\n ].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) => {\n const deliveryFormFilter = SessionStorageService.deserializeJson(\n spreadsheetExportNotificationDetail.filter\n ) as DeliveryFormFilter;\n if (deliveryFormFilter && deliveryFormFilter.invoicedFlag === true) {\n return true;\n } else {\n return false;\n }\n })\n ) {\n return 'Excel multiples - Bons facturés';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) => {\n const deliveryFormFilter = SessionStorageService.deserializeJson(\n spreadsheetExportNotificationDetail.filter\n ) as DeliveryFormFilter;\n if (deliveryFormFilter && deliveryFormFilter.proFormaFlag === true) {\n return true;\n } else {\n return false;\n }\n })\n ) {\n return 'Excel multiples - Bons sur pro forma';\n }\n return 'Excel multiples - Bons de livraison';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [\n SpreadsheetExportType.FittingForm,\n SpreadsheetExportType.FittingFormItem,\n SpreadsheetExportType.FittingFormItemLaboratoryTask,\n SpreadsheetExportType.FittingFormItemRawMaterial,\n ].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n return \"Excel multiples - Bons d'essayage\";\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [\n SpreadsheetExportType.Invoice,\n SpreadsheetExportType.InvoiceDeliveryForm,\n SpreadsheetExportType.InvoiceDeliveryFormItem,\n SpreadsheetExportType.InvoiceDeliveryFormItemRawMaterial,\n SpreadsheetExportType.InvoiceFreeLine,\n ].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n return 'Excel multiples - Factures définitives';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.InvoiceUnpaidReminder, SpreadsheetExportType.InvoiceUnpaidReminderMailing].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return 'Excel multiples - Relances';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [\n SpreadsheetExportType.ProForma,\n SpreadsheetExportType.ProFormaDeliveryForm,\n SpreadsheetExportType.ProFormaDeliveryFormItem,\n SpreadsheetExportType.ProFormaDeliveryFormItemRawMaterial,\n ].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n return 'Excel multiples - Factures pro forma';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.Quote, SpreadsheetExportType.QuoteItem, SpreadsheetExportType.QuoteItemLaboratoryTask].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return 'Excel multiples - Devis';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [\n SpreadsheetExportType.WorkForm,\n SpreadsheetExportType.WorkFormItem,\n SpreadsheetExportType.WorkFormItemLaboratoryTask,\n SpreadsheetExportType.WorkFormItemRawMaterial,\n ].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n return 'Excel multiples - Bons de travail';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.Customer, SpreadsheetExportType.CustomerContact, SpreadsheetExportType.CustomerUserCustomer].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return 'Excel multiples - Clients';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.Manufacturer, SpreadsheetExportType.ManufacturerContact].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return 'Excel multiples - Fabricants';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [\n SpreadsheetExportType.Item,\n SpreadsheetExportType.ItemLaboratoryTaskTemplate,\n SpreadsheetExportType.ItemRate,\n SpreadsheetExportType.ItemRawMaterial,\n ].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n return 'Excel multiples - Articles';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.RawMaterial, SpreadsheetExportType.RawMaterialBatchNumber].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return 'Excel multiples - Matières';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.Shade, SpreadsheetExportType.ShadeRawMaterial].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return 'Excel multiples - Teintes';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [\n SpreadsheetExportType.LaboratoryInformation,\n SpreadsheetExportType.LaboratoryInformationBank,\n SpreadsheetExportType.LaboratoryInformationContact,\n SpreadsheetExportType.LaboratoryInformationDeliveryRoute,\n SpreadsheetExportType.LaboratoryTaskNameSuggestion,\n ].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n return 'Excel multiples - Paramètres du laboratoire';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.LaboratoryUserCustomerSetting].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n return 'Excel multiples - Paramètres des espaces clients';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.LaboratoryTax].includes(spreadsheetExportNotificationDetail.spreadsheetExportType)\n )\n ) {\n return 'Excel multiples - Paramètre des taxes';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.LaboratoryResource, SpreadsheetExportType.LaboratoryResourceContact].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return 'Excel multiples - Ressources';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.SimpleFittingForm, SpreadsheetExportType.SimpleDetailedFittingForm].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return \"PDF multiples - Listes des bons d'essayage\";\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.SimpleDeliveryForm, SpreadsheetExportType.SimpleDetailedDeliveryForm].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) => {\n const deliveryFormFilter = SessionStorageService.deserializeJson(\n spreadsheetExportNotificationDetail.filter\n ) as DeliveryFormFilter;\n if (deliveryFormFilter && deliveryFormFilter.invoicedFlag === true) {\n return true;\n } else {\n return false;\n }\n })\n ) {\n return 'PDF multiples - Listes des bons facturés';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) => {\n const deliveryFormFilter = SessionStorageService.deserializeJson(\n spreadsheetExportNotificationDetail.filter\n ) as DeliveryFormFilter;\n if (deliveryFormFilter && deliveryFormFilter.proFormaFlag === true) {\n return true;\n } else {\n return false;\n }\n })\n ) {\n return 'PDF multiples - Listes des bons sur pro forma';\n }\n return 'PDF multiples - Listes des bons de livraison';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.SimpleQuote, SpreadsheetExportType.SimpleDetailedQuote].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return 'PDF multiples - Listes des devis';\n } else if (\n readSpreadsheetExportNotificationViewModel.spreadsheetExportNotificationDetails.every((spreadsheetExportNotificationDetail) =>\n [SpreadsheetExportType.SimpleWorkForm, SpreadsheetExportType.SimpleDetailedWorkForm].includes(\n spreadsheetExportNotificationDetail.spreadsheetExportType\n )\n )\n ) {\n return 'PDF multiples - Listes des bons de travail';\n } else {\n return 'Excel multiples';\n }\n }\n }\n }\n}\n","import { TimeZoneService } from 'app/core/services/time-zone.service';\nimport { SpreadsheetDashboardTypeHelper } from 'app/shared/enum-helpers/spreadsheet-dashboard-type.enum.helper';\nimport { NotificationStatus } from 'app/shared/enums/notification-status.enum';\nimport { SpreadsheetDashboardType } from 'app/shared/enums/spreadsheet-dashboard-type.enum';\nimport { CustomDatePipe } from 'app/shared/pipes/custom-date.pipe';\nimport { ReadSpreadsheetDashboardNotificationViewModel } from 'app/shared/prothesis-api-view-models/read-spreadsheet-dashboard-notification.view-model';\nimport { SpreadsheetDashboardNotificationCardModel } from './spreadsheet-dashboard-notification-card.model';\n\nexport class SpreadsheetDashboardNotificationCardModelHelper {\n public static build(): SpreadsheetDashboardNotificationCardModel {\n const spreadsheetDashboardNotificationCard = new SpreadsheetDashboardNotificationCardModel();\n return spreadsheetDashboardNotificationCard;\n }\n\n public static fromViewModel(\n readSpreadsheetDashboardNotificationViewModels: ReadSpreadsheetDashboardNotificationViewModel[],\n customDatePipe: CustomDatePipe\n ): Array {\n const spreadsheetDashboardNotificationCards = new Array();\n readSpreadsheetDashboardNotificationViewModels.forEach((readSpreadsheetDashboardNotificationViewModel) => {\n const spreadsheetDashboardNotificationCard = this._createModel(readSpreadsheetDashboardNotificationViewModel, customDatePipe);\n spreadsheetDashboardNotificationCards.push(spreadsheetDashboardNotificationCard);\n });\n\n return spreadsheetDashboardNotificationCards;\n }\n\n public static fromViewModelSingle(\n readSpreadsheetDashboardNotificationViewModel: ReadSpreadsheetDashboardNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): SpreadsheetDashboardNotificationCardModel {\n return this._createModel(readSpreadsheetDashboardNotificationViewModel, customDatePipe);\n }\n\n private static _createModel(\n readSpreadsheetDashboardNotificationViewModel: ReadSpreadsheetDashboardNotificationViewModel,\n customDatePipe: CustomDatePipe\n ): SpreadsheetDashboardNotificationCardModel {\n const spreadsheetDashboardNotificationCard = new SpreadsheetDashboardNotificationCardModel();\n spreadsheetDashboardNotificationCard.colorClass = 'notification-green';\n spreadsheetDashboardNotificationCard.discriminator = readSpreadsheetDashboardNotificationViewModel.discriminator;\n spreadsheetDashboardNotificationCard.notificationDate = TimeZoneService.toMomentInLaboratoryTimeZone(\n readSpreadsheetDashboardNotificationViewModel.notificationDate\n );\n spreadsheetDashboardNotificationCard.readDate = TimeZoneService.toMomentInLaboratoryTimeZone(\n readSpreadsheetDashboardNotificationViewModel.readDate\n );\n spreadsheetDashboardNotificationCard.title = `Excel - ${customDatePipe.transform(\n spreadsheetDashboardNotificationCard.notificationDate\n )} ${customDatePipe.transform(spreadsheetDashboardNotificationCard.notificationDate, 'HH:mm')}`;\n spreadsheetDashboardNotificationCard.messageLine1 = this.buildMessageLine1(readSpreadsheetDashboardNotificationViewModel);\n spreadsheetDashboardNotificationCard.statusFailedFlag =\n readSpreadsheetDashboardNotificationViewModel.status === NotificationStatus.Failed;\n spreadsheetDashboardNotificationCard.statusNothingToDoFlag =\n readSpreadsheetDashboardNotificationViewModel.status === NotificationStatus.NothingToDo;\n spreadsheetDashboardNotificationCard.statusPendingFlag =\n readSpreadsheetDashboardNotificationViewModel.status === NotificationStatus.Pending;\n spreadsheetDashboardNotificationCard.statusSucceedFlag =\n readSpreadsheetDashboardNotificationViewModel.status === NotificationStatus.Succeed;\n spreadsheetDashboardNotificationCard.uuid = readSpreadsheetDashboardNotificationViewModel.uuid;\n return spreadsheetDashboardNotificationCard;\n }\n\n private static buildMessageLine1(readSpreadsheetDashboardNotificationViewModel: ReadSpreadsheetDashboardNotificationViewModel): string {\n if (readSpreadsheetDashboardNotificationViewModel.spreadsheetDashboardNotificationDetails.length > 0) {\n if (readSpreadsheetDashboardNotificationViewModel.spreadsheetDashboardNotificationDetails.length === 1) {\n const spreadsheetDashboardNotificationDetail =\n readSpreadsheetDashboardNotificationViewModel.spreadsheetDashboardNotificationDetails[0];\n return 'Excel - ' + SpreadsheetDashboardTypeHelper.translateEnum(spreadsheetDashboardNotificationDetail.spreadsheetDashboardType);\n } else {\n if (\n readSpreadsheetDashboardNotificationViewModel.spreadsheetDashboardNotificationDetails.every(\n (spreadsheetDashboardNotificationDetail) =>\n [\n SpreadsheetDashboardType.InvoicesByCustomerAmount,\n SpreadsheetDashboardType.InvoicesByCustomerPercentage,\n SpreadsheetDashboardType.InvoicesByCustomerDiscountAmount,\n SpreadsheetDashboardType.InvoicesByCustomerDeliveryFormDiscountAmount,\n ].includes(spreadsheetDashboardNotificationDetail.spreadsheetDashboardType)\n )\n ) {\n return 'Excel multiples - Statistiques clients';\n } else if (\n readSpreadsheetDashboardNotificationViewModel.spreadsheetDashboardNotificationDetails.every(\n (spreadsheetDashboardNotificationDetail) =>\n [\n SpreadsheetDashboardType.InvoicesByFamilyAmount,\n SpreadsheetDashboardType.InvoicesByFamilyPercentage,\n SpreadsheetDashboardType.InvoicesByFamilyQuantity,\n SpreadsheetDashboardType.InvoicesByFamilyDeliveryFormDiscountAmount,\n SpreadsheetDashboardType.InvoicesByFamilyDeliveryFormDiscountQuantity,\n ].includes(spreadsheetDashboardNotificationDetail.spreadsheetDashboardType)\n )\n ) {\n return 'Excel multiples - Statistiques familles';\n } else if (\n readSpreadsheetDashboardNotificationViewModel.spreadsheetDashboardNotificationDetails.every(\n (spreadsheetExportNotificationDetail) =>\n [\n SpreadsheetDashboardType.InvoicesByItemAmount,\n SpreadsheetDashboardType.InvoicesByItemPercentage,\n SpreadsheetDashboardType.InvoicesByItemQuantity,\n SpreadsheetDashboardType.InvoicesByItemDeliveryFormDiscountAmount,\n SpreadsheetDashboardType.InvoicesByItemDeliveryFormDiscountQuantity,\n ].includes(spreadsheetExportNotificationDetail.spreadsheetDashboardType)\n )\n ) {\n return 'Excel multiples - Statistiques articles';\n } else if (\n readSpreadsheetDashboardNotificationViewModel.spreadsheetDashboardNotificationDetails.every(\n (spreadsheetDashboardNotificationDetail) =>\n [SpreadsheetDashboardType.InvoicesByYear].includes(spreadsheetDashboardNotificationDetail.spreadsheetDashboardType)\n )\n ) {\n return 'Excel multiples - Statistiques par années';\n } else if (\n readSpreadsheetDashboardNotificationViewModel.spreadsheetDashboardNotificationDetails.every(\n (spreadsheetDashboardNotificationDetail) =>\n [\n SpreadsheetDashboardType.ActivityByItemQuantityByLaboratoryResource,\n SpreadsheetDashboardType.ActivityByLaboratoryResourceAmountByMonth,\n SpreadsheetDashboardType.ActivityByLaboratoryResourceDurationByMonth,\n SpreadsheetDashboardType.ActivityBySectorAmountByMonth,\n SpreadsheetDashboardType.ActivityBySectorDurationByMonth,\n ].includes(spreadsheetDashboardNotificationDetail.spreadsheetDashboardType)\n )\n ) {\n return \"Excel multiples - Statistiques suivi d'activité\";\n } else if (\n readSpreadsheetDashboardNotificationViewModel.spreadsheetDashboardNotificationDetails.every(\n (spreadsheetDashboardNotificationDetail) =>\n [\n SpreadsheetDashboardType.ActivityByItemQuantityByLaboratoryResource,\n SpreadsheetDashboardType.ActivityByLaboratoryResourceAmountByYear,\n SpreadsheetDashboardType.ActivityByLaboratoryResourceDurationByYear,\n SpreadsheetDashboardType.ActivityBySectorAmountByYear,\n SpreadsheetDashboardType.ActivityBySectorDurationByYear,\n ].includes(spreadsheetDashboardNotificationDetail.spreadsheetDashboardType)\n )\n ) {\n return \"Excel multiples - Statistiques suivi d'activité\";\n } else {\n return 'Excel multiples';\n }\n }\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FuseSidebarModule } from '@fuse/components';\nimport { NotificationSidebarModule } from './notification-sidebar/notification-sidebar.module';\nimport { SidebarComponent } from './sidebar.component';\n\n@NgModule({\n declarations: [SidebarComponent],\n exports: [SidebarComponent],\n imports: [\n CommonModule,\n // Call FlexLayoutModule.withConfig to avoid 1e-09px; issue on chrome\n // https://stackoverflow.com/questions/49238319/flex-layout-what-does-flex-basis-1e-09px-mean\n // https://github.com/angular/flex-layout/issues/338\n // https://github.com/angular/flex-layout/wiki/Configuration\n FlexLayoutModule.withConfig({ useColumnBasisZero: false }),\n FormsModule,\n FuseSidebarModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n NotificationSidebarModule,\n ReactiveFormsModule,\n ],\n})\nexport class SidebarModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatCardModule } from '@angular/material/card';\nimport { StorageBannerComponent } from './storage-banner.component';\n\n@NgModule({\n declarations: [StorageBannerComponent],\n imports: [CommonModule, FlexLayoutModule.withConfig({ useColumnBasisZero: false }), MatCardModule],\n exports: [StorageBannerComponent],\n})\nexport class StorageBannerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatCardModule } from '@angular/material/card';\nimport { PipeModule } from 'app/shared/pipes/pipe.module';\nimport { SubscriptionBannerComponent } from './subscription-banner.component';\n\n@NgModule({\n declarations: [SubscriptionBannerComponent],\n imports: [CommonModule, FlexLayoutModule.withConfig({ useColumnBasisZero: false }), MatCardModule, PipeModule],\n exports: [SubscriptionBannerComponent],\n})\nexport class SubscriptionBannerModule {}\n","import { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FuseSidebarModule } from '@fuse/components';\nimport { FuseSharedModule } from '@fuse/shared.module';\nimport { ContextMenuModule } from 'app/core/services/context-menu/context-menu.module';\nimport { ContentModule } from 'app/layout/components/content/content.module';\nimport { FooterModule } from 'app/layout/components/footer/footer.module';\nimport { NavbarModule } from 'app/layout/components/navbar/navbar.module';\nimport { ToolbarModule } from 'app/layout/components/toolbar/toolbar.module';\nimport { LayoutComponent } from 'app/layout/layout.component';\nimport { CustomerAreaMessageBannerModule } from './components/customer-area-message-banner/customer-area-message-banner.module';\nimport { LaboratoryAreaMessageBannerModule } from './components/laboratory-area-message-banner/laboratory-area-message-banner.module';\nimport { SidebarModule } from './components/sidebar/sidebar.module';\nimport { StorageBannerModule } from './components/storage-banner/storage-banner.module';\nimport { SubscriptionBannerModule } from './components/subscription-banner/subscription-banner.module';\n\n@NgModule({\n declarations: [LayoutComponent],\n imports: [\n ContextMenuModule,\n CommonModule,\n CustomerAreaMessageBannerModule,\n RouterModule,\n FuseSharedModule,\n FuseSidebarModule,\n ContentModule,\n FooterModule,\n LaboratoryAreaMessageBannerModule,\n NavbarModule,\n SidebarModule,\n ScrollingModule,\n StorageBannerModule,\n SubscriptionBannerModule,\n ToolbarModule,\n ],\n exports: [LayoutComponent],\n})\nexport class LayoutModule {}\n","import { Routes } from '@angular/router';\nimport { AuthGuardWithForcedLogin } from 'app/core/services/auth-guard-with-forced-login.service';\n\nexport const appRoutes: Routes = [\n // home\n {\n path: 'home',\n loadChildren: () => import('./pages/home/home.module').then((m) => m.HomeModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n // customer-area\n {\n path: 'customer-area/home',\n loadChildren: () => import('./pages/customer-area/home-customer/home-customer.module').then((m) => m.HomeCustomerModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'customer-area/invoice',\n loadChildren: () => import('./pages/customer-area/invoice/invoice.module').then((m) => m.InvoiceModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'customer-area/preview',\n loadChildren: () => import('./pages/customer-area/preview/preview.module').then((m) => m.PreviewModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'customer-area/production-flow',\n loadChildren: () => import('./pages/customer-area/production-flow/production-flow.module').then((m) => m.ProductionFlowModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'customer-area/rate',\n loadChildren: () => import('./pages/customer-area/rate/rate.module').then((m) => m.RateModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n // laboratory-area\n {\n path: 'account',\n loadChildren: () => import('./pages/laboratory-area/account/account.module').then((m) => m.AccountModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'application-settings',\n loadChildren: () =>\n import('./shared/components/application-settings/application-settings.module').then((m) => m.ApplicationSettingsModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'customer',\n loadChildren: () => import('./pages/laboratory-area/customer/customer.module').then((m) => m.CustomerModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'file-asset',\n loadChildren: () => import('./pages/laboratory-area/file-asset/file-asset.module').then((m) => m.FileAssetModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'fiscal-year',\n loadChildren: () => import('./pages/laboratory-area/fiscal-year/fiscal-year.module').then((m) => m.FiscalYearModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'laboratory-area/home',\n loadChildren: () => import('./pages/laboratory-area/home-laboratory/home-laboratory.module').then((m) => m.HomeLaboratoryModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'invoice',\n loadChildren: () => import('./pages/laboratory-area/invoice/invoice.module').then((m) => m.InvoiceModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'item',\n loadChildren: () => import('./pages/laboratory-area/item/item.module').then((m) => m.ItemModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'item/family',\n loadChildren: () => import('./pages/laboratory-area/family/family.module').then((m) => m.FamilyModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'journal',\n loadChildren: () => import('./pages/laboratory-area/journal/journal.module').then((m) => m.JournalModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'admin/laboratory',\n loadChildren: () => import('./pages/admin/laboratory/laboratory.module').then((m) => m.LaboratoryModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'laboratory-role',\n loadChildren: () => import('./pages/laboratory-area/laboratory-role/laboratory-role.module').then((m) => m.LaboratoryRoleModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'manufacturer',\n loadChildren: () => import('./pages/laboratory-area/manufacturer/manufacturer.module').then((m) => m.ManufacturerModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'resource',\n loadChildren: () =>\n import('./pages/laboratory-area/laboratory-resource/laboratory-resource.module').then((m) => m.LaboratoryResourceModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'resource/sector',\n loadChildren: () => import('./pages/laboratory-area/sector/sector.module').then((m) => m.SectorModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'payment',\n loadChildren: () => import('./pages/laboratory-area/payment/payment.module').then((m) => m.PaymentModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'preview',\n loadChildren: () => import('./pages/laboratory-area/preview/preview.module').then((m) => m.PreviewModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'production-flow',\n loadChildren: () => import('./pages/laboratory-area/production-flow/production-flow.module').then((m) => m.ProductionFlowModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'rate',\n loadChildren: () => import('./pages/laboratory-area/rate/rate.module').then((m) => m.RateModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'raw-material/category',\n loadChildren: () => import('./pages/laboratory-area/category/category.module').then((m) => m.CategoryModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'raw-material',\n loadChildren: () => import('./pages/laboratory-area/raw-material/raw-material.module').then((m) => m.RawMaterialModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'shade',\n loadChildren: () => import('./pages/laboratory-area/shade/shade.module').then((m) => m.ShadeModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'shade/shade-guide',\n loadChildren: () => import('./pages/laboratory-area/shade-guide/shade-guide.module').then((m) => m.ShadeGuideModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'subscription',\n loadChildren: () => import('./pages/laboratory-area/subscription/subscription.module').then((m) => m.SubscriptionModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'user-laboratory',\n loadChildren: () => import('./pages/laboratory-area/user-laboratory/user-laboratory.module').then((m) => m.UserLaboratoryModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n {\n path: 'user-management',\n loadChildren: () => import('./pages/laboratory-area/user-management/user-management.module').then((m) => m.UserManagementModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n // admin\n {\n path: 'admin/user',\n loadChildren: () => import('./pages/admin/user/user.module').then((m) => m.UserModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n // url-redirector\n {\n path: 'u',\n loadChildren: () => import('./pages/url-redirector/url-redirector.module').then((m) => m.UrlRedirectorModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n // url-switch\n {\n path: 'url-switch',\n loadChildren: () => import('./pages/url-switch/url-switch.module').then((m) => m.UrlSwitchModule),\n canActivate: [AuthGuardWithForcedLogin],\n },\n // others\n {\n path: '**',\n redirectTo: 'home',\n },\n];\n","import { CurrencyPipe, registerLocaleData } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport localeFr from '@angular/common/locales/fr';\nimport localePt from '@angular/common/locales/pt';\nimport { ErrorHandler, LOCALE_ID, NgModule } from '@angular/core';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipDefaultOptions } from '@angular/material/tooltip';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { FuseSidebarModule } from '@fuse/components';\nimport { FuseModule } from '@fuse/fuse.module';\nimport { FuseSharedModule } from '@fuse/shared.module';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AppComponent } from './app.component';\nimport { CoreModule } from './core/core.module';\nimport { RouterHistoryService } from './core/services/router-history.service';\nimport { SettingsService } from './core/services/settings.service';\nimport { fuseConfig } from './fuse-config';\nimport { GlobalErrorHandler } from './global-error-handler';\nimport { MatPaginatorIntlFr } from './i18n/MatPaginatorIntlFr';\nimport { LayoutModule } from './layout/layout.module';\nimport { appRoutes } from './route';\n\nexport const matTooltipDefaultOptions: MatTooltipDefaultOptions = {\n showDelay: 0,\n hideDelay: 0,\n touchGestures: 'auto',\n position: 'below',\n touchendHideDelay: 0,\n disableTooltipInteractivity: true,\n};\n\n@NgModule({\n declarations: [AppComponent],\n imports: [\n // Angular modules\n BrowserModule,\n BrowserAnimationsModule,\n HttpClientModule,\n RouterModule.forRoot(appRoutes, { enableTracing: false }),\n\n // ngx-translate module\n TranslateModule.forRoot(),\n\n // Fuse modules\n FuseModule.forRoot(fuseConfig),\n FuseSharedModule,\n FuseSidebarModule,\n\n // App modules\n LayoutModule,\n CoreModule.forRoot(),\n ],\n providers: [\n // Loading LOCALE_ID dynamically: https://stackoverflow.com/questions/44287827/dynamically-change-locale-for-datepipe-in-angular-2\n {\n provide: LOCALE_ID,\n deps: [SettingsService],\n useFactory: (settingsService) => settingsService.getLanguage(),\n },\n { provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: matTooltipDefaultOptions },\n { provide: MatPaginatorIntl, useClass: MatPaginatorIntlFr },\n { provide: ErrorHandler, useClass: GlobalErrorHandler },\n CurrencyPipe,\n ],\n bootstrap: [AppComponent],\n})\nexport class AppModule {\n public constructor(previousRouterService: RouterHistoryService) {\n previousRouterService.initialize();\n registerLocaleData(localeFr, 'fr');\n registerLocaleData(localePt, 'pt');\n }\n}\n","import { enableProdMode, ViewEncapsulation } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from 'app/app.module';\nimport { environment } from 'environments/environment';\nimport { hmrBootstrap } from 'hmr';\n\nif (environment.production) {\n enableProdMode();\n}\n\nconst bootstrap = () =>\n platformBrowserDynamic().bootstrapModule(AppModule, [\n {\n // ViewEncapsulation.Emulated is the default value for Angular 7.0.4\n // At writing time, shadowDom is only supported by Chrome & Opera\n // https://blog.angular-university.io/angular-host-context/\n defaultEncapsulation: ViewEncapsulation.Emulated,\n },\n ]);\n\nif (environment.hmr) {\n if (module['hot']) {\n hmrBootstrap(module, bootstrap);\n } else {\n console.error('HMR is not enabled for webpack-dev-server!');\n console.log('Are you using the --hmr flag for ng serve?');\n }\n} else {\n bootstrap().catch((err) => console.error(err));\n}\n","var map = {\n\t\"./fr\": 63131,\n\t\"./fr.js\": 63131,\n\t\"./pt\": 49687,\n\t\"./pt.js\": 49687\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;"],"x_google_ignoreList":[468]}