@ytsaurus/ui 1.75.1 → 1.77.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +75 -75
- package/dist/public/build/css/{job.c7c99207.chunk.css → job.9757ff68.chunk.css} +2 -2
- package/dist/public/build/css/job.9757ff68.chunk.css.map +1 -0
- package/dist/public/build/css/main.0efa9da5.css +10 -0
- package/dist/public/build/css/main.0efa9da5.css.map +1 -0
- package/dist/public/build/css/navigation.c199c4f2.chunk.css +2 -0
- package/dist/public/build/css/navigation.c199c4f2.chunk.css.map +1 -0
- package/dist/public/build/js/{1260.534f3f75.chunk.js → 1260.a1e22005.chunk.js} +2 -2
- package/dist/public/build/js/{1260.534f3f75.chunk.js.map → 1260.a1e22005.chunk.js.map} +1 -1
- package/dist/public/build/js/{1879.23423388.chunk.js → 1879.3975650a.chunk.js} +3 -3
- package/dist/public/build/js/{1879.23423388.chunk.js.map → 1879.3975650a.chunk.js.map} +1 -1
- package/dist/public/build/js/{1983.666923be.chunk.js → 1983.64a2e22f.chunk.js} +2 -2
- package/dist/public/build/js/{1983.666923be.chunk.js.map → 1983.64a2e22f.chunk.js.map} +1 -1
- package/dist/public/build/js/{2447.b2877275.chunk.js → 2447.eb8fde89.chunk.js} +2 -2
- package/dist/public/build/js/{2447.b2877275.chunk.js.map → 2447.eb8fde89.chunk.js.map} +1 -1
- package/dist/public/build/js/3724.3e5848f0.chunk.js +2 -0
- package/dist/public/build/js/{3724.425d01ec.chunk.js.map → 3724.3e5848f0.chunk.js.map} +1 -1
- package/dist/public/build/js/6729.39d7cf60.chunk.js +2 -0
- package/dist/public/build/js/6729.39d7cf60.chunk.js.map +1 -0
- package/dist/public/build/js/{7959.95ebd185.chunk.js → 7959.faac2ff8.chunk.js} +2 -2
- package/dist/public/build/js/{7959.95ebd185.chunk.js.map → 7959.faac2ff8.chunk.js.map} +1 -1
- package/dist/public/build/js/{8390.83f4531a.chunk.js → 8390.c3d2de6a.chunk.js} +2 -2
- package/dist/public/build/js/{8390.83f4531a.chunk.js.map → 8390.c3d2de6a.chunk.js.map} +1 -1
- package/dist/public/build/js/{8460.2d4d237e.chunk.js → 8460.fc8e2238.chunk.js} +2 -2
- package/dist/public/build/js/{8460.2d4d237e.chunk.js.map → 8460.fc8e2238.chunk.js.map} +1 -1
- package/dist/public/build/js/{8778.e18e655b.chunk.js → 8778.f3ea089f.chunk.js} +2 -2
- package/dist/public/build/js/{8778.e18e655b.chunk.js.map → 8778.f3ea089f.chunk.js.map} +1 -1
- package/dist/public/build/js/{9558.a6ea64c9.chunk.js → 9558.6a4bf9a9.chunk.js} +2 -2
- package/dist/public/build/js/{9558.a6ea64c9.chunk.js.map → 9558.6a4bf9a9.chunk.js.map} +1 -1
- package/dist/public/build/js/9569.aac48f3b.chunk.js +2 -0
- package/dist/public/build/js/9569.aac48f3b.chunk.js.map +1 -0
- package/dist/public/build/js/{accounts.2ba221c2.chunk.js → accounts.aa7ed73f.chunk.js} +2 -2
- package/dist/public/build/js/accounts.aa7ed73f.chunk.js.map +1 -0
- package/dist/public/build/js/{acl.c948c339.chunk.js → acl.4cd54663.chunk.js} +2 -2
- package/dist/public/build/js/{acl.c948c339.chunk.js.map → acl.4cd54663.chunk.js.map} +1 -1
- package/dist/public/build/js/{app-navigation.b062662b.chunk.js → app-navigation.13c65573.chunk.js} +2 -2
- package/dist/public/build/js/app-navigation.13c65573.chunk.js.map +1 -0
- package/dist/public/build/js/chyt.0ee6bfa2.chunk.js +2 -0
- package/dist/public/build/js/chyt.0ee6bfa2.chunk.js.map +1 -0
- package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js +2 -0
- package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js.map +1 -0
- package/dist/public/build/js/{components.bbe331cb.chunk.js → components.b39828bc.chunk.js} +2 -2
- package/dist/public/build/js/components.b39828bc.chunk.js.map +1 -0
- package/dist/public/build/js/job.ea2ba82d.chunk.js +2 -0
- package/dist/public/build/js/job.ea2ba82d.chunk.js.map +1 -0
- package/dist/public/build/js/main.6375dbc6.js +3 -0
- package/dist/public/build/js/main.6375dbc6.js.map +1 -0
- package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js +2 -0
- package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js.map +1 -0
- package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js → navigation-flow.6d67215a.chunk.js} +2 -2
- package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js.map → navigation-flow.6d67215a.chunk.js.map} +1 -1
- package/dist/public/build/js/navigation.529208de.chunk.js +2 -0
- package/dist/public/build/js/navigation.529208de.chunk.js.map +1 -0
- package/dist/public/build/js/odin.c4c4ef6f.chunk.js +2 -0
- package/dist/public/build/js/odin.c4c4ef6f.chunk.js.map +1 -0
- package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js → path-viewer.c091d9f4.chunk.js} +2 -2
- package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js.map → path-viewer.c091d9f4.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js → query-navigation.b1574290.chunk.js} +2 -2
- package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js.map → query-navigation.b1574290.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-results.733b1795.chunk.js → query-results.0a05cc41.chunk.js} +2 -2
- package/dist/public/build/js/{query-results.733b1795.chunk.js.map → query-results.0a05cc41.chunk.js.map} +1 -1
- package/dist/public/build/js/query-tracker.515069f6.chunk.js +2 -0
- package/dist/public/build/js/query-tracker.515069f6.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.481a6d3a.js → runtime.09217c31.js} +2 -2
- package/dist/public/build/js/{runtime.481a6d3a.js.map → runtime.09217c31.js.map} +1 -1
- package/dist/public/build/js/{scheduling.b70d4627.chunk.js → scheduling.6448eabd.chunk.js} +2 -2
- package/dist/public/build/js/{scheduling.b70d4627.chunk.js.map → scheduling.6448eabd.chunk.js.map} +1 -1
- package/dist/public/build/js/system.1114aa96.chunk.js +2 -0
- package/dist/public/build/js/system.1114aa96.chunk.js.map +1 -0
- package/dist/public/build/js/{yt-df-dialog.9ddda260.chunk.js → yt-df-dialog.4ad719bf.chunk.js} +2 -2
- package/dist/public/build/js/yt-df-dialog.4ad719bf.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +70 -70
- package/dist/shared/constants/settings-types.d.ts +1 -0
- package/package.json +3 -2
- package/dist/public/build/css/job.c7c99207.chunk.css.map +0 -1
- package/dist/public/build/css/main.2d3cbfcd.css +0 -10
- package/dist/public/build/css/main.2d3cbfcd.css.map +0 -1
- package/dist/public/build/css/navigation.0a9042b3.chunk.css +0 -2
- package/dist/public/build/css/navigation.0a9042b3.chunk.css.map +0 -1
- package/dist/public/build/js/3724.425d01ec.chunk.js +0 -2
- package/dist/public/build/js/5177.b4cec253.chunk.js +0 -2
- package/dist/public/build/js/5177.b4cec253.chunk.js.map +0 -1
- package/dist/public/build/js/6729.da9aa02f.chunk.js +0 -2
- package/dist/public/build/js/6729.da9aa02f.chunk.js.map +0 -1
- package/dist/public/build/js/accounts.2ba221c2.chunk.js.map +0 -1
- package/dist/public/build/js/app-navigation.b062662b.chunk.js.map +0 -1
- package/dist/public/build/js/chyt.7f99f87d.chunk.js +0 -2
- package/dist/public/build/js/chyt.7f99f87d.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js +0 -2
- package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js.map +0 -1
- package/dist/public/build/js/components.bbe331cb.chunk.js.map +0 -1
- package/dist/public/build/js/job.4fc50056.chunk.js +0 -2
- package/dist/public/build/js/job.4fc50056.chunk.js.map +0 -1
- package/dist/public/build/js/main.7981a440.js +0 -3
- package/dist/public/build/js/main.7981a440.js.map +0 -1
- package/dist/public/build/js/manage-tokens.286a4da9.chunk.js +0 -2
- package/dist/public/build/js/manage-tokens.286a4da9.chunk.js.map +0 -1
- package/dist/public/build/js/navigation.d891266d.chunk.js +0 -2
- package/dist/public/build/js/navigation.d891266d.chunk.js.map +0 -1
- package/dist/public/build/js/odin.df1cfe56.chunk.js +0 -2
- package/dist/public/build/js/odin.df1cfe56.chunk.js.map +0 -1
- package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js +0 -2
- package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js.map +0 -1
- package/dist/public/build/js/system.f759d3f0.chunk.js +0 -2
- package/dist/public/build/js/system.f759d3f0.chunk.js.map +0 -1
- package/dist/public/build/js/yt-df-dialog.9ddda260.chunk.js.map +0 -1
- /package/dist/public/build/js/{1879.23423388.chunk.js.LICENSE.txt → 1879.3975650a.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.7981a440.js.LICENSE.txt → main.6375dbc6.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"js/1260.534f3f75.chunk.js","mappings":"4MASMA,GAAQC,EAAAA,EAAAA,GAAG,oBAEF,SAASC,EAAOC,GAM3B,IAADC,EAAAD,EALCE,MAAAA,OAAK,IAAAD,EAAG,UAASA,EAAAE,EAAAH,EACjBI,UAAAA,OAAS,IAAAD,GAAQA,EACjBE,EAAeL,EAAfK,gBACAC,EAAON,EAAPM,QACAC,EAAOP,EAAPO,QAEA,OACIC,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,EAAM,CAACK,MAAAA,IAAQQ,SAAA,CAC1BN,IACGO,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,EAAM,SAASa,UAC3BC,EAAAA,EAAAA,KAACC,EAAAA,EAAM,CAACC,KAAK,IAAIC,KAAK,iBAAiBC,MAAM,QAAQC,QAASX,EAAgBK,UAC1EC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAACC,KAAK,cAKtBC,EAAAA,eAAqBb,GAChB,CAACA,QAAAA,GACDc,IAAKd,GAAS,SAACe,EAAMC,GAAK,OACtBX,EAAAA,EAAAA,KAAA,KAAeF,UAAWZ,EAAM,aAAaa,SACxCW,GADGC,EAEJ,IAGbf,IACGI,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,EAAM,WAAWa,SAC5BU,IAAKb,GAAS,SAACgB,GAAM,OAClBZ,EAAAA,EAAAA,KAAA,QAAMF,UAAWZ,EAAM,UAAUa,UAC7BC,EAAAA,EAAAA,KAACC,EAAAA,EAAM,CAACC,KAAK,IAAIE,MAAOQ,EAAOC,KAAMR,QAASO,EAAOE,SAASf,SACzDa,EAAOC,QAFuBD,EAAOC,KAIvC,QAM/B,C,8FC1Ce,SAASE,IACpB,IAAMC,GAAWC,EAAAA,EAAAA,MAEXC,GAAcC,EAAAA,EAAAA,IAAYC,EAAAA,IAE1BC,EAASb,EAAAA,aAAkB,WAC7BQ,GAASM,EAAAA,EAAAA,MAEb,GAAG,CAACN,EAAUE,IAId,OAFAK,EAAAA,EAAAA,IAAWF,GAEJ,IACX,C,gQCNaG,GAAuBC,EAAAA,EAAAA,IAAe,CAACC,EAAAA,KAAoB,SAACC,GACrE,OAAO,IAAIC,IAAID,EACnB,IAMaE,GAA0BJ,EAAAA,EAAAA,IAAe,CAACK,EAAAA,KAAuB,SAACH,GAC3E,OAAO,IAAIC,IAAInB,IAAKkB,EAAO,QAC/B,IAEaI,GAAiCN,EAAAA,EAAAA,IAC1C,CACIO,EAAAA,GACAR,EACAS,EAAAA,GACAJ,GAEJK,EAAAA,IAGSC,GAAsBV,EAAAA,EAAAA,IAC/B,CACIO,EAAAA,GACAR,EACAY,EAAAA,GACAP,EACAQ,EAAAA,IAEJH,EAAAA,I,uGCnCEI,EAAuB,CAAC,aAAc,eA2D5C,SAASC,EACLC,EACAC,EACAC,GAEA,OAAOC,IAASD,GAAU,SAACE,EAAOrC,GAC9B,IAAMsC,EAAOL,EAAUjC,IAAS,EAC1BuC,EAAYL,EAAelC,IAAS,EAC1CqC,EAAMG,MAAQF,EACdD,EAAMI,MAAQF,CAClB,GACJ,CAEA,SAASG,EAA6CC,GAClD,OAAOC,IACHD,GACA,SAACA,EAAM3C,GAMH,OALA2C,EAAK3C,GAAQ,CACTwC,MAAO,EACPC,MAAO,GAGJE,CACX,GACA,CAAC,EAET,CAuGO,SAASE,EAAqBC,GACjC,IAAMH,EAAOZ,EACPgB,EAlBV,SAAiCD,GAE7B,IAAMX,EAAWO,EAAgBX,GASjC,OAPIe,GAIAd,EAHkBc,EAAmBE,qBACdF,EAAmBG,sBAEId,GAG3C,CACHA,SAAUA,EAElB,CAIiCe,CAAwBJ,GAAoBX,SAEnEf,EAAQlB,IAAKyC,GAAM,SAACQ,GACtB,GAAIJ,EAAqBI,GAAO,CAC5B,IAAMC,EAAeL,EAAqBI,GAAMX,MAC1Ca,EAAeN,EAAqBI,GAAMV,MAEhD,MAAO,CACHU,KAAMA,EACNC,aAAc,CACV9C,KACIgD,EAAAA,EAAOC,OAAe,OAAEH,GACxB,MACAE,EAAAA,EAAOC,OAAe,OAAEF,GAC5BG,SAAWJ,EAAeC,EAAgB,KAGtD,CAEA,OAAO,IACX,IACA,OAAOI,IAASrC,EACpB,C,eC5MMsC,GAAI/E,EAAAA,EAAAA,GAAM,YASKgF,EAAa,SAAAC,IAAAC,EAAAA,EAAAA,GAAAF,EAAAC,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAJ,GAAA,SAAAA,IAAA,OAAAK,EAAAA,EAAAA,GAAA,KAAAL,GAAAG,EAAAG,MAAA,KAAAC,UAAA,CAgH7B,OAhH6BC,EAAAA,EAAAA,GAAAR,EAAA,EAAAS,IAAA,0BAAAC,MAS9B,WACI,IAAOvB,EAAsBwB,KAAKC,MAA3BzB,mBAEP,OACIrD,EAAAA,EAAAA,KAAA,SAAAD,UACIC,EAAAA,EAAAA,KAAA,SAAAD,SACKU,IAAK2C,EAAqBC,IAAqB,SAAC0B,GAAI,OACjDlF,EAAAA,EAAAA,MAAA,MAAAE,SAAA,EACIC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,0BAA0BlE,SACtC8D,EAAAA,EAAOC,OAAsB,cAAEiB,EAAKrB,SAEzC1D,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,4BAA4BlE,UACzCC,EAAAA,EAAAA,KAACgF,EAAAA,EAAQ,CACLJ,MAAOG,EAAKpB,aAAaI,SACzBlD,KAAMkE,EAAKpB,aAAa9C,KACxBtB,MAAO,eAGfS,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,6BAA6BlE,SAAC,QAX1CgF,EAAKrB,KAYT,OAKzB,GAAC,CAAAiB,IAAA,kBAAAC,MAED,WACI,IDmKJvB,EACA4B,EACAC,EAEMC,EAMAC,EACAC,EACAC,EC/KFC,EAA8DV,KAAKC,MAC7DU,GADSD,EAARE,SDmKXpC,ECnKuCkC,EAAlBlC,mBDoKrB4B,ECpKkDM,EAATN,UDqKzCC,ECrK8DK,EAAVL,WDuK9CC,EArIV,SACI9B,EACAqC,EACAR,GAGA,IAAMS,EAAY1C,EAAgBiC,GAUlC,OANI7B,GAGAd,EAFoBc,EAAmBE,qBAAqBqC,sBACnCvC,EAAmBG,sBAAsBoC,sBACJD,GAG3D,CACHA,UAAWA,EAEnB,CAkHkCE,CAC1BxC,EACA4B,EACAC,GACFS,UAEIP,EAtHV,SAA0BH,EAAsBC,GAE5C,IAAMS,EAAY1C,EAAgBiC,GAElC,GAAID,EAAW,CACX,IAAMa,EAAoBb,EAAUc,uBAAyB,CAAC,EACxDC,EAAyBf,EAAUgB,4BAA8B,CAAC,EAExEtD,IAASuC,GAAY,SAACgB,GAClB,IAAMrD,EAAOiD,EAAkBI,IAAe,EACxCpD,EAAYkD,EAAuBE,IAAe,EAExDP,EAAUO,GAAYnD,MAAQF,EAC9B8C,EAAUO,GAAYlD,MAAQF,EAAYD,CAC9C,GACJ,CAEA,MAAO,CACH8C,UAAWA,EAEnB,CAkGmCQ,CAAiBlB,EAAWC,GAAYS,UACjEN,EAjGV,SAA2BJ,EAAsBC,GAE7C,IAAMS,EAAY1C,EAAgBiC,GAElC,GAAID,EAAW,CACX,IAAMmB,EAAuBnB,EAAUoB,0BAA4B,CAAC,EAEpE1D,IAASuC,GAAY,SAACgB,GAAgB,IAADI,EAAAC,EAC3BC,GAAuC,QAAhCF,EAAAF,EAAqBF,UAAW,IAAAI,OAAA,EAAhCA,EAAkCG,iBAAkB,EAC3DC,GAA2C,QAAhCH,EAAAH,EAAqBF,UAAW,IAAAK,OAAA,EAAhCA,EAAkCI,qBAAsB,EAEzEhB,EAAUO,GAAYnD,MAAQyD,EAC9Bb,EAAUO,GAAYlD,MAAQ0D,CAClC,GACJ,CAEA,MAAO,CACHf,UAAWA,EAEnB,CA8E2BiB,CAAkB3B,EAAWC,GAAYS,UAC1DL,EA7EV,SAA4BL,EAAsBC,GAE9C,IAAMS,EAAY1C,EAAgBiC,GAElC,GAAID,EAAW,CACX,IAAMmB,EAAuBnB,EAAUoB,0BAA4B,CAAC,EAEpE1D,IAASuC,GAAY,SAACgB,GAAgB,IAADW,EAAAC,EAC3BN,GAAuC,QAAhCK,EAAAT,EAAqBF,UAAW,IAAAW,OAAA,EAAhCA,EAAkCE,kBAAmB,EAC5DL,GAA2C,QAAhCI,EAAAV,EAAqBF,UAAW,IAAAY,OAAA,EAAhCA,EAAkCE,sBAAuB,EAE1ErB,EAAUO,GAAYnD,MAAQyD,EAC9Bb,EAAUO,GAAYlD,MAAQ0D,CAClC,GACJ,CAEA,MAAO,CACHf,UAAWA,EAEnB,CA0D4BsB,CAAmBhC,EAAWC,GAAYS,UAE9DR,EACO1E,IAAKyE,GAAY,SAACgB,GACrB,IAAMvC,EAAewB,EAAsBe,GAAYnD,MACjDa,EAAeuB,EAAsBe,GAAYlD,MACjDkE,EAAgB9B,EAAuBc,GAAYlD,MACnDmE,EAAgBD,EAAgBtD,EAEhCwD,EAAe/B,EAAea,GAAYnD,MAC1CsE,EAAmBhC,EAAea,GAAYlD,MAC9CsE,EAAgBhC,EAAgBY,GAAYnD,MAC5CwE,EAAoBjC,EAAgBY,GAAYlD,MAEtD,MAAO,CACHwE,KAAwB,IAAlBN,EACNhB,WAAYA,EACZvC,aAAc,CACV9C,KACIgD,EAAAA,EAAOC,OAAc,MAAEH,GACvB,MACAE,EAAAA,EAAOC,OAAc,MAAEF,GAC3BG,SAAWJ,EAAeC,EAAgB,KAE9CyB,eAAgB,CACZtB,UAAU0D,EAAAA,EAAAA,GACNL,EACAC,EACA,QACAK,EAAAA,IAEJF,KAAMH,EAAmB,GAE7B/B,gBAAiB,CACbvB,UAAU0D,EAAAA,EAAAA,GACNH,EACAC,EACA,QACAG,EAAAA,IAEJF,KAAMD,EAAoB,GAE9BL,cAAeA,EACfC,cAAAA,EAER,IAGG,IC5NH,OACItH,EAAAA,EAAAA,MAAC8H,EAAAA,SAAQ,CAAA5H,SAAA,EACLF,EAAAA,EAAAA,MAAA,SAAAE,SAAA,EACIC,EAAAA,EAAAA,KAAA,SAAAD,UACIF,EAAAA,EAAAA,MAAA,MAAAE,SAAA,EACIC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,0BAA0BlE,SAAC,YAC5CC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,4BAA6B7D,MAAM,aAAYL,SAAC,wBAGjEC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,6BAA6BlE,SAAC,oBAC/CC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,uBACjBjE,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,8BAA+B7D,MAAM,aAAYL,SAAC,6BAGnEC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,+BAAgC7D,MAAM,aAAYL,SAAC,mCAK5EC,EAAAA,EAAAA,KAAA,SAAAD,SACKyF,EAAUoC,KACP,SAAC7C,GAAI,YACqB,IAAdA,EAAKyC,MAAwBzC,EAAKyC,QACtC3H,EAAAA,EAAAA,MAAA,MAAAE,SAAA,EACIC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,0BAA0BlE,SACtC8D,EAAAA,EAAOC,OAAsB,cAAEiB,EAAKmB,eAEzClG,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,4BAA4BlE,UACzCC,EAAAA,EAAAA,KAACgF,EAAAA,EAAQ,CACLJ,MAAOG,EAAKpB,aAAaI,SACzBlD,KAAMkE,EAAKpB,aAAa9C,KACxBtB,MAAO,eAGfS,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,6BAA6BlE,SACzC8D,EAAAA,EAAOC,OAAc,MAAEiB,EAAKmC,kBAEjClH,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,oBAAoBlE,SAChCgF,EAAKoC,gBACFnH,EAAAA,EAAAA,KAAC6H,EAAAA,EAAW,CAACC,aAAa,qBAGlC9H,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,8BAA8BlE,SAC1CgF,EAAKM,eAAemC,MACjBxH,EAAAA,EAAAA,KAACgF,EAAAA,GAAQ+C,EAAAA,EAAAA,GAAA,GAAKhD,EAAKM,eAAetB,WAElCF,EAAAA,EAAOC,OAAOkE,YAGtBhI,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,+BAA+BlE,SAC3CgF,EAAKO,gBAAgBkC,MAClBxH,EAAAA,EAAAA,KAACgF,EAAAA,GAAQ+C,EAAAA,EAAAA,GAAA,GAAKhD,EAAKO,gBAAgBvB,WAEnCF,EAAAA,EAAOC,OAAOkE,aA9BjBjD,EAAKmB,WAkCjB,UAIjBlG,EAAAA,EAAAA,KAAA,SACC6E,KAAKoD,4BAGlB,GAAC,CAAAtD,IAAA,SAAAC,MAED,WACI,OACI5E,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,EAAE,cAAclE,UAC5BC,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,EAAE,oBAAoBlE,SAAE8E,KAAKqD,qBAGzD,KAAChE,CAAA,CAhH6B,CAASiE,EAAAA,W,kMCrBtBC,GAAc,SAAAjE,IAAAC,EAAAA,EAAAA,GAAAgE,EAAAjE,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAA8D,GAAA,SAAAA,IAAA,OAAA7D,EAAAA,EAAAA,GAAA,KAAA6D,GAAA/D,EAAAG,MAAA,KAAAC,UAAA,CA+B9B,OA/B8BC,EAAAA,EAAAA,GAAA0D,EAAA,EAAAzD,IAAA,SAAAC,MAY/B,WACI,IAAAW,EAAmDV,KAAKC,MAAjDjE,EAAI0E,EAAJ1E,KAAMwH,EAAe9C,EAAf8C,gBAAiBC,EAAO/C,EAAP+C,QAASC,EAAQhD,EAARgD,SAEvC,OACIvI,EAAAA,EAAAA,KAACZ,GAAAA,EAAO,CACJG,MAAM,OACNI,QAAS,CAACkB,EAAMwH,GAChBzI,QAAS,CACL,CACIiB,KAAM,MACNC,SAAUwH,GAEd,CACIzH,KAAM,SACNC,SAAUyH,KAK9B,KAACH,CAAA,CA/B8B,CAASD,EAAAA,WAAvBC,GAQVI,aAAe,CAClBH,gBAAiB,kB,gBCHnBI,GAAU,IAAIC,GAAAA,EAEdC,GAAa,SAAAxE,IAAAC,EAAAA,EAAAA,GAAAuE,EAAAxE,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAqE,GAAA,SAAAA,IAAA,IAAAC,GAAArE,EAAAA,EAAAA,GAAA,KAAAoE,GAAA,QAAAE,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GA0C6E,OA1C7EL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KASfK,MAAQ,CACJC,oBAAoB,EACpBC,WAAOC,GACVX,EAEDY,aAAe,WACX,IAAAjE,EAAoCqD,EAAK9D,MAAlC2E,EAAOlE,EAAPkE,QAASC,EAAgBnE,EAAhBmE,kBAEhBC,EAAAA,GAAAA,IAAcF,EAAQ/F,MACjBkG,MAAK,WACFhB,EAAKiB,SAAS,CACVC,YAAa,KAEjBJ,IACAjB,GAAQsB,IAAI,CACRrG,KAAM,iBACNsG,QAAS,IACTzK,MAAO,UACPa,MAAO,wBAA0BqJ,EAAQ/F,MAEjD,IAAE,OACK,SAAC4F,GACJV,EAAKiB,SAAS,CACVP,MAAAA,GAER,IAEJV,EAAKiB,SAAS,CACVP,WAAOC,GAEf,EAACX,EAEDqB,aAAe,kBAAMrB,EAAKiB,SAAS,CAACR,oBAAoB,GAAQ,EAADT,EAC/DsB,kBAAoB,kBAAMtB,EAAKiB,SAAS,CAACR,oBAAoB,EAAMc,kBAAkB,GAAQ,EAADvB,CAAC,CAgC5F,OAhC2FlE,EAAAA,EAAAA,GAAAiE,EAAA,EAAAhE,IAAA,SAAAC,MAE5F,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QACPW,EAAoCvF,KAAKuE,MAAlCC,EAAkBe,EAAlBf,mBAAoBC,EAAKc,EAALd,MAE3B,OACIzJ,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,CAC5BuJ,IACGtJ,EAAAA,EAAAA,KAACqK,EAAAA,EAAK,CAACC,QAAS,6BAA+Bb,EAAQ/F,KAAM4F,MAAOA,IAEvED,IACGrJ,EAAAA,EAAAA,KAACoI,GAAc,CACXvH,MACIhB,EAAAA,EAAAA,MAAA,OAAKC,UAAU,8BAA6BC,SAAA,CAAC,kBACzB0J,EAAQ/F,QAGhC4E,QAASzD,KAAK2E,aACdjB,SAAU1D,KAAKoF,gBAGvBjK,EAAAA,EAAAA,KAACC,GAAAA,EAAM,CACHC,KAAK,IACLC,KAAK,kBACLC,MAAO,SACPC,QAASwE,KAAKqF,kBAAkBnK,SACnC,aAKb,KAAC4I,CAAA,CA1Ec,CAASR,EAAAA,WA6E5B,UAAeoC,EAAAA,EAAAA,IAAQ,KAAM,CAACb,iBAAAA,GAAAA,IAA9B,CAAiDf,I,iPC9E3CzJ,IAAQC,EAAAA,EAAAA,GAAG,uBAeV,SAASqL,GAAenL,GAAsC,IAApCoL,EAAIpL,EAAJoL,KAAMzH,EAAK3D,EAAL2D,MAAO0H,EAAYrL,EAAZqL,aAC1C,OACI1K,EAAAA,EAAAA,KAAC2K,EAAAA,EAAa,CAAA5K,UACVF,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,KAAQa,SAAA,EACpBC,EAAAA,EAAAA,KAAC4K,GAAkB,CACfC,MAAO3L,GAAM,UACbwE,KAAK,eACLoH,UAAU,QACV9H,MAAM,WAEVhD,EAAAA,EAAAA,KAAC+K,GAAuB,CAACF,MAAO3L,GAAM,SAAeuL,KAAAA,EAAMzH,MAAAA,EAAO0H,aAAAA,IACjED,EAAK7C,KAAI,SAACoD,EAAGrK,GACV,OAAOX,EAAAA,EAAAA,KAAC4K,IAAkB7C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAiBiD,GAAC,IAAEN,aAAcA,IAA5B/J,EACpC,QAIhB,CAQA,SAASiK,GAAkBK,GAOK,IAN5BvH,EAAIuH,EAAJvH,KACAoH,EAASG,EAATH,UACA9H,EAAKiI,EAALjI,MACAkI,EAAKD,EAALC,MACAL,EAAKI,EAALJ,MACAH,EAAYO,EAAZP,aAEMS,OACQ5B,IAAV2B,GACIlL,EAAAA,EAAAA,KAAA,QAAMoL,MAAO,CAACF,MAAAA,GAAOnL,UACjBC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAAQ,SAASC,KAAK,YAEhC,KACFC,EACFb,GAAgBc,KAAUV,GAAaJ,EAAaI,GAAaA,EAC/DW,EAAaf,GAAgBc,KAAUxI,GAAS0H,EAAa1H,GAASA,EAE5E,OACInD,EAAAA,EAAAA,MAACW,EAAAA,SAAc,CAAAT,SAAA,EACXC,EAAAA,EAAAA,KAAA,QAAMF,UAAWZ,GAAM,OAAQ2L,GAAO9K,SAAEoL,KACxCnL,EAAAA,EAAAA,KAAA,QAAMF,UAAWZ,GAAM,OAAQ2L,GAAO9K,SAAE2D,KACxC1D,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,YAAa2L,GAAO9K,SAAEwL,KAC5CvL,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,QAAS2L,GAAO9K,SAAE0L,MAGpD,CAMA,SAASV,GAAuBW,GAAoE,IAAlEjB,EAAIiB,EAAJjB,KAAMzH,EAAK0I,EAAL1I,MAAO6H,EAAKa,EAALb,MAAOH,EAAYgB,EAAZhB,aAC5CI,EAAY3H,IAAQsH,GAAM,SAACkB,EAAK5G,GAAI,OAAK4G,EAAM5G,EAAK+F,SAAS,GAAE,GACrE,OAAO9K,EAAAA,EAAAA,KAAC4K,GAAkB,CAAClH,KAAK,QAAagH,aAAAA,EAAcG,MAAAA,EAAOC,UAAAA,EAAW9H,MAAAA,GACjF,C,gBChEM4I,GAASC,GAAAA,EA4Df,SAASC,GAAiBzM,GAOtB,IANA0M,EAAQ1M,EAAR0M,SACAC,EAAU3M,EAAV2M,WACAC,EAAW5M,EAAX4M,YACAnM,EAAST,EAATS,UACA4K,EAAYrL,EAAZqL,aACAwB,EAAc7M,EAAd6M,eAEA,IAAKH,GAAYA,EAASI,cACtB,OAAOtI,EAAAA,EAAOC,OAAOkE,SAGzB,IACI,IAAAoE,EAvER,SAA8BL,EAAUE,EAAaI,GACjD,IAAKN,EACD,MAAO,CAAC,EAGZ,IAAMO,EAAgBD,EAAkBN,GAAU,GAClD,GAAIQ,KAASD,GACT,MAAO,CAAC,EAEZ,IAAAE,EAKIF,EAJAtJ,MAAAA,OAAK,IAAAwJ,EAAG,EAACA,EACTC,EAGAH,EAHAG,aAAYC,EAGZJ,EAFAxB,UAAW6B,OAAkB,IAAAD,EAAG,EAACA,EAAAE,EAEjCN,EADAO,YAAaC,OAAoB,IAAAF,EAAG,EAACA,EAGnC7M,EAAWgM,EAAShM,SACpB4B,EAAQsK,GAAelM,EAAS+I,OAAS,EAAC,CAAIiD,GAAQ5C,QAAA4D,EAAAA,GAAAA,GAAKhN,IAAY,CAACgM,GAExEiB,EAAWC,KAAKC,IAAIP,EAAqBG,EAAsB9J,GAEjEmK,EAAa,EACXC,EAAgB,GAChBC,EAAc,GAgCpB,OA9BA1K,IAAShB,GAAO,SAACoD,EAAMpE,GACnB,IAAIoE,EAAKoH,cAAT,CAIA,IACAmB,EAAyDjB,EAAkBtH,EAD/C,IAAVpE,IAAgBsL,GAC3BnB,EAASwC,EAATxC,UAAW+B,EAAWS,EAAXT,YAAa7J,EAAKsK,EAALtK,MAAOe,EAAQuJ,EAARvJ,SAAUxE,EAAK+N,EAAL/N,MAChDgO,EAAqCC,GAAAA,EAAQC,qBACzC3C,EACA+B,EACAG,EACAzN,GACHmO,GAAAC,EAAAA,GAAAA,GAAAJ,EAAA,GALMK,EAAWF,EAAA,GAAEG,EAAaH,EAAA,GAO3BI,EAAc,CAChBpK,MAAMqK,EAAAA,EAAAA,IAAehJ,GACrB+F,UAAAA,EACA9H,MAAAA,GAEAe,EAAW,GACPkI,GAAelM,EAAS+I,OAAS,IACjCgF,EAAY5C,MAAQ0C,EAAY1C,MAAQU,IAAQ,EAAIuB,KAAgBvB,GAAO9C,SAE/EsE,EAAcY,KAAKJ,EAAaC,GAChCR,EAAYW,KAAKF,IACA,IAAVnN,KAELwM,CAxBN,CA0BJ,IACO,CAACV,aAAAA,EAAcW,cAAAA,EAAeC,YAAaA,EAAarK,MAAAA,EACnE,CAeyEyK,CAC7D1B,EACAE,EACAD,GAHGpH,EAAKwH,EAALxH,MAAO6H,EAAYL,EAAZK,aAAcW,EAAahB,EAAbgB,cAAeC,EAAWjB,EAAXiB,YAAarK,EAAKoJ,EAALpJ,MAKxD,IAAIiL,EAAAA,GAAAA,IAAOrJ,KAAUqJ,EAAAA,GAAAA,IAAOb,GACxB,OAAOvJ,EAAAA,EAAOC,OAAOkE,SAEzB,IAAMkG,EACDd,GAAkBA,EAActE,OAE3BsE,EAAce,QAAO,SAACxC,EAAGV,GAAA,IAAGrG,EAAKqG,EAALrG,MAAK,OAAOwJ,MAAMxJ,GAAS+G,EAAMA,EAAM/G,CAAK,GAAG,GAD3EA,EAEJb,GACF/D,EAAAA,EAAAA,KAACgF,EAAAA,EAAQ,CAACJ,MAAOsJ,EAAeG,MAAOjB,EAAevM,KAAM4L,IAGhE,OAAKR,GAKDjM,EAAAA,EAAAA,KAACsO,GAAAA,EAAO,CACJxO,UAAWA,EACXH,SACIK,EAAAA,EAAAA,KAACwK,GAAe,CAACC,KAAM4C,EAAarK,MAAOA,EAAO0H,aAAcA,IAEpE6D,UAAW,CAAC,QAAS,OAAQ,MAAO,UACpCC,iBAAkBtC,EAAenM,SAEhCgE,IAZEA,CAef,CAAE,MAAO0K,GAEL,OADAC,QAAQpF,MAAMmF,GACP5K,EAAAA,EAAOC,OAAOkE,QACzB,CACJ,CAcO,SAAS2G,GAAuBjD,GAOnC,IANAK,EAAQL,EAARK,SACA6C,EAAalD,EAAbkD,cACArO,EAAImL,EAAJnL,KACA2F,EAAUwF,EAAVxF,WACApG,EAAS4L,EAAT5L,UACAoM,EAAcR,EAAdQ,eAGM2C,EAAkBD,KADJb,EAAAA,EAAAA,IAAehC,GAEnC+C,EAAqCC,GAAAA,GAAmCxO,GAAKyO,EAAAF,EAAtEhL,OAAAA,OAAM,IAAAkL,EAAG,SAAQA,EAAEC,EAAOH,EAAPG,QAKpBvE,EAAe7G,EAAAA,EAAOC,OAAOA,GACnC,OACI9D,EAAAA,EAAAA,KAAC2K,EAAAA,EAAa,CAAA5K,UACVC,EAAAA,EAAAA,KAAC8L,GAAiB,CAEVC,SAAAA,EACAC,WAVG,SAACjH,EAAMmK,GACtB,IAAmBzF,EAAW1E,EAAvBoK,WACP,OAAOF,EAAQxF,EAASyF,EAAWhJ,EACvC,EAQgB+F,YAAa4C,EACbnE,aAAAA,EACA5K,UAAAA,EACAoM,eAAAA,KAKpB,CC3IA,IAAMhN,IAAQC,EAAAA,EAAAA,GAAG,iBAsBXiQ,GAAkB,SAAAC,IAAAjL,EAAAA,EAAAA,GAAAgL,EAAAC,GAAA,IAAAhL,GAAAC,EAAAA,EAAAA,GAAA8K,GAAA,SAAAA,IAAA,IAAAxG,GAAArE,EAAAA,EAAAA,GAAA,KAAA6K,GAAA,QAAAvG,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GAiIlB,OAjIkBL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KACpBK,MAAe,CAAC,EAACR,EA8CjB0G,qBAAuB,SAAAjQ,GAMhB,IALHkQ,EAAQlQ,EAARkQ,SACA3K,EAAKvF,EAALuF,MAKO4K,EAAW5G,EAAK9D,MAAhB0K,QACP,OACIxP,EAAAA,EAAAA,KAACyP,GAAAA,EAAY,CACT7K,MAAOA,EACP2K,SAAUA,EACV5N,MAAOlB,IAAK+O,GAAS,SAAC5K,GAClB,MAAO,CACHA,MAAAA,EACA/D,KAAM+D,EAEd,IACA8K,YAAa,oBACbC,MAAM,OAGlB,EAAC/G,EAEDgH,gBAAkB,SAACnG,GACf,IAAOoG,EAAkBjH,EAAK9D,MAAvB+K,eACP,GAAIpG,GAAWA,IAAYoG,EACvB,MAAO,mCAGf,EAACjH,EAYDkH,cAAgB,WAAmB,IAAlBrG,EAAOhF,UAAAqE,OAAA,QAAAS,IAAA9E,UAAA,GAAAA,UAAA,GAAG,GACvB,IAAKgF,GAAWA,IAAYsG,GAAAA,GACxB,MAAO,CAAC/M,MAAOgN,IAAUC,MAAOD,KAGpC,IAAmBE,GAAetH,EAAK9D,MAAMqL,aAAa1G,IAAY,CAAC,GAAhE0F,WACP,IAAKe,EACD,MAAO,CAAClN,MAAO,EAAGiN,MAAO,GAG7B,IAAMG,EAAexH,EAAKyH,kBAC1B,MAAO,CACHrN,MAAOsN,GAAAA,GAAMC,SAASL,EAAaM,GAAAA,GAA0BJ,GAC7DrN,MAAOuN,GAAAA,GAAMC,SAASL,EAAaO,GAAAA,GAAyBL,GAC5DH,MAAOK,GAAAA,GAAMC,SAASL,EAAaQ,GAAAA,GAAmCN,GACtEO,mBAAoBL,GAAAA,GAAMC,SACtBL,EACAU,GAAAA,GAAgCR,GAEpCS,wBAAyBP,GAAAA,GAAMC,SAASL,EAAaY,GAAAA,IAE7D,EAAClI,EAMDmI,iBAAmB,WACfnI,EAAKiB,SAAS,CAACmH,YAAapI,EAAKQ,MAAM4H,YAC3C,EAACpI,EAEDqI,cAAgB,SAACC,EAAkBC,EAAmBC,GAClD,IAAA7L,EAA0CqD,EAAK9D,OAC/CuM,EADsB9L,EAAf8L,iBACS,CACZrO,MAAOkO,EACPC,UAAAA,EACA1H,QAJkClE,EAAdsK,eAKpBuB,kBAAAA,EACAhB,aAAcxH,EAAKyH,mBAE3B,EAACzH,CAAC,CAWD,OAXAlE,EAAAA,EAAAA,GAAA0K,EAAA,EAAAzK,IAAA,SAAAC,MA9HD,WACI,IAAA0M,EAA+EzM,KAAKC,MAA7E1E,EAAKkR,EAALlR,MAAOG,EAAI+Q,EAAJ/Q,KAAM2F,EAAUoL,EAAVpL,WAAY2J,EAAcyB,EAAdzB,eAAgBjB,EAAa0C,EAAb1C,cAAeuB,EAAYmB,EAAZnB,aACxDrM,EAAUiL,GAAAA,GAAmCxO,GAA7CuD,OACAkN,EAAcnM,KAAKuE,MAAnB4H,WACAhO,EAAS6B,KAAKiL,cAAcD,GAA5B7M,MACP,OACInD,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,KAAQa,SAAA,EACpBF,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,GAAM,SAASa,SAAA,EAC3BC,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,QAAQa,SAAEK,KAChCJ,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,YAAYa,UAC9BC,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB5C,SAAUoE,EAAaN,GACvBjB,cAAeA,EACfrO,KAAMA,EACN2F,WAAYA,EACZpG,UAAWZ,GAAM,oBACjBgN,eAAgBhN,GAAM,+BAG9Bc,EAAAA,EAAAA,KAACuR,GAAAA,EAAa,CACVrG,MAAM,YACNpL,UAAWZ,GAAM,QACjBmB,QAASwE,KAAKkM,iBAAiBhR,UAE/BC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAAS,gBAGtB2F,IACGhR,EAAAA,EAAAA,KAACwR,GAAAA,EAAmB,CAChB1N,OAAQA,EACRd,MAAOA,EACPyO,OAAQ5M,KAAKkM,iBACbW,OAAQ7M,KAAKoM,cACbnB,cAAejL,KAAKiL,cACpBD,eAAgBA,EAChB8B,uBAAwB9M,KAAK+M,iBAAiB/B,GAC9CgC,oBAAqBhN,KAAKyK,qBAC1BwC,IAAKjN,KAAKkN,mBAK9B,GAAC,CAAApN,IAAA,mBAAAC,MAkCD,SAAiB6E,GAEb,OADkC5E,KAAKC,MAAMqL,aAAa1G,GAAnD0F,WACY6C,MACvB,GAAC,CAAArN,IAAA,kBAAAC,MAED,WACI,IAAAqN,EAA2BpN,KAAKC,MAAzBvE,EAAI0R,EAAJ1R,KAAM2F,EAAU+L,EAAV/L,WACb,OAAQA,EAAiB,GAAAiD,OAAM5I,EAAI,KAAA4I,OAAIjD,GAAlB3F,CACzB,GAAC,CAAAoE,IAAA,iBAAAC,MAyBD,WAA8B,IAADsN,EAAdzI,EAAOhF,UAAAqE,OAAA,QAAAS,IAAA9E,UAAA,GAAAA,UAAA,GAAG,GACrB,OAAuC,QAAvCyN,EAAOrN,KAAKC,MAAMqL,aAAa1G,UAAQ,IAAAyI,OAAA,EAAhCA,EAAkC/C,UAC7C,GAAC,CAAAxK,IAAA,eAAAC,MAiBD,WACI,IAAOiL,EAAkBhL,KAAKC,MAAvB+K,eACPsC,EAKItN,KAAKiL,cAAcD,GAAeuC,EAAAD,EAJlCpP,MAAAA,OAAK,IAAAqP,EAAG,EAACA,EAAAC,EAAAF,EACTlC,MAAAA,OAAK,IAAAoC,EAAG,EAACA,EAAAC,EAAAH,EACTxB,mBAAAA,OAAkB,IAAA2B,EAAG,EAACA,EAG1B,OAF2BH,EAAvBtB,wBAE6BZ,EAAQlN,EAAQ4N,CACrD,KAACvB,CAAA,CA5ImB,CAAS5O,EAAAA,WA+IjC,SAAS+R,GAAazN,GAClB,IAAM9D,GAAWC,EAAAA,EAAAA,MACX2N,GAAgBzN,EAAAA,EAAAA,IAAYkB,EAAAA,IAC5B8N,GAAehP,EAAAA,EAAAA,IAAYqR,EAAAA,IAE3BC,EAAiBjS,EAAAA,aACnB,SAACkS,GACG1R,EC/JL,SAAyB0R,GAC5B,OAAO,SAAC1R,GACJ,IAAM2R,EAAcD,EAAOjJ,QAAU,IAAMiJ,EAAOtC,aAClD,OAAOwC,EAAAA,EAAAA,IA9Bf,SAA6BF,GACzB,IAAO1P,EAA8D0P,EAA9D1P,MAAOmO,EAAuDuB,EAAvDvB,UAAW1H,EAA4CiJ,EAA5CjJ,QAAS2G,EAAmCsC,EAAnCtC,aAAcgB,EAAqBsB,EAArBtB,kBAC1CyB,EAAUzC,EAAa0C,QAAQ,MAAO,KAC5C,OAAK3B,EAGAC,EAEMD,EAAY,EACZ4B,KAAAA,GAAMC,yBAAyB,CAClCC,WAAY,CACRC,eAAgB9B,EAChB+B,oBAAqB1J,EACrB2J,eAAgBC,KAAQ,CAAC,EAAGR,GAAS,kBAAM1B,CAAS,OAIrD4B,KAAAA,GAAMC,yBAAyB,CAClCC,WAAY,CACRC,eAAgBzJ,EAChB0J,oBAAqB/B,EACrBgC,eAAgBC,KAAQ,CAAC,EAAGR,GAAS,kBAAO1B,CAAS,QAdtDmC,EAAAA,GAAAA,IAAgBtQ,EAAOyG,EAAS+G,GAAAA,GAA0BJ,GAH1DmD,QAAQC,SAqBvB,CAKuCC,CAAoBf,GAAS,CACxDC,YAAAA,EACAe,eAAgB,yBACjB9J,MAAK,WACJ5I,GAAS2S,EAAAA,GAAAA,IAAkBjB,EAAOjJ,UAClCzI,GAAS4S,EAAAA,GAAAA,MACb,GACJ,CACJ,CDoJqBvC,CAAgBqB,GAC7B,GACA,CAAC1R,IAGCwO,GAAUrO,EAAAA,EAAAA,IAAY0S,EAAAA,IAE5B,OACI7T,EAAAA,EAAAA,KAACoP,IAAkBrH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACXjD,GAAK,IACT8J,cAAeA,EACfuB,aAAcA,EACdkB,gBAAiBoB,EACjBjD,QAASA,IAGrB,CAEA,SAAehP,EAAAA,KAAW+R,I,2BEzN1B,SAASuB,KACL,IAAMC,GAAa5S,EAAAA,EAAAA,IAAY6S,EAAAA,IACzBvK,GAAUtI,EAAAA,EAAAA,IAAY8S,EAAAA,IACtBC,GAAkB/S,EAAAA,EAAAA,IAAYgT,GAAAA,IAEpC,OACInU,EAAAA,EAAAA,KAAAoU,EAAAA,SAAA,CAAArU,SACKsU,GAAAA,GAAUC,oCAAoC,CAC3CP,WAAAA,EACAQ,kBAAmB9K,EAAQ+K,YAC3BN,gBAAAA,KAIhB,CAEA,SAAe1T,EAAAA,KAAWsT,ICtB+C,IAQpDW,GAAY,SAAAtQ,IAAAC,EAAAA,EAAAA,GAAAqQ,EAAAtQ,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAmQ,GAAA,SAAAA,IAAA,OAAAlQ,EAAAA,EAAAA,GAAA,KAAAkQ,GAAApQ,EAAAG,MAAA,KAAAC,UAAA,CAc5B,OAd4BC,EAAAA,EAAAA,GAAA+P,EAAA,EAAA9P,IAAA,SAAAC,MAC7B,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QAEP,OACI5J,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,EAC7BC,EAAAA,EAAAA,KAAC8T,GAA2B,KAC5B9T,EAAAA,EAAAA,KAACuS,GAAY,CACTnS,MAAO,QACPyP,eAAgBpG,EAAQ/F,KACxBnD,KAAMmU,GAAAA,GAAoBC,eAI1C,KAACF,CAAA,CAd4B,CAAStM,EAAAA,WCDrByM,GAAa,SAAAzQ,IAAAC,EAAAA,EAAAA,GAAAwQ,EAAAzQ,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAsQ,GAAA,SAAAA,IAAA,OAAArQ,EAAAA,EAAAA,GAAA,KAAAqQ,GAAAvQ,EAAAG,MAAA,KAAAC,UAAA,CAc7B,OAd6BC,EAAAA,EAAAA,GAAAkQ,EAAA,EAAAjQ,IAAA,SAAAC,MAC9B,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QAEP,OACI5J,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,EAC7BC,EAAAA,EAAAA,KAAC8T,GAA2B,KAC5B9T,EAAAA,EAAAA,KAACuS,GAAY,CACTnS,MAAO,SACPyP,eAAgBpG,EAAQ/F,KACxBnD,KAAMmU,GAAAA,GAAoBG,gBAI1C,KAACD,CAAA,CAd6B,CAASzM,EAAAA,W,mCCGrCjJ,IAAQC,EAAAA,EAAAA,GAAG,+BAoBX2V,GAAa,SAAA3Q,IAAAC,EAAAA,EAAAA,GAAA0Q,EAAA3Q,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAwQ,GAAA,SAAAA,IAAA,IAAAlM,GAAArE,EAAAA,EAAAA,GAAA,KAAAuQ,GAAA,QAAAjM,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GAOb,OAPaL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KACfK,MAAQ,CACJ2L,gBAAgB,GACnBnM,EAEDoM,cAAgB,WACZpM,EAAKiB,SAAS,CAACkL,gBAAiBnM,EAAKQ,MAAM2L,gBAC/C,EAACnM,CAAC,CAuCD,OAvCAlE,EAAAA,EAAAA,GAAAoQ,EAAA,EAAAnQ,IAAA,gBAAAC,MAED,SAAc6E,EAA2BwL,GACrC,OAAOA,EAAQrN,KAAI,SAAC1B,GAAU,OAC1BlG,EAAAA,EAAAA,KAACuS,GAAY,CAETnS,MAAOyD,EAAAA,EAAOC,OAAsB,cAAEoC,GAAc,UACpD2J,eAAgBpG,EAAQ/F,KACxBnD,KAAMmU,GAAAA,GAAoBQ,sBAC1BhP,WAAYA,GAJPA,EAKP,GAEV,GAAC,CAAAvB,IAAA,SAAAC,MAED,WACI,IAAAW,EAA8BV,KAAKC,MAA5B2E,EAAOlE,EAAPkE,QACD0L,EADoB5P,EAAVL,WAC2BkQ,QAAO,SAACrQ,GAAI,MAAc,UAATA,CAAgB,IAC5EsQ,EAAwBC,KACpBH,GACA,SAACjP,GAAU,OAAKuD,EAAQ9D,UAAUO,EAAW,IAChDqP,GAAA5H,EAAAA,GAAAA,GAAA0H,EAAA,GAHMG,EAAOD,EAAA,GAAEE,EAAIF,EAAA,GAKbR,EAAkBlQ,KAAKuE,MAAvB2L,eACHW,EAAc,GAIlB,OAHID,EAAK3M,OAAS,IACd4M,EAAcX,EAAiB,oBAAsB,aAGrDlV,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,KAAQa,SAAA,EACpBC,EAAAA,EAAAA,KAAC8T,GAA2B,IAC3BjP,KAAK8Q,cAAclM,EAAS+L,GAC5BE,IACG1V,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,WAAY,oBAAoBa,UAClDC,EAAAA,EAAAA,KAACuR,GAAAA,EAAa,CAAClR,QAASwE,KAAKmQ,cAAcjV,SAAE2V,MAGpDX,GAAkBlQ,KAAK8Q,cAAclM,EAASgM,KAG3D,KAACX,CAAA,CA9Cc,CAAS3M,EAAAA,WAqD5B,UAAeoC,EAAAA,EAAAA,KAJS,SAACnB,GAAgB,MAAM,CAC3ClE,YAAY0Q,EAAAA,GAAAA,IAAcxM,GAC7B,GAED,CAAwC0L,I,4BCpElC5V,IAAQC,EAAAA,EAAAA,GAAG,2BAQX0W,GAAc,SAAA1R,IAAAC,EAAAA,EAAAA,GAAAyR,EAAA1R,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAuR,GAAA,SAAAA,IAAA,OAAAtR,EAAAA,EAAAA,GAAA,KAAAsR,GAAAxR,EAAAG,MAAA,KAAAC,UAAA,CAmCf,OAnCeC,EAAAA,EAAAA,GAAAmR,EAAA,EAAAlR,IAAA,qBAAAC,MAChB,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QAEP,OACIzJ,EAAAA,EAAAA,KAACuS,GAAY,CACTnS,MAAO,UACPG,KAAMmU,GAAAA,GAAoBoB,aAC1BjG,eAAgBpG,EAAQ/F,MAGpC,GAAC,CAAAiB,IAAA,sBAAAC,MAED,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QAEP,OACIzJ,EAAAA,EAAAA,KAACuS,GAAY,CACTnS,MAAO,uBACPG,KAAMmU,GAAAA,GAAoBqB,qBAC1BlG,eAAgBpG,EAAQ/F,MAGpC,GAAC,CAAAiB,IAAA,SAAAC,MAED,WACI,IAAOoR,EAAyBnR,KAAKC,MAA9BkR,sBACP,OACInW,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,EAC7BC,EAAAA,EAAAA,KAAC8T,GAA2B,IAC3BkC,GAAyBnR,KAAKoR,qBAC9BD,GAAyBnR,KAAKqR,uBAC/BlW,EAAAA,EAAAA,KAACmW,GAAsB,MAGnC,KAACN,CAAA,CAnCe,CAAS1N,EAAAA,WA8C7B,UAFkBoC,EAAAA,EAAAA,KANM,SAACnB,GACrB,MAAO,CACH4M,uBAAuBI,EAAAA,GAAAA,IAAmDhN,GAElF,GAIA,CAAyByM,IAElB,SAASM,GAAsB9W,GAAqC,IAAnCS,EAAST,EAATS,UAC9BuW,GAAiBlV,EAAAA,EAAAA,IAAYmV,GAAAA,IAE7BC,GAAWpV,EAAAA,EAAAA,IAAYqV,GAAAA,IACvBC,GAAUtV,EAAAA,EAAAA,IAAYuV,GAAAA,IAE5B,OAAQL,GACJxW,EAAAA,EAAAA,MAAA,OAAKC,UAAWA,EAAUC,SAAA,EACtBF,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,GAAM,WAAWa,SAAA,CAAC,qGAEb,KACjBC,EAAAA,EAAAA,KAAC2W,GAAAA,EAAI,CAACC,IAAG,IAAAzN,OAAMsN,EAAO,KAAAtN,OAAI0N,GAAAA,GAAKC,qBAAuBC,QAAM,EAAAhX,SAAC,wBAEtD,OAGVwW,IACGvW,EAAAA,EAAAA,KAAA,OAAAD,UACIC,EAAAA,EAAAA,KAAC2W,GAAAA,EAAI,CAACC,IAAKL,EAASxW,SAAC,sBAZZ,IAiB7B,C,gBChFe,SAASiX,GAAoBlS,GACxC,IAAMmS,GAAQ9V,EAAAA,EAAAA,IAAY+V,EAAAA,IACnBzN,EAAW3E,EAAX2E,QAEP,OACI5J,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,EAC7BC,EAAAA,EAAAA,KAAC8T,GAA2B,IAC3BrT,IAAKwW,GAAO,SAACE,GACV,OACInX,EAAAA,EAAAA,KAACuS,GAAY,CAETnS,MAAO0D,GAAAA,EAAOsT,SAASD,GACvB5W,KAAMmU,GAAAA,GAAoB2C,cAC1BxH,eAAgBpG,EAAQ/F,KACxBwC,WAAYiR,GAJPA,EAOjB,MAGZ,C,gBCrBMlT,I,UAAI/E,EAAAA,EAAAA,GAAM,oBAEKoY,GAAM,SAAAnT,IAAAC,EAAAA,EAAAA,GAAAkT,EAAAnT,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAgT,GAAA,SAAAA,IAAA,IAAA1O,GAAArE,EAAAA,EAAAA,GAAA,KAAA+S,GAAA,QAAAzO,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GAYrB,OAZqBL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KAMvBK,MAAQ,CACJmO,UAAWC,GAAAA,GAAYC,SAC1B7O,EAED8O,YAAc,SAAC9S,GACXgE,EAAKiB,SAAS,CAAC0N,UAAW3S,GAC9B,EAACgE,CAAC,CAkCD,OAlCAlE,EAAAA,EAAAA,GAAA4S,EAAA,EAAA3S,IAAA,SAAAC,MAED,WACI,IAAO2S,EAAa1S,KAAKuE,MAAlBmO,UACA9N,EAAW5E,KAAKC,MAAhB2E,QAEP,OACI5J,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,QAAQlE,SAAA,EACtBC,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,gBAAgBlE,UAC9BC,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,aAAalE,UAC3BC,EAAAA,EAAAA,KAAC2X,GAAAA,EAAI,CACDhW,MAAOiW,GAAAA,GACP1X,KAAK,IACL2X,OAAO,WACPC,OAAQP,EACRG,YAAa7S,KAAK6S,mBAI9B1X,EAAAA,EAAAA,KAAC2K,EAAAA,EAAa,CAAA5K,UACVF,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,eAAgB,iBAAiBlE,SAAA,CAC9CwX,IAAcC,GAAAA,GAAYC,UAAWzX,EAAAA,EAAAA,KAAC+X,GAAAA,EAAc,CAACtO,QAASA,IAC9D8N,IAAcC,GAAAA,GAAW,SAAWxX,EAAAA,EAAAA,KAAC2I,GAAa,CAACc,QAASA,IAC5D8N,IAAcC,GAAAA,GAAYQ,QAAShY,EAAAA,EAAAA,KAACyU,GAAY,CAAChL,QAASA,IAC1D8N,IAAcC,GAAAA,GAAYS,SAAUjY,EAAAA,EAAAA,KAAC4U,GAAa,CAACnL,QAASA,IAC5D8N,IAAcC,GAAAA,GAAYL,SAAUnX,EAAAA,EAAAA,KAAC8U,GAAa,CAACrL,QAASA,IAC5D8N,IAAcC,GAAAA,GAAYU,UAAWlY,EAAAA,EAAAA,KAAC6V,GAAc,CAACpM,QAASA,IAC9D8N,IAAcC,GAAAA,GAAYW,eACvBnY,EAAAA,EAAAA,KAACgX,GAAmB,CAACvN,QAASA,WAMtD,KAAC6N,CAAA,CA9CsB,CAASnP,EAAAA,W,wBCP9BjJ,IAAQC,EAAAA,EAAAA,GAAG,qBAMjB,SAASiZ,GAAa/Y,GAAoB,IAADgZ,EAAjB5O,EAAOpK,EAAPoK,QACd6O,EAAiC,CAAC,EAQxC,OANAC,EAAAA,GAAAA,IAAoB9O,SAAoB,QAAb4O,EAAP5O,EAAS+K,mBAAW,IAAA6D,OAAA,EAApBA,EAAsBG,oCAAoC,SAAC5T,EAAO6T,GAC9E7T,EAAQ,IACR0T,EAAOG,GAAQ7T,EAEvB,KAGI/E,EAAAA,EAAAA,MAACW,EAAAA,SAAc,CAAAT,SAAA,EACXF,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,GAAM,iBAAiBa,SAAA,CAAC,kDAEpCC,EAAAA,EAAAA,KAAA,SAAM,uCAEVA,EAAAA,EAAAA,KAAC0Y,GAAAA,GAAS,CACN/W,MAAOlB,IAAK6X,GAAQ,SAAC1T,EAAO6T,GACxB,MAAO,CACH9T,IAAK8T,EACLE,MAAOC,GAAaH,GACpB7T,OAAO5E,EAAAA,EAAAA,KAAAoU,EAAAA,SAAA,CAAArU,SAAG6E,IAElB,QAIhB,CAEA,SAAepE,EAAAA,KAAW4X,IAE1B,SAASQ,GAAaH,GAClB,OAAOA,EAAKI,MAAM,KAAKjR,IAAI9D,GAAAA,EAAOgV,eAAeC,KAAK,MAC1D,C,wFCjCM7Z,IAAQC,EAAAA,EAAAA,GAAG,gCAMX6Z,GAAyD,CAC3D,CACItV,KAAM,OACNuV,OAAQ,GACRC,UAAU,EACVvJ,MAAO,IACPwJ,OAAQ,SAACC,GACL,IAAA/Z,GAAsB+Z,aAAG,EAAHA,EAAKA,MAAO,CAAC,EAA5B1V,EAAIrE,EAAJqE,KAAM2V,EAAKha,EAALga,MACb,OAAOrZ,EAAAA,EAAAA,KAAA,QAAMF,UAAWZ,GAAM,OAAQ,CAACma,MAAOA,IAAetZ,SAAE2D,GACnE,GAEJ,CACIA,KAAM,QACNuV,OAAQ,QACRC,UAAU,EACVvJ,MAAO,IACP2J,SAAU,SAACF,GACP,IAAOnJ,EAAiBmJ,EAAjBnJ,MAAOnM,EAAUsV,EAAVtV,OACd,OAAOD,EAAAA,EAAOC,OAAOA,GAAQmM,EACjC,GAEJ,CACIvM,KAAM,QACNuV,OAAQ,QACRC,UAAU,EACVvJ,MAAO,IACP2J,SAAU,SAACF,GACP,IAAOvW,EAAgBuW,EAAhBvW,KAAMiB,EAAUsV,EAAVtV,OACb,OAAOD,EAAAA,EAAOC,OAAOA,GAAQjB,EACjC,GAEJ,CACIa,KAAM,OACNuV,OAAQ,OACRC,UAAU,EACVvJ,MAAO,IACP2J,SAAU,SAACF,GACP,IAAOG,EAAgBH,EAAhBG,KAAMzV,EAAUsV,EAAVtV,OACb,OAAOD,EAAAA,EAAOC,OAAOA,GAAQyV,EACjC,IAIR,SAASC,GAA0BvO,GAAsB,IAApBnL,EAASmL,EAATnL,UAC3BkB,GAAWC,EAAAA,EAAAA,MAEXwI,GAAUtI,EAAAA,EAAAA,IAAYkB,EAAAA,IACtBV,GAAQR,EAAAA,EAAAA,IAAYsY,EAAAA,IACpBC,GAAcvY,EAAAA,EAAAA,IAAYwY,GAAAA,IAE1BC,EAAWpZ,EAAAA,aACb,SAACoE,GAEGiV,OAAOC,cAAc,IAAIC,MAAM,WAC/B/Y,GAASgZ,EAAAA,GAAAA,KAA8CpV,GAC3D,GACA,CAAC5D,IAGL,OAAKyI,GAAY9H,SAAAA,EAAOmH,QAKpB9I,EAAAA,EAAAA,KAACia,EAAAA,EAAkB,CACfvW,KAAM,uBACN5D,UAAWZ,GAAM,KAAMY,GACvBI,KAAMga,GAAAA,GACNC,WAAYT,EACZE,SAAUA,EAAS7Z,UAEnBC,EAAAA,EAAAA,KAACoa,GAAAA,GAAW,CACRpB,QAASA,GACTtY,KAAMiB,EACN0Y,YAAU,EACVva,UAAWZ,GAAM,SACjBwD,SAAU,CACN4X,gBAAgB,GAEpBC,aAAc,SAAA7O,GAAc,IAAZ2N,EAAK3N,EAAL2N,MACZ,OAAQA,EAAana,GAAM,MAAO,CAACma,MAAOmB,OAAOnB,KAAjC,EACpB,MArBD,IAyBf,CAEA,SAAe7Y,EAAAA,KAAWgZ,I,uCC5F1B,SAASiB,GAAIpb,GAA0B,IAAxBwB,EAAIxB,EAAJwB,KACX,OACIhB,EAAAA,EAAAA,MAACW,EAAAA,SAAc,CAAAT,SAAA,EACXC,EAAAA,EAAAA,KAAC0a,GAAAA,GAAS,CAAA3a,SAAC,UAAiB,IAAEc,IAG1C,CAEA,SAAS8Z,KACL,IAAM3Z,GAAWC,EAAAA,EAAAA,MACX2Z,GAAOzZ,EAAAA,EAAAA,IAAY0Z,EAAAA,IACnBjW,GAAQzD,EAAAA,EAAAA,IAAY2Z,EAAAA,IACpB7D,GAAQ9V,EAAAA,EAAAA,IAAY+V,EAAAA,IAEpB6D,EAAeva,EAAAA,aACjB,SAACwa,GACGha,GACIia,EAAAA,GAAAA,GAA2B,CACvBC,wBACIF,EAAK,KAGrB,GACA,CAACha,IAGCW,EAAQnB,EAAAA,SAAc,WACxB,OAAOC,IAAKwW,GAAO,SAAClS,GAChB,MAAO,CACHH,MAAOG,EACPlE,MAAMb,EAAAA,EAAAA,KAACya,GAAI,CAAC5Z,KAAMiD,GAAAA,EAAOsT,SAASrS,KAE1C,GACJ,GAAG,CAACkS,IAEJ,MAAgB,kBAAT2D,EAA2B,MAC9B5a,EAAAA,EAAAA,KAAA,QAAAD,UACIC,EAAAA,EAAAA,KAACmb,GAAAA,EAAM,CAACC,SAAUL,EAAcpZ,MAAOA,EAAOiD,MAAO,CAACA,GAAQyW,YAAU,KAGpF,CAEA,SAAe7a,EAAAA,KAAWma,ICiC1B,IAAM1W,IAAI/E,EAAAA,EAAAA,GAAM,YACVoc,GAA2BrX,GAAE,oBAEnC,SAASsX,GAAKlc,GAA0B,IAAxBmc,EAAKnc,EAALmc,MAAOrP,EAAa9M,EAAb8M,cACnB,OAAI8B,EAAAA,GAAAA,IAAOuN,GACA3X,EAAAA,EAAOC,OAAOkE,UAIrBnI,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,SAASlE,SAAA,EACvBC,EAAAA,EAAAA,KAAA,OACIF,UAAWmE,GAAE,OAAQ,CACjBuX,OAAO,EACPC,WAAYtP,IACbpM,SAEF8D,EAAAA,EAAOC,OAAc,MAAE0X,MAE1BrP,IACEnM,EAAAA,EAAAA,KAAA,SAAOF,UAAWmE,GAAE,cAAclE,SAAE8D,EAAAA,EAAOC,OAAe,OAAE0X,OAI5E,CAEA,IAAME,IAA2BC,EAAAA,EAAAA,MAC3BC,IAAiCD,EAAAA,EAAAA,KAA8B,GAE/DE,IAAmCC,EAAAA,EAAAA,IAAQC,EAAAA,EAAgBC,EAAAA,EAAxBF,CAA0CG,EAAAA,GAOnF,SAASC,GAAYV,EAAOrP,GACxB,OACInM,EAAAA,EAAAA,KAAC2K,EAAAA,EAAa,CAAA5K,UACVC,EAAAA,EAAAA,KAACub,GAAK,CAACC,MAAOA,EAAOrP,cAAeA,KAGhD,CAEA,SAASgQ,GAAavX,GAA+B,IAAxBuH,EAAa1H,UAAAqE,OAAA,QAAAS,IAAA9E,UAAA,IAAAA,UAAA,GACtC,OACIzE,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,OAAQ,CAACwX,WAAYtP,IAAgBpM,SAClD8D,EAAAA,EAAOC,OAAe,OAAEc,IAGrC,CAEA,SAASwX,GAAgBnR,GAAU,IAAR2P,EAAI3P,EAAJ2P,KACnBtQ,EAAU,KASd,MARa,WAATsQ,IACAtQ,EACI,qFAEK,eAATsQ,IACAtQ,EAAU,uEAGNA,GAAiBtK,EAAAA,EAAAA,KAACqc,GAAAA,GAAO,CAAAtc,SAAEuK,IAAjB,IACtB,CAAC,IAEKgS,GAAkB,SAAAnY,IAAAC,EAAAA,EAAAA,GAAAkY,EAAAnY,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAgY,GAAA,SAAAA,IAAA,IAAA1T,GAAArE,EAAAA,EAAAA,GAAA,KAAA+X,GAAA,QAAAzT,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GAglBlB,OAhlBkBL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KAsKpBwT,mBAAqB,SAAC3X,GAClB,IAAA8G,EAAmB9G,GAAS,CAAC,EAAtB4X,EAAE9Q,EAAF8Q,GAAIC,EAAI/Q,EAAJ+Q,MAEXC,EADsC9T,EAAK9D,MAApC4X,6BACqBF,EAAIC,EACpC,EAAC7T,EAED+T,gCAAkC,SAACC,GACThU,EAAK9D,MAApB+X,cACaC,GAAAA,GAChBlU,EAAK9D,MAAMiY,qCAAqCH,EAAMI,OAAOpY,OAE7DgE,EAAK9D,MAAMmY,0BAA0BL,EAAMI,OAAOpY,MAE1D,EAACgE,EA2ZDsU,kBAAoB,WAChBtU,EAAK9D,MAAMqY,qBAAqB,QACpC,EAACvU,CAAC,CAyCD,OAzCAlE,EAAAA,EAAAA,GAAA4X,EAAA,EAAA3X,IAAA,2BAAAC,MAthBD,WACI,IAAAW,EAUIV,KAAKC,MATLsY,EAAS7X,EAAT6X,UACAC,EAAS9X,EAAT8X,UACAC,EAAU/X,EAAV+X,WACArY,EAASM,EAATN,UACA5B,EAAkBkC,EAAlBlC,mBACAoC,EAAQF,EAARE,SACAP,EAAUK,EAAVL,WACAqY,EAAehY,EAAfgY,gBACA3O,EAAarJ,EAAbqJ,cAEE4O,EAAWJ,GAAaC,GAAaC,EAE3C,OACItd,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,SAAU,oBAAoBlE,SAC3C6O,GACG5O,EAAAA,EAAAA,KAACwZ,GAA0B,KAE3BxZ,EAAAA,EAAAA,KAACia,EAAAA,EAAkB,CAACvW,KAAK,QAAQxD,KAAMqd,EAAgBxd,SAClDyd,IACGxd,EAAAA,EAAAA,KAACkE,EAAa,CACVe,UAAWA,EACX5B,mBAAoBA,EACpBoC,SAAUA,EACVP,WAAYA,OAOxC,GAAC,CAAAP,IAAA,gBAAAC,MAED,WAAiB,IAAD6Y,EAAA,KACZnM,EASIzM,KAAKC,MARLI,EAAUoM,EAAVpM,WACA2X,EAAWvL,EAAXuL,YACAa,EAAgBpM,EAAhBoM,iBACAC,EAAkBrM,EAAlBqM,mBACAC,EAAuBtM,EAAvBsM,wBACAC,EAAuBvM,EAAvBuM,wBAAuBC,EAAAxM,EACvByM,iBAAgBC,OAAA,IAAAF,EAAe,CAAC,EAACA,EAAdrB,EAAIuB,EAAJvB,KAAMD,EAAEwB,EAAFxB,GAIvByB,EACF/Y,IAC6B,YAA5B0Y,GAAqE,eAA5BA,GAExCM,EAPS5M,EAAX6M,cAQgBrB,GAAAA,GACVpB,GACAE,GAEV,OACI/b,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,UAAW,oBAAoBlE,SAAA,EAC7CC,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,4BAA6B,+BAA+BlE,UAC1EC,EAAAA,EAAAA,KAACoe,EAAAA,GAAiBrW,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACdwH,SAAU1K,KAAK8X,iCACXuB,GAAU,IACdtZ,MAAOiZ,QAGf7d,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,cAAe,+BAA+BlE,UAC5DC,EAAAA,EAAAA,KAACqe,EAAAA,EAAM,CACHC,UAAQ,EACRpe,KAAK,IACLK,KAAK,OACLqE,MAAO8Y,EACPhO,YAAY,aACZH,SAAU1K,KAAKC,MAAMyZ,iBACrBC,UAAW3B,IAAgBC,GAAAA,GAC3B2B,GAAI,2BAGXpK,GAAAA,GAAUqK,wBAAwB,CAC/B5e,UAAWmE,GAAE,qBAAsB,+BACnCW,MAAO,CAAC6X,KAAAA,EAAMD,GAAAA,GACdjN,SAAU1K,KAAK0X,sBAEnBvc,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,eAAgB,+BAA+BlE,UAC7DC,EAAAA,EAAAA,KAACmb,EAAAA,EAAM,CACHvW,MAAO,CAACgZ,GACRe,QAASC,EAAAA,GACTxD,SAAU,SAACJ,GAAI,OAAKyC,EAAK3Y,MAAM+Z,oBAAoB7D,EAAK,GAAG,EAC3DrC,MAAM,QACN8F,GAAG,wBACHK,eAAa,OAGrB9e,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,uBAAwB,+BAA+BlE,SACnEke,GAGEje,EAAAA,EAAAA,KAACmb,EAAAA,EAAM,CACHwD,SAASI,EAAAA,EAAAA,IAAkB7Z,GAC3BN,MAAO,CAAC+Y,GACRvC,SAAU,SAACJ,GAAI,OAAKyC,EAAK3Y,MAAMka,mBAAmBhE,EAAK,GAAG,EAC1DrC,MAAM,UACNmG,eAAa,KAPjB9e,EAAAA,EAAAA,KAAC2a,GAAqB,QAa1C,GAAC,CAAAhW,IAAA,oBAAAC,MAiBD,WACI,IAAOqa,EAAepa,KAAKC,MAApBma,YAEP,OAAOjf,EAAAA,EAAAA,KAACqK,EAAAA,EAAK,CAACf,MAAO2V,GACzB,GAAC,CAAAta,IAAA,YAAAua,IAED,WACI,IAAAjN,EASIpN,KAAKC,MARL8J,EAAaqD,EAAbrD,cACoB1I,EAAU+L,EAA9B0L,mBACAwB,EAAoBlN,EAApBkN,qBACAC,EAAuBnN,EAAvBmN,wBACAC,EAAYpN,EAAZoN,aACA5I,EAAOxE,EAAPwE,QACAyE,EAAuBjJ,EAAvBiJ,wBACAhH,EAAejC,EAAfiC,gBAEEoL,EAAOza,KAEP0a,EAAY,CACd7b,KAAI,SAACqI,EAAUrI,EAAM8b,EAAeC,GAChC,IAAAC,EAAoB3T,EAAbsN,MAGDsG,EAAc,CAACC,YADN,SAFH,IAAAF,EAAG,EAACA,IAIG3a,EAAiCgH,EAA7CoD,WAAkBpP,EAA2BgM,EAA3BhM,SAEzB,GAFoDgM,EAAjBI,cAG/B,OACInM,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,OAAQ,CAACP,MAAM,IAAQ0H,MAAOuU,EAAY5f,UACxDC,EAAAA,EAAAA,KAAA,OACIF,UAAWmE,GAAE,YAAa,CACtB4b,aAAa,IACd9f,SACN,kBAOb,IAAM+f,EAAc/f,GAAYA,EAAS+I,OAAS,EAC5CiX,GACF/f,EAAAA,EAAAA,KAAA,OACIF,UAAWmE,GAAE,eAAgB,CAAC+b,QAASF,IACvCzf,QAASmf,EAAczf,UAEvBC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAASoU,EAAUtF,UAAY,aAAe,eAItD8F,GACFjgB,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,aAAalE,UAC3BC,EAAAA,EAAAA,KAACkgB,EAAAA,EAAW,CAACzW,QAAS1E,EAAKrB,KAAM+S,QAASA,MAI5C0J,EAAiBhB,EAAqBiB,IAAIrb,EAAKrB,MAIrD,OACI7D,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,OAAQ,CAACP,MAAM,IAAQ0H,MAAOuU,EAAY5f,SAAA,CACvDggB,EACAE,GACDjgB,EAAAA,EAAAA,KAAA,OACIF,UAAWmE,GAAE,qBAAsB,CAC/B6T,OAAQqI,IAEZ9f,QAXa,WACrB+e,EAAwBra,EAAKrB,KACjC,EASsC3D,UAE1BC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAAS8U,EAAiB,WAAa,WAEhD9L,GAAAA,GAAUgM,qCAAqC,CAC5CC,cAAerc,GAAE,sBACjBwS,QAAAA,EACAvC,gBAAAA,EACAzK,QAAS1E,EAAKrB,KACd6Q,kBAAmBxP,EAAKyP,gBAIxC,EAEA8D,OAAM,SAACvM,GACH,IAAmBtC,EAAWsC,EAAvBoD,WACAoR,EAAe9W,EAAf8W,YACD1f,EAAO0f,EAAc,EAAIA,EAAc,GAC7C,OACI1f,IACIb,EAAAA,EAAAA,KAACsO,GAAAA,EAAO,CACJC,UAAW,YACX5O,SAASK,EAAAA,EAAAA,KAACoY,GAAa,CAAC3O,QAASA,IAAY1J,UAE7CC,EAAAA,EAAAA,KAAA,QAAMF,UAAWmE,GAAE,SAASlE,SAAEc,KAI9C,EAEA2f,mBAAkB,SAACzU,GACf,OAAOwT,EAAUkB,sBAAsB1U,EAAU7F,EACrD,EAEAua,sBAAqB,SAAC1U,GAClB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBQ,sBAC1BhP,WAAYA,GAGxB,EAEAwa,iBAAgB,SAAC3U,GAEb,OAAOmQ,GADOmD,EAAaqB,iBAAiBxB,IAAInT,GACtBA,EAASI,cACvC,EAEAwU,iBAAgB,SAAC5U,GAGb,OAAOmQ,GAFOmD,EAAasB,iBAAiBzB,IAAInT,GACxBA,EAAjBI,cAEX,EAEAyU,gBAAe,SAAC7U,GACZ,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAauB,gBAAgB1B,IAAInT,GACrBI,EAC9B,EAEA0U,mBAAkB,SAAC9U,GACf,OAAOwT,EAAUuB,sBAAsB/U,EAC3C,EAEA+U,sBAAqB,SAAC/U,GAClB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBC,YAGtC,EAEAoM,iBAAgB,SAAChV,GACb,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAa0B,iBAAiB7B,IAAInT,GACrBI,EAC/B,EAEA6U,iBAAgB,SAACjV,GACb,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAa2B,iBAAiB9B,IAAInT,GACrBI,EAC/B,EAEA8U,gBAAe,SAAClV,GACZ,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAa4B,gBAAgB/B,IAAInT,GACpBI,EAC/B,EAEA+U,oBAAmB,SAACnV,GAChB,OAAOwT,EAAU4B,uBAAuBpV,EAC5C,EAEAoV,uBAAsB,SAACpV,GACnB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBG,aAGtC,EAEAuM,kBAAiB,SAACrV,GACd,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAa+B,kBAAkBlC,IAAInT,GACtBI,EAC/B,EAEAkV,kBAAiB,SAACtV,GACd,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAagC,kBAAkBnC,IAAInT,GACtBI,EAC/B,EAEAmV,iBAAgB,SAACvV,GACb,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAaiC,iBAAiBpC,IAAInT,GACrBI,EAC/B,EAEAoV,wBAAuB,SAACxV,GACpB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBoB,cAGtC,EAEA0L,mBAAkB,SAACzV,GACf,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAamC,mBAAmBtC,IAAInT,GACvBI,EAC/B,EAEAsV,mBAAkB,SAAC1V,GACf,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAaoC,mBAAmBvC,IAAInT,GACvBI,EAC/B,EAEAuV,kBAAiB,SAAC3V,GACd,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAaqC,kBAAkBxC,IAAInT,GACtBI,EAC/B,EAEAwV,gCAA+B,SAAC5V,GAC5B,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBqB,sBAGtC,EAEA6L,2BAA0B,SAAC7V,GACvB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAauC,2BAA2B1C,IAAInT,GAChCI,EAC9B,EAEA0V,2BAA0B,SAAC9V,GACvB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAawC,2BAA2B3C,IAAInT,GAChCI,EAC9B,EAEA2V,0BAAyB,SAAC/V,GACtB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAayC,0BAA0B5C,IAAInT,GAC/BI,EAC9B,EAEA4V,yBAAwB,SAAChW,GACrB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoB2C,cAC1BnR,WAAYgV,GAGxB,EAEA8G,oBAAmB,SAACjW,GAChB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAa2C,oBAAoB9C,IAAInT,GACzBI,EAC9B,EAEA8V,oBAAmB,SAAClW,GAChB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAa4C,oBAAoB/C,IAAInT,GACzBI,EAC9B,EAEA+V,mBAAkB,SAACnW,GACf,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAa6C,mBAAmBhD,IAAInT,GACxBI,EAC9B,EAEAgW,6BAA4B,SAACpW,GACzB,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAa8C,6BAA6BjD,IAAInT,GAC9CI,EAER,EACAiW,8BAA6B,SAACrW,GAC1B,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAa+C,8BAA8BlD,IAAInT,GAC/CI,EAER,EACAkW,kCAAiC,SAACtW,GAC9B,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAagD,kCAAkCnD,IAAInT,GACnDI,EAER,EACAmW,+BAA8B,SAACvW,GAC3B,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAaiD,+BAA+BpD,IAAInT,GAChDI,EAER,EACAoW,+BAA8B,SAACxW,GAC3B,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAakD,+BAA+BrD,IAAInT,GAChDI,EAER,EAEAqW,QAAO,SAACzW,GACJ,GAAIA,EAASI,cACT,OAAO,KAGX,IAAmBpH,EAAQgH,EAApBoD,WAQP,OACInP,EAAAA,EAAAA,KAAA,QAAAD,UACIC,EAAAA,EAAAA,KAACC,GAAAA,GAAM8H,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GATK,CAChB5H,KAAM,iBACND,KAAM,MAQiB,IACfE,MAAM,eACNC,QAPQ,WAAH,OAASif,EAAKmD,YAAY1d,EAAM,EAQrC0Z,GAAE,gBAAAtV,OAAkBpE,EAAKrB,MAAO3D,UAEhCC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAAQ,eAI9B,GAGJ,OAAOkU,CACX,GAAC,CAAA5a,IAAA,cAAAC,MAED,SAAY6E,GACR5E,KAAKC,MAAM4d,gBAAgBjZ,EAC/B,GAAC,CAAA9E,IAAA,sBAAAC,MAED,WAAuB,IAAD+d,EAClBC,EAUI/d,KAAKC,MATL8J,EAAagU,EAAbhU,cACAiU,EAAeD,EAAfC,gBACAlF,EAAkBiF,EAAlBjF,mBACAC,EAAuBgF,EAAvBhF,wBACAkF,EAAQF,EAARE,SACA1F,EAASwF,EAATxF,UACA2F,EAAiBH,EAAjBG,kBACAC,EAAoCJ,EAApCI,qCACAnF,EAAuB+E,EAAvB/E,wBAGEoF,GAAaC,EAAAA,GAAAA,IACftU,EACAgP,EACAD,GAEEwF,EAAYL,IAAa1F,EACzBgG,EAAgBxU,EAAgB,OAAIrF,EAKpC8Z,IAF0B,YAA5BzF,GAAqE,mBAA5BA,IAERoF,EAE/BrhB,EAAQkhB,GAAmB,GAEjC,OACIhjB,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,UAAW,oBAAoBlE,SAAA,EAC3CsjB,IAAcrjB,EAAAA,EAAAA,KAACmW,GAAsB,CAACrW,UAAWmE,GAAE,yBACpDof,IAAcrjB,EAAAA,EAAAA,KAACoc,GAAgB,CAACxB,KAAMiD,IACtCwF,IACGrjB,EAAAA,EAAAA,KAAC6b,IAAgC9T,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACzBkb,GAAU,IACdE,UAAWA,EACXG,UAAWP,EACXphB,MAAOA,EACPub,kBAAmBrY,KAAKqY,kBACxBqC,UAAW1a,KAAK0a,UAChB6D,cAAeA,EACfnK,QAAQ,EACRsK,OAAQ1e,KAAKC,MAAM0e,yBACnBC,IAAKC,EAAAA,GACLC,kBAAoB/U,EAAqB,CAACjN,IAAiB,QAAZghB,EAAIhhB,EAAM,UAAE,IAAAghB,OAAA,EAARA,EAAUhe,MAAzB,QAKxD,GAAC,CAAAA,IAAA,oBAAAC,MAMD,WACI,IAAAgf,EAAwD/e,KAAKC,MAAtD4E,EAAgBka,EAAhBla,iBAAkBma,EAAeD,EAAfC,gBAAiB7S,EAAU4S,EAAV5S,WAE1C,OACI6S,EAAgBngB,OACZ1D,EAAAA,EAAAA,KAAC8jB,GAAAA,EAAK,CACFC,eAAgBra,EAChBnB,SAAUmB,EACVsa,QAAShT,EACTrR,SAASK,EAAAA,EAAAA,KAACsX,GAAM,CAAC7N,QAASoa,IAC1BzjB,MAAOyjB,EAAgBngB,KACvB6f,QAAQ,EACRrjB,KAAM,KAItB,GAAC,CAAAyE,IAAA,SAAAC,MAED,WACI,IAAAqf,EAA+Dpf,KAAKC,MAA7DwE,EAAK2a,EAAL3a,MAAO2V,EAAWgF,EAAXhF,YAAa7B,EAAS6G,EAAT7G,UAAWP,EAAWoH,EAAXpH,YAAaiG,EAAQmB,EAARnB,SAEnD,OACIjjB,EAAAA,EAAAA,MAAA,OAAAE,SAAA,EACIF,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,KAAIlE,SAAA,CACf8c,IAAgBC,GAAAA,IAA0BjY,KAAKqf,4BAChDlkB,EAAAA,EAAAA,KAACmkB,EAAAA,GAAiB,CACdC,QAASvf,KAAKwf,gBACd1kB,SACIE,EAAAA,EAAAA,MAAA,OAAAE,SAAA,CACKuJ,IAAStJ,EAAAA,EAAAA,KAACqK,EAAAA,EAAK,CAACf,MAAOzE,KAAKC,MAAMwf,YAClCrF,GAAepa,KAAK0f,qBACnBnH,GAAa0F,IAAaje,KAAK2f,8BAKhD3f,KAAK4f,sBAGlB,KAACnI,CAAA,CAznBmB,CAASnU,EAAAA,WAA3BmU,GAsDK9T,aAAe,CAClBqU,YAAa,YAqkBrB,IA+CM6H,GAAqB,CACvBnG,iBAAAA,GAAAA,GACAM,oBAAAA,GAAAA,GACAG,mBAAAA,GAAAA,GACA2F,qBAAAA,GAAAA,GACAjb,iBAAAA,GAAAA,GACAkb,UAAAA,GAAAA,GACAzH,qBAAAA,GAAAA,GACAxJ,kBAAAA,GAAAA,GACAkR,iBAAAA,GAAAA,GACAnC,gBAAAA,GAAAA,GACAtD,wBAAAA,GAAAA,GACArC,qCAAAA,GAAAA,GACAE,0BAAAA,GAAAA,GACAP,4BAAAA,GAAAA,IAGJ,UAAenS,EAAAA,EAAAA,KAhEa,WACxB,OAAO,SAACnB,EAAO0b,GACX,IAAMC,GAAmBC,EAAAA,EAAAA,IAAqB5b,GACxC+V,EAAuBtd,EAAwBuH,GAGtC3D,EACX2D,EADA3D,SAAWA,SAITwf,EADgBH,EAAfjI,cAC6BC,GAAAA,GAE9B+F,EAAkBoC,EAClBljB,EAA+BqH,GAC/BjH,EAAoBiH,GAE1B,OAAArB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOtC,GAAQ,IACXmY,yBAAyB/C,EAAAA,EAAAA,IAAuBzR,GAEhD8K,iBAAiBC,EAAAA,GAAAA,IAAmB/K,GAEpClE,YAAY0Q,EAAAA,GAAAA,IAAcxM,GAC1B3D,SAAUA,EAASA,SACnBod,gBAAAA,EACAkC,iBAAAA,EAEAtO,SAASC,EAAAA,GAAAA,IAAWtN,GAEpBoa,0BAA0B0B,EAAAA,EAAAA,IAA+B9b,GACzD+V,qBAAAA,EACAtB,wBAAyBoH,GACnBhjB,EAAAA,EAAAA,IAAqCmH,IACrChH,EAAAA,EAAAA,IAA0BgH,GAChC2U,kBAAkBoH,EAAAA,EAAAA,IAAkC/b,GACpDiW,cAAc+F,EAAAA,EAAAA,IAAwBhc,GAEtC4Z,sCACI5M,EAAAA,GAAAA,IAAmDhN,GAEvDmU,gBAAiBrD,GAAAA,GAEjBgB,yBAAyBJ,EAAAA,EAAAA,IAAmC1R,IAEpE,CACJ,GAmB4Csb,GAA5C,CAAgEpI,G,2FCj1BzD,SAASsI,IACZ,OAAO,SAAC5jB,GACJ,OAAOqkB,EAAAA,EAAAA,IAAaC,EAAAA,GAAQC,WACvB3b,MAAK,SAAClJ,GACHM,EAAS,CACLT,KAAMilB,EAAAA,GAAYC,QAClB/kB,KAAAA,GAER,IAAE,OACK,SAAC4I,GACJtI,EAAS,CACLT,KAAMilB,EAAAA,GAAYE,QAClBpc,MAAAA,GAER,GACR,CACJ,CAEO,SAASqc,EAAgBlc,GAC5B,MAAO,CACHlJ,KAAMqlB,EAAAA,GACNllB,KAAM,CAAC+I,QAAAA,GAEf,CAEO,SAASoc,EAAiBC,GAC7B,MAAO,CACHvlB,KAAMwlB,EAAAA,GACNrlB,KAAMolB,EAEd,C","sources":["webpack://@ytsaurus/ui/./src/ui/components/Message/Message.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/Accounts/AccountsUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/accounts/dashboard.js","webpack://@ytsaurus/ui/./src/ui/utils/accounts/accountsTotal.ts","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/AccountsTotal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/ConfirmMessage.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/DeleteContent.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/ProgressTooltip.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/ProgressStack.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/AccountQuota/AccountQuota.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/accounts/editor-ts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/AccountTransferQuotaMessage.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/NodesContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/ChunksContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/MediumContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/TabletsContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/MasterMemoryContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/Editor.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/AccountAlerts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/AccountStaticConfiguration/AccountStaticConfiguration.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/MasterMemoryTableMode.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/AccountsGeneralTab.js","webpack://@ytsaurus/ui/./src/ui/store/actions/accounts/editor.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport Button from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nconst block = cn('elements-message');\n\nexport default function Message({\n theme = 'default',\n showClose = false,\n dismissCallback,\n content,\n buttons,\n}) {\n return (\n <div className={block({theme})}>\n {showClose && (\n <div className={block('close')}>\n <Button size=\"m\" view=\"flat-secondary\" title=\"Close\" onClick={dismissCallback}>\n <Icon type=\"close\" />\n </Button>\n </div>\n )}\n\n {React.isValidElement(content)\n ? {content}\n : map_(content, (data, index) => (\n <p key={index} className={block('paragraph')}>\n {data}\n </p>\n ))}\n\n {buttons && (\n <div className={block('buttons')}>\n {map_(buttons, (button) => (\n <span className={block('button')} key={button.text}>\n <Button size=\"m\" title={button.text} onClick={button.callback}>\n {button.text}\n </Button>\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nMessage.propTypes = {\n theme: PropTypes.string,\n showClose: PropTypes.bool,\n dismissCallback: (props, propName, componentName) => {\n if (props.showClose && typeof props[propName] !== 'function') {\n return new Error(\n `You have to provide dismissCallback to ${componentName} when showClose is true`,\n );\n }\n },\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.string)]).isRequired,\n buttons: PropTypes.arrayOf(PropTypes.object),\n};\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {fetchAccounts} from '../../../store/actions/accounts/accounts';\nimport {getAccountsEditCounter} from '../../../store/selectors/accounts/accounts-ts';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nexport default function AccountsUpdater() {\n const dispatch = useDispatch();\n\n const editCounter = useSelector(getAccountsEditCounter);\n\n const update = React.useCallback(() => {\n dispatch(fetchAccounts());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, editCounter]);\n\n useUpdater(update);\n\n return null;\n}\n","import map_ from 'lodash/map';\nimport {createSelector} from 'reselect';\nimport {\n getUsableAccounts,\n prepareAccountsFlattenTree,\n} from '../../../store/selectors/accounts/accounts';\nimport {getFavouriteAccounts} from '../../../store/selectors/favourites';\nimport {\n getAccountsVisibilityMode,\n getAccountsVisibilityModeOfDashboard,\n} from '../../../store/selectors/settings';\nimport {filterFlattenTreeByViewContext} from '../../../utils/accounts';\nimport {getActiveAccount} from './accounts-ts';\n\nexport const getUsableAccountsSet = createSelector([getUsableAccounts], (items) => {\n return new Set(items);\n});\n\n/**\n * This selector cannot be moved to 'store/selectors/accounts/accounts'\n * because of cyclic dependencies.\n */\nexport const getFavouriteAccountsSet = createSelector([getFavouriteAccounts], (items) => {\n return new Set(map_(items, 'path'));\n});\n\nexport const getFilteredAccountsOfDashboard = createSelector(\n [\n prepareAccountsFlattenTree,\n getUsableAccountsSet,\n getAccountsVisibilityModeOfDashboard,\n getFavouriteAccountsSet,\n ],\n filterFlattenTreeByViewContext,\n);\n\nexport const getFilteredAccounts = createSelector(\n [\n prepareAccountsFlattenTree,\n getUsableAccountsSet,\n getAccountsVisibilityMode,\n getFavouriteAccountsSet,\n getActiveAccount,\n ],\n filterFlattenTreeByViewContext,\n);\n","import compact_ from 'lodash/compact';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport hammer from '../../common/hammer';\nimport {accountsIoThroughputThresholds} from '../../utils/progress';\nimport {calcProgressProps} from '../../utils/utils';\n\nconst nodesChunksUsageList = ['node_count', 'chunk_count'] as const;\n\nexport interface ClusterTotalsUsage {\n total_resource_limits: {\n chunk_count: number;\n disk_space: number;\n disk_space_per_medium: Record<string, number>;\n master_memory: {\n chunk_host: number;\n per_cell: Record<string, number>;\n total: number;\n };\n node_count: number;\n tablet_count: number;\n tablet_static_memory: number;\n };\n total_resource_usage: {\n chunk_count: number;\n chunk_host_cell_master_memory: number;\n detailed_master_memory: {\n attributes: number;\n chunks: number;\n nodes: number;\n schemas: number;\n tablets: number;\n };\n disk_space: number;\n disk_space_per_medium: Record<string, number>;\n master_memory: {\n chunk_host: number;\n per_cell: Record<string, number>;\n total: number;\n };\n node_count: number;\n tablet_count: number;\n tablet_static_memory: number;\n };\n}\n\ninterface IOStatistics {\n filesystem_read_rate: number;\n filesystem_write_rate: number;\n disk_read_rate: number;\n disk_write_rate: number;\n disk_read_capacity: number;\n disk_write_capacity: number;\n}\n\nexport interface NodesData {\n available_space_per_medium: Record<string, number>;\n io_statistics_per_medium: Record<string, IOStatistics>;\n used_space_per_medium: Record<string, number>;\n}\n\ninterface MediumStat {\n usage: number;\n limit: number;\n}\n\nfunction prepareMediumStats<T extends Record<string, MediumStat>>(\n usedSpace: Record<keyof T, number>,\n availableSpace: Record<keyof T, number>,\n settings: T,\n) {\n return forEach_(settings, (stats, type) => {\n const used = usedSpace[type] || 0;\n const available = availableSpace[type] || 0;\n stats.usage = used;\n stats.limit = available;\n });\n}\n\nfunction initMediumStats<T extends readonly string[]>(list: T) {\n return reduce_(\n list,\n (list, type: T[number]) => {\n list[type] = {\n usage: 0,\n limit: 0,\n };\n\n return list;\n },\n {} as Record<T[number], MediumStat>,\n );\n}\n\nfunction getClusterTotal(\n clusterTotalsUsage: ClusterTotalsUsage,\n _nodesData: NodesData,\n mediumList: string[],\n) {\n // TODO use hammer.aggregation\n const perMedium = initMediumStats(mediumList);\n let usedSpacePerMedia;\n let availableSpacePerMedia;\n\n if (clusterTotalsUsage) {\n usedSpacePerMedia = clusterTotalsUsage.total_resource_usage.disk_space_per_medium;\n availableSpacePerMedia = clusterTotalsUsage.total_resource_limits.disk_space_per_medium;\n prepareMediumStats(usedSpacePerMedia, availableSpacePerMedia, perMedium);\n }\n\n return {\n perMedium: perMedium,\n };\n}\n\nfunction getHardwareLimit(nodesData: NodesData, mediumList: string[]) {\n // TODO use hammer.aggregation\n const perMedium = initMediumStats(mediumList);\n\n if (nodesData) {\n const usedSpacePerMedia = nodesData.used_space_per_medium || {};\n const availableSpacePerMedia = nodesData.available_space_per_medium || {};\n\n forEach_(mediumList, (mediumType) => {\n const used = usedSpacePerMedia[mediumType] || 0;\n const available = availableSpacePerMedia[mediumType] || 0;\n\n perMedium[mediumType].usage = used;\n perMedium[mediumType].limit = available + used;\n });\n }\n\n return {\n perMedium: perMedium,\n };\n}\n\nfunction getReadThroughput(nodesData: NodesData, mediumList: string[]) {\n // TODO use hammer.aggregation\n const perMedium = initMediumStats(mediumList);\n\n if (nodesData) {\n const ioStatisticsPerMedia = nodesData.io_statistics_per_medium || {};\n\n forEach_(mediumList, (mediumType) => {\n const rate = ioStatisticsPerMedia[mediumType]?.disk_read_rate || 0;\n const capacity = ioStatisticsPerMedia[mediumType]?.disk_read_capacity || 0;\n\n perMedium[mediumType].usage = rate;\n perMedium[mediumType].limit = capacity;\n });\n }\n\n return {\n perMedium: perMedium,\n };\n}\n\nfunction getWriteThroughput(nodesData: NodesData, mediumList: string[]) {\n // TODO use hammer.aggregation\n const perMedium = initMediumStats(mediumList);\n\n if (nodesData) {\n const ioStatisticsPerMedia = nodesData.io_statistics_per_medium || {};\n\n forEach_(mediumList, (mediumType) => {\n const rate = ioStatisticsPerMedia[mediumType]?.disk_write_rate || 0;\n const capacity = ioStatisticsPerMedia[mediumType]?.disk_write_capacity || 0;\n\n perMedium[mediumType].usage = rate;\n perMedium[mediumType].limit = capacity;\n });\n }\n\n return {\n perMedium: perMedium,\n };\n}\n\nfunction getClusterExtendedTotal(clusterTotalsUsage: ClusterTotalsUsage) {\n // TODO use hammer.aggregation\n const settings = initMediumStats(nodesChunksUsageList);\n\n if (clusterTotalsUsage) {\n const usedSpace = clusterTotalsUsage.total_resource_usage;\n const availableSpace = clusterTotalsUsage.total_resource_limits;\n\n prepareMediumStats(usedSpace, availableSpace, settings);\n }\n\n return {\n settings: settings,\n };\n}\n\nexport function getNodesChunksTotals(clusterTotalsUsage: ClusterTotalsUsage) {\n const list = nodesChunksUsageList;\n const clusterExtendedTotal = getClusterExtendedTotal(clusterTotalsUsage).settings;\n\n const items = map_(list, (name) => {\n if (clusterExtendedTotal[name]) {\n const clusterUsage = clusterExtendedTotal[name].usage;\n const clusterLimit = clusterExtendedTotal[name].limit;\n\n return {\n name: name,\n clusterUsage: {\n text:\n hammer.format['Number'](clusterUsage) +\n ' / ' +\n hammer.format['Number'](clusterLimit),\n progress: (clusterUsage / clusterLimit) * 100,\n },\n };\n }\n\n return null;\n });\n return compact_(items);\n}\n\nexport function getDiskSpace(\n _accounts: unknown,\n clusterTotalsUsage: ClusterTotalsUsage,\n nodesData: NodesData,\n mediumList: string[],\n) {\n const clusterTotalPerMedium = getClusterTotal(\n clusterTotalsUsage,\n nodesData,\n mediumList,\n ).perMedium;\n\n const hardwareLimitPerMedium = getHardwareLimit(nodesData, mediumList).perMedium;\n const readThroughput = getReadThroughput(nodesData, mediumList).perMedium;\n const writeThroughput = getWriteThroughput(nodesData, mediumList).perMedium;\n\n if (clusterTotalPerMedium) {\n return map_(mediumList, (mediumType) => {\n const clusterUsage = clusterTotalPerMedium[mediumType].usage;\n const clusterLimit = clusterTotalPerMedium[mediumType].limit;\n const hardwareLimit = hardwareLimitPerMedium[mediumType].limit;\n const overcommitted = hardwareLimit < clusterLimit;\n\n const diskReadRate = readThroughput[mediumType].usage;\n const diskReadCapacity = readThroughput[mediumType].limit;\n const diskWriteRate = writeThroughput[mediumType].usage;\n const diskWriteCapacity = writeThroughput[mediumType].limit;\n\n return {\n show: hardwareLimit !== 0,\n mediumType: mediumType,\n clusterUsage: {\n text:\n hammer.format['Bytes'](clusterUsage) +\n ' / ' +\n hammer.format['Bytes'](clusterLimit),\n progress: (clusterUsage / clusterLimit) * 100,\n },\n readThroughput: {\n progress: calcProgressProps(\n diskReadRate,\n diskReadCapacity,\n 'Bytes',\n accountsIoThroughputThresholds,\n ),\n show: diskReadCapacity > 0,\n },\n writeThroughput: {\n progress: calcProgressProps(\n diskWriteRate,\n diskWriteCapacity,\n 'Bytes',\n accountsIoThroughputThresholds,\n ),\n show: diskWriteCapacity > 0,\n },\n hardwareLimit: hardwareLimit,\n overcommitted,\n };\n });\n }\n\n return [];\n}\n","import React, {Component, Fragment} from 'react';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../common/hammer';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport WarningIcon from '../../../../components/WarningIcon/WarningIcon';\nimport {\n ClusterTotalsUsage,\n NodesData,\n getDiskSpace,\n getNodesChunksTotals,\n} from '../../../../utils/accounts/accountsTotal';\n\nconst b = block('accounts');\n\ninterface Props {\n accounts: unknown[];\n clusterTotalsUsage: ClusterTotalsUsage;\n nodesData: NodesData;\n mediumList: string[];\n}\n\nexport default class AccountsTotal extends Component<Props> {\n static propTypes = {\n // from props\n accounts: PropTypes.array,\n clusterTotalsUsage: PropTypes.object,\n nodesData: PropTypes.object,\n mediumList: PropTypes.array,\n };\n\n renderNodesChunksTotals() {\n const {clusterTotalsUsage} = this.props;\n\n return (\n <table>\n <tbody>\n {map_(getNodesChunksTotals(clusterTotalsUsage), (item) => (\n <tr key={item.name}>\n <td className={b('disk-space-medium-type')}>\n {hammer.format['ReadableField'](item.name)}\n </td>\n <td className={b('disk-space-cluster-usage')}>\n <Progress\n value={item.clusterUsage.progress}\n text={item.clusterUsage.text}\n theme={'success'}\n />\n </td>\n <td className={b('disk-space-hardware-limit')}>–</td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n renderNewTotals() {\n const {accounts, clusterTotalsUsage, nodesData, mediumList} = this.props;\n const diskSpace = getDiskSpace(accounts, clusterTotalsUsage, nodesData, mediumList);\n\n return (\n <Fragment>\n <table>\n <thead>\n <tr>\n <th className={b('disk-space-medium-type')}>Medium</th>\n <th className={b('disk-space-cluster-usage')} title=\"used/limit\">\n Cluster Disk Space\n </th>\n <th className={b('disk-space-hardware-limit')}>Hardware Limit</th>\n <th className={b('disk-space-label')} />\n <th className={b('disk-space-read-throughput')} title=\"used/limit\">\n Read Throughput per sec\n </th>\n <th className={b('disk-space-write-throughput')} title=\"used/limit\">\n Write Throughput per sec\n </th>\n </tr>\n </thead>\n <tbody>\n {diskSpace.map(\n (item) =>\n (typeof item.show === 'undefined' || item.show) && (\n <tr key={item.mediumType}>\n <td className={b('disk-space-medium-type')}>\n {hammer.format['ReadableField'](item.mediumType)}\n </td>\n <td className={b('disk-space-cluster-usage')}>\n <Progress\n value={item.clusterUsage.progress}\n text={item.clusterUsage.text}\n theme={'success'}\n />\n </td>\n <td className={b('disk-space-hardware-limit')}>\n {hammer.format['Bytes'](item.hardwareLimit)}\n </td>\n <td className={b('disk-space-label')}>\n {item.overcommitted && (\n <WarningIcon hoverContent=\"Overcommitted\" />\n )}\n </td>\n <td className={b('disk-space-read-throughput')}>\n {item.readThroughput.show ? (\n <Progress {...item.readThroughput.progress} />\n ) : (\n hammer.format.NO_VALUE\n )}\n </td>\n <td className={b('disk-space-write-throughput')}>\n {item.writeThroughput.show ? (\n <Progress {...item.writeThroughput.progress} />\n ) : (\n hammer.format.NO_VALUE\n )}\n </td>\n </tr>\n ),\n )}\n </tbody>\n </table>\n <br />\n {this.renderNodesChunksTotals()}\n </Fragment>\n );\n }\n\n render() {\n return (\n <div className={b('disk-space')}>\n <div className={b('disk-space-table')}>{this.renderNewTotals()}</div>\n </div>\n );\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport Message from '../../../../../components/Message/Message';\n\nexport default class ConfirmMessage extends Component {\n static propTypes = {\n text: PropTypes.object.isRequired,\n confirmQuestion: PropTypes.string,\n onApply: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n confirmQuestion: 'Apply changes?',\n };\n\n render() {\n const {text, confirmQuestion, onApply, onCancel} = this.props;\n\n return (\n <Message\n theme=\"info\"\n content={[text, confirmQuestion]}\n buttons={[\n {\n text: 'Yes',\n callback: onApply,\n },\n {\n text: 'Cancel',\n callback: onCancel,\n },\n ]}\n />\n );\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport Error from '../../../../../../components/Error/Error';\nimport {Button, Toaster} from '@gravity-ui/uikit';\nimport ConfirmMessage from './../ConfirmMessage';\n\nimport {deleteAccount} from '../../../../../../utils/accounts/editor';\nimport {closeEditorModal} from '../../../../../../store/actions/accounts/accounts';\n\nconst toaster = new Toaster();\n\nclass DeleteContent extends Component {\n static propTypes = {\n //from parent\n account: PropTypes.object.isRequired,\n //from connect\n deleteModalVisible: PropTypes.bool.isRequired,\n closeEditorModal: PropTypes.func.isRequired,\n };\n\n state = {\n showConfirmMessage: false,\n error: undefined,\n };\n\n handleDelete = () => {\n const {account, closeEditorModal} = this.props;\n\n deleteAccount(account.name)\n .then(() => {\n this.setState({\n activeValue: '',\n });\n closeEditorModal();\n toaster.add({\n name: 'delete account',\n timeout: 10000,\n theme: 'success',\n title: 'Successfully deleted ' + account.name,\n });\n })\n .catch((error) => {\n this.setState({\n error,\n });\n });\n\n this.setState({\n error: undefined,\n });\n };\n\n handleCancel = () => this.setState({showConfirmMessage: false});\n handleButtonClick = () => this.setState({showConfirmMessage: true, showErrorMessage: false});\n\n render() {\n const {account} = this.props;\n const {showConfirmMessage, error} = this.state;\n\n return (\n <div className=\"elements-section\">\n {error && (\n <Error message={'Failed to delete account: ' + account.name} error={error} />\n )}\n {showConfirmMessage && (\n <ConfirmMessage\n text={\n <div className=\"elements-message__paragraph\">\n Delete account {account.name}\n </div>\n }\n onApply={this.handleDelete}\n onCancel={this.handleCancel}\n />\n )}\n <Button\n size=\"m\"\n view=\"outlined-danger\"\n title={'Delete'}\n onClick={this.handleButtonClick}\n >\n Delete\n </Button>\n </div>\n );\n }\n}\n\nexport default connect(null, {closeEditorModal})(DeleteContent);\n","import React from 'react';\n\nimport isNumber_ from 'lodash/isNumber';\nimport reduce_ from 'lodash/reduce';\n\nimport cn from 'bem-cn-lite';\n\nimport Icon from '../../../../components/Icon/Icon';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport './ProgressTooltip.scss';\n\nconst block = cn('yt-progress-tooltip');\n\ninterface Props {\n info: Array<ProgressInfo>;\n limit: number;\n formatNumber?: (v: number) => string;\n}\n\ninterface ProgressInfo<T = number> {\n name: string;\n committed: T;\n limit: T;\n color?: string;\n}\n\nexport function ProgressTooltip({info, limit, formatNumber}: Props) {\n return (\n <ErrorBoundary>\n <div className={block()}>\n <ProgressTooltipRow<string>\n mixin={block('header')}\n name=\"Account name\"\n committed=\"Usage\"\n limit=\"Limit\"\n />\n <ProgressTooltipTotalRow mixin={block('total')} {...{info, limit, formatNumber}} />\n {info.map((i, index) => {\n return <ProgressTooltipRow key={index} {...i} formatNumber={formatNumber} />;\n })}\n </div>\n </ErrorBoundary>\n );\n}\n\ninterface ProgressTooltipRowProps<T extends number | string>\n extends ProgressInfo<T>,\n Pick<Props, 'formatNumber'> {\n mixin?: string;\n}\n\nfunction ProgressTooltipRow<T extends number | string>({\n name,\n committed,\n limit,\n color,\n mixin,\n formatNumber,\n}: ProgressTooltipRowProps<T>) {\n const icon =\n color !== undefined ? (\n <span style={{color}}>\n <Icon awesome=\"circle\" face=\"solid\" />\n </span>\n ) : null;\n const committedValue =\n formatNumber && isNumber_(committed) ? formatNumber(committed) : committed;\n const limitValue = formatNumber && isNumber_(limit) ? formatNumber(limit) : limit;\n\n return (\n <React.Fragment>\n <span className={block('icon', mixin)}>{icon}</span>\n <span className={block('name', mixin)}>{name}</span>\n <div className={block('committed', mixin)}>{committedValue}</div>\n <div className={block('limit', mixin)}>{limitValue}</div>\n </React.Fragment>\n );\n}\n\ninterface ProgressTooltipTotalRowProps extends Props {\n mixin?: string;\n}\n\nfunction ProgressTooltipTotalRow({info, limit, mixin, formatNumber}: ProgressTooltipTotalRowProps) {\n const committed = reduce_(info, (acc, item) => acc + item.committed, 0);\n return <ProgressTooltipRow name=\"Total\" {...{formatNumber, mixin, committed, limit}} />;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport values_ from 'lodash/values';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../../../common/hammer';\nimport Account from '../../../../pages/accounts/selector';\nimport {isNull} from '../../../../utils';\n\nimport {STACKED_PROGRESS_BAR_COLORS} from '../../../../constants/colors';\nimport {getAccountName} from '../../../../store/selectors/accounts/accounts';\nimport {ProgressTooltip} from './ProgressTooltip';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport {\n ACCOUNT_RESOURCE_TYPES_DESCRIPTION,\n AccountResourceName,\n} from '../../../../constants/accounts/accounts';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nconst colors = STACKED_PROGRESS_BAR_COLORS;\n\nfunction prepareProgressStack(treeItem, useChildren, getTreeItemInfoFn) {\n if (!treeItem) {\n return {};\n }\n\n const recursiveInfo = getTreeItemInfoFn(treeItem, true);\n if (isEmpty_(recursiveInfo)) {\n return {};\n }\n const {\n limit = 0,\n progressText,\n committed: recursiveCommitted = 0,\n uncommitted: recursiveUncommitted = 0,\n } = recursiveInfo;\n\n const children = treeItem.children;\n const items = useChildren && children.length > 0 ? [treeItem, ...children] : [treeItem];\n\n const allLimit = Math.max(recursiveCommitted + recursiveUncommitted, limit);\n\n let colorIndex = 0;\n const progressStack = [];\n const tooltipInfo = [];\n\n forEach_(items, (item, index) => {\n if (item.isAggregation) {\n return;\n }\n\n const recursive = index !== 0 || !useChildren;\n const {committed, uncommitted, limit, progress, theme} = getTreeItemInfoFn(item, recursive);\n const [committedEl, uncommittedEl] = Account.prepareProgressStack(\n committed,\n uncommitted,\n allLimit,\n theme,\n );\n\n const tooltipItem = {\n name: getAccountName(item),\n committed,\n limit,\n };\n if (progress > 0) {\n if (useChildren && children.length > 0) {\n tooltipItem.color = committedEl.color = colors[(4 + colorIndex++) % colors.length];\n }\n progressStack.push(committedEl, uncommittedEl);\n tooltipInfo.push(tooltipItem);\n } else if (index === 0) {\n // children should be rendered with different color\n ++colorIndex;\n }\n });\n return {progressText, progressStack, tooltipInfo: tooltipInfo, limit};\n}\n\nfunction ProgressStackImpl({\n treeItem,\n infoGetter,\n useChildren,\n className,\n formatNumber,\n popupClassName,\n}) {\n if (!treeItem || treeItem.isAggregation) {\n return hammer.format.NO_VALUE;\n }\n\n try {\n const {value, progressText, progressStack, tooltipInfo, limit} = prepareProgressStack(\n treeItem,\n useChildren,\n infoGetter,\n );\n if (isNull(value) && isNull(progressStack)) {\n return hammer.format.NO_VALUE;\n }\n const progressValue =\n !progressStack || !progressStack.length\n ? value\n : progressStack.reduce((acc, {value}) => (isNaN(value) ? acc : acc + value), 0);\n const progress = (\n <Progress value={progressValue} stack={progressStack} text={progressText} />\n );\n\n if (!useChildren) {\n return progress;\n }\n\n return (\n <Tooltip\n className={className}\n content={\n <ProgressTooltip info={tooltipInfo} limit={limit} formatNumber={formatNumber} />\n }\n placement={['right', 'left', 'top', 'bottom']}\n tooltipClassName={popupClassName}\n >\n {progress}\n </Tooltip>\n );\n } catch (err) {\n console.error(err);\n return hammer.format.NO_VALUE;\n }\n}\n\nconst ProgressStackTypeProp = PropTypes.oneOf(values_(AccountResourceName));\n\nProgressStackByTreeItem.propTypes = {\n className: PropTypes.string,\n popupClassName: PropTypes.string,\n activeAccount: PropTypes.string,\n mediumType: PropTypes.string,\n\n type: ProgressStackTypeProp.isRequired,\n treeItem: PropTypes.object.isRequired,\n};\n\nexport function ProgressStackByTreeItem({\n treeItem,\n activeAccount,\n type,\n mediumType,\n className,\n popupClassName,\n}) {\n const accountName = getAccountName(treeItem);\n const isActiveAccount = activeAccount === accountName;\n const {format = 'Number', getInfo} = ACCOUNT_RESOURCE_TYPES_DESCRIPTION[type];\n const infoGetter = (item, recursive) => {\n const {attributes: account} = item;\n return getInfo(account, recursive, mediumType);\n };\n const formatNumber = hammer.format[format];\n return (\n <ErrorBoundary>\n <ProgressStackImpl\n {...{\n treeItem,\n infoGetter,\n useChildren: isActiveAccount,\n formatNumber,\n className,\n popupClassName,\n }}\n />\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {ClickableText} from '../../../components/ClickableText/ClickableText';\nimport Icon from '../../../components/Icon/Icon';\nimport QuotaEditorWithHide from '../../../components/QuotaEditor/QuotaEditorWithHide';\nimport {SelectSingle} from '../../../components/Select/Select';\n\nimport ypath from '../../../common/thor/ypath';\n\nimport {getActiveAccount} from '../../../store/selectors/accounts/accounts';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {\n ALLOW_CHILDREN_LIMIT_OVERCOMMIT,\n RECURSIVE_RESOURCES_USAGE_PREFIX,\n RESOURCES_LIMITS_PREFIX,\n RESOURCES_USAGE_PREFIX,\n TOTAL_CHILDREN_RESOURCE_LIMIT,\n} from '../../../constants/accounts';\nimport {AccountQuotaParams, setAccountQuota} from '../../../store/actions/accounts/editor-ts';\nimport {\n ACCOUNT_RESOURCE_TYPES_DESCRIPTION,\n AccountResourceNameType,\n ROOT_ACCOUNT_NAME,\n} from '../../../constants/accounts/accounts';\nimport {ProgressStackByTreeItem} from '../tabs/general/ProgressStack';\nimport {\n AccountsTree,\n getAccountsTree,\n getEditableAccountQuotaSources,\n} from '../../../store/selectors/accounts/accounts-ts';\n\nimport './AccountQuota.scss';\n\nconst block = cn('account-quota');\n\ninterface Props {\n title: string;\n currentAccount: string;\n hardLimit?: number;\n\n type: AccountResourceNameType;\n mediumType?: string;\n}\n\ninterface ReduxProps {\n activeAccount?: string;\n accountsTree: Record<string, AccountsTree>;\n setAccountQuota: (params: AccountQuotaParams) => void;\n sources: Array<string>;\n}\n\ninterface State {\n showEditor?: boolean;\n}\n\nclass AccountQuotaEditor extends React.Component<Props & ReduxProps, State> {\n state: State = {};\n\n render() {\n const {title, type, mediumType, currentAccount, activeAccount, accountsTree} = this.props;\n const {format} = ACCOUNT_RESOURCE_TYPES_DESCRIPTION[type];\n const {showEditor} = this.state;\n const {limit} = this.getInfoByName(currentAccount);\n return (\n <div className={block()}>\n <div className={block('value')}>\n <div className={block('name')}>{title}</div>\n <div className={block('progress')}>\n <ProgressStackByTreeItem\n treeItem={accountsTree[currentAccount]}\n activeAccount={activeAccount}\n type={type}\n mediumType={mediumType}\n className={block('progress-tooltip')}\n popupClassName={block('progress-tooltip-popup')}\n />\n </div>\n <ClickableText\n color=\"secondary\"\n className={block('edit')}\n onClick={this.toggleShowEditor}\n >\n <Icon awesome={'pencil'} />\n </ClickableText>\n </div>\n {showEditor && (\n <QuotaEditorWithHide\n format={format}\n limit={limit}\n onHide={this.toggleShowEditor}\n onSave={this.onLimitChange}\n getInfoByName={this.getInfoByName}\n currentAccount={currentAccount}\n parentOfCurrentAccount={this.getParentAccount(currentAccount)}\n renderSourceSuggest={this.renderSourcesSuggest}\n min={this.calcMinLimit()}\n />\n )}\n </div>\n );\n }\n\n renderSourcesSuggest = ({\n onChange,\n value,\n }: {\n value: string;\n onChange: (value?: string) => void;\n }) => {\n const {sources} = this.props;\n return (\n <SelectSingle\n value={value}\n onChange={onChange}\n items={map_(sources, (value) => {\n return {\n value,\n text: value,\n };\n })}\n placeholder={'Select account...'}\n width=\"max\"\n />\n );\n };\n\n validateAccount = (account?: string) => {\n const {currentAccount} = this.props;\n if (account && account === currentAccount) {\n return 'The account itself cannot be used';\n }\n return undefined;\n };\n\n getParentAccount(account: string) {\n const {attributes: accountData} = this.props.accountsTree[account];\n return accountData.parent;\n }\n\n getResourcePath() {\n const {type, mediumType} = this.props;\n return !mediumType ? type : `${type}/${mediumType}`;\n }\n\n getInfoByName = (account = '') => {\n if (!account || account === ROOT_ACCOUNT_NAME) {\n return {limit: Infinity, total: Infinity};\n }\n\n const {attributes: accountData} = this.props.accountsTree[account] || {};\n if (!accountData) {\n return {limit: 0, total: 0};\n }\n\n const resourcePath = this.getResourcePath();\n return {\n limit: ypath.getValue(accountData, RESOURCES_LIMITS_PREFIX + resourcePath),\n usage: ypath.getValue(accountData, RESOURCES_USAGE_PREFIX + resourcePath),\n total: ypath.getValue(accountData, RECURSIVE_RESOURCES_USAGE_PREFIX + resourcePath),\n totalChildrenLimit: ypath.getValue(\n accountData,\n TOTAL_CHILDREN_RESOURCE_LIMIT + resourcePath,\n ),\n allowChildrenOverCommit: ypath.getValue(accountData, ALLOW_CHILDREN_LIMIT_OVERCOMMIT),\n };\n };\n\n getAccountData(account = '') {\n return this.props.accountsTree[account]?.attributes;\n }\n\n toggleShowEditor = () => {\n this.setState({showEditor: !this.state.showEditor});\n };\n\n onLimitChange = (newLimit: number, limitDiff: number, distributeAccount?: string) => {\n const {setAccountQuota, currentAccount} = this.props;\n setAccountQuota({\n limit: newLimit,\n limitDiff,\n account: currentAccount,\n distributeAccount,\n resourcePath: this.getResourcePath(),\n });\n };\n\n private calcMinLimit() {\n const {currentAccount} = this.props;\n const {\n usage = 0,\n total = 0,\n totalChildrenLimit = 0,\n allowChildrenOverCommit,\n } = this.getInfoByName(currentAccount);\n return allowChildrenOverCommit ? total : usage + totalChildrenLimit;\n }\n}\n\nfunction AccountQuota(props: Props) {\n const dispatch = useDispatch();\n const activeAccount = useSelector(getActiveAccount);\n const accountsTree = useSelector(getAccountsTree);\n\n const handleSetQuota = React.useCallback(\n (params: AccountQuotaParams) => {\n dispatch(setAccountQuota(params));\n },\n [dispatch],\n );\n\n const sources = useSelector(getEditableAccountQuotaSources);\n\n return (\n <AccountQuotaEditor\n {...props}\n activeAccount={activeAccount}\n accountsTree={accountsTree}\n setAccountQuota={handleSetQuota}\n sources={sources}\n />\n );\n}\n\nexport default React.memo(AccountQuota);\n","import update_ from 'lodash/update';\n\nimport {RootState} from '../../../store/reducers';\nimport {setAccountLimit} from '../../../utils/accounts/editor';\nimport {ThunkAction} from 'redux-thunk';\nimport {FIX_MY_TYPE} from '../../../types';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {RESOURCES_LIMITS_PREFIX} from '../../../constants/accounts';\nimport {accountsIncreaseEditCounter, loadEditedAccount} from './accounts';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\n\nexport interface AccountQuotaParams {\n limit: number;\n limitDiff: number;\n account: string;\n resourcePath: string;\n distributeAccount?: string;\n}\n\ntype EditorAction = ThunkAction<any, RootState, any, FIX_MY_TYPE>;\n\nfunction setAccountQuotaImpl(params: AccountQuotaParams): Promise<void> {\n const {limit, limitDiff, account, resourcePath, distributeAccount} = params;\n const dotPath = resourcePath.replace(/\\//g, '.');\n if (!limitDiff) {\n return Promise.resolve();\n }\n if (!distributeAccount) {\n return setAccountLimit(limit, account, RESOURCES_LIMITS_PREFIX + resourcePath);\n } else if (limitDiff > 0) {\n return yt.v4.transferAccountResources({\n parameters: {\n source_account: distributeAccount,\n destination_account: account,\n resource_delta: update_({}, dotPath, () => limitDiff),\n },\n });\n } else {\n return yt.v4.transferAccountResources({\n parameters: {\n source_account: account,\n destination_account: distributeAccount,\n resource_delta: update_({}, dotPath, () => -limitDiff),\n },\n });\n }\n}\n\nexport function setAccountQuota(params: AccountQuotaParams): EditorAction {\n return (dispatch) => {\n const toasterName = params.account + '_' + params.resourcePath;\n return wrapApiPromiseByToaster(setAccountQuotaImpl(params), {\n toasterName,\n successContent: 'The quota is updated',\n }).then(() => {\n dispatch(loadEditedAccount(params.account));\n dispatch(accountsIncreaseEditCounter());\n });\n };\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {\n getEditableAccount,\n isEditableAccountOfTopLevel,\n} from '../../../../../store/selectors/accounts/accounts-ts';\nimport UIFactory from '../../../../../UIFactory';\nimport {getClusterUiConfig} from '../../../../../store/selectors/global';\n\nfunction AccountTransferQuotaMessage() {\n const isTopLevel = useSelector(isEditableAccountOfTopLevel);\n const account = useSelector(getEditableAccount);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return (\n <>\n {UIFactory.renderTransferQuotaNoticeForAccount({\n isTopLevel,\n accountAttributes: account.$attributes,\n clusterUiConfig,\n })}\n </>\n );\n}\n\nexport default React.memo(AccountTransferQuotaMessage);\n","import React, {Component} from 'react';\n\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\ninterface Props {\n account: {\n name: string;\n };\n}\n\nexport default class NodesContent extends Component<Props> {\n render() {\n const {account} = this.props;\n\n return (\n <div className=\"elements-section\">\n <AccountTransferQuotaMessage />\n <AccountQuota\n title={'Nodes'}\n currentAccount={account.name}\n type={AccountResourceName.NODE_COUNT}\n />\n </div>\n );\n }\n}\n","import React, {Component} from 'react';\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\ninterface Props {\n account: {\n name: string;\n };\n}\n\nexport default class ChunksContent extends Component<Props> {\n render() {\n const {account} = this.props;\n\n return (\n <div className=\"elements-section\">\n <AccountTransferQuotaMessage />\n <AccountQuota\n title={'Chunks'}\n currentAccount={account.name}\n type={AccountResourceName.CHUNK_COUNT}\n />\n </div>\n );\n }\n}\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport partition_ from 'lodash/partition';\n\nimport {ClickableText} from '../../../../../../components/ClickableText/ClickableText';\nimport {getMediumList} from '../../../../../../store/selectors/thor';\n\nimport hammer from '../../../../../../common/hammer';\nimport {RootState} from '../../../../../../store/reducers';\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\nconst block = cn('accounts-medium-content-tab');\n\ninterface Props {\n account: {\n name: string;\n perMedium: {\n [type: string]: {\n totalDiskSpace: number;\n diskSpaceLimit: number;\n committedDiskSpace: number;\n uncommittedDiskSpace: number;\n diskSpaceProgress: number;\n diskSpaceProgressText: string;\n diskSpaceProgressTheme: string;\n };\n };\n };\n mediumList: Array<string>;\n}\n\nclass MediumContent extends Component<Props> {\n state = {\n showAllMediums: false,\n };\n\n toggleShowAll = () => {\n this.setState({showAllMediums: !this.state.showAllMediums});\n };\n\n renderMediums(account: Props['account'], mediums: Array<string>) {\n return mediums.map((mediumType) => (\n <AccountQuota\n key={mediumType}\n title={hammer.format['ReadableField'](mediumType) + ' medium'}\n currentAccount={account.name}\n type={AccountResourceName.DISK_SPACE_PER_MEDIUM}\n mediumType={mediumType}\n />\n ));\n }\n\n render() {\n const {account, mediumList} = this.props;\n const mediumTypesWithoutCache = mediumList.filter((item) => item !== 'cache');\n const [defined, rest] = partition_(\n mediumTypesWithoutCache,\n (mediumType) => account.perMedium[mediumType],\n );\n\n const {showAllMediums} = this.state;\n let showAllText = '';\n if (rest.length > 0) {\n showAllText = showAllMediums ? 'Show defined only' : 'Show all';\n }\n return (\n <div className={block()}>\n <AccountTransferQuotaMessage />\n {this.renderMediums(account, defined)}\n {showAllText && (\n <div className={block('show-all', 'elements-section')}>\n <ClickableText onClick={this.toggleShowAll}>{showAllText}</ClickableText>\n </div>\n )}\n {showAllMediums && this.renderMediums(account, rest)}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => ({\n mediumList: getMediumList(state),\n});\n\nexport default connect(mapStateToProps)(MediumContent);\n","import React, {Component} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport {RootState} from '../../../../../../store/reducers';\nimport {\n getCluster,\n getClusterUiConfigBundleAccountingHelpLink,\n getClusterUiConfigEnablePerAccountTabletAccounting,\n getClusterUiConfigEnablePerBundleTabletAccounting,\n} from '../../../../../../store/selectors/global';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport Link from '../../../../../../components/Link/Link';\nimport {Page} from '../../../../../../constants';\n\nimport './TabletsContent.scss';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\nconst block = cn('accounts-editor-tablets');\n\ninterface Props {\n account: {\n name: string;\n };\n}\n\nclass TabletsContent extends Component<Props & ConnectedProps<typeof connector>> {\n renderTabletsQuota() {\n const {account} = this.props;\n\n return (\n <AccountQuota\n title={'Tablets'}\n type={AccountResourceName.TABLET_COUNT}\n currentAccount={account.name}\n />\n );\n }\n\n renderTabletsMemory() {\n const {account} = this.props;\n\n return (\n <AccountQuota\n title={'Tablet static memory'}\n type={AccountResourceName.TABLET_STATIC_MEMORY}\n currentAccount={account.name}\n />\n );\n }\n\n render() {\n const {allowTabletAccounting} = this.props;\n return (\n <div className=\"elements-section\">\n <AccountTransferQuotaMessage />\n {allowTabletAccounting && this.renderTabletsQuota()}\n {allowTabletAccounting && this.renderTabletsMemory()}\n <TabletAccountingNotice />\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n return {\n allowTabletAccounting: getClusterUiConfigEnablePerAccountTabletAccounting(state),\n };\n};\n\nconst connector = connect(mapStateToProps);\n\nexport default connector(TabletsContent);\n\nexport function TabletAccountingNotice({className}: {className?: string}) {\n const allowPerTablet = useSelector(getClusterUiConfigEnablePerBundleTabletAccounting);\n\n const helpLink = useSelector(getClusterUiConfigBundleAccountingHelpLink);\n const cluster = useSelector(getCluster);\n\n return !allowPerTablet ? null : (\n <div className={className}>\n <div className={block('warning')}>\n Tablet resource accounting (tablet count and tablet static memory) has been moved\n from accounts to{' '}\n <Link url={`/${cluster}/${Page.TABLET_CELL_BUNDLES}`} routed>\n tablet cell bundles\n </Link>\n .\n </div>\n {helpLink && (\n <div>\n <Link url={helpLink}>More details</Link>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport map_ from 'lodash/map';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport {getAccountMasterMemoryMedia} from '../../../../../../store/selectors/accounts/accounts-ts';\nimport {useSelector} from 'react-redux';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\ninterface Props {\n account: {\n name: string;\n };\n}\n\nexport default function MasterMemoryContent(props: Props) {\n const media = useSelector(getAccountMasterMemoryMedia);\n const {account} = props;\n\n return (\n <div className=\"elements-section\">\n <AccountTransferQuotaMessage />\n {map_(media, (medium) => {\n return (\n <AccountQuota\n key={medium}\n title={format.Readable(medium)}\n type={AccountResourceName.MASTER_MEMORY}\n currentAccount={account.name}\n mediumType={medium}\n />\n );\n })}\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\nimport Tabs from '../../../../../components/Tabs/Tabs';\nimport {contentTabs} from '../../../../../utils/accounts/editor';\nimport GeneralContent from './content/GeneralContent';\nimport DeleteContent from './content/DeleteContent';\nimport NodesContent from './content/NodesContent';\nimport ChunksContent from './content/ChunksContent';\nimport MediumContent from './content/MediumContent';\nimport TabletsContent from './content/TabletsContent';\nimport MasterMemoryContent from './content/MasterMemoryContent';\nimport {EDITOR_TABS} from '../../../../../constants/accounts/editor';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport './Editor.scss';\n\nconst b = block('accounts-editor');\n\nexport default class Editor extends Component {\n static propTypes = {\n //from parent component\n account: PropTypes.object,\n };\n\n state = {\n activeTab: EDITOR_TABS.general,\n };\n\n onTabChange = (value) => {\n this.setState({activeTab: value});\n };\n\n render() {\n const {activeTab} = this.state;\n const {account} = this.props;\n\n return (\n <div className={b('edit')}>\n <div className={b('edit-sidebar')}>\n <div className={b('edit-tabs')}>\n <Tabs\n items={contentTabs}\n size=\"m\"\n layout=\"vertical\"\n active={activeTab}\n onTabChange={this.onTabChange}\n />\n </div>\n </div>\n <ErrorBoundary>\n <div className={b('edit-content', 'pretty-scroll')}>\n {activeTab === EDITOR_TABS.general && <GeneralContent account={account} />}\n {activeTab === EDITOR_TABS.delete && <DeleteContent account={account} />}\n {activeTab === EDITOR_TABS.nodes && <NodesContent account={account} />}\n {activeTab === EDITOR_TABS.chunks && <ChunksContent account={account} />}\n {activeTab === EDITOR_TABS.medium && <MediumContent account={account} />}\n {activeTab === EDITOR_TABS.tablets && <TabletsContent account={account} />}\n {activeTab === EDITOR_TABS.masterMemory && (\n <MasterMemoryContent account={account} />\n )}\n </div>\n </ErrorBoundary>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport map_ from 'lodash/map';\n\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../common/hammer/format';\n\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport {AccountParsedData, visitResourceFields} from '../../../../utils/accounts/accounts-selector';\nimport './AccountAlerts.scss';\n\nconst block = cn('yt-account-alerts');\n\ninterface Props {\n account: AccountParsedData;\n}\n\nfunction AccountAlerts({account}: Props) {\n const alerts: Record<string, number> = {};\n\n visitResourceFields(account?.$attributes?.recursive_violated_resource_limits, (value, path) => {\n if (value > 0) {\n alerts[path] = value;\n }\n });\n\n return (\n <React.Fragment>\n <div className={block('tooltip-title')}>\n Limits of the following resources are violated\n <br /> by the account or its children:\n </div>\n <MetaTable\n items={map_(alerts, (value, path) => {\n return {\n key: path,\n label: readablePath(path),\n value: <>{value}</>,\n };\n })}\n />\n </React.Fragment>\n );\n}\n\nexport default React.memo(AccountAlerts);\n\nfunction readablePath(path: string) {\n return path.split('/').map(format.ReadableField).join(' / ');\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n AccountStaticConfigurationItem,\n getActiveAccount,\n getActiveAccountStaticConfiguration,\n} from '../../../../../store/selectors/accounts/accounts-ts';\nimport CollapsibleSection from '../../../../../components/CollapsibleSection/CollapsibleSection';\nimport DataTableYT from '../../../../../components/DataTableYT/DataTableYT';\nimport {Column} from '@gravity-ui/react-data-table';\nimport hammer from '../../../../../common/hammer';\nimport {setSettingsAccountsExpandStaticConfiguration} from '../../../../../store/actions/settings/settings';\n\nimport './AccountStaticConfiguration.scss';\nimport {getSettingsAccountsExpandStaticConfiguration} from '../../../../../store/selectors/settings-ts';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../constants/global';\nconst block = cn('account-static-configuration');\n\ninterface Props {\n className?: string;\n}\n\nconst columns: Array<Column<AccountStaticConfigurationItem>> = [\n {\n name: 'name',\n header: '',\n sortable: false,\n width: 200,\n render: (row) => {\n const {name, level} = row?.row || {};\n return <span className={block('name', {level: level as any})}>{name}</span>;\n },\n },\n {\n name: 'limit',\n header: 'Limit',\n sortable: false,\n width: 100,\n accessor: (row) => {\n const {total, format} = row;\n return hammer.format[format](total);\n },\n },\n {\n name: 'usage',\n header: 'Usage',\n sortable: false,\n width: 100,\n accessor: (row) => {\n const {used, format} = row;\n return hammer.format[format](used);\n },\n },\n {\n name: 'free',\n header: 'Free',\n sortable: false,\n width: 100,\n accessor: (row) => {\n const {free, format} = row;\n return hammer.format[format](free);\n },\n },\n];\n\nfunction AccountStaticConfiguration({className}: Props) {\n const dispatch = useDispatch();\n\n const account = useSelector(getActiveAccount);\n const items = useSelector(getActiveAccountStaticConfiguration);\n const expandState = useSelector(getSettingsAccountsExpandStaticConfiguration);\n\n const onToggle = React.useCallback(\n (value: boolean) => {\n // It is required to enforce DataTable to redraw content\n window.dispatchEvent(new Event('resize'));\n dispatch(setSettingsAccountsExpandStaticConfiguration(!value));\n },\n [dispatch],\n );\n\n if (!account || !items?.length) {\n return null;\n }\n\n return (\n <CollapsibleSection\n name={'Static configuration'}\n className={block(null, className)}\n size={UI_COLLAPSIBLE_SIZE}\n collapsed={!expandState}\n onToggle={onToggle}\n >\n <DataTableYT\n columns={columns}\n data={items}\n useThemeYT\n className={block('table')}\n settings={{\n displayIndices: false,\n }}\n rowClassName={({level}) => {\n return !level ? '' : block('row', {level: String(level)});\n }}\n />\n </CollapsibleSection>\n );\n}\n\nexport default React.memo(AccountStaticConfiguration);\n","import React from 'react';\n\nimport map_ from 'lodash/map';\n\nimport {\n getAccountMasterMemoryMedia,\n getAccountsContentMode,\n getAccountsMasterMemoryContentMode,\n} from '../../../../store/selectors/accounts/accounts-ts';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n AccountsStateDataFields,\n setAccountsStateDataFields,\n} from '../../../../store/actions/accounts/accounts-ts';\nimport {Secondary} from '../../../../components/Text/Text';\nimport format from '../../../../common/hammer/format';\nimport Select from '../../../../components/Select/Select';\n\nfunction Item({text}: {text: string}) {\n return (\n <React.Fragment>\n <Secondary>Mode:</Secondary> {text}\n </React.Fragment>\n );\n}\n\nfunction MasterMemoryTableMode() {\n const dispatch = useDispatch();\n const mode = useSelector(getAccountsContentMode);\n const value = useSelector(getAccountsMasterMemoryContentMode);\n const media = useSelector(getAccountMasterMemoryMedia);\n\n const handleUpdate = React.useCallback(\n (vals: Array<string>) => {\n dispatch(\n setAccountsStateDataFields({\n masterMemoryContentMode:\n vals[0] as AccountsStateDataFields['masterMemoryContentMode'],\n }),\n );\n },\n [dispatch],\n );\n\n const items = React.useMemo(() => {\n return map_(media, (item) => {\n return {\n value: item,\n text: <Item text={format.Readable(item)} />,\n };\n });\n }, [media]);\n\n return mode !== 'master_memory' ? null : (\n <span>\n <Select onUpdate={handleUpdate} items={items} value={[value]} filterable />\n </span>\n );\n}\n\nexport default React.memo(MasterMemoryTableMode);\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\n\nimport {Select} from '@gravity-ui/uikit';\n\nimport WithStickyToolbar, {\n STICKY_TOOLBAR_BOTTOM,\n} from '../../../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport hammer from '../../../../common/hammer';\nimport {\n getFavouriteAccountsSet,\n getFilteredAccounts,\n getFilteredAccountsOfDashboard,\n} from '../../../../store/selectors/accounts/dashboard';\n\nimport {\n getAccountsVisibilityMode,\n getAccountsVisibilityModeOfDashboard,\n} from '../../../../store/selectors/settings';\nimport AccountsTotal from './AccountsTotal';\n\nimport CollapsibleSection from '../../../../components/CollapsibleSection/CollapsibleSection';\nimport withStickyHead from '../../../../components/ElementsTable/hocs/withStickyHead';\nimport withStickyFooter from '../../../../components/ElementsTable/hocs/withStickyFooter';\nimport Error from '../../../../components/Error/Error';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport Filter from '../../../../components/Filter/Filter';\nimport AccountLink from '../../AccountLink';\nimport Icon from '../../../../components/Icon/Icon';\nimport CustomRadioButton from '../../../../components/RadioButton/RadioButton';\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport Modal from '../../../../components/Modal/Modal';\nimport Editor from './Editor/Editor';\nimport AccountAlerts from './AccountAlerts';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nimport {loadUsers} from '../../../../store/actions/accounts/editor';\nimport {accountsToggleFavourite} from '../../../../store/actions/favourites';\nimport getTableProps from '../../../../utils/accounts/tables';\nimport {\n ACCOUNTS_CONTENT_MODE_ITEMS,\n genRadioButtonVisibleAccounts,\n makeReadableItems,\n} from '../../../../utils/accounts';\nimport {getMediumList} from '../../../../store/selectors/thor';\nimport {\n changeContentFilter,\n changeMediumFilter,\n changeNameFilter,\n closeEditorModal,\n filterUsableAccounts,\n loadEditedAccount,\n setAccountsAbcServiceFilter,\n setAccountsTreeState,\n setAccountsVisibilityMode,\n setAccountsVisibilityModeOfDashboard,\n setActiveAccount,\n showEditorModal,\n} from '../../../../store/actions/accounts/accounts';\nimport {\n getAccountsAbcServiceIdSlugFilter,\n getActiveAccountAggregationRow,\n} from '../../../../store/selectors/accounts/accounts';\nimport {isNull} from '../../../../utils';\nimport {DASHBOARD_VIEW_CONTEXT} from '../../../../constants/index';\nimport {AccountResourceName} from '../../../../constants/accounts/accounts';\n\nimport {ProgressStackByTreeItem} from './ProgressStack';\n\nimport './AccountsGeneralTab.scss';\nimport {\n getAccountsColumnFields,\n getAccountsContentMode,\n getAccountsMapByName,\n getAccountsMasterMemoryContentMode,\n} from '../../../../store/selectors/accounts/accounts-ts';\nimport {\n getCluster,\n getClusterUiConfig,\n getClusterUiConfigEnablePerAccountTabletAccounting,\n} from '../../../../store/selectors/global';\nimport {TabletAccountingNotice} from './Editor/content/TabletsContent';\nimport AccountStaticConfiguration from './AccountStaticConfiguration/AccountStaticConfiguration';\nimport {Warning} from '../../../../components/Text/Text';\nimport Button from '../../../../components/Button/Button';\nimport MasterMemoryTableMode from './MasterMemoryTableMode';\nimport UIFactory from '../../../../UIFactory';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../constants/global';\n\nconst b = block('accounts');\nconst progressTooltipClassname = b('progress-tooltip');\n\nfunction Bytes({bytes, isAggregation}) {\n if (isNull(bytes)) {\n return hammer.format.NO_VALUE;\n }\n\n return (\n <div className={b('bytes')}>\n <div\n className={b('item', {\n bytes: true,\n aggregated: isAggregation,\n })}\n >\n {hammer.format['Bytes'](bytes)}\n </div>\n {!isAggregation && (\n <small className={b('item-bytes')}>{hammer.format['Number'](bytes)}</small>\n )}\n </div>\n );\n}\n\nconst DB_VISIBILITY_MODE_PROPS = genRadioButtonVisibleAccounts();\nconst ACCOUNTS_VISIBILITY_MODE_PROPS = genRadioButtonVisibleAccounts(true);\n\nconst ElementsTableWithHeaderAndFooter = compose(withStickyHead, withStickyFooter)(ElementsTable);\n\nBytes.propTypes = {\n bytes: PropTypes.number,\n isAggregation: PropTypes.bool,\n};\n\nfunction renderBytes(bytes, isAggregation) {\n return (\n <ErrorBoundary>\n <Bytes bytes={bytes} isAggregation={isAggregation} />\n </ErrorBoundary>\n );\n}\n\nfunction renderNumber(value, isAggregation = false) {\n return (\n <div className={b('item', {aggregated: isAggregation})}>\n {hammer.format['Number'](value)}\n </div>\n );\n}\n\nfunction VisibilityNotice({mode}) {\n let message = null;\n if (mode === 'usable') {\n message =\n 'Currently only the accounts for which you have the \"Use\" permission are displayed';\n }\n if (mode === 'favourites') {\n message = 'Currently only the accounts that marked as favourite are displayed.';\n }\n\n return !message ? null : <Warning>{message}</Warning>;\n}\n\nclass AccountsGeneralTab extends Component {\n static propTypes = {\n accounts: PropTypes.array.isRequired,\n nameToAccountMap: PropTypes.object.isRequired,\n contextViewTree: PropTypes.array.isRequired,\n responsibleUsers: PropTypes.array.isRequired,\n clusterTotalsUsage: PropTypes.object.isRequired,\n nodesData: PropTypes.object.isRequired,\n usableAccounts: PropTypes.array.isRequired,\n activeNameFilter: PropTypes.string.isRequired,\n activeContentModeFilter: PropTypes.string.isRequired,\n activeMediumFilter: PropTypes.string.isRequired,\n mediumList: PropTypes.array.isRequired,\n editableAccount: PropTypes.object.isRequired,\n showEditor: PropTypes.bool.isRequired,\n usableError: PropTypes.object,\n usableErrorMessage: PropTypes.string,\n errorData: PropTypes.object,\n viewContext: PropTypes.string,\n loadTotals: PropTypes.bool,\n loadNodes: PropTypes.bool,\n error: PropTypes.bool,\n wasLoaded: PropTypes.bool,\n fetching: PropTypes.bool,\n activeAccount: PropTypes.string,\n accountsTreeState: PropTypes.string,\n activeAccountBreadcrumbs: PropTypes.arrayOf(\n PropTypes.shape({\n text: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n }),\n ),\n activeAccountAggregation: PropTypes.object,\n dashboardVisibilityMode: PropTypes.string,\n favouriteAccountsSet: PropTypes.object.isRequired,\n\n changeNameFilter: PropTypes.func.isRequired,\n changeContentFilter: PropTypes.func.isRequired,\n changeMediumFilter: PropTypes.func.isRequired,\n filterUsableAccounts: PropTypes.func.isRequired,\n closeEditorModal: PropTypes.func.isRequired,\n loadUsers: PropTypes.func.isRequired,\n setAccountsTreeState: PropTypes.func.isRequired,\n loadEditedAccount: PropTypes.func.isRequired,\n showEditorModal: PropTypes.func.isRequired,\n setActiveAccount: PropTypes.func.isRequired,\n setAccountsVisibilityModeOfDashboard: PropTypes.func.isRequired,\n accountsToggleFavourite: PropTypes.func.isRequired,\n setAccountsAbcServiceFilter: PropTypes.func.isRequired,\n\n cluster: PropTypes.string,\n };\n\n static defaultProps = {\n viewContext: 'accounts',\n };\n\n renderAccountsPageHeader() {\n const {\n wasLoaded,\n loadNodes,\n loadTotals,\n nodesData,\n clusterTotalsUsage,\n accounts,\n mediumList,\n collapsibleSize,\n activeAccount,\n } = this.props;\n const isLoaded = wasLoaded && loadNodes && loadTotals;\n\n return (\n <div className={b('header', 'elements-section')}>\n {activeAccount ? (\n <AccountStaticConfiguration />\n ) : (\n <CollapsibleSection name=\"Media\" size={collapsibleSize}>\n {isLoaded && (\n <AccountsTotal\n nodesData={nodesData}\n clusterTotalsUsage={clusterTotalsUsage}\n accounts={accounts}\n mediumList={mediumList}\n />\n )}\n </CollapsibleSection>\n )}\n </div>\n );\n }\n\n renderFilters() {\n const {\n mediumList,\n viewContext,\n activeNameFilter,\n activeMediumFilter,\n activeContentModeFilter,\n dashboardVisibilityMode,\n abcServiceFilter: {slug, id} = {},\n contextView,\n } = this.props;\n\n const showMediumType =\n mediumList &&\n (activeContentModeFilter === 'default' || activeContentModeFilter === 'disk_space');\n\n const radioProps =\n contextView === DASHBOARD_VIEW_CONTEXT\n ? DB_VISIBILITY_MODE_PROPS\n : ACCOUNTS_VISIBILITY_MODE_PROPS;\n\n return (\n <div className={b('toolbar', 'elements-section')}>\n <div className={b('dashboard-visibility-mode', 'elements-toolbar__component')}>\n <CustomRadioButton\n onChange={this.onDashboardVisibilityModeChange}\n {...radioProps}\n value={dashboardVisibilityMode}\n />\n </div>\n <div className={b('name-filter', 'elements-toolbar__component')}>\n <Filter\n hasClear\n size=\"m\"\n type=\"text\"\n value={activeNameFilter}\n placeholder=\"Account...\"\n onChange={this.props.changeNameFilter}\n autofocus={viewContext !== DASHBOARD_VIEW_CONTEXT}\n qa={'accounts-name-filter'}\n />\n </div>\n {UIFactory.renderControlAbcService({\n className: b('abc-service-filter', 'elements-toolbar__component'),\n value: {slug, id},\n onChange: this.onAbcServiceFilter,\n })}\n <div className={b('content-mode', 'elements-toolbar__component')}>\n <Select\n value={[activeContentModeFilter]}\n options={ACCOUNTS_CONTENT_MODE_ITEMS}\n onUpdate={(vals) => this.props.changeContentFilter(vals[0])}\n label=\"Mode:\"\n qa=\"accounts-content-mode\"\n disablePortal\n />\n </div>\n <div className={b('content-mode-subtype', 'elements-toolbar__component')}>\n {!showMediumType ? (\n <MasterMemoryTableMode />\n ) : (\n <Select\n options={makeReadableItems(mediumList)}\n value={[activeMediumFilter]}\n onUpdate={(vals) => this.props.changeMediumFilter(vals[0])}\n label=\"Medium:\"\n disablePortal\n />\n )}\n </div>\n </div>\n );\n }\n\n onAbcServiceFilter = (value) => {\n const {id, slug} = value || {};\n const {setAccountsAbcServiceFilter} = this.props;\n setAccountsAbcServiceFilter(id, slug);\n };\n\n onDashboardVisibilityModeChange = (event) => {\n const {viewContext} = this.props;\n if (viewContext === DASHBOARD_VIEW_CONTEXT) {\n this.props.setAccountsVisibilityModeOfDashboard(event.target.value);\n } else {\n this.props.setAccountsVisibilityMode(event.target.value);\n }\n };\n\n renderUsableError() {\n const {usableError} = this.props;\n\n return <Error error={usableError} />;\n }\n\n get templates() {\n const {\n activeAccount,\n activeMediumFilter: mediumType,\n favouriteAccountsSet,\n accountsToggleFavourite,\n columnFields,\n cluster,\n masterMemoryContentMode,\n clusterUiConfig,\n } = this.props;\n const self = this;\n\n const templates = {\n name(treeItem, name, toggleStateFn, itemState) {\n const {level = 0} = treeItem;\n\n const OFFSET = 20;\n const offsetStyle = {paddingLeft: level * OFFSET};\n const {attributes: item, children, isAggregation} = treeItem;\n\n if (isAggregation) {\n return (\n <div className={b('item', {name: true})} style={offsetStyle}>\n <div\n className={b('item-name', {\n aggregation: true,\n })}\n >\n Aggregation\n </div>\n </div>\n );\n }\n\n const hasChildren = children && children.length > 0;\n const toggler = (\n <div\n className={b('item-toggler', {hidden: !hasChildren})}\n onClick={toggleStateFn}\n >\n <Icon awesome={itemState.collapsed ? 'angle-down' : 'angle-up'} />\n </div>\n );\n\n const nameElement = (\n <div className={b('item-name')}>\n <AccountLink account={item.name} cluster={cluster} />\n </div>\n );\n\n const isInFavourites = favouriteAccountsSet.has(item.name);\n const onFavouriteClick = () => {\n accountsToggleFavourite(item.name);\n };\n return (\n <div className={b('item', {name: true})} style={offsetStyle}>\n {toggler}\n {nameElement}\n <div\n className={b('item-favorite-star', {\n active: isInFavourites,\n })}\n onClick={onFavouriteClick}\n >\n <Icon awesome={isInFavourites ? 'star-alt' : 'star'} />\n </div>\n {UIFactory.renderAccountsTableItemExtraControls({\n itemClassName: b('name-extra-control'),\n cluster,\n clusterUiConfig,\n account: item.name,\n accountAttributes: item.$attributes,\n })}\n </div>\n );\n },\n\n alerts(treeItem) {\n const {attributes: account} = treeItem;\n const {alertsCount} = account;\n const text = alertsCount > 0 ? alertsCount : '';\n return (\n text && (\n <Tooltip\n placement={'top-start'}\n content={<AccountAlerts account={account} />}\n >\n <span className={b('alert')}>{text}</span>\n </Tooltip>\n )\n );\n },\n\n disk_space_default(treeItem) {\n return templates.disk_space_percentage(treeItem, mediumType);\n },\n\n disk_space_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.DISK_SPACE_PER_MEDIUM}\n mediumType={mediumType}\n />\n );\n },\n\n disk_space_usage(treeItem) {\n const value = columnFields.disk_space_usage.get(treeItem);\n return renderBytes(value, treeItem.isAggregation);\n },\n\n disk_space_limit(treeItem) {\n const value = columnFields.disk_space_limit.get(treeItem);\n const {isAggregation} = treeItem;\n return renderBytes(value, isAggregation);\n },\n\n disk_space_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.disk_space_free.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n node_count_default(treeItem) {\n return templates.node_count_percentage(treeItem);\n },\n\n node_count_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.NODE_COUNT}\n />\n );\n },\n\n node_count_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.node_count_usage.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n node_count_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.node_count_limit.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n node_count_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.node_count_free.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n chunk_count_default(treeItem) {\n return templates.chunk_count_percentage(treeItem);\n },\n\n chunk_count_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.CHUNK_COUNT}\n />\n );\n },\n\n chunk_count_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.chunk_count_usage.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n chunk_count_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.chunk_count_limit.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n chunk_count_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.chunk_count_free.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n tablet_count_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.TABLET_COUNT}\n />\n );\n },\n\n tablet_count_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_count_usage.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n tablet_count_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_count_limit.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n tablet_count_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_count_free.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n tablet_static_memory_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.TABLET_STATIC_MEMORY}\n />\n );\n },\n\n tablet_static_memory_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_static_memory_usage.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n tablet_static_memory_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_static_memory_limit.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n tablet_static_memory_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_static_memory_free.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n master_memory_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.MASTER_MEMORY}\n mediumType={masterMemoryContentMode}\n />\n );\n },\n\n master_memory_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.master_memory_usage.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n master_memory_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.master_memory_limit.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n master_memory_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.master_memory_free.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n master_memory_detailed_nodes(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_nodes.get(treeItem),\n isAggregation,\n );\n },\n master_memory_detailed_chunks(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_chunks.get(treeItem),\n isAggregation,\n );\n },\n master_memory_detailed_attributes(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_attributes.get(treeItem),\n isAggregation,\n );\n },\n master_memory_detailed_tablets(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_tablets.get(treeItem),\n isAggregation,\n );\n },\n master_memory_detailed_schemas(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_schemas.get(treeItem),\n isAggregation,\n );\n },\n\n actions(treeItem) {\n if (treeItem.isAggregation) {\n return null;\n }\n\n const {attributes: item} = treeItem;\n const commonProps = {\n view: 'flat-secondary',\n size: 's',\n };\n\n const handleClick = () => self.onEditClick(item);\n\n return (\n <span>\n <Button\n {...commonProps}\n title=\"Edit account\"\n onClick={handleClick}\n qa={`edit-account-${item.name}`}\n >\n <Icon awesome=\"pencil\" />\n </Button>\n </span>\n );\n },\n };\n\n return templates;\n }\n\n onEditClick(account) {\n this.props.showEditorModal(account);\n }\n\n renderAccountsTable() {\n const {\n activeAccount,\n contextViewTree,\n activeMediumFilter,\n activeContentModeFilter,\n fetching,\n wasLoaded,\n accountsTreeState,\n enable_per_account_tablet_accounting,\n dashboardVisibilityMode,\n } = this.props;\n\n const tableProps = getTableProps(\n activeAccount,\n activeContentModeFilter,\n activeMediumFilter,\n );\n const isLoading = fetching && !wasLoaded;\n const selectedIndex = activeAccount ? 0 : undefined;\n\n const isTCBRelative =\n activeContentModeFilter === 'tablets' || activeContentModeFilter === 'tablets_memory';\n\n const allowTable = !isTCBRelative || enable_per_account_tablet_accounting;\n\n const items = contextViewTree || [];\n\n return (\n <div className={b('content', 'elements-section')}>\n {!allowTable && <TabletAccountingNotice className={b('tcb-resource-notice')} />}\n {allowTable && <VisibilityNotice mode={dashboardVisibilityMode} />}\n {allowTable && (\n <ElementsTableWithHeaderAndFooter\n {...tableProps}\n isLoading={isLoading}\n treeState={accountsTreeState}\n items={items}\n onItemToggleState={this.onItemToggleState}\n templates={this.templates}\n selectedIndex={selectedIndex}\n header={false}\n footer={this.props.activeAccountAggregation}\n top={STICKY_TOOLBAR_BOTTOM}\n treeStateExpanded={!activeAccount ? [] : [items && items[0]?.key]}\n />\n )}\n </div>\n );\n }\n\n onItemToggleState = () => {\n this.props.setAccountsTreeState('mixed');\n };\n\n renderEditorModal() {\n const {closeEditorModal, editableAccount, showEditor} = this.props;\n\n return (\n editableAccount.name && (\n <Modal\n onOutsideClick={closeEditorModal}\n onCancel={closeEditorModal}\n visible={showEditor}\n content={<Editor account={editableAccount} />}\n title={editableAccount.name}\n footer={false}\n size={'l'}\n />\n )\n );\n }\n\n render() {\n const {error, usableError, wasLoaded, viewContext, fetching} = this.props;\n\n return (\n <div>\n <div className={b()}>\n {viewContext !== DASHBOARD_VIEW_CONTEXT && this.renderAccountsPageHeader()}\n <WithStickyToolbar\n toolbar={this.renderFilters()}\n content={\n <div>\n {error && <Error error={this.props.errorData} />}\n {usableError && this.renderUsableError()}\n {(wasLoaded || fetching) && this.renderAccountsTable()}\n </div>\n }\n />\n </div>\n {this.renderEditorModal()}\n </div>\n );\n }\n}\n\nconst makeMapStateToProps = () => {\n return (state, ownProps) => {\n const nameToAccountMap = getAccountsMapByName(state);\n const favouriteAccountsSet = getFavouriteAccountsSet(state);\n\n const {\n accounts: {accounts},\n } = state;\n\n const {viewContext} = ownProps;\n const isDashboard = viewContext === DASHBOARD_VIEW_CONTEXT;\n\n const contextViewTree = isDashboard\n ? getFilteredAccountsOfDashboard(state)\n : getFilteredAccounts(state);\n\n return {\n ...accounts,\n activeContentModeFilter: getAccountsContentMode(state),\n\n clusterUiConfig: getClusterUiConfig(state),\n\n mediumList: getMediumList(state),\n accounts: accounts.accounts,\n contextViewTree,\n nameToAccountMap,\n\n cluster: getCluster(state),\n\n activeAccountAggregation: getActiveAccountAggregationRow(state),\n favouriteAccountsSet,\n dashboardVisibilityMode: isDashboard\n ? getAccountsVisibilityModeOfDashboard(state)\n : getAccountsVisibilityMode(state),\n abcServiceFilter: getAccountsAbcServiceIdSlugFilter(state),\n columnFields: getAccountsColumnFields(state),\n\n enable_per_account_tablet_accounting:\n getClusterUiConfigEnablePerAccountTabletAccounting(state),\n\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n\n masterMemoryContentMode: getAccountsMasterMemoryContentMode(state),\n };\n };\n};\n\nconst mapDispatchToProps = {\n changeNameFilter,\n changeContentFilter,\n changeMediumFilter,\n filterUsableAccounts,\n closeEditorModal,\n loadUsers,\n setAccountsTreeState,\n loadEditedAccount,\n setActiveAccount,\n showEditorModal,\n accountsToggleFavourite,\n setAccountsVisibilityModeOfDashboard,\n setAccountsVisibilityMode,\n setAccountsAbcServiceFilter,\n};\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(AccountsGeneralTab);\n","import {\n CLOSE_CREATE_MODAL,\n FETCH_USERS,\n OPEN_CREATE_MODAL,\n} from '../../../constants/accounts/editor';\nimport {listAllUsers} from '../../../utils/users-groups';\nimport {YTApiId} from '../../../rum/rum-wrap-api';\n\nexport function loadUsers() {\n return (dispatch) => {\n return listAllUsers(YTApiId.listUsers)\n .then((data) => {\n dispatch({\n type: FETCH_USERS.SUCCESS,\n data,\n });\n })\n .catch((error) => {\n dispatch({\n type: FETCH_USERS.FAILURE,\n error,\n });\n });\n };\n}\n\nexport function openCreateModal(account) {\n return {\n type: OPEN_CREATE_MODAL,\n data: {account},\n };\n}\n\nexport function closeCreateModal(newAccountInfo) {\n return {\n type: CLOSE_CREATE_MODAL,\n data: newAccountInfo,\n };\n}\n"],"names":["block","cn","Message","_ref","_ref$theme","theme","_ref$showClose","showClose","dismissCallback","content","buttons","_jsxs","className","children","_jsx","Button","size","view","title","onClick","Icon","type","React","map_","data","index","button","text","callback","AccountsUpdater","dispatch","useDispatch","editCounter","useSelector","getAccountsEditCounter","update","fetchAccounts","useUpdater","getUsableAccountsSet","createSelector","getUsableAccounts","items","Set","getFavouriteAccountsSet","getFavouriteAccounts","getFilteredAccountsOfDashboard","prepareAccountsFlattenTree","getAccountsVisibilityModeOfDashboard","filterFlattenTreeByViewContext","getFilteredAccounts","getAccountsVisibilityMode","getActiveAccount","nodesChunksUsageList","prepareMediumStats","usedSpace","availableSpace","settings","forEach_","stats","used","available","usage","limit","initMediumStats","list","reduce_","getNodesChunksTotals","clusterTotalsUsage","clusterExtendedTotal","total_resource_usage","total_resource_limits","getClusterExtendedTotal","name","clusterUsage","clusterLimit","hammer","format","progress","compact_","b","AccountsTotal","_Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","this","props","item","Progress","nodesData","mediumList","clusterTotalPerMedium","hardwareLimitPerMedium","readThroughput","writeThroughput","_this$props","diskSpace","accounts","_nodesData","perMedium","disk_space_per_medium","getClusterTotal","usedSpacePerMedia","used_space_per_medium","availableSpacePerMedia","available_space_per_medium","mediumType","getHardwareLimit","ioStatisticsPerMedia","io_statistics_per_medium","_ioStatisticsPerMedia","_ioStatisticsPerMedia2","rate","disk_read_rate","capacity","disk_read_capacity","getReadThroughput","_ioStatisticsPerMedia3","_ioStatisticsPerMedia4","disk_write_rate","disk_write_capacity","getWriteThroughput","hardwareLimit","overcommitted","diskReadRate","diskReadCapacity","diskWriteRate","diskWriteCapacity","show","calcProgressProps","accountsIoThroughputThresholds","Fragment","map","WarningIcon","hoverContent","_objectSpread","NO_VALUE","renderNodesChunksTotals","renderNewTotals","Component","ConfirmMessage","confirmQuestion","onApply","onCancel","defaultProps","toaster","Toaster","DeleteContent","_this","_len","length","args","Array","_key","call","concat","state","showConfirmMessage","error","undefined","handleDelete","account","closeEditorModal","deleteAccount","then","setState","activeValue","add","timeout","handleCancel","handleButtonClick","showErrorMessage","_this$state","Error","message","connect","ProgressTooltip","info","formatNumber","ErrorBoundary","ProgressTooltipRow","mixin","committed","ProgressTooltipTotalRow","i","_ref2","color","icon","style","awesome","face","committedValue","isNumber_","limitValue","_ref3","acc","colors","STACKED_PROGRESS_BAR_COLORS","ProgressStackImpl","treeItem","infoGetter","useChildren","popupClassName","isAggregation","_prepareProgressStack","getTreeItemInfoFn","recursiveInfo","isEmpty_","_recursiveInfo$limit","progressText","_recursiveInfo$commit","recursiveCommitted","_recursiveInfo$uncomm","uncommitted","recursiveUncommitted","_toConsumableArray","allLimit","Math","max","colorIndex","progressStack","tooltipInfo","_getTreeItemInfoFn","_Account$prepareProgr","Account","prepareProgressStack","_Account$prepareProgr2","_slicedToArray","committedEl","uncommittedEl","tooltipItem","getAccountName","push","isNull","progressValue","reduce","isNaN","stack","Tooltip","placement","tooltipClassName","err","console","ProgressStackByTreeItem","activeAccount","isActiveAccount","_ACCOUNT_RESOURCE_TYP","ACCOUNT_RESOURCE_TYPES_DESCRIPTION","_ACCOUNT_RESOURCE_TYP2","getInfo","recursive","attributes","AccountQuotaEditor","_React$Component","renderSourcesSuggest","onChange","sources","SelectSingle","placeholder","width","validateAccount","currentAccount","getInfoByName","ROOT_ACCOUNT_NAME","Infinity","total","accountData","accountsTree","resourcePath","getResourcePath","ypath","getValue","RESOURCES_LIMITS_PREFIX","RESOURCES_USAGE_PREFIX","RECURSIVE_RESOURCES_USAGE_PREFIX","totalChildrenLimit","TOTAL_CHILDREN_RESOURCE_LIMIT","allowChildrenOverCommit","ALLOW_CHILDREN_LIMIT_OVERCOMMIT","toggleShowEditor","showEditor","onLimitChange","newLimit","limitDiff","distributeAccount","setAccountQuota","_this$props2","ClickableText","QuotaEditorWithHide","onHide","onSave","parentOfCurrentAccount","getParentAccount","renderSourceSuggest","min","calcMinLimit","parent","_this$props3","_this$props$accountsT","_this$getInfoByName2","_this$getInfoByName2$","_this$getInfoByName2$2","_this$getInfoByName2$3","AccountQuota","getAccountsTree","handleSetQuota","params","toasterName","wrapApiPromiseByToaster","dotPath","replace","yt","transferAccountResources","parameters","source_account","destination_account","resource_delta","update_","setAccountLimit","Promise","resolve","setAccountQuotaImpl","successContent","loadEditedAccount","accountsIncreaseEditCounter","getEditableAccountQuotaSources","AccountTransferQuotaMessage","isTopLevel","isEditableAccountOfTopLevel","getEditableAccount","clusterUiConfig","getClusterUiConfig","_Fragment","UIFactory","renderTransferQuotaNoticeForAccount","accountAttributes","$attributes","NodesContent","AccountResourceName","NODE_COUNT","ChunksContent","CHUNK_COUNT","MediumContent","showAllMediums","toggleShowAll","mediums","DISK_SPACE_PER_MEDIUM","mediumTypesWithoutCache","filter","_partition_","partition_","_partition_2","defined","rest","showAllText","renderMediums","getMediumList","TabletsContent","TABLET_COUNT","TABLET_STATIC_MEMORY","allowTabletAccounting","renderTabletsQuota","renderTabletsMemory","TabletAccountingNotice","getClusterUiConfigEnablePerAccountTabletAccounting","allowPerTablet","getClusterUiConfigEnablePerBundleTabletAccounting","helpLink","getClusterUiConfigBundleAccountingHelpLink","cluster","getCluster","Link","url","Page","TABLET_CELL_BUNDLES","routed","MasterMemoryContent","media","getAccountMasterMemoryMedia","medium","Readable","MASTER_MEMORY","Editor","activeTab","EDITOR_TABS","general","onTabChange","Tabs","contentTabs","layout","active","GeneralContent","nodes","chunks","tablets","masterMemory","AccountAlerts","_account$$attributes","alerts","visitResourceFields","recursive_violated_resource_limits","path","MetaTable","label","readablePath","split","ReadableField","join","columns","header","sortable","render","row","level","accessor","free","AccountStaticConfiguration","getActiveAccountStaticConfiguration","expandState","getSettingsAccountsExpandStaticConfiguration","onToggle","window","dispatchEvent","Event","setSettingsAccountsExpandStaticConfiguration","CollapsibleSection","UI_COLLAPSIBLE_SIZE","collapsed","DataTableYT","useThemeYT","displayIndices","rowClassName","String","Item","Secondary","MasterMemoryTableMode","mode","getAccountsContentMode","getAccountsMasterMemoryContentMode","handleUpdate","vals","setAccountsStateDataFields","masterMemoryContentMode","Select","onUpdate","filterable","progressTooltipClassname","Bytes","bytes","aggregated","DB_VISIBILITY_MODE_PROPS","genRadioButtonVisibleAccounts","ACCOUNTS_VISIBILITY_MODE_PROPS","ElementsTableWithHeaderAndFooter","compose","withStickyHead","withStickyFooter","ElementsTable","renderBytes","renderNumber","VisibilityNotice","Warning","AccountsGeneralTab","onAbcServiceFilter","id","slug","setAccountsAbcServiceFilter","onDashboardVisibilityModeChange","event","viewContext","DASHBOARD_VIEW_CONTEXT","setAccountsVisibilityModeOfDashboard","target","setAccountsVisibilityMode","onItemToggleState","setAccountsTreeState","wasLoaded","loadNodes","loadTotals","collapsibleSize","isLoaded","_this2","activeNameFilter","activeMediumFilter","activeContentModeFilter","dashboardVisibilityMode","_this$props2$abcServi","abcServiceFilter","_this$props2$abcServi2","showMediumType","radioProps","contextView","CustomRadioButton","Filter","hasClear","changeNameFilter","autofocus","qa","renderControlAbcService","options","ACCOUNTS_CONTENT_MODE_ITEMS","changeContentFilter","disablePortal","makeReadableItems","changeMediumFilter","usableError","get","favouriteAccountsSet","accountsToggleFavourite","columnFields","self","templates","toggleStateFn","itemState","_treeItem$level","offsetStyle","paddingLeft","aggregation","hasChildren","toggler","hidden","nameElement","AccountLink","isInFavourites","has","renderAccountsTableItemExtraControls","itemClassName","alertsCount","disk_space_default","disk_space_percentage","disk_space_usage","disk_space_limit","disk_space_free","node_count_default","node_count_percentage","node_count_usage","node_count_limit","node_count_free","chunk_count_default","chunk_count_percentage","chunk_count_usage","chunk_count_limit","chunk_count_free","tablet_count_percentage","tablet_count_usage","tablet_count_limit","tablet_count_free","tablet_static_memory_percentage","tablet_static_memory_usage","tablet_static_memory_limit","tablet_static_memory_free","master_memory_percentage","master_memory_usage","master_memory_limit","master_memory_free","master_memory_detailed_nodes","master_memory_detailed_chunks","master_memory_detailed_attributes","master_memory_detailed_tablets","master_memory_detailed_schemas","actions","onEditClick","showEditorModal","_items$","_this$props4","contextViewTree","fetching","accountsTreeState","enable_per_account_tablet_accounting","tableProps","getTableProps","isLoading","selectedIndex","allowTable","treeState","footer","activeAccountAggregation","top","STICKY_TOOLBAR_BOTTOM","treeStateExpanded","_this$props5","editableAccount","Modal","onOutsideClick","visible","_this$props6","renderAccountsPageHeader","WithStickyToolbar","toolbar","renderFilters","errorData","renderUsableError","renderAccountsTable","renderEditorModal","mapDispatchToProps","filterUsableAccounts","loadUsers","setActiveAccount","ownProps","nameToAccountMap","getAccountsMapByName","isDashboard","getActiveAccountAggregationRow","getAccountsAbcServiceIdSlugFilter","getAccountsColumnFields","listAllUsers","YTApiId","listUsers","FETCH_USERS","SUCCESS","FAILURE","openCreateModal","OPEN_CREATE_MODAL","closeCreateModal","newAccountInfo","CLOSE_CREATE_MODAL"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"js/1260.a1e22005.chunk.js","mappings":"4MASMA,GAAQC,EAAAA,EAAAA,GAAG,oBAEF,SAASC,EAAOC,GAM3B,IAADC,EAAAD,EALCE,MAAAA,OAAK,IAAAD,EAAG,UAASA,EAAAE,EAAAH,EACjBI,UAAAA,OAAS,IAAAD,GAAQA,EACjBE,EAAeL,EAAfK,gBACAC,EAAON,EAAPM,QACAC,EAAOP,EAAPO,QAEA,OACIC,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,EAAM,CAACK,MAAAA,IAAQQ,SAAA,CAC1BN,IACGO,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,EAAM,SAASa,UAC3BC,EAAAA,EAAAA,KAACC,EAAAA,EAAM,CAACC,KAAK,IAAIC,KAAK,iBAAiBC,MAAM,QAAQC,QAASX,EAAgBK,UAC1EC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAACC,KAAK,cAKtBC,EAAAA,eAAqBb,GAChB,CAACA,QAAAA,GACDc,IAAKd,GAAS,SAACe,EAAMC,GAAK,OACtBX,EAAAA,EAAAA,KAAA,KAAeF,UAAWZ,EAAM,aAAaa,SACxCW,GADGC,EAEJ,IAGbf,IACGI,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,EAAM,WAAWa,SAC5BU,IAAKb,GAAS,SAACgB,GAAM,OAClBZ,EAAAA,EAAAA,KAAA,QAAMF,UAAWZ,EAAM,UAAUa,UAC7BC,EAAAA,EAAAA,KAACC,EAAAA,EAAM,CAACC,KAAK,IAAIE,MAAOQ,EAAOC,KAAMR,QAASO,EAAOE,SAASf,SACzDa,EAAOC,QAFuBD,EAAOC,KAIvC,QAM/B,C,8FC1Ce,SAASE,IACpB,IAAMC,GAAWC,EAAAA,EAAAA,MAEXC,GAAcC,EAAAA,EAAAA,IAAYC,EAAAA,IAE1BC,EAASb,EAAAA,aAAkB,WAC7BQ,GAASM,EAAAA,EAAAA,MAEb,GAAG,CAACN,EAAUE,IAId,OAFAK,EAAAA,EAAAA,IAAWF,GAEJ,IACX,C,gQCNaG,GAAuBC,EAAAA,EAAAA,IAAe,CAACC,EAAAA,KAAoB,SAACC,GACrE,OAAO,IAAIC,IAAID,EACnB,IAMaE,GAA0BJ,EAAAA,EAAAA,IAAe,CAACK,EAAAA,KAAuB,SAACH,GAC3E,OAAO,IAAIC,IAAInB,IAAKkB,EAAO,QAC/B,IAEaI,GAAiCN,EAAAA,EAAAA,IAC1C,CACIO,EAAAA,GACAR,EACAS,EAAAA,GACAJ,GAEJK,EAAAA,IAGSC,GAAsBV,EAAAA,EAAAA,IAC/B,CACIO,EAAAA,GACAR,EACAY,EAAAA,GACAP,EACAQ,EAAAA,IAEJH,EAAAA,I,uGCnCEI,EAAuB,CAAC,aAAc,eA2D5C,SAASC,EACLC,EACAC,EACAC,GAEA,OAAOC,IAASD,GAAU,SAACE,EAAOrC,GAC9B,IAAMsC,EAAOL,EAAUjC,IAAS,EAC1BuC,EAAYL,EAAelC,IAAS,EAC1CqC,EAAMG,MAAQF,EACdD,EAAMI,MAAQF,CAClB,GACJ,CAEA,SAASG,EAA6CC,GAClD,OAAOC,IACHD,GACA,SAACA,EAAM3C,GAMH,OALA2C,EAAK3C,GAAQ,CACTwC,MAAO,EACPC,MAAO,GAGJE,CACX,GACA,CAAC,EAET,CAuGO,SAASE,EAAqBC,GACjC,IAAMH,EAAOZ,EACPgB,EAlBV,SAAiCD,GAE7B,IAAMX,EAAWO,EAAgBX,GASjC,OAPIe,GAIAd,EAHkBc,EAAmBE,qBACdF,EAAmBG,sBAEId,GAG3C,CACHA,SAAUA,EAElB,CAIiCe,CAAwBJ,GAAoBX,SAEnEf,EAAQlB,IAAKyC,GAAM,SAACQ,GACtB,GAAIJ,EAAqBI,GAAO,CAC5B,IAAMC,EAAeL,EAAqBI,GAAMX,MAC1Ca,EAAeN,EAAqBI,GAAMV,MAEhD,MAAO,CACHU,KAAMA,EACNC,aAAc,CACV9C,KACIgD,EAAAA,EAAOC,OAAe,OAAEH,GACxB,MACAE,EAAAA,EAAOC,OAAe,OAAEF,GAC5BG,SAAWJ,EAAeC,EAAgB,KAGtD,CAEA,OAAO,IACX,IACA,OAAOI,IAASrC,EACpB,C,eC5MMsC,GAAI/E,EAAAA,EAAAA,GAAM,YASKgF,EAAa,SAAAC,IAAAC,EAAAA,EAAAA,GAAAF,EAAAC,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAJ,GAAA,SAAAA,IAAA,OAAAK,EAAAA,EAAAA,GAAA,KAAAL,GAAAG,EAAAG,MAAA,KAAAC,UAAA,CAgH7B,OAhH6BC,EAAAA,EAAAA,GAAAR,EAAA,EAAAS,IAAA,0BAAAC,MAS9B,WACI,IAAOvB,EAAsBwB,KAAKC,MAA3BzB,mBAEP,OACIrD,EAAAA,EAAAA,KAAA,SAAAD,UACIC,EAAAA,EAAAA,KAAA,SAAAD,SACKU,IAAK2C,EAAqBC,IAAqB,SAAC0B,GAAI,OACjDlF,EAAAA,EAAAA,MAAA,MAAAE,SAAA,EACIC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,0BAA0BlE,SACtC8D,EAAAA,EAAOC,OAAsB,cAAEiB,EAAKrB,SAEzC1D,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,4BAA4BlE,UACzCC,EAAAA,EAAAA,KAACgF,EAAAA,EAAQ,CACLJ,MAAOG,EAAKpB,aAAaI,SACzBlD,KAAMkE,EAAKpB,aAAa9C,KACxBtB,MAAO,eAGfS,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,6BAA6BlE,SAAC,QAX1CgF,EAAKrB,KAYT,OAKzB,GAAC,CAAAiB,IAAA,kBAAAC,MAED,WACI,IDmKJvB,EACA4B,EACAC,EAEMC,EAMAC,EACAC,EACAC,EC/KFC,EAA8DV,KAAKC,MAC7DU,GADSD,EAARE,SDmKXpC,ECnKuCkC,EAAlBlC,mBDoKrB4B,ECpKkDM,EAATN,UDqKzCC,ECrK8DK,EAAVL,WDuK9CC,EArIV,SACI9B,EACAqC,EACAR,GAGA,IAAMS,EAAY1C,EAAgBiC,GAUlC,OANI7B,GAGAd,EAFoBc,EAAmBE,qBAAqBqC,sBACnCvC,EAAmBG,sBAAsBoC,sBACJD,GAG3D,CACHA,UAAWA,EAEnB,CAkHkCE,CAC1BxC,EACA4B,EACAC,GACFS,UAEIP,EAtHV,SAA0BH,EAAsBC,GAE5C,IAAMS,EAAY1C,EAAgBiC,GAElC,GAAID,EAAW,CACX,IAAMa,EAAoBb,EAAUc,uBAAyB,CAAC,EACxDC,EAAyBf,EAAUgB,4BAA8B,CAAC,EAExEtD,IAASuC,GAAY,SAACgB,GAClB,IAAMrD,EAAOiD,EAAkBI,IAAe,EACxCpD,EAAYkD,EAAuBE,IAAe,EAExDP,EAAUO,GAAYnD,MAAQF,EAC9B8C,EAAUO,GAAYlD,MAAQF,EAAYD,CAC9C,GACJ,CAEA,MAAO,CACH8C,UAAWA,EAEnB,CAkGmCQ,CAAiBlB,EAAWC,GAAYS,UACjEN,EAjGV,SAA2BJ,EAAsBC,GAE7C,IAAMS,EAAY1C,EAAgBiC,GAElC,GAAID,EAAW,CACX,IAAMmB,EAAuBnB,EAAUoB,0BAA4B,CAAC,EAEpE1D,IAASuC,GAAY,SAACgB,GAAgB,IAADI,EAAAC,EAC3BC,GAAuC,QAAhCF,EAAAF,EAAqBF,UAAW,IAAAI,OAAA,EAAhCA,EAAkCG,iBAAkB,EAC3DC,GAA2C,QAAhCH,EAAAH,EAAqBF,UAAW,IAAAK,OAAA,EAAhCA,EAAkCI,qBAAsB,EAEzEhB,EAAUO,GAAYnD,MAAQyD,EAC9Bb,EAAUO,GAAYlD,MAAQ0D,CAClC,GACJ,CAEA,MAAO,CACHf,UAAWA,EAEnB,CA8E2BiB,CAAkB3B,EAAWC,GAAYS,UAC1DL,EA7EV,SAA4BL,EAAsBC,GAE9C,IAAMS,EAAY1C,EAAgBiC,GAElC,GAAID,EAAW,CACX,IAAMmB,EAAuBnB,EAAUoB,0BAA4B,CAAC,EAEpE1D,IAASuC,GAAY,SAACgB,GAAgB,IAADW,EAAAC,EAC3BN,GAAuC,QAAhCK,EAAAT,EAAqBF,UAAW,IAAAW,OAAA,EAAhCA,EAAkCE,kBAAmB,EAC5DL,GAA2C,QAAhCI,EAAAV,EAAqBF,UAAW,IAAAY,OAAA,EAAhCA,EAAkCE,sBAAuB,EAE1ErB,EAAUO,GAAYnD,MAAQyD,EAC9Bb,EAAUO,GAAYlD,MAAQ0D,CAClC,GACJ,CAEA,MAAO,CACHf,UAAWA,EAEnB,CA0D4BsB,CAAmBhC,EAAWC,GAAYS,UAE9DR,EACO1E,IAAKyE,GAAY,SAACgB,GACrB,IAAMvC,EAAewB,EAAsBe,GAAYnD,MACjDa,EAAeuB,EAAsBe,GAAYlD,MACjDkE,EAAgB9B,EAAuBc,GAAYlD,MACnDmE,EAAgBD,EAAgBtD,EAEhCwD,EAAe/B,EAAea,GAAYnD,MAC1CsE,EAAmBhC,EAAea,GAAYlD,MAC9CsE,EAAgBhC,EAAgBY,GAAYnD,MAC5CwE,EAAoBjC,EAAgBY,GAAYlD,MAEtD,MAAO,CACHwE,KAAwB,IAAlBN,EACNhB,WAAYA,EACZvC,aAAc,CACV9C,KACIgD,EAAAA,EAAOC,OAAc,MAAEH,GACvB,MACAE,EAAAA,EAAOC,OAAc,MAAEF,GAC3BG,SAAWJ,EAAeC,EAAgB,KAE9CyB,eAAgB,CACZtB,UAAU0D,EAAAA,EAAAA,GACNL,EACAC,EACA,QACAK,EAAAA,IAEJF,KAAMH,EAAmB,GAE7B/B,gBAAiB,CACbvB,UAAU0D,EAAAA,EAAAA,GACNH,EACAC,EACA,QACAG,EAAAA,IAEJF,KAAMD,EAAoB,GAE9BL,cAAeA,EACfC,cAAAA,EAER,IAGG,IC5NH,OACItH,EAAAA,EAAAA,MAAC8H,EAAAA,SAAQ,CAAA5H,SAAA,EACLF,EAAAA,EAAAA,MAAA,SAAAE,SAAA,EACIC,EAAAA,EAAAA,KAAA,SAAAD,UACIF,EAAAA,EAAAA,MAAA,MAAAE,SAAA,EACIC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,0BAA0BlE,SAAC,YAC5CC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,4BAA6B7D,MAAM,aAAYL,SAAC,wBAGjEC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,6BAA6BlE,SAAC,oBAC/CC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,uBACjBjE,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,8BAA+B7D,MAAM,aAAYL,SAAC,6BAGnEC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,+BAAgC7D,MAAM,aAAYL,SAAC,mCAK5EC,EAAAA,EAAAA,KAAA,SAAAD,SACKyF,EAAUoC,KACP,SAAC7C,GAAI,YACqB,IAAdA,EAAKyC,MAAwBzC,EAAKyC,QACtC3H,EAAAA,EAAAA,MAAA,MAAAE,SAAA,EACIC,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,0BAA0BlE,SACtC8D,EAAAA,EAAOC,OAAsB,cAAEiB,EAAKmB,eAEzClG,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,4BAA4BlE,UACzCC,EAAAA,EAAAA,KAACgF,EAAAA,EAAQ,CACLJ,MAAOG,EAAKpB,aAAaI,SACzBlD,KAAMkE,EAAKpB,aAAa9C,KACxBtB,MAAO,eAGfS,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,6BAA6BlE,SACzC8D,EAAAA,EAAOC,OAAc,MAAEiB,EAAKmC,kBAEjClH,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,oBAAoBlE,SAChCgF,EAAKoC,gBACFnH,EAAAA,EAAAA,KAAC6H,EAAAA,EAAW,CAACC,aAAa,qBAGlC9H,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,8BAA8BlE,SAC1CgF,EAAKM,eAAemC,MACjBxH,EAAAA,EAAAA,KAACgF,EAAAA,GAAQ+C,EAAAA,EAAAA,GAAA,GAAKhD,EAAKM,eAAetB,WAElCF,EAAAA,EAAOC,OAAOkE,YAGtBhI,EAAAA,EAAAA,KAAA,MAAIF,UAAWmE,EAAE,+BAA+BlE,SAC3CgF,EAAKO,gBAAgBkC,MAClBxH,EAAAA,EAAAA,KAACgF,EAAAA,GAAQ+C,EAAAA,EAAAA,GAAA,GAAKhD,EAAKO,gBAAgBvB,WAEnCF,EAAAA,EAAOC,OAAOkE,aA9BjBjD,EAAKmB,WAkCjB,UAIjBlG,EAAAA,EAAAA,KAAA,SACC6E,KAAKoD,4BAGlB,GAAC,CAAAtD,IAAA,SAAAC,MAED,WACI,OACI5E,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,EAAE,cAAclE,UAC5BC,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,EAAE,oBAAoBlE,SAAE8E,KAAKqD,qBAGzD,KAAChE,CAAA,CAhH6B,CAASiE,EAAAA,W,kMCrBtBC,GAAc,SAAAjE,IAAAC,EAAAA,EAAAA,GAAAgE,EAAAjE,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAA8D,GAAA,SAAAA,IAAA,OAAA7D,EAAAA,EAAAA,GAAA,KAAA6D,GAAA/D,EAAAG,MAAA,KAAAC,UAAA,CA+B9B,OA/B8BC,EAAAA,EAAAA,GAAA0D,EAAA,EAAAzD,IAAA,SAAAC,MAY/B,WACI,IAAAW,EAAmDV,KAAKC,MAAjDjE,EAAI0E,EAAJ1E,KAAMwH,EAAe9C,EAAf8C,gBAAiBC,EAAO/C,EAAP+C,QAASC,EAAQhD,EAARgD,SAEvC,OACIvI,EAAAA,EAAAA,KAACZ,GAAAA,EAAO,CACJG,MAAM,OACNI,QAAS,CAACkB,EAAMwH,GAChBzI,QAAS,CACL,CACIiB,KAAM,MACNC,SAAUwH,GAEd,CACIzH,KAAM,SACNC,SAAUyH,KAK9B,KAACH,CAAA,CA/B8B,CAASD,EAAAA,WAAvBC,GAQVI,aAAe,CAClBH,gBAAiB,kB,gBCHnBI,GAAU,IAAIC,GAAAA,EAEdC,GAAa,SAAAxE,IAAAC,EAAAA,EAAAA,GAAAuE,EAAAxE,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAqE,GAAA,SAAAA,IAAA,IAAAC,GAAArE,EAAAA,EAAAA,GAAA,KAAAoE,GAAA,QAAAE,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GA0C6E,OA1C7EL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KASfK,MAAQ,CACJC,oBAAoB,EACpBC,WAAOC,GACVX,EAEDY,aAAe,WACX,IAAAjE,EAAoCqD,EAAK9D,MAAlC2E,EAAOlE,EAAPkE,QAASC,EAAgBnE,EAAhBmE,kBAEhBC,EAAAA,GAAAA,IAAcF,EAAQ/F,MACjBkG,MAAK,WACFhB,EAAKiB,SAAS,CACVC,YAAa,KAEjBJ,IACAjB,GAAQsB,IAAI,CACRrG,KAAM,iBACNsG,QAAS,IACTzK,MAAO,UACPa,MAAO,wBAA0BqJ,EAAQ/F,MAEjD,IAAE,OACK,SAAC4F,GACJV,EAAKiB,SAAS,CACVP,MAAAA,GAER,IAEJV,EAAKiB,SAAS,CACVP,WAAOC,GAEf,EAACX,EAEDqB,aAAe,kBAAMrB,EAAKiB,SAAS,CAACR,oBAAoB,GAAQ,EAADT,EAC/DsB,kBAAoB,kBAAMtB,EAAKiB,SAAS,CAACR,oBAAoB,EAAMc,kBAAkB,GAAQ,EAADvB,CAAC,CAgC5F,OAhC2FlE,EAAAA,EAAAA,GAAAiE,EAAA,EAAAhE,IAAA,SAAAC,MAE5F,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QACPW,EAAoCvF,KAAKuE,MAAlCC,EAAkBe,EAAlBf,mBAAoBC,EAAKc,EAALd,MAE3B,OACIzJ,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,CAC5BuJ,IACGtJ,EAAAA,EAAAA,KAACqK,EAAAA,EAAK,CAACC,QAAS,6BAA+Bb,EAAQ/F,KAAM4F,MAAOA,IAEvED,IACGrJ,EAAAA,EAAAA,KAACoI,GAAc,CACXvH,MACIhB,EAAAA,EAAAA,MAAA,OAAKC,UAAU,8BAA6BC,SAAA,CAAC,kBACzB0J,EAAQ/F,QAGhC4E,QAASzD,KAAK2E,aACdjB,SAAU1D,KAAKoF,gBAGvBjK,EAAAA,EAAAA,KAACC,GAAAA,EAAM,CACHC,KAAK,IACLC,KAAK,kBACLC,MAAO,SACPC,QAASwE,KAAKqF,kBAAkBnK,SACnC,aAKb,KAAC4I,CAAA,CA1Ec,CAASR,EAAAA,WA6E5B,UAAeoC,EAAAA,EAAAA,IAAQ,KAAM,CAACb,iBAAAA,GAAAA,IAA9B,CAAiDf,I,iPC9E3CzJ,IAAQC,EAAAA,EAAAA,GAAG,uBAeV,SAASqL,GAAenL,GAAsC,IAApCoL,EAAIpL,EAAJoL,KAAMzH,EAAK3D,EAAL2D,MAAO0H,EAAYrL,EAAZqL,aAC1C,OACI1K,EAAAA,EAAAA,KAAC2K,EAAAA,EAAa,CAAA5K,UACVF,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,KAAQa,SAAA,EACpBC,EAAAA,EAAAA,KAAC4K,GAAkB,CACfC,MAAO3L,GAAM,UACbwE,KAAK,eACLoH,UAAU,QACV9H,MAAM,WAEVhD,EAAAA,EAAAA,KAAC+K,GAAuB,CAACF,MAAO3L,GAAM,SAAeuL,KAAAA,EAAMzH,MAAAA,EAAO0H,aAAAA,IACjED,EAAK7C,KAAI,SAACoD,EAAGrK,GACV,OAAOX,EAAAA,EAAAA,KAAC4K,IAAkB7C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAiBiD,GAAC,IAAEN,aAAcA,IAA5B/J,EACpC,QAIhB,CAQA,SAASiK,GAAkBK,GAOK,IAN5BvH,EAAIuH,EAAJvH,KACAoH,EAASG,EAATH,UACA9H,EAAKiI,EAALjI,MACAkI,EAAKD,EAALC,MACAL,EAAKI,EAALJ,MACAH,EAAYO,EAAZP,aAEMS,OACQ5B,IAAV2B,GACIlL,EAAAA,EAAAA,KAAA,QAAMoL,MAAO,CAACF,MAAAA,GAAOnL,UACjBC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAAQ,SAASC,KAAK,YAEhC,KACFC,EACFb,GAAgBc,KAAUV,GAAaJ,EAAaI,GAAaA,EAC/DW,EAAaf,GAAgBc,KAAUxI,GAAS0H,EAAa1H,GAASA,EAE5E,OACInD,EAAAA,EAAAA,MAACW,EAAAA,SAAc,CAAAT,SAAA,EACXC,EAAAA,EAAAA,KAAA,QAAMF,UAAWZ,GAAM,OAAQ2L,GAAO9K,SAAEoL,KACxCnL,EAAAA,EAAAA,KAAA,QAAMF,UAAWZ,GAAM,OAAQ2L,GAAO9K,SAAE2D,KACxC1D,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,YAAa2L,GAAO9K,SAAEwL,KAC5CvL,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,QAAS2L,GAAO9K,SAAE0L,MAGpD,CAMA,SAASV,GAAuBW,GAAoE,IAAlEjB,EAAIiB,EAAJjB,KAAMzH,EAAK0I,EAAL1I,MAAO6H,EAAKa,EAALb,MAAOH,EAAYgB,EAAZhB,aAC5CI,EAAY3H,IAAQsH,GAAM,SAACkB,EAAK5G,GAAI,OAAK4G,EAAM5G,EAAK+F,SAAS,GAAE,GACrE,OAAO9K,EAAAA,EAAAA,KAAC4K,GAAkB,CAAClH,KAAK,QAAagH,aAAAA,EAAcG,MAAAA,EAAOC,UAAAA,EAAW9H,MAAAA,GACjF,C,gBChEM4I,GAASC,GAAAA,EA4Df,SAASC,GAAiBzM,GAOtB,IANA0M,EAAQ1M,EAAR0M,SACAC,EAAU3M,EAAV2M,WACAC,EAAW5M,EAAX4M,YACAnM,EAAST,EAATS,UACA4K,EAAYrL,EAAZqL,aACAwB,EAAc7M,EAAd6M,eAEA,IAAKH,GAAYA,EAASI,cACtB,OAAOtI,EAAAA,EAAOC,OAAOkE,SAGzB,IACI,IAAAoE,EAvER,SAA8BL,EAAUE,EAAaI,GACjD,IAAKN,EACD,MAAO,CAAC,EAGZ,IAAMO,EAAgBD,EAAkBN,GAAU,GAClD,GAAIQ,KAASD,GACT,MAAO,CAAC,EAEZ,IAAAE,EAKIF,EAJAtJ,MAAAA,OAAK,IAAAwJ,EAAG,EAACA,EACTC,EAGAH,EAHAG,aAAYC,EAGZJ,EAFAxB,UAAW6B,OAAkB,IAAAD,EAAG,EAACA,EAAAE,EAEjCN,EADAO,YAAaC,OAAoB,IAAAF,EAAG,EAACA,EAGnC7M,EAAWgM,EAAShM,SACpB4B,EAAQsK,GAAelM,EAAS+I,OAAS,EAAC,CAAIiD,GAAQ5C,QAAA4D,EAAAA,GAAAA,GAAKhN,IAAY,CAACgM,GAExEiB,EAAWC,KAAKC,IAAIP,EAAqBG,EAAsB9J,GAEjEmK,EAAa,EACXC,EAAgB,GAChBC,EAAc,GAgCpB,OA9BA1K,IAAShB,GAAO,SAACoD,EAAMpE,GACnB,IAAIoE,EAAKoH,cAAT,CAIA,IACAmB,EAAyDjB,EAAkBtH,EAD/C,IAAVpE,IAAgBsL,GAC3BnB,EAASwC,EAATxC,UAAW+B,EAAWS,EAAXT,YAAa7J,EAAKsK,EAALtK,MAAOe,EAAQuJ,EAARvJ,SAAUxE,EAAK+N,EAAL/N,MAChDgO,EAAqCC,GAAAA,EAAQC,qBACzC3C,EACA+B,EACAG,EACAzN,GACHmO,GAAAC,EAAAA,GAAAA,GAAAJ,EAAA,GALMK,EAAWF,EAAA,GAAEG,EAAaH,EAAA,GAO3BI,EAAc,CAChBpK,MAAMqK,EAAAA,EAAAA,IAAehJ,GACrB+F,UAAAA,EACA9H,MAAAA,GAEAe,EAAW,GACPkI,GAAelM,EAAS+I,OAAS,IACjCgF,EAAY5C,MAAQ0C,EAAY1C,MAAQU,IAAQ,EAAIuB,KAAgBvB,GAAO9C,SAE/EsE,EAAcY,KAAKJ,EAAaC,GAChCR,EAAYW,KAAKF,IACA,IAAVnN,KAELwM,CAxBN,CA0BJ,IACO,CAACV,aAAAA,EAAcW,cAAAA,EAAeC,YAAaA,EAAarK,MAAAA,EACnE,CAeyEyK,CAC7D1B,EACAE,EACAD,GAHGpH,EAAKwH,EAALxH,MAAO6H,EAAYL,EAAZK,aAAcW,EAAahB,EAAbgB,cAAeC,EAAWjB,EAAXiB,YAAarK,EAAKoJ,EAALpJ,MAKxD,IAAIiL,EAAAA,GAAAA,IAAOrJ,KAAUqJ,EAAAA,GAAAA,IAAOb,GACxB,OAAOvJ,EAAAA,EAAOC,OAAOkE,SAEzB,IAAMkG,EACDd,GAAkBA,EAActE,OAE3BsE,EAAce,QAAO,SAACxC,EAAGV,GAAA,IAAGrG,EAAKqG,EAALrG,MAAK,OAAOwJ,MAAMxJ,GAAS+G,EAAMA,EAAM/G,CAAK,GAAG,GAD3EA,EAEJb,GACF/D,EAAAA,EAAAA,KAACgF,EAAAA,EAAQ,CAACJ,MAAOsJ,EAAeG,MAAOjB,EAAevM,KAAM4L,IAGhE,OAAKR,GAKDjM,EAAAA,EAAAA,KAACsO,GAAAA,EAAO,CACJxO,UAAWA,EACXH,SACIK,EAAAA,EAAAA,KAACwK,GAAe,CAACC,KAAM4C,EAAarK,MAAOA,EAAO0H,aAAcA,IAEpE6D,UAAW,CAAC,QAAS,OAAQ,MAAO,UACpCC,iBAAkBtC,EAAenM,SAEhCgE,IAZEA,CAef,CAAE,MAAO0K,GAEL,OADAC,QAAQpF,MAAMmF,GACP5K,EAAAA,EAAOC,OAAOkE,QACzB,CACJ,CAcO,SAAS2G,GAAuBjD,GAOnC,IANAK,EAAQL,EAARK,SACA6C,EAAalD,EAAbkD,cACArO,EAAImL,EAAJnL,KACA2F,EAAUwF,EAAVxF,WACApG,EAAS4L,EAAT5L,UACAoM,EAAcR,EAAdQ,eAGM2C,EAAkBD,KADJb,EAAAA,EAAAA,IAAehC,GAEnC+C,EAAqCC,GAAAA,GAAmCxO,GAAKyO,EAAAF,EAAtEhL,OAAAA,OAAM,IAAAkL,EAAG,SAAQA,EAAEC,EAAOH,EAAPG,QAKpBvE,EAAe7G,EAAAA,EAAOC,OAAOA,GACnC,OACI9D,EAAAA,EAAAA,KAAC2K,EAAAA,EAAa,CAAA5K,UACVC,EAAAA,EAAAA,KAAC8L,GAAiB,CAEVC,SAAAA,EACAC,WAVG,SAACjH,EAAMmK,GACtB,IAAmBzF,EAAW1E,EAAvBoK,WACP,OAAOF,EAAQxF,EAASyF,EAAWhJ,EACvC,EAQgB+F,YAAa4C,EACbnE,aAAAA,EACA5K,UAAAA,EACAoM,eAAAA,KAKpB,CC3IA,IAAMhN,IAAQC,EAAAA,EAAAA,GAAG,iBAsBXiQ,GAAkB,SAAAC,IAAAjL,EAAAA,EAAAA,GAAAgL,EAAAC,GAAA,IAAAhL,GAAAC,EAAAA,EAAAA,GAAA8K,GAAA,SAAAA,IAAA,IAAAxG,GAAArE,EAAAA,EAAAA,GAAA,KAAA6K,GAAA,QAAAvG,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GAiIlB,OAjIkBL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KACpBK,MAAe,CAAC,EAACR,EA8CjB0G,qBAAuB,SAAAjQ,GAMhB,IALHkQ,EAAQlQ,EAARkQ,SACA3K,EAAKvF,EAALuF,MAKO4K,EAAW5G,EAAK9D,MAAhB0K,QACP,OACIxP,EAAAA,EAAAA,KAACyP,GAAAA,EAAY,CACT7K,MAAOA,EACP2K,SAAUA,EACV5N,MAAOlB,IAAK+O,GAAS,SAAC5K,GAClB,MAAO,CACHA,MAAAA,EACA/D,KAAM+D,EAEd,IACA8K,YAAa,oBACbC,MAAM,OAGlB,EAAC/G,EAEDgH,gBAAkB,SAACnG,GACf,IAAOoG,EAAkBjH,EAAK9D,MAAvB+K,eACP,GAAIpG,GAAWA,IAAYoG,EACvB,MAAO,mCAGf,EAACjH,EAYDkH,cAAgB,WAAmB,IAAlBrG,EAAOhF,UAAAqE,OAAA,QAAAS,IAAA9E,UAAA,GAAAA,UAAA,GAAG,GACvB,IAAKgF,GAAWA,IAAYsG,GAAAA,GACxB,MAAO,CAAC/M,MAAOgN,IAAUC,MAAOD,KAGpC,IAAmBE,GAAetH,EAAK9D,MAAMqL,aAAa1G,IAAY,CAAC,GAAhE0F,WACP,IAAKe,EACD,MAAO,CAAClN,MAAO,EAAGiN,MAAO,GAG7B,IAAMG,EAAexH,EAAKyH,kBAC1B,MAAO,CACHrN,MAAOsN,GAAAA,GAAMC,SAASL,EAAaM,GAAAA,GAA0BJ,GAC7DrN,MAAOuN,GAAAA,GAAMC,SAASL,EAAaO,GAAAA,GAAyBL,GAC5DH,MAAOK,GAAAA,GAAMC,SAASL,EAAaQ,GAAAA,GAAmCN,GACtEO,mBAAoBL,GAAAA,GAAMC,SACtBL,EACAU,GAAAA,GAAgCR,GAEpCS,wBAAyBP,GAAAA,GAAMC,SAASL,EAAaY,GAAAA,IAE7D,EAAClI,EAMDmI,iBAAmB,WACfnI,EAAKiB,SAAS,CAACmH,YAAapI,EAAKQ,MAAM4H,YAC3C,EAACpI,EAEDqI,cAAgB,SAACC,EAAkBC,EAAmBC,GAClD,IAAA7L,EAA0CqD,EAAK9D,OAC/CuM,EADsB9L,EAAf8L,iBACS,CACZrO,MAAOkO,EACPC,UAAAA,EACA1H,QAJkClE,EAAdsK,eAKpBuB,kBAAAA,EACAhB,aAAcxH,EAAKyH,mBAE3B,EAACzH,CAAC,CAWD,OAXAlE,EAAAA,EAAAA,GAAA0K,EAAA,EAAAzK,IAAA,SAAAC,MA9HD,WACI,IAAA0M,EAA+EzM,KAAKC,MAA7E1E,EAAKkR,EAALlR,MAAOG,EAAI+Q,EAAJ/Q,KAAM2F,EAAUoL,EAAVpL,WAAY2J,EAAcyB,EAAdzB,eAAgBjB,EAAa0C,EAAb1C,cAAeuB,EAAYmB,EAAZnB,aACxDrM,EAAUiL,GAAAA,GAAmCxO,GAA7CuD,OACAkN,EAAcnM,KAAKuE,MAAnB4H,WACAhO,EAAS6B,KAAKiL,cAAcD,GAA5B7M,MACP,OACInD,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,KAAQa,SAAA,EACpBF,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,GAAM,SAASa,SAAA,EAC3BC,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,QAAQa,SAAEK,KAChCJ,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,YAAYa,UAC9BC,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB5C,SAAUoE,EAAaN,GACvBjB,cAAeA,EACfrO,KAAMA,EACN2F,WAAYA,EACZpG,UAAWZ,GAAM,oBACjBgN,eAAgBhN,GAAM,+BAG9Bc,EAAAA,EAAAA,KAACuR,GAAAA,EAAa,CACVrG,MAAM,YACNpL,UAAWZ,GAAM,QACjBmB,QAASwE,KAAKkM,iBAAiBhR,UAE/BC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAAS,gBAGtB2F,IACGhR,EAAAA,EAAAA,KAACwR,GAAAA,EAAmB,CAChB1N,OAAQA,EACRd,MAAOA,EACPyO,OAAQ5M,KAAKkM,iBACbW,OAAQ7M,KAAKoM,cACbnB,cAAejL,KAAKiL,cACpBD,eAAgBA,EAChB8B,uBAAwB9M,KAAK+M,iBAAiB/B,GAC9CgC,oBAAqBhN,KAAKyK,qBAC1BwC,IAAKjN,KAAKkN,mBAK9B,GAAC,CAAApN,IAAA,mBAAAC,MAkCD,SAAiB6E,GAEb,OADkC5E,KAAKC,MAAMqL,aAAa1G,GAAnD0F,WACY6C,MACvB,GAAC,CAAArN,IAAA,kBAAAC,MAED,WACI,IAAAqN,EAA2BpN,KAAKC,MAAzBvE,EAAI0R,EAAJ1R,KAAM2F,EAAU+L,EAAV/L,WACb,OAAQA,EAAiB,GAAAiD,OAAM5I,EAAI,KAAA4I,OAAIjD,GAAlB3F,CACzB,GAAC,CAAAoE,IAAA,iBAAAC,MAyBD,WAA8B,IAADsN,EAAdzI,EAAOhF,UAAAqE,OAAA,QAAAS,IAAA9E,UAAA,GAAAA,UAAA,GAAG,GACrB,OAAuC,QAAvCyN,EAAOrN,KAAKC,MAAMqL,aAAa1G,UAAQ,IAAAyI,OAAA,EAAhCA,EAAkC/C,UAC7C,GAAC,CAAAxK,IAAA,eAAAC,MAiBD,WACI,IAAOiL,EAAkBhL,KAAKC,MAAvB+K,eACPsC,EAKItN,KAAKiL,cAAcD,GAAeuC,EAAAD,EAJlCpP,MAAAA,OAAK,IAAAqP,EAAG,EAACA,EAAAC,EAAAF,EACTlC,MAAAA,OAAK,IAAAoC,EAAG,EAACA,EAAAC,EAAAH,EACTxB,mBAAAA,OAAkB,IAAA2B,EAAG,EAACA,EAG1B,OAF2BH,EAAvBtB,wBAE6BZ,EAAQlN,EAAQ4N,CACrD,KAACvB,CAAA,CA5ImB,CAAS5O,EAAAA,WA+IjC,SAAS+R,GAAazN,GAClB,IAAM9D,GAAWC,EAAAA,EAAAA,MACX2N,GAAgBzN,EAAAA,EAAAA,IAAYkB,EAAAA,IAC5B8N,GAAehP,EAAAA,EAAAA,IAAYqR,EAAAA,IAE3BC,EAAiBjS,EAAAA,aACnB,SAACkS,GACG1R,EC/JL,SAAyB0R,GAC5B,OAAO,SAAC1R,GACJ,IAAM2R,EAAcD,EAAOjJ,QAAU,IAAMiJ,EAAOtC,aAClD,OAAOwC,EAAAA,EAAAA,IA9Bf,SAA6BF,GACzB,IAAO1P,EAA8D0P,EAA9D1P,MAAOmO,EAAuDuB,EAAvDvB,UAAW1H,EAA4CiJ,EAA5CjJ,QAAS2G,EAAmCsC,EAAnCtC,aAAcgB,EAAqBsB,EAArBtB,kBAC1CyB,EAAUzC,EAAa0C,QAAQ,MAAO,KAC5C,OAAK3B,EAGAC,EAEMD,EAAY,EACZ4B,KAAAA,GAAMC,yBAAyB,CAClCC,WAAY,CACRC,eAAgB9B,EAChB+B,oBAAqB1J,EACrB2J,eAAgBC,KAAQ,CAAC,EAAGR,GAAS,kBAAM1B,CAAS,OAIrD4B,KAAAA,GAAMC,yBAAyB,CAClCC,WAAY,CACRC,eAAgBzJ,EAChB0J,oBAAqB/B,EACrBgC,eAAgBC,KAAQ,CAAC,EAAGR,GAAS,kBAAO1B,CAAS,QAdtDmC,EAAAA,GAAAA,IAAgBtQ,EAAOyG,EAAS+G,GAAAA,GAA0BJ,GAH1DmD,QAAQC,SAqBvB,CAKuCC,CAAoBf,GAAS,CACxDC,YAAAA,EACAe,eAAgB,yBACjB9J,MAAK,WACJ5I,GAAS2S,EAAAA,GAAAA,IAAkBjB,EAAOjJ,UAClCzI,GAAS4S,EAAAA,GAAAA,MACb,GACJ,CACJ,CDoJqBvC,CAAgBqB,GAC7B,GACA,CAAC1R,IAGCwO,GAAUrO,EAAAA,EAAAA,IAAY0S,EAAAA,IAE5B,OACI7T,EAAAA,EAAAA,KAACoP,IAAkBrH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACXjD,GAAK,IACT8J,cAAeA,EACfuB,aAAcA,EACdkB,gBAAiBoB,EACjBjD,QAASA,IAGrB,CAEA,SAAehP,EAAAA,KAAW+R,I,2BEzN1B,SAASuB,KACL,IAAMC,GAAa5S,EAAAA,EAAAA,IAAY6S,EAAAA,IACzBvK,GAAUtI,EAAAA,EAAAA,IAAY8S,EAAAA,IACtBC,GAAkB/S,EAAAA,EAAAA,IAAYgT,GAAAA,IAEpC,OACInU,EAAAA,EAAAA,KAAAoU,EAAAA,SAAA,CAAArU,SACKsU,GAAAA,GAAUC,oCAAoC,CAC3CP,WAAAA,EACAQ,kBAAmB9K,EAAQ+K,YAC3BN,gBAAAA,KAIhB,CAEA,SAAe1T,EAAAA,KAAWsT,ICtB+C,IAQpDW,GAAY,SAAAtQ,IAAAC,EAAAA,EAAAA,GAAAqQ,EAAAtQ,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAmQ,GAAA,SAAAA,IAAA,OAAAlQ,EAAAA,EAAAA,GAAA,KAAAkQ,GAAApQ,EAAAG,MAAA,KAAAC,UAAA,CAc5B,OAd4BC,EAAAA,EAAAA,GAAA+P,EAAA,EAAA9P,IAAA,SAAAC,MAC7B,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QAEP,OACI5J,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,EAC7BC,EAAAA,EAAAA,KAAC8T,GAA2B,KAC5B9T,EAAAA,EAAAA,KAACuS,GAAY,CACTnS,MAAO,QACPyP,eAAgBpG,EAAQ/F,KACxBnD,KAAMmU,GAAAA,GAAoBC,eAI1C,KAACF,CAAA,CAd4B,CAAStM,EAAAA,WCDrByM,GAAa,SAAAzQ,IAAAC,EAAAA,EAAAA,GAAAwQ,EAAAzQ,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAsQ,GAAA,SAAAA,IAAA,OAAArQ,EAAAA,EAAAA,GAAA,KAAAqQ,GAAAvQ,EAAAG,MAAA,KAAAC,UAAA,CAc7B,OAd6BC,EAAAA,EAAAA,GAAAkQ,EAAA,EAAAjQ,IAAA,SAAAC,MAC9B,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QAEP,OACI5J,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,EAC7BC,EAAAA,EAAAA,KAAC8T,GAA2B,KAC5B9T,EAAAA,EAAAA,KAACuS,GAAY,CACTnS,MAAO,SACPyP,eAAgBpG,EAAQ/F,KACxBnD,KAAMmU,GAAAA,GAAoBG,gBAI1C,KAACD,CAAA,CAd6B,CAASzM,EAAAA,W,mCCGrCjJ,IAAQC,EAAAA,EAAAA,GAAG,+BAoBX2V,GAAa,SAAA3Q,IAAAC,EAAAA,EAAAA,GAAA0Q,EAAA3Q,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAwQ,GAAA,SAAAA,IAAA,IAAAlM,GAAArE,EAAAA,EAAAA,GAAA,KAAAuQ,GAAA,QAAAjM,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GAOb,OAPaL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KACfK,MAAQ,CACJ2L,gBAAgB,GACnBnM,EAEDoM,cAAgB,WACZpM,EAAKiB,SAAS,CAACkL,gBAAiBnM,EAAKQ,MAAM2L,gBAC/C,EAACnM,CAAC,CAuCD,OAvCAlE,EAAAA,EAAAA,GAAAoQ,EAAA,EAAAnQ,IAAA,gBAAAC,MAED,SAAc6E,EAA2BwL,GACrC,OAAOA,EAAQrN,KAAI,SAAC1B,GAAU,OAC1BlG,EAAAA,EAAAA,KAACuS,GAAY,CAETnS,MAAOyD,EAAAA,EAAOC,OAAsB,cAAEoC,GAAc,UACpD2J,eAAgBpG,EAAQ/F,KACxBnD,KAAMmU,GAAAA,GAAoBQ,sBAC1BhP,WAAYA,GAJPA,EAKP,GAEV,GAAC,CAAAvB,IAAA,SAAAC,MAED,WACI,IAAAW,EAA8BV,KAAKC,MAA5B2E,EAAOlE,EAAPkE,QACD0L,EADoB5P,EAAVL,WAC2BkQ,QAAO,SAACrQ,GAAI,MAAc,UAATA,CAAgB,IAC5EsQ,EAAwBC,KACpBH,GACA,SAACjP,GAAU,OAAKuD,EAAQ9D,UAAUO,EAAW,IAChDqP,GAAA5H,EAAAA,GAAAA,GAAA0H,EAAA,GAHMG,EAAOD,EAAA,GAAEE,EAAIF,EAAA,GAKbR,EAAkBlQ,KAAKuE,MAAvB2L,eACHW,EAAc,GAIlB,OAHID,EAAK3M,OAAS,IACd4M,EAAcX,EAAiB,oBAAsB,aAGrDlV,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,KAAQa,SAAA,EACpBC,EAAAA,EAAAA,KAAC8T,GAA2B,IAC3BjP,KAAK8Q,cAAclM,EAAS+L,GAC5BE,IACG1V,EAAAA,EAAAA,KAAA,OAAKF,UAAWZ,GAAM,WAAY,oBAAoBa,UAClDC,EAAAA,EAAAA,KAACuR,GAAAA,EAAa,CAAClR,QAASwE,KAAKmQ,cAAcjV,SAAE2V,MAGpDX,GAAkBlQ,KAAK8Q,cAAclM,EAASgM,KAG3D,KAACX,CAAA,CA9Cc,CAAS3M,EAAAA,WAqD5B,UAAeoC,EAAAA,EAAAA,KAJS,SAACnB,GAAgB,MAAM,CAC3ClE,YAAY0Q,EAAAA,GAAAA,IAAcxM,GAC7B,GAED,CAAwC0L,I,4BCpElC5V,IAAQC,EAAAA,EAAAA,GAAG,2BAQX0W,GAAc,SAAA1R,IAAAC,EAAAA,EAAAA,GAAAyR,EAAA1R,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAuR,GAAA,SAAAA,IAAA,OAAAtR,EAAAA,EAAAA,GAAA,KAAAsR,GAAAxR,EAAAG,MAAA,KAAAC,UAAA,CAmCf,OAnCeC,EAAAA,EAAAA,GAAAmR,EAAA,EAAAlR,IAAA,qBAAAC,MAChB,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QAEP,OACIzJ,EAAAA,EAAAA,KAACuS,GAAY,CACTnS,MAAO,UACPG,KAAMmU,GAAAA,GAAoBoB,aAC1BjG,eAAgBpG,EAAQ/F,MAGpC,GAAC,CAAAiB,IAAA,sBAAAC,MAED,WACI,IAAO6E,EAAW5E,KAAKC,MAAhB2E,QAEP,OACIzJ,EAAAA,EAAAA,KAACuS,GAAY,CACTnS,MAAO,uBACPG,KAAMmU,GAAAA,GAAoBqB,qBAC1BlG,eAAgBpG,EAAQ/F,MAGpC,GAAC,CAAAiB,IAAA,SAAAC,MAED,WACI,IAAOoR,EAAyBnR,KAAKC,MAA9BkR,sBACP,OACInW,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,EAC7BC,EAAAA,EAAAA,KAAC8T,GAA2B,IAC3BkC,GAAyBnR,KAAKoR,qBAC9BD,GAAyBnR,KAAKqR,uBAC/BlW,EAAAA,EAAAA,KAACmW,GAAsB,MAGnC,KAACN,CAAA,CAnCe,CAAS1N,EAAAA,WA8C7B,UAFkBoC,EAAAA,EAAAA,KANM,SAACnB,GACrB,MAAO,CACH4M,uBAAuBI,EAAAA,GAAAA,IAAmDhN,GAElF,GAIA,CAAyByM,IAElB,SAASM,GAAsB9W,GAAqC,IAAnCS,EAAST,EAATS,UAC9BuW,GAAiBlV,EAAAA,EAAAA,IAAYmV,GAAAA,IAE7BC,GAAWpV,EAAAA,EAAAA,IAAYqV,GAAAA,IACvBC,GAAUtV,EAAAA,EAAAA,IAAYuV,GAAAA,IAE5B,OAAQL,GACJxW,EAAAA,EAAAA,MAAA,OAAKC,UAAWA,EAAUC,SAAA,EACtBF,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,GAAM,WAAWa,SAAA,CAAC,qGAEb,KACjBC,EAAAA,EAAAA,KAAC2W,GAAAA,EAAI,CAACC,IAAG,IAAAzN,OAAMsN,EAAO,KAAAtN,OAAI0N,GAAAA,GAAKC,qBAAuBC,QAAM,EAAAhX,SAAC,wBAEtD,OAGVwW,IACGvW,EAAAA,EAAAA,KAAA,OAAAD,UACIC,EAAAA,EAAAA,KAAC2W,GAAAA,EAAI,CAACC,IAAKL,EAASxW,SAAC,sBAZZ,IAiB7B,C,gBChFe,SAASiX,GAAoBlS,GACxC,IAAMmS,GAAQ9V,EAAAA,EAAAA,IAAY+V,EAAAA,IACnBzN,EAAW3E,EAAX2E,QAEP,OACI5J,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBC,SAAA,EAC7BC,EAAAA,EAAAA,KAAC8T,GAA2B,IAC3BrT,IAAKwW,GAAO,SAACE,GACV,OACInX,EAAAA,EAAAA,KAACuS,GAAY,CAETnS,MAAO0D,GAAAA,EAAOsT,SAASD,GACvB5W,KAAMmU,GAAAA,GAAoB2C,cAC1BxH,eAAgBpG,EAAQ/F,KACxBwC,WAAYiR,GAJPA,EAOjB,MAGZ,C,gBCrBMlT,I,UAAI/E,EAAAA,EAAAA,GAAM,oBAEKoY,GAAM,SAAAnT,IAAAC,EAAAA,EAAAA,GAAAkT,EAAAnT,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAgT,GAAA,SAAAA,IAAA,IAAA1O,GAAArE,EAAAA,EAAAA,GAAA,KAAA+S,GAAA,QAAAzO,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GAYrB,OAZqBL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KAMvBK,MAAQ,CACJmO,UAAWC,GAAAA,GAAYC,SAC1B7O,EAED8O,YAAc,SAAC9S,GACXgE,EAAKiB,SAAS,CAAC0N,UAAW3S,GAC9B,EAACgE,CAAC,CAkCD,OAlCAlE,EAAAA,EAAAA,GAAA4S,EAAA,EAAA3S,IAAA,SAAAC,MAED,WACI,IAAO2S,EAAa1S,KAAKuE,MAAlBmO,UACA9N,EAAW5E,KAAKC,MAAhB2E,QAEP,OACI5J,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,QAAQlE,SAAA,EACtBC,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,gBAAgBlE,UAC9BC,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,aAAalE,UAC3BC,EAAAA,EAAAA,KAAC2X,GAAAA,EAAI,CACDhW,MAAOiW,GAAAA,GACP1X,KAAK,IACL2X,OAAO,WACPC,OAAQP,EACRG,YAAa7S,KAAK6S,mBAI9B1X,EAAAA,EAAAA,KAAC2K,EAAAA,EAAa,CAAA5K,UACVF,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,eAAgB,iBAAiBlE,SAAA,CAC9CwX,IAAcC,GAAAA,GAAYC,UAAWzX,EAAAA,EAAAA,KAAC+X,GAAAA,EAAc,CAACtO,QAASA,IAC9D8N,IAAcC,GAAAA,GAAW,SAAWxX,EAAAA,EAAAA,KAAC2I,GAAa,CAACc,QAASA,IAC5D8N,IAAcC,GAAAA,GAAYQ,QAAShY,EAAAA,EAAAA,KAACyU,GAAY,CAAChL,QAASA,IAC1D8N,IAAcC,GAAAA,GAAYS,SAAUjY,EAAAA,EAAAA,KAAC4U,GAAa,CAACnL,QAASA,IAC5D8N,IAAcC,GAAAA,GAAYL,SAAUnX,EAAAA,EAAAA,KAAC8U,GAAa,CAACrL,QAASA,IAC5D8N,IAAcC,GAAAA,GAAYU,UAAWlY,EAAAA,EAAAA,KAAC6V,GAAc,CAACpM,QAASA,IAC9D8N,IAAcC,GAAAA,GAAYW,eACvBnY,EAAAA,EAAAA,KAACgX,GAAmB,CAACvN,QAASA,WAMtD,KAAC6N,CAAA,CA9CsB,CAASnP,EAAAA,W,wBCP9BjJ,IAAQC,EAAAA,EAAAA,GAAG,qBAMjB,SAASiZ,GAAa/Y,GAAoB,IAADgZ,EAAjB5O,EAAOpK,EAAPoK,QACd6O,EAAiC,CAAC,EAQxC,OANAC,EAAAA,GAAAA,IAAoB9O,SAAoB,QAAb4O,EAAP5O,EAAS+K,mBAAW,IAAA6D,OAAA,EAApBA,EAAsBG,oCAAoC,SAAC5T,EAAO6T,GAC9E7T,EAAQ,IACR0T,EAAOG,GAAQ7T,EAEvB,KAGI/E,EAAAA,EAAAA,MAACW,EAAAA,SAAc,CAAAT,SAAA,EACXF,EAAAA,EAAAA,MAAA,OAAKC,UAAWZ,GAAM,iBAAiBa,SAAA,CAAC,kDAEpCC,EAAAA,EAAAA,KAAA,SAAM,uCAEVA,EAAAA,EAAAA,KAAC0Y,GAAAA,GAAS,CACN/W,MAAOlB,IAAK6X,GAAQ,SAAC1T,EAAO6T,GACxB,MAAO,CACH9T,IAAK8T,EACLE,MAAOC,GAAaH,GACpB7T,OAAO5E,EAAAA,EAAAA,KAAAoU,EAAAA,SAAA,CAAArU,SAAG6E,IAElB,QAIhB,CAEA,SAAepE,EAAAA,KAAW4X,IAE1B,SAASQ,GAAaH,GAClB,OAAOA,EAAKI,MAAM,KAAKjR,IAAI9D,GAAAA,EAAOgV,eAAeC,KAAK,MAC1D,C,wFCjCM7Z,IAAQC,EAAAA,EAAAA,GAAG,gCAMX6Z,GAAyD,CAC3D,CACItV,KAAM,OACNuV,OAAQ,GACRC,UAAU,EACVvJ,MAAO,IACPwJ,OAAQ,SAACC,GACL,IAAA/Z,GAAsB+Z,aAAG,EAAHA,EAAKA,MAAO,CAAC,EAA5B1V,EAAIrE,EAAJqE,KAAM2V,EAAKha,EAALga,MACb,OAAOrZ,EAAAA,EAAAA,KAAA,QAAMF,UAAWZ,GAAM,OAAQ,CAACma,MAAOA,IAAetZ,SAAE2D,GACnE,GAEJ,CACIA,KAAM,QACNuV,OAAQ,QACRC,UAAU,EACVvJ,MAAO,IACP2J,SAAU,SAACF,GACP,IAAOnJ,EAAiBmJ,EAAjBnJ,MAAOnM,EAAUsV,EAAVtV,OACd,OAAOD,EAAAA,EAAOC,OAAOA,GAAQmM,EACjC,GAEJ,CACIvM,KAAM,QACNuV,OAAQ,QACRC,UAAU,EACVvJ,MAAO,IACP2J,SAAU,SAACF,GACP,IAAOvW,EAAgBuW,EAAhBvW,KAAMiB,EAAUsV,EAAVtV,OACb,OAAOD,EAAAA,EAAOC,OAAOA,GAAQjB,EACjC,GAEJ,CACIa,KAAM,OACNuV,OAAQ,OACRC,UAAU,EACVvJ,MAAO,IACP2J,SAAU,SAACF,GACP,IAAOG,EAAgBH,EAAhBG,KAAMzV,EAAUsV,EAAVtV,OACb,OAAOD,EAAAA,EAAOC,OAAOA,GAAQyV,EACjC,IAIR,SAASC,GAA0BvO,GAAsB,IAApBnL,EAASmL,EAATnL,UAC3BkB,GAAWC,EAAAA,EAAAA,MAEXwI,GAAUtI,EAAAA,EAAAA,IAAYkB,EAAAA,IACtBV,GAAQR,EAAAA,EAAAA,IAAYsY,EAAAA,IACpBC,GAAcvY,EAAAA,EAAAA,IAAYwY,GAAAA,IAE1BC,EAAWpZ,EAAAA,aACb,SAACoE,GAEGiV,OAAOC,cAAc,IAAIC,MAAM,WAC/B/Y,GAASgZ,EAAAA,GAAAA,KAA8CpV,GAC3D,GACA,CAAC5D,IAGL,OAAKyI,GAAY9H,SAAAA,EAAOmH,QAKpB9I,EAAAA,EAAAA,KAACia,EAAAA,EAAkB,CACfvW,KAAM,uBACN5D,UAAWZ,GAAM,KAAMY,GACvBI,KAAMga,GAAAA,GACNC,WAAYT,EACZE,SAAUA,EAAS7Z,UAEnBC,EAAAA,EAAAA,KAACoa,GAAAA,GAAW,CACRpB,QAASA,GACTtY,KAAMiB,EACN0Y,YAAU,EACVva,UAAWZ,GAAM,SACjBwD,SAAU,CACN4X,gBAAgB,GAEpBC,aAAc,SAAA7O,GAAc,IAAZ2N,EAAK3N,EAAL2N,MACZ,OAAQA,EAAana,GAAM,MAAO,CAACma,MAAOmB,OAAOnB,KAAjC,EACpB,MArBD,IAyBf,CAEA,SAAe7Y,EAAAA,KAAWgZ,I,uCC5F1B,SAASiB,GAAIpb,GAA0B,IAAxBwB,EAAIxB,EAAJwB,KACX,OACIhB,EAAAA,EAAAA,MAACW,EAAAA,SAAc,CAAAT,SAAA,EACXC,EAAAA,EAAAA,KAAC0a,GAAAA,GAAS,CAAA3a,SAAC,UAAiB,IAAEc,IAG1C,CAEA,SAAS8Z,KACL,IAAM3Z,GAAWC,EAAAA,EAAAA,MACX2Z,GAAOzZ,EAAAA,EAAAA,IAAY0Z,EAAAA,IACnBjW,GAAQzD,EAAAA,EAAAA,IAAY2Z,EAAAA,IACpB7D,GAAQ9V,EAAAA,EAAAA,IAAY+V,EAAAA,IAEpB6D,EAAeva,EAAAA,aACjB,SAACwa,GACGha,GACIia,EAAAA,GAAAA,GAA2B,CACvBC,wBACIF,EAAK,KAGrB,GACA,CAACha,IAGCW,EAAQnB,EAAAA,SAAc,WACxB,OAAOC,IAAKwW,GAAO,SAAClS,GAChB,MAAO,CACHH,MAAOG,EACPlE,MAAMb,EAAAA,EAAAA,KAACya,GAAI,CAAC5Z,KAAMiD,GAAAA,EAAOsT,SAASrS,KAE1C,GACJ,GAAG,CAACkS,IAEJ,MAAgB,kBAAT2D,EAA2B,MAC9B5a,EAAAA,EAAAA,KAAA,QAAAD,UACIC,EAAAA,EAAAA,KAACmb,GAAAA,EAAM,CAACC,SAAUL,EAAcpZ,MAAOA,EAAOiD,MAAO,CAACA,GAAQyW,YAAU,KAGpF,CAEA,SAAe7a,EAAAA,KAAWma,ICiC1B,IAAM1W,IAAI/E,EAAAA,EAAAA,GAAM,YACVoc,GAA2BrX,GAAE,oBAEnC,SAASsX,GAAKlc,GAA0B,IAAxBmc,EAAKnc,EAALmc,MAAOrP,EAAa9M,EAAb8M,cACnB,OAAI8B,EAAAA,GAAAA,IAAOuN,GACA3X,EAAAA,EAAOC,OAAOkE,UAIrBnI,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,SAASlE,SAAA,EACvBC,EAAAA,EAAAA,KAAA,OACIF,UAAWmE,GAAE,OAAQ,CACjBuX,OAAO,EACPC,WAAYtP,IACbpM,SAEF8D,EAAAA,EAAOC,OAAc,MAAE0X,MAE1BrP,IACEnM,EAAAA,EAAAA,KAAA,SAAOF,UAAWmE,GAAE,cAAclE,SAAE8D,EAAAA,EAAOC,OAAe,OAAE0X,OAI5E,CAEA,IAAME,IAA2BC,EAAAA,EAAAA,MAC3BC,IAAiCD,EAAAA,EAAAA,KAA8B,GAE/DE,IAAmCC,EAAAA,EAAAA,IAAQC,EAAAA,EAAgBC,EAAAA,EAAxBF,CAA0CG,EAAAA,GAOnF,SAASC,GAAYV,EAAOrP,GACxB,OACInM,EAAAA,EAAAA,KAAC2K,EAAAA,EAAa,CAAA5K,UACVC,EAAAA,EAAAA,KAACub,GAAK,CAACC,MAAOA,EAAOrP,cAAeA,KAGhD,CAEA,SAASgQ,GAAavX,GAA+B,IAAxBuH,EAAa1H,UAAAqE,OAAA,QAAAS,IAAA9E,UAAA,IAAAA,UAAA,GACtC,OACIzE,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,OAAQ,CAACwX,WAAYtP,IAAgBpM,SAClD8D,EAAAA,EAAOC,OAAe,OAAEc,IAGrC,CAEA,SAASwX,GAAgBnR,GAAU,IAAR2P,EAAI3P,EAAJ2P,KACnBtQ,EAAU,KASd,MARa,WAATsQ,IACAtQ,EACI,qFAEK,eAATsQ,IACAtQ,EAAU,uEAGNA,GAAiBtK,EAAAA,EAAAA,KAACqc,GAAAA,GAAO,CAAAtc,SAAEuK,IAAjB,IACtB,CAAC,IAEKgS,GAAkB,SAAAnY,IAAAC,EAAAA,EAAAA,GAAAkY,EAAAnY,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAgY,GAAA,SAAAA,IAAA,IAAA1T,GAAArE,EAAAA,EAAAA,GAAA,KAAA+X,GAAA,QAAAzT,EAAApE,UAAAqE,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAAxE,UAAAwE,GAglBlB,OAhlBkBL,EAAAvE,EAAA6E,KAAA1E,MAAAH,EAAA,OAAA8E,OAAAJ,KAsKpBwT,mBAAqB,SAAC3X,GAClB,IAAA8G,EAAmB9G,GAAS,CAAC,EAAtB4X,EAAE9Q,EAAF8Q,GAAIC,EAAI/Q,EAAJ+Q,MAEXC,EADsC9T,EAAK9D,MAApC4X,6BACqBF,EAAIC,EACpC,EAAC7T,EAED+T,gCAAkC,SAACC,GACThU,EAAK9D,MAApB+X,cACaC,GAAAA,GAChBlU,EAAK9D,MAAMiY,qCAAqCH,EAAMI,OAAOpY,OAE7DgE,EAAK9D,MAAMmY,0BAA0BL,EAAMI,OAAOpY,MAE1D,EAACgE,EA2ZDsU,kBAAoB,WAChBtU,EAAK9D,MAAMqY,qBAAqB,QACpC,EAACvU,CAAC,CAyCD,OAzCAlE,EAAAA,EAAAA,GAAA4X,EAAA,EAAA3X,IAAA,2BAAAC,MAthBD,WACI,IAAAW,EAUIV,KAAKC,MATLsY,EAAS7X,EAAT6X,UACAC,EAAS9X,EAAT8X,UACAC,EAAU/X,EAAV+X,WACArY,EAASM,EAATN,UACA5B,EAAkBkC,EAAlBlC,mBACAoC,EAAQF,EAARE,SACAP,EAAUK,EAAVL,WACAqY,EAAehY,EAAfgY,gBACA3O,EAAarJ,EAAbqJ,cAEE4O,EAAWJ,GAAaC,GAAaC,EAE3C,OACItd,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,SAAU,oBAAoBlE,SAC3C6O,GACG5O,EAAAA,EAAAA,KAACwZ,GAA0B,KAE3BxZ,EAAAA,EAAAA,KAACia,EAAAA,EAAkB,CAACvW,KAAK,QAAQxD,KAAMqd,EAAgBxd,SAClDyd,IACGxd,EAAAA,EAAAA,KAACkE,EAAa,CACVe,UAAWA,EACX5B,mBAAoBA,EACpBoC,SAAUA,EACVP,WAAYA,OAOxC,GAAC,CAAAP,IAAA,gBAAAC,MAED,WAAiB,IAAD6Y,EAAA,KACZnM,EASIzM,KAAKC,MARLI,EAAUoM,EAAVpM,WACA2X,EAAWvL,EAAXuL,YACAa,EAAgBpM,EAAhBoM,iBACAC,EAAkBrM,EAAlBqM,mBACAC,EAAuBtM,EAAvBsM,wBACAC,EAAuBvM,EAAvBuM,wBAAuBC,EAAAxM,EACvByM,iBAAgBC,OAAA,IAAAF,EAAe,CAAC,EAACA,EAAdrB,EAAIuB,EAAJvB,KAAMD,EAAEwB,EAAFxB,GAIvByB,EACF/Y,IAC6B,YAA5B0Y,GAAqE,eAA5BA,GAExCM,EAPS5M,EAAX6M,cAQgBrB,GAAAA,GACVpB,GACAE,GAEV,OACI/b,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,UAAW,oBAAoBlE,SAAA,EAC7CC,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,4BAA6B,+BAA+BlE,UAC1EC,EAAAA,EAAAA,KAACoe,EAAAA,GAAiBrW,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACdwH,SAAU1K,KAAK8X,iCACXuB,GAAU,IACdtZ,MAAOiZ,QAGf7d,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,cAAe,+BAA+BlE,UAC5DC,EAAAA,EAAAA,KAACqe,EAAAA,EAAM,CACHC,UAAQ,EACRpe,KAAK,IACLK,KAAK,OACLqE,MAAO8Y,EACPhO,YAAY,aACZH,SAAU1K,KAAKC,MAAMyZ,iBACrBC,UAAW3B,IAAgBC,GAAAA,GAC3B2B,GAAI,2BAGXpK,GAAAA,GAAUqK,wBAAwB,CAC/B5e,UAAWmE,GAAE,qBAAsB,+BACnCW,MAAO,CAAC6X,KAAAA,EAAMD,GAAAA,GACdjN,SAAU1K,KAAK0X,sBAEnBvc,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,eAAgB,+BAA+BlE,UAC7DC,EAAAA,EAAAA,KAACmb,EAAAA,EAAM,CACHvW,MAAO,CAACgZ,GACRe,QAASC,EAAAA,GACTxD,SAAU,SAACJ,GAAI,OAAKyC,EAAK3Y,MAAM+Z,oBAAoB7D,EAAK,GAAG,EAC3DrC,MAAM,QACN8F,GAAG,wBACHK,eAAa,OAGrB9e,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,uBAAwB,+BAA+BlE,SACnEke,GAGEje,EAAAA,EAAAA,KAACmb,EAAAA,EAAM,CACHwD,SAASI,EAAAA,EAAAA,IAAkB7Z,GAC3BN,MAAO,CAAC+Y,GACRvC,SAAU,SAACJ,GAAI,OAAKyC,EAAK3Y,MAAMka,mBAAmBhE,EAAK,GAAG,EAC1DrC,MAAM,UACNmG,eAAa,KAPjB9e,EAAAA,EAAAA,KAAC2a,GAAqB,QAa1C,GAAC,CAAAhW,IAAA,oBAAAC,MAiBD,WACI,IAAOqa,EAAepa,KAAKC,MAApBma,YAEP,OAAOjf,EAAAA,EAAAA,KAACqK,EAAAA,EAAK,CAACf,MAAO2V,GACzB,GAAC,CAAAta,IAAA,YAAAua,IAED,WACI,IAAAjN,EASIpN,KAAKC,MARL8J,EAAaqD,EAAbrD,cACoB1I,EAAU+L,EAA9B0L,mBACAwB,EAAoBlN,EAApBkN,qBACAC,EAAuBnN,EAAvBmN,wBACAC,EAAYpN,EAAZoN,aACA5I,EAAOxE,EAAPwE,QACAyE,EAAuBjJ,EAAvBiJ,wBACAhH,EAAejC,EAAfiC,gBAEEoL,EAAOza,KAEP0a,EAAY,CACd7b,KAAI,SAACqI,EAAUrI,EAAM8b,EAAeC,GAChC,IAAAC,EAAoB3T,EAAbsN,MAGDsG,EAAc,CAACC,YADN,SAFH,IAAAF,EAAG,EAACA,IAIG3a,EAAiCgH,EAA7CoD,WAAkBpP,EAA2BgM,EAA3BhM,SAEzB,GAFoDgM,EAAjBI,cAG/B,OACInM,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,OAAQ,CAACP,MAAM,IAAQ0H,MAAOuU,EAAY5f,UACxDC,EAAAA,EAAAA,KAAA,OACIF,UAAWmE,GAAE,YAAa,CACtB4b,aAAa,IACd9f,SACN,kBAOb,IAAM+f,EAAc/f,GAAYA,EAAS+I,OAAS,EAC5CiX,GACF/f,EAAAA,EAAAA,KAAA,OACIF,UAAWmE,GAAE,eAAgB,CAAC+b,QAASF,IACvCzf,QAASmf,EAAczf,UAEvBC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAASoU,EAAUtF,UAAY,aAAe,eAItD8F,GACFjgB,EAAAA,EAAAA,KAAA,OAAKF,UAAWmE,GAAE,aAAalE,UAC3BC,EAAAA,EAAAA,KAACkgB,EAAAA,EAAW,CAACzW,QAAS1E,EAAKrB,KAAM+S,QAASA,MAI5C0J,EAAiBhB,EAAqBiB,IAAIrb,EAAKrB,MAIrD,OACI7D,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,OAAQ,CAACP,MAAM,IAAQ0H,MAAOuU,EAAY5f,SAAA,CACvDggB,EACAE,GACDjgB,EAAAA,EAAAA,KAAA,OACIF,UAAWmE,GAAE,qBAAsB,CAC/B6T,OAAQqI,IAEZ9f,QAXa,WACrB+e,EAAwBra,EAAKrB,KACjC,EASsC3D,UAE1BC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAAS8U,EAAiB,WAAa,WAEhD9L,GAAAA,GAAUgM,qCAAqC,CAC5CC,cAAerc,GAAE,sBACjBwS,QAAAA,EACAvC,gBAAAA,EACAzK,QAAS1E,EAAKrB,KACd6Q,kBAAmBxP,EAAKyP,gBAIxC,EAEA8D,OAAM,SAACvM,GACH,IAAmBtC,EAAWsC,EAAvBoD,WACAoR,EAAe9W,EAAf8W,YACD1f,EAAO0f,EAAc,EAAIA,EAAc,GAC7C,OACI1f,IACIb,EAAAA,EAAAA,KAACsO,GAAAA,EAAO,CACJC,UAAW,YACX5O,SAASK,EAAAA,EAAAA,KAACoY,GAAa,CAAC3O,QAASA,IAAY1J,UAE7CC,EAAAA,EAAAA,KAAA,QAAMF,UAAWmE,GAAE,SAASlE,SAAEc,KAI9C,EAEA2f,mBAAkB,SAACzU,GACf,OAAOwT,EAAUkB,sBAAsB1U,EAAU7F,EACrD,EAEAua,sBAAqB,SAAC1U,GAClB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBQ,sBAC1BhP,WAAYA,GAGxB,EAEAwa,iBAAgB,SAAC3U,GAEb,OAAOmQ,GADOmD,EAAaqB,iBAAiBxB,IAAInT,GACtBA,EAASI,cACvC,EAEAwU,iBAAgB,SAAC5U,GAGb,OAAOmQ,GAFOmD,EAAasB,iBAAiBzB,IAAInT,GACxBA,EAAjBI,cAEX,EAEAyU,gBAAe,SAAC7U,GACZ,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAauB,gBAAgB1B,IAAInT,GACrBI,EAC9B,EAEA0U,mBAAkB,SAAC9U,GACf,OAAOwT,EAAUuB,sBAAsB/U,EAC3C,EAEA+U,sBAAqB,SAAC/U,GAClB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBC,YAGtC,EAEAoM,iBAAgB,SAAChV,GACb,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAa0B,iBAAiB7B,IAAInT,GACrBI,EAC/B,EAEA6U,iBAAgB,SAACjV,GACb,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAa2B,iBAAiB9B,IAAInT,GACrBI,EAC/B,EAEA8U,gBAAe,SAAClV,GACZ,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAa4B,gBAAgB/B,IAAInT,GACpBI,EAC/B,EAEA+U,oBAAmB,SAACnV,GAChB,OAAOwT,EAAU4B,uBAAuBpV,EAC5C,EAEAoV,uBAAsB,SAACpV,GACnB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBG,aAGtC,EAEAuM,kBAAiB,SAACrV,GACd,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAa+B,kBAAkBlC,IAAInT,GACtBI,EAC/B,EAEAkV,kBAAiB,SAACtV,GACd,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAagC,kBAAkBnC,IAAInT,GACtBI,EAC/B,EAEAmV,iBAAgB,SAACvV,GACb,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAaiC,iBAAiBpC,IAAInT,GACrBI,EAC/B,EAEAoV,wBAAuB,SAACxV,GACpB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBoB,cAGtC,EAEA0L,mBAAkB,SAACzV,GACf,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAamC,mBAAmBtC,IAAInT,GACvBI,EAC/B,EAEAsV,mBAAkB,SAAC1V,GACf,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAaoC,mBAAmBvC,IAAInT,GACvBI,EAC/B,EAEAuV,kBAAiB,SAAC3V,GACd,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAOgQ,GADOkD,EAAaqC,kBAAkBxC,IAAInT,GACtBI,EAC/B,EAEAwV,gCAA+B,SAAC5V,GAC5B,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoBqB,sBAGtC,EAEA6L,2BAA0B,SAAC7V,GACvB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAauC,2BAA2B1C,IAAInT,GAChCI,EAC9B,EAEA0V,2BAA0B,SAAC9V,GACvB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAawC,2BAA2B3C,IAAInT,GAChCI,EAC9B,EAEA2V,0BAAyB,SAAC/V,GACtB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAayC,0BAA0B5C,IAAInT,GAC/BI,EAC9B,EAEA4V,yBAAwB,SAAChW,GACrB,OACI/L,EAAAA,EAAAA,KAAC2O,GAAuB,CACpB7O,UAAWwb,GACXvP,SAAUA,EACV6C,cAAeA,EACfrO,KAAMmU,GAAAA,GAAoB2C,cAC1BnR,WAAYgV,GAGxB,EAEA8G,oBAAmB,SAACjW,GAChB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAa2C,oBAAoB9C,IAAInT,GACzBI,EAC9B,EAEA8V,oBAAmB,SAAClW,GAChB,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAa4C,oBAAoB/C,IAAInT,GACzBI,EAC9B,EAEA+V,mBAAkB,SAACnW,GACf,IAAOI,EAAiBJ,EAAjBI,cAEP,OAAO+P,GADOmD,EAAa6C,mBAAmBhD,IAAInT,GACxBI,EAC9B,EAEAgW,6BAA4B,SAACpW,GACzB,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAa8C,6BAA6BjD,IAAInT,GAC9CI,EAER,EACAiW,8BAA6B,SAACrW,GAC1B,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAa+C,8BAA8BlD,IAAInT,GAC/CI,EAER,EACAkW,kCAAiC,SAACtW,GAC9B,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAagD,kCAAkCnD,IAAInT,GACnDI,EAER,EACAmW,+BAA8B,SAACvW,GAC3B,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAaiD,+BAA+BpD,IAAInT,GAChDI,EAER,EACAoW,+BAA8B,SAACxW,GAC3B,IAAOI,EAAiBJ,EAAjBI,cACP,OAAO+P,GACHmD,EAAakD,+BAA+BrD,IAAInT,GAChDI,EAER,EAEAqW,QAAO,SAACzW,GACJ,GAAIA,EAASI,cACT,OAAO,KAGX,IAAmBpH,EAAQgH,EAApBoD,WAQP,OACInP,EAAAA,EAAAA,KAAA,QAAAD,UACIC,EAAAA,EAAAA,KAACC,GAAAA,GAAM8H,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GATK,CAChB5H,KAAM,iBACND,KAAM,MAQiB,IACfE,MAAM,eACNC,QAPQ,WAAH,OAASif,EAAKmD,YAAY1d,EAAM,EAQrC0Z,GAAE,gBAAAtV,OAAkBpE,EAAKrB,MAAO3D,UAEhCC,EAAAA,EAAAA,KAACM,EAAAA,EAAI,CAAC+K,QAAQ,eAI9B,GAGJ,OAAOkU,CACX,GAAC,CAAA5a,IAAA,cAAAC,MAED,SAAY6E,GACR5E,KAAKC,MAAM4d,gBAAgBjZ,EAC/B,GAAC,CAAA9E,IAAA,sBAAAC,MAED,WAAuB,IAAD+d,EAClBC,EAUI/d,KAAKC,MATL8J,EAAagU,EAAbhU,cACAiU,EAAeD,EAAfC,gBACAlF,EAAkBiF,EAAlBjF,mBACAC,EAAuBgF,EAAvBhF,wBACAkF,EAAQF,EAARE,SACA1F,EAASwF,EAATxF,UACA2F,EAAiBH,EAAjBG,kBACAC,EAAoCJ,EAApCI,qCACAnF,EAAuB+E,EAAvB/E,wBAGEoF,GAAaC,EAAAA,GAAAA,IACftU,EACAgP,EACAD,GAEEwF,EAAYL,IAAa1F,EACzBgG,EAAgBxU,EAAgB,OAAIrF,EAKpC8Z,IAF0B,YAA5BzF,GAAqE,mBAA5BA,IAERoF,EAE/BrhB,EAAQkhB,GAAmB,GAEjC,OACIhjB,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,GAAE,UAAW,oBAAoBlE,SAAA,EAC3CsjB,IAAcrjB,EAAAA,EAAAA,KAACmW,GAAsB,CAACrW,UAAWmE,GAAE,yBACpDof,IAAcrjB,EAAAA,EAAAA,KAACoc,GAAgB,CAACxB,KAAMiD,IACtCwF,IACGrjB,EAAAA,EAAAA,KAAC6b,IAAgC9T,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACzBkb,GAAU,IACdE,UAAWA,EACXG,UAAWP,EACXphB,MAAOA,EACPub,kBAAmBrY,KAAKqY,kBACxBqC,UAAW1a,KAAK0a,UAChB6D,cAAeA,EACfnK,QAAQ,EACRsK,OAAQ1e,KAAKC,MAAM0e,yBACnBC,IAAKC,EAAAA,GACLC,kBAAoB/U,EAAqB,CAACjN,IAAiB,QAAZghB,EAAIhhB,EAAM,UAAE,IAAAghB,OAAA,EAARA,EAAUhe,MAAzB,QAKxD,GAAC,CAAAA,IAAA,oBAAAC,MAMD,WACI,IAAAgf,EAAwD/e,KAAKC,MAAtD4E,EAAgBka,EAAhBla,iBAAkBma,EAAeD,EAAfC,gBAAiB7S,EAAU4S,EAAV5S,WAE1C,OACI6S,EAAgBngB,OACZ1D,EAAAA,EAAAA,KAAC8jB,GAAAA,EAAK,CACFC,eAAgBra,EAChBnB,SAAUmB,EACVsa,QAAShT,EACTrR,SAASK,EAAAA,EAAAA,KAACsX,GAAM,CAAC7N,QAASoa,IAC1BzjB,MAAOyjB,EAAgBngB,KACvB6f,QAAQ,EACRrjB,KAAM,KAItB,GAAC,CAAAyE,IAAA,SAAAC,MAED,WACI,IAAAqf,EAA+Dpf,KAAKC,MAA7DwE,EAAK2a,EAAL3a,MAAO2V,EAAWgF,EAAXhF,YAAa7B,EAAS6G,EAAT7G,UAAWP,EAAWoH,EAAXpH,YAAaiG,EAAQmB,EAARnB,SAEnD,OACIjjB,EAAAA,EAAAA,MAAA,OAAAE,SAAA,EACIF,EAAAA,EAAAA,MAAA,OAAKC,UAAWmE,KAAIlE,SAAA,CACf8c,IAAgBC,GAAAA,IAA0BjY,KAAKqf,4BAChDlkB,EAAAA,EAAAA,KAACmkB,EAAAA,GAAiB,CACdC,QAASvf,KAAKwf,gBACd1kB,SACIE,EAAAA,EAAAA,MAAA,OAAAE,SAAA,CACKuJ,IAAStJ,EAAAA,EAAAA,KAACqK,EAAAA,EAAK,CAACf,MAAOzE,KAAKC,MAAMwf,YAClCrF,GAAepa,KAAK0f,qBACnBnH,GAAa0F,IAAaje,KAAK2f,8BAKhD3f,KAAK4f,sBAGlB,KAACnI,CAAA,CAznBmB,CAASnU,EAAAA,WAA3BmU,GAsDK9T,aAAe,CAClBqU,YAAa,YAqkBrB,IA+CM6H,GAAqB,CACvBnG,iBAAAA,GAAAA,GACAM,oBAAAA,GAAAA,GACAG,mBAAAA,GAAAA,GACA2F,qBAAAA,GAAAA,GACAjb,iBAAAA,GAAAA,GACAkb,UAAAA,GAAAA,GACAzH,qBAAAA,GAAAA,GACAxJ,kBAAAA,GAAAA,GACAkR,iBAAAA,GAAAA,GACAnC,gBAAAA,GAAAA,GACAtD,wBAAAA,GAAAA,GACArC,qCAAAA,GAAAA,GACAE,0BAAAA,GAAAA,GACAP,4BAAAA,GAAAA,IAGJ,UAAenS,EAAAA,EAAAA,KAhEa,WACxB,OAAO,SAACnB,EAAO0b,GACX,IAAMC,GAAmBC,EAAAA,EAAAA,IAAqB5b,GACxC+V,EAAuBtd,EAAwBuH,GAGtC3D,EACX2D,EADA3D,SAAWA,SAITwf,EADgBH,EAAfjI,cAC6BC,GAAAA,GAE9B+F,EAAkBoC,EAClBljB,EAA+BqH,GAC/BjH,EAAoBiH,GAE1B,OAAArB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOtC,GAAQ,IACXmY,yBAAyB/C,EAAAA,EAAAA,IAAuBzR,GAEhD8K,iBAAiBC,EAAAA,GAAAA,IAAmB/K,GAEpClE,YAAY0Q,EAAAA,GAAAA,IAAcxM,GAC1B3D,SAAUA,EAASA,SACnBod,gBAAAA,EACAkC,iBAAAA,EAEAtO,SAASC,EAAAA,GAAAA,IAAWtN,GAEpBoa,0BAA0B0B,EAAAA,EAAAA,IAA+B9b,GACzD+V,qBAAAA,EACAtB,wBAAyBoH,GACnBhjB,EAAAA,EAAAA,IAAqCmH,IACrChH,EAAAA,EAAAA,IAA0BgH,GAChC2U,kBAAkBoH,EAAAA,EAAAA,IAAkC/b,GACpDiW,cAAc+F,EAAAA,EAAAA,IAAwBhc,GAEtC4Z,sCACI5M,EAAAA,GAAAA,IAAmDhN,GAEvDmU,gBAAiBrD,GAAAA,GAEjBgB,yBAAyBJ,EAAAA,EAAAA,IAAmC1R,IAEpE,CACJ,GAmB4Csb,GAA5C,CAAgEpI,G,2FCj1BzD,SAASsI,IACZ,OAAO,SAAC5jB,GACJ,OAAOqkB,EAAAA,EAAAA,IAAaC,EAAAA,GAAQC,WACvB3b,MAAK,SAAClJ,GACHM,EAAS,CACLT,KAAMilB,EAAAA,GAAYC,QAClB/kB,KAAAA,GAER,IAAE,OACK,SAAC4I,GACJtI,EAAS,CACLT,KAAMilB,EAAAA,GAAYE,QAClBpc,MAAAA,GAER,GACR,CACJ,CAEO,SAASqc,EAAgBlc,GAC5B,MAAO,CACHlJ,KAAMqlB,EAAAA,GACNllB,KAAM,CAAC+I,QAAAA,GAEf,CAEO,SAASoc,EAAiBC,GAC7B,MAAO,CACHvlB,KAAMwlB,EAAAA,GACNrlB,KAAMolB,EAEd,C","sources":["webpack://@ytsaurus/ui/./src/ui/components/Message/Message.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/Accounts/AccountsUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/accounts/dashboard.js","webpack://@ytsaurus/ui/./src/ui/utils/accounts/accountsTotal.ts","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/AccountsTotal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/ConfirmMessage.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/DeleteContent.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/ProgressTooltip.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/ProgressStack.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/AccountQuota/AccountQuota.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/accounts/editor-ts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/AccountTransferQuotaMessage.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/NodesContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/ChunksContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/MediumContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/TabletsContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/content/MasterMemoryContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/Editor/Editor.js","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/AccountAlerts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/AccountStaticConfiguration/AccountStaticConfiguration.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/MasterMemoryTableMode.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/tabs/general/AccountsGeneralTab.js","webpack://@ytsaurus/ui/./src/ui/store/actions/accounts/editor.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport Button from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nconst block = cn('elements-message');\n\nexport default function Message({\n theme = 'default',\n showClose = false,\n dismissCallback,\n content,\n buttons,\n}) {\n return (\n <div className={block({theme})}>\n {showClose && (\n <div className={block('close')}>\n <Button size=\"m\" view=\"flat-secondary\" title=\"Close\" onClick={dismissCallback}>\n <Icon type=\"close\" />\n </Button>\n </div>\n )}\n\n {React.isValidElement(content)\n ? {content}\n : map_(content, (data, index) => (\n <p key={index} className={block('paragraph')}>\n {data}\n </p>\n ))}\n\n {buttons && (\n <div className={block('buttons')}>\n {map_(buttons, (button) => (\n <span className={block('button')} key={button.text}>\n <Button size=\"m\" title={button.text} onClick={button.callback}>\n {button.text}\n </Button>\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nMessage.propTypes = {\n theme: PropTypes.string,\n showClose: PropTypes.bool,\n dismissCallback: (props, propName, componentName) => {\n if (props.showClose && typeof props[propName] !== 'function') {\n return new Error(\n `You have to provide dismissCallback to ${componentName} when showClose is true`,\n );\n }\n },\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.string)]).isRequired,\n buttons: PropTypes.arrayOf(PropTypes.object),\n};\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {fetchAccounts} from '../../../store/actions/accounts/accounts';\nimport {getAccountsEditCounter} from '../../../store/selectors/accounts/accounts-ts';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nexport default function AccountsUpdater() {\n const dispatch = useDispatch();\n\n const editCounter = useSelector(getAccountsEditCounter);\n\n const update = React.useCallback(() => {\n dispatch(fetchAccounts());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, editCounter]);\n\n useUpdater(update);\n\n return null;\n}\n","import map_ from 'lodash/map';\nimport {createSelector} from 'reselect';\nimport {\n getUsableAccounts,\n prepareAccountsFlattenTree,\n} from '../../../store/selectors/accounts/accounts';\nimport {getFavouriteAccounts} from '../../../store/selectors/favourites';\nimport {\n getAccountsVisibilityMode,\n getAccountsVisibilityModeOfDashboard,\n} from '../../../store/selectors/settings';\nimport {filterFlattenTreeByViewContext} from '../../../utils/accounts';\nimport {getActiveAccount} from './accounts-ts';\n\nexport const getUsableAccountsSet = createSelector([getUsableAccounts], (items) => {\n return new Set(items);\n});\n\n/**\n * This selector cannot be moved to 'store/selectors/accounts/accounts'\n * because of cyclic dependencies.\n */\nexport const getFavouriteAccountsSet = createSelector([getFavouriteAccounts], (items) => {\n return new Set(map_(items, 'path'));\n});\n\nexport const getFilteredAccountsOfDashboard = createSelector(\n [\n prepareAccountsFlattenTree,\n getUsableAccountsSet,\n getAccountsVisibilityModeOfDashboard,\n getFavouriteAccountsSet,\n ],\n filterFlattenTreeByViewContext,\n);\n\nexport const getFilteredAccounts = createSelector(\n [\n prepareAccountsFlattenTree,\n getUsableAccountsSet,\n getAccountsVisibilityMode,\n getFavouriteAccountsSet,\n getActiveAccount,\n ],\n filterFlattenTreeByViewContext,\n);\n","import compact_ from 'lodash/compact';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport hammer from '../../common/hammer';\nimport {accountsIoThroughputThresholds} from '../../utils/progress';\nimport {calcProgressProps} from '../../utils/utils';\n\nconst nodesChunksUsageList = ['node_count', 'chunk_count'] as const;\n\nexport interface ClusterTotalsUsage {\n total_resource_limits: {\n chunk_count: number;\n disk_space: number;\n disk_space_per_medium: Record<string, number>;\n master_memory: {\n chunk_host: number;\n per_cell: Record<string, number>;\n total: number;\n };\n node_count: number;\n tablet_count: number;\n tablet_static_memory: number;\n };\n total_resource_usage: {\n chunk_count: number;\n chunk_host_cell_master_memory: number;\n detailed_master_memory: {\n attributes: number;\n chunks: number;\n nodes: number;\n schemas: number;\n tablets: number;\n };\n disk_space: number;\n disk_space_per_medium: Record<string, number>;\n master_memory: {\n chunk_host: number;\n per_cell: Record<string, number>;\n total: number;\n };\n node_count: number;\n tablet_count: number;\n tablet_static_memory: number;\n };\n}\n\ninterface IOStatistics {\n filesystem_read_rate: number;\n filesystem_write_rate: number;\n disk_read_rate: number;\n disk_write_rate: number;\n disk_read_capacity: number;\n disk_write_capacity: number;\n}\n\nexport interface NodesData {\n available_space_per_medium: Record<string, number>;\n io_statistics_per_medium: Record<string, IOStatistics>;\n used_space_per_medium: Record<string, number>;\n}\n\ninterface MediumStat {\n usage: number;\n limit: number;\n}\n\nfunction prepareMediumStats<T extends Record<string, MediumStat>>(\n usedSpace: Record<keyof T, number>,\n availableSpace: Record<keyof T, number>,\n settings: T,\n) {\n return forEach_(settings, (stats, type) => {\n const used = usedSpace[type] || 0;\n const available = availableSpace[type] || 0;\n stats.usage = used;\n stats.limit = available;\n });\n}\n\nfunction initMediumStats<T extends readonly string[]>(list: T) {\n return reduce_(\n list,\n (list, type: T[number]) => {\n list[type] = {\n usage: 0,\n limit: 0,\n };\n\n return list;\n },\n {} as Record<T[number], MediumStat>,\n );\n}\n\nfunction getClusterTotal(\n clusterTotalsUsage: ClusterTotalsUsage,\n _nodesData: NodesData,\n mediumList: string[],\n) {\n // TODO use hammer.aggregation\n const perMedium = initMediumStats(mediumList);\n let usedSpacePerMedia;\n let availableSpacePerMedia;\n\n if (clusterTotalsUsage) {\n usedSpacePerMedia = clusterTotalsUsage.total_resource_usage.disk_space_per_medium;\n availableSpacePerMedia = clusterTotalsUsage.total_resource_limits.disk_space_per_medium;\n prepareMediumStats(usedSpacePerMedia, availableSpacePerMedia, perMedium);\n }\n\n return {\n perMedium: perMedium,\n };\n}\n\nfunction getHardwareLimit(nodesData: NodesData, mediumList: string[]) {\n // TODO use hammer.aggregation\n const perMedium = initMediumStats(mediumList);\n\n if (nodesData) {\n const usedSpacePerMedia = nodesData.used_space_per_medium || {};\n const availableSpacePerMedia = nodesData.available_space_per_medium || {};\n\n forEach_(mediumList, (mediumType) => {\n const used = usedSpacePerMedia[mediumType] || 0;\n const available = availableSpacePerMedia[mediumType] || 0;\n\n perMedium[mediumType].usage = used;\n perMedium[mediumType].limit = available + used;\n });\n }\n\n return {\n perMedium: perMedium,\n };\n}\n\nfunction getReadThroughput(nodesData: NodesData, mediumList: string[]) {\n // TODO use hammer.aggregation\n const perMedium = initMediumStats(mediumList);\n\n if (nodesData) {\n const ioStatisticsPerMedia = nodesData.io_statistics_per_medium || {};\n\n forEach_(mediumList, (mediumType) => {\n const rate = ioStatisticsPerMedia[mediumType]?.disk_read_rate || 0;\n const capacity = ioStatisticsPerMedia[mediumType]?.disk_read_capacity || 0;\n\n perMedium[mediumType].usage = rate;\n perMedium[mediumType].limit = capacity;\n });\n }\n\n return {\n perMedium: perMedium,\n };\n}\n\nfunction getWriteThroughput(nodesData: NodesData, mediumList: string[]) {\n // TODO use hammer.aggregation\n const perMedium = initMediumStats(mediumList);\n\n if (nodesData) {\n const ioStatisticsPerMedia = nodesData.io_statistics_per_medium || {};\n\n forEach_(mediumList, (mediumType) => {\n const rate = ioStatisticsPerMedia[mediumType]?.disk_write_rate || 0;\n const capacity = ioStatisticsPerMedia[mediumType]?.disk_write_capacity || 0;\n\n perMedium[mediumType].usage = rate;\n perMedium[mediumType].limit = capacity;\n });\n }\n\n return {\n perMedium: perMedium,\n };\n}\n\nfunction getClusterExtendedTotal(clusterTotalsUsage: ClusterTotalsUsage) {\n // TODO use hammer.aggregation\n const settings = initMediumStats(nodesChunksUsageList);\n\n if (clusterTotalsUsage) {\n const usedSpace = clusterTotalsUsage.total_resource_usage;\n const availableSpace = clusterTotalsUsage.total_resource_limits;\n\n prepareMediumStats(usedSpace, availableSpace, settings);\n }\n\n return {\n settings: settings,\n };\n}\n\nexport function getNodesChunksTotals(clusterTotalsUsage: ClusterTotalsUsage) {\n const list = nodesChunksUsageList;\n const clusterExtendedTotal = getClusterExtendedTotal(clusterTotalsUsage).settings;\n\n const items = map_(list, (name) => {\n if (clusterExtendedTotal[name]) {\n const clusterUsage = clusterExtendedTotal[name].usage;\n const clusterLimit = clusterExtendedTotal[name].limit;\n\n return {\n name: name,\n clusterUsage: {\n text:\n hammer.format['Number'](clusterUsage) +\n ' / ' +\n hammer.format['Number'](clusterLimit),\n progress: (clusterUsage / clusterLimit) * 100,\n },\n };\n }\n\n return null;\n });\n return compact_(items);\n}\n\nexport function getDiskSpace(\n _accounts: unknown,\n clusterTotalsUsage: ClusterTotalsUsage,\n nodesData: NodesData,\n mediumList: string[],\n) {\n const clusterTotalPerMedium = getClusterTotal(\n clusterTotalsUsage,\n nodesData,\n mediumList,\n ).perMedium;\n\n const hardwareLimitPerMedium = getHardwareLimit(nodesData, mediumList).perMedium;\n const readThroughput = getReadThroughput(nodesData, mediumList).perMedium;\n const writeThroughput = getWriteThroughput(nodesData, mediumList).perMedium;\n\n if (clusterTotalPerMedium) {\n return map_(mediumList, (mediumType) => {\n const clusterUsage = clusterTotalPerMedium[mediumType].usage;\n const clusterLimit = clusterTotalPerMedium[mediumType].limit;\n const hardwareLimit = hardwareLimitPerMedium[mediumType].limit;\n const overcommitted = hardwareLimit < clusterLimit;\n\n const diskReadRate = readThroughput[mediumType].usage;\n const diskReadCapacity = readThroughput[mediumType].limit;\n const diskWriteRate = writeThroughput[mediumType].usage;\n const diskWriteCapacity = writeThroughput[mediumType].limit;\n\n return {\n show: hardwareLimit !== 0,\n mediumType: mediumType,\n clusterUsage: {\n text:\n hammer.format['Bytes'](clusterUsage) +\n ' / ' +\n hammer.format['Bytes'](clusterLimit),\n progress: (clusterUsage / clusterLimit) * 100,\n },\n readThroughput: {\n progress: calcProgressProps(\n diskReadRate,\n diskReadCapacity,\n 'Bytes',\n accountsIoThroughputThresholds,\n ),\n show: diskReadCapacity > 0,\n },\n writeThroughput: {\n progress: calcProgressProps(\n diskWriteRate,\n diskWriteCapacity,\n 'Bytes',\n accountsIoThroughputThresholds,\n ),\n show: diskWriteCapacity > 0,\n },\n hardwareLimit: hardwareLimit,\n overcommitted,\n };\n });\n }\n\n return [];\n}\n","import React, {Component, Fragment} from 'react';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../common/hammer';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport WarningIcon from '../../../../components/WarningIcon/WarningIcon';\nimport {\n ClusterTotalsUsage,\n NodesData,\n getDiskSpace,\n getNodesChunksTotals,\n} from '../../../../utils/accounts/accountsTotal';\n\nconst b = block('accounts');\n\ninterface Props {\n accounts: unknown[];\n clusterTotalsUsage: ClusterTotalsUsage;\n nodesData: NodesData;\n mediumList: string[];\n}\n\nexport default class AccountsTotal extends Component<Props> {\n static propTypes = {\n // from props\n accounts: PropTypes.array,\n clusterTotalsUsage: PropTypes.object,\n nodesData: PropTypes.object,\n mediumList: PropTypes.array,\n };\n\n renderNodesChunksTotals() {\n const {clusterTotalsUsage} = this.props;\n\n return (\n <table>\n <tbody>\n {map_(getNodesChunksTotals(clusterTotalsUsage), (item) => (\n <tr key={item.name}>\n <td className={b('disk-space-medium-type')}>\n {hammer.format['ReadableField'](item.name)}\n </td>\n <td className={b('disk-space-cluster-usage')}>\n <Progress\n value={item.clusterUsage.progress}\n text={item.clusterUsage.text}\n theme={'success'}\n />\n </td>\n <td className={b('disk-space-hardware-limit')}>–</td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n renderNewTotals() {\n const {accounts, clusterTotalsUsage, nodesData, mediumList} = this.props;\n const diskSpace = getDiskSpace(accounts, clusterTotalsUsage, nodesData, mediumList);\n\n return (\n <Fragment>\n <table>\n <thead>\n <tr>\n <th className={b('disk-space-medium-type')}>Medium</th>\n <th className={b('disk-space-cluster-usage')} title=\"used/limit\">\n Cluster Disk Space\n </th>\n <th className={b('disk-space-hardware-limit')}>Hardware Limit</th>\n <th className={b('disk-space-label')} />\n <th className={b('disk-space-read-throughput')} title=\"used/limit\">\n Read Throughput per sec\n </th>\n <th className={b('disk-space-write-throughput')} title=\"used/limit\">\n Write Throughput per sec\n </th>\n </tr>\n </thead>\n <tbody>\n {diskSpace.map(\n (item) =>\n (typeof item.show === 'undefined' || item.show) && (\n <tr key={item.mediumType}>\n <td className={b('disk-space-medium-type')}>\n {hammer.format['ReadableField'](item.mediumType)}\n </td>\n <td className={b('disk-space-cluster-usage')}>\n <Progress\n value={item.clusterUsage.progress}\n text={item.clusterUsage.text}\n theme={'success'}\n />\n </td>\n <td className={b('disk-space-hardware-limit')}>\n {hammer.format['Bytes'](item.hardwareLimit)}\n </td>\n <td className={b('disk-space-label')}>\n {item.overcommitted && (\n <WarningIcon hoverContent=\"Overcommitted\" />\n )}\n </td>\n <td className={b('disk-space-read-throughput')}>\n {item.readThroughput.show ? (\n <Progress {...item.readThroughput.progress} />\n ) : (\n hammer.format.NO_VALUE\n )}\n </td>\n <td className={b('disk-space-write-throughput')}>\n {item.writeThroughput.show ? (\n <Progress {...item.writeThroughput.progress} />\n ) : (\n hammer.format.NO_VALUE\n )}\n </td>\n </tr>\n ),\n )}\n </tbody>\n </table>\n <br />\n {this.renderNodesChunksTotals()}\n </Fragment>\n );\n }\n\n render() {\n return (\n <div className={b('disk-space')}>\n <div className={b('disk-space-table')}>{this.renderNewTotals()}</div>\n </div>\n );\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport Message from '../../../../../components/Message/Message';\n\nexport default class ConfirmMessage extends Component {\n static propTypes = {\n text: PropTypes.object.isRequired,\n confirmQuestion: PropTypes.string,\n onApply: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n confirmQuestion: 'Apply changes?',\n };\n\n render() {\n const {text, confirmQuestion, onApply, onCancel} = this.props;\n\n return (\n <Message\n theme=\"info\"\n content={[text, confirmQuestion]}\n buttons={[\n {\n text: 'Yes',\n callback: onApply,\n },\n {\n text: 'Cancel',\n callback: onCancel,\n },\n ]}\n />\n );\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport Error from '../../../../../../components/Error/Error';\nimport {Button, Toaster} from '@gravity-ui/uikit';\nimport ConfirmMessage from './../ConfirmMessage';\n\nimport {deleteAccount} from '../../../../../../utils/accounts/editor';\nimport {closeEditorModal} from '../../../../../../store/actions/accounts/accounts';\n\nconst toaster = new Toaster();\n\nclass DeleteContent extends Component {\n static propTypes = {\n //from parent\n account: PropTypes.object.isRequired,\n //from connect\n deleteModalVisible: PropTypes.bool.isRequired,\n closeEditorModal: PropTypes.func.isRequired,\n };\n\n state = {\n showConfirmMessage: false,\n error: undefined,\n };\n\n handleDelete = () => {\n const {account, closeEditorModal} = this.props;\n\n deleteAccount(account.name)\n .then(() => {\n this.setState({\n activeValue: '',\n });\n closeEditorModal();\n toaster.add({\n name: 'delete account',\n timeout: 10000,\n theme: 'success',\n title: 'Successfully deleted ' + account.name,\n });\n })\n .catch((error) => {\n this.setState({\n error,\n });\n });\n\n this.setState({\n error: undefined,\n });\n };\n\n handleCancel = () => this.setState({showConfirmMessage: false});\n handleButtonClick = () => this.setState({showConfirmMessage: true, showErrorMessage: false});\n\n render() {\n const {account} = this.props;\n const {showConfirmMessage, error} = this.state;\n\n return (\n <div className=\"elements-section\">\n {error && (\n <Error message={'Failed to delete account: ' + account.name} error={error} />\n )}\n {showConfirmMessage && (\n <ConfirmMessage\n text={\n <div className=\"elements-message__paragraph\">\n Delete account {account.name}\n </div>\n }\n onApply={this.handleDelete}\n onCancel={this.handleCancel}\n />\n )}\n <Button\n size=\"m\"\n view=\"outlined-danger\"\n title={'Delete'}\n onClick={this.handleButtonClick}\n >\n Delete\n </Button>\n </div>\n );\n }\n}\n\nexport default connect(null, {closeEditorModal})(DeleteContent);\n","import React from 'react';\n\nimport isNumber_ from 'lodash/isNumber';\nimport reduce_ from 'lodash/reduce';\n\nimport cn from 'bem-cn-lite';\n\nimport Icon from '../../../../components/Icon/Icon';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport './ProgressTooltip.scss';\n\nconst block = cn('yt-progress-tooltip');\n\ninterface Props {\n info: Array<ProgressInfo>;\n limit: number;\n formatNumber?: (v: number) => string;\n}\n\ninterface ProgressInfo<T = number> {\n name: string;\n committed: T;\n limit: T;\n color?: string;\n}\n\nexport function ProgressTooltip({info, limit, formatNumber}: Props) {\n return (\n <ErrorBoundary>\n <div className={block()}>\n <ProgressTooltipRow<string>\n mixin={block('header')}\n name=\"Account name\"\n committed=\"Usage\"\n limit=\"Limit\"\n />\n <ProgressTooltipTotalRow mixin={block('total')} {...{info, limit, formatNumber}} />\n {info.map((i, index) => {\n return <ProgressTooltipRow key={index} {...i} formatNumber={formatNumber} />;\n })}\n </div>\n </ErrorBoundary>\n );\n}\n\ninterface ProgressTooltipRowProps<T extends number | string>\n extends ProgressInfo<T>,\n Pick<Props, 'formatNumber'> {\n mixin?: string;\n}\n\nfunction ProgressTooltipRow<T extends number | string>({\n name,\n committed,\n limit,\n color,\n mixin,\n formatNumber,\n}: ProgressTooltipRowProps<T>) {\n const icon =\n color !== undefined ? (\n <span style={{color}}>\n <Icon awesome=\"circle\" face=\"solid\" />\n </span>\n ) : null;\n const committedValue =\n formatNumber && isNumber_(committed) ? formatNumber(committed) : committed;\n const limitValue = formatNumber && isNumber_(limit) ? formatNumber(limit) : limit;\n\n return (\n <React.Fragment>\n <span className={block('icon', mixin)}>{icon}</span>\n <span className={block('name', mixin)}>{name}</span>\n <div className={block('committed', mixin)}>{committedValue}</div>\n <div className={block('limit', mixin)}>{limitValue}</div>\n </React.Fragment>\n );\n}\n\ninterface ProgressTooltipTotalRowProps extends Props {\n mixin?: string;\n}\n\nfunction ProgressTooltipTotalRow({info, limit, mixin, formatNumber}: ProgressTooltipTotalRowProps) {\n const committed = reduce_(info, (acc, item) => acc + item.committed, 0);\n return <ProgressTooltipRow name=\"Total\" {...{formatNumber, mixin, committed, limit}} />;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport values_ from 'lodash/values';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../../../common/hammer';\nimport Account from '../../../../pages/accounts/selector';\nimport {isNull} from '../../../../utils';\n\nimport {STACKED_PROGRESS_BAR_COLORS} from '../../../../constants/colors';\nimport {getAccountName} from '../../../../store/selectors/accounts/accounts';\nimport {ProgressTooltip} from './ProgressTooltip';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport {\n ACCOUNT_RESOURCE_TYPES_DESCRIPTION,\n AccountResourceName,\n} from '../../../../constants/accounts/accounts';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nconst colors = STACKED_PROGRESS_BAR_COLORS;\n\nfunction prepareProgressStack(treeItem, useChildren, getTreeItemInfoFn) {\n if (!treeItem) {\n return {};\n }\n\n const recursiveInfo = getTreeItemInfoFn(treeItem, true);\n if (isEmpty_(recursiveInfo)) {\n return {};\n }\n const {\n limit = 0,\n progressText,\n committed: recursiveCommitted = 0,\n uncommitted: recursiveUncommitted = 0,\n } = recursiveInfo;\n\n const children = treeItem.children;\n const items = useChildren && children.length > 0 ? [treeItem, ...children] : [treeItem];\n\n const allLimit = Math.max(recursiveCommitted + recursiveUncommitted, limit);\n\n let colorIndex = 0;\n const progressStack = [];\n const tooltipInfo = [];\n\n forEach_(items, (item, index) => {\n if (item.isAggregation) {\n return;\n }\n\n const recursive = index !== 0 || !useChildren;\n const {committed, uncommitted, limit, progress, theme} = getTreeItemInfoFn(item, recursive);\n const [committedEl, uncommittedEl] = Account.prepareProgressStack(\n committed,\n uncommitted,\n allLimit,\n theme,\n );\n\n const tooltipItem = {\n name: getAccountName(item),\n committed,\n limit,\n };\n if (progress > 0) {\n if (useChildren && children.length > 0) {\n tooltipItem.color = committedEl.color = colors[(4 + colorIndex++) % colors.length];\n }\n progressStack.push(committedEl, uncommittedEl);\n tooltipInfo.push(tooltipItem);\n } else if (index === 0) {\n // children should be rendered with different color\n ++colorIndex;\n }\n });\n return {progressText, progressStack, tooltipInfo: tooltipInfo, limit};\n}\n\nfunction ProgressStackImpl({\n treeItem,\n infoGetter,\n useChildren,\n className,\n formatNumber,\n popupClassName,\n}) {\n if (!treeItem || treeItem.isAggregation) {\n return hammer.format.NO_VALUE;\n }\n\n try {\n const {value, progressText, progressStack, tooltipInfo, limit} = prepareProgressStack(\n treeItem,\n useChildren,\n infoGetter,\n );\n if (isNull(value) && isNull(progressStack)) {\n return hammer.format.NO_VALUE;\n }\n const progressValue =\n !progressStack || !progressStack.length\n ? value\n : progressStack.reduce((acc, {value}) => (isNaN(value) ? acc : acc + value), 0);\n const progress = (\n <Progress value={progressValue} stack={progressStack} text={progressText} />\n );\n\n if (!useChildren) {\n return progress;\n }\n\n return (\n <Tooltip\n className={className}\n content={\n <ProgressTooltip info={tooltipInfo} limit={limit} formatNumber={formatNumber} />\n }\n placement={['right', 'left', 'top', 'bottom']}\n tooltipClassName={popupClassName}\n >\n {progress}\n </Tooltip>\n );\n } catch (err) {\n console.error(err);\n return hammer.format.NO_VALUE;\n }\n}\n\nconst ProgressStackTypeProp = PropTypes.oneOf(values_(AccountResourceName));\n\nProgressStackByTreeItem.propTypes = {\n className: PropTypes.string,\n popupClassName: PropTypes.string,\n activeAccount: PropTypes.string,\n mediumType: PropTypes.string,\n\n type: ProgressStackTypeProp.isRequired,\n treeItem: PropTypes.object.isRequired,\n};\n\nexport function ProgressStackByTreeItem({\n treeItem,\n activeAccount,\n type,\n mediumType,\n className,\n popupClassName,\n}) {\n const accountName = getAccountName(treeItem);\n const isActiveAccount = activeAccount === accountName;\n const {format = 'Number', getInfo} = ACCOUNT_RESOURCE_TYPES_DESCRIPTION[type];\n const infoGetter = (item, recursive) => {\n const {attributes: account} = item;\n return getInfo(account, recursive, mediumType);\n };\n const formatNumber = hammer.format[format];\n return (\n <ErrorBoundary>\n <ProgressStackImpl\n {...{\n treeItem,\n infoGetter,\n useChildren: isActiveAccount,\n formatNumber,\n className,\n popupClassName,\n }}\n />\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {ClickableText} from '../../../components/ClickableText/ClickableText';\nimport Icon from '../../../components/Icon/Icon';\nimport QuotaEditorWithHide from '../../../components/QuotaEditor/QuotaEditorWithHide';\nimport {SelectSingle} from '../../../components/Select/Select';\n\nimport ypath from '../../../common/thor/ypath';\n\nimport {getActiveAccount} from '../../../store/selectors/accounts/accounts';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {\n ALLOW_CHILDREN_LIMIT_OVERCOMMIT,\n RECURSIVE_RESOURCES_USAGE_PREFIX,\n RESOURCES_LIMITS_PREFIX,\n RESOURCES_USAGE_PREFIX,\n TOTAL_CHILDREN_RESOURCE_LIMIT,\n} from '../../../constants/accounts';\nimport {AccountQuotaParams, setAccountQuota} from '../../../store/actions/accounts/editor-ts';\nimport {\n ACCOUNT_RESOURCE_TYPES_DESCRIPTION,\n AccountResourceNameType,\n ROOT_ACCOUNT_NAME,\n} from '../../../constants/accounts/accounts';\nimport {ProgressStackByTreeItem} from '../tabs/general/ProgressStack';\nimport {\n AccountsTree,\n getAccountsTree,\n getEditableAccountQuotaSources,\n} from '../../../store/selectors/accounts/accounts-ts';\n\nimport './AccountQuota.scss';\n\nconst block = cn('account-quota');\n\ninterface Props {\n title: string;\n currentAccount: string;\n hardLimit?: number;\n\n type: AccountResourceNameType;\n mediumType?: string;\n}\n\ninterface ReduxProps {\n activeAccount?: string;\n accountsTree: Record<string, AccountsTree>;\n setAccountQuota: (params: AccountQuotaParams) => void;\n sources: Array<string>;\n}\n\ninterface State {\n showEditor?: boolean;\n}\n\nclass AccountQuotaEditor extends React.Component<Props & ReduxProps, State> {\n state: State = {};\n\n render() {\n const {title, type, mediumType, currentAccount, activeAccount, accountsTree} = this.props;\n const {format} = ACCOUNT_RESOURCE_TYPES_DESCRIPTION[type];\n const {showEditor} = this.state;\n const {limit} = this.getInfoByName(currentAccount);\n return (\n <div className={block()}>\n <div className={block('value')}>\n <div className={block('name')}>{title}</div>\n <div className={block('progress')}>\n <ProgressStackByTreeItem\n treeItem={accountsTree[currentAccount]}\n activeAccount={activeAccount}\n type={type}\n mediumType={mediumType}\n className={block('progress-tooltip')}\n popupClassName={block('progress-tooltip-popup')}\n />\n </div>\n <ClickableText\n color=\"secondary\"\n className={block('edit')}\n onClick={this.toggleShowEditor}\n >\n <Icon awesome={'pencil'} />\n </ClickableText>\n </div>\n {showEditor && (\n <QuotaEditorWithHide\n format={format}\n limit={limit}\n onHide={this.toggleShowEditor}\n onSave={this.onLimitChange}\n getInfoByName={this.getInfoByName}\n currentAccount={currentAccount}\n parentOfCurrentAccount={this.getParentAccount(currentAccount)}\n renderSourceSuggest={this.renderSourcesSuggest}\n min={this.calcMinLimit()}\n />\n )}\n </div>\n );\n }\n\n renderSourcesSuggest = ({\n onChange,\n value,\n }: {\n value: string;\n onChange: (value?: string) => void;\n }) => {\n const {sources} = this.props;\n return (\n <SelectSingle\n value={value}\n onChange={onChange}\n items={map_(sources, (value) => {\n return {\n value,\n text: value,\n };\n })}\n placeholder={'Select account...'}\n width=\"max\"\n />\n );\n };\n\n validateAccount = (account?: string) => {\n const {currentAccount} = this.props;\n if (account && account === currentAccount) {\n return 'The account itself cannot be used';\n }\n return undefined;\n };\n\n getParentAccount(account: string) {\n const {attributes: accountData} = this.props.accountsTree[account];\n return accountData.parent;\n }\n\n getResourcePath() {\n const {type, mediumType} = this.props;\n return !mediumType ? type : `${type}/${mediumType}`;\n }\n\n getInfoByName = (account = '') => {\n if (!account || account === ROOT_ACCOUNT_NAME) {\n return {limit: Infinity, total: Infinity};\n }\n\n const {attributes: accountData} = this.props.accountsTree[account] || {};\n if (!accountData) {\n return {limit: 0, total: 0};\n }\n\n const resourcePath = this.getResourcePath();\n return {\n limit: ypath.getValue(accountData, RESOURCES_LIMITS_PREFIX + resourcePath),\n usage: ypath.getValue(accountData, RESOURCES_USAGE_PREFIX + resourcePath),\n total: ypath.getValue(accountData, RECURSIVE_RESOURCES_USAGE_PREFIX + resourcePath),\n totalChildrenLimit: ypath.getValue(\n accountData,\n TOTAL_CHILDREN_RESOURCE_LIMIT + resourcePath,\n ),\n allowChildrenOverCommit: ypath.getValue(accountData, ALLOW_CHILDREN_LIMIT_OVERCOMMIT),\n };\n };\n\n getAccountData(account = '') {\n return this.props.accountsTree[account]?.attributes;\n }\n\n toggleShowEditor = () => {\n this.setState({showEditor: !this.state.showEditor});\n };\n\n onLimitChange = (newLimit: number, limitDiff: number, distributeAccount?: string) => {\n const {setAccountQuota, currentAccount} = this.props;\n setAccountQuota({\n limit: newLimit,\n limitDiff,\n account: currentAccount,\n distributeAccount,\n resourcePath: this.getResourcePath(),\n });\n };\n\n private calcMinLimit() {\n const {currentAccount} = this.props;\n const {\n usage = 0,\n total = 0,\n totalChildrenLimit = 0,\n allowChildrenOverCommit,\n } = this.getInfoByName(currentAccount);\n return allowChildrenOverCommit ? total : usage + totalChildrenLimit;\n }\n}\n\nfunction AccountQuota(props: Props) {\n const dispatch = useDispatch();\n const activeAccount = useSelector(getActiveAccount);\n const accountsTree = useSelector(getAccountsTree);\n\n const handleSetQuota = React.useCallback(\n (params: AccountQuotaParams) => {\n dispatch(setAccountQuota(params));\n },\n [dispatch],\n );\n\n const sources = useSelector(getEditableAccountQuotaSources);\n\n return (\n <AccountQuotaEditor\n {...props}\n activeAccount={activeAccount}\n accountsTree={accountsTree}\n setAccountQuota={handleSetQuota}\n sources={sources}\n />\n );\n}\n\nexport default React.memo(AccountQuota);\n","import update_ from 'lodash/update';\n\nimport {RootState} from '../../../store/reducers';\nimport {setAccountLimit} from '../../../utils/accounts/editor';\nimport {ThunkAction} from 'redux-thunk';\nimport {FIX_MY_TYPE} from '../../../types';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {RESOURCES_LIMITS_PREFIX} from '../../../constants/accounts';\nimport {accountsIncreaseEditCounter, loadEditedAccount} from './accounts';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\n\nexport interface AccountQuotaParams {\n limit: number;\n limitDiff: number;\n account: string;\n resourcePath: string;\n distributeAccount?: string;\n}\n\ntype EditorAction = ThunkAction<any, RootState, any, FIX_MY_TYPE>;\n\nfunction setAccountQuotaImpl(params: AccountQuotaParams): Promise<void> {\n const {limit, limitDiff, account, resourcePath, distributeAccount} = params;\n const dotPath = resourcePath.replace(/\\//g, '.');\n if (!limitDiff) {\n return Promise.resolve();\n }\n if (!distributeAccount) {\n return setAccountLimit(limit, account, RESOURCES_LIMITS_PREFIX + resourcePath);\n } else if (limitDiff > 0) {\n return yt.v4.transferAccountResources({\n parameters: {\n source_account: distributeAccount,\n destination_account: account,\n resource_delta: update_({}, dotPath, () => limitDiff),\n },\n });\n } else {\n return yt.v4.transferAccountResources({\n parameters: {\n source_account: account,\n destination_account: distributeAccount,\n resource_delta: update_({}, dotPath, () => -limitDiff),\n },\n });\n }\n}\n\nexport function setAccountQuota(params: AccountQuotaParams): EditorAction {\n return (dispatch) => {\n const toasterName = params.account + '_' + params.resourcePath;\n return wrapApiPromiseByToaster(setAccountQuotaImpl(params), {\n toasterName,\n successContent: 'The quota is updated',\n }).then(() => {\n dispatch(loadEditedAccount(params.account));\n dispatch(accountsIncreaseEditCounter());\n });\n };\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {\n getEditableAccount,\n isEditableAccountOfTopLevel,\n} from '../../../../../store/selectors/accounts/accounts-ts';\nimport UIFactory from '../../../../../UIFactory';\nimport {getClusterUiConfig} from '../../../../../store/selectors/global';\n\nfunction AccountTransferQuotaMessage() {\n const isTopLevel = useSelector(isEditableAccountOfTopLevel);\n const account = useSelector(getEditableAccount);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return (\n <>\n {UIFactory.renderTransferQuotaNoticeForAccount({\n isTopLevel,\n accountAttributes: account.$attributes,\n clusterUiConfig,\n })}\n </>\n );\n}\n\nexport default React.memo(AccountTransferQuotaMessage);\n","import React, {Component} from 'react';\n\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\ninterface Props {\n account: {\n name: string;\n };\n}\n\nexport default class NodesContent extends Component<Props> {\n render() {\n const {account} = this.props;\n\n return (\n <div className=\"elements-section\">\n <AccountTransferQuotaMessage />\n <AccountQuota\n title={'Nodes'}\n currentAccount={account.name}\n type={AccountResourceName.NODE_COUNT}\n />\n </div>\n );\n }\n}\n","import React, {Component} from 'react';\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\ninterface Props {\n account: {\n name: string;\n };\n}\n\nexport default class ChunksContent extends Component<Props> {\n render() {\n const {account} = this.props;\n\n return (\n <div className=\"elements-section\">\n <AccountTransferQuotaMessage />\n <AccountQuota\n title={'Chunks'}\n currentAccount={account.name}\n type={AccountResourceName.CHUNK_COUNT}\n />\n </div>\n );\n }\n}\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport partition_ from 'lodash/partition';\n\nimport {ClickableText} from '../../../../../../components/ClickableText/ClickableText';\nimport {getMediumList} from '../../../../../../store/selectors/thor';\n\nimport hammer from '../../../../../../common/hammer';\nimport {RootState} from '../../../../../../store/reducers';\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\nconst block = cn('accounts-medium-content-tab');\n\ninterface Props {\n account: {\n name: string;\n perMedium: {\n [type: string]: {\n totalDiskSpace: number;\n diskSpaceLimit: number;\n committedDiskSpace: number;\n uncommittedDiskSpace: number;\n diskSpaceProgress: number;\n diskSpaceProgressText: string;\n diskSpaceProgressTheme: string;\n };\n };\n };\n mediumList: Array<string>;\n}\n\nclass MediumContent extends Component<Props> {\n state = {\n showAllMediums: false,\n };\n\n toggleShowAll = () => {\n this.setState({showAllMediums: !this.state.showAllMediums});\n };\n\n renderMediums(account: Props['account'], mediums: Array<string>) {\n return mediums.map((mediumType) => (\n <AccountQuota\n key={mediumType}\n title={hammer.format['ReadableField'](mediumType) + ' medium'}\n currentAccount={account.name}\n type={AccountResourceName.DISK_SPACE_PER_MEDIUM}\n mediumType={mediumType}\n />\n ));\n }\n\n render() {\n const {account, mediumList} = this.props;\n const mediumTypesWithoutCache = mediumList.filter((item) => item !== 'cache');\n const [defined, rest] = partition_(\n mediumTypesWithoutCache,\n (mediumType) => account.perMedium[mediumType],\n );\n\n const {showAllMediums} = this.state;\n let showAllText = '';\n if (rest.length > 0) {\n showAllText = showAllMediums ? 'Show defined only' : 'Show all';\n }\n return (\n <div className={block()}>\n <AccountTransferQuotaMessage />\n {this.renderMediums(account, defined)}\n {showAllText && (\n <div className={block('show-all', 'elements-section')}>\n <ClickableText onClick={this.toggleShowAll}>{showAllText}</ClickableText>\n </div>\n )}\n {showAllMediums && this.renderMediums(account, rest)}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => ({\n mediumList: getMediumList(state),\n});\n\nexport default connect(mapStateToProps)(MediumContent);\n","import React, {Component} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport {RootState} from '../../../../../../store/reducers';\nimport {\n getCluster,\n getClusterUiConfigBundleAccountingHelpLink,\n getClusterUiConfigEnablePerAccountTabletAccounting,\n getClusterUiConfigEnablePerBundleTabletAccounting,\n} from '../../../../../../store/selectors/global';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport Link from '../../../../../../components/Link/Link';\nimport {Page} from '../../../../../../constants';\n\nimport './TabletsContent.scss';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\nconst block = cn('accounts-editor-tablets');\n\ninterface Props {\n account: {\n name: string;\n };\n}\n\nclass TabletsContent extends Component<Props & ConnectedProps<typeof connector>> {\n renderTabletsQuota() {\n const {account} = this.props;\n\n return (\n <AccountQuota\n title={'Tablets'}\n type={AccountResourceName.TABLET_COUNT}\n currentAccount={account.name}\n />\n );\n }\n\n renderTabletsMemory() {\n const {account} = this.props;\n\n return (\n <AccountQuota\n title={'Tablet static memory'}\n type={AccountResourceName.TABLET_STATIC_MEMORY}\n currentAccount={account.name}\n />\n );\n }\n\n render() {\n const {allowTabletAccounting} = this.props;\n return (\n <div className=\"elements-section\">\n <AccountTransferQuotaMessage />\n {allowTabletAccounting && this.renderTabletsQuota()}\n {allowTabletAccounting && this.renderTabletsMemory()}\n <TabletAccountingNotice />\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n return {\n allowTabletAccounting: getClusterUiConfigEnablePerAccountTabletAccounting(state),\n };\n};\n\nconst connector = connect(mapStateToProps);\n\nexport default connector(TabletsContent);\n\nexport function TabletAccountingNotice({className}: {className?: string}) {\n const allowPerTablet = useSelector(getClusterUiConfigEnablePerBundleTabletAccounting);\n\n const helpLink = useSelector(getClusterUiConfigBundleAccountingHelpLink);\n const cluster = useSelector(getCluster);\n\n return !allowPerTablet ? null : (\n <div className={className}>\n <div className={block('warning')}>\n Tablet resource accounting (tablet count and tablet static memory) has been moved\n from accounts to{' '}\n <Link url={`/${cluster}/${Page.TABLET_CELL_BUNDLES}`} routed>\n tablet cell bundles\n </Link>\n .\n </div>\n {helpLink && (\n <div>\n <Link url={helpLink}>More details</Link>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport map_ from 'lodash/map';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport AccountQuota from '../../../../AccountQuota/AccountQuota';\nimport {AccountResourceName} from '../../../../../../constants/accounts/accounts';\nimport {getAccountMasterMemoryMedia} from '../../../../../../store/selectors/accounts/accounts-ts';\nimport {useSelector} from 'react-redux';\nimport AccountTransferQuotaMessage from '../AccountTransferQuotaMessage';\n\ninterface Props {\n account: {\n name: string;\n };\n}\n\nexport default function MasterMemoryContent(props: Props) {\n const media = useSelector(getAccountMasterMemoryMedia);\n const {account} = props;\n\n return (\n <div className=\"elements-section\">\n <AccountTransferQuotaMessage />\n {map_(media, (medium) => {\n return (\n <AccountQuota\n key={medium}\n title={format.Readable(medium)}\n type={AccountResourceName.MASTER_MEMORY}\n currentAccount={account.name}\n mediumType={medium}\n />\n );\n })}\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\nimport Tabs from '../../../../../components/Tabs/Tabs';\nimport {contentTabs} from '../../../../../utils/accounts/editor';\nimport GeneralContent from './content/GeneralContent';\nimport DeleteContent from './content/DeleteContent';\nimport NodesContent from './content/NodesContent';\nimport ChunksContent from './content/ChunksContent';\nimport MediumContent from './content/MediumContent';\nimport TabletsContent from './content/TabletsContent';\nimport MasterMemoryContent from './content/MasterMemoryContent';\nimport {EDITOR_TABS} from '../../../../../constants/accounts/editor';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport './Editor.scss';\n\nconst b = block('accounts-editor');\n\nexport default class Editor extends Component {\n static propTypes = {\n //from parent component\n account: PropTypes.object,\n };\n\n state = {\n activeTab: EDITOR_TABS.general,\n };\n\n onTabChange = (value) => {\n this.setState({activeTab: value});\n };\n\n render() {\n const {activeTab} = this.state;\n const {account} = this.props;\n\n return (\n <div className={b('edit')}>\n <div className={b('edit-sidebar')}>\n <div className={b('edit-tabs')}>\n <Tabs\n items={contentTabs}\n size=\"m\"\n layout=\"vertical\"\n active={activeTab}\n onTabChange={this.onTabChange}\n />\n </div>\n </div>\n <ErrorBoundary>\n <div className={b('edit-content', 'pretty-scroll')}>\n {activeTab === EDITOR_TABS.general && <GeneralContent account={account} />}\n {activeTab === EDITOR_TABS.delete && <DeleteContent account={account} />}\n {activeTab === EDITOR_TABS.nodes && <NodesContent account={account} />}\n {activeTab === EDITOR_TABS.chunks && <ChunksContent account={account} />}\n {activeTab === EDITOR_TABS.medium && <MediumContent account={account} />}\n {activeTab === EDITOR_TABS.tablets && <TabletsContent account={account} />}\n {activeTab === EDITOR_TABS.masterMemory && (\n <MasterMemoryContent account={account} />\n )}\n </div>\n </ErrorBoundary>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport map_ from 'lodash/map';\n\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../common/hammer/format';\n\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport {AccountParsedData, visitResourceFields} from '../../../../utils/accounts/accounts-selector';\nimport './AccountAlerts.scss';\n\nconst block = cn('yt-account-alerts');\n\ninterface Props {\n account: AccountParsedData;\n}\n\nfunction AccountAlerts({account}: Props) {\n const alerts: Record<string, number> = {};\n\n visitResourceFields(account?.$attributes?.recursive_violated_resource_limits, (value, path) => {\n if (value > 0) {\n alerts[path] = value;\n }\n });\n\n return (\n <React.Fragment>\n <div className={block('tooltip-title')}>\n Limits of the following resources are violated\n <br /> by the account or its children:\n </div>\n <MetaTable\n items={map_(alerts, (value, path) => {\n return {\n key: path,\n label: readablePath(path),\n value: <>{value}</>,\n };\n })}\n />\n </React.Fragment>\n );\n}\n\nexport default React.memo(AccountAlerts);\n\nfunction readablePath(path: string) {\n return path.split('/').map(format.ReadableField).join(' / ');\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n AccountStaticConfigurationItem,\n getActiveAccount,\n getActiveAccountStaticConfiguration,\n} from '../../../../../store/selectors/accounts/accounts-ts';\nimport CollapsibleSection from '../../../../../components/CollapsibleSection/CollapsibleSection';\nimport DataTableYT from '../../../../../components/DataTableYT/DataTableYT';\nimport {Column} from '@gravity-ui/react-data-table';\nimport hammer from '../../../../../common/hammer';\nimport {setSettingsAccountsExpandStaticConfiguration} from '../../../../../store/actions/settings/settings';\n\nimport './AccountStaticConfiguration.scss';\nimport {getSettingsAccountsExpandStaticConfiguration} from '../../../../../store/selectors/settings/settings-ts';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../constants/global';\nconst block = cn('account-static-configuration');\n\ninterface Props {\n className?: string;\n}\n\nconst columns: Array<Column<AccountStaticConfigurationItem>> = [\n {\n name: 'name',\n header: '',\n sortable: false,\n width: 200,\n render: (row) => {\n const {name, level} = row?.row || {};\n return <span className={block('name', {level: level as any})}>{name}</span>;\n },\n },\n {\n name: 'limit',\n header: 'Limit',\n sortable: false,\n width: 100,\n accessor: (row) => {\n const {total, format} = row;\n return hammer.format[format](total);\n },\n },\n {\n name: 'usage',\n header: 'Usage',\n sortable: false,\n width: 100,\n accessor: (row) => {\n const {used, format} = row;\n return hammer.format[format](used);\n },\n },\n {\n name: 'free',\n header: 'Free',\n sortable: false,\n width: 100,\n accessor: (row) => {\n const {free, format} = row;\n return hammer.format[format](free);\n },\n },\n];\n\nfunction AccountStaticConfiguration({className}: Props) {\n const dispatch = useDispatch();\n\n const account = useSelector(getActiveAccount);\n const items = useSelector(getActiveAccountStaticConfiguration);\n const expandState = useSelector(getSettingsAccountsExpandStaticConfiguration);\n\n const onToggle = React.useCallback(\n (value: boolean) => {\n // It is required to enforce DataTable to redraw content\n window.dispatchEvent(new Event('resize'));\n dispatch(setSettingsAccountsExpandStaticConfiguration(!value));\n },\n [dispatch],\n );\n\n if (!account || !items?.length) {\n return null;\n }\n\n return (\n <CollapsibleSection\n name={'Static configuration'}\n className={block(null, className)}\n size={UI_COLLAPSIBLE_SIZE}\n collapsed={!expandState}\n onToggle={onToggle}\n >\n <DataTableYT\n columns={columns}\n data={items}\n useThemeYT\n className={block('table')}\n settings={{\n displayIndices: false,\n }}\n rowClassName={({level}) => {\n return !level ? '' : block('row', {level: String(level)});\n }}\n />\n </CollapsibleSection>\n );\n}\n\nexport default React.memo(AccountStaticConfiguration);\n","import React from 'react';\n\nimport map_ from 'lodash/map';\n\nimport {\n getAccountMasterMemoryMedia,\n getAccountsContentMode,\n getAccountsMasterMemoryContentMode,\n} from '../../../../store/selectors/accounts/accounts-ts';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n AccountsStateDataFields,\n setAccountsStateDataFields,\n} from '../../../../store/actions/accounts/accounts-ts';\nimport {Secondary} from '../../../../components/Text/Text';\nimport format from '../../../../common/hammer/format';\nimport Select from '../../../../components/Select/Select';\n\nfunction Item({text}: {text: string}) {\n return (\n <React.Fragment>\n <Secondary>Mode:</Secondary> {text}\n </React.Fragment>\n );\n}\n\nfunction MasterMemoryTableMode() {\n const dispatch = useDispatch();\n const mode = useSelector(getAccountsContentMode);\n const value = useSelector(getAccountsMasterMemoryContentMode);\n const media = useSelector(getAccountMasterMemoryMedia);\n\n const handleUpdate = React.useCallback(\n (vals: Array<string>) => {\n dispatch(\n setAccountsStateDataFields({\n masterMemoryContentMode:\n vals[0] as AccountsStateDataFields['masterMemoryContentMode'],\n }),\n );\n },\n [dispatch],\n );\n\n const items = React.useMemo(() => {\n return map_(media, (item) => {\n return {\n value: item,\n text: <Item text={format.Readable(item)} />,\n };\n });\n }, [media]);\n\n return mode !== 'master_memory' ? null : (\n <span>\n <Select onUpdate={handleUpdate} items={items} value={[value]} filterable />\n </span>\n );\n}\n\nexport default React.memo(MasterMemoryTableMode);\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\n\nimport {Select} from '@gravity-ui/uikit';\n\nimport WithStickyToolbar, {\n STICKY_TOOLBAR_BOTTOM,\n} from '../../../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport hammer from '../../../../common/hammer';\nimport {\n getFavouriteAccountsSet,\n getFilteredAccounts,\n getFilteredAccountsOfDashboard,\n} from '../../../../store/selectors/accounts/dashboard';\n\nimport {\n getAccountsVisibilityMode,\n getAccountsVisibilityModeOfDashboard,\n} from '../../../../store/selectors/settings';\nimport AccountsTotal from './AccountsTotal';\n\nimport CollapsibleSection from '../../../../components/CollapsibleSection/CollapsibleSection';\nimport withStickyHead from '../../../../components/ElementsTable/hocs/withStickyHead';\nimport withStickyFooter from '../../../../components/ElementsTable/hocs/withStickyFooter';\nimport Error from '../../../../components/Error/Error';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport Filter from '../../../../components/Filter/Filter';\nimport AccountLink from '../../AccountLink';\nimport Icon from '../../../../components/Icon/Icon';\nimport CustomRadioButton from '../../../../components/RadioButton/RadioButton';\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport Modal from '../../../../components/Modal/Modal';\nimport Editor from './Editor/Editor';\nimport AccountAlerts from './AccountAlerts';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nimport {loadUsers} from '../../../../store/actions/accounts/editor';\nimport {accountsToggleFavourite} from '../../../../store/actions/favourites';\nimport getTableProps from '../../../../utils/accounts/tables';\nimport {\n ACCOUNTS_CONTENT_MODE_ITEMS,\n genRadioButtonVisibleAccounts,\n makeReadableItems,\n} from '../../../../utils/accounts';\nimport {getMediumList} from '../../../../store/selectors/thor';\nimport {\n changeContentFilter,\n changeMediumFilter,\n changeNameFilter,\n closeEditorModal,\n filterUsableAccounts,\n loadEditedAccount,\n setAccountsAbcServiceFilter,\n setAccountsTreeState,\n setAccountsVisibilityMode,\n setAccountsVisibilityModeOfDashboard,\n setActiveAccount,\n showEditorModal,\n} from '../../../../store/actions/accounts/accounts';\nimport {\n getAccountsAbcServiceIdSlugFilter,\n getActiveAccountAggregationRow,\n} from '../../../../store/selectors/accounts/accounts';\nimport {isNull} from '../../../../utils';\nimport {DASHBOARD_VIEW_CONTEXT} from '../../../../constants/index';\nimport {AccountResourceName} from '../../../../constants/accounts/accounts';\n\nimport {ProgressStackByTreeItem} from './ProgressStack';\n\nimport './AccountsGeneralTab.scss';\nimport {\n getAccountsColumnFields,\n getAccountsContentMode,\n getAccountsMapByName,\n getAccountsMasterMemoryContentMode,\n} from '../../../../store/selectors/accounts/accounts-ts';\nimport {\n getCluster,\n getClusterUiConfig,\n getClusterUiConfigEnablePerAccountTabletAccounting,\n} from '../../../../store/selectors/global';\nimport {TabletAccountingNotice} from './Editor/content/TabletsContent';\nimport AccountStaticConfiguration from './AccountStaticConfiguration/AccountStaticConfiguration';\nimport {Warning} from '../../../../components/Text/Text';\nimport Button from '../../../../components/Button/Button';\nimport MasterMemoryTableMode from './MasterMemoryTableMode';\nimport UIFactory from '../../../../UIFactory';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../constants/global';\n\nconst b = block('accounts');\nconst progressTooltipClassname = b('progress-tooltip');\n\nfunction Bytes({bytes, isAggregation}) {\n if (isNull(bytes)) {\n return hammer.format.NO_VALUE;\n }\n\n return (\n <div className={b('bytes')}>\n <div\n className={b('item', {\n bytes: true,\n aggregated: isAggregation,\n })}\n >\n {hammer.format['Bytes'](bytes)}\n </div>\n {!isAggregation && (\n <small className={b('item-bytes')}>{hammer.format['Number'](bytes)}</small>\n )}\n </div>\n );\n}\n\nconst DB_VISIBILITY_MODE_PROPS = genRadioButtonVisibleAccounts();\nconst ACCOUNTS_VISIBILITY_MODE_PROPS = genRadioButtonVisibleAccounts(true);\n\nconst ElementsTableWithHeaderAndFooter = compose(withStickyHead, withStickyFooter)(ElementsTable);\n\nBytes.propTypes = {\n bytes: PropTypes.number,\n isAggregation: PropTypes.bool,\n};\n\nfunction renderBytes(bytes, isAggregation) {\n return (\n <ErrorBoundary>\n <Bytes bytes={bytes} isAggregation={isAggregation} />\n </ErrorBoundary>\n );\n}\n\nfunction renderNumber(value, isAggregation = false) {\n return (\n <div className={b('item', {aggregated: isAggregation})}>\n {hammer.format['Number'](value)}\n </div>\n );\n}\n\nfunction VisibilityNotice({mode}) {\n let message = null;\n if (mode === 'usable') {\n message =\n 'Currently only the accounts for which you have the \"Use\" permission are displayed';\n }\n if (mode === 'favourites') {\n message = 'Currently only the accounts that marked as favourite are displayed.';\n }\n\n return !message ? null : <Warning>{message}</Warning>;\n}\n\nclass AccountsGeneralTab extends Component {\n static propTypes = {\n accounts: PropTypes.array.isRequired,\n nameToAccountMap: PropTypes.object.isRequired,\n contextViewTree: PropTypes.array.isRequired,\n responsibleUsers: PropTypes.array.isRequired,\n clusterTotalsUsage: PropTypes.object.isRequired,\n nodesData: PropTypes.object.isRequired,\n usableAccounts: PropTypes.array.isRequired,\n activeNameFilter: PropTypes.string.isRequired,\n activeContentModeFilter: PropTypes.string.isRequired,\n activeMediumFilter: PropTypes.string.isRequired,\n mediumList: PropTypes.array.isRequired,\n editableAccount: PropTypes.object.isRequired,\n showEditor: PropTypes.bool.isRequired,\n usableError: PropTypes.object,\n usableErrorMessage: PropTypes.string,\n errorData: PropTypes.object,\n viewContext: PropTypes.string,\n loadTotals: PropTypes.bool,\n loadNodes: PropTypes.bool,\n error: PropTypes.bool,\n wasLoaded: PropTypes.bool,\n fetching: PropTypes.bool,\n activeAccount: PropTypes.string,\n accountsTreeState: PropTypes.string,\n activeAccountBreadcrumbs: PropTypes.arrayOf(\n PropTypes.shape({\n text: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n }),\n ),\n activeAccountAggregation: PropTypes.object,\n dashboardVisibilityMode: PropTypes.string,\n favouriteAccountsSet: PropTypes.object.isRequired,\n\n changeNameFilter: PropTypes.func.isRequired,\n changeContentFilter: PropTypes.func.isRequired,\n changeMediumFilter: PropTypes.func.isRequired,\n filterUsableAccounts: PropTypes.func.isRequired,\n closeEditorModal: PropTypes.func.isRequired,\n loadUsers: PropTypes.func.isRequired,\n setAccountsTreeState: PropTypes.func.isRequired,\n loadEditedAccount: PropTypes.func.isRequired,\n showEditorModal: PropTypes.func.isRequired,\n setActiveAccount: PropTypes.func.isRequired,\n setAccountsVisibilityModeOfDashboard: PropTypes.func.isRequired,\n accountsToggleFavourite: PropTypes.func.isRequired,\n setAccountsAbcServiceFilter: PropTypes.func.isRequired,\n\n cluster: PropTypes.string,\n };\n\n static defaultProps = {\n viewContext: 'accounts',\n };\n\n renderAccountsPageHeader() {\n const {\n wasLoaded,\n loadNodes,\n loadTotals,\n nodesData,\n clusterTotalsUsage,\n accounts,\n mediumList,\n collapsibleSize,\n activeAccount,\n } = this.props;\n const isLoaded = wasLoaded && loadNodes && loadTotals;\n\n return (\n <div className={b('header', 'elements-section')}>\n {activeAccount ? (\n <AccountStaticConfiguration />\n ) : (\n <CollapsibleSection name=\"Media\" size={collapsibleSize}>\n {isLoaded && (\n <AccountsTotal\n nodesData={nodesData}\n clusterTotalsUsage={clusterTotalsUsage}\n accounts={accounts}\n mediumList={mediumList}\n />\n )}\n </CollapsibleSection>\n )}\n </div>\n );\n }\n\n renderFilters() {\n const {\n mediumList,\n viewContext,\n activeNameFilter,\n activeMediumFilter,\n activeContentModeFilter,\n dashboardVisibilityMode,\n abcServiceFilter: {slug, id} = {},\n contextView,\n } = this.props;\n\n const showMediumType =\n mediumList &&\n (activeContentModeFilter === 'default' || activeContentModeFilter === 'disk_space');\n\n const radioProps =\n contextView === DASHBOARD_VIEW_CONTEXT\n ? DB_VISIBILITY_MODE_PROPS\n : ACCOUNTS_VISIBILITY_MODE_PROPS;\n\n return (\n <div className={b('toolbar', 'elements-section')}>\n <div className={b('dashboard-visibility-mode', 'elements-toolbar__component')}>\n <CustomRadioButton\n onChange={this.onDashboardVisibilityModeChange}\n {...radioProps}\n value={dashboardVisibilityMode}\n />\n </div>\n <div className={b('name-filter', 'elements-toolbar__component')}>\n <Filter\n hasClear\n size=\"m\"\n type=\"text\"\n value={activeNameFilter}\n placeholder=\"Account...\"\n onChange={this.props.changeNameFilter}\n autofocus={viewContext !== DASHBOARD_VIEW_CONTEXT}\n qa={'accounts-name-filter'}\n />\n </div>\n {UIFactory.renderControlAbcService({\n className: b('abc-service-filter', 'elements-toolbar__component'),\n value: {slug, id},\n onChange: this.onAbcServiceFilter,\n })}\n <div className={b('content-mode', 'elements-toolbar__component')}>\n <Select\n value={[activeContentModeFilter]}\n options={ACCOUNTS_CONTENT_MODE_ITEMS}\n onUpdate={(vals) => this.props.changeContentFilter(vals[0])}\n label=\"Mode:\"\n qa=\"accounts-content-mode\"\n disablePortal\n />\n </div>\n <div className={b('content-mode-subtype', 'elements-toolbar__component')}>\n {!showMediumType ? (\n <MasterMemoryTableMode />\n ) : (\n <Select\n options={makeReadableItems(mediumList)}\n value={[activeMediumFilter]}\n onUpdate={(vals) => this.props.changeMediumFilter(vals[0])}\n label=\"Medium:\"\n disablePortal\n />\n )}\n </div>\n </div>\n );\n }\n\n onAbcServiceFilter = (value) => {\n const {id, slug} = value || {};\n const {setAccountsAbcServiceFilter} = this.props;\n setAccountsAbcServiceFilter(id, slug);\n };\n\n onDashboardVisibilityModeChange = (event) => {\n const {viewContext} = this.props;\n if (viewContext === DASHBOARD_VIEW_CONTEXT) {\n this.props.setAccountsVisibilityModeOfDashboard(event.target.value);\n } else {\n this.props.setAccountsVisibilityMode(event.target.value);\n }\n };\n\n renderUsableError() {\n const {usableError} = this.props;\n\n return <Error error={usableError} />;\n }\n\n get templates() {\n const {\n activeAccount,\n activeMediumFilter: mediumType,\n favouriteAccountsSet,\n accountsToggleFavourite,\n columnFields,\n cluster,\n masterMemoryContentMode,\n clusterUiConfig,\n } = this.props;\n const self = this;\n\n const templates = {\n name(treeItem, name, toggleStateFn, itemState) {\n const {level = 0} = treeItem;\n\n const OFFSET = 20;\n const offsetStyle = {paddingLeft: level * OFFSET};\n const {attributes: item, children, isAggregation} = treeItem;\n\n if (isAggregation) {\n return (\n <div className={b('item', {name: true})} style={offsetStyle}>\n <div\n className={b('item-name', {\n aggregation: true,\n })}\n >\n Aggregation\n </div>\n </div>\n );\n }\n\n const hasChildren = children && children.length > 0;\n const toggler = (\n <div\n className={b('item-toggler', {hidden: !hasChildren})}\n onClick={toggleStateFn}\n >\n <Icon awesome={itemState.collapsed ? 'angle-down' : 'angle-up'} />\n </div>\n );\n\n const nameElement = (\n <div className={b('item-name')}>\n <AccountLink account={item.name} cluster={cluster} />\n </div>\n );\n\n const isInFavourites = favouriteAccountsSet.has(item.name);\n const onFavouriteClick = () => {\n accountsToggleFavourite(item.name);\n };\n return (\n <div className={b('item', {name: true})} style={offsetStyle}>\n {toggler}\n {nameElement}\n <div\n className={b('item-favorite-star', {\n active: isInFavourites,\n })}\n onClick={onFavouriteClick}\n >\n <Icon awesome={isInFavourites ? 'star-alt' : 'star'} />\n </div>\n {UIFactory.renderAccountsTableItemExtraControls({\n itemClassName: b('name-extra-control'),\n cluster,\n clusterUiConfig,\n account: item.name,\n accountAttributes: item.$attributes,\n })}\n </div>\n );\n },\n\n alerts(treeItem) {\n const {attributes: account} = treeItem;\n const {alertsCount} = account;\n const text = alertsCount > 0 ? alertsCount : '';\n return (\n text && (\n <Tooltip\n placement={'top-start'}\n content={<AccountAlerts account={account} />}\n >\n <span className={b('alert')}>{text}</span>\n </Tooltip>\n )\n );\n },\n\n disk_space_default(treeItem) {\n return templates.disk_space_percentage(treeItem, mediumType);\n },\n\n disk_space_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.DISK_SPACE_PER_MEDIUM}\n mediumType={mediumType}\n />\n );\n },\n\n disk_space_usage(treeItem) {\n const value = columnFields.disk_space_usage.get(treeItem);\n return renderBytes(value, treeItem.isAggregation);\n },\n\n disk_space_limit(treeItem) {\n const value = columnFields.disk_space_limit.get(treeItem);\n const {isAggregation} = treeItem;\n return renderBytes(value, isAggregation);\n },\n\n disk_space_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.disk_space_free.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n node_count_default(treeItem) {\n return templates.node_count_percentage(treeItem);\n },\n\n node_count_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.NODE_COUNT}\n />\n );\n },\n\n node_count_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.node_count_usage.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n node_count_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.node_count_limit.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n node_count_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.node_count_free.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n chunk_count_default(treeItem) {\n return templates.chunk_count_percentage(treeItem);\n },\n\n chunk_count_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.CHUNK_COUNT}\n />\n );\n },\n\n chunk_count_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.chunk_count_usage.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n chunk_count_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.chunk_count_limit.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n chunk_count_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.chunk_count_free.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n tablet_count_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.TABLET_COUNT}\n />\n );\n },\n\n tablet_count_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_count_usage.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n tablet_count_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_count_limit.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n tablet_count_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_count_free.get(treeItem);\n return renderNumber(value, isAggregation);\n },\n\n tablet_static_memory_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.TABLET_STATIC_MEMORY}\n />\n );\n },\n\n tablet_static_memory_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_static_memory_usage.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n tablet_static_memory_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_static_memory_limit.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n tablet_static_memory_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.tablet_static_memory_free.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n master_memory_percentage(treeItem) {\n return (\n <ProgressStackByTreeItem\n className={progressTooltipClassname}\n treeItem={treeItem}\n activeAccount={activeAccount}\n type={AccountResourceName.MASTER_MEMORY}\n mediumType={masterMemoryContentMode}\n />\n );\n },\n\n master_memory_usage(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.master_memory_usage.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n master_memory_limit(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.master_memory_limit.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n master_memory_free(treeItem) {\n const {isAggregation} = treeItem;\n const value = columnFields.master_memory_free.get(treeItem);\n return renderBytes(value, isAggregation);\n },\n\n master_memory_detailed_nodes(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_nodes.get(treeItem),\n isAggregation,\n );\n },\n master_memory_detailed_chunks(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_chunks.get(treeItem),\n isAggregation,\n );\n },\n master_memory_detailed_attributes(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_attributes.get(treeItem),\n isAggregation,\n );\n },\n master_memory_detailed_tablets(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_tablets.get(treeItem),\n isAggregation,\n );\n },\n master_memory_detailed_schemas(treeItem) {\n const {isAggregation} = treeItem;\n return renderBytes(\n columnFields.master_memory_detailed_schemas.get(treeItem),\n isAggregation,\n );\n },\n\n actions(treeItem) {\n if (treeItem.isAggregation) {\n return null;\n }\n\n const {attributes: item} = treeItem;\n const commonProps = {\n view: 'flat-secondary',\n size: 's',\n };\n\n const handleClick = () => self.onEditClick(item);\n\n return (\n <span>\n <Button\n {...commonProps}\n title=\"Edit account\"\n onClick={handleClick}\n qa={`edit-account-${item.name}`}\n >\n <Icon awesome=\"pencil\" />\n </Button>\n </span>\n );\n },\n };\n\n return templates;\n }\n\n onEditClick(account) {\n this.props.showEditorModal(account);\n }\n\n renderAccountsTable() {\n const {\n activeAccount,\n contextViewTree,\n activeMediumFilter,\n activeContentModeFilter,\n fetching,\n wasLoaded,\n accountsTreeState,\n enable_per_account_tablet_accounting,\n dashboardVisibilityMode,\n } = this.props;\n\n const tableProps = getTableProps(\n activeAccount,\n activeContentModeFilter,\n activeMediumFilter,\n );\n const isLoading = fetching && !wasLoaded;\n const selectedIndex = activeAccount ? 0 : undefined;\n\n const isTCBRelative =\n activeContentModeFilter === 'tablets' || activeContentModeFilter === 'tablets_memory';\n\n const allowTable = !isTCBRelative || enable_per_account_tablet_accounting;\n\n const items = contextViewTree || [];\n\n return (\n <div className={b('content', 'elements-section')}>\n {!allowTable && <TabletAccountingNotice className={b('tcb-resource-notice')} />}\n {allowTable && <VisibilityNotice mode={dashboardVisibilityMode} />}\n {allowTable && (\n <ElementsTableWithHeaderAndFooter\n {...tableProps}\n isLoading={isLoading}\n treeState={accountsTreeState}\n items={items}\n onItemToggleState={this.onItemToggleState}\n templates={this.templates}\n selectedIndex={selectedIndex}\n header={false}\n footer={this.props.activeAccountAggregation}\n top={STICKY_TOOLBAR_BOTTOM}\n treeStateExpanded={!activeAccount ? [] : [items && items[0]?.key]}\n />\n )}\n </div>\n );\n }\n\n onItemToggleState = () => {\n this.props.setAccountsTreeState('mixed');\n };\n\n renderEditorModal() {\n const {closeEditorModal, editableAccount, showEditor} = this.props;\n\n return (\n editableAccount.name && (\n <Modal\n onOutsideClick={closeEditorModal}\n onCancel={closeEditorModal}\n visible={showEditor}\n content={<Editor account={editableAccount} />}\n title={editableAccount.name}\n footer={false}\n size={'l'}\n />\n )\n );\n }\n\n render() {\n const {error, usableError, wasLoaded, viewContext, fetching} = this.props;\n\n return (\n <div>\n <div className={b()}>\n {viewContext !== DASHBOARD_VIEW_CONTEXT && this.renderAccountsPageHeader()}\n <WithStickyToolbar\n toolbar={this.renderFilters()}\n content={\n <div>\n {error && <Error error={this.props.errorData} />}\n {usableError && this.renderUsableError()}\n {(wasLoaded || fetching) && this.renderAccountsTable()}\n </div>\n }\n />\n </div>\n {this.renderEditorModal()}\n </div>\n );\n }\n}\n\nconst makeMapStateToProps = () => {\n return (state, ownProps) => {\n const nameToAccountMap = getAccountsMapByName(state);\n const favouriteAccountsSet = getFavouriteAccountsSet(state);\n\n const {\n accounts: {accounts},\n } = state;\n\n const {viewContext} = ownProps;\n const isDashboard = viewContext === DASHBOARD_VIEW_CONTEXT;\n\n const contextViewTree = isDashboard\n ? getFilteredAccountsOfDashboard(state)\n : getFilteredAccounts(state);\n\n return {\n ...accounts,\n activeContentModeFilter: getAccountsContentMode(state),\n\n clusterUiConfig: getClusterUiConfig(state),\n\n mediumList: getMediumList(state),\n accounts: accounts.accounts,\n contextViewTree,\n nameToAccountMap,\n\n cluster: getCluster(state),\n\n activeAccountAggregation: getActiveAccountAggregationRow(state),\n favouriteAccountsSet,\n dashboardVisibilityMode: isDashboard\n ? getAccountsVisibilityModeOfDashboard(state)\n : getAccountsVisibilityMode(state),\n abcServiceFilter: getAccountsAbcServiceIdSlugFilter(state),\n columnFields: getAccountsColumnFields(state),\n\n enable_per_account_tablet_accounting:\n getClusterUiConfigEnablePerAccountTabletAccounting(state),\n\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n\n masterMemoryContentMode: getAccountsMasterMemoryContentMode(state),\n };\n };\n};\n\nconst mapDispatchToProps = {\n changeNameFilter,\n changeContentFilter,\n changeMediumFilter,\n filterUsableAccounts,\n closeEditorModal,\n loadUsers,\n setAccountsTreeState,\n loadEditedAccount,\n setActiveAccount,\n showEditorModal,\n accountsToggleFavourite,\n setAccountsVisibilityModeOfDashboard,\n setAccountsVisibilityMode,\n setAccountsAbcServiceFilter,\n};\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(AccountsGeneralTab);\n","import {\n CLOSE_CREATE_MODAL,\n FETCH_USERS,\n OPEN_CREATE_MODAL,\n} from '../../../constants/accounts/editor';\nimport {listAllUsers} from '../../../utils/users-groups';\nimport {YTApiId} from '../../../rum/rum-wrap-api';\n\nexport function loadUsers() {\n return (dispatch) => {\n return listAllUsers(YTApiId.listUsers)\n .then((data) => {\n dispatch({\n type: FETCH_USERS.SUCCESS,\n data,\n });\n })\n .catch((error) => {\n dispatch({\n type: FETCH_USERS.FAILURE,\n error,\n });\n });\n };\n}\n\nexport function openCreateModal(account) {\n return {\n type: OPEN_CREATE_MODAL,\n data: {account},\n };\n}\n\nexport function closeCreateModal(newAccountInfo) {\n return {\n type: CLOSE_CREATE_MODAL,\n data: newAccountInfo,\n };\n}\n"],"names":["block","cn","Message","_ref","_ref$theme","theme","_ref$showClose","showClose","dismissCallback","content","buttons","_jsxs","className","children","_jsx","Button","size","view","title","onClick","Icon","type","React","map_","data","index","button","text","callback","AccountsUpdater","dispatch","useDispatch","editCounter","useSelector","getAccountsEditCounter","update","fetchAccounts","useUpdater","getUsableAccountsSet","createSelector","getUsableAccounts","items","Set","getFavouriteAccountsSet","getFavouriteAccounts","getFilteredAccountsOfDashboard","prepareAccountsFlattenTree","getAccountsVisibilityModeOfDashboard","filterFlattenTreeByViewContext","getFilteredAccounts","getAccountsVisibilityMode","getActiveAccount","nodesChunksUsageList","prepareMediumStats","usedSpace","availableSpace","settings","forEach_","stats","used","available","usage","limit","initMediumStats","list","reduce_","getNodesChunksTotals","clusterTotalsUsage","clusterExtendedTotal","total_resource_usage","total_resource_limits","getClusterExtendedTotal","name","clusterUsage","clusterLimit","hammer","format","progress","compact_","b","AccountsTotal","_Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","this","props","item","Progress","nodesData","mediumList","clusterTotalPerMedium","hardwareLimitPerMedium","readThroughput","writeThroughput","_this$props","diskSpace","accounts","_nodesData","perMedium","disk_space_per_medium","getClusterTotal","usedSpacePerMedia","used_space_per_medium","availableSpacePerMedia","available_space_per_medium","mediumType","getHardwareLimit","ioStatisticsPerMedia","io_statistics_per_medium","_ioStatisticsPerMedia","_ioStatisticsPerMedia2","rate","disk_read_rate","capacity","disk_read_capacity","getReadThroughput","_ioStatisticsPerMedia3","_ioStatisticsPerMedia4","disk_write_rate","disk_write_capacity","getWriteThroughput","hardwareLimit","overcommitted","diskReadRate","diskReadCapacity","diskWriteRate","diskWriteCapacity","show","calcProgressProps","accountsIoThroughputThresholds","Fragment","map","WarningIcon","hoverContent","_objectSpread","NO_VALUE","renderNodesChunksTotals","renderNewTotals","Component","ConfirmMessage","confirmQuestion","onApply","onCancel","defaultProps","toaster","Toaster","DeleteContent","_this","_len","length","args","Array","_key","call","concat","state","showConfirmMessage","error","undefined","handleDelete","account","closeEditorModal","deleteAccount","then","setState","activeValue","add","timeout","handleCancel","handleButtonClick","showErrorMessage","_this$state","Error","message","connect","ProgressTooltip","info","formatNumber","ErrorBoundary","ProgressTooltipRow","mixin","committed","ProgressTooltipTotalRow","i","_ref2","color","icon","style","awesome","face","committedValue","isNumber_","limitValue","_ref3","acc","colors","STACKED_PROGRESS_BAR_COLORS","ProgressStackImpl","treeItem","infoGetter","useChildren","popupClassName","isAggregation","_prepareProgressStack","getTreeItemInfoFn","recursiveInfo","isEmpty_","_recursiveInfo$limit","progressText","_recursiveInfo$commit","recursiveCommitted","_recursiveInfo$uncomm","uncommitted","recursiveUncommitted","_toConsumableArray","allLimit","Math","max","colorIndex","progressStack","tooltipInfo","_getTreeItemInfoFn","_Account$prepareProgr","Account","prepareProgressStack","_Account$prepareProgr2","_slicedToArray","committedEl","uncommittedEl","tooltipItem","getAccountName","push","isNull","progressValue","reduce","isNaN","stack","Tooltip","placement","tooltipClassName","err","console","ProgressStackByTreeItem","activeAccount","isActiveAccount","_ACCOUNT_RESOURCE_TYP","ACCOUNT_RESOURCE_TYPES_DESCRIPTION","_ACCOUNT_RESOURCE_TYP2","getInfo","recursive","attributes","AccountQuotaEditor","_React$Component","renderSourcesSuggest","onChange","sources","SelectSingle","placeholder","width","validateAccount","currentAccount","getInfoByName","ROOT_ACCOUNT_NAME","Infinity","total","accountData","accountsTree","resourcePath","getResourcePath","ypath","getValue","RESOURCES_LIMITS_PREFIX","RESOURCES_USAGE_PREFIX","RECURSIVE_RESOURCES_USAGE_PREFIX","totalChildrenLimit","TOTAL_CHILDREN_RESOURCE_LIMIT","allowChildrenOverCommit","ALLOW_CHILDREN_LIMIT_OVERCOMMIT","toggleShowEditor","showEditor","onLimitChange","newLimit","limitDiff","distributeAccount","setAccountQuota","_this$props2","ClickableText","QuotaEditorWithHide","onHide","onSave","parentOfCurrentAccount","getParentAccount","renderSourceSuggest","min","calcMinLimit","parent","_this$props3","_this$props$accountsT","_this$getInfoByName2","_this$getInfoByName2$","_this$getInfoByName2$2","_this$getInfoByName2$3","AccountQuota","getAccountsTree","handleSetQuota","params","toasterName","wrapApiPromiseByToaster","dotPath","replace","yt","transferAccountResources","parameters","source_account","destination_account","resource_delta","update_","setAccountLimit","Promise","resolve","setAccountQuotaImpl","successContent","loadEditedAccount","accountsIncreaseEditCounter","getEditableAccountQuotaSources","AccountTransferQuotaMessage","isTopLevel","isEditableAccountOfTopLevel","getEditableAccount","clusterUiConfig","getClusterUiConfig","_Fragment","UIFactory","renderTransferQuotaNoticeForAccount","accountAttributes","$attributes","NodesContent","AccountResourceName","NODE_COUNT","ChunksContent","CHUNK_COUNT","MediumContent","showAllMediums","toggleShowAll","mediums","DISK_SPACE_PER_MEDIUM","mediumTypesWithoutCache","filter","_partition_","partition_","_partition_2","defined","rest","showAllText","renderMediums","getMediumList","TabletsContent","TABLET_COUNT","TABLET_STATIC_MEMORY","allowTabletAccounting","renderTabletsQuota","renderTabletsMemory","TabletAccountingNotice","getClusterUiConfigEnablePerAccountTabletAccounting","allowPerTablet","getClusterUiConfigEnablePerBundleTabletAccounting","helpLink","getClusterUiConfigBundleAccountingHelpLink","cluster","getCluster","Link","url","Page","TABLET_CELL_BUNDLES","routed","MasterMemoryContent","media","getAccountMasterMemoryMedia","medium","Readable","MASTER_MEMORY","Editor","activeTab","EDITOR_TABS","general","onTabChange","Tabs","contentTabs","layout","active","GeneralContent","nodes","chunks","tablets","masterMemory","AccountAlerts","_account$$attributes","alerts","visitResourceFields","recursive_violated_resource_limits","path","MetaTable","label","readablePath","split","ReadableField","join","columns","header","sortable","render","row","level","accessor","free","AccountStaticConfiguration","getActiveAccountStaticConfiguration","expandState","getSettingsAccountsExpandStaticConfiguration","onToggle","window","dispatchEvent","Event","setSettingsAccountsExpandStaticConfiguration","CollapsibleSection","UI_COLLAPSIBLE_SIZE","collapsed","DataTableYT","useThemeYT","displayIndices","rowClassName","String","Item","Secondary","MasterMemoryTableMode","mode","getAccountsContentMode","getAccountsMasterMemoryContentMode","handleUpdate","vals","setAccountsStateDataFields","masterMemoryContentMode","Select","onUpdate","filterable","progressTooltipClassname","Bytes","bytes","aggregated","DB_VISIBILITY_MODE_PROPS","genRadioButtonVisibleAccounts","ACCOUNTS_VISIBILITY_MODE_PROPS","ElementsTableWithHeaderAndFooter","compose","withStickyHead","withStickyFooter","ElementsTable","renderBytes","renderNumber","VisibilityNotice","Warning","AccountsGeneralTab","onAbcServiceFilter","id","slug","setAccountsAbcServiceFilter","onDashboardVisibilityModeChange","event","viewContext","DASHBOARD_VIEW_CONTEXT","setAccountsVisibilityModeOfDashboard","target","setAccountsVisibilityMode","onItemToggleState","setAccountsTreeState","wasLoaded","loadNodes","loadTotals","collapsibleSize","isLoaded","_this2","activeNameFilter","activeMediumFilter","activeContentModeFilter","dashboardVisibilityMode","_this$props2$abcServi","abcServiceFilter","_this$props2$abcServi2","showMediumType","radioProps","contextView","CustomRadioButton","Filter","hasClear","changeNameFilter","autofocus","qa","renderControlAbcService","options","ACCOUNTS_CONTENT_MODE_ITEMS","changeContentFilter","disablePortal","makeReadableItems","changeMediumFilter","usableError","get","favouriteAccountsSet","accountsToggleFavourite","columnFields","self","templates","toggleStateFn","itemState","_treeItem$level","offsetStyle","paddingLeft","aggregation","hasChildren","toggler","hidden","nameElement","AccountLink","isInFavourites","has","renderAccountsTableItemExtraControls","itemClassName","alertsCount","disk_space_default","disk_space_percentage","disk_space_usage","disk_space_limit","disk_space_free","node_count_default","node_count_percentage","node_count_usage","node_count_limit","node_count_free","chunk_count_default","chunk_count_percentage","chunk_count_usage","chunk_count_limit","chunk_count_free","tablet_count_percentage","tablet_count_usage","tablet_count_limit","tablet_count_free","tablet_static_memory_percentage","tablet_static_memory_usage","tablet_static_memory_limit","tablet_static_memory_free","master_memory_percentage","master_memory_usage","master_memory_limit","master_memory_free","master_memory_detailed_nodes","master_memory_detailed_chunks","master_memory_detailed_attributes","master_memory_detailed_tablets","master_memory_detailed_schemas","actions","onEditClick","showEditorModal","_items$","_this$props4","contextViewTree","fetching","accountsTreeState","enable_per_account_tablet_accounting","tableProps","getTableProps","isLoading","selectedIndex","allowTable","treeState","footer","activeAccountAggregation","top","STICKY_TOOLBAR_BOTTOM","treeStateExpanded","_this$props5","editableAccount","Modal","onOutsideClick","visible","_this$props6","renderAccountsPageHeader","WithStickyToolbar","toolbar","renderFilters","errorData","renderUsableError","renderAccountsTable","renderEditorModal","mapDispatchToProps","filterUsableAccounts","loadUsers","setActiveAccount","ownProps","nameToAccountMap","getAccountsMapByName","isDashboard","getActiveAccountAggregationRow","getAccountsAbcServiceIdSlugFilter","getAccountsColumnFields","listAllUsers","YTApiId","listUsers","FETCH_USERS","SUCCESS","FAILURE","openCreateModal","OPEN_CREATE_MODAL","closeCreateModal","newAccountInfo","CLOSE_CREATE_MODAL"],"sourceRoot":""}
|