{"version":3,"file":"dividends.575e6535.js","mappings":"0rCAaO,SAASA,EAAUC,GAA6C,IAA5C,SAAEC,EAAQ,MAAEC,EAAK,KAAEC,EAAI,SAAEC,GAAiBJ,EACnE,OACEK,EAAAA,EAAAA,MAAA,OAAKC,UAAU,yCAAwCL,SAAA,CACpDC,IACCK,EAAAA,EAAAA,KAACC,EAAAA,GAAS,CAACL,KAAK,QAAQG,UAAU,gCAA+BL,SAC9DC,IAIJO,EAAAA,SAAeC,IAAIT,GAAWU,IAC6B,IAAAC,EAA1D,OAAIH,EAAAA,eAAqBE,IAAUA,EAAME,OAASC,EAAAA,GACzCL,EAAAA,aAAmBE,EAAO,CAC/BR,OACAC,WACAW,MAAwB,QAAnBH,EAAED,EAAMK,MAAMD,aAAK,IAAAH,EAAAA,EAAI,kBAC5BN,UAAWW,IAAWN,EAAMK,MAAMV,UAAW,CAE3C,sCAAuCK,EAAMK,MAAME,OACnD,kCAAmCP,EAAMK,MAAME,WAK9CP,CAAK,MAIpB,CAEO,MAAMQ,EAAmBL,EAAAA,E,uECjCzB,SAASM,EAAWpB,GAAoC,IAAnC,MAAEqB,EAAK,KAAElB,EAAO,UAAiBH,EAC3D,OACEO,EAAAA,EAAAA,KAAA,OAAKD,UAAU,kCAAiCL,SAC7CoB,EAAMX,KAAIY,IAAA,IAAC,MAAEpB,EAAK,KAAEqB,EAAI,SAAEC,EAAQ,eAAEC,GAAgBH,EAAA,OACnDf,EAAAA,EAAAA,KAACO,EAAAA,GAAM,CAELY,GAAIC,EAAAA,GACJC,GAAIL,EACJE,eAAgBA,EAChBV,MAAM,MACNX,SAAS,OACTc,OAAQM,EACRrB,KAAMA,EAAKF,SAEVC,GATIqB,EAUE,KAIjB,C,6FCRO,MAAMM,EAAyBpB,EAAAA,cAA8E,CAClHqB,SAAU,CAAC,EACXC,YAAaA,IAAM,KACnBC,gBAAYC,IAOP,SAASC,IACd,OAAOzB,EAAAA,WAAiBoB,EAC1B,CAYO,MAAMM,EAAiCnC,IAAqD,IAApD,SAAEC,EAAQ,UAAEmC,EAAS,gBAAEC,GAAwBrC,EAC5F,MAAOgC,EAAYM,GAAiB7B,EAAAA,YAC7BqB,EAAUC,GAAetB,EAAAA,UAAe,KAC7C,MAAM8B,EAAcC,oBAAmBC,EAAAA,EAAAA,IAAUL,IACjD,GAA2B,IAAvBG,EAAYG,OAAc,OAAOL,EAErC,IACE,MAAO,IAAKA,KAAoBM,KAAKC,MAAML,GAC7C,CAAE,MACA,OAAOF,CACT,KASF,OACE9B,EAAAA,EAAAA,KAACsB,EAAuBgB,SAAQ,CAACC,MAAO,CAAEhB,WAAUC,YAPrBD,IAC/BQ,EAAc,CAAES,UAAWC,OAAOC,UAClClB,EAAYD,IACZoB,EAAAA,EAAAA,IAAiBd,EAAWO,KAAKQ,UAAUrB,GAAU,EAIqCE,cAAa/B,SACpGA,GAC+B,C,2KC1CvB,SAASmD,EAAkBpD,GAWsC,IAP9E,KACAqD,EAAI,QACJC,EAAO,WACPC,EAAU,mBACVC,EAAkB,QAClBC,EAAO,OACPC,GAC4E1D,EAC5E,MAAM,GAAE2D,EAAE,MAAEzD,EAAK,aAAE0D,EAAY,qBAAEC,EAAoB,WAAEC,EAAU,MAAEC,EAAK,QAAEC,EAAO,oBAAEC,GAAwBZ,EAE3G,OACEhD,EAAAA,EAAAA,MAAC6D,EAAAA,GAAS,CACR5D,UAAU,oBACV6D,YAAaA,KACXX,EAAmBG,GAAKG,EAAW,EACnC7D,SAAA,EAEFI,EAAAA,EAAAA,MAAC+D,EAAAA,GAAQ,CACP9D,UAAW+D,IAAW,2BAA4B,CAChD,gBAAiBZ,EACjB,oCAAqCC,KAAWM,SAAAA,EAAStB,UACxDzC,SAAA,EAEHM,EAAAA,EAAAA,KAAC+D,EAAAA,GAAS,CACRC,YAAY,EACZC,MAAOC,EAAAA,GAAWC,KAClBpE,UAAW+D,IAAWR,EAAsB,0BAC5Cc,SAAUV,EAAoBhE,UAE9BM,EAAAA,EAAAA,KAACqE,EAAAA,GAAQ,CACPC,UAAQ,EACRC,QAAShB,EACT5D,MAAO0D,QAAAA,GAAgBrD,EAAAA,EAAAA,KAAA,QAAMD,UAAU,kDAAiDL,SAAEC,IAC1FI,UAAU,iBACVyD,MAAOA,EACP5D,KAAK,WAIRmD,EAAQ5C,KAAKqE,IAAM,IAAAC,EAAA,OAClBzE,EAAAA,EAAAA,KAAC+D,EAAAA,GAAS,CAERE,MAAOO,EAAOP,MACdD,YAAY,EACZjE,UAAW+D,IAAWU,EAAOzE,UAAoC,QAA3B0E,EAAED,EAAOE,0BAAkB,IAAAD,OAAA,EAAzBA,EAAAE,KAAAH,EAA4B1B,GAAO,eAAepD,SAEzF8E,EAAOI,aAAa9B,IALhB0B,EAAOpB,GAMF,OAGfK,aAAO,EAAPA,EAAStD,KAAI,CAAC0E,EAAMC,EAAOC,KAC1BjF,EAAAA,EAAAA,MAAC+D,EAAAA,GAAQ,CAEP9D,UAAW+D,IAAW,CACpB,oCAAqCgB,IAAUC,EAAM5C,OAAS,GAAKgB,IAClEzD,SAAA,EAEHM,EAAAA,EAAAA,KAAC+D,EAAAA,GAAS,CAACC,YAAY,EAAOC,MAAOC,EAAAA,GAAWC,KAAMpE,UAAU,sBAAqBL,SAClFmF,EAAKlF,QAEPqD,aAAU,EAAVA,EAAa6B,EAAKzB,IAAIjD,KAAKqE,IAC1BxE,EAAAA,EAAAA,KAAC+D,EAAAA,GAAS,CAERE,MAAOO,EAAOP,MACdD,YAAY,EACZjE,UAAW+D,IAAWU,EAAOzE,UAAW,eAAeL,SAEtD8E,EAAOI,aAAaC,IALhBL,EAAOpB,QAVXyB,EAAKzB,QAsBpB,CC5Ee,SAAS4B,EAAevF,GAYsC,IAR3E,UACAwF,EAAS,YACTC,EAAW,QACXnC,EAAO,WACPC,EAAU,KACVF,EAAI,aACJqC,GAAe,EAAI,mBACnBlC,GACyExD,EACzE,OACEK,EAAAA,EAAAA,MAACsF,EAAAA,GAAK,CAACrF,UAAWW,IAAW,oDAAqD,CAAE,cAAeyE,IAAgBzF,SAAA,CAChHuF,EACAnC,EAAK3C,KAAI,CAACkF,EAAKP,KAAK,IAAAQ,EAAA,OACnBtF,EAAAA,EAAAA,KAAC6C,EAAkB,CAEjBC,KAAMuC,EACNtC,QAASA,EACTC,WAAYA,EACZC,mBAAoBA,EACpBC,QAAmB,IAAV4B,EACT3B,OAAQ2B,IAAUhC,EAAKX,OAAS,GANrB,QAMuBmD,EAN7BD,EAAIjC,UAAE,IAAAkC,EAAAA,EAAID,EAAI1F,MAOnB,IAEHuF,IAGP,CC5BO,SAASK,EAAgB9F,GAe8C,IAAA+F,EAAAC,EAAA,IAX5E,SACA/F,EAAQ,UACRuF,EAAS,YACTC,EAAW,QACXnC,EAAO,WACPC,EAAU,OACV0C,EAAM,KACN5C,EAAI,aACJqC,EAAY,uBACZQ,EAAsB,mBACtB1C,GAC0ExD,EAC1E,MAAMmG,GACJ5F,EAAAA,EAAAA,KAACgF,EAAe,CACdC,UAAWA,EACXC,YAAaA,EACbpC,KAAMA,EACNC,QAASA,EACTC,WAAYA,EACZmC,aAAcA,EACdlC,mBAAoBA,IAGxB,OACEnD,EAAAA,EAAAA,MAAA,OAAKC,UAAU,uBAAsBL,SAAA,EACnCI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,qBAAoBL,SAAA,CAChCgG,EACAhG,KAEFiG,GACC3F,EAAAA,EAAAA,KAAC6F,EAAAA,EAAwB,CAAmCC,WAAS,EAACC,mBAAiB,EAAArG,SACpFkG,GADkD,QACnCJ,EADoB,QACpBC,EADa3C,EAAK,UAAE,IAAA2C,OAAA,EAAPA,EAASO,OAAO7D,cAAM,IAAAqD,EAAAA,EAAI,GAIzDI,IAIR,C,SCpEO,SAASK,EAAyCnD,GACvD,MAAMoD,EAAa,IAAIpD,GAAMqD,MAAK,CAACC,EAAGC,IAAMC,OAAOC,SAASH,EAAEI,MAAQF,OAAOC,SAASF,EAAEG,QACxF,OAAON,EAAWO,QAIhB,CAACC,EAAGjH,EAAmBkH,KAAM,IAAAC,EAAAC,EAAA,IAAvB,KAAEL,EAAI,MAAEjE,GAAO9C,EACnB,MAAMqH,EAA+B,QAA3BF,EAAoB,QAApBC,EAAGX,EAAWS,EAAI,UAAE,IAAAE,OAAA,EAAjBA,EAAmBtE,aAAK,IAAAqE,EAAAA,EAAI,KACzC,IAAIG,EAAwB,KACxBC,EAA2B,KAO/B,OALc,OAAVzE,GAA2B,OAATuE,GAA2B,IAAVvE,GAAwB,IAATuE,IACpDC,EAASxE,EAAQuE,EACjBE,GAAczE,EAAQuE,GAAQG,KAAKC,IAAIJ,GAAS,KAG3C,CACLC,OAAQ,IACHL,EAAIK,OACP,CAACP,GAAOO,GAEVC,UAAW,IACNN,EAAIM,UACP,CAACR,GAAOQ,GAEX,GAEH,CAAED,OAAQ,CAAC,EAAGC,UAAW,CAAC,GAE9B,CAEO,SAASG,EAAmDrE,GACjE,MAAMoD,EAAa,IAAIpD,GAAMqD,MAAK,CAACC,EAAGC,IAAMC,OAAOC,SAASH,EAAEI,MAAQF,OAAOC,SAASF,EAAEG,QACxF,OAAON,EAAWO,QAAsC,CAACC,EAAG3F,EAAmB4F,KAAM,IAAAS,EAAAC,EAAA,IAAvB,KAAEb,EAAI,MAAEjE,GAAOxB,EAC3E,MAAM+F,EAA+B,QAA3BM,EAAoB,QAApBC,EAAGnB,EAAWS,EAAI,UAAE,IAAAU,OAAA,EAAjBA,EAAmB9E,aAAK,IAAA6E,EAAAA,EAAI,KACzC,IAAIJ,EAA2B,KAM/B,OAJc,OAAVzE,GAA2B,OAATuE,GAA2B,IAAVvE,GAAwB,IAATuE,IACpDE,GAAczE,EAAQuE,GAAQG,KAAKC,IAAIJ,GAAS,KAG3C,IACFJ,EACH,CAACF,GAAOQ,EACT,GACA,CAAC,EACN,CAEO,SAASM,EAAaC,EAAmBC,GAK9C,OAD8BA,EAAWD,EAFfN,KAAKQ,IAAIhF,OAAOiF,WAAY,MAGxB,GAChC,CAEO,SAASC,IAAkD,IAA7BpF,EAAoBqF,UAAAzF,OAAA,QAAAT,IAAAkG,UAAA,GAAAA,UAAA,GAAG,KAC1D,OAAc,OAAVrF,GAA4B,IAAVA,EAAoB,0BAGtCA,GAAS,GAAW,4BACpBA,GAAS,GAAW,4BACpBA,GAAS,GAAW,4BACpBA,GAAS,GAAW,4BACpBA,EAAQ,EAAU,4BAGlBA,EAAQ,GAAW,8BACnBA,EAAQ,GAAW,8BACnBA,EAAQ,GAAW,8BACnBA,EAAQ,GAAW,8BACnBA,EAAQ,EAAU,mCAAtB,CACF,C,oOC7De,SAASsF,EAAepI,GAMjB,IANkB,eACtCqI,EAAc,YACdC,EAAW,iBACXC,EAAgB,UAChBC,EAAS,cACTC,GACkBzI,EAClB,MAAM0I,EAAmBD,EAAc,GAEvC,OACEpI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gCAA+BL,SAAA,EAC5CM,EAAAA,EAAAA,KAACoI,EAAAA,GAAO,CAACC,MAAO,EAAGtI,UAAU,kBAAiBL,SAC3C4I,EAAAA,GAA0BC,EAAAA,GAAYC,cAGzC1I,EAAAA,EAAAA,MAAA,OAAKC,UAAU,kCAAiCL,SAAA,EAC9CI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAeL,SAAA,EAC5BM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,qBAAoBL,SAAC,aACrCM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,UAASL,SACtBoI,EAAiBW,EAAAA,EAAeA,EAAAA,EAAiBX,GAAiB,eAAiB,UAGxFhI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAeL,SAAA,EAC5BM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,qBAAoBL,SAAC,qBACrCM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,UAASL,SAAEgJ,EAAAA,GAAAA,kBAAkC,CAAEnG,MAAO4F,EAAiBQ,iBAEzF7I,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAeL,SAAA,EAC5BM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,qBAAoBL,SAAC,aACrCM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,UAASL,SACO,OAA7ByI,EAAiBS,QACdF,EAAAA,GAAAA,kBAAkC,CAAEnG,MAAO4F,EAAiBS,UAC5D,UAGR9I,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAeL,SAAA,EAC5BM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,qBAAoBL,SAAC,kBACrCM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,UAASL,SACC,iBAAhBqI,GAAiD,iBAAdE,GACzCnI,EAAAA,EAAAA,MAAA+I,EAAAA,SAAA,CAAAnJ,SAAA,CACGgJ,EAAAA,GAAAA,kBAAkC,CAAEnG,MAAOwF,IAAe,KAC1DW,EAAAA,GAAAA,kBAAkC,CAAEnG,MAAQwF,EAAcE,EAAa,MAAO,QAGjF,UAINnI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAeL,SAAA,EAC5BM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,qBAAoBL,SAAC,mBACrCM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,UAASL,SACM,iBAArBsI,GAAsD,iBAAdC,GAC9CnI,EAAAA,EAAAA,MAAA+I,EAAAA,SAAA,CAAAnJ,SAAA,CACGgJ,EAAAA,GAAAA,kBAAkC,CAAEnG,MAAOyF,IAAoB,KAC/DU,EAAAA,GAAAA,kBAAkC,CAAEnG,MAAQyF,EAAmBC,EAAa,MAAO,QAGtF,cAOd,C,sDCxEO,IAAKa,EAAqB,SAArBA,GAAqB,OAArBA,EAAqB,gBAArBA,EAAqB,cAArBA,EAAqB,gBAArBA,CAAqB,MAM1B,MAAMC,EAAkB,CAC7B,CACE3F,GAAI,SACJ4F,KAAM,UACN/E,MAAOC,EAAAA,GAAWC,MAEpB,CACEf,GAAI,WACJ4F,KAAM,SACN/E,MAAOC,EAAAA,GAAW+E,OAEpB,CACE7F,GAAI,UACJ4F,KAAM,UACN/E,MAAOC,EAAAA,GAAW+E,QAITC,EAAY,GACZC,EAAe,IACfC,EAAe,GACfC,EAAgB,GAChBC,EAAmB,GACnBC,EAAU,GACVC,EAAc,GACdC,EAAgB,CAAEC,IAAK,EAAGC,MAAO,EAAGC,OAAQ,EAAGC,KAAM,GACrDC,EAAa,CAAEC,SAAU,GAAIC,WAAY,IAAKC,WAAY,MAAOC,KAAMC,IAAAA,KAAY,MACnFC,EAAwB,CAAEC,QAAS,OAAQC,OAAQ,IACnDC,EAAe,CAC1BC,OAAQ,EACRC,OAAQ,EACRP,KAAMQ,eAAeC,aAAeR,IAAAA,KAAY,KAAOA,IAAAA,KAAY,IACnES,QAAS,KAEEC,EAAqB,CAAED,QAAS,GC9BtC,SAASE,EAAsBrL,GAAuB,IAAtB,UAAEsL,GAAkBtL,EACzD,OACEK,EAAAA,EAAAA,MAAA,OAAKC,UAAU,OAAML,SAAA,EACnBM,EAAAA,EAAAA,KAACoI,EAAAA,GAAO,CAACC,MAAO,EAAGtI,UAAU,aAAYL,SAAC,6BAG1CI,EAAAA,EAAAA,MAACsF,EAAAA,GAAK,CAACrF,UAAU,gEAA+DL,SAAA,EAC9EI,EAAAA,EAAAA,MAACkL,EAAAA,GAAS,CAAAtL,SAAA,CACPqJ,EAAgB5I,KAAKqE,IACpBxE,EAAAA,EAAAA,KAACiL,EAAAA,GAAW,CAAiBhH,MAAOO,EAAOP,MAAOlE,UAAU,SAAQL,SACjE8E,EAAOwE,MADQxE,EAAOpB,OAK3BpD,EAAAA,EAAAA,KAAC+D,EAAAA,GAAS,QAEZ/D,EAAAA,EAAAA,KAAC2D,EAAAA,GAAS,CAAAjE,SACPqL,EAAU5K,KAAI,CAAC+K,EAAUpG,EAAOqG,KAC/BrL,EAAAA,EAAAA,MAAC+D,EAAAA,GAAQ,CAEP9D,UAAW+D,IAAW,kDAAmD,CACvE,gBAA2B,IAAVgB,EACjB,oCAAqCA,IAAUqG,EAAIhJ,OAAS,IAC3DzC,SAAA,CAEFqJ,EAAgB5I,KAAKqE,IACpBxE,EAAAA,EAAAA,KAAC+D,EAAAA,GAAS,CAAiBE,MAAOO,EAAOP,MAAOD,YAAY,EAAOjE,UAAU,cAAaL,SACzE,WAAd8E,EAAOpB,GACJqF,EAAAA,EAAeA,EAAAA,EAAiByC,EAAS1G,EAAOpB,KAAM,gBACtDgI,EAAAA,EAAAA,IAAkBF,EAAS1G,EAAOpB,IAAK,CAAEiI,UAAW,KAH1C7G,EAAOpB,OAQzBpD,EAAAA,EAAAA,KAAC+D,EAAAA,GAAS,MAfLmH,EAASI,iBAsB5B,C,eClBO,IAAKC,EAAgB,SAAhBA,GAAgB,OAAhBA,EAAgB,sBAAhBA,EAAgB,4BAAhBA,CAAgB,MCjCb,SAASC,IACtB,MAAM,SAAEjK,EAAQ,YAAEC,IAAgBG,EAAAA,EAAAA,MAE5B8J,EAAgBA,CAACC,EAA6BnJ,KAClDf,EAAY,IACPD,EACH,CAACmK,GAAMnJ,GACP,EAGJ,OACEzC,EAAAA,EAAAA,MAACN,EAAAA,EAAU,CAACI,KAAK,QAAQD,MAAM,OAAMD,SAAA,EACnCM,EAAAA,EAAAA,KAACY,EAAAA,EAAgB,CACfD,OAAQY,EAASgK,EAAiBI,WAClCC,QAASA,KACPH,EAAcF,EAAiBI,WAAYpK,EAASgK,EAAiBI,WAAW,EAChFjM,SACH,gBAGDM,EAAAA,EAAAA,KAACY,EAAAA,EAAgB,CACfD,OAAQY,EAASgK,EAAiBM,cAClCD,QAASA,KACPH,EAAcF,EAAiBM,cAAetK,EAASgK,EAAiBM,cAAc,EACtFnM,SACH,mBAKP,C,gFC9BO,SAASoM,EAAStI,GACvB,OAAQA,GACN,KAAKuI,EAAAA,GAAaC,KAChB,OAAO7B,IAAAA,KAAY,KACrB,KAAK4B,EAAAA,GAAaE,OAChB,OAAO9B,IAAAA,OAAc,KACvB,KAAK4B,EAAAA,GAAaG,MAChB,OAAO/B,IAAAA,MAAa,KACtB,KAAK4B,EAAAA,GAAaI,KAChB,OAAOzB,eAAeC,aAAeR,IAAAA,KAAY,KAAOA,IAAAA,KAAY,KACtE,QACE,MAAO,MAEb,CACO,SAASiC,EAAc7J,GAC5B,OAAO6I,EAAAA,EAAAA,IAAkB7I,EAAO,CAAE8I,UAAWpE,KAAKC,IAAI3E,IAAU,IAAQ,EAAI,GAC9E,CCTe,SAAS8J,EAAY5M,GAAsD,IAArD,SAAEwB,EAAQ,UAAEqL,EAAS,QAAEC,GAA4B9M,EACtF,OAAKwB,GAAasL,GAA8B,IAAnBA,EAAQpK,QAAiBoK,EAAQC,MAAKzL,IAAA,IAAC,MAAEwB,GAAOxB,EAAA,OAAKwB,CAAK,KAGrFvC,EAAAA,EAAAA,KAAA,OAAKD,UAAU,4HAA2HL,SACvI6M,EAAQpM,KAAK2C,GACXA,EAAKP,OACJzC,EAAAA,EAAAA,MAAA,OAEEC,UAAW+D,IAAW,gDAAiD,CACrE,2BAA4BhB,EAAKkG,OAASsD,IACzC5M,SAAA,EAEHI,EAAAA,EAAAA,MAAA,QAAMC,UAAU,yCAAwCL,SAAA,EACtDM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,iCAAiC0M,MAAO,CAAEC,gBAAiB5J,EAAKU,UAChFxD,EAAAA,EAAAA,KAAA,QAAAN,SAAOoD,EAAKkG,WAEdhJ,EAAAA,EAAAA,KAAA,QAAMD,UAAU,kBAAiBL,UAAE0L,EAAAA,EAAAA,KAAmBtI,EAAKP,WATtDO,EAAKkG,MAFA,SAL6E,IAsBnG,CCLA,SAAS2D,EAAYlN,GAA2D,IAA1D,gBAAEmN,EAAe,OAAEC,KAAWpM,GAA0BhB,EAC5E,MAAMqN,EAAID,EAAQ,GAAGC,EAAIF,EAAkB,EAC3C,OACE5M,EAAAA,EAAAA,KAAC+M,EAAAA,EAAS,IAAKtM,EAAOqM,EAAGA,EAAGE,MAAOJ,KAAsBnM,EAAMQ,SAAWsJ,EAAeM,GAE7F,CASA,MAAMoC,EAA0B,2DAEzB,SAASC,GAAcnM,GAAmC,IAAlC,WAAEoM,EAAU,UAAEC,GAAkBrM,EAC7D,MAAOE,EAAUoM,GAAenN,EAAAA,UAAe,IACxCoN,EAAcC,GAAmBrN,EAAAA,SAAe,KAChDsN,EAAyBC,GAA8BvN,EAAAA,UAAe,GACvEwN,EAAeP,EAAW,GAAGnH,OAAO7D,OACpCqF,EAAW4F,EAAY9D,EAAmBJ,GAC1C,qBAAEyE,EAAoB,YAAEC,GAAgB1N,EAAAA,SAC5C,KAAM,CACJyN,qBAAsBR,EAAW,GAAGnH,OAAO6H,QAAOC,IAAA,IAAC,WAAEC,GAAYD,EAAA,OAAKC,CAAU,IAAE5L,OAClFyL,YAAaT,EAAWX,MAAKwB,IAAA,IAAC,GAAE5K,EAAE,WAAEG,GAAYyK,EAAA,OAAK5K,IAAO0F,EAAsBmF,QAAU1K,CAAU,OAExG,CAAC4J,IAEGe,EAAYhO,EAAAA,SAAc,KAC9B,MAAM4C,EAAsC,CAAC,EAM7C,OALAqK,EAAWgB,SAAQC,IAAoB,IAAnB,GAAEhL,EAAE,OAAE4C,GAAQoI,EAChCpI,EAAOmI,SAAQE,IAAiC,IAAhC,MAAE9L,EAAK,KAAEiE,EAAI,WAAEuH,GAAYM,EACzCvL,EAAK0D,GAAQ,IAAK1D,EAAK0D,GAAOA,OAAMuH,aAAY,CAAC3K,GAAKb,EAAO,GAC7D,IAEG+L,OAAOtI,OAAOlD,EAAK,GACzB,CAACqK,IAEEoB,EAAkBrO,EAAAA,SAAc,IAAMiN,EAAWqB,MAAM,GAAGX,QAAQY,GAAUA,EAAMlL,cAAa,CAAC4J,IAEhGuB,EACJhB,EAAelG,GAAYkG,EAAe,GAAKnE,EAAUC,EAA6B,EAAfJ,EAAmBmF,EAAgBpM,OACtGwM,EAAoBhB,EAAuBnG,EAAWmG,EAAuBpE,EAC7EqF,EAAsBpH,EAAW,EAAI+B,EAAU,EAE/CsF,EAA2B,CAC/B,SAAqC,IAA3BN,EAAgBpM,OAC1B,UAAsC,IAA3BoM,EAAgBpM,OAC3B,UAAsC,IAA3BoM,EAAgBpM,QAG7B,OACEnC,EAAAA,EAAAA,KAAA,OAAKD,UAAU,0BAAyBL,UACtCI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,4BAA4B0M,MAAO,CAAEO,MAAOuB,EAAgBpM,OAASuM,EAAa,QAAShP,SAAA,EACxGM,EAAAA,EAAAA,KAAA,OAAKD,UAAW+D,IAAWmJ,EAAyB,QAAS4B,MAC7D7O,EAAAA,EAAAA,KAAA,OAAKD,UAAW+D,IAAWmJ,EAAyB,UAAW4B,MAC/D7O,EAAAA,EAAAA,KAAA,OAAKD,UAAW+D,IAAWmJ,EAAyB,UAAW4B,MAC/D7O,EAAAA,EAAAA,KAAA,OAAKD,UAAW+D,IAAWmJ,EAAyB,UAAW4B,MAC/D7O,EAAAA,EAAAA,KAAA,OAAKD,UAAW+D,IAAWmJ,EAAyB,WAAY4B,MAChE7O,EAAAA,EAAAA,KAAA,OACED,UAAU,0HACV0M,MAAO,CAAEO,MAAO2B,EAAmBhF,MAAOP,MAG5CpJ,EAAAA,EAAAA,KAAA,OAKE8O,aAAcA,KACZzB,GAAY,EAAK,EAEnB0B,aAAcA,KACZ1B,GAAY,EAAM,EAClB3N,UAEFI,EAAAA,EAAAA,MAACkP,EAAAA,EAAa,CACZhC,MAAO0B,EACPO,OAAQ9F,EACRrG,KAAMoL,EACNgB,OACEtB,EAAcnE,EAAgB,IAAKA,EAAeI,KAAM+E,EAAqBjF,MAAOiF,GAEtFO,YAAY,OACZC,YAAaA,CAACC,EAAGC,KACf7B,EAA2B6B,EAAWC,QAAU9M,OAAOiF,WAAa,EAAE,EACtEhI,SAAA,CAEDyN,EAAWhN,KAAI,CAACkF,EAAKP,KACpB,MAAM0K,EAAS1K,EAAQ,EAAI,OAAOA,IAAU,QACtC2K,EAAc3K,EAAQ,EAAI,OAAS,QACnC4K,EAAa5K,EAAQ,EAAK8I,EAAc,EAAIgB,EAAuBvF,EACnEsG,EAAY7K,EAAQ,EAAmB,EAAfsE,EAAmBA,EAGjD,OAAK/D,EAAI9B,YAAcuB,EAAQ,EAAU,MAGvC9E,EAAAA,EAAAA,KAAC4P,EAAAA,EAAK,CAEJH,YAAaA,EACbI,QAASL,EACTM,KAAMhG,EACNiG,UAAU,EACVC,UAAU,EACV5D,cAAeA,EACfsD,WAAYA,EACZ1C,MAAO2C,EACPM,SAAS,mBACTtQ,MACY,IAAVmF,OACIpD,EACA,CACEa,MAAO8C,EAAI1F,MACXuQ,SAAU,aACVC,OAAQ,GACRC,GAAIxC,EAAc,EAA2B,EAAtBgB,EACvBnC,MAAO,IAAK3C,EAAYG,WAAY,YAlBvCnF,EAqBL,KAGN9E,EAAAA,EAAAA,KAACqQ,EAAAA,EAAO,CACNC,aAAclG,EACd8F,SAAU,CAAEK,EAAG,GACfC,mBAAoB,CAAE1D,GAAG,GACzB2D,iBAAkB,CAAE3D,EAAGU,GACvBkD,OAAQ,GACRC,mBAAmB,EACnBC,QAAQ5Q,EAAAA,EAAAA,KAAC2M,EAAY,CAAC1L,SAAUA,EAAU2L,gBAAiBpF,EAAW+B,IACtEsH,QAASC,IAAA,IAAC,QAAEvE,GAASuE,EAAA,OAAK9Q,EAAAA,EAAAA,KAACqM,EAAY,CAACpL,SAAUA,EAAUqL,UAAWgB,EAAcf,QAASA,GAAW,IAE1GY,EAAWhN,KAAI,CAAA4Q,EAAmCC,KAAa,IAA/C,GAAE5N,EAAE,MAAEzD,EAAK,WAAE4D,EAAU,MAAEC,GAAOuN,EAC/C,IAAKxN,EAAY,OAAO,KAExB,MAAMiM,EAASwB,EAAW,EAAI,OAAOA,IAAa,QAElD,OAAI5N,IAAO0F,EAAsBmF,QAE7BjO,EAAAA,EAAAA,KAACiR,EAAAA,EAAG,CAEFjI,KAAMrJ,EACNuR,QAAS9N,EACT8G,KAAM4B,EAAStI,GACfqM,QAASL,EACTmB,mBAAmB,EACnB7B,aAAcA,KACZvB,EAAgB5N,EAAM,EAExBoP,aAAcA,KACZxB,EAAgB,GAAG,EACnB7N,SAEDwO,EAAU/N,KAAI,CAACkF,EAAKP,KACnB9E,EAAAA,EAAAA,KAACmR,EAAAA,EAAI,CAIHC,OAAQ,CAAC,EAAG,EAAG,EAAG,GAClBlH,KAAM4B,EAASzG,EAAI0I,WAAahC,EAAAA,GAAaI,KAAO3I,IAJ/CsB,MAfJ1B,IA2BTpD,EAAAA,EAAAA,KAACqR,EAAAA,EAAI,CAEHrI,KAAMrJ,EACNuR,QAAS9N,EACTyM,QAASL,EACTlP,KAAK,SACLgR,IAAK,CAAEC,YAAa,GACpBC,UAAW,CACTD,YAAa,EACb9G,OAAQqB,EAAStI,GACjBsL,aAAcA,KACZvB,EAAgB5N,EAAM,EAExBoP,aAAcA,KACZxB,EAAgB,GAAG,GAGvB9C,OAAQqB,EAAStI,GACjB0G,KAAM4B,EAAStI,GACfmN,mBAAmB,EACnBc,cAAc,GAnBTrO,EAoBL,aAQlB,C,gBC3NA,MAAMsO,GAAaA,CAACC,EAAoBvE,KACtC,MAAMwE,EAAkB9N,IAAW,kBAAmB,CACpD,oBAAqBsJ,EACrB,mBAAoBA,IAoDtB,MAAO,CAAErK,QAjDwC4O,EAASxR,KAAKqG,IAAI,CACjEpD,GAAIoD,EACJwC,KAAMxC,EACNvC,MAAOC,EAAAA,GAAW+E,MAClBlJ,UAAW6R,EACXhN,aAAe9B,IAAS,IAAA+O,EACtB,MAAMC,EAAiBhP,EAAKkD,OAAO+L,MAAMD,GAAmBA,EAAetL,OAASA,IAC9EwL,EAA2C,QAAxBH,EAAGC,aAAc,EAAdA,EAAgBvP,aAAK,IAAAsP,EAAAA,EAAI,KACrD,GAAmC,iBAAxBG,EAAkC,OAAOhS,EAAAA,EAAAA,KAAA,QAAMD,UAAU,eAAcL,SAAC,MACnF,MAAM6C,GAAQ6I,EAAAA,EAAAA,IAAkB4G,EAAqB,CAAE3G,UAAW,IAClE,OAAOrL,EAAAA,EAAAA,KAAA,QAAMD,UAAW+D,IAAW,CAAE,eAAgBgO,aAAc,EAAdA,EAAgB/D,aAAcrO,SAAE6C,GAAa,MAuCpFS,WAnCqC,CACrD,CAACuI,EAAiBI,WAAYgG,EAASxR,KAAKqG,IAAI,CAC9CpD,GAAIoD,EACJwC,KAAMxC,EACNvC,MAAOC,EAAAA,GAAW+E,MAClBlJ,UAAW6R,EACXhN,aAAe9B,IAAS,IAAAmP,EACtB,MAAMH,EAAiBhP,EAAKkD,OAAO+L,MAAMD,GAAmBA,EAAetL,OAASA,IAC9EwL,EAA2C,QAAxBC,EAAGH,aAAc,EAAdA,EAAgBvP,aAAK,IAAA0P,EAAAA,EAAI,KACrD,OACEjS,EAAAA,EAAAA,KAACkS,GAAAA,EAAY,CAAC3P,MAAOuP,SAAAA,EAAgB/D,WAAa,KAAOiE,EAAqBG,aAAc,KAAKzS,UAC9F0L,EAAAA,EAAAA,IAAkB4G,EAAqB,CAAEI,aAAc,OAC3C,MAIrB,CAAC7G,EAAiBM,cAAe8F,EAASxR,KAAKqG,IAAI,CACjDpD,GAAIoD,EACJwC,KAAMxC,EACNvC,MAAOC,EAAAA,GAAW+E,MAClBlJ,UAAW6R,EACXhN,aAAe9B,IAAS,IAAAuP,EAAAC,EACtB,MAAMR,EAAiBhP,EAAKkD,OAAO+L,MAAMD,GAAmBA,EAAetL,OAASA,IAC9EwL,EAA2C,QAAxBK,EAAGP,aAAc,EAAdA,EAAgBvP,aAAK,IAAA8P,EAAAA,EAAI,KACrD,OACErS,EAAAA,EAAAA,KAACkS,GAAAA,EAAY,CACX3P,MAAOuP,SAAAA,EAAgB/D,WAAa,KAAOiE,EAC3CG,aAAcH,EAAsB,IAAM,KAAKtS,SAEf,QAFe4S,EAE9CN,aAAmB,EAAnBA,EAAqBO,QAAQ,UAAE,IAAAD,EAAAA,EAAI,KACvB,OAKO,ECxChC,MAAME,GAAuG,CAC3G,CAAE7S,MAAO,2BAA4ByD,GAAI0F,EAAsBmF,OAAQzK,MAAOuI,EAAAA,GAAaC,KAAMzI,YAAY,GAC7G,CAAE5D,MAAO,wBAAyByD,GAAI0F,EAAsB2J,MAAOjP,MAAOuI,EAAAA,GAAaG,MAAO3I,YAAY,GAC1G,CAAE5D,MAAO,sBAAuByD,GAAI0F,EAAsB4J,OAAQlP,MAAOuI,EAAAA,GAAaE,OAAQ1I,YAAY,IAwC5G,SAASoP,KAAqB,IAAAC,EAAAC,EAAAC,EAAAC,EAC5B,MAAM,KAAEjQ,IAASkQ,EAAAA,EAAAA,OACX,SAAEzR,IAAaI,EAAAA,EAAAA,OACdwL,EAAY8F,GAAiB/S,EAAAA,UAAe,IAAO4C,EAxC5D,SAAiBA,GAUf,OATuB0P,GAA4BrS,KAAK+S,IAAgB,IACnEA,EACHlN,OAAQlD,EAAKqQ,oBAAoBhT,KAAKgN,IAAU,CAC9C3G,KAAM2G,EAAWiG,aAAaC,UAAU,EAAG,GAC3C9Q,MAAO4K,EAAW+F,EAAiB9P,IACnC2K,WAAYZ,EAAWmG,iBAILnT,KAAK+S,IACzB,MAAMK,GAAUtN,EAAAA,EAAAA,IAAWiN,EAAiBlN,QAE5C,MAAO,IACFkN,EACHzP,QAAS,CACP,CACEL,GAAImI,EAAiBI,UACrBhM,MAAO,aACPqG,OAAQkN,EAAiBlN,OAAO7F,KAAKqT,IAAa,IAAAC,EAAA,MAAM,IACnDD,EACHjR,MAAyC,QAApCkR,EAAEF,EAAQxM,OAAOyM,EAAchN,aAAK,IAAAiN,EAAAA,EAAI,KAC9C,KAEH,CACErQ,GAAImI,EAAiBM,aACrBlM,MAAO,eACPqG,OAAQkN,EAAiBlN,OAAO7F,KAAKqT,IAAa,IAAAE,EAAA,MAAM,IACnDF,EACHjR,MAA4C,QAAvCmR,EAAEH,EAAQvM,UAAUwM,EAAchN,aAAK,IAAAkN,EAAAA,EAAI,KACjD,MAEH7F,OAAO8F,SACV,GAEL,CAKmEC,CAAQ9Q,GAAQ,KAC3E6O,EAAWzR,EAAAA,SACf,IACEiN,EACG0G,SAAQpU,IAAA,IAAC,OAAEuG,GAAQvG,EAAA,OAAKuG,EAAO7F,KAAIY,IAAA,IAAC,KAAEyF,GAAMzF,EAAA,OAAKyF,CAAI,GAAC,IACtDqH,QAAO,CAACrH,EAAM1B,EAAOqG,IAAQA,EAAI2I,QAAQtN,KAAU1B,KACxD,CAACqI,KAEIC,EAAW2G,GAAgB7T,EAAAA,UAAeoH,EAAAA,EAAAA,IAAaqK,EAASxP,OAAQ+G,KACzE,QAAEnG,EAAO,WAAEC,GDZZ,SAAyB2O,EAAoBvE,GAClD,OAAOlN,EAAAA,SAAc,IAAMwR,GAAWC,EAAUvE,IAAY,CAACuE,EAAUvE,GACzE,CCUkC4G,CAAgBrC,EAAUvE,GAE1DlN,EAAAA,WAAgB,KAAM,IAAA+T,EAEW,QAA/BA,EAAAC,SAASC,eAAe,eAAO,IAAAF,GAA/BA,EAAiCxH,MAAM2H,eAAe,cAEtD,MAAMC,EAAWC,KAAS,KACxBP,GAAazM,EAAAA,EAAAA,IAAaqK,EAASxP,OAAQ+G,GAAW,GACrD,KAMH,OAJAmL,IAEA5R,OAAO8R,iBAAiB,SAAUF,GAE3B,KACL5R,OAAO+R,oBAAoB,SAAUH,EAAS,CAC/C,GACA,CAAC1C,IAEJ,MAaM8C,IAAY3R,IAA0C,QAAlC8P,EAAC9P,SAAyB,QAArB+P,EAAJ/P,EAAMqQ,2BAAmB,IAAAN,OAAA,EAAzBA,EAA2B1Q,cAAM,IAAAyQ,EAAAA,EAAI,GAAK,IAAiC,QAA5BE,EAAChQ,SAAmB,QAAfiQ,EAAJjQ,EAAMoF,qBAAa,IAAA6K,OAAA,EAAnBA,EAAqB5Q,cAAM,IAAA2Q,EAAAA,EAAI,GAAK,EAE/G,OACEhT,EAAAA,EAAAA,MAAA+I,EAAAA,SAAA,CAAAnJ,SAAA,EACEM,EAAAA,EAAAA,KAAC0U,EAAAA,EAAkB,CACjBC,aAAa3U,EAAAA,EAAAA,KAAC4U,EAAAA,EAAsB,IACpCzC,aAAcsC,GAAUzU,EAAAA,EAAAA,KAACwL,EAAqB,SAAM9J,IAGrD+S,GACC3U,EAAAA,EAAAA,MAAA,OACEC,UAAU,yBACV0M,MAAO,CACLoI,SAAUzH,EAA8B,GAAlBuE,EAASxP,OAAc,SAAMT,GACnDhC,SAAA,EAEFM,EAAAA,EAAAA,KAAC6H,EAAe,CACdI,UAAWnF,EAAKmF,UAChBH,eAAgBhF,EAAKgF,eACrBC,YAAajF,EAAKiF,YAClBC,iBAAkBlF,EAAKkF,iBACvBE,cAAepF,EAAKoF,iBAGtBlI,EAAAA,EAAAA,KAACuF,EAAAA,GAAgB,CACfzC,KAAMqK,EAAWhN,KAAK2U,IAAO,IACxBA,EACHrR,QAASqR,EAAQrR,QAAQoK,QAAOC,IAAA,IAAC,GAAE1K,GAAI0K,EAAA,OAAKvM,EAAS6B,EAAG,QAE1D6B,WACEnF,EAAAA,EAAAA,MAACkL,EAAAA,GAAS,CAAAtL,SAAA,EACRM,EAAAA,EAAAA,KAACiL,EAAAA,GAAW,CAAChH,MAAOC,EAAAA,GAAWC,OAE9BpB,EAAQ5C,KAAKqE,IACZxE,EAAAA,EAAAA,KAACiL,EAAAA,GAAW,CAAmBhH,MAAOO,EAAOP,MAAOlE,UAAWyE,EAAOzE,UAAUL,SAC7E8E,EAAOwE,MADQxE,EAAOwE,WAM/BjG,QAASA,EACTC,WAAYA,EACZC,mBAvDiBA,CAACG,EAAYG,KACtC0P,EACE9F,EAAWhN,KAAK0E,GACdA,EAAKzB,KAAOA,EACR,IACKyB,EACHtB,cAEFsB,IAEP,EA6C8CnF,UAEvCM,EAAAA,EAAAA,KAACkN,GAAc,CAACE,UAAWA,EAAWD,WAAYA,OAGpDnN,EAAAA,EAAAA,KAAC8K,EAAsB,CAACC,UAAWjI,EAAKoF,oBAG1ClI,EAAAA,EAAAA,KAAA,OAAKD,UAAU,gEAA+DL,SAAC,kDAMvF,CAEA,MAAMqV,GAAa,oBACbC,GAAqC,CACzC,CAACzJ,EAAiBI,YAAY,EAC9B,CAACJ,EAAiBM,eAAe,GAGpB,SAASrD,KACtB,OACExI,EAAAA,EAAAA,KAAC4B,EAAAA,GAA8B,CAACE,gBAAiBkT,GAAkBnT,UAAWkT,GAAWrV,UACvFM,EAAAA,EAAAA,KAAC2S,GAAkB,KAGzB,C,kFChLA,MAAMsC,EAAqE,CACzE1M,EAAAA,GAAYC,UACZD,EAAAA,GAAY2M,SACZ3M,EAAAA,GAAY4M,QACZ5M,EAAAA,GAAY6M,UAGd,SAASC,IACP,MAAMC,GAAeC,EAAAA,EAAAA,KAErB,OAAON,EAAoB9U,KAAKoC,IAAK,CACnC5C,MAAO2I,EAAAA,GAA0B/F,GACjCvB,KAAM,gBAAewU,EAAAA,EAAAA,GAAkB,IAAKF,EAAcG,GAAIlT,MAC9DtB,SAAUqU,EAAaG,KAAOlT,EAC9BrB,gBAAgB,KAEpB,CAEO,SAAS0T,IACd,OAAO5U,EAAAA,EAAAA,KAACa,EAAAA,EAAW,CAACC,MAAOuU,KAC7B,C,yFCfO,SAASK,EAAOjW,GAAiD,IAAhD,YAAEkV,EAAW,aAAExC,KAAiB1R,GAAchB,EACpE,OACEO,EAAAA,EAAAA,KAAA,UAASS,EAAOV,UAAW+D,IAAW,2DAA4DrD,EAAMV,WAAWL,UACjHI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gEAA+DL,SAAA,EAC5EM,EAAAA,EAAAA,KAAA,OACED,UAAW+D,IAAW,mCAAoC,CACxD,kBAAkB6R,EAAAA,EAAAA,QACjBjW,SAEFiV,KAEH3U,EAAAA,EAAAA,KAAA,OAAKD,UAAU,oBAAmBL,SAAEyS,QAI5C,CCfO,SAASuC,EAAkBjV,GAAuC,IAAtC,YAAEkV,EAAW,aAAExC,GAAqB1S,EACrE,OAAOO,EAAAA,EAAAA,KAAC0V,EAAO,CAAC3V,UAAU,wBAAwB4U,YAAaA,EAAaxC,aAAcA,GAC5F,C,wECwBe,SAASyD,EAASC,EAAUC,GACzC,IAAIC,GACJ,OAAa,EAAGnO,WAChB,IAAIoO,GAAmB,OAAmH,QAAxGD,EAAwBD,aAAyC,EAASA,EAAQE,wBAAwD,IAA1BD,EAAmCA,EAAwB,GAC7M,GAAyB,IAArBC,GAA+C,IAArBA,GAA+C,IAArBA,EACtD,MAAM,IAAIC,WAAW,sCAEvB,GAA0B,iBAAbJ,GAAsE,oBAA7CvH,OAAO4H,UAAUC,SAASxR,KAAKkR,GACnE,OAAO,IAAIO,KAAKC,KAElB,IACIC,EADAC,EA6CN,SAAyBC,GACvB,IAEIC,EAFAF,EAAc,CAAC,EACfxR,EAAQyR,EAAWE,MAAMC,EAASC,mBAKtC,GAAI7R,EAAM5C,OAAS,EACjB,OAAOoU,EAEL,IAAIM,KAAK9R,EAAM,IACjB0R,EAAa1R,EAAM,IAEnBwR,EAAYD,KAAOvR,EAAM,GACzB0R,EAAa1R,EAAM,GACf4R,EAASG,kBAAkBD,KAAKN,EAAYD,QAC9CC,EAAYD,KAAOE,EAAWE,MAAMC,EAASG,mBAAmB,GAChEL,EAAaD,EAAWO,OAAOR,EAAYD,KAAKnU,OAAQqU,EAAWrU,UAGvE,GAAIsU,EAAY,CACd,IAAIO,EAAQL,EAASM,SAASC,KAAKT,GAC/BO,GACFT,EAAYY,KAAOV,EAAWW,QAAQJ,EAAM,GAAI,IAChDT,EAAYU,SAAWD,EAAM,IAE7BT,EAAYY,KAAOV,CAEvB,CACA,OAAOF,CACT,CA3EoBc,CAAgBxB,GAElC,GAAIU,EAAYD,KAAM,CACpB,IAAIgB,EAyER,SAAmBd,EAAYR,GAC7B,IAAIuB,EAAQ,IAAIC,OAAO,wBAA0B,EAAIxB,GAAoB,uBAAyB,EAAIA,GAAoB,QACtHyB,EAAWjB,EAAWkB,MAAMH,GAEhC,IAAKE,EAAU,MAAO,CACpBjR,KAAM6P,IACNsB,eAAgB,IAElB,IAAInR,EAAOiR,EAAS,GAAKlR,SAASkR,EAAS,IAAM,KAC7CG,EAAUH,EAAS,GAAKlR,SAASkR,EAAS,IAAM,KAGpD,MAAO,CACLjR,KAAkB,OAAZoR,EAAmBpR,EAAiB,IAAVoR,EAChCD,eAAgBnB,EAAWhI,OAAOiJ,EAAS,IAAMA,EAAS,IAAItV,QAElE,CAzF0B0V,CAAUtB,EAAYD,KAAMN,GAClDM,EAyFJ,SAAmBE,EAAYhQ,GAE7B,GAAa,OAATA,EAAe,OAAO,IAAI4P,KAAKC,KACnC,IAAIoB,EAAWjB,EAAWkB,MAAMI,GAEhC,IAAKL,EAAU,OAAO,IAAIrB,KAAKC,KAC/B,IAAI0B,IAAeN,EAAS,GACxBO,EAAYC,EAAcR,EAAS,IACnCS,EAAQD,EAAcR,EAAS,IAAM,EACrCU,EAAMF,EAAcR,EAAS,IAC7BW,EAAOH,EAAcR,EAAS,IAC9BY,EAAYJ,EAAcR,EAAS,IAAM,EAC7C,GAAIM,EACF,OAiEJ,SAA0BO,EAAOF,EAAMD,GACrC,OAAOC,GAAQ,GAAKA,GAAQ,IAAMD,GAAO,GAAKA,GAAO,CACvD,CAnESI,CAAiB/R,EAAM4R,EAAMC,GA2CtC,SAA0BG,EAAaJ,EAAMD,GAC3C,IAAI7B,EAAO,IAAIF,KAAK,GACpBE,EAAKmC,eAAeD,EAAa,EAAG,GACpC,IAAIE,EAAqBpC,EAAKqC,aAAe,EACzCC,EAAoB,GAAZR,EAAO,GAASD,EAAM,EAAIO,EAEtC,OADApC,EAAKuC,WAAWvC,EAAKwC,aAAeF,GAC7BtC,CACT,CA/CWyC,CAAiBvS,EAAM4R,EAAMC,GAF3B,IAAIjC,KAAKC,KAIlB,IAAIC,EAAO,IAAIF,KAAK,GACpB,OAqDJ,SAAsB5P,EAAM0R,EAAO5B,GACjC,OAAO4B,GAAS,GAAKA,GAAS,IAAM5B,GAAQ,GAAKA,IAAS0C,EAAad,KAAWe,EAAgBzS,GAAQ,GAAK,IACjH,CAvDS0S,CAAa1S,EAAM0R,EAAOC,IAwDnC,SAA+B3R,EAAMwR,GACnC,OAAOA,GAAa,GAAKA,IAAciB,EAAgBzS,GAAQ,IAAM,IACvE,CA1D4C2S,CAAsB3S,EAAMwR,IAGpE1B,EAAKmC,eAAejS,EAAM0R,EAAOjR,KAAKmS,IAAIpB,EAAWG,IAC9C7B,GAHE,IAAIF,KAAKC,IAKtB,CAlHWgD,CAAU/B,EAAgBK,eAAgBL,EAAgB9Q,KACnE,CACA,IAAK8P,GAAQgD,MAAMhD,EAAKiD,WACtB,OAAO,IAAInD,KAAKC,KAElB,IAEI3F,EAFA8I,EAAYlD,EAAKiD,UACjBpC,EAAO,EAEX,GAAIZ,EAAYY,OACdA,EA6GJ,SAAmBV,GACjB,IAAIgB,EAAWhB,EAAWiB,MAAM+B,GAChC,IAAKhC,EAAU,OAAOpB,IAEtB,IAAIqD,EAAQC,EAAclC,EAAS,IAC/BmC,EAAUD,EAAclC,EAAS,IACjCoC,EAAUF,EAAclC,EAAS,IACrC,IA6CF,SAAsBiC,EAAOE,EAASC,GACpC,GAAc,KAAVH,EACF,OAAmB,IAAZE,GAA6B,IAAZC,EAE1B,OAAOA,GAAW,GAAKA,EAAU,IAAMD,GAAW,GAAKA,EAAU,IAAMF,GAAS,GAAKA,EAAQ,EAC/F,CAlDOI,CAAaJ,EAAOE,EAASC,GAChC,OAAOxD,IAET,OAAOqD,EAAQ,KAAqBE,EAAU,KAAiC,IAAVC,CACvE,CAxHWE,CAAUxD,EAAYY,MACzBmC,MAAMnC,IACR,OAAO,IAAIf,KAAKC,KAGpB,IAAIE,EAAYU,SAKT,CACL,IAAI+C,EAAY,IAAI5D,KAAKoD,EAAYrC,GAMjC8C,EAAS,IAAI7D,KAAK,GAGtB,OAFA6D,EAAOC,YAAYF,EAAUG,iBAAkBH,EAAUI,cAAeJ,EAAUlB,cAClFmB,EAAOI,SAASL,EAAUM,cAAeN,EAAUO,gBAAiBP,EAAUQ,gBAAiBR,EAAUS,sBAClGR,CACT,CAdE,OADAvJ,EAsHJ,SAAuBgK,GACrB,GAAuB,MAAnBA,EAAwB,OAAO,EACnC,IAAIjD,EAAWiD,EAAehD,MAAMiD,GACpC,IAAKlD,EAAU,OAAO,EACtB,IAAImD,EAAuB,MAAhBnD,EAAS,IAAc,EAAI,EAClCiC,EAAQnT,SAASkR,EAAS,IAC1BmC,EAAUnC,EAAS,IAAMlR,SAASkR,EAAS,KAAO,EACtD,IAoCF,SAA0BoD,EAAQjB,GAChC,OAAOA,GAAW,GAAKA,GAAW,EACpC,CAtCOkB,CAAiBpB,EAAOE,GAC3B,OAAOvD,IAET,OAAOuE,GAAQlB,EAAQ,KAAqBE,EAAU,KACxD,CAjIamB,CAAcxE,EAAYU,UAC/BqC,MAAM5I,GACD,IAAI0F,KAAKC,KAcb,IAAID,KAAKoD,EAAYrC,EAAOzG,EACrC,CACA,IAAIiG,EAAW,CACbC,kBAAmB,OACnBE,kBAAmB,QACnBG,SAAU,cAERa,EAAY,gEACZ2B,EAAY,4EACZkB,EAAgB,gCA2EpB,SAAS1C,EAAc1V,GACrB,OAAOA,EAAQgE,SAAShE,GAAS,CACnC,CAaA,SAASoX,EAAcpX,GACrB,OAAOA,GAASyY,WAAWzY,EAAM6U,QAAQ,IAAK,OAAS,CACzD,CAyBA,IAAI4B,EAAe,CAAC,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAClE,SAASC,EAAgBzS,GACvB,OAAOA,EAAO,KAAQ,GAAKA,EAAO,GAAM,GAAKA,EAAO,KAAQ,CAC9D,C,mDC9MA,MAAMyU,GAAuB,IAAAC,eAAc,MAErCC,EAAe,CACnBC,UAAU,EACVC,MAAO,MAET,MAAMC,UAAsB,EAAAC,UAC1B,WAAAC,CAAY/a,GACVgb,MAAMhb,GACNib,KAAKC,mBAAqBD,KAAKC,mBAAmBC,KAAKF,MACvDA,KAAKG,MAAQV,CACf,CACA,+BAAOW,CAAyBT,GAC9B,MAAO,CACLD,UAAU,EACVC,QAEJ,CACA,kBAAAM,GACE,MAAM,MACJN,GACEK,KAAKG,MACT,GAAc,OAAVR,EAAgB,CAElB,IADA,IAAIU,EAAqBC,EAChBC,EAAOrU,UAAUzF,OAAQ+Z,EAAO,IAAIC,MAAMF,GAAOG,EAAO,EAAGA,EAAOH,EAAMG,IAC/EF,EAAKE,GAAQxU,UAAUwU,GAEsC,QAA9DL,GAAuBC,EAAcN,KAAKjb,OAAO4b,eAA6C,IAAxBN,GAA0CA,EAAoBpX,KAAKqX,EAAa,CACrJE,OACAI,OAAQ,mBAEVZ,KAAKa,SAASpB,EAChB,CACF,CACA,iBAAAqB,CAAkBnB,EAAOoB,GACvB,IAAIC,EAAqBC,EACuC,QAA/DD,GAAuBC,EAAejB,KAAKjb,OAAOmc,eAA6C,IAAxBF,GAA0CA,EAAoB/X,KAAKgY,EAActB,EAAOoB,EAClK,CACA,kBAAAI,CAAmBC,EAAWC,GAC5B,MAAM,SACJ3B,GACEM,KAAKG,OACH,UACJmB,GACEtB,KAAKjb,MAQP,IAAIwc,EAAsBC,EADxB9B,GAAgC,OAApB2B,EAAU1B,OA8C9B,WACE,IAAIjV,EAAIwB,UAAUzF,OAAS,QAAsBT,IAAjBkG,UAAU,GAAmBA,UAAU,GAAK,GACxEvB,EAAIuB,UAAUzF,OAAS,QAAsBT,IAAjBkG,UAAU,GAAmBA,UAAU,GAAK,GAC5E,OAAOxB,EAAEjE,SAAWkE,EAAElE,QAAUiE,EAAEoG,MAAK,CAAC3H,EAAMC,KAAWwJ,OAAO6O,GAAGtY,EAAMwB,EAAEvB,KAC7E,CAlDgDsY,CAAgBN,EAAUE,UAAWA,KAEd,QAAhEC,GAAwBC,EAAexB,KAAKjb,OAAO4b,eAA8C,IAAzBY,GAA2CA,EAAqBtY,KAAKuY,EAAc,CAC1JG,KAAML,EACNlW,KAAMgW,EAAUE,UAChBV,OAAQ,SAEVZ,KAAKa,SAASpB,GAElB,CACA,MAAAmC,GACE,MAAM,SACJ5d,EAAQ,eACR6d,EAAc,kBACdC,EAAiB,SACjBC,GACE/B,KAAKjb,OACH,SACJ2a,EAAQ,MACRC,GACEK,KAAKG,MACT,IAAI6B,EAAgBhe,EACpB,GAAI0b,EAAU,CACZ,MAAM3a,EAAQ,CACZ4a,QACAM,mBAAoBD,KAAKC,oBAE3B,GAA8B,mBAAnB4B,EACTG,EAAgBH,EAAe9c,QAC1B,GAAI+c,EACTE,GAAgB,IAAAC,eAAcH,EAAmB/c,OAC5C,IAAiB,OAAbgd,KAAqB,IAAAG,gBAAeH,GAG7C,MAAMpC,EAFNqC,EAAgBD,CAGlB,CACF,CACA,OAAO,IAAAE,eAAc1C,EAAqB3Y,SAAU,CAClDC,MAAO,CACL6Y,WACAC,QACAM,mBAAoBD,KAAKC,qBAE1B+B,EACL,E","sources":["webpack://@finviz/website/./js/main/components/ChipSwitch.tsx","webpack://@finviz/website/./js/main/components/SubMenu/SubMenuTabs.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableContext.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableRow.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTable.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsWidget.tsx","webpack://@finviz/website/./js/main/components/financials-table/utils.ts","webpack://@finviz/website/./js/main/modules/dividends/DividendsHeader.tsx","webpack://@finviz/website/./js/main/modules/dividends/constants.ts","webpack://@finviz/website/./js/main/modules/dividends/DividendsPayoutHistory.tsx","webpack://@finviz/website/./js/main/modules/dividends/types.ts","webpack://@finviz/website/./js/main/modules/dividends/WidgetSettingsSection.tsx","webpack://@finviz/website/./js/main/modules/dividends/utils.ts","webpack://@finviz/website/./js/main/modules/dividends/charts/ChartTooltip.tsx","webpack://@finviz/website/./js/main/modules/dividends/charts/DividendsChart.tsx","webpack://@finviz/website/./js/main/modules/dividends/useTableColumns.tsx","webpack://@finviz/website/./js/main/modules/dividends/index.tsx","webpack://@finviz/website/./js/main/modules/quote/components/QuoteFinancialsTabMenu.tsx","webpack://@finviz/website/./js/main/components/SubMenu/SubMenu.tsx","webpack://@finviz/website/./js/main/modules/quote/components/QuoteStickySubMenu.tsx","webpack://@finviz/website/../node_modules/date-fns/esm/parseISO/index.js","webpack://@finviz/website/../node_modules/react-error-boundary/dist/react-error-boundary.esm.js"],"sourcesContent":["import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonComponentProps, ButtonProps } from './button'\r\nimport { Paragraph } from './typography'\r\n\r\ninterface Props {\r\n children: (React.ReactElement | null)[]\r\n label: string\r\n size?: ButtonProps['size']\r\n rounding?: ButtonProps['rounding']\r\n}\r\n\r\nexport function ChipSwitch({ children, label, size, rounding }: Props) {\r\n return (\r\n
\r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n\r\n {React.Children.map(children, (child: React.ReactElement | null) => {\r\n if (React.isValidElement(child) && child.type === Button) {\r\n return React.cloneElement(child, {\r\n size,\r\n rounding,\r\n theme: child.props.theme ?? 'chipTransparent',\r\n className: classnames(child.props.className, {\r\n // @todo - these style should be applied globally onto all chipTransparent buttons\r\n '!text-gray-600 dark:!text-gray-400': !child.props.active,\r\n '!text-gray-800 dark:!text-white': child.props.active,\r\n }),\r\n })\r\n }\r\n\r\n return child\r\n })}\r\n
\r\n )\r\n}\r\n\r\nexport const ChipSwitchButton = Button\r\n","import { Link } from 'react-router-dom'\r\n\r\nimport { Button, ButtonSizeType } from '../button'\r\n\r\ninterface Props {\r\n items: Array<{ label: string; href: string; isActive: boolean; reloadDocument?: boolean }>\r\n size?: ButtonSizeType\r\n}\r\n\r\nexport function SubMenuTabs({ items, size = 'medium' }: Props) {\r\n return (\r\n
\r\n {items.map(({ label, href, isActive, reloadDocument }) => (\r\n \r\n {label}\r\n \r\n ))}\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { getCookie } from '../../../app/shared/cookie'\r\nimport { setCookieRequest } from '../../services/api'\r\n\r\n/*\r\n * Context.\r\n */\r\nexport type FinancialsTableSettingsType = Record\r\n\r\nexport type FinancialsTableScrollInfo = {\r\n yPosition: number\r\n}\r\n\r\nexport interface FinancialsTableContextProps {\r\n settings: T\r\n setSettings: (settings: T) => void\r\n scrollInfo?: FinancialsTableScrollInfo\r\n}\r\n\r\nexport const FinancialsTableContext = React.createContext>({\r\n settings: {},\r\n setSettings: () => null,\r\n scrollInfo: undefined,\r\n})\r\n\r\n/*\r\n * Hook.\r\n */\r\n\r\nexport function useFinancialsTableContext() {\r\n return React.useContext(FinancialsTableContext) as FinancialsTableContextProps\r\n}\r\n\r\n/*\r\n * Component.\r\n */\r\n\r\ninterface Props {\r\n children: React.ReactNode\r\n defaultSettings: FinancialsTableSettingsType\r\n cookieKey: string\r\n}\r\n\r\nexport const FinancialsTableContextProvider = ({ children, cookieKey, defaultSettings }: Props) => {\r\n const [scrollInfo, setScrollInfo] = React.useState()\r\n const [settings, setSettings] = React.useState(() => {\r\n const cookieValue = decodeURIComponent(getCookie(cookieKey))\r\n if (cookieValue.length === 0) return defaultSettings\r\n\r\n try {\r\n return { ...defaultSettings, ...JSON.parse(cookieValue) } as FinancialsTableSettingsType\r\n } catch {\r\n return defaultSettings\r\n }\r\n })\r\n\r\n const handleSetSettingsChange = (settings: FinancialsTableSettingsType) => {\r\n setScrollInfo({ yPosition: window.scrollY })\r\n setSettings(settings)\r\n setCookieRequest(cookieKey, JSON.stringify(settings))\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\n\r\nimport { TableAlign, TableBody, TableCell, TableRow } from '../Table'\r\nimport { Checkbox } from '../checkbox'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableRowProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n data: RowDataType\r\n columns: ColumnDefinition[]\r\n subColumns?: Record[]>\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n isFirst: boolean\r\n isLast: boolean\r\n}\r\n\r\nexport default function FinancialsTableRow<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n data,\r\n columns,\r\n subColumns,\r\n onVisibilityChange,\r\n isFirst,\r\n isLast,\r\n}: FinancialsTableRowProps) {\r\n const { id, label, labelElement, labelColumnClassName, isSelected, color, subData, isLabelColumnSticky } = data\r\n\r\n return (\r\n {\r\n onVisibilityChange(id, !isSelected)\r\n }}\r\n >\r\n \r\n \r\n {label}}\r\n className=\"cursor-pointer\"\r\n color={color}\r\n size=\"none\"\r\n />\r\n \r\n\r\n {columns.map((column) => (\r\n \r\n {column.renderColumn(data)}\r\n \r\n ))}\r\n \r\n {subData?.map((item, index, array) => (\r\n \r\n \r\n {item.label}\r\n \r\n {subColumns?.[item.id].map((column) => (\r\n \r\n {column.renderColumn(item as SubColumnDefinition)}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { Table } from '../Table'\r\nimport FinancialsTableRow from './FinancialsTableRow'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n subColumns?: Record[]>\r\n isTableFixed?: boolean\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport default function FinancialsTable<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n subColumns,\r\n data,\r\n isTableFixed = true,\r\n onVisibilityChange,\r\n}: FinancialsTableProps) {\r\n return (\r\n \r\n {tableHead}\r\n {data.map((row, index) => (\r\n \r\n ))}\r\n {tableFooter}\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { TableStickyColumnWrapper } from '../Table/TableStickyColumnWrapper'\r\nimport FinancialsTable from './FinancialsTable'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsWidgetProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n children: React.ReactNode\r\n header?: React.ReactNode\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n hasStickyColumnWrapper?: boolean\r\n subColumns?: Record[]>\r\n isTableFixed?: boolean\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport function FinancialsWidget<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n children,\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n subColumns,\r\n header,\r\n data,\r\n isTableFixed,\r\n hasStickyColumnWrapper,\r\n onVisibilityChange,\r\n}: FinancialsWidgetProps) {\r\n const financialsTable = (\r\n \r\n )\r\n return (\r\n
\r\n
\r\n {header}\r\n {children}\r\n
\r\n {hasStickyColumnWrapper ? (\r\n \r\n {financialsTable}\r\n \r\n ) : (\r\n financialsTable\r\n )}\r\n
\r\n )\r\n}\r\n","import { FinancialsRowValue } from './types'\r\n\r\nexport function getYoYData(data: T[]) {\r\n const sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce<{\r\n change: Record\r\n changePct: Record\r\n }>(\r\n (acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let change: number | null = null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n change = value - prev\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\r\n change: {\r\n ...acc.change,\r\n [year]: change,\r\n },\r\n changePct: {\r\n ...acc.changePct,\r\n [year]: changePct,\r\n },\r\n }\r\n },\r\n { change: {}, changePct: {} }\r\n )\r\n}\r\n\r\nexport function getMoMPercentageData(data: T[]) {\r\n const sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce>((acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\r\n ...acc,\r\n [year]: changePct,\r\n }\r\n }, {})\r\n}\r\n\r\nexport function getIsCompact(numOfCols: number, barWidth: number) {\r\n // ~1400 is max container width\r\n const maxContainerWidth = Math.min(window.innerWidth, 1400)\r\n\r\n const barsWindowWidthRatio = (barWidth * numOfCols) / maxContainerWidth\r\n return barsWindowWidthRatio > 0.65\r\n}\r\n\r\nexport function getHeatmapClassNames(value: number | null = null) {\r\n if (value === null || value === 0) return 'bg-neutral text-neutral'\r\n\r\n // Negative\r\n if (value < -80) return 'bg-danger-5 text-danger-5'\r\n if (value < -60) return 'bg-danger-4 text-danger-4'\r\n if (value < -40) return 'bg-danger-3 text-danger-3'\r\n if (value < -20) return 'bg-danger-2 text-danger-2'\r\n if (value < 0) return 'bg-danger-1 text-danger-1'\r\n\r\n // Positive\r\n if (value > 80) return 'bg-success-5 text-success-5'\r\n if (value > 60) return 'bg-success-4 text-success-4'\r\n if (value > 40) return 'bg-success-3 text-success-3'\r\n if (value > 20) return 'bg-success-2 text-success-2'\r\n if (value > 0) return 'bg-success-1 text-success-1'\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { chartEventUtils } from '../../../app/charts-lib'\r\nimport { Heading } from '../../components/typography'\r\nimport { FINANCIALS_SECTION_LABELS, QuoteRoutes } from '../../constants'\r\nimport { DividendData } from './types'\r\n\r\ntype WidgetHeaderProps = Pick<\r\n DividendData,\r\n 'dividendExDate' | 'lastClose' | 'dividendTTM' | 'dividendEstimate' | 'dividendsData'\r\n>\r\n\r\nexport default function DividendsHeader({\r\n dividendExDate,\r\n dividendTTM,\r\n dividendEstimate,\r\n lastClose,\r\n dividendsData,\r\n}: WidgetHeaderProps) {\r\n const lastDividendData = dividendsData[0]\r\n\r\n return (\r\n
\r\n \r\n {FINANCIALS_SECTION_LABELS[QuoteRoutes.Dividends]}\r\n \r\n\r\n
\r\n
\r\n Ex-Date\r\n \r\n {dividendExDate ? dateFns.format(dateFns.parseISO(dividendExDate), 'MMM dd, yyy') : '-'}\r\n \r\n
\r\n
\r\n Dividend amount\r\n {chartEventUtils.getFormattedValue({ value: lastDividendData.Ordinary })}\r\n
\r\n
\r\n Special\r\n \r\n {lastDividendData.Special !== null\r\n ? chartEventUtils.getFormattedValue({ value: lastDividendData.Special })\r\n : '-'}\r\n \r\n
\r\n
\r\n Dividend TTM\r\n \r\n {typeof dividendTTM === 'number' && typeof lastClose === 'number' ? (\r\n <>\r\n {chartEventUtils.getFormattedValue({ value: dividendTTM })} (\r\n {chartEventUtils.getFormattedValue({ value: (dividendTTM / lastClose) * 100 })}%)\r\n \r\n ) : (\r\n '-'\r\n )}\r\n \r\n
\r\n
\r\n Dividend Est.\r\n \r\n {typeof dividendEstimate === 'number' && typeof lastClose === 'number' ? (\r\n <>\r\n {chartEventUtils.getFormattedValue({ value: dividendEstimate })} (\r\n {chartEventUtils.getFormattedValue({ value: (dividendEstimate / lastClose) * 100 })}%)\r\n \r\n ) : (\r\n '-'\r\n )}\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import colors from '../../../../../config/colors'\r\nimport { TableAlign } from '../../components/Table'\r\n\r\n// These values match keys which come from BE so don't change them\r\nexport enum DividendValueProperty {\r\n Amount = 'Amount',\r\n Yield = 'Yield',\r\n Payout = 'Payout',\r\n}\r\n\r\nexport const HISTORY_COLUMNS = [\r\n {\r\n id: 'Exdate' as const,\r\n name: 'Ex-date',\r\n align: TableAlign.Left,\r\n },\r\n {\r\n id: 'Ordinary' as const,\r\n name: 'Amount',\r\n align: TableAlign.Right,\r\n },\r\n {\r\n id: 'Special' as const,\r\n name: 'Special',\r\n align: TableAlign.Right,\r\n },\r\n]\r\n\r\nexport const BAR_WIDTH = 72\r\nexport const CHART_HEIGHT = 250\r\nexport const LABELS_WIDTH = 28\r\nexport const LABELS_MARGIN = 22\r\nexport const BAR_WIDTH_NARROW = 52\r\nexport const BAR_GAP = 16\r\nexport const EXTRA_WIDTH = 44\r\nexport const CHART_MARGINS = { top: 0, right: 0, bottom: 0, left: 0 }\r\nexport const TICK_STYLE = { fontSize: 10, fontWeight: 500, textAnchor: 'end', fill: colors.gray[500] }\r\nexport const TOOLTIP_WRAPPER_STYLE = { outline: 'none', zIndex: 10 }\r\nexport const CURSOR_STYLE = {\r\n border: 0,\r\n stroke: 0,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[50],\r\n opacity: 0.65,\r\n}\r\nexport const TRANSPARENT_CURSOR = { opacity: 0 }\r\n","import classNames from 'classnames'\r\nimport * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { Heading } from '../../components'\r\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../components/Table'\r\nimport { shortFormatNumber } from '../../util'\r\nimport { HISTORY_COLUMNS } from './constants'\r\nimport { Dividend } from './types'\r\n\r\ninterface Props {\r\n dividends: Dividend[]\r\n}\r\n\r\nexport function DividendsPayoutHistory({ dividends }: Props) {\r\n return (\r\n
\r\n \r\n Dividend payout history\r\n \r\n \r\n \r\n {HISTORY_COLUMNS.map((column) => (\r\n \r\n {column.name}\r\n \r\n ))}\r\n {/* Spacer header col */}\r\n \r\n \r\n \r\n {dividends.map((dividend, index, arr) => (\r\n \r\n {HISTORY_COLUMNS.map((column) => (\r\n \r\n {column.id === 'Exdate'\r\n ? dateFns.format(dateFns.parseISO(dividend[column.id]), 'MMM dd, yyy')\r\n : shortFormatNumber(dividend[column.id], { fractions: 2 })}\r\n \r\n ))}\r\n\r\n {/* Spacer col */}\r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubRowDataType,\r\n} from '../../components/financials-table/types'\r\nimport type { DividendValueProperty } from './constants'\r\n\r\nexport interface DividendAnnual {\r\n Amount: number\r\n Estimate: boolean\r\n FiscalPeriod: string\r\n Payout: number\r\n Ticker: string\r\n Yield: number\r\n}\r\n\r\nexport interface DividendsDataType extends Omit {\r\n id: DividendValueProperty\r\n values: Array<{ year: string; value: number | null; isEstimate: boolean }>\r\n}\r\n\r\nexport interface Dividend {\r\n Exdate: string\r\n Ordinary: number\r\n Special: number\r\n Ticker: string\r\n}\r\n\r\nexport interface DividendData {\r\n lastClose: number | null\r\n dividendExDate: string | null\r\n dividendEstimate: number | null\r\n dividendTTM: number | null\r\n dividendsAnnualData: DividendAnnual[]\r\n dividendsData: Dividend[]\r\n}\r\n\r\nexport enum DividendDataEnum {\r\n yoyChange = 'yoyChange',\r\n yoyChangePct = 'yoyChangePct',\r\n}\r\n\r\nexport type DividendSettings = {\r\n [DividendDataEnum.yoyChange]: boolean\r\n [DividendDataEnum.yoyChangePct]: boolean\r\n}\r\n\r\nexport type DividendsColumnsType = {\r\n columns: FinancialsColumnDefinition[]\r\n subColumns: Record[]>\r\n}\r\n","import { ChipSwitch, ChipSwitchButton } from '../../components/ChipSwitch'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { DividendDataEnum, DividendSettings } from './types'\r\n\r\nexport default function WidgetSettingsSection() {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof DividendSettings, value: DividendSettings[keyof DividendSettings]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n return (\r\n \r\n {\r\n toggleSetting(DividendDataEnum.yoyChange, !settings[DividendDataEnum.yoyChange])\r\n }}\r\n >\r\n YoY Growth\r\n \r\n {\r\n toggleSetting(DividendDataEnum.yoyChangePct, !settings[DividendDataEnum.yoyChangePct])\r\n }}\r\n >\r\n YoY Growth %\r\n \r\n \r\n )\r\n}\r\n","import colors from '../../../../../config/colors'\r\nimport { ColorVariant } from '../../components'\r\nimport { shortFormatNumber } from '../../util'\r\n\r\nexport function getColor(color: ColorVariant) {\r\n switch (color) {\r\n case ColorVariant.teal:\r\n return colors.teal[500]\r\n case ColorVariant.purple:\r\n return colors.purple[400]\r\n case ColorVariant.green:\r\n return colors.green[400]\r\n case ColorVariant.gray:\r\n return FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[200]\r\n default:\r\n return 'red'\r\n }\r\n}\r\nexport function tickFormatter(value: any) {\r\n return shortFormatNumber(value, { fractions: Math.abs(value) >= 1_000 ? 0 : 2 })\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { NameType, Payload, ValueType } from 'recharts/types/component/DefaultTooltipContent'\r\n\r\nimport { shortFormatNumber } from '../../../util'\r\n\r\ntype ChartTooltipProps = {\r\n isActive?: boolean\r\n activeKey?: string\r\n payload: Payload[] | undefined\r\n}\r\nexport default function ChartTooltip({ isActive, activeKey, payload }: ChartTooltipProps) {\r\n if (!isActive || !payload || payload.length === 0 || !payload.some(({ value }) => value)) return null\r\n\r\n return (\r\n
\r\n {payload.map((data) =>\r\n !data.value ? null : (\r\n \r\n \r\n \r\n {data.name}\r\n \r\n {shortFormatNumber(+data.value)}\r\n
\r\n )\r\n )}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { Bar, Cell, ComposedChart, Line, Rectangle, RectangleProps, Tooltip, YAxis } from 'recharts'\r\n\r\nimport { ColorVariant } from '../../../components'\r\nimport {\r\n BAR_GAP,\r\n BAR_WIDTH,\r\n BAR_WIDTH_NARROW,\r\n CHART_HEIGHT,\r\n CHART_MARGINS,\r\n CURSOR_STYLE,\r\n DividendValueProperty,\r\n EXTRA_WIDTH,\r\n LABELS_MARGIN,\r\n LABELS_WIDTH,\r\n TICK_STYLE,\r\n TOOLTIP_WRAPPER_STYLE,\r\n TRANSPARENT_CURSOR,\r\n} from '../constants'\r\nimport { DividendsDataType } from '../types'\r\nimport { getColor, tickFormatter } from '../utils'\r\nimport ChartTooltip from './ChartTooltip'\r\n\r\ninterface CustomCursorProps extends Partial> {\r\n barWithGapWidth: number\r\n isActive: boolean\r\n points?: [{ x: number }]\r\n}\r\nfunction CustomCursor({ barWithGapWidth, points, ...props }: CustomCursorProps) {\r\n const x = points![0].x - barWithGapWidth / 2\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport type Props = {\r\n annualData: DividendsDataType[]\r\n isCompact: boolean\r\n}\r\n\r\ntype ChartYearData = { year: string; isEstimate: boolean } & Record\r\n\r\nconst CHART_GRID_COMMON_PROPS = 'absolute right-8 border-t border-dashed border-secondary'\r\n\r\nexport function DividendsChart({ annualData, isCompact }: Props) {\r\n const [isActive, setIsActive] = React.useState(false)\r\n const [activeBarKey, setActiveBarKey] = React.useState('')\r\n const [reverseTooltipDirection, setReverseTooltipDirection] = React.useState(true)\r\n const columnsCount = annualData[0].values.length\r\n const barWidth = isCompact ? BAR_WIDTH_NARROW : BAR_WIDTH\r\n const { estimateColumnsCount, hasBarChart } = React.useMemo(\r\n () => ({\r\n estimateColumnsCount: annualData[0].values.filter(({ isEstimate }) => isEstimate).length,\r\n hasBarChart: annualData.some(({ id, isSelected }) => id === DividendValueProperty.Amount && isSelected),\r\n }),\r\n [annualData]\r\n )\r\n const chartData = React.useMemo(() => {\r\n const data: Record = {}\r\n annualData.forEach(({ id, values }) => {\r\n values.forEach(({ value, year, isEstimate }) => {\r\n data[year] = { ...data[year], year, isEstimate, [id]: value }\r\n })\r\n })\r\n return Object.values(data)\r\n }, [annualData])\r\n\r\n const visibleLeftAxes = React.useMemo(() => annualData.slice(1).filter((group) => group.isSelected), [annualData])\r\n\r\n const chartWidth =\r\n columnsCount * barWidth + (columnsCount - 1) * BAR_GAP + EXTRA_WIDTH + LABELS_WIDTH * 2 * visibleLeftAxes.length\r\n const estimateAreaWidth = estimateColumnsCount * barWidth + estimateColumnsCount * BAR_GAP\r\n const barLessChartYMargin = barWidth / 2 + BAR_GAP / 2\r\n\r\n const chartGridCommonLeftProps = {\r\n 'left-0': visibleLeftAxes.length === 0,\r\n 'left-14': visibleLeftAxes.length === 1,\r\n 'left-28': visibleLeftAxes.length === 2,\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n {\r\n setIsActive(true)\r\n }}\r\n onMouseLeave={() => {\r\n setIsActive(false)\r\n }}\r\n >\r\n {\r\n setReverseTooltipDirection(mouseEvent.clientX > window.innerWidth / 2)\r\n }}\r\n >\r\n {annualData.map((row, index) => {\r\n const axisId = index > 0 ? `left${index}` : 'right'\r\n const orientation = index > 0 ? 'left' : 'right'\r\n const tickMargin = index > 0 ? (hasBarChart ? 0 : barLessChartYMargin) : LABELS_MARGIN\r\n const axisWidth = index > 0 ? LABELS_WIDTH * 2 : LABELS_WIDTH\r\n\r\n // Hide unselected axes but always keep the right axis\r\n if (!row.isSelected && index > 0) return null\r\n\r\n return (\r\n \r\n )\r\n })}\r\n }\r\n content={({ payload }) => }\r\n />\r\n {annualData.map(({ id, label, isSelected, color }, rowIndex) => {\r\n if (!isSelected) return null\r\n\r\n const axisId = rowIndex > 0 ? `left${rowIndex}` : 'right'\r\n\r\n if (id === DividendValueProperty.Amount) {\r\n return (\r\n {\r\n setActiveBarKey(label)\r\n }}\r\n onMouseLeave={() => {\r\n setActiveBarKey('')\r\n }}\r\n >\r\n {chartData.map((row, index) => (\r\n \r\n ))}\r\n \r\n )\r\n }\r\n\r\n return (\r\n {\r\n setActiveBarKey(label)\r\n },\r\n onMouseLeave: () => {\r\n setActiveBarKey('')\r\n },\r\n }}\r\n stroke={getColor(color)}\r\n fill={getColor(color)}\r\n isAnimationActive={false}\r\n connectNulls={false}\r\n />\r\n )\r\n })}\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { RedGreenText } from '../../components/RedGreenText'\r\nimport { TableAlign } from '../../components/Table'\r\nimport { shortFormatNumber } from '../../util'\r\nimport { DividendDataEnum, DividendsColumnsType } from './types'\r\n\r\nconst getColumns = (yearKeys: string[], isCompact: boolean) => {\r\n const commonClassName = classNames('px-4 last:pr-11', {\r\n 'w-22 last:w-29.5': !isCompact,\r\n 'w-17 last:w-24.5': isCompact,\r\n })\r\n\r\n const columns: DividendsColumnsType['columns'] = yearKeys.map((year) => ({\r\n id: year,\r\n name: year,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n const annualDividend = data.values.find((annualDividend) => annualDividend.year === year)\r\n const annualDividendValue = annualDividend?.value ?? null\r\n if (typeof annualDividendValue !== 'number') return \r\n const value = shortFormatNumber(annualDividendValue, { fractions: 2 })\r\n return {value}\r\n },\r\n }))\r\n\r\n const subColumns: DividendsColumnsType['subColumns'] = {\r\n [DividendDataEnum.yoyChange]: yearKeys.map((year) => ({\r\n id: year,\r\n name: year,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n const annualDividend = data.values.find((annualDividend) => annualDividend.year === year)\r\n const annualDividendValue = annualDividend?.value ?? null\r\n return (\r\n \r\n {shortFormatNumber(annualDividendValue, { defaultValue: '—' })}\r\n \r\n )\r\n },\r\n })),\r\n [DividendDataEnum.yoyChangePct]: yearKeys.map((year) => ({\r\n id: year,\r\n name: year,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n const annualDividend = data.values.find((annualDividend) => annualDividend.year === year)\r\n const annualDividendValue = annualDividend?.value ?? null\r\n return (\r\n \r\n {annualDividendValue?.toFixed(2) ?? '—'}\r\n \r\n )\r\n },\r\n })),\r\n }\r\n return { columns, subColumns }\r\n}\r\n\r\nexport function useTableColumns(yearKeys: string[], isCompact: boolean) {\r\n return React.useMemo(() => getColumns(yearKeys, isCompact), [yearKeys, isCompact])\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport React from 'react'\r\n\r\nimport { ColorVariant } from '../../components'\r\nimport { TableAlign, TableHead, TableHeader } from '../../components/Table'\r\nimport {\r\n FinancialsTableContextProvider,\r\n FinancialsWidget,\r\n getIsCompact,\r\n getYoYData,\r\n useFinancialsTableContext,\r\n} from '../../components/financials-table'\r\nimport { useCachedLoaderData } from '../../hooks/useCachedLoaderData'\r\nimport { QuoteFinancialsTabMenu } from '../quote/components/QuoteFinancialsTabMenu'\r\nimport { QuoteStickySubMenu } from '../quote/components/QuoteStickySubMenu'\r\nimport DividendsHeader from './DividendsHeader'\r\nimport { DividendsPayoutHistory } from './DividendsPayoutHistory'\r\nimport WidgetSettingsSection from './WidgetSettingsSection'\r\nimport { DividendsChart } from './charts/DividendsChart'\r\nimport { BAR_WIDTH, DividendValueProperty } from './constants'\r\nimport { DividendData, DividendDataEnum, DividendSettings, DividendsDataType } from './types'\r\nimport { useTableColumns } from './useTableColumns'\r\n\r\nconst dividendsAnnualDataTemplate: Array> = [\r\n { label: 'Dividends per share (FY)', id: DividendValueProperty.Amount, color: ColorVariant.teal, isSelected: true },\r\n { label: 'Dividend yield (FY) %', id: DividendValueProperty.Yield, color: ColorVariant.green, isSelected: true },\r\n { label: 'Payout ratio (FY) %', id: DividendValueProperty.Payout, color: ColorVariant.purple, isSelected: false },\r\n]\r\n\r\nfunction mapData(data: DividendData) {\r\n const dividendsArray = dividendsAnnualDataTemplate.map((dividendCategory) => ({\r\n ...dividendCategory,\r\n values: data.dividendsAnnualData.map((annualData) => ({\r\n year: annualData.FiscalPeriod.substring(0, 4),\r\n value: annualData[dividendCategory.id],\r\n isEstimate: annualData.Estimate,\r\n })),\r\n }))\r\n\r\n return dividendsArray.map((dividendCategory) => {\r\n const yoyData = getYoYData(dividendCategory.values)\r\n\r\n return {\r\n ...dividendCategory,\r\n subData: [\r\n {\r\n id: DividendDataEnum.yoyChange,\r\n label: 'YoY Growth',\r\n values: dividendCategory.values.map((anualDividend) => ({\r\n ...anualDividend,\r\n value: yoyData.change[anualDividend.year] ?? null,\r\n })),\r\n },\r\n {\r\n id: DividendDataEnum.yoyChangePct,\r\n label: 'YoY Growth %',\r\n values: dividendCategory.values.map((anualDividend) => ({\r\n ...anualDividend,\r\n value: yoyData.changePct[anualDividend.year] ?? null,\r\n })),\r\n },\r\n ].filter(Boolean),\r\n }\r\n })\r\n}\r\n\r\nfunction DividendsComponent() {\r\n const { data } = useCachedLoaderData()\r\n const { settings } = useFinancialsTableContext()\r\n const [annualData, setAnnualData] = React.useState(() => (data ? mapData(data) : []))\r\n const yearKeys = React.useMemo(\r\n () =>\r\n annualData\r\n .flatMap(({ values }) => values.map(({ year }) => year))\r\n .filter((year, index, arr) => arr.indexOf(year) === index),\r\n [annualData]\r\n )\r\n const [isCompact, setIsCompact] = React.useState(getIsCompact(yearKeys.length, BAR_WIDTH))\r\n const { columns, subColumns } = useTableColumns(yearKeys, isCompact)\r\n\r\n React.useEffect(() => {\r\n // Remove min-height from react root element which is set on BE because of CLS\r\n document.getElementById('root')?.style.removeProperty('min-height')\r\n\r\n const onResize = throttle(() => {\r\n setIsCompact(getIsCompact(yearKeys.length, BAR_WIDTH))\r\n }, 100)\r\n\r\n onResize()\r\n\r\n window.addEventListener('resize', onResize)\r\n\r\n return () => {\r\n window.removeEventListener('resize', onResize)\r\n }\r\n }, [yearKeys])\r\n\r\n const onVisibilityChange = (id: string, isSelected: boolean) => {\r\n setAnnualData(\r\n annualData.map((item) =>\r\n item.id === id\r\n ? {\r\n ...item,\r\n isSelected,\r\n }\r\n : item\r\n )\r\n )\r\n }\r\n\r\n const hasData = !!data && (data?.dividendsAnnualData?.length ?? 0) > 0 && (data?.dividendsData?.length ?? 0) > 0\r\n\r\n return (\r\n <>\r\n }\r\n rightContent={hasData ? : undefined}\r\n />\r\n\r\n {hasData ? (\r\n \r\n \r\n\r\n ({\r\n ...revenue,\r\n subData: revenue.subData.filter(({ id }) => settings[id]),\r\n }))}\r\n tableHead={\r\n \r\n \r\n\r\n {columns.map((column) => (\r\n \r\n {column.name}\r\n \r\n ))}\r\n \r\n }\r\n columns={columns}\r\n subColumns={subColumns}\r\n onVisibilityChange={onVisibilityChange}\r\n >\r\n \r\n \r\n\r\n \r\n
\r\n ) : (\r\n
\r\n Dividends are not available for this stock.\r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nconst COOKIE_KEY = 'dividendsSettings'\r\nconst DEFAULT_SETTINGS: DividendSettings = {\r\n [DividendDataEnum.yoyChange]: false,\r\n [DividendDataEnum.yoyChangePct]: false,\r\n}\r\n\r\nexport default function Dividends() {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { decodeQueryString, encodeQueryString } from '../../../../app/queryString'\r\nimport { SubMenuTabs } from '../../../components/SubMenu/SubMenuTabs'\r\nimport { FINANCIALS_SECTION_LABELS, QuoteRoutes } from '../../../constants'\r\n\r\nconst FINANCIAL_MENU_TABS: Array = [\r\n QuoteRoutes.Dividends,\r\n QuoteRoutes.Earnings,\r\n QuoteRoutes.Revenue,\r\n QuoteRoutes.Forecast,\r\n]\r\n\r\nfunction getFinancialMenuTabs() {\r\n const searchParams = decodeQueryString()\r\n\r\n return FINANCIAL_MENU_TABS.map((value) => ({\r\n label: FINANCIALS_SECTION_LABELS[value],\r\n href: `/quote.ashx?${encodeQueryString({ ...searchParams, ty: value })}`,\r\n isActive: searchParams.ty === value,\r\n reloadDocument: true,\r\n }))\r\n}\r\n\r\nexport function QuoteFinancialsTabMenu() {\r\n return \r\n}\r\n","import classNames from 'classnames'\r\nimport { isRedesignEnabled } from 'finviz-charts/app/utils'\r\nimport * as React from 'react'\r\n\r\ninterface Props extends React.HTMLProps {\r\n leftContent?: React.ReactNode\r\n rightContent?: React.ReactNode\r\n}\r\n\r\nexport function SubMenu({ leftContent, rightContent, ...props }: Props) {\r\n return (\r\n
\r\n
\r\n \r\n {leftContent}\r\n
\r\n
{rightContent}
\r\n
\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { SubMenu } from '../../../components/SubMenu/SubMenu'\r\n\r\ninterface Props {\r\n leftContent?: React.ReactNode\r\n rightContent?: React.ReactNode\r\n}\r\n\r\nexport function QuoteStickySubMenu({ leftContent, rightContent }: Props) {\r\n return \r\n}\r\n","import { millisecondsInHour, millisecondsInMinute } from \"../constants/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, options) {\n var _options$additionalDi;\n requiredArgs(1, arguments);\n var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2');\n }\n if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n return new Date(NaN);\n }\n var dateStrings = splitDateString(argument);\n var date;\n if (dateStrings.date) {\n var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n if (!date || isNaN(date.getTime())) {\n return new Date(NaN);\n }\n var timestamp = date.getTime();\n var time = 0;\n var offset;\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) {\n return new Date(NaN);\n }\n }\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n var dirtyDate = new Date(timestamp + time);\n // js parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n var result = new Date(0);\n result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n return result;\n }\n return new Date(timestamp + time + offset);\n}\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\nfunction splitDateString(dateString) {\n var dateStrings = {};\n var array = dateString.split(patterns.dateTimeDelimiter);\n var timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(dateStrings.date.length, dateString.length);\n }\n }\n if (timeString) {\n var token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], '');\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n var captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return {\n year: NaN,\n restDateString: ''\n };\n var year = captures[1] ? parseInt(captures[1]) : null;\n var century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n };\n}\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n var captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n var isWeekDate = !!captures[4];\n var dayOfYear = parseDateUnit(captures[1]);\n var month = parseDateUnit(captures[2]) - 1;\n var day = parseDateUnit(captures[3]);\n var week = parseDateUnit(captures[4]);\n var dayOfWeek = parseDateUnit(captures[5]) - 1;\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n var date = new Date(0);\n if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1]);\n var minutes = parseTimeUnit(captures[2]);\n var seconds = parseTimeUnit(captures[3]);\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\nfunction parseTimeUnit(value) {\n return value && parseFloat(value.replace(',', '.')) || 0;\n}\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0;\n var captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n var sign = captures[1] === '+' ? -1 : 1;\n var hours = parseInt(captures[2]);\n var minutes = captures[3] && parseInt(captures[3]) || 0;\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n var fourthOfJanuaryDay = date.getUTCDay() || 7;\n var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\nfunction validateDate(year, month, date) {\n return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}","'use client';\nimport { createContext, Component, createElement, isValidElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback === null || isValidElement(fallback)) {\n childToRender = fallback;\n } else {\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n"],"names":["ChipSwitch","_ref","children","label","size","rounding","_jsxs","className","_jsx","Paragraph","React","map","child","_child$props$theme","type","Button","theme","props","classnames","active","ChipSwitchButton","SubMenuTabs","items","_ref2","href","isActive","reloadDocument","as","Link","to","FinancialsTableContext","settings","setSettings","scrollInfo","undefined","useFinancialsTableContext","FinancialsTableContextProvider","cookieKey","defaultSettings","setScrollInfo","cookieValue","decodeURIComponent","getCookie","length","JSON","parse","Provider","value","yPosition","window","scrollY","setCookieRequest","stringify","FinancialsTableRow","data","columns","subColumns","onVisibilityChange","isFirst","isLast","id","labelElement","labelColumnClassName","isSelected","color","subData","isLabelColumnSticky","TableBody","onMouseDown","TableRow","classNames","TableCell","hasLeading","align","TableAlign","Left","isSticky","Checkbox","readOnly","checked","column","_column$getColumnClas","getColumnClassName","call","renderColumn","item","index","array","FinancialsTable","tableHead","tableFooter","isTableFixed","Table","row","_row$id","FinancialsWidget","_data$0$values$length","_data$","header","hasStickyColumnWrapper","financialsTable","TableStickyColumnWrapper","hasBorder","shouldScrollToEnd","values","getYoYData","sortedData","sort","a","b","Number","parseInt","year","reduce","acc","i","_sortedData$value","_sortedData","prev","change","changePct","Math","abs","getMoMPercentageData","_sortedData$value2","_sortedData2","getIsCompact","numOfCols","barWidth","min","innerWidth","getHeatmapClassNames","arguments","DividendsHeader","dividendExDate","dividendTTM","dividendEstimate","lastClose","dividendsData","lastDividendData","Heading","level","FINANCIALS_SECTION_LABELS","QuoteRoutes","Dividends","dateFns","chartEventUtils","Ordinary","Special","_Fragment","DividendValueProperty","HISTORY_COLUMNS","name","Right","BAR_WIDTH","CHART_HEIGHT","LABELS_WIDTH","LABELS_MARGIN","BAR_WIDTH_NARROW","BAR_GAP","EXTRA_WIDTH","CHART_MARGINS","top","right","bottom","left","TICK_STYLE","fontSize","fontWeight","textAnchor","fill","colors","TOOLTIP_WRAPPER_STYLE","outline","zIndex","CURSOR_STYLE","border","stroke","FinvizSettings","hasDarkTheme","opacity","TRANSPARENT_CURSOR","DividendsPayoutHistory","dividends","TableHead","TableHeader","dividend","arr","shortFormatNumber","fractions","Exdate","DividendDataEnum","WidgetSettingsSection","toggleSetting","key","yoyChange","onClick","yoyChangePct","getColor","ColorVariant","teal","purple","green","gray","tickFormatter","ChartTooltip","activeKey","payload","some","style","backgroundColor","CustomCursor","barWithGapWidth","points","x","Rectangle","width","CHART_GRID_COMMON_PROPS","DividendsChart","annualData","isCompact","setIsActive","activeBarKey","setActiveBarKey","reverseTooltipDirection","setReverseTooltipDirection","columnsCount","estimateColumnsCount","hasBarChart","filter","_ref3","isEstimate","_ref4","Amount","chartData","forEach","_ref5","_ref6","Object","visibleLeftAxes","slice","group","chartWidth","estimateAreaWidth","barLessChartYMargin","chartGridCommonLeftProps","onMouseEnter","onMouseLeave","ComposedChart","height","margin","stackOffset","onMouseMove","_","mouseEvent","clientX","axisId","orientation","tickMargin","axisWidth","YAxis","yAxisId","tick","tickLine","axisLine","interval","position","angle","dx","Tooltip","wrapperStyle","y","allowEscapeViewBox","reverseDirection","offset","isAnimationActive","cursor","content","_ref7","_ref8","rowIndex","Bar","dataKey","Cell","radius","Line","dot","strokeWidth","activeDot","connectNulls","getColumns","yearKeys","commonClassName","_annualDividend$value","annualDividend","find","annualDividendValue","_annualDividend$value2","RedGreenText","rightContent","defaultValue","_annualDividend$value3","_annualDividendValue$","toFixed","dividendsAnnualDataTemplate","Yield","Payout","DividendsComponent","_data$dividendsAnnual","_data$dividendsAnnual2","_data$dividendsData$l","_data$dividendsData","useCachedLoaderData","setAnnualData","dividendCategory","dividendsAnnualData","FiscalPeriod","substring","Estimate","yoyData","anualDividend","_yoyData$change$anual","_yoyData$changePct$an","Boolean","mapData","flatMap","indexOf","setIsCompact","useTableColumns","_document$getElementB","document","getElementById","removeProperty","onResize","throttle","addEventListener","removeEventListener","hasData","QuoteStickySubMenu","leftContent","QuoteFinancialsTabMenu","minWidth","revenue","COOKIE_KEY","DEFAULT_SETTINGS","FINANCIAL_MENU_TABS","Earnings","Revenue","Forecast","getFinancialMenuTabs","searchParams","decodeQueryString","encodeQueryString","ty","SubMenu","isRedesignEnabled","parseISO","argument","options","_options$additionalDi","additionalDigits","RangeError","prototype","toString","Date","NaN","date","dateStrings","dateString","timeString","split","patterns","dateTimeDelimiter","test","timeZoneDelimiter","substr","token","timezone","exec","time","replace","splitDateString","parseYearResult","regex","RegExp","captures","match","restDateString","century","parseYear","dateRegex","isWeekDate","dayOfYear","parseDateUnit","month","day","week","dayOfWeek","_year","validateWeekDate","isoWeekYear","setUTCFullYear","fourthOfJanuaryDay","getUTCDay","diff","setUTCDate","getUTCDate","dayOfISOWeekYear","daysInMonths","isLeapYearIndex","validateDate","validateDayOfYearDate","max","parseDate","isNaN","getTime","timestamp","timeRegex","hours","parseTimeUnit","minutes","seconds","validateTime","parseTime","dirtyDate","result","setFullYear","getUTCFullYear","getUTCMonth","setHours","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","timezoneString","timezoneRegex","sign","_hours","validateTimezone","parseTimezone","parseFloat","ErrorBoundaryContext","createContext","initialState","didCatch","error","ErrorBoundary","Component","constructor","super","this","resetErrorBoundary","bind","state","getDerivedStateFromError","_this$props$onReset","_this$props","_len","args","Array","_key","onReset","reason","setState","componentDidCatch","info","_this$props$onError","_this$props2","onError","componentDidUpdate","prevProps","prevState","resetKeys","_this$props$onReset2","_this$props3","is","hasArrayChanged","next","render","fallbackRender","FallbackComponent","fallback","childToRender","createElement","isValidElement"],"sourceRoot":""}