{"version":3,"file":"crypto.304c4173.js","mappings":"osCAOIA,EAAe,WACjB,IAAIC,EAAYC,EAAAA,EAAUC,gBACtB,EAAEC,IAAMC,EAAAA,EAAAA,KACZ,MAAO,yBAAwBC,EAAAA,EAAAA,GAAkB,CAAEL,YAAWG,OAChE,EAEA,IAAIG,EAA8C,KAElD,MAiDA,EAjDgB,CACdC,SAAAA,CAAUC,GACRC,EAAAA,EAAcC,iBAAiB,CAC7BC,KAAMC,EAAAA,EAAYC,WAClBL,SAEJ,EAEA,YAAMM,CAAOC,GAAW,IAAAC,EAAAC,EACtB,GAAIF,EAKF,YAJAN,EAAAA,EAAcC,iBAAiB,CAC7BC,KAAMC,EAAAA,EAAYM,YAClBV,MAAOO,IAKC,QAAZC,EAAAV,SAAY,IAAAU,GAAQ,QAARC,EAAZD,EAAcG,cAAM,IAAAF,GAApBA,EAAAG,KAAAJ,GACAV,GAAee,EAAAA,EAAAA,IAAWtB,KAC1B,MAAMS,QAAcF,EAChBE,GACFC,EAAAA,EAAca,mBAAmB,CAC/BX,KAAMC,EAAAA,EAAYM,YAClBV,SAGN,EAEA,qBAAMe,CAAgBvB,GAAmB,IAAAwB,EAAAC,EACvChB,EAAAA,EAAcC,iBAAiB,CAC7BC,KAAMC,EAAAA,EAAYc,yBAClBC,OAAQ3B,IAGE,QAAZwB,EAAAlB,SAAY,IAAAkB,GAAQ,QAARC,EAAZD,EAAcL,cAAM,IAAAM,GAApBA,EAAAL,KAAAI,GACAlB,GAAee,EAAAA,EAAAA,IAAWtB,KAC1B,MAAMgB,QAAaT,EACfS,IACFN,EAAAA,EAAca,mBAAmB,CAC/BX,KAAMC,EAAAA,EAAYM,YAClBV,MAAOO,IAETN,EAAAA,EAAca,mBAAmB,CAC/BX,KAAMC,EAAAA,EAAYgB,6BAGxB,G,0GCnDF,SAASC,EAAgBrB,EAAmCsB,GAC1D,MAAMC,GAAsBC,EAAAA,EAAAA,IAAkCF,GACxDG,EAAcC,OAAOC,OAAO3B,GAClC,OAAOuB,EACJK,KAAKC,GAAWJ,EAAYK,MAAMC,GAASA,EAAKF,SAAWA,MAC3DG,OAAOC,QACZ,CAYe,SAASC,EAASC,GAQd,IARe,WAChCC,EAAU,gBACVC,EAAe,YACfC,EAAW,eACXhB,EAAc,KACdnB,EAAI,kBACJoC,EAAiB,kBACjBC,GACeL,EACf,MAAMM,EAA+B,MAATtC,GACrBH,EAAO0C,GAAYC,EAAAA,SAAetB,EAAgBuB,EAAAA,EAAWC,WAAYvB,IAEhFqB,EAAAA,WAAgB,KACd,MAAMG,EAAgBA,IAAMJ,EAASrB,EAAgBuB,EAAAA,EAAWC,WAAYvB,IAI5E,OAFAsB,EAAAA,EAAWG,kBAAkBD,GAEtB,IAAMF,EAAAA,EAAWI,qBAAqBF,EAAc,GAC1D,CAACxB,EAAgBc,IAEpB,MAAMa,EAAiBC,eAAeC,eAClC,wBAAuBtD,EAAAA,EAAAA,GAAkB,CACvCuD,EAAGhB,EACHiB,EAAGhB,EACHiB,GAAI,EACJ3D,EAAG2B,MAEL,gBAAezB,EAAAA,EAAAA,GAAkB,CAC/B0D,WAAY,SACZC,WAAY,SACZC,aAAc,+BAYpB,OACEC,EAAAA,EAAAA,MAAA,OAAKC,UAAU,aAAYC,SAAA,CACxBrB,IACCmB,EAAAA,EAAAA,MAAA,MAAIC,UAAU,kBAAiBC,SAAA,EAC7BC,EAAAA,EAAAA,KAAA,MAAIF,UAAWG,IAAW,YAAa,CAAE,aAAcrB,IAAuBmB,UAC5EC,EAAAA,EAAAA,KAAA,KACEE,KAAM,wBAAuBlE,EAAAA,EAAAA,GAAkB,CAC7CuD,EAAGhB,EACHiB,EAAGhB,EACHiB,QAAIU,EACJC,EAAG3B,MAEL,cAAY,gBAAesB,SAC5B,cAIHF,EAAAA,EAAAA,MAAA,MACEC,UAAWG,IAAW,mDAAoD,CACxE,YAAarB,IACZmB,SAAA,EAEHC,EAAAA,EAAAA,KAAA,KAAGF,UAAU,OAAOI,KAAMd,EAAgB,cAAY,qBAAoBW,SAAC,gBAG1EnB,IAAuBoB,EAAAA,EAAAA,KAACK,EAAAA,EAA0B,CAACC,UAAWjB,eAAeC,wBAIpFU,EAAAA,EAAAA,KAAA,OAAKF,UAAWG,IAAW,oBAAqB,CAAE,eAAgBtB,IAAqBoB,SACpF5D,EAAM4B,KAAKG,IACV2B,SAAAA,EAAAA,MAAA,KAEEC,UAAWG,IAAW,2BAA4B,CAAE,YAAa/B,EAAKF,SAAWO,IACjF2B,MA3CWlC,EA2COE,EAAKF,OA1C/B,wBAAuBhC,EAAAA,EAAAA,GAAkB,CACvCuD,EAAGvB,EACHwB,EAAGhB,EACHiB,GAAId,GAAqBC,OAAsBuB,EAAY7D,EAC3D8D,EAAG3B,EACH3C,EAAG2B,OAqCkCsC,SAAA,EAE/BC,EAAAA,EAAAA,KAAA,QAAAD,SAAO7B,EAAKqC,SACZP,EAAAA,EAAAA,KAACQ,EAAAA,EAAS,CAACC,MAAO,GAAIC,OAAQ,GAAIhE,KAAMwB,EAAKyC,cALxCzC,EAAKF,QAzCCA,KAgDd,OAEHgC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,eAGrB,C,oCChHO,IAAKc,EAAQ,SAARA,GAAQ,OAARA,EAAQ,gBAARA,EAAQ,0BAARA,EAAQ,gBAARA,CAAQ,MCsBL,SAASC,EAAIvC,GAQT,IAR8B,aAC/CwC,EAAY,WACZC,EAAU,WACVC,EAAU,WACVC,EAAU,QACVC,EAAO,kBACPC,EAAiB,kBACjBC,GACe9C,EACf,MAAM+C,GAAStF,EAAAA,EAAAA,KACTuF,GAAezD,OAAO0D,KAAKF,GAAQG,OAAS,EAAI,IAAM,KAAMxF,EAAAA,EAAAA,GAAkB,IAAKqF,EAAQ9B,OAAGY,IACpG,OACEN,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gDAA+CC,SAAA,EAC5DF,EAAAA,EAAAA,MAAA,OAAKC,UAAU,4BAA2BC,SAAA,EACxCC,EAAAA,EAAAA,KAACyB,EAAAA,GAAM,CACLC,GAAG,IACHxB,KAAM,eAAeoB,IACrBK,OAAQZ,IAAeH,EAASgB,OAChCC,MAAM,kBAAiB9B,SACxB,YAGDC,EAAAA,EAAAA,KAACyB,EAAAA,GAAM,CACLC,GAAG,IACHxB,KAAM,2BAA2BoB,IACjCO,MAAM,kBACNF,OAAQZ,IAAeH,EAASkB,YAAY/B,SAC7C,iBAGDC,EAAAA,EAAAA,KAACyB,EAAAA,GAAM,CACLC,GAAG,IACHxB,KAAM,sBAAsBoB,IAC5BO,MAAM,kBACNF,OAAQZ,IAAeH,EAASmB,OAAOhC,SACxC,cAIFkB,IACCjB,EAAAA,EAAAA,KAAA,OAAKF,UAAU,qDAAoDC,SAChEkB,EAAWA,WAAWlD,KAAKiE,IAC1BhC,EAAAA,EAAAA,KAACyB,EAAAA,GAAM,CAELC,GAAG,IACHxB,KAAMe,EAAWgB,KAAKD,GACtBH,MAAM,kBACNK,QAAQ,QACRP,OAAQK,IAAaf,EAAWU,OAChCQ,MAAOH,EAASjC,SAEfiC,GARIA,QAabhC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,qDAAoDC,SAChEgB,IAAeH,EAASmB,QACvB/B,EAAAA,EAAAA,KAACoC,EAAAA,EAA8B,CAC7BC,SAAUvB,EACVqB,MAAM,SACNG,MAAOpB,EAAU,GAAGA,aAAO,EAAPA,EAASqB,MAAM,KAAKxE,IAAIyE,EAAAA,IAAqBC,KAAK,UAAUvB,SAAYf,EAC5FgB,kBAAmBA,EACnBC,kBAAmBA,EACnBsB,2BAA4BC,EAAAA,GAA2BC,WACvDC,WAAYC,EAAAA,GAAWC,SAGzB/B,EAAWA,WAAWjD,KAAKpC,IAAS,IAAAqH,EAAA,OAClChD,EAAAA,EAAAA,KAACyB,EAAAA,GAAM,CAELC,GAAG,IACGxB,KAAqB,QAAjB8C,EAAEhC,EAAWiB,YAAI,IAAAe,OAAA,EAAfA,EAAAjG,KAAAiE,EAAkBrF,EAAUsH,KACxCpB,MAAM,kBACNK,QAAQ,QACRP,OAAQX,EAAWW,SAAWhG,EAAUsH,IACxCC,QAAUC,IAAuC,IAAAC,EAAA,OAAuB,QAAvBA,EAAKpC,EAAWkC,eAAO,IAAAE,OAAA,EAAlBA,EAAArG,KAAAiE,EAAqBrF,EAAUsH,IAAYE,EAAG,EACpGhB,MAAOxG,EAAUwG,MAAMpC,SAEtBpE,EAAU0H,OATN1H,EAAUsH,IAUR,QAMrB,CC7FA,MAAMpC,UAAiCyC,EAAAA,UACrCC,MAAAA,GACE,IAAI,WAAExC,EAAU,WAAEE,GAAeuC,KAAKC,MAClCC,EAAiBF,KAAKC,MAAMzC,WAC5BK,GAAStF,EAAAA,EAAAA,KACTuF,GAAezD,OAAO0D,KAAKF,GAAQG,OAAS,EAAI,IAAM,KAAMxF,EAAAA,EAAAA,GAAkB,IAAKqF,IACvF,OACExB,EAAAA,EAAAA,MAAA,OAAKC,UAAU,2BAA0BC,SAAA,EACvCF,EAAAA,EAAAA,MAAA,MAAIC,UAAU,aAAYC,SAAA,EACxBC,EAAAA,EAAAA,KAAA,MAAIF,UAA0B,WAAfiB,EAA0B,YAAc,GAAGhB,UACxDC,EAAAA,EAAAA,KAAA,KAAGE,KAAM,eAAeoB,IAAcvB,SAAC,cAEzCC,EAAAA,EAAAA,KAAA,MAAIF,UAA0B,gBAAfiB,EAA+B,YAAc,GAAGhB,UAC7DC,EAAAA,EAAAA,KAAA,KAAGE,KAAM,2BAA2BoB,IAAcvB,SAAC,mBAErDC,EAAAA,EAAAA,KAAA,MAAIF,UAA0B,WAAfiB,EAA0B,YAAc,GAAGhB,UACxDC,EAAAA,EAAAA,KAAA,KAAGE,KAAM,sBAAsBoB,IAAcvB,SAAC,gBAGjDkB,IACCjB,EAAAA,EAAAA,KAAA,MAAIF,UAAU,kCAAiCC,SAC5CkB,EAAWA,WAAWlD,KAAKiE,IAC1BhC,EAAAA,EAAAA,KAAA,MAAIF,WAAWmB,aAAU,EAAVA,EAAYU,UAAWK,EAAW,YAAc,GAAGjC,UAChEC,EAAAA,EAAAA,KAAA,KAAGE,KAAMe,aAAU,EAAVA,EAAYgB,KAAKD,GAAWG,MAAOH,EAASjC,SAClDiC,KAFmEA,QAQ9EhC,EAAAA,EAAAA,KAAA,MAAIF,UAAU,kBAAiBC,SAC5B2D,EAAe1C,WAAWjD,KAAKpC,IAC9BqE,EAAAA,EAAAA,KAAA,MAAIF,UAAW4D,EAAe/B,SAAWhG,EAAUsH,IAAM,YAAc,GAAGlD,UACxEC,EAAAA,EAAAA,KAAA,KACEE,KAAMwD,EAAezB,KAAKtG,EAAUsH,KACpCC,QAASQ,EAAeR,QAAQS,KAAKH,KAAM7H,EAAUsH,KACrDd,MAAOxG,EAAUwG,MAAMpC,SAEtBpE,EAAU0H,SANiE1H,EAAUsH,WAapG,EAGF,U,6bCzCA,SAASW,IAAoD,IAArCC,EAA8BC,UAAAtC,OAAA,QAAArB,IAAA2D,UAAA,GAAAA,UAAA,GAAG,CAAC,EACxD,IAAIC,GAAchI,EAAAA,EAAAA,KACdJ,EAAYoI,EAAe,EAC1BlG,OAAOC,OAAOkG,EAAAA,IAAWC,SAAStI,KACrCA,EAAYqI,EAAAA,GAAUE,GAExB,IAAIlG,GAAU+F,EAAe,GAAK,OAAOI,cACrC7H,EAAOyH,EAAgB,GACvBtG,GAAiB2G,EAAAA,EAAAA,IAAkBL,GAEvC,MAAO,CACLpI,YACA0I,UAAWN,EAAe,EAC1B/F,SACA1B,OACAmB,oBACGoG,EAEP,CAEA,MAAMS,UAAqBhB,EAAAA,UAAUiB,WAAAA,GAAA,SAAAT,WAAAU,EAAA,aAC3BZ,KAAgBY,EAAA,2BAEHC,UACnBC,EAAqBxH,gBAAgBvB,GACrC6H,KAAKmB,SAASf,EAAe,CAAEjI,cAAa,GAC7C,CAED4H,MAAAA,GAAS,IAAAqB,EACP,MAAM,UAAEjJ,EAAS,OAAEqC,EAAM,KAAE1B,EAAI,UAAE+H,EAAS,eAAE5G,GAAmB+F,KAAKqB,MAC9D/D,EAA0B,QAAX9C,EAErB,IAAIgD,EAAa,CACfiB,KAAOgB,GACL,wBAAuBjH,EAAAA,EAAAA,GAAkB,CAAEuD,EAAGvB,EAAQwB,EAAGyD,EAAKxD,GAAInD,EAAM8D,EAAGiE,EAAWvI,EAAG2B,MAC3FyF,QAASA,OACTvB,OAAQhG,EACRqF,WAAY,CACV,CAAEiC,IAAK6B,EAAAA,GAAiBC,QAAS1B,MAAO,MACxC,CAAEJ,IAAK6B,EAAAA,GAAiBE,OAAQ3B,MAAO,KACvC,CAAEJ,IAAK6B,EAAAA,GAAiBG,MAAO5B,MAAO,KACtC,CAAEJ,IAAK6B,EAAAA,GAAiBI,OAAQ7B,MAAO,KACvC,CAAEJ,IAAK6B,EAAAA,GAAiBK,QAAS9B,MAAO,OAIxCpC,EAAa,CACfU,OAAQ6B,KAAKqB,MAAMpH,eACnBwD,WAAYmE,EAAAA,GACZnD,KAAOxE,GACL,wBAAyBzB,EAAAA,EAAAA,GAAkB,KAAKD,EAAAA,EAAAA,KAAqBwD,OAAGY,EAAWrE,EAAG2B,KAG1F,MAAMkB,EAAoBU,eAAegG,mBACnCC,EAAgB3G,EAAoB4G,EAAU1E,EAEpD,OACEhB,EAAAA,EAAAA,MAAA,OACEC,UAAWG,IAAW,iBAAkB,CACtCuF,SAAU7G,EACV,OAAQmC,GAAgBnC,IACvBoB,SAAA,EAEHC,EAAAA,EAAAA,KAAA,OACEF,UAAW2F,IAAW,CACpB,0EACE9G,GAAgC,QAAXX,IACtB+B,UAEHC,EAAAA,EAAAA,KAAA,OACEF,UAAWG,IACT,UACAtB,GAAqB,CACnB,iBAAkBmC,EAClB,uBAAwBA,IAE1Bf,UAEFC,EAAAA,EAAAA,KAACsF,EAAa,CACZvE,WAAYH,EAASmB,OACrBf,WAAYA,EACZC,WAAYA,EACZH,aAAcA,EACdI,QAAmC,QAA5B0D,EAAE7F,EAAAA,EAAW2G,QAAQ1H,UAAO,IAAA4G,OAAA,EAA1BA,EAA4BrE,MACrCY,kBAAmBqC,KAAKmC,mBACxBvE,kBAAoBiD,GAAcb,KAAKmB,SAASf,EAAe,CAAES,qBAItEvD,IACCd,EAAAA,EAAAA,KAAC3B,EAAS,CACRM,kBAAmBA,EACnBJ,WAAYP,EACZQ,gBAAiB7C,EACjB8C,YAAa4F,EACb5G,eAAgBA,EAChBnB,KAAMA,EACNoC,mBAAoBC,MAK9B,EAGF,U,ofCzHA,IAAIiH,EAAqBC,EAAAA,GAAIlC,KAAK,KAAMmC,EAAAA,IACxC,MAAMC,IAAoB1G,eAAegG,mBAEzC,IAAIW,EAAYA,CAACC,EAAeC,KAC9B,IAAIC,EAAS,4CAA4CC,KAAKH,GAI9D,MAAO,QAHDI,SAASF,EAAO,GAAI,QACpBE,SAASF,EAAO,GAAI,QACpBE,SAASF,EAAO,GAAI,QACOD,IAAU,EAkB7C,MAAMI,UAAiBhD,EAAAA,UAAyBiB,WAAAA,GAAA,SAAAT,WAAAU,EAAA,iBA6InC,CAAC+B,EAAUC,KACpBA,EAAEC,iBACFjD,KAAKC,MAAMP,SAAWM,KAAKC,MAAMP,QAAQqD,EAAI,GAC9C,CA/IDhD,MAAAA,GACE,IAAImD,EAAOlD,KAAKC,MAAM/G,KAClBiK,EAASD,EAAK3I,KAAI,SAAUmG,GAC9B,OAAOA,EAAE3D,KACX,IAEIqG,EAAWF,EAAKlF,OAAS,GAAK,GAAK,GAGrCf,GAASmG,EAAWC,GAAWH,EAAKlF,OAEpCsF,EAAa,IAEXC,EAAIC,EAAAA,MAELC,OAAO,CAAC,EAAGC,KAAKC,KAAKH,EAAAA,IAAON,GAAOxC,GAAWgD,KAAKE,IAAIlD,EAAEb,YACzDgE,MAAM,CAAC,EAAGP,IACVQ,KAAK,GAEJC,EAAaR,EAAES,MAAM,GAAGrJ,QAAQsJ,GAAcA,EAAO,IAErDC,EAAIV,EAAAA,KAELC,OAAON,GACPU,MAAM,CAAC,GAAIT,EAAW,GAAWF,EAAKlF,SAErCmG,EAAa/B,EAAmBpC,KAAKC,MAAMnG,OAAQkG,KAAKC,MAAMmE,UAGlElB,EAAOA,EAAKmB,QAAQC,MAAK,SAAUC,EAAQC,GACzC,OAAID,EAAExH,MAAQyH,EAAEzH,OACN,EAENwH,EAAExH,MAAQyH,EAAEzH,MACP,EAEF,CACT,IAEA,IAAI0H,EACF,CACE/D,EAAG,QACHgE,EAAG,SACHC,EAAG,UACHC,IAAK,gBACLC,EAAG,UACHC,GAAI,YACJvB,EAAG,SACHwB,IAAK,gBACL/E,KAAKC,MAAMnG,QAAU,wBAEzB,OACEuC,EAAAA,EAAAA,MAAA,OACEC,UAAU,2CACV0I,MAAO,CAAEC,OAAQ1C,OAAkB5F,EAAY,SAAUM,SAAQV,SAAA,EAEjEF,EAAAA,EAAAA,MAAA,MAAIC,UAAU,oBAAmBC,SAAA,CAC9BkI,EAAO,MAAczE,KAAKC,MAAMhG,eAAe,QAElDoC,EAAAA,EAAAA,MAAA,OAAK2I,MAAO,CAAEE,SAAU,WAAYhI,OAAQA,KAAaX,SAAA,CACtDwH,EAAWxJ,KAAK0J,IACfzH,EAAAA,EAAAA,KAAA,OACEF,UAAU,iBACV0I,MAAO,CAAEE,SAAU,WAAYC,KAAM,EAAGC,IAAK9B,EAAaI,KAAK2B,MAAM9B,EAAEU,KAAS1H,UAGhFF,EAAAA,EAAAA,MAAA,OAAAE,SAAA,CAAM0H,EAAKqB,QAAQ,GAAG,QAFjBrB,KAMRF,EAAWxJ,KAAK0J,IACfzH,EAAAA,EAAAA,KAAA,OACEF,UAAU,iBACV0I,MAAO,CAAEE,SAAU,WAAYC,KAAM,EAAGC,IAAK9B,IAA2BI,KAAK2B,MAAM9B,EAAEU,KAAS1H,UAG9FF,EAAAA,EAAAA,MAAA,OAAAE,SAAA,CAAK,IAAE0H,EAAKqB,QAAQ,GAAG,QAFlBrB,KAMRf,EAAK3I,KAAKgL,IACT,IAAIrI,EAASwG,KAAK2B,MAAM9B,EAAEG,KAAKE,IAAI2B,EAAI1F,SACnC4C,EAAQ0B,EAAWoB,EAAI1F,OACvBmF,EAAuB,CACzBE,SAAU,WACVE,IAAKG,EAAI1F,OAAS,EAAIyD,EAAapG,EAASoG,IAC5C6B,KAAMjB,EAAEqB,EAAIxI,OACZG,OAAQA,EACRD,MAAOmG,EACPoC,WAAYhD,EAAUC,EAAO,OACzBF,GAAmB,CACrBkD,qBAAsBF,EAAI1F,OAAS,EAAI,EAAI,EAC3C6F,oBAAqBH,EAAI1F,OAAS,EAAI,EAAI,EAC1C8F,wBAAyBJ,EAAI1F,OAAS,EAAI,EAAI,EAC9C+F,uBAAwBL,EAAI1F,OAAS,EAAI,EAAI,IAG7CgG,EAAa,CACfT,IAAKG,EAAI1F,MAAQ,GAAK,GAAK,OAC3BiG,OAAQP,EAAI1F,MAAQ,GAAK,GAAK,WACzB0C,GAAmB,CACtBE,UAGAsD,EAAa,CACfP,WAAY/C,EACZqD,OAAQP,EAAI1F,OAAS,GAnGf,GAmGkC3C,KACpCqF,GAAmB,CACrBkD,qBAAsBF,EAAI1F,OAAS,EAAI,EAAI,EAC3C6F,oBAAqBH,EAAI1F,OAAS,EAAI,EAAI,EAC1C8F,wBAAyBJ,EAAI1F,OAAS,EAAI,EAAI,EAC9C+F,uBAAwBL,EAAI1F,OAAS,EAAI,EAAI,KAC3B,IAAd0F,EAAI1F,OAAe,CACrBmG,aAAc,KAIpB,OACE3J,EAAAA,EAAAA,MAAA,OACEC,UAAW,SAAWiJ,EAAI9G,KAAO,eAAiB,IAElDuG,MAAOA,EACPtF,QAASM,KAAKiG,SAAS9F,KAAKH,KAAMuF,GAAKhJ,SAAA,EAEvCF,EAAAA,EAAAA,MAAA,OAAKC,UAAW,QAAS0I,MAAOa,EAAWtJ,SAAA,CACxCgJ,EAAI1F,MAAMyF,QAAQ,GAAG,QAExB9I,EAAAA,EAAAA,KAAA,OAAKF,UAAU,QAAQ0I,MAAOe,EAAWxJ,SACtCgJ,EAAIxI,UARFwI,EAAIxI,MAUL,QAIZP,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,WAGN,EAQF,U,6bC/JA,MAAM0J,UAA0B5K,EAAAA,UAAwCyF,WAAAA,GAAA,SAAAT,WAAAU,EAAA,aAN/D,CACLmF,KAQgCnG,KAAKC,MARzBkG,KACZlM,gBAAgB2G,EAAAA,EAAAA,KAAkBrI,EAAAA,EAAAA,OAOS,CAE7C6N,iBAAAA,GACEpG,KAAKqG,gBAAkBC,OAAOC,aAAYtF,UACxC,MAAM/H,QAAaM,EAAAA,EAAAA,IAAW,wBAAwB8M,OAAOE,SAASC,UAClEvN,GACF8G,KAAKmB,UAAUuF,IAAS,IAAWA,EAAWP,KAAMjN,KACtD,GACC,IACL,CAEAyN,oBAAAA,GACEC,cAAc5G,KAAKqG,gBACrB,CAEAQ,mCAAAA,GACE,IACIC,EADsBC,EAAAA,GAAkB/G,KAAKqB,MAAMpH,gBAAgB+M,KAAK,GAClCzM,KAAKC,GAAWA,EAAOyM,QAAQjH,KAAKqB,MAAMpH,eAAgB,MACpG,OAAOI,OAAO0D,KAAKiC,KAAKqB,MAAM8E,MAC3BxL,QAAQ8E,GAAQqH,EAAgBrG,SAAShB,IAAQA,IAAQO,KAAKqB,MAAMpH,iBACpEM,KAAKkF,IAAG,CACP1C,MAAO0C,EACPI,MAAOG,KAAKqB,MAAM8E,KAAK1G,OAExB6E,MAAK,CAACC,EAAGC,IAAMA,EAAE3E,MAAQ0E,EAAE1E,OAChC,CAEAE,MAAAA,GACE,IAAIQ,GAAchI,EAAAA,EAAAA,KACd2O,EAAO3G,EAAe,GAAK,IAC3B4G,EAAK,CAAEzG,EAAG,EAAGgE,EAAG,EAAGC,EAAG,EAAGC,IAAK,EAAGC,EAAG,EAAGC,GAAI,EAAGvB,EAAG,EAAGwB,IAAK,GACzDqC,EAAsC,CAAC,EAC3C/M,OAAO0D,KAAKoJ,GAAIE,SAAS5H,IACvB2H,EAAGD,EAAG1H,GAAwB6H,YAAc7H,CAAG,IAGjD,IAAIjC,EAA0C,CAC5CiB,KAAOgB,GAAQ,6BAA8BjH,EAAAA,EAAAA,GAAkB,IAAK+H,EAAagH,EAAGJ,EAAG1H,KACvFC,QAASA,OACTvB,OAAQiJ,EAAGF,GACX1J,WAAY,CACV,CAAEiC,IAAK,IAAKI,MAAO,IAAKlB,MAAO,OAC/B,CAAEc,IAAK,IAAKI,MAAO,IAAKlB,MAAO,QAC/B,CAAEc,IAAK,IAAKI,MAAO,IAAKlB,MAAO,SAC/B,CAAEc,IAAK,MAAOI,MAAO,MAAOlB,MAAO,iBACnC,CAAEc,IAAK,IAAKI,MAAO,IAAKlB,MAAO,WAC/B,CAAEc,IAAK,KAAMI,MAAO,KAAMlB,MAAO,aACjC,CAAEc,IAAK,IAAKI,MAAO,IAAKlB,MAAO,QAC/B,CAAEc,IAAK,MAAOI,MAAO,MAAOlB,MAAO,kBAInClB,EAAa,CACfU,OAAQ6B,KAAKqB,MAAMpH,eACnBwD,WAAYmE,EAAAA,GACZnD,KAAOxE,IACL,MAAM6D,GAActF,EAAAA,EAAAA,GAAkB,IAAK+H,EAAajI,EAAG2B,IAC3D,MAAO,2BAA2B6D,EAAYE,OAAS,EAAI,IAAM,KAAKF,GAAa,GAIvF,MAAM3C,EAAoBU,eAAegG,mBACnCC,EAAgB3G,EAAoB4G,EAAU1E,EACpD,OACEhB,EAAAA,EAAAA,MAAA,OAAKC,UAAU,8BAA6BC,SAAA,EAC1CC,EAAAA,EAAAA,KAACsF,EAAa,CAACvE,WAAYH,EAASkB,YAAad,WAAYA,EAAYC,WAAYA,KACrFjB,EAAAA,EAAAA,KAAA,OAAKF,UAAU,uBAAsBC,UACnCC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,kCAAiCC,UAC9CC,EAAAA,EAAAA,KAACsG,EAAQ,CACP7F,MAAO,IACP/D,KAAM8G,KAAK6G,sCACXnH,QAASA,OACT5F,OAAQsN,EAAGF,GACXjN,eAAgB+F,KAAKqB,MAAMpH,kBACtBkB,GAAqB,CAAEiJ,SAAUoD,EAAAA,YAMlD,EAGF,U,seC5FA,MAAMC,GAAgBjN,IAGb,IAFIe,EAAAA,EAAW2G,QAAQ1H,KAO1B2J,IAAa/B,EAAAA,EAAAA,IAAmBsF,EAAAA,GAAe,IAAKF,EAAAA,IAE3C,MAAMG,WAAarM,EAAAA,UAA2ByF,WAAAA,GAAA,SAAAT,WAAAU,GAAA,aACnDyG,GAAazH,KAAKC,MAAMzF,SAAOwG,GAAA,kBAU3B,KACVhB,KAAKmB,SAASsG,GAAazH,KAAKC,MAAMzF,QAAQ,GAC/C,CAVD4L,iBAAAA,GACE7K,EAAAA,EAAWG,kBAAkBsE,KAAK4H,UACpC,CAEAjB,oBAAAA,GACEpL,EAAAA,EAAWI,qBAAqBqE,KAAK4H,UACvC,CAMA7H,MAAAA,GAAS,IAAA8H,EAAAC,EAAAC,EAAAC,EACHzH,GAAchI,EAAAA,EAAAA,MACd,MAAEwE,EAAK,KAAEkL,EAAI,UAAEC,EAAS,OAAEC,EAAM,KAAEC,EAAI,IAAEC,EAAG,UAAElL,EAAS,qBAAEmL,GAAyBtI,KAAKqB,OACtF,OAAE7G,EAAM,aAAE+N,EAAY,aAAEC,GAAiBxI,KAAKC,MAE9CwI,EAASR,EAAO,EAAI,EAAI,EACxBA,EAAO,MAASA,EAAO,IACzBQ,EAASR,EAAO,KAAS,EAAI,GAG/B,IAAI5C,EAASqD,MAAiBhF,KAAK2B,MAAMsD,OAAOD,EAAI,KAAOD,IAAW,KAAOA,IAASnD,QAAQmD,GAC1F5E,EAAuB,IAAduE,EAAOC,GAChBO,EAAgBX,EAAOG,EAAOvE,EAC9BgF,EAAeZ,EAAOI,EAAMxE,EAChC,IAAIiF,EAAazD,EAAM4C,EAAOC,GAEX,QAAfY,IACFA,GAAcb,EAAOC,GAAW5C,QAAQmD,IAG1C,MACMhK,GADwB,WAAXjE,EAAsB8E,EAAAA,GAAWyJ,MAAQzJ,EAAAA,GAAWC,UAEtDD,EAAAA,GAAWC,OACtB,wBAAyB/G,EAAAA,EAAAA,GAAkB,IAAK+H,EAAavE,EAAG,KAAMD,EAAGvB,IACzE,6BAA+BA,EAS/BwO,EAAU,qDAPGC,GAAAA,GACjB,IAAMzO,EAAO0O,eACb,EACA5J,EAAAA,GAAWC,OAAmC,QAA7BsI,EAAGhM,eAAesN,mBAAW,IAAAtB,GAAQ,QAARA,EAA1BA,EAA4BuB,cAAM,IAAAvB,OAAA,EAAlCA,EAAoC1P,UAAsC,QAA7B2P,EAAGjM,eAAesN,mBAAW,IAAArB,GAAO,QAAPA,EAA1BA,EAA4BuB,aAAK,IAAAvB,OAAA,EAAjCA,EAAmC3P,UACvGmH,EAAAA,GAAWC,OAAmC,QAA7BwI,EAAGlM,eAAesN,mBAAW,IAAApB,GAAQ,QAARA,EAA1BA,EAA4BqB,cAAM,IAAArB,OAAA,EAAlCA,EAAoClH,UAAsC,QAA7BmH,EAAGnM,eAAesN,mBAAW,IAAAnB,GAAO,QAAPA,EAA1BA,EAA4BqB,aAAK,IAAArB,OAAA,EAAjCA,EAAmCnH,WAGzByI,iBAAiBf,eAA0BC,iBAE3H,OACEhM,EAAAA,EAAAA,KAAC+M,GAAAA,EAAe,CACdP,QAASA,EACTvK,KAAMA,EACNwJ,KAAM5C,EAAM4C,GACZG,KAAM/C,EAAM+C,GACZC,IAAKhD,EAAMgD,GACXtL,MAAOA,EACPI,UAAWA,EACXmL,qBAAsBA,EACtBH,QAzCUO,EAyCKP,GAzCUO,GAAK,EAAI,IAAM,IAAMA,EAAEpD,QAAQ,GAAK,KA0C7DkE,gBAAiBrB,EACjBW,WAAYA,EACZW,gBAAiBtF,GAAWgE,GAC5BS,cAAeA,EACfC,aAAcA,IA9CJH,KAiDhB,ECxFa,SAASgB,GAAM5O,GAAgC,IAA/B,aAAE6O,GAA2B7O,EAC1D,MAAM8O,EAAkBD,EAAa3C,OACrC,OACExK,EAAAA,EAAAA,KAAA,OAAKF,UAAU,2BAA0BC,SACtCqN,EAAgBrP,KAAI,CAACC,EAAQqP,KAC5BrN,EAAAA,EAAAA,KAACmL,GAAI,CAAiCnN,OAAQA,EAAQ+N,aAAc,EAAGC,aAAc,IAA1E,QAAQqB,KAASrP,QAIpC,C,8bCMA,IAAI2J,IAAa/B,EAAAA,EAAAA,IAAmBsF,EAAAA,GAAe,KAKnD,MAAMgC,WAAe5J,EAAAA,UACnBC,MAAAA,GACE,MAAM9C,EAAQ+C,KAAKC,MAAM0J,aAAa,GAAG3L,OAAS8L,EAAAA,GAAa,GAE/D,OACEtN,EAAAA,EAAAA,KAAA,OAAKwI,MAAO,CAAEC,OAAQ,SAAUhI,SAAQV,SACrCyD,KAAKC,MAAM0J,aAAapP,KAAI,CAACwI,EAAKgH,KACjC1N,EAAAA,EAAAA,MAAA,OAAAE,SAAA,CACGwG,EAAIxI,KAAKC,IACRgC,EAAAA,EAAAA,KAACmL,GAAI,CAA6BnN,OAAQA,EAAQyC,MAAO6M,EAAAA,GAAYvB,aAAa,IAAIC,aAAa,MAAxF,OAAOuB,KAAMvP,QAE1BgC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,eAJPyN,MASlB,EAUF,SAAStC,GAAaxH,GACpB,OAAO1E,EAAAA,EAAW2G,QAAQjC,EAAMzF,OAClC,CAEA,MAAMmN,WAAa7H,EAAAA,UAAqBiB,WAAAA,GAAA,SAAAT,WAAAU,GAAA,aAC9ByG,GAAazH,KAAKC,QAAMe,GAAA,kBAUpB,KACVhB,KAAKmB,SAASsG,GAAazH,KAAKC,OAAO,GACxC,CAVDmG,iBAAAA,GACE7K,EAAAA,EAAWG,kBAAkBsE,KAAK4H,UACpC,CAEAjB,oBAAAA,GACEpL,EAAAA,EAAWI,qBAAqBqE,KAAK4H,UACvC,CAMA7H,MAAAA,GAAS,IAAA8H,EAAAC,EAAAC,EAAAC,EACHzH,GAAchI,EAAAA,EAAAA,MACd,OAAEiC,EAAM,MAAEuC,EAAK,KAAEkL,EAAI,UAAEC,EAAS,OAAEC,EAAM,KAAEC,EAAI,IAAEC,EAAG,UAAElL,EAAS,qBAAEmL,GAAyBtI,KAAKqB,OAC9F,aAAEkH,EAAY,aAAEC,GAAiBxI,KAAKC,MACtCZ,EAAwB,WAAX7E,EAAsB8E,EAAAA,GAAWyJ,MAAQzJ,EAAAA,GAAWC,OAGjEkJ,EAASR,EAAO,EAAI,EAAI,EACxBA,EAAO,MAASA,EAAO,IACzBQ,EAASR,EAAO,KAAS,EAAI,GAG/B,IAAI5C,EAASqD,MAAiBhF,KAAK2B,MAAMsD,OAAOD,EAAI,KAAOD,IAAW,KAAOA,IAASnD,QAAQmD,GAC1FhK,EACFY,IAAeC,EAAAA,GAAWC,OACtB,wBAAyB/G,EAAAA,EAAAA,GAAkB,IAAK+H,EAAavE,EAAG,KAAMD,EAAGvB,IACzE,6BAA+BA,EAErC,MAWMwO,EAAU,qDAXGC,GAAAA,GACjB,IAAMzO,EAAO0O,eACb,EACA7J,IAAeC,EAAAA,GAAWC,OACI,QADEsI,EAC5BhM,eAAesN,mBAAW,IAAAtB,GAAQ,QAARA,EAA1BA,EAA4BuB,cAAM,IAAAvB,OAAA,EAAlCA,EAAoC1P,UACV,QADmB2P,EAC7CjM,eAAesN,mBAAW,IAAArB,GAAO,QAAPA,EAA1BA,EAA4BuB,aAAK,IAAAvB,OAAA,EAAjCA,EAAmC3P,UACvCkH,IAAeC,EAAAA,GAAWC,OACI,QADEwI,EAC5BlM,eAAesN,mBAAW,IAAApB,GAAQ,QAARA,EAA1BA,EAA4BqB,cAAM,IAAArB,OAAA,EAAlCA,EAAoClH,UACV,QADmBmH,EAC7CnM,eAAesN,mBAAW,IAAAnB,GAAO,QAAPA,EAA1BA,EAA4BqB,aAAK,IAAArB,OAAA,EAAjCA,EAAmCnH,WAGuCyI,iBAAiBf,eAA0BC,iBAE3H,IAzBcE,EAyBVjG,EAAQ0B,GAAWgE,GAEnBtE,EAAuB,IAAduE,EAAOC,GAChBO,EAAgBX,EAAOG,EAAOvE,EAC9BgF,EAAeZ,EAAOI,EAAMxE,EAC5BmG,EAAiB,CACnBxE,WAAY,UACZ/C,MAAO,WAKLwH,EAAe,CAAExH,MAAO,uBADV,GAAO,GADLiB,KAAKwG,IAAIxG,KAAKE,IAAIuE,GAAS,OAI3CgC,EAAiB9E,EAAM4C,EAAOC,GAMlC,MAJuB,QAAnBiC,IACFA,GAAkBlC,EAAOC,GAAW5C,QAAQmD,KAI5CjM,EAAAA,EAAAA,KAAA,KACEF,UAAU,iBACVI,KAAM+B,EACNuG,MAAO,CAAE/H,MAAO+C,KAAKC,MAAMhD,MAAOmN,WAAY,GAC9C,eAAcpB,EAAQzM,UAEtBF,EAAAA,EAAAA,MAAA,OAAKC,UAAU,eAAe0I,MAAO,CAAEyE,gBAAiBhH,GAAQlG,SAAA,EAC9DC,EAAAA,EAAAA,KAAA,QAAMF,UAAU,aAAYC,SAAEQ,KAC9BP,EAAAA,EAAAA,KAAA,QAAMF,UAAU,kBAAiBC,SAAE8I,EAAM4C,MACzC5L,EAAAA,EAAAA,MAAA,QAAMC,UAAU,cAAaC,SAAA,EAvDrBmM,EAwDEP,GAxDaO,GAAK,EAAI,IAAM,IAAMA,EAAEpD,QAAQ,GAAK,MAyDzD9I,EAAAA,EAAAA,KAAA,QAAMF,UAAU,WAAUC,SAAC,QAC1B4N,EAAelD,QAAQ,IAAK,QAE/B5K,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAgB0I,MAAOiF,EAAa1N,SAAA,EACjDF,EAAAA,EAAAA,MAAA,OAAK2I,MAAO4D,EAAgBoB,EAAiB,CAAC,EAAEzN,SAAA,EAC9CC,EAAAA,EAAAA,KAAA,QAAMF,UAAU,kBAAiBC,SAAC,MAAQ,IAAE8I,EAAM+C,OAEpD/L,EAAAA,EAAAA,MAAA,OAAK2I,MAAO6D,EAAemB,EAAiB,CAAC,EAAEzN,SAAA,EAC7CC,EAAAA,EAAAA,KAAA,QAAMF,UAAU,iBAAgBC,SAAC,MAAQ,IAAE8I,EAAMgD,UAGrD7L,EAAAA,EAAAA,KAACQ,GAAAA,EAAS,CACRC,MAAO+C,KAAKC,MAAMhD,MAClBC,OAAQ,GACRhE,KAAMiE,EACNkN,YAAa/B,EACbH,OAAQA,EACRmC,aAAc,EACdC,iBAAe,QAKzB,EAGF,SAASC,KACP,MAAO,CACL7R,MAAO4C,EAAAA,EAAWC,WAClBvB,gBAAgB2G,EAAAA,EAAAA,KAAkBrI,EAAAA,EAAAA,MAEtC,CAOA,MAAMkS,WAAqB3K,EAAAA,UAAkCiB,WAAAA,GAAA,SAAAT,WAAAU,GAAA,aACnDwJ,MAAsBxJ,GAAA,kBAUlB,KACVhB,KAAKmB,UAAUuF,IAAS,IACnB8D,KACHvQ,eAAgByM,EAAUzM,kBACzB,GACJ,CAbDmM,iBAAAA,GACE7K,EAAAA,EAAWG,kBAAkBsE,KAAK4H,UACpC,CAEAjB,oBAAAA,GACEpL,EAAAA,EAAWI,qBAAqBqE,KAAK4H,UACvC,CASAf,mCAAAA,GACE,IAAIlO,EAAQqH,KAAKqB,MAAM1I,MACvB,IAAI+R,EAAuC,CAAE,CAAC1K,KAAKqB,MAAMpH,gBAAiB,GAC1E,IACIC,EADe6M,EAAAA,GAAkB/G,KAAKqB,MAAMpH,gBACT+M,KAAK,GAU5C,OATA3M,OAAO0D,KAAKpF,GACTgC,QAAQH,GAAWN,EAAoBuG,SAASjG,KAChD6M,SAAS7M,IACR,IAAIE,EAAO/B,EAAM6B,GACbmQ,EAAUnQ,EAAOoQ,WAAW5K,KAAKqB,MAAMpH,gBAC3CyQ,EAAalQ,EAAOyM,QAAQjH,KAAKqB,MAAMpH,eAAgB,KACyB,KAA7E0Q,EAAUjQ,EAAKwN,UAAYxN,EAAKuN,KAAO,EAAIvN,EAAKuN,KAAOvN,EAAKwN,UAAY,EAAQ,IAGhF7N,OAAO0D,KAAK2M,GAChBnQ,KAAKkF,IAAG,CACP1C,MAAO0C,EACPI,MAAO6K,EAAajL,OAErB6E,MAAK,CAACC,EAAGC,IAAMA,EAAE3E,MAAQ0E,EAAE1E,OAChC,CAEAE,MAAAA,GACE,IAAIvC,EAAa,CACfiB,KAAMA,IAAM,IACZiB,QAASA,CAACvH,EAAmB6K,KAC3BA,EAAEC,iBACF/B,EAAqBxH,gBAAgBvB,EAAU,EAEjDgG,OAAQ/F,EAAAA,EAAUC,eAClBmF,WAAY,CACV,CAAEiC,IAAK,KAAMI,MAAO,MACpB,CAAEJ,IAAK,IAAKI,MAAO,KACnB,CAAEJ,IAAK,IAAKI,MAAO,KACnB,CAAEJ,IAAK,IAAKI,MAAO,KACnB,CAAEJ,IAAK,IAAKI,MAAO,OAInBpC,EAAa,CACfU,OAAQ6B,KAAKqB,MAAMpH,eACnBwD,WAAYmE,EAAAA,GACZnD,KAAOxE,GACL,iBAAkBzB,EAAAA,EAAAA,GAAkB,KAAKD,EAAAA,EAAAA,KAAqBD,EAAG2B,KAGrE,MAAMkB,EAAoBU,eAAegG,mBACnCC,EAAgB3G,EAAoB4G,EAAU1E,EAC9CwN,EAAkB1P,EAAoB2P,GAAYpB,GAExD,OACErN,EAAAA,EAAAA,MAAA,OAAKC,UAAU,8BAA6BC,SAAA,EAC1CC,EAAAA,EAAAA,KAACsF,EAAa,CAACvE,WAAYH,EAASgB,OAAQZ,WAAYA,EAAYC,WAAYA,KAChFjB,EAAAA,EAAAA,KAACqO,EAAe,CAAClB,aAAc5C,EAAAA,GAAkB/G,KAAKqB,MAAMpH,mBAC1DkB,IACAkB,EAAAA,EAAAA,MAAA0O,EAAAA,SAAA,CAAAxO,SAAA,EACEC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,cACfE,EAAAA,EAAAA,KAAA,aAKJA,EAAAA,EAAAA,KAAA,OACEF,UAAWG,IAAW,uBAAwB,CAC5C,OAAQtB,IACPoB,UAEHC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,kCAAiCC,UAC9CC,EAAAA,EAAAA,KAACsG,EAAQ,CACP7F,MAAO,IACP/D,KAAM8G,KAAK6G,sCACX5M,eAAgB+F,KAAKqB,MAAMpH,eAC3BH,OAAO,OACFqB,GAAqB,CAAEiJ,SAAUoD,EAAAA,YAMlD,EAGF,YC/PAlB,OAAyB,iBAAI,SAAU3N,GACrCuI,EAAqBxI,UAAUC,GAC/B,MAAMqS,EAASC,SAASC,eAAe,UAC1BC,EAAAA,WAA0BH,GAClCjL,QAAOvD,EAAAA,EAAAA,KAACiO,GAAY,KAEzBlE,YAAYrF,EAAqBjI,OAAQ,IAC3C,EAEAqN,OAAoC,4BAAI,SAAUH,GAChD,MAAM6E,EAASC,SAASC,eAAe,WAC1BC,EAAAA,WAA0BH,GAClCjL,QAAOvD,EAAAA,EAAAA,KAAC0J,EAAiB,CAACC,KAAMA,IACvC,EAEAG,OAA+B,uBAAI,WACjC,MAAM8E,EAAWH,SAASC,eAAe,UACnCG,EAASJ,SAASC,eAAe,oBACvC,IAAKE,IAAaC,EAAQ,OAE1B,IACE,MAAMC,GAAWC,EAAAA,EAAAA,IAAuB,oBACxCrK,EAAqBjI,OAAOqS,EAC9B,CAAE,MACA,MACF,CAEaH,EAAAA,WAA0BC,GAElCrL,QACHvD,EAAAA,EAAAA,KAACgP,EAAAA,GAAa,CAAAjP,UACZC,EAAAA,EAAAA,KAACsE,EAAY,MAGnB,GAEA2K,EAAAA,EAAAA,IAAM,WACJ,MAAML,EAAWH,SAASC,eAAe,UACnCQ,EAAUT,SAASC,eAAeS,EAAAA,IAClCN,EAASJ,SAASC,eAAe,oBAEvC,KAAKE,GAAaM,GAAYL,GAAW/E,OAAOsF,mBAAmB,OAEnE,IACE,MAAMN,GAAWC,EAAAA,EAAAA,IAAuB,oBACxCrK,EAAqBjI,OAAOqS,EAC9B,CAAE,MACA,MACF,CAEaH,EAAAA,WAA0BO,GAElC3L,QACHvD,EAAAA,EAAAA,KAACgP,EAAAA,GAAa,CAAAjP,UACZF,EAAAA,EAAAA,MAACwP,EAAAA,GAAmB,CAAAtP,SAAA,CACjBuP,EAAAA,cAAsBtP,EAAAA,EAAAA,KAACsE,EAAY,IAAKsK,IACzC5O,EAAAA,EAAAA,KAACuP,EAAAA,SAAQ,CAACC,SAAU,KAAKzP,UACvBC,EAAAA,EAAAA,KAACyP,EAAAA,EAAmC,CAClC/M,2BAA4BC,EAAAA,GAA2BC,WACvD8M,OAAQ5F,OAAOsF,2BAM3B,G,okBC3EA,MACMO,EAAyD,CAAC,EAiBhE,MAAMC,UAAwBtM,EAAAA,UAAgCiB,WAAAA,GAAA,SAAAT,WAAAU,EAAA,eAKlCqL,EAAAA,EAAAA,cAA8BrL,EAAA,2BAyB1BkD,IAC5B,MAAM,YAAEmG,EAAW,MAAEpN,EAAK,OAAEC,EAAM,gBAAEqN,GAAoBvK,KAAKC,MACvDlC,EAAO1D,OAAO0D,KAAKsM,GACzBtM,EAAKsJ,SAAQ,CAAC5H,EAAKoK,KACjB,MAAMyC,EAAOjC,EAAY5K,GAEnB8M,EADUvM,KAAKwM,cAAcC,YAAYH,GACrBrP,MAC1B,IAAIyP,EAAOxI,EAAEyE,OAAOlJ,IAEpB,GAAIoK,IAAU9L,EAAKC,OAAS,EAAG,CAC7B,MAAM2O,KAAgB1P,EAAQsP,EAAY,GAE1C,GAAIhC,EACFmC,EAAOhJ,KAAKwG,IAAIyC,EA7DC,EA6DgCD,QAC5C,GAAIA,EAAOC,EAChB,MAEJ,MAAO,GAAc,IAAV9C,EAAa,CACtB,MAAM+C,KAAeL,EAAY,GAEjC,GAAIhC,EACFmC,EAAOhJ,KAAKmJ,IAAID,EArEC,EAqE+BF,QAC3C,GAAIA,EAAOE,EAChB,MAEJ,CAEA5M,KAAKwM,cAAcM,SAASR,EAAMI,EAAMxP,EAAS,EAAE,GACnD,IACH8D,EAAA,sBAEuB,KACtB,MAAM,KAAE9H,EAAI,MAAE+D,EAAK,OAAEC,EAAM,cAAE6P,EAAa,OAAEC,EAAM,UAAEC,EAAS,UAAEC,EAAS,aAAE5C,EAAY,OAAEnC,GAAWnI,KAAKC,OAExGkN,EAAAA,EAAAA,GAASnN,KAAKoN,OAAOC,QAASrN,KAAKwM,cAAevP,EAAOC,GAGzD,MAAMoQ,EAAY,GAAGrQ,KAAS/D,EAAK8E,SACnC,IAAIkG,EAAIiI,EAAOmB,GACVpJ,IACHA,EAAIV,EAAAA,MAEDK,MAAM,EAAE,EAAG5G,EAAQ,IACnBwG,OAAO,CAAC,EAAGvK,EAAK8E,SACnBmO,EAAOmB,GAAapJ,GAGtB,MAAMX,EAAIC,EAAAA,MAEPK,MAAM,CAAC3G,EAAS,EAAG,IACnBuG,OAAOD,EAAAA,IAAUtK,GAAOwH,GAAMA,KAE3B6M,EAAgB7J,KAAKwG,IAAIxG,KAAKE,IAAIuE,GAASmC,GAC3CkD,EAAcT,GAAiB,GAAO,GAAMzC,EAAgBiD,GAAejI,QAAQ,GAAK,EAI9F,GAFAtF,KAAKwM,cAAciB,UAAU,EAAG,EAAGxQ,EAAOC,GAEtC8P,EAAQ,CACVhN,KAAKwM,cAAckB,UAAU,GAAK,IAElC1N,KAAKwM,cAAcmB,YAAc,wBACjC3N,KAAKwM,cAAcoB,YACnB,IAAK,IAAIC,EAAI,EAAGA,EAAI3U,EAAK8E,OAAQ6P,IAC/B7N,KAAKwM,cAAcsB,OAAO5J,EAAE2J,GAAItK,EAAErK,EAAK2U,KAEzC7N,KAAKwM,cAAcuB,SAEnB/N,KAAKwM,cAAcwB,UAAY,wBAC/BhO,KAAKwM,cAAcyB,UAAY,SAC/BjO,KAAKwM,cAAc0B,KAAO,WAC1BlO,KAAKmO,mBAAmBjK,GAExBlE,KAAKwM,cAAckB,WAAW,IAAM,GACtC,CAEA1N,KAAKwM,cAAcmB,YAAcV,QAAAA,EAAa,uBAAuBO,KACrExN,KAAKwM,cAAcoB,YACnB,IAAK,IAAIC,EAAI,EAAGA,EAAI3U,EAAK8E,OAAQ6P,IAC/B7N,KAAKwM,cAAcsB,OAAO5J,EAAE2J,GAAItK,EAAErK,EAAK2U,KAEzC7N,KAAKwM,cAAcuB,SAEnB/N,KAAKwM,cAAcwB,UAAYd,QAAAA,EAAa,uBAAuBM,KACnExN,KAAKwM,cAAcyB,UAAY,SAC/BjO,KAAKwM,cAAc0B,KAAO,WAC1BlO,KAAKmO,mBAAmBjK,EAAE,GAC3B,CA5GDkK,qBAAAA,CAAsBC,GAEpB,OAAOA,EAAUnV,MAAQ8G,KAAKC,MAAM/G,MAAQmV,EAAUpR,QAAU+C,KAAKC,MAAMhD,KAC7E,CAEAmJ,iBAAAA,GACEpG,KAAKwM,cAAgBxM,KAAKoN,OAAOC,QAASiB,WACxC,MACAC,EAAAA,EAAAA,MAAqB,CAAEC,oBAAoB,QAAS7R,GAEtDqD,KAAKyO,eACP,CAEAC,kBAAAA,GACE1O,KAAKyO,eACP,CAEA1O,MAAAA,GACE,MAAM,MAAE9C,EAAK,OAAEC,EAAM,UAAEZ,GAAc0D,KAAKC,MAC1C,OAAOzD,EAAAA,EAAAA,KAAA,UAAQF,UAAW2F,IAAW,YAAa3F,GAAYW,MAAOA,EAAOC,OAAQA,EAAQyR,IAAK3O,KAAKoN,QACxG,EAyFDpM,EArHKoL,EAAe,eACG,CACpBW,eAAe,IAqHnB,S,gFC9IO,MAAMhU,EAAc6V,IAAU,CACnCC,KAAM,KACN7V,WAAY,KAEZK,YAAa,KAEbQ,yBAA0B,KAC1BE,2BAA4B,KAC5B+U,wBAAyB,OAGdC,EAAiBH,IAAU,CACtCI,cAAe,KACfC,YAAa,M,0ECXf,MAAMrW,UAAsBsW,EAAAA,WAC1BzV,kBAAAA,CAAmB0V,GACjB,IAAIC,EAAU,CACZC,OAAQN,EAAAA,EAAeC,cACvBG,OAAQA,GAGVnP,KAAKsP,SAASF,EAChB,CAEAvW,gBAAAA,CAAiBsW,GACf,IAAIC,EAAU,CACZC,OAAQN,EAAAA,EAAeE,YACvBE,OAAQA,GAGVnP,KAAKsP,SAASF,EAChB,EAGF,MACA,EADmB,IAAIxW,C,qFCnBvB,SAAS2W,EAAQ5W,GACf,OAAO0B,OAAOC,OAAO3B,GAClB4B,KAAI,SAAUG,GACb,MAAO,CACLqC,MAAOrC,EAAKqC,MACZ8C,MAAOnF,EAAKyN,OAEhB,IACC7D,MAAK,SAAUC,EAAGC,GACjB,OAAOA,EAAE3E,MAAQ0E,EAAE1E,KACrB,GACJ,CAEA,IAAI2P,EAAa,KACbC,EAAoC,GACxC,MAAMrX,UAAkBsX,EAAAA,EACtBrX,YAAAA,GACE,OAAOmX,CACT,CAEAD,OAAAA,GACE,OAAOE,CACT,EAEF,IAAIE,EAAY,IAAIvX,EAGpBuX,EAAUC,cAAgBhX,EAAAA,EAAciX,UAAS,SAAUT,GACzD,IAAID,EAASC,EAAQD,OAErB,OAAQA,EAAOrW,MACb,KAAKC,EAAAA,EAAY8V,KACf,IAAIiB,EAAsC,CAAC,EAC3CX,EAAOhJ,KAAKkB,SAASvI,IACnBA,EAAMiR,UAAU1I,SAAS2I,IACvBF,EAAOE,EAASxV,QAAUwV,CAAQ,GAClC,IAGJP,EAAQF,EAAQO,GACZX,EAAOhX,YACTqX,EAAaL,EAAOhX,WAEtBwX,EAAUM,aACV,MAEF,KAAKlX,EAAAA,EAAYc,yBACf2V,EAAaL,EAAOrV,OACpB6V,EAAUM,aACV,MAEF,KAAKlX,EAAAA,EAAYM,YACfoW,EAAQF,EAAQJ,EAAOxW,OACvBgX,EAAUM,aAGhB,IAEA,S,8EC7DA,MAAMP,UAAcQ,EAAAA,aAGlBD,UAAAA,GACEjQ,KAAKmQ,KAAKT,EAAMU,aAClB,CAEA1U,iBAAAA,CAAkB2U,GAChBrQ,KAAKsQ,GAAGZ,EAAMU,aAAcC,EAC9B,CAEA1U,oBAAAA,CAAqB0U,GACnBrQ,KAAKuQ,eAAeb,EAAMU,aAAcC,EAC1C,E,EAbIX,E,EACkB,U,sUADb,mB,wFAgBX,S,8FCbIc,EAAuC,CAAC,EACxCV,EAAsC,CAAC,EACvCW,EAAuB,GAC3B,MAAMlV,UAAmBmU,EAAAA,EACvBlU,QAAAA,GACE,OAAOsU,CACT,CAEAY,YAAAA,GACE,OAAOrW,OAAO0D,KAAK+R,GAChBvV,KAAI,SAAUkF,GACb,OAAOqQ,EAAOrQ,EAChB,IACC6E,MAAK,CAACC,EAAGC,IAAMiM,EAAWE,QAAQpM,EAAE/J,QAAUiW,EAAWE,QAAQnM,EAAEhK,SACxE,CAEA0H,OAAAA,CAAQ1H,GACN,OAAOsV,EAAOtV,EAChB,CAEAoW,aAAAA,CAAcpW,GACZ,OAAOgW,EAAahW,EACtB,CAEAqW,eAAAA,CAAgB/R,GACd,IAAIgS,EAAIhS,EAAM6B,cACd,OAAOX,KAAK0Q,eAAe/V,QAAQD,GAAS8V,EAAa9V,EAAKF,UAAYsW,GAC5E,EAEF,IAAIC,EAAa,IAAIxV,EACrBwV,EAAWC,gBAAgB,IAG3BD,EAAWnB,cAAgBhX,EAAAA,EAAciX,UAAS,SAAUT,GAC1D,IAAID,EAASC,EAAQD,OAErB,OAAQA,EAAOrW,MACb,KAAKC,EAAAA,EAAY8V,KACFM,EAAOhJ,KACbkB,SAASvI,IACdA,EAAMiR,UAAU1I,SAAS2I,IACvBF,EAAOE,EAASxV,QAAUwV,EAC1BQ,EAAaR,EAASxV,QAAUsE,EAAMtE,OACtCiW,EAAWQ,KAAKjB,EAASxV,OAAO,GAChC,IAEJuW,EAAWd,aACX,MAEF,KAAKlX,EAAAA,EAAYC,WACf8W,EAASX,EAAOxW,MAChBoY,EAAWd,aACX,MAEF,KAAKlX,EAAAA,EAAYM,YACf,IAAIV,EAAQwW,EAAOxW,MACnBmX,EAASnX,EACToY,EAAWd,aAGjB,IAEA,S,qFC9BO,IAAK7S,EAAQ,SAARA,GAAQ,OAARA,EAAQ,gBAARA,EAAQ,0BAARA,EAAQ,gBAARA,CAAQ,MAMRkE,EAAgB,SAAhBA,GAAgB,OAAhBA,EAAgB,UAAhBA,EAAgB,aAAhBA,EAAgB,WAAhBA,EAAgB,UAAhBA,EAAgB,WAAhBA,EAAgB,YAAhBA,CAAgB,MAShB4P,EAAU,SAAVA,GAAU,OAAVA,EAAU,UAAVA,EAAU,oBAAVA,EAAU,uBAAVA,CAAU,MAMVC,EAAU,SAAVA,GAAU,OAAVA,EAAU,YAAVA,EAAU,cAAVA,EAAU,yBAAVA,EAAU,YAAVA,EAAU,uBAAVA,EAAU,YAAVA,EAAU,gCAAVA,CAAU,MAUVC,EAAS,SAATA,GAAS,OAATA,EAAS,UAATA,EAAS,4BAATA,EAAS,wBAATA,CAAS,K,wJClEjB5J,EAAmB,CACrB6J,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA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UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFC,UAAW,QAg/BAoJ,EAAiD,CAC5D,CAACC,EAAAA,GAAQC,iBAAkBpT,EAC3B,CAACmT,EAAAA,GAAQE,SAAUrT,EACnBsT,GAAItT,EACJuT,IAAKvT,EACLwT,IAAKxT,EACLyT,IAAKzT,EACL0T,IAAK1T,EACL2T,QA97HmB,CACnB9J,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFC,UAAW,WAo9FX8J,IAAKf,EACLgB,KAAMhB,EACNiB,KAAMjB,EACNkB,IAAKlB,EACLmB,IAAKnB,EACLoB,KAAMjB,EACNkB,OAAQlU,EACRmU,OAAQpB,EACRqB,KAAMpU,EACNqU,UA39FuB,CACvBxK,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFC,UAAW,WAi/DXwK,cAAetU,EACfuU,cAAevU,EACfwU,gBAAiBxU,GAGNyU,EAAuD,CAClE,CAACtB,EAAAA,GAAQC,iBAAkBH,EAC3B,CAACE,EAAAA,GAAQE,SAAUJ,EACnBK,GAAIL,EACJM,IAAKN,EACLO,IAAKP,EACLQ,IAAKR,EACLS,IAAKT,EACLU,QA9gC0B,CAC1B9J,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UAC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","sources":["webpack://@finviz/website/./js/app/crypto/actions/cryptoActionCreators.ts","webpack://@finviz/website/./js/app/crypto/components/ChartMenu.tsx","webpack://@finviz/website/./js/app/crypto/types.ts","webpack://@finviz/website/./js/app/crypto/components/redesign/Menu.tsx","webpack://@finviz/website/./js/app/crypto/menu.tsx","webpack://@finviz/website/./js/app/crypto/charts.tsx","webpack://@finviz/website/./js/app/crypto/barChart.tsx","webpack://@finviz/website/./js/app/crypto/performance.tsx","webpack://@finviz/website/./js/app/crypto/components/redesign/Tile.tsx","webpack://@finviz/website/./js/app/crypto/components/redesign/Layout.tsx","webpack://@finviz/website/./js/app/crypto/quotes.tsx","webpack://@finviz/website/./js/app/crypto/index.tsx","webpack://@finviz/website/./js/app/futures/components/CanvasSparkline.tsx","webpack://@finviz/website/./js/app/futures/constants/constants.ts","webpack://@finviz/website/./js/app/futures/dispatcher/appDispatcher.ts","webpack://@finviz/website/./js/app/futures/stores/rowsStore.ts","webpack://@finviz/website/./js/app/futures/stores/store.ts","webpack://@finviz/website/./js/app/futures/stores/tilesStore.ts","webpack://@finviz/website/./js/app/futures/types.ts","webpack://@finviz/website/./js/app/futures/utils.tsx","webpack://@finviz/website/./js/app/shared/components/ForexCryptoTile.tsx","webpack://@finviz/website/./js/app/shared/components/ForexFuturesCryptoSettings.tsx","webpack://@finviz/website/./js/app/shared/components/FuturesForexCryptoTimeframeBar.tsx","webpack://@finviz/website/./js/app/shared/components/ResizableChartLayoutWithGlobalState.tsx","webpack://@finviz/website/./js/app/shared/components/Sparkline.tsx","webpack://@finviz/website/./js/app/shared/getInitChartConfig.ts","webpack://@finviz/website/./js/app/shared/gradients.ts","webpack://@finviz/website/./js/app/shared/hover-chart.ts","webpack://@finviz/website/./js/app/shared/retinafy.ts","webpack://@finviz/website/../charts/app/constants/common.ts","webpack://@finviz/website/../charts/app/utils.ts","webpack://@finviz/website/../charts/app/utils/helpers.ts","webpack://@finviz/website/../node_modules/flux/index.js","webpack://@finviz/website/../node_modules/flux/lib/Dispatcher.js","webpack://@finviz/website/../node_modules/flux/lib/invariant.js","webpack://@finviz/website/../node_modules/keymirror/index.js","webpack://@finviz/website/../node_modules/prop-types/factoryWithThrowingShims.js","webpack://@finviz/website/../node_modules/prop-types/index.js","webpack://@finviz/website/../node_modules/prop-types/lib/ReactPropTypesSecret.js"],"sourcesContent":["import { CancelablePromise, apiRequest } from '../../../main/services/api'\r\nimport { ActionTypes } from '../../futures/constants/constants'\r\nimport AppDispatcher from '../../futures/dispatcher/appDispatcher'\r\nimport RowsStore from '../../futures/stores/rowsStore'\r\nimport { decodeQueryString, encodeQueryString } from '../../queryString'\r\nimport { TileMap } from '../types'\r\n\r\nvar getCryptoUrl = function () {\r\n var timeframe = RowsStore.getTimeframe()\r\n var { c } = decodeQueryString()\r\n return `/api/crypto_all.ashx?${encodeQueryString({ timeframe, c })}`\r\n}\r\n\r\nlet _lastRequest: CancelablePromise | null = null\r\n\r\nconst actions = {\r\n initTiles(tiles: TileMap) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.INIT_TILES,\r\n tiles,\r\n })\r\n },\r\n\r\n async update(data: any) {\r\n if (data) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.UPDATE_DATA,\r\n tiles: data,\r\n })\r\n return\r\n }\r\n\r\n _lastRequest?.cancel?.()\r\n _lastRequest = apiRequest(getCryptoUrl())\r\n const tiles = await _lastRequest\r\n if (tiles) {\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.UPDATE_DATA,\r\n tiles,\r\n })\r\n }\r\n },\r\n\r\n async changeTimeframe(timeframe: string) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.CHANGE_TIMEFRAME_STARTED,\r\n period: timeframe,\r\n })\r\n\r\n _lastRequest?.cancel?.()\r\n _lastRequest = apiRequest(getCryptoUrl())\r\n const data = await _lastRequest\r\n if (data) {\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.UPDATE_DATA,\r\n tiles: data,\r\n })\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.CHANGE_TIMEFRAME_COMPLETED,\r\n })\r\n }\r\n },\r\n}\r\n\r\nexport default actions\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport TilesStore from '../../futures/stores/tilesStore'\r\nimport { encodeQueryString } from '../../queryString'\r\nimport { ForexFuturesCryptoSettings } from '../../shared/components/ForexFuturesCryptoSettings'\r\nimport Sparkline from '../../shared/components/Sparkline'\r\nimport { getActiveCurrencySparklineTickers } from '../currencyUtils'\r\nimport { CryptoTile } from '../types'\r\n\r\nfunction getTilesInOrder(tiles: Record, activeCurrency: string) {\r\n const activeLayoutTickers = getActiveCurrencySparklineTickers(activeCurrency)\r\n const tilesValues = Object.values(tiles)\r\n return activeLayoutTickers\r\n .map((ticker) => tilesValues.find((tile) => tile.ticker === ticker))\r\n .filter(Boolean) as CryptoTile[]\r\n}\r\n\r\ninterface ChartMenuProps {\r\n activeTile: string\r\n activeTimeframe: string\r\n activeRange: string\r\n activeCurrency: string\r\n type: string\r\n showChartControls?: boolean\r\n isRedesignEnabled?: boolean\r\n}\r\n\r\nexport default function ChartMenu({\r\n activeTile,\r\n activeTimeframe,\r\n activeRange,\r\n activeCurrency,\r\n type,\r\n showChartControls,\r\n isRedesignEnabled,\r\n}: ChartMenuProps) {\r\n const isInteractiveActive = type === '1'\r\n const [tiles, setTiles] = React.useState(getTilesInOrder(TilesStore.getTiles(), activeCurrency))\r\n\r\n React.useEffect(() => {\r\n const onStoreChange = () => setTiles(getTilesInOrder(TilesStore.getTiles(), activeCurrency))\r\n\r\n TilesStore.addChangeListener(onStoreChange)\r\n\r\n return () => TilesStore.removeChangeListener(onStoreChange)\r\n }, [activeCurrency, activeTile])\r\n\r\n const interactiveUrl = FinvizSettings.hasUserPremium\r\n ? `/crypto_charts.ashx?${encodeQueryString({\r\n t: activeTile,\r\n p: activeTimeframe,\r\n ty: 1,\r\n c: activeCurrency,\r\n })}`\r\n : `/elite.ashx?${encodeQueryString({\r\n utm_source: 'finviz',\r\n utm_medium: 'banner',\r\n utm_campaign: 'crypto-interactive-chart',\r\n })}`\r\n\r\n const getTileHref = (ticker: string) =>\r\n `/crypto_charts.ashx?${encodeQueryString({\r\n t: ticker,\r\n p: activeTimeframe,\r\n ty: isRedesignEnabled && isInteractiveActive ? undefined : type,\r\n r: activeRange,\r\n c: activeCurrency,\r\n })}`\r\n\r\n return (\r\n
\r\n {showChartControls && (\r\n \r\n )}\r\n
\r\n {tiles.map((tile) => (\r\n \r\n {tile.label}\r\n \r\n \r\n ))}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import { MouseEvent } from 'react'\r\n\r\nexport enum PageType {\r\n Quotes = 'quotes',\r\n Performance = 'performance',\r\n Charts = 'charts',\r\n}\r\n\r\nexport interface CryptoTile {\r\n label: string\r\n ticker: string\r\n last: number\r\n change: number\r\n prevClose: number\r\n high: number\r\n low: number\r\n sparkline: number[]\r\n sparklineDateChanges: Record\r\n}\r\n\r\nexport type TileMap = Record\r\n\r\nexport interface TimeFrame {\r\n key: string\r\n value: string\r\n title?: string\r\n}\r\n\r\nexport interface TimeFrames {\r\n active: string\r\n link: (timeFrame: Key) => string\r\n onClick: (timeFrame: Key, e: MouseEvent) => void\r\n timeframes: TimeFrame[]\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Button } from '../../../../main/components/button'\r\nimport { SpecificChartFunctionality, TIMEFRAME } from '../../../../main/constants'\r\nimport { Instrument } from '../../../../main/types'\r\nimport { decodeQueryString, encodeQueryString } from '../../../queryString'\r\nimport { FuturesForexCryptoTimeframeBar } from '../../../shared/components/FuturesForexCryptoTimeframeBar'\r\nimport { getCurrencyLongName } from '../../currencyUtils'\r\nimport { PageType, TimeFrames } from '../../types'\r\n\r\ninterface MenuProps {\r\n isDetailOpen?: boolean\r\n activePage: PageType\r\n timeframes: TimeFrames\r\n currencies?: {\r\n currencies: string[]\r\n active: string\r\n link: (currency: string) => string\r\n }\r\n company?: string\r\n onTimeframeChange?: (timeframe: TIMEFRAME) => void\r\n onDateRangeChange?: (dateRange: string | undefined) => void\r\n}\r\n\r\nexport default function Menu({\r\n isDetailOpen,\r\n activePage,\r\n timeframes,\r\n currencies,\r\n company,\r\n onTimeframeChange,\r\n onDateRangeChange,\r\n}: MenuProps) {\r\n const params = decodeQueryString()\r\n const queryParams = (Object.keys(params).length > 0 ? '?' : '') + encodeQueryString({ ...params, t: undefined })\r\n return (\r\n
\r\n
\r\n \r\n Quotes\r\n \r\n \r\n Performance\r\n \r\n \r\n Charts\r\n \r\n
\r\n {currencies && (\r\n
\r\n {currencies.currencies.map((currency) => (\r\n \r\n {currency}\r\n \r\n ))}\r\n
\r\n )}\r\n
\r\n {activePage === PageType.Charts ? (\r\n \r\n ) : (\r\n timeframes.timeframes.map((timeframe) => (\r\n ) => timeframes.onClick?.(timeframe.key as Key, ev)}\r\n title={timeframe.title}\r\n >\r\n {timeframe.value}\r\n \r\n ))\r\n )}\r\n
\r\n
\r\n )\r\n}\r\n","import { Component } from 'react'\r\n\r\nimport { decodeQueryString, encodeQueryString } from '../queryString'\r\nimport { TimeFrames } from './types'\r\n\r\ninterface MenuProps {\r\n isDetailOpen?: boolean\r\n activePage: string\r\n currencies?: {\r\n currencies: string[]\r\n active: string\r\n link: (currency: string) => string\r\n }\r\n timeframes: TimeFrames\r\n company?: string\r\n}\r\n\r\nclass Menu extends Component> {\r\n render() {\r\n var { activePage, currencies } = this.props\r\n var timeframesMenu = this.props.timeframes\r\n var params = decodeQueryString()\r\n var queryParams = (Object.keys(params).length > 0 ? '?' : '') + encodeQueryString({ ...params })\r\n return (\r\n
\r\n \r\n {currencies && (\r\n \r\n )}\r\n
    \r\n {timeframesMenu.timeframes.map((timeframe) => (\r\n
  • \r\n \r\n {timeframe.value}\r\n \r\n
  • \r\n ))}\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Menu\r\n","import classnames from 'classnames'\r\nimport classNames from 'classnames'\r\nimport { Component } from 'react'\r\n\r\nimport { TIMEFRAME } from '../../main/constants'\r\nimport TilesStore from '../futures/stores/tilesStore'\r\nimport { FuturesTimeframe } from '../futures/types'\r\nimport { decodeQueryString, encodeQueryString } from '../queryString'\r\nimport CryptoActionCreators from './actions/cryptoActionCreators'\r\nimport ChartMenu from './components/ChartMenu'\r\nimport MenuNew from './components/redesign/Menu'\r\nimport { CURRENCIES_LIST, getActiveCurrency } from './currencyUtils'\r\nimport Menu from './menu'\r\nimport { PageType } from './types'\r\n\r\ninterface ChartsState {\r\n timeframe: TIMEFRAME\r\n dateRange: string\r\n ticker: string\r\n type: string\r\n isGroupOpen: boolean\r\n activeGroup: string\r\n}\r\n\r\nfunction getChartsState(override: Partial = {}) {\r\n var queryString = decodeQueryString()\r\n var timeframe = queryString['p'] as TIMEFRAME\r\n if (!Object.values(TIMEFRAME).includes(timeframe)) {\r\n timeframe = TIMEFRAME.d\r\n }\r\n var ticker = (queryString['t'] || 'ALL').toUpperCase()\r\n var type = queryString['ty']\r\n var activeCurrency = getActiveCurrency(queryString)\r\n\r\n return {\r\n timeframe,\r\n dateRange: queryString['r'],\r\n ticker,\r\n type,\r\n activeCurrency,\r\n ...override,\r\n }\r\n}\r\n\r\nclass CryptoCharts extends Component {\r\n state = getChartsState()\r\n\r\n _onTimeframeChange = async (timeframe: TIMEFRAME) => {\r\n CryptoActionCreators.changeTimeframe(timeframe)\r\n this.setState(getChartsState({ timeframe }))\r\n }\r\n\r\n render() {\r\n const { timeframe, ticker, type, dateRange, activeCurrency } = this.state\r\n const isDetailOpen = ticker !== 'ALL'\r\n\r\n var timeframes = {\r\n link: (key: string) =>\r\n `/crypto_charts.ashx?${encodeQueryString({ t: ticker, p: key, ty: type, r: dateRange, c: activeCurrency })}`,\r\n onClick: () => {},\r\n active: timeframe,\r\n timeframes: [\r\n { key: FuturesTimeframe.Minute5, value: '5M' },\r\n { key: FuturesTimeframe.Hourly, value: 'H' },\r\n { key: FuturesTimeframe.Daily, value: 'D' },\r\n { key: FuturesTimeframe.Weekly, value: 'W' },\r\n { key: FuturesTimeframe.Monthly, value: 'M' },\r\n ],\r\n }\r\n\r\n var currencies = {\r\n active: this.state.activeCurrency,\r\n currencies: CURRENCIES_LIST,\r\n link: (activeCurrency: string) =>\r\n '/crypto_charts.ashx?' + encodeQueryString({ ...decodeQueryString(), t: undefined, c: activeCurrency }),\r\n }\r\n\r\n const isRedesignEnabled = FinvizSettings.hasRedesignEnabled\r\n const MenuComponent = isRedesignEnabled ? MenuNew : Menu\r\n\r\n return (\r\n \r\n \r\n \r\n this.setState(getChartsState({ dateRange }))}\r\n />\r\n \r\n \r\n {isDetailOpen && (\r\n \r\n )}\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default CryptoCharts\r\n","// TODO use one from forex\r\nimport * as d3 from 'd3'\r\nimport { CSSProperties, Component, MouseEvent } from 'react'\r\n\r\nimport { forexDomains } from '../futures/utils'\r\nimport { generateColorScale as gcs } from '../futures/utils'\r\nimport { GradientDefinition } from '../shared/gradients'\r\n\r\nvar generateColorScale = gcs.bind(null, forexDomains)\r\nconst redesignEnabled = !!FinvizSettings.hasRedesignEnabled\r\n\r\nvar hexToRgba = (color: string, opacity: number) => {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(color) as string[],\r\n r = parseInt(result[1], 16),\r\n g = parseInt(result[2], 16),\r\n b = parseInt(result[3], 16)\r\n return `rgba(${r}, ${g}, ${b}, ${opacity})`\r\n}\r\n\r\ninterface Bar {\r\n label: string\r\n value: number\r\n link?: string\r\n}\r\n\r\ninterface BarChartProps {\r\n width: number\r\n period: 'd' | 'w' | 'm' | 'mtd' | 'q' | 'hy' | 'y' | 'ytd'\r\n data: Bar[]\r\n onClick?: (bar: Bar) => void\r\n gradient?: GradientDefinition\r\n activeCurrency: string\r\n}\r\n\r\nclass BarChart extends Component {\r\n render() {\r\n var bars = this.props.data\r\n var labels = bars.map(function (d) {\r\n return d.label\r\n })\r\n\r\n var barWidth = bars.length > 15 ? 45 : 55,\r\n labelHeight = 20,\r\n gap = 1,\r\n width = (barWidth + gap * 2) * bars.length,\r\n height = 220,\r\n halfHeight = (220 - labelHeight) / 2\r\n\r\n var y = d3\r\n .scaleLinear()\r\n .domain([0, Math.ceil(d3.max(bars, (d: any) => Math.abs(d.value))!)])\r\n .range([0, halfHeight])\r\n .nice(6)\r\n\r\n var yAxisTicks = y.ticks(6).filter((tick: any) => tick > 0)\r\n\r\n var x = d3\r\n .scaleBand()\r\n .domain(labels)\r\n .range([0, (barWidth + 2 * gap) * bars.length])\r\n\r\n var colorScale = generateColorScale(this.props.period, this.props.gradient)\r\n\r\n // so React won't reorder our elements\r\n bars = bars.slice().sort(function (a: Bar, b: Bar) {\r\n if (a.label < b.label) {\r\n return -1\r\n }\r\n if (a.label > b.label) {\r\n return 1\r\n }\r\n return 0\r\n })\r\n\r\n var header =\r\n {\r\n d: '1 Day',\r\n w: '1 Week',\r\n m: '1 Month',\r\n mtd: 'Month to date',\r\n q: '3 Month',\r\n hy: 'Half year',\r\n y: '1 Year',\r\n ytd: 'Year to Date',\r\n }[this.props.period] + ' Relative Performance'\r\n\r\n return (\r\n \r\n

\r\n {header}  [{this.props.activeCurrency}]\r\n

\r\n
\r\n {yAxisTicks.map((tick: any) => (\r\n \r\n
{tick.toFixed(2)}%
\r\n
\r\n ))}\r\n\r\n {yAxisTicks.map((tick: any) => (\r\n \r\n
-{tick.toFixed(2)}%
\r\n \r\n ))}\r\n\r\n {bars.map((bar) => {\r\n var height = Math.round(y(Math.abs(bar.value)))\r\n var color = colorScale(bar.value)\r\n var style: CSSProperties = {\r\n position: 'absolute',\r\n top: bar.value >= 0 ? halfHeight - height : halfHeight + labelHeight,\r\n left: x(bar.label),\r\n height: height,\r\n width: barWidth,\r\n background: hexToRgba(color, 0.2),\r\n ...(redesignEnabled && {\r\n borderTopRightRadius: bar.value >= 0 ? 2 : 0,\r\n borderTopLeftRadius: bar.value >= 0 ? 2 : 0,\r\n borderBottomRightRadius: bar.value >= 0 ? 0 : 2,\r\n borderBottomLeftRadius: bar.value >= 0 ? 0 : 2,\r\n }),\r\n }\r\n var valueStyle = {\r\n top: bar.value > 0 ? -14 : 'auto',\r\n bottom: bar.value < 0 ? -14 : 'auto',\r\n ...(!redesignEnabled && {\r\n color,\r\n }),\r\n }\r\n var labelStyle = {\r\n background: color,\r\n bottom: bar.value >= 0 ? -labelHeight : height,\r\n ...(redesignEnabled && {\r\n borderTopRightRadius: bar.value >= 0 ? 0 : 2,\r\n borderTopLeftRadius: bar.value >= 0 ? 0 : 2,\r\n borderBottomRightRadius: bar.value >= 0 ? 2 : 0,\r\n borderBottomLeftRadius: bar.value >= 0 ? 2 : 0,\r\n ...(bar.value === 0 && {\r\n borderRadius: 2,\r\n }),\r\n }),\r\n }\r\n return (\r\n \r\n
\r\n {bar.value.toFixed(2)}%\r\n
\r\n
\r\n {bar.label}\r\n
\r\n \r\n )\r\n })}\r\n \r\n
\r\n
\r\n \r\n )\r\n }\r\n\r\n _onClick = (row: Bar, e: MouseEvent) => {\r\n e.preventDefault()\r\n this.props.onClick && this.props.onClick(row)\r\n }\r\n}\r\n\r\nexport default BarChart\r\n","import * as React from 'react'\r\n\r\nimport { apiRequest } from '../../main/services/api'\r\nimport { decodeQueryString, encodeQueryString } from '../queryString'\r\nimport { redGreenGradient } from '../shared/gradients'\r\nimport BarChart from './barChart'\r\nimport MenuNew from './components/redesign/Menu'\r\nimport { CURRENCIES_LAYOUT, CURRENCIES_LIST, getActiveCurrency } from './currencyUtils'\r\nimport Menu from './menu'\r\nimport { PageType, TimeFrames } from './types'\r\n\r\ninterface CryptoPerformanceProps {\r\n rows: Record\r\n}\r\n\r\nfunction getCryptoPerformanceState(props: CryptoPerformanceProps) {\r\n return {\r\n rows: props.rows,\r\n activeCurrency: getActiveCurrency(decodeQueryString()),\r\n }\r\n}\r\n\r\nclass CryptoPerformance extends React.Component {\r\n declare refreshInterval: number\r\n\r\n state = getCryptoPerformanceState(this.props)\r\n\r\n componentDidMount() {\r\n this.refreshInterval = window.setInterval(async () => {\r\n const data = await apiRequest(`/api/crypto_perf.ashx${window.location.search}`)\r\n if (data) {\r\n this.setState((prevState) => ({ ...prevState, rows: data }))\r\n }\r\n }, 30 * 1000)\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.refreshInterval)\r\n }\r\n\r\n _getPerformanceRowsByActiveCurrency() {\r\n var activeLayoutTickers = CURRENCIES_LAYOUT[this.state.activeCurrency].flat(1)\r\n var strippedTickers = activeLayoutTickers.map((ticker) => ticker.replace(this.state.activeCurrency, ''))\r\n return Object.keys(this.state.rows)\r\n .filter((key) => strippedTickers.includes(key) || key === this.state.activeCurrency)\r\n .map((key) => ({\r\n label: key,\r\n value: this.state.rows[key],\r\n }))\r\n .sort((a, b) => b.value - a.value)\r\n }\r\n\r\n render() {\r\n var queryString = decodeQueryString()\r\n var view = queryString['v'] || '1'\r\n var kv = { d: 1, w: 2, m: 3, mtd: 8, q: 4, hy: 5, y: 6, ytd: 7 }\r\n var vk: Record = {}\r\n Object.keys(kv).forEach((key: any) => {\r\n vk[kv[key as keyof typeof kv].toString()] = key\r\n })\r\n\r\n var timeframes: TimeFrames = {\r\n link: (key) => '/crypto_performance.ashx?' + encodeQueryString({ ...queryString, v: kv[key] }),\r\n onClick: () => {},\r\n active: vk[view],\r\n timeframes: [\r\n { key: 'd', value: 'D', title: 'Day' },\r\n { key: 'w', value: 'W', title: 'Week' },\r\n { key: 'm', value: 'M', title: 'Month' },\r\n { key: 'mtd', value: 'MTD', title: 'Month to Date' },\r\n { key: 'q', value: 'Q', title: 'Quarter' },\r\n { key: 'hy', value: 'HY', title: 'Half Year' },\r\n { key: 'y', value: 'Y', title: 'Year' },\r\n { key: 'ytd', value: 'YTD', title: 'Year To Date' },\r\n ],\r\n }\r\n\r\n var currencies = {\r\n active: this.state.activeCurrency,\r\n currencies: CURRENCIES_LIST,\r\n link: (activeCurrency: string) => {\r\n const queryParams = encodeQueryString({ ...queryString, c: activeCurrency })\r\n return `/crypto_performance.ashx${queryParams.length > 0 ? '?' : ''}${queryParams}`\r\n },\r\n }\r\n\r\n const isRedesignEnabled = FinvizSettings.hasRedesignEnabled\r\n const MenuComponent = isRedesignEnabled ? MenuNew : Menu\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {}}\r\n period={vk[view]}\r\n activeCurrency={this.state.activeCurrency}\r\n {...(isRedesignEnabled && { gradient: redGreenGradient })}\r\n />\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default CryptoPerformance\r\n","import * as React from 'react'\r\n\r\nimport { Instrument } from '../../../../main/types'\r\nimport TilesStore from '../../../futures/stores/tilesStore'\r\nimport { cryptoDomains, generateColorScale } from '../../../futures/utils'\r\nimport { decodeQueryString, encodeQueryString } from '../../../queryString'\r\nimport ForexCryptoTile from '../../../shared/components/ForexCryptoTile'\r\nimport { redGreenGradient } from '../../../shared/gradients'\r\nimport * as hoverChart from '../../../shared/hover-chart'\r\n\r\ninterface TileProps {\r\n ticker: string\r\n hoverOffsetX: number\r\n hoverOffsetY: number\r\n}\r\n\r\nconst getTileState = (ticker: string) => {\r\n var tile = TilesStore.getTile(ticker)\r\n\r\n return {\r\n ...tile,\r\n }\r\n}\r\n\r\nconst colorScale = generateColorScale(cryptoDomains, 'd', redGreenGradient)\r\n\r\nexport default class Tile extends React.Component {\r\n state = getTileState(this.props.ticker)\r\n\r\n componentDidMount() {\r\n TilesStore.addChangeListener(this._onChange)\r\n }\r\n\r\n componentWillUnmount() {\r\n TilesStore.removeChangeListener(this._onChange)\r\n }\r\n\r\n _onChange = () => {\r\n this.setState(getTileState(this.props.ticker))\r\n }\r\n\r\n render() {\r\n var queryString = decodeQueryString()\r\n var { label, last, prevClose, change, high, low, sparkline, sparklineDateChanges } = this.state\r\n var { ticker, hoverOffsetX, hoverOffsetY } = this.props\r\n var format = (n: number) => (n >= 0 ? '+' : '') + n.toFixed(2) + '%'\r\n var places = last > 6 ? 2 : 4\r\n if (last < 0.001 && last > 0) {\r\n places = last < 0.0001 ? 8 : 7\r\n }\r\n\r\n var round = (n: number) => (+(Math.round(Number(n + 'e+' + places)) + 'e-' + places)).toFixed(places)\r\n var range = (high - low) * 0.1\r\n var highlightHigh = last > high - range\r\n var highlightLow = last < low + range\r\n let lastChange = round(last - prevClose)\r\n\r\n if (lastChange === 'NaN') {\r\n lastChange = (last - prevClose).toFixed(places)\r\n }\r\n\r\n const instrument = ticker === 'EURUSD' ? Instrument.Forex : Instrument.Crypto\r\n const link =\r\n instrument === Instrument.Crypto\r\n ? `/crypto_charts.ashx?` + encodeQueryString({ ...queryString, p: 'd1', t: ticker })\r\n : '/forex_charts.ashx?p=d1&t=' + ticker\r\n\r\n const chartImage = hoverChart.getHoverChartImg(\r\n '@' + ticker.toLowerCase(),\r\n false,\r\n Instrument.Crypto ? FinvizSettings.hoverCharts?.crypto?.timeframe : FinvizSettings.hoverCharts?.forex?.timeframe,\r\n Instrument.Crypto ? FinvizSettings.hoverCharts?.crypto?.dateRange : FinvizSettings.hoverCharts?.forex?.dateRange\r\n )\r\n\r\n const boxover = `cssbody=[hoverchart] cssheader=[tabchrthdr] body=[${chartImage.img}] offsetx=[${hoverOffsetX}] offsety=[${hoverOffsetY}] delay=[100]`\r\n\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import Tile from './Tile'\r\n\r\ninterface LayoutProps {\r\n activeLayout: Array\r\n}\r\n\r\nexport default function Layout({ activeLayout }: LayoutProps) {\r\n const flattenedLayout = activeLayout.flat()\r\n return (\r\n
\r\n {flattenedLayout.map((ticker, index) => (\r\n \r\n ))}\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { Component, MouseEvent } from 'react'\r\n\r\nimport { Instrument } from '../../main/types'\r\nimport Sparkline from '../futures/components/CanvasSparkline'\r\nimport RowsStore from '../futures/stores/rowsStore'\r\nimport TilesStore from '../futures/stores/tilesStore'\r\nimport { FuturesTile } from '../futures/types'\r\nimport { cryptoDomains } from '../futures/utils'\r\nimport { generateColorScale } from '../futures/utils'\r\nimport { decodeQueryString, encodeQueryString } from '../queryString'\r\nimport { redGreenGradient } from '../shared/gradients'\r\nimport * as hoverChart from '../shared/hover-chart'\r\nimport CryptoActionCreators from './actions/cryptoActionCreators'\r\nimport BarChart from './barChart'\r\nimport LayoutNew from './components/redesign/Layout'\r\nimport MenuNew from './components/redesign/Menu'\r\nimport { CURRENCIES_LAYOUT, CURRENCIES_LIST, TILE_WIDTH, getActiveCurrency } from './currencyUtils'\r\nimport Menu from './menu'\r\nimport { PageType, TileMap } from './types'\r\n\r\nvar colorScale = generateColorScale(cryptoDomains, 'd')\r\ninterface LayoutProps {\r\n activeLayout: Array\r\n}\r\n\r\nclass Layout extends Component {\r\n render() {\r\n const width = this.props.activeLayout[0].length * TILE_WIDTH + 16\r\n\r\n return (\r\n
\r\n {this.props.activeLayout.map((row, ri) => (\r\n
\r\n {row.map((ticker) => (\r\n \r\n ))}\r\n
\r\n
\r\n ))}\r\n
\r\n )\r\n }\r\n}\r\n\r\ninterface TileProps {\r\n ticker: string\r\n hoverOffsetX: string\r\n hoverOffsetY: string\r\n width: number\r\n}\r\n\r\nfunction getTileState(props: TileProps) {\r\n return TilesStore.getTile(props.ticker)\r\n}\r\n\r\nclass Tile extends Component {\r\n state = getTileState(this.props)\r\n\r\n componentDidMount() {\r\n TilesStore.addChangeListener(this._onChange)\r\n }\r\n\r\n componentWillUnmount() {\r\n TilesStore.removeChangeListener(this._onChange)\r\n }\r\n\r\n _onChange = () => {\r\n this.setState(getTileState(this.props))\r\n }\r\n\r\n render() {\r\n var queryString = decodeQueryString()\r\n var { ticker, label, last, prevClose, change, high, low, sparkline, sparklineDateChanges } = this.state\r\n var { hoverOffsetX, hoverOffsetY } = this.props\r\n var instrument = ticker === 'EURUSD' ? Instrument.Forex : Instrument.Crypto\r\n\r\n var format = (n: number) => (n >= 0 ? '+' : '') + n.toFixed(2) + '%'\r\n var places = last > 6 ? 2 : 4\r\n if (last < 0.001 && last > 0) {\r\n places = last < 0.0001 ? 8 : 7\r\n }\r\n\r\n var round = (n: number) => (+(Math.round(Number(n + 'e+' + places)) + 'e-' + places)).toFixed(places)\r\n var link =\r\n instrument === Instrument.Crypto\r\n ? `/crypto_charts.ashx?` + encodeQueryString({ ...queryString, p: 'd1', t: ticker })\r\n : '/forex_charts.ashx?p=d1&t=' + ticker\r\n\r\n const chartImage = hoverChart.getHoverChartImg(\r\n '@' + ticker.toLowerCase(),\r\n false,\r\n instrument === Instrument.Crypto\r\n ? FinvizSettings.hoverCharts?.crypto?.timeframe\r\n : FinvizSettings.hoverCharts?.forex?.timeframe,\r\n instrument === Instrument.Crypto\r\n ? FinvizSettings.hoverCharts?.crypto?.dateRange\r\n : FinvizSettings.hoverCharts?.forex?.dateRange\r\n )\r\n\r\n const boxover = `cssbody=[hoverchart] cssheader=[tabchrthdr] body=[${chartImage.img}] offsetx=[${hoverOffsetX}] offsety=[${hoverOffsetY}] delay=[100]`\r\n\r\n var color = colorScale(change)\r\n\r\n var range = (high - low) * 0.1\r\n var highlightHigh = last > high - range\r\n var highlightLow = last < low + range\r\n var highlightStyle = {\r\n background: '#fbdb19',\r\n color: '#3e424f',\r\n }\r\n\r\n var opacityChange = Math.min(Math.abs(change), 1)\r\n var textOpacity = 0.5 + (0.2 / 1) * opacityChange\r\n var highLowStyle = { color: `rgba(255, 255, 255, ${textOpacity})` }\r\n\r\n var changeAbsolute = round(last - prevClose)\r\n\r\n if (changeAbsolute === 'NaN') {\r\n changeAbsolute = (last - prevClose).toFixed(places)\r\n }\r\n\r\n return (\r\n \r\n
\r\n {label}\r\n {round(last)}\r\n \r\n {format(change)}\r\n \r\n {changeAbsolute.replace('-', '')}\r\n \r\n
\r\n
\r\n H {round(high)}\r\n
\r\n
\r\n L {round(low)}\r\n
\r\n
\r\n \r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nfunction getCryptoQuotesState() {\r\n return {\r\n tiles: TilesStore.getTiles(),\r\n activeCurrency: getActiveCurrency(decodeQueryString()),\r\n }\r\n}\r\n\r\ninterface CryptoQuotesState {\r\n tiles: Record\r\n activeCurrency: string\r\n}\r\n\r\nclass CryptoQuotes extends Component {\r\n state = getCryptoQuotesState()\r\n\r\n componentDidMount() {\r\n TilesStore.addChangeListener(this._onChange)\r\n }\r\n\r\n componentWillUnmount() {\r\n TilesStore.removeChangeListener(this._onChange)\r\n }\r\n\r\n _onChange = () => {\r\n this.setState((prevState) => ({\r\n ...getCryptoQuotesState(),\r\n activeCurrency: prevState.activeCurrency,\r\n }))\r\n }\r\n\r\n _getPerformanceRowsByActiveCurrency() {\r\n var tiles = this.state.tiles as TileMap\r\n let relativePerf: Record = { [this.state.activeCurrency]: 0 }\r\n var activeLayout = CURRENCIES_LAYOUT[this.state.activeCurrency]\r\n var activeLayoutTickers = activeLayout.flat(1)\r\n Object.keys(tiles)\r\n .filter((ticker) => activeLayoutTickers.includes(ticker))\r\n .forEach((ticker) => {\r\n var tile = tiles[ticker]\r\n var inverse = ticker.startsWith(this.state.activeCurrency)\r\n relativePerf[ticker.replace(this.state.activeCurrency, '')] =\r\n (inverse ? tile.prevClose / tile.last - 1 : tile.last / tile.prevClose - 1) * 100 // todo round\r\n })\r\n\r\n return Object.keys(relativePerf)\r\n .map((key) => ({\r\n label: key,\r\n value: relativePerf[key],\r\n }))\r\n .sort((a, b) => b.value - a.value)\r\n }\r\n\r\n render() {\r\n var timeframes = {\r\n link: () => '#',\r\n onClick: (timeframe: string, e: MouseEvent) => {\r\n e.preventDefault()\r\n CryptoActionCreators.changeTimeframe(timeframe)\r\n },\r\n active: RowsStore.getTimeframe(),\r\n timeframes: [\r\n { key: 'i5', value: '5M' },\r\n { key: 'h', value: 'H' },\r\n { key: 'd', value: 'D' },\r\n { key: 'w', value: 'W' },\r\n { key: 'm', value: 'M' },\r\n ],\r\n }\r\n\r\n var currencies = {\r\n active: this.state.activeCurrency,\r\n currencies: CURRENCIES_LIST,\r\n link: (activeCurrency: string) =>\r\n '/crypto.ashx?' + encodeQueryString({ ...decodeQueryString(), c: activeCurrency }),\r\n }\r\n\r\n const isRedesignEnabled = FinvizSettings.hasRedesignEnabled\r\n const MenuComponent = isRedesignEnabled ? MenuNew : Menu\r\n const LayoutComponent = isRedesignEnabled ? LayoutNew : Layout\r\n\r\n return (\r\n
\r\n \r\n \r\n {!isRedesignEnabled && (\r\n <>\r\n
\r\n
\r\n \r\n )}\r\n\r\n {/* Performance chart */}\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default CryptoQuotes\r\n","import { CHART_ELEMENT_ID } from 'finviz-charts/app/constants/common'\r\nimport { Suspense } from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport ReactDOMClient from 'react-dom/client'\r\nimport { BrowserRouter } from 'react-router-dom'\r\n\r\nimport { NotificationWrapper } from '../../main/components/notification'\r\nimport { SpecificChartFunctionality } from '../../main/constants'\r\nimport { ResizableChartLayoutWithGlobalState } from '../shared/components/ResizableChartLayoutWithGlobalState'\r\nimport { ready } from '../shared/ready'\r\nimport { parseInitData } from '../shared/utils'\r\nimport CryptoActionCreators from './actions/cryptoActionCreators'\r\nimport CryptoCharts from './charts'\r\nimport CryptoPerformance from './performance'\r\nimport CryptoQuotes from './quotes'\r\nimport { TileMap } from './types'\r\n\r\nwindow['FinvizInitCrypto'] = function (tiles: TileMap) {\r\n CryptoActionCreators.initTiles(tiles)\r\n const rootEl = document.getElementById('crypto')\r\n const root = ReactDOMClient.createRoot(rootEl!)\r\n root.render()\r\n\r\n setInterval(CryptoActionCreators.update, 30 * 1000)\r\n}\r\n\r\nwindow['FinvizInitCryptoPerformance'] = function (rows: Record) {\r\n const rootEl = document.getElementById('futures')\r\n const root = ReactDOMClient.createRoot(rootEl!)\r\n root.render()\r\n}\r\n\r\nwindow['FinvizInitCryptoCharts'] = function () {\r\n const cryptoEl = document.getElementById('crypto')\r\n const dataEl = document.getElementById('crypto-init-data')\r\n if (!cryptoEl || !dataEl) return\r\n\r\n try {\r\n const initData = parseInitData('crypto-init-data')\r\n CryptoActionCreators.update(initData)\r\n } catch {\r\n return\r\n }\r\n\r\n const root = ReactDOMClient.createRoot(cryptoEl)\r\n\r\n root.render(\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nready(function () {\r\n const cryptoEl = document.getElementById('crypto')\r\n const chartEl = document.getElementById(CHART_ELEMENT_ID)\r\n const dataEl = document.getElementById('crypto-init-data')\r\n\r\n if (!cryptoEl || !chartEl || !dataEl || !window.globalChartConfig) return\r\n\r\n try {\r\n const initData = parseInitData('crypto-init-data')\r\n CryptoActionCreators.update(initData)\r\n } catch {\r\n return\r\n }\r\n\r\n const root = ReactDOMClient.createRoot(chartEl)\r\n\r\n root.render(\r\n \r\n \r\n {ReactDOM.createPortal(, cryptoEl)}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n})\r\n","import classNames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport { Component, createRef } from 'react'\r\n\r\nimport { isFirefoxDesktop } from '../../shared/isMobile'\r\nimport { retinafy } from '../../shared/retinafy'\r\n\r\nconst X_AXIS_TICK_OFFSET = 1\r\nconst xCache: Record> = {}\r\n\r\ninterface CanvasSparklineProps {\r\n className?: string\r\n data: number[]\r\n dateChanges: Record\r\n width: number\r\n height: number\r\n changeDomain: number\r\n change: number\r\n changeOpacity?: boolean\r\n shadow?: boolean\r\n lineColor?: string\r\n textColor?: string\r\n hasStickyLabels?: boolean\r\n}\r\n\r\nclass CanvasSparkline extends Component {\r\n static defaultProps = {\r\n changeOpacity: true,\r\n }\r\n\r\n private readonly canvas = createRef()\r\n declare private canvasContext: CanvasRenderingContext2D\r\n\r\n shouldComponentUpdate(nextProps: CanvasSparklineProps) {\r\n // eslint-disable-next-line eqeqeq\r\n return nextProps.data != this.props.data || nextProps.width !== this.props.width\r\n }\r\n\r\n componentDidMount() {\r\n this.canvasContext = this.canvas.current!.getContext(\r\n '2d',\r\n isFirefoxDesktop() ? { willReadFrequently: true } : undefined\r\n )!\r\n this._renderCanvas()\r\n }\r\n\r\n componentDidUpdate() {\r\n this._renderCanvas()\r\n }\r\n\r\n render() {\r\n const { width, height, className } = this.props\r\n return \r\n }\r\n\r\n private _renderXAxisLabels = (x: d3.ScaleLinear) => {\r\n const { dateChanges, width, height, hasStickyLabels } = this.props\r\n const keys = Object.keys(dateChanges)\r\n keys.forEach((key, index) => {\r\n const text = dateChanges[key]\r\n const metrics = this.canvasContext.measureText(text)\r\n const textWidth = metrics.width\r\n let xPos = x(Number(key))\r\n\r\n if (index === keys.length - 1) {\r\n const rightBound = ~~(width - textWidth / 2)\r\n\r\n if (hasStickyLabels) {\r\n xPos = Math.min(rightBound - X_AXIS_TICK_OFFSET, xPos)\r\n } else if (xPos > rightBound) {\r\n return\r\n }\r\n } else if (index === 0) {\r\n const leftBound = ~~(textWidth / 2)\r\n\r\n if (hasStickyLabels) {\r\n xPos = Math.max(leftBound + X_AXIS_TICK_OFFSET, xPos)\r\n } else if (xPos < leftBound) {\r\n return\r\n }\r\n }\r\n\r\n this.canvasContext.fillText(text, xPos, height - 1)\r\n })\r\n }\r\n\r\n private _renderCanvas = () => {\r\n const { data, width, height, changeOpacity, shadow, lineColor, textColor, changeDomain, change } = this.props\r\n\r\n retinafy(this.canvas.current, this.canvasContext, width, height)\r\n\r\n // TODO check ci sa zobrazuje posledny den\r\n const xCacheKey = `${width}|${data.length}`\r\n let x = xCache[xCacheKey]\r\n if (!x) {\r\n x = d3\r\n .scaleLinear()\r\n .range([-1, width + 1])\r\n .domain([0, data.length])\r\n xCache[xCacheKey] = x\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height - 8, 0])\r\n .domain(d3.extent(data, (d) => d) as [number, number])\r\n\r\n const opacityChange = Math.min(Math.abs(change), changeDomain)\r\n const textOpacity = changeOpacity ? (0.5 + (0.2 / changeDomain) * opacityChange).toFixed(3) : 1\r\n\r\n this.canvasContext.clearRect(0, 0, width, height)\r\n\r\n if (shadow) {\r\n this.canvasContext.translate(0.5, 0.5)\r\n\r\n this.canvasContext.strokeStyle = 'rgba(34, 38, 47, 0.8)'\r\n this.canvasContext.beginPath()\r\n for (let i = 0; i < data.length; i++) {\r\n this.canvasContext.lineTo(x(i), y(data[i]))\r\n }\r\n this.canvasContext.stroke()\r\n\r\n this.canvasContext.fillStyle = 'rgba(34, 38, 47, 0.8)'\r\n this.canvasContext.textAlign = 'center'\r\n this.canvasContext.font = '7px Lato'\r\n this._renderXAxisLabels(x)\r\n\r\n this.canvasContext.translate(-0.5, -0.5)\r\n }\r\n\r\n this.canvasContext.strokeStyle = lineColor ?? `rgba(255, 255, 255, ${textOpacity})`\r\n this.canvasContext.beginPath()\r\n for (let i = 0; i < data.length; i++) {\r\n this.canvasContext.lineTo(x(i), y(data[i]))\r\n }\r\n this.canvasContext.stroke()\r\n\r\n this.canvasContext.fillStyle = textColor ?? `rgba(255, 255, 255, ${textOpacity})`\r\n this.canvasContext.textAlign = 'center'\r\n this.canvasContext.font = '7px Lato'\r\n this._renderXAxisLabels(x)\r\n }\r\n}\r\n\r\nexport default CanvasSparkline\r\n","import keyMirror from 'keymirror'\r\n\r\nexport const ActionTypes = keyMirror({\r\n INIT: null,\r\n INIT_TILES: null,\r\n\r\n UPDATE_DATA: null,\r\n\r\n CHANGE_TIMEFRAME_STARTED: null,\r\n CHANGE_TIMEFRAME_COMPLETED: null,\r\n CHANGE_TIMEFRAME_FAILED: null,\r\n})\r\n\r\nexport const PayloadSources = keyMirror({\r\n SERVER_ACTION: null,\r\n VIEW_ACTION: null,\r\n})\r\n","import { Dispatcher } from 'flux'\r\n\r\nimport { PayloadSources } from '../constants/constants'\r\n\r\nclass AppDispatcher extends Dispatcher {\r\n handleServerAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.SERVER_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n\r\n handleViewAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.VIEW_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n}\r\n\r\nconst dispatcher = new AppDispatcher()\r\nexport default dispatcher\r\n","import { ActionTypes } from '../constants/constants'\r\nimport AppDispatcher from '../dispatcher/appDispatcher'\r\nimport { Contract, FuturesDatum, FuturesTile } from '../types'\r\nimport Store from './store'\r\n\r\nfunction getRows(tiles: Record) {\r\n return Object.values(tiles)\r\n .map(function (tile) {\r\n return {\r\n label: tile.label,\r\n value: tile.change,\r\n }\r\n })\r\n .sort(function (a, b) {\r\n return b.value - a.value\r\n })\r\n}\r\n\r\nvar _timeframe = 'i5'\r\nvar _rows: ReturnType = []\r\nclass RowsStore extends Store {\r\n getTimeframe() {\r\n return _timeframe\r\n }\r\n\r\n getRows() {\r\n return _rows\r\n }\r\n}\r\nvar rowsStore = new RowsStore()\r\n\r\n// @ts-ignore\r\nrowsStore.dispatchToken = AppDispatcher.register(function (payload) {\r\n var action = payload.action\r\n\r\n switch (action.type) {\r\n case ActionTypes.INIT:\r\n var _tiles: Record = {}\r\n action.rows.forEach((group: FuturesDatum) => {\r\n group.contracts.forEach((contract: Contract) => {\r\n _tiles[contract.ticker] = contract\r\n })\r\n })\r\n\r\n _rows = getRows(_tiles)\r\n if (action.timeframe) {\r\n _timeframe = action.timeframe\r\n }\r\n rowsStore.emitChange()\r\n break\r\n\r\n case ActionTypes.CHANGE_TIMEFRAME_STARTED:\r\n _timeframe = action.period\r\n rowsStore.emitChange()\r\n break\r\n\r\n case ActionTypes.UPDATE_DATA:\r\n _rows = getRows(action.tiles)\r\n rowsStore.emitChange()\r\n break\r\n }\r\n})\r\n\r\nexport default rowsStore\r\n","import { EventEmitter } from 'events'\r\n\r\nclass Store extends EventEmitter {\r\n static CHANGE_EVENT = 'change'\r\n\r\n emitChange() {\r\n this.emit(Store.CHANGE_EVENT)\r\n }\r\n\r\n addChangeListener(callback: (...args: any[]) => void) {\r\n this.on(Store.CHANGE_EVENT, callback)\r\n }\r\n\r\n removeChangeListener(callback: (...args: any[]) => void) {\r\n this.removeListener(Store.CHANGE_EVENT, callback)\r\n }\r\n}\r\n\r\nexport default Store\r\n","import { ActionTypes } from '../constants/constants'\r\nimport AppDispatcher from '../dispatcher/appDispatcher'\r\nimport { Contract, FuturesDatum, FuturesTile } from '../types'\r\nimport Store from './store'\r\n\r\nvar _tilesGroups: Record = {}\r\nvar _tiles: Record = {}\r\nvar _tileOrder: string[] = []\r\nclass TilesStore extends Store {\r\n getTiles() {\r\n return _tiles\r\n }\r\n\r\n getTilesList() {\r\n return Object.keys(_tiles)\r\n .map(function (key) {\r\n return _tiles[key]\r\n })\r\n .sort((a, b) => _tileOrder.indexOf(a.ticker) - _tileOrder.indexOf(b.ticker))\r\n }\r\n\r\n getTile(ticker: string) {\r\n return _tiles[ticker]\r\n }\r\n\r\n getTilesGroup(ticker: string) {\r\n return _tilesGroups[ticker]\r\n }\r\n\r\n getTilesInGroup(group: string) {\r\n var g = group.toUpperCase()\r\n return this.getTilesList().filter((tile) => _tilesGroups[tile.ticker] === g)\r\n }\r\n}\r\nvar tilesStore = new TilesStore()\r\ntilesStore.setMaxListeners(50)\r\n\r\n// @ts-ignore\r\ntilesStore.dispatchToken = AppDispatcher.register(function (payload) {\r\n var action = payload.action\r\n\r\n switch (action.type) {\r\n case ActionTypes.INIT:\r\n var groups = action.rows\r\n groups.forEach((group: FuturesDatum) => {\r\n group.contracts.forEach((contract: Contract) => {\r\n _tiles[contract.ticker] = contract\r\n _tilesGroups[contract.ticker] = group.ticker\r\n _tileOrder.push(contract.ticker)\r\n })\r\n })\r\n tilesStore.emitChange()\r\n break\r\n\r\n case ActionTypes.INIT_TILES:\r\n _tiles = action.tiles\r\n tilesStore.emitChange()\r\n break\r\n\r\n case ActionTypes.UPDATE_DATA:\r\n var tiles = action.tiles\r\n _tiles = tiles\r\n tilesStore.emitChange()\r\n break\r\n }\r\n})\r\n\r\nexport default tilesStore\r\n","export interface Contract {\r\n label: string\r\n ticker: string\r\n last: number\r\n change: number\r\n prevClose: number\r\n high: number\r\n low: number\r\n sparkline: number[]\r\n sparklineDateChanges: Record\r\n}\r\n\r\nexport interface FuturesDatum {\r\n ticker: string\r\n label: string\r\n contracts: Contract[]\r\n}\r\n\r\nexport interface FuturesTile {\r\n change: number\r\n high: number\r\n label: string\r\n last: number\r\n low: number\r\n prevClose: number\r\n sparkline: number[]\r\n sparklineDateChanges: Record\r\n ticker: string\r\n}\r\n\r\nexport interface FuturesRow {\r\n ticker: string\r\n label: string\r\n group: string\r\n perf: number\r\n}\r\n\r\nexport enum PageType {\r\n Quotes = 'quotes',\r\n Performance = 'performance',\r\n Charts = 'charts',\r\n}\r\n\r\nexport enum FuturesTimeframe {\r\n None = 'NO',\r\n Minute5 = 'i5',\r\n Hourly = 'h',\r\n Daily = 'd',\r\n Weekly = 'w',\r\n Monthly = 'm',\r\n}\r\n\r\nexport enum LayoutType {\r\n Old = 'old',\r\n NewHorizontal = 'new',\r\n NewGroups = 'new_groups',\r\n}\r\n\r\nexport enum LabelStyle {\r\n None = 'none',\r\n Plain = 'plain',\r\n PlainColor = 'plain_color',\r\n Side = 'side',\r\n SideColor = 'side_color',\r\n Line = 'line',\r\n LineWithEnding = 'lineWithEnding',\r\n}\r\n\r\nexport enum TileStyle {\r\n Map = 'map',\r\n MapCondensed = 'mapCondensed',\r\n BorderTile = 'borderTile',\r\n}\r\n","import * as d3 from 'd3'\r\n\r\nvar redGreenGradient = {\r\n colors: [\r\n '#fd0001',\r\n '#fd0101',\r\n '#fc0101',\r\n '#fa0101',\r\n '#f90103',\r\n '#f70203',\r\n '#f60203',\r\n '#f40204',\r\n '#f20304',\r\n '#f10304',\r\n '#ef0404',\r\n '#ee0405',\r\n '#ec0405',\r\n '#ea0505',\r\n '#e80505',\r\n '#e70506',\r\n '#e50606',\r\n '#e30706',\r\n '#e20706',\r\n '#e00807',\r\n '#df0708',\r\n '#dd0808',\r\n '#db0808',\r\n '#d90809',\r\n '#d80909',\r\n '#d60909',\r\n '#d40a09',\r\n '#d30a0a',\r\n '#d10a0a',\r\n '#cf0a0a',\r\n '#ce0b0b',\r\n '#cc0b0b',\r\n '#cb0c0b',\r\n '#c90b0c',\r\n '#c70c0c',\r\n '#c60c0c',\r\n '#c40c0d',\r\n '#c20d0d',\r\n '#c10e0e',\r\n '#bf0e0e',\r\n '#be0e0e',\r\n '#bc0f0f',\r\n '#ba0f0f',\r\n '#b90f10',\r\n '#b71010',\r\n '#b51010',\r\n '#b41010',\r\n '#b21111',\r\n '#b11111',\r\n '#af1111',\r\n '#ad1112',\r\n '#ab1212',\r\n '#aa1212',\r\n '#a81313',\r\n '#a61313',\r\n '#a51313',\r\n '#a31413',\r\n '#a21414',\r\n '#a01514',\r\n '#9e1414',\r\n '#9d1515',\r\n '#9b1616',\r\n '#9a1616',\r\n '#981616',\r\n '#961716',\r\n '#951717',\r\n '#931717',\r\n '#911818',\r\n '#8f1818',\r\n '#8e1818',\r\n '#8d1919',\r\n '#8b1919',\r\n '#8a1a1a',\r\n '#881a19',\r\n '#861b1a',\r\n '#841b1b',\r\n '#831b1b',\r\n '#811c1b',\r\n '#801c1b',\r\n '#7e1c1c',\r\n '#7c1d1c',\r\n '#7a1d1d',\r\n '#791d1d',\r\n '#781d1e',\r\n '#761e1e',\r\n '#741f1e',\r\n '#721f1e',\r\n '#711f1f',\r\n '#6f1f1f',\r\n '#6e1f20',\r\n '#6c1f20',\r\n '#6a2020',\r\n '#682020',\r\n '#682221',\r\n '#662222',\r\n '#652222',\r\n '#622323',\r\n '#612223',\r\n '#602323',\r\n '#5e2323',\r\n '#5c2424',\r\n '#5a2425',\r\n '#582424',\r\n '#572525',\r\n '#552525',\r\n '#542626',\r\n '#522627',\r\n '#502626',\r\n '#4e2627',\r\n '#4d2727',\r\n '#4b2728',\r\n '#4a2828',\r\n '#482828',\r\n '#462929',\r\n '#452929',\r\n '#432929',\r\n '#422a29',\r\n '#40292a',\r\n '#3f2a2a',\r\n '#3d2b2b',\r\n '#3b2b2b',\r\n '#3a2b2c',\r\n '#372c2c',\r\n '#362c2c',\r\n '#352d2c',\r\n '#332d2d',\r\n '#312d2e',\r\n '#302e2e',\r\n '#2f2f2f',\r\n '#2e312f',\r\n '#2f322e',\r\n '#2e332e',\r\n '#2e342d',\r\n '#2d372d',\r\n '#2c372c',\r\n '#2d392c',\r\n '#2c3a2b',\r\n '#2b3b2c',\r\n '#2b3d2c',\r\n '#2b3e2b',\r\n '#2a3f2a',\r\n '#2a412a',\r\n '#29432a',\r\n '#294429',\r\n '#294529',\r\n '#284728',\r\n '#284828',\r\n '#284a27',\r\n '#284b27',\r\n '#274d27',\r\n '#264e27',\r\n '#265026',\r\n '#265126',\r\n '#265326',\r\n '#255425',\r\n '#245625',\r\n '#245725',\r\n '#245825',\r\n '#245a24',\r\n '#245b24',\r\n '#245d24',\r\n '#235e23',\r\n '#236023',\r\n '#226123',\r\n '#226322',\r\n '#226421',\r\n '#216621',\r\n '#216721',\r\n '#216821',\r\n '#206920',\r\n '#1f6b20',\r\n '#1f6d1f',\r\n '#1f6f1f',\r\n '#1e701f',\r\n '#1e711e',\r\n '#1d721e',\r\n '#1d741e',\r\n '#1e751e',\r\n '#1d771e',\r\n '#1d781d',\r\n '#1d7a1d',\r\n '#1c7c1c',\r\n '#1c7d1c',\r\n '#1b7e1c',\r\n '#1b801b',\r\n '#1a811b',\r\n '#1a821b',\r\n '#1a841a',\r\n '#1a851b',\r\n '#198719',\r\n '#198819',\r\n '#188919',\r\n '#188b18',\r\n '#188d18',\r\n '#178e18',\r\n '#168f17',\r\n '#169117',\r\n '#179217',\r\n '#169316',\r\n '#159416',\r\n '#159616',\r\n '#159815',\r\n '#159914',\r\n '#149b14',\r\n '#139c14',\r\n '#139e13',\r\n '#129f13',\r\n '#12a013',\r\n '#12a213',\r\n '#12a312',\r\n '#11a411',\r\n '#10a611',\r\n '#10a711',\r\n '#10a911',\r\n '#10ab11',\r\n '#0fac11',\r\n '#0fae10',\r\n '#0faf10',\r\n '#0fb00f',\r\n '#0eb20f',\r\n '#0eb30e',\r\n '#0eb40e',\r\n '#0db60e',\r\n '#0cb70d',\r\n '#0cb90d',\r\n '#0cbb0c',\r\n '#0bbc0d',\r\n '#0bbe0c',\r\n '#0bbf0c',\r\n '#0ac00b',\r\n '#0ac10b',\r\n '#0ac30a',\r\n '#0ac40a',\r\n '#09c609',\r\n '#09c709',\r\n '#09c809',\r\n '#08ca08',\r\n '#07cb08',\r\n '#07cd08',\r\n '#07cf08',\r\n '#06d008',\r\n '#06d107',\r\n '#06d306',\r\n '#05d406',\r\n '#04d505',\r\n '#04d605',\r\n '#04d805',\r\n '#04d904',\r\n '#03da04',\r\n '#03dc03',\r\n '#03dd04',\r\n '#02df03',\r\n '#02e002',\r\n '#01e202',\r\n '#01e302',\r\n '#00e402',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\n\r\nvar futuresDomains = {\r\n d: 1.5,\r\n w: 2.5,\r\n m: 5,\r\n mtd: 5,\r\n q: 10,\r\n hy: 25,\r\n y: 30,\r\n ytd: 30,\r\n}\r\n\r\nvar forexDomains = {\r\n d: 1,\r\n w: 2.5,\r\n m: 5,\r\n mtd: 5,\r\n q: 10,\r\n hy: 10,\r\n y: 10,\r\n ytd: 10,\r\n}\r\n\r\nvar cryptoDomains = {\r\n d: 5, // TODO refine\r\n w: 2.5,\r\n m: 5,\r\n mtd: 5,\r\n q: 10,\r\n hy: 10,\r\n y: 10,\r\n ytd: 10,\r\n}\r\n\r\nvar generateColorScale = function (domains: Record, domainId: string, gradient = redGreenGradient) {\r\n var domain = {\r\n min: -domains[domainId],\r\n max: +domains[domainId],\r\n }\r\n\r\n var linearScale = d3\r\n .scaleLinear()\r\n .domain([domain.min, domain.max])\r\n .range([0, gradient.colors.length - 1])\r\n\r\n return function (value: number) {\r\n if (typeof value === 'undefined' || value === null) {\r\n return gradient.nullColor\r\n }\r\n\r\n if (value > domain.max) value = domain.max\r\n if (value < domain.min) value = domain.min\r\n\r\n var i = Math.round(linearScale(value))\r\n return gradient.colors[i]\r\n }\r\n}\r\n\r\nvar getCookie = function (name: string) {\r\n var re = new RegExp('(?:(?:^|.*;\\\\s*)' + name + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$')\r\n return document.cookie.replace(re, '$1')\r\n}\r\n\r\nexport const layout = [\r\n ['YM', 'ES', 'NQ', 'ER2', 'NKD', 'EX', 'DY', 'VX'],\r\n ['CL', 'QA', 'RB', 'HO', 'NG', 'ZK'],\r\n ['ZB', 'ZN'],\r\n ['CC', 'CT', 'JO', 'KC', 'LB', 'SB'],\r\n ['ZF', 'ZT'],\r\n ['GC', 'SI', 'PL', 'HG', 'PA'],\r\n ['LC', 'FC', 'LH'],\r\n ['ZS', 'ZM', 'ZL', 'ZC', 'ZW', 'ZR', 'ZO', 'RS'],\r\n ['DX', '6E', '6J', '6B', '6C', '6S', '6A', '6N'],\r\n]\r\n\r\nexport const groups = ['Indices', 'Energy', 'Bonds', 'Softs', 'Metals', 'Meats', 'Grains', 'Currencies'] as const\r\n\r\nexport { generateColorScale, futuresDomains, forexDomains, cryptoDomains, getCookie }\r\n","import classnames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nimport { useResizeObserver } from '../../../main/hooks/use-resize-observer'\r\nimport Sparkline from '../../futures/components/CanvasSparkline'\r\n\r\ninterface TileProps {\r\n sparklineDateChanges: Record\r\n sparkline: number[]\r\n label: string\r\n link: string\r\n boxover: string\r\n backgroundColor: string\r\n last: string\r\n high: string\r\n low: string\r\n change: string\r\n sparklineChange: number\r\n lastChange: string\r\n highlightHigh: boolean\r\n highlightLow: boolean\r\n extraMargin?: boolean\r\n className?: string\r\n}\r\n\r\nexport default function ForexCryptoTile({\r\n link,\r\n boxover,\r\n extraMargin,\r\n change,\r\n lastChange,\r\n label,\r\n highlightLow,\r\n highlightHigh,\r\n last,\r\n high,\r\n low,\r\n sparkline,\r\n sparklineChange,\r\n sparklineDateChanges,\r\n backgroundColor,\r\n className,\r\n}: TileProps) {\r\n const [width, setWidth] = React.useState(0)\r\n const containerRef = React.useRef(null)\r\n const ResizeObserver = useResizeObserver()\r\n const observerRef = React.useRef()\r\n\r\n React.useEffect(() => {\r\n const container = containerRef.current\r\n if (container && ResizeObserver) {\r\n setWidth(container.getBoundingClientRect().width)\r\n observerRef.current = new ResizeObserver(\r\n throttle(([entry]: ResizeObserverEntry[]) => {\r\n setWidth(entry.contentRect.width)\r\n }, 100)\r\n )\r\n observerRef.current.observe(container)\r\n }\r\n\r\n return () => {\r\n observerRef.current?.disconnect()\r\n }\r\n }, [ResizeObserver])\r\n\r\n return (\r\n \r\n
\r\n
\r\n
{label}
\r\n
\r\n {change}\r\n \r\n {lastChange}\r\n
\r\n
\r\n\r\n
\r\n
{last}
\r\n
\r\n \r\n \r\n H\r\n \r\n {high}\r\n
\r\n \r\n \r\n L\r\n \r\n {low}\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\n","import { ChartSettingsButton } from 'finviz-charts/app/controllers/chart-controls/settings-button'\r\n\r\nimport { Icon } from '../../../main/components/icon'\r\nimport { withSuspense } from '../../../main/services/async-modules-utils'\r\nimport { useChartLayoutGlobalModelAsync } from '../../charts-lib'\r\n\r\ninterface Props {\r\n isPremium: boolean\r\n}\r\n\r\nfunction ForexFuturesCryptoSettingsRaw({ isPremium }: Props) {\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n\r\n if (!chartLayoutModel) return null\r\n\r\n return (\r\n }\r\n model={chartLayoutModel}\r\n />\r\n )\r\n}\r\n\r\n// charts bundle may not be fetched and therefore withSuspense is undefined but on those pages components in this file are not used at all\r\nexport const ForexFuturesCryptoSettings = withSuspense?.(ForexFuturesCryptoSettingsRaw)\r\n","import * as React from 'react'\r\nimport { useLocation, useNavigate, useSearchParams } from 'react-router-dom'\r\n\r\nimport {\r\n CUSTOM_DATE_RANGE,\r\n CustomDateRange,\r\n TimeframeBar,\r\n daterangeUtm,\r\n generatePathForTimeframeDateRange,\r\n getDateRangeGroupsWithHref,\r\n getDefaultDateRangeAnchorDate,\r\n getTimeframeFromDateRange,\r\n timeframeUtm,\r\n useCustomDateRangeDialog,\r\n useFavoriteTimeframes,\r\n} from '../../../main/components/timeframe-bar'\r\nimport { SpecificChartFunctionality, TIMEFRAME } from '../../../main/constants'\r\nimport { useTrackPageView } from '../../../main/hooks/use-track-pageview'\r\nimport { Instrument } from '../../../main/types'\r\nimport { StockDetailTimeframeBar, getTimeframeGroupsWithHref } from '../../charts-lib'\r\nimport { encodeQueryString } from '../../queryString'\r\n\r\nconst IMAGE_SELECTOR = '.charts-gal'\r\n\r\nfunction updateUrlString(urlString: string, query: Record) {\r\n const url = new URL(urlString)\r\n\r\n Object.keys(query).forEach((key: keyof typeof query) => {\r\n const value = query[key]\r\n if (value === undefined) {\r\n url.searchParams.delete(key)\r\n } else {\r\n url.searchParams.set(key, value)\r\n }\r\n })\r\n\r\n return url.toString()\r\n}\r\n\r\nfunction updateImageSrc(image: HTMLImageElement, query: Record) {\r\n image.src = updateUrlString(image.src, query)\r\n\r\n if (image.srcset) {\r\n image.srcset = image.srcset\r\n .split(', ')\r\n .map((dyna) => {\r\n const [url, rule] = dyna.trim().split(' ')\r\n return `${updateUrlString(url.trim(), query)} ${rule}`\r\n })\r\n .join(', ')\r\n }\r\n}\r\n\r\nfunction updateLinkhref(linkElement: HTMLAnchorElement | null, query: Record) {\r\n if (!linkElement) return\r\n\r\n linkElement.href = updateUrlString(linkElement.href, query)\r\n}\r\n\r\nfunction getPageTitle(isDetail?: boolean, pageType?: string, ticker?: string, timeframe?: string) {\r\n return [pageType, ticker, isDetail ? 'Chart' : 'Charts', timeframe].filter(Boolean).join(' ')\r\n}\r\n\r\nexport function FuturesForexCryptoTimeframeBar({\r\n isDetail = false,\r\n title,\r\n group,\r\n specificChartFunctionality,\r\n instrument,\r\n onTimeframeChange,\r\n onDateRangeChange,\r\n}: {\r\n isDetail?: boolean\r\n title: string\r\n group?: string\r\n instrument: Instrument\r\n specificChartFunctionality: SpecificChartFunctionality\r\n onTimeframeChange?: (value: TIMEFRAME) => void\r\n onDateRangeChange?: (value: string | undefined) => void\r\n}) {\r\n useTrackPageView()\r\n const isPremium = true // Force show all timeframes for all users\r\n const navigate = useNavigate()\r\n const location = useLocation()\r\n const [searchParams] = useSearchParams()\r\n const query = React.useMemo(() => Object.fromEntries(searchParams) as { p: string; r?: string }, [searchParams])\r\n const { favoriteTimeframes, toggleFavoriteTimeframe } = useFavoriteTimeframes()\r\n const dateRange = query.r ?? undefined\r\n const { timeFrameGroups, dateRangeGroupsWithHref } = React.useMemo(() => {\r\n const timeFrameGroups = getTimeframeGroupsWithHref({\r\n isPremium,\r\n generatePath: (timeFrame) =>\r\n generatePathForTimeframeDateRange({\r\n isPremium,\r\n pathname: location.pathname,\r\n timeframe: timeFrame.value,\r\n dateRange: null,\r\n utmCampaign: timeframeUtm[specificChartFunctionality],\r\n }),\r\n })\r\n const dateRangeGroupsWithHref = getDateRangeGroupsWithHref({\r\n isPremium,\r\n customRange: dateRange,\r\n isCustomAvailable: true,\r\n instrument,\r\n generatePath: (dateRange) =>\r\n generatePathForTimeframeDateRange({\r\n isPremium,\r\n pathname: window.location.pathname,\r\n timeframe: dateRange.timeframe!,\r\n dateRange: dateRange.value,\r\n utmCampaign: daterangeUtm[specificChartFunctionality],\r\n }),\r\n })\r\n\r\n return { timeFrameGroups, dateRangeGroupsWithHref }\r\n }, [isPremium, location.pathname, dateRange, instrument, specificChartFunctionality])\r\n\r\n const { onDialogSubmit, customDateRangeDialogState, handleDateRangeSelect } = useCustomDateRangeDialog({\r\n instrument,\r\n anchorDate: getDefaultDateRangeAnchorDate(),\r\n shouldReloadOnNavigate: false,\r\n pathGenerator: ({ dateRange, timeframe }) => ({\r\n pathname: window.location.pathname,\r\n search: new URLSearchParams({ ...query, p: timeframe, r: dateRange ?? '' }).toString(),\r\n }),\r\n })\r\n\r\n const handleTimeframeDateRangeChange = ({\r\n timeframe,\r\n dateRange,\r\n }: {\r\n timeframe: TIMEFRAME\r\n dateRange: string | undefined\r\n }) => {\r\n document.querySelectorAll(IMAGE_SELECTOR).forEach((image) => {\r\n updateImageSrc(image, { tf: timeframe, r: dateRange })\r\n updateLinkhref(image.closest('a'), { p: timeframe, r: dateRange })\r\n })\r\n onTimeframeChange?.(timeframe)\r\n onDateRangeChange?.(dateRange)\r\n }\r\n\r\n if (isDetail) {\r\n return (\r\n {\r\n document.title = getPageTitle(isDetail, title, group, timeframe.labelPageTitle ?? timeframe.label)\r\n onTimeframeChange?.(timeframe.value)\r\n }}\r\n onDateRangeSelect={(option) => {\r\n if (option && option.value !== CUSTOM_DATE_RANGE) {\r\n document.title = getPageTitle(isDetail, title, group, 'custom date range')\r\n }\r\n onDateRangeChange?.(option.value)\r\n }}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n toggleFavoriteTimeframe(timeframe.value)}\r\n selectedTimeframe={query.p ?? TIMEFRAME.d}\r\n timeFrameGroups={timeFrameGroups}\r\n onTimeframeSelect={(option) => {\r\n if (option.value === 'intraday') {\r\n // intraday option is only available for free users, and it redirects them to elite page\r\n return\r\n }\r\n document.title = getPageTitle(isDetail, title, group, option.labelPageTitle ?? option.label)\r\n navigate(`${location.pathname}?${encodeQueryString({ ...query, p: option.value })}`)\r\n handleTimeframeDateRangeChange({ timeframe: option.value, dateRange: undefined })\r\n }}\r\n selectedDateRange={query['r'] ?? null}\r\n dateRangeGroups={dateRangeGroupsWithHref}\r\n onDateRangeSelect={(option) => {\r\n handleDateRangeSelect(option, ({ timeframe, value: dateRange }) => {\r\n document.title = getPageTitle(isDetail, title, group, option.label)\r\n handleTimeframeDateRangeChange({ timeframe, dateRange })\r\n })\r\n }}\r\n onCustomDateRangeClick={() => {\r\n if (isPremium) customDateRangeDialogState.show()\r\n }}\r\n />\r\n {\r\n const value = dateRange ?? ''\r\n const timeframe = getTimeframeFromDateRange({\r\n dateRange: value,\r\n instrument: Instrument.Stock,\r\n anchorDate: getDefaultDateRangeAnchorDate(),\r\n isPremium: isPremium,\r\n })\r\n handleDateRangeSelect({ value, timeframe }, ({ timeframe, value }) => {\r\n document.title = getPageTitle(isDetail, title, group, 'custom date range')\r\n handleTimeframeDateRangeChange({ timeframe, dateRange: value || undefined })\r\n onDialogSubmit({ value, timeframe })\r\n })\r\n }}\r\n />\r\n \r\n )\r\n}\r\n","import { CHART_ELEMENT_ID, SpecificChartFunctionality } from 'finviz-charts/app/constants/common'\r\nimport {\r\n ChartLayoutWithGlobalState,\r\n type RootChartConfigObject,\r\n getChartLayoutSizeConfig,\r\n} from 'finviz-charts/app/lib-export'\r\n\r\nimport { getInitChartConfig } from '../getInitChartConfig'\r\n\r\ninterface ResizableChartLayoutWithGlobalStateProps {\r\n config: RootChartConfigObject\r\n specificChartFunctionality: SpecificChartFunctionality\r\n}\r\n\r\nexport const ResizableChartLayoutWithGlobalState = ({\r\n config,\r\n specificChartFunctionality,\r\n}: ResizableChartLayoutWithGlobalStateProps) => {\r\n const chartEl = document.getElementById(CHART_ELEMENT_ID)\r\n const chartConfig = getInitChartConfig(config)\r\n\r\n if (!chartConfig.specificChartFunctionality) {\r\n chartConfig.specificChartFunctionality = specificChartFunctionality\r\n }\r\n\r\n return (\r\n chartEl && (\r\n \r\n )\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport PropTypes from 'prop-types'\r\nimport { Component } from 'react'\r\n\r\ninterface SparklineProps {\r\n className?: string\r\n data: number[]\r\n width: number\r\n height: number\r\n}\r\n\r\nclass Sparkline extends Component {\r\n static propTypes = {\r\n width: PropTypes.number.isRequired,\r\n height: PropTypes.number.isRequired,\r\n data: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n }\r\n\r\n shouldComponentUpdate(nextProps: SparklineProps) {\r\n // eslint-disable-next-line eqeqeq\r\n return nextProps.data != this.props.data\r\n }\r\n\r\n render() {\r\n var data = this.props.data\r\n var x = d3.scaleLinear().range([0, this.props.width]).domain([0, data.length])\r\n\r\n var y = d3\r\n .scaleLinear()\r\n .range([this.props.height - 4, 0])\r\n .domain(d3.extent(data, (d) => d) as [number, number])\r\n\r\n var line = d3\r\n .line()\r\n .curve(d3.curveBasis)\r\n .x((d, i) => x(i))\r\n .y((d) => y(d))\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default Sparkline\r\n","import { type RootChartConfigObject, Utils, convertTa } from '../charts-lib'\r\n\r\nexport function getInitChartConfig(initialConfig: RootChartConfigObject, initialTA = FinvizSettings.TA) {\r\n const config: RootChartConfigObject = JSON.parse(JSON.stringify(initialConfig))\r\n\r\n config.scrollable = config.editable || !Utils.isMobile()\r\n\r\n if (initialTA) {\r\n const COTs = FinvizSettings.COTs\r\n convertTa.mergeChartAndTAConfig(config, initialTA, COTs ? { COTs } : undefined)\r\n }\r\n\r\n return config\r\n}\r\n","import { ScaleId } from '../maps/types'\r\n\r\nexport interface GradientDefinition {\r\n colors: string[]\r\n nullColor: string\r\n}\r\n\r\nconst redGreenGradientSmall = {\r\n colors: [\r\n '#e01427',\r\n '#ce252b',\r\n '#bb2f30',\r\n '#aa3534',\r\n '#993938',\r\n '#853c3c',\r\n '#743d3f',\r\n '#414554',\r\n '#3e5f50',\r\n '#3f704f',\r\n '#3f814d',\r\n '#3c924a',\r\n '#36a446',\r\n '#2bb642',\r\n '#12c93b',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\nexport const redGreenGradient = {\r\n colors: [\r\n '#f63538',\r\n '#ee373a',\r\n '#e6393b',\r\n '#df3a3d',\r\n '#d73c3f',\r\n '#ce3d41',\r\n '#c73e43',\r\n '#bf4045',\r\n '#b64146',\r\n '#ae4248',\r\n '#a5424a',\r\n '#9d434b',\r\n '#94444d',\r\n '#8b444e',\r\n '#824450',\r\n '#784551',\r\n '#6f4552',\r\n '#644553',\r\n '#5a4554',\r\n '#4f4554',\r\n '#414554',\r\n '#3f4c53',\r\n '#3d5451',\r\n '#3b5a50',\r\n '#3a614f',\r\n '#38694f',\r\n '#366f4e',\r\n '#35764e',\r\n '#347d4e',\r\n '#32844e',\r\n '#31894e',\r\n '#31904e',\r\n '#30974f',\r\n '#2f9e4f',\r\n '#2fa450',\r\n '#2faa51',\r\n '#2fb152',\r\n '#2fb854',\r\n '#30be56',\r\n '#30c558',\r\n '#30cc5a',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\nconst greenRedGradient = { colors: redGreenGradient.colors.slice().reverse(), nullColor: redGreenGradient.nullColor }\r\nconst redGradient = { colors: redGreenGradient.colors.slice(0, 22).reverse(), nullColor: redGreenGradient.nullColor }\r\nconst greenGradient = { colors: redGreenGradient.colors.slice(21), nullColor: redGreenGradient.nullColor }\r\nconst blueGradient = {\r\n colors: [\r\n '#3d4251',\r\n '#3d4250',\r\n '#3d4250',\r\n '#3e4251',\r\n '#3e4251',\r\n '#3d4350',\r\n '#3d4350',\r\n '#3d4350',\r\n '#3e4351',\r\n '#3e4350',\r\n '#3d4351',\r\n '#3d4352',\r\n '#3f4353',\r\n '#3f4353',\r\n '#3f4453',\r\n '#3f4554',\r\n '#3e4354',\r\n '#3e4354',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4555',\r\n '#3f4556',\r\n '#3f4457',\r\n '#3f4457',\r\n '#3f4457',\r\n '#3f4557',\r\n '#3f4657',\r\n '#3f4657',\r\n '#3f4657',\r\n '#3f4557',\r\n '#3e4557',\r\n '#3e4558',\r\n '#3f465a',\r\n '#3f4659',\r\n '#3f4759',\r\n '#3f4759',\r\n '#3f475a',\r\n '#3f4759',\r\n '#3f465a',\r\n '#3f465a',\r\n '#3f4759',\r\n '#3f475b',\r\n '#40475b',\r\n '#40475b',\r\n '#40465b',\r\n '#40465c',\r\n '#40465d',\r\n '#40485d',\r\n '#40485c',\r\n '#40475c',\r\n '#40465c',\r\n '#40465c',\r\n '#40465c',\r\n '#40485d',\r\n '#40485d',\r\n '#40485e',\r\n '#40485f',\r\n '#40495e',\r\n '#40495e',\r\n '#40485e',\r\n '#40485f',\r\n '#40495e',\r\n '#40485e',\r\n '#40485f',\r\n '#404960',\r\n '#404960',\r\n '#404860',\r\n '#404861',\r\n '#404a62',\r\n '#404962',\r\n '#404962',\r\n '#404a62',\r\n '#404a62',\r\n '#404861',\r\n '#404961',\r\n '#404a63',\r\n '#404a64',\r\n '#404a65',\r\n '#404b64',\r\n '#404b64',\r\n '#404a65',\r\n '#404a65',\r\n '#404a65',\r\n '#404a65',\r\n '#404b65',\r\n '#404b65',\r\n '#414c65',\r\n '#424c65',\r\n '#424b65',\r\n '#414b66',\r\n '#414b67',\r\n '#414b67',\r\n '#414c67',\r\n '#424b67',\r\n '#424c67',\r\n '#414c67',\r\n '#414b67',\r\n '#414c67',\r\n '#414c67',\r\n '#414c69',\r\n '#414c6a',\r\n '#414c6a',\r\n '#414c6a',\r\n '#414d6a',\r\n '#424e6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6b',\r\n '#414d6c',\r\n '#414e6c',\r\n '#414f6c',\r\n '#414e6c',\r\n '#414d6c',\r\n '#414d6c',\r\n '#414e6c',\r\n '#424e6d',\r\n '#424e6d',\r\n '#414f6d',\r\n '#424f6f',\r\n '#414e6f',\r\n '#414e6f',\r\n '#424f70',\r\n '#414f6f',\r\n '#414f6f',\r\n '#414f6f',\r\n '#414e6f',\r\n '#414e6f',\r\n '#414f6f',\r\n '#414f6f',\r\n '#414f71',\r\n '#414f72',\r\n '#425073',\r\n '#425173',\r\n '#415072',\r\n '#425173',\r\n '#425173',\r\n '#425173',\r\n '#415072',\r\n '#415072',\r\n '#415172',\r\n '#415173',\r\n '#415174',\r\n '#415174',\r\n '#415074',\r\n '#415074',\r\n '#415174',\r\n '#415074',\r\n '#415074',\r\n '#415074',\r\n '#415175',\r\n '#415275',\r\n '#425276',\r\n '#425277',\r\n '#415177',\r\n '#415177',\r\n '#425278',\r\n '#425378',\r\n '#415277',\r\n '#415378',\r\n '#415378',\r\n '#415277',\r\n '#415378',\r\n '#42537a',\r\n '#42537c',\r\n '#42537b',\r\n '#41537a',\r\n '#41527a',\r\n '#41537a',\r\n '#41547a',\r\n '#42547b',\r\n '#41547a',\r\n '#41547a',\r\n '#41547c',\r\n '#41547c',\r\n '#41557c',\r\n '#41557c',\r\n '#41557c',\r\n '#41557c',\r\n '#41557d',\r\n '#41547d',\r\n '#41547c',\r\n '#42557d',\r\n '#41557d',\r\n '#41557d',\r\n '#41557f',\r\n '#415580',\r\n '#41567f',\r\n '#41567f',\r\n '#415580',\r\n '#41567f',\r\n '#415580',\r\n '#415580',\r\n '#41557f',\r\n '#415680',\r\n '#415680',\r\n '#415680',\r\n '#415681',\r\n '#415681',\r\n '#415781',\r\n '#415781',\r\n '#415681',\r\n '#415781',\r\n '#415781',\r\n '#415781',\r\n '#415782',\r\n '#415784',\r\n '#415784',\r\n '#425885',\r\n '#425885',\r\n '#415784',\r\n '#415784',\r\n '#415784',\r\n '#415784',\r\n '#425885',\r\n '#425885',\r\n '#415885',\r\n '#415885',\r\n '#425987',\r\n '#415887',\r\n '#415887',\r\n '#415987',\r\n '#415887',\r\n '#425988',\r\n '#425988',\r\n '#415887',\r\n '#415987',\r\n '#415988',\r\n '#415988',\r\n '#415988',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#41598a',\r\n '#405a8b',\r\n '#405a8c',\r\n '#405b8c',\r\n '#405b8c',\r\n '#405b8c',\r\n '#405a8c',\r\n '#405a8c',\r\n '#405a8c',\r\n '#405a8c',\r\n '#405b8c',\r\n '#415c8d',\r\n '#415c8e',\r\n '#405b8e',\r\n '#415c90',\r\n '#405b8f',\r\n '#405c8f',\r\n '#415d90',\r\n '#405b8f',\r\n '#405c8f',\r\n '#405c8f',\r\n '#405b8f',\r\n '#405c8f',\r\n '#405c90',\r\n '#405c91',\r\n '#405c91',\r\n '#405c91',\r\n '#405d91',\r\n '#405e91',\r\n '#405d91',\r\n '#415e91',\r\n '#405e91',\r\n '#415e91',\r\n '#415e92',\r\n '#3f5d94',\r\n '#3f5d93',\r\n '#3f5d93',\r\n '#3f5e94',\r\n '#405e94',\r\n '#3f5d94',\r\n '#3f5d94',\r\n '#3f5d94',\r\n '#3f5e94',\r\n '#3f5e95',\r\n '#3f5e96',\r\n '#3f5e96',\r\n '#3f5e96',\r\n '#405f97',\r\n '#405f97',\r\n '#3f5e96',\r\n '#3f5e97',\r\n '#3f5f97',\r\n '#3f6097',\r\n '#3f5f97',\r\n '#3f6097',\r\n '#3f5f98',\r\n '#3f5f99',\r\n '#3e5f99',\r\n '#3e6199',\r\n '#3e6099',\r\n '#3e5f99',\r\n '#3e5f99',\r\n '#3e5f98',\r\n '#3e6099',\r\n '#3d609a',\r\n '#3d6099',\r\n '#3e609b',\r\n '#3e619c',\r\n '#3e619c',\r\n '#3e619c',\r\n '#3e609b',\r\n '#3e609c',\r\n '#3e609c',\r\n '#3e619b',\r\n '#3e629c',\r\n '#3e629c',\r\n '#3e619c',\r\n '#3d619d',\r\n '#3d639f',\r\n '#3d629f',\r\n '#3d629f',\r\n '#3d639f',\r\n '#3d629f',\r\n '#3c619e',\r\n '#3c619e',\r\n '#3d629f',\r\n '#3d62a0',\r\n '#3d63a0',\r\n '#3d63a0',\r\n '#3d62a0',\r\n '#3d63a1',\r\n '#3d62a0',\r\n '#3d63a0',\r\n '#3d64a1',\r\n '#3d63a0',\r\n '#3c63a0',\r\n '#3b63a2',\r\n '#3c64a3',\r\n '#3c65a3',\r\n '#3b63a3',\r\n '#3b63a3',\r\n '#3b63a3',\r\n '#3b63a3',\r\n '#3c63a3',\r\n '#3c65a3',\r\n '#3c65a3',\r\n '#3b64a4',\r\n '#3a65a5',\r\n '#3b66a6',\r\n '#3c65a6',\r\n '#3a65a5',\r\n '#3a64a5',\r\n '#3a64a5',\r\n '#3b65a5',\r\n '#3a65a5',\r\n '#3a66a6',\r\n '#3b66a6',\r\n '#3b66a6',\r\n '#3a66a8',\r\n '#3a67a8',\r\n '#3b67a8',\r\n '#3b66a8',\r\n '#3b66a8',\r\n '#3b66a8',\r\n '#3b67a8',\r\n '#3a66a8',\r\n '#3966a9',\r\n '#3967a9',\r\n '#3a67aa',\r\n '#3a67ab',\r\n '#3967ab',\r\n '#3a68ab',\r\n '#3a68ab',\r\n '#3968ab',\r\n '#3966aa',\r\n '#3966aa',\r\n '#3968ab',\r\n '#3968ab',\r\n '#3867ac',\r\n '#3867ac',\r\n '#3868ac',\r\n '#3869ad',\r\n '#3969ad',\r\n '#3968ad',\r\n '#3868ac',\r\n '#3868ac',\r\n '#3869ae',\r\n '#3868ad',\r\n '#3868ad',\r\n '#3769af',\r\n '#3869b0',\r\n '#3769af',\r\n '#3769af',\r\n '#386ab0',\r\n '#386ab0',\r\n '#376aaf',\r\n '#376aaf',\r\n '#376ab0',\r\n '#366ab1',\r\n '#366ab2',\r\n '#366ab2',\r\n '#366ab2',\r\n '#366ab3',\r\n '#366bb3',\r\n '#366ab2',\r\n '#3669b2',\r\n '#366ab2',\r\n '#366ab2',\r\n '#366ab2',\r\n '#356bb3',\r\n '#346bb4',\r\n '#356cb4',\r\n '#356cb4',\r\n '#346bb4',\r\n '#356cb4',\r\n '#356cb5',\r\n '#356cb5',\r\n '#356cb5',\r\n '#346cb5',\r\n '#346cb5',\r\n '#346cb6',\r\n '#336db7',\r\n '#326cb7',\r\n '#326db7',\r\n '#336db7',\r\n '#336cb7',\r\n '#326bb6',\r\n '#326cb6',\r\n '#326db7',\r\n '#326db8',\r\n '#316dba',\r\n '#316eb9',\r\n '#316eb9',\r\n '#326eba',\r\n '#316eba',\r\n '#316db9',\r\n '#316db9',\r\n '#316eb9',\r\n '#306eba',\r\n '#306dba',\r\n '#306dba',\r\n '#306ebb',\r\n '#306dbb',\r\n '#306dbc',\r\n '#306fbc',\r\n '#306fbc',\r\n '#306ebb',\r\n '#306eba',\r\n '#306fbc',\r\n '#2f6fbd',\r\n '#2d6ebe',\r\n '#2d6ebe',\r\n '#2d6fbe',\r\n '#2e70be',\r\n '#2e70be',\r\n '#2e6fbe',\r\n '#2e6fbe',\r\n '#2e6fbe',\r\n '#2c6fc0',\r\n '#2d70c0',\r\n '#2d70c0',\r\n '#2b70c1',\r\n '#2b70c1',\r\n '#2c70c1',\r\n '#2c70c1',\r\n '#2b71c1',\r\n '#2c70c1',\r\n '#2c70c1',\r\n '#2c71c1',\r\n '#2c71c1',\r\n '#2a72c3',\r\n '#2971c3',\r\n '#2a71c2',\r\n '#2972c3',\r\n '#2a71c3',\r\n '#2a71c3',\r\n '#2972c3',\r\n '#2972c3',\r\n '#2972c3',\r\n '#2872c5',\r\n '#2872c6',\r\n '#2872c5',\r\n '#2773c6',\r\n '#2773c6',\r\n '#2772c6',\r\n '#2772c5',\r\n '#2672c5',\r\n '#2673c5',\r\n '#2673c5',\r\n '#2673c7',\r\n '#2472c8',\r\n '#2473c8',\r\n '#2474c8',\r\n '#2573c9',\r\n '#2573c9',\r\n '#2573c9',\r\n '#2573c9',\r\n '#2474c8',\r\n '#2374c9',\r\n '#2374c9',\r\n '#2374c9',\r\n '#2375c9',\r\n '#2374c9',\r\n '#2374c9',\r\n '#2475c9',\r\n '#2575ca',\r\n '#2476ca',\r\n '#2476ca',\r\n '#2476ca',\r\n '#2575cb',\r\n '#2577ca',\r\n '#2577ca',\r\n '#2576ca',\r\n '#2577ca',\r\n '#2577ca',\r\n '#2577ca',\r\n '#2677ca',\r\n '#2678ca',\r\n '#2678cb',\r\n '#2778cb',\r\n '#2778cb',\r\n '#2679cb',\r\n '#2779cb',\r\n '#2779cb',\r\n '#2779cb',\r\n '#2779cb',\r\n '#2879cb',\r\n '#287acb',\r\n '#287acb',\r\n '#2879cb',\r\n '#287acb',\r\n '#287bcb',\r\n '#287acb',\r\n '#287acb',\r\n '#287bcc',\r\n '#287bcc',\r\n '#297bcc',\r\n '#297bcc',\r\n '#297bcc',\r\n '#297bcc',\r\n '#297ccc',\r\n '#297ccc',\r\n '#297dcc',\r\n '#297dcc',\r\n '#2a7dcc',\r\n '#2a7dcc',\r\n '#2a7ecd',\r\n '#2a7ecd',\r\n '#2a7ecc',\r\n '#2a7ecc',\r\n '#2b7ecd',\r\n '#2c7ecd',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2b7ecc',\r\n '#2b7ecc',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2b7fcd',\r\n '#2b80cd',\r\n '#2c80ce',\r\n '#2d80ce',\r\n '#2d80ce',\r\n '#2c81cd',\r\n '#2d82ce',\r\n '#2d82ce',\r\n '#2d81ce',\r\n '#2d82ce',\r\n '#2d82ce',\r\n '#2d82cd',\r\n '#2e82cd',\r\n '#2e83ce',\r\n '#2e82ce',\r\n '#2d82cd',\r\n '#2d83cd',\r\n '#2e83cf',\r\n '#2e84cf',\r\n '#2e84cf',\r\n '#2e83ce',\r\n '#2e83ce',\r\n '#3084cf',\r\n '#3085cf',\r\n '#2f85ce',\r\n '#3085cf',\r\n '#2f86ce',\r\n '#2f86ce',\r\n '#2f86cf',\r\n '#2f85cf',\r\n '#2f86ce',\r\n '#2f86cf',\r\n '#2f86cf',\r\n '#2f87cf',\r\n '#2f86d0',\r\n '#2f86d0',\r\n '#2f86d0',\r\n '#3087cf',\r\n '#3088d0',\r\n '#3088d0',\r\n '#3087cf',\r\n '#3088cf',\r\n '#3188d0',\r\n '#3188d1',\r\n '#3088d0',\r\n '#3089d0',\r\n '#3089d0',\r\n '#3088d0',\r\n '#3188d0',\r\n '#3189d0',\r\n '#3289d0',\r\n '#3289d0',\r\n '#328ad1',\r\n '#328ad1',\r\n '#318ad0',\r\n '#318ad0',\r\n '#318ad0',\r\n '#328bd1',\r\n '#328ad1',\r\n '#328ad1',\r\n '#338bd2',\r\n '#338bd2',\r\n '#338cd1',\r\n '#338cd1',\r\n '#338cd2',\r\n '#338cd2',\r\n '#338dd1',\r\n '#338dd1',\r\n '#338dd2',\r\n '#338dd1',\r\n '#338ed2',\r\n '#338ed2',\r\n '#338ed2',\r\n '#348ed2',\r\n '#348ed2',\r\n '#348ed2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#3390d2',\r\n '#3391d2',\r\n '#3491d3',\r\n '#3490d3',\r\n '#3491d3',\r\n '#3491d3',\r\n '#3591d3',\r\n '#3591d3',\r\n '#3691d4',\r\n '#3690d4',\r\n '#3590d3',\r\n '#3592d3',\r\n '#3592d4',\r\n '#3592d4',\r\n '#3592d3',\r\n '#3593d3',\r\n '#3592d4',\r\n '#3592d4',\r\n '#3592d4',\r\n '#3593d4',\r\n '#3694d4',\r\n '#3695d4',\r\n '#3694d4',\r\n '#3693d4',\r\n '#3693d4',\r\n '#3695d4',\r\n '#3695d4',\r\n '#3695d4',\r\n '#3796d4',\r\n '#3796d4',\r\n '#3695d4',\r\n '#3695d5',\r\n '#3696d5',\r\n '#3696d5',\r\n '#3696d5',\r\n '#3695d4',\r\n '#3696d4',\r\n '#3797d5',\r\n '#3796d5',\r\n '#3797d5',\r\n '#3898d5',\r\n '#3898d5',\r\n '#3797d5',\r\n '#3798d5',\r\n '#3899d5',\r\n '#3899d5',\r\n '#3899d6',\r\n '#3799d6',\r\n '#3799d6',\r\n '#3799d6',\r\n '#389ad6',\r\n '#389ad6',\r\n '#3799d5',\r\n '#3799d5',\r\n '#3799d6',\r\n '#379ad6',\r\n '#379ad6',\r\n '#399ad6',\r\n '#399ad6',\r\n '#389bd5',\r\n '#389bd5',\r\n '#389bd6',\r\n '#389bd6',\r\n '#399cd7',\r\n '#399bd7',\r\n '#399cd7',\r\n '#399dd7',\r\n '#389cd7',\r\n '#389cd6',\r\n '#389dd6',\r\n '#399ed7',\r\n '#389dd6',\r\n '#389dd6',\r\n '#389fd6',\r\n '#399fd7',\r\n '#399ed6',\r\n '#399ed6',\r\n '#399fd7',\r\n '#399fd7',\r\n '#399fd7',\r\n '#3aa0d8',\r\n '#3aa0d8',\r\n '#3a9fd8',\r\n '#3a9fd8',\r\n '#3a9fd8',\r\n '#3aa0d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa2d9',\r\n '#3aa1d9',\r\n '#3aa1d8',\r\n '#39a2d8',\r\n '#3aa2d9',\r\n '#3aa3d9',\r\n '#3ba3d9',\r\n '#3ba3d9',\r\n '#3ba2d8',\r\n '#3aa2d8',\r\n '#3aa4d8',\r\n '#3ba4d9',\r\n '#3aa3d8',\r\n '#3aa3d9',\r\n '#3ba5da',\r\n '#3ba5d9',\r\n '#3ba4d9',\r\n '#3ba4d9',\r\n '#3ba4d9',\r\n '#3aa5d9',\r\n '#3ba5da',\r\n '#3ba6da',\r\n '#3ba6da',\r\n '#3ba6da',\r\n '#3ba6d9',\r\n '#3ba6d9',\r\n '#3ba6da',\r\n '#3aa5da',\r\n '#3ba6da',\r\n '#3ca7da',\r\n '#3ca7da',\r\n '#3ba7da',\r\n '#3ba6da',\r\n '#3ca7da',\r\n '#3ca8da',\r\n '#3ca8da',\r\n '#3ca8da',\r\n '#3ca9db',\r\n '#3ca9db',\r\n '#3ca9da',\r\n '#3ca8db',\r\n '#3ba8db',\r\n '#3baadb',\r\n '#3caadb',\r\n '#3ca9db',\r\n '#3caadb',\r\n '#3caadb',\r\n '#3ca9db',\r\n '#3ca9db',\r\n '#3ca9db',\r\n '#3cabdb',\r\n '#3cabdc',\r\n '#3caadb',\r\n '#3cabdb',\r\n '#3cacdc',\r\n '#3cacdc',\r\n '#3cacdc',\r\n '#3caddc',\r\n '#3caddc',\r\n '#3caddc',\r\n '#3caedc',\r\n '#3caddd',\r\n '#3caddd',\r\n '#3caedc',\r\n '#3eaedd',\r\n '#3eaddd',\r\n '#3daddc',\r\n '#3daedc',\r\n '#3daedc',\r\n '#3dafdd',\r\n '#3dafdd',\r\n '#3daedd',\r\n '#3dafdd',\r\n '#3dafdd',\r\n '#3dafdd',\r\n '#3db0dd',\r\n '#3db0dd',\r\n '#3db0dc',\r\n '#3db0dc',\r\n '#3db1dd',\r\n '#3db1dd',\r\n '#3db0dd',\r\n '#3db0dd',\r\n '#3db1dd',\r\n '#3db1de',\r\n '#3db1de',\r\n '#3db1de',\r\n '#3db2de',\r\n '#3db2de',\r\n '#3db2dd',\r\n '#3db2dd',\r\n '#3db3dd',\r\n '#3db2de',\r\n '#3db3de',\r\n '#3db4de',\r\n '#3db3dd',\r\n '#3db4de',\r\n '#3db4de',\r\n '#3db4de',\r\n '#3db5df',\r\n '#3db5df',\r\n '#3db4df',\r\n '#3db4df',\r\n '#3db5df',\r\n '#3db5de',\r\n '#3db5de',\r\n '#3db5de',\r\n '#3db6df',\r\n '#3db6df',\r\n '#3db6de',\r\n '#3db6de',\r\n '#3db7df',\r\n '#3db7e0',\r\n '#3db8e0',\r\n '#3db8e0',\r\n '#3db7e0',\r\n '#3db7df',\r\n '#3db7df',\r\n '#3eb7df',\r\n '#3eb8df',\r\n '#3eb8df',\r\n '#3eb9e0',\r\n '#3eb9e0',\r\n '#3eb8df',\r\n '#3eb9df',\r\n '#3fb9df',\r\n '#3fb9e0',\r\n '#3ebae1',\r\n '#3ebae0',\r\n '#3ebae0',\r\n '#3ebae0',\r\n '#3eb9e0',\r\n '#3fbae1',\r\n '#3fbbe1',\r\n '#3ebae0',\r\n '#3ebbe1',\r\n '#3ebae0',\r\n '#3ebbe0',\r\n '#3ebce1',\r\n '#3fbce1',\r\n '#3ebce0',\r\n '#3ebce2',\r\n '#3ebce2',\r\n '#3ebde2',\r\n '#3fbde2',\r\n '#3fbde2',\r\n '#3ebde1',\r\n '#3ebee1',\r\n '#3ebde2',\r\n '#3fbde2',\r\n '#3fbde2',\r\n '#3ebee1',\r\n '#3ebfe1',\r\n '#3ebfe1',\r\n '#3ebfe1',\r\n '#3fbfe2',\r\n '#3ebfe1',\r\n '#3ebee1',\r\n '#3ebee2',\r\n '#3ebfe2',\r\n '#3ebfe2',\r\n '#3ebfe2',\r\n '#3ec0e2',\r\n '#3ec1e2',\r\n '#3fc0e3',\r\n '#3fc0e3',\r\n '#3ec0e2',\r\n '#3ec1e2',\r\n '#3ec2e2',\r\n '#3ec2e2',\r\n '#3ec2e2',\r\n '#3ec3e3',\r\n '#3ec3e3',\r\n '#3ec3e3',\r\n '#3ec2e3',\r\n '#3ec2e3',\r\n '#3fc3e3',\r\n '#3fc4e3',\r\n '#3ec4e3',\r\n '#3ec3e3',\r\n '#3ec3e3',\r\n '#3ec5e4',\r\n '#3fc5e4',\r\n '#3fc5e3',\r\n '#3fc4e4',\r\n '#3fc5e4',\r\n '#3ec6e4',\r\n '#3ec5e4',\r\n '#3ec4e4',\r\n '#3ec5e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec7e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec7e4',\r\n '#3dc8e4',\r\n '#3dc8e4',\r\n '#3dc7e5',\r\n '#3dc7e5',\r\n '#3dc8e5',\r\n '#3dc8e4',\r\n '#3dc8e4',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e4',\r\n '#3dc9e5',\r\n '#3dcae6',\r\n '#3dcbe6',\r\n '#3dcae6',\r\n '#3dcae6',\r\n '#3dcae6',\r\n '#3dcbe6',\r\n '#3dcce6',\r\n '#3ecce6',\r\n '#3ecce6',\r\n '#3dcbe6',\r\n '#3dcce6',\r\n '#3dcce6',\r\n '#3dcce6',\r\n '#3dcce5',\r\n '#3dcce5',\r\n '#3dcce6',\r\n '#3dcde7',\r\n '#3dcde7',\r\n '#3dcde7',\r\n '#3dcfe7',\r\n '#3dcfe7',\r\n '#3dcfe7',\r\n '#3dcee7',\r\n '#3dcee6',\r\n '#3dcee6',\r\n '#3dcfe7',\r\n '#3dcfe7',\r\n '#3dcfe6',\r\n '#3dcfe6',\r\n '#3dd0e8',\r\n '#3ed1e8',\r\n '#3ed1e7',\r\n '#3dd0e7',\r\n '#3dd0e8',\r\n '#3dd0e7',\r\n '#3dd1e7',\r\n '#3dd1e7',\r\n '#3dd0e7',\r\n '#3cd1e8',\r\n '#3cd2e8',\r\n '#3cd1e8',\r\n '#3cd1e7',\r\n '#3cd1e7',\r\n '#3cd2e8',\r\n '#3cd3e9',\r\n '#3cd2e8',\r\n '#3cd2e9',\r\n '#3cd2e9',\r\n '#3cd3e8',\r\n '#3cd4e8',\r\n '#3cd3e8',\r\n '#3cd3e8',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\nconst earningsGradient = {\r\n colors: [\r\n '#592d48',\r\n '#592d49',\r\n '#5b2d49',\r\n '#5b2d49',\r\n '#5b2d49',\r\n '#5b2e49',\r\n '#5b2e49',\r\n '#5b2e4a',\r\n '#5c2e4a',\r\n '#5d2f4b',\r\n '#5c2f4b',\r\n '#5c2e4b',\r\n '#5f2f4c',\r\n '#5f2f4c',\r\n '#5e2e4c',\r\n '#5e2e4c',\r\n '#60304d',\r\n '#60304d',\r\n '#5f2f4d',\r\n '#5f2f4d',\r\n '#62304f',\r\n '#62304f',\r\n '#61304f',\r\n '#62314f',\r\n '#62314f',\r\n '#633150',\r\n '#633150',\r\n '#63314f',\r\n '#63304f',\r\n '#643150',\r\n '#643151',\r\n '#643151',\r\n '#653152',\r\n '#653051',\r\n '#653051',\r\n '#663152',\r\n '#673253',\r\n '#673253',\r\n '#673253',\r\n '#673253',\r\n '#683254',\r\n '#683254',\r\n '#683254',\r\n '#693254',\r\n '#693354',\r\n '#6a3354',\r\n '#6a3354',\r\n '#6a3355',\r\n '#6a3356',\r\n '#6a3456',\r\n '#6c3456',\r\n '#6c3356',\r\n '#6c3457',\r\n '#6c3457',\r\n '#6c3457',\r\n '#6c3457',\r\n '#6d3458',\r\n '#6e3559',\r\n '#6f3559',\r\n '#6f3459',\r\n '#6f345a',\r\n '#70355b',\r\n '#70365b',\r\n '#6f355a',\r\n '#70365b',\r\n '#71355a',\r\n '#71355a',\r\n '#71365b',\r\n '#72355b',\r\n '#72365c',\r\n '#72365d',\r\n '#72355c',\r\n '#73355c',\r\n '#73355d',\r\n '#73375d',\r\n '#73375d',\r\n '#76375e',\r\n '#76375f',\r\n '#76375f',\r\n '#76375f',\r\n '#76365e',\r\n '#76365e',\r\n '#76375f',\r\n '#763860',\r\n '#773861',\r\n '#783860',\r\n '#783860',\r\n '#783861',\r\n '#793861',\r\n '#793862',\r\n '#793762',\r\n '#793761',\r\n '#7b3962',\r\n '#7b3962',\r\n '#7a3962',\r\n '#7a3962',\r\n '#7b3963',\r\n '#7c3964',\r\n '#7d3a64',\r\n '#7d3b64',\r\n '#7d3a65',\r\n '#7d3a65',\r\n '#7d3a65',\r\n '#7e3b65',\r\n '#803b66',\r\n '#7f3a66',\r\n '#7e3a66',\r\n '#7f3a67',\r\n '#7f3b67',\r\n '#803c67',\r\n '#803c67',\r\n '#7f3b67',\r\n '#813c68',\r\n '#823b69',\r\n '#823b69',\r\n '#813b69',\r\n '#823c69',\r\n '#823c69',\r\n '#823c69',\r\n '#823c69',\r\n '#843d6a',\r\n '#843d6a',\r\n '#843d6a',\r\n '#843c6b',\r\n '#863c6c',\r\n '#853c6c',\r\n '#853d6c',\r\n '#863e6c',\r\n '#863d6c',\r\n '#873d6c',\r\n '#873d6c',\r\n '#873d6d',\r\n '#893e6e',\r\n '#8a3e6f',\r\n '#8a3e6f',\r\n '#893e6e',\r\n '#893d6e',\r\n '#893e6e',\r\n '#8a3f6f',\r\n '#8b3f70',\r\n '#8b3f71',\r\n '#8b3e70',\r\n '#8b3e70',\r\n '#8c3f70',\r\n '#8c4071',\r\n '#8c4070',\r\n '#8c4070',\r\n '#8d4071',\r\n '#8d4072',\r\n '#8d4072',\r\n '#8f4073',\r\n '#8f4074',\r\n '#8f4073',\r\n '#8f4173',\r\n '#8f4173',\r\n '#904173',\r\n '#904174',\r\n '#904175',\r\n '#904175',\r\n '#914175',\r\n '#924175',\r\n '#924275',\r\n '#924275',\r\n '#914175',\r\n '#924277',\r\n '#934277',\r\n '#934277',\r\n '#944278',\r\n '#954277',\r\n '#954278',\r\n '#954278',\r\n '#954278',\r\n '#954378',\r\n '#964378',\r\n '#964379',\r\n '#96447a',\r\n '#96437a',\r\n '#96437a',\r\n '#98437a',\r\n '#98447b',\r\n '#98457b',\r\n '#98457b',\r\n '#98457b',\r\n '#99447b',\r\n '#9a457d',\r\n '#9b457d',\r\n '#9b457d',\r\n '#9a447c',\r\n '#9a457c',\r\n '#9b457c',\r\n '#9b457e',\r\n '#9b467e',\r\n '#9c467e',\r\n '#9d467f',\r\n '#9e467f',\r\n '#9d467f',\r\n '#9e467e',\r\n '#9e477f',\r\n '#9e4780',\r\n '#9e477f',\r\n '#9f4680',\r\n '#a04680',\r\n '#a04880',\r\n '#a04881',\r\n '#a04881',\r\n '#a04881',\r\n '#a24883',\r\n '#a24883',\r\n '#a24882',\r\n '#a24883',\r\n '#a24883',\r\n '#a24883',\r\n '#a24883',\r\n '#a34983',\r\n '#a34983',\r\n '#a34984',\r\n '#a44985',\r\n '#a54986',\r\n '#a54986',\r\n '#a54986',\r\n '#a54a85',\r\n '#a54a85',\r\n '#a54a85',\r\n '#a64a86',\r\n '#a74a87',\r\n '#a84a88',\r\n '#a84a88',\r\n '#a74a87',\r\n '#a84b87',\r\n '#a84b88',\r\n '#a84b88',\r\n '#a84b88',\r\n '#a94b89',\r\n '#aa4b89',\r\n '#ab4b89',\r\n '#ab4b89',\r\n '#ab4c8a',\r\n '#aa4c8a',\r\n '#aa4c8a',\r\n '#ab4c8a',\r\n '#ad4c8b',\r\n '#ad4c8b',\r\n '#ad4c8b',\r\n '#ad4c8c',\r\n '#ae4d8d',\r\n '#ae4c8c',\r\n '#ae4d8d',\r\n '#af4e8e',\r\n '#af4e8d',\r\n '#b04e8d',\r\n '#b04e8d',\r\n '#b04d8e',\r\n '#b04e8e',\r\n '#b04d8e',\r\n '#b04e8e',\r\n '#b14f8f',\r\n '#b14e90',\r\n '#b14e90',\r\n '#b14f90',\r\n '#b25090',\r\n '#b34f90',\r\n '#b34f90',\r\n '#b34f90',\r\n '#b35091',\r\n '#b44f91',\r\n '#b55092',\r\n '#b55092',\r\n '#b55092',\r\n '#b55192',\r\n '#b55092',\r\n '#b55092',\r\n '#b55093',\r\n '#b65094',\r\n '#b75194',\r\n '#b85193',\r\n '#b75093',\r\n '#b85095',\r\n '#b85095',\r\n '#b85295',\r\n '#b85295',\r\n '#ba5296',\r\n '#b95197',\r\n '#b95197',\r\n '#ba5297',\r\n '#ba5297',\r\n '#ba5296',\r\n '#ba5296',\r\n '#bb5397',\r\n '#bc5297',\r\n '#bd5298',\r\n '#bd5499',\r\n '#bc5499',\r\n '#bc5499',\r\n '#bc5499',\r\n '#bd5499',\r\n '#be549a',\r\n '#bf549b',\r\n '#bf549b',\r\n '#bf549b',\r\n '#bf549b',\r\n '#c0559b',\r\n '#c0559b',\r\n '#c0559b',\r\n '#c0559b',\r\n '#c0549c',\r\n '#c0549c',\r\n '#c2569c',\r\n '#c2569d',\r\n '#c2569e',\r\n '#c2569e',\r\n '#c4569e',\r\n '#c4569e',\r\n '#c4569f',\r\n '#c3579e',\r\n '#c3579e',\r\n '#c5579e',\r\n '#c658a0',\r\n '#c5579f',\r\n '#c4579f',\r\n '#c557a0',\r\n '#c757a0',\r\n '#c657a0',\r\n '#c658a1',\r\n '#c759a2',\r\n '#c758a2',\r\n '#c758a2',\r\n '#c858a2',\r\n '#c959a3',\r\n '#ca59a3',\r\n '#c958a2',\r\n '#c958a2',\r\n '#c959a3',\r\n '#ca59a4',\r\n '#cb59a4',\r\n '#cb59a4',\r\n '#cb59a4',\r\n '#cb5aa5',\r\n '#cc5ba5',\r\n '#cc5ba5',\r\n '#cc5aa5',\r\n '#cd5ba6',\r\n '#cd5ba6',\r\n '#cd5ba6',\r\n '#ce5ba7',\r\n '#ce5ca7',\r\n '#cf5ca7',\r\n '#cf5ca7',\r\n '#cf5ca7',\r\n '#d05ca8',\r\n '#d05ba9',\r\n '#d05ba9',\r\n '#d05ba9',\r\n '#d15ca9',\r\n '#d15da9',\r\n '#d15da9',\r\n '#d15ca9',\r\n '#d25caa',\r\n '#d25dab',\r\n '#d25eab',\r\n '#d25eab',\r\n '#d35eab',\r\n '#d35dab',\r\n '#d35dab',\r\n '#d45eac',\r\n '#d45dac',\r\n '#d55ead',\r\n '#d55ead',\r\n '#d55dad',\r\n '#d65eac',\r\n '#d65fad',\r\n '#d65fae',\r\n '#d65fae',\r\n '#d75fae',\r\n '#d75fae',\r\n '#d75fae',\r\n '#d75fae',\r\n '#d75faf',\r\n '#d760b0',\r\n '#d960b0',\r\n '#d95fb0',\r\n '#d961b0',\r\n '#d961b1',\r\n '#d961b1',\r\n '#da61b0',\r\n '#dc61b2',\r\n '#dc60b2',\r\n '#db60b2',\r\n '#db61b2',\r\n '#dc61b2',\r\n '#dd61b3',\r\n '#dd61b3',\r\n '#dd62b3',\r\n '#de62b3',\r\n '#de63b4',\r\n '#de63b5',\r\n '#dd62b4',\r\n '#de62b4',\r\n '#df63b5',\r\n '#e063b5',\r\n '#e063b5',\r\n '#e063b6',\r\n '#e164b6',\r\n '#e164b6',\r\n '#e164b6',\r\n '#e164b7',\r\n '#e264b7',\r\n '#e264b7',\r\n '#e264b7',\r\n '#e264b8',\r\n '#e265b8',\r\n '#e265b8',\r\n '#e365b8',\r\n '#e364b8',\r\n '#e465b9',\r\n '#e565ba',\r\n '#e565ba',\r\n '#e566b9',\r\n '#e566ba',\r\n '#e566bb',\r\n '#e666ba',\r\n '#e766bb',\r\n '#e665bb',\r\n '#e665bb',\r\n '#e666bb',\r\n '#e867bc',\r\n '#e867bc',\r\n '#e867bc',\r\n '#e867bc',\r\n '#e968bd',\r\n '#e967be',\r\n '#e968be',\r\n '#e969bd',\r\n '#ea68bf',\r\n '#ea69bf',\r\n '#ea69bf',\r\n '#eb69c0',\r\n '#eb69c0',\r\n '#eb6ac0',\r\n '#eb6ac0',\r\n '#ec6ac1',\r\n '#ed6ac2',\r\n '#ec6bc2',\r\n '#ec6bc2',\r\n '#ed6bc2',\r\n '#ed6bc3',\r\n '#ed6bc3',\r\n '#ed6bc3',\r\n '#ee6bc2',\r\n '#ef6bc3',\r\n '#ef6cc3',\r\n '#ef6cc3',\r\n '#f06cc4',\r\n '#f06cc5',\r\n '#f16cc4',\r\n '#f16cc4',\r\n '#f16cc5',\r\n '#f16dc6',\r\n '#f16dc6',\r\n '#f36dc6',\r\n '#f36dc7',\r\n '#f36dc6',\r\n '#f36dc7',\r\n '#f36dc7',\r\n '#f46dc7',\r\n '#f56ec7',\r\n '#f46ec7',\r\n '#f46ec7',\r\n '#f46ec8',\r\n '#f56ec8',\r\n '#f56fc8',\r\n '#f66fc8',\r\n '#f76fc9',\r\n '#f76fc9',\r\n '#f76fc9',\r\n '#f86fca',\r\n '#f970cb',\r\n '#f971cb',\r\n '#f870cb',\r\n '#f870cb',\r\n '#f870cc',\r\n '#f970cd',\r\n '#fa71cd',\r\n '#fa71cd',\r\n '#fa71cd',\r\n '#fa72ce',\r\n '#fb71ce',\r\n '#fb71ce',\r\n '#fb71ce',\r\n '#fc72cf',\r\n '#fb72ce',\r\n '#fb72ce',\r\n '#fc72cf',\r\n '#fd72d0',\r\n '#fe73d1',\r\n '#ff73d1',\r\n '#ff72d1',\r\n '#fe72d1',\r\n '#ff73d2',\r\n '#ff74d2',\r\n '#fe74d2',\r\n '#02dfce',\r\n '#02dece',\r\n '#02dece',\r\n '#03dfce',\r\n '#03dfce',\r\n '#03dfcd',\r\n '#03ddcd',\r\n '#03ddcd',\r\n '#03ddcc',\r\n '#02dccb',\r\n '#02dccb',\r\n '#03dccc',\r\n '#03dbcb',\r\n '#03dbca',\r\n '#03dbca',\r\n '#03dbca',\r\n '#03daca',\r\n '#04dbcb',\r\n '#04dacb',\r\n '#03d9ca',\r\n '#03d8c9',\r\n '#04d9c9',\r\n '#04dac9',\r\n '#04d9c9',\r\n '#04d9c8',\r\n '#04d7c7',\r\n '#04d6c7',\r\n '#04d7c8',\r\n '#05d7c7',\r\n '#05d6c7',\r\n '#05d6c7',\r\n '#04d6c7',\r\n '#05d5c6',\r\n '#05d5c6',\r\n '#05d5c6',\r\n '#05d5c5',\r\n '#06d4c5',\r\n '#05d4c5',\r\n '#05d4c5',\r\n '#06d4c5',\r\n '#06d3c4',\r\n '#06d2c4',\r\n '#06d2c4',\r\n '#06d2c3',\r\n '#06d2c3',\r\n '#07d2c2',\r\n '#07d0c1',\r\n '#07d0c2',\r\n '#07d0c1',\r\n '#07cfc1',\r\n '#07cfc1',\r\n '#07d0c1',\r\n '#09cfc0',\r\n '#08cfc0',\r\n '#09cfc0',\r\n '#0acec1',\r\n '#0acec0',\r\n '#09cdbf',\r\n '#09cdbf',\r\n '#0acebf',\r\n '#0accbe',\r\n '#0bccbf',\r\n '#0bccbf',\r\n '#0bccbe',\r\n '#0bcbbe',\r\n '#0bcbbe',\r\n '#0bcbbd',\r\n '#0ccabc',\r\n '#0ccbbd',\r\n '#0dcbbd',\r\n '#0dcabc',\r\n '#0cc9bb',\r\n '#0dc8ba',\r\n '#0ec9bb',\r\n '#0ec9bb',\r\n '#0dc8ba',\r\n '#0ec8bb',\r\n '#0dc7ba',\r\n '#0ec7ba',\r\n '#0fc7ba',\r\n '#0ec6b9',\r\n '#0fc6b9',\r\n '#0fc6b9',\r\n '#0fc5b8',\r\n '#0fc6b8',\r\n '#0fc6b8',\r\n '#0fc4b8',\r\n '#10c4b7',\r\n '#10c4b7',\r\n '#10c3b6',\r\n '#10c3b6',\r\n '#10c3b6',\r\n '#12c2b6',\r\n '#11c2b6',\r\n '#11c2b6',\r\n '#12c3b6',\r\n '#12c2b5',\r\n '#12c1b5',\r\n '#12c0b5',\r\n '#13c0b4',\r\n '#13c1b4',\r\n '#13c0b3',\r\n '#13bfb3',\r\n '#13c0b4',\r\n '#13bfb2',\r\n '#13beb3',\r\n '#13beb3',\r\n '#13bfb2',\r\n '#14beb1',\r\n '#14beb1',\r\n '#14beb1',\r\n '#14bdb1',\r\n '#14bdb1',\r\n '#15bdb1',\r\n '#16bdb1',\r\n '#15bcb0',\r\n '#16baaf',\r\n '#16bab0',\r\n '#16bbb0',\r\n '#15bbaf',\r\n '#15b9ae',\r\n '#15b9ae',\r\n '#16baae',\r\n '#17baae',\r\n '#17b9ae',\r\n '#17b8ae',\r\n '#17b8ac',\r\n '#17b8ac',\r\n '#18b8ac',\r\n '#18b7ab',\r\n '#18b7ab',\r\n '#18b7ab',\r\n '#19b7ac',\r\n '#18b7ac',\r\n '#18b5ac',\r\n '#18b5ab',\r\n '#18b5aa',\r\n '#19b4aa',\r\n '#1ab4aa',\r\n '#1ab5aa',\r\n '#19b3a9',\r\n '#19b3a9',\r\n '#19b4a9',\r\n '#19b4a9',\r\n '#19b2a8',\r\n '#1ab3a8',\r\n '#1ab3a8',\r\n '#1ab2a7',\r\n '#1bb1a7',\r\n '#1ab0a7',\r\n '#1ab0a7',\r\n '#1ab0a7',\r\n '#1bb1a6',\r\n '#1bb1a6',\r\n '#1bafa6',\r\n '#1bafa6',\r\n '#1cafa5',\r\n '#1cafa5',\r\n '#1cafa5',\r\n '#1caea4',\r\n '#1caea4',\r\n '#1caea4',\r\n '#1caea4',\r\n '#1cada3',\r\n '#1caca2',\r\n '#1caca2',\r\n '#1caca2',\r\n '#1caca2',\r\n '#1eaba2',\r\n '#1eaca2',\r\n '#1eaca2',\r\n '#1eaba2',\r\n '#1daaa1',\r\n '#1ea9a1',\r\n '#1ea9a1',\r\n '#1daaa0',\r\n '#1ea89f',\r\n '#1fa9a0',\r\n '#1fa8a0',\r\n '#1ea79f',\r\n '#1fa79e',\r\n '#1fa89f',\r\n '#1fa79e',\r\n '#1ea69d',\r\n '#1ea79d',\r\n '#1ea79c',\r\n '#1ea59c',\r\n '#1ea59c',\r\n '#20a59c',\r\n '#1fa59c',\r\n '#1fa59c',\r\n '#20a49b',\r\n '#20a49c',\r\n '#1fa49c',\r\n '#1fa49a',\r\n '#1fa39a',\r\n '#20a29a',\r\n '#20a39a',\r\n '#20a39a',\r\n '#20a29a',\r\n '#21a199',\r\n '#21a099',\r\n '#21a099',\r\n '#21a198',\r\n '#21a098',\r\n '#219f98',\r\n '#219f98',\r\n '#21a098',\r\n '#219f97',\r\n '#219f97',\r\n '#219e97',\r\n '#219d96',\r\n '#219d97',\r\n '#229d96',\r\n '#229d96',\r\n '#229d96',\r\n '#229c95',\r\n '#239d95',\r\n '#239d95',\r\n '#239c95',\r\n '#229a94',\r\n '#229a93',\r\n '#229a93',\r\n '#239b93',\r\n '#229a93',\r\n '#239892',\r\n '#239892',\r\n '#239992',\r\n '#249991',\r\n '#249991',\r\n '#249791',\r\n '#239791',\r\n '#249791',\r\n '#249791',\r\n '#249791',\r\n '#239690',\r\n '#239590',\r\n '#24968f',\r\n '#24968f',\r\n '#23958f',\r\n '#24958e',\r\n '#24948e',\r\n '#24948e',\r\n '#24958e',\r\n '#25938d',\r\n '#25938d',\r\n '#25938d',\r\n '#24938c',\r\n '#24928c',\r\n '#25928c',\r\n '#25928c',\r\n '#25928c',\r\n '#25918c',\r\n '#25908b',\r\n '#25908b',\r\n '#25908b',\r\n '#248f8a',\r\n '#258f8a',\r\n '#258f8a',\r\n '#25908b',\r\n '#258f8a',\r\n '#248e89',\r\n '#258e89',\r\n '#268e89',\r\n '#268e88',\r\n '#268e88',\r\n '#268d88',\r\n '#268c88',\r\n '#268c86',\r\n '#268c86',\r\n '#268c87',\r\n '#268c87',\r\n '#268b86',\r\n '#268a87',\r\n '#268a86',\r\n '#268a85',\r\n '#268a86',\r\n '#268a86',\r\n '#268884',\r\n '#268884',\r\n '#268884',\r\n '#278783',\r\n '#278783',\r\n '#268883',\r\n '#278682',\r\n '#278682',\r\n '#278682',\r\n '#278682',\r\n '#278681',\r\n '#278681',\r\n '#278581',\r\n '#278480',\r\n '#278580',\r\n '#278480',\r\n '#278381',\r\n '#278481',\r\n '#27837f',\r\n '#288480',\r\n '#288380',\r\n '#27827f',\r\n '#27827f',\r\n '#27817e',\r\n '#27817e',\r\n '#27817e',\r\n '#27807d',\r\n '#27807d',\r\n '#27807d',\r\n '#28807d',\r\n '#27807c',\r\n '#277f7b',\r\n '#277f7b',\r\n '#277f7b',\r\n '#287e7b',\r\n '#287d7a',\r\n '#287d7a',\r\n '#297e7b',\r\n '#297d7b',\r\n '#297c7b',\r\n '#297c7b',\r\n '#297d7b',\r\n '#287b79',\r\n '#287c79',\r\n '#287b79',\r\n '#297a79',\r\n '#297a78',\r\n '#297b78',\r\n '#297b78',\r\n '#287a77',\r\n '#287976',\r\n '#287876',\r\n '#287876',\r\n '#287876',\r\n '#287775',\r\n '#297876',\r\n '#297976',\r\n '#297776',\r\n '#287675',\r\n '#297776',\r\n '#297775',\r\n '#287674',\r\n '#297574',\r\n '#297574',\r\n '#297574',\r\n '#297474',\r\n '#287472',\r\n '#297472',\r\n '#297472',\r\n '#297472',\r\n '#297271',\r\n '#287271',\r\n '#287271',\r\n '#297271',\r\n '#297271',\r\n '#287171',\r\n '#28716f',\r\n '#29716f',\r\n '#28706f',\r\n '#297070',\r\n '#297070',\r\n '#296f6f',\r\n '#296f6f',\r\n '#286e6e',\r\n '#286e6e',\r\n '#286f6e',\r\n '#296e6e',\r\n '#286d6d',\r\n '#286d6d',\r\n '#296d6d',\r\n '#296e6d',\r\n '#296e6d',\r\n '#296c6b',\r\n '#286c6b',\r\n '#286c6b',\r\n '#296c6b',\r\n '#296a6b',\r\n '#286a6a',\r\n '#286a6a',\r\n '#296969',\r\n '#2a6969',\r\n '#296969',\r\n '#296869',\r\n '#2a6969',\r\n '#2a6969',\r\n '#2a6969',\r\n '#2a6868',\r\n '#296768',\r\n '#296768',\r\n '#2a6767',\r\n '#2a6767',\r\n '#2a6767',\r\n '#2a6567',\r\n '#296566',\r\n '#286666',\r\n '#286565',\r\n '#286565',\r\n '#296565',\r\n '#286465',\r\n '#296464',\r\n '#296464',\r\n '#286364',\r\n '#286263',\r\n '#286263',\r\n '#286263',\r\n '#286163',\r\n '#286062',\r\n '#286062',\r\n '#286162',\r\n '#296163',\r\n '#285f62',\r\n '#296062',\r\n '#296062',\r\n '#295f61',\r\n '#296061',\r\n '#285f60',\r\n '#285d5f',\r\n '#285d5f',\r\n '#285d60',\r\n '#285c5f',\r\n '#285c5e',\r\n '#285c5f',\r\n '#295b5e',\r\n '#285b5d',\r\n '#285b5d',\r\n '#285c5d',\r\n '#295c5d',\r\n '#285b5c',\r\n '#285b5c',\r\n '#285b5c',\r\n '#285a5d',\r\n '#28595d',\r\n '#28595b',\r\n '#28595b',\r\n '#29585c',\r\n '#28585b',\r\n '#28585a',\r\n '#28575a',\r\n '#29585b',\r\n '#29585b',\r\n '#29575a',\r\n '#295659',\r\n '#285558',\r\n '#285658',\r\n '#285658',\r\n '#295558',\r\n '#295557',\r\n '#285457',\r\n '#285357',\r\n '#285457',\r\n '#285356',\r\n '#295456',\r\n '#295356',\r\n '#285256',\r\n '#295256',\r\n '#285255',\r\n '#285255',\r\n '#295255',\r\n '#295155',\r\n '#284f54',\r\n '#274f54',\r\n '#275054',\r\n '#275054',\r\n '#275054',\r\n '#274e52',\r\n '#274e52',\r\n '#284e52',\r\n '#274d51',\r\n '#274d51',\r\n '#274e52',\r\n '#274c50',\r\n '#274c50',\r\n '#274e51',\r\n '#284e51',\r\n '#274c50',\r\n '#284c50',\r\n '#284b50',\r\n '#274a50',\r\n '#284a50',\r\n '#284a50',\r\n '#28494e',\r\n '#27484e',\r\n '#274a4e',\r\n '#274a4d',\r\n '#27494d',\r\n '#28484e',\r\n '#27474c',\r\n '#26484d',\r\n '#26484d',\r\n '#26484c',\r\n '#25464b',\r\n '#26464b',\r\n '#26474b',\r\n '#26474b',\r\n '#26454a',\r\n '#26454a',\r\n '#26464a',\r\n '#26464a',\r\n '#254349',\r\n '#264349',\r\n '#264349',\r\n '#26444a',\r\n ],\r\n nullColor: '#414554',\r\n}\r\n\r\nconst redGreenGradientBubbles = {\r\n colors: [\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f23538',\r\n '#f23538',\r\n '#f23538',\r\n '#f23538',\r\n '#f13538',\r\n '#f13538',\r\n '#f13538',\r\n '#f13538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ee3639',\r\n '#ee3639',\r\n '#ee3639',\r\n '#ed3639',\r\n '#ed3639',\r\n '#ed3639',\r\n '#ec3639',\r\n '#ec3639',\r\n '#ec3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#ea3639',\r\n '#ea3639',\r\n '#ea3639',\r\n '#e93639',\r\n '#e93639',\r\n '#e83538',\r\n '#e83538',\r\n '#e83538',\r\n '#e73538',\r\n '#e73538',\r\n '#e73538',\r\n '#e63538',\r\n '#e63639',\r\n '#e63639',\r\n '#e63639',\r\n '#e63639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e43639',\r\n '#e43639',\r\n '#e43639',\r\n '#e33639',\r\n '#e33639',\r\n '#e33639',\r\n '#e23639',\r\n '#e23639',\r\n '#e23639',\r\n '#e13639',\r\n '#e13639',\r\n '#e13639',\r\n '#e03639',\r\n '#e0363a',\r\n '#e0363a',\r\n '#e0363a',\r\n '#df363a',\r\n '#df363a',\r\n '#df363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#dd363a',\r\n '#dd373b',\r\n '#dd373b',\r\n '#dc373b',\r\n '#dc373b',\r\n '#dc373b',\r\n '#db373b',\r\n '#db373b',\r\n '#db373b',\r\n '#da373b',\r\n '#da373d',\r\n '#da373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d8373e',\r\n '#d8373e',\r\n '#d7383e',\r\n '#d7383e',\r\n '#d7383e',\r\n '#d6383e',\r\n '#d6383e',\r\n '#d5383e',\r\n '#d5383e',\r\n '#d4383e',\r\n '#d4383e',\r\n '#d4383f',\r\n '#d3383f',\r\n '#d3383f',\r\n '#d3393f',\r\n '#d33940',\r\n '#d23940',\r\n '#d23940',\r\n '#d13940',\r\n '#d13941',\r\n '#d03941',\r\n '#d03941',\r\n '#cf3941',\r\n '#cf3942',\r\n '#cf3942',\r\n '#cf3a42',\r\n '#ce3a42',\r\n '#cd3a43',\r\n '#cd3a43',\r\n '#cc3943',\r\n '#cc3943',\r\n '#cb3944',\r\n '#cb3944',\r\n '#ca3944',\r\n '#ca3944',\r\n '#c93a45',\r\n '#c93a45',\r\n '#c83a45',\r\n '#c73a45',\r\n '#c73a45',\r\n '#c53a45',\r\n '#c53a45',\r\n '#c43a45',\r\n '#c43a46',\r\n '#c43a46',\r\n '#c43c46',\r\n '#c33c47',\r\n '#c33c47',\r\n '#c23c47',\r\n '#c23c47',\r\n '#c13c48',\r\n '#c13c48',\r\n '#c03c48',\r\n '#c03c48',\r\n '#bf3c48',\r\n '#bf3d4a',\r\n '#be3d4a',\r\n '#be3d4a',\r\n '#bd3d4a',\r\n '#bd3d4b',\r\n '#bc3d4b',\r\n '#bc3d4b',\r\n '#bb3d4b',\r\n '#bb3d4b',\r\n '#bb3d4c',\r\n '#bb3d4c',\r\n '#ba3d4c',\r\n '#ba3e4c',\r\n '#b83e4c',\r\n '#b83e4c',\r\n '#b83e4c',\r\n '#b73e4c',\r\n '#b73e4c',\r\n '#b63e4c',\r\n '#b63e4c',\r\n '#b53e4d',\r\n '#b53e4d',\r\n '#b53e4d',\r\n '#b43e4d',\r\n '#b43e4d',\r\n '#b33e4d',\r\n '#b33f4d',\r\n '#b23f4e',\r\n '#b23f4e',\r\n '#b23f4e',\r\n '#b13f4e',\r\n '#b13f4e',\r\n '#b03e4e',\r\n '#b03e4e',\r\n '#b03e4f',\r\n '#b03e4f',\r\n '#b03e4f',\r\n '#ae3e4f',\r\n '#ae3e4f',\r\n '#ad3e4f',\r\n '#ad3e4f',\r\n '#ac3e4f',\r\n '#ac3f50',\r\n '#ab3f50',\r\n '#ab3f50',\r\n '#aa3f50',\r\n '#aa3f50',\r\n '#a93f50',\r\n '#a93f50',\r\n '#a73f50',\r\n '#a73f50',\r\n '#a63f50',\r\n '#a63f51',\r\n '#a53f51',\r\n '#a53f51',\r\n '#a43f50',\r\n '#a43f50',\r\n '#a43f50',\r\n '#a43f50',\r\n '#a24050',\r\n '#a24050',\r\n '#a14050',\r\n '#a04051',\r\n '#a04051',\r\n '#9f4051',\r\n '#9f4051',\r\n '#9e4051',\r\n '#9c4051',\r\n '#9c4051',\r\n '#9b4051',\r\n '#9a4051',\r\n '#9a4053',\r\n '#994053',\r\n '#994153',\r\n '#984153',\r\n '#974153',\r\n '#974153',\r\n '#964153',\r\n '#954153',\r\n '#954153',\r\n '#934054',\r\n '#934054',\r\n '#924054',\r\n '#914054',\r\n '#914054',\r\n '#904053',\r\n '#8e4053',\r\n '#8e4153',\r\n '#8d4153',\r\n '#8d4153',\r\n '#8d4154',\r\n '#8b4154',\r\n '#8b4154',\r\n '#8a4154',\r\n '#894154',\r\n '#894154',\r\n '#884154',\r\n '#884154',\r\n '#864154',\r\n '#864154',\r\n '#854154',\r\n '#844155',\r\n '#844255',\r\n '#824255',\r\n '#824255',\r\n '#824255',\r\n '#824255',\r\n '#814255',\r\n '#814255',\r\n '#804255',\r\n '#804255',\r\n '#7e4255',\r\n '#7e4255',\r\n '#7d4255',\r\n '#7d4256',\r\n '#7c4256',\r\n '#7c4256',\r\n '#7b4256',\r\n '#7b4256',\r\n '#7b4256',\r\n '#794256',\r\n '#794256',\r\n '#784256',\r\n '#784356',\r\n '#774256',\r\n '#774256',\r\n '#774256',\r\n '#764256',\r\n '#764256',\r\n '#764256',\r\n '#754256',\r\n '#754256',\r\n '#744255',\r\n '#744255',\r\n '#744255',\r\n '#734255',\r\n '#734255',\r\n '#734255',\r\n '#724255',\r\n '#724255',\r\n '#724255',\r\n '#714255',\r\n '#714255',\r\n '#6f4255',\r\n '#6f4255',\r\n '#6f4255',\r\n '#6e4255',\r\n '#6e4255',\r\n '#6e4255',\r\n '#6d4255',\r\n '#6d4255',\r\n '#6d4255',\r\n '#6c4255',\r\n '#6c4255',\r\n '#6c4255',\r\n '#6b4155',\r\n '#6b4155',\r\n '#694155',\r\n '#694155',\r\n '#694155',\r\n '#684155',\r\n '#684155',\r\n '#684155',\r\n '#684155',\r\n '#684155',\r\n '#674155',\r\n '#674155',\r\n '#674155',\r\n '#664154',\r\n '#664154',\r\n '#654154',\r\n '#654154',\r\n '#654154',\r\n '#634154',\r\n '#634154',\r\n '#624154',\r\n '#624154',\r\n '#614154',\r\n '#614154',\r\n '#614154',\r\n '#604054',\r\n '#604054',\r\n '#5f4054',\r\n '#5f4054',\r\n '#5f4054',\r\n '#5e4054',\r\n '#5e4054',\r\n '#5d4054',\r\n '#5d4054',\r\n '#5d4054',\r\n '#5c4053',\r\n '#5c4053',\r\n '#5c4053',\r\n '#5b4053',\r\n '#5b4053',\r\n '#5a4053',\r\n '#5a4053',\r\n '#5a4053',\r\n '#593f53',\r\n '#593f53',\r\n '#593f53',\r\n '#583f53',\r\n '#583f53',\r\n '#583f53',\r\n '#573f53',\r\n '#573e53',\r\n '#573e53',\r\n '#563e53',\r\n '#563e53',\r\n '#563e53',\r\n '#563e53',\r\n '#553e52',\r\n '#553e52',\r\n '#553e52',\r\n '#543e52',\r\n '#543e52',\r\n '#543e52',\r\n '#543e52',\r\n '#543e52',\r\n '#533e52',\r\n '#533e52',\r\n '#533e52',\r\n '#533e52',\r\n '#533e52',\r\n '#523e51',\r\n '#523e51',\r\n '#523e51',\r\n '#523e51',\r\n '#523e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503f51',\r\n '#503f51',\r\n '#4f3f51',\r\n '#4f3f51',\r\n '#4f3f51',\r\n '#4d3f51',\r\n '#4d3f51',\r\n '#4d4151',\r\n '#4b4151',\r\n '#4b4151',\r\n '#4a4152',\r\n '#494152',\r\n '#484253',\r\n '#484253',\r\n '#474253',\r\n '#474253',\r\n '#464353',\r\n '#454353',\r\n '#454353',\r\n '#444454',\r\n '#444454',\r\n '#434454',\r\n '#434454',\r\n '#424454',\r\n '#424554',\r\n '#424554',\r\n '#424554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#404654',\r\n '#404654',\r\n '#404654',\r\n '#404653',\r\n '#404653',\r\n '#3f4653',\r\n '#3f4753',\r\n '#3f4753',\r\n '#3e4753',\r\n '#3e4753',\r\n '#3e4852',\r\n '#3d4852',\r\n '#3d4852',\r\n '#3c4951',\r\n '#3c4951',\r\n '#3b4951',\r\n '#3b4a51',\r\n '#3b4a50',\r\n '#3b4a50',\r\n '#3a4c50',\r\n '#394c50',\r\n '#394c50',\r\n '#394c50',\r\n '#394c50',\r\n '#394c50',\r\n '#384c4f',\r\n '#384c4f',\r\n '#384c4f',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384e50',\r\n '#364e50',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364f4f',\r\n '#364f4f',\r\n '#354f4f',\r\n '#354f4f',\r\n '#354f4f',\r\n '#354f4f',\r\n '#35514f',\r\n '#35514f',\r\n '#35514f',\r\n '#34514f',\r\n '#34514f',\r\n '#34524f',\r\n '#34524f',\r\n '#34524f',\r\n '#34524f',\r\n '#33524e',\r\n '#33534e',\r\n '#33534e',\r\n '#33534e',\r\n '#32534e',\r\n '#32544e',\r\n '#32544e',\r\n '#32544e',\r\n '#32544e',\r\n '#31554e',\r\n '#31554e',\r\n '#31554e',\r\n '#31564d',\r\n '#31564d',\r\n '#31564d',\r\n '#31564d',\r\n '#31574d',\r\n '#30574d',\r\n '#30574d',\r\n '#30584d',\r\n '#30584d',\r\n '#2f584d',\r\n '#2f594d',\r\n '#2f594d',\r\n '#2f594c',\r\n '#2e5a4c',\r\n '#2e5a4c',\r\n '#2e5a4c',\r\n '#2d5b4c',\r\n '#2d5b4c',\r\n '#2d5b4c',\r\n '#2d5b4c',\r\n '#2c5c4c',\r\n '#2c5c4c',\r\n '#2c5c4c',\r\n '#2b5d4b',\r\n '#2b5d4b',\r\n '#2b5d4b',\r\n '#2b5e4b',\r\n '#2a5e4b',\r\n '#2a5e4b',\r\n '#2a5f4b',\r\n '#2a5f4b',\r\n '#2a5f4b',\r\n '#2a604b',\r\n '#2a604b',\r\n '#2a604b',\r\n '#29624b',\r\n '#29624b',\r\n '#29624b',\r\n '#29624b',\r\n '#29634b',\r\n '#29634b',\r\n '#29634b',\r\n '#29644b',\r\n '#28644b',\r\n '#28644b',\r\n '#28644b',\r\n '#28654b',\r\n '#28654a',\r\n '#27654a',\r\n '#27664a',\r\n '#27664a',\r\n '#27664a',\r\n '#27664a',\r\n '#26684a',\r\n '#26684a',\r\n '#26684a',\r\n '#26684a',\r\n '#26694a',\r\n '#25694a',\r\n '#25694a',\r\n '#25694a',\r\n '#256a4a',\r\n '#256a4a',\r\n '#256a4a',\r\n '#256a4a',\r\n '#246a4a',\r\n '#246b49',\r\n '#246b49',\r\n '#246b49',\r\n '#246b49',\r\n '#246c49',\r\n '#246c49',\r\n '#236c49',\r\n '#236c49',\r\n '#236e49',\r\n '#236e49',\r\n '#236e49',\r\n '#236e49',\r\n '#236f49',\r\n '#236f49',\r\n '#236f49',\r\n '#226f49',\r\n '#227049',\r\n '#227049',\r\n '#227049',\r\n '#227149',\r\n '#227149',\r\n '#227149',\r\n '#227149',\r\n '#227349',\r\n '#217349',\r\n '#217349',\r\n '#217449',\r\n '#217449',\r\n '#217449',\r\n '#217449',\r\n '#217549',\r\n '#217549',\r\n '#217549',\r\n '#207649',\r\n '#207649',\r\n '#207649',\r\n '#207847',\r\n '#207847',\r\n '#207847',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207b47',\r\n '#207b47',\r\n '#207b47',\r\n '#207c47',\r\n '#207c47',\r\n '#207c47',\r\n '#207d47',\r\n '#207d47',\r\n '#207e48',\r\n '#207e48',\r\n '#207e48',\r\n '#208048',\r\n '#208048',\r\n '#208048',\r\n '#208148',\r\n '#208148',\r\n '#208148',\r\n '#208248',\r\n '#1f8247',\r\n '#1f8247',\r\n '#1f8347',\r\n '#1f8347',\r\n '#1f8347',\r\n '#1f8547',\r\n '#1f8547',\r\n '#1f8547',\r\n '#1f8647',\r\n '#1f8647',\r\n '#1f8647',\r\n '#1e8747',\r\n '#1e8747',\r\n '#1e8747',\r\n '#1e8747',\r\n '#1e8947',\r\n '#1e8947',\r\n '#1e8947',\r\n '#1e8a47',\r\n '#1e8a47',\r\n '#1e8a47',\r\n '#1e8b47',\r\n '#1e8b47',\r\n '#1e8b47',\r\n '#1e8b47',\r\n '#1e8c47',\r\n '#1e8c47',\r\n '#1e8c47',\r\n '#1e8c47',\r\n '#1e8e47',\r\n '#1e8e47',\r\n '#1e8e47',\r\n '#1e8f47',\r\n '#1d8f47',\r\n '#1d8f47',\r\n '#1d8f47',\r\n '#1d9047',\r\n '#1d9047',\r\n '#1e9047',\r\n '#1e9047',\r\n '#1e9147',\r\n '#1e9147',\r\n '#1e9147',\r\n '#1e9347',\r\n '#1e9347',\r\n '#1e9347',\r\n '#1e9347',\r\n '#1e9447',\r\n '#1e9447',\r\n '#1e9447',\r\n '#1e9548',\r\n '#1e9548',\r\n '#1e9548',\r\n '#1e9648',\r\n '#1e9648',\r\n '#1e9648',\r\n '#1f9848',\r\n '#1f9848',\r\n '#1f9848',\r\n '#209948',\r\n '#209948',\r\n '#209948',\r\n '#209a48',\r\n '#209a48',\r\n '#209a48',\r\n '#209b48',\r\n '#209b48',\r\n '#209b48',\r\n '#209b48',\r\n '#219c48',\r\n '#219c48',\r\n '#219d48',\r\n '#219d48',\r\n '#219e48',\r\n '#219e48',\r\n '#219e48',\r\n '#219f48',\r\n '#219f48',\r\n '#21a048',\r\n '#21a048',\r\n '#21a048',\r\n '#21a148',\r\n '#21a148',\r\n '#21a348',\r\n '#21a348',\r\n '#22a449',\r\n '#22a449',\r\n '#22a449',\r\n '#22a549',\r\n '#22a549',\r\n '#22a649',\r\n '#22a649',\r\n '#22a64a',\r\n '#23a74a',\r\n '#23a74a',\r\n '#23a84a',\r\n '#23a84a',\r\n '#23aa4a',\r\n '#23aa4a',\r\n '#23aa4a',\r\n '#24ab4a',\r\n '#24ab4a',\r\n '#24ab4a',\r\n '#25ac4a',\r\n '#25ac4a',\r\n '#25ad4a',\r\n '#25ad4a',\r\n '#25ad4a',\r\n '#26ae4a',\r\n '#26ae4a',\r\n '#26ae4a',\r\n '#26af4a',\r\n '#26af4a',\r\n '#26b04a',\r\n '#26b04a',\r\n '#26b04a',\r\n '#27b14a',\r\n '#27b14a',\r\n '#27b14a',\r\n '#27b24a',\r\n '#27b24a',\r\n '#27b24a',\r\n '#27b24a',\r\n '#27b34a',\r\n '#27b34a',\r\n '#27b34a',\r\n '#28b54b',\r\n '#28b54b',\r\n '#28b54b',\r\n '#28b54b',\r\n '#28b64b',\r\n '#28b64b',\r\n '#28b64d',\r\n '#28b64d',\r\n '#28b74d',\r\n '#28b74d',\r\n '#28b74d',\r\n '#29b74d',\r\n '#29b84d',\r\n '#29b84d',\r\n '#29b84d',\r\n '#29b84d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2abb4e',\r\n '#2abb4e',\r\n '#2abb4f',\r\n '#2abb4f',\r\n '#2abc4f',\r\n '#2abc4f',\r\n '#2abc4f',\r\n '#2bbc4f',\r\n '#2bbc4f',\r\n '#2bbd4f',\r\n '#2bbd4f',\r\n '#2bbd50',\r\n '#2bbd50',\r\n '#2bbd50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbf51',\r\n '#2cbf51',\r\n '#2cbf51',\r\n '#2cbf51',\r\n '#2cc051',\r\n '#2cc051',\r\n '#2cc051',\r\n '#2cc052',\r\n '#2cc052',\r\n '#2cc152',\r\n '#2cc152',\r\n '#2cc152',\r\n '#2cc152',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2ec453',\r\n '#2ec453',\r\n '#2ec454',\r\n '#2ec454',\r\n '#2ec454',\r\n '#2ec554',\r\n '#2ec554',\r\n '#2fc554',\r\n '#2fc554',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc755',\r\n '#2fc755',\r\n '#2fc756',\r\n '#2fc756',\r\n '#2fc756',\r\n '#2fc756',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc858',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fca58',\r\n '#2fca58',\r\n '#2fca58',\r\n '#2fca59',\r\n '#2fca59',\r\n '#2fca59',\r\n '#2fca59',\r\n '#2fca59',\r\n '#30ca59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n ],\r\n nullColor: 'pink',\r\n}\r\nconst blueGradientBubbles = {\r\n colors: [\r\n '#0c3574',\r\n '#0b3475',\r\n '#0b3475',\r\n '#0c3475',\r\n '#0c3575',\r\n '#0c3475',\r\n '#0c3475',\r\n '#0c3576',\r\n '#0c3677',\r\n '#0c3677',\r\n '#0d3776',\r\n '#0d3676',\r\n '#0e3677',\r\n '#0e3576',\r\n '#0d3576',\r\n '#0d3677',\r\n '#0d3777',\r\n '#0e3778',\r\n '#0e3778',\r\n '#0d3877',\r\n '#0d3878',\r\n '#0d3878',\r\n '#0d3878',\r\n '#0d3878',\r\n '#0d3978',\r\n '#0e3778',\r\n '#0e3779',\r\n '#0e397a',\r\n '#0f3979',\r\n '#0f3a7a',\r\n '#0f3a7b',\r\n '#0f3a7b',\r\n '#0e3a7a',\r\n '#0e3a7a',\r\n '#0f3a7a',\r\n '#0e3a7a',\r\n '#0f3a7c',\r\n '#0f3a7c',\r\n '#0f3a7b',\r\n '#0f3b7b',\r\n '#0f3a7b',\r\n '#0e3a7b',\r\n '#0e3b7c',\r\n '#0f3c7c',\r\n '#0f3c7c',\r\n '#0f3d7d',\r\n '#0f3d7d',\r\n '#0f3c7d',\r\n '#0f3c7e',\r\n '#0f3d7e',\r\n '#0f3d7e',\r\n '#0f3d7e',\r\n '#0f3e7e',\r\n '#0f3d7e',\r\n '#103e7e',\r\n '#113e7f',\r\n '#103e7e',\r\n '#103d7e',\r\n '#103e7f',\r\n '#103e7e',\r\n '#113e80',\r\n '#113f80',\r\n '#103f7f',\r\n '#114080',\r\n '#113f81',\r\n '#114081',\r\n '#113f81',\r\n '#103e80',\r\n '#103f81',\r\n '#104181',\r\n '#104181',\r\n '#103f81',\r\n '#114082',\r\n '#103f82',\r\n '#103f81',\r\n '#114081',\r\n '#114282',\r\n '#114282',\r\n '#114282',\r\n '#124182',\r\n '#114082',\r\n '#114182',\r\n '#114283',\r\n '#124384',\r\n '#114384',\r\n '#114383',\r\n '#124383',\r\n '#124485',\r\n '#114384',\r\n '#114384',\r\n '#114384',\r\n '#114484',\r\n '#124585',\r\n '#124585',\r\n '#124585',\r\n '#134587',\r\n '#134586',\r\n '#134586',\r\n '#134687',\r\n '#134687',\r\n '#134586',\r\n '#134686',\r\n '#134687',\r\n '#134787',\r\n '#134788',\r\n '#134688',\r\n '#134688',\r\n '#134687',\r\n '#124788',\r\n '#124789',\r\n '#134688',\r\n '#134688',\r\n '#134688',\r\n '#134788',\r\n '#134889',\r\n '#13488a',\r\n '#13488a',\r\n '#13488a',\r\n '#134889',\r\n '#134789',\r\n '#13478a',\r\n '#13498a',\r\n '#14498a',\r\n '#15498b',\r\n '#14488b',\r\n '#14498c',\r\n '#15498c',\r\n '#14498b',\r\n '#15498c',\r\n '#15498c',\r\n '#14498c',\r\n '#154a8d',\r\n '#144b8c',\r\n '#144b8c',\r\n '#154b8d',\r\n '#144c8d',\r\n '#154b8d',\r\n '#154b8d',\r\n '#154c8d',\r\n '#144c8d',\r\n '#154c8d',\r\n '#154c8d',\r\n '#164c8e',\r\n '#164c8e',\r\n '#164c8e',\r\n '#164c8e',\r\n '#154d8e',\r\n '#154d8f',\r\n '#164e90',\r\n '#164e90',\r\n '#164e90',\r\n '#154e8f',\r\n '#154d90',\r\n '#154e90',\r\n '#164e90',\r\n '#154e91',\r\n '#154f91',\r\n '#155091',\r\n '#165091',\r\n '#164f91',\r\n '#164f92',\r\n '#165092',\r\n '#165092',\r\n '#165092',\r\n '#165092',\r\n '#155192',\r\n '#155192',\r\n '#175093',\r\n '#175293',\r\n '#175293',\r\n '#175093',\r\n '#175093',\r\n '#175293',\r\n '#175293',\r\n '#175193',\r\n '#175294',\r\n '#175394',\r\n '#175394',\r\n '#175294',\r\n '#175395',\r\n '#175295',\r\n '#175295',\r\n '#175395',\r\n '#175395',\r\n '#185495',\r\n '#185495',\r\n '#175396',\r\n '#175497',\r\n '#175397',\r\n '#175497',\r\n '#175597',\r\n '#175597',\r\n '#175597',\r\n '#175497',\r\n '#185497',\r\n '#195698',\r\n '#195798',\r\n '#185597',\r\n '#185497',\r\n '#185599',\r\n '#195799',\r\n '#195799',\r\n '#185799',\r\n '#185699',\r\n '#195699',\r\n '#195799',\r\n '#195799',\r\n '#19589a',\r\n '#185899',\r\n '#185899',\r\n '#18589a',\r\n '#18589a',\r\n '#18599a',\r\n '#18589a',\r\n '#18579a',\r\n '#19589b',\r\n '#19599b',\r\n '#19599a',\r\n '#18599a',\r\n '#1a5a9c',\r\n '#1a5a9d',\r\n '#1a5a9c',\r\n '#1a599d',\r\n '#1a5a9d',\r\n '#1a5a9e',\r\n '#1a5a9e',\r\n '#195a9d',\r\n '#195a9d',\r\n '#195a9d',\r\n '#195a9d',\r\n '#1a5a9e',\r\n '#1a5b9f',\r\n '#1a5b9e',\r\n '#1a5b9e',\r\n '#1a5d9e',\r\n '#1a5c9f',\r\n '#195c9f',\r\n '#195c9f',\r\n '#195da0',\r\n '#195d9f',\r\n '#195ca0',\r\n '#1a5ca0',\r\n '#1a5d9f',\r\n '#1a5ea1',\r\n '#1a5ea1',\r\n '#1a5da0',\r\n '#1a5da0',\r\n '#195ea0',\r\n '#195ea0',\r\n '#1a5ea0',\r\n '#1a5ea1',\r\n '#1c5fa3',\r\n '#1c5fa3',\r\n '#1b5fa3',\r\n '#1b5ea2',\r\n '#1b5ea2',\r\n '#1b5ea2',\r\n '#1b5fa3',\r\n '#1b60a3',\r\n '#1b60a3',\r\n '#1b5fa3',\r\n '#1b60a3',\r\n '#1c61a4',\r\n '#1b60a4',\r\n '#1b60a4',\r\n '#1b61a4',\r\n '#1b60a4',\r\n '#1b60a4',\r\n '#1b60a4',\r\n '#1b62a4',\r\n '#1b62a5',\r\n '#1b61a5',\r\n '#1b62a5',\r\n '#1b62a5',\r\n '#1b61a5',\r\n '#1d61a6',\r\n '#1d63a6',\r\n '#1c62a6',\r\n '#1d63a6',\r\n '#1d62a6',\r\n '#1c62a6',\r\n '#1c63a7',\r\n '#1d64a8',\r\n '#1c64a7',\r\n '#1c64a7',\r\n '#1d65a8',\r\n '#1c63a8',\r\n '#1d64a9',\r\n '#1d65a9',\r\n '#1d65a9',\r\n '#1d65a9',\r\n '#1d65a9',\r\n '#1d66a9',\r\n '#1d66a9',\r\n '#1c65a9',\r\n '#1d66aa',\r\n '#1d66aa',\r\n '#1c65aa',\r\n '#1c66aa',\r\n '#1c66aa',\r\n '#1d66aa',\r\n '#1c66ab',\r\n '#1c68ab',\r\n '#1c67ab',\r\n '#1c67ab',\r\n '#1d68ab',\r\n '#1d68ac',\r\n '#1e68ac',\r\n '#1e67ab',\r\n '#1d67ab',\r\n '#1e69ac',\r\n '#1e69ac',\r\n '#1d68ac',\r\n '#1d68ac',\r\n '#1e69ae',\r\n '#1e6aae',\r\n '#1e6aad',\r\n '#1e69ad',\r\n '#1e6aae',\r\n '#1d69ae',\r\n '#1d6aae',\r\n '#1e6bae',\r\n '#1e6aaf',\r\n '#1e6baf',\r\n '#1e6baf',\r\n '#1e6bb0',\r\n '#1e6cb0',\r\n '#1d6baf',\r\n '#1d6baf',\r\n '#1e6bb0',\r\n '#1d6ab0',\r\n '#1d6cb0',\r\n '#1d6db1',\r\n '#1e6cb1',\r\n '#1e6db0',\r\n '#1e6cb1',\r\n '#1d6cb1',\r\n '#1d6cb0',\r\n '#1f6db1',\r\n '#1f6cb1',\r\n '#1f6cb1',\r\n '#1f6db2',\r\n '#1f6cb1',\r\n '#1f6db1',\r\n '#1f6eb3',\r\n '#1f6fb3',\r\n '#1f6eb3',\r\n '#1f6eb3',\r\n '#1f6fb3',\r\n '#1f6fb3',\r\n '#1f6fb4',\r\n '#1f6fb4',\r\n '#1f6fb4',\r\n '#2070b5',\r\n '#1f70b4',\r\n '#1f70b4',\r\n '#1f70b4',\r\n '#1f71b5',\r\n '#1f71b5',\r\n '#1f71b5',\r\n '#1f71b5',\r\n '#1f70b5',\r\n '#1f71b5',\r\n '#1f72b6',\r\n '#1f72b6',\r\n '#1f71b6',\r\n '#1f71b6',\r\n '#1f72b5',\r\n '#2072b6',\r\n '#2172b7',\r\n '#2172b7',\r\n '#2172b6',\r\n '#2172b6',\r\n '#2172b7',\r\n '#2072b7',\r\n '#2073b8',\r\n '#2173b9',\r\n '#2173b9',\r\n '#2075b8',\r\n '#2075b8',\r\n '#2174b8',\r\n '#2174b9',\r\n '#2175ba',\r\n '#2174ba',\r\n '#2174ba',\r\n '#2175ba',\r\n '#2175ba',\r\n '#2176bb',\r\n '#2176bb',\r\n '#2076ba',\r\n '#2076ba',\r\n '#2176bb',\r\n '#2176bb',\r\n '#2076bb',\r\n '#2077bb',\r\n '#2177bc',\r\n '#2077bb',\r\n '#2077bb',\r\n '#2077bc',\r\n '#2077bc',\r\n '#2077bc',\r\n '#2177bd',\r\n '#2078bc',\r\n '#2078bc',\r\n '#2178bd',\r\n '#2279be',\r\n '#2178be',\r\n '#2179be',\r\n '#2179be',\r\n '#2279bf',\r\n '#2278bf',\r\n '#2179bf',\r\n '#217abf',\r\n '#227ac0',\r\n '#2279c0',\r\n '#227ac0',\r\n '#227abf',\r\n '#227ac0',\r\n '#217bc0',\r\n '#227bc0',\r\n '#227bc0',\r\n '#217bc0',\r\n '#217ac0',\r\n '#217bc0',\r\n '#217cc1',\r\n '#227cc1',\r\n '#217cc1',\r\n '#217cc1',\r\n '#227cc1',\r\n '#217cc1',\r\n '#227cc2',\r\n '#227cc2',\r\n '#227dc2',\r\n '#217dc1',\r\n '#217dc2',\r\n '#217dc2',\r\n '#217dc3',\r\n '#217ec3',\r\n '#217ec3',\r\n '#217ec3',\r\n '#227ec4',\r\n '#237fc4',\r\n '#237ec5',\r\n '#237ec5',\r\n '#237ec5',\r\n '#237ec4',\r\n '#237ec4',\r\n '#237ec6',\r\n '#237fc6',\r\n '#2380c6',\r\n '#237fc5',\r\n '#237fc5',\r\n '#2380c5',\r\n '#2380c7',\r\n '#2381c6',\r\n '#2381c6',\r\n '#2380c6',\r\n '#2381c7',\r\n '#2380c6',\r\n '#2380c7',\r\n '#2381c8',\r\n '#2382c7',\r\n '#2381c7',\r\n '#2381c7',\r\n '#2382c8',\r\n '#2382c8',\r\n '#2383c8',\r\n '#2384c9',\r\n '#2384c9',\r\n '#2383c8',\r\n '#2383c9',\r\n '#2383ca',\r\n '#2384ca',\r\n '#2384ca',\r\n '#2383ca',\r\n '#2383ca',\r\n '#2384ca',\r\n '#2384ca',\r\n '#2484cb',\r\n '#2485cb',\r\n '#2385cb',\r\n '#2384cb',\r\n '#2385cb',\r\n '#2485cb',\r\n '#2585cc',\r\n '#2586cc',\r\n '#2485cc',\r\n '#2485cc',\r\n '#2485cc',\r\n '#2486cd',\r\n '#2586cd',\r\n '#2587cd',\r\n '#2487cc',\r\n '#2486cd',\r\n '#2587cd',\r\n '#2587cd',\r\n '#2487ce',\r\n '#2588ce',\r\n '#2588ce',\r\n '#2588ce',\r\n '#2488cf',\r\n '#2588cf',\r\n '#2589ce',\r\n '#2589ce',\r\n '#2688cf',\r\n '#2589ce',\r\n '#2789cf',\r\n '#2889d0',\r\n '#2889d0',\r\n '#288ad0',\r\n '#2889d0',\r\n '#298ad0',\r\n '#2b8bd0',\r\n '#2a89cf',\r\n '#2989cf',\r\n '#2b8bcf',\r\n '#2c8cd0',\r\n '#2c8ccf',\r\n '#2d8cd0',\r\n '#2d8cd0',\r\n '#2c8bd0',\r\n '#2e8cd1',\r\n '#2e8cd1',\r\n '#2e8cd0',\r\n '#2e8cd1',\r\n '#2e8dd0',\r\n '#308ed0',\r\n '#318ed1',\r\n '#318dd1',\r\n '#308dd0',\r\n '#308dd0',\r\n '#318fd0',\r\n '#338fd1',\r\n '#328dd1',\r\n '#338ed1',\r\n '#348fd1',\r\n '#348fd2',\r\n '#338ed2',\r\n '#338ed1',\r\n '#348fd1',\r\n '#3590d1',\r\n '#368fd2',\r\n '#3690d1',\r\n '#3690d1',\r\n '#3690d2',\r\n '#3791d3',\r\n '#3791d3',\r\n '#3791d2',\r\n '#3790d2',\r\n '#3790d2',\r\n '#3892d2',\r\n '#3892d2',\r\n '#3992d2',\r\n '#3a92d3',\r\n '#3a93d3',\r\n '#3b92d3',\r\n '#3b92d3',\r\n '#3a93d3',\r\n '#3a93d3',\r\n '#3b93d3',\r\n '#3c94d3',\r\n '#3d94d3',\r\n '#3d94d3',\r\n '#3d94d3',\r\n '#3d93d3',\r\n '#3f93d4',\r\n '#3f96d4',\r\n '#3f96d4',\r\n '#3e95d3',\r\n '#3e96d3',\r\n '#3f96d4',\r\n '#4095d4',\r\n '#4095d4',\r\n '#3f96d4',\r\n '#3f96d4',\r\n '#4096d4',\r\n '#4297d4',\r\n '#4197d4',\r\n '#4096d3',\r\n '#4196d3',\r\n '#4397d5',\r\n '#4398d5',\r\n '#4397d5',\r\n '#4398d5',\r\n '#4398d5',\r\n '#4499d5',\r\n '#4499d5',\r\n '#4499d5',\r\n '#4499d5',\r\n '#459ad5',\r\n '#459ad4',\r\n '#459ad4',\r\n '#459ad4',\r\n '#459ad5',\r\n '#459ad6',\r\n '#469bd6',\r\n '#469bd5',\r\n '#469ad5',\r\n '#469ad5',\r\n '#479bd5',\r\n '#499cd6',\r\n '#499cd6',\r\n '#499cd5',\r\n '#499cd5',\r\n '#499cd6',\r\n '#4a9dd6',\r\n '#4a9fd6',\r\n '#4a9ed6',\r\n '#4a9ed5',\r\n '#4a9ed6',\r\n '#4b9ed7',\r\n '#4b9ed7',\r\n '#4b9fd7',\r\n '#4a9ed7',\r\n '#4b9ed7',\r\n '#4ca0d7',\r\n '#4c9ed7',\r\n '#4b9ed7',\r\n '#4c9fd7',\r\n '#4da0d7',\r\n '#4da0d8',\r\n '#4da0d8',\r\n '#4c9fd8',\r\n '#4c9fd7',\r\n '#4da0d7',\r\n '#4ea2d8',\r\n '#4ea2d8',\r\n '#4ea1d8',\r\n '#4ea2d7',\r\n '#4ea2d7',\r\n '#4ea2d8',\r\n '#4ea2d7',\r\n '#4ea2d7',\r\n '#4fa3d9',\r\n '#50a3d9',\r\n '#50a3d8',\r\n '#4fa2d8',\r\n '#4fa3d8',\r\n '#51a3d8',\r\n '#51a3d8',\r\n '#51a3d9',\r\n '#51a3d8',\r\n '#51a3d8',\r\n '#52a4d9',\r\n '#52a5da',\r\n '#52a4d9',\r\n '#52a4d9',\r\n '#52a5da',\r\n '#53a5da',\r\n '#53a5da',\r\n '#53a5da',\r\n '#54a5da',\r\n '#54a5da',\r\n '#54a6d9',\r\n '#54a7d9',\r\n '#54a6d9',\r\n '#54a7d9',\r\n '#55a8da',\r\n '#55a8da',\r\n '#56a8db',\r\n '#55a7da',\r\n '#56a8db',\r\n '#57a8db',\r\n '#56a7da',\r\n '#57a8db',\r\n '#57a8db',\r\n '#57a8db',\r\n '#58a9da',\r\n '#58aada',\r\n '#57a9da',\r\n '#57a8da',\r\n '#57a9da',\r\n '#58aadb',\r\n '#59aadb',\r\n '#59aadb',\r\n '#59aadc',\r\n '#59abdb',\r\n '#5aacdb',\r\n '#5aabdb',\r\n '#59abdb',\r\n '#5babdb',\r\n '#5babdc',\r\n '#5babdc',\r\n '#5aabdc',\r\n '#5baddc',\r\n '#5bacdc',\r\n '#5cacdc',\r\n '#5bacdc',\r\n '#5caedc',\r\n '#5caddc',\r\n '#5cacdc',\r\n '#5caddc',\r\n '#5dafdc',\r\n '#5dafdc',\r\n '#5caedc',\r\n '#5daedc',\r\n '#5eb0dd',\r\n '#5db0dd',\r\n '#5eafdd',\r\n '#5eafdd',\r\n '#5fb1dd',\r\n '#5fb1dd',\r\n '#5fafdd',\r\n '#5fafdd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#61b1de',\r\n '#61b1de',\r\n '#61b1de',\r\n '#61b1de',\r\n '#61b2dd',\r\n '#61b2dd',\r\n '#62b2dd',\r\n '#62b2de',\r\n '#62b2de',\r\n '#62b2de',\r\n '#63b3dd',\r\n '#63b4de',\r\n '#63b4df',\r\n '#63b4df',\r\n '#63b3df',\r\n '#63b4de',\r\n '#63b4de',\r\n '#63b4df',\r\n '#63b5df',\r\n '#64b6df',\r\n '#64b6df',\r\n '#64b6df',\r\n '#64b5de',\r\n '#65b6e0',\r\n '#65b7e0',\r\n '#65b7df',\r\n '#65b6e0',\r\n '#65b6e0',\r\n '#65b6df',\r\n '#66b6df',\r\n '#67b7e0',\r\n '#67b8e0',\r\n '#66b8df',\r\n '#66b8e0',\r\n '#67b8df',\r\n '#67b7df',\r\n '#67b8e0',\r\n '#67b9e0',\r\n '#67b8e0',\r\n '#68b9e1',\r\n '#69bae1',\r\n '#69bae1',\r\n '#68b8e0',\r\n '#69b9e0',\r\n '#69bae0',\r\n '#69bae0',\r\n '#6abbe1',\r\n '#69bbe0',\r\n '#69bbe0',\r\n '#69bbe1',\r\n '#6abce1',\r\n '#6abbe0',\r\n '#6abbe0',\r\n '#6abbe1',\r\n '#6abce1',\r\n '#6abce2',\r\n '#6bbde2',\r\n '#6bbee1',\r\n '#6cbde2',\r\n '#6cbde2',\r\n '#6bbde1',\r\n '#6cbde1',\r\n '#6cbde2',\r\n '#6cbde2',\r\n '#6cbde2',\r\n '#6cbee2',\r\n '#6cbee2',\r\n '#6dbfe2',\r\n '#6dbfe2',\r\n '#6dbee2',\r\n '#6ebee3',\r\n '#6fbfe3',\r\n '#6fc0e3',\r\n '#6fc0e2',\r\n '#6ebfe3',\r\n '#6ec0e3',\r\n '#6ec1e3',\r\n '#6ec1e3',\r\n '#6ec1e4',\r\n '#6fc0e3',\r\n '#70c1e3',\r\n '#70c2e3',\r\n '#70c2e4',\r\n '#6fc1e3',\r\n '#6fc1e3',\r\n '#70c2e3',\r\n '#71c2e4',\r\n '#70c3e4',\r\n '#70c2e4',\r\n '#70c2e4',\r\n '#72c4e4',\r\n '#72c4e4',\r\n '#71c2e4',\r\n '#71c2e4',\r\n '#73c4e4',\r\n '#72c3e4',\r\n '#72c3e4',\r\n '#72c3e4',\r\n '#72c4e4',\r\n '#73c5e4',\r\n '#73c5e4',\r\n '#72c5e4',\r\n '#73c6e4',\r\n '#73c5e4',\r\n '#73c6e4',\r\n '#74c7e5',\r\n '#73c6e4',\r\n '#75c8e5',\r\n '#74c7e5',\r\n '#74c7e5',\r\n '#74c6e5',\r\n '#75c6e5',\r\n '#76c7e5',\r\n '#75c7e5',\r\n '#76c8e5',\r\n '#75c8e5',\r\n '#75c8e6',\r\n '#76c8e6',\r\n '#77c8e5',\r\n '#76c9e6',\r\n '#76c9e5',\r\n '#76c9e5',\r\n '#77cae6',\r\n '#77c9e6',\r\n '#77c9e6',\r\n '#77c9e6',\r\n '#78cae6',\r\n '#77cbe7',\r\n '#77cbe7',\r\n '#78cbe7',\r\n '#78cbe7',\r\n '#79cae6',\r\n '#78cae6',\r\n '#78cbe7',\r\n '#78cae6',\r\n '#79cae6',\r\n '#7acce6',\r\n '#7acde7',\r\n '#7acbe7',\r\n '#79cce6',\r\n '#79cee7',\r\n '#7acee8',\r\n '#7acde8',\r\n '#79cde7',\r\n '#7acde7',\r\n '#7bcee8',\r\n '#7acee7',\r\n '#7acfe7',\r\n '#7acee7',\r\n '#7ccee8',\r\n '#7bcee7',\r\n '#7bcfe7',\r\n '#7bcfe7',\r\n '#7bcfe8',\r\n '#7dd0e9',\r\n '#7dd0e9',\r\n '#7ccfe8',\r\n '#7ccfe8',\r\n '#7cd1e8',\r\n '#7cd1e8',\r\n '#7cd0e8',\r\n '#7cd0e8',\r\n '#7dd1e8',\r\n '#7dd2e9',\r\n '#7dd2e9',\r\n '#7ed2e9',\r\n '#7dd1e8',\r\n '#7dd2e8',\r\n '#7fd3ea',\r\n '#7fd3ea',\r\n '#7ed3e9',\r\n '#7ed2ea',\r\n '#80d2ea',\r\n '#7fd3e9',\r\n '#7fd2e9',\r\n '#80d4ea',\r\n '#80d5ea',\r\n '#7fd4e9',\r\n '#7fd4e9',\r\n '#80d4e9',\r\n '#81d6ea',\r\n '#81d6eb',\r\n '#80d4ea',\r\n '#80d5ea',\r\n '#80d6ea',\r\n '#80d5ea',\r\n '#81d6ea',\r\n '#81d6ea',\r\n '#82d6ea',\r\n '#82d7ea',\r\n '#82d8ea',\r\n '#81d6ea',\r\n '#81d6ea',\r\n '#82d8ea',\r\n '#82d7eb',\r\n '#82d8eb',\r\n '#82d8eb',\r\n '#82d7eb',\r\n '#83d9eb',\r\n '#84d9ec',\r\n '#84d9ec',\r\n '#83d8eb',\r\n '#83d8eb',\r\n '#85d8eb',\r\n '#85d9eb',\r\n '#84daeb',\r\n '#85daeb',\r\n '#85dbec',\r\n '#85dbec',\r\n '#84daec',\r\n '#85dbec',\r\n '#86dbec',\r\n '#86dbec',\r\n '#85dbec',\r\n '#85dbec',\r\n '#85dbec',\r\n '#85dcec',\r\n '#86ddec',\r\n '#86dceb',\r\n '#86dceb',\r\n '#87ddec',\r\n '#86dced',\r\n '#86dcec',\r\n '#86deec',\r\n '#86deed',\r\n '#87ddec',\r\n '#87deed',\r\n '#87dfec',\r\n '#87deec',\r\n '#88deed',\r\n '#89deec',\r\n '#88deec',\r\n '#88dfed',\r\n '#88dfec',\r\n '#89e0ed',\r\n '#89e0ee',\r\n '#88dfee',\r\n '#89e0ee',\r\n '#88dfed',\r\n '#88dfed',\r\n '#8ae1ee',\r\n '#89e1ed',\r\n '#8ae2ee',\r\n '#8ae2ee',\r\n '#8ae2ee',\r\n '#8ae1ee',\r\n '#8be3ee',\r\n '#8be3ee',\r\n '#8be2ee',\r\n '#8be2ee',\r\n '#8be2ef',\r\n '#8ce2ef',\r\n '#8ce3ef',\r\n '#8be3ee',\r\n '#8ce4ef',\r\n '#8be3ef',\r\n '#8be3ee',\r\n '#8de5ef',\r\n '#8de4ef',\r\n '#8de4ef',\r\n '#8de5ef',\r\n '#8ce4ef',\r\n '#8de4ef',\r\n '#8de4ef',\r\n '#8de4f0',\r\n '#8ee6f0',\r\n '#8ee6f0',\r\n '#8ee6ef',\r\n '#8ee6ef',\r\n '#8de7ef',\r\n '#8de6ef',\r\n '#8fe7f0',\r\n '#8fe8f1',\r\n '#8ee6ef',\r\n '#8ee6ef',\r\n '#8ee8f1',\r\n '#8fe8f1',\r\n '#8fe7f0',\r\n '#90e8f1',\r\n '#90e8f1',\r\n '#8fe8f0',\r\n '#90eaf1',\r\n '#8fe9f0',\r\n '#8fe9f0',\r\n '#90eaf1',\r\n '#90eaf1',\r\n '#91eaf1',\r\n '#91eaf1',\r\n '#91eaf1',\r\n '#92ebf2',\r\n '#91eaf1',\r\n ],\r\n nullColor: 'pink',\r\n}\r\n\r\nexport const gradients: Record = {\r\n [ScaleId.IntradayReduced]: redGreenGradient,\r\n [ScaleId.DayPerf]: redGreenGradient,\r\n _5: redGreenGradient,\r\n _10: redGreenGradient,\r\n _15: redGreenGradient,\r\n _20: redGreenGradient,\r\n _25: redGreenGradient,\r\n _relvol: blueGradient,\r\n _pe: greenRedGradient,\r\n _fpe: greenRedGradient,\r\n _peg: greenRedGradient,\r\n _ps: greenRedGradient,\r\n _pb: greenRedGradient,\r\n _div: greenGradient,\r\n _eps5y: redGreenGradient,\r\n _short: redGradient,\r\n _rec: redGreenGradient,\r\n _earndate: earningsGradient,\r\n _portfolioPct: redGreenGradient,\r\n _portfolioUsd: redGreenGradient,\r\n _percentHundred: redGreenGradient,\r\n}\r\n\r\nexport const bubbleGradients: Record = {\r\n [ScaleId.IntradayReduced]: redGreenGradientBubbles,\r\n [ScaleId.DayPerf]: redGreenGradientBubbles,\r\n _5: redGreenGradientBubbles,\r\n _10: redGreenGradientBubbles,\r\n _15: redGreenGradientBubbles,\r\n _20: redGreenGradientBubbles,\r\n _25: redGreenGradientBubbles,\r\n _relvol: blueGradientBubbles,\r\n _pe: redGreenGradientBubbles,\r\n _fpe: redGreenGradientBubbles,\r\n _peg: redGreenGradientBubbles,\r\n _ps: redGreenGradientBubbles,\r\n _pb: redGreenGradientBubbles,\r\n _div: redGreenGradientBubbles,\r\n _eps5y: redGreenGradientBubbles,\r\n _short: redGreenGradientBubbles, // TODO red skala\r\n _rec: redGreenGradientBubbles,\r\n _earndate: redGreenGradientBubbles,\r\n _portfolioPct: redGreenGradientBubbles,\r\n _portfolioUsd: redGreenGradientBubbles,\r\n _percentHundred: redGreenGradientBubbles,\r\n}\r\n\r\nexport const gradientSmall = redGreenGradientSmall\r\n","import { HTMLAttributeReferrerPolicy } from 'react'\r\n\r\nimport { encodeQueryString } from '../queryString'\r\n\r\nconst DEFAULT_OVERLAYS =\r\n '&o[0][ot]=sma&o[0][op]=50&o[0][oc]=FF8F33C6&o[1][ot]=sma&o[1][op]=200&o[1][oc]=DCB3326D&o[2][ot]=patterns&o[2][op]=&o[2][oc]=000'\r\n\r\nexport function getHoverChartUrl(\r\n ticker: string,\r\n escaped: boolean = false,\r\n timeframe = FinvizSettings.hoverCharts?.stock?.timeframe,\r\n dateRange = FinvizSettings.hoverCharts?.stock?.dateRange\r\n): string {\r\n const theme = FinvizSettings.hasDarkTheme ? 'd' : undefined\r\n const overlays = FinvizSettings.hasUserPremium && FinvizSettings.hoverCharts?.stock?.patterns ? DEFAULT_OVERLAYS : ''\r\n const query = encodeQueryString({\r\n cs: 'm',\r\n t: ticker,\r\n tf: timeframe ?? 'd',\r\n ct: 'candle_stick',\r\n r: dateRange,\r\n tm: theme,\r\n })\r\n\r\n let imgUrl = `${FinvizSettings.nodeChartsDomain}/chart.ashx?${query}${overlays}`\r\n\r\n if (escaped) {\r\n // \"Escaping\" [ and ] because of how boxover.js works\r\n imgUrl = imgUrl.replace(/\\[/g, '[[').replace(/]/g, ']]')\r\n }\r\n return imgUrl\r\n}\r\n\r\nexport function getHoverChartDimensions() {\r\n switch (FinvizSettings.hoverCharts?.stock?.timeframe) {\r\n case 'i3':\r\n case 'i15':\r\n return { width: 584, height: 180 }\r\n case 'i5':\r\n return { width: 376, height: 180 }\r\n case 'd':\r\n if (FinvizSettings.hoverCharts?.stock?.patterns) return { width: 464, height: 230 }\r\n return { width: 324, height: 180 }\r\n default:\r\n return { width: 324, height: 180 }\r\n }\r\n}\r\n\r\nexport function getReferrerPolicy(): HTMLAttributeReferrerPolicy {\r\n return 'no-referrer-when-downgrade'\r\n}\r\n\r\nexport function getHoverChartImg(\r\n ticker: string,\r\n escaped: boolean = false,\r\n timeframe = FinvizSettings.hoverCharts?.stock?.timeframe,\r\n dateRange?: string\r\n) {\r\n const chartSize = getHoverChartDimensions()\r\n const referrerPolicy = getReferrerPolicy()\r\n const url = getHoverChartUrl(ticker, escaped, timeframe, dateRange)\r\n const srcSet = getSrcSet(url)\r\n const srcsetString = srcSet?.length ? ` srcset='${srcSet}'` : ''\r\n\r\n return {\r\n img: ``,\r\n ...chartSize,\r\n }\r\n}\r\n\r\nexport function getSrcSet(url: string) {\r\n // You must keep a space after , for refresh to work\r\n return `${url} 1x, ${url}&sf=2 2x`\r\n}\r\n","export function getScaleRatio() {\r\n return window.devicePixelRatio ?? 1\r\n}\r\n\r\nexport function retinafy(\r\n canvas: HTMLCanvasElement | undefined | null,\r\n context: CanvasRenderingContext2D | undefined,\r\n width: number,\r\n height: number\r\n) {\r\n if (!canvas || !context) return\r\n\r\n const ratio = getScaleRatio()\r\n\r\n canvas.width = width * ratio\r\n canvas.height = height * ratio\r\n canvas.style.width = width + 'px'\r\n canvas.style.height = height + 'px'\r\n context.scale(ratio, ratio)\r\n\r\n return ratio\r\n}\r\n","export const FONT_SIZE = {\r\n XXS: 5,\r\n XS: 7,\r\n S: 8,\r\n M: 10,\r\n L: 11,\r\n XXL: 18,\r\n XXXL: 23,\r\n}\r\nexport const LINE_HEIGHT = {\r\n XS: 7,\r\n S: 8,\r\n M: 10,\r\n}\r\nexport const PADDING = {\r\n XXXS: 1,\r\n XXS: 2,\r\n XS: 3,\r\n S: 5,\r\n}\r\nexport const MARGIN = {\r\n XS: 4,\r\n}\r\nexport const CHART_MARGIN = {\r\n S: 15,\r\n M: 30,\r\n L: 35,\r\n XL: 38,\r\n XXL: 48,\r\n}\r\nexport const SETTINGS_HEIGHT = 44\r\nexport const TICKER_TIMEFRAME_CHANGE_HEIGHT = 20\r\nexport const OFFSET = {\r\n XXS: 2,\r\n XS: 4,\r\n S: 6,\r\n M: 8,\r\n XXL: 20,\r\n}\r\nexport const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n\r\nexport enum ChartEditorEnum {\r\n publish = 'publish',\r\n tools = 'tools',\r\n ideas = 'ideas',\r\n settings = 'settings',\r\n timeframe = 'timeframe',\r\n}\r\n\r\nexport enum LayoutType {\r\n '1h1v' = '1h1v',\r\n '1h2v' = '1h2v',\r\n '1h3v' = '1h3v',\r\n '2h1v' = '2h1v',\r\n '2h2v' = '2h2v',\r\n '3h1v' = '3h1v',\r\n '3h2v' = '3h2v',\r\n '1l2r' = '1l2r',\r\n '1t2b' = '1t2b',\r\n}\r\n\r\nexport enum CanvasElementType {\r\n arrow = 'canvas/arrow',\r\n avwapV1 = 'canvas/avwap/avwap_v1',\r\n brushV1 = 'canvas/brush/brush_v1',\r\n calloutV1 = 'canvas/callout/callout_v1',\r\n curve = 'canvas/curve',\r\n element = 'canvas/element',\r\n elliottWaves = 'canvas/elliott_waves/elliott_waves',\r\n ellipse = 'canvas/ellipse',\r\n ellipseV1 = 'canvas/ellipse/ellipse_v1',\r\n fibonacciRetracements = 'canvas/fibonacci_retracements',\r\n horizontalLine = 'canvas/horizontal_line',\r\n line = 'canvas/line',\r\n measure = 'canvas/measure',\r\n pitchforkV1 = 'canvas/pitchfork/pitchfork_v1',\r\n polygon = 'canvas/polygon',\r\n position = 'canvas/position',\r\n rectangle = 'canvas/rectangle',\r\n rotatedRectangle = 'canvas/rotated_rectangle',\r\n rotatedRectangleV1 = 'canvas/rotated_rectangle/rotated_rectangle_v1',\r\n scaledLine = 'canvas/scaled_line',\r\n scaledText = 'canvas/scaled_text',\r\n symbol = 'canvas/symbol',\r\n text = 'canvas/text',\r\n triangle = 'canvas/triangle',\r\n verticalLine = 'canvas/vertical_line',\r\n xabcd = 'canvas/xabcd',\r\n}\r\n\r\nexport enum ChartElementType {\r\n CandleStick = 'charts/candle_stick',\r\n HeikinAshi = 'charts/heikin_ashi',\r\n HollowCandleStick = 'charts/candle_stick_hollow',\r\n LineChart = 'charts/line_chart',\r\n OhlcChart = 'charts/ohlc_chart',\r\n MarketSentiment = 'charts/market_sentiment',\r\n MultiLineChart = 'charts/multi_line_chart',\r\n PerfChart = 'charts/perf_chart',\r\n}\r\n\r\nexport enum IndicatorType {\r\n Indicator = 'indicators/indicator',\r\n None = 'indicators/none',\r\n Adx = 'indicators/adx',\r\n Aro = 'indicators/aro',\r\n Aroosc = 'indicators/aroosc',\r\n Atr = 'indicators/atr',\r\n Cci = 'indicators/cci',\r\n Cot = 'indicators/cot',\r\n Fi = 'indicators/fi',\r\n Macd = 'indicators/macd',\r\n Mfi = 'indicators/mfi',\r\n Obv = 'indicators/obv',\r\n Perf = 'indicators/perf',\r\n Rmi = 'indicators/rmi',\r\n Roc = 'indicators/roc',\r\n Rsi = 'indicators/rsi',\r\n Rvol = 'indicators/rvol',\r\n Rwi = 'indicators/rwi',\r\n Stofa = 'indicators/stofa',\r\n Stofu = 'indicators/stofu',\r\n Stosl = 'indicators/stosl',\r\n Trix = 'indicators/trix',\r\n Ult = 'indicators/ult',\r\n Vol = 'indicators/vol',\r\n Wr = 'indicators/wr',\r\n Shrtfl = 'indicators/shrtfl',\r\n Shrtra = 'indicators/shrtra',\r\n}\r\n\r\nexport enum OverlayType {\r\n Overlay = 'overlays/overlay',\r\n None = 'overlays/none',\r\n Bb = 'overlays/bb',\r\n Dch = 'overlays/dch',\r\n Ema = 'overlays/ema',\r\n Ema2 = 'overlays/ema2',\r\n Hilo = 'overlays/hilo',\r\n Hline = 'overlays/hline',\r\n Ic = 'overlays/ic',\r\n Icf = 'overlays/icf',\r\n Kch = 'overlays/kch',\r\n Patterns = 'overlays/patterns',\r\n Pp = 'overlays/pp',\r\n Sar = 'overlays/sar',\r\n Sma = 'overlays/sma',\r\n Sma2 = 'overlays/sma2',\r\n Str = 'overlays/str',\r\n Vp = 'overlays/vp',\r\n Vwap = 'overlays/vwap',\r\n}\r\n\r\nexport enum ChartEventType {\r\n ChartEvent = 'chartEvent/chartEvent',\r\n Dividends = 'chartEvent/dividends',\r\n Split = 'chartEvent/split',\r\n Earnings = 'chartEvent/earnings',\r\n}\r\n\r\nexport enum ChartEventBadgeType {\r\n Dividends = 'chartEvent/dividends',\r\n Split = 'chartEvent/split',\r\n EarningsPositive = 'chartEvent/earnings',\r\n EarningsNegative = 'chartEvent/earningsNegative',\r\n EarningsNeutral = 'chartEvent/earningsNeutral',\r\n EarningsFuture = 'chartEvent/earningsFuture',\r\n}\r\n\r\nexport const ChartEventLabels: Record = {\r\n [ChartEventBadgeType.Dividends]: 'Dividends',\r\n [ChartEventBadgeType.Split]: 'Split',\r\n [ChartEventBadgeType.EarningsPositive]: 'Earnings & Revenue',\r\n [ChartEventBadgeType.EarningsNegative]: 'Earnings & Revenue',\r\n [ChartEventBadgeType.EarningsNeutral]: 'Earnings & Revenue',\r\n [ChartEventBadgeType.EarningsFuture]: 'Earnings & Revenue',\r\n}\r\n\r\ninterface LayoutRule {\r\n columns: number\r\n rows: number\r\n count: number\r\n gridAreas?: string[]\r\n}\r\n\r\nexport const LAYOUTS: Record = {\r\n '1h1v': { columns: 1, rows: 1, count: 1 },\r\n '1h2v': { columns: 1, rows: 2, count: 2 },\r\n '1h3v': { columns: 1, rows: 3, count: 3 },\r\n '2h1v': { columns: 2, rows: 1, count: 2 },\r\n '2h2v': { columns: 2, rows: 2, count: 4 },\r\n '3h1v': { columns: 3, rows: 1, count: 3 },\r\n '3h2v': { columns: 3, rows: 2, count: 6 },\r\n '1l2r': {\r\n columns: 2,\r\n rows: 2,\r\n count: 3,\r\n gridAreas: ['1 / 1 / 3 / 2', '1 / 2 / 2 / 3', '2 / 2 / 3 / 3'],\r\n },\r\n '1t2b': {\r\n columns: 2,\r\n rows: 2,\r\n count: 3,\r\n gridAreas: ['1 / 1 / 2 / 3', '2 / 1 / 3 / 2', '2 / 2 / 3 / 3'],\r\n },\r\n}\r\n\r\nexport const SORT_DIRECTION = {\r\n ASC: 'ASC',\r\n DESC: 'DESC',\r\n}\r\n\r\nexport const ICON_SIZE = {\r\n L: 32,\r\n}\r\n\r\n// Keep in sync with the copy in Website repo - Website/js/main/constants.ts\r\nexport enum TIMEFRAME {\r\n i1 = 'i1',\r\n i2 = 'i2',\r\n i3 = 'i3',\r\n i5 = 'i5',\r\n i10 = 'i10',\r\n i15 = 'i15',\r\n i30 = 'i30',\r\n h = 'h',\r\n h2 = 'h2',\r\n h4 = 'h4',\r\n d = 'd',\r\n w = 'w',\r\n m = 'm',\r\n}\r\n\r\nexport type TimeframeAndIntradayType = TIMEFRAME | 'intraday'\r\n\r\nexport const TIMEFRAMES_WITH_PRE_MARKET = [TIMEFRAME.i1, TIMEFRAME.i2, TIMEFRAME.i3, TIMEFRAME.i5]\r\n\r\nexport const IntradayTimeframeInterval = {\r\n [TIMEFRAME.i1]: 1,\r\n [TIMEFRAME.i2]: 2,\r\n [TIMEFRAME.i3]: 3,\r\n [TIMEFRAME.i5]: 5,\r\n [TIMEFRAME.i10]: 10,\r\n [TIMEFRAME.i15]: 15,\r\n [TIMEFRAME.i30]: 30,\r\n [TIMEFRAME.h]: 60,\r\n [TIMEFRAME.h2]: 120,\r\n [TIMEFRAME.h4]: 240,\r\n}\r\n\r\nexport const TimeframeLabelShort = {\r\n [TIMEFRAME.i1]: '1M',\r\n [TIMEFRAME.i2]: '2M',\r\n [TIMEFRAME.i3]: '3M',\r\n [TIMEFRAME.i5]: '5M',\r\n [TIMEFRAME.i10]: '10M',\r\n [TIMEFRAME.i15]: '15M',\r\n [TIMEFRAME.i30]: '30M',\r\n [TIMEFRAME.h]: '1H',\r\n [TIMEFRAME.h2]: '2H',\r\n [TIMEFRAME.h4]: '4H',\r\n [TIMEFRAME.d]: 'D',\r\n [TIMEFRAME.w]: 'W',\r\n [TIMEFRAME.m]: 'M',\r\n}\r\n\r\nexport enum DateRangeType {\r\n d1 = 'd1',\r\n d5 = 'd5',\r\n m1 = 'm1',\r\n m3 = 'm3',\r\n m6 = 'm6',\r\n ytd = 'ytd',\r\n y1 = 'y1',\r\n y2 = 'y2',\r\n y5 = 'y5',\r\n max = 'max',\r\n}\r\n\r\nexport enum QuoteFinancialAttachment {\r\n shortInterest = 'shortInterest',\r\n}\r\n\r\nexport const TIMEFRAME_SECONDS = {\r\n [TIMEFRAME.i1]: 60,\r\n [TIMEFRAME.i2]: 120,\r\n [TIMEFRAME.i3]: 180,\r\n [TIMEFRAME.i5]: 300,\r\n [TIMEFRAME.i10]: 600,\r\n [TIMEFRAME.i15]: 900,\r\n [TIMEFRAME.i30]: 1800,\r\n [TIMEFRAME.h]: 3600,\r\n [TIMEFRAME.h2]: 7200,\r\n [TIMEFRAME.h4]: 14400,\r\n [TIMEFRAME.d]: 86400,\r\n [TIMEFRAME.w]: 604800,\r\n [TIMEFRAME.m]: 2592000,\r\n}\r\n\r\nexport const CRYPTOS = {\r\n // USD pairs\r\n BTCUSD: 'BTCUSD',\r\n ETHUSD: 'ETHUSD',\r\n BNBUSD: 'BNBUSD',\r\n SOLUSD: 'SOLUSD',\r\n XRPUSD: 'XRPUSD',\r\n DOGEUSD: 'DOGEUSD',\r\n ADAUSD: 'ADAUSD',\r\n TRXUSD: 'TRXUSD',\r\n AVAXUSD: 'AVAXUSD',\r\n DOTUSD: 'DOTUSD',\r\n BCHUSD: 'BCHUSD',\r\n NEARUSD: 'NEARUSD',\r\n LTCUSD: 'LTCUSD',\r\n APTUSD: 'APTUSD',\r\n XLMUSD: 'XLMUSD',\r\n LINKUSD: 'LINKUSD',\r\n ETCUSD: 'ETCUSD',\r\n UNIUSD: 'UNIUSD',\r\n EGLDUSD: 'EGLDUSD',\r\n OPUSD: 'OPUSD',\r\n SUIUSD: 'SUIUSD',\r\n AAVEUSD: 'AAVEUSD',\r\n\r\n // EUR pairs\r\n BTCEUR: 'BTCEUR',\r\n ETHEUR: 'ETHEUR',\r\n BNBEUR: 'BNBEUR',\r\n SOLEUR: 'SOLEUR',\r\n XRPEUR: 'XRPEUR',\r\n DOGEEUR: 'DOGEEUR',\r\n ADAEUR: 'ADAEUR',\r\n TRXEUR: 'TRXEUR',\r\n AVAXEUR: 'AVAXEUR',\r\n DOTEUR: 'DOTEUR',\r\n BCHEUR: 'BCHEUR',\r\n NEAREUR: 'NEAREUR',\r\n LTCEUR: 'LTCEUR',\r\n ICPEUR: 'ICPEUR',\r\n APTEUR: 'APTEUR',\r\n XLMEUR: 'XLMEUR',\r\n LINKEUR: 'LINKEUR',\r\n SHIBEUR: 'SHIBEUR',\r\n EGLDEUR: 'EGLDEUR',\r\n SEUR: 'SEUR',\r\n OPEUR: 'OPEUR',\r\n SUIEUR: 'SUIEUR',\r\n\r\n // USDT pairs\r\n BTCUSDT: 'BTCUSDT',\r\n ETHUSDT: 'ETHUSDT',\r\n BNBUSDT: 'BNBUSDT',\r\n SOLUSDT: 'SOLUSDT',\r\n XRPUSDT: 'XRPUSDT',\r\n DOGEUSDT: 'DOGEUSDT',\r\n ADAUSDT: 'ADAUSDT',\r\n TRXUSDT: 'TRXUSDT',\r\n AVAXUSDT: 'AVAXUSDT',\r\n DOTUSDT: 'DOTUSDT',\r\n BCHUSDT: 'BCHUSDT',\r\n NEARUSDT: 'NEARUSDT',\r\n LTCUSDT: 'LTCUSDT',\r\n ICPUSDT: 'ICPUSDT',\r\n FETUSDT: 'FETUSDT',\r\n ETCUSDT: 'ETCUSDT',\r\n APTUSDT: 'APTUSDT',\r\n XLMUSDT: 'XLMUSDT',\r\n LINKUSDT: 'LINKUSDT',\r\n SHIBUSDT: 'SHIBUSDT',\r\n UNIUSDT: 'UNIUSDT',\r\n EGLDUSDT: 'EGLDUSDT',\r\n SUSDT: 'SUSDT',\r\n OPUSDT: 'OPUSDT',\r\n SUIUSDT: 'SUIUSDT',\r\n AAVEUSDT: 'AAVEUSDT',\r\n TRUMPUSDT: 'TRUMPUSDT',\r\n\r\n // BTC pairs\r\n ETHBTC: 'ETHBTC',\r\n BNBBTC: 'BNBBTC',\r\n SOLBTC: 'SOLBTC',\r\n XRPBTC: 'XRPBTC',\r\n DOGEBTC: 'DOGEBTC',\r\n ADABTC: 'ADABTC',\r\n TRXBTC: 'TRXBTC',\r\n AVAXBTC: 'AVAXBTC',\r\n DOTBTC: 'DOTBTC',\r\n BCHBTC: 'BCHBTC',\r\n NEARBTC: 'NEARBTC',\r\n LTCBTC: 'LTCBTC',\r\n ICPBTC: 'ICPBTC',\r\n FETBTC: 'FETBTC',\r\n ETCBTC: 'ETCBTC',\r\n APTBTC: 'APTBTC',\r\n XLMBTC: 'XLMBTC',\r\n LINKBTC: 'LINKBTC',\r\n UNIBTC: 'UNIBTC',\r\n EGLDBTC: 'EGLDBTC',\r\n SBTC: 'SBTC',\r\n OPBTC: 'OPBTC',\r\n SUIBTC: 'SUIBTC',\r\n AAVEBTC: 'AAVEBTC',\r\n} as const\r\n\r\nexport enum SpecificChartFunctionality {\r\n default = 'default',\r\n quotePage = 'quotePage',\r\n quotePerf = 'quotePerf',\r\n quoteFinancials = 'quoteFinancials',\r\n chartPage = 'chartPage',\r\n smallIndex = 'smallIndex',\r\n offScreen = 'offScreen',\r\n forexPage = 'forexPage',\r\n futuresPage = 'futuresPage',\r\n cryptoPage = 'cryptoPage',\r\n}\r\n\r\nexport enum TextAlign {\r\n left = 'left',\r\n right = 'right',\r\n center = 'center',\r\n start = 'start',\r\n end = 'end',\r\n}\r\n\r\nexport enum TextBaseline {\r\n top = 'top',\r\n hanging = 'hanging',\r\n middle = 'middle',\r\n alphabetic = 'alphabetic',\r\n ideographic = 'ideographic',\r\n bottom = 'bottom',\r\n}\r\n\r\nexport enum ScaleType {\r\n Linear = 'linear',\r\n Percentage = 'percentage',\r\n Logarithmic = 'logarithmic',\r\n}\r\n\r\nexport enum QuotePollingIntervalInMs {\r\n Default = 2000,\r\n Free = 30000,\r\n Elite = Default,\r\n Reduced = 60000,\r\n}\r\n\r\nexport const EXTRA_MARKET_BUFFER_MINUTES = 30\r\n\r\nexport const ScaleLabel = {\r\n [ScaleType.Linear]: 'Linear',\r\n [ScaleType.Percentage]: 'Percentage',\r\n [ScaleType.Logarithmic]: 'Logarithmic',\r\n}\r\n\r\nexport const PANE_HEIGHT_DEFAULT = {\r\n chart: 400,\r\n indicator: 120,\r\n}\r\n\r\nexport const INDICATOR_LABEL_HEIGHT = 24\r\n\r\nexport const MOBILE_BARS_TO_VIEW = 150 // 5 months of daily bars\r\n\r\nexport const MOBILE_VIEW_BREAKPOINT_WIDTH = 768\r\n\r\nexport const FREE_DATE_RANGES = ['m1', 'm3', 'm6', 'ytd', 'y1', 'y2', 'y5', 'max']\r\n\r\nexport const getTimeframeLabel = (timeframe: string) => {\r\n switch (timeframe) {\r\n case TIMEFRAME.i1:\r\n return '1 MIN'\r\n case TIMEFRAME.i2:\r\n return '2 MIN'\r\n case TIMEFRAME.i3:\r\n return '3 MIN'\r\n case TIMEFRAME.i5:\r\n return '5 MIN'\r\n case TIMEFRAME.i10:\r\n return '10 MIN'\r\n case TIMEFRAME.i15:\r\n return '15 MIN'\r\n case TIMEFRAME.i30:\r\n return '30 MIN'\r\n case TIMEFRAME.h:\r\n return '1 HR'\r\n case TIMEFRAME.h2:\r\n return '2 HR'\r\n case TIMEFRAME.h4:\r\n return '4 HR'\r\n case TIMEFRAME.d:\r\n return 'DAILY'\r\n case TIMEFRAME.w:\r\n return 'WEEKLY'\r\n case TIMEFRAME.m:\r\n return 'MONTHLY'\r\n default:\r\n return ''\r\n }\r\n}\r\n\r\nexport type ChartsPageQueryParams = {\r\n p: string\r\n t: string\r\n l: string\r\n r?: string\r\n i?: string\r\n sidebar?: string\r\n}\r\n\r\nexport type QuotePageQueryParams = {\r\n p?: string\r\n t: string\r\n r?: string\r\n i?: string\r\n ty?: QuotePageQueryChartTypes\r\n}\r\n\r\nexport enum QuotePageQueryChartTypes {\r\n l = 'l',\r\n c = 'c',\r\n cs = 'cs',\r\n hc = 'hc',\r\n ha = 'ha',\r\n o = 'o',\r\n p = 'p',\r\n}\r\n\r\nexport type ChartsOrQuotePageQueryParams = ChartsPageQueryParams | QuotePageQueryParams\r\n\r\nexport enum MacroTimeframe {\r\n // seconds = 'seconds',\r\n minutes = 'minutes',\r\n hours = 'hours',\r\n days = 'days',\r\n weeks = 'weeks',\r\n months = 'months',\r\n}\r\n\r\nexport const MicroMacroTimeframe = {\r\n [TIMEFRAME.i1]: {\r\n micro: 1,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i2]: {\r\n micro: 2,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i3]: {\r\n micro: 3,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i5]: {\r\n micro: 5,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i10]: {\r\n micro: 10,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i15]: {\r\n micro: 15,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i30]: {\r\n micro: 30,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.h]: {\r\n micro: 1,\r\n macro: MacroTimeframe.hours,\r\n },\r\n [TIMEFRAME.h2]: {\r\n micro: 2,\r\n macro: MacroTimeframe.hours,\r\n },\r\n [TIMEFRAME.h4]: {\r\n micro: 4,\r\n macro: MacroTimeframe.hours,\r\n },\r\n [TIMEFRAME.d]: {\r\n micro: 1,\r\n macro: MacroTimeframe.days,\r\n },\r\n [TIMEFRAME.w]: {\r\n micro: 1,\r\n macro: MacroTimeframe.weeks,\r\n },\r\n [TIMEFRAME.m]: {\r\n micro: 1,\r\n macro: MacroTimeframe.months,\r\n },\r\n}\r\n\r\nexport const MicroTimeframeRange = (Object.keys(MicroMacroTimeframe) as TIMEFRAME[]).reduce(\r\n (prev, curr) => ({\r\n ...prev,\r\n [MicroMacroTimeframe[curr].macro]: prev[MicroMacroTimeframe[curr].macro]\r\n ? [...prev[MicroMacroTimeframe[curr].macro], MicroMacroTimeframe[curr].micro]\r\n : [MicroMacroTimeframe[curr].micro],\r\n }),\r\n {} as { [key in MacroTimeframe]: number[] }\r\n)\r\n\r\ntype IRange = {\r\n from?: number\r\n to?: number\r\n}\r\n\r\nexport type IVisibility = {\r\n [key in MacroTimeframe]?: IRange\r\n}\r\n\r\nexport enum SetVisibilityTo {\r\n currentAndAbove,\r\n currentAndBelow,\r\n currentOnly,\r\n all,\r\n}\r\n\r\nexport const QUOTE_FETCH_EVENT = 'quoteFetchEvent'\r\n\r\n// Keep in sync with the clone in Website repo in shared/is-stock-fast-refresh-available.ts\r\nexport const PREMARKET_AFTERMARKET_HOURS = 2.5\r\n\r\nexport const CHART_ELEMENT_ID = 'chart'\r\n\r\nexport const CHART_SETTINGS_DIALOG_TEST_ID = 'chart-settings-dialog'\r\n","import {\r\n MOBILE_VIEW_BREAKPOINT_WIDTH,\r\n PREMARKET_AFTERMARKET_HOURS,\r\n SpecificChartFunctionality,\r\n} from './constants/common'\r\nimport { captureException, getIsSSr } from './utils/helpers'\r\n\r\nexport { getSanitizedTicker } from './utils/ticker-sanitizer'\r\n\r\nfunction getIsDstInNy(date: Date) {\r\n const dayNumber = date.getDate()\r\n const monthIndex = date.getMonth()\r\n const dayOfWeek = date.getDay()\r\n const previousSunday = dayNumber - dayOfWeek\r\n if (monthIndex < 2 || monthIndex > 10) {\r\n return false\r\n }\r\n if (monthIndex > 2 && monthIndex < 10) {\r\n return true\r\n }\r\n return monthIndex === 2 ? previousSunday >= 8 : previousSunday <= 0\r\n}\r\n\r\nclass Utils {\r\n static min(...args: T[]): number {\r\n if (typeof args[0] === 'number') {\r\n return args[0] < +args[1] ? args[0] : (args[1] as number)\r\n }\r\n let min = args[0][0]\r\n for (const arg of args) {\r\n for (const el of arg as number[]) {\r\n if (el < min) {\r\n min = el\r\n }\r\n }\r\n }\r\n return min\r\n }\r\n\r\n static max(...args: T[]): number {\r\n if (typeof args[0] === 'number') {\r\n return args[0] > +args[1] ? args[0] : (args[1] as number)\r\n }\r\n let max = args[0][0]\r\n for (const arg of args) {\r\n for (const el of arg as number[]) {\r\n if (el > max) {\r\n max = el\r\n }\r\n }\r\n }\r\n return max\r\n }\r\n\r\n static minMax(...args: number[][]) {\r\n let max\r\n let min = (max = args[0][0] as number)\r\n for (const arg of args) {\r\n for (const el of arg) {\r\n if (el < min) {\r\n min = el\r\n }\r\n if (el > max) {\r\n max = el\r\n }\r\n }\r\n }\r\n return [min, max]\r\n }\r\n\r\n static getScaleRatio() {\r\n return (typeof window !== 'undefined' && window.devicePixelRatio) || 1\r\n }\r\n\r\n static setSizeOnCanvasElement({\r\n canvasElement,\r\n width,\r\n height,\r\n ratio = Utils.getScaleRatio(),\r\n }: {\r\n canvasElement: HTMLCanvasElement | null\r\n width: number\r\n height: number\r\n ratio?: number\r\n }) {\r\n if (canvasElement) {\r\n canvasElement.width = width * ratio\r\n canvasElement.height = height * ratio\r\n canvasElement.style.width = width + 'px'\r\n canvasElement.style.height = height + 'px'\r\n }\r\n }\r\n\r\n static getQuoteDateTimestampOffsetInSeconds(referenceDate?: Date) {\r\n const date = referenceDate || new Date()\r\n const dateAsNY = new Date(\r\n date.getUTCFullYear(),\r\n date.getUTCMonth(),\r\n date.getUTCDate(),\r\n date.getUTCHours() - 5,\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds()\r\n )\r\n const isDst = getIsDstInNy(dateAsNY)\r\n return (isDst ? 4 : 5) * 60 * 60\r\n }\r\n\r\n static convertLocalToNyTime(referenceDate: Date, addOffset: boolean) {\r\n const date = new Date(referenceDate)\r\n const quoteDateTimeOffsetInMs = Utils.getQuoteDateTimestampOffsetInSeconds(date) * 1000\r\n const localTimeOffsetInMs = date.getTimezoneOffset() * 60 * 1000\r\n const offsetDirectionCoefficient = addOffset ? 1 : -1\r\n date.setTime(date.getTime() + (localTimeOffsetInMs - quoteDateTimeOffsetInMs) * offsetDirectionCoefficient)\r\n return date\r\n }\r\n\r\n // Keep in sync with the clone in Website repo in shared/isStockFastRefreshAvailable.ts\r\n static isStockFastRefreshAvailable(hasPremarket = true, hasAftermarket = true, bufferMinutes = 30) {\r\n const MARKET_START = { hours: 9, minutes: 30 }\r\n const MARKET_END = { hours: 16, minutes: 0 }\r\n const getMinutes = ({ hours, minutes }: { hours: number; minutes: number }) => hours * 60 + minutes\r\n\r\n const date = convertLocalToNyTime(new Date(), true)\r\n const dayOfWeek = date.getDay()\r\n const currentDayMinutes = date.getHours() * 60 + date.getMinutes()\r\n\r\n const premarketMinutes = hasPremarket ? PREMARKET_AFTERMARKET_HOURS * 60 : 0\r\n const aftermarketMinutes = hasAftermarket ? PREMARKET_AFTERMARKET_HOURS * 60 : 0\r\n\r\n const isWeekend = dayOfWeek === 0 || dayOfWeek === 6\r\n const isOpen = getMinutes(MARKET_START) - premarketMinutes - bufferMinutes <= currentDayMinutes\r\n const isClosed = getMinutes(MARKET_END) + aftermarketMinutes + bufferMinutes <= currentDayMinutes\r\n return !isWeekend && isOpen && !isClosed\r\n }\r\n\r\n static dateFromUnixTimestamp(timestamp: number) {\r\n /*\r\n * Passing 0 as a param is needed in order to setUTCSeconds work properly.\r\n * The function adds seconds to the date instance if it exceeds 60.\r\n * For more info see the docs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\r\n * */\r\n const date = new Date(0)\r\n date.setUTCSeconds(timestamp)\r\n return Utils.convertLocalToNyTime(date, true)\r\n }\r\n\r\n static dateStringFromDate(date: Date) {\r\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(\r\n 2,\r\n '0'\r\n )}`\r\n }\r\n\r\n static dateFromDateString(dateString: string) {\r\n const [yyyy, mm, dd] = dateString.split('-')\r\n\r\n const date = new Date(Number.parseInt(yyyy), Number.parseInt(mm) - 1, Number.parseInt(dd))\r\n if (Number.isNaN(date.getTime())) {\r\n captureException(new Error('Invalid Date'), { extra: { date, dateString } })\r\n }\r\n\r\n return date\r\n }\r\n\r\n static isMobile(testTouchPoints?: boolean) {\r\n if (getIsSSr()) return false\r\n let isMobileOs = false\r\n\r\n // New iOS versions no longer report iPad in user agent\r\n if (navigator.userAgent.indexOf('Macintosh') > -1) {\r\n try {\r\n document.createEvent('TouchEvent')\r\n isMobileOs = true\r\n } catch {}\r\n } else {\r\n isMobileOs = !!navigator.userAgent.match(\r\n /\\b(Android|webOS|i(?:Phone|Pad|Pod)|BlackBerry|Windows (?:Phone|Mobile))\\b/i\r\n )\r\n }\r\n\r\n if (testTouchPoints) {\r\n try {\r\n return (\r\n isMobileOs &&\r\n (window.navigator.msMaxTouchPoints ||\r\n window.navigator.maxTouchPoints ||\r\n 'ontouchstart' in document.createElement('div'))\r\n )\r\n } catch {}\r\n }\r\n\r\n return isMobileOs\r\n }\r\n\r\n static isIPad() {\r\n const matchesIPad = navigator.userAgent.match(/iPad/i)\r\n const matchesIPhone = navigator.userAgent.match(/iPhone/i)\r\n const matchesIPod = navigator.userAgent.match(/iPod/i)\r\n const matchesIOSLike = navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints > 0\r\n\r\n return (matchesIOSLike && !matchesIPhone && !matchesIPod) || matchesIPad\r\n }\r\n\r\n static getCookie(name: string) {\r\n const re = new RegExp('(?:(?:^|.*;\\\\s*)' + name + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$')\r\n return document.cookie.replace(re, '$1')\r\n }\r\n\r\n static setCookie(name: string, value: string, expires: Date) {\r\n let cookie = name + '=' + value + '; expires=' + expires.toUTCString()\r\n if (document.location.hostname !== 'localhost') {\r\n cookie += '; domain=.finviz.com'\r\n }\r\n document.cookie = cookie\r\n }\r\n}\r\n\r\nexport default Utils\r\nexport const convertLocalToNyTime = Utils.convertLocalToNyTime\r\nexport const dateFromUnixTimestamp = Utils.dateFromUnixTimestamp\r\nexport const dateStringFromDate = Utils.dateStringFromDate\r\nexport const dateFromDateString = Utils.dateFromDateString\r\n\r\nexport function getFullscreenStatus(): boolean {\r\n return (\r\n document.fullscreenElement ??\r\n document.webkitFullscreenElement ??\r\n document.mozFullScreenElement ??\r\n document.msFullscreenElement ??\r\n false\r\n )\r\n}\r\n\r\nexport function getRequestFullscreen(element: HTMLElement) {\r\n return (\r\n element.requestFullscreen ??\r\n element.webkitRequestFullScreen ??\r\n element.mozRequestFullScreen ??\r\n element.msRequestFullscreen\r\n )\r\n}\r\n\r\nexport function getExitFullscreen() {\r\n return (\r\n document.exitFullscreen ?? document.webkitExitFullscreen ?? document.mozExitFullScreen ?? document.msExitFullscreen\r\n )\r\n}\r\n\r\nexport function ready(fn: () => void) {\r\n if (document.readyState !== 'loading') {\r\n fn()\r\n return\r\n }\r\n\r\n document.addEventListener('DOMContentLoaded', fn)\r\n}\r\n\r\nexport function getChartsDimensions(chartElementId: string) {\r\n const PADDING = 2 // Border widths\r\n const containerElement = document.getElementById(chartElementId)\r\n\r\n const box = containerElement?.getBoundingClientRect()\r\n\r\n return {\r\n width: Math.max((box?.width ?? 0) - PADDING, 0),\r\n height: Math.max((box?.height ?? 0) - PADDING, 0),\r\n }\r\n}\r\n\r\nexport function getIsMobileScreenSize() {\r\n return window.innerWidth < MOBILE_VIEW_BREAKPOINT_WIDTH\r\n}\r\n\r\nexport function getIsMobilePortrait(isMobile?: boolean) {\r\n if (isMobile ?? Utils.isMobile()) {\r\n return window.orientation % 180 === 0\r\n }\r\n return false\r\n}\r\n\r\nexport function numberToStringWithUnitsSuffix(value: number) {\r\n let suffix = ''\r\n if (value >= 1000000000) {\r\n value /= 1000000000\r\n suffix = 'B'\r\n } else if (value >= 1000000) {\r\n value /= 1000000\r\n suffix = 'M'\r\n } else if (value >= 1000) {\r\n value /= 1000\r\n suffix = 'K'\r\n }\r\n\r\n return value.toFixed(2) + suffix\r\n}\r\n\r\nexport function isRedesignEnabled() {\r\n return typeof window !== 'undefined' && window.FinvizSettings?.hasRedesignEnabled\r\n}\r\n\r\nexport function isRedesignedPage(\r\n obj: { specificChartFunctionality?: SpecificChartFunctionality | null },\r\n matchingPages = [\r\n SpecificChartFunctionality.forexPage,\r\n SpecificChartFunctionality.futuresPage,\r\n SpecificChartFunctionality.cryptoPage,\r\n ]\r\n) {\r\n const isQuotePage = obj.specificChartFunctionality === SpecificChartFunctionality.quotePage\r\n const isQuoteFinancials = obj.specificChartFunctionality === SpecificChartFunctionality.quoteFinancials\r\n\r\n return (\r\n (isRedesignEnabled() && matchingPages.includes(obj.specificChartFunctionality!)) ||\r\n // Legacy design on quote uses redesigned elements (page header + chart controls)\r\n isQuotePage ||\r\n isQuoteFinancials\r\n )\r\n}\r\n","import { EmptyObject, ObjectHash } from '../../types/shared'\r\n\r\nexport function getRoundedString({ number, numOfDecimalPlaces }: { number: number; numOfDecimalPlaces: number }) {\r\n const precision = Math.pow(10, numOfDecimalPlaces)\r\n return String(Math.round(number * precision) / precision)\r\n}\r\n\r\nexport function getIsSSr() {\r\n return typeof process !== 'undefined' && !!process?.env.IS_OFFSCREEN_RENDERER\r\n}\r\n\r\nexport function isValidHexColor(color: string) {\r\n const regex = /^#([\\da-f]{3}){1,2}$|^#([\\da-f]{4}){1,2}$/i\r\n return !!color && regex.test(color)\r\n}\r\n\r\nexport function getParsedIntegersFromPeriodString(periodString: string) {\r\n const periodParts = periodString.split(',')\r\n return periodParts.map((part) => Number.parseInt(part, 10))\r\n}\r\n\r\nexport function captureException(exception: Error, captureContext?: { extra: ObjectHash }) {\r\n if (process.env.NODE_ENV === 'development' || process.env.IS_E2E_TESTING) {\r\n console.error(exception)\r\n } else if (process.env.IS_OFFSCREEN_RENDERER) {\r\n if (!global.Sentry) {\r\n console.error('Sentry is not defined in the global scope !')\r\n return\r\n }\r\n global.Sentry.captureException(exception, captureContext)\r\n } else {\r\n window.Sentry.captureException(exception, captureContext)\r\n }\r\n}\r\n\r\nexport function isPositiveFloat(value: string | number) {\r\n const parsedNumber = Number.parseFloat(`${value}`)\r\n return !Number.isNaN(parsedNumber) && isFinite(parsedNumber) && parsedNumber > 0\r\n}\r\n\r\nexport function isPositiveInteger(value: string | number) {\r\n const string = `${value}`\r\n return isPositiveFloat(value) && Number.parseInt(string, 10) === Number.parseFloat(string)\r\n}\r\n\r\nexport function isInRange({\r\n value,\r\n min = Number.MIN_SAFE_INTEGER,\r\n max = Number.MAX_SAFE_INTEGER,\r\n}: {\r\n value: string | number\r\n min?: number\r\n max?: number\r\n}) {\r\n const parsedNumber = Number.parseFloat(`${value}`)\r\n return !Number.isNaN(parsedNumber) && parsedNumber >= min && parsedNumber <= max\r\n}\r\n\r\nexport function tryJsonParse(json: string | null = '') {\r\n try {\r\n return JSON.parse(json ?? '') as Result\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nexport function getValueInRange({ value, min, max }: { value: number; min: number; max: number }) {\r\n return Math.min(Math.max(value, min), max)\r\n}\r\n\r\nexport function isPrimaryClick(e: React.Touch | React.TouchEvent | React.MouseEvent) {\r\n // cypress trigger mouseevent has button: undefined if button option isn't explicitly specified\r\n // as cy.get('.target').trigger('mousedown', { button: 0 })\r\n if (e.hasOwnProperty('button') && (e as unknown as MouseEvent).button !== undefined) {\r\n return (e as unknown as MouseEvent).button === 0\r\n } else {\r\n return true\r\n }\r\n}\r\n\r\n// this function is used to fix the issue with circular reference when stringifying an object using JSON.stringify\r\nexport function getJSONReplacerFunc() {\r\n const visited = new WeakSet()\r\n return (key: string, value: any) => {\r\n if (typeof value === 'object' && value !== null) {\r\n if (visited.has(value)) {\r\n return\r\n }\r\n visited.add(value)\r\n }\r\n return value\r\n }\r\n}\r\n\r\n// This is a duplicate from Website repo which is accessible on window.FLibs but this doesn't work on SSR charts\r\nexport const formatDateToStringUS = (date: Date, options?: Intl.DateTimeFormatOptions | undefined) =>\r\n date.toLocaleDateString('en-US', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n ...options,\r\n })\r\n\r\n// randomUUID source: https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid/2117523#2117523\r\nexport function randomUUID() {\r\n return `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, (substring) => {\r\n const c = Number(substring)\r\n return (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\r\n })\r\n}\r\n\r\nexport function getUuid() {\r\n return window.crypto?.randomUUID?.() ?? randomUUID()\r\n}\r\n\r\n// duplicate from Website/js/main/util.ts, to be refactored\r\nexport function getEarningsDateSuffix(date: Date) {\r\n const hours = date.getHours()\r\n\r\n if (hours <= 9) {\r\n return 'BMO'\r\n } else if (hours >= 16) {\r\n return 'AMC'\r\n }\r\n\r\n return ''\r\n}\r\n\r\nexport function isValidTickerString(ticker: string) {\r\n const regex = /^@?[a-z0-9](?:[a-z0-9]*[-_]?[a-z0-9]+)?$/\r\n return regex.test(ticker.toLowerCase())\r\n}\r\n","/**\n * Copyright (c) 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\nmodule.exports.Dispatcher = require('./lib/Dispatcher')\n","/*\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Dispatcher\n * @typechecks\n */\n\n\"use strict\";\n\nvar invariant = require('./invariant');\n\nvar _lastID = 1;\nvar _prefix = 'ID_';\n\n/**\n * Dispatcher is used to broadcast payloads to registered callbacks. This is\n * different from generic pub-sub systems in two ways:\n *\n * 1) Callbacks are not subscribed to particular events. Every payload is\n * dispatched to every registered callback.\n * 2) Callbacks can be deferred in whole or part until other callbacks have\n * been executed.\n *\n * For example, consider this hypothetical flight destination form, which\n * selects a default city when a country is selected:\n *\n * var flightDispatcher = new Dispatcher();\n *\n * // Keeps track of which country is selected\n * var CountryStore = {country: null};\n *\n * // Keeps track of which city is selected\n * var CityStore = {city: null};\n *\n * // Keeps track of the base flight price of the selected city\n * var FlightPriceStore = {price: null}\n *\n * When a user changes the selected city, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'city-update',\n * selectedCity: 'paris'\n * });\n *\n * This payload is digested by `CityStore`:\n *\n * flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'city-update') {\n * CityStore.city = payload.selectedCity;\n * }\n * });\n *\n * When the user selects a country, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'country-update',\n * selectedCountry: 'australia'\n * });\n *\n * This payload is digested by both stores:\n *\n * CountryStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * CountryStore.country = payload.selectedCountry;\n * }\n * });\n *\n * When the callback to update `CountryStore` is registered, we save a reference\n * to the returned token. Using this token with `waitFor()`, we can guarantee\n * that `CountryStore` is updated before the callback that updates `CityStore`\n * needs to query its data.\n *\n * CityStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * // `CountryStore.country` may not be updated.\n * flightDispatcher.waitFor([CountryStore.dispatchToken]);\n * // `CountryStore.country` is now guaranteed to be updated.\n *\n * // Select the default city for the new country\n * CityStore.city = getDefaultCityForCountry(CountryStore.country);\n * }\n * });\n *\n * The usage of `waitFor()` can be chained, for example:\n *\n * FlightPriceStore.dispatchToken =\n * flightDispatcher.register(function(payload) {\n * switch (payload.actionType) {\n * case 'country-update':\n * flightDispatcher.waitFor([CityStore.dispatchToken]);\n * FlightPriceStore.price =\n * getFlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n *\n * case 'city-update':\n * FlightPriceStore.price =\n * FlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n * }\n * });\n *\n * The `country-update` payload will be guaranteed to invoke the stores'\n * registered callbacks in order: `CountryStore`, `CityStore`, then\n * `FlightPriceStore`.\n */\n\n function Dispatcher() {\n this.$Dispatcher_callbacks = {};\n this.$Dispatcher_isPending = {};\n this.$Dispatcher_isHandled = {};\n this.$Dispatcher_isDispatching = false;\n this.$Dispatcher_pendingPayload = null;\n }\n\n /**\n * Registers a callback to be invoked with every dispatched payload. Returns\n * a token that can be used with `waitFor()`.\n *\n * @param {function} callback\n * @return {string}\n */\n Dispatcher.prototype.register=function(callback) {\n var id = _prefix + _lastID++;\n this.$Dispatcher_callbacks[id] = callback;\n return id;\n };\n\n /**\n * Removes a callback based on its token.\n *\n * @param {string} id\n */\n Dispatcher.prototype.unregister=function(id) {\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.unregister(...): `%s` does not map to a registered callback.',\n id\n );\n delete this.$Dispatcher_callbacks[id];\n };\n\n /**\n * Waits for the callbacks specified to be invoked before continuing execution\n * of the current callback. This method should only be used by a callback in\n * response to a dispatched payload.\n *\n * @param {array} ids\n */\n Dispatcher.prototype.waitFor=function(ids) {\n invariant(\n this.$Dispatcher_isDispatching,\n 'Dispatcher.waitFor(...): Must be invoked while dispatching.'\n );\n for (var ii = 0; ii < ids.length; ii++) {\n var id = ids[ii];\n if (this.$Dispatcher_isPending[id]) {\n invariant(\n this.$Dispatcher_isHandled[id],\n 'Dispatcher.waitFor(...): Circular dependency detected while ' +\n 'waiting for `%s`.',\n id\n );\n continue;\n }\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.',\n id\n );\n this.$Dispatcher_invokeCallback(id);\n }\n };\n\n /**\n * Dispatches a payload to all registered callbacks.\n *\n * @param {object} payload\n */\n Dispatcher.prototype.dispatch=function(payload) {\n invariant(\n !this.$Dispatcher_isDispatching,\n 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.'\n );\n this.$Dispatcher_startDispatching(payload);\n try {\n for (var id in this.$Dispatcher_callbacks) {\n if (this.$Dispatcher_isPending[id]) {\n continue;\n }\n this.$Dispatcher_invokeCallback(id);\n }\n } finally {\n this.$Dispatcher_stopDispatching();\n }\n };\n\n /**\n * Is this Dispatcher currently dispatching.\n *\n * @return {boolean}\n */\n Dispatcher.prototype.isDispatching=function() {\n return this.$Dispatcher_isDispatching;\n };\n\n /**\n * Call the callback stored with the given id. Also do some internal\n * bookkeeping.\n *\n * @param {string} id\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_invokeCallback=function(id) {\n this.$Dispatcher_isPending[id] = true;\n this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload);\n this.$Dispatcher_isHandled[id] = true;\n };\n\n /**\n * Set up bookkeeping needed when dispatching.\n *\n * @param {object} payload\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_startDispatching=function(payload) {\n for (var id in this.$Dispatcher_callbacks) {\n this.$Dispatcher_isPending[id] = false;\n this.$Dispatcher_isHandled[id] = false;\n }\n this.$Dispatcher_pendingPayload = payload;\n this.$Dispatcher_isDispatching = true;\n };\n\n /**\n * Clear bookkeeping used for dispatching.\n *\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_stopDispatching=function() {\n this.$Dispatcher_pendingPayload = null;\n this.$Dispatcher_isDispatching = false;\n };\n\n\nmodule.exports = Dispatcher;\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n\"use strict\";\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (false) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n 'Invariant Violation: ' +\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","/**\n * Copyright 2013-2014 Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n\"use strict\";\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n * var COLORS = keyMirror({blue: null, red: null});\n * var myColor = COLORS.blue;\n * var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n * Input: {key1: val1, key2: val2}\n * Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function(obj) {\n var ret = {};\n var key;\n if (!(obj instanceof Object && !Array.isArray(obj))) {\n throw new Error('keyMirror(...): Argument must be an object.');\n }\n for (key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n ret[key] = key;\n }\n return ret;\n};\n\nmodule.exports = keyMirror;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n"],"names":["getCryptoUrl","timeframe","RowsStore","getTimeframe","c","decodeQueryString","encodeQueryString","_lastRequest","initTiles","tiles","AppDispatcher","handleViewAction","type","ActionTypes","INIT_TILES","update","data","_lastRequest2","_lastRequest2$cancel","UPDATE_DATA","cancel","call","apiRequest","handleServerAction","changeTimeframe","_lastRequest3","_lastRequest3$cancel","CHANGE_TIMEFRAME_STARTED","period","CHANGE_TIMEFRAME_COMPLETED","getTilesInOrder","activeCurrency","activeLayoutTickers","getActiveCurrencySparklineTickers","tilesValues","Object","values","map","ticker","find","tile","filter","Boolean","ChartMenu","_ref","activeTile","activeTimeframe","activeRange","showChartControls","isRedesignEnabled","isInteractiveActive","setTiles","React","TilesStore","getTiles","onStoreChange","addChangeListener","removeChangeListener","interactiveUrl","FinvizSettings","hasUserPremium","t","p","ty","utm_source","utm_medium","utm_campaign","_jsxs","className","children","_jsx","classnames","href","undefined","r","ForexFuturesCryptoSettings","isPremium","label","Sparkline","width","height","sparkline","PageType","Menu","isDetailOpen","activePage","timeframes","currencies","company","onTimeframeChange","onDateRangeChange","params","queryParams","keys","length","Button","as","active","Quotes","theme","Performance","Charts","currency","link","padding","title","FuturesForexCryptoTimeframeBar","isDetail","group","split","getCurrencyLongName","join","specificChartFunctionality","SpecificChartFunctionality","cryptoPage","instrument","Instrument","Crypto","_timeframes$link","key","onClick","ev","_timeframes$onClick","value","Component","render","this","props","timeframesMenu","bind","getChartsState","override","arguments","queryString","TIMEFRAME","includes","d","toUpperCase","getActiveCurrency","dateRange","CryptoCharts","constructor","_defineProperty","async","CryptoActionCreators","setState","_TilesStore$getTile","state","FuturesTimeframe","Minute5","Hourly","Daily","Weekly","Monthly","CURRENCIES_LIST","hasRedesignEnabled","MenuComponent","MenuNew","futures","classNames","getTile","_onTimeframeChange","generateColorScale","gcs","forexDomains","redesignEnabled","hexToRgba","color","opacity","result","exec","parseInt","BarChart","row","e","preventDefault","bars","labels","barWidth","gap","halfHeight","y","d3","domain","Math","ceil","abs","range","nice","yAxisTicks","ticks","tick","x","colorScale","gradient","slice","sort","a","b","header","w","m","mtd","q","hy","ytd","style","margin","position","left","top","round","toFixed","bar","background","borderTopRightRadius","borderTopLeftRadius","borderBottomRightRadius","borderBottomLeftRadius","valueStyle","bottom","labelStyle","borderRadius","_onClick","CryptoPerformance","rows","componentDidMount","refreshInterval","window","setInterval","location","search","prevState","componentWillUnmount","clearInterval","_getPerformanceRowsByActiveCurrency","strippedTickers","CURRENCIES_LAYOUT","flat","replace","view","kv","vk","forEach","toString","v","redGreenGradient","getTileState","cryptoDomains","Tile","_onChange","_FinvizSettings$hover","_FinvizSettings$hover2","_FinvizSettings$hover3","_FinvizSettings$hover4","last","prevClose","change","high","low","sparklineDateChanges","hoverOffsetX","hoverOffsetY","places","n","Number","highlightHigh","highlightLow","lastChange","Forex","boxover","hoverChart","toLowerCase","hoverCharts","crypto","forex","img","ForexCryptoTile","sparklineChange","backgroundColor","Layout","activeLayout","flattenedLayout","index","TILE_WIDTH","ri","highlightStyle","highLowStyle","min","changeAbsolute","marginLeft","dateChanges","changeDomain","hasStickyLabels","getCryptoQuotesState","CryptoQuotes","relativePerf","inverse","startsWith","LayoutComponent","LayoutNew","_Fragment","rootEl","document","getElementById","ReactDOMClient","cryptoEl","dataEl","initData","parseInitData","BrowserRouter","ready","chartEl","CHART_ELEMENT_ID","globalChartConfig","NotificationWrapper","ReactDOM","Suspense","fallback","ResizableChartLayoutWithGlobalState","config","xCache","CanvasSparkline","createRef","text","textWidth","canvasContext","measureText","xPos","rightBound","leftBound","max","fillText","changeOpacity","shadow","lineColor","textColor","retinafy","canvas","current","xCacheKey","opacityChange","textOpacity","clearRect","translate","strokeStyle","beginPath","i","lineTo","stroke","fillStyle","textAlign","font","_renderXAxisLabels","shouldComponentUpdate","nextProps","getContext","isFirefoxDesktop","willReadFrequently","_renderCanvas","componentDidUpdate","ref","keyMirror","INIT","CHANGE_TIMEFRAME_FAILED","PayloadSources","SERVER_ACTION","VIEW_ACTION","Dispatcher","action","payload","source","dispatch","getRows","_timeframe","_rows","Store","rowsStore","dispatchToken","register","_tiles","contracts","contract","emitChange","EventEmitter","emit","CHANGE_EVENT","callback","on","removeListener","_tilesGroups","_tileOrder","getTilesList","indexOf","getTilesGroup","getTilesInGroup","g","tilesStore","setMaxListeners","push","LayoutType","LabelStyle","TileStyle","colors","nullColor","futuresDomains","domains","domainId","linearScale","getCookie","name","re","RegExp","cookie","layout","groups","extraMargin","setWidth","containerRef","ResizeObserver","useResizeObserver","observerRef","container","getBoundingClientRect","throttle","_ref2","entry","contentRect","observe","_observerRef$current","disconnect","withSuspense","chartLayoutModel","useChartLayoutGlobalModelAsync","ChartSettingsButton","size","leftContent","Icon","model","IMAGE_SELECTOR","updateUrlString","urlString","query","url","URL","searchParams","delete","set","getPageTitle","pageType","_query$r","_query$p","_query$r2","useTrackPageView","navigate","useNavigate","useLocation","useSearchParams","fromEntries","favoriteTimeframes","toggleFavoriteTimeframe","useFavoriteTimeframes","timeFrameGroups","dateRangeGroupsWithHref","getTimeframeGroupsWithHref","generatePath","timeFrame","generatePathForTimeframeDateRange","pathname","utmCampaign","timeframeUtm","getDateRangeGroupsWithHref","customRange","isCustomAvailable","daterangeUtm","onDialogSubmit","customDateRangeDialogState","handleDateRangeSelect","useCustomDateRangeDialog","anchorDate","getDefaultDateRangeAnchorDate","shouldReloadOnNavigate","pathGenerator","URLSearchParams","handleTimeframeDateRangeChange","_ref3","querySelectorAll","image","src","srcset","dyna","rule","trim","updateImageSrc","tf","linkElement","updateLinkhref","closest","StockDetailTimeframeBar","chartIndex","isDateRangeAvailable","isScrollIntoViewEnabled","onTimeframeSelect","_timeframe$labelPageT","labelPageTitle","onDateRangeSelect","option","CUSTOM_DATE_RANGE","TimeframeBar","containerElement","body","onFavoriteTimeframeToggle","selectedTimeframe","_option$labelPageTitl","selectedDateRange","dateRangeGroups","_ref4","onCustomDateRangeClick","show","CustomDateRange","dialogState","_ref5","getTimeframeFromDateRange","Stock","_ref6","chartConfig","getInitChartConfig","ChartLayoutWithGlobalState","getChartLayoutSizeConfig","parentElement","line","curve","transform","PropTypes","isRequired","initialConfig","initialTA","TA","JSON","parse","stringify","scrollable","editable","Utils","isMobile","COTs","convertTa","greenRedGradient","reverse","redGradient","greenGradient","redGreenGradientBubbles","gradients","ScaleId","IntradayReduced","DayPerf","_5","_10","_15","_20","_25","_relvol","_pe","_fpe","_peg","_ps","_pb","_div","_eps5y","_short","_rec","_earndate","_portfolioPct","_portfolioUsd","_percentHundred","bubbleGradients","gradientSmall","DEFAULT_OVERLAYS","getHoverChartUrl","escaped","stock","hasDarkTheme","overlays","patterns","cs","ct","tm","imgUrl","nodeChartsDomain","getHoverChartDimensions","_FinvizSettings$hover5","getReferrerPolicy","getHoverChartImg","_FinvizSettings$hover6","chartSize","srcSet","getSrcSet","getScaleRatio","_window$devicePixelRa","devicePixelRatio","context","ratio","scale","FONT_SIZE","XXS","XS","S","M","L","XXL","XXXL","LINE_HEIGHT","PADDING","XXXS","MARGIN","CHART_MARGIN","XL","SETTINGS_HEIGHT","TICKER_TIMEFRAME_CHANGE_HEIGHT","OFFSET","MONTHS","ChartEditorEnum","CanvasElementType","ChartElementType","IndicatorType","OverlayType","ChartEventType","ChartEventBadgeType","ChartEventLabels","Dividends","Split","EarningsPositive","EarningsNegative","EarningsNeutral","EarningsFuture","LAYOUTS","columns","count","gridAreas","SORT_DIRECTION","ASC","DESC","TIMEFRAMES_WITH_PRE_MARKET","i1","i2","i3","i5","IntradayTimeframeInterval","i10","i15","i30","h","h2","h4","TimeframeLabelShort","DateRangeType","QuoteFinancialAttachment","TIMEFRAME_SECONDS","CRYPTOS","BTCUSD","ETHUSD","BNBUSD","SOLUSD","XRPUSD","DOGEUSD","ADAUSD","TRXUSD","AVAXUSD","DOTUSD","BCHUSD","NEARUSD","LTCUSD","APTUSD","XLMUSD","LINKUSD","ETCUSD","UNIUSD","EGLDUSD","OPUSD","SUIUSD","AAVEUSD","BTCEUR","ETHEUR","BNBEUR","SOLEUR","XRPEUR","DOGEEUR","ADAEUR","TRXEUR","AVAXEUR","DOTEUR","BCHEUR","NEAREUR","LTCEUR","ICPEUR","APTEUR","XLMEUR","LINKEUR","SHIBEUR","EGLDEUR","SEUR","OPEUR","SUIEUR","BTCUSDT","ETHUSDT","BNBUSDT","SOLUSDT","XRPUSDT","DOGEUSDT","ADAUSDT","TRXUSDT","AVAXUSDT","DOTUSDT","BCHUSDT","NEARUSDT","LTCUSDT","ICPUSDT","FETUSDT","ETCUSDT","APTUSDT","XLMUSDT","LINKUSDT","SHIBUSDT","UNIUSDT","EGLDUSDT","SUSDT","OPUSDT","SUIUSDT","AAVEUSDT","TRUMPUSDT","ETHBTC","BNBBTC","SOLBTC","XRPBTC","DOGEBTC","ADABTC","TRXBTC","AVAXBTC","DOTBTC","BCHBTC","NEARBTC","LTCBTC","ICPBTC","FETBTC","ETCBTC","APTBTC","XLMBTC","LINKBTC","UNIBTC","EGLDBTC","SBTC","OPBTC","SUIBTC","AAVEBTC","TextAlign","TextBaseline","ScaleType","QuotePollingIntervalInMs","EXTRA_MARKET_BUFFER_MINUTES","ScaleLabel","Linear","Percentage","Logarithmic","PANE_HEIGHT_DEFAULT","chart","indicator","INDICATOR_LABEL_HEIGHT","MOBILE_BARS_TO_VIEW","MOBILE_VIEW_BREAKPOINT_WIDTH","FREE_DATE_RANGES","getTimeframeLabel","QuotePageQueryChartTypes","MacroTimeframe","MicroMacroTimeframe","micro","macro","minutes","hours","days","weeks","months","MicroTimeframeRange","reduce","prev","curr","SetVisibilityTo","QUOTE_FETCH_EVENT","PREMARKET_AFTERMARKET_HOURS","CHART_SETTINGS_DIALOG_TEST_ID","_len","args","Array","_key","arg","el","_len2","_key2","minMax","_len3","_key3","setSizeOnCanvasElement","canvasElement","getQuoteDateTimestampOffsetInSeconds","referenceDate","date","Date","dayNumber","getDate","monthIndex","getMonth","previousSunday","getDay","getIsDstInNy","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","convertLocalToNyTime","addOffset","quoteDateTimeOffsetInMs","localTimeOffsetInMs","getTimezoneOffset","offsetDirectionCoefficient","setTime","getTime","isStockFastRefreshAvailable","hasPremarket","hasAftermarket","bufferMinutes","getMinutes","dayOfWeek","currentDayMinutes","getHours","premarketMinutes","aftermarketMinutes","isWeekend","isOpen","isClosed","dateFromUnixTimestamp","timestamp","setUTCSeconds","dateStringFromDate","getFullYear","String","padStart","dateFromDateString","dateString","yyyy","mm","dd","isNaN","captureException","Error","extra","testTouchPoints","getIsSSr","isMobileOs","navigator","userAgent","createEvent","match","msMaxTouchPoints","maxTouchPoints","createElement","isIPad","matchesIPad","matchesIPhone","matchesIPod","setCookie","expires","toUTCString","hostname","getFullscreenStatus","_document$fullscreenE","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","getRequestFullscreen","element","_ref7","_element$requestFulls","requestFullscreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","getExitFullscreen","_ref8","_ref9","_document$exitFullscr","exitFullscreen","webkitExitFullscreen","mozExitFullScreen","msExitFullscreen","fn","readyState","addEventListener","getChartsDimensions","chartElementId","_box$width","_box$height","box","getIsMobileScreenSize","innerWidth","getIsMobilePortrait","orientation","numberToStringWithUnitsSuffix","suffix","_window$FinvizSetting","isRedesignedPage","obj","matchingPages","forexPage","futuresPage","isQuotePage","quotePage","isQuoteFinancials","quoteFinancials","getRoundedString","number","numOfDecimalPlaces","precision","pow","process","getParsedIntegersFromPeriodString","periodString","part","exception","captureContext","Sentry","isPositiveFloat","parsedNumber","parseFloat","isFinite","isPositiveInteger","string","isInRange","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","getValueInRange","isPrimaryClick","hasOwnProperty","button","getJSONReplacerFunc","visited","WeakSet","has","add","formatDateToStringUS","options","toLocaleDateString","day","month","year","getUuid","_window$crypto$random","_window$crypto","_window$crypto$random2","randomUUID","substring","getRandomValues","Uint8Array","getEarningsDateSuffix","module","exports","invariant","_lastID","$Dispatcher_callbacks","$Dispatcher_isPending","$Dispatcher_isHandled","$Dispatcher_isDispatching","$Dispatcher_pendingPayload","prototype","id","unregister","waitFor","ids","ii","$Dispatcher_invokeCallback","$Dispatcher_startDispatching","$Dispatcher_stopDispatching","isDispatching","condition","format","f","error","argIndex","framesToPop","ret","isArray","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","err","getShim","ReactPropTypes","array","bigint","bool","func","object","symbol","any","arrayOf","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes"],"sourceRoot":""}