iobroker.admin 7.1.2 → 7.1.4

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.
Files changed (29) hide show
  1. package/README.md +10 -8
  2. package/adminWww/asset-manifest.json +15 -15
  3. package/adminWww/index.html +1 -1
  4. package/adminWww/static/css/{3210.f6c8a5fc.chunk.css → 4684.f5525d8f.chunk.css} +2 -2
  5. package/adminWww/static/css/4684.f5525d8f.chunk.css.map +1 -0
  6. package/adminWww/static/js/{2534.d8fd195b.chunk.js → 2534.11005596.chunk.js} +2 -2
  7. package/adminWww/static/js/2534.11005596.chunk.js.map +1 -0
  8. package/adminWww/static/js/4684.fc294ac0.chunk.js +2 -0
  9. package/adminWww/static/js/4684.fc294ac0.chunk.js.map +1 -0
  10. package/adminWww/static/js/5056.9247882b.chunk.js +3 -0
  11. package/adminWww/static/js/5056.9247882b.chunk.js.map +1 -0
  12. package/adminWww/static/js/{8038.ae8b7862.chunk.js → 8038.579db3dd.chunk.js} +2 -2
  13. package/adminWww/static/js/8038.579db3dd.chunk.js.map +1 -0
  14. package/adminWww/static/js/9399.5fc0496e.chunk.js +2 -0
  15. package/adminWww/static/js/9399.5fc0496e.chunk.js.map +1 -0
  16. package/adminWww/static/js/{main.423e60b6.js → main.be81a57c.js} +2 -2
  17. package/adminWww/static/js/{main.423e60b6.js.map → main.be81a57c.js.map} +1 -1
  18. package/io-package.json +27 -27
  19. package/package.json +4 -13
  20. package/adminWww/static/css/3210.f6c8a5fc.chunk.css.map +0 -1
  21. package/adminWww/static/js/2534.d8fd195b.chunk.js.map +0 -1
  22. package/adminWww/static/js/3210.1be726e7.chunk.js +0 -2
  23. package/adminWww/static/js/3210.1be726e7.chunk.js.map +0 -1
  24. package/adminWww/static/js/6539.0a444811.chunk.js +0 -3
  25. package/adminWww/static/js/6539.0a444811.chunk.js.map +0 -1
  26. package/adminWww/static/js/8038.ae8b7862.chunk.js.map +0 -1
  27. package/adminWww/static/js/9399.5852b7e7.chunk.js +0 -2
  28. package/adminWww/static/js/9399.5852b7e7.chunk.js.map +0 -1
  29. /package/adminWww/static/js/{6539.0a444811.chunk.js.LICENSE.txt → 5056.9247882b.chunk.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/9399.5fc0496e.chunk.js","mappings":"iTASA,MAAMA,EAAY,WACZC,EAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAC5CC,EAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACvFC,EAAe,CACjB,EAAM,cAEN,EAAM,yBACN,EAAM,+BAEN,GAAM,0CACN,GAAM,kCACN,GAAM,kDACN,IAAM,sCAEN,GAAM,qCACN,GAAM,mCACN,IAAM,mCAEN,GAAM,gCACN,GAAM,8BACN,IAAM,8BAEN,GAAM,8BACN,IAAM,+BAEJC,EAAa,CACfC,QAAS,MACTC,SAAU,MACVC,SAAU,MACVC,YAAa,MACb,OAAQ,MACRC,OAAQ,MACRC,IAAK,MACLC,OAAQ,OAGZ,MAAMC,EAcF,mBAAOC,CAAaC,GAChB,OAAQA,GAAQ,IACXC,MAAM,SACNC,QAAOC,GAAQA,IACfC,KAAIC,GAASA,EAAOA,EAAK,GAAGC,cAAgBD,EAAKE,UAAU,GAAGC,cAAgB,KAC9EC,KAAK,IACd,CAEA,oBAAOC,CAAcC,GACjB,MAAMC,EAAQC,KAAKC,MAAMH,EAAO,OAChCA,GAAW,MACX,IAAII,EAAQF,KAAKC,MAAMH,EAAU,MAC7BI,EAAQ,KACRA,EAAQ,IAAIA,KAEhBJ,GAAW,KACX,IAAIK,EAAUH,KAAKC,MAAMH,EAAU,IAC/BK,EAAU,KACVA,EAAU,IAAIA,KAElBL,GAAW,IACXA,EAAUE,KAAKC,MAAMH,IACP,KACVA,EAAU,IAAIA,KAElB,IAAIM,EAAO,GAMX,OALIL,IACAK,GAAQ,GAAGL,KAASM,EAAAA,KAAKC,EAAE,wBAE/BF,GAAQ,GAAGF,KAASC,KAAWL,IAExBM,CACX,CAWA,oBAAOG,CAAcC,EAASC,EAAIC,EAAUC,EAASC,GACjD,MAAMtB,EAAOkB,EAAQC,GACrB,IAAIL,EACJ,MAAMS,EAAOD,EAAS,OAAS,OAgB/B,GAdwB,kBAAbF,GAA0BC,IACjCA,EAAU,CAAEG,SAAUJ,GACtBA,EAAW,OAGfC,EAAUA,GAAW,CAAC,GACTG,WACTH,EAAQG,SACHN,EAAQ,kBACLA,EAAQ,iBAAiBO,QACzBP,EAAQ,iBAAiBO,OAAOD,UACpCE,OAAOC,SACP,MAEJP,GAAYA,EAASvB,KACrBiB,EAAOM,EAASvB,KACI,kBAATiB,IACPA,EAAOA,EAAKO,EAAQG,WAAaV,EAAKc,SAEvC,GAAI5B,GAAQA,EAAKyB,QAAUzB,EAAKyB,OAAOF,GAC1CT,EAAOd,EAAKyB,OAAOF,GACN,SAATA,IAAoBT,GAAQd,EAAKyB,OAAOI,OACxCf,EAAOd,EAAKyB,OAAOI,MAEH,kBAATf,IACPA,EAAOA,EAAKO,EAAQG,WAAaV,EAAKc,IAAMd,EAAKgB,IAAMhB,EAAKiB,IAAM,IAEtEjB,GAAQA,GAAQ,IAAIkB,WAAWC,QAAQ,QAAS,KAE5CnB,IAASA,EAAKX,gBACdW,EAAOA,EAAK,GAAKA,EAAKV,UAAU,GAAGC,mBAEpC,CACH,MAAM6B,EAAMf,EAAGgB,YAAY,KAC3BrB,EAAOK,EAAGf,UAAU8B,EAAM,GAAGD,QAAQ,QAAS,KAC9CnB,EAAOnB,EAAMC,aAAakB,EAC9B,CAEA,OAAOA,EAAKsB,MAChB,CAWA,2BAAOC,CAAqBC,EAAKlB,EAAUC,EAASC,EAAQiB,GACxD,MAAMvC,EAAOsC,EACb,IAAIxB,EAAQwB,GAAOA,EAAIE,KAAQ,GAC/B,MAAMjB,EAAOD,EAAS,OAAS,OA4B/B,MA1BwB,kBAAbF,GAA0BC,IACjCA,EAAU,CAAEG,SAAUJ,GACtBA,EAAW,MAGfC,EAAUA,GAAW,CAAC,EAElBD,GAAYA,EAASvB,MACrBiB,EAAOM,EAASvB,KACI,kBAATiB,IACPA,EAAOA,EAAKO,EAAQG,WAAaV,EAAKc,KAEnC5B,GAAQA,EAAKyB,QAAUzB,EAAKyB,OAAOF,KAC1CT,EAAOd,EAAKyB,OAAOF,GACN,SAATA,IAAoBT,GAAQd,EAAKyB,OAAOI,OACxCf,EAAOd,EAAKyB,OAAOI,MAEH,kBAATf,IACPA,EAAOA,EAAKO,EAAQG,WAAaV,EAAKc,IAE1Cd,GAAQA,GAAQ,IAAIkB,WAAWC,QAAQ,QAAS,KAE5CnB,IAASA,EAAKX,gBACdW,EAAOA,EAAK,GAAKA,EAAKV,UAAU,GAAGC,gBAGpCkC,EAASzB,EAAOA,EAAKsB,MAChC,CAQA,uBAAOK,CAAiBH,EAAKI,EAAWrB,GAIpC,IAAID,EACJ,GAJIkB,GAAOK,OAAOC,UAAUC,eAAeC,KAAKR,EAAK,YACjDA,EAAMA,EAAIb,QAGVa,GAAOA,EAAIS,OAAQ,CACnB3B,GAAYkB,EAAIS,QAAU,CAAC,GAAGhE,GAC9B,MAAMiE,EAAO3B,EAAQ2B,MAAQ,QAC7B,GAAI5B,GAAYA,EAAS4B,GACrB,GAAIN,GACA,GAAItB,EAAS4B,GAAMC,UAAY7B,EAAS4B,GAAMC,SAASP,GACnD,OAAOQ,KAAKC,MAAMD,KAAKE,UAAUhC,EAAS4B,GAAMC,SAASP,UAE1D,GAAItB,EAAS4B,GAAMK,MACtB,OAAOH,KAAKC,MAAMD,KAAKE,UAAUhC,EAAS4B,GAAMK,OAG5D,CACA,OAAO,IACX,CAOA,4BAAOC,CAAsBhB,EAAKI,EAAWrB,GAIzC,IAAID,EACJ,GAJIkB,GAAOK,OAAOC,UAAUC,eAAeC,KAAKR,EAAK,YACjDA,EAAMA,EAAIb,QAGVa,GAAOA,EAAIS,OAAQ,CACnB3B,GAAYkB,EAAIS,QAAU,CAAC,GAAGhE,GAC9B,MAAMiE,EAAO3B,EAAQ2B,MAAQ,QAC7B,GAAI5B,GAAYA,EAAS4B,GACrB,GAAIN,GACA,GAAItB,EAAS4B,GAAMO,SAAWnC,EAAS4B,GAAMO,QAAQb,GACjD,OAAOQ,KAAKC,MAAMD,KAAKE,UAAUhC,EAAS4B,GAAMO,QAAQb,UAEzD,GAAItB,EAAS4B,GAAMQ,KACtB,OAAON,KAAKC,MAAMD,KAAKE,UAAUhC,EAAS4B,GAAMQ,MAG5D,CACA,OAAO,IACX,CAQA,cAAOC,CAAQC,EAAMC,EAAQC,GACzB,MAAMC,EAASC,MAAMC,KAAKL,IACnBM,GAAWH,EAAOI,OAAON,EAAQ,GAExC,OADAE,EAAOI,OAAOL,EAAM,EAAGI,GAChBH,CACX,CAOA,kBAAOK,CAAY5B,EAAKjB,EAAS8C,GAAkB,IAADC,EAC9C,IAAIhD,EACJ,MAAMD,EAAMmB,GAAOA,EAAIE,KAASnB,GAAWA,EAAQF,GA6CnD,GA5CImB,GAAOK,OAAOC,UAAUC,eAAeC,KAAKR,EAAK,YACjDA,EAAMA,EAAIb,QAEP,QAAP2C,EAAI9B,SAAG,IAAA8B,GAAHA,EAAKrB,QACL3B,EAAWkB,EAAIS,OACf3B,EACIA,EAASrC,IAAcqC,EAASrC,GAAWsC,EAAQ2B,MAAQ,SACrDE,KAAKC,MAAMD,KAAKE,UAAUhC,EAASrC,GAAWsC,EAAQ2B,MAAQ,WAC9D,CAAEqB,SAAS,IAErBjD,EAAW,CAAEiD,aAA6BC,IAApBH,GAAuCA,EAAiBI,WAAW,GAGxF5B,OAAOC,UAAUC,eAAeC,KAAK1B,EAAU,aAChDA,EAASiD,aAA8BC,IAApBH,GAAuCA,GAQ1D9C,KACKD,EAASvB,MAAQwB,EAAQxB,OAAMuB,EAASvB,KAAOwB,EAAQxB,OACvDuB,EAASoD,MAAQnD,EAAQmD,OAAMpD,EAASoD,KAAOnD,EAAQmD,OACvDpD,EAASqD,OAASpD,EAAQoD,QAAOrD,EAASqD,MAAQpD,EAAQoD,QAG/DnC,KACKlB,EAASqD,OAASnC,EAAImC,QAAOrD,EAASqD,MAAQnC,EAAImC,QAClDrD,EAASoD,MAAQlC,EAAIkC,OAAMpD,EAASoD,KAAOlC,EAAIkC,OAC/CpD,EAASvB,MAAQyC,EAAIzC,OAAMuB,EAASvB,KAAOyC,EAAIzC,OAI3B,kBAAlBuB,EAASvB,OAChBuB,EAASvB,KAAOuB,EAASvB,KAAKwB,EAAQG,WAAaJ,EAASvB,KAAK+B,GAEjER,EAASvB,MAAQuB,EAASvB,MAAQ,IAAImC,WAAWC,QAAQ,KAAM,KAE3Db,EAASvB,OAASuB,EAASvB,KAAKM,gBAChCiB,EAASvB,KAAOuB,EAASvB,KAAK,GAAKuB,EAASvB,KAAKO,UAAU,GAAGC,iBAGjEe,EAASvB,MAAQsB,EAAI,CACtB,MAAMe,EAAMf,EAAGgB,YAAY,KAC3Bf,EAASvB,KAAOsB,EAAGf,UAAU8B,EAAM,GAAGD,QAAQ,QAAS,KACvDb,EAASvB,MAAQuB,EAASvB,MAAQ,IAAImC,WAAWC,QAAQ,KAAM,KAC/Db,EAASvB,KAAOF,EAAMC,aAAawB,EAASvB,KAChD,CAEA,OAAOuB,CACX,CAOA,kBAAOsD,CAAYpC,EAAKlB,EAAUC,GAC9B,GAAIiB,EAAK,CACLA,EAAIb,OAASa,EAAIb,QAAU,CAAC,EAC5Ba,EAAIb,OAAOsB,OAAST,EAAIb,OAAOsB,QAAU,CAAC,EAC1CT,EAAIb,OAAOsB,OAAOhE,GAAauD,EAAIb,OAAOsB,OAAOhE,IAAc,CAAC,EAChEuD,EAAIb,OAAOsB,OAAOhE,GAAWsC,EAAQ2B,MAAQ,SAAW5B,EACxD,MAAMuD,EAAIrC,EAAIb,OAAOsB,OAAOhE,GAAWsC,EAAQ2B,MAAQ,SAqBvD,OApBI2B,EAAEC,iBACcN,IAAZK,EAAEF,QACFnC,EAAIb,OAAOgD,MAAQE,EAAEF,aACdE,EAAEF,YAEEH,IAAXK,EAAEH,OACFlC,EAAIb,OAAO+C,KAAOG,EAAEH,YACbG,EAAEH,WAEEF,IAAXK,EAAE9E,OAC6B,kBAApByC,EAAIb,OAAO5B,MAClByC,EAAIb,OAAO5B,KAAO,CAAC,EACnByC,EAAIb,OAAO5B,KAAKwB,EAAQG,UAAYmD,EAAE9E,MAEtCyC,EAAIb,OAAO5B,KAAKwB,EAAQG,UAAYmD,EAAE9E,YAEnC8E,EAAE9E,QAIV,CACX,CAEA,OAAO,CACX,CAQA,cAAOgF,CAAQzD,EAAU0D,GACrB,OAAI1D,GAAYA,EAASoD,KAEjBpD,EAASoD,KAAKO,QAAU,GACjBC,EAAAA,EAAAA,KAAA,QAAMF,MAAOA,GAAS,CAAC,EAAEG,SAAE7D,EAASoD,OAE3CpD,EAASoD,KAAKU,WAAW,eAErBF,EAAAA,EAAAA,KAAA,OACIG,IAAK/D,EAASvB,KACduF,IAAKhE,EAASoD,KACdM,MAAOA,GAAS,CAAC,KAMzBE,EAAAA,EAAAA,KAAA,OACIG,IAAK/D,EAASvB,KACduF,KAAMhE,EAASiE,QAAU,IAAMjE,EAASoD,KACxCM,MAAOA,GAAS,CAAC,IAItB,IACX,CAQA,oBAAOQ,CAAcnE,EAAImB,GAOrB,GALkB,kBAAPnB,IAEPA,GADAmB,EAAMnB,GACGqB,KAGTF,GAAOA,EAAIb,QAAUa,EAAIb,OAAO+C,KAAM,CACtC,IAAIA,EAAOlC,EAAIb,OAAO+C,KAEtB,GAAoB,kBAATA,GAAqBA,EAAKO,QAAU,EAC3C,OAAOP,EAEX,GAAIA,EAAKU,WAAW,cAChB,OAAOV,EAGX,MAAMe,EAAQpE,EAAGrB,MAAM,KAcvB,OAZI0E,EADa,WAAbe,EAAM,GACC,WAAWA,EAAM,KAAKf,EAAKU,WAAW,KAAO,GAAK,MAAMV,IAExD,WAAWe,EAAM,KAAKf,EAAKU,WAAW,KAAO,GAAK,MAAMV,IAG/D9C,OAAO8D,SAASC,SAASC,MAAM,gCAExBhE,OAAO8D,SAASC,SAASC,MAAM,oBADtClB,EAAO,SAASA,IAGT9C,OAAO8D,SAASC,SAASC,MAAM,gBACtClB,EAAO,MAAMA,KAEVA,CACX,CAEA,OAAO,IACX,CAOA,qBAAOmB,CAAe7E,GAkClB,OAAOnB,EAAMC,aAAakB,EAC9B,CASA,kBAAO8E,CAAYnB,EAAOoB,GACtB,GAAc,OAAVpB,QAA4BH,IAAVG,GAAiC,KAAVA,EACzC,YAAwBH,IAAjBuB,GAAoCA,EAM/C,IAAIC,EACAC,EACAC,GANJvB,EAAQA,EAAMzC,YACJkD,WAAW,OACjBT,EAAQA,EAAMwB,MAAM,IAMxB,MAAMC,EAAMzB,EAAMiB,MAAM,wEACxB,GAAIQ,GAAsB,IAAfA,EAAInB,OACXe,EAAIK,SAASD,EAAI,GAAI,IACrBH,EAAII,SAASD,EAAI,GAAI,IACrBF,EAAIG,SAASD,EAAI,GAAI,QAClB,CAMH,GAJqB,IAAjBzB,EAAMM,SACNN,EAAQA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,IAGpD,IAAjBA,EAAMM,OACNN,EAAQA,EAAMrE,UAAU,EAAG,QACxB,GAAqB,IAAjBqE,EAAMM,OACb,OAAO,EAGXe,EAAIK,SAAS1B,EAAMwB,MAAM,EAAG,GAAI,IAChCF,EAAII,SAAS1B,EAAMwB,MAAM,EAAG,GAAI,IAChCD,EAAIG,SAAS1B,EAAMwB,MAAM,EAAG,GAAI,GACpC,CAGA,MAAW,KAAJH,EAAgB,KAAJC,EAAgB,KAAJC,GAAa,GAChD,CAMA,oBAAOI,CAAc5F,GAEjB,GADAA,EAAU6F,WAAW7F,GACjB8F,OAAOC,MAAM/F,GACb,MAAO,QAEX,MAAMI,EAAQF,KAAKC,MAAMH,EAAU,MACnC,IAAIK,EAAUH,KAAKC,MAAOH,EAAU,KAAQ,IACxCgG,EAAOhG,EAAU,GACrB,OAAII,GACIC,EAAU,KACVA,EAAU,IAAIA,KAEd2F,EAAO,KACPA,EAAO,IAAIA,KAER,GAAG5F,KAASC,KAAW2F,MAG9BA,EAAO,KACPA,EAAO,IAAIA,KAER,GAAG3F,KAAW2F,IACzB,CAOA,uBAAOC,CAAiBC,GACpB,OAAIA,GAAS,GAAKA,EAAQ,MACf,IAEPA,GAAS,OAASA,EAAQ,MACnB,MAEPA,GAAS,OAASA,EAAQ,MACnB,KAEPA,GAAS,OAASA,EAAQ,MACnB,MAEPA,GAAS,OAASA,EAAQ,OACnB,IAEPA,GAAS,QAAUA,EAAQ,OACpB,MAEPA,GAAS,QAAUA,EAAQ,OACpB,KAEPA,GAAS,QAAUA,EAAQ,OACpB,MAEPA,GAAS,QAAUA,EAAQ,OACpB,IAEPA,GAAS,QAAUA,EAAQ,OACpB,MAEPA,GAAS,QAAUA,EAAQ,OACpB,KAEPA,GAAS,QAAUA,EAAQ,OACpB,MAEPA,GAAS,QAAUA,EAAQ,OACpB,IAEPA,GAAS,QAAUA,EAAQ,OACpB,MAEPA,GAAS,QAAUA,EAAQ,OACpB,KAEPA,GAAS,QAAUA,EAAQ,OACpB,MAGJ,GACX,CAMA,cAAOC,CAAQC,GACX,MAAmB,kBAARA,EACHA,EAAI7B,OAAS,EACN,IAAI6B,IAERA,EAEPA,EAAM,GACC,IAAIA,IAERA,CACX,CAMA,oBAAOC,CAAcC,GACbA,IACAnH,EAAMoH,WAAaD,EAAO3G,cAAcL,MAAM,SAC9CH,EAAMoH,WAAW9C,OAAOtE,EAAMoH,WAAWC,QAAQ,QAAS,GAElE,CAOA,kBAAOC,CAAYC,GACf,GAAmB,kBAARA,EAAkB,CAEzB,KADAA,EAAMA,EAAI9E,QACA,MAAO,GAEjB,GAAI8E,EAAIxB,MAAM,aAEV,OAAOwB,EAEX,MAAMC,EAAID,EAAIxB,MAAM,yCACpB,GAAIyB,EAAG,CACH,MAAMC,EAAI,CAACjB,SAASgB,EAAE,GAAI,IAAKhB,SAASgB,EAAE,GAAI,IAAKhB,SAASgB,EAAE,GAAI,KAC5DE,EAAOD,EAAEE,MAAKC,GAAKA,EAAI,KAC7BH,EAAEnD,OAAOmD,EAAEJ,QAAQK,GAAO,GAC1B,MAAMG,EAAMJ,EAAEE,MAAKG,GAAMA,EAAK,KAC1BD,GACAJ,EAAEnD,OAAOmD,EAAEJ,QAAQQ,GAAM,GACzBN,EAAM,IAAIQ,KAAKL,EAAMD,EAAE,GAAK,EAAGI,IACG,MAA3B7H,EAAMoH,WAAW,GAAG,IAAyC,MAA3BpH,EAAMoH,WAAW,GAAG,IAE7DG,EAAM,IAAIQ,KAAKL,EAAMD,EAAE,GAAK,EAAGA,EAAE,IAC7B1G,KAAKiH,IAAIT,EAAIU,QAAUF,KAAKR,OAAS,QACrCA,EAAM,IAAIQ,KAAKL,EAAMD,EAAE,GAAK,EAAGA,EAAE,MAEH,MAA3BzH,EAAMoH,WAAW,GAAG,IAAyC,MAA3BpH,EAAMoH,WAAW,GAAG,IAE7DG,EAAM,IAAIQ,KAAKL,EAAMD,EAAE,GAAK,EAAGA,EAAE,IAC7B1G,KAAKiH,IAAIT,EAAIU,QAAUF,KAAKR,OAAS,QACrCA,EAAM,IAAIQ,KAAKL,EAAMD,EAAE,GAAK,EAAGA,EAAE,MAGrCF,EAAM,IAAIQ,KAAKR,EAEvB,MACIA,EAAM,IAAIQ,KAAKR,EAEvB,MACIA,EAAM,IAAIQ,KAAKR,GAGnB,IAAIW,EAAO9G,EAAAA,KAAKC,EAAE,UAAUhC,EAAKkI,EAAIY,aAAa7F,QAAQ,UAAW,IAErE,OADA4F,GAAQ,KAAKX,EAAIa,aAAahH,EAAAA,KAAKC,EAAE,YAAY/B,EAAOiI,EAAIc,eAAe/F,QAAQ,YAAa,MACzF4F,CACX,CAOA,sBAAOI,CAAgBnH,GACnB,IAAIqG,EAAIrG,EAAK4E,MAAM,qDACnB,GAAIyB,EAAG,CACH,MAAMtD,EAAS,GACf,IAAIqE,EAAM,EACV,EAAG,CACC,MAAMC,EAAQrH,EAAKV,UAAU,EAAG+G,EAAEiB,OAMlC,GALAtH,EAAOA,EAAKV,UAAU+G,EAAEiB,MAAQjB,EAAE,GAAGpC,QACjCoD,GACAtE,EAAOwE,MAAKrD,EAAAA,EAAAA,KAAA,QAAAC,SAAyBkD,GAAd,IAAID,MAG3Bf,EAAE,GAAGjC,WAAW,OAChBrB,EAAOwE,MAAKrD,EAAAA,EAAAA,KAAA,KAAAC,SAAsBkC,EAAE,GAAG/G,UAAU,EAAG+G,EAAE,GAAGpC,OAAS,IAA9C,IAAImD,WACrB,GAAIf,EAAE,GAAGjC,WAAW,OACvBrB,EAAOwE,MAAKrD,EAAAA,EAAAA,KAAA,KAAAC,SAAsBkC,EAAE,GAAG/G,UAAU,EAAG+G,EAAE,GAAGpC,OAAS,IAA9C,IAAImD,WACrB,GAAIf,EAAE,GAAGjC,WAAW,OACvBrB,EAAOwE,MAAKrD,EAAAA,EAAAA,KAAA,QAAS,IAAIkD,UACtB,CACH,MAAMI,EAAOnB,EAAE,GAAGzB,MAAM,mBAAqByB,EAAE,GAAGzB,MAAM,kBAClD6C,EAASpB,EAAE,GAAGzB,MAAM,qBAAuByB,EAAE,GAAGzB,MAAM,oBACtD8C,EAAMrB,EAAE,GAAGzB,MAAM,kBAAoByB,EAAE,GAAGzB,MAAM,iBAChD+C,EAAQtB,EAAE,GAAGzB,MAAM,aAGzB7B,EAAOwE,MACHrD,EAAAA,EAAAA,KAAA,KAEIsD,KAAMA,EAAOA,EAAK,GAAK,GACvBC,OAAQA,EAASA,EAAO,GAAK,SAC7BC,IAAKA,EAAMA,EAAI,GAAK,GACpB1D,MAAO,CAAEL,MAAO,WAAYQ,SAE3BwD,EAAQA,EAAM,GAAK,IANf,IAAIP,KASrB,CAEAf,EAAIrG,GAAQA,EAAK4E,MAAM,sDAClByB,GAAKrG,GACN+C,EAAOwE,MAAKrD,EAAAA,EAAAA,KAAA,QAAAC,SAAyBnE,GAAd,IAAIoH,KAEnC,OAASf,GAET,OAAOtD,CACX,CAEA,OAAO/C,CACX,CASA,mBAAO4H,CAAaC,EAAQxH,EAAIyH,EAAYC,GAAW,IAADC,EACzCC,EAAT,OAAK5H,EAiBA0H,EAIEF,EAAOxH,IAAwB,QAArB2H,EAAIH,EAAOxH,GAAIM,cAAM,IAAAqH,GAAjBA,EAAmB/F,QAAU4F,EAAOxH,GAAIM,OAAOsB,OAAO6F,IACrED,EAAOxH,GAAIM,OAAOsB,OAAO6F,GAAYI,WACrC,KALKL,EAAOxH,GAAIM,OAAOuH,UAjBpBH,EASDF,IAAWA,EAAOlH,OACXkH,EAAOK,UAEL,OAANL,QAAM,IAANA,GAAc,QAARI,EAANJ,EAAQlH,cAAM,IAAAsH,GAAdA,EAAgBhG,QAAU4F,EAAOlH,OAAOsB,OAAO6F,GAChDD,EAAOlH,OAAOsB,OAAO6F,GAAYI,eACjC1E,EAbGqE,EAAOlH,OAGRkH,IAAWA,EAAOlH,OACXkH,EAAOK,UAEXL,EAAOlH,OAAOuH,UALVL,EAAOK,SAqB9B,CAQA,0BAAOC,CAAoB3G,EAAKsG,EAAYC,GAAW,IAADK,EAClD,OAAKL,EASDvG,IAAQA,EAAIb,OACLa,EAAI0G,UAGL,OAAH1G,QAAG,IAAHA,GAAW,QAAR4G,EAAH5G,EAAKb,cAAM,IAAAyH,GAAXA,EAAanG,QAAUT,EAAIb,OAAOsB,OAAO6F,GAC1CtG,EAAIb,OAAOsB,OAAO6F,GAAYI,eAC9B1E,EAdGhC,EAAIb,OAGLa,IAAQA,EAAIb,OACLa,EAAI0G,UAER1G,EAAIb,OAAOuH,UALP1G,EAAI0G,SAcvB,CAQA,sBAAOG,CAAgB7G,EAAKsG,EAAYC,GAChCA,GACAvG,EAAIb,OAAOsB,OAAST,EAAIb,OAAOsB,QAAU,CAAC,EAC1CT,EAAIb,OAAOsB,OAAO6F,GAActG,EAAIb,OAAOsB,OAAO6F,IAAe,CAAC,EAClEtG,EAAIb,OAAOsB,OAAO6F,GAAYI,UAAY,CAAC,GAE3C1G,EAAIb,OAAOuH,UAAY,CAAC,CAEhC,CAQA,sBAAOI,CAAgB9G,EAAKsG,EAAYC,GAChCA,EACIvG,EAAIb,QAAUa,EAAIb,OAAOsB,QAAUT,EAAIb,OAAOsB,OAAO6F,KACrDtG,EAAIb,OAAOsB,OAAO6F,GAAc,MAGpCtG,EAAIb,OAAOuH,UAAY,IAE/B,CAWA,sBAAOK,CAAgB/G,EAAKgH,EAAcC,EAAMC,EAAWZ,EAAYC,GACnE,MAAMrH,EAAWT,EAAAA,KAAK0I,cAGtB,GAAoC,kBAAzBnH,EAAIb,OAAOuH,UAAwB,CAC1C,MAAMU,EAAMpH,EAAIb,OAAOuH,UACvB1G,EAAIb,OAAOuH,UAAY,CAAC,EACxB1G,EAAIb,OAAOuH,UAAUxH,GAAYkI,CACrC,CAGA,GAAIpH,EAAIqH,QAAUrH,EAAIqH,OAAOJ,KAAM,QACxBjH,EAAIqH,OAAOJ,KAClB,IAAIK,EAAatH,EAAIb,OAAOuH,UAEvBY,GAAoC,kBAAfA,IACtBA,EAAa,CAAEhI,GAAIgI,GACnBA,EAAWpI,GAAYoI,EAAWhI,IAEtCU,EAAIb,OAAOuH,UAAYY,CAC3B,CAiCA,QAhCkBtF,IAAdkF,IACIX,GACAvG,EAAIb,OAAOsB,OAAST,EAAIb,OAAOsB,QAAU,CAAC,EAC1CT,EAAIb,OAAOsB,OAAO6F,GAActG,EAAIb,OAAOsB,OAAO6F,IAAe,CAAC,EAClEtG,EAAIb,OAAOsB,OAAO6F,GAAYI,UAAY1G,EAAIb,OAAOsB,OAAO6F,GAAYI,WAAa,CAAC,EACjFQ,EAGDlH,EAAIb,OAAOsB,OAAO6F,GAAYI,UAAUQ,UAAYA,SAF7ClH,EAAIb,OAAOsB,OAAO6F,GAAYI,UAAUQ,YAKnDlH,EAAIb,OAAOuH,UAAY1G,EAAIb,OAAOuH,WAAa,CAAC,EAC3CQ,EAGDlH,EAAIb,OAAOuH,UAAUQ,UAAYA,SAF1BlH,EAAIb,OAAOuH,UAAUQ,iBAO3BlF,IAATiF,IACIV,GACAvG,EAAIb,OAAOsB,OAAST,EAAIb,OAAOsB,QAAU,CAAC,EAC1CT,EAAIb,OAAOsB,OAAO6F,GAActG,EAAIb,OAAOsB,OAAO6F,IAAe,CAAC,EAClEtG,EAAIb,OAAOsB,OAAO6F,GAAYI,UAAY1G,EAAIb,OAAOsB,OAAO6F,GAAYI,WAAa,CAAC,EACtF1G,EAAIb,OAAOsB,OAAO6F,GAAYI,UAAUO,KAAOA,IAE/CjH,EAAIb,OAAOuH,UAAY1G,EAAIb,OAAOuH,WAAa,CAAC,EAChD1G,EAAIb,OAAOuH,UAAUO,KAAOA,SAIfjF,IAAjBgF,EAA4B,CAC5B,IAAIN,EAaJ,GAZIH,GACAvG,EAAIb,OAAOsB,OAAST,EAAIb,OAAOsB,QAAU,CAAC,EAC1CT,EAAIb,OAAOsB,OAAO6F,GAActG,EAAIb,OAAOsB,OAAO6F,IAAe,CAAC,EAClEtG,EAAIb,OAAOsB,OAAO6F,GAAYI,UAAY1G,EAAIb,OAAOsB,OAAO6F,GAAYI,WAAa,CAAC,EACtFA,EAAY1G,EAAIb,OAAOsB,OAAO6F,GAAYI,YAE1C1G,EAAIb,OAAOuH,UAAY1G,EAAIb,OAAOuH,WAAa,CAAC,EAChDA,EAAY1G,EAAIb,OAAOuH,WAE3BA,EAAUxH,GAAY8H,EAIlBN,KACEA,EAAUxH,IACPwH,EAAUxH,KAAcc,EAAIb,OAAO5B,QAC9ByC,EAAIb,OAAOoI,MAAQvH,EAAIb,OAAOoI,KAAKC,SAAS,YACxD,QACSd,EAAUxH,GACjB,IAAIuI,GAAQ,EAEZ,IAAK,MAAM7B,KAAOc,EACd,GAAIrG,OAAOC,UAAUC,eAAeC,KAAKkG,EAAWd,GAAM,CACtD6B,GAAQ,EACR,KACJ,CAGAA,IACIlB,OACqDvE,IAAjDhC,EAAIb,OAAOsB,OAAO6F,GAAYI,UAAUO,YACjCjH,EAAIb,OAAOsB,OAAO6F,WAElBtG,EAAIb,OAAOsB,OAAO6F,GAAYhH,UAC9BU,EAAIb,OAAOsB,OAAO6F,GAAY9G,UAC9BQ,EAAIb,OAAOsB,OAAO6F,GAAY7G,UAC9BO,EAAIb,OAAOsB,OAAO6F,GAAYoB,UAC9B1H,EAAIb,OAAOsB,OAAO6F,GAAYqB,UAC9B3H,EAAIb,OAAOsB,OAAO6F,GAAYsB,UAC9B5H,EAAIb,OAAOsB,OAAO6F,GAAYuB,UAC9B7H,EAAIb,OAAOsB,OAAO6F,GAAYwB,UAC9B9H,EAAIb,OAAOsB,OAAO6F,GAAYyB,UAC9B/H,EAAIb,OAAOsB,OAAO6F,GAAY0B,UAC9BhI,EAAIb,OAAOsB,OAAO6F,GAAY,eAEJtE,IAA9BhC,EAAIb,OAAOuH,UAAUO,aACrBjH,EAAIb,OAAOuH,UAAUpH,UACrBU,EAAIb,OAAOuH,UAAUlH,UACrBQ,EAAIb,OAAOuH,UAAUjH,UACrBO,EAAIb,OAAOuH,UAAUgB,UACrB1H,EAAIb,OAAOuH,UAAUiB,UACrB3H,EAAIb,OAAOuH,UAAUkB,UACrB5H,EAAIb,OAAOuH,UAAUmB,UACrB7H,EAAIb,OAAOuH,UAAUoB,UACrB9H,EAAIb,OAAOuH,UAAUqB,UACrB/H,EAAIb,OAAOuH,UAAUsB,UACrBhI,EAAIb,OAAOuH,UAAU,UAE5B1G,EAAIb,OAAOuH,UAAY,KAGnC,CACJ,CACJ,CAQA,uBAAOuB,CAAiBjI,EAAKsG,EAAYC,GACjCA,GACAvG,EAAIb,OAAOsB,OAAST,EAAIb,OAAOsB,QAAU,CAAC,EAC1CT,EAAIb,OAAOsB,OAAO6F,GAActG,EAAIb,OAAOsB,OAAO6F,IAAe,CAAC,EAClEtG,EAAIb,OAAOsB,OAAO6F,GAAYI,WAAY,GAE1C1G,EAAIb,OAAOuH,WAAY,CAE/B,CAOA,sBAAOwB,CAAgB1J,EAAM2J,GAKzB,OAJIA,IACAA,EAAEC,kBACFD,EAAEE,kBAECC,EAAAA,MAAOJ,gBAAgB1J,EAClC,CAOA,uBAAO+J,CAAiBC,GACpB,MAAM5I,GAAO4I,GAAY,IAAI3I,YAAY,KACzC,OAAa,IAATD,EACO4I,EAAS1K,UAAU8B,EAAM,GAAG7B,cAEhC,IACX,CAQA,kBAAO0K,CAAYC,GACf,GAAItK,KAAKiH,IAAIqD,GAAS,KAClB,MAAO,GAAGA,MAGd,MAAMC,EAAQ,CAAC,KAAM,KAAM,MAE3B,IAAIC,GAAK,EAET,GACIF,GAAS,OACPE,QACGxK,KAAKiH,IAAIqD,IAAU,MAAQE,EAAID,EAAMlG,OAAS,GAEvD,MAAO,GAAGiG,EAAMG,QAAQ,MAAMF,EAAMC,IACxC,CASA,uBAAOE,CAAiB3G,EAAO4G,EAAWC,GACtC,IAAK7G,EACD,OAEJ,MAAM8G,EAAgB5L,EAAM6L,YAAY/G,GAAO,GAC/C,MAAsB,YAAlB8G,IAA8C,SAAdF,GAAyBC,GAAwB,UAAdD,GAC5D,OAEW,YAAlBE,IAA8C,UAAdF,GAA0BC,GAAwB,SAAdD,GAC7D,YADX,CAKJ,CASA,kBAAOG,CAAYC,EAAKC,GACpB,QAAYpH,IAARmH,GAA6B,OAARA,GAAwB,KAARA,GAA6B,kBAARA,EAC1D,MAAO,GAEX,GAAIA,EAAIvG,WAAW,QAAS,CACxB,MAAMiC,EAAIsE,EAAI/F,MAAM,gDAChByB,IACAsE,EACItF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAC5CxF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAC5CxF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAExD,MAAO,GAAIF,EAAIvG,WAAW,OAAQ,CAC9B,MAAMiC,EAAIsE,EAAI/F,MAAM,mCAChByB,IACAsE,EACItF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAC5CxF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAC5CxF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAExD,MAAWF,EAAIvG,WAAW,OACtBuG,EAAMA,EAAIxF,MAAM,IAGD,IAAfwF,EAAI1G,SACJ0G,EAAMA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,IAE3D,IAAIG,EAAO,KACX,GAAmB,IAAfH,EAAI1G,OACJ6G,EAAOH,EAAIrL,UAAU,EAAG,GACxBqL,EAAMA,EAAIrL,UAAU,EAAG,QACpB,GAAmB,IAAfqL,EAAI1G,OAEX,OADA8G,QAAQC,KAAK,wBAAwBL,KAC9BA,EAEX,IAAI3F,EAAIK,SAASsF,EAAIxF,MAAM,EAAG,GAAI,IAC9BF,EAAII,SAASsF,EAAIxF,MAAM,EAAG,GAAI,IAC9BD,EAAIG,SAASsF,EAAIxF,MAAM,EAAG,GAAI,IAElC,OAAIyF,EAEW,KAAJ5F,EAAgB,KAAJC,EAAgB,KAAJC,EAAY,IAAM,UAAU4F,GAAQ,KAAO,UAAUA,GAAQ,MAGhG9F,GAAK,IAAMA,GAAG9D,SAAS,IACvB+D,GAAK,IAAMA,GAAG/D,SAAS,IACvBgE,GAAK,IAAMA,GAAGhE,SAAS,IAEhB,IAAI8D,EAAE6F,SAAS,EAAG,OAAO5F,EAAE4F,SAAS,EAAG,OAAO3F,EAAE2F,SAAS,EAAG,OAAOC,GAAQ,KACtF,CAOA,gBAAOG,CAAUN,GACb,QAAYnH,IAARmH,GAA6B,OAARA,GAAwB,KAARA,GAA6B,kBAARA,EAC1D,MAAO,GAEX,GAAIA,EAAIvG,WAAW,QAAS,CACxB,MAAMiC,EAAIsE,EAAI/F,MAAM,gDAChByB,IACAsE,EACItF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAC5CxF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAC5CxF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAExD,MAAO,GAAIF,EAAIvG,WAAW,OAAQ,CAC9B,MAAMiC,EAAIsE,EAAI/F,MAAM,mCAChByB,IACAsE,EACItF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAC5CxF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAC5CxF,SAASgB,EAAE,GAAI,IAAInF,SAAS,IAAI2J,SAAS,EAAG,KAExD,MAAWF,EAAIvG,WAAW,OACtBuG,EAAMA,EAAIxF,MAAM,IAMpB,OAHmB,IAAfwF,EAAI1G,SACJ0G,EAAMA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,IAExC,IAAfA,EAAI1G,QAA+B,IAAf0G,EAAI1G,QACxB8G,QAAQC,KAAK,wBAAwBL,MAC9B,GAGJ,CAACtF,SAASsF,EAAIxF,MAAM,EAAG,GAAI,IAAKE,SAASsF,EAAIxF,MAAM,EAAG,GAAI,IAAKE,SAASsF,EAAIxF,MAAM,EAAG,GAAI,IACpG,CAQA,cAAO+F,CAAQ9F,GACX,IAAIJ,EAAII,EAAI,GAAK,IACbH,EAAIG,EAAI,GAAK,IACbF,EAAIE,EAAI,GAAK,IAEjBJ,EAAIA,EAAI,SAAYA,EAAI,MAAS,QAAU,IAAMA,EAAI,MACrDC,EAAIA,EAAI,SAAYA,EAAI,MAAS,QAAU,IAAMA,EAAI,MACrDC,EAAIA,EAAI,SAAYA,EAAI,MAAS,QAAU,IAAMA,EAAI,MAErD,IAAIiG,GAAS,MAAJnG,EAAiB,MAAJC,EAAiB,MAAJC,GAAc,OAC7CuB,EAAQ,MAAJzB,EAAiB,MAAJC,EAAiB,MAAJC,EAC9BkG,GAAS,MAAJpG,EAAiB,MAAJC,EAAiB,MAAJC,GAAc,QAMjD,OAJAiG,EAAIA,EAAI,QAAWA,GAAK,UAAa,MAAQA,EAAI,QACjD1E,EAAIA,EAAI,QAAWA,GAAK,UAAa,MAAQA,EAAI,QACjD2E,EAAIA,EAAI,QAAWA,GAAK,UAAa,MAAQA,EAAI,QAE1C,CAAC,IAAM3E,EAAI,GAAI,KAAO0E,EAAI1E,GAAI,KAAOA,EAAI2E,GACpD,CASA,oBAAOC,CAAcC,EAAQC,GACzB,MAAMC,EAAO3M,EAAMqM,QAAQrM,EAAMoM,UAAUK,IACrCG,EAAO5M,EAAMqM,QAAQrM,EAAMoM,UAAUM,IACrCG,EAAOF,EAAK,GAAKC,EAAK,GACtBE,EAAOH,EAAK,GAAKC,EAAK,GACtBG,EAAOJ,EAAK,GAAKC,EAAK,GACtBI,EAAKjM,KAAKkM,KAAKN,EAAK,GAAKA,EAAK,GAAKA,EAAK,GAAKA,EAAK,IAElDO,EAAOF,EADFjM,KAAKkM,KAAKL,EAAK,GAAKA,EAAK,GAAKA,EAAK,GAAKA,EAAK,IAExD,IAAIO,EAAOL,EAAOA,EAAOC,EAAOA,EAAOG,EAAOA,EAC9CC,EAAOA,EAAO,EAAI,EAAIpM,KAAKkM,KAAKE,GAChC,MAGMC,EAAWF,GAHN,EAAM,KAAQF,GAInBK,EAAWF,GAHN,EAAM,KAAQH,GAInBM,EAHWT,IAGeO,EAAWA,EAAWC,EAAWA,EACjE,OAAOC,EAAI,EAAI,EAAIA,CACvB,CAUA,aAAOC,CAAOC,GACV,IAAI5F,EACA6F,EAAM,GAEV,GAAmB,kBAARD,GAAmC,kBAARA,EAClCC,GAAOD,OACJ,GAAmB,kBAARA,EACd,GAAIrJ,MAAMuJ,QAAQF,GACd,IAAK,IAAIG,EAAI,EAAGA,EAAIH,EAAIpI,OAAQuI,IACxBH,EAAIG,KACJ/F,EAAI5H,EAAMuN,OAAOC,EAAIG,IACjB/F,IACA6F,IAAQA,EAAM,IAAM,IAAM7F,SAKtC,IAAK,MAAM+F,KAAKH,EACRA,EAAIG,KACJF,IAAQA,EAAM,IAAM,IAAME,GAM1C,OAAOF,CACX,CASA,WAAOG,GACH,IACIC,EACAvB,EAFAgB,EAAI,EAGJG,EAAM,GACV,KAAOH,EAAIQ,UAAU1I,QAEjByI,EAAMC,UAAUR,KACZO,IACAvB,EAAItM,EAAMuN,OAAOM,GACbvB,IACAmB,IAAQA,EAAM,IAAM,IAAMnB,IAItC,OAAOmB,CACX,CAOA,mBAAOM,GAA8B,IAAjBC,EAASF,UAAA1I,OAAA,QAAAT,IAAAmJ,UAAA,GAAAA,UAAA,GAAG,GAC5B,OAAI/L,OAAOkM,cAAwC,qBAAxBlM,OAAOkM,aACvBlM,OAAOkM,aAIdD,KACEjM,OAAOmM,eAAiBnM,OAAOoM,cAAcC,QAAQ,kBAChDrM,OAAOmM,eAAiBnM,OAAOoM,cAAcC,QAAQ,iBACtDrM,OAAOsM,WAAW,gCAAgCC,QAChD,OACA,UAEhB,CAOA,mBAAOC,GAA8B,IAAjBP,EAASF,UAAA1I,OAAA,QAAAT,IAAAmJ,UAAA,GAAAA,UAAA,GAAG,GAC5B,OAAI/L,OAAOkM,cAAwC,qBAAxBlM,OAAOkM,aACvB,SAGXD,EAAYA,IAAcjM,OAAOmM,eAAiBnM,OAAOoM,cAAcC,QAAQ,iBAC1D,SAAdJ,GAAsC,SAAdA,EAAuB,OAAS,QACnE,CAMA,mBAAOQ,CAAaR,GACZjM,OAAOkM,cAAwC,qBAAxBlM,OAAOkM,gBAGjClM,OAAOmM,eAAiBnM,OAAOoM,cAAcM,QAAQ,gBAAiBT,IACtEjM,OAAOmM,eAAiBnM,OAAOoM,cAAcM,QAC1C,YACc,SAAdT,GAAsC,SAAdA,EAAuB,OAAS,SAEhE,CAOA,kBAAOU,CAAYV,GACf,GAAIjM,OAAOkM,cAAwC,qBAAxBlM,OAAOkM,aAC9B,OAAOlM,OAAOkM,aAElBD,EAAYA,IAAcjM,OAAOmM,eAAiBnM,OAAOoM,cAAcC,QAAQ,iBAG/E,MAAMO,EAAS3O,EAAM4O,gBACfrM,EAAMoM,EAAOtH,QAAQ2G,GAC3B,IAAIa,EAQJ,OANIA,GADS,IAATtM,EACWoM,GAAQpM,EAAM,GAAKoM,EAAOvJ,QAE1BuJ,EAAO,GAEtB3O,EAAMwO,aAAaK,GAEZA,CACX,CAMA,oBAAOD,GACH,OAAI7M,OAAOkM,cAAwC,qBAAxBlM,OAAOkM,aACvB,CAAClM,OAAOkM,cAGZ,CAAC,QAAS,OAAQ,OAAQ,UACrC,CAOA,iBAAOa,CAAWC,GACdA,GAASA,GAAS,IAAI1M,WAAWC,QAAQ,MAAO,IAEhD,MAAM4B,EAAS,CAAC,EAuBhB,OAtBA6K,EAAM5O,MAAM,KAAK6O,SAAQC,IAErB,GADAA,EAAOA,EAAKxM,OACF,CACN,MAAMmD,EAAQqJ,EAAK9O,MAAM,KACnByB,EAAOsN,mBAAmBtJ,EAAM,IAAInD,OAC1C,GAAImD,EAAMR,OAAS,EAEf,GADAlB,EAAOtC,GAAQsN,mBAAmBtJ,EAAM,IACnB,SAAjB1B,EAAOtC,GACPsC,EAAOtC,IAAQ,OACZ,GAAqB,UAAjBsC,EAAOtC,GACdsC,EAAOtC,IAAQ,MACZ,CACH,MAAMuN,EAAIzI,WAAWxC,EAAOtC,IACxBuN,EAAE9M,aAAe6B,EAAOtC,KACxBsC,EAAOtC,GAAQuN,EAEvB,MAEAjL,EAAOtC,IAAQ,CAEvB,KAEGsC,CACX,CAOA,kBAAOkL,CAAY5N,GACf,MAAM6N,GAAK7N,GAAM,IAAIa,WAAWlC,MAAM,KACtC,OAAIkP,EAAEjK,OAAS,GACXiK,EAAEC,MACKD,EAAE1O,KAAK,MAGX,IACX,CAEA,iBAAO4O,CAAWC,EAASpI,GAGvB,IAAKoI,EACD,MAAO,GAGX,IAAIrO,EACA2G,EAAK0H,EAAQnH,WAAa,EAC1BP,EAAK,KACLA,EAAK,IAAIA,KAGb,IAAI2H,EAAKD,EAAQpH,UACbqH,EAAK,KACLA,EAAK,IAAIA,KAITtO,EADe,eAAfiG,EACO,GAAGU,KAAM2H,KAAMD,EAAQE,gBAEvB,GAAGF,EAAQE,iBAAiB5H,KAAM2H,IAI7C,IAAIE,EAAIH,EAAQI,WA6BhB,OA3BIzO,GADAwO,EAAI,GACI,KAAKA,IAEL,IAAIA,IAEhBA,EAAIH,EAAQK,aAER1O,GADAwO,EAAI,GACI,KAAKA,IAEL,IAAIA,IAGhBA,EAAIH,EAAQM,aAER3O,GADAwO,EAAI,GACI,KAAKA,IAEL,IAAIA,IAGhBA,EAAIH,EAAQO,kBAER5O,GADAwO,EAAI,GACI,MAAMA,IACPA,EAAI,IACH,KAAKA,IAEL,IAAIA,IAGTxO,CACX,CAEA,iBAAO6O,CAAWnP,GACd,GAAIA,EAAS,CACTA,EAAUE,KAAKkP,MAAMpP,GACrB,MAAMqP,EAAInP,KAAKC,MAAMH,EAAO,OACtBsP,EAAIpP,KAAKC,MAAOH,EAAO,MAAkB,MACzC2G,EAAIzG,KAAKC,MAAOH,EAAU,KAAQ,IAClCmE,EAAInE,EAAU,GACpB,OAAIqP,EACO,GAAGA,KAAKC,EAAE9N,WAAW2J,SAAS,EAAG,QAAQxE,EAAEnF,WAAW2J,SAAS,EAAG,QAAQhH,EAAE3C,WAAW2J,SAAS,EAAG,OAE1GmE,EACO,GAAGA,KAAK3I,EAAEnF,WAAW2J,SAAS,EAAG,QAAQhH,EAAE3C,WAAW2J,SAAS,EAAG,OAGtE,KAAKxE,EAAEnF,WAAW2J,SAAS,EAAG,QAAQhH,EAAE3C,WAAW2J,SAAS,EAAG,MAC1E,CACA,MAAO,SACX,CAEA,kBAAOoE,CAAYjP,GACf,MAAMqG,EAAIrG,EAAK4E,MAAM,aAKrB,OAJIyB,IACArG,EAAOA,EAAKmB,QAAQkF,EAAE,GAAIA,EAAE,GAAGlF,QAAQ,KAAM,YAG1CnB,EACFmB,QAAQ,0CAAuB,IAC/BG,OACAH,QAAQ,MAAO,IACf5B,aACT,CAEA,eAAO2P,CAASC,EAAK1H,GAEjB0H,EAAMA,EAAIhO,QAAQ,8EAA+E,aAElF,SAAXsG,EACA7G,OAAO8D,SAAWyK,EAElBvO,OAAOwO,KAAKD,EAAK1H,GAAU,SAEnC,CAEA,iBAAO4H,CAAWrP,GACd,MAAM+C,EAASlE,EAAMyQ,cAActP,GAC7BuP,EAASxM,EAAOwM,OACtB,IAAIC,EAAOzM,EAAOyM,KAClB,IAAKD,EAAO5H,MAAO,CAEf6H,EAAOA,EAAKrO,QAAQ,WAAY,IAChCqO,EAAOA,EAAKlO,OACZ,MAAMmO,EAAQD,EAAKrO,QAAQ,MAAO,IAAInC,MAAM,MAC5C,IAAK,IAAImN,EAAI,EAAGA,EAAIsD,EAAMxL,OAAQkI,IAC9B,GAAIsD,EAAMtD,GAAG/H,WAAW,MACpB,OAAOqL,EAAMtD,GAAG7M,UAAU,GAAGgC,OAGrC,MAAO,EACX,CAEA,OAAOiO,EAAO5H,KAClB,CAEA,sBAAO+H,CAAgB1P,GACnB,MAAM2P,EAAQ,CAAC,EACf,GAA6B,QAAzB3P,EAAKV,UAAU,EAAG,GAAc,CAChC,MAAM8B,EAAMpB,EAAKV,UAAU,GAAG4G,QAAQ,SACtC,IAAa,IAAT9E,EAAY,CACIpB,EAAKV,UAAU,EAAG8B,EAAM,GAClBD,QAAQ,MAAO,IAAInC,MAAM,MACzC6O,SAAQ+B,IACV,IAAKA,EAAKtO,OACN,OAEJ,MAAMuO,EAAOD,EAAK1J,QAAQ,KAC1B,IAAc,IAAV2J,EAAa,CACb,MAAMpP,EAAOmP,EAAKtQ,UAAU,EAAGuQ,GAAMvO,OACrCqO,EAAMlP,GAAQmP,EAAKtQ,UAAUuQ,EAAO,GAAGvO,OACvCqO,EAAMlP,GAAQkP,EAAMlP,GAAMU,QAAQ,eAAgB,IAC9B,SAAhBwO,EAAMlP,GACNkP,EAAMlP,IAAQ,EACS,UAAhBkP,EAAMlP,GACbkP,EAAMlP,IAAQ,EACP8E,WAAWoK,EAAMlP,IAAOS,aAAeyO,EAAMlP,KACpDkP,EAAMlP,GAAQ8E,WAAWoK,EAAMlP,IAEvC,MACIkP,EAAMC,EAAKtO,SAAU,CACzB,IAEJtB,EAAOA,EAAKV,UAAU8B,EAAM,EAChC,CACJ,CACA,MAAO,CAAEmO,OAAQI,EAAOH,KAAMxP,EAClC,CAEA,sBAAO8P,CAAgB9P,GACnB,MAAMqG,EAAIrG,EAAK4E,MAAM,oBAIrB,OAHIyB,GACAA,EAAEwH,SAAQkC,GAAQ/P,EAAOA,EAAKmB,QAAQ4O,EAAK,MAExC/P,CACX,CAQA,mBAAOgQ,CAAaC,EAAUC,GAC1B,MAAMC,EAAKC,SAASC,cAAc,KAClCF,EAAGG,aACC,OACA,uCAAuCC,mBAAmBnO,KAAKE,UAAU4N,EAAM,KAAM,OAEzFC,EAAGG,aAAa,WAAYL,GAE5BE,EAAGnM,MAAMwM,QAAU,OACnBJ,SAASZ,KAAKiB,YAAYN,GAE1BA,EAAGO,QAEHN,SAASZ,KAAKmB,YAAYR,EAC9B,CAOA,mBAAOS,CAAaC,GAEhB,MAAM5O,EAAmB,WAAV4O,EACT7Q,EAAO5B,EAAayS,GAC1B,IAAI9N,EAkBJ,OAhBIA,EADA/C,EACS,CAACA,GAEO,EAAV6Q,EAEE,CAACzS,EAAa,GAAO,MAAa,MAAPyS,GAAyB3P,SAAS,OAErD,EAAV2P,EAEE,CAACzS,EAAa,GAAO,MAAa,MAAPyS,GAAyB3P,SAAS,OAE7D,CAAC,KAAK2P,EAAQ3P,SAAS,OAEhCe,GAEAc,EAAOwE,KAAK,MAAMtF,GAAU,IAAIf,SAAS,IAAI7B,iBAE1C0D,CACX,CAOA,YAAO+N,CAAMC,GACT,OAAO3O,KAAKC,MAAMD,KAAKE,UAAUyO,GACrC,CAOA,gBAAOC,CAAUxP,GAAM,IAADyP,EAClB,IAAIpJ,EAAY,OAAHrG,QAAG,IAAHA,GAAW,QAARyP,EAAHzP,EAAKb,cAAM,IAAAsQ,OAAR,EAAHA,EAAapJ,OAC1B,GAAIA,EACA,GAAsB,kBAAXA,GAAqC,MAAdA,EAAO,GACrC,IACIA,EAASzF,KAAKC,MAAMwF,EACxB,CAAE,MACEkD,QAAQmG,MAAM,wBAAwBrJ,KACtCA,EAAS,IACb,MACG,GAAsB,kBAAXA,EAAqB,CAEnC,MAAMpD,EAAQoD,EAAO7I,MAAM,KAC3B6I,EAAS,CAAC,EACV,IAAK,IAAIqG,EAAI,EAAGA,EAAIzJ,EAAMR,OAAQiK,IAAK,CACnC,MAAMrK,EAAIY,EAAMyJ,GAAGlP,MAAM,KACzB6I,EAAOhE,EAAE,IAAMA,EAAE,EACrB,CACJ,MAAO,GAAIb,MAAMuJ,QAAQ1E,GAAS,CAC9B,MAAM9E,EAAS,CAAC,EAUhB,MATwB,WAApBvB,EAAIb,OAAOwQ,KACXtJ,EAAOgG,SAAQ,CAACuD,EAAOhK,IAASrE,EAAOqE,GAAOgK,IACnB,WAApB5P,EAAIb,OAAOwQ,KAClBtJ,EAAOgG,SAAQuD,GAAUrO,EAAOqO,GAASA,IACd,YAApB5P,EAAIb,OAAOwQ,OAClBpO,EAAOsO,MAAQxJ,EAAO,GACtB9E,EAAOuO,KAAOzJ,EAAO,IAGlB9E,CACX,CAGJ,OAAO8E,CACX,CAOA,aAAO0J,CAAOpC,GACV,OAAOqC,MAAMrC,GACRsC,MAAKC,GAAYA,EAASC,SAC1BF,MACGE,GACI,IAAIC,SAAQC,IACR,MAAMC,EAAS,IAAIC,WAEnBD,EAAOE,OAAS,WAEZH,EAAQI,KAAKlP,OACjB,EACA+O,EAAOI,cAAcP,EAAK,KAG9C,CAOA,qBAAOQ,CAAeC,GAClB,MAAMC,EAAYxQ,OAAOyQ,KAAKjU,GAAYmI,MAAK3C,GAAKuO,EAAOhO,WAAWP,KACtE,OAAOwO,EAAYhU,EAAWgU,GAAa,IAC/C,CAQA,yBAAOE,CAAmBC,GACtB,SAC2B,kBAAfA,GAA2BA,EAAWjT,cAAc6E,WAAW,WACtEoO,GAAoC,kBAAfA,GAA2BA,EAAWhM,MAAKxB,GAAKA,EAAEzF,cAAc6E,WAAW,YAEzG,CAQA,sBAAOqO,CAAgBnG,GACnB,OAAOjH,SAASiH,GAAKpL,aAAeoL,CACxC,CAQA,kBAAOoG,CAAY3L,GAEf,OAAOA,aAAgBH,OAASnB,MAAMsB,EAC1C,CAEA,eAAO4L,CAASC,GAAiB,IAAD,IAAAC,EAAAlG,UAAA1I,OAAN6O,EAAI,IAAA9P,MAAA6P,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJD,EAAIC,EAAA,GAAApG,UAAAoG,GAC1B,MAAMhQ,EAAS,CAAC,EAEhB,IAAK,IAAIuD,EAAI,EAAGA,EAAIwM,EAAK7O,OAAQqC,IACN,oBAAZwM,EAAKxM,GACZzE,OAAOmR,OAAOjQ,EAAQ+P,EAAKxM,GAAGsM,IACvBE,EAAKxM,IAAyB,kBAAZwM,EAAKxM,IAC9BzE,OAAOyQ,KAAKQ,EAAKxM,IAAIuH,SAAQpN,IACzB,GAA6B,oBAAlBqS,EAAKxM,GAAG7F,GACfsC,EAAOtC,GAAQqS,EAAKxM,GAAG7F,GAAMmS,QAC1B,GAA6B,kBAAlBE,EAAKxM,GAAG7F,GAAoB,CAC1C,MAAMe,EAAMsR,EAAKxM,GAAG7F,GACpBsC,EAAOtC,GAAQsC,EAAOtC,IAAS,CAAC,EAChCoB,OAAOyQ,KAAK9Q,GAAKqM,SAAQoF,IACK,oBAAfzR,EAAIyR,GACXlQ,EAAOtC,GAAMwS,GAASzR,EAAIoR,IACnBpR,EAAIyR,IAAyB,IAAfzR,EAAIyR,MACzBlQ,EAAOtC,GAAMwS,GAASzR,EAAIyR,GAC9B,GAER,MAAWH,EAAKxM,GAAG7F,IAA2B,IAAlBqS,EAAKxM,GAAG7F,MAChCsC,EAAOtC,GAAQqS,EAAKxM,GAAG7F,GAC3B,IAKZ,OAAOsC,CACX,EAzqDElE,EACKqU,UAAYjV,EADjBY,EAGKsU,UAAY,YAHjBtU,EAKKoH,WAAa,CAAC,KAAM,MALzBpH,EAOKuU,gBAAkB,iDAqqD7B,UChrDO,SAASC,EAASjK,GAKrB,MAA8C,oBAAvCvH,OAAOC,UAAUZ,SAASc,KAAKoH,EAE1C,CAuFe,MAAMkK,UAGXC,EAAAA,UAqBNC,WAAAA,CAAYC,GACRC,MAAMD,GAEN,KAfa1O,kBAAY,OAErB4O,aAAO,OAEEC,UAAI,OAEbC,uBAAiB,OAEjBC,mBAAa,OAEbC,qBAAe,OAmIvBC,SAAYC,IACR,MAAM7C,EAAQkC,EAAcY,SAASD,GAAQhC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,OAAS,GAC9EwR,KAAKkC,MAAM/C,QAAUA,EACrBa,KAAKmC,SAAS,CAAEhD,UAEhBa,KAAKoC,aACT,EAnIApC,KAAKkC,MAAQ,CACTG,eAAe,EACfC,gBAAiB,KACjBC,YAAa,KACbC,YAAa,KACbC,gBAAiB,MAGrBzC,KAAK0B,QAAU,CAAC,EAEZF,EAAMkB,SACFlB,EAAMxR,OACNgQ,KAAKlN,aAAe0O,EAAMkB,OAAOC,YAC3B3C,KAAK4C,cACDpB,EAAMkB,OAAOC,YACbnB,EAAMQ,KACNR,EAAMqB,UACNrB,EAAMsB,YACNtB,EAAMuB,WACNvB,EAAMwB,YAEVxB,EAAMkB,OAAOO,QACU,UAAtBzB,EAAMkB,OAAOxD,OACpBc,KAAKlN,aAAe0O,EAAMkB,OAAOC,YAC3B3C,KAAKkD,QACD1B,EAAMkB,OAAOC,YACbnB,EAAMkB,OAAOO,QACbzB,EAAMQ,KACNR,EAAMuB,WACNvB,EAAMwB,YAEVxB,EAAMkB,OAAOO,UAI3BjD,KAAK2B,KAAO3T,EAAAA,KAAK0I,aACrB,CAEAyM,iBAAAA,GACQnD,KAAKwB,MAAM4B,uBACXpD,KAAKwB,MAAM4B,sBAAsBpD,KAAKwB,MAAMhT,KAAMwR,KAAK+B,UAE3D,MAAMsB,EAAc,CAAC,SAAU,eAAgB,sBAE/C,QAA0B9R,IAAtByO,KAAKlN,aAA4B,CACjC,MAAMqM,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,YAEnD+C,IAAV4N,GACCkE,EAAYtM,SAASiJ,KAAKwB,MAAMkB,OAAOxD,QAAoB,KAAVC,GAA0B,OAAVA,KAElEmE,YAAW,KACHtD,KAAKwB,MAAMxR,OACXgQ,KAAKwB,MAAM+B,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKlN,cAAc,IACpDwQ,YAAW,IAAMtD,KAAKwB,MAAMY,YAAY,CAACpC,KAAKwB,MAAMhT,MAAOwR,KAAKwB,MAAMQ,OAAO,QAGjFX,EAAcmC,SAASxD,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,KAAMwR,KAAKlN,cAC9DkN,KAAKwB,MAAM+B,SAASvD,KAAKwB,MAAMQ,UAAMzQ,GAAW,IAC5CyO,KAAKwB,MAAMY,YAAY,CAACpC,KAAKwB,MAAMhT,MAAOwR,KAAKwB,MAAMQ,QAE7D,GACD,IAEX,MAAWhC,KAAKwB,MAAMkB,OAAOe,eACzBzD,KAAK0D,QAEb,CAEAA,MAAAA,GACI,GAAI1D,KAAKwB,MAAMmC,MAAO,CAClB3D,KAAK4B,mBAAoB,EACzB,IAAII,EAAYhC,KAAKwB,MAAMkB,OAAOV,KAClC,QAAazQ,IAATyQ,GAAsBhC,KAAKwB,MAAMkB,OAAOkB,SAAU,CAClD,MAAMC,EAAU7D,KAAK8D,WAAW9D,KAAKwB,MAAMkB,OAAOkB,UAClD,IACI5B,EAAO7R,KAAKC,MAAMyT,EACtB,CAAE,MACE/K,QAAQmG,MAAM,2BAA2B4E,IAC7C,CACJ,MACI7B,EAAO,CACHxT,KAAMwR,KAAKwB,MAAMhT,KACjB2Q,MAAOkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,YAIrD+C,IAATyQ,IACAA,EAAO,MAGNhC,KAAKwB,MAAMuC,OACXL,OAAO,GAAG1D,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAAYjE,KAAKwB,MAAMkB,OAAOe,cAAezB,GAC5FxC,MAAML,IACW,OAAVA,QAA4B5N,IAAV4N,IACda,KAAKwB,MAAMxR,OACXgQ,KAAKwB,MAAM+B,SAASvD,KAAKwB,MAAMhT,KAAM2Q,GAAO,IACxCa,KAAKwB,MAAMY,YAAY,CAACpC,KAAKwB,MAAMhT,MAAOwR,KAAKwB,MAAMQ,SAGzDX,EAAcmC,SAASxD,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,KAAM2Q,GACzDa,KAAKwB,MAAM+B,SAASvD,KAAKwB,MAAMQ,UAAMzQ,GAAW,IAC5CyO,KAAKwB,MAAMY,YAAY,CAACpC,KAAKwB,MAAMhT,MAAOwR,KAAKwB,MAAMQ,SAGjE,GAEZ,MACIhC,KAAK4B,mBAAoB,EACpB5B,KAAKwB,MAAMkB,OAAOwB,oBAEnBlE,KAAKmE,QAAQnE,KAAKwB,MAAMhT,KAAMR,EAAAA,KAAKC,EAAE,8BAA+B+R,KAAKwB,MAAMyC,SAAShV,YAGpG,CAEAmV,oBAAAA,GACQpE,KAAKwB,MAAM4B,uBACXpD,KAAKwB,MAAM4B,sBAAsBpD,KAAKwB,MAAMhT,MAE5CwR,KAAK6B,gBACLwC,aAAarE,KAAK6B,eAClB7B,KAAK6B,cAAgB,KAE7B,CAcA,eAAOI,CAASD,EAA2BxT,GACvC,GAAoB,kBAATA,EACP,OAAO6S,EAAcY,SAASD,EAAMxT,EAAKzB,MAAM,MAEnD,GAAoB,IAAhByB,EAAKwD,OACL,OAAOgQ,EAAKxT,EAAK,IAErB,MAAMqN,EAAOrN,EAAK8V,QAElB,MAAoB,kBAATzI,GAA2C,kBAAfmG,EAAKnG,GACjCwF,EAAcY,SAASD,EAAKnG,GAAOrN,GAEvC,IACX,CAEA,eAAOgV,CAASxB,EAA2BxT,EAAyB2Q,GAChE,GAAoB,kBAAT3Q,EAIX,GAAoB,IAAhBA,EAAKwD,OACS,OAAVmN,SACO6C,EAAKxT,EAAK,IAEjBwT,EAAKxT,EAAK,IAAM2Q,MAEjB,CACH,MAAMtD,EAAOrN,EAAK8V,QAElB,GAAoB,kBAATzI,EACP,OAGCmG,EAAKnG,IAA+B,kBAAfmG,EAAKnG,KAC3BmG,EAAKnG,GAAQmG,EAAKnG,IAAS,CAAC,GAEhCwF,EAAcmC,SAASxB,EAAKnG,GAAOrN,EAAM2Q,EAC7C,MApBIkC,EAAcmC,SAASxB,EAAMxT,EAAKzB,MAAM,KAAMoS,EAqBtD,CAEAoF,OAAAA,CAAQxW,EAAmCyW,GACvC,IAAKzW,EACD,MAAO,GAGX,GAAoB,kBAATA,EAAmB,CAC1B,MAAM0W,EAAUD,EAAgBzW,EAAOC,EAAAA,KAAKC,EAAEF,GAC9C,OAAI0W,EAAQ1N,SAAS,MACViJ,KAAK8D,WAAWW,GAEpBA,CACX,CAEA,OAAIrD,EAASrT,GAEJA,EAAa2W,KAEoB,kBAAtB3W,EAAa2W,KACd1E,KAAK8D,WAAY/V,EAAa2W,KAAK1E,KAAK2B,OAAU5T,EAAa2W,KAAK7V,IAAM,IAE9EmR,KAAK8D,WAAY/V,EAAa2W,MAGlC3W,EAAKiS,KAAK2B,OAAS5T,EAAKc,IAAM,GAGjCd,EAAakB,UACzB,CAEA0V,mBAAAA,GACI,IAAK3E,KAAKkC,MAAMG,cACZ,OAAO,KAEX,MAAMuC,EAAU5E,KAAKkC,MAAMM,aAAexC,KAAKwB,MAAMkB,OAAOkC,QAC5D,IAAInT,EAA2B,KAS/B,MARqB,YAAjBmT,EAAQ1F,KACRzN,GAAOQ,EAAAA,EAAAA,KAAC4S,EAAAA,QAAW,IACK,UAAjBD,EAAQ1F,KACfzN,GAAOQ,EAAAA,EAAAA,KAAC6S,EAAAA,MAAS,IACO,SAAjBF,EAAQ1F,OACfzN,GAAOQ,EAAAA,EAAAA,KAAC8S,EAAAA,KAAQ,MAIhB9S,EAAAA,EAAAA,KAAC+S,EAAAA,QAAa,CACVtP,MAAOsK,KAAKuE,QAAQK,EAAQlP,QAAU1H,EAAAA,KAAKC,EAAE,qBAC7CF,KAAMiS,KAAKuE,QAAQK,EAAQ7W,MAC3BkX,GAAIjF,KAAKuE,QAAQK,EAAQK,KAAOjX,EAAAA,KAAKC,EAAE,SACvCiX,OAAQlF,KAAKuE,QAAQK,EAAQM,SAAWlX,EAAAA,KAAKC,EAAE,aAC/CwD,KAAMA,QAAQF,EACd4T,QAASC,GACLpF,KAAKmC,SAAS,CAAEE,eAAe,IAAS,KACpC,GAAI+C,EAAM,CACN,GAAIpF,KAAKkC,MAAMO,gBAAiB,CAC5B,MAAM4C,EAAWrF,KAAKkC,MAAMO,gBAE5B,YADAzC,KAAKmC,SAAS,CAAEM,gBAAiB,OAAQ,IAAM4C,GAAS,IAE5D,CAEA,MAAMrD,EAAO7R,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKwB,MAAMQ,OAC9ChC,KAAKkC,MAAMoD,gBACXjE,EAAcmC,SAASxB,EAAMhC,KAAKkC,MAAMoD,eAAgBtF,KAAKkC,MAAMqD,oBAGvElE,EAAcmC,SAASxB,EAAMhC,KAAKkC,MAAMK,YAAavC,KAAKkC,MAAMI,iBAChEtC,KAAKmC,SACD,CACIE,eAAe,EACfiD,eAAgB,KAChBC,mBAAoB,KACpBjD,gBAAiB,KACjBC,YAAa,KACbC,YAAa,OAEjB,IAAMxC,KAAKwB,MAAM+B,SAASvB,IAElC,KAAO,CACH,MAAMqD,EAAWrF,KAAKkC,MAAMO,gBAC5BzC,KAAKmC,SACD,CACIE,eAAe,EACfiD,eAAgB,KAChBC,mBAAoB,KACpBjD,gBAAiB,KACjBC,YAAa,KACbC,YAAa,KACbC,gBAAiB,OAErB,KACQ4C,GACAA,GAAS,EACb,GAGZ,MAKpB,CAGAvT,OAAAA,CAAQ0T,GAEJ,IAAI/T,EAAO,KAyDX,MAxDqB,UAFrB+T,EAAeA,GAAgBxF,KAAKwB,MAAMkB,OAAOjR,MAG7CA,GAAOQ,EAAAA,EAAAA,KAACwT,EAAAA,IAAQ,IACQ,SAAjBD,EACP/T,GAAOQ,EAAAA,EAAAA,KAACyT,EAAAA,KAAQ,IACQ,QAAjBF,EACP/T,GAAOQ,EAAAA,EAAAA,KAAC0T,EAAAA,OAAO,IACS,YAAjBH,EACP/T,GAAOQ,EAAAA,EAAAA,KAAC4S,EAAAA,QAAW,IACK,UAAjBW,EACP/T,GAAOQ,EAAAA,EAAAA,KAAC6S,EAAAA,MAAS,IACO,SAAjBU,EACP/T,GAAOQ,EAAAA,EAAAA,KAAC8S,EAAAA,KAAQ,IACQ,WAAjBS,EACP/T,GAAOQ,EAAAA,EAAAA,KAAC2T,EAAAA,OAAU,IACM,SAAjBJ,EACP/T,GAAOQ,EAAAA,EAAAA,KAAC4T,EAAAA,SAAY,IACI,SAAjBL,EACP/T,GAAOQ,EAAAA,EAAAA,KAAC6T,EAAAA,KAAQ,IACQ,WAAjBN,EACP/T,GAAOQ,EAAAA,EAAAA,KAAC8T,EAAAA,WAAc,IACE,SAAjBP,EACP/T,GAAOQ,EAAAA,EAAAA,KAAC+T,EAAAA,KAAQ,IACQ,SAAjBR,EACP/T,GAAOQ,EAAAA,EAAAA,KAACgU,EAAAA,OAAU,IACM,UAAjBT,EACP/T,GAAOQ,EAAAA,EAAAA,KAACiU,EAAAA,MAAS,IACO,WAAjBV,EACP/T,GAAOQ,EAAAA,EAAAA,KAACkU,EAAAA,OAAU,IACM,YAAjBX,EACP/T,GAAOQ,EAAAA,EAAAA,KAACmU,EAAAA,QAAW,IACK,QAAjBZ,EACP/T,GAAOQ,EAAAA,EAAAA,KAACoU,EAAAA,IAAO,IACS,WAAjBb,EACP/T,GAAOQ,EAAAA,EAAAA,KAACqU,EAAAA,QAAW,IACK,SAAjBd,EACP/T,GAAOQ,EAAAA,EAAAA,KAACsU,EAAAA,KAAQ,IACQ,SAAjBf,EACP/T,GAAOQ,EAAAA,EAAAA,KAACuU,EAAAA,KAAI,IACY,SAAjBhB,EACP/T,GAAOQ,EAAAA,EAAAA,KAACwU,EAAAA,UAAS,IACVjB,KACHA,EAAakB,SAAS,SAAWlB,EAAakB,SAAS,SAAWlB,EAAakB,SAAS,WAEnFlB,EAAarT,WAAW,YAAeqT,EAAarT,WAAW,cAChEqT,EAAe,aAAaxF,KAAKwB,MAAMwC,eAAewB,MAI9D/T,GACIQ,EAAAA,EAAAA,KAAC0U,EAAAA,KAAI,CACDtU,IAAKmT,EACLzT,MAAO,CAAE6U,MAAO,GAAIC,OAAQ,OAKjCpV,CACX,CASAqV,aAAAA,CAActY,EAAcuY,GACxB,OAAO,IAAIpH,SAAQC,IACf,MAAMoH,EAAehH,KAAKuD,SAAS/U,EAAMuY,EAAUnH,GAC/CoH,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAC/D,GAER,CASA6L,QAAAA,CAAS/U,EAAcuY,EAAmBG,GAEtC,MAAMlF,EAAO7R,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKwB,MAAMQ,OAGlD,GAFAX,EAAcmC,SAASxB,EAAMxT,EAAMuY,GAG/B/G,KAAKwB,MAAMkB,OAAOkC,SAClB5E,KAAKkD,QAAQlD,KAAKwB,MAAMkB,OAAOkC,QAAQuC,WAAW,EAAOnF,EAAMhC,KAAKwB,MAAMuB,WAAY/C,KAAKwB,MAAMwB,YAEjG,OAAO,IAAIrD,SAAcC,IACrBI,KAAKmC,SACD,CACIE,eAAe,EACfC,gBAAiByE,EACjBxE,YAAa/T,EACbgU,YAAa,OAEjB,KACsB,oBAAP0E,EACPA,IAEAtH,GACJ,GAEP,IAIT,GAAII,KAAKwB,MAAMkB,OAAO0E,iBAClB,IAAK,IAAIjO,EAAI,EAAGA,EAAI6G,KAAKwB,MAAMkB,OAAO0E,iBAAiBpV,OAAQmH,IAAK,CAChE,MAAMkO,EAAMrH,KAAKwB,MAAMkB,OAAO0E,iBAAiBjO,GAC/C,GAAIkO,EAAIzC,QAAS,CACb,MAAM0C,EAAMjG,EAAcY,SAASD,EAAMqF,EAAI7Y,MAE7C,GACIwR,KAAKkD,QAAQmE,EAAIzC,QAAQuC,WAAW,EAAOnF,EAAMhC,KAAKwB,MAAMuB,WAAY/C,KAAKwB,MAAMwB,YAEnF,OAAO,IAAIrD,SAAcC,IACrBI,KAAKmC,SACD,CACIE,eAAe,EACfC,gBAAiByE,EACjBxE,YAAa/T,EACb+W,mBAAoB+B,EACpBhC,eAAgB+B,EAAI7Y,KACpBgU,YAAa6E,EAAIzC,UAErB,KACsB,oBAAPsC,EACPA,IAEAtH,GACJ,GAEP,GAGb,CACJ,CAGJ,MAAM2H,EAAoB,GAC1B,GAAIvH,KAAKwB,MAAMkB,OAAO8E,kBAClB,IAAK,IAAIrO,EAAI,EAAGA,EAAI6G,KAAKwB,MAAMkB,OAAO8E,kBAAkBxV,OAAQmH,IAAK,CACjE,MAAMkO,EAAMrH,KAAKwB,MAAMkB,OAAO8E,kBAAkBrO,GAChD,GAAIkO,EAAI9D,SAAU,CACd,MAAM+D,EAAMjG,EAAcY,SAASD,EAAMqF,EAAI7Y,MAE7C,IAAIiZ,EAEAA,EADAzH,KAAKwB,MAAMxR,OACCgQ,KAAK4C,cACbyE,EAAI9D,SAASmE,cACb1F,EACAhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAGHhD,KAAKkD,QACbmE,EAAI9D,SAASmE,cACbJ,EACAtF,EACAhC,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAIfyE,IAAcH,IACdjG,EAAcmC,SAASxB,EAAMqF,EAAI7Y,KAAMiZ,GACvCF,EAAQjS,KAAK+R,EAAI7Y,MAEzB,CACJ,CAGJ,GAAIwR,KAAKwB,MAAMkB,OAAOiF,gBAClB,IAAK,IAAIxO,EAAI,EAAGA,EAAI6G,KAAKwB,MAAMkB,OAAOiF,gBAAgB3V,OAAQmH,IAAK,CAC/D,MAAMkO,EAAMrH,KAAKwB,MAAMkB,OAAOiF,gBAAgBxO,GAC1CkO,EAAIO,QACJL,EAAQjS,KAAK+R,EAAI7Y,KAEzB,CAGJ,GAAIwR,KAAKwB,MAAMkB,OAAOmF,eAClB,IAAK,IAAI1O,EAAI,EAAGA,EAAI6G,KAAKwB,MAAMkB,OAAOmF,eAAe7V,OAAQmH,IAAK,CAC9D,MAAMkO,EAAMrH,KAAKwB,MAAMkB,OAAOmF,eAAe1O,GACzCkO,EAAIO,QACJL,EAAQjS,KAAK+R,EAAI7Y,KAEzB,CAGJ,GAAIwR,KAAKwB,MAAMkB,OAAOoF,cAClB,IAAK,IAAI3O,EAAI,EAAGA,EAAI6G,KAAKwB,MAAMkB,OAAOoF,cAAc9V,OAAQmH,IAAK,CAC7D,MAAMkO,EAAMrH,KAAKwB,MAAMkB,OAAOoF,cAAc3O,GACxCkO,EAAIO,QACJL,EAAQjS,KAAK+R,EAAI7Y,KAEzB,CAGJ,GAAIwR,KAAKwB,MAAMkB,OAAOa,WAAavD,KAAKwB,MAAMkB,OAAOa,SAASwE,iBAAkB,CAC5E,MAAMT,EAAMjG,EAAcY,SAASD,EAAMhC,KAAKwB,MAAMhT,MAE9CwZ,EAAYhI,KAAKwB,MAAMxR,OACvBgQ,KAAK4C,cACD5C,KAAKwB,MAAMkB,OAAOa,SAASmE,cAC3B1F,EACAhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAEfhD,KAAKkD,QACDlD,KAAKwB,MAAMkB,OAAOa,SAASmE,cAC3BJ,EACAtF,EACAhC,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAEjBgF,IAAcV,GACdjG,EAAcmC,SAASxB,EAAMhC,KAAKwB,MAAMhT,KAAMwZ,EAEtD,CAqBA,OAnBIhI,KAAKwB,MAAMxR,QACXgQ,KAAKwB,MAAM+B,SAAS/U,EAAMuY,GAAU,IAAMG,GAAMA,MAErC,OAAPK,QAAO,IAAPA,GAAAA,EAASvV,QACTuV,EAAQ3L,SAAQ,CAACqM,EAAO/N,IACpBoJ,YAAW,IAAMtD,KAAKwB,MAAM+B,SAAS0E,EAAO5G,EAAcY,SAASD,EAAMiG,KAAa,GAAJ/N,MAI1F8F,KAAKwB,MAAM+B,SAASvB,OAAMzQ,GAAW,KAC7BgW,EAAQvV,QACRgO,KAAKwB,MAAMY,YAAYmF,EAASvF,GAEhCkF,GACAA,GACJ,IAIDvH,QAAQC,SACnB,CAEAsD,OAAAA,CACIwB,EACA5R,EACAkP,EACAe,EACAC,GAEA,IAAIkF,EAEJ,GAAI9G,EAASsD,GACTwD,EAAMxD,EAAKA,SACR,IAAoB,kBAATA,EAGd,OAAOA,EAFPwD,EAAMxD,CAGV,CAEA,IAAKwD,EACD,OAAOpV,EAEX,IAcI,OAbU,IAAIqV,SACV,OACA,eACA,UACA,SACA,UACA,UACA,YACA,aACA,aACA,WACAD,EAAInR,SAAS,UAAYmR,EAAM,UAAUA,IAEtCnM,CACHiG,GAAQhC,KAAKwB,MAAMQ,KACnBhC,KAAKwB,MAAM4G,aACXpI,KAAKwB,MAAM6G,aACXrI,KAAKwB,MAAMmC,MACX3D,KAAKwB,MAAM9S,OACXsR,KAAKwB,MAAMuC,OACX/D,KAAKwB,MAAMyC,SACXlB,EACAC,EACAhD,KAAKwB,MAAM+F,QAEnB,CAAE,MAAO7P,GAEL,OADAoB,QAAQmG,MAAM,kBAAkB9O,KAAKE,UAAUqU,OAAUhN,KAClD5E,CACX,CACJ,CAEA8P,aAAAA,CACI8B,EACA1C,EACAa,EACAC,EACAC,EACAC,GAEA,IAAIkF,EAEJ,GAAI9G,EAASsD,GACTwD,EAAMxD,EAAKA,SACR,IAAoB,kBAATA,EAGd,OAAOA,EAFPwD,EAAMxD,CAGV,CAEA,IAAKwD,EACD,OAAO,KAEX,IAaI,OAZU,IAAIC,SACV,OACA,eACA,UACA,cACA,YACA,UACA,aACA,aACA,WACAD,EAAInR,SAAS,UAAYmR,EAAM,UAAUA,IAEtCnM,CACHiG,GAAQhC,KAAKwB,MAAMQ,KACnBhC,KAAKwB,MAAM4G,aACXpI,KAAKwB,MAAM6G,aACXvF,EACAD,EACA7C,KAAKwB,MAAMuC,OACXhB,EACAC,EACAhD,KAAKwB,MAAM+F,QAEnB,CAAE,MAAO7P,GAEL,OADAoB,QAAQmG,MAAM,kBAAkBiJ,MAAQxQ,KACjC,IACX,CACJ,CAEA4Q,SAAAA,CAAU5F,GAMN,IAAIzD,EACAsJ,EACAX,EACA9U,EA4FJ,OA1FIkN,KAAKwB,MAAMxR,QACXiP,IAAQyD,EAAO8F,YACRxI,KAAK4C,cACFF,EAAO8F,UACPxI,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAIjBuF,GADoB,IAApB7F,EAAO6F,YAGI7F,EAAO6F,UACXvI,KAAK4C,cACFF,EAAO6F,SACPvI,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAKrB4E,GADkB,IAAlBlF,EAAOkF,UAGElF,EAAOkF,QACT5H,KAAK4C,cACFF,EAAOkF,OACP5H,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAIzBlQ,EAAe4P,EAAOC,YAChB3C,KAAK4C,cACDF,EAAOC,YACP3C,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAEfN,EAAOO,UAEbhE,IAAQyD,EAAO8F,YACRxI,KAAKkD,QAAQR,EAAO8F,WAAW,EAAOxI,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMuB,WAAY/C,KAAKwB,MAAMwB,YAG5FuF,GADoB,IAApB7F,EAAO6F,YAGI7F,EAAO6F,UACXvI,KAAKkD,QACFR,EAAO6F,UACP,EACAvI,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAKrB4E,GADkB,IAAlBlF,EAAOkF,UAGElF,EAAOkF,QACT5H,KAAKkD,QACFR,EAAOkF,QACP,EACA5H,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAIzBlQ,EAAe4P,EAAOC,YAChB3C,KAAKkD,QACDR,EAAOC,YACPD,EAAOO,QACPjD,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,YAEfN,EAAOO,SAGV,CACHhE,QACAsJ,WACAX,SACA9U,eAER,CAEAqR,OAAAA,CAAQ3V,EAAcyQ,GACbA,EAGDe,KAAK0B,QAAQlT,GAAQyQ,SAFde,KAAK0B,QAAQlT,GAKpBwR,KAAKwB,MAAM2C,SACXnE,KAAKwB,MAAM2C,QAAQ3V,EAAMyQ,EAEjC,CAEAwJ,UAAAA,CAAWC,EAAiBC,EAAoBC,GAC5C,OAAO5I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,QAAU7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO3U,KACnF,CAGA+a,UAAAA,CACI/a,EACAgb,EACAvE,GAEA,OAAKuE,GAWD9W,EAAAA,EAAAA,KAAA,KACIsD,KAAMwT,EACNvT,OAAO,SACPC,IAAI,aACJ1D,MAAO,CACHL,MAAgC,SAAzBsO,KAAKwB,MAAMlJ,UAAuB,UAAY,UACrD0Q,eAAgB,aAClB9W,SAED8N,KAAKuE,QAAQxW,EAAMyW,MAnBxBzW,EAAOiS,KAAKuE,QAAQxW,EAAMyW,IAAkB,MAGvCzW,EAAKgJ,SAAS,QAAUhJ,EAAKgJ,SAAS,QAAUhJ,EAAKgJ,SAAS,QAAUhJ,EAAKgJ,SAAS,QAEhFnK,EAAAA,MAAMsI,gBAAgBnH,GAE1BA,CAef,CAIA,mBAAOkb,CAAa5O,EAAa2H,GAC7B,MAAmB,kBAAR3H,EACA,GAIXA,GAFAA,EAAMA,EAAInL,QAAQ,KAAM,QAEdA,QAAQ,gBAAgB,CAACga,EAAgBC,KAC/C,GAAIA,GAAoB,kBAAPA,GAAmBA,EAAGhX,WAAW,SAAU,CACxD,MAAMgN,EAAQkC,EAAcY,SAASD,EAAMmH,EAAGja,QAAQ,UAAW,KAEjE,GAAqB,kBAAViQ,GAAsBA,EAAMpI,SAAS,KAC5C,MAAO,MAAMoS,2BAErB,CACA,OAAOD,CAAM,GAIrB,CAEApF,UAAAA,CAAWsF,EAAoCpH,GAE3C,GADAA,EAAOA,GAAQhC,KAAKwB,MAAMQ,MACrBoH,EACD,MAAO,GAEX,IAAIC,EACmB,kBAAZD,EACHA,EAAQ1E,KACR2E,EAAcD,EAA6B1E,MAE3C5L,QAAQwQ,IAAI,+BAA+BnZ,KAAKE,UAAU+Y,MAC1DC,EAAalZ,KAAKE,UAAU+Y,IAGhCC,EAAaD,EAGjB,IACI,GAAIpJ,KAAKwB,MAAMxR,OAAQ,CAanB,OAZU,IAAImY,SACV,OACA,eACA,aACA,aACA,UACA,cACA,YACA,UACA,WACA,YAAY9G,EAAc4H,aAAaI,EAAYrH,OAEhDjG,CACHiG,EACAhC,KAAKwB,MAAM4G,aACXpI,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,WACXhD,KAAKwB,MAAM6G,aACXrI,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMuC,OACX/D,KAAKwB,MAAM+F,QAEnB,CAcA,OAZU,IAAIY,SACV,OACA,eACA,aACA,aACA,UACA,SACA,UACA,UACA,WACA,YAAY9G,EAAc4H,aAAaI,EAAYrH,OAEhDjG,CACHiG,EACAhC,KAAKwB,MAAM4G,aACXpI,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,WACXhD,KAAKwB,MAAM6G,aACXrI,KAAKwB,MAAMmC,MACX3D,KAAKwB,MAAM9S,OACXsR,KAAKwB,MAAMuC,OACX/D,KAAKwB,MAAM+F,QAEnB,CAAE,MAAO7P,GAEL,OADAoB,QAAQmG,MAAM,kBAAkBoK,MAAe3R,KACxC2R,CACX,CACJ,CAEAE,MAAAA,GACI,MAAM7G,EAAS1C,KAAKwB,MAAMkB,OAE1B,IAAKA,EACD,OAAO,KAGP1C,KAAKwB,MAAMmC,QAAoC,IAA3B3D,KAAK4B,oBACzB5B,KAAK6B,cAAgByB,YAAW,KAC5BtD,KAAK6B,cAAgB,KACrB7B,KAAK0D,QAAQ,GACd,MAGP,MAAM,MAAEzE,EAAK,SAAEsJ,EAAQ,OAAEX,EAAM,aAAE9U,GAAiBkN,KAAKsI,UAAU5F,GAEjE,GAAIkF,EAAQ,CAWR,GATIhY,OAAOyQ,KAAKL,KAAK0B,SAAS1P,SAC1BsR,YACI5B,GAAW9R,OAAOyQ,KAAKqB,GAAS9F,SAAQpN,GAAQwR,KAAKwB,MAAM2C,QAAQ3V,MACnE,IACA2B,KAAKC,MAAMD,KAAKE,UAAU2P,KAAK0B,WAEnC1B,KAAK0B,QAAU,CAAC,GAGhBgB,EAAO8G,gBAAiB,CACxB,MAAMvc,GACFgF,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CACFC,KAAM,CACFC,GAAIjH,EAAOiH,IAAM,GACjBC,GAAIlH,EAAOkH,SAAMrY,EACjBsY,GAAInH,EAAOmH,SAAMtY,EACjBuY,GAAIpH,EAAOoH,SAAMvY,EACjBwY,GAAIrH,EAAOqH,SAAMxY,GAErBQ,MAAO,CACHiY,aAAc,EACdC,UAAW,UACRvH,EAAO3Q,SACmB,SAAzBiO,KAAKwB,MAAMlJ,UAAuBoK,EAAOwH,UAAY,CAAC,KAKtE,OAAIxH,EAAOyH,SAEHC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,EACID,EAAAA,EAAAA,KAAA,OAAKF,MAAO,CAAEuY,UAAW,OAAQzD,OAAQ,KACxC5Z,KAINA,CACX,CACA,OAAO,IACX,CAEIyV,EAAO6H,yBACHtL,IAAUrP,OAAOyQ,KAAKL,KAAK0B,SAAS1P,QACpCgO,KAAK0B,QAAU,CACX,CAAC1B,KAAKwB,MAAMhT,OAAOkU,EAAO8H,oBAAqBxc,EAAAA,KAAKC,EAAEyU,EAAO8H,qBAEjElH,YACI5B,GAAW9R,OAAOyQ,KAAKqB,GAAS9F,SAAQpN,GAAQwR,KAAKwB,MAAM2C,QAAQ3V,EAAMkT,EAAQlT,OACjF,IACA2B,KAAKC,MAAMD,KAAKE,UAAU2P,KAAK0B,aAE3BzC,GAASrP,OAAOyQ,KAAKL,KAAK0B,SAAS1P,SAC3CsR,YACI5B,GAAW9R,OAAOyQ,KAAKqB,GAAS9F,SAAQpN,GAAQwR,KAAKwB,MAAM2C,QAAQ3V,MACnE,IACA2B,KAAKC,MAAMD,KAAKE,UAAU2P,KAAK0B,WAEnC1B,KAAK0B,QAAU,CAAC,IAIxB,MAAM+I,EAAezK,KAAKyI,WACtBxJ,EACAsJ,GAAYvI,KAAKwB,MAAMkJ,gBAAkB1K,KAAKwB,MAAM+G,SACpDzV,GAGJ,GAAIkN,KAAK8B,gBACL,OAAO2I,EAGX,MAAMxd,GACFgF,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CACF/T,MAAOsK,KAAKuE,QAAQ7B,EAAOiI,SAC3BjB,KAAM,CACFC,GAAIjH,EAAOiH,IAAM,GACjBC,GAAIlH,EAAOkH,SAAMrY,EACjBsY,GAAInH,EAAOmH,SAAMtY,EACjBuY,GAAIpH,EAAOoH,SAAMvY,EACjBwY,GAAIrH,EAAOqH,SAAMxY,GAErBQ,MAAO,CACHiY,aAAc,EAEdC,UAAW,OACXrD,MAAuB,YAAhBlE,EAAOxD,MAAsC,WAAhBwD,EAAOxD,KAAoBwD,EAAOkE,OAAS,YAASrV,KACrFmR,EAAO3Q,SACmB,SAAzBiO,KAAKwB,MAAMlJ,UAAuBoK,EAAOwH,UAAY,CAAC,GAC5DhY,SAED8N,KAAKwB,MAAMkB,OAAOe,eAAiBzD,KAAKwB,MAAMkB,OAAOkI,QAClDR,EAAAA,EAAAA,MAACX,EAAAA,MAAK,CACFoB,WAAS,EACT9Y,MAAO,CAAE6U,MAAO,QAAS1U,SAAA,EAEzBD,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CAACqB,KAAM,EAAE5Y,SAAEuY,KACjBxY,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CAAAvX,UACFD,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHC,QAAQ,WACRC,QAASA,IAAMjL,KAAK0D,SACpBhO,MACIsK,KAAKwB,MAAMkB,OAAOwI,cACZlL,KAAKuE,QACDvE,KAAKwB,MAAMkB,OAAOwI,cAClBlL,KAAKwB,MAAMkB,OAAOyI,4BAEtBnd,EAAAA,KAAKC,EAAE,+BAChBiE,SAEA8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOkI,eAK5CH,IAKZ,OAAI/H,EAAOyH,SAEHC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,EACID,EAAAA,EAAAA,KAAA,OAAKF,MAAO,CAAEuY,UAAW,OAAQzD,OAAQ,KACxC7G,KAAK2E,sBACL1X,KAIT+S,KAAKkC,MAAMG,eAEP+H,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,CACK8N,KAAK2E,sBACL1X,KAINA,CACX,EA9iCiBoU,EAIV+J,gBAAkB,gBAJR/J,EAMVgK,gBAAkB,mBANRhK,EAQViK,WAAa,GARHjK,EAUVkK,WAAa,UClHxB,MAAMC,EAA8B,CAChCC,UAAW,CACP7E,MAAO,QAEX8E,iBAAmB/K,IAAe,CAC9BgL,gBAAwC,SAAvBhL,EAAMiL,QAAQC,KAAkB,4BAA8B,wBAEnFC,eAAgB,CACZ,EAEJC,QAAUpL,IAAe,CACrBgL,gBAAwC,SAAvBhL,EAAMiL,QAAQC,KAAkB,4BAA8B,sBAC/EG,aAAc,QAElBrB,QAAS,CACLsB,cAAe,SA2WvB,QA7VA,cAA8B5K,EAG1BE,WAAAA,CAAYC,GACRC,MAAMD,GAAO,KAHT0K,YAAoD,KAAK,KAqFjEC,SAAY9W,GAAkB,KAC1B,MAAM0R,EAAW5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QACtD4H,EAAS7V,OAAOmE,EAAO,GAEvB2K,KAAKmC,SAAS,CAAEhD,MAAO4H,EAAUqF,UAAWpM,KAAKkC,MAAMkK,UAAY,MAAS,IACxEpM,KAAKqM,gBAAgBtF,IACxB,EACH,KAEFuF,QAAWjX,GAAkB,KACzB,MAAM0R,EAAW5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QAChDoN,EAASpc,KAAKC,MAAMD,KAAKE,UAAU0W,EAAS1R,KAClD,GAAuC,kBAA5B2K,KAAKwB,MAAMkB,OAAO7D,OAAiE,kBAApC0N,EAAOvM,KAAKwB,MAAMkB,OAAO7D,OAAqB,CACpG,IAAI3E,EAAI,EACJnM,EAAOwe,EAAOvM,KAAKwB,MAAMkB,OAAO7D,OACpC,MAAMuK,EAAUrb,EAAK4E,MAAM,UAO3B,IANIyW,GACArb,EAAOA,EAAKmB,QAAQka,EAAQ,GAAI,IAChClP,EAAI9G,SAASgW,EAAQ,GAAI,IAAM,GAE/Brb,GAAQ,IAELgZ,EAASxS,MAAK4C,GAAMA,EAAG6I,KAAKwB,MAAMkB,OAAO7D,SAAqB9Q,EAAOmM,EAAEjL,cAC1EiL,IAEJqS,EAAOvM,KAAKwB,MAAMkB,OAAO7D,OAAS,GAAG0N,EAAOvM,KAAKwB,MAAMkB,OAAO7D,UAAU3E,GAC5E,CAEA6M,EAAS7V,OAAOmE,EAAO,EAAGkX,GAE1BvM,KAAKmC,SACD,CACIhD,MAAO4H,EACPyF,aAAc,EACdJ,UAAWpM,KAAKkC,MAAMkK,UAAY,MAEtC,IAAMpM,KAAKqM,gBAAgBtF,IAC9B,EACH,KAEFsF,gBAAmBtF,IACX/G,KAAKkM,aACL7H,aAAarE,KAAKkM,aAGtBlM,KAAKkM,YAAc5I,YACfnE,IACIa,KAAKkM,YAAc,KAEnB,MAAMO,EAAezM,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM2Q,GAChDsN,aAAwB9M,SACnB8M,EAAaxF,OAAMvP,GAAKsI,KAAKmE,QAAQzM,IAC9C,GAEJ,IACAqP,EACH,EACH,KAEF2F,MAAQ,KACJ,MAAM,OAAEhK,GAAW1C,KAAKwB,MAClBuF,EAAW5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QAChDwN,EACFjK,EAAOkK,OACPlK,EAAOkK,MAAMC,QAAO,CAACC,EAAkCC,KACnD,IAAIja,EA6BJ,OA1BQA,EAFJia,EAAapK,YACT3C,KAAKwB,MAAMxR,OACI+c,EAAapK,YACtB3C,KAAK4C,cACDmK,EAAapK,YACb3C,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACXiE,EAAS/U,OACTgO,KAAKwB,MAAMQ,MAEfhC,KAAKwB,MAAMkB,OAAOO,QAET8J,EAAapK,YACtB3C,KAAKkD,QACD6J,EAAapK,YACb3C,KAAKwB,MAAMkB,OAAOO,QAClBjD,KAAKwB,MAAMQ,KACX+E,EAAS/U,OACTgO,KAAKwB,MAAMQ,MAEfhC,KAAKwB,MAAMkB,OAAOO,aAGY1R,IAAzBwb,EAAa9J,QAAwB,KAAO8J,EAAa9J,QAG5E6J,EAAYC,EAAave,MAAQsE,EAC1Bga,CAAW,GACnB,CAAC,GAER/F,EAASzR,KAAKqX,GAEd3M,KAAKmC,SAAS,CAAEhD,MAAO4H,EAAUyF,YAAazF,EAAS/U,OAAS,IAAK,IAAMgO,KAAKqM,gBAAgBtF,IAAU,EApL1G/G,KAAKwB,MAAMkB,OAAOkK,MAAQ5M,KAAKwB,MAAMkB,OAAOkK,OAAS,EACzD,CAEAzJ,iBAAAA,GACI1B,MAAM0B,oBAEN,IAAIhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,OAAS,GAEnEuC,MAAMuJ,QAAQ6E,KACfA,EAAQ,IAGZa,KAAKmC,SAAS,CACVhD,QACAqN,aAAc,EACdJ,UAAW,GAEnB,CAEAhI,oBAAAA,GACQpE,KAAKkM,cACL7H,aAAarE,KAAKkM,aAClBlM,KAAKkM,YAAc,MAEvBzK,MAAM2C,sBACV,CAEA4I,aAAAA,CAAchL,EAA2BiL,GACrC,MAAM,MAAE9N,GAAUa,KAAKkC,OACjB,OAAEQ,GAAW1C,KAAKwB,MAElB0L,EAA8B,CAChChO,KAAM,QACN0N,MAAOlK,EAAOkK,MAAMC,QAChB,CAACC,EAAgDC,KAC7CD,EAAYC,EAAave,MAAQue,EAC1BD,IAEX,CAAC,GAEL/a,MAAO,CAAEob,WAAY,OAAQC,UAAW,OAAQpD,aAAc,SAGlE,OACI/X,EAAAA,EAAAA,KAACob,GAAW,CACRhY,MAAO4X,EAAMjN,KAAKkC,MAAMkK,UACxBrJ,WAAYkK,EACZ1F,QAASvH,KAAKwB,MAAM+F,QACpBvE,WAAYhD,KAAKwB,MAAMQ,KACvB+B,OAAQ/D,KAAKwB,MAAMuC,OACnBC,YAAahE,KAAKwB,MAAMwC,YACxBC,SAAUjE,KAAKwB,MAAMyC,SACrBvV,OAAQsR,KAAKwB,MAAM9S,OACnBiV,MAAO3D,KAAKwB,MAAMmC,MAClBrL,UAAW0H,KAAKwB,MAAMlJ,UACtBsC,UAAWoF,KAAKwB,MAAM5G,UACtBoH,KAAMA,EACNhS,QAAM,EACN0S,OAAQwK,EACR7E,aAAcrI,KAAKwB,MAAM6G,aACzBD,aAAcpI,KAAKwB,MAAM4G,aACzBkF,QAAStN,KAAKwB,MAAM8L,QACpBtZ,WAAYgM,KAAKwB,MAAMxN,WACvBuZ,aAAcvN,KAAKwB,MAAM+L,aACzBnL,YAAapC,KAAKwB,MAAMY,YACxBoL,YAAaxN,KAAKwB,MAAMgM,YACxBC,iBAAkBzN,KAAKwB,MAAMiM,iBAC7BlK,SAAUA,CAAC/U,EAAMkf,KACb,MAAMC,EAASxd,KAAKC,MAAMD,KAAKE,UAAU8O,IACxCwO,EAAOV,GAA6Bze,GAAkBkf,EACvD1N,KAAKmC,SAAS,CAAEhD,MAAOwO,IAAU,IAAM3N,KAAKqM,gBAAgBsB,IAAQ,EAExExJ,QAASA,CAAClF,EAAOzQ,IAASwR,KAAKmE,QAAQlF,EAAOzQ,GAC9Cof,iBAAkB5N,KAAKwB,MAAMoM,iBAC7BC,MAAO7N,KAAKwB,MAAMqM,MAClBC,cAAe9N,KAAKwB,MAAMsM,cAC1BnN,MAAOX,KAAKwB,MAAMb,OAG9B,CAwGAoN,QAAAA,CAASd,GACL,MAAMlG,EAAW5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QAChDlS,EAAO8Z,EAASkG,GACtBlG,EAAS7V,OAAO+b,EAAK,GACrBlG,EAAS7V,OAAO+b,EAAM,EAAG,EAAGhgB,GAE5B,MAAM+gB,EAAWhO,KAAKkC,MAAMsK,YAAc,EAC1CxM,KAAKmC,SAAS,CAAEhD,MAAO4H,EAAUyF,YAAawB,EAAU5B,UAAWpM,KAAKkC,MAAMkK,UAAY,MAAS,IAC/FpM,KAAKqM,gBAAgBtF,IAE7B,CAEAkH,UAAAA,CAAWhB,GACP,MAAMlG,EAAW5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QAChDlS,EAAO8Z,EAASkG,GACtBlG,EAAS7V,OAAO+b,EAAK,GACrBlG,EAAS7V,OAAO+b,EAAM,EAAG,EAAGhgB,GAE5B,MAAM+gB,EAAWhO,KAAKkC,MAAMsK,YAAc,EAC1CxM,KAAKmC,SAAS,CAAEhD,MAAO4H,EAAUyF,YAAawB,EAAU5B,UAAWpM,KAAKkC,MAAMkK,UAAY,MAAS,IAC/FpM,KAAKqM,gBAAgBtF,IAE7B,CAEA0B,UAAAA,GACI,MAAM,OAAE/F,GAAW1C,KAAKwB,OAClB,MAAErC,GAAUa,KAAKkC,MAEvB,OAAK/C,GAKDiL,EAAAA,EAAAA,MAAC8D,EAAAA,MAAK,CAAAhc,SAAA,CACDwQ,EAAOmG,QAAUnG,EAAOyL,UACrB/D,EAAAA,EAAAA,MAACgE,EAAAA,QAAO,CAACpD,QAAQ,QAAO9Y,SAAA,CACnBwQ,EAAOmG,OACJ5W,EAAAA,EAAAA,KAACoc,EAAAA,WAAU,CACPrD,QAAQ,KACR5c,GAAG,aACHkgB,UAAU,MAAKpc,SAEd8N,KAAKuE,QAAQ7B,EAAOmG,SAEzB,KACFnG,EAAOyL,SAQL,MAPAlc,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLhY,MAAM,UACNuZ,QAASjL,KAAK0M,MAAMxa,UAEpBD,EAAAA,EAAAA,KAACuc,EAAAA,IAAO,SAIpB,KACHrP,EAAMjS,KAAI,CAAC+f,EAAK/S,KACbkQ,EAAAA,EAAAA,MAACqE,EAAAA,UAAS,CAENC,SAAU1O,KAAKkC,MAAMsK,cAAgBtS,EACrCqJ,SAAUA,CAACoL,EAAID,IAAa1O,KAAKmC,SAAS,CAAEqK,YAAakC,EAAWxU,GAAK,IAAKhI,SAAA,EAE9ED,EAAAA,EAAAA,KAAC2c,EAAAA,iBAAgB,CACbC,YAAY5c,EAAAA,EAAAA,KAAC6c,EAAAA,WAAc,IAC3BC,GAAIniB,EAAM8T,SAASV,KAAKwB,MAAMb,MAAO6K,EAAOC,UAAWD,EAAOE,kBAAkBxZ,UAEhFD,EAAAA,EAAAA,KAACoc,EAAAA,WAAU,CAACtc,MAAOyZ,EAAOM,eAAe5Z,SAAE+a,EAAIvK,EAAOsM,gBAE1D5E,EAAAA,EAAAA,MAAC6E,EAAAA,iBAAgB,CACbld,MAAO,IAAK2Q,EAAO3Q,SAAWiO,KAAKwB,MAAMlJ,UAAYoK,EAAOwH,eAAY3Y,GAAaW,SAAA,CAEpF8N,KAAKgN,cAAc7N,EAAMjF,GAAIA,IAC9BkQ,EAAAA,EAAAA,MAACgE,EAAAA,QAAO,CAACW,GAAIvD,EAAOO,QAAQ7Z,SAAA,CACvBgI,GACGjI,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAO1H,EAAAA,KAAKC,EAAE,cACdkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,EAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,IAAMjL,KAAK+N,SAAS7T,GAAGhI,UAEhCD,EAAAA,EAAAA,KAACod,EAAAA,YAAM,SAIfpd,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,EAAO8D,cAEtBpV,EAAIiF,EAAMnN,OAAS,GAChBC,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAO1H,EAAAA,KAAKC,EAAE,gBACdkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,EAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,IAAMjL,KAAKiO,WAAW/T,GAAGhI,UAElCD,EAAAA,EAAAA,KAACsd,EAAAA,cAAQ,SAIjBtd,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,EAAO8D,cAErB5M,EAAOyL,SAYL,MAXAlc,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAO1H,EAAAA,KAAKC,EAAE,yBACdkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,EAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASjL,KAAKmM,SAASjS,GAAGhI,UAE1BD,EAAAA,EAAAA,KAACud,EAAAA,OAAU,QAItB9M,EAAO7D,OACJ5M,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAO1H,EAAAA,KAAKC,EAAE,wBACdkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,EAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASjL,KAAKsM,QAAQpS,GAAGhI,UAEzBD,EAAAA,EAAAA,KAACwd,EAAAA,YAAe,QAGxB,aAtEP,GAAGxC,KAA4B/S,QA2E1CwI,EAAOyL,UAAYhP,EAAMnN,OAAS,GAChCC,EAAAA,EAAAA,KAACmc,EAAAA,QAAO,CACJpD,QAAQ,QACR+D,GAAIvD,EAAOkE,SAASxd,UAEpBD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLhY,MAAM,UACNuZ,QAASjL,KAAK0M,MAAMxa,UAEpBD,EAAAA,EAAAA,KAACuc,EAAAA,IAAO,QAGhB,KACH9L,EAAOiN,MACJ1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,QA9HD,IAiIf,GChZEgH,EACI,CACF5E,MAAO,QAFT4E,EAIQ,CACN9Z,MAAO,WAwEf,QA3DA,cAA0B2P,EACtB8B,iBAAAA,GACI1B,MAAM0B,oBAEN,MAAMc,EAAWjE,KAAK8P,cAEjB9P,KAAKwB,MAAMuC,OACXgM,SAAS,GAAG9L,WACZzE,MAAK0C,GAASlC,KAAKmC,SAAS,CAAEwB,SAAUzB,IAASA,EAAMoF,KAAMrD,cACtE,CAEA6L,WAAAA,GACI,IAAI7L,EAAWjE,KAAKwB,MAAMkB,OAAOuB,UAAY,GAAGjE,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAOrF,OANIA,EAASlN,SAAS,QAClBkN,EAAWjE,KAAK8D,WAAWG,IAE3BA,IAAaA,EAAS9R,WAAW,qBACjC8R,EAAW,kBAAkBA,KAE1BA,CACX,CAEAwE,UAAAA,GAcI,GAbIzI,KAAK8P,gBAAkB9P,KAAKkC,MAAM+B,UAClCX,YAAW,KACP,MAAMW,EAAWjE,KAAK8P,cAClB7L,EACKjE,KAAKwB,MAAMuC,OACXgM,SAAS,GAAG9L,WACZzE,MAAK0C,GAASlC,KAAKmC,SAAS,CAAEwB,SAAUzB,IAASA,EAAMoF,KAAMrD,eAElEjE,KAAKmC,SAAS,CAAEwB,MAAO,KAAMM,YACjC,GACD,MAGkB,IAArBjE,KAAKkC,MAAMyB,QAAwC,IAArB3D,KAAKkC,MAAMyB,MACzC,OAAO,KAGX,MAAMM,EAAWjE,KAAKkC,MAAM+B,SAAS/U,QAAQ,mBAAoB,IACjE,OACI+C,EAAAA,EAAAA,KAAA,OAAKF,MAAO,IAAKyZ,KAAkBxL,KAAKkC,MAAMyB,WAA0BpS,EAAlBia,GAA+BtZ,SAChF8N,KAAKkC,MAAMyB,WAC0BpS,IAAhCyO,KAAKwB,MAAMkB,OAAOsN,UACdhQ,KAAKwB,MAAMkB,OAAOsN,UACdhiB,EAAAA,KAAKC,EAAE+R,KAAKwB,MAAMkB,OAAOsN,UAAW/L,GACpC,GACJjW,EAAAA,KAAKC,EAAE,0BAA2BgW,QACH1S,IAAnCyO,KAAKwB,MAAMkB,OAAOuN,aAChBjQ,KAAKwB,MAAMkB,OAAOuN,aACdjiB,EAAAA,KAAKC,EAAE+R,KAAKwB,MAAMkB,OAAOuN,aAAchM,GACvC,GACJjW,EAAAA,KAAKC,EAAE,8BAA+BgW,IAG1D,GCkCJ,QAjGA,cAAiC5C,EAC7B8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAE3D0hB,EAAgBlQ,KAAKwB,MAAMkB,OAAOpU,QAAQpB,KAAKD,GACjC,kBAATA,EAAoB,CAAE4b,MAAO5b,EAAMkS,MAAOlS,GAASkD,KAAKC,MAAMD,KAAKE,UAAUpD,MAIpF8D,MAAMuJ,QAAQ6E,IACd+Q,EAAcC,QAAQ,CAClBtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAcgK,iBAC5BlM,MAAOkC,EAAc+J,kBAEzBpL,KAAKmC,SAAS,CAAEhD,MAAOkC,EAAc+J,gBAAiB8E,mBAEtDlQ,KAAKmC,SAAS,CAAEhD,QAAO+Q,iBAE/B,CAEAzH,UAAAA,CAAWxJ,EAAgBsJ,GACvB,IAAKvI,KAAKkC,MAAMgO,cACZ,OAAO,KAGX,IAAIjjB,EACJ,MAAMqB,EAA+C6B,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAMgO,gBAwB1F,OAvBwBnf,MAAMuJ,QAAQ0F,KAAKkC,MAAM/C,QAAUa,KAAKkC,MAAM/C,QAAUkC,EAAc+J,iBAG1F,IAAIpL,KAAKkC,MAAM/C,OACVnS,QAAOsa,IAAQhZ,EAAQiG,MAAK4C,GAAqB,kBAAPA,EAAkBA,EAAGgI,QAAUmI,EAAMnQ,IAAOmQ,MACtF1L,SAAQzE,GAAM7I,EAAQgH,KAAK,CAAEuT,MAAO1R,EAAGlI,WAAYkQ,MAAOhI,MAE/DlK,EAAO,CAAE4b,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAcgK,iBAAkBlM,MAAOkC,EAAc+J,iBAC5E9c,EAAQ6hB,QAAQljB,KAEhBA,EACyB,OAArB+S,KAAKkC,MAAM/C,YACU5N,IAArByO,KAAKkC,MAAM/C,OACX7Q,EAAQiG,MAAK6b,GACQ,kBAAVA,EAAqBA,EAAMjR,OAASa,KAAKkC,MAAM/C,MAAQiR,GAASpQ,KAAKkC,MAAM/C,QAGjE,OAArBa,KAAKkC,MAAM/C,YAAuC5N,IAArByO,KAAKkC,MAAM/C,QAAwBlS,GAAQ+S,KAAKwB,MAAMkB,OAAO2N,WAC1FpjB,EAAO,CAAEkS,MAAOa,KAAKkC,MAAM/C,MAAO0J,MAAO7I,KAAKkC,MAAM/C,OACpD7Q,EAAQgH,KAAKrI,MAKjBgF,EAAAA,EAAAA,KAACqe,EAAAA,aAAY,CACT7E,WAAS,EACT4E,WAAYrQ,KAAKwB,MAAMkB,OAAO2N,SAC9BlR,MAAOlS,EACPqB,QAASA,EAETiiB,cAAe7Y,IACX,IAAKA,IAAMsI,KAAKwB,MAAMkB,OAAO2N,SACzB,OAGJ,MAAM/I,EAAO5P,EAAElC,OAA4B2J,MACvCmI,IAAQtH,KAAKkC,MAAM/C,OACnBa,KAAKmC,SAAS,CAAEhD,MAAOmI,IAAO,IAAMtH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM8Y,IACvE,EAEJ/D,SAAUA,CAACiN,EAAGrR,KACV,MAAMmI,EAAuB,kBAAVnI,EAAsBA,EAAQA,EAAMA,MAAQ,GAAMA,EACjEmI,IAAQtH,KAAKkC,MAAM/C,OACnBa,KAAKmC,SAAS,CAAEhD,MAAOmI,IAAO,IAAMtH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM8Y,IACvE,EAEJmJ,eAAgBC,IAAM,IAAAC,EAAA,MAAuB,kBAAXD,GAAoC,QAAjBC,EAAU,OAAND,QAAM,IAANA,OAAM,EAANA,EAAQ7H,aAAK,IAAA8H,EAAAA,EAAU,EAAE,EAClFC,YAAaC,IACT5e,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,cACJ6F,EACJ5R,QAASA,EAGT8R,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,eAEtB+D,SAAUA,KAK9B,GCsFJ,QAvLA,cAAuClH,EAAsEE,WAAAA,GAAA,SAAA7G,WAAA,KACjGuW,aAAc,EAAM,KAEpBC,cAAQ,EAEhBC,WAAAA,GACI,MAAMhS,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAC3D0hB,EAAgBlQ,KAAKwB,MAAMkB,OAAOpU,QAClC0R,KAAKwB,MAAMkB,OAAOpU,QAAQpB,KAAKD,GACX,kBAATA,EAAoB,CAAE4b,MAAO5b,EAAMkS,MAAOlS,GAASkD,KAAKC,MAAMD,KAAKE,UAAUpD,MAExF,GAEN,GAAI+S,KAAKwB,MAAMmC,MAAO,CAClB,IAAI3B,EAAOhC,KAAKwB,MAAMkB,OAAOV,KAC7B,QAAazQ,IAATyQ,GAAsBhC,KAAKwB,MAAMkB,OAAOkB,SAAU,CAClD,MAAMC,EAAkB7D,KAAK8D,WAAW9D,KAAKwB,MAAMkB,OAAOkB,UAC1D,IAC2B,kBAAZC,IACP7B,EAAO7R,KAAKC,MAAMyT,GAE1B,CAAE,MACE/K,QAAQmG,MAAM,2BAA2B9O,KAAKE,UAAU2R,KAC5D,CACJ,MAEazQ,IAATyQ,IACAA,EAAO,MAGNhC,KAAKwB,MAAMuC,OACXL,OAAO,GAAG1D,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAAYjE,KAAKwB,MAAMkB,OAAO0O,SAAW,OAAQpP,GAChGxC,MAAM7O,IACCA,GAAQI,MAAMuJ,QAAQ3J,IACtBA,EAAKiL,SAAQ3O,GACTijB,EAAc5a,KACM,kBAATrI,EACD,CAAE4b,MAAO5b,EAAMkS,MAAOlS,GACtBkD,KAAKC,MAAMD,KAAKE,UAAUpD,OAMxC8D,MAAMuJ,QAAQ6E,IACd+Q,EAAcC,QAAQ,CAClBtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAcgK,iBAC5BlM,MAAOkC,EAAc+J,kBAEzBpL,KAAKmC,SAAS,CAAEhD,MAAOkC,EAAc+J,gBAAiB8E,mBAEtDlQ,KAAKmC,SAAS,CAAEhD,QAAO+Q,iBAC3B,GAEZ,MAAWnf,MAAMuJ,QAAQ6E,IAErB+Q,EAAcC,QAAQ,CAClBtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAcgK,iBAC5BlM,MAAOkC,EAAc+J,kBAEzBpL,KAAKmC,SAAS,CAAEhD,MAAOkC,EAAc+J,gBAAiB8E,mBAEtDlQ,KAAKmC,SAAS,CAAEhD,QAAO+Q,iBAE/B,CAEAmB,UAAAA,GACI,MAAMC,EAA+B,CAAC,EAMtC,OALIvgB,MAAMuJ,QAAQ0F,KAAKwB,MAAMkB,OAAO6O,gBAChCvR,KAAKwB,MAAMkB,OAAO6O,cAAc3V,SAC5BpN,GAAS8iB,EAAQ9iB,GAAQ6S,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMxT,KAGlE2B,KAAKE,UAAUihB,EAC1B,CAEA7I,UAAAA,CAAWxJ,EAAgBsJ,GACvB,GAAIvI,KAAKwB,MAAMmC,MAAO,CAClB,MAAM2N,EAAUtR,KAAKqR,aACjBC,IAAYtR,KAAKkR,UAAalR,KAAKiR,cACnCjR,KAAKkR,SAAWI,EAChBhO,YAAW,IAAMtD,KAAKmR,eAAenR,KAAKiR,YAAc,IAAM,IAC9DjR,KAAKiR,aAAc,EAE3B,CAEA,IAAIhkB,EACJ,MAAMqB,EAAU0R,KAAKkC,MAAMgO,cAAgB/f,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAMgO,gBAAkB,GAuBlG,OAtBwBnf,MAAMuJ,QAAQ0F,KAAKkC,MAAM/C,QAAUa,KAAKkC,MAAM/C,QAAUkC,EAAcgK,iBAG1F,IAAIrL,KAAKkC,MAAM/C,OACVnS,QAAOsa,IAAQhZ,EAAQiG,MAAM4C,GAAYA,EAAGgI,QAAUmI,MACtD1L,SAAQzE,GAAM7I,EAAQgH,KAAK,CAAEuT,MAAO1R,EAAGlI,WAAYkQ,MAAOhI,MAE/DlK,EAAO,CAAE4b,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAcgK,iBAAkBlM,MAAOkC,EAAc+J,iBAC5E9c,EAAQ6hB,QAAQljB,KAEhBA,EACyB,OAArB+S,KAAKkC,MAAM/C,YACU5N,IAArByO,KAAKkC,MAAM/C,OACX7Q,EAAQiG,MAAMtH,GAAcA,EAAKkS,OAASa,KAAKkC,MAAM/C,QAEhC,OAArBa,KAAKkC,MAAM/C,YAAuC5N,IAArByO,KAAKkC,MAAM/C,QAAwBlS,GAAQ+S,KAAKwB,MAAMkB,OAAO2N,WAC1FpjB,EAAO,CAAEkS,MAAOa,KAAKkC,MAAM/C,MAAO0J,MAAO7I,KAAKkC,MAAM/C,OACpD7Q,EAAQgH,KAAKrI,IAEjBA,EAAOA,GAAQ,MAGdqB,EAAQ0D,QA4BTC,EAAAA,EAAAA,KAACqe,EAAAA,aAAY,CACTnR,MAAOlS,EACPwe,WAAS,EACT4E,WAAYrQ,KAAKwB,MAAMkB,OAAO2N,SAC9B/hB,QAASA,EAETmiB,eAAgBC,IAAM,IAAAC,EAAA,OAAiB,QAAjBA,EAAU,OAAND,QAAM,IAANA,OAAM,EAANA,EAAQ7H,aAAK,IAAA8H,EAAAA,EAAI,EAAE,EAC7CJ,cAAe7Y,IACX,IAAKA,IAAMsI,KAAKwB,MAAMkB,OAAO2N,SACzB,OAGJ,MAAM/I,EAAO5P,EAAElC,OAA4B2J,MACvCmI,IAAQtH,KAAKkC,MAAM/C,OACnBa,KAAKmC,SAAS,CAAEhD,MAAOmI,IAAO,IAAMtH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM8Y,IACvE,EAEJ/D,SAAUA,CAACiN,EAAGrR,KACV,MAAMmI,EAAuB,kBAAVnI,EAAsBA,EAAQA,EAAMA,MAAQ,GAAMA,EACjEmI,IAAQtH,KAAKkC,MAAM/C,OACnBa,KAAKmC,SAAS,CAAEhD,MAAOmI,IAAO,IAAMtH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM8Y,IACvE,EAEJsJ,YAAaC,IACT5e,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,cACJ6F,EAGJ5R,QAASA,EACT8R,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,eAEtB+D,SAAUA,OA/DlBtW,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTtM,MAA4B,OAArBa,KAAKkC,MAAM/C,YAAuC5N,IAArByO,KAAKkC,MAAM/C,MAAsB,GAAKa,KAAKkC,MAAM/C,MACrFF,QAASA,EACTsJ,SAAUA,EACV4G,UAAW,CACPqC,UAAW,CACPC,UAAWzR,KAAKwB,MAAMkB,OAAO+O,WAAazR,KAAKwB,MAAMkB,OAAOgP,UAAOngB,IAG3EgS,SAAU7L,IACN,MAAMyH,EAAQzH,EAAElC,OAAO2J,MACvBa,KAAKmC,SAAS,CAAEhD,UAAS,IAAMa,KAAKuD,SAASvD,KAAKwB,MAAMhT,MAAO2Q,GAAS,IAAI9P,SAAQ,EAExF0hB,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,gBAgDtC,GCzLEgH,EAA8C,CAChDC,UAAW,CACP7E,MAAO,QAEXkE,KAAM,CACFvM,QAAS,QAEbqM,OAAQ,CACJ/D,OAAQ,GACRsG,WAAY,EACZwE,SAAU,KA2ElB,QA/DA,cAAyBtQ,EACrB8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAM,KAAEnB,EAAI,KAAExT,GAASwR,KAAKwB,MACtBrC,EAAQkC,EAAcY,SAASD,EAAMxT,IAAS,GACpDwR,KAAKmC,SAAS,CAAEhD,QAAOyS,YAAY,GACvC,CAEAnJ,UAAAA,CAAWxJ,EAAesJ,GACtB,MAAM,OAAE7F,EAAM,KAAElU,GAASwR,KAAKwB,OACxB,MAAErC,EAAK,WAAEyS,GAAe5R,KAAKkC,MAEnC,OACIkI,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR9f,MAAOyZ,EAAOC,UACdT,QAAQ,WAAU9Y,SAAA,CAEjBwQ,EAAOmG,OAAQ5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAE8N,KAAKuE,QAAQ7B,EAAOmG,SAAuB,MAC/EuB,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,EAAOV,KAAK5Y,SAAA,EACpBD,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTtM,MAAY,OAALA,QAAK,IAALA,EAAAA,EAAS,GAChBF,QAASA,EACTsJ,SAAUA,EACVwI,YAAa/Q,KAAKuE,QAAQ7B,EAAOqO,aACjClI,MAAO7I,KAAKuE,QAAQ7B,EAAOmG,OAC3BmI,WAAYhR,KAAK8I,WAAWpG,EAAOiN,KAAMjN,EAAOmN,SAAUnN,EAAO8B,eACjEjB,SAAU7L,IACN,MAAMsa,EAASta,EAAElC,OAAO2J,MACxBa,KAAKmC,SAAS,CAAEhD,MAAO6S,IAAU,IAAMhS,KAAKuD,SAAS/U,EAAMwjB,IAAQ,KAG3E/f,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHrZ,MAAM,OACNK,MAAOyZ,EAAOZ,OACdlB,KAAK,QACLsB,QAAQ,WACRC,QAASA,IAAMjL,KAAKmC,SAAS,CAAEyP,YAAY,IAAQ1f,SACtD,WAIJ0f,GACG3f,EAAAA,EAAAA,KAACggB,EAAAA,KAAU,CACPvc,MAAO1H,EAAAA,KAAKC,EAAE,sBACdikB,OAAQxP,EAAOwP,OACfC,QAASzP,EAAOyP,QAChBC,KAAMjT,EACNgG,QAASA,IAAMnF,KAAKmC,SAAS,CAAEyP,YAAY,IAC3C1M,OAAQlX,EAAAA,KAAKC,EAAE,aACfgX,GAAIjX,EAAAA,KAAKC,EAAE,SACX0S,MAAOX,KAAKwB,MAAMb,MAClB0R,KAAML,GACFhS,KAAKmC,SAAS,CAAEyP,YAAY,EAAOzS,MAAO6S,IAAU,IAAMhS,KAAKuD,SAAS/U,EAAMwjB,OAGtF,OAGhB,GCIJ,QA/EA,cAAsC3Q,EAClC,uBAAM8B,GACF1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAI3D0hB,SAFqBlQ,KAAKwB,MAAMuC,OAAOuO,mBAGxCtlB,QAAOkR,IACJ,MAAMpR,EAAOkT,KAAKwB,MAAMhT,KAAKlB,cAE7B,QAAIR,EAAKiK,SAASmH,EAAGgB,UAGL,WAAZhB,EAAGgB,OAAqBpS,EAAKiK,SAAS,aAG1B,YAAZmH,EAAGgB,OAAuBpS,EAAKiK,SAAS,UAAWjK,EAAKiK,SAAS,WAG/C,YAAZmH,EAAGgB,OAAuBpS,EAAKiK,SAAS,WAAYjK,EAAKiK,SAAS,QAAO,IAEtF7J,KAAIgR,IAAE,CAAO2K,MAAO3K,EAAGpR,KAAMqS,MAAOjB,EAAGpR,SAE5CojB,EAAcC,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAckK,YAAapM,MAAOkC,EAAciK,aAEtFtL,KAAKmC,SAAS,CAAEhD,QAAO+Q,iBAC3B,CAEAzH,UAAAA,CAAWxJ,EAAgBsJ,GAA6D,IAADgK,EAAAC,EACnF,IAAKxS,KAAKkC,MAAMgO,cACZ,OAAO,KAGX,MAAMjjB,EAA+B,QAA3BslB,EAAGvS,KAAKkC,MAAMgO,qBAAa,IAAAqC,OAAA,EAAxBA,EAA0Bhe,MAAK6b,GAASA,EAAMjR,QAAUa,KAAKkC,MAAM/C,QAEhF,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR9f,MAAO,CAAE6U,MAAO,QAChBoE,QAAQ,WAAU9Y,SAAA,CAEjB8N,KAAKwB,MAAMkB,OAAOmG,OACf5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SACnD,MACJ5W,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTyT,cAAY,EACZnK,WAAYA,EACZpJ,MAAOa,KAAKkC,MAAM/C,MAClBwT,YAAaA,IAAM3S,KAAKuE,QAAY,OAAJtX,QAAI,IAAJA,OAAI,EAAJA,EAAM4b,OAA2C,IAApC7I,KAAKwB,MAAMkB,OAAO8B,eAC/DjB,SAAU7L,GACNsI,KAAKmC,SAAS,CAAEhD,MAAOzH,EAAElC,OAAO2J,QAAS,IAAMa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,SAC5FjN,SAEwB,QAFxBsgB,EAEAxS,KAAKkC,MAAMgO,qBAAa,IAAAsC,OAAA,EAAxBA,EAA0BtlB,KAAI0lB,IAC3B3gB,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOyT,EAAMzT,MACbpN,MAAO6gB,EAAMzT,QAAUkC,EAAciK,WAAa,CAAEwH,QAAS,IAAQ,CAAC,EAAE5gB,SAEvE8N,KAAKuE,QAAQqO,EAAM/J,OAA2C,IAApC7I,KAAKwB,MAAMkB,OAAO8B,gBAJxCoO,EAAMzT,WAQtBa,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCpFEgH,EAA8C,CAChDC,UAAW,CACP7E,MAAO,QAEXmM,QAAS,CACLnM,MAAO,IACPoD,aAAc,IAElBgJ,UAAW,CACPpM,MAAO,IACPqM,YAAa,KAmNrB,QApMA,cAAiC5R,EAC7B,uBAAM8B,GAAoC,IAAD+P,EACrCzR,MAAM0B,oBAEN,MAAMgQ,QAAqBnT,KAAKwB,MAAMuC,OAAOuO,kBACvCc,EAAyD,GACzDC,EAA0D,GAC1DC,EAAwD,GAE9D,IAAIC,EAAsC,GAC1C,MAAMC,QAA8BxT,KAAKwB,MAAMuC,OAAO0P,UAAU,uBAE5DF,EADqB,OAArBC,QAAqB,IAArBA,GAA6B,QAARN,EAArBM,EAAuB5c,cAAM,IAAAsc,GAA7BA,EAA+BQ,YACV9jB,OAAOyQ,KAAKmT,EAAsB5c,OAAO8c,aAEzC,KAGzBP,EAAavX,SAAQsC,IACD,WAAZA,EAAGgB,KACHkU,EAAmB9d,KAAK,CAAEuT,MAAO3K,EAAGpR,KAAMqS,MAAOjB,EAAGpR,OACjC,YAAZoR,EAAGgB,KACVmU,EAAoB/d,KAAK,CAAEuT,MAAO3K,EAAGpR,KAAMqS,MAAOjB,EAAGpR,QAClC,YAAZoR,EAAGgB,OAGVkU,EAAmB9d,KAAK,CAAEuT,MAAO3K,EAAGpR,KAAMqS,MAAOjB,EAAGpR,OACpDumB,EAAoB/d,KAAK,CAAEuT,MAAO3K,EAAGpR,KAAMqS,MAAOjB,EAAGpR,QAHrDwmB,EAAkBhe,KAAK,CAAEuT,MAAO3K,EAAGpR,KAAMqS,MAAOjB,EAAGpR,OAKvD,IAGJsmB,EAAmBjD,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAckK,YAAapM,MAAOkC,EAAciK,aAC3F+H,EAAoBlD,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAckK,YAAapM,MAAOkC,EAAciK,aAC5FgI,EAAkBnD,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAckK,YAAapM,MAAOkC,EAAciK,aAE1FtL,KAAKmC,SAAS,CACViR,qBACAE,oBACAD,sBACAE,sBAER,CAEA9K,UAAAA,CAAWxJ,EAAgBsJ,GAA6D,IAADoL,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACnF,IAAKjU,KAAKkC,MAAMkR,qBAAuBpT,KAAKkC,MAAMmR,sBAAwBrT,KAAKkC,MAAMoR,kBACjF,OAAO,KAEX,MAAMY,GACF7S,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMkB,OAAOyR,kBAAoB,iBAAmB,SACnGllB,WACImlB,EAAa/S,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMkB,OAAO2R,gBAAkB,cACzFC,EAAcjT,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMkB,OAAO6R,iBAAmB,eAC3FC,EAAcnT,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMkB,OAAO+R,iBAAmB,eAE3FC,EAA8C,QAAhCf,EAAG3T,KAAKkC,MAAMkR,0BAAkB,IAAAO,OAAA,EAA7BA,EAA+Bpf,MAAKtH,GAAQA,EAAKkS,QAAUiV,IAC5EO,EAAgD,QAAjCf,EAAG5T,KAAKkC,MAAMmR,2BAAmB,IAAAO,OAAA,EAA9BA,EAAgCrf,MAAKtH,GAAQA,EAAKkS,QAAUmV,IAC9EM,EAA8C,QAA/Bf,EAAG7T,KAAKkC,MAAMoR,yBAAiB,IAAAO,OAAA,EAA5BA,EAA8Btf,MAAKtH,GAAQA,EAAKkS,QAAUqV,IAElF,OACIpK,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,EAAOC,UAAUvZ,SAAA,CACxB8N,KAAKkC,MAAMqR,oBACRnJ,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR9f,MAAOyZ,EAAOuH,QACd/H,QAAQ,WAAU9Y,SAAA,EAElBD,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAC,mBACnBkY,EAAAA,EAAAA,MAACqI,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTyT,cAAY,EACZnK,WAAYA,EACZpJ,MAAO+U,EACP3Q,SAAU7L,GACNsI,KAAKuD,SACDvD,KAAKwB,MAAMkB,OAAOyR,kBAAoB,eACnB,UAAnBzc,EAAElC,OAAO2J,QAEgB,SAAnBzH,EAAElC,OAAO2J,OAEPzH,EAAElC,OAAO2J,QAExBjN,SAAA,EAEDD,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAM,QACNpN,MAAO,CAAE8iB,WAAY,QAAS3iB,SAE7BlE,EAAAA,KAAKC,EAAE,gCAJJ,WAMRgE,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAM,OACNpN,MAAO,CAAE8iB,WAAY,QAAS3iB,SAE7BlE,EAAAA,KAAKC,EAAE,oDAJJ,SAMsB,QADnB6lB,EACV9T,KAAKkC,MAAMqR,0BAAkB,IAAAO,OAAA,EAA7BA,EAA+B5mB,KAAID,IAChCgF,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOlS,EAAKiF,SAEXjF,GAHIA,WAQrB,KACH+S,KAAKkC,MAAMqR,oBAAqBthB,EAAAA,EAAAA,KAAA,SAAS,KACzC+N,KAAKkC,MAAMqR,oBAAuC,UAAjBW,GAC9BjiB,EAAAA,EAAAA,KAAA,OAAAC,SAAMlE,EAAAA,KAAKC,EAAE,qCACb,MACJmc,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR9f,MAAOyZ,EAAOwH,UACdhI,QAAQ,WAAU9Y,SAAA,EAElBD,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAElE,EAAAA,KAAKC,EAAE,4BAC3BgE,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTyT,cAAY,EACZnK,WAAYA,EACZpJ,MAAOiV,GAAc,GACrBzB,YAAaA,IAAM3S,KAAKuE,QAAsB,OAAdmQ,QAAc,IAAdA,OAAc,EAAdA,EAAgB7L,OAChDtF,SAAU7L,GAAKsI,KAAKuD,SAASvD,KAAKwB,MAAMkB,OAAO2R,gBAAkB,aAAc3c,EAAElC,OAAO2J,OAAOjN,SAEjE,QAFiE6hB,EAE9F/T,KAAKkC,MAAMkR,0BAAkB,IAAAW,OAAA,EAA7BA,EAA+B7mB,KAAI,CAACD,EAAMiN,KACvCjI,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOlS,EAAKkS,MACZpN,MAAO9E,EAAKkS,QAAUkC,EAAciK,WAAa,CAAEwH,QAAS,IAAQ,CAAC,EAAE5gB,SAEtE8N,KAAKuE,QAAQtX,EAAK4b,QAJd,GAAG5b,EAAKkS,SAASjF,aAStCkQ,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR9f,MAAOyZ,EAAOwH,UACdhI,QAAQ,WAAU9Y,SAAA,EAElBD,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAElE,EAAAA,KAAKC,EAAE,6BAC3BgE,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTyT,cAAY,EACZnK,WAAYA,EACZpJ,MAAOmV,GAAe,GACtB3B,YAAaA,IAAM3S,KAAKuE,QAAuB,OAAfoQ,QAAe,IAAfA,OAAe,EAAfA,EAAiB9L,OACjDtF,SAAU7L,GACNsI,KAAKuD,SAASvD,KAAKwB,MAAMkB,OAAO6R,iBAAmB,cAAe7c,EAAElC,OAAO2J,OAC9EjN,SAE8B,QAF9B8hB,EAEAhU,KAAKkC,MAAMmR,2BAAmB,IAAAW,OAAA,EAA9BA,EAAgC9mB,KAAI,CAACD,EAAMiN,KACxCjI,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOlS,EAAKkS,MACZpN,MAAO9E,EAAKkS,QAAUkC,EAAciK,WAAa,CAAEwH,QAAS,IAAQ,CAAC,EAAE5gB,SAEtE8N,KAAKuE,QAAQtX,EAAK4b,QAJd,GAAG5b,EAAKkS,SAASjF,aAStCkQ,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR9f,MAAOyZ,EAAOwH,UACdhI,QAAQ,WAAU9Y,SAAA,EAElBD,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAElE,EAAAA,KAAKC,EAAE,6BAC3BgE,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTyT,cAAY,EACZnK,WAAYA,EACZpJ,MAAOqV,GAAe,GACtB7B,YAAaA,IAAM3S,KAAKuE,QAAuB,OAAfqQ,QAAe,IAAfA,OAAe,EAAfA,EAAiB/L,OACjDtF,SAAU7L,GACNsI,KAAKuD,SAASvD,KAAKwB,MAAMkB,OAAO+R,iBAAmB,cAAe/c,EAAElC,OAAO2J,OAC9EjN,SAE4B,QAF5B+hB,EAEAjU,KAAKkC,MAAMoR,yBAAiB,IAAAW,OAAA,EAA5BA,EAA8B/mB,KAAI,CAACD,EAAMiN,KACtCjI,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOlS,EAAKkS,MACZpN,MAAO9E,EAAKkS,QAAUkC,EAAciK,WAAa,CAAEwH,QAAS,IAAQ,CAAC,EAAE5gB,SAEtE8N,KAAKuE,QAAQtX,EAAK4b,QAJd,GAAG5b,EAAKkS,SAASjF,cAWlD,GCrHJ,QAlFA,cAAmCmH,EAC/B,uBAAM8B,GAAoC,IAAD+P,EAGrC,IAAIK,EAFJ9R,MAAM0B,oBAGN,MAAMqQ,QAA8BxT,KAAKwB,MAAMuC,OAAO0P,UAAU,uBAE5DF,EADqB,OAArBC,QAAqB,IAArBA,GAA6B,QAARN,EAArBM,EAAuB5c,cAAM,IAAAsc,GAA7BA,EAA+BQ,YACV9jB,OAAOyQ,KACxBmT,EAAsB5c,OAAO8c,aAGZ,GAEzB1T,KAAKmC,SAAS,CAAEoR,sBACpB,CAEA9K,UAAAA,CAAWxJ,EAAgBsJ,GAAsD,IAADuL,EAC5E,IAAK9T,KAAKkC,MAAMqR,mBACZ,OAAO,KAEX,MAAMW,GACF7S,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMkB,OAAOyR,kBAAoB,iBAAmB,SACnGllB,WAEF,OACImb,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR9f,MAAO,CAAE6U,MAAO,QAChBoE,QAAQ,WAAU9Y,SAAA,CAEjB8N,KAAKwB,MAAMkB,OAAOmG,OACf5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SACnD,MACJuB,EAAAA,EAAAA,MAACqI,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTyT,cAAY,EACZnK,WAAYA,EACZpJ,MAAO+U,EACP3Q,SAAU7L,GACNsI,KAAKuD,SACDvD,KAAKwB,MAAMkB,OAAOyR,kBAAoB,eACnB,UAAnBzc,EAAElC,OAAO2J,QAA+C,SAAnBzH,EAAElC,OAAO2J,OAA0BzH,EAAElC,OAAO2J,QAExFjN,SAAA,EAEDD,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAM,QACNpN,MAAO,CAAE8iB,WAAY,QAAS3iB,SAE7BlE,EAAAA,KAAKC,EAAE,gCAJJ,WAMRgE,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAM,OACNpN,MAAO,CAAE8iB,WAAY,QAAS3iB,SAE7BlE,EAAAA,KAAKC,EAAE,oDAJJ,SAMsB,QADnB6lB,EACV9T,KAAKkC,MAAMqR,0BAAkB,IAAAO,OAAA,EAA7BA,EAA+B5mB,KAAID,IAChCgF,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOlS,EAAKiF,SAEXjF,GAHIA,QAOhB+S,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GChFEgH,EAA8B,CAChCC,UAAW,CACP7E,MAAO,QAEXnV,KAAM,CACFmV,MAAO,GACPC,OAAQ,GACRoM,YAAa,GAEjB6B,SAAU,CACND,WAAY,OACZlD,SAAU,IACVsB,YAAa,GACb8B,cAAe,aACfxW,QAAS,gBAEbyW,SAAU,CACNH,WAAY,UAEhBI,WAAatU,IAAe,CACxBjP,MAA8B,SAAvBiP,EAAMiL,QAAQC,KAAkB,UAAY,YAEvDqJ,QAAUvU,IAAe,CACrBjP,MAA8B,SAAvBiP,EAAMiL,QAAQC,KAAkB,UAAY,YAEvDsJ,UAAYxU,IAAe,CACvBjP,MAA8B,SAAvBiP,EAAMiL,QAAQC,KAAkB,UAAY,UACnDuJ,GAAI,UA2CZ,MAAMC,UAA2BhU,EAC7B8B,iBAAAA,GACI1B,MAAM0B,oBACNnD,KAAKmC,SAAS,CACVuG,OAAQ,GACR4M,SAAS,EACTC,gBAAiB,KACjBC,sBAAsB,EACtBC,qBAAqB,EACrB3kB,OAAQ,KACR4kB,YAAa,KACbC,cAAc,EACdC,mBAAmB,GAE3B,CAEAC,iBAAAA,GACI,GAAI7V,KAAKkC,MAAMwG,SAAW1I,KAAKkC,MAAMqT,gBAAiB,CAClD,IAAIO,EAAkC9V,KAAKkC,MAAMwG,OAsEjD,OArEI1I,KAAKkC,MAAMwT,cACXI,EAAU,EAAC7jB,EAAAA,EAAAA,KAAA,OAAAC,SAAkB4jB,GAAT,UACpBA,EAAQxgB,MACJrD,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CAEHC,QAAQ,YACRC,QAASA,IAAMtc,OAAOwO,KAAK,4CAA6C,UAAUjL,SAEjFlE,EAAAA,KAAKC,EAAE,iBAJJ,WAOP+R,KAAKkC,MAAMwT,YAAY1jB,OAUxB8jB,EAAQxgB,MACJrD,EAAAA,EAAAA,KAAC8jB,EAAAA,eAAc,CAAA7jB,UACXkY,EAAAA,EAAAA,MAAC4L,EAAAA,MAAK,CAACtM,KAAK,QAAOxX,SAAA,EACfD,EAAAA,EAAAA,KAACgkB,EAAAA,UAAS,CAAA/jB,UACNkY,EAAAA,EAAAA,MAAC8L,EAAAA,SAAQ,CAAAhkB,SAAA,EACLD,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAAAjkB,SAAElE,EAAAA,KAAKC,EAAE,iBACnBgE,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAAAjkB,SAAElE,EAAAA,KAAKC,EAAE,iBACnBgE,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAAAjkB,SAAC,UACXD,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAAAjkB,SAAElE,EAAAA,KAAKC,EAAE,mBACnBgE,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAAAjkB,SAAElE,EAAAA,KAAKC,EAAE,oBACnBgE,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAAAjkB,SAAC,aAGnBD,EAAAA,EAAAA,KAACmkB,EAAAA,UAAS,CAAAlkB,SACL8N,KAAKkC,MAAMwT,YAAYxoB,KAAImpB,IACxBjM,EAAAA,EAAAA,MAAC8L,EAAAA,SAAQ,CAAAhkB,SAAA,EACLD,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAACpH,GAAIsH,EAAQC,UAAY,KAAO9K,EAAO2J,UAAUjjB,SACtDmkB,EAAQA,QAAQE,WAErBtkB,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAACpH,GAAIsH,EAAQG,aAAe,KAAOhL,EAAO2J,UAAUjjB,SACzDmkB,EAAQA,QAAQI,WAErBxkB,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAACpH,GAAIsH,EAAQK,UAAY,KAAOlL,EAAO2J,UAAUjjB,SACtDmkB,EAAQA,QAAQM,MAAQ,QAE7B1kB,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAACpH,GAAIsH,EAAQO,UAAY,KAAOpL,EAAO2J,UAAUjjB,SACtDmkB,EAAQA,QAAQO,WACa,wBAA9BP,EAAQA,QAAQO,UACV,IAAIjiB,KAAK0hB,EAAQA,QAAQO,WAAWC,qBACpC,QAEV5kB,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAAAjkB,SACuB,SAA5BmkB,EAAQA,QAAQS,QACiB,qBAA5BT,EAAQA,QAAQS,QACZ,SACAT,EAAQA,QAAQS,QACpB,OAEV7kB,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAAAjkB,SAAEmkB,EAAQjoB,OAvBTioB,EAAQjoB,YAdnB,WAVxB0nB,EAAQxgB,MAAKrD,EAAAA,EAAAA,KAAA,OAAAC,SAAkBlE,EAAAA,KAAKC,EAAE,+CAAhB,UACtB6nB,EAAQxgB,MAAKrD,EAAAA,EAAAA,KAAA,OAAAC,SAAkBlE,EAAAA,KAAKC,EAAE,6BAAhB,aAyD1Bmc,EAAAA,EAAAA,MAAC2M,EAAAA,OAAM,CACH5Z,MAAM,EACN6Z,SAAS,KACTvL,eAAoCla,IAAzByO,KAAKwB,MAAMiK,WAA0BzL,KAAKwB,MAAMiK,UAC3DR,QAASA,IAAMjL,KAAKmC,SAAS,CAAEuG,OAAQ,GAAIgN,YAAa,OAAQxjB,SAAA,EAEhED,EAAAA,EAAAA,KAACglB,EAAAA,YAAW,CAAA/kB,SAAElE,EAAAA,KAAKC,EAAE,eACrBgE,EAAAA,EAAAA,KAACilB,EAAAA,cAAa,CAAAhlB,UACVD,EAAAA,EAAAA,KAACklB,EAAAA,kBAAiB,CAAAjlB,SAAE4jB,OAExB7jB,EAAAA,EAAAA,KAACmlB,EAAAA,cAAa,CAAAllB,UACVD,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHC,QAAQ,YACRC,QAASA,IAAMjL,KAAKmC,SAAS,CAAEuG,OAAQ,GAAIgN,YAAa,OACxDhkB,MAAM,UACN2lB,WAAS,EACTC,WAAWrlB,EAAAA,EAAAA,KAACslB,EAAAA,MAAS,IAAIrlB,SAExBlE,EAAAA,KAAKC,EAAE,eAK5B,CAEA,OAAO,IACX,CAEAupB,mBAAAA,GACI,GAAIxX,KAAKkC,MAAMqT,gBAAiB,CAC5B,MAAMkC,EAAM,GACNzV,EAAOhC,KAAKkC,MAAMqT,gBA4CxB,OA3CA3lB,OAAOyQ,KAAK2B,GAAMpG,SAAQzG,IACtB,GAAkB,OAAd6M,EAAK7M,SAA+B5D,IAAdyQ,EAAK7M,GAG/B,GAAyB,kBAAd6M,EAAK7M,GAAmB,CAC/B,MAAM5F,EAAMyS,EAAK7M,GACjBvF,OAAOyQ,KAAK9Q,GAAKqM,SAAQ8b,IACH,OAAdnoB,EAAImoB,SAAgCnmB,IAAdhC,EAAImoB,KACD,kBAAdnoB,EAAImoB,GACXD,EAAIniB,MACA8U,EAAAA,EAAAA,MAAA,OAAAlY,SAAA,EACIkY,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,EAAOsJ,SAAS5iB,SAAA,CAAEwlB,EAAK,OAClCvnB,KAAKE,UAAUd,EAAImoB,GAAO,KAAM,KAF3BA,IAMdD,EAAIniB,MACA8U,EAAAA,EAAAA,MAAA,OAAAlY,SAAA,EACIkY,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,EAAOsJ,SAAS5iB,SAAA,CACvBiD,EAAI,KAAGuiB,EAAK,OAEhBnoB,EAAImoB,GAAMzoB,aAJLyoB,IAQtB,GAER,MACID,EAAIniB,MACA8U,EAAAA,EAAAA,MAAA,OAAAlY,SAAA,EACIkY,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,EAAOsJ,SAAS5iB,SAAA,CAAEiD,EAAIjG,QAAQ,KAAM,KAAK,OACpD8S,EAAK7M,GAAKlG,aAFLkG,GAKlB,IAEJsiB,EAAIniB,MACA8U,EAAAA,EAAAA,MAAA,OAAAlY,SAAA,EACIkY,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,EAAOsJ,SAAS5iB,SAAA,CAAElE,EAAAA,KAAKC,EAAE,cAAc,OAClD+R,KAAKkC,MAAMuT,oBAAsBznB,EAAAA,KAAKC,EAAE,cAAgBD,EAAAA,KAAKC,EAAE,qBAF3D,aAOTmc,EAAAA,EAAAA,MAAC2M,EAAAA,OAAM,CACH5Z,MAAM,EACNgI,QAASA,IAAMnF,KAAKmC,SAAS,CAAEoT,gBAAiB,OAAQrjB,SAAA,EAExDD,EAAAA,EAAAA,KAACglB,EAAAA,YAAW,CAAA/kB,UACRD,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,OACVS,GAAI/O,KAAKkC,MAAMpR,OAAS0a,EAAO0J,QAAU1J,EAAOyJ,WAAW/iB,SAE1DlE,EAAAA,KAAKC,EAAE,gBAAiB+R,KAAKkC,MAAMpR,OAAS,KAAO,gBAG5DsZ,EAAAA,EAAAA,MAAC8M,EAAAA,cAAa,CAAAhlB,SAAA,CACT8N,KAAKkC,MAAM0T,mBACR3jB,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHC,QAAQ,YACRC,QAASA,IAAMtc,OAAOwO,KAAK,4CAA6C,UAAUjL,SACrF,yBAGD,KACH8N,KAAKkC,MAAMwG,QACRzW,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,MACVS,GAAIvD,EAAO2J,UAAUjjB,SAEpB8N,KAAKkC,MAAMwG,SAEhB,KACH+O,MAELxlB,EAAAA,EAAAA,KAACmlB,EAAAA,cAAa,CAAAllB,UACVD,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHE,QAASA,IAAMjL,KAAKmC,SAAS,CAAEoT,gBAAiB,KAAM7M,OAAQ,KAC9DhX,MAAM,UACNsZ,QAAQ,YAAW9Y,SAElBlE,EAAAA,KAAKC,EAAE,kBAK5B,CACA,OAAO,IACX,CAEA,eAAO2pB,CAASC,GAaZ,MACM1X,EADY0X,EAAM9qB,MAAM,KAAK,GACVmC,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KACpD4oB,EAAchc,mBAChBic,KAAK5X,GACApT,MAAM,IACNG,KAAI8qB,GAAK,IAAI,KAAKA,EAAEC,WAAW,GAAGhpB,SAAS,MAAMiE,OAAO,OACxD3F,KAAK,KAEd,IACI,OAAO4C,KAAKC,MAAM0nB,EACtB,CAAE,MACE,OAAO,IACX,CACJ,CAEA,qBAAOI,CAAezB,EAAiB0B,EAAcrB,EAAiB9S,GAClE,IAAKmU,IAAS1B,EACV,OAAO,EAEX,IAAI3lB,GAAS,EACb,MAAOsnB,GAAS3B,EAAQ1pB,MAAM,KAiB9B,OAhBIorB,EAAKhmB,WAAW,MAChBrB,EAASsC,SAASglB,EAAO,KAAOhlB,SAAS+kB,EAAK9qB,UAAU,EAAG,KACpD8qB,EAAKhmB,WAAW,MACvBrB,EAASsC,SAASglB,EAAO,KAAOhlB,SAAS+kB,EAAK9qB,UAAU,EAAG,KACpD8qB,EAAKhmB,WAAW,KACvBrB,EAASsC,SAASglB,EAAO,IAAMhlB,SAAS+kB,EAAK9qB,UAAU,EAAG,KACnD8qB,EAAKhmB,WAAW,KACvBrB,EAASsC,SAASglB,EAAO,IAAMhlB,SAAS+kB,EAAK9qB,UAAU,EAAG,KACnD8qB,EAAKhmB,WAAW,KACvBrB,EAASsC,SAASglB,EAAO,MAAQhlB,SAAS+kB,EAAK9qB,UAAU,EAAG,KACrD8qB,EAAKhmB,WAAW,MACvBrB,EAASsC,SAASglB,EAAO,MAAQhlB,SAAS+kB,EAAK9qB,UAAU,EAAG,KACrD8qB,EAAKhmB,WAAW,SACvBrB,EAASsC,SAASglB,EAAO,MAAQhlB,SAAS+kB,EAAK9qB,UAAU,EAAG,OAMjD,CAKnB,CAEA,0BAAMgrB,CAAqBrU,GAAgD,IAADsU,EAAAC,EAEtE,MAAMC,QAAiBxY,KAAKwB,MAAMuC,OAAO0P,UAAU,mBAC7CgF,EAA0B,GAChC,GAAY,OAARD,QAAQ,IAARA,GAAgB,QAARF,EAARE,EAAU5hB,cAAM,IAAA0hB,GAAU,QAAVC,EAAhBD,EAAkBE,gBAAQ,IAAAD,GAA1BA,EAA4BvmB,OAAQ,CAEpC,IAAI0mB,EAA6B,KACjC,MAAMvkB,EAAMQ,KAAKR,MAEjB,IAAIwiB,EAKAF,EAJJ,GAAIzW,KAAKwB,MAAMkB,OAAOiU,KAAM,CAAC,IAADgC,EACxB,MAAMC,QAAgB5Y,KAAKwB,MAAMuC,OAAO0P,UAAU,oBAClDkD,EAAc,OAAPiC,QAAO,IAAPA,GAAe,QAARD,EAAPC,EAAShiB,cAAM,IAAA+hB,OAAR,EAAPA,EAAiBhC,IAC5B,CAEA,GAAI3W,KAAKwB,MAAMkB,OAAO+T,QAAS,CAAC,IAADoC,EAC3B,MAAMC,QAAa9Y,KAAKwB,MAAMuC,OAAO0P,UAAU,kBAAkBzP,KACjEyS,EAAc,OAAJqC,QAAI,IAAJA,GAAY,QAARD,EAAJC,EAAMpqB,cAAM,IAAAmqB,OAAR,EAAJA,EAAcpC,OAC5B,CAGA+B,EAAS5hB,OAAO4hB,SAAS5c,SAASya,IAC9B,MAAMO,GACDP,EAAQO,WACa,wBAAtBP,EAAQO,WACR,IAAIjiB,KAAK0hB,EAAQO,WAAW/hB,UAAYV,EACtC3B,GAAS6jB,EAAQE,SAAW,IAAIxpB,MAAM,KACtCupB,EAAY9jB,EAAM,KAAOwR,GAAgC,UAAhBA,GAAwC,QAAbxR,EAAM,GAC1EkkB,GAAaC,IAASN,EAAQM,MAAQN,EAAQM,OAASA,EACvDH,EAAenB,EAAmB6C,eACpCzB,EACAJ,EAAQI,QACRJ,EAAQS,QACR9S,KAIE0U,GAAkC,SAApBrC,EAAQS,UACxBF,GACAN,GACAI,GACAF,IAEAkC,EAAarC,GAEjBoC,EAAOnjB,KAAK,CACRlH,GAAIioB,EAAQjoB,GACZkoB,YACAI,YACAF,eACAI,YACAP,WACF,IAGFqC,IACAD,EAAOlkB,MAAKmD,GAAKA,EAAEtJ,KAAOsqB,EAAWtqB,KAAI2qB,MAAO,EAExD,CAEA,OAAON,CACX,CAEA,kBAAMO,CAAa3C,EAAiBrS,GAChC,IAAI2S,EAKAF,EAJJ,GAAIzW,KAAKwB,MAAMkB,OAAOiU,KAAM,CAAC,IAADsC,EACxB,MAAML,QAAgB5Y,KAAKwB,MAAMuC,OAAO0P,UAAU,oBAClDkD,EAAc,OAAPiC,QAAO,IAAPA,GAAe,QAARK,EAAPL,EAAShiB,cAAM,IAAAqiB,OAAR,EAAPA,EAAiBtC,IAC5B,CAEA,GAAI3W,KAAKwB,MAAMkB,OAAO+T,QAAS,CAAC,IAADyC,EAC3B,MAAMJ,QAAa9Y,KAAKwB,MAAMuC,OAAO0P,UAAU,kBAAkBzP,KACjEyS,EAAc,OAAJqC,QAAI,IAAJA,GAAY,QAARI,EAAJJ,EAAMpqB,cAAM,IAAAwqB,OAAR,EAAJA,EAAczC,OAC5B,CAEA,MAAM0C,EAAa,IAAIC,gBACvB,IAAIC,EAAU/V,YAAW,KACrB+V,EAAU,KACVF,EAAWG,OAAO,GACnB,KAEH,IAAK,IAADC,EACA,MAAM9Z,QAAiB9Q,OAAO4Q,MAAM,2CAA4C,CAC5Eia,OAAQ,OACRjc,KAAMpN,KAAKE,UAAU,CAAE4N,KAAMoY,EAASM,SACtC8C,QAAS,CACL,eAAgB,cAEpBC,OAAQP,EAAWO,SAEnBL,GACAhV,aAAagV,GAEjB,MAAMxV,QAAgBpE,EAAS1R,OAC/B,IAAIiU,EAUJ,IACIA,EAAO7R,KAAKC,MAAMyT,EACtB,CAAE,MACE,CAGJ,GAAQ,QAAR0V,EAAIvX,SAAI,IAAAuX,IAAJA,EAAMta,MAgBH,CACH,IAAIsW,EAAkB,KACtB,IACIA,EAAkBF,EAAmBuC,SAASvB,EAClD,CAAE,MACE,CAEJ,GAAIrU,EAAM,CACN,MAAM4U,EAAY5U,EAAK4U,WAAa5U,EAAK2X,WACzC,GACI/C,GACc,wBAAdA,GACA,IAAIjiB,KAAKiiB,GAAW/hB,UAAYF,KAAKR,MAErC,OAAO6L,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EAAE,2BAA4B,IAAI0G,KAAKiiB,GAAWgD,kBAC/DnE,qBAAqB,EACrBF,kBACAzkB,QAAQ,EACRwkB,SAAS,IAGjB,MAAM9iB,GAASwP,EAAKlV,MAAQ,IAAIC,MAAM,KACtC,OAAIyF,EAAM,KAAOwR,GAA6B,QAAbxR,EAAM,IAAgC,UAAhBwR,EAE/C2S,IAAS3U,EAAK2U,MAAwB,UAAhB3S,EACfhE,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EAAE,+BAAgC+T,EAAK2U,MACpDf,mBAAmB,EACnBH,qBAAqB,EACrBF,kBACAzkB,QAAQ,EACRwkB,SAAS,IAIbqB,GAAQ3U,EAAK2U,MAAQ3U,EAAK2U,OAASA,EAC5B3W,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EACT,+DACA+T,EAAK2U,MAETlB,qBAAqB,EACrBF,kBACAzkB,QAAQ,EACRwkB,SAAS,IAIZD,EAAmB6C,eAAezB,EAASzU,EAAKyU,QAASzU,EAAK8U,QAAS9S,GAcrEhE,KAAKmC,SAAS,CACjBsT,qBAAqB,EACrBF,kBACAzkB,QAAQ,EACRwkB,SAAS,IAjBFtV,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EACT,2DACA+T,EAAKyU,QACLzW,KAAKwB,MAAMkB,OAAO+T,SAEtBhB,qBAAqB,EACrBF,kBACAzkB,QAAQ,EACRwkB,SAAS,IAWdtV,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EAAE,oCAAqC+T,EAAKlV,MACzD2oB,qBAAqB,EACrBF,kBACAzkB,QAAQ,EACRwkB,SAAS,GAEjB,CACA,MAAM,IAAIuE,MAAM,gCACpB,CA9FI,IACI,MAAMC,EAAQzE,EAAmBuC,SAASvB,GACpC3N,EAAS1a,EAAAA,KAAKC,EAAE,MAAM6rB,EAAM7a,OAAS+C,EAAK/C,OAAS,mBAAmB/P,QAAQ,OAAQ,IAE5F,OAAO8Q,KAAKmC,SAAS,CACjBuG,SACA+M,qBAAqB,EACrBF,gBAAiBuE,EACjBhpB,QAAQ,EACRwkB,SAAS,GAEjB,CAAE,MAEE,OADAxc,QAAQwQ,IAAI,wBACLtJ,KAAKmC,SAAS,CAAEuG,OAAQ1G,EAAK/C,MAAOnO,QAAQ,EAAOwkB,SAAS,GACvE,CAiFR,CAAE,MAAOrW,GAAQ,IAAD8a,EACZ,GAAgC,OAAvB,OAAL9a,QAAK,IAALA,GAAe,QAAV8a,EAAL9a,EAAOQ,gBAAQ,IAAAsa,OAAV,EAALA,EAAiBC,QACjB,OAAOha,KAAKmC,SAAS,CAAEuG,OAAQ1a,EAAAA,KAAKC,EAAE,6BAA8B6C,QAAQ,EAAOwkB,SAAS,IAGhG,IACI,MAAMtT,EAAOqT,EAAmBuC,SAASvB,GACnC7jB,GAASwP,EAAKlV,MAAQ,IAAIC,MAAM,KAEtC,OACIiV,EAAK2X,YACe,wBAApB3X,EAAK2X,YACL,IAAIhlB,KAAKqN,EAAK2X,YAAY9kB,UAAYF,KAAKR,MAEpC6L,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EAAE,2BAA4B,IAAI0G,KAAKqN,EAAK2X,YAAYC,kBACrErE,gBAAiBvT,EACjByT,qBAAqB,EACrBH,SAAS,EACTxkB,QAAQ,IAGZ0B,EAAM,KAAOwR,EAET2S,GAAQ3U,EAAK2U,MAAQ3U,EAAK2U,OAASA,EAC5B3W,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EAAE,+DAAgE+T,EAAK2U,MACpFpB,gBAAiBvT,EACjByT,qBAAqB,EACrB3kB,QAAQ,EACRwkB,SAAS,IAIZD,EAAmB6C,eAAezB,EAASzU,EAAKyU,QAASzU,EAAK8U,QAAS9S,GAcrEhE,KAAKmC,SAAS,CACjBmT,SAAS,EACTxkB,QAAQ,EACR2kB,qBAAqB,EACrBF,gBAAiBvT,IAjBVhC,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EACT,2DACA+T,EAAKyU,QACLzW,KAAKwB,MAAMkB,OAAO+T,SAEtBhB,qBAAqB,EACrBF,gBAAiBvT,EACjBlR,QAAQ,EACRwkB,SAAS,IAWdtV,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EAAE,oCAAqC+T,EAAKlV,MACzD2oB,qBAAqB,EACrBF,gBAAiBvT,EACjBlR,QAAQ,EACRwkB,SAAS,GAEjB,CAAE,MACE,OAAOtV,KAAKmC,SAAS,CACjBuG,OAAQ1a,EAAAA,KAAKC,EAAE,4BACf6C,QAAQ,EACR2kB,qBAAqB,EACrBH,SAAS,GAEjB,CACJ,CACJ,CAEA2E,kBAAAA,GACI,OAAKja,KAAKkC,MAAMyT,cAIZ1jB,EAAAA,EAAAA,KAAC+S,EAAAA,QAAa,CACVjX,KAAMC,EAAAA,KAAKC,EACP,4FAEJgX,GAAIjX,EAAAA,KAAKC,EAAE,UACXkX,QAAS+U,UACL,GAAIC,EAAO,CACPna,KAAKmC,SAAS,CAAEwT,cAAc,IAC9B,UAEU3V,KAAKwB,MAAMuC,OAAOqW,eAAe,KAAM,KACjD,CAAE,MAAO1iB,GAEL,YADA/I,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAE,8BAA+ByJ,GAEvD,OACMsI,KAAKsa,UAAS,EACxB,MACIta,KAAKmC,SAAS,CAAEwT,cAAc,EAAOL,SAAS,GAClD,IArBD,IAyBf,CAEA,cAAMgF,CAASC,GACX,MAAMvW,EAAyC,UAA3BhE,KAAKwB,MAAMwC,YAA0B,MAAQhE,KAAKwB,MAAMwC,YAE5E,IAAIqS,EACAmC,EACJ,GAHAxY,KAAKmC,SAAS,CAAEmT,SAAS,IAGrBtV,KAAKwB,MAAMQ,KAAKwY,mBAMhB,GALAhC,QAAiBxY,KAAKqY,qBAAqBrU,GAC3CqS,EAAUmC,EAASjkB,MAAKkmB,GAAMA,EAAG1B,OAC7B1C,IACAA,EAAUA,EAAQA,QAAQpY,OAEzBoY,IAAYkE,EAIb,YADAva,KAAKmC,SAAS,CAAEwT,cAAc,SAIlCU,EAAUrW,KAAKwB,MAAMQ,KAAKqU,QAE1BA,QACMrW,KAAKgZ,aAAa3C,EAASrS,GAC1BhE,KAAKwB,MAAMQ,KAAKwY,kBACvBxa,KAAKmC,SAAS,CACVuG,OAAQ1a,EAAAA,KAAKC,EAAE,oDACf6C,QAAQ,EACRwkB,SAAS,EACTI,YAAa8C,IAIjBxY,KAAKmC,SAAS,CACVuG,OAAQ1a,EAAAA,KAAKC,EAAE,+BACf6C,QAAQ,EACRwkB,SAAS,GAGrB,CAEA7M,UAAAA,GACI,OACI2B,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,EAAOC,UAAUvZ,SAAA,EACzBkY,EAAAA,EAAAA,MAACW,EAAAA,OAAM,CACHC,QAAShL,KAAKwB,MAAMkB,OAAOsI,SAAW,WACtCtZ,MAAOsO,KAAKwB,MAAMkB,OAAOhR,OAAS,UAClCK,MAAOyZ,EAAOC,UACdlD,UAAYvI,KAAKwB,MAAMQ,KAAKqU,UAAYrW,KAAKwB,MAAMQ,KAAKwY,mBAAsBxa,KAAKkC,MAAMoT,QACzFgC,WAAWrlB,EAAAA,EAAAA,KAACyT,EAAAA,KAAQ,IACpBuF,QAASA,IAAMjL,KAAKsa,WAAWpoB,SAAA,CAE9B8N,KAAKkC,MAAMoT,SACRrjB,EAAAA,EAAAA,KAACyoB,EAAAA,iBAAgB,CACbhR,KAAM,GACN3X,MAAO,CAAEkhB,YAAa,KAE1B,KACHjT,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OAAS,mBAAoB7I,KAAKwB,MAAMkB,OAAO8B,kBAElFxE,KAAKwX,sBACLxX,KAAK6V,oBACL7V,KAAKia,uBAGlB,EAGJ,UCzpBA,QA/DA,cAA6B5Y,EACzBoH,UAAAA,CAAWxJ,EAAgBsJ,GACvB,MAAMpJ,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAC3DmsB,EAAkB5pB,MAAMuJ,QAAQ6E,GAEtC,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR9f,MAAO,CAAE6U,MAAO,QAChBoE,QAAQ,WAAU9Y,SAAA,EAElBD,EAAAA,EAAAA,KAAC2oB,EAAAA,iBAAgB,CACb3P,QAASvT,IAIL,GAHAA,EAAEE,iBACFF,EAAEC,mBAEG4Q,EAAU,CACX,MAAMkE,EAAezM,KAAKuD,SAASvD,KAAKwB,MAAMhT,MAAO2Q,GACjDsN,aAAwB9M,SACnB8M,EAAaxF,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAExE,GAEJmjB,SACI5oB,EAAAA,EAAAA,KAAC6oB,EAAAA,SAAQ,CACLC,cAAeJ,EACfK,UAAW7b,EACXoE,SAAU7L,IACN,IAAIsP,EAEAA,EADA2T,EACe3a,KAAKuD,SAASvD,KAAKwB,MAAMhT,MAAM,GAE/BwR,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMkJ,EAAElC,OAAOwlB,SAEvDhU,aAAwBrH,SACnBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MACpE,EAEJ6Q,SAAUA,GAAYvI,KAAKwB,MAAMkB,OAAOuY,WAGhDpS,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,UAE1C5W,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAC7d,MAAO,CAAEL,MAAO,OAAQQ,SACnC+M,EACKe,KAAKwB,MAAMkB,OAAO8H,mBACdxc,EAAAA,KAAKC,EAAE+R,KAAKwB,MAAMkB,OAAO8H,oBACzBxc,EAAAA,KAAKC,EAAE,YACX,OAET+R,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,G,8CC3DJ,MAAM0W,EAAmB,CACrBC,SAAUC,EAAAA,MACVC,OAAQC,EAAAA,EACRC,SAAUC,EAAAA,eAGRhQ,EAA+B7K,IACjC,MAAM8a,EAA+B,UAAvB9a,EAAMiL,QAAQC,KACtB6P,EAAkBD,EAAQ,sBAAwB,2BAExD,MAAO,CACHE,KAAM,CAAC,EACPC,UAAW,CACPrd,QAAS,cACTsd,SAAU,OACV/Q,KAAM,EACNsC,UAAW,EACXuE,SAAU,GACV,8CAA+C,CAC3CmK,UAAW,cAEf,yBAA0B,CACtBC,WAAY,QAEhB,uBAAwB,CACpBA,WAAY,SAGpBC,MAAO,CACHzd,QAAS,eACT0d,aAAc,WACdC,SAAU,SACVC,WAAY,SACZC,WAAY,OACZC,wBAAyB,gBACzBC,MAAO,OACPxR,KAAM,GAEVyR,cAAe,CACXhe,QAAS,OACTie,SAAU,WACVC,WAAY,SACZC,OAAQ,OACR1S,aAAc,OACd2S,UAAW,IAEfpB,SAAU,CACN,UAAW,CACP1U,OAAQ,GACRkV,WAAY,MACZa,cAAe,OACfxP,UAAW,MACXpD,aAAc,QAGtBmR,SAAU,CACN/N,UAAW,QAEfiO,OAAQ,CACJ,UAAW,CACPxU,OAAQ,GACRmD,aAAc,MACdoD,UAAW,MACX2O,WAAY,GAEhB,uBAAwB,CACpBlV,OAAQ,KAGhBgW,QAAS,CAAC,EACVhU,MAAO,CACHiU,IAAK,EACL,gCAAiC,CAC7BA,IAAK,EACL,iBAAkB,CACdA,IAAK,IAGb,8BAA+B,CAC3BA,IAAK,GACL,iBAAkB,CACdA,IAAK,MAIjBC,YAAa,CACTD,IAAK,GAET9L,WAAY,CACRhH,cAAe,IAEnBgT,QAAS,CAAC,EACVzU,SAAU,CAAC,EACX0U,UAAW,CACP,UAAW,CACPC,aAAc,aAAavc,EAAMiL,QAAQuR,QAAQ1B,EAAQ,OAAS,WAClE2B,KAAM,EACNC,OAAQ,EAERvH,QAAS,KACTwH,SAAU,WACVC,MAAO,EACPC,UAAW,YACXC,WAAY9c,EAAM+c,YAAYC,OAAO,YAAa,CAC9CC,SAAUjd,EAAM+c,YAAYE,SAASC,QACrCC,OAAQnd,EAAM+c,YAAYI,OAAOC,UAErC9R,cAAe,QAEnB,kBAAmB,CACfuR,UAAW,aAEf,gBAAiB,CACbQ,kBAAmBrd,EAAMiL,QAAQ3M,MAAMgf,KACvCT,UAAW,aAEf,WAAY,CACRN,aAAc,aAAaxB,IAC3B0B,KAAM,EACNC,OAAQ,EAERvH,QAAS,WACTwH,SAAU,WACVC,MAAO,EACPE,WAAY9c,EAAM+c,YAAYC,OAAO,sBAAuB,CACxDC,SAAUjd,EAAM+c,YAAYE,SAASC,UAEzC5R,cAAe,QAEnB,0DAA2D,CACvDiR,aAAc,aAAavc,EAAMiL,QAAQ7d,KAAKovB,UAE9C,uBAAwB,CACpBD,aAAc,aAAaxB,MAGnC,oBAAqB,CACjBwC,kBAAmB,WAG3Bjf,MAAO,CACH,UAAW,CACP0M,gBAAiBhL,EAAMiL,QAAQ3M,MAAMgf,KACrCT,UAAW,cAGnBW,KAAM,CACFC,OAAQ,cACR9B,MAAO,QAEX+B,YAAa,CAAC,EACjB,EAGCC,EACS,EADTA,EAEM,GAFNA,EAGU,GAHVA,EAIW,GAaJC,EAAsBA,CAAAC,EAE/BrpB,KAAW,IADX,MAAEgK,EAAK,UAAEsf,EAAS,WAAEC,EAAU,WAAEC,EAAU,YAAEC,EAAW,aAAEC,EAAY,MAAE9sB,GAA0BysB,EAAA,OAGjGvsB,EAAAA,EAAAA,KAAC6sB,EAAAA,KAAI,CAED/sB,MAAO,IACAA,EACHka,cAAeyS,GAAcC,EAAa,YAASptB,EACnDoa,gBAAiB8S,EAAYM,EAAAA,EAAK,UAAOxtB,GAE7C0Z,QAAS2T,EACTzS,SAAU0S,EACVhW,MAAO1J,GARFhK,EASP,EAwFN,MAAM6pB,UAAkBC,IAAAA,UAuBpB1d,WAAAA,CAAYC,GACRC,MAAMD,GAAO,KAvBA0d,cAAQ,OAEjBC,UAAqC,KAAK,KAEjCnD,WAAK,OAELoD,qBAAe,OAEfC,iBAAW,OAEpBC,YAAuC,KAAK,KAE5CC,iBAAyD,KAAK,KAE9DC,iBAAW,OAEXC,0BAAoB,OAEpBjU,OAA8B,CAAC,EAAE,KAEjCkU,WAA+B,KAqEvC,KAGAC,MAAQ,KAAa,IAADC,EACA,QAAhBA,EAAA5f,KAAKsf,mBAAW,IAAAM,GAAhBA,EAAkBD,QACd3f,KAAKkC,MAAM2d,aACX7f,KAAKmC,SAAS,CAAE0d,YAAa,MACjC,EACF,KAEFC,gBAAmBC,IACX/f,KAAKwB,MAAMwe,QACXhgB,KAAKwB,MAAMwe,OAAOD,GAEtB/f,KAAKmC,SAAS,CAAEsc,WAAW,IACvBze,KAAKkC,MAAM2d,aACX7f,KAAKmC,SAAS,CAAE0d,YAAa,OAEjC,MAAM1gB,EAAQ4gB,EAAMvqB,OAAO2J,MAC3B,IAAI8gB,EACJ,OAAQjgB,KAAKwB,MAAM0e,cAAgB,SAC/B,IAAK,eACDD,EAAiB,CAAEE,kBAAkB,GAEzC,IAAK,MACD,GAAIngB,KAAKwB,MAAM4e,eAAgB,CAI3B,MAAMC,GAAkBrgB,KAAKwB,MAAMrC,OAASa,KAAKkC,MAAMoe,OAAOtuB,OAC9DgO,KAAKuf,iBAAmBjc,YAAW,KAC/B,MAAMid,GAAiBvgB,KAAKwB,MAAMrC,OAASa,KAAKkC,MAAMoe,OAAOtuB,OACzDquB,IAAmBE,EACnBvgB,KAAKwgB,cAAcrhB,EAAO8gB,GAE1BjgB,KAAKygB,YACT,GACD,IACP,MACIzgB,KAAKwgB,cAAcrhB,EAAO8gB,GAE9B,MAEJ,IAAK,QACDjgB,KAAKygB,aAKb,EACF,KAEFC,iBAAoBX,IAChB/f,KAAKmC,SAAS,CAAEsc,WAAW,IACvBze,KAAKwB,MAAMmf,SACX3gB,KAAKwB,MAAMmf,QAAQZ,EACvB,EACF,KAEFa,cAAiBb,IACb,MAAM,YAAEF,GAAgB7f,KAAKkC,MAI7B,GAHAlC,KAAKwf,aAAc,EACnBxf,KAAKyf,sBAAuB,EAExBzf,KAAKwB,MAAMqf,YAEX7gB,KAAKwB,MAAMqf,UAAUd,GAGjBA,EAAMe,sBACN,OAGR,MAAMR,EAAQtgB,KAAKwB,MAAMrC,OAASa,KAAKkC,MAAMoe,MAC7C,GAAItgB,KAAKof,gBAAgBroB,SAASgpB,EAAMgB,UAAY/gB,KAAKqf,YAAYtoB,SAASgpB,EAAM5qB,KAApF,EAEmB,IADA6K,KAAKwgB,cAAeT,EAAMvqB,OAA4B2J,QAEjE4gB,EAAMnoB,gBAGd,MAEA,OAAQmoB,EAAMgB,SACV,KAAKzC,EACgD,KAA5CyB,EAAMvqB,OAA4B2J,QAC/B0gB,GACA7f,KAAKghB,iBAAiBV,EAAMT,GAAcA,GACtCA,GACA7f,KAAKmC,SAAS,CAAE0d,YAAaA,EAAc,KAG/C7f,KAAKmC,SAAS,CAAE0d,YAAaS,EAAMtuB,OAAS,KAGpD,MACJ,KAAKssB,EACgD,KAA5CyB,EAAMvqB,OAA4B2J,OAAgB0gB,IACnD7f,KAAKghB,iBAAiBV,EAAMT,GAAcA,GACtCA,GAAeS,EAAMtuB,OAAS,GAC9BgO,KAAKmC,SAAS,CAAE0d,iBAGxB,MACJ,KAAKvB,EACmB,OAAhBuB,GAAqE,KAA5CE,EAAMvqB,OAA4B2J,OAAgBmhB,EAAMtuB,OACjFgO,KAAKmC,SAAS,CAAE0d,YAAaS,EAAMtuB,OAAS,IACrB,OAAhB6tB,GAAwBA,EAAc,GAC7C7f,KAAKmC,SAAS,CAAE0d,YAAaA,EAAc,IAE/C,MACJ,KAAKvB,EACmB,OAAhBuB,GAAwBA,EAAcS,EAAMtuB,OAAS,EACrDgO,KAAKmC,SAAS,CAAE0d,YAAaA,EAAc,IAE3C7f,KAAKmC,SAAS,CAAE0d,YAAa,OAEjC,MACJ,QACI7f,KAAKmC,SAAS,CAAE0d,YAAa,OAErC,EACF,KAEFoB,YAAelB,KAEN/f,KAAKyf,uBACLzf,KAAKof,gBAAgBroB,SAASgpB,EAAMgB,UAAY/gB,KAAKqf,YAAYtoB,SAASgpB,EAAM5qB,OACjF6K,KAAKwf,YAELxf,KAAKygB,aAELzgB,KAAKkhB,YAAanB,EAAMvqB,OAA4B2J,OAEpDa,KAAKwB,MAAM2f,SACXnhB,KAAKwB,MAAM2f,QAAQpB,EACvB,EAQJ,KAEAqB,kBAAqB1pB,IACa,OAA1BsI,KAAKwB,MAAM6f,iBAAiD9vB,IAA1ByO,KAAKwB,MAAM6f,YAC7CrhB,KAAKkhB,YAAYxpB,EAAElC,OAAO2J,OAG1Ba,KAAKwB,MAAM8f,eACXthB,KAAKwB,MAAM8f,cAAc5pB,EAC7B,EAwEJ,KAKA6pB,kBAAqBC,IACjBxhB,KAAKsf,YAAckC,EACfxhB,KAAKwB,MAAMigB,UACXzhB,KAAKwB,MAAMigB,SAASD,EACxB,EA1SAxhB,KAAKkC,MAAQ,CACToe,MAAO9e,EAAM1O,cAAgB,GAC7B+sB,YAAa,KACbwB,WAAY,GACZ5C,WAAW,EACXiD,cAAc,EACdC,eAAgB,GAChB3W,QAAShL,KAAKwB,MAAMwJ,SAAW,YAEnChL,KAAKof,gBAAkB5d,EAAM4d,iBAAmB,CAAC,IACjDpf,KAAKqf,YAAc7d,EAAM6d,aAAe,CAAC,SAEzCrf,KAAKkf,SAAWD,IAAAA,YAChBjf,KAAKgc,MAAQiD,IAAAA,WACjB,CAEA9b,iBAAAA,GAC+B,aAAvBnD,KAAKkC,MAAM8I,UAEXhL,KAAKmf,UAAYyC,IAAAA,YAAqB5hB,KAAKkf,SAAS2C,SACpD7hB,KAAKoC,cAEb,CAEAgC,oBAAAA,GACQpE,KAAKuf,kBACLlb,aAAarE,KAAKuf,iBAE1B,CAEA,+BAAOuC,CAAyBtgB,EAAuBU,GACnD,IAAI6f,EAA2C,KAsB/C,OApBIvgB,EAAMrC,OAASqC,EAAMrC,MAAMnN,SAAWkQ,EAAMyf,eAAe3vB,SAC3D+vB,EAAW,CAAEJ,eAAgBngB,EAAMrC,OAC/BqC,EAAMwgB,0BACND,EAASV,WAAa,KAK1B7f,EAAMwgB,yBAA2BxgB,EAAMrC,OAASqC,EAAMrC,MAAMnN,SAAWkQ,EAAMyf,eAAe3vB,SAC5F+vB,EAAW,CAAEJ,eAAgBngB,EAAMrC,MAAOkiB,WAAY,KAGtD7f,EAAM+G,WACNwZ,EAAW,IAAKA,EAAUlC,YAAa,QAGtC3d,EAAMwf,cAAgBlgB,EAAM1O,eAC7BivB,EAAW,IAAKA,EAAUzB,MAAO9e,EAAM1O,eAGpCivB,CACX,CA8KAvB,aAAAA,CAAcrC,EAAc7vB,GACxB,GAAI0R,KAAKwB,MAAMygB,cAAgBjiB,KAAKwB,MAAMygB,YAAY9D,GAKlD,OAJAne,KAAKyf,sBAAuB,EACxBnxB,GAAWA,EAAQ6xB,kBACnBngB,KAAKygB,cAEF,EAEXzgB,KAAKygB,aACL,MAAMH,EAAQtgB,KAAKwB,MAAMrC,OAASa,KAAKkC,MAAMoe,MAE7C,QAAInC,EAAK9uB,OAAO2C,UACRgO,KAAKwB,MAAM0gB,iBAAoB5B,EAAMvpB,SAASonB,KAC1Cne,KAAKwB,MAAMrC,OAASa,KAAKwB,MAAMkL,MAC/B1M,KAAKwB,MAAMkL,MAAMyR,GAEjBne,KAAKmiB,YAAY,IAAIniB,KAAKkC,MAAMoe,MAAOnC,MAGxC,EAGf,CAEA6C,gBAAAA,CAAiB7C,EAAcjkB,GAC3B,GAAK8F,KAAKwB,MAAMrC,MAYLa,KAAKwB,MAAM2K,UAClBnM,KAAKwB,MAAM2K,SAASgS,EAAMjkB,OAbP,CACnB,MAAMomB,EAAQtgB,KAAKkC,MAAMoe,MAAMptB,QAE/B,GADgBotB,EAAMpvB,OAAOgJ,EAAG,GACnB,CACT,IAAI2lB,EAAc7f,KAAKkC,MAAM2d,YACzB7f,KAAKkC,MAAM2d,cAAgB3lB,EAC3B2lB,EAAc,KACP7f,KAAKkC,MAAM2d,YAAc3lB,IAChC2lB,EAAc7f,KAAKkC,MAAM2d,YAAc,GAE3C7f,KAAKmiB,YAAY7B,EAAO,CAAET,eAC9B,CACJ,CAGJ,CAEAsC,WAAAA,CAAY7B,GAAgD,IAA/B8B,EAAiB1nB,UAAA1I,OAAA,QAAAT,IAAAmJ,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC9CsF,KAAKmC,SAAS,CAAEme,QAAOoB,cAAc,KAASU,IAC1CpiB,KAAKwB,MAAM+B,UACXvD,KAAKwB,MAAM+B,SAAS+c,EAE5B,CAMAG,UAAAA,GACIzgB,KAAKkhB,YAAY,GACrB,CAEAA,WAAAA,CAAY/hB,GACRa,KAAKmC,SAAS,CAAEkf,WAAYliB,GAChC,CAcAoK,MAAAA,GACI,MAAM,sBACF8Y,EAAqB,aACrBC,EAAe/D,EAAmB,UAClCgE,EAAS,SACTha,EAAQ,iBACRia,EAAgB,MAChBvjB,EAAK,oBACLwjB,EAAmB,UACnBhX,EAAS,eACTiX,EAAc,WACd1R,EAAU,GACV5iB,EAAE,WACFu0B,EAAa,CAAC,EAAC,gBACfC,EAAkB,CAAC,EAAC,WACpBvB,EAAU,MACVxY,EAAK,YACLkI,EAAW,SACXkK,EAAQ,SACR4H,EAAQ,QACRC,EAAO,MACP3jB,EAAK,OACLif,GACApe,KAAKwB,MACHwJ,EAAUhL,KAAKkC,MAAM8I,QAEvBhL,KAAK0f,aAAe1f,KAAKwB,MAAMb,MAAMiL,QAAQC,OAC7C7L,KAAK0f,WAAa1f,KAAKwB,MAAMb,MAAMiL,QAAQC,KAC3C7L,KAAKwL,OAAS5e,EAAM8T,SAASV,KAAKwB,MAAMb,MAAO6K,IAGnD,IAAI8U,EAAQnhB,GAASa,KAAKkC,MAAMoe,OAAS,GACpCvvB,MAAMuJ,QAAQgmB,KACfA,GAAUA,GAAoB,IACzBrxB,WACAlC,MAAM,UACNG,KAAK8qB,GAAcA,EAAE3oB,UAE9B,MAAM0zB,EAA6B,OAAV1B,QAAU,IAAVA,EAAAA,EAAcrhB,KAAKkC,MAAMmf,WAE5C2B,GAAYhjB,KAAKwB,MAAMrC,OAAS4jB,GAAkB/wB,QAAU+wB,EAAiB/wB,OAC7EixB,EACgC,mBAA3BL,EAAgB7Q,OACjB6Q,EAAgB7Q,OACN,OAAVlJ,IAAmBma,GAAYhjB,KAAKkC,MAAMuc,WAAa6B,EAAMtuB,QAEjEkxB,EAAiB5C,EAAMpzB,KAAI,CAACixB,EAAMjkB,IACpCooB,EACI,CACInjB,MAAOgf,EACPO,aAAcnW,EACdoW,WAAY1D,EACZwD,UAAWze,KAAKkC,MAAM2d,cAAgB3lB,EACtC0kB,YAAaA,IAAM5e,KAAKmC,SAAS,CAAE0d,YAAa3lB,IAChD2kB,aAAcA,IAAM7e,KAAKghB,iBAAiB7C,EAAMjkB,GAChDnI,MAAOiO,KAAKwL,OAAO2S,MAEvBjkB,EAAEjL,cAIJk0B,EAAwF,CAAC,EAC/E,aAAZnY,IACAmY,EAAUC,UAAYH,EACtBE,EAAUE,WAAcJ,GAAuBjjB,KAAKmf,WAAanf,KAAKmf,UAAUmE,aAAgB,GAGpF,aAAZtY,EACAmY,EAAUI,eAAiBL,EAE3BP,EAAWH,kBAAmB,EAGlC,MAAMgB,EAAiBtI,EAAiBlQ,GAExC,OACIZ,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR2P,IAAKsB,EACLrX,UAAWA,EACX8W,UAAWA,EACXxT,GAAI,IAAK/O,KAAKwL,OAAOmQ,QAAqB,UAAXyC,EAAqBpe,KAAKwL,OAAO6S,YAAc,CAAC,GAC/Epf,MAAOA,EACP4jB,SAAUvC,EAAMtuB,OAAS,OAAIT,EAAYsxB,EACzC5X,QAASjL,KAAK2f,MACdpX,SAAUA,EACVyC,QAASA,EACTsD,UAAU,MACV8P,OAAQA,EAAOlsB,SAAA,CAEd2W,IACG5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CACP2R,QAASr1B,EACT2gB,GAAI,CACA,uBAAwB/O,KAAKwL,OAAO3C,MACpC,yBAA0B7I,KAAKwL,OAAOuR,aAE1ChL,SAAUkR,EACVjG,QAAShd,KAAKkC,MAAMuc,UACpBzT,QAASA,EACTwW,IAAKxhB,KAAKkf,SACV2D,SAAUA,EACVvU,UAAU,WACNsU,EAAe1wB,SAElB2W,KAGTuB,EAAAA,EAAAA,MAACuN,EAAAA,IAAG,CACArJ,UAAU,MACVlgB,GAAG,uBACH2gB,GAAI,IACG/O,KAAKwL,OAAOR,MACZhL,KAAKwL,OAAO+Q,iBACXvc,KAAKkC,MAAMuc,UAAYze,KAAKwL,OAAOwR,aAAUzrB,KAC5CixB,GAAgC,aAAZxX,OAAiDzZ,EAAxByO,KAAKwL,OAAOyR,aAC1D1U,EAAWvI,KAAKwL,OAAOjD,cAAWhX,KAClCsX,EAAQ7I,KAAKwL,OAAOqR,aAAUtrB,KAC9B0N,EAAQe,KAAKwL,OAAOvM,WAAQ1N,GAClCW,SAAA,CAEW,aAAZ8Y,GAA0BkY,GAC3BjxB,EAAAA,EAAAA,KAACuxB,EAAc,CACXhC,IAAKxhB,KAAKgc,MACVuG,UAAW,eAAeviB,KAAKwL,OAAOR,MAAYnC,EAAQ,sBAAwB,sBAClFkG,GAAI,CACA,uBAAwB,IAAK/O,KAAKwL,OAAOwQ,SAAUhc,KAAKwL,OAAOR,IAC/D,sBAAuB,IAAKhL,KAAKwL,OAAOoQ,YAE5CxtB,GAAIA,EACJ+Q,MAAO4jB,EACPxf,SAAUvD,KAAKohB,kBACfP,UAAW7gB,KAAK4gB,cAEhBO,QAASnhB,KAAKihB,YACdN,QAAS3gB,KAAK0gB,iBACdV,OAAQhgB,KAAK8f,gBACb2B,SAAUzhB,KAAKuhB,kBACfhZ,SAAUA,EACVkD,UAAWiX,EACX3R,aACMiS,IAAaC,GAAiC,OAAVpa,QAA4BtX,IAAVsX,IACxDwZ,EACMtR,EACA,KAEVkK,SAAUA,KACN0H,KACAQ,OAGXnS,IACG/e,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,IACP6S,EACJF,UAA8B,OAAnBE,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqBF,UAChCxwB,MAAOiO,KAAKwL,OAAOwF,WAAW9e,SAE7B8e,MAKrB,EAGJ,UClrBA,QA3EA,cAAyB3P,EACrB8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAM,KAAEnB,EAAI,KAAExT,GAASwR,KAAKwB,MACtBrC,EAAQkC,EAAcY,SAASD,EAAMxT,GAC3C,GAAIwR,KAAKwB,MAAMkB,OAAOghB,WAA8B,kBAAVvkB,EAAoB,CAC1D,MAAM3M,EAAQ2M,EACTpS,MAAMiT,KAAKwB,MAAMkB,OAAOghB,WACxBx2B,KAAImH,GAAKA,EAAEhF,SACXrC,QAAOqH,GAAKA,IACjB2L,KAAKmC,SAAS,CAAEhD,MAAO3M,GAC3B,MACIwN,KAAKmC,SAAS,CAAEhD,MAAOA,GAAS,IAExC,CAEAsJ,UAAAA,CAAWxJ,EAAesJ,GACtB,MAAM,KAAE/Z,EAAI,OAAEkU,GAAW1C,KAAKwB,OACxB,MAAErC,GAAUa,KAAKkC,MACvB,OACIkI,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACRpG,WAAS,EACTT,QAAQ,WAAU9Y,SAAA,EAElBD,EAAAA,EAAAA,KAAC+sB,EAAS,CACN7f,MAAOA,EACPoJ,WAAYA,EACZM,MAAO7I,KAAKuE,QAAQ7B,EAAOmG,OAC3B5J,QAASA,EACTyN,MAAOyR,IACH,MAAMpX,EAAW5W,KAAKC,MAAMD,KAAKE,UAAU8O,IAC3C4H,EAASzR,KAAK6oB,GACdne,KAAKmC,SAAS,CAAEhD,MAAO4H,IAAY,KAC/B,IAAIC,EAEAA,EADAhH,KAAKwB,MAAMkB,OAAOghB,UACH1jB,KAAKuD,SAAS/U,EAAMuY,EAASxZ,KAAK,GAAGyS,KAAKwB,MAAMkB,OAAOghB,eAEvD1jB,KAAKuD,SAAS/U,EAAMuY,GAEnCC,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAMvH,IAC1C,GACF,EAENiJ,MAAOX,KAAKwB,MAAMb,MAClBwL,SAAUA,CAACgS,EAAM9oB,KACb,MAAM0R,EAAW5W,KAAKC,MAAMD,KAAKE,UAAU8O,IAC3C4H,EAAS7V,OAAOmE,EAAO,GACvB2K,KAAKmC,SAAS,CAAEhD,MAAO4H,IAAY,KAC/B,IAAIC,EAEAA,EADAhH,KAAKwB,MAAMkB,OAAOghB,UACH1jB,KAAKuD,SAAS/U,EAAMuY,EAASxZ,KAAK,GAAGyS,KAAKwB,MAAMkB,OAAOghB,eAEvD1jB,KAAKuD,SAAS/U,EAAMuY,GAEnCC,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAMvH,IAC1C,GACF,IAGTsI,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,G,eCoBJ,SAnFA,cAA0BnD,EACtBsiB,iBAAAA,GACI,QACM3jB,KAAKkC,MAAM0hB,kBACT3xB,EAAAA,EAAAA,KAAC8kB,EAAAA,OAAM,CACH5R,QAASA,IAAMnF,KAAKmC,SAAS,CAAEyhB,iBAAiB,IAChDzmB,KAAM6C,KAAKkC,MAAM0hB,gBAAgB1xB,UAEjCD,EAAAA,EAAAA,KAAC4xB,EAAAA,aAAY,CACTnyB,MAAOsO,KAAKkC,MAAM4hB,iBAClBvgB,SAAW7R,GACPsO,KAAKmC,SAAS,CAAE2hB,iBAAkBpyB,EAAMgH,MAAO,IAC3CsH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM4hB,uBAOtE,CAEArb,UAAAA,CAAWC,EAAiBH,GACxB,MAAMpJ,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjE,IAAIu1B,EAAYn3B,EAAAA,MAAMiG,YAAYsM,EAAO,MAIzC,OAHkB,OAAd4kB,IACAA,OAAYxyB,IAGZ6Y,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,CACK8N,KAAK2jB,qBACN1xB,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRzC,WAAYA,EACZxW,MAAO,CAAE4f,SAAU,IAAK/K,MAAO,oBAC/BiC,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtC1J,MAAOA,GAAS,GAChB8L,QAASA,KACJjL,KAAKwB,MAAMkB,OAAOuY,UACnBjb,KAAKmC,SAAS,CAAEyhB,iBAAiB,EAAME,iBAAkB3kB,GAAS,KAEtEoE,SAAU7L,IACN,MAAMhG,EAAQgG,EAAElC,OAAO2J,MACjB6H,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMkD,GAChDsV,aAAwBrH,SACnBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MACpE,EAEJyX,UAAW,CACPqC,UAAW,CACPzf,MAAO,CAEH4Z,gBAAiBxM,EACjBzN,MAAOqyB,EAAY,OAAS,QAEhC9I,SAAUjb,KAAKwB,MAAMkB,OAAOuY,WAAY,GAE5Ce,MAAO,CACHgI,aACKhkB,KAAKwB,MAAMkB,OAAOuY,WAAY9b,GAAUa,KAAKwB,MAAMkB,OAAOuhB,mBAavD1yB,GAZAU,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASvT,IACLA,EAAEC,kBACF,MAAMqP,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM,IAChDwY,aAAwBrH,SACnBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MACpE,EACFxF,UAEFD,EAAAA,EAAAA,KAACiyB,EAAAA,MAAS,OAI1BC,WAAY,CACRpS,QAAQ,QAMhC,GC1FEvG,GAA8C,CAChD5E,MAAO,CACHA,MAAO,qBAEXwd,QAAS,CACLxd,MAAO,IACPqM,YAAa,IA+OrB,SAjOA,cAAgC5R,EAC5B8B,iBAAAA,GACI1B,MAAM0B,oBAEN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjEwR,KAAKmC,SAAS,CAAEhD,UAEhB,MAAM4iB,EAA4C,CAAC,EAInD,GAHI/hB,KAAKwB,MAAMkB,OAAO2hB,gBAClBtC,EAASuC,YAAcjjB,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMkB,OAAO2hB,gBAEjFrkB,KAAKwB,MAAMkB,OAAO6hB,eAAiBvkB,KAAKwB,MAAMkB,OAAO8hB,aACrDzC,EAAS0C,UAAYpjB,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMkB,OAAO6hB,eAC/ExC,EAAS2C,SAAWrjB,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMkB,OAAO8hB,cACzEzC,EAAS0C,WAAc1C,EAAS2C,WAAY1kB,KAAKwB,MAAMkB,OAAOiiB,UAC/DrhB,YAAW,IAAMtD,KAAK4kB,kBAAkB,SAEzC,EACYvjB,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,OACnDwR,KAAKwB,MAAMkB,OAAOiiB,UAC7BrhB,YAAW,IAAMtD,KAAK4kB,kBAAkB,IAEhD,CACIh1B,OAAOyQ,KAAK0hB,GAAU/vB,QACtBsR,YAAW,IAAMtD,KAAKmC,SAAS4f,IAAqC,GAE5E,CAEA,0BAAM8C,GACF,MAAMt1B,QAAYyQ,KAAKwB,MAAMuC,OAAO+gB,yBACpC,GAAO,OAAHv1B,QAAG,IAAHA,GAAAA,EAAKb,SAAWa,EAAIb,OAAO+1B,WAAal1B,EAAIb,OAAOg2B,UAEnD,GADA/1B,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAE,4BAChB+R,KAAKwB,MAAMkB,OAAO6hB,eAAiBvkB,KAAKwB,MAAMkB,OAAO8hB,aACrDxkB,KAAKmC,SACD,CACIsiB,UAAWl1B,EAAIb,OAAO+1B,UACtBC,SAAUn1B,EAAIb,OAAOg2B,WAEzBxK,gBACUla,KAAKuD,SAASvD,KAAKwB,MAAMkB,OAAO6hB,cAAeh1B,EAAIb,OAAO+1B,iBAC1DzkB,KAAKuD,SAASvD,KAAKwB,MAAMkB,OAAO8hB,aAAcj1B,EAAIb,OAAOg2B,SAAS,QAG7E,CACH,MAAMvlB,EAAQ5P,EAAIb,OAAOg2B,UAAY1kB,KAAKwB,MAAMkB,OAAOqiB,SAAW,KAAOx1B,EAAIb,OAAO+1B,UACpFzkB,KAAKmC,SACD,CACIhD,UAEJ,KACI,MAAMsN,EAAezM,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM2Q,GAChDsN,aAAwB9M,SACxB8M,EAAaxF,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAC/D,GAGZ,MAEA/I,OAAO0rB,MACHrsB,EAAAA,KAAKC,EACD,oGAIhB,CAEA22B,cAAAA,GACQI,UAAUC,YACVD,UAAUC,YAAYC,oBAClBhL,UACI,GAAY,OAARoD,QAAQ,IAARA,GAAAA,EAAU6H,OACV,GAAInlB,KAAKwB,MAAMkB,OAAO6hB,eAAiBvkB,KAAKwB,MAAMkB,OAAO8hB,aACrDxkB,KAAKmC,SACD,CACIsiB,UAAWnH,EAAS6H,OAAOV,UAC3BC,SAAUpH,EAAS6H,OAAOT,WAE9BxK,gBACUla,KAAKuD,SACPvD,KAAKwB,MAAMkB,OAAO6hB,cAClBjH,EAAS6H,OAAOV,WAAa,UAE3BzkB,KAAKuD,SAASvD,KAAKwB,MAAMkB,OAAO8hB,aAAclH,EAAS6H,OAAOT,UAAY,GAAG,QAGxF,CACH,MAAMvlB,EACFme,EAAS6H,OAAOT,UACf1kB,KAAKwB,MAAMkB,OAAOqiB,SAAW,KAC9BzH,EAAS6H,OAAOV,UACpBzkB,KAAKmC,SAAS,CAAEhD,UAAS,KACrB,MAAMsN,EAAezM,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM2Q,GAChDsN,aAAwB9M,SACxB8M,EAAaxF,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAC/D,GAER,YAEMsI,KAAK6kB,sBACf,IAEJ3K,UACIphB,QAAQmG,MAAM,8CAA8CA,EAAMmmB,iBAC5DplB,KAAK6kB,sBAAsB,IAIpC7kB,KAAK6kB,uBAAuB5d,OAAMvP,IACnCoB,QAAQmG,MAAM,iCAAiCvH,IAAI,GAG/D,CAEA+Q,UAAAA,CAAWxJ,EAAesJ,GAAsD,IAAD8c,EAAAC,EAC3E,OACIlb,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,CACK8N,KAAKwB,MAAMkB,OAAO2hB,eACfpyB,EAAAA,EAAAA,KAAC2oB,EAAAA,iBAAgB,CACbC,SACI5oB,EAAAA,EAAAA,KAAC6oB,EAAAA,SAAQ,CACLE,UAAWhb,KAAKkC,MAAMoiB,UACtB/gB,SAAU7L,IACN,MAAM4sB,EAAY5sB,EAAElC,OAAOwlB,QACvBsJ,GACKtkB,KAAK6kB,uBAAuB5d,OAAMvP,GACnCoB,QAAQmG,MAAM,iCAAiCvH,OAGvDsI,KAAKmC,SAAS,CAAEmiB,cAAa,IACzBtkB,KAAKuD,SAASvD,KAAKwB,MAAMkB,OAAO2hB,cAAeC,IAClD,IAIbzb,MAAO7a,EAAAA,KAAKC,EAAE,yCAElB,KACH+R,KAAKwB,MAAMkB,OAAO6hB,eAAiBvkB,KAAKwB,MAAMkB,OAAO8hB,cAClDvyB,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRjZ,MAAOyZ,GAAO4Y,QACdjlB,MAA2B,QAAtBkmB,EAAErlB,KAAKkC,MAAMuiB,iBAAS,IAAAY,EAAAA,EAAI,GAC/BpmB,QAASA,EACTsJ,SAAUvI,KAAKkC,MAAMoiB,aAAe/b,EACpChF,SAAU7L,IACN,MAAM+sB,EAAY/sB,EAAElC,OAAO2J,MAC3Ba,KAAKmC,SAAS,CAAEsiB,cAAa,KACzB,MAAMzd,EAAehH,KAAKuD,SACtBvD,KAAKwB,MAAMkB,OAAO6hB,eACjBE,GAAa,IAAIp1B,QAElB2X,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAC/D,GACF,EAENmR,MAAO7a,EAAAA,KAAKC,EAAE,kBAElB,KACH+R,KAAKwB,MAAMkB,OAAO6hB,eAAiBvkB,KAAKwB,MAAMkB,OAAO8hB,cAClDvyB,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRjZ,MAAOyZ,GAAO4Y,QACdjlB,MAA0B,QAArBmmB,EAAEtlB,KAAKkC,MAAMwiB,gBAAQ,IAAAY,EAAAA,EAAI,GAC9BrmB,QAASA,EACTsJ,SAAUvI,KAAKkC,MAAMoiB,aAAe/b,EACpChF,SAAU7L,IACN,MAAMgtB,EAAWhtB,EAAElC,OAAO2J,MAC1Ba,KAAKmC,SAAS,CAAEuiB,aAAY,IACxB1kB,KAAKuD,SAASvD,KAAKwB,MAAMkB,OAAO8hB,cAAeE,GAAY,IAAIr1B,SAClE,EAELwZ,MAAO7a,EAAAA,KAAKC,EAAE,iBAElB,KACF+R,KAAKwB,MAAMkB,OAAO6hB,eAAkBvkB,KAAKwB,MAAMkB,OAAO8hB,aAyBpD,MAxBAvyB,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRjZ,MAAOyZ,GAAO5E,MACdzH,MAA4B,OAArBa,KAAKkC,MAAM/C,YAAuC5N,IAArByO,KAAKkC,MAAM/C,MAAsB,GAAKa,KAAKkC,MAAM/C,MACrFF,QAASA,EACTsJ,WAAYA,EACZ4G,UAAW,CACPqC,UAAW,CACPC,UAAWzR,KAAKwB,MAAMkB,OAAO+O,WAAazR,KAAKwB,MAAMkB,OAAOgP,UAAOngB,EACnE0pB,SAAUjb,KAAKkC,MAAMoiB,YAG7B/gB,SAAU7L,IACN,MAAMyH,EAAQzH,EAAElC,OAAO2J,MACvBa,KAAKmC,SAAS,CAAEhD,UAAS,IAAMa,KAAKuD,SAASvD,KAAKwB,MAAMhT,MAAO2Q,GAAS,IAAI9P,SAAQ,EAExF0hB,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAI5BxE,KAAKkC,MAAMoiB,UAST,MARAryB,EAAAA,EAAAA,KAACszB,EAAAA,IAAG,CACA7b,KAAK,QACLuB,QAASA,IAAMjL,KAAK4kB,iBACpBlvB,MAAO1H,EAAAA,KAAKC,EAAE,4BACd8D,MAAO,CAAEkhB,YAAa,GAAI/gB,UAE1BD,EAAAA,EAAAA,KAACuzB,EAAAA,WAAc,MAGrBxlB,KAAKkC,MAAMoiB,UAQT,MAPAryB,EAAAA,EAAAA,KAACszB,EAAAA,IAAG,CACA7b,KAAK,QACLuB,QAASA,IAAMjL,KAAK6kB,uBACpBnvB,MAAO1H,EAAAA,KAAKC,EAAE,yCAAyCiE,UAEvDD,EAAAA,EAAAA,KAACwzB,EAAAA,SAAY,QAKjC,GCrLJ,SAASC,GACLC,EACAC,EACAC,EACA3oB,GAEA,OAAOgd,UACH,MAAMrP,OAxEUib,EACpBH,EACAI,EACAC,IAEA,IAAIrmB,SAAQ,CAACC,EAASqmB,KAElB,GAAMt3B,OAAeg3B,GAsDjB/lB,EAASjR,OAAeg3B,QAtDE,CAE1B,MAAMO,EAAoC/nB,SAASgoB,cAAc,wBAAwBR,OAEnF5lB,EAASma,UAEX,IAAKvrB,OAAeg3B,GAkBhB,OAFA7sB,QAAQmG,MAAM,eAAe0mB,UAC7BM,EAAO,IAAIpM,MAAM,eAAe8L,MAhB1Bh3B,OAAeg3B,GAAQS,sBASdz3B,OAAeg3B,GAAQU,KAAMC,EAAAA,EAAiCP,IAGxEp3B,OAAeg3B,GAAQS,eAAgB,GAQhDxmB,EAASjR,OAAeg3B,GAAQ,EAGpC,GAAIO,EAEAA,EAAenmB,OAASA,EACxBmmB,EAAeK,QAAUN,OAGtB,GAAID,EAAmB,CAE1B,MAAMlpB,EAAIqB,SACJqoB,EAAS1pB,EAAEsB,cAAc,UAC/BooB,EAAOtnB,KAAO,kBAEdsnB,EAAOnoB,aAAa,eAAgB,GAAGsnB,KACvCa,EAAOtM,OAAQ,EACfsM,EAAOD,QAAUN,EACjBO,EAAOzmB,OAASA,EAChBymB,EAAOn0B,IAAM2zB,EACblpB,EAAE2pB,qBAAqB,QAAQ,GAAGjoB,YAAYgoB,EAClD,MAEIP,EAAO,IAAIpM,MAAM,sBAAsB8L,eAE/C,CAGA,IAUwBG,CAAgBH,EAAQC,EAAa1oB,GAG7D,aADsB2N,EAAU6b,IAAIb,KACpB,CAExB,CAWe,MAAMc,WAAqBtlB,EAGtCE,WAAAA,CAAYC,GACRC,MAAMD,GAKN5R,OAAOmR,OAAOf,KAAKkC,MAAO,CACtBZ,UAAW,KACXrC,MAAO,IAEf,CAGA,uBAAMkE,GACF,IAAKnD,KAAKwB,MAAMkB,OAAOxF,IAGnB,OAFApE,QAAQmG,MAAM,oDACde,KAAKmC,SAAS,CAAElD,MAAO,gDAI3B,IAAI/B,EAOAA,EADA8C,KAAKwB,MAAMkB,OAAOxF,IAAI/K,WAAW,MAC3B,GAAGxD,OAAO8D,SAASm0B,aAAaj4B,OAAO8D,SAASo0B,OAAO7mB,KAAKwB,MAAMkB,OAAOxF,IAAIhO,QAAQ,MAAO,MAE5F,GAAGP,OAAO8D,SAASm0B,aAAaj4B,OAAO8D,SAASo0B,gBAAgB7mB,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMkB,OAAOxF,MAEtH,MAAO4pB,EAAYC,KAAeC,GAAsBhnB,KAAKwB,MAAMkB,OAAO5V,KAAKC,MAAM,KAC/Ek6B,EAAgBD,EAAmBz5B,KAAK,KAC9C,IAAK2P,EAID,YAHApE,QAAQmG,MACJ,2GAIR,IAAK6nB,IAAeC,IAAeE,EAI/B,YAHAnuB,QAAQmG,MACJ,qHAIR,IAAIioB,EACAP,GAAaQ,aAAa,GAAGjqB,KAAO6pB,KAExC,KAAMG,aAAsBvnB,SAAU,CAClC,IAAIynB,EACJ,IAA+B,IAA3BpnB,KAAKwB,MAAMkB,OAAO2kB,KAAe,CAEjC,MAAMl4B,EAAM+N,EAAI9N,YAAY,KAC5B,IAAIk4B,EAEAA,GADS,IAATn4B,EACU+N,EAAI7P,UAAU,EAAG8B,GAEjB+N,EAEd,MAAMyE,EAAO3T,EAAAA,KAAK0I,cACZ6wB,EAAO,GAAGD,UAAgB3lB,SAEhCylB,EAAc7nB,MAAMgoB,GACf/nB,MAAKwC,GAAQA,EAAK/D,SAClBuB,MAAKvB,GAAQjQ,EAAAA,KAAKw5B,mBAAmBvpB,EAAM0D,KAC3CsF,OAAMhI,IACU,OAAT0C,EAQJ7I,QAAQwQ,IAAI,qBAAqBie,OAAUtoB,KANvCM,MAAM,GAAG+nB,kBACJ9nB,MAAKwC,GAAQA,EAAK/D,SAClBuB,MAAKvB,GAAQjQ,EAAAA,KAAKw5B,mBAAmBvpB,EAAM0D,KAC3CsF,OAAMwgB,GAAO3uB,QAAQwQ,IAAI,qBAAqBie,OAAUE,MAGd,GAE/D,MAAO,GAAIznB,KAAKwB,MAAMkB,OAAO2kB,MAA0C,kBAA3BrnB,KAAKwB,MAAMkB,OAAO2kB,KAC1D,IACIr5B,EAAAA,KAAKw5B,mBAAmBxnB,KAAKwB,MAAMkB,OAAO2kB,KAC9C,CAAE,MAAOpoB,GACLnG,QAAQmG,MAAM,uBAAuBA,IACzC,CAEJ,IACInG,QAAQwQ,IAAIwd,EAAYC,EAAYE,GACpCC,EAAaxB,GAAcoB,EAAY,UAAW,KAAKC,IAAc7pB,EAAxDwoB,GACT0B,aAAuBznB,UACvBunB,EAAavnB,QAAQ+nB,IAAI,CAACR,EAAYE,IAAc5nB,MAAK1O,GAAUA,EAAO,MAG9E61B,GAAaQ,aAAa,GAAGjqB,KAAO6pB,KAAgBG,CACxD,CAAE,MAAOjoB,GACLe,KAAKmC,SAAS,CAAElD,MAAO,sBAAsBe,KAAKwB,MAAMkB,OAAOxF,QAAQ+B,KAC3E,CACJ,CAEA,IACI,MAAMqP,SAAiE4Y,GAAYjkB,QAEnF,GAAc,OAATqL,QAAS,IAATA,GAAAA,EAAY2Y,GAObjnB,KAAKmC,SAAS,CAAEb,UAAWgN,EAAU2Y,SAPR,CAC7B,MAAM5mB,EAAOzQ,OAAOyQ,KAAKiO,GAAa,CAAC,GACvCxV,QAAQmG,MAAM,+CACde,KAAKmC,SAAS,CACVlD,MAAO,aAAae,KAAKwB,MAAMkB,OAAO5V,qBAAqBkT,KAAKwB,MAAMkB,OAAOxF,eAAemD,EAAK9S,KAAK,SAE9G,CAGJ,CAAE,MAAO0R,GACLe,KAAKmC,SAAS,CAAElD,MAAO,sBAAsBe,KAAKwB,MAAMkB,OAAOxF,QAAQ+B,KAC3E,CACJ,CAEAsK,MAAAA,GACI,MAAMoe,EAAgD3nB,KAAKkC,MAAMZ,UAGjE,IAAKqmB,EAAiB,CAClB,MAAMjlB,EAAS1C,KAAKwB,MAAMkB,QAAW,CAAC,EAEhCzV,GACFgF,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CACFC,KAAM,CACFC,GAAIjH,EAAOiH,SAAMpY,EACjBqY,GAAIlH,EAAOkH,SAAMrY,EACjBsY,GAAInH,EAAOmH,SAAMtY,EACjBuY,GAAIpH,EAAOoH,SAAMvY,EACjBwY,GAAIrH,EAAOqH,SAAMxY,GAErBQ,MAAO,CACHiY,aAAc,EAEdC,UAAW,UACRvH,EAAO3Q,SACmB,SAAzBiO,KAAKwB,MAAMlJ,UAAuBoK,EAAOwH,UAAY,CAAC,GAC5DhY,SAED8N,KAAKkC,MAAMjD,OAAQhN,EAAAA,EAAAA,KAAA,OAAAC,SAAM8N,KAAKkC,MAAMjD,SAAehN,EAAAA,EAAAA,KAAC21B,EAAAA,eAAc,MAI3E,OAAIllB,EAAOyH,SAEHC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,EACID,EAAAA,EAAAA,KAAA,OAAKF,MAAO,CAAEuY,UAAW,OAAQzD,OAAQ,KACxC5Z,KAINA,CACX,CAEA,OAAOgF,EAAAA,EAAAA,KAAC01B,EAAe,IAAK3nB,KAAKwB,OACrC,EA5JiBmlB,GACVQ,aAAmG,CAAC,E,gBC3D/G,SA5BA,cAAkC9lB,EAC9BoH,UAAAA,GAGI,IAFezI,KAAKwB,MAAMkB,OAGtB,OAAO,KAGX,GAAI1C,KAAKwB,MAAMsM,cAAe,CAC1B,MAAMA,EAAgB9N,KAAKwB,MAAMsM,cACjC,OACI7b,EAAAA,EAAAA,KAAC6b,EAAa,CACV+Z,uBAAwB,GAAG7nB,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAChEvO,MAAOsK,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtC9E,OAAQ/D,KAAKwB,MAAMuC,OACnB+jB,iBAAkB,GAAG9nB,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAC1DrJ,UAAWoF,KAAKwB,MAAM5G,UACtBtC,UAAW0H,KAAKwB,MAAMlJ,UACtBiV,aAAcvN,KAAKwB,MAAM+L,aACzBvZ,WAAYgM,KAAKwB,MAAMxN,YAGnC,CAEA,OAAO/B,EAAAA,EAAAA,KAAA,OAAAC,SAAK,2BAChB,G,uCCHJ,MAAMsZ,GAA8C,CAChDC,UAAW,CACP7E,MAAO,QAEXmhB,mBAAoB,CAChBnhB,MAAO,qBAEXohB,oBAAqB,CACjBphB,MAAO,qBAEXqhB,sBAAuB,CACnBrhB,MAAO,qBAEXshB,SAAU,CACNthB,MAAO,OACPC,OAAQ,OACRyW,SAAU,YAEd6K,cAAe,CAAC,EAChBC,MAAO,CACHC,UAAW,UACXjK,OAAQ,OACR7f,QAAS,OACTqI,MAAO,OACPC,OAAQ,QAEZyhB,UAAW,CACPhL,SAAU,WACV1W,MAAO,QAEX2hB,kBAAmB,CACfzV,QAAS,EACT0V,WAAY,yBAEhBC,gBAAiB,CACbrK,OAAQ,EACRsK,OAAQ,kBACR1c,aAAc,EACdpF,MAAO,OACPC,OAAQ,OACRyW,SAAU,WACV/e,QAAS,QAEboqB,iBAAkB,CACd5M,WAAY,GACZnV,MAAO,GACPC,OAAQ,IAEZ+hB,iBAAkB,CACdC,SAAU,IAEdC,wBAAyB,CACrB7e,UAAW,SACXqT,SAAU,WACVR,IAAK,EACLO,OAAQ,EACRD,KAAM,EACNG,MAAO,EACPhf,QAAS,OACTwqB,cAAe,SACftM,WAAY,SACZuM,eAAgB,UAEpBC,gBAAiB,CACbnW,QAAS,GACT4J,OAAQ,WAEZzd,MAAO,CACHypB,OAAQ,iBAEZQ,aAAc,CAAC,EACfC,cAAe,CACXtiB,OAAQ,GACRD,MAAO,GACPrI,QAAS,eACT0U,YAAa,IAIfmW,GAAY,CAAC,MAAO,OAAQ,MAAO,MAAO,OAAQ,MAAO,OAAQ,OAAQ,QACzEC,GAAY,CAAC,MAAO,MAAO,MAAO,OAClCC,GAAY,CAAC,MAAO,MAAO,OAC3BC,GAAU,CAAC,MAAO,MAAO,OAAQ,OACjCC,GAAS,CAAC,OAAQ,KAAM,MAa9B,MAAMC,WAA2BpoB,EAS7BE,WAAAA,CAAYC,GACRC,MAAMD,GAAO,KATAkoB,iBAAW,OAEXlc,iBAAW,OAEpBmc,cAAQ,OAERC,UAAI,EAIR5pB,KAAK0pB,YAAczK,IAAAA,YACnBjf,KAAKwN,iBAAyCjc,IAA3ByO,KAAKwB,MAAMgM,YAA4B,UAAYxN,KAAKwB,MAAMgM,WACrF,CAEArK,iBAAAA,GACI1B,MAAM0B,oBAENnD,KAAK2pB,UAAY3pB,KAAKwB,MAAMkB,OAAOinB,UAAY,gBAAgBz6B,QAC3D,cACC8Q,KAAKwB,MAAMyC,UAAY,GAAGhV,YAE/B+Q,KAAK4pB,KAAO5pB,KAAKwB,MAAMkB,OAAOmnB,OAC1B7pB,KAAK4pB,OACa,MAAd5pB,KAAK4pB,KACL5pB,KAAK4pB,KAAO,GACJ5pB,KAAK4pB,KAAKljB,SAAS,OAC3B1G,KAAK4pB,KAAO,GAAG5pB,KAAK4pB,UAKvB5pB,KAAK8pB,cAActqB,MAAK,KACzB,MAAML,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjEwR,KAAKmC,SAAS,CAAEhD,SAAQ,GAEhC,CAEA2qB,WAAAA,GACI,OAAO9pB,KAAK+pB,UAAU/pB,KAAKwB,MAAMkB,OAAO0G,SAAS5J,MAAKwqB,GAAShqB,KAAKmC,SAAS,CAAE6nB,WACnF,CAEA,gBAAMC,CACFC,EACAF,EACAh9B,GAEA,IACI,MAAMm9B,QAAiBnqB,KAAKwB,MAAMuC,OAAOqmB,QAAQpqB,KAAK2pB,SAAUO,EAAWh7B,QAAQ,MAAO,KAAO,MACjG,IAAK,IAAI6M,EAAI,EAAGA,EAAIouB,EAASn4B,OAAQ+J,IAAK,CACtC,MAAMwrB,EAAO4C,EAASpuB,GACtB,GAAIwrB,EAAK8C,YAECrqB,KAAKiqB,WAAW,GAAGC,EAAa3C,EAAKA,QAASyC,EAAOh9B,OACxD,CACH,IAAIiY,GAAK,EACT,GAAe,QAAXjY,GAAoBu6B,EAAKA,KAAKxwB,SAAS,KACvCkO,GAAK,OACF,GAAKjY,GAAqB,MAAXA,EAEf,GAAe,OAAXA,GAAmBu6B,EAAKA,KAAKp1B,WAAW,KAC/C8S,GAAK,MACF,CAEHA,EADe,IAAIqlB,OAAO,IAAIt9B,EAAOkC,QAAQ,MAAO,OAAOA,QAAQ,MAAO,UAC9Dq7B,KAAKhD,EAAKA,KAC1B,MANItiB,GAAK,EAQLA,GACA+kB,EAAM10B,KAAK,CACPxI,KAAMo9B,EAAa3C,EAAKA,KACxB7d,KAAM6d,EAAKiD,MAAQ59B,EAAAA,MAAMoL,YAAYuvB,EAAKiD,MAAM9gB,MAAQ,MAGpE,CACJ,CACJ,CAAE,MAAOhS,GACLoB,QAAQmG,MAAM,gBAAgBirB,OAAgBxyB,IAClD,CAEA,OAAOsyB,CACX,CAEA,eAAMD,CAAU3gB,GACZ,MAAM4gB,EAA0C,GAKhD,IAAIh9B,GAJJoc,EAAUA,GAAWpJ,KAAKwB,MAAMkB,OAAO0G,WAEnCA,EAAU,UAGd,MAAMja,EAAMia,EAAQha,YAAY,KAOhC,GALIpC,GADS,IAATmC,EACSia,EAEAA,EAAQ/b,UAAU8B,EAAM,GAGjCia,EAAQjX,WAAW,YAEb6N,KAAKiqB,WAAW,IAAKD,EAAOh9B,OAC/B,CACH,MAAM4Q,EAAOwL,EAAQha,YAAY,KACjC,IAAc,IAAVwO,QACMoC,KAAKiqB,WAAW,IAAKD,EAAOh9B,OAC/B,CACH,MAAMy9B,EAASrhB,EAAQ/b,UAAU,EAAGuQ,EAAO,SACrCoC,KAAKiqB,WAAWQ,EAAQT,EAAOh9B,EACzC,CACJ,CAEA,OAAOg9B,CACX,CAEAU,MAAAA,CAAOC,GACH,MAAMpD,EAAOoD,EAAc,GACrB9qB,EAAS,IAAIC,WACb8qB,EAAU5qB,KAAKwB,MAAMkB,OAAOkoB,SAAW,QAE7C/qB,EAAOgrB,QAAU,IAAM/xB,QAAQwQ,IAAI,4BACnCzJ,EAAO0mB,QAAU,IAAMztB,QAAQwQ,IAAI,2BACnCzJ,EAAOE,OAAS,KACZ,IAAI+qB,EAAM,SAASvD,EAAKz6B,KAAKC,MAAM,KAAKmP,MAAM5O,gBAM9C,GALY,cAARw9B,EACAA,EAAM,aACCA,EAAI/zB,SAAS,SACpB+zB,EAAM,iBAENvD,EAAK7d,KAAOkhB,EAEZ,YADAj8B,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAE,iDAAkDN,KAAKkP,MAAM+tB,EAAU,QAG/F,MAAMzqB,EAAS,QAAQ2qB,YAAcC,KACjC,IAAIC,WAAWnrB,EAAO/O,QAA2B+b,QAC7C,CAAC7K,EAAMipB,IAASjpB,EAAOkpB,OAAOC,aAAaF,IAC3C,OAIRjrB,KAAKwB,MAAMuC,OACNqnB,YAAYprB,KAAK2pB,SAAU3pB,KAAK4pB,KAAOrC,EAAKz6B,KAAMqT,GAClDX,MAAK,IAAMQ,KAAK8pB,gBAChB7iB,OAAMvP,GAAK/I,OAAO0rB,MAAM,uBAAuB3iB,MAAK,EAE7DmI,EAAOwrB,kBAAkB9D,EAC7B,CAEA+D,kBAAAA,GACI,OAAKtrB,KAAKkC,MAAMqpB,YAIZt5B,EAAAA,EAAAA,KAAC+S,EAAAA,QAAa,CACVtP,MAAO1H,EAAAA,KAAKC,EAAE,oBACdF,KAAMC,EAAAA,KAAKC,EAAE,2BACbgX,GAAIjX,EAAAA,KAAKC,EAAE,aACXiX,OAAQlX,EAAAA,KAAKC,EAAE,aACfkX,QAASC,IACL,MAAMmmB,EAAavrB,KAAKkC,MAAMqpB,WAC9BvrB,KAAKmC,SAAS,CAAEopB,WAAY,KAAM,KAC1BnmB,GACApF,KAAKwB,MAAMuC,OACNwnB,WAAWvrB,KAAK2pB,SAAU4B,GAC1B/rB,MAAK,IAAMQ,KAAK8pB,gBAChB7iB,OAAMvP,GAAK/I,OAAO0rB,MAAM,uBAAuB3iB,MACxD,GACF,IAjBH,IAqBf,CAEA,0BAAO8zB,CAAoBrrB,GACvB,MAAMsrB,EAAe98B,OAAOopB,KAAK5X,GAC3BurB,EAAMD,EAAaz5B,OACnBiG,EAAQ,IAAI+yB,WAAWU,GAC7B,IAAK,IAAIxxB,EAAI,EAAGA,EAAIwxB,EAAKxxB,IACrBjC,EAAMiC,GAAKuxB,EAAaxT,WAAW/d,GAEvC,OAAOjC,EAAM0zB,MACjB,CAEAC,QAAAA,GACI,OAAO5rB,KAAKwB,MAAMuC,OAAO8nB,SAAS7rB,KAAK2pB,SAAU3pB,KAAKkC,MAAM/C,OAAO,EACvE,CAEA2sB,IAAAA,GACS9rB,KAAK4rB,WAAWpsB,MAAKwC,IACtB,GAA4B,qBAAjB+pB,aAA8B,CACrC,MAAMza,EAAU,IAAIya,aACdC,EAAMvC,GAAmB+B,oBAAoBxpB,EAAKulB,MACnDjW,EAAQ2a,gBACTD,GACCL,IACG,MAAM/6B,EAAS0gB,EAAQ4a,qBACvBt7B,EAAO+6B,OAASA,EAChB/6B,EAAOu7B,QAAQ7a,EAAQ8a,aACvBx7B,EAAOwE,MAAM,EAAE,IAElBqyB,GAA4B94B,OAAO0rB,MAAM,gBAAgBoN,EAAIrC,YAEtE,IAER,CAEAiH,WAAAA,CAAYp/B,GACR,OAAS,OAAJA,QAAI,IAAJA,GAAAA,EAAMq/B,UAGPlD,GAAUryB,SAAS9J,EAAKq/B,YAEpBr6B,EAAAA,EAAAA,KAAA,OACIF,MAAO,IACAyZ,GAAO2d,cACVoD,gBAAiB,OAAOvsB,KAAKwN,eAAexN,KAAK2pB,YAAY18B,EAAKkS,SAClEqtB,eAAgB,UAChBC,iBAAkB,eAK9BpD,GAAUtyB,SAAS9J,EAAKq/B,YACjBr6B,EAAAA,EAAAA,KAACy6B,EAAAA,UAAS,IAEjBnD,GAAQxyB,SAAS9J,EAAKq/B,YACfr6B,EAAAA,EAAAA,KAAC06B,EAAAA,QAAQ,IAEhBrD,GAAUvyB,SAAS9J,EAAKq/B,YACjBr6B,EAAAA,EAAAA,KAAC26B,EAAAA,SAAS,IAEjBpD,GAAOzyB,SAAS9J,EAAKq/B,YACdr6B,EAAAA,EAAAA,KAAC46B,EAAAA,KAAQ,IAEb,KA1BI,IA2Bf,CAEApkB,UAAAA,CAAWxJ,EAAesJ,GACtB,IAAKvI,KAAKkC,MAAM8nB,MACZ,OAAO,KAEX,MAAM8C,EAAoB,GACrB9sB,KAAKwB,MAAMkB,OAAOqqB,YACnB/sB,KAAKkC,MAAM8nB,MAAMpuB,SAAQ2rB,IACrB,MAAMp4B,EAAMo4B,EAAKz6B,KAAKsC,YAAY,KAClC,IAAa,IAATD,EACK29B,EAAQ/1B,SAAS,MAClB+1B,EAAQx3B,KAAK,SAEd,CACH,MAAMm1B,EAASlD,EAAKz6B,KAAKO,UAAU,EAAG8B,EAAM,GACvC29B,EAAQ/1B,SAAS0zB,IAClBqC,EAAQx3B,KAAKm1B,EAErB,KAIR,MAAMva,EAAwElQ,KAAKkC,MAAM8nB,MAAM98B,KAAIq6B,IAAI,CACnGpoB,MAAOooB,EAAKz6B,KACZ+b,MACK7I,KAAKwB,MAAMkB,OAAOqqB,YAAiC,IAAnBD,EAAQ96B,OAEnC,GAAGu1B,EAAKz6B,OAAOkT,KAAKwB,MAAMkB,OAAOsqB,OAAS,GAAK,IAAIzF,EAAK7d,UADxD,GAAG6d,EAAKz6B,KAAKO,UAAUy/B,EAAQ,GAAG96B,UAE5Cs6B,UAAW/E,EAAKz6B,KAAKQ,cAAcP,MAAM,KAAKmP,UAG7C8D,KAAKwB,MAAMkB,OAAOuqB,QACnB/c,EAAcC,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAE,WAAYkR,MAAO,KAG7D,MAAMlS,EAA6DijB,EAAc3b,MAC7E6b,GAASA,EAAMjR,QAAUa,KAAKkC,MAAM/C,QAGxC,IAAI+tB,EAAU,EAEVltB,KAAKwB,MAAMkB,OAAOmnB,QAClBqD,IAEAltB,KAAKwB,MAAMkB,OAAOyqB,SAClBD,IAEJ,MAAMpB,EACF9rB,KAAKkC,MAAM/C,QACVa,KAAKkC,MAAM/C,MAAMuH,SAAS,SACvB1G,KAAKkC,MAAM/C,MAAMuH,SAAS,SAC1B1G,KAAKkC,MAAM/C,MAAMuH,SAAS,SAE9BolB,GACAoB,IAGJ,MAAME,GACFhjB,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOC,UAAUvZ,SAAA,EACzBkY,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR7G,QAAQ,WACRjZ,MAAO,CAAE6U,MAAO,eAAyB,GAAVsmB,QAAoBh7B,SAAA,CAElD8N,KAAKwB,MAAMkB,OAAOmG,OAAQ5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAAA5f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAAuB,MAC9F5W,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOa,KAAKkC,MAAM/C,OAAS,IAC3BwT,YAAaA,KACTvI,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,CACK8N,KAAKqsB,YAAYp/B,IAClBgF,EAAAA,EAAAA,KAAA,QAAAC,UAAW,OAAJjF,QAAI,IAAJA,OAAI,EAAJA,EAAM4b,QAAS,QAG9BtF,SAAU7L,IACNsI,KAAKmC,SAAS,CAAEhD,MAA0B,MAAnBzH,EAAElC,OAAO2J,MAAgB,GAAKzH,EAAElC,OAAO2J,QAAS,IACnEa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,QAC7C,EACHjN,SAEDge,EAAchjB,KAAIiK,IACfiT,EAAAA,EAAAA,MAACyI,EAAAA,SAAQ,CAEL1T,MAAOhI,EAAGgI,MAAMjN,SAAA,EAEhBD,EAAAA,EAAAA,KAACo7B,EAAAA,aAAY,CAAAn7B,SAAE8N,KAAKqsB,YAAYl1B,MAChClF,EAAAA,EAAAA,KAACq7B,EAAAA,aAAY,CAAAp7B,SAAEiF,EAAG0R,QACjB7I,KAAKwB,MAAMkB,OAAO6qB,QAAUtgC,EAAKkS,OAC9BlN,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACPxc,MAAOyZ,GAAO0d,aACdxf,KAAK,QACLuB,QAASA,IAAMjL,KAAKmC,SAAS,CAAEopB,WAAYt+B,EAAKkS,QAASjN,UAEzDD,EAAAA,EAAAA,KAACkU,EAAAA,OAAU,MAEf,OAbChP,EAAGgI,WAiBnBa,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,QAEPxE,KAAKwB,MAAMkB,OAAOyqB,UACfl7B,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CAACtD,QAASA,IAAMjL,KAAK8pB,cAAc53B,UAC1CD,EAAAA,EAAAA,KAACmU,EAAAA,QAAW,MAGnBpG,KAAKwB,MAAMkB,OAAOmnB,SACf53B,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CAACtD,QAASA,KAAA,IAAAuiB,EAAA,OAA8B,QAA9BA,EAAMxtB,KAAK0pB,YAAY7H,eAAO,IAAA2L,OAAA,EAAxBA,EAA0BrwB,MAAM,EAACjL,UACxDD,EAAAA,EAAAA,KAACw7B,EAAAA,WAAU,MAGlB3B,IACG75B,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACPxc,MAAO,CAAEL,MAAO,WAChBuZ,QAASA,IAAMjL,KAAK8rB,OAAO55B,UAE3BD,EAAAA,EAAAA,KAACy7B,EAAAA,UAAQ,SAMzB,IAAK1tB,KAAKwB,MAAMkB,OAAOmnB,OACnB,OACIzf,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,CACKk7B,EACAptB,KAAKsrB,wBAIlB,IAAIqC,EAAmC,CAAE,MAAO,IAchD,GAboC,UAAhC3tB,KAAKwB,MAAMkB,OAAOkrB,UAClBD,EAAS,CACL,UAAW,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,QAAS,UAE3B,UAAhC3tB,KAAKwB,MAAMkB,OAAOkrB,UACzBD,EAAS,CACL,UAAW,CAAC,OAAQ,OAAQ,OAAQ,SAED,SAAhC3tB,KAAKwB,MAAMkB,OAAOkrB,YACzBD,EAAS,CACL,aAAc,CAAC,UAGnB3tB,KAAKwB,MAAMkB,OAAO0G,QAAS,CAC3B,MAAMykB,EAAO7tB,KAAKwB,MAAMkB,OAAO0G,QAAQrc,MAAM,KAAKmP,MAAM5O,cAAc4B,QAAQ,OAAQ,IAUlFy+B,EARS,QAATE,GACS,QAATA,GACS,QAATA,GACS,QAATA,GACS,SAATA,GACS,SAATA,GACS,SAATA,EAES,CACL,UAAW,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,QAAS,UAElD,QAATA,GAA2B,QAATA,GAA2B,QAATA,EAClC,CACL,UAAW,CAAC,OAAQ,OAAQ,OAAQ,SAExB,QAATA,EACE,CACL,gBAAiB,CAAC,SAEN,QAATA,EACE,CACL,aAAc,CAAC,SAEH,QAATA,EACE,CACL,aAAc,CAAC,SAGV,CACL,MAAO,CAAC,IAAIA,KAGxB,CAEA,OACI57B,EAAAA,EAAAA,KAAC67B,KAAQ,CACLtM,IAAKxhB,KAAK0pB,YACVqE,UAAU,EACVJ,OAAQA,EACRK,YAAU,EACVC,SAAO,EACPrD,QAAS5qB,KAAKwB,MAAMkB,OAAOkoB,SAAW,QACtCsD,YAAaA,KACTluB,KAAKmC,SAAS,CAAEgsB,WAAY,YAAa,EAE7CC,YAAaA,IAAMpuB,KAAKmC,SAAS,CAAEgsB,YAAY,IAC/CzD,OAAQA,CAACC,EAAelS,KACpBzY,KAAKmC,SAAS,CAAEgsB,YAAY,IACvBxD,EAAc34B,OAUfgO,KAAK0qB,OAAOC,GATZh8B,OAAO0rB,MACF5B,GACGA,EAAO,IACPA,EAAO,GAAGA,QACVA,EAAO,GAAGA,OAAO,IACjBA,EAAO,GAAGA,OAAO,GAAG2M,SACpBp3B,EAAAA,KAAKC,EAAE,iBAInB,EACFiE,SAEDssB,IAAA,IAAC,aAAE6P,EAAY,cAAEC,GAAe9P,EAAA,OAC7BpU,EAAAA,EAAAA,MAAA,OACIrY,MAAO,IACAyZ,GAAO8c,aACoB,aAA1BtoB,KAAKkC,MAAMisB,WAA4B3iB,GAAO+c,uBAAoBh3B,KAClEgX,EAAWiD,GAAOyd,qBAAkB13B,MAExC88B,IAAcn8B,SAAA,EAElBD,EAAAA,EAAAA,KAAA,YAAWq8B,MACgB,aAA1BtuB,KAAKkC,MAAMisB,YACRl8B,EAAAA,EAAAA,KAAA,OACIF,MAAO,IACAyZ,GAAOid,mBACNzoB,KAAKkC,MAAMqsB,YAAc/iB,GAAOvM,WAAQ1N,GAC9CW,UAEFkY,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOsd,wBAAwB52B,SAAA,EACvCD,EAAAA,EAAAA,KAACu8B,GAAAA,IAAU,CAACz8B,MAAOyZ,GAAOmd,oBAC1B12B,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAOod,iBAAiB12B,SACL,aAA1B8N,KAAKkC,MAAMisB,WACNngC,EAAAA,KAAKC,EAAE,qBACPD,EAAAA,KAAKC,EACD,2EAKtB,KACHm/B,EACAptB,KAAKsrB,uBACJ,GAItB,EAGJ,YCvlBM9f,GAA8C,CAChDC,UAAW,CACP7E,MAAO,QAEXmhB,mBAAoB,CAChBnhB,MAAO,oBACPqM,YAAa,GAEjBwb,cAAe,CACX7nB,MAAO,qBACPqM,YAAa,GAEjBkW,cAAe,CACXtiB,OAAQ,GACRD,MAAO,GACPrI,QAAS,eACT0U,YAAa,IAIfmW,GAAY,CAAC,MAAO,OAAQ,MAAO,MAAO,OAAQ,MAAO,OAAQ,OAAQ,QACzEC,GAAY,CAAC,MAAO,MAAO,MAAO,OAClCC,GAAY,CAAC,MAAO,MAAO,OAC3BC,GAAU,CAAC,MAAO,MAAO,OAAQ,OACjCC,GAAS,CAAC,OAAQ,KAAM,MA6K9B,SAnKA,cAAyBnoB,EAAgDE,WAAAA,GAAA,SAAA7G,WAAA,KAC7D8S,YAAc,OAAQ,CAE9BrK,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjEwR,KAAKwN,iBAAyCjc,IAA3ByO,KAAKwB,MAAMgM,YAA4B,UAAYxN,KAAKwB,MAAMgM,YACjFxN,KAAKmC,SAAS,CAAEhD,MAAY,OAALA,QAAK,IAALA,EAAAA,EAAS,IACpC,CAEA,+BAAO2iB,CAAyBtgB,EAAwBU,GACpD,MAAM/C,EAAQkC,EAAcY,SAAST,EAAMQ,KAAMR,EAAMhT,MACvD,OACc,OAAV2Q,QACU5N,IAAV4N,GACAA,EAAMlQ,WAAWI,UAAY6S,EAAM/C,OAAS,IAAIlQ,WAAWI,OAEpD,CAAE8P,MAAY,OAALA,QAAK,IAALA,EAAAA,EAAS,IAEtB,IACX,CAEAysB,QAAAA,GACI,MAAMz8B,EAAM6Q,KAAKkC,MAAM/C,MAAMlL,QAAQ,KACrC,IAAa,IAAT9E,EAAY,CACZ,MAAMu/B,EAAU1uB,KAAKkC,MAAM/C,MAAM9R,UAAU,EAAG8B,GACxCy6B,EAAO5pB,KAAKkC,MAAM/C,MAAM9R,UAAU8B,EAAM,GAC9C,OAAO6Q,KAAKwB,MAAMuC,OAAO8nB,SAAS6C,EAAS9E,GAAM,EACrD,CAEA,OAAOjqB,QAAQC,QAAQ,KAC3B,CAEAksB,IAAAA,GACS9rB,KAAK4rB,WAAWpsB,MAAKwC,IACtB,GAA4B,qBAAjB+pB,cAAoC,OAAJ/pB,QAAI,IAAJA,GAAAA,EAAMulB,KAAM,CACnD,MAAMjW,EAAU,IAAIya,aACdC,EAAMvC,GAAmB+B,oBAAoBxpB,EAAKulB,MACnDjW,EAAQ2a,gBACTD,GACCL,IACG,MAAM/6B,EAAS0gB,EAAQ4a,qBACvBt7B,EAAO+6B,OAASA,EAChB/6B,EAAOu7B,QAAQ7a,EAAQ8a,aACvBx7B,EAAOwE,MAAM,EAAE,IAElBqyB,GAA4B94B,OAAO0rB,MAAM,gBAAgBoN,EAAIrC,YAEtE,IAER,CAEAtzB,OAAAA,GACI,MAAMw6B,EAAYtsB,KAAKkC,MAAM/C,MAAMpS,MAAM,KAAKmP,MAAM5O,cACpD,OAAI87B,GAAUryB,SAASu1B,IAEfr6B,EAAAA,EAAAA,KAAA,OACIF,MAAO,IACAyZ,GAAO2d,cACVoD,gBAAiB,OAAOvsB,KAAKwN,eAAexN,KAAKkC,MAAM/C,SACvDqtB,eAAgB,UAChBC,iBAAkB,eAK9BpD,GAAUtyB,SAASu1B,IAEfr6B,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACPxc,MAAO,CAAEL,MAAO,WAChBuZ,QAASA,IAAMjL,KAAK8rB,OAAO55B,UAE3BD,EAAAA,EAAAA,KAACy7B,EAAAA,UAAQ,MAIjBnE,GAAQxyB,SAASu1B,IACVr6B,EAAAA,EAAAA,KAAC06B,EAAAA,QAAQ,IAEhBrD,GAAUvyB,SAASu1B,IACZr6B,EAAAA,EAAAA,KAAC26B,EAAAA,SAAS,IAEjBpD,GAAOzyB,SAASu1B,IACTr6B,EAAAA,EAAAA,KAAC46B,EAAAA,KAAQ,IAEb,IACX,CAEA8B,iBAAAA,GACI,OAAK3uB,KAAKkC,MAAM0sB,iBAIZ38B,EAAAA,EAAAA,KAAC48B,EAAAA,WAAgB,CACbrhB,YAAaxN,KAAKwB,MAAMgM,YACxBzJ,OAAQ/D,KAAKwB,MAAMuC,OACnB+qB,SAAU9uB,KAAKkC,MAAM/C,MACrBgG,QAASA,IAAMnF,KAAKmC,SAAS,CAAEysB,iBAAiB,IAChDvc,KAAM0c,IACF,MAAM5vB,EAAQpO,MAAMuJ,QAAQy0B,GAAUA,EAAO,GAAKA,EAClD/uB,KAAKmC,SAAS,CAAEhD,UAAS,IACrBa,KAAKuD,SAASvD,KAAKwB,MAAMhT,MAAiC,IAA3BwR,KAAKwB,MAAMkB,OAAOrT,KAAiB8P,GAASA,GAAS,IAAI9P,SAC3F,EAEL2/B,kBAAmBhvB,KAAKwB,MAAMkB,OAAOssB,kBACrCC,YAAajvB,KAAKwB,MAAMkB,OAAOusB,YAC/BC,cAAelvB,KAAKwB,MAAMkB,OAAOwsB,cACjCC,kBAAmBnvB,KAAKwB,MAAMkB,OAAOysB,kBACrCC,UAAWpvB,KAAKwB,MAAMkB,OAAO0sB,UAC7BC,YAAarvB,KAAKwB,MAAMkB,OAAO2sB,YAC/BC,UAAWtvB,KAAKwB,MAAMkB,OAAO4sB,UAC7B3uB,MAAOX,KAAKwB,MAAMb,QArBf,IAwBf,CAEA8H,UAAAA,CAAWxJ,EAAesJ,GACtB,MAAM9W,EAAOuO,KAAKlO,UAElB,OACIsY,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOC,UAAUvZ,SAAA,CACxBT,GACDQ,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRjZ,MAAON,EAAO+Z,GAAOijB,cAAgBjjB,GAAOuc,mBAC5C5oB,MAA4B,OAArBa,KAAKkC,MAAM/C,YAAuC5N,IAArByO,KAAKkC,MAAM/C,MAAsB,GAAKa,KAAKkC,MAAM/C,MACrFF,QAASA,EACTsJ,WAAYA,EACZ4G,UAAW,CACPqC,UAAW,CACPC,UAAWzR,KAAKwB,MAAMkB,OAAO+O,WAAazR,KAAKwB,MAAMkB,OAAOgP,UAAOngB,EACnE0pB,WAAYjb,KAAKwB,MAAMkB,OAAO6sB,cAGtChsB,SAAU7L,IACN,MAAMyH,EAAQzH,EAAElC,OAAO2J,MACvBa,KAAKmC,SAAS,CAAEhD,UAAS,IACrBa,KAAKuD,SACDvD,KAAKwB,MAAMhT,MACgB,IAA3BwR,KAAKwB,MAAMkB,OAAOrT,KAAiB8P,GAASA,GAAS,IAAI9P,SAEhE,EAEL0hB,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,kBAG1BvS,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHC,QAAQ,WACRC,QAASA,IAAMjL,KAAKmC,SAAS,CAAEysB,iBAAiB,IAAQ18B,SAC3D,QAGA8N,KAAK2uB,sBAGlB,GCvGJ,SA3FA,cAAyBttB,EACrB8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAE5DwR,KAAKwB,MAAMuC,OAAOyrB,SAAS,aAAahwB,MAAKiwB,IAC9C,MAAMvf,EAAoDtgB,OAAOyQ,KAAKovB,GAAOviC,KAAIkB,IAAE,CAC/E+Q,MAAOa,KAAKwB,MAAMkB,OAAOgtB,MAAQthC,EAAGc,QAAQ,kBAAmB,IAAMd,EACrEya,MAAO7I,KAAKuE,QAAQkrB,EAAMrhC,GAAIM,OAAO5B,MACrCyC,IAAKkgC,EAAMrhC,QAG2B,IAAtC4R,KAAKwB,MAAMkB,OAAOitB,iBAClBzf,EAAcC,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAckK,YAAapM,MAAOkC,EAAciK,aAG1FtL,KAAKmC,SAAS,CAAEhD,QAAO+Q,iBAAgB,GAE/C,CAEAzH,UAAAA,CAAWxJ,EAAesJ,GACtB,IAAKvI,KAAKkC,MAAMgO,cACZ,OAAO,KAGX,MAAMjjB,EAAO+S,KAAKkC,MAAMgO,cAAc3b,MAAK4C,GAAMA,EAAGgI,QAAUa,KAAKkC,MAAM/C,QAEzE,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR7G,QAAQ,WACRS,WAAS,EAAAvZ,SAAA,CAER8N,KAAKwB,MAAMkB,OAAOmG,OAAQ5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAAA5f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAAuB,MAC9F5W,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOa,KAAKkC,MAAM/C,OAAS,IAC3BwT,YAAaA,IACT1lB,EACIA,EAAKsC,KACD0C,EAAAA,EAAAA,KAAC29B,EAAAA,aAAY,CACTzwB,MAAOlS,EAAKsC,IACZ+I,UAAW0H,KAAKwB,MAAMlJ,UACtBqJ,KAAM3T,EAAAA,KAAK0I,gBAGfzJ,EAAK4b,MAGT,GAGRtF,SAAU7L,IACNsI,KAAKmC,SAAS,CAAEhD,MAA0B,MAAnBzH,EAAElC,OAAO2J,MAAgB,GAAKzH,EAAElC,OAAO2J,QAAS,IACnEa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,QAC7C,EACHjN,SAED8N,KAAKkC,MAAMgO,cAAchjB,KAAIiK,IAC1BlF,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOhI,EAAGgI,MACVpN,MAAOoF,EAAGgI,QAAUkC,EAAc+J,gBAAkB,CAAE0H,QAAS,IAAQ,CAAC,EAAE5gB,SAEzEiF,EAAG5H,KACA0C,EAAAA,EAAAA,KAAC29B,EAAAA,aAAY,CACTzwB,MAAOhI,EAAG5H,IACV+I,UAAW0H,KAAKwB,MAAMlJ,UACtBqJ,KAAM3T,EAAAA,KAAK0I,gBAGfS,EAAG0R,OAXF1R,EAAGgI,WAgBnBa,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCHJ,SArFA,cAAuBnD,EACnB8B,iBAAAA,GACI1B,MAAM0B,oBACNnD,KAAKwB,MAAMuC,OACN8rB,YAAY7vB,KAAKwB,MAAM9S,OAAOm4B,MAC9BrnB,MAAKswB,IAEG9vB,KAAKwB,MAAMkB,OAAOqtB,mBACnBD,EAAMA,EAAI9iC,QAAOC,GAAyB,YAAjBA,EAAK+iC,SAA0C,OAAjB/iC,EAAK+iC,WAE5DhwB,KAAKwB,MAAMkB,OAAOutB,QAClBH,EAAMA,EAAI9iC,QAAOC,GAAwB,SAAhBA,EAAKijC,SACvBlwB,KAAKwB,MAAMkB,OAAOytB,UACzBL,EAAMA,EAAI9iC,QAAOC,GAAwB,SAAhBA,EAAKijC,UAE9BlwB,KAAKwB,MAAMkB,OAAO0tB,aAClBN,EAAMA,EAAI9iC,QAAOC,IAASA,EAAKojC,YAEnCP,EAAIl0B,SAAQ3O,IACa,YAAjBA,EAAK+iC,QACL/iC,EAAKH,KAAO,oBAAoBkB,EAAAA,KAAKC,EAAE,0BACf,OAAjBhB,EAAK+iC,UACZ/iC,EAAKH,KAAO,eAAekB,EAAAA,KAAKC,EAAE,0BACtC,IAEJ+R,KAAKmC,SAAS,CAAE2tB,OAAM,IAEzB7oB,OAAMvP,GAAKoB,QAAQmG,MAAMvH,IAClC,CAEA+Q,UAAAA,CAAWxJ,EAAesJ,GAAsD,IAAD+nB,EAAAC,EAC3E,MAAMpxB,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAC3DvB,EAAqB,QAAjBqjC,EAAGtwB,KAAKkC,MAAM4tB,WAAG,IAAAQ,OAAA,EAAdA,EAAgB/7B,MAAK4C,GAAMA,EAAG64B,UAAY7wB,IAEvD,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACRpG,WAAS,EACTT,QAAQ,WAAU9Y,SAAA,CAEjB8N,KAAKkC,MAAM4tB,KAAO9vB,KAAKwB,MAAMkB,OAAOmG,OACjC5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAAA5f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAC5C,KACF7I,KAAKkC,MAAM4tB,KAWT79B,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOA,EACPwT,YAAarL,IAAW,OAAJra,QAAI,IAAJA,OAAI,EAAJA,EAAMH,OAAQwa,EAClC/D,SAAU7L,GAAKsI,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMkJ,EAAElC,OAAO2J,OAAOjN,SAE/C,QAF+Cq+B,EAE7DvwB,KAAKkC,MAAM4tB,WAAG,IAAAS,OAAA,EAAdA,EAAgBrjC,KAAI,CAACiK,EAAI+C,KACtBjI,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOhI,EAAG64B,QAAQ99B,SAEjBiF,EAAGrK,MAHCoN,QApBjBjI,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACNrF,WAAS,EACTT,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOA,EACPoE,SAAU7L,GAAKsI,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMkJ,EAAElC,OAAO2J,OACvD0J,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAqB7C7I,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCfJ,SAvEA,cAAgCnD,EAA8DE,WAAAA,GAAA,SAAA7G,WAAA,KAClFuW,aAAc,EAAM,KAEpBC,cAAQ,EAEhB/N,iBAAAA,GACI1B,MAAM0B,oBAENnD,KAAKmR,aACT,CAEAA,WAAAA,GACI,GAAInR,KAAKwB,MAAMmC,MAAO,CAClB,IAAI3B,EAAOhC,KAAKwB,MAAMkB,OAAOV,KAC7B,QAAazQ,IAATyQ,GAAsBhC,KAAKwB,MAAMkB,OAAOkB,SAAU,CAClD,MAAMC,EAAkB7D,KAAK8D,WAAW9D,KAAKwB,MAAMkB,OAAOkB,UAC1D,GAAIC,EACA,IACI7B,EAAO7R,KAAKC,MAAMyT,EACtB,CAAE,MACE/K,QAAQmG,MAAM,2BAA2B9O,KAAKE,UAAU2R,KAC5D,CAER,MAEazQ,IAATyQ,IACAA,EAAO,MAGNhC,KAAKwB,MAAMuC,OACXL,OAAO,GAAG1D,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAAYjE,KAAKwB,MAAMkB,OAAO0O,SAAW,OAAQpP,GAChGxC,MAAK4oB,GAASpoB,KAAKmC,SAAS,CAAEimB,MAAOA,GAAS,MACvD,CACJ,CAEA/W,UAAAA,GACI,MAAMC,EAA+B,CAAC,EAQtC,OANIvgB,MAAMuJ,QAAQ0F,KAAKwB,MAAMkB,OAAO6O,gBAChCvR,KAAKwB,MAAMkB,OAAO6O,cAAc3V,SAC5BpN,GAAS8iB,EAAQ9iB,GAAQ6S,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMxT,KAIlE2B,KAAKE,UAAUihB,EAC1B,CAEA7I,UAAAA,GACI,GAAIzI,KAAKwB,MAAMmC,MAAO,CAClB,MAAM2N,EAAUtR,KAAKqR,aACjBC,IAAYtR,KAAKkR,UAAalR,KAAKiR,cACnCjR,KAAKkR,SAAWI,EAChBhO,YAAW,IAAMtD,KAAKmR,eAAenR,KAAKiR,YAAc,IAAM,IAC9DjR,KAAKiR,aAAc,EAE3B,CAEA,YAAyB1f,IAArByO,KAAKkC,MAAMkmB,MACJ,MAIPn2B,EAAAA,EAAAA,KAAA,OACIG,IAAI,kBACJC,IAAK2N,KAAKkC,MAAMkmB,MAChBr2B,MAAO,CAAE6U,MAAO5G,KAAKwB,MAAMkB,OAAOkE,OAAS,OAAQC,OAAQ7G,KAAKwB,MAAMkB,OAAOmE,SAGzF,GCiDJ,SAhHA,cAAgCxF,EAG5BE,WAAAA,CAAYC,GACRC,MAAMD,GAAO,KAHTnM,WAAK,EAIT2K,KAAK3K,MAAQV,KAAKR,KACtB,CAEAgP,iBAAAA,GAGI,GAFA1B,MAAM0B,oBAEFnD,KAAKwB,MAAMkB,OAAOvC,OAAQ,CAC1B,MAAMhB,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjEwR,KAAKmC,SAAS,CAAEhD,SACpB,MACSa,KAAKwB,MAAMuC,OACXysB,WAAW,GAAGxwB,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAAYjE,KAAKwB,MAAMhT,MAC1EgR,MAAKixB,GAASA,GAASzwB,KAAK0wB,aAEzC,CAEAC,OAAAA,CAAQC,GACAA,IACA5wB,KAAK3K,MAAQV,KAAKR,OAEtB,IAAI+I,EAAM,SAAS8C,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,YAAYjE,KAAKwB,MAAMhT,UAAUwR,KAAK3K,QAK9F,MAJ6B,SAAzB1G,OAAO8D,SAASo+B,OAChB3zB,EAAM,GAAGvO,OAAO8D,SAASm0B,aAAaj4B,OAAO8D,SAASq+B,iBAAiB5zB,KAGpEA,CACX,CAEAwzB,SAAAA,GACSnxB,MAAMS,KAAK2wB,WACXnxB,MAAKuxB,GAAOA,EAAIrxB,SAChBF,MAAKE,IACF,MAAMG,EAAS,IAAIC,WACnBD,EAAOE,OAAS,KACZC,KAAKmC,SAAS,CAAEhD,MAAOU,EAAO/O,QAAS,EAE3C+O,EAAOI,cAAcP,EAAK,IAE7BuH,OAAMvP,GAAKoB,QAAQmG,MAAMvH,IAClC,CAEA+Q,UAAAA,CAAWxJ,EAAesJ,GACtB,OACI6B,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACRpG,WAAS,EACTT,QAAQ,WAAU9Y,SAAA,CAEjB8N,KAAKwB,MAAMkB,OAAOmG,OACf5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SACnD,MACJ5W,EAAAA,EAAAA,KAAC++B,EAAAA,YAAW,CACR/xB,QAASA,EACTsJ,SAAUA,EACVolB,OAAQ3tB,KAAKwB,MAAMkB,OAAOirB,OAC1BsD,KAAMjxB,KAAKwB,MAAMkB,OAAOuuB,KACxBrG,QAAS5qB,KAAKwB,MAAMkB,OAAOkoB,SAAW,OACtCn5B,KAAMuO,KAAKkC,MAAM/C,YAAS5N,EAC1B2/B,eAAgBA,IACZlxB,KAAKmC,SAAS,CAAEhD,MAAO,OAAQ,KAC3B,GAAIa,KAAKwB,MAAMkB,OAAOvC,OAAQ,CAC1B,MAAM6G,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,OAC3D6H,aAAwBrH,SACnBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAExE,MAESsI,KAAKwB,MAAMuC,OACXwnB,WAAW,GAAGvrB,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAAYjE,KAAKwB,MAAMhT,MAC1EyY,OAAMvP,GAAKoB,QAAQmG,MAAMvH,IAClC,IAGR6L,SAAUpD,GACNH,KAAKmC,SAAS,CAAEhD,MAAOgB,IAAU,KAC7B,GAAIH,KAAKwB,MAAMkB,OAAOvC,OAAQ,CAC1B,MAAM6G,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,OAC3D6H,aAAwBrH,SACnBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAExE,MAAWyI,EAAOhO,WAAW,UACzBgO,EAASA,EAAOpT,MAAM,KAAK,IAG/BiT,KAAKwB,MAAMuC,OACNqnB,YACG,GAAGprB,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WACxCjE,KAAKwB,MAAMhT,KACX2R,GAEH8G,OAAMvP,GAAKoB,QAAQmG,MAAMvH,IAAG,MAI5CsI,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCvHEgH,GAA8C,CAChD/Z,KAAM,CACFmV,MAAO,GACPC,OAAQ,GACRoM,YAAa,IA+MrB,SAnMA,cAAmC5R,EAAoEE,WAAAA,GAAA,SAAA7G,WAAA,KAwEnGy2B,kBAAoB,CAAC/iC,EAAYmB,KAC7B,IAAKnB,EAAGuE,MAAM,sCACV,OAEJ,MAAMlD,EAAMuQ,KAAKwB,MAAMkB,OAAO0uB,KACxBhjC,EACA4R,KAAKwB,MAAMkB,OAAOgtB,MAChBthC,EAAGrB,MAAM,KAAKmP,MACd9N,EAAGc,QAAQ,qBAAsB,IACnCmG,EAAQ2K,KAAKkC,MAAMgO,cAAcmhB,WAAUpkC,GAAQA,EAAKkS,QAAU1P,IACxE,GAAKF,EAgBE,CACH,GAAkC,iBAA9ByQ,KAAKwB,MAAMkB,OAAOgsB,WAAgCn/B,EAAIb,SAAWa,EAAIb,OAAO4iC,YAC5E,OAGJ,IAAe,IAAXj8B,EAAc,CACd,MAAM6a,EAAmE/f,KAAKC,MAC1ED,KAAKE,UAAU2P,KAAKkC,MAAMgO,gBAExBpjB,EACyB,kBAApByC,EAAIb,OAAO5B,KACZyC,EAAIb,OAAO5B,KAAKkB,EAAAA,KAAK0I,gBAAkBnH,EAAIb,OAAO5B,KAAK+B,GACvDU,EAAIb,OAAO5B,KACrBojB,EAAc5a,KAAK,CACf6J,MAAOa,KAAKwB,MAAMkB,OAAO0uB,KACnB7hC,EAAIE,IACJuQ,KAAKwB,MAAMkB,OAAOgtB,MAChBngC,EAAIE,IAAI1C,MAAM,KAAKmP,MACnB3M,EAAIE,IAAIP,QAAQ,qBAAsB,IAC9C2Z,MAAO,GAAG/b,MAASyC,EAAIE,IAAIP,QAAQ,qBAAsB,OACzDuC,KAAM,WAAW3E,KAAQyC,EAAIb,OAAO+C,SAExCye,EAAcqhB,MAAK,CAACl9B,EAAGpB,IAAOoB,EAAEwU,MAAQ5V,EAAE4V,MAAQ,EAAIxU,EAAEwU,MAAQ5V,EAAE4V,OAAS,EAAI,IAC/E7I,KAAKmC,SAAS,CAAE+N,iBACpB,CACJ,MAvCI,IAAe,IAAX7a,EAAc,CACd,MAAM6a,EAAmE/f,KAAKC,MAC1ED,KAAKE,UAAU2P,KAAKkC,MAAMgO,gBAGxB6R,EAA+C,CAAC,EAClD/hB,KAAKkC,MAAM/C,QAAU+Q,EAAc7a,GAAO8J,QAC1C4iB,EAAS5iB,MAAQkC,EAAciK,YAEnC4E,EAAchf,OAAOmE,EAAO,GAC5B0sB,EAAS7R,cAAgBA,EAEzBlQ,KAAKmC,SAAS4f,EAClB,CA0BJ,CACF,CA3HF5e,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAEjE,IAAIkgC,EAAU1uB,KAAKwB,MAAMkB,OAAOgsB,QAChB,iBAAZA,IACAA,OAAUn9B,GAGTyO,KAAKwB,MAAMuC,OACXytB,oBAAoB9C,GAAS,GAC7BlvB,MAAK0a,UACgC,iBAA9Bla,KAAKwB,MAAMkB,OAAOgsB,QAElB+C,EAAYA,EAAUzkC,QAAOiX,IAAQ,IAAAytB,EAAA,OAAY,OAARztB,QAAQ,IAARA,GAAgB,QAARytB,EAARztB,EAAUvV,cAAM,IAAAgjC,OAAR,EAARA,EAAkBJ,UAAU,IAC9DtxB,KAAKwB,MAAMkB,OAAOgsB,QACzB+C,EAAYA,EAAUzkC,QAAOiX,GACjB,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAUxU,IAAI0C,WAAW,kBAAkB6N,KAAKwB,MAAMkB,OAAOgsB,cAE1D1uB,KAAKwB,MAAMkB,OAAOivB,UAAY5gC,MAAMuJ,QAAQ0F,KAAKwB,MAAMkB,OAAOivB,YACrEF,EAAYA,EAAUzkC,QAAOiX,IAAQ,IAAA2tB,EAAA,OACjC5xB,KAAKwB,MAAMkB,OAAOivB,SAAS56B,SAAiB,OAARkN,QAAQ,IAARA,GAAgB,QAAR2tB,EAAR3tB,EAAUvV,cAAM,IAAAkjC,OAAR,EAARA,EAAkB9kC,KAAK,KAI/DkT,KAAKwB,MAAMkB,OAAOmvB,cAClBJ,EAAYA,EAAUzkC,QAAOiX,IAAQ,IAAA6tB,EAAA,OAAY,OAAR7tB,QAAQ,IAARA,GAAgB,QAAR6tB,EAAR7tB,EAAUvV,cAAM,IAAAojC,OAAR,EAARA,EAAkBxgC,OAAO,KAGtE,MAAM4e,EAAmEuhB,EAAUvkC,KAAI+W,IAAQ,CAC3F9E,MAAOa,KAAKwB,MAAMkB,OAAO0uB,KACnBntB,EAASxU,IACTuQ,KAAKwB,MAAMkB,OAAOgtB,MAChBzrB,EAASxU,IAAI1C,MAAM,KAAKmP,MACxB+H,EAASxU,IAAIP,QAAQ,qBAAsB,IACnD2Z,MAAO,GAAG5E,EAASvV,OAAO5B,SAASmX,EAASxU,IAAIP,QAAQ,qBAAsB,OAC9EuC,KAAM,WAAWwS,EAASvV,OAAO5B,QAAQmX,EAASvV,OAAO+C,WAG7Dye,EAAcqhB,MAAK,CAACl9B,EAAGpB,IACfoB,EAAE8K,MAAQlM,EAAEkM,MACL,EAEP9K,EAAE8K,MAAQlM,EAAEkM,OACJ,EAEL,KAG+B,IAAtCa,KAAKwB,MAAMkB,OAAOitB,iBAClBzf,EAAcC,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAckK,YAAapM,MAAOkC,EAAciK,aAEtFtL,KAAKwB,MAAMkB,OAAOglB,KAClBxX,EAAcC,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAE,WAAYkR,MAAO,MAG7Da,KAAKmC,SAAS,CAAEhD,MAAOA,GAAS,GAAI+Q,wBAE9BlQ,KAAKwB,MAAMuC,OAAOguB,gBACpB,kBAAkBrD,EAAU,GAAGA,KAAa,MAC5C1uB,KAAKmxB,kBACR,IAEJlqB,OAAMvP,GAAKoB,QAAQmG,MAAM,yBAAyBvH,MAC3D,CAEA0M,oBAAAA,GACSpE,KAAKwB,MAAMuC,OAAOiuB,kBAAkB,mBAAoBhyB,KAAKmxB,mBAAmB3xB,MAAK,SAC1FiC,MAAM2C,sBACV,CAwDAqE,UAAAA,CAAWxJ,EAAesJ,GAAsD,IAADgK,EAC3E,IAAKvS,KAAKkC,MAAMgO,cACZ,OAAO,KAGX,MAAMjjB,EAA+B,QAA3BslB,EAAGvS,KAAKkC,MAAMgO,qBAAa,IAAAqC,OAAA,EAAxBA,EAA0Bhe,MAAK4C,GAAMA,EAAGgI,QAAUa,KAAKkC,MAAM/C,QAE1E,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACRpG,WAAS,EAETT,QAAQ,WAAU9Y,SAAA,CAEjB8N,KAAKwB,MAAMkB,OAAOmG,OACf5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SACnD,MACJ5W,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTyT,cAAY,EACZnK,WAAYA,EACZpJ,MAAOa,KAAKkC,MAAM/C,MAClBwT,YAAaA,KACTvI,EAAAA,EAAAA,MAAA,QAAMrY,MAAO,CAAEwM,QAAS,QAASrM,SAAA,CACxB,OAAJjF,QAAI,IAAJA,GAAAA,EAAMwE,MACHQ,EAAAA,EAAAA,KAAA,OACII,IAAK,KAAKpF,EAAKwE,OACfW,IAAKnF,EAAKkS,MACVpN,MAAOyZ,GAAO/Z,OAElB,KACHuO,KAAKuE,QAAY,OAAJtX,QAAI,IAAJA,OAAI,EAAJA,EAAM4b,OAAO,MAGnCtF,SAAU7L,GACNsI,KAAKmC,SAAS,CAAEhD,MAAOzH,EAAElC,OAAO2J,QAAS,IAAMa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,SAC5FjN,SAEA8N,KAAKkC,MAAMgO,cAAchjB,KAAIiK,IAC1BiT,EAAAA,EAAAA,MAACyI,EAAAA,SAAQ,CAEL1T,MAAOhI,EAAGgI,MACVpN,MAAOoF,EAAGgI,QAAUkC,EAAciK,WAAa,CAAEwH,QAAS,IAAQ,CAAC,EAAE5gB,SAAA,CAEpEiF,EAAG1F,MACAQ,EAAAA,EAAAA,KAAA,OACII,IAAK,KAAK8E,EAAG1F,OACbW,IAAK+E,EAAGgI,MACRpN,MAAOyZ,GAAO/Z,OAElB,KACHuO,KAAKuE,QAAQpN,EAAG0R,OAAO,KAXnB1R,EAAGgI,WAenBa,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OArDCxE,KAAKwB,MAAMhT,KAwD5B,GChMEgd,GAA8C,CAChDwkB,QAAS,CACLnH,SAAU,UACV/V,QAAS,GACT3F,WAAY,IAgHpB,SApGA,cAA8B9L,EAC1B8B,iBAAAA,GACI1B,MAAM0B,oBACNnD,KAAKwB,MAAMuC,OACN0P,UAAU,eAAezT,KAAKwB,MAAM9S,OAAOm4B,QAC3CrnB,MAAKjQ,IAAQ,IAAD0iC,EAAAC,EACT,MAAMC,EAAmD,GACzD,GAAO,OAAH5iC,QAAG,IAAHA,GAAW,QAAR0iC,EAAH1iC,EAAKqH,cAAM,IAAAq7B,GAAU,QAAVC,EAAXD,EAAaG,gBAAQ,IAAAF,GAArBA,EAAuBG,kBAAmB,CAC1C,MAAM1hC,EAAOpB,EAAIqH,OAAOw7B,SAASC,kBACjCziC,OAAOyQ,KAAK1P,GAAMiL,SAAQ02B,IACtB,GAAItyB,KAAKwB,MAAMkB,OAAO6vB,iBAAmB5hC,EAAK2hC,GAAO/9B,MAAKi+B,IAAQA,EAAInC,WAClE,OAEJ,GACIrwB,KAAKwB,MAAMkB,OAAO+vB,gBAClB9hC,EAAK2hC,GAAO/9B,MAAKi+B,GAAuB,cAAhBA,EAAIxC,SAA2C,QAAhBwC,EAAIxC,UAE3D,OAIJ,IAAI0C,EAA2B/hC,EAAK2hC,GAAO/9B,MAAKi+B,GAAsB,SAAfA,EAAItC,SAC3DwC,EAAKA,GAAM/hC,EAAK2hC,GAAO/9B,MAAKi+B,GAAsB,SAAfA,EAAItC,SACvCiC,EAAW78B,KAAK,CAAE6J,MAAOmzB,EAAOtC,QAAS0C,EAAG1C,SAAU,GAE9D,CAEAhwB,KAAKmC,SAAS,CAAEgwB,cAAa,IAEhClrB,OAAMvP,GAAK/I,OAAO0rB,MAAM,2BAA2B3iB,MAC5D,CAEA+Q,UAAAA,CAAWxJ,EAAesJ,GAAsD,IAADoqB,EAAAC,EAAAC,EAC3E,MAAM1zB,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAC3DvB,EAA4B,QAAxB0lC,EAAG3yB,KAAKkC,MAAMiwB,kBAAU,IAAAQ,OAAA,EAArBA,EAAuBp+B,MAAK4C,GAAMA,EAAGgI,QAAUA,IAE5D,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACRpG,WAAS,EACTT,QAAQ,WAAU9Y,SAAA,CAEI,QAArB0gC,EAAA5yB,KAAKkC,MAAMiwB,kBAAU,IAAAS,GAArBA,EAAuB5gC,QAAUgO,KAAKwB,MAAMkB,OAAOmG,OAChD5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAAA5f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAC5C,KACmB,QAAtBgqB,EAAC7yB,KAAKkC,MAAMiwB,kBAAU,IAAAU,GAArBA,EAAuB7gC,QAWrBC,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOA,EACPwT,YAAarL,GACLra,GAEImd,EAAAA,EAAAA,MAAA,QAAAlY,SAAA,CACKjF,EAAKkS,OACNlN,EAAAA,EAAAA,KAAA,QAAMF,MAAOyZ,GAAOwkB,QAAQ99B,SAAEjF,EAAK+iC,aAIxC1oB,EAEX/D,SAAU7L,GAAKsI,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMkJ,EAAElC,OAAO2J,OAAOjN,SAE7D8N,KAAKkC,MAAMiwB,WAAWjlC,KAAI,CAACiK,EAAI+C,KAC5BjI,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOhI,EAAGgI,MAAMjN,UAEhBkY,EAAAA,EAAAA,MAAA,QAAAlY,SAAA,CACKiF,EAAGgI,OACJlN,EAAAA,EAAAA,KAAA,QAAMF,MAAOyZ,GAAOwkB,QAAQ99B,SAAEiF,EAAG64B,cALhC91B,QA9BjBjI,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACNrF,WAAS,EACTT,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOA,EACPoE,SAAU7L,GAAKsI,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMkJ,EAAElC,OAAO2J,OACvD0J,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAkC7C7I,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCjIEgH,GAA8C,CAChDsnB,YAAa,CACTnhB,SAAU,IACVqF,SAAU,KAEd+b,eAAgB,CACZx0B,QAAS,OACT2d,SAAU,UAEd8W,UAAW,CACP/f,YAAa,GAEjB6C,QAAS,CACL+S,SAAU,IAEdoK,eAAgB,CACZ3V,SAAU,WACVC,MAAO,EACPT,IAAK,GAEToW,qBAAsB,CAClBxhC,MAAO,iBAiIf,GAxGoB8sB,IAmBkB,IAnBjB,kBACjB2U,EAAiB,cACjB3uB,EAAa,MACb9O,EAAK,UACL+V,EAAS,KACTkE,EAAI,SACJqH,EAAQ,SACRoc,EAAQ,KACR3hC,EAAI,cACJ4hC,EAAa,YACbC,EAAW,QACXnuB,EAAO,SACPjT,EAAQ,iBACRqhC,EAAgB,iBAChBC,EAAgB,QAChBC,EAAO,UACPC,EAAS,aACT5gC,EAAY,eACZigC,GACevU,EACf,MAAOrf,EAAOqE,IAAYmwB,EAAAA,EAAAA,UAAS7gC,IACnC8gC,EAAAA,EAAAA,YAAU,KACNpwB,EAAS1Q,EAAa,GACvB,CAACA,IAEJ,IAAI6T,EAAO,KAMX,OAJIlV,IACAkV,EAAOlV,IAIP2Y,EAAAA,EAAAA,MAAC2M,EAAAA,OAAM,CACH5Z,MAAM,EACN6Z,SAAUA,GAAY,KACtBvL,YAAaA,EACbooB,sBAAsB,EACtB1uB,QAASA,EACT4J,GAAI,CAAE,mBAAoBvD,GAAOsnB,aAA8C5gC,SAAA,CAE9EwD,IACG0U,EAAAA,EAAAA,MAAC6M,EAAAA,YAAW,CAAA/kB,SAAA,CACPT,GAAOQ,EAAAA,EAAAA,KAAC0U,EAAI,CAAC5U,MAAOyZ,GAAOwnB,YAAgB,KAC3Ct9B,EACuB,OAAvB1H,EAAAA,KAAK0I,eAA0By8B,GAC5BlhC,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACL3X,MAAO,IAAKyZ,GAAOynB,kBAAoBzuB,EAAgBgH,GAAO0nB,qBAAuB,CAAC,GACtFjoB,QAASA,IAAMkoB,IACfz9B,MAAO1H,EAAAA,KAAKC,EAAE,8BAA8BiE,UAE5CD,EAAAA,EAAAA,KAAC6hC,EAAAA,SAAY,MAEjB,SAGZ1pB,EAAAA,EAAAA,MAAC8M,EAAAA,cAAa,CACVnI,GAAI,IAAMgkB,EAAiBvnB,GAAOunB,eAAiB,CAAC,KAAOvnB,GAAOsK,SAClE/jB,MAAO,CAAEgqB,WAAY,GAAI7pB,SAAA,CAExBwhC,IACGzhC,EAAAA,EAAAA,KAAC6e,EAAAA,UACG,CACAijB,aAAa,MACbtoB,WAAS,EACT4L,WAAS,EACTrM,QAAQ,WACRtB,KAAK,SAELsqB,WAAS,EACT70B,MAAOA,EACPoE,SAAU7L,GAAK8L,EAAS9L,EAAElC,OAAO2J,SAIxCjN,EACAyd,GAAO1d,EAAAA,EAAAA,KAAA,OAAAC,SAAMyd,IAAc,SAEhCvF,EAAAA,EAAAA,MAACgN,EAAAA,cAAa,CAAAllB,SAAA,EACO,IAAhBohC,IACGrhC,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHuM,WAAWrlB,EAAAA,EAAAA,KAACgiC,EAAAA,MAAS,IACrB1rB,SAAU6qB,GAAaC,GAAiBvgC,IAAiBqM,EACzD8L,QAASA,IAAMwoB,GAAWA,EAAQC,EAAYv0B,EAAQ,IACtD6L,QAAQ,YACRtZ,MAAM,UAASQ,SAEdlE,EAAAA,KAAKC,EAAEslC,GAAoB,SAGpCthC,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHrZ,MAAM,OACNuZ,QAASA,IAAM9F,GAAWA,IAC1BoD,SAAU6qB,EACVpoB,QAAQ,YACRsM,WAAWrlB,EAAAA,EAAAA,KAACiiC,EAAAA,MAAS,IAAIhiC,SAExBlE,EAAAA,KAAKC,EAAEulC,GAAoB,iBAG/B,E,sECjJjB,MAAMhoB,GAA8C,CAChD2oB,UAAW,CACPzL,OAAQ,gBACR/L,UAAW,KAEfyX,YAAa,CACT1L,OAAQ,sBACR/L,UAAW,MA8CnB,SA9BA,SAAgBnb,GACZ,OACIvP,EAAAA,EAAAA,KAACoiC,KAAS,CACNtiC,OAAuB,IAAhByP,EAAMvC,MAAiBuM,GAAO2oB,WAA4B,IAAhB3yB,EAAMvC,MAAkBuM,GAAO4oB,iBAAc7iC,EAC9Fsa,KAAMrK,EAAMqK,MAAQ,OACpBjF,MAAM,OACNC,OAAO,OACPytB,gBAAiB9yB,EAAM+yB,cACvBC,WAAYhzB,EAAM+yB,cAClBE,oBAAqBjzB,EAAM+yB,cAC3BzhC,aAAc0O,EAAM1O,aACpB6N,MAA2B,SAApBa,EAAMlJ,UAAuB,kBAAoB,SACxD6G,MAAOqC,EAAMrC,MACb8b,UAAWzZ,EAAM+B,SACjBA,SAAUwD,GAAYvF,EAAM+B,SAASwD,GACrCja,KAAM0U,EAAM1U,MAAQ,oBACpB+7B,SAAUrnB,EAAMqnB,UAAY,GAC5B6L,WAAY,CACRC,2BAA2B,EAC3BC,0BAA0B,EAC1BC,gBAAgB,EAEhBC,gBAAiBtzB,EAAM+yB,cACvBQ,QAASvzB,EAAM+yB,cAAgB,OAAIhjC,GAEvCyjC,YAAa,CAAEC,iBAAiB,IAG5C,EClDMzpB,GAA8C,CAChDC,UAAW,CACP7E,MAAO,QAEXkE,KAAM,CACFvM,QAAS,QAEbqM,OAAQ,CACJ/D,OAAQ,GAER8K,SAAU,IAEdujB,QAAS,CACLtuB,MAAO,qBACPC,OAAQ,wBAmGhB,SArFA,cAA+BxF,EAC3B8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAM,KAAEnB,EAAI,KAAExT,GAASwR,KAAKwB,MACtBrC,EAAQkC,EAAcY,SAASD,EAAMxT,IAAS,CAAC,EACrDwR,KAAKmC,SAAS,CAAEhD,QAAO8R,aAAa,EAAMkjB,UAAWn0B,KAAKm1B,aAAah2B,IAC3E,CAEAg2B,YAAAA,CAAah2B,GACT,IAAIg1B,GAAY,EAChB,IAAuC,IAAnCn0B,KAAKwB,MAAMkB,OAAOyyB,eACdh2B,IAAUa,KAAKwB,MAAMkB,OAAO0yB,YAC5B,IACIjlC,KAAKC,MAAM+O,EACf,CAAE,MAAOsoB,GACL3uB,QAAQwQ,IAAI,gBAAiBme,GAC7B0M,GAAY,CAChB,CAIR,OAAOA,CACX,CAEA1rB,UAAAA,GACI,IAAKzI,KAAKkC,MAAM+O,YACZ,OAAO,KAGX,MAAM,OAAEvO,EAAM,KAAEV,EAAI,KAAExT,GAASwR,KAAKwB,OAC9B,MAAErC,EAAK,aAAEk2B,GAAiBr1B,KAAKkC,MAErC,OACIkI,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACRpG,WAAS,EACTT,QAAQ,WAAU9Y,SAAA,EAElBD,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAOV,KAAK5Y,UACpBD,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHrZ,MAAM,OACNK,MAAOyZ,GAAOZ,OACdlB,KAAK,QACLsB,QAAQ,WACRC,QAASA,IAAMjL,KAAKmC,SAAS,CAAEkzB,cAAc,IAAQnjC,SAEpDlE,EAAAA,KAAKC,EAAE,sBAGfonC,GACGpjC,EAAAA,EAAAA,KAACqjC,GAAW,CACR5/B,MAAOsK,KAAKuE,QAAQ7B,EAAOmG,OAC3BkqB,gBAAc,EACd5tB,QAASA,IACLnF,KAAKmC,SAAS,CAAEkzB,cAAc,EAAOl2B,MAAOkC,EAAcY,SAASD,EAAMxT,IAAS,CAAC,IAEvFilC,QAASA,IAAMzzB,KAAKmC,SAAS,CAAEkzB,cAAc,IAAS,IAAMr1B,KAAKuD,SAAS/U,EAAM2Q,KAAQjN,UAExFD,EAAAA,EAAAA,KAAA,OAAKF,MAAO,IAAKyZ,GAAO0pB,WAAal1B,KAAKkC,MAAMiyB,UAAY,CAAC,OAAI5iC,GAAaW,UAC1ED,EAAAA,EAAAA,KAACsjC,GAAM,CACHp2B,MAAwB,kBAAVA,EAAqBhP,KAAKE,UAAU8O,GAASA,EAC3DoE,SAAUwD,GACN/G,KAAKmC,SAAS,CAAEhD,MAAO4H,EAAUotB,UAAWn0B,KAAKm1B,aAAapuB,KAElEja,KAAK,mBACLwL,UAAW0H,KAAKwB,MAAMlJ,gBAIlC,KACHoK,EAAOiN,MAAQ3P,KAAKkC,MAAMiyB,WACvBliC,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAKkC,MAAMiyB,UACNnmC,EAAAA,KAAKC,EAAE,mBACP+R,KAAK8I,WACD9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAGhC,OAGhB,GC/GEgxB,GAAY,CACd,CACIr2B,MAAO,KACP0J,MAAO,WAEX,CACI1J,MAAO,KACP0J,MAAO,WAEX,CACI1J,MAAO,KACP0J,MAAO,8CAEX,CACI1J,MAAO,KACP0J,MAAO,aAEX,CACI1J,MAAO,KACP0J,MAAO,cAEX,CACI1J,MAAO,KACP0J,MAAO,eAEX,CACI1J,MAAO,KACP0J,MAAO,YAEX,CACI1J,MAAO,KACP0J,MAAO,WAEX,CACI1J,MAAO,KACP0J,MAAO,UAEX,CACI1J,MAAO,KACP0J,MAAO,sEAEX,CACI1J,MAAO,QACP0J,MAAO,6BAwHf,SArGA,cAA6BxH,EACzB8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAC3DinC,EAAoC,IAAID,IAC1Cx1B,KAAKwB,MAAMkB,OAAOgzB,OAClBD,EAAUtlB,QAAQ,CAAEhR,MAAO,GAAI0J,MAAO7a,EAAAA,KAAKC,EAAE,wBAE7CwnC,EAAUtlB,QAAQ,CAAEhR,MAAO,GAAI0J,MAAO7a,EAAAA,KAAKC,EAAE,aAGjD+R,KAAKmC,SAAS,CACVhD,MAAOa,KAAKwB,MAAMkB,OAAOgzB,OAASv2B,GAAS,GAAKA,GAASnR,EAAAA,KAAK0I,cAC9DwZ,cAAeulB,GAEvB,CAEAhtB,UAAAA,CAAWxJ,EAAgBsJ,GAAwC,IAADgK,EAAAC,EAC9D,IAAKxS,KAAKkC,MAAMgO,cACZ,OAAO,KAGX,MAAMjjB,EAA+B,QAA3BslB,EAAGvS,KAAKkC,MAAMgO,qBAAa,IAAAqC,OAAA,EAAxBA,EAA0Bhe,MACnC4C,GAAMA,EAAGgI,QAAUa,KAAKkC,MAAM/C,QAAWhI,EAAGgI,QAAUa,KAAKkC,MAAM/C,QAGrE,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACRpG,WAAS,EACTT,QAAQ,WAAU9Y,SAAA,CAEjB8N,KAAKwB,MAAMkB,OAAOmG,OAAQ5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAAA5f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAAuB,MAC9F5W,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTsJ,SAAUA,EACVpJ,MAAOa,KAAKkC,MAAM/C,OAAS,IAC3BwT,YAAaA,IAAM3S,KAAKuE,QAAY,OAAJtX,QAAI,IAAJA,OAAI,EAAJA,EAAM4b,MAAO7I,KAAKwB,MAAMkB,OAAO8B,eAC/DjB,SAAU7L,IACN,IAAI,MAAEyH,GAAUzH,EAAElC,OACJ,MAAV2J,IACAA,EAAQ,IAGZa,KAAKmC,SAAS,CAAEhD,UAAS,KACrB,MAAM6H,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM2Q,GAIpD,GAHI6H,aAAwBrH,SACnBqH,EAAaC,OAAMwgB,GAAO3uB,QAAQmG,MAAMwoB,KAE7CznB,KAAKwB,MAAMkB,OAAOizB,kBAClB,GAAIx2B,EAAO,CACP,GAAIA,IAAUnR,EAAAA,KAAK0I,cACf,OAEJ1I,EAAAA,KAAK4nC,YAAYz2B,GACba,KAAKwB,MAAMq0B,gBACX71B,KAAKwB,MAAMq0B,gBAEnB,MACS71B,KAAKwB,MAAMuC,OACX+xB,kBACAt2B,MAAM6I,IACCA,EAAa3Z,OAAOD,WAAaT,EAAAA,KAAK0I,eAGtC2R,EAAa3Z,OAAOD,WACpBT,EAAAA,KAAK4nC,YAAYvtB,EAAa3Z,OAAOD,UACjCuR,KAAKwB,MAAMq0B,gBACX71B,KAAKwB,MAAMq0B,iBAEnB,IAEH5uB,OAAMvP,GAAKoB,QAAQmG,MAAM,8BAA8BvH,MAEpE,GACF,EACJxF,SAEuB,QAFvBsgB,EAEDxS,KAAKkC,MAAMgO,qBAAa,IAAAsC,OAAA,EAAxBA,EAA0BtlB,KAAIiK,IAC3BlF,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOhI,EAAGgI,MAAMjN,SAEfiF,EAAG0R,OAHC1R,EAAGgI,WAOnBa,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCsBJ,SA9JA,cAA4BnD,EAGxBE,WAAAA,CAAYC,GACRC,MAAMD,GAAO,KAHAu0B,eAAS,EAItB/1B,KAAK+1B,UAAY9W,IAAAA,WACrB,CAEA+W,YAAAA,GACI,QAAKh2B,KAAK+1B,UAAUlU,SAIhB7hB,KAAK+1B,UAAUlU,QAAQoU,aAAej2B,KAAK+1B,UAAUlU,QAAQqU,WAC7Dl2B,KAAK+1B,UAAUlU,QAAQsU,YAE/B,CAEAhzB,iBAAAA,GACI1B,MAAM0B,oBACD9B,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,QAChDwR,KAAKwB,MAAMkB,OAAO0zB,YAClBp2B,KAAKmC,SAAS,CAAEk0B,mBAAmB,EAAMC,SAAS,EAAMN,cAAc,IAEtEz2B,MAAMS,KAAKwB,MAAMkB,OAAO0zB,YACnB52B,MAAKuxB,GAAOA,EAAIhjC,SAChByR,MAAKzR,GAAQiS,KAAKmC,SAAS,CAAEkU,QAAStoB,EAAMuoC,SAAS,MACrDrvB,OAAMvP,GACHsI,KAAKmC,SAAS,CACVkU,QAAS3e,EAAEzI,WACXqnC,SAAS,EACTr3B,OAAO,EACP+2B,cAAc,OAI1Bh2B,KAAKmC,SAAS,CAAEk0B,mBAAmB,EAAML,cAAc,IAE3D1yB,YAAW,KAEP,GAAItD,KAAK+1B,UAAUlU,QAAS,CACH7hB,KAAKg2B,eAQtBh2B,KAAKmC,SAAS,CAAE6zB,cAAc,IAN9Bh2B,KAAK+1B,UAAUlU,QAAQ0U,iBAAiB,UAAU,MACzCv2B,KAAKkC,MAAM8zB,cAAgBh2B,KAAKg2B,gBACjCh2B,KAAKmC,SAAS,CAAE6zB,cAAc,GAClC,GAKZ,IACD,KAEX,CAEAvtB,UAAAA,GACI,OAAKzI,KAAKkC,MAAMm0B,mBAKZjsB,EAAAA,EAAAA,MAAC2M,EAAAA,OAAM,CACHC,SAAS,KACT7Z,MAAM,EACNgI,QAASA,CAACzN,EAAG8+B,KACM,kBAAXA,GAAyC,kBAAXA,GAC9Bx2B,KAAKmC,SAAS,CAAEk0B,mBAAmB,GACvC,EACFnkC,SAAA,EAEFD,EAAAA,EAAAA,KAACglB,EAAAA,YAAW,CAAA/kB,SACP8N,KAAKwB,MAAMkB,OAAOhN,MAAQ1H,EAAAA,KAAKC,EAAE+R,KAAKwB,MAAMkB,OAAOhN,OAAS1H,EAAAA,KAAKC,EAAE,2BAExEmc,EAAAA,EAAAA,MAAC8M,EAAAA,cAAa,CAAAhlB,SAAA,CACT8N,KAAKwB,MAAMkB,OAAO0zB,YACfhsB,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,CACK8N,KAAKkC,MAAMo0B,SAAUrkC,EAAAA,EAAAA,KAAC21B,EAAAA,eAAc,IAAM,MAC3C31B,EAAAA,EAAAA,KAAA,OACIuvB,IAAKxhB,KAAK+1B,UACVhkC,MAAO,CACH6U,MAAO,OACPC,OAAQ,OACR4vB,UAAW,OACX5N,SAAU,IACZ32B,SAED8N,KAAKkC,MAAMmU,aAGpB,MACFrW,KAAKwB,MAAMkB,OAAO0zB,YAAcp2B,KAAKwB,MAAMkB,OAAOg0B,OAChDzkC,EAAAA,EAAAA,KAAA,OACIuvB,IAAKxhB,KAAK+1B,UACVhkC,MAAO,CACH6U,MAAO,OACPC,OAAQ,OACR4vB,UAAW,OACX5N,SAAU,IACZ32B,SAED8N,KAAKwB,MAAMkB,OAAOg0B,MAAMxpC,KAAI,CAACa,EAAMmM,IAChC8F,KAAKwB,MAAMkB,OAAO8B,eAAgBvS,EAAAA,EAAAA,KAAA,KAAAC,SAAYnE,GAAJmM,IAAgBjI,EAAAA,EAAAA,KAAA,KAAAC,SAAYlE,EAAAA,KAAKC,EAAEF,IAAXmM,OAG1E,SAERkQ,EAAAA,EAAAA,MAACgN,EAAAA,cAAa,CAAAllB,SAAA,CACT8N,KAAKwB,MAAMkB,OAAOi0B,UACf1kC,EAAAA,EAAAA,KAAC2oB,EAAAA,iBAAgB,CACbC,SACI5oB,EAAAA,EAAAA,KAAC6oB,EAAAA,SAAQ,CACLE,UAAWhb,KAAKkC,MAAM00B,eACtB3rB,QAASA,IAAMjL,KAAKmC,SAAS,CAAEy0B,gBAAiB52B,KAAKkC,MAAM00B,mBAGnE/tB,MAAO7a,EAAAA,KAAKC,EAAE+R,KAAKwB,MAAMkB,OAAOi0B,YAEpC,MACJ1kC,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHxC,SACIvI,KAAKkC,MAAMo0B,SACXt2B,KAAKkC,MAAMjD,OACVe,KAAKwB,MAAMkB,OAAOi0B,WAAa32B,KAAKkC,MAAM00B,iBAC1C52B,KAAKkC,MAAM8zB,aAEhB/qB,QAASA,KACLjL,KAAKmC,SAAS,CAAEk0B,mBAAmB,IACnC,MAAMrvB,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,MAAM,GAChDwY,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAC/D,EAEJhG,MAAM,UACNsZ,QAAQ,YACRsM,WAAWrlB,EAAAA,EAAAA,KAAC4kC,EAAAA,MAAK,IAAI3kC,SAEpB8N,KAAKwB,MAAMkB,OAAOo0B,UACb9oC,EAAAA,KAAKC,EAAE+R,KAAKwB,MAAMkB,OAAOo0B,WACzB9oC,EAAAA,KAAKC,EAAE,wBAEjBgE,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHE,QAASA,KACLjL,KAAKmC,SAAS,CAAEk0B,mBAAmB,IACnC/yB,YAAW,IAAMtD,KAAKmC,SAAS,CAAEk0B,mBAAmB,KAAS,IAAK,EAEtE3kC,MAAM,OACNsZ,QAAQ,YACRsM,WAAWrlB,EAAAA,EAAAA,KAAC8kC,EAAAA,MAAK,IAAI7kC,SAEpBlE,EAAAA,KAAKC,EAAE,oBA5Fb,IAiGf,GCnLEud,GAA8C,CAChDuP,cAAe,CACXjI,QAAS,IAEb+H,QAAS,CACLkO,cAAe,MACfniB,MAAO,SAuNf,SA1MA,cAA2BvF,EAAoDE,WAAAA,GAAA,SAAA7G,WAAA,KACnEs8B,mBAAa,EAErB7zB,iBAAAA,GACI1B,MAAM0B,oBACN,IAAI4rB,EAAS1tB,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAMhE,GAJe,OAAXugC,QAA8Bx9B,IAAXw9B,IACnBA,EAAS,IAGTh+B,MAAMuJ,QAAQy0B,IAAW/uB,KAAKwB,MAAMy1B,UAGpC,OAFAlI,EAAS1tB,EAAc+J,qBACvBpL,KAAKmC,SAAS,CAAE4sB,SAAQmI,SAAUnI,IAItC/uB,KAAKmC,SAAS,CAAE4sB,OAAQA,EAAO9/B,WAAYioC,SAAUnI,EAAO9/B,YAChE,CAEA,+BAAO6yB,CACHtgB,EACAU,GAEA,QAC0B3Q,IAArBiQ,EAAMkB,OAAOy0B,KAAqB31B,EAAMkB,OAAOy0B,IAAM,QAChC5lC,IAArBiQ,EAAMkB,OAAOgP,KAAqBlQ,EAAMkB,OAAOgP,IAAM,EAEtD,OAAO,KAEX,MAAMqd,EAAS1tB,EAAcY,SAAST,EAAMQ,KAAMR,EAAMhT,MAExD,OAAIgT,EAAMy1B,WAAa/0B,EAAM6sB,SAAW1tB,EAAc+J,gBAC3C,CAAE2jB,OAAQ1tB,EAAc+J,iBAIpB,OAAX2jB,QACWx9B,IAAXw9B,GACmB,OAAnB7sB,EAAMg1B,eACa3lC,IAAnB2Q,EAAMg1B,UACLnI,EAAO9/B,aAAeqE,WAAW4O,EAAM6sB,QAAQ9/B,YAC5C8/B,EAAO9/B,aAAeiT,EAAMg1B,SAASjoC,WAElC,CAAE8/B,UAGN,IACX,CAEAqI,UAAAA,CAAWj4B,GACP,GAAc,OAAVA,QAA4B5N,IAAV4N,EAClB,OAAO,KAGX,MAAMpD,EAAc,MADpBoD,EAAQA,EAAMlQ,WAAWI,QACA,EAAIiE,WAAW6L,GAExC,MAAc,KAAVA,GAAgB5L,OAAOC,MAAMuI,GACtB,kBAGG,KAAVoD,GAAgBxQ,OAAO0oC,SAASt7B,QACFxK,IAA1ByO,KAAKwB,MAAMkB,OAAOy0B,KAAqBp7B,EAAIiE,KAAKwB,MAAMkB,OAAOy0B,IACtD,oBAEmB5lC,IAA1ByO,KAAKwB,MAAMkB,OAAOgP,KAAqB3V,EAAIiE,KAAKwB,MAAMkB,OAAOgP,IACtD,aAEG,KAAVvS,GAA0B,MAAVA,GAAiB5L,OAAOC,MAAMuI,GACvC,kBAGJ,KAGJ,iBACX,CAEA0M,UAAAA,CAAWxJ,EAAgBsJ,GACvB,MAAMoS,EAAkB5pB,MAAMuJ,QAAQ0F,KAAKkC,MAAM6sB,SAAW/uB,KAAKkC,MAAM6sB,SAAW1tB,EAAc+J,gBAehG,GAb4B,OAAxBpL,KAAKkC,MAAMg1B,eAA6C3lC,IAAxByO,KAAKkC,MAAMg1B,UACvCl3B,KAAKg3B,eACL3yB,aAAarE,KAAKg3B,eAEtBh3B,KAAKg3B,cAAgB1zB,YAAW,KAC5BtD,KAAKg3B,mBAAgBzlC,EACrByO,KAAKmC,SAAS,CAAE+0B,SAAU,MAAO,GAClC,KACIl3B,KAAKg3B,gBACZ3yB,aAAarE,KAAKg3B,eAClBh3B,KAAKg3B,mBAAgBzlC,GAGrBopB,EAAiB,CACjB,MAAM2c,EAAsBj2B,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACzE+oC,GACiB,OAAnBD,QAAmB,IAAnBA,OAAmB,EAAnBA,EACMtqC,QAAQqH,GAAiCA,GAAW,IAANA,IAC/CnH,KAAKD,IAAY,CAAQ4b,MAAO5b,EAAKgC,WAAYkQ,MAAOlS,QAAY,GAI7E,OAFAsqC,EAAIpnB,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAcgK,iBAAkBlM,MAAOkC,EAAc+J,mBAG7EnZ,EAAAA,EAAAA,KAACqe,EAAAA,aAAY,CACTve,MAAOyZ,GAAOuP,cACdtP,WAAS,EACT4E,UAAQ,EACRlR,MAAOo4B,EAAI,GAEXC,kBAAmBA,CAAC9mB,EAAQvR,IAAUuR,EAAO7H,QAAU1J,EAAM0J,MAC7DtF,SAAUA,CAACiN,EAAGrR,KACV,MAAM6H,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAW,OAAL2Q,QAAK,IAALA,OAAK,EAALA,EAAOA,OAAO,KAC9Da,KAAKmC,SAAS,CAAE4sB,OAAa,OAAL5vB,QAAK,IAALA,OAAK,EAALA,EAAOA,MAAO+3B,SAAUl3B,KAAKkC,MAAM6sB,QAAS,IAEpE/nB,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAMvH,IAC1C,EAEJpJ,QAASipC,EACT9mB,eAAiBC,GAAiCA,EAAO7H,MACzD+H,YAAaC,IACT5e,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,IACFD,EACJhI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmC,QAAQ,WACRmE,UAAW,CACPqC,UAAW,IACJX,EAAO4mB,WACVxc,SAAUjb,KAAKwB,MAAMkB,OAAOuY,WAAY,IAGhDhc,QAASA,EACT8R,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5CC,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,eAEtB+D,WAAYA,KAKhC,CAQA,OAPKtJ,GAA+B,OAAtBe,KAAKkC,MAAM6sB,aAAyCx9B,IAAtByO,KAAKkC,MAAM6sB,QAAwB/uB,KAAKkC,MAAM6sB,SACtF9vB,EAAQe,KAAKo3B,WAAWp3B,KAAKkC,MAAM6sB,WAE/B9vB,EAAQjR,EAAAA,KAAKC,EAAEgR,KAKnBhN,EAAAA,EAAAA,KAAC4f,EAAAA,YAAW,CACR7G,QAAQ,WACRjZ,MAAOyZ,GAAOqP,QAAQ3oB,UAEtBD,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACR9L,KAAK,SACLuM,WAAS,EACT0D,UAAW,CACPqC,UAAW,CACP2lB,IAAKn3B,KAAKwB,MAAMkB,OAAOy0B,IACvBzlB,IAAK1R,KAAKwB,MAAMkB,OAAOgP,IACvBgmB,KAAM13B,KAAKwB,MAAMkB,OAAOg1B,KACxBzc,SAAUjb,KAAKwB,MAAMkB,OAAOuY,WAAY,IAGhD9b,MAA6B,OAAtBa,KAAKkC,MAAM6sB,aAAyCx9B,IAAtByO,KAAKkC,MAAM6sB,OAAuB,GAAK/uB,KAAKkC,MAAM6sB,OACvF9vB,QAASA,EACTsJ,WAAYA,EACZhF,SAAU7L,IACN,MAAMq3B,EAASr3B,EAAElC,OAAO2J,MAClBuJ,EAAS1I,KAAKo3B,WAAWrI,GAC3BrmB,EACA1I,KAAKmE,QAAQnE,KAAKwB,MAAMhT,KAAMR,EAAAA,KAAKC,EAAEya,IAErC1I,KAAKmE,QAAQnE,KAAKwB,MAAMhT,MAG5BwR,KAAKmC,SAAS,CAAE4sB,SAAQmI,SAAUl3B,KAAKkC,MAAM6sB,SAAU,IACnD/uB,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM8E,WAAWy7B,KAC7C,EAELhe,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WACI/R,GAA0B,kBAAVA,EACVA,EACAe,KAAK8I,WACD9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,kBAMhD,GC1NEgH,GAA8C,CAChDV,KAAM,CACFvM,QAAS,QAEbqM,OAAQ,CACJ/D,OAAQ,GACRsG,WAAY,EACZwE,SAAU,KAmFlB,SAtEA,cAA6BtQ,EACzB8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAM,KAAEnB,EAAI,KAAExT,GAASwR,KAAKwB,MACtBrC,EAAQkC,EAAcY,SAASD,EAAMxT,IAAS,GACpDwR,KAAKmC,SAAS,CAAEhD,QAAO8R,aAAa,GACxC,CAEAxI,UAAAA,CAAWxJ,EAAesJ,GACtB,IAAKvI,KAAKkC,MAAM+O,YACZ,OAAO,KAEX,MAAM,OAAEvO,EAAM,OAAEqB,EAAM,KAAEvV,GAASwR,KAAKwB,OAChC,MAAErC,EAAK,aAAEk2B,GAAiBr1B,KAAKkC,MAErC,OACIkI,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACRpG,WAAS,EACTT,QAAQ,WAAU9Y,SAAA,CAEjBwQ,EAAOmG,OAAQ5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAACC,QAAM,EAAA7f,SAAE8N,KAAKuE,QAAQ7B,EAAOmG,SAAuB,MAC/EuB,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOV,KAAK5Y,SAAA,EACpBD,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTtM,MAAOA,EACPF,QAASA,EACTsJ,SAAUA,EACVwI,YAAa/Q,KAAKuE,QAAQ7B,EAAOqO,aACjClI,MAAO7I,KAAKuE,QAAQ7B,EAAOmG,OAC3BmI,WAAYhR,KAAK8I,WAAWpG,EAAOiN,KAAMjN,EAAOmN,SAAUnN,EAAO8B,eACjEjB,SAAU7L,IACN,MAAMsa,EAASta,EAAElC,OAAO2J,MACxBa,KAAKmC,SAAS,CAAEhD,MAAO6S,IAAU,IAAMhS,KAAKuD,SAAS/U,EAAMwjB,IAAQ,KAG3E/f,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHrZ,MAAM,OACNK,MAAOyZ,GAAOZ,OACdlB,KAAK,QACLsB,QAAQ,WACRC,QAASA,IAAMjL,KAAKmC,SAAS,CAAEkzB,cAAc,IAAQnjC,SACxD,WAIJmjC,GACGpjC,EAAAA,EAAAA,KAAC0lC,EAAAA,SAAc,CACXnqB,iBAAwCjc,IAA3ByO,KAAKwB,MAAMgM,YAA4B,QAAUxN,KAAKwB,MAAMgM,YACzEoqB,WAAY,SAAS53B,KAAKwB,MAAMwC,cAChC6zB,WAAYn1B,EAAOm1B,WACnBv/B,UAAW0H,KAAKwB,MAAMlJ,UACtBqI,MAAOX,KAAKwB,MAAMb,MAClBm3B,MAAOp1B,EAAOo1B,MAAS/mC,MAAMuJ,QAAQoI,EAAOo1B,OAASp1B,EAAOo1B,MAAQ,CAACp1B,EAAOo1B,YAAUvmC,EACtFwmC,aAAcr1B,EAAOq1B,aACrBC,QAASt1B,EAAOs1B,QAChBj0B,OAAQA,EACR+qB,SAAU3vB,EACVwc,KAAMjZ,EAAOiZ,KACbxW,QAASA,IAAMnF,KAAKmC,SAAS,CAAEkzB,cAAc,IAC7ChjB,KAAML,GACFhS,KAAKmC,SAAS,CAAEkzB,cAAc,EAAOl2B,MAAO6S,IAAU,IAAMhS,KAAKuD,SAAS/U,EAAMwjB,OAGxF,OAGhB,GCrFExG,GAA8C,CAChDC,UAAW,CACP7E,MAAO,OACPrI,QAAS,gBAEb05B,WAAY,CACRrxB,MAAO,kBACPrI,QAAS,eACT0U,YAAa,GAEjBilB,WAAY,CACRtxB,MAAO,kBACPrI,QAAS,iBAIX45B,GAAuB,cAuK7B,SA3JA,cAA6B92B,EACzB8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjEwR,KAAKmC,SAAS,CACVi2B,QAASj5B,EAAQg5B,GAAuB,GACxCE,UAAU,EACVl5B,MAAOA,EAAQg5B,GAAuB,GACtCG,WAAW,GAEnB,CAEAC,gBAAAA,CAAiBC,EAAmBC,QACflnC,IAAbinC,IACAA,EAAWx4B,KAAKkC,MAAM/C,YAEH5N,IAAnBknC,IACAA,EAAiBz4B,KAAKkC,MAAMk2B,SAEhC,MAAME,IAAct4B,KAAKwB,MAAMkB,OAAOg2B,QAAUD,IAAmBD,EACnEx4B,KAAKmC,SAAS,CAAEhD,MAAOq5B,EAAUJ,QAASK,EAAgBH,cAAa,KACnE,GAAIA,EACAt4B,KAAKmE,QAAQnE,KAAKwB,MAAMhT,KAAMR,EAAAA,KAAKC,EAAE,oCAClC,CACH+R,KAAKmE,QAAQnE,KAAKwB,MAAMhT,MACxB,MAAMwY,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMgqC,GAChDxxB,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKsI,KAAKmE,QAAQnE,KAAKwB,MAAMhT,KAAMkJ,IAE9D,IAER,CAEA+Q,UAAAA,CAAWxJ,EAAesJ,GACtB,QAA6BhX,IAAzByO,KAAKkC,MAAMo2B,UACX,OAAO,KAGX,MAAME,GACFvmC,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTvM,KAAMc,KAAKkC,MAAMm2B,UAAYr4B,KAAKkC,MAAM/C,QAAUg5B,GAAuB,OAAS,WAClFh5B,MAAOa,KAAKkC,MAAM/C,MAClBF,QAASA,GAASe,KAAKkC,MAAMo2B,UAC7B/vB,WAAYA,EACZhF,SAAU7L,GAAKsI,KAAKu4B,iBAAiB7gC,EAAElC,OAAO2J,OAC9C0J,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCsG,UAAW,CACP6M,MAAO,CACH+X,aAAc,eACd/P,aACIhkB,KAAKkC,MAAM/C,OACXa,KAAKkC,MAAM/C,QAAUg5B,IACrBn4B,KAAKwB,MAAMkB,OAAOi2B,UACjBpwB,IACAvI,KAAKwB,MAAMkB,OAAOuY,UACfhpB,EAAAA,EAAAA,KAAC2mC,EAAAA,eAAc,CAACtb,SAAS,MAAKprB,UAC1BD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLmvB,UAAW,EACX5tB,QAASvT,IACLA,EAAEE,iBACFF,EAAEC,kBACFqI,KAAKmC,SAAS,CAAEk2B,UAAWr4B,KAAKkC,MAAMm2B,UAAW,EAErDS,KAAK,MAAK5mC,SAET8N,KAAKkC,MAAMm2B,UAAWpmC,EAAAA,EAAAA,KAAC8mC,EAAAA,cAAa,KAAM9mC,EAAAA,EAAAA,KAAC+mC,EAAAA,WAAU,aAG9DznC,GAEZigB,UAAW,CACPuiB,aAAc,eACdkF,KAAM,CAAElF,aAAc,OACtBtiB,UAAWzR,KAAKwB,MAAMkB,OAAO+O,WAAazR,KAAKwB,MAAMkB,OAAOgP,UAAOngB,EACnE0pB,SAAUjb,KAAKwB,MAAMkB,OAAOuY,WAAY,IAGhDjK,WACIhR,KAAKkC,MAAMo2B,UACLtqC,EAAAA,KAAKC,EAAE,+BACP+R,KAAK8I,WACD9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAMxC,GAAIxE,KAAKwB,MAAMkB,OAAOg2B,SAAW14B,KAAKwB,MAAMkB,OAAOuY,SAAU,CACzD,MAAMie,GACFjnC,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTvM,KAAMc,KAAKkC,MAAMm2B,UAAYr4B,KAAKkC,MAAMk2B,UAAYD,GAAuB,OAAS,WACpFh5B,MAAOa,KAAKkC,MAAMk2B,QAClBn5B,QAASA,GAASe,KAAKkC,MAAMo2B,UAC7B/vB,WAAYA,EACZhF,SAAU7L,GAAKsI,KAAKu4B,sBAAiBhnC,EAAWmG,EAAElC,OAAO2J,OACzD0J,MAAO,GAAG7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,WAAW7a,EAAAA,KAAKC,EAAE,gBAC3DkhB,UAAW,CACP6M,MAAO,CACHgI,aACIhkB,KAAKkC,MAAMk2B,SACXp4B,KAAKkC,MAAMk2B,UAAYD,IACvBn4B,KAAKwB,MAAMkB,OAAOi2B,UAAYpwB,GAC1BtW,EAAAA,EAAAA,KAAC2mC,EAAAA,eAAc,CAACtb,SAAS,MAAKprB,UAC1BD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLmvB,UAAW,EACX5tB,QAASvT,IACLA,EAAEE,iBACFF,EAAEC,kBACFqI,KAAKmC,SAAS,CAAEk2B,UAAWr4B,KAAKkC,MAAMm2B,UAAW,EAErDS,KAAK,MAAK5mC,SAET8N,KAAKkC,MAAMm2B,UAAWpmC,EAAAA,EAAAA,KAAC8mC,EAAAA,cAAa,KAAM9mC,EAAAA,EAAAA,KAAC+mC,EAAAA,WAAU,aAG9DznC,EACRwiC,aAAc,gBAElBviB,UAAW,CACPuiB,aAAc,eACdkF,KAAM,CAAElF,aAAc,OACtBtiB,UAAWzR,KAAKwB,MAAMkB,OAAO+O,WAAazR,KAAKwB,MAAMkB,OAAOgP,UAAOngB,IAG3Eyf,WACIhR,KAAKkC,MAAMo2B,UACLtqC,EAAAA,KAAKC,EAAE,+BACP+R,KAAK8I,WACD9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAMxC,OACI4F,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOC,UAAUvZ,SAAA,EACzBD,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAOysB,WAAW/lC,SAAEsmC,KAChCvmC,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAO0sB,WAAWhmC,SAAEgnC,MAG5C,CACA,OAAOV,CACX,GCjJJ,SAlCA,cAA4Bn3B,EACxBoH,UAAAA,CAAWC,EAAiBH,GACxB,OACItW,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTlD,WAAYA,EACZ4G,UAAW,CACP6M,MAAO,CACHgI,aAAchkB,KAAKwB,MAAMkB,OAAOjL,iBAC5BxF,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,KACLre,EAAAA,MAAM6K,gBAAgBuI,KAAK8D,WAAW9D,KAAKwB,MAAMkB,OAAO0G,UACxDza,OAAO0rB,MAAM,SAAS,EACxBnoB,UAEFD,EAAAA,EAAAA,KAACknC,EAAAA,SAAQ,WAEb5nC,IAGZ4N,MAAOa,KAAK8D,WAAW9D,KAAKwB,MAAMkB,OAAO0G,SACzCP,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,gBAIlC,GClCEgH,GAA8B,CAChC4tB,QAAS,CACL,eAAgB,CACZ1nC,MAAO,YA0OnB,SAnNA,cAAyB2P,EAAgDE,WAAAA,GAAA,SAAA7G,WAAA,KAC7Ds8B,mBAAa,EAErB,uBAAM7zB,GACF1B,MAAM0B,oBACN,IAAI4rB,EAAS1tB,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjD,OAAXugC,QAA8Bx9B,IAAXw9B,IACnBA,EAAS,IAEb/uB,KAAKmC,SAAS,CAAE4sB,OAAQA,EAAO9/B,WAAYioC,SAAUnI,EAAO9/B,aAG5D,MAAMwiC,QAA6CzxB,KAAKwB,MAAMuC,OAAOytB,sBAE/D6H,EAAQ,kBAAkBr5B,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAC/DnB,QAA8C9C,KAAKwB,MAAMuC,OAAO0P,UAClE4lB,GAEEC,EAAyB,OAAXx2B,QAAW,IAAXA,OAAW,EAAXA,EAAapU,OAAOm4B,KAElC0S,EAAgB,GACtB9H,EAAU71B,SAAQqI,IAAa,IAADu1B,EAAAC,EAE1B,IAAKx1B,GAAYA,EAASxU,MAAQ4pC,GAASp1B,EAASvV,OAAOm4B,OAASyS,EAChE,OAGJ,GAAoB,QAAhBE,EAACv1B,EAASrN,cAAM,IAAA4iC,IAAfA,EAAiBE,KAClB,OAIJ,GAAY,OAARz1B,QAAQ,IAARA,GAAAA,EAAUrN,QAAUqN,EAASrN,OAAO+iC,QAAU11B,EAASrN,OAAOgjC,WAAa31B,EAASrN,OAAOijC,SAAU,CACrG,MAAMhJ,EAAOz9B,SAAS6Q,EAASrN,OAAOkjC,aAAe71B,EAASrN,OAAOmjC,OAAQ,IAClE,IAADrI,EAAV,GAAIb,EACA0I,EAAMjkC,KAAK,CACPxI,KAAM,GAAGmX,EAASxU,IAAIP,QAAQ,kBAAmB,WACjD2hC,OACAmJ,OAAQ/1B,EAASrN,OAAO8iC,KAAK3iC,SAAS,KAAOkN,EAASrN,OAAO8iC,KAAOz1B,EAASrN,OAAOojC,OACpFN,KAAMz1B,EAASrN,OAAO8iC,KACtBpoC,UAA0B,QAAhBogC,EAACztB,EAASvV,cAAM,IAAAgjC,IAAfA,EAAiBpgC,UAGxC,CAEA,MAAMu/B,EAAOz9B,SAAiB,OAAR6Q,QAAQ,IAARA,GAAgB,QAARw1B,EAARx1B,EAAUrN,cAAM,IAAA6iC,OAAR,EAARA,EAAkB5I,KAAM,IACnC,IAADe,EAANf,GACA0I,EAAMjkC,KAAK,CACPxI,KAAMmX,EAASxU,IAAIP,QAAQ,kBAAmB,IAC9CwqC,KAAMz1B,EAASrN,OAAO8iC,KACtBM,OAAQ/1B,EAASrN,OAAO8iC,KAAK3iC,SAAS,KAAOkN,EAASrN,OAAO8iC,KAAOz1B,EAASrN,OAAOojC,OACpFnJ,OACAv/B,UAA0B,QAAhBsgC,EAAC3tB,EAASvV,cAAM,IAAAkjC,IAAfA,EAAiBtgC,UAEpC,IAEJ0O,KAAKmC,SAAS,CAAEo3B,SACpB,CAEA,+BAAOzX,CAAyBtgB,EAAwBU,GACpD,MAAM6sB,EAAS1tB,EAAcY,SAAST,EAAMQ,KAAMR,EAAMhT,MACxD,OACe,OAAXugC,QACWx9B,IAAXw9B,GACmB,OAAnB7sB,EAAMg1B,eACa3lC,IAAnB2Q,EAAMg1B,UACLnI,EAAO9/B,aAAemE,SAAS8O,EAAM6sB,OAAQ,IAAI9/B,YAC9C8/B,EAAO9/B,aAAeiT,EAAMg1B,SAASjoC,WAElC,CAAE8/B,UAGN,IACX,CAEAqI,UAAAA,CAAWj4B,GACP,GAAc,OAAVA,QAA4B5N,IAAV4N,EAClB,OAAO,KAGX,MAAMg4B,OAAgC5lC,IAA1ByO,KAAKwB,MAAMkB,OAAOy0B,IAAoB,GAAKn3B,KAAKwB,MAAMkB,OAAOy0B,IACnEzlB,EAAM1R,KAAKwB,MAAMkB,OAAOgP,KAAO,MAG/B3V,EAAc,MADpBoD,EAAQA,EAAMlQ,WAAWI,QACA,EAAI+D,SAAS+L,EAAO,IAE7C,MAAc,KAAVA,GAAgB5L,OAAOC,MAAMuI,GACtB,kBAGG,KAAVoD,GAAgBxQ,OAAO0oC,SAAS9jC,OAAO4L,IACnCpD,EAAIo7B,EACG,eAEPp7B,EAAI2V,EACG,aAEG,KAAVvS,GAA0B,MAAVA,GAAiB5L,OAAOC,MAAMuI,GACvC,kBAGJ,KAGJ,iBACX,CAEA0M,UAAAA,CAAWxJ,EAAgBsJ,GACK,OAAxBvI,KAAKkC,MAAMg1B,eAA6C3lC,IAAxByO,KAAKkC,MAAMg1B,UACvCl3B,KAAKg3B,eACL3yB,aAAarE,KAAKg3B,eAEtBh3B,KAAKg3B,cAAgB1zB,YAAW,KAC5BtD,KAAKg3B,mBAAgBzlC,EACrByO,KAAKmC,SAAS,CAAE+0B,SAAU,MAAO,GAClC,KACIl3B,KAAKg3B,gBACZ3yB,aAAarE,KAAKg3B,eAClBh3B,KAAKg3B,mBAAgBzlC,GAGzB,MAAM4lC,OAAgC5lC,IAA1ByO,KAAKwB,MAAMkB,OAAOy0B,IAAoB,GAAKn3B,KAAKwB,MAAMkB,OAAOy0B,IACnEzlB,EAAM1R,KAAKwB,MAAMkB,OAAOgP,KAAO,MAErC,IAAI0nB,EACJ,GAAIp5B,KAAKkC,MAAMq3B,MAAO,CAClB,MAAM1lC,EAAMT,SAAS4M,KAAKkC,MAAM6sB,OAAQ,IAExC,GAAIl7B,EAAK,CAGL,MAAM0lC,EAAQv5B,KAAKkC,MAAMq3B,MAAMvsC,QAC3BC,IACK+S,KAAKwB,MAAMQ,KAAK03B,MACjB15B,KAAKwB,MAAMQ,KAAK03B,OAASzsC,EAAKysC,MACL,YAAzB15B,KAAKwB,MAAMQ,KAAK03B,MACF,YAAdzsC,EAAKysC,OAGb,IAAIzsB,EAAMssB,EAAMlI,WAAUpkC,GAAQA,EAAK4jC,OAASh9B,GAAO5G,EAAKqE,WAC/C,IAAT2b,EACAhO,EAAQjR,EAAAA,KAAKC,EAAE,gCAAiC+R,KAAKkC,MAAMq3B,MAAMtsB,GAAKngB,OAEtEmgB,EAAMssB,EAAMlI,WAAUpkC,GAAQA,EAAK4jC,OAASh9B,IAAQ5G,EAAKqE,WAC5C,IAAT2b,IACAmsB,GAAU,EACVn6B,EAAQjR,EAAAA,KAAKC,EAAE,8BAA+B+R,KAAKkC,MAAMq3B,MAAMtsB,GAAKngB,OAGhF,CACJ,CASA,OAPKmS,GAA+B,OAAtBe,KAAKkC,MAAM6sB,aAAyCx9B,IAAtByO,KAAKkC,MAAM6sB,QAE9B,kBADrB9vB,EAAQe,KAAKo3B,WAAWp3B,KAAKkC,MAAM6sB,WAE/B9vB,EAAQjR,EAAAA,KAAKC,EAAEgR,KAKnBhN,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACR9L,KAAK,SACLuM,WAAS,EACT0D,UAAW,CACPqC,UAAW,CACP2lB,MACAzlB,MACAuJ,SAAUjb,KAAKwB,MAAMkB,OAAOuY,WAAY,IAGhD9b,MAA6B,OAAtBa,KAAKkC,MAAM6sB,aAAyCx9B,IAAtByO,KAAKkC,MAAM6sB,OAAuB,GAAK/uB,KAAKkC,MAAM6sB,OACvF9vB,QAASA,EACTsJ,WAAYA,EACZwG,GAAIqqB,EAAU5tB,GAAO4tB,aAAU7nC,EAC/BgS,SAAU7L,IACN,MAAMq3B,EAASx7B,OAAOmE,EAAElC,OAAO2J,MAAMlQ,WAAWC,QAAQ,UAAW,KAAKD,WAClEyZ,EAAS1I,KAAKo3B,WAAWrI,GAC3BrmB,EACA1I,KAAKmE,QAAQnE,KAAKwB,MAAMhT,KAAMR,EAAAA,KAAKC,EAAEya,IAErC1I,KAAKmE,QAAQnE,KAAKwB,MAAMhT,MAG5BwR,KAAKmC,SAAS,CAAE4sB,SAAQmI,SAAUl3B,KAAKkC,MAAM6sB,SAAU,KACnD,GAAIA,EAAO1/B,SAAW+D,SAAS27B,EAAQ,IAAI9/B,WAAY,CACnD,MAAMgrC,EAAej6B,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM4E,SAAS27B,EAAQ,KAAO,GACxEkL,aAAwBt6B,SACxBs6B,EAAahzB,OAAMwgB,IACf3uB,QAAQmG,MAAM,wBAAwBe,KAAKwB,MAAMhT,SAASi5B,IAAM,GAG5E,IACF,EAEN1W,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WACI/R,GAA0B,kBAAVA,EACVA,EACAe,KAAK8I,WACD9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,gBAK5C,GClIJ,SAhGA,cAAyBnD,EACrB8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAE5DwR,KAAKwB,MAAMuC,OACXyrB,SAAS,SACThwB,MAAKiwB,IACF,MAAMvf,EAA+EtgB,OAAOyQ,KACxFovB,GACFviC,KAAIkB,IAAE,CACJ+Q,MAAOa,KAAKwB,MAAMkB,OAAOgtB,MAAQthC,EAAGc,QAAQ,cAAe,IAAMd,EACjEya,MAAO7I,KAAKuE,QAAQkrB,EAAMrhC,GAAIM,OAAO5B,MACrCyC,IAAKkgC,EAAMrhC,QAG2B,IAAtC4R,KAAKwB,MAAMkB,OAAOitB,iBAClBzf,EAAcC,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAckK,YAAapM,MAAOkC,EAAciK,aAG1FtL,KAAKmC,SAAS,CAAEhD,QAAO+Q,iBAAgB,IAE1CjJ,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MACvD,CAEA+Q,UAAAA,CAAWxJ,EAAesJ,GACtB,IAAKvI,KAAKkC,MAAMgO,cACZ,OAAO,KAGX,MAAMjjB,EAAO+S,KAAKkC,MAAMgO,cAAc3b,MAAK4C,GAAMA,EAAGgI,QAAUa,KAAKkC,MAAM/C,QAEzE,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR7G,QAAQ,WACRS,WAAS,EAAAvZ,SAAA,CAER8N,KAAKwB,MAAMkB,OAAOmG,OAAQ5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAAA5f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAAuB,MAC9F5W,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOa,KAAKkC,MAAM/C,OAAS,IAC3BwT,YAAaA,IACT1lB,EACIA,EAAKsC,KACD0C,EAAAA,EAAAA,KAAC29B,EAAAA,aAAY,CACTzwB,MAAOlS,EAAKsC,IACZ+I,UAAW0H,KAAKwB,MAAMlJ,UACtBqJ,KAAM3T,EAAAA,KAAK0I,gBAGfzJ,EAAK4b,MAGT,GAGRtF,SAAU7L,IACNsI,KAAKmC,SAAS,CAAEhD,MAA0B,MAAnBzH,EAAElC,OAAO2J,MAAgB,GAAKzH,EAAElC,OAAO2J,QAAS,IACnEa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,QAC7C,EACHjN,SAED8N,KAAKkC,MAAMgO,cAAchjB,KAAIiK,IAC1BlF,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOhI,EAAGgI,MACVpN,MAAOoF,EAAGgI,QAAUkC,EAAc+J,gBAAkB,CAAE0H,QAAS,IAAQ,CAAC,EAAE5gB,SAEzEiF,EAAG5H,KACA0C,EAAAA,EAAAA,KAAC29B,EAAAA,aAAY,CACTzwB,MAAOhI,EAAG5H,IACV+I,UAAW0H,KAAKwB,MAAMlJ,UACtBqJ,KAAM3T,EAAAA,KAAK0I,gBAGfS,EAAG0R,OAXF1R,EAAGgI,WAgBnBa,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCrGEgH,GAA8B,CAChCC,UAAW,CACP7E,MAAO,QAEXszB,SAAU,CACN,QAAS,CACL9sB,UAAW,KAoKvB,SAvJA,cAA2B/L,EAAoEE,WAAAA,GAAA,SAAA7G,WAAA,KACnFy/B,aAAkC,EAAG,CAE7Ch3B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAE3D0hB,EAKA,IAELlQ,KAAKwB,MAAMkB,OAAOpU,SAAW,IAAIsN,SAAQ3O,IAEtC,MAAMmtC,EAKFntC,EAMA8D,MAAMuJ,QAAQ8/B,EAAUxtB,QACxBsD,EAAc5a,KAAK,CAAEuT,MAAO7I,KAAKuE,QAAQtX,EAAK4b,OAAQ1J,MAAOlS,EAAKkS,MAAOk7B,OAAO,IAChFD,EAAUxtB,MAAMhR,SAAQzE,GACpB+Y,EAAc5a,KAAK,CACfuT,MAAO7I,KAAKuE,QAAQpN,EAAG0R,OACvB1J,MAAOhI,EAAGgI,MACVyI,OAAQzQ,EAAGyQ,YAInBsI,EAAc5a,KAAK,CACfuT,MAAO7I,KAAKuE,QAAQtX,EAAK4b,OACzB1J,MAAOlS,EAAKkS,MACZyI,OAAQ3a,EAAK2a,QAErB,IAIA7W,MAAMuJ,QAAQ6E,IACda,KAAKm6B,aAAe,IAAIh7B,GACxB+Q,EAAcC,QAAQ,CAClBtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAcgK,iBAC5BlM,MAAOkC,EAAc+J,kBAEzBpL,KAAKmC,SAAS,CAAEhD,MAAOkC,EAAc+J,gBAAiB8E,mBAEtDlQ,KAAKmC,SAAS,CAAEhD,QAAO+Q,iBAE/B,CAEAzH,UAAAA,CAAWxJ,EAAesJ,GACtB,IAAKvI,KAAKkC,MAAMgO,cACZ,OAAO,KAGX,MAAMA,GAAiBlQ,KAAKkC,MAAMgO,eAAiB,IAAIljB,QAAOC,IAErDA,EAAK2a,SAIN5H,KAAKwB,MAAMxR,QACHgQ,KAAK4C,cACT3V,EAAK2a,OACL5H,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,aAGXhD,KAAKkD,QACTjW,EAAK2a,OACL5H,KAAKwB,MAAMkB,OAAOO,QAClBjD,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,eAIb/V,EAAOijB,EAAc3b,MAAK4C,GAAMA,EAAGgI,OAASa,KAAKkC,MAAM/C,QAE7D,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR7G,QAAQ,WACRS,WAAS,EACTsD,QAAyBxd,IAArByO,KAAKwB,MAAMqM,OAAuBrC,GAAO0uB,SAC7C9rC,GAAI,cAAc4R,KAAKwB,MAAMhT,QAAQwR,KAAKwB,MAAMnM,OAA8B,IAArB2K,KAAKwB,MAAMnM,MAAc2K,KAAKwB,MAAMnM,MAAQ,KAAKnD,SAAA,CAEzG8N,KAAKwB,MAAMkB,OAAOmG,OAAQ5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAAA5f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAAuB,MAC9F5W,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOa,KAAKkC,MAAM/C,OAAS,IAC3BwT,YAAaA,IAAM3S,KAAKuE,QAAY,OAAJtX,QAAI,IAAJA,OAAI,EAAJA,EAAM4b,MAAO7I,KAAKwB,MAAMkB,OAAO8B,eAC/DjB,SAAU7L,IACNsI,KAAKmC,SAAS,CAAEhD,MAA0B,MAAnBzH,EAAElC,OAAO2J,MAAgB,GAAKzH,EAAElC,OAAO2J,QAAS,KACnE,IAAI6H,EAEAA,EADAhH,KAAKkC,MAAM/C,QAAUkC,EAAc+J,gBACpBpL,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKm6B,cAEpCn6B,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,OAEzD6H,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAMvH,IAC1C,GACF,EACJxF,SAEDge,EAAchjB,KAAI,CAACiK,EAAI+C,IAChB/C,EAAGkjC,OAECpoC,EAAAA,EAAAA,KAACqoC,EAAAA,cAAa,CAAApoC,SACT8N,KAAKuE,QAAQpN,EAAG0R,MAAO7I,KAAKwB,MAAMkB,OAAO8B,gBAD1BtK,IAMxBjI,EAAAA,EAAAA,KAAC4gB,EAAAA,SAAQ,CAEL1T,MAAOhI,EAAGgI,MACVpN,MAAOoF,EAAGgI,QAAUkC,EAAc+J,gBAAkB,CAAE0H,QAAS,IAAQ,CAAC,EAAE5gB,SAEzE8N,KAAKuE,QAAQpN,EAAG0R,MAAO7I,KAAKwB,MAAMkB,OAAO8B,gBAJrCtK,OASpB8F,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCvJEgH,GAA8C,CAChD+uB,UAAW,CACPC,UAAW,MA6RnB,SA3OA,cAAiCn5B,EAAgEE,WAAAA,GAAA,SAAA7G,WAAA,KACrFuW,aAAc,EAAM,KAEpBC,cAAQ,EAEhBC,WAAAA,GACI,GAAInR,KAAKwB,MAAMmC,MAAO,CAClB,IAAI3B,EAAwChC,KAAKwB,MAAMkB,OAAOV,KAC9D,QAAazQ,IAATyQ,GAAsBhC,KAAKwB,MAAMkB,OAAOkB,SAAU,CAClD,MAAMC,EAAkB7D,KAAK8D,WAAW9D,KAAKwB,MAAMkB,OAAOkB,UAC1D,IACI5B,EAAO7R,KAAKC,MAAMyT,EACtB,CAAE,MACE/K,QAAQmG,MAAM,2BAA2B4E,IAC7C,CACJ,MAEatS,IAATyQ,IACAA,EAAO,MAEXhC,KAAKmC,SAAS,CAAEmT,SAAS,IAAQ,KACxBtV,KAAKwB,MAAMuC,OACXL,OACG,GAAG1D,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WACxCjE,KAAKwB,MAAMkB,OAAO0O,SAAW,OAC7BpP,GAEHxC,MAAK7O,GAAQqP,KAAKmC,SAAS,CAAExR,OAAM2kB,SAAS,MAC5CrO,OAAMvP,IACHoB,QAAQmG,MAAM,wBAAwBvH,IAAI,GAC5C,GAEd,KAAO,CACH,MAAMyH,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAEjEwR,KAAKmC,SAAS,CAAEhD,QAAOmW,SAAS,GACpC,CACJ,CAEAjE,UAAAA,GACI,MAAMC,EAA+B,CAAC,EAQtC,OANIvgB,MAAMuJ,QAAQ0F,KAAKwB,MAAMkB,OAAO6O,gBAChCvR,KAAKwB,MAAMkB,OAAO6O,cAAc3V,SAC5BpN,GAAS8iB,EAAQ9iB,GAAQ6S,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMxT,KAIlE2B,KAAKE,UAAUihB,EAC1B,CAEAmpB,SAAAA,GACI,IAAIt7B,EACqB,OAArBa,KAAKkC,MAAM/C,YAAuC5N,IAArByO,KAAKkC,MAAM/C,MAClCkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACnDwR,KAAKkC,MAAM/C,MAUrB,OARIa,KAAKwB,MAAMkB,OAAOqrB,WACG,kBAAV5uB,EACPA,EAAQ,CAACA,GACQ,OAAVA,QAA4B5N,IAAV4N,IACzBA,EAAQ,KAITA,CACX,CAEAsJ,UAAAA,CAAWxJ,EAAgBsJ,GAA+D,IAADmyB,EACrF,GAAI16B,KAAKwB,MAAMmC,MAAO,CAClB,MAAM2N,EAAUtR,KAAKqR,aACjBC,IAAYtR,KAAKkR,UAAalR,KAAKiR,cACnCjR,KAAKkR,SAAWI,EAChBhO,YAAW,IAAMtD,KAAKmR,eAAenR,KAAKiR,YAAc,IAAM,IAC9DjR,KAAKiR,aAAc,EAE3B,CAEA,MAAM9R,EAAQa,KAAKy6B,YAEnB,IAAKz6B,KAAKwB,MAAMmC,QAAW3D,KAAKkC,MAAMoT,UAA2B,QAAhBolB,EAAC16B,KAAKkC,MAAMvR,YAAI,IAAA+pC,IAAfA,EAAiB1oC,QAC/D,OAAIgO,KAAKwB,MAAMkB,OAAOqrB,WAAyC,IAA7B/tB,KAAKwB,MAAMkB,OAAOi4B,OACzC3sC,EAAAA,KAAKC,EAAE,uDAGdgE,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTtM,MAAOA,EACPF,QAASA,EACTsJ,WAAYA,EACZhF,SAAU7L,IACN,MAAMsa,EAASta,EAAElC,OAAO2J,MACxBa,KAAKmC,SAAS,CAAEhD,MAAO6S,IAAU,IAAMhS,KAAKuD,SAASvD,KAAKwB,MAAMhT,MAAOwjB,GAAU,IAAI3iB,SAAQ,EAEjG0hB,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,eAEtB2K,UAAW,CACP6M,MAAO,CACHgI,aACIhkB,KAAKkC,MAAM/C,QAAUa,KAAKwB,MAAMkB,OAAOuhB,eACnChyB,EAAAA,EAAAA,KAAC2mC,EAAAA,eAAc,CAACtb,SAAS,MAAKprB,UAC1BD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,IACLjL,KAAKmC,SAAS,CAAEhD,MAAO,KAAM,IAAMa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM,MACrE0D,UAEDD,EAAAA,EAAAA,KAACiiC,EAAAA,MAAS,QAGlB,SAO5B,GAAIl0B,KAAKkC,MAAMoT,QACX,OAAOrjB,EAAAA,EAAAA,KAACyoB,EAAAA,iBAAgB,CAAChR,KAAK,OAGlC,MAAMwG,EAAgBlQ,KAAKkC,MAAMvR,KAAK3D,QAAOC,IACpCA,EAAK2a,SAGN5H,KAAKwB,MAAMxR,QACHgQ,KAAK4C,cACT3V,EAAK2a,OACL5H,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,aAGXhD,KAAKkD,QACTjW,EAAK2a,OACL5H,KAAKwB,MAAMkB,OAAOO,QAClBjD,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMuB,WACX/C,KAAKwB,MAAMwB,eAIb/V,EAAOijB,EAAc3b,MAAK4C,GAAMA,EAAGgI,QAAUA,IAEnD,OACIiL,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR7G,QAAQ,WACRS,WAAS,EAAAvZ,SAAA,CAER8N,KAAKwB,MAAMkB,OAAOmG,OAAQ5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAAA5f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAAuB,MAC9F5W,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACT8uB,SAAU/tB,KAAKwB,MAAMkB,OAAOqrB,SAC5BxlB,WAAYA,EAEZwG,GAAI,CACA,oBAAqB/O,KAAKwB,MAAMkB,OAAOqrB,SAAWviB,GAAO+uB,eAAYhpC,GAEzE4N,MAAOA,EACPwT,YAAcrL,GACVtH,KAAKwB,MAAMkB,OAAOqrB,UACd97B,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CAAC5I,GAAI,CAAExQ,QAAS,OAAQsd,SAAU,OAAQ+e,IAAK,IAAM1oC,SACnDoV,EAAiBpa,KAAKqP,IACpB,MAAMpF,EAAK+Y,EAAc3b,MAAK6b,GAASA,EAAMjR,QAAU5C,IACvD,GAAIpF,IAA0C,IAApC6I,KAAKwB,MAAMkB,OAAOm4B,cAAyB,CACjD,MAAMhyB,GAAU,OAAF1R,QAAE,IAAFA,OAAE,EAAFA,EAAI0R,QAAStM,EAC3B,OACItK,EAAAA,EAAAA,KAAC6sB,EAAAA,KAAI,CAEDjW,MAAOA,GADFtM,EAIjB,CACA,OAAO,IAAI,OAIf,OAAJtP,QAAI,IAAJA,OAAI,EAAJA,EAAM4b,QAASvB,EAGvB/D,SAAU7L,IACN,MAAMsP,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMkJ,EAAElC,OAAO2J,OACzD6H,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAC/D,EACFxF,SAEDge,EAAchjB,KAAI,CAACiK,EAAI+C,KACpBkQ,EAAAA,EAAAA,MAACyI,EAAAA,SAAQ,CAEL1T,MAAOhI,EAAGgI,MAAMjN,SAAA,CAEf8N,KAAKwB,MAAMkB,OAAOqrB,UACf97B,EAAAA,EAAAA,KAAC6oB,EAAAA,SAAQ,CACLE,QAAS7b,EAAMpI,SAASI,EAAGgI,OAC3B8L,QAASA,KACL,MAAM8jB,EAAS5+B,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKy6B,cACxCtrC,EAAMgQ,EAAMlL,QAAQkD,EAAGgI,QAChB,IAAThQ,EACA4/B,EAAO79B,OAAO/B,EAAK,IAEnB4/B,EAAOz5B,KAAK6B,EAAGgI,OACf4vB,EAAOwC,QAEXvxB,KAAKmC,SAAS,CAAEhD,MAAO4vB,IAAU,IAAM/uB,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMugC,IAAQ,IAGtF,MACJ98B,EAAAA,EAAAA,KAACq7B,EAAAA,aAAY,CAACnQ,QAAShmB,EAAG0R,UAnBrB3O,OAuBhB8F,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCrSEgH,GAA8C,CAChDC,UAAW,CACP7E,MAAO,SAIf,SAASk0B,GAAOpI,GACZ,OAAOA,EAAG3lC,MAAM,KAAK8f,QAAO,CAACkuB,EAAOC,KAAWD,GAAS,GAAK3nC,SAAS4nC,EAAO,KAAK,KAAO,CAC7F,CA8WA,SAhPA,cAA2B35B,EACvB,uBAAM8B,GACF1B,MAAM0B,oBAEN,IAAI2tB,EAAWniC,OAAO8D,SAASq+B,SAC/B,GAAI9wB,KAAKwB,MAAMkB,OAAOu4B,QAAS,CAE3B,MAAMC,QAAsBl7B,KAAKwB,MAAMuC,OAAOo3B,qBACxCr4B,QAAoB9C,KAAKwB,MAAMuC,OAAO0P,UACxC,kBAAkBynB,KAGtB,GAAIp4B,EAAa,CAAC,IAADs4B,EACb,MAAMC,QAAgBr7B,KAAKwB,MAAMuC,OAAO0P,UAAU,eAA0B,OAAX3Q,QAAW,IAAXA,GAAmB,QAARs4B,EAAXt4B,EAAapU,cAAM,IAAA0sC,OAAR,EAAXA,EAAqBvU,QACtF,GAAIwU,EAAS,CACT,MAAM3I,EA1I1B,SAAkCnjC,EAA0B+rC,GAA0B,IAADrJ,EAAAC,EACjF,MAAMG,EAAuB,OAAH9iC,QAAG,IAAHA,GAAW,QAAR0iC,EAAH1iC,EAAKqH,cAAM,IAAAq7B,GAAU,QAAVC,EAAXD,EAAaG,gBAAQ,IAAAF,OAAlB,EAAHA,EAAuBG,kBACjD,IAAKA,EACD,OAAO,KAGX,IAAIkJ,EAuGJ,OApGA3rC,OAAOyQ,KAAKgyB,GAAmBz2B,SAAQ02B,GACnCD,EAAkBC,GAAO12B,SAAS82B,IAC1BA,EAAGrC,UAGHiL,EAAQvkC,SAAS,MAAsB,SAAd27B,EAAGxC,QAG5BoL,EAAQvkC,SAAS,OAASukC,EAAQ3oC,MAAM,WAA2B,SAAd+/B,EAAGxC,SAK1C,SAAdwC,EAAGxC,QACFwC,EAAG1C,QAAQ79B,WAAW,QACV,cAAZmpC,GAAuC,cAAZA,IAA2BA,EAAQ3oC,MAAM,UAI7D4oC,IAEU,SAAd7I,EAAGxC,QACHoL,EAAQvkC,SAAS,OAChB+jC,GAAOQ,GAAWR,GAAOpI,EAAG8I,SAAeV,GAAOpI,EAAG1C,SAAW8K,GAAOpI,EAAG8I,UAE3ED,EAAS7I,EAAG1C,SAPhBuL,EAAS7I,EAAG1C,QAWhB,MAKHuL,GACD3rC,OAAOyQ,KAAKgyB,GAAmBz2B,SAAQ02B,GACnCD,EAAkBC,GAAO12B,SAAS82B,IAC1BA,EAAGrC,UAGHiL,EAAQvkC,SAAS,MAAsB,SAAd27B,EAAGxC,QAG5BoL,EAAQvkC,SAAS,OAASukC,EAAQ3oC,MAAM,WAA2B,SAAd+/B,EAAGxC,SAI1C,SAAdwC,EAAGxC,QACU,cAAZoL,GAAuC,cAAZA,IAA2BA,EAAQ3oC,MAAM,UAI7D4oC,IAEU,SAAd7I,EAAGxC,QACHoL,EAAQvkC,SAAS,OAChB+jC,GAAOQ,GAAWR,GAAOpI,EAAG8I,SAAeV,GAAOpI,EAAG1C,SAAW8K,GAAOpI,EAAG8I,UAE3ED,EAAS7I,EAAG1C,SAPhBuL,EAAS7I,EAAG1C,QAWhB,MAKPuL,GACD3rC,OAAOyQ,KAAKgyB,GAAmBz2B,SAAQ02B,IACnCD,EAAkBC,GAAO12B,SAAS82B,IAC1BA,EAAGrC,UAGHiL,EAAQvkC,SAAS,MAAsB,SAAd27B,EAAGxC,QAG5BoL,EAAQvkC,SAAS,OAASukC,EAAQ3oC,MAAM,WAA2B,SAAd+/B,EAAGxC,SAG5C,cAAZoL,GAAuC,cAAZA,GAA2BA,EAAQ3oC,MAAM,UAEpE4oC,EAAS7I,EAAG1C,QAGhB,GACF,IAILuL,GACD3rC,OAAOyQ,KAAKgyB,GAAmBz2B,SAAQ02B,IACnCD,EAAkBC,GAAO12B,SAAS82B,IAC1BA,EAAGrC,WAGPkL,EAAS7I,EAAG1C,QAAO,GACrB,IAIHuL,CACX,CA4B+BE,CAAyBJ,EAAS1sC,OAAO8D,SAASq+B,UAC7D,IAAI4B,EAMA,YAHA55B,QAAQC,KACJ,mCAAmC+J,EAAYpU,OAAOm4B,YAAY/jB,EAAYrT,OAHlFqhC,EAAW,GAAG4B,KAAM/jC,OAAO8D,SAASo+B,MAO5C,CACJ,CACJ,OAEM,IAAIlxB,SAAcC,IACpBI,KAAKmC,SAAS,CAAEuG,OAAQ,GAAIgzB,SAAU,GAAI5K,YAAYlxB,EAAQ,IAG9DI,KAAKwB,MAAMkB,OAAOi5B,UAClB37B,KAAKsa,UAEb,CAEAzE,iBAAAA,GACI,OAAI7V,KAAKkC,MAAMwG,QAEPzW,EAAAA,EAAAA,KAAC2pC,EAAAA,MAAW,CACR7tC,KAAMiS,KAAKkC,MAAMwG,OACjBvD,QAASA,IAAMnF,KAAKmC,SAAS,CAAEuG,OAAQ,OAI5C,IACX,CAEA8O,mBAAAA,GACI,OAAIxX,KAAKkC,MAAMw5B,UAEPzpC,EAAAA,EAAAA,KAAC4pC,EAAAA,QAAa,CACV9tC,KAAMiS,KAAKkC,MAAMw5B,SACjBv2B,QAASA,IAAMnF,KAAKmC,SAAS,CAAEu5B,SAAU,OAI9C,IACX,CAEAphB,QAAAA,GACIta,KAAKwB,MAAMiM,kBAAiB,GAC5BzN,KAAKmC,SAAS,CAAEmT,SAAS,IAEzB,MAAMwmB,EAAU,GAAGntC,OAAO8D,SAASm0B,aAAaj4B,OAAO8D,SAASo0B,OAAOl4B,OAAO8D,SAASC,SAASxD,QAAQ,iBAAkB,MACpH6sC,EAAY,GAAGptC,OAAO8D,SAASm0B,aAAa5mB,KAAKkC,MAAM4uB,SAAS/jC,MAAM,KAAKiF,OAAS,EAAI,IAAIgO,KAAKkC,MAAM4uB,YAAc9wB,KAAKkC,MAAM4uB,WAAWniC,OAAO8D,SAASC,SAASxD,QAAQ,iBAAkB,MAEpM,IAuBImqB,EAvBArX,EAA4BhC,KAAKwB,MAAMkB,OAAOV,KAClD,QAAazQ,IAATyQ,GAAsBhC,KAAKwB,MAAMkB,OAAOkB,SAAU,CAClD,MAAMC,EAAU7D,KAAK8D,WAAW9D,KAAKwB,MAAMkB,OAAOkB,SAAU,CACxDk4B,UACAC,eACG/7B,KAAKwB,MAAMQ,OAGlB,IACIA,EAAO7R,KAAKC,MAAMyT,EACtB,CAAE,MACE/K,QAAQmG,MAAM,2BAA2B4E,IAC7C,CACJ,MACatS,IAATyQ,IACAA,EAAO,MAEPhC,KAAKwB,MAAMkB,OAAOu4B,UAAYj5B,IAC9BA,EAAO,CACH85B,UACAC,cAIJ/7B,KAAKwB,MAAMkB,OAAO2W,UAClBA,EAAU/V,YACN,KACItD,KAAKwB,MAAMiM,kBAAiB,GAC5BzN,KAAKmC,SAAS,CAAEuG,OAAQ1a,EAAAA,KAAKC,EAAE,wBAAyBqnB,SAAS,GAAQ,GAE7EliB,SAAS4M,KAAKwB,MAAMkB,OAAO2W,QAA0B,KAAO,MAI/DrZ,KAAKwB,MAAMuC,OACXL,OAAO,GAAG1D,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAAYjE,KAAKwB,MAAMkB,OAAO0O,SAAW,OAAQpP,GAChGxC,MAAK0a,UAKF,GAJIb,IACAhV,aAAagV,GACbA,OAAU9nB,GAEF,OAARkO,QAAQ,IAARA,GAAAA,EAAUR,MACV,GAAIe,KAAKwB,MAAMkB,OAAOzD,OAASe,KAAKwB,MAAMkB,OAAOzD,MAAMQ,EAASR,OAAQ,CACpE,IAAIA,EAAQe,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOzD,MAAMQ,EAASR,QACtDQ,EAASoB,MACTpB,EAASoB,KAAKjF,SAASogC,GAAiB/8B,EAAQA,EAAM/P,QAAQ,KAAM8sC,KAExEh8B,KAAKmC,SAAS,CAAEuG,OAAQzJ,GAC5B,MACIe,KAAKmC,SAAS,CAAEuG,OAAQjJ,EAASR,MAAQjR,EAAAA,KAAKC,EAAEwR,EAASR,OAASjR,EAAAA,KAAKC,EAAE,kBAE1E,CACH,GAAY,OAARwR,QAAQ,IAARA,GAAAA,EAAU2R,QAKV,YAHIpR,KAAKwB,MAAMoM,kBACX5N,KAAKwB,MAAMoM,iBAAiBnO,EAAS2R,UAI7C,GAAY,OAAR3R,QAAQ,IAARA,GAAAA,EAAUw8B,eAAiBj8B,KAAKwB,MAAMkB,OAAOu5B,cAC7CttC,OAAO8D,SAASypC,cACb,GAAY,OAARz8B,QAAQ,IAARA,GAAAA,EAAUw7B,SAAWj7B,KAAKwB,MAAMkB,OAAOu4B,QAC9CtsC,OAAOwO,KAAKsC,EAASw7B,QAASx7B,EAAS9Q,QAAUqR,KAAKwB,MAAMkB,OAAO/T,QAAU,eAC1E,GACK,OAAR8Q,QAAQ,IAARA,GAAAA,EAAU3O,QACVkP,KAAKwB,MAAMkB,OAAO5R,QAClBkP,KAAKwB,MAAMkB,OAAO5R,OAAO2O,EAAS3O,QACpC,CACE,IAAI/C,EAAOiS,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO5R,OAAO2O,EAAS3O,SACtD2O,EAASoB,MACTpB,EAASoB,KAAKjF,SAASogC,GAAiBjuC,EAAOA,EAAKmB,QAAQ,KAAM8sC,KAEtErtC,OAAO0rB,MAAMtsB,EACjB,CAEA,GAAY,OAAR0R,QAAQ,IAARA,GAAAA,EAAU7I,QAAUoJ,KAAKwB,MAAMkB,OAAOy5B,UAAW,CACjD,IAAK,MAAO3tC,EAAM8Y,KAAQ1X,OAAOwsC,QAAQ38B,EAAS7I,cACxCoJ,KAAK8G,cAActY,EAAM8Y,GAGnChE,YAAW,IAAMtD,KAAKwB,MAAMY,YAAYxS,OAAOyQ,KAAKZ,EAAS7I,QAASoJ,KAAKwB,MAAMQ,OAAO,IAC5F,MAAmB,OAARvC,QAAQ,IAARA,GAAAA,EAAU3O,OACjBnC,OAAO0rB,MACwB,kBAApB5a,EAAS3O,OAAsBX,KAAKE,UAAUoP,EAAS3O,QAAU2O,EAAS3O,QAGrFnC,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAE,UAGZ,OAARwR,QAAQ,IAARA,GAAAA,EAAU48B,YACVr8B,KAAKwB,MAAM+B,SAAS,KAAM,KAAM,MAAM,EAE9C,KAEH0D,OAAOvP,IACAsI,KAAKwB,MAAMkB,OAAOzD,OAASe,KAAKwB,MAAMkB,OAAOzD,MAAMvH,EAAEzI,YACrD+Q,KAAKmC,SAAS,CAAEuG,OAAQ1I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOzD,MAAMvH,EAAEzI,eAE/D+Q,KAAKmC,SAAS,CAAEuG,OAAQ1a,EAAAA,KAAKC,EAAEyJ,EAAEzI,aAAejB,EAAAA,KAAKC,EAAE,aAC3D,IAEHuR,MAAK,KACFQ,KAAKwB,MAAMiM,kBAAiB,GAC5BzN,KAAKmC,SAAS,CAAEmT,SAAS,GAAQ,GAE7C,CAEA3Q,mBAAAA,GACI,IAAK3E,KAAKkC,MAAMG,cACZ,OAAO,KAEX,MAAMuC,EAAU5E,KAAKkC,MAAMM,aAAexC,KAAKwB,MAAMkB,OAAOkC,QAC5D,IAAInT,EAAO,KASX,MARqB,YAAjBmT,EAAQ1F,KACRzN,GAAOQ,EAAAA,EAAAA,KAAC4S,EAAAA,QAAW,IACK,UAAjBD,EAAQ1F,KACfzN,GAAOQ,EAAAA,EAAAA,KAAC6S,EAAAA,MAAS,IACO,SAAjBF,EAAQ1F,OACfzN,GAAOQ,EAAAA,EAAAA,KAAC8S,EAAAA,KAAQ,MAIhB9S,EAAAA,EAAAA,KAACqqC,EAAAA,QAAa,CACV5mC,MAAOsK,KAAKuE,QAAQK,EAAQlP,QAAU1H,EAAAA,KAAKC,EAAE,qBAC7CF,KAAMiS,KAAKuE,QAAQK,EAAQ7W,MAC3BkX,GAAIjF,KAAKuE,QAAQK,EAAQK,KAAOjX,EAAAA,KAAKC,EAAE,SACvCiX,OAAQlF,KAAKuE,QAAQK,EAAQM,SAAWlX,EAAAA,KAAKC,EAAE,aAC/CwD,KAAMA,QAAQF,EACd4T,QAASC,GAAQpF,KAAKmC,SAAS,CAAEE,eAAe,IAAS,IAAM+C,GAAQpF,KAAKsa,cAGxF,CAEA7R,UAAAA,CAAWxJ,EAA0BsJ,GACjC,MAAM9W,EAAOuO,KAAKlO,UAElB,OACIsY,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOC,UAAUvZ,SAAA,EACzBkY,EAAAA,EAAAA,MAACW,EAAAA,OAAM,CACHC,QAAShL,KAAKwB,MAAMkB,OAAOsI,cAAWzZ,EACtCG,MAAOsO,KAAKwB,MAAMkB,OAAOhR,OAAS,OAClCK,MAAO,IAAKyZ,GAAOC,aAAezL,KAAKwB,MAAMkB,OAAO65B,mBAAgBhrC,GACpEgX,SAAUA,IAAavI,KAAKwB,MAAMmC,MAClC2T,UAAW7lB,EACXiE,MACIsK,KAAKwB,MAAMmC,MACL3D,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOhN,QAAU,GACzC1H,EAAAA,KAAKC,EAAE,4BAEjBgd,QAASA,KACDjL,KAAKwB,MAAMkB,OAAOkC,QAClB5E,KAAKmC,SAAS,CAAEE,eAAe,IAE/BrC,KAAKsa,UACT,EACFpoB,SAAA,CAED8N,KAAKwB,MAAMkB,OAAO85B,aAAex8B,KAAKkC,MAAMoT,SACzCrjB,EAAAA,EAAAA,KAACyoB,EAAAA,iBAAgB,CACbhR,KAAM,GACN3X,MAAO,CAAEkhB,YAAa,KAE1B,KACHjT,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,MAAO7I,KAAKwB,MAAMkB,OAAO8B,kBAE5DxE,KAAK6V,oBACL7V,KAAKwX,wBAGlB,GCzXEhM,GAA8C,CAChDC,UAAW,CACP7E,MAAO,QAEXnV,KAAM,CACFmV,MAAO,GACPC,OAAQ,GACRoM,YAAa,IA2FrB,SAnFA,cAA6B5R,EACzB,cAAMiZ,GACF,IAAIhT,EAAMtH,KAAKwB,MAAMkB,OAAO4E,IAC5B,GAAmB,kBAARA,GAAoBA,EAAIvQ,SAAS,MAAO,CAAC,IAADZ,EAAA6I,EAC/CsI,EAAMtH,KAAK8D,WAAWwD,GACtB,MAAM/X,QAAYyQ,KAAKwB,MAAMuC,OAAO0P,UAAUzT,KAAKwB,MAAMkB,OAAOtU,IACtC,YAAnB,OAAHmB,QAAG,IAAHA,GAAW,QAAR4G,EAAH5G,EAAKb,cAAM,IAAAyH,OAAR,EAAHA,EAAa+I,MACboI,EAAMhU,WAAWgU,GACY,aAAnB,OAAH/X,QAAG,IAAHA,GAAW,QAARyP,EAAHzP,EAAKb,cAAM,IAAAsQ,OAAR,EAAHA,EAAaE,QAEpBoI,EAAc,SAARA,IAA0B,IAARA,GAAwB,MAARA,GAAuB,IAARA,EAE/D,CAEA,MAAMlZ,GAAM4R,KAAKwB,MAAMkB,OAAOtU,IAAM,IAAIc,QAAQ,eAAgB8Q,KAAKwB,MAAMyC,UAAY,GAAGhV,YAE1F,UACU+Q,KAAKwB,MAAMuC,OAAO5B,SAAS/T,EAAI,CAAEkZ,MAAKm1B,MAAOz8B,KAAKwB,MAAMkB,OAAO+5B,MACjEz8B,KAAKwB,MAAMkB,OAAOg6B,QAClB/tC,OAAO0rB,MAAMra,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOg6B,QAEpD,CAAE,MAAOhlC,GACDsI,KAAKwB,MAAMkB,OAAOzD,OAASe,KAAKwB,MAAMkB,OAAOzD,MAAMvH,EAAEzI,YACrDN,OAAO0rB,MAAMra,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOzD,MAAMvH,EAAEzI,cAEpDN,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAEyJ,EAAEzI,aAAejB,EAAAA,KAAKC,EAAE,YAEpD,CACJ,CAEA0W,mBAAAA,GACI,IAAK3E,KAAKkC,MAAMG,cACZ,OAAO,KAEX,MAAMuC,EAAU5E,KAAKkC,MAAMM,aAAexC,KAAKwB,MAAMkB,OAAOkC,QAC5D,IAAInT,EAAO,KASX,MARqB,YAAjBmT,EAAQ1F,KACRzN,GAAOQ,EAAAA,EAAAA,KAAC4S,EAAAA,QAAW,IACK,UAAjBD,EAAQ1F,KACfzN,GAAOQ,EAAAA,EAAAA,KAAC6S,EAAAA,MAAS,IACO,SAAjBF,EAAQ1F,OACfzN,GAAOQ,EAAAA,EAAAA,KAAC8S,EAAAA,KAAQ,MAIhB9S,EAAAA,EAAAA,KAAC+S,EAAAA,QAAa,CACVtP,MAAOsK,KAAKuE,QAAQK,EAAQlP,QAAU1H,EAAAA,KAAKC,EAAE,qBAC7CF,KAAMiS,KAAKuE,QAAQK,EAAQ7W,MAC3BkX,GAAIjF,KAAKuE,QAAQK,EAAQK,KAAOjX,EAAAA,KAAKC,EAAE,SACvCiX,OAAQlF,KAAKuE,QAAQK,EAAQM,SAAWlX,EAAAA,KAAKC,EAAE,aAC/CwD,KAAMA,EACN0T,QAASC,GAAQpF,KAAKmC,SAAS,CAAEE,eAAe,IAAS,IAAM+C,GAAQpF,KAAKsa,cAGxF,CAEA7R,UAAAA,CAAWC,EAAgBH,GACvB,OACI6B,EAAAA,EAAAA,MAACW,EAAAA,OAAM,CACHC,QAAShL,KAAKwB,MAAMkB,OAAOsI,cAAWzZ,EACtCG,MAAOsO,KAAKwB,MAAMkB,OAAOhR,OAAS,OAClCK,MAAOyZ,GAAOC,UACdlD,SAAUA,EACV0C,QAASiP,UACDla,KAAKwB,MAAMkB,OAAOkC,QAClB5E,KAAKmC,SAAS,CAAEE,eAAe,UAEzBrC,KAAKsa,UACf,EACFpoB,SAAA,CAED8N,KAAKwB,MAAMkB,OAAOjR,MACfQ,EAAAA,EAAAA,KAAC0U,EAAAA,KAAI,CACDtU,IAAK2N,KAAKwB,MAAMkB,OAAOjR,KACvBM,MAAOyZ,GAAO/Z,OAElB,KACHuO,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,MAAO7I,KAAKwB,MAAMkB,OAAO8B,iBAGrE,GClGEgH,GAA8C,CAChDC,UAAW,CACP7E,MAAO,QAEX+1B,OAAQ,CACJxvB,WAAY,GACZ8F,YAAa,GACbrM,MAAO,sBAqFf,SAzEA,cAA2BvF,EACvB8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAM4rB,EAAS1tB,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAClEwR,KAAKmC,SAAS,CAAE4sB,UACpB,CAEA,+BAAOjN,CACHtgB,EACAU,GAEA,QAC0B3Q,IAArBiQ,EAAMkB,OAAOy0B,KAAqB31B,EAAMkB,OAAOy0B,IAAM,QAChC5lC,IAArBiQ,EAAMkB,OAAOgP,KAAqBlQ,EAAMkB,OAAOgP,IAAM,EAEtD,OAAO,KAEX,MAAMqd,EAAS1tB,EAAcY,SAAST,EAAMQ,KAAMR,EAAMhT,MACxD,OACe,OAAXugC,QACWx9B,IAAXw9B,GACAA,EAAO9/B,aAAeqE,WAAW4O,EAAM6sB,QAAyB9/B,WAEzD,CAAE8/B,UAGN,IACX,CAEAtmB,UAAAA,CAAWxJ,EAAesJ,GACtB,MAAM4uB,EAAMn3B,KAAKwB,MAAMkB,OAAOy0B,KAAO,EAC/BzlB,EAAM1R,KAAKwB,MAAMkB,OAAOgP,KAAO,IAC/BkrB,EAAO58B,KAAKwB,MAAMkB,OAAOk6B,MAAQ,GAEjCC,EAAQ,CACV,CAAE19B,MAAOg4B,EAAKtuB,MAAOsuB,EAAMyF,GAC3B,CAAEz9B,MAAOuS,EAAK7I,MAAO6I,EAAMkrB,IAG/B,OACIxyB,EAAAA,EAAAA,MAACuN,EAAAA,IAAG,CAAC5lB,MAAOyZ,GAAOC,UAAUvZ,SAAA,CACxB8N,KAAKwB,MAAMkB,OAAOmG,OACf5W,EAAAA,EAAAA,KAACoc,EAAAA,WAAU,CAACyuB,cAAY,EAAA5qC,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SACzD,MACJ5W,EAAAA,EAAAA,KAAC8qC,EAAAA,OAAM,CACHhrC,MAAOyZ,GAAOmxB,OACdx9B,MAAOa,KAAKkC,MAAM6sB,OAClBiO,iBAAkB79B,GAASA,EAAQy9B,EACnClF,KAAM13B,KAAKwB,MAAMkB,OAAOg1B,OAAShmB,EAAMylB,GAAO,IAC9C8F,kBAAkB,OAClBJ,MAAOA,EACP1F,IAAKA,EACLzlB,IAAKA,EACLnJ,WAAYA,EACZhF,SAAU7L,IACN,MAAMq3B,EAAUr3B,EAAElC,OAA4B2J,MAC9Ca,KAAKmC,SAAS,CAAE4sB,WAAU,IAAM/uB,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMugC,IAAQ,IAG9E/uB,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAACoc,EAAAA,WAAU,CAAAnc,SACN8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCnEW,SAAS04B,GAAcpwC,EAAciF,GAChD,MAAa,SAATjF,GAA4B,WAATA,GACZmF,EAAAA,EAAAA,KAACkrC,EAAAA,KAAI,CAACprC,MAAOA,IAEX,WAATjF,GACOmF,EAAAA,EAAAA,KAACmrC,EAAAA,OAAM,CAACrrC,MAAOA,IAEb,YAATjF,GACOmF,EAAAA,EAAAA,KAACorC,EAAAA,QAAO,CAACtrC,MAAOA,IAEd,cAATjF,GAAiC,QAATA,GAA2B,QAATA,GACnCmF,EAAAA,EAAAA,KAACqrC,EAAAA,IAAG,CAACvrC,MAAOA,IAEV,aAATjF,GAAgC,WAATA,GAChBmF,EAAAA,EAAAA,KAACsrC,EAAAA,OAAM,CAACxrC,MAAOA,IAEb,iBAATjF,GAAoC,WAATA,GACpBmF,EAAAA,EAAAA,KAACurC,EAAAA,QAAO,CAACzrC,MAAOA,IAEd,eAATjF,GAAkC,SAATA,GAClBmF,EAAAA,EAAAA,KAACsU,EAAAA,KAAQ,CAACxU,MAAOA,IAEf,aAATjF,GACOmF,EAAAA,EAAAA,KAACwrC,EAAAA,kBAAiB,CAAC1rC,MAAOA,IAExB,SAATjF,GACOmF,EAAAA,EAAAA,KAACyrC,EAAAA,UAAS,CAAC3rC,MAAOA,IAEhB,SAATjF,GACOmF,EAAAA,EAAAA,KAAC0rC,EAAAA,KAAI,CAAC5rC,MAAOA,IAEX,UAATjF,GACOmF,EAAAA,EAAAA,KAAC2rC,EAAAA,MAAK,CAAC7rC,MAAOA,IAEZ,YAATjF,GAA+B,SAATA,GACfmF,EAAAA,EAAAA,KAAC4rC,EAAAA,YAAW,CAAC9rC,MAAOA,IAElB,WAATjF,GAA8B,aAATA,GACdmF,EAAAA,EAAAA,KAAC6rC,EAAAA,WAAU,CAAC/rC,MAAOA,IAEjB,SAATjF,GAA4B,UAATA,GACZmF,EAAAA,EAAAA,KAAC8rC,EAAAA,UAAS,CAAChsC,MAAOA,IAEhB,cAATjF,GACOmF,EAAAA,EAAAA,KAAC+rC,EAAAA,YAAW,CAACjsC,MAAOA,IAElB,WAATjF,GACOmF,EAAAA,EAAAA,KAACgsC,EAAAA,eAAc,CAAClsC,MAAOA,IAErB,WAATjF,GACOmF,EAAAA,EAAAA,KAACisC,EAAAA,MAAK,CAACnsC,MAAOA,IAEZ,aAATjF,GACOmF,EAAAA,EAAAA,KAACksC,EAAAA,SAAQ,CAACpsC,MAAOA,IAEf,UAATjF,GAA6B,UAATA,GACbmF,EAAAA,EAAAA,KAACmsC,EAAAA,MAAK,CAACrsC,MAAOA,IAEZ,SAATjF,GACOmF,EAAAA,EAAAA,KAACosC,EAAAA,OAAM,CAACtsC,MAAOA,IAEb,WAATjF,GACOmF,EAAAA,EAAAA,KAACqsC,EAAAA,OAAM,CAACvsC,MAAOA,IAEb,eAATjF,GACOmF,EAAAA,EAAAA,KAACssC,EAAAA,KAAI,CAACxsC,MAAOA,IAEX,kBAATjF,GACOmF,EAAAA,EAAAA,KAACusC,EAAAA,QAAO,CAACzsC,MAAOA,IAEd,YAATjF,GACOmF,EAAAA,EAAAA,KAAC+mC,EAAAA,WAAU,CAACjnC,MAAOA,IAEvB,IACX,CCgXA,SAncA,cAA0BsP,EAAkDE,WAAAA,GAAA,SAAA7G,WAAA,KACxE+jC,eAAuD,KAAK,KAE5DC,cAA0G,CACtGC,MAAO,KACPx/B,MAAO,MACT,KAqCFy/B,eAAiB,CAACnvC,EAAayS,KAC3B,IAAIoF,EAAMpF,EAAQA,EAAMoF,IAAM,KACC,WAA3BtH,KAAKkC,MAAM28B,aAAuD,WAA3B7+B,KAAKkC,MAAM28B,aAClDv3B,IAAQA,EACJtH,KAAKkC,MAAM48B,aAAex3B,GAC1BtH,KAAKmC,SAAS,CAAE28B,WAAYx3B,KAEjB,OAARA,GAA4C,WAA3BtH,KAAKkC,MAAM28B,aAAuD,WAA3B7+B,KAAKkC,MAAM28B,YAgBnE7+B,KAAKkC,MAAM48B,WAAW7vC,aAAeqY,EAAIrY,YAChD+Q,KAAKmC,SAAS,CAAE28B,WAAYx3B,KAhB5BA,EAAMhU,WAAWgU,GACjBxO,QAAQwQ,IAAI,GAAG3U,KAAKR,6BAA6BmT,KAC7CA,IAAQtH,KAAKkC,MAAM48B,YACf9+B,KAAK0+B,cAAcC,QACnBt6B,aAAarE,KAAK0+B,cAAcC,OAChC3+B,KAAK0+B,cAAcC,MAAQ,MAE/B3+B,KAAK0+B,cAAcv/B,MAAQmI,EAC3BtH,KAAK0+B,cAAcC,MAAQr7B,YAAW,KAClCtD,KAAKmC,SAAS,CAAE28B,WAAY9+B,KAAK0+B,cAAcv/B,OAAQ,GACxD,MACIa,KAAK0+B,cAAcC,QAC1Bt6B,aAAarE,KAAK0+B,cAAcC,OAChC3+B,KAAK0+B,cAAcC,MAAQ,MAInC,CACF,CA7DFI,WAAAA,GACI,MAAO,GAAG/+B,KAAKwB,MAAMkB,OAAOgzB,OAAS,kBAAoB,KAAK11B,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,YAAYjE,KAAKwB,MAAMkB,OAAOs8B,KACrI,CAEA,uBAAM77B,GACF1B,MAAM0B,oBACN,MAAM5T,QAAmCyQ,KAAKwB,MAAMuC,OAAO0P,UACvDzT,KAAK++B,eAEHF,EAAc7+B,KAAKwB,MAAMkB,OAAOmY,SAAW7a,KAAKi/B,WAAW1vC,GAE3D2S,QAAclC,KAAKwB,MAAMuC,OAAOgM,SAAS/P,KAAK++B,eAEpD/+B,KAAKmC,SAAS,CAAE28B,WAAY58B,EAAQA,EAAMoF,IAAM,KAAMu3B,cAAatvC,QAAO2qB,gBAChEla,KAAKwB,MAAMuC,OAAOm7B,eAAel/B,KAAK++B,cAAe/+B,KAAK4+B,eAAe,GAEvF,CAEAx6B,oBAAAA,GACI3C,MAAM2C,uBACNpE,KAAKwB,MAAMuC,OAAOo7B,iBAAiBn/B,KAAK++B,cAAe/+B,KAAK4+B,gBACxD5+B,KAAK0+B,cAAcC,QACnBt6B,aAAarE,KAAK0+B,cAAcC,OAChC3+B,KAAK0+B,cAAcC,MAAQ,MAG3B3+B,KAAKy+B,iBACLp6B,aAAarE,KAAKy+B,gBAClBz+B,KAAKy+B,eAAiB,KACtBz+B,KAAKwB,MAAMuC,OACN5B,SAASnC,KAAK++B,cAAe/+B,KAAKkC,MAAM48B,YAAY,GACpD73B,OAAMvP,GAAKoB,QAAQmG,MAAM,yBAAyBvH,OAE/D,CA8BAunC,UAAAA,CAAW1vC,GAKP,IAJAA,EAAMA,GAAQ,CAAC,GACXb,OAASa,EAAIb,QAAW,CAAC,EAGL,YAApBa,EAAIb,OAAOwQ,KAAoB,CAC/B,IAAqC,IAAjCc,KAAKwB,MAAMkB,OAAO08B,WAAsB,CACxC,IAAwB,IAApB7vC,EAAIb,OAAO2wC,OAAmD,IAAjCr/B,KAAKwB,MAAMkB,OAAO08B,WAC/C,MAAO,SAEX,GAAI7vC,EAAIb,OAAO4wC,QAA0C,IAAjCt/B,KAAKwB,MAAMkB,OAAO08B,WACtC,MAAO,QAEf,CAEA,MAAO,MACX,CAEA,MAAwB,WAApB7vC,EAAIb,OAAOwQ,OAAsD,IAAjCc,KAAKwB,MAAMkB,OAAO08B,WAC9C7vC,EAAIb,OAAO4wC,QAA0C,IAAjCt/B,KAAKwB,MAAMkB,OAAO08B,gBACf7tC,IAAnBhC,EAAIb,OAAOgjB,IACJ,SAEJ,QAEJ,OAGPniB,EAAIb,OAAO4wC,QAA0C,IAAjCt/B,KAAKwB,MAAMkB,OAAO08B,WAC/B,QAGJ,MACX,CAEA32B,UAAAA,GACI,IAAKzI,KAAKkC,MAAM3S,IACZ,OAAO,KAGX,IAAIumB,EAEJ,GAA+B,WAA3B9V,KAAKkC,MAAM28B,YAA0B,CACrC,IAAIptC,EAA2B,KAC3BuO,KAAKwB,MAAMkB,OAAO68B,aAClB9tC,EAAOyrC,GAAcl9B,KAAKwB,MAAMkB,OAAO68B,aAG3C,MAAMxxC,EACFiS,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO88B,UAAWx/B,KAAKwB,MAAMkB,OAAO8B,gBAC5DxE,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,MAAO7I,KAAKwB,MAAMkB,OAAO8B,eAExDsR,GADC/nB,GAAQ0D,GAELQ,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACPxc,MAAOiO,KAAKwB,MAAMkB,OAAO+8B,eACzBl3B,WAAYvI,KAAKwB,MAAMkB,OAAOuY,SAC9BhQ,QAASiP,UACDla,KAAKwB,MAAMkB,OAAOkC,QAClB5E,KAAKmC,SAAS,CACVE,eAAe,EACfI,gBAAiByX,UACTppB,SACMkP,KAAKwB,MAAMuC,OAAO5B,SAASnC,KAAK++B,eAAe,GAAM,EAC/D,UAIF/+B,KAAKwB,MAAMuC,OAAO5B,SAASnC,KAAK++B,eAAe,GAAM,EAC/D,EACF7sC,SAEDT,KAKLQ,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHC,QAAShL,KAAKwB,MAAMkB,OAAOsI,SAAW,YACtCsM,UAAW7lB,EACXM,MAAOiO,KAAKwB,MAAMkB,OAAO+8B,eACzBl3B,WAAYvI,KAAKwB,MAAMkB,OAAOuY,SAC9BhQ,QAASiP,UACDla,KAAKwB,MAAMkB,OAAOkC,QAClB5E,KAAKmC,SAAS,CACVE,eAAe,EACfI,gBAAiByX,UACTppB,SACMkP,KAAKwB,MAAMuC,OAAO5B,SAASnC,KAAK++B,eAAe,GAAM,EAC/D,UAIF/+B,KAAKwB,MAAMuC,OAAO5B,SAASnC,KAAK++B,eAAe,GAAM,EAC/D,EACF7sC,SAEDnE,GAAQiS,KAAK++B,cAAchyC,MAAM,KAAKmP,OAIvD,MAAO,GAA+B,WAA3B8D,KAAKkC,MAAM28B,YAA0B,CAC5C,IAAIa,EAAgC,KACpC,MAAMC,EAAY3/B,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO88B,UAAWx/B,KAAKwB,MAAMkB,OAAO8B,eAC1ExE,KAAKwB,MAAMkB,OAAO68B,aAClBG,EAAYxC,GAAcl9B,KAAKwB,MAAMkB,OAAO68B,WAAYI,EAAY,CAAExyB,WAAY,QAAM5b,IAE5F,IAAIquC,EAA+B,KACnC,MAAMC,EAAW7/B,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOo9B,SAAU9/B,KAAKwB,MAAMkB,OAAO8B,eACxExE,KAAKwB,MAAMkB,OAAOq9B,YAClBH,EAAW1C,GAAcl9B,KAAKwB,MAAMkB,OAAOq9B,UAAWF,EAAW,CAAE5sB,YAAa,QAAM1hB,IAG1FukB,GACI7jB,EAAAA,EAAAA,KAAC+tC,EAAAA,OAAM,CACHhlB,UAAWhb,KAAKkC,MAAM48B,WACtBv2B,WAAYvI,KAAKwB,MAAMkB,OAAOuY,SAC9B1X,SAAU2W,UACFla,KAAKwB,MAAMkB,OAAOkC,QAClB5E,KAAKmC,SAAS,CACVE,eAAe,EACfI,gBAAiByX,UACTppB,SACMkP,KAAKwB,MAAMuC,OAAO5B,SACpBnC,KAAK++B,eACJ/+B,KAAKkC,MAAM48B,YACZ,EAER,UAIF9+B,KAAKwB,MAAMuC,OAAO5B,SAASnC,KAAK++B,eAAgB/+B,KAAKkC,MAAM48B,YAAY,EACjF,KAKRa,GAAaD,GAAaG,GAAYD,KACtC9pB,GACI1L,EAAAA,EAAAA,MAAA,OAAKrY,MAAO,CAAEwM,QAAS,OAAQke,WAAY,SAAUoM,SAAU,IAAK32B,SAAA,EAChEkY,EAAAA,EAAAA,MAAA,QAAMrY,MAAOiO,KAAKwB,MAAMkB,OAAO+8B,eAAevtC,SAAA,CACzCytC,EACAD,KAEJ5pB,GACD1L,EAAAA,EAAAA,MAAA,QAAMrY,MAAOiO,KAAKwB,MAAMkB,OAAOu9B,cAAc/tC,SAAA,CACxC0tC,EACAC,SAMjB,MAAMh3B,EAAQ7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,MAAO7I,KAAKwB,MAAMkB,OAAO8B,eAClEqE,IACAiN,GACI1L,EAAAA,EAAAA,MAAA,OAAKrY,MAAO,CAAEwM,QAAS,OAAQke,WAAY,SAAUoM,SAAU,QAAS32B,SAAA,EACpED,EAAAA,EAAAA,KAAA,QAAMF,MAAO,CAAEkhB,YAAa,GAAI/gB,SAAE2W,IACjCiN,KAIjB,MAAO,GAA+B,WAA3B9V,KAAKkC,MAAM28B,YAA0B,CAC5C,IAAIa,EAAgC,KACpC,MAAMC,EAAY3/B,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO88B,UAAWx/B,KAAKwB,MAAMkB,OAAO8B,eAC1ExE,KAAKwB,MAAMkB,OAAO68B,aAClBG,EAAYxC,GAAcl9B,KAAKwB,MAAMkB,OAAO68B,WAAYI,EAAY,CAAExyB,WAAY,QAAM5b,IAE5F,IAAIquC,EAA+B,KACnC,MAAMC,EAAW7/B,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOo9B,SAAU9/B,KAAKwB,MAAMkB,OAAO8B,eACxExE,KAAKwB,MAAMkB,OAAOq9B,YAClBH,EAAW1C,GAAcl9B,KAAKwB,MAAMkB,OAAOq9B,UAAWF,EAAW,CAAE5sB,YAAa,QAAM1hB,IAG1F,MAAM4lC,OAAgC5lC,IAA1ByO,KAAKwB,MAAMkB,OAAOy0B,IAAoBn3B,KAAKkC,MAAM3S,IAAIb,OAAOyoC,KAAO,EAAIn3B,KAAKwB,MAAMkB,OAAOy0B,IAC/FzlB,OACwBngB,IAA1ByO,KAAKwB,MAAMkB,OAAOgP,SACkBngB,IAA9ByO,KAAKkC,MAAM3S,IAAIb,OAAOgjB,IAClB,IACA1R,KAAKkC,MAAM3S,IAAIb,OAAOgjB,IAC1B1R,KAAKwB,MAAMkB,OAAOgP,IACtBgmB,OACyBnmC,IAA3ByO,KAAKwB,MAAMkB,OAAOg1B,KAAqB13B,KAAKkC,MAAM3S,IAAIb,OAAOgpC,MAAQ,EAAI13B,KAAKwB,MAAMkB,OAAOg1B,KAE/F5hB,GACI7jB,EAAAA,EAAAA,KAAC8qC,EAAAA,OAAM,CACHhrC,MAAO,CAAE6U,MAAO,OAAQs5B,SAAU,GAClC/I,IAAKA,EACLzlB,IAAKA,EACLnJ,WAAYvI,KAAKwB,MAAMkB,OAAOuY,SAC9Byc,KAAMA,EACNv4B,MAAOa,KAAKkC,MAAM48B,WAClB7B,kBAAkB,OAClBkD,iBAAmBhhC,GACf,GAAGA,IAAQa,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOk6B,KAAM58B,KAAKwB,MAAMkB,OAAO8B,gBAAkBxE,KAAKkC,MAAM3S,IAAIb,OAAOkuC,MAAQ,KAEtHr5B,SAAUA,CAACoL,EAAWxP,KAClBa,KAAKmC,SAAS,CAAE28B,WAAY3/B,IAAS,KAC7Ba,KAAKy+B,gBACLp6B,aAAarE,KAAKy+B,gBAEtBz+B,KAAKy+B,eAAiBn7B,YAAW4W,UAC7BphB,QAAQwQ,IAAI,GAAG3U,KAAKR,yBAAyB6L,KAAKkC,MAAM48B,cACxD9+B,KAAKy+B,eAAiB,WAChBz+B,KAAKwB,MAAMuC,OAAO5B,SAASnC,KAAK++B,cAAe/+B,KAAKkC,MAAM48B,YAAY,EAAM,GACnF9+B,KAAKwB,MAAMkB,OAAO09B,cAAgB,EAAE,GACzC,KAKVT,GAAaD,GAAaG,GAAYD,KACtC9pB,GACI1L,EAAAA,EAAAA,MAAA,OACIrY,MAAO,CACHwM,QAAS,OACTqI,MAAO,OACPs5B,SAAU,EACVzjB,WAAY,UACdvqB,SAAA,EAEFkY,EAAAA,EAAAA,MAAA,QAAMrY,MAAO,CAAEkhB,YAAa,MAAOjT,KAAKwB,MAAMkB,OAAO+8B,gBAAiBvtC,SAAA,CACjEytC,EACAD,KAEJ5pB,GACD1L,EAAAA,EAAAA,MAAA,QAAMrY,MAAO,CAAEob,WAAY,MAAOnN,KAAKwB,MAAMkB,OAAOu9B,eAAgB/tC,SAAA,CAC/D0tC,EACAC,SAKjB,MAAMh3B,EAAQ7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,MAAO7I,KAAKwB,MAAMkB,OAAO8B,eAClEqE,IACAiN,GACI1L,EAAAA,EAAAA,MAAA,OAAKrY,MAAO,CAAEwM,QAAS,OAAQqI,MAAO,OAAQ6V,WAAY,UAAWvqB,SAAA,EACjED,EAAAA,EAAAA,KAAA,QAAMF,MAAO,CAAEoqB,WAAY,SAAUlJ,YAAa,EAAG4V,SAAU,QAAS32B,SAAE2W,IACzEiN,KAIjB,MAAO,GAA+B,UAA3B9V,KAAKkC,MAAM28B,YAClB/oB,GACI7jB,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN/e,MAAO,CAAE6U,MAAO,QAChBzH,MAAOa,KAAKkC,MAAM48B,WAClB9zB,QAAQ,WACRmE,UAAW,CACP6M,MAAO,CACHgI,aACIhkB,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOk6B,KAAM58B,KAAKwB,MAAMkB,OAAO8B,gBACvDxE,KAAKkC,MAAM3S,IAAIb,OAAOkuC,WACtBrrC,GAERigB,UAAW,CACPyJ,WAAYjb,KAAKwB,MAAMkB,OAAOuY,WAGtC1X,SAAU7L,IACNsI,KAAKmC,SAAS,CAAE28B,WAAYpnC,EAAElC,OAAO2J,QAAS,KACtCa,KAAKy+B,gBACLp6B,aAAarE,KAAKy+B,gBAEtBz+B,KAAKy+B,eAAiBn7B,YAAW4W,UAC7Bla,KAAKy+B,eAAiB,WAChBz+B,KAAKwB,MAAMuC,OAAO5B,SAASnC,KAAK++B,cAAe/+B,KAAKkC,MAAM48B,YAAY,EAAM,GACnF9+B,KAAKwB,MAAMkB,OAAO09B,cAAgB,EAAE,GACzC,EAENv3B,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,sBAI3B,GAAmC,WAA/BxE,KAAKkC,MAAM3S,IAAIb,OAAOwQ,KAAmB,CAChD,MAAMi4B,OAAgC5lC,IAA1ByO,KAAKwB,MAAMkB,OAAOy0B,IAAoBn3B,KAAKkC,MAAM3S,IAAIb,OAAOyoC,KAAO,EAAIn3B,KAAKwB,MAAMkB,OAAOy0B,IAC/FzlB,OACwBngB,IAA1ByO,KAAKwB,MAAMkB,OAAOgP,SACkBngB,IAA9ByO,KAAKkC,MAAM3S,IAAIb,OAAOgjB,IAClB,IACA1R,KAAKkC,MAAM3S,IAAIb,OAAOgjB,IAC1B1R,KAAKwB,MAAMkB,OAAOgP,IACtBgmB,OACyBnmC,IAA3ByO,KAAKwB,MAAMkB,OAAOg1B,KAAqB13B,KAAKkC,MAAM3S,IAAIb,OAAOgpC,MAAQ,EAAI13B,KAAKwB,MAAMkB,OAAOg1B,KAE/F5hB,GACI7jB,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRjZ,MAAO,CAAE6U,MAAO,QAChBzH,MAAOa,KAAKkC,MAAM48B,WAClB5/B,KAAK,SACLiQ,UAAW,CACPqC,UAAW,CAAE2lB,MAAKzlB,MAAKgmB,OAAMzc,WAAYjb,KAAKwB,MAAMkB,OAAOuY,UAC3De,MAAO,CACHgI,aACIhkB,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOk6B,KAAM58B,KAAKwB,MAAMkB,OAAO8B,gBACvDxE,KAAKkC,MAAM3S,IAAIb,OAAOkuC,WACtBrrC,IAGZgS,SAAU7L,IACNsI,KAAKmC,SAAS,CAAE28B,WAAYpnC,EAAElC,OAAO2J,QAAS,KACtCa,KAAKy+B,gBACLp6B,aAAarE,KAAKy+B,gBAEtBz+B,KAAKy+B,eAAiBn7B,YAAW4W,UAC7Bla,KAAKy+B,eAAiB,KACtB,MAAMn3B,EAAMhU,WAAW0M,KAAKkC,MAAM48B,kBAC5B9+B,KAAKwB,MAAMuC,OAAO5B,SAASnC,KAAK++B,cAAez3B,GAAK,EAAM,GACjEtH,KAAKwB,MAAMkB,OAAO09B,cAAgB,EAAE,GACzC,EAENv3B,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,gBAIlC,MAAO,GAAmC,YAA/BxE,KAAKkC,MAAM3S,IAAIb,OAAOwQ,KAAoB,CACjD,IACInR,EACAgE,EAFAN,EAA2B,KAG1BuO,KAAKkC,MAAM48B,YAOZ/wC,EAAOiS,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOo9B,SAAU9/B,KAAKwB,MAAMkB,OAAO8B,eAC9DxE,KAAKwB,MAAMkB,OAAOq9B,YAClBtuC,EAAOyrC,GAAcl9B,KAAKwB,MAAMkB,OAAO68B,WAAYxxC,EAAO,CAAEklB,YAAa,QAAM1hB,IAEnFQ,EAAQiO,KAAKwB,MAAMkB,OAAOu9B,gBAV1BlyC,EAAOiS,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO88B,UAAWx/B,KAAKwB,MAAMkB,OAAO8B,eAC/DxE,KAAKwB,MAAMkB,OAAO68B,aAClB9tC,EAAOyrC,GAAcl9B,KAAKwB,MAAMkB,OAAO68B,WAAYxxC,EAAO,CAAEof,WAAY,QAAM5b,IAElFQ,EAAQiO,KAAKwB,MAAMkB,OAAO+8B,gBAQ9B,MAAM52B,EAAQ7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,MAAO7I,KAAKwB,MAAMkB,OAAO8B,eACtEsR,GACI1L,EAAAA,EAAAA,MAAA,OAAKrY,MAAO,CAAE82B,SAAU,UAAW92B,GAAQG,SAAA,CACtC2W,EACAA,GAAQ5W,EAAAA,EAAAA,KAAA,QAAMF,MAAO,CAAEkhB,YAAa,GAAI/gB,SAAC,MAAW,KACpDT,EACA1D,IAASiS,KAAKkC,MAAM48B,WAAa9wC,EAAAA,KAAKC,EAAE,WAAaD,EAAAA,KAAKC,EAAE,eAGzE,KAAO,CAEH,MAAM4a,EAAQ7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,MAAO7I,KAAKwB,MAAMkB,OAAO8B,eAChEo4B,EACF58B,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOk6B,KAAM58B,KAAKwB,MAAMkB,OAAO8B,gBAAkBxE,KAAKkC,MAAM3S,IAAIb,OAAOkuC,KACnG,IAAIz9B,EAEAA,EAD2B,SAA3Ba,KAAKkC,MAAM28B,aACH5sC,EAAAA,EAAAA,KAAA,QAAMouC,wBAAyB,CAAEC,OAAQtgC,KAAKkC,MAAM48B,cAC3B,OAA1B9+B,KAAKkC,MAAM48B,WACV,YACyBvtC,IAA1ByO,KAAKkC,MAAM48B,WACV,YAEA9+B,KAAKkC,MAAM48B,WAGvBhpB,GACI1L,EAAAA,EAAAA,MAAA,OAAKrY,MAAO,CAAE82B,SAAU,QAAS32B,SAAA,CAC5B2W,EACAA,GAAQ5W,EAAAA,EAAAA,KAAA,QAAMF,MAAO,CAAEkhB,YAAa,GAAI/gB,SAAC,MAAW,KACpDiN,EACAy9B,GAAO3qC,EAAAA,EAAAA,KAAA,QAAMF,MAAO,CAAE+gB,QAAS,IAAM5gB,SAAE0qC,IAAe,OAGnE,CAEA,OAAO9mB,CACX,GC1cEtK,GAIF,CACAC,UAAY9K,IAAe,CACvBiG,MAAO,OACP+E,gBAAwC,SAAvBhL,EAAMiL,QAAQC,KAAkB,OAAS,OAC1D00B,YAAa,WAEjBpjB,QAAUxc,IAAe,CACrBgL,gBAAiBhL,EAAMiL,QAAQuR,QAAQc,OAE3CuiB,UAAY7/B,IAAe,CACvBgL,gBAAiBhL,EAAMiL,QAAQ40B,UAAUviB,QAiCjD,SAzBA,cAAkC5c,EAC9BoH,UAAAA,GACI,OACIxW,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,KACVS,GAAIniB,EAAM8T,SACNV,KAAKwB,MAAMb,MACX6K,GAAOC,UACqB,YAA5BzL,KAAKwB,MAAMkB,OAAOhR,MACZ8Z,GAAO2R,QACqB,cAA5Bnd,KAAKwB,MAAMkB,OAAOhR,MAChB8Z,GAAOg1B,UACP,CACI70B,gBACI3L,KAAKwB,MAAMkB,OAAOhR,QAAmC,SAAzBsO,KAAKwB,MAAMlJ,UAAuB,OAAS,SAEvF,CACIuO,OAAQ7G,KAAKwB,MAAMkB,OAAOhR,MAAQsO,KAAKwB,MAAMkB,OAAOmE,QAAU,EAAI7G,KAAKwB,MAAMkB,OAAOmE,QAAU,KAKlH,GC7CE2E,GAA8B,CAChClO,OAASqD,IAAe,CACpBiG,MAAO,OACP4hB,WAAY7nB,EAAMiL,QAAQuR,QAAQc,KAClCvsB,MAAOiP,EAAMiL,QAAQuR,QAAQsjB,aAC7B7sC,QAAS,iBACToY,aAAc,MACd00B,eAAgB,EAChBC,iBAAkB,KAiE1B,SAzDA,cAAiCt/B,EAC7BoH,UAAAA,GACI,QAASzI,KAAKwB,MAAMkB,OAAOgH,MAAQ,GAAGza,YAClC,IAAK,IACD,OACIgD,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,KACVS,GAAIvD,GAAOlO,OAAOpL,SAEjB8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO3U,KAAMiS,KAAKwB,MAAMkB,OAAO8B,iBAIpE,IAAK,IACD,OACIvS,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,KACVS,GAAIvD,GAAOlO,OAAOpL,SAEjB8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO3U,KAAMiS,KAAKwB,MAAMkB,OAAO8B,iBAIpE,IAAK,IACD,OACIvS,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,KACVS,GAAIvD,GAAOlO,OAAOpL,SAEjB8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO3U,KAAMiS,KAAKwB,MAAMkB,OAAO8B,iBAIpE,IAAK,IACD,OACIvS,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,KACVS,GAAIvD,GAAOlO,OAAOpL,SAEjB8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO3U,KAAMiS,KAAKwB,MAAMkB,OAAO8B,iBAKpE,QACI,OACIvS,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,KACVS,GAAIvD,GAAOlO,OAAOpL,SAEjB8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO3U,KAAMiS,KAAKwB,MAAMkB,OAAO8B,iBAI5E,GC1CJ,SA5BA,cAAgCnD,EAC5BoH,UAAAA,GACI,IAAIpW,EAAM2N,KAAKwB,MAAMkB,OAAOrQ,IAW5B,OATIA,GACCA,EAAIF,WAAW,MACfE,EAAIF,WAAW,SACfE,EAAIF,WAAW,WAAW6N,KAAKwB,MAAMwC,iBACrC3R,EAAIF,WAAW,aAAa6N,KAAKwB,MAAMwC,kBAExC3R,EAAM,WAAW2N,KAAKwB,MAAMwC,eAAe3R,MAI3CJ,EAAAA,EAAAA,KAAA,OACII,IAAKA,EACLN,MAAO,CAAE2qB,OAAQ1c,KAAKwB,MAAMkB,OAAOnN,KAAO,eAAYhE,EAAWqV,MAAO,OAAQC,OAAQ,QACxFoE,QACIjL,KAAKwB,MAAMkB,OAAOnN,KACZ,IAAMyK,KAAKwB,MAAMkB,OAAOnN,MAAQ5G,OAAOwO,KAAK6C,KAAKwB,MAAMkB,OAAOnN,KAAM,UACpE,KAEVnD,IAAI,IAGhB,GCzBEoZ,GAA8B,CAChCC,UAAW,CACP5E,OAAQ,OACRD,MAAO,QAEXmC,KAAOpI,IAAe,CAClBqI,eAAgB,YAChBtX,MAA8B,SAAvBiP,EAAMiL,QAAQC,KAAkB,UAAY,UACnD6Q,OAAQ,aAKhB,SAASkkB,GAAOrrC,EAAcC,EAAqCK,GAC/D,IAAIgrC,EACA3jC,EAAM,GACL3H,EAGMA,EAAKtG,WAAWkD,WAAW,MAG3BoD,EAAKtG,WAAWkD,WAAW,MAFlC0uC,EAAUrrC,GAAU,QACpB0H,EAAM3H,GAICA,EAAKpD,WAAW,YAAcoD,EAAKpD,WAAW,aACrD0uC,EAAUrrC,GAAU,SACpB0H,EAAM3H,IAEN2H,EAAM,yBAAyBrH,KAAcN,IAC7CsrC,EAAUrrC,GAAU,UAbpB0H,EAAM,yBAAyBrH,IAC/BgrC,EAAUrrC,GAAU,SAcR,UAAZqrC,EAEAv9B,YACKw9B,IACOA,EAAK3uC,WAAW,KAChBxD,OAAO8D,SAASsuC,KAAOD,EAChBA,EAAK3uC,WAAW,KACvB+K,EAAM,GAAGvO,OAAO8D,SAASm0B,YAAYj4B,OAAO8D,SAASo0B,OAAO3pB,KACrD4jC,EAAK3uC,WAAW,YAAc2uC,EAAK3uC,WAAW,eACrDxD,OAAO8D,SAAS8C,KAAOurC,EAC3B,GAEJ,IACA5jC,IAGAA,EAAI/K,WAAW,KACf+K,EAAM,GAAGvO,OAAO8D,SAASm0B,YAAYj4B,OAAO8D,SAASo0B,OAAOl4B,OAAO8D,SAASC,WAAWwK,IAChFA,EAAI/K,WAAW,OACtB+K,EAAM,GAAGvO,OAAO8D,SAASm0B,YAAYj4B,OAAO8D,SAASo0B,OAAO3pB,KAGhEvO,OAAOwO,KAAKD,EAAK2jC,GAEzB,CA4FA,SAtFA,cAA+Bx/B,EAC3BoH,UAAAA,CAAWC,EAAgBH,GACvB,GAAIvI,KAAKwB,MAAMkB,OAAOkI,OAAQ,CAC1B,MAAMnZ,EAAOuO,KAAKlO,UAClB,OACIG,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHC,QAAShL,KAAKwB,MAAMkB,OAAOsI,cAAWzZ,EACtCG,MAAOsO,KAAKwB,MAAMkB,OAAOhR,OAAS,OAClCK,MAAO,IAAKyZ,GAAOC,aAAezL,KAAKwB,MAAMkB,OAAO65B,mBAAgBhrC,GACpEgX,SAAUA,EACV+O,UAAW7lB,EACXwZ,QACIjL,KAAKwB,MAAMkB,OAAOnN,KACZ,KAEI,MAAMA,EAAOyK,KAAKwB,MAAMkB,OAAOnN,KACzByK,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOnN,MAAM,GACrC,KACFA,IACIyK,KAAKwB,MAAMoM,iBACX5N,KAAKwB,MAAMoM,iBAAiB,CACxBwD,QAAS,OACTlU,IAAK3H,EACLC,OAAQwK,KAAKwB,MAAMkB,OAAOlN,OAC1BwrC,MAAOhhC,KAAKwB,MAAMkB,OAAOs+B,QAG7BJ,GACIrrC,EACAyK,KAAKwB,MAAMkB,OAAOlN,OAClB,GAAGwK,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,YAGpD,EAEJ,KACT/R,SAEA8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAO3U,MAAQiS,KAAKwB,MAAMkB,OAAOmG,MAAO7I,KAAKwB,MAAMkB,OAAO8B,gBAG/F,CACA,IAAIzW,EAA6CiS,KAAKuE,QAClDvE,KAAKwB,MAAMkB,OAAO3U,MAAQiS,KAAKwB,MAAMkB,OAAOmG,MAC5C7I,KAAKwB,MAAMkB,OAAO8B,eAMtB,OAJIzW,IAASA,EAAKgJ,SAAS,QAAUhJ,EAAKgJ,SAAS,QAAUhJ,EAAKgJ,SAAS,QAAUhJ,EAAKgJ,SAAS,UAC/FhJ,EAAOnB,EAAAA,MAAMsI,gBAAgBnH,KAI7BkE,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,OACVvc,MAAO,IAAMiO,KAAKwB,MAAMkB,OAAO65B,mBAAgBhrC,GAC/Cwd,GAAI/O,KAAKwB,MAAMkB,OAAOnN,KAAOiW,GAAOzC,UAAOxX,EAC3C0Z,QACIjL,KAAKwB,MAAMkB,OAAOnN,KACZ,KAEI,MAAMA,EAAOyK,KAAKwB,MAAMkB,OAAOnN,KAAOyK,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOnN,MAAM,GAAQ,KAC/EA,IACIyK,KAAKwB,MAAMoM,iBACX5N,KAAKwB,MAAMoM,iBAAiB,CACxBwD,QAAS,OACTlU,IAAK3H,EACLC,OAAQwK,KAAKwB,MAAMkB,OAAOlN,QAAU,SACpCwrC,MAAOhhC,KAAKwB,MAAMkB,OAAOs+B,QAG7BJ,GACIrrC,EACAyK,KAAKwB,MAAMkB,OAAOlN,QAAU,SAC5B,GAAGwK,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,YAGpD,EAEJ,KACT/R,SAEAnE,GAGb,GC3GEkzC,GAAW,QAEXz1B,GAA8C,CAChDC,UAAW,CACP7E,MAAO,QAEX+U,KAAM,CACF/U,MAAO,QAEXs6B,MAAO,CACHt6B,MAAO,OACPoD,aAAc,GACd2B,gBAAiB,4BAErBw1B,WAAY,CACRv6B,MAAO,QAEXiH,MAAO,CACH8D,SAAU,KAEdyvB,eAAgB,CACZ1Y,OAAQ,EACR2Y,KAAM,gBACNx6B,OAAQ,EACRuX,QAAS,EACTlC,SAAU,SACVtoB,QAAS,EACT0pB,SAAU,WACVR,IAAK,GACLlW,MAAO,GAEXiC,MAAO,CACHtK,QAAS,OACTyqB,eAAgB,iBAWpBtzB,MAAO,CACHoV,KAAM,YAEV4E,SAAU,CACN4xB,YAAa,GACbC,aAAc,GAElBC,OAAQ,CACJ1uB,QAAS,IAEbhI,KAAM,CACFvM,QAAS,OACTke,WAAY,YAEhBglB,YAAa,CACT7tC,QAAS,GACT2K,QAAS,OACT0L,UAAW,UAEfqF,YAAa,CACT1I,MAAO,GACPrI,QAAS,gBAEbmjC,WAAY,CACRvlB,WAAY,UAGhB+L,SAAU,CACNthB,MAAO,OACPC,OAAQ,IACRyW,SAAU,YAEd6K,cAAe,CAAC,EAChBG,UAAW,CACPhL,SAAU,WACV1W,MAAO,OACP+V,UAAW,IACX7J,QAAS,GACT1F,UAAW,GACXsP,OAAQ,UACRilB,QAAS,QAEbpZ,kBAAmB,CACfzV,QAAS,EACT0V,WAAY,yBAEhBJ,MAAO,CACHC,UAAW,UACXjK,OAAQ,OACR7f,QAAS,OACTqI,MAAO,OACPC,OAAQ,QAEZ4hB,gBAAiB,CACbrK,OAAQ,EACRsK,OAAQ,kBACR1c,aAAc,EACdpF,MAAO,oBACPC,OAAQ,oBACR8V,UAAW,IACXW,SAAU,WACV/e,QAAS,QAEboqB,iBAAkB,CACd5M,WAAY,GACZnV,MAAO,GACPC,OAAQ,IAEZ+hB,iBAAkB,CACdC,SAAU,IAEdC,wBAAyB,CACrB7e,UAAW,SACXqT,SAAU,WACVR,IAAK,EACLO,OAAQ,EACRD,KAAM,EACNG,MAAO,EACPhf,QAAS,OACTwqB,cAAe,SACftM,WAAY,SACZuM,eAAgB,UAEpB4Y,oBAAqB,CACjBtkB,SAAU,WACVukB,OAAQ,IACRtkB,MAAO,GAEXte,MAAO,CACHypB,OAAQ,gBACR5M,UAAW,cAEfnR,QAAS,CACLsB,cAAe,SA2BvB,SAAS61B,GACLC,EACAC,EACAC,GAEAD,EAAkBA,GAAmB,MAErC,MAAMljC,EAA8B,CAAC,EAgBrC,OAdAijC,EAAMnmC,SAASsmC,IACX,IAAI/sC,EAAM+sC,EAAIF,GACF,OAAR7sC,QAAwB5D,IAAR4D,IAChBA,EAAM,WAEH+sC,EAAIF,GAGPljC,EAAO3J,GADP8sC,EACcC,EAAID,GAEJC,CAClB,IAGGpjC,CACX,CAqCA,MAAMqjC,WAAoB9gC,EAOtBE,WAAAA,CAAYC,GAA0B,IAAD4gC,EACjC3gC,MAAMD,GAAM4gC,EAAApiC,KAAC,KAPAqiC,gBAAU,OAEnBn2B,YAAoD,KAAK,KAEzDo2B,OAAiB,kBAAkB,KAwL3CC,kBAAoB,SAACC,GAAyD,IAAvCC,EAAmB/nC,UAAA1I,OAAA,QAAAT,IAAAmJ,UAAA,IAAAA,UAAA,GACtD,MAAM,MAAEpK,EAAK,QAAEoyC,GAAYN,EAAKlgC,MAChC,GAAIwgC,EAAS,CACT,MACMC,EAAWF,EAAanyC,EADhBoyC,IAAYF,GAAsB,QAAVlyC,EACQ,OAAS,MACjDyW,EAAWq7B,EAAKQ,WAAWD,EAAUH,GAC3CJ,EAAKjgC,SAAS,CAAE7R,MAAOqyC,EAAUD,QAASF,EAAUp2B,UAAWg2B,EAAKlgC,MAAMkK,UAAY,MAAS,IAC3Fg2B,EAAKS,aAAY,EAAO97B,IAEhC,CACJ,EAAE,KAEF67B,WAAa,CAACtyC,EAAuBoyC,KACjC,MAAM,MAAEvjC,GAAUa,KAAKkC,MACjB4gC,EAAaX,GAAYY,cAAczyC,EAAOoyC,GAC9CM,EAAiB7jC,EAAMjS,KAAI,CAACgR,EAAI7I,KAAK,CAAQ6I,KAAI7I,YAUvD,OARA2tC,EAAezR,MAAK,CAACl9B,EAAGpB,KACpB,MAAMgwC,EAASH,EAAWzuC,EAAE6J,GAAIjL,EAAEiL,IAClC,OAAe,IAAX+kC,EACOA,EAEJ5uC,EAAEgB,MAAQpC,EAAEoC,KAAK,IAGrB2tC,EAAe91C,KAAIgR,GAAMA,EAAGA,IAAG,EACxC,KAsKFiO,SAAY9W,GAAkB,KAC1B,MAAM0R,EAAkC5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QAC7E4H,EAAS7V,OAAOmE,EAAO,GAEvB2K,KAAKmC,SAAS,CAAEhD,MAAO4H,EAAUqF,UAAWpM,KAAKkC,MAAMkK,UAAY,MAAU,IACzEpM,KAAK6iC,aAAY,EAAO,MAAM,IAAM7iC,KAAKqM,gBAAgBtF,MAC5D,EACH,KA4FFuF,QAAWjX,GAAkB,KACzB,MAAM0R,EAAkC5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QACvEoN,EAA8Bpc,KAAKC,MAAMD,KAAKE,UAAU0W,EAAS1R,KACvE,GAAuC,kBAA5B2K,KAAKwB,MAAMkB,OAAO7D,OAAiE,kBAApC0N,EAAOvM,KAAKwB,MAAMkB,OAAO7D,OAAqB,CACpG,IAAI3E,EAAI,EACJnM,EAAOwe,EAAOvM,KAAKwB,MAAMkB,OAAO7D,OACpC,MAAMuK,EAAUrb,EAAK4E,MAAM,UAO3B,IANIyW,GACArb,EAAOA,EAAKmB,QAAQka,EAAQ,GAAI,IAChClP,EAAI9G,SAASgW,EAAQ,GAAI,IAAM,GAE/Brb,GAAQ,IAGRgZ,EAASxS,MACJ4C,GAA4BA,EAAG6I,KAAKwB,MAAMkB,OAAO7D,SAAqB9Q,EAAOmM,EAAEjL,cAGpFiL,IAEJqS,EAAOvM,KAAKwB,MAAMkB,OAAO7D,OAAS,GAAG0N,EAAOvM,KAAKwB,MAAMkB,OAAO7D,UAAU3E,GAC5E,CAEA6M,EAAS7V,OAAOmE,EAAO,EAAGkX,GAE1BvM,KAAKmC,SAAS,CAAEhD,MAAO4H,EAAUqF,UAAWpM,KAAKkC,MAAMkK,UAAY,MAAS,IACxEpM,KAAK6iC,aAAY,EAAO,MAAM,IAAM7iC,KAAKqM,gBAAgBtF,MAC5D,EACH,KAEFsF,gBAAkB,CAACtF,EAAiCm8B,KAC5CljC,KAAKkM,aACL7H,aAAarE,KAAKkM,aAGtBlM,KAAKkM,YAAc5I,YACf,CAACnE,EAAOgkC,KAGJ,IAAIn8B,EACJ,GAHAhH,KAAKkM,YAAc,KAGflM,KAAKwB,MAAMkB,OAAO0gC,oBAAqB,CACvC,MAAMrU,EAAS5+B,KAAKC,MAAMD,KAAKE,UAAU8O,IASzC,GARA4vB,EAAOnzB,SAASsC,IACZ8B,KAAKwB,MAAMkB,OAAO0gC,oBAAoBxnC,SAASpN,IACvC0P,EAAG1P,KACH0P,EAAG1P,GA5hBnC,SAAiB8zC,EAAgBnjC,GAC7B,IAAIrO,EAAS,GACb,IAAK,IAAIoJ,EAAI,EAAGA,EAAIiF,EAAMnN,OAAQkI,IAC9BpJ,GAAUo6B,OAAOC,aAAamX,EAAOpoC,EAAIooC,EAAOtwC,QAAQimB,WAAW,GAAK9Y,EAAM8Y,WAAW/d,IAE7F,OAAOpJ,CACX,CAshB2CuyC,CAAQrjC,KAAKsiC,OAAQpkC,EAAG1P,IACvC,GACF,IAGFwR,KAAKwB,MAAMkB,OAAO4gC,WAAY,CAC9B,MAAMC,EAAWzB,GACb/S,EACA/uB,KAAKwB,MAAMkB,OAAO4gC,WAClBtjC,KAAKwB,MAAMkB,OAAO8gC,cAEtBx8B,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM+0C,EAClD,MACIv8B,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMugC,EAEtD,MAAO,GAAI/uB,KAAKwB,MAAMkB,OAAO4gC,WAAY,CACrC,MAAMC,EAAWzB,GACb3xC,KAAKC,MAAMD,KAAKE,UAAU8O,IAC1Ba,KAAKwB,MAAMkB,OAAO4gC,WAClBtjC,KAAKwB,MAAMkB,OAAO8gC,cAEtBx8B,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM+0C,EAClD,MACIv8B,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM2Q,GAE9C6H,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,gBAAgBvH,OAEtDyrC,IACAnjC,KAAK6iC,aAAY,EAAO1jC,GACxBa,KAAKuiC,kBAAkBviC,KAAKkC,MAAMwgC,SAAS,GAC/C,GAEJ,IACA37B,EACAm8B,EACH,EACH,KAEFx2B,MAAQ,KAAa,IAAD+2B,EAChB,MAAM,OAAE/gC,GAAW1C,KAAKwB,MAClBuF,EAAkC5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QACvEwN,EAAsB,QAAf82B,EAAG/gC,EAAOkK,aAAK,IAAA62B,OAAA,EAAZA,EAAc52B,QAC1B,CAACC,EAAkCC,KAC/B,IAAIja,EA6BJ,OA1BQA,EAFJia,EAAapK,YACT3C,KAAKwB,MAAMxR,OACI+c,EAAapK,YACtB3C,KAAK4C,cACDmK,EAAapK,YACb3C,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACXiE,EAAS/U,OACTgO,KAAKwB,MAAMQ,MAEfhC,KAAKwB,MAAMkB,OAAOO,QAET8J,EAAapK,YACtB3C,KAAKkD,QACD6J,EAAapK,YACb3C,KAAKwB,MAAMkB,OAAOO,QAClBjD,KAAKwB,MAAMQ,KACX+E,EAAS/U,OACTgO,KAAKwB,MAAMQ,MAEfhC,KAAKwB,MAAMkB,OAAOO,aAGY1R,IAAzBwb,EAAa9J,QAAwB,KAAO8J,EAAa9J,QAG5E6J,EAAYC,EAAave,MAAQsE,EAC1Bga,CAAW,GAEtB,CAAC,GAGL/F,EAASzR,KAAKqX,GAEd3M,KAAKmC,SAAS,CAAEhD,MAAO4H,IAAY,IAAM/G,KAAK6iC,aAAY,EAAO,MAAM,IAAM7iC,KAAKqM,gBAAgBtF,MAAW,EAC/G,KAMF87B,YAAc,CAACa,EAAiBvkC,EAA+B+H,KAE3D,IAAIy8B,GADJxkC,EAAQA,GAASa,KAAKkC,MAAM/C,OACHjS,KAAI,CAACsjB,EAAGtW,IAAMA,IACvCtK,OAAOyQ,KAAKL,KAAKqiC,YAAYzmC,SAAQpN,IACjC,IAAIo1C,EAAgBzB,GAAY0B,eAAe7jC,KAAKqiC,WAAW7zC,KAC1Dk1C,GAASE,GACVA,EAAgBA,EAAct2C,cAC9Bq2C,EAAeA,EAAa32C,QACxBigB,GAAO9N,EAAM8N,IAAQ9N,EAAM8N,GAAKze,IAAS2Q,EAAM8N,GAAKze,GAAMlB,cAAcyJ,SAAS6sC,MAE9E5jC,KAAKqiC,WAAW7zC,GAAMqzB,SAC7BsgB,GAAY2B,eAAe9jC,KAAKqiC,WAAW7zC,GAAO,GACtD,IAGAm1C,EAAa3xC,SAAWmN,EAAMnN,SAC9B2xC,EAAe,OAGE,OAAjBA,GAAqD,OAA5B3jC,KAAKkC,MAAMyhC,eAOpCxzC,KAAKE,UAAUszC,KAAkBxzC,KAAKE,UAAU2P,KAAKkC,MAAMyhC,cAC3D3jC,KAAKmC,SAAS,CAAEwhC,iBAAgB,IAAMz8B,GAAMA,MAPxCA,GACAA,GASR,EAznBAlH,KAAKqiC,WAAa,CAAC,EACnBriC,KAAKwB,MAAMkB,OAAOkK,MAAQ5M,KAAKwB,MAAMkB,OAAOkK,OAAS,GACrD5M,KAAKwB,MAAMkB,OAAOkK,MAAMhR,SAASsC,IACzBA,EAAGlR,SACHgT,KAAKqiC,WAAWnkC,EAAG1P,OAAQu1C,EAAAA,EAAAA,aAC/B,GAER,CAKA,uBAAM5gC,GACF1B,MAAM0B,oBACN,MAAM4rB,EACF1tB,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,OAAS,GAChE,IAAI2Q,EAiBJ,GAbIA,EADAa,KAAKwB,MAAMkB,OAAO4gC,WAhH9B,SACIxkC,EACAkjC,EACAC,GAEAD,EAAkBA,GAAmB,MAErC,MAAMD,EAA+B,GAarC,OAZAnyC,OAAOyQ,KAAKvB,GAAQlD,SAAQzG,IACxB,MAAMlI,EAA4B,CAAC,EACnCA,EAAK+0C,GAAmB7sC,EAEpB8sC,GACAh1C,EAAKg1C,GAAoBnjC,EAAO3J,GAChC4sC,EAAMzsC,KAAKrI,IAEX80C,EAAMzsC,KAAK1F,OAAOmR,OAAO9T,EAAM6R,EAAO3J,IAC1C,IAGG4sC,CACX,CA4FoBiC,CACJjV,EACA/uB,KAAKwB,MAAMkB,OAAO4gC,WAClBtjC,KAAKwB,MAAMkB,OAAO8gC,cAGdzU,EAGPh+B,MAAMuJ,QAAQ6E,KACfA,EAAQ,IAGRa,KAAKwB,MAAMkB,OAAO0gC,oBAAqB,CACvC,MAAM/6B,QAAqBrI,KAAKwB,MAAMuC,OAAO+gB,yBAC7C9kB,KAAKsiC,QAAqB,OAAZj6B,QAAY,IAAZA,OAAY,EAAZA,EAAczR,OAAO0rC,SAAUtiC,KAAKsiC,OAElDvT,EAAOnzB,SAASsC,IACZ8B,KAAKwB,MAAMkB,OAAO0gC,oBAAoBxnC,SAASpN,IACvC0P,EAAG1P,KACH0P,EAAG1P,GAzD3B,SAAiB8zC,EAAgBnjC,GAC7B,IAAIrO,EAAS,GACb,IAAK,IAAIoJ,EAAI,EAAGA,EAAIiF,EAAMnN,OAAQkI,IAC9BpJ,GAAUo6B,OAAOC,aAAamX,EAAOpoC,EAAIooC,EAAOtwC,QAAQimB,WAAW,GAAK9Y,EAAM8Y,WAAW/d,IAE7F,OAAOpJ,CACX,CAmDmCmzC,CAAQjkC,KAAKsiC,OAAQpkC,EAAG1P,IACvC,GACF,GAEV,CAEAwR,KAAKmC,SACD,CACIhD,QACAwkC,aAAc,KACdjB,QAAkF,GAClFpyC,MAAO,MACP8b,UAAW,EACX83B,SAAU,KAEd,IAAMlkC,KAAKmkC,uBAEnB,CAEA//B,oBAAAA,GACQpE,KAAKkM,cACL7H,aAAarE,KAAKkM,aAClBlM,KAAKkM,YAAc,MAEvBzK,MAAM2C,sBACV,CAEAggC,SAAAA,CAAUC,EAAkBriC,EAA2BiL,GACnD,MAAM,OAAEvK,GAAW1C,KAAKwB,MAClB8iC,EACF5hC,EAAOkK,OAASlK,EAAOkK,MAAMrY,MAAM2J,GAA+BA,EAAG1P,OAAS61C,IAElF,IAAKC,EACD,OAAO,KAGX,MAAMp3B,EAAa,CACfN,MAAO,CACH,CAACy3B,GAAWC,IAIpB,OACIryC,EAAAA,EAAAA,KAACob,GAAW,CACRhY,MAAO4X,EAAMjN,KAAKkC,MAAMkK,UACxBrJ,WAAYkK,EACZ1F,QAASvH,KAAKwB,MAAM+F,QACpBvE,WAAYhD,KAAKwB,MAAMQ,KACvB+B,OAAQ/D,KAAKwB,MAAMuC,OACnBC,YAAahE,KAAKwB,MAAMwC,YACxBC,SAAUjE,KAAKwB,MAAMyC,SACrBvV,OAAQsR,KAAKwB,MAAM9S,OACnBiV,MAAO3D,KAAKwB,MAAMmC,MAClBrL,UAAW0H,KAAKwB,MAAMlJ,UACtBsC,UAAWoF,KAAKwB,MAAM5G,UACtBoH,KAAMA,EACN6L,OAAK,EACL7d,QAAM,EACN0S,OAAQwK,EACR7E,aAAcrI,KAAKwB,MAAM6G,aACzBrU,WAAYgM,KAAKwB,MAAMxN,WACvBuZ,aAAcvN,KAAKwB,MAAM+L,aACzBC,YAAaxN,KAAKwB,MAAMgM,YACxBC,iBAAkBzN,KAAKwB,MAAMiM,iBAC7BrL,YAAapC,KAAKwB,MAAMY,YACxBgG,aAAcpI,KAAKwB,MAAM4G,aACzBkF,QAAStN,KAAKwB,MAAM8L,QACpB3M,MAAOX,KAAKwB,MAAMb,MAClBmN,cAAe9N,KAAKwB,MAAMsM,cAC1BvK,SAAUA,CAAC/U,EAAckf,KACrB,MAAMC,EAAgCxd,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QAC3EwO,EAAOV,GAAKze,GAAQkf,EACpB1N,KAAKmC,SAAS,CAAEhD,MAAOwO,IAAU,KAC7B3N,KAAKmkC,sBACLnkC,KAAKqM,gBAAgBsB,GAAQ,EAAK,GACpC,EAENxJ,QAASA,CAAClF,EAAezQ,IAAkBwR,KAAKmE,QAAQlF,EAAOzQ,GAC/Dof,iBAAkB5N,KAAKwB,MAAMoM,kBAGzC,CAKAu2B,mBAAAA,GACI,GAAKnkC,KAAKwB,MAAMkB,OAAO6hC,cAIvB,IAAK,MAAMC,KAAaxkC,KAAKwB,MAAMkB,OAAO6hC,cAAe,CACrD,MAAME,EAA+B,GACvBzkC,KAAKkC,MAAM/C,MAAM5K,MAAKmwC,IAChC,MAAMp9B,EAAMo9B,EAAMF,GAClB,OAAIC,EAAQ1tC,SAASuQ,IACjBtH,KAAKmE,QAAQqgC,EAAW,iBACxBxkC,KAAKmC,SAAS,CACVwiC,aAAc32C,EAAAA,KAAKC,EAAE,kDAAmDqZ,EAAKk9B,MAE1E,IAEXC,EAAQnvC,KAAKgS,IACN,EAAK,MAIZtH,KAAKmE,QAAQqgC,EAAW,MACxBxkC,KAAKmC,SAAS,CAAEwiC,aAAc,KAEtC,CACJ,CAEA,2BAAOC,CAAqBvwC,EAAwBpB,EAAwByvC,GACxE,OAAIzvC,EAAEyvC,GAAWruC,EAAEquC,IACP,EAERzvC,EAAEyvC,GAAWruC,EAAEquC,GACR,EAEJ,CACX,CAEA,oBAAOK,CACHzyC,EACAoyC,GAEA,MAAiB,SAAVpyC,EACD,CAAC+D,EAAwBpB,IAA2BkvC,GAAYyC,qBAAqBvwC,EAAGpB,EAAGyvC,GAC3F,CAACruC,EAAwBpB,KAA4BkvC,GAAYyC,qBAAqBvwC,EAAGpB,EAAGyvC,EACtG,CAEA,qBAAOmB,CAAe3lC,GAAgD,IAAD2mC,EAAAC,EAAAC,EACjE,OAAU,OAAF7mC,QAAE,IAAFA,GAAW,QAAT2mC,EAAF3mC,EAAI2jB,eAAO,IAAAgjB,GAAa,QAAbC,EAAXD,EAAa3yC,SAAS,UAAE,IAAA4yC,GAAa,QAAbC,EAAxBD,EAA0B5yC,SAAS,UAAE,IAAA6yC,OAAnC,EAAHA,EAA6D5lC,KACxE,CAEA,qBAAO2kC,CAAe5lC,EAAuC8mC,GACzD,OAAS9mC,EAAG2jB,QAAQ3vB,SAAS,GAAGA,SAAS,GAAwBiN,MAAQ6lC,CAC7E,CA8BAC,iBAAAA,CAAkBC,EAAsBC,GACpC,MAAM,OAAEziC,GAAW1C,KAAKwB,OAClB,MAAElR,EAAK,QAAEoyC,GAAY1iC,KAAKkC,MAChC,OACIjQ,EAAAA,EAAAA,KAACgkB,EAAAA,UAAS,CAAA/jB,UACNkY,EAAAA,EAAAA,MAAC8L,EAAAA,SAAQ,CAAAhkB,SAAA,CACJwQ,EAAOkK,OACJlK,EAAOkK,MAAM1f,KAAI,CAACk4C,EAAkClrC,KAChDjI,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CACNpkB,MAAO,CACH6U,OAC8B,kBAAnBw+B,EAASx+B,OAAsBw+B,EAASx+B,MAAMF,SAAS,KACxD0+B,EAASx+B,QAIvBy+B,MAAM,OACNC,cAAe5C,IAAY0C,EAAS52C,MAAO8B,EAAc4B,UAEzDkY,EAAAA,EAAAA,MAAA,OACIrY,MAAO,IACAyZ,GAAOV,QACNpI,EAAO6iC,kBAAoB,CAAExc,cAAe,eAAax3B,GAC/DW,SAAA,CAEAgI,GAAMwI,EAAOyL,SAoBX,MAnBAlc,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MACIyvC,EACMn3C,EAAAA,KAAKC,EAAE,uCACPD,EAAAA,KAAKC,EAAE,cAEjBkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,GAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAAA,QAAAC,UACID,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLhY,MAAM,UACN6W,WAAY48B,IAAmBnlC,KAAKwB,MAAMkB,OAAO8iC,iBACjDv6B,QAASjL,KAAK0M,MAAMxa,UAEpBD,EAAAA,EAAAA,KAACuc,EAAAA,IAAO,UAKvB42B,EAAS7T,OACNt/B,EAAAA,EAAAA,KAACwzC,EAAAA,eAAc,CACXC,QAAM,EACN3zC,MAAO2wC,IAAY0C,EAAS52C,KAAOgd,GAAOg2B,YAASjwC,EACnDo0C,UAAWjD,IAAY0C,EAAS52C,KAAO8B,EAAQ,MAC/C2a,QAASA,IAAMjL,KAAKuiC,kBAAkB6C,EAAS52C,QAGtD42C,EAASp4C,QAAUgT,KAAKkC,MAAMgiC,SAASntC,SAASquC,EAAS52C,OACtDyD,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRwW,IAAKxhB,KAAKqiC,WAAW+C,EAAS52C,MAC9B+U,SAAUA,IAAMvD,KAAK6iC,cACrBntC,MAAO1H,EAAAA,KAAKC,EAAE,wDACdkhB,UAAW,CACP6M,MAAO,CACHgI,aAAcme,GAAY0B,eACtB7jC,KAAKqiC,WAAW+C,EAAS52C,SAEzByD,EAAAA,EAAAA,KAAC2mC,EAAAA,eAAc,CAACtb,SAAS,MAAKprB,UAC1BD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,KACLk3B,GAAY2B,eACR9jC,KAAKqiC,WAAW+C,EAAS52C,MACzB,IAEJwR,KAAK6iC,aAAa,EACpB3wC,UAEFD,EAAAA,EAAAA,KAACiiC,EAAAA,MAAS,UAM9BzoB,WAAS,EACTsF,YAAa/Q,KAAKuE,QAAQ6gC,EAAS1vC,UAGvCzD,EAAAA,EAAAA,KAAA,QAAMF,MAAOyZ,GAAO21B,WAAWjvC,SAAE8N,KAAKuE,QAAQ6gC,EAAS1vC,SAE1D0vC,EAASp4C,QACNiF,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7Y,MAAO1H,EAAAA,KAAKC,EAAE,6BACdyb,KAAK,QACLuB,QAASA,KACL,MAAMi5B,EAAW,IAAIlkC,KAAKkC,MAAMgiC,UAC1B/0C,EAAM6Q,KAAKkC,MAAMgiC,SAASjwC,QAAQmxC,EAAS52C,OACpC,IAATW,EACA+0C,EAAS5uC,KAAK8vC,EAAS52C,MAEvB01C,EAAShzC,OAAO/B,EAAK,GAEzB6Q,KAAKmC,SAAS,CAAE+hC,aAAY,KAEpB/0C,GACAgzC,GAAY0B,eAAe7jC,KAAKqiC,WAAW+C,EAAS52C,SAEpD2zC,GAAY2B,eAAe9jC,KAAKqiC,WAAW+C,EAAS52C,MAAO,IAC3DwR,KAAK6iC,cACT,GACF,EACJ3wC,SAED8N,KAAKkC,MAAMgiC,SAASntC,SAASquC,EAAS52C,OACnCyD,EAAAA,EAAAA,KAAC2zC,EAAAA,aAAa,KAEd3zC,EAAAA,EAAAA,KAAC4zC,EAAAA,UAAY,MAGrB,SAtGH,GAAGT,EAAS52C,QAAQ0L,QA0GnCwI,EAAOyL,WACL/D,EAAAA,EAAAA,MAAC+L,EAAAA,UAAS,CACNpkB,MAAO,CACHuvC,YAAa,GACbC,aAAc,GACd36B,MAAOs+B,EACPj7B,UAAW,SAEfrW,QAAQ,WAAU1B,SAAA,CAEjBwQ,EAAOojC,QACJ7zC,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACPxc,MAAO,CAAEkhB,YAAa,IACtBvJ,KAAK,QACLuB,QAASA,IAAMjL,KAAKmC,SAAS,CAAE4jC,kBAAkB,IACjDrwC,MAAO1H,EAAAA,KAAKC,EAAE,8BAA+B,OAAOiE,UAEpDD,EAAAA,EAAAA,KAAC+zC,EAAAA,WAAU,MAEf,KACHtjC,EAAOujC,QACJh0C,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACPxc,MAAO,CAAEkhB,YAAa,IACtBvJ,KAAK,QACLuB,QAASA,IAAMjL,KAAKkmC,WACpBxwC,MAAO1H,EAAAA,KAAKC,EAAE,4BAA6B,OAAOiE,UAElDD,EAAAA,EAAAA,KAACk0C,EAAAA,SAAU,MAEf,MACJl0C,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACPhG,UAAQ,EACRmB,KAAK,QAAOxX,UAEZD,EAAAA,EAAAA,KAACud,EAAAA,OAAU,aAOvC,CAWA02B,QAAAA,GACI,MAAM,OAAExjC,GAAW1C,KAAKwB,OAClB,MAAErC,GAAUa,KAAKkC,MAEjB1E,EAAQ,CADDkF,EAAOkK,MAAM1f,KAAKiK,GAA+BA,EAAG3I,OAC7CjB,KAAK,MACzB4R,EAAMvD,SAAQsmC,IACV,MAAMvkC,EAAiB,GACvB+E,EAAOkK,MAAMhR,SAASzE,IAAgC,IAADivC,EACjC,QAAhBA,EAAIlE,EAAI/qC,EAAG3I,aAAK,IAAA43C,GAAZA,EAAcrvC,SAAS,KACvB4G,EAAKrI,KAAK,IAAI4sC,EAAI/qC,EAAG3I,UAErBmP,EAAKrI,UAAsB/D,IAAjB2wC,EAAI/qC,EAAG3I,OAAwC,OAAjB0zC,EAAI/qC,EAAG3I,MAAiB,GAAK0zC,EAAI/qC,EAAG3I,MAChF,IAEJgP,EAAMlI,KAAKqI,EAAKpQ,KAAK,KAAK,IAE9B,MAAM2Q,EAAKC,SAASC,cAAc,KAClCF,EAAGG,aAAa,OAAQ,+BAA+BC,mBAAmBd,EAAMjQ,KAAK,UACrF,MAAM4G,EAAM,IAAIQ,KAChBuJ,EAAGG,aACC,WACA,GAAGlK,EAAImI,kBAAkBnI,EAAIc,WAAa,GAAGhG,WAAW2J,SAAS,EAAG,QAAQzE,EAAIa,UAAU/F,WAAW2J,SAAS,EAAG,QAAQoH,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,YAAYjE,KAAKwB,MAAMhT,YAGzL0P,EAAGnM,MAAMwM,QAAU,OACnBJ,SAASZ,KAAKiB,YAAYN,GAE1BA,EAAGO,QAEHN,SAASZ,KAAKmB,YAAYR,EAC9B,CAEAmoC,QAAAA,CAASt4C,GACL,MAAMyP,EAAQzP,EAAKhB,MAAM,MAAMG,KAAKyQ,GAAiBA,EAAKzO,QAAQ,KAAM,IAAIG,UAEtE,OAAEqT,GAAW1C,KAAKwB,MAElBlE,EAASE,EACV8G,QACAvX,MAAM,KACNC,QAAOmK,GAAMA,GAAMuL,EAAOkK,MAAMrY,MAAM+xC,GAAgCA,EAAI93C,OAAS2I,MAElFovC,EAAgC,GAqClB,IAADC,GApCnBhpC,EAAM5B,SAAS+B,IACX,MAAMnL,EAAkBmL,EAAK5Q,MAAM,KAC7BwC,EAAiD,CAAC,EACxD,IAAK,IAAI0M,EAAI,EAAGA,EAAIzJ,EAAMR,OAAQiK,IAAK,CACnC,IAAIkD,EAAQ3M,EAAMyJ,GAClB,GAAIkD,EAAMhN,WAAW,KAAM,CAEvB,IADAgN,EAAQA,EAAM9R,UAAU,GACjB4O,EAAIzJ,EAAMR,SAAWmN,EAAMuH,SAAS,MACvCvH,GAAS,IAAI3M,IAAQyJ,KAEzBkD,EAAQA,EAAM9R,UAAU,EAAG8R,EAAMnN,OAAS,EAC9C,CAEA,IAAIsV,EAAiCnI,EAErC,GAAc,SAAVA,EACAmI,GAAM,OACH,GAAc,UAAVnI,EACPmI,GAAM,OACH,GAAI3Y,OAAO0oC,SAASl4B,GAAyB,CAChD,MAAM3Q,EAAOwR,KAAKwB,MAAMkB,OAAOkK,MAAMrY,MAAM4C,GAA+BA,EAAG3I,OAAS8O,EAAOrB,KAGzFqL,EAFA9Y,GAAsB,WAAdA,EAAK0Q,KAEP5L,WAAW6L,GAEXA,CAEd,MACImI,EAAMnI,EAGV5P,EAAI+N,EAAOrB,IAAMqL,CACrB,CACAi/B,EAAOjxC,KAAK/F,EAAI,IAGhBg3C,EAAOv0C,QACa,QAApBw0C,EAAIxmC,KAAKkC,MAAM/C,aAAK,IAAAqnC,GAAhBA,EAAkBx0C,OAClBgO,KAAKmC,SAAS,CAAEskC,uBAAwBF,EAAQR,kBAAkB,IAElE/lC,KAAKmC,SAAS,CAAEhD,MAAOonC,EAAQR,kBAAkB,IAGrDp3C,OAAO0rB,MAAM,2BAErB,CAkIAqsB,cAAAA,GACI,QAAS92C,OAAOyQ,KAAKL,KAAKqiC,YAAY9tC,MAAK/F,GAAQ2zC,GAAY0B,eAAe7jC,KAAKqiC,WAAW7zC,KAClG,CAmCAuf,QAAAA,CAASd,GACL,MAAMlG,EAAkC5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QACvElS,EAAO8Z,EAASkG,GACtBlG,EAAS7V,OAAO+b,EAAK,GACrBlG,EAAS7V,OAAO+b,EAAM,EAAG,EAAGhgB,GAC5B+S,KAAKmC,SAAS,CAAEhD,MAAO4H,EAAUqF,UAAWpM,KAAKkC,MAAMkK,UAAY,MAAS,IACxEpM,KAAK6iC,aAAY,EAAO,MAAM,IAAM7iC,KAAKqM,gBAAgBtF,MAEjE,CAEAkH,UAAAA,CAAWhB,GACP,MAAMlG,EAAkC5W,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QACvElS,EAAO8Z,EAASkG,GACtBlG,EAAS7V,OAAO+b,EAAK,GACrBlG,EAAS7V,OAAO+b,EAAM,EAAG,EAAGhgB,GAC5B+S,KAAKmC,SAAS,CAAEhD,MAAO4H,EAAUqF,UAAWpM,KAAKkC,MAAMkK,UAAY,MAAS,IACxEpM,KAAK6iC,aAAY,EAAO,MAAM,IAAM7iC,KAAKqM,gBAAgBtF,MAEjE,CAEA2jB,MAAAA,CAAOC,GACH,MAAMpD,EAAOoD,EAAc,GACrB9qB,EAAS,IAAIC,WAEnBD,EAAOgrB,QAAU,IAAM/xB,QAAQwQ,IAAI,4BACnCzJ,EAAO0mB,QAAU,IAAMztB,QAAQwQ,IAAI,2BACnCzJ,EAAOE,OAAS,KACZ,GAAIwnB,EAAK7d,KAAOu3B,GAEZ,YADAtyC,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAE,oDAAqDN,KAAKkP,MAAMokC,QAGxF,MAAMlzC,EAAO,IAAIi9B,WAAWnrB,EAAO/O,QAA2B+b,QAC1D,CAAC7K,EAAMipB,IAASjpB,EAAOkpB,OAAOC,aAAaF,IAC3C,IAGJjrB,KAAKqmC,SAASt4C,EAAK,EAEvB8R,EAAOwrB,kBAAkB9D,EAC7B,CAEAkf,sBAAAA,GACI,OAAKzmC,KAAKkC,MAAMukC,wBAIZr8B,EAAAA,EAAAA,MAAC2M,EAAAA,OAAM,CACH5Z,MAAM,EACNgI,QAASA,IAAMnF,KAAKmC,SAAS,CAAEskC,wBAAwB,IACvDzvB,SAAS,KAAI9kB,SAAA,EAEbD,EAAAA,EAAAA,KAACglB,EAAAA,YAAW,CAAA/kB,SAAElE,EAAAA,KAAKC,EAAE,4BACrBgE,EAAAA,EAAAA,KAACilB,EAAAA,cAAa,CAAAhlB,SACTlE,EAAAA,KAAKC,EAAE,4CAA6C+R,KAAKkC,MAAMukC,uBAAuBz0C,WAE3FoY,EAAAA,EAAAA,MAACgN,EAAAA,cAAa,CAAAllB,SAAA,EACVD,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHC,QAAQ,YACRtZ,MAAM,UACN2lB,WAAS,EACTpM,QAASA,KACL,MAAM9L,EAA+BhP,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAM/C,QAEzEa,KAAKkC,MAAMukC,uBAAiD7qC,SACxDrM,GAA6B4P,EAAM7J,KAAK/F,KAG7CyQ,KAAKmC,SACD,CACIhD,QACAiN,UAAWpM,KAAKkC,MAAMkK,UAAY,IAClCq6B,wBAAwB,IAE5B,IAAMzmC,KAAK6iC,aAAY,EAAO,MAAM,IAAM7iC,KAAKqM,gBAAgBlN,MAClE,EACHjN,SAEDlE,EAAAA,KAAKC,EAAE,gBAEZgE,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHC,QAAQ,YACRtZ,MAAM,YACN2lB,WAAS,EACTpM,QAASA,KACL,MAAM9L,EAA+Ba,KAAKkC,MAAMukC,uBAIhDzmC,KAAKmC,SACD,CACIhD,QACAiN,UAAWpM,KAAKkC,MAAMkK,UAAY,IAClCq6B,wBAAwB,IAE5B,IAAMzmC,KAAK6iC,aAAY,EAAO,MAAM,IAAM7iC,KAAKqM,gBAAgBlN,MAClE,EACHjN,SAEDlE,EAAAA,KAAKC,EAAE,sBAvDb,IA4Df,CAEA83C,gBAAAA,GACI,OAAK/lC,KAAKkC,MAAM6jC,kBAIZ37B,EAAAA,EAAAA,MAAC2M,EAAAA,OAAM,CACH5Z,MAAM,EACNgI,QAASA,IAAMnF,KAAKmC,SAAS,CAAE4jC,kBAAkB,IACjDh3B,GAAI,CACA,qBAAsB,CAClB4N,UAAW,MAGnB3F,SAAS,KACTvL,WAAS,EAAAvZ,SAAA,EAETD,EAAAA,EAAAA,KAACglB,EAAAA,YAAW,CAAA/kB,SAAElE,EAAAA,KAAKC,EAAE,oBAAqB,UAC1CgE,EAAAA,EAAAA,KAACilB,EAAAA,cAAa,CAAAhlB,UACVD,EAAAA,EAAAA,KAAC67B,KAAQ,CACLC,UAAU,EACVJ,OAAQ,CAAE,WAAY,CAAC,SACvB/C,QAASqW,GACT/S,YAAaA,IAAMluB,KAAKmC,SAAS,CAAEgsB,WAAY,aAC/CC,YAAaA,IAAMpuB,KAAKmC,SAAS,CAAEgsB,YAAY,IAC/CzD,OAAQA,CAACC,EAAelS,KACpBzY,KAAKmC,SAAS,CAAEgsB,YAAY,IACvBxD,EAAc34B,OAUfgO,KAAK0qB,OAAOC,GATZh8B,OAAO0rB,MACF5B,GACGA,EAAO,IACPA,EAAO,GAAGA,QACVA,EAAO,GAAGA,OAAO,IACjBA,EAAO,GAAGA,OAAO,GAAG2M,SACpBp3B,EAAAA,KAAKC,EAAE,oBAInB,EACFiE,SAEDssB,IAAA,IAAC,aAAE6P,EAAY,cAAEC,GAAe9P,EAAA,OAC7BpU,EAAAA,EAAAA,MAAA,OACIrY,MAAO,IACAyZ,GAAO8c,aACoB,aAA1BtoB,KAAKkC,MAAMisB,WAA4B3iB,GAAO+c,uBAAoBh3B,KACnEia,GAAO0c,YACLloB,KAAKkC,MAAMzQ,UAA8BF,EAAvBia,GAAO2c,kBAE9BkG,IAAcn8B,SAAA,EAElBD,EAAAA,EAAAA,KAAA,YAAWq8B,OACXr8B,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAOid,gBAAgBv2B,UAC/BkY,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOsd,wBAAwB52B,SAAA,EACvCD,EAAAA,EAAAA,KAAC+zC,EAAAA,WAAU,CAACj0C,MAAOyZ,GAAOmd,oBAC1B12B,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAOod,iBAAiB12B,SACL,aAA1B8N,KAAKkC,MAAMisB,WACNngC,EAAAA,KAAKC,EAAE,qBACPD,EAAAA,KAAKC,EACD,6EAKpB,OAIlBgE,EAAAA,EAAAA,KAACmlB,EAAAA,cAAa,CAAAllB,UACVD,EAAAA,EAAAA,KAAC8Y,EAAAA,OAAM,CACHC,QAAQ,YACRC,QAASA,IAAMjL,KAAKmC,SAAS,CAAE4jC,kBAAkB,IACjDr0C,MAAM,UACN4lB,WAAWrlB,EAAAA,EAAAA,KAAC00C,EAAAA,MAAS,IAAIz0C,SAExBlE,EAAAA,KAAKC,EAAE,iBAxEb,IA6Ef,CAEAwa,UAAAA,GACI,MAAM,OAAE/F,GAAW1C,KAAKwB,MACxB,IAAI,aAAEmiC,GAAiB3jC,KAAKkC,MAE5B,IAAKlC,KAAKkC,MAAM/C,QAAUpO,MAAMuJ,QAAQ0F,KAAKkC,MAAM/C,OAC/C,OAAO,KAGXwkC,EAAeA,GAAgB3jC,KAAKkC,MAAM/C,MAAMjS,KAAI,CAACsjB,EAAGtW,IAAMA,IAE9D,MAAMirC,EAAiBnlC,KAAK0mC,iBAE5B,IAAIE,EAKJ,OAJI5mC,KAAKwB,MAAMkB,OAAOmkC,UAClBD,EAAU,CAAE7qB,WAAY,EAAGa,cAAe,KAI1CxS,EAAAA,EAAAA,MAAC8D,EAAAA,MAAK,CAACnc,MAAOyZ,GAAO01B,MAAMhvC,SAAA,CACtB8N,KAAK+lC,mBACL/lC,KAAKymC,yBACL/jC,EAAOmG,OACJ5W,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAO3C,MAAM3W,UACrBD,EAAAA,EAAAA,KAACmc,EAAAA,QAAO,CACJpD,QAAQ,QACRjZ,MAAOyZ,GAAOkE,SAASxd,UAEvBD,EAAAA,EAAAA,KAACoc,EAAAA,WAAU,CACPtc,MAAOyZ,GAAO9V,MACdsV,QAAQ,KACR5c,GAAG,aACHkgB,UAAU,MAAKpc,SAEd8N,KAAKuE,QAAQ7B,EAAOmG,aAIjC,MACJuB,EAAAA,EAAAA,MAAC2L,EAAAA,eAAc,CAAA7jB,SAAA,EACXkY,EAAAA,EAAAA,MAAC4L,EAAAA,MAAK,CACFjkB,MAAOyZ,GAAOqC,MACdnE,KAAK,QAAOxX,SAAA,CAEX8N,KAAKilC,kBAAmBE,GAAmBnlC,KAAKkC,MAAMwgC,QAAgB,GAAN,IAAUyC,IAC3E/6B,EAAAA,EAAAA,MAACgM,EAAAA,UAAS,CAAAlkB,SAAA,CACLyxC,EAAaz2C,KAAI,CAAC+f,EAAK/S,KACpBkQ,EAAAA,EAAAA,MAAC8L,EAAAA,SAAQ,CACL4wB,OAAK,EAAA50C,SAAA,CAGJwQ,EAAOkK,OACJlK,EAAOkK,MAAM1f,KAAKk4C,IACdnzC,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CAENkvB,MAAM,OACNtzC,MAAO60C,EAAQ10C,SAEd8N,KAAKokC,UAAUgB,EAAS52C,KAAMwR,KAAKkC,MAAM/C,MAAM8N,GAAMA,IAJjD,GAAGm4B,EAAS52C,QAAQye,QAOnCvK,EAAOyL,WACL/D,EAAAA,EAAAA,MAAC+L,EAAAA,UAAS,CACNkvB,MAAM,OACNtzC,MAAO,IAAK60C,KAAYp7B,GAAOk2B,YAAaxvC,SAAA,CAE1CizC,GAAmBnlC,KAAKkC,MAAMwgC,QAgB5B,KAfAxoC,GACIjI,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAO1H,EAAAA,KAAKC,EAAE,cACdkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,GAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,IAAMjL,KAAK+N,SAASd,GAAK/a,UAElCD,EAAAA,EAAAA,KAACod,EAAAA,YAAM,SAIfpd,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAO8D,cAGzB61B,GAAmBnlC,KAAKkC,MAAMwgC,QAgB5B,KAfAxoC,EAAIypC,EAAa3xC,OAAS,GACtBC,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAO1H,EAAAA,KAAKC,EAAE,gBACdkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,GAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,IAAMjL,KAAKiO,WAAWhB,GAAK/a,UAEpCD,EAAAA,EAAAA,KAACsd,EAAAA,cAAQ,SAIjBtd,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAO8D,eAG3Brd,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAO1H,EAAAA,KAAKC,EAAE,yBACdkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,GAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASjL,KAAKmM,SAASc,GAAK/a,UAE5BD,EAAAA,EAAAA,KAACud,EAAAA,OAAU,QAGlBxP,KAAKwB,MAAMkB,OAAO7D,OACf5M,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAO1H,EAAAA,KAAKC,EAAE,wBACdkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,GAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASjL,KAAKsM,QAAQW,GAAK/a,UAE3BD,EAAAA,EAAAA,KAACwd,EAAAA,YAAe,QAGxB,UA1EP,GAAGxC,KAAO/S,QA+ErBwI,EAAOyL,UAAYw1B,EAAa3xC,SAAW0Q,EAAOqkC,iBAAmB,IACnE90C,EAAAA,EAAAA,KAACikB,EAAAA,SAAQ,CAAAhkB,UACLD,EAAAA,EAAAA,KAACkkB,EAAAA,UAAS,CACN6wB,QAAStkC,EAAOkK,MAAM5a,OAAS,EAC/BD,MAAO,IAAK60C,GAAU10C,UAEtBD,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MACIyvC,EACMn3C,EAAAA,KAAKC,EAAE,uCACPD,EAAAA,KAAKC,EAAE,cAEjBkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,GAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAAA,QAAAC,UACID,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLhY,MAAM,UACN6W,WAAY48B,IAAmBnlC,KAAKwB,MAAMkB,OAAO8iC,iBACjDv6B,QAASjL,KAAK0M,MAAMxa,UAEpBD,EAAAA,EAAAA,KAACuc,EAAAA,IAAO,cAM5B,YAGVm1B,EAAa3xC,QAAUgO,KAAKkC,MAAM/C,MAAMnN,QACtCC,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAOi2B,YAAYvvC,UAC3BkY,EAAAA,EAAAA,MAACiE,EAAAA,WAAU,CACPtc,MAAOyZ,GAAO9V,MACdsV,QAAQ,KACR5c,GAAG,aACHkgB,UAAU,MAAKpc,SAAA,CAEdlE,EAAAA,KAAKC,EAAE,kCACRgE,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,IAAMjL,KAAK6iC,aAAY,GAAM3wC,UAEtCD,EAAAA,EAAAA,KAACiiC,EAAAA,MAAS,WAItB,QAEPxxB,EAAOiN,MACJ1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,KACHxE,KAAKkC,MAAMyiC,cACRv6B,EAAAA,EAAAA,MAAA,OAAKrY,MAAO,CAAEwM,QAAS,OAAQ3K,QAAS,OAAQ1B,SAAA,EAC5CD,EAAAA,EAAAA,KAACg1C,EAAAA,QAAS,CAACv1C,MAAM,WACjBO,EAAAA,EAAAA,KAAA,QAAMF,MAAO,CAAEL,MAAO,MAAOw1C,UAAW,UAAWh1C,SAAE8N,KAAKkC,MAAMyiC,kBAEpE,OAGhB,EAGJ,YCxwCMn5B,GAA8C,CAChDuP,cAAe,CACXjI,QAAS,IAEbjK,MAAO,CACHjC,MAAO,OACPiiB,SAAU,IAEdse,OAAQ,CACJvgC,MAAO,OACPiiB,SAAU,IAEd5pB,MAAO,CACH2H,MAAO,OACPiiB,SAAU,GACVn3B,MAAO,YAuQf,SA1PA,cAAyB2P,EAAgDE,WAAAA,GAAA,SAAA7G,WAAA,KAC7Ds8B,cAAsD,IAAK,CAEnE7zB,iBAAAA,GACI1B,MAAM0B,oBACN,IAAIhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAE/D,GAAIuC,MAAMuJ,QAAQ6E,IAAUa,KAAKwB,MAAMy1B,UAGnC,OAFA93B,EAAQkC,EAAc+J,qBACtBpL,KAAKmC,SAAS,CAAEhD,QAAO+3B,SAAU/3B,EAAOg1B,WAAW,IAIvDn0B,KAAKmC,SAAS,CAAEhD,QAAO+3B,SAAU/3B,EAAOg1B,UAAWn0B,KAAKm1B,aAAah2B,IACzE,CAEAg2B,YAAAA,CAAah2B,GACT,IAAIg1B,GAAY,EAChB,GAAIn0B,KAAKwB,MAAMkB,OAAOyyB,eACdh2B,IAAUa,KAAKwB,MAAMkB,OAAO0yB,YAC5B,IACIjlC,KAAKC,MAAM+O,EACf,CAAE,MAAOsoB,GACL3uB,QAAQwQ,IAAI,gBAAiBme,GAC7B0M,GAAY,CAChB,CAIR,OAAOA,CACX,CAEA,+BAAOrS,CAAyBtgB,EAAwBU,GACpD,GAAIV,EAAMy1B,WAAa/0B,EAAM/C,QAAUkC,EAAc+J,gBACjD,MAAO,CAAEjM,MAAOkC,EAAc+J,iBAGlC,IAAIjM,EAAQkC,EAAcY,SAAST,EAAMQ,KAAMR,EAAMhT,MAMrD,OAJc,OAAV2Q,QAA4B5N,IAAV4N,IAClBA,EAAQA,EAAMlQ,YAGJ,OAAVkQ,QAA4B5N,IAAV4N,GAAwBA,IAAU+C,EAAM/C,OAASA,IAAU+C,EAAMg1B,SAC5E,CAAE/3B,SAEN,IACX,CAEAsJ,UAAAA,CAAWxJ,EAAiBsJ,GACxB,MAAMoS,EAAkB5pB,MAAMuJ,QAAQ0F,KAAKkC,MAAM/C,QAAUa,KAAKkC,MAAM/C,QAAUkC,EAAc+J,gBAE9F,GAAIpL,KAAKwB,MAAMkB,OAAO0kC,KAAM,CAGxB,IAAIA,EAAO,GAcX,MAbgC,kBAArBpnC,KAAKkC,MAAM/C,MAIdioC,EAFApnC,KAAKkC,MAAM/C,OAASa,KAAKkC,MAAM/C,MAAQ,UAEhC,IAAIxK,KAAwB,IAAnBqL,KAAKkC,MAAM/C,OAAcya,iBAElC,IAAIjlB,KAAKqL,KAAKkC,MAAM/C,OAAOya,iBAEH,kBAArB5Z,KAAKkC,MAAM/C,QAEzBioC,EAAO,IAAIzyC,KAAKqL,KAAKkC,MAAM/C,OAAOya,mBAIlC3nB,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTtM,MAAOioC,EACPnoC,QAASA,KAAWe,KAAKkC,MAAMiyB,UAC/B5rB,WAAYA,EACZ4G,UAAW,CACPqC,UAAW,CACPyJ,UAAU,IAGlBlK,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,gBAIlC,CAeA,GAb4B,OAAxBxE,KAAKkC,MAAMg1B,eAA6C3lC,IAAxByO,KAAKkC,MAAMg1B,UACvCl3B,KAAKg3B,eACL3yB,aAAarE,KAAKg3B,eAEtBh3B,KAAKg3B,cAAgB1zB,YAAW,KAC5BtD,KAAKg3B,cAAgB,KACrBh3B,KAAKmC,SAAS,CAAE+0B,SAAU,MAAO,GAClC,KACIl3B,KAAKg3B,gBACZ3yB,aAAarE,KAAKg3B,eAClBh3B,KAAKg3B,cAAgB,MAGrBrc,EAAiB,CACjB,MAAM2c,EAAsBj2B,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACzE+oC,GACiB,OAAnBD,QAAmB,IAAnBA,OAAmB,EAAnBA,EACMtqC,QAAQqH,GAAWA,GAAW,IAANA,IACzBnH,KAAKD,IAAS,CAAQ4b,MAAO5b,EAAKgC,YAAc,GAAIkQ,MAAOlS,QAAY,GAIhF,OAFAsqC,EAAIpnB,QAAQ,CAAEtH,MAAO7a,EAAAA,KAAKC,EAAEoT,EAAcgK,iBAAkBlM,MAAOkC,EAAc+J,mBAG7EnZ,EAAAA,EAAAA,KAACqe,EAAAA,aAAY,CACTve,MAAOyZ,GAAOuP,cACdtP,WAAS,EACTtM,MAAOo4B,EAAI,GAEXh0B,SAAUA,CAACiN,EAAGrR,KACV,MAAMmI,EAAMnI,EAAQA,EAAMA,MAAQ,GAC5B6H,EAAehH,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM8Y,GAAK,KACrDtH,KAAKmC,SAAS,CAAEhD,MAAOmI,EAAK4vB,SAAU5vB,EAAK6sB,UAAWn0B,KAAKm1B,aAAah2B,IAAS,IAEjF6H,aAAwBrH,SACxBqH,EAAaC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MAC/D,EAEJpJ,QAASipC,EACT9mB,eAAgBC,GAAUA,EAAO7H,MACjC+H,YAAaC,IACT5e,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,cACJ6F,EACJ5R,QAASA,EACT8R,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5C5B,UAAW,CACPqC,UAAW,IACJX,EAAO4mB,WACVhmB,UAAWzR,KAAKwB,MAAMkB,OAAO+O,WAAazR,KAAKwB,MAAMkB,OAAOgP,UAAOngB,EACnE0pB,SAAUjb,KAAKwB,MAAMkB,OAAOuY,WAAY,IAGhDpS,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,eAEtB+D,WAAYA,KAKhC,CACA,GAAIvI,KAAKwB,MAAMkB,OAAO2kC,QAAU,EAAG,CAC/B,MAAMF,EAASnnC,KAAK8I,WAChB9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,eAEtB,OACI4F,EAAAA,EAAAA,MAAA,OAAKrY,MAAO,CAAE6U,MAAO,QAAS1U,SAAA,CACzB8N,KAAKwB,MAAMkB,OAAOmG,OACf5W,EAAAA,EAAAA,KAAA,OAAKF,MAAOyZ,GAAO3C,MAAM3W,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAC1D,MACJ5W,EAAAA,EAAAA,KAACq1C,EAAAA,iBACG,CACAv1C,MAAO,CACH6U,MAAO,OACP2gC,OAAQ,WACR57B,gBAA0C,SAAzB3L,KAAKwB,MAAMlJ,UAAuB,UAAY,UAC/D5G,MAAgC,SAAzBsO,KAAKwB,MAAMlJ,UAAuB,OAAS,QAEtD+uC,QAASrnC,KAAKwB,MAAMkB,OAAO2kC,QAC3BG,QAASxnC,KAAKwB,MAAMkB,OAAO8kC,QAC3BroC,MAA4B,OAArBa,KAAKkC,MAAM/C,YAAuC5N,IAArByO,KAAKkC,MAAM/C,MAAsB,GAAKa,KAAKkC,MAAM/C,MACrFoJ,WAAYA,EACZ0S,SAAUjb,KAAKwB,MAAMkB,OAAOuY,WAAY,EACxC1X,SAAU7L,IACN,MAAMyH,EAAQzH,EAAElC,OAAO2J,MACvBa,KAAKmC,SACD,CAAEhD,QAAO+3B,SAAUl3B,KAAKkC,MAAM/C,MAAOg1B,UAAWn0B,KAAKm1B,aAAah2B,KAClE,IAAMa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM2Q,GAAS,KACjD,EAEL4R,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,eAE/Co2B,GAAUloC,GAASe,KAAKkC,MAAMiyB,WAC3BliC,EAAAA,EAAAA,KAAA,OAAKF,MAAOkN,EAAQuM,GAAOvM,MAAQuM,GAAO27B,OAAOj1C,SAC5C+M,IAAUe,KAAKkC,MAAMiyB,UAAYnmC,EAAAA,KAAKC,EAAE,mBAAqBk5C,KAElE,OAGhB,CACA,OACIl1C,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTtM,MAA4B,OAArBa,KAAKkC,MAAM/C,YAAuC5N,IAArByO,KAAKkC,MAAM/C,MAAsB,GAAKa,KAAKkC,MAAM/C,MACrFF,QAASA,KAAWe,KAAKkC,MAAMiyB,UAC/B5rB,WAAYA,EACZ4G,UAAW,CACPqC,UAAW,CACPC,UAAWzR,KAAKwB,MAAMkB,OAAO+O,WAAazR,KAAKwB,MAAMkB,OAAOgP,UAAOngB,EACnE0pB,SAAUjb,KAAKwB,MAAMkB,OAAOuY,WAAY,GAE5Ce,MAAO,CACHgI,aACKhkB,KAAKwB,MAAMkB,OAAOuY,UAAa1S,IAAYvI,KAAKkC,MAAM/C,OAAUa,KAAKwB,MAAMkB,OAAOuhB,cAa/E,MAZAhyB,EAAAA,EAAAA,KAAC2mC,EAAAA,eAAc,CAACtb,SAAS,MAAKprB,UAC1BD,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,IACLjL,KAAKmC,SAAS,CAAEhD,MAAO,GAAI+3B,SAAUl3B,KAAKkC,MAAM/C,QAAS,IACrDa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM,MAEtC0D,UAEDD,EAAAA,EAAAA,KAACiiC,EAAAA,MAAS,UAMlC3wB,SAAU7L,IACN,MAAMyH,EAAQzH,EAAElC,OAAO2J,MAEvBa,KAAKmC,SAAS,CAAEhD,QAAO+3B,SAAUl3B,KAAKkC,MAAM/C,MAAOg1B,UAAWn0B,KAAKm1B,aAAah2B,KAAU,IACtFa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM2Q,IAClC,EAEL4R,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WACIhR,KAAKkC,MAAMiyB,UACLnmC,EAAAA,KAAKC,EAAE,mBACP+R,KAAK8I,WACD9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,gBAK5C,GCpREgH,GACS,CACP5E,MAAO,QA+If,SAzHA,cAA+BvF,EAA4DE,WAAAA,GAAA,SAAA7G,WAAA,KAC/EuW,aAAc,EAAM,KAEpBC,cAAQ,EAEhBC,WAAAA,GACI,GAAInR,KAAKwB,MAAMmC,MAAO,CAClB,IAAI3B,EAAwChC,KAAKwB,MAAMkB,OAAOV,KAC9D,QAAazQ,IAATyQ,GAAsBhC,KAAKwB,MAAMkB,OAAOkB,SAAU,CAClD,MAAMC,EAAkB7D,KAAK8D,WAAW9D,KAAKwB,MAAMkB,OAAOkB,UAC1D,IACI5B,EAAO7R,KAAKC,MAAMyT,EACtB,CAAE,MACE/K,QAAQmG,MAAM,2BAA2B4E,IAC7C,CACJ,MAEatS,IAATyQ,IACAA,EAAO,MAGNhC,KAAKwB,MAAMuC,OACXL,OAAO,GAAG1D,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,WAAYjE,KAAKwB,MAAMkB,OAAO0O,SAAW,OAAQpP,GAChGxC,MAAK1O,IACF,GAAsB,kBAAXA,EAAqB,CAC5B,MAAMyoB,EAAkBzoB,EACxBkP,KAAKmC,SAAS,CACVpU,KAAMwrB,EAAMxrB,MAAQ,GACpBgE,MAAOwnB,EAAMxnB,MACbN,KAAM8nB,EAAM9nB,KACZg2C,UAAWluB,EAAMkuB,WAEzB,KAA6B,kBAAX32C,GACdkP,KAAKmC,SAAS,CAAEpU,KAAM+C,GAAU,IACpC,IAEHmW,OAAMvP,GAAKoB,QAAQmG,MAAM,wBAAwBvH,MAC1D,CACJ,CAEA2Z,UAAAA,GACI,MAAMC,EAA+B,CAAC,EAMtC,OALIvgB,MAAMuJ,QAAQ0F,KAAKwB,MAAMkB,OAAO6O,gBAChCvR,KAAKwB,MAAMkB,OAAO6O,cAAc3V,SAC5BpN,GAAS8iB,EAAQ9iB,GAAQ6S,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMxT,KAGlE2B,KAAKE,UAAUihB,EAC1B,CAEA7I,UAAAA,GACI,GAAIzI,KAAKwB,MAAMmC,MAAO,CAClB,MAAM2N,EAAUtR,KAAKqR,aACjBC,IAAYtR,KAAKkR,UAAalR,KAAKiR,cACnCjR,KAAKkR,SAAWI,EAChBhO,YAAW,IAAMtD,KAAKmR,eAAenR,KAAKiR,YAAc,IAAM,IAC9DjR,KAAKiR,aAAc,EAE3B,CAEA,QAAwB1f,IAApByO,KAAKkC,MAAMnU,KACX,OAAO,KAGX,IAAI0D,EAA2B,KAgB/B,OAfIuO,KAAKkC,MAAMzQ,OACXA,EAAOyrC,GAAcl9B,KAAKkC,MAAMzQ,KAAM,CAClCwhB,YAAajT,KAAKkC,MAAMnU,KAAO,OAAIwD,KAC/ByO,KAAKkC,MAAMulC,gBAAal2C,IAE3BE,IACDA,GACIQ,EAAAA,EAAAA,KAAC0U,EAAAA,KAAI,CACDtU,IAAK2N,KAAKkC,MAAMzQ,KAChBM,MAAO,CAAEkhB,YAAajT,KAAKkC,MAAMnU,KAAO,OAAIwD,KAAeyO,KAAKkC,MAAMulC,gBAAal2C,OAM/D,SAAhCyO,KAAKwB,MAAMkB,OAAOmI,WAEd5Y,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTkX,WAAY,CACRqB,aAAchkB,KAAKwB,MAAMkB,OAAOjL,iBAC5BxF,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACP7E,KAAK,QACLuB,QAASA,KACLre,EAAAA,MAAM6K,gBAAgBuI,KAAKkC,MAAMnU,MACjCY,OAAO0rB,MAAM,SAAS,EACxBnoB,UAEFD,EAAAA,EAAAA,KAACknC,EAAAA,SAAQ,WAEb5nC,GAER4N,MAAOa,KAAKkC,MAAMnU,KAClB8a,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,kBAM9B4F,EAAAA,EAAAA,MAAA,OAAKrY,MAAO,IAAKyZ,MAAsBxL,KAAKkC,MAAMnQ,YAASR,GAAaW,SAAA,CACnET,EACgC,SAAhCuO,KAAKwB,MAAMkB,OAAOmI,WACf5Y,EAAAA,EAAAA,KAAA,QAAMouC,wBAAyB,CAAEC,OAAQtgC,KAAKkC,MAAMnU,MAAQ,MAE5DiS,KAAKkC,MAAMnU,OAI3B,GCzFJ,SAzCA,cAA0BsT,EACtB8B,iBAAAA,GAA2B,IAADukC,EACtBjmC,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjE,IAAK2Q,GAA6B,QAAxBuoC,EAAI1nC,KAAKwB,MAAMqB,iBAAS,IAAA6kC,GAApBA,EAAsBj4C,IAAK,CACrC,MAAMk4C,EApBlB,SAAyBv5C,EAAY6S,GACjC,IAAI0mC,EAOJ,OALIA,EADA1mC,GAAa7S,EAAGf,UAAU,EAAG4T,EAAUjP,UAAYiP,EAC3C7S,EAAGf,UAAU4T,EAAUjP,OAAS,GAEhC5D,EAEZu5C,EAAQA,EAAMz4C,QAAQ,MAAO,KAAKA,QAAQ,KAAM,KACzCy4C,CACX,CAW0BC,CAAgB5nC,KAAKwB,MAAMqB,UAAUpT,IAAK,GAAGuQ,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,YAChGjE,KAAKmC,SAAS,CAAEhD,MAAOwoC,GAC3B,MACI3nC,KAAKmC,SAAS,CAAEhD,MAAOA,GAAS,IAExC,CAEAsJ,UAAAA,CAAWxJ,EAAesJ,GACtB,OACItW,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACT0D,UAAW,CACPqC,UAAW,CACPC,UAAWzR,KAAKwB,MAAMkB,OAAO+O,WAAazR,KAAKwB,MAAMkB,OAAOgP,UAAOngB,IAG3E4N,MAAOa,KAAKkC,MAAM/C,MAClBF,QAASA,EACTsJ,SAAUA,EACVwI,YAAa/Q,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOqO,aAC5ClI,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,OACtCmI,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,eAEtBjB,SAAU7L,IACN,MAAMyH,EAAQzH,EAAElC,OAAO2J,MACvBa,KAAKmC,SAAS,CAAEhD,UAAS,IAAMa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAM2Q,IAAO,GAIrF,GCCJ,SA1CA,cAAyBkC,EACrB,uBAAM8B,GAAoC,IAADwV,EACrClX,MAAM0B,oBAEN,MAAMyV,QAAgB5Y,KAAKwB,MAAMuC,OAAO0P,UAAU,oBAClDzT,KAAKmC,SAAS,CAAEwU,MAAa,OAAPiC,QAAO,IAAPA,GAAe,QAARD,EAAPC,EAAShiB,cAAM,IAAA+hB,OAAR,EAAPA,EAAiBhC,OAAQ,WACnD,CAEAlO,UAAAA,CAAWxJ,EAAgBsJ,GACvB,OACItW,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACRS,WAAS,EACTxM,QAASA,EACTsJ,WAAYA,EACZ4G,UAAW,CACPqC,UAAW,CAAEyJ,UAAU,GACvBe,MAAO,CACHgI,cACI/xB,EAAAA,EAAAA,KAACsc,EAAAA,WAAU,CACPtD,QAASA,KACLre,EAAAA,MAAM6K,gBAAgBuI,KAAKkC,MAAMyU,MACjChoB,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAE,eAAgB+R,KAAKkC,MAAMyU,MAAM,EACvDzkB,UAEFD,EAAAA,EAAAA,KAACknC,EAAAA,YAAQ,QAKzBh6B,MAAOa,KAAKkC,MAAMyU,MAAQ,GAC1B9N,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,QAAU7a,EAAAA,KAAKC,EAAE,2BACvD+iB,WAAYhR,KAAK8I,WACb9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,gBAIlC,GCjDEgH,GAA8C,CAChD/Z,KAAM,CACFmV,MAAO,GACPC,OAAQ,GACRoM,YAAa,IAkIrB,SAtHA,cAAyB5R,EACrB8B,iBAAAA,GACI1B,MAAM0B,oBACNnD,KAAKwB,MAAMuC,OACN8jC,WACAroC,MAAKsoC,IACF,MAAMC,EAA0E,CAAC,EAC3EpmC,EAAO3T,EAAAA,KAAK0I,cAEdsJ,KAAKwB,MAAMkB,OAAOgtB,MAClBoY,EAAMlsC,SACF3L,IAAI,IAAA+3C,EAAAC,EAAA,OACCF,EAAO93C,EAAKR,KAAO,CAChBiC,MAAkB,QAAbs2C,EAAE/3C,EAAKvB,cAAM,IAAAs5C,OAAA,EAAXA,EAAat2C,MACpBD,KAAiB,QAAbw2C,EAAEh4C,EAAKvB,cAAM,IAAAu5C,OAAA,EAAXA,EAAax2C,KACnB3E,KAAMF,EAAAA,MAAM0C,qBAAqBW,EAAM0R,GAC1C,IAGTmmC,EAAMlsC,SACF3L,IAAI,IAAAi4C,EAAAC,EAAA,OACCJ,EAAO93C,EAAKR,IAAIP,QAAQ,kBAAmB,KAAO,CAC/CwC,MAAkB,QAAbw2C,EAAEj4C,EAAKvB,cAAM,IAAAw5C,OAAA,EAAXA,EAAax2C,MACpBD,KAAiB,QAAb02C,EAAEl4C,EAAKvB,cAAM,IAAAy5C,OAAA,EAAXA,EAAa12C,KACnB3E,KAAMF,EAAAA,MAAM0C,qBAAqBW,EAAM0R,GAC1C,IAIb3B,KAAKmC,SAAS,CAAE2lC,MAAOC,GAAS,IAEnC9gC,OAAMvP,GAAKoB,QAAQmG,MAAM,qBAAqBvH,MACvD,CAEA+Q,UAAAA,CAAWxJ,EAAesJ,GAAsD,IAAD6/B,EAAAC,EAC3E,MAAMlpC,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MAEjE,OACI4b,EAAAA,EAAAA,MAACyH,EAAAA,YAAW,CACR7G,QAAQ,WACRS,WAAS,EAAAvZ,SAAA,CAER8N,KAAKkC,MAAM4lC,OAAS9nC,KAAKwB,MAAMkB,OAAOmG,OACnC5W,EAAAA,EAAAA,KAAC6f,EAAAA,WAAU,CAAA5f,SAAE8N,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAC5C,KACF7I,KAAKkC,MAAM4lC,OAUT71C,EAAAA,EAAAA,KAACwgB,EAAAA,OAAM,CACHzH,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOA,EACPwT,YAAarL,IAAG,IAAAghC,EAAAC,EAAAC,EAAA,OACZp+B,EAAAA,EAAAA,MAAA,QAAAlY,SAAA,CACK8N,KAAKkC,MAAM4lC,OAA8B,QAAzBQ,EAAItoC,KAAKkC,MAAM4lC,MAAMxgC,UAAI,IAAAghC,GAArBA,EAAuB72C,MACxCQ,EAAAA,EAAAA,KAAC0U,EAAAA,KAAI,CACDtU,IAAK2N,KAAKkC,MAAM4lC,QAA8B,QAAzBS,EAAIvoC,KAAKkC,MAAM4lC,MAAMxgC,UAAI,IAAAihC,OAAA,EAArBA,EAAuB92C,MAChDM,MAAOyZ,GAAO/Z,OAElB,KACFuO,KAAKkC,MAAM4lC,QAA8B,QAAzBU,EAAIxoC,KAAKkC,MAAM4lC,MAAMxgC,UAAI,IAAAkhC,OAAA,EAArBA,EAAuB17C,OAASwa,GAAO,KAC1D,EAEXvV,MAAO,CACHL,MAAQsO,KAAKkC,MAAM4lC,QAAgC,QAA3BM,EAAIpoC,KAAKkC,MAAM4lC,MAAM3oC,UAAM,IAAAipC,OAAA,EAAvBA,EAAyB12C,aAAUH,EAC/Doa,gBAAiB/e,EAAAA,MAAMyL,iBACnB2H,KAAKkC,MAAM4lC,QAAgC,QAA3BO,EAAIroC,KAAKkC,MAAM4lC,MAAM3oC,UAAM,IAAAkpC,OAAA,EAAvBA,EAAyB32C,OAC7CsO,KAAKwB,MAAMlJ,YAGnBiL,SAAU7L,GAAKsI,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMkJ,EAAElC,OAAO2J,OAAOjN,SAE7D8N,KAAKkC,MAAM4lC,OACRl4C,OAAOyQ,KAAKL,KAAKkC,MAAM4lC,OAAO56C,KAAIkB,IAC9Bgc,EAAAA,EAAAA,MAACyI,EAAAA,SAAQ,CACL9gB,MAAO,CACHL,MAAOsO,KAAKkC,MAAM4lC,MAAM15C,GAAIsD,YAASH,EACrCoa,gBAAiB/e,EAAAA,MAAMyL,iBACnB2H,KAAKkC,MAAM4lC,MAAM15C,GAAIsD,MACrBsO,KAAKwB,MAAMlJ,YAInB6G,MAAO/Q,EAAG8D,SAAA,CAET8N,KAAKkC,MAAM4lC,MAAM15C,GAAIqD,MAClBQ,EAAAA,EAAAA,KAAC0U,EAAAA,KAAI,CACDtU,IAAK2N,KAAKkC,MAAM4lC,MAAM15C,GAAIqD,KAC1BM,MAAOyZ,GAAO/Z,OAElB,KACHuO,KAAKkC,MAAM4lC,MAAM15C,GAAItB,OATjBsB,QA5CrB6D,EAAAA,EAAAA,KAAC6e,EAAAA,UAAS,CACN9F,QAAQ,WACR/L,QAASA,EACTsJ,WAAYA,EACZpJ,MAAOA,EACPoE,SAAU7L,GAAKsI,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMkJ,EAAElC,OAAO2J,OACvD0J,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,SAoD7C7I,KAAKwB,MAAMkB,OAAOiN,MACf1d,EAAAA,EAAAA,KAAC2d,EAAAA,eAAc,CAAA1d,SACV8N,KAAK8I,WACF9I,KAAKwB,MAAMkB,OAAOiN,KAClB3P,KAAKwB,MAAMkB,OAAOmN,SAClB7P,KAAKwB,MAAMkB,OAAO8B,iBAG1B,OAGhB,GCrGJ,SAzBA,cAA2BnD,EACvB,uBAAM8B,GACF1B,MAAM0B,oBAEN,MAAM0iB,QAAe,gCACrB7lB,KAAKmC,SAAS,CAAEsmC,OAAQ5iB,EAAO5iB,SACnC,CAEAwF,UAAAA,GACI,MAAMigC,EAAkB1oC,KAAKkC,MAAMumC,OACnC,OAAKC,GAIDz2C,EAAAA,EAAAA,KAACy2C,EAAe,CACZvpC,MAAOa,KAAKwB,MAAMkB,OAAOV,KACzB0H,KAAM1J,KAAKwB,MAAMkB,OAAOgH,KACxBi/B,QAAS3oC,KAAKwB,MAAMkB,OAAOimC,QAC3BC,QAAS5oC,KAAKwB,MAAMkB,OAAOkmC,QAC3BC,MAAO7oC,KAAKwB,MAAMkB,OAAOmmC,QARtB,IAWf,GC2BEC,GAA6D,CAC/DC,UAAWC,EACXrlC,MAAOslC,EACPC,aAAcC,EACdC,mBAAoBC,EACpBC,eAAgBC,EAChBC,YAAaC,EACbt2B,aAAcu2B,EACdC,SAAUC,EACV5wB,aAAc3D,EACd8I,KAAM0rB,EACNvpB,MAAOupB,EACPn4C,MAAOo4C,GACPC,YAAaC,GACb53B,KAAM63B,EACNj6C,OAAQ22B,GACRujB,WCpEW,cAA+B7oC,EAC1C8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjEwR,KAAKmC,SAAS,CAAEhD,SACpB,CAEAsJ,UAAAA,CAAWC,EAAiBH,GACxB,OACItW,EAAAA,EAAAA,KAACk4C,GAAAA,WAAU,CACPp7B,GAAIpO,IAAK,CACLiG,MAAO,OACPsW,aAAc,aAAavc,EAAMiL,QAAQ7d,KAAKovB,UAC9C,aAAc,CACV5e,QAAS,QAEb,UAAW,CACP3K,QAAS,GAAG+M,EAAMypC,QAAQ,gBAE9B,4BAA6B,CACzBj9B,WAAY,EACZC,UAAW,GAEf,UAAW,CACPoQ,UAAW,sCAGnBzpB,OAAQiM,KAAKwB,MAAM6G,aAAarU,WAAW1G,cAAc4B,QAAQ,KAAM,MACvEqZ,WAAYA,EACZpJ,MAAOa,KAAKkC,MAAM/C,MAClBoE,SAAUpE,IACNa,KAAKmC,SAAS,CAAEhD,UAAS,IAAMa,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,QAAO,EAEpF0J,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,QAGlD,GDiCAwhC,cAAeC,GACfvlB,QAASwlB,GACThjB,KAAMijB,GACNC,aAAchhB,GACd/kB,KAAMgmC,GACNptC,OAAQqtC,GACRviB,MAAOwiB,GACPC,YAAaC,GACb7mC,SAAU8mC,GACVC,UAAWC,GACXvY,GAAIwY,GACJC,WAAYC,GACZ38C,SAAU48C,GACVh1B,QAASi1B,GACTC,OAAQC,GACRC,SAAUC,GACVlT,SAAUmT,GACVviC,QAASwiC,GACT/a,KAAMgb,GACNC,OAAQC,GACRC,KAAMC,GACNC,OAAQC,GACRC,aAAcC,GACdC,OAAQC,GACR7oC,OAAQ6oC,GACRpqC,SAAUqqC,GACV7P,OAAQ8P,GACRvqC,MAAOwqC,GACPC,YAAaC,GACbC,WAAYC,GACZC,WAAYD,GACZj/B,MAAOs0B,GACPp0C,KAAMi/C,GACNC,WAAYC,GACZC,WEtGW,cAA+B9rC,EAC1C8B,iBAAAA,GACI1B,MAAM0B,oBACN,MAAMhE,EAAQkC,EAAcY,SAASjC,KAAKwB,MAAMQ,KAAMhC,KAAKwB,MAAMhT,MACjEwR,KAAKmC,SAAS,CAAEhD,SACpB,CAEAsJ,UAAAA,CAAWC,EAAiBH,GAExB,MAAM6kC,EAAiD,aAAnCptC,KAAKwB,MAAMkB,OAAO2qC,aAEhCluC,EAAe,IAAIxK,KAAKA,KAAKvE,MAAM,oBAAoB4P,KAAKkC,MAAM/C,OAAS,eAEjF,OACIlN,EAAAA,EAAAA,KAACq7C,GAAAA,WAAU,CACPv+B,GAAIpO,IAAK,CACLiG,MAAO,OACPsW,aAAc,aAAavc,EAAMiL,QAAQ7d,KAAKovB,UAC9C,aAAc,CACV5e,QAAS,QAEb,UAAW,CACP3K,QAAS,GAAG+M,EAAMypC,QAAQ,gBAE9B,4BAA6B,CACzBj9B,WAAY,EACZC,UAAW,GAEf,UAAW,CACPoQ,UAAW,sCAGnB+vB,KAAMvtC,KAAKwB,MAAM6G,aAAarU,WAAW+C,SAAS,KAClDy2C,UACIxtC,KAAKwB,MAAMkB,OAAO8qC,WAAaxtC,KAAKwB,MAAMkB,OAAO+qC,WAAa,CAAE5/C,MAAO,EAAGC,QAAS,EAAGL,QAAS,GAEnGsG,OAAQiM,KAAKwB,MAAMkB,OAAO3O,QAAU,WACpCwU,WAAYA,EACZpJ,MAAOA,EACPoE,SAAWwD,IACP,IAAI2mC,EACJA,EACK3mC,aAA4BpS,KACvBoS,EAAS4mC,eAAe5gD,MAAM,KAAK,GACnCga,EAAS4mC,eACfP,IACAM,EAAWA,EAAS3gD,MAAM,KAAKmG,MAAM,EAAG,GAAG3F,KAAK,MAGpDyS,KAAKmC,SAAS,CAAEhD,MAAOuuC,IAAY,IAAM1tC,KAAKuD,SAASvD,KAAKwB,MAAMhT,KAAMwR,KAAKkC,MAAM/C,QAAO,EAE9FyuC,MAAO5tC,KAAKwB,MAAMkB,OAAOkrC,OAAS,CAAC,QAAS,UAAW,WACvD/kC,MAAO7I,KAAKuE,QAAQvE,KAAKwB,MAAMkB,OAAOmG,QAGlD,GFgDA8+B,MAAOkG,GACPl3B,KAAMm3B,GACN79C,KAAM89C,IAGJviC,GAA8B,CAChCC,UAAW,CACP7E,MAAO,QAGXs6B,MAAO,CACH9iB,OAAQ,EACRxX,MAAO,kBACP6vB,UAAW,OACX7Z,cAAe,GAEnBoxB,eAAgB,CACZnnC,OAAQ,kCAEZonC,kBAAmB,CACfpnC,OAAQ,kCAEZjT,QAAS,CACLA,QAAS,QAEbs6C,QAAS,CAAC,EACV/wB,QAAUxc,IAAe,CACrBgL,gBAAiBhL,EAAMiL,QAAQuR,QAAQc,KACvCvsB,MAA8B,SAAvBiP,EAAMiL,QAAQC,KAAkB,UAAY,SAEvD20B,UAAY7/B,IAAe,CACvBgL,gBAAiBhL,EAAMiL,QAAQ40B,UAAUviB,QAYjD,MAAM5Q,WAAoBhM,EACtB8B,iBAAAA,GACI1B,MAAM0B,oBACFnD,KAAKwB,MAAMkB,QAAU1C,KAAKwB,MAAMkB,OAAOyrC,aACvCnuC,KAAKmC,SAAS,CACVuM,SAGU,UAFH/f,OAAemM,eAA6BnM,OAAOoM,cAAcC,QAChE,GAAGgF,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMhT,SAI5D,CAEA4/C,WAAAA,CAAYxhC,EAA4BrE,GACpC,OAAOqE,EACDhd,OAAOyQ,KAAKuM,GAAO1f,KAAIsB,IACnB,GAAIwR,KAAKwB,MAAMy1B,WAAarqB,EAAMpe,GAAM6/C,YACpC,OAAO,KAGX,MAAMnvC,EAAO0N,EAAMpe,GAAM0Q,MAAQ,QACjC,IAAIovC,EAkBJ,MAjBa,WAATpvC,EAGI0N,EAAMpe,GAAM0O,IACZoxC,EAAgB3nB,GACT3mB,KAAKwB,MAAM8L,SAAWtN,KAAKwB,MAAM8L,QAAQV,EAAMpe,GAAM8f,WAC5DggC,EAAgBtuC,KAAKwB,MAAM8L,QAAQV,EAAMpe,GAAM8f,YAE/CxV,QAAQmG,MAAM,iCAAiC2N,EAAMpe,GAAM8f,aAC3DggC,EAAgBjtC,GAGpBitC,EADgB,UAATpvC,EACSmO,GAEAy7B,GAAW5pC,IAASmC,GAIpCpP,EAAAA,EAAAA,KAACq8C,EAAa,CAEVj5C,MAAO2K,KAAKwB,MAAMnM,MAClBkS,QAASvH,KAAKwB,MAAM+F,QACpBxE,WAAY/C,KAAKwB,MAAMuB,WACvBC,WAAYhD,KAAKwB,MAAMwB,WACvByK,iBAAkBzN,KAAKwB,MAAMiM,iBAC7B/C,eAAgB1K,KAAKwB,MAAMkJ,eAC3B3Y,MAAOyZ,GAAO+iC,MACdxqC,OAAQ/D,KAAKwB,MAAMuC,OACnBC,YAAahE,KAAKwB,MAAMwC,YACxBC,SAAUjE,KAAKwB,MAAMyC,SACrBvV,OAAQsR,KAAKwB,MAAM9S,OACnB4e,QAAStN,KAAKwB,MAAM8L,QACpB3J,MAAO3D,KAAKwB,MAAMmC,MAClBrL,UAAW0H,KAAKwB,MAAMlJ,UACtBsC,UAAWoF,KAAKwB,MAAM5G,UACtB+F,MAAOX,KAAKwB,MAAMb,MAClBqB,KAAMhC,KAAKwB,MAAMQ,KACjBoG,aAAcpI,KAAKwB,MAAM4G,aACzBC,aAAcrI,KAAKwB,MAAM6G,aACzBlE,QAASnE,KAAKwB,MAAM2C,QACpBZ,SAAUvD,KAAKwB,MAAM+B,SACrBqK,iBAAkB5N,KAAKwB,MAAMoM,iBAC7BqpB,UAAWj3B,KAAKwB,MAAMy1B,UACtBjjC,WAAYgM,KAAKwB,MAAMxN,WACvBuZ,aAAcvN,KAAKwB,MAAM+L,aACzBhF,SAAUA,EACViF,YAAaxN,KAAKwB,MAAMgM,YACxBqoB,eAAgB71B,KAAKwB,MAAMq0B,eAC3BzzB,YAAapC,KAAKwB,MAAMY,YACxBgB,sBAAuBpD,KAAKwB,MAAM4B,sBAClCP,UAAW7C,KAAKwB,MAAMqB,UACtBC,YAAa9C,KAAKwB,MAAMsB,YACxB9S,OAAQgQ,KAAKwB,MAAMxR,OACnB0S,OAAQkK,EAAMpe,GACdsf,cAAe9N,KAAKwB,MAAMsM,cAC1Btf,KAAMA,EACNqf,MAAO7N,KAAKwB,MAAMqM,OArCb,GAAGrf,UAA6B+C,IAArByO,KAAKwB,MAAMnM,MAAsB,GAAK2K,KAAKwB,MAAMnM,QAsCnE,IAGV,IACV,CAEAkU,MAAAA,GACI,MAAM7G,EAAS1C,KAAKwB,MAAMkB,OAE1B,IAAKA,EACD,OAAO,KAGX,MAAM,SAAE6F,EAAQ,OAAEX,GAAW5H,KAAKsI,UAAU5F,GAEtCkK,EAAQ5M,KAAKwB,MAAMkB,OAAOkK,MAC1B4hC,EAAcxuC,KAAKwB,MAAMkB,OAAO3Q,OAAS,CAAC,EAEhD,GAAI6V,EAAQ,CACR,GAAIlF,EAAO8G,gBAAiB,CACxB,MAAMvc,GACFgF,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CACFC,KAAM,CACFC,GAAIjH,EAAOiH,SAAMpY,EACjBqY,GAAIlH,EAAOkH,SAAMrY,EACjBsY,GAAInH,EAAOmH,SAAMtY,EACjBuY,GAAIpH,EAAOoH,SAAMvY,EACjBwY,GAAIrH,EAAOqH,SAAMxY,GAErBwd,GAAIniB,EAAM8T,SACNV,KAAKwB,MAAMb,MACX,CAAEqJ,aAAc,EAAGC,UAAW,QAC9BukC,EACyB,SAAzBxuC,KAAKwB,MAAMlJ,WAAwBoK,EAAOwH,aAKtD,OAAIxH,EAAOyH,SAEHC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,EACID,EAAAA,EAAAA,KAAA,OAAKF,MAAO,CAAEuY,UAAW,OAAQzD,OAAQ,KACxC5Z,KAINA,CACX,CACA,OAAO,IACX,CAEA,GAAI+S,KAAKwB,MAAMqM,MACX,OAAO7N,KAAKouC,YAAYxhC,EAAOrE,GAGnC,GAAIvI,KAAKwB,MAAMxR,OACX,OACIiC,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CAEFoB,WAAS,EACT9Y,MAAOyZ,GAAOC,UACdgjC,cAAe,EACfC,WAAY,EACZ3/B,GAAIy/B,EAAYt8C,SAEf8N,KAAKouC,YAAYxhC,EAAOrE,IAPpB,GAAGvI,KAAKwB,MAAMhT,QAAQwR,KAAKwB,MAAMnM,SAYlD,IAAIygB,EA0EJ,GAxEIA,EADApT,EAAOyrC,aAEH/jC,EAAAA,EAAAA,MAACqE,EAAAA,UAAS,CAEN1c,MAAOyZ,GAAOC,UACdiD,WAAY1O,KAAKkC,MAAMwM,SACvBnL,SAAUA,MACH5U,OAAemM,eAA6BnM,OAAOoM,cAAcM,QAChE,GAAG2E,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMhT,OACxCwR,KAAKkC,MAAMwM,SAAW,QAAU,QAEpC1O,KAAKmC,SAAS,CAAEuM,UAAW1O,KAAKkC,MAAMwM,UAAW,EACnDxc,SAAA,EAEFD,EAAAA,EAAAA,KAAC2c,EAAAA,iBAAgB,CACbC,YAAY5c,EAAAA,EAAAA,KAAC6c,EAAAA,WAAc,IAC3BC,GAAIniB,EAAM8T,SACNV,KAAKwB,MAAMb,MACX6tC,EACAxuC,KAAKwB,MAAMlJ,WAAaoK,EAAOwH,UACd,YAAjBxH,EAAOhR,MACD8Z,GAAO2R,QACU,cAAjBza,EAAOhR,OAAyB8Z,GAAOg1B,UAC7C,CAAE55B,MAAO,SACX1U,UAEFD,EAAAA,EAAAA,KAACoc,EAAAA,WAAU,CAACtc,MAAOyZ,GAAO0iC,QAAQh8C,SAAE8N,KAAKuE,QAAQ7B,EAAOmG,YAE5D5W,EAAAA,EAAAA,KAACgd,EAAAA,iBAAgB,CAAA/c,UACbD,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CACFoB,WAAS,EACT4jC,cAAe,EACfC,WAAY,EACZ3/B,GAAI,IAAKy/B,EAAa5nC,MAAO,OAAQhT,QAAS,QAAS1B,SAEtD8N,KAAKouC,YAAYxhC,EAAOrE,SAhC5B,GAAGvI,KAAKwB,MAAMhT,QAAQwR,KAAKwB,MAAMnM,UAuC1CpD,EAAAA,EAAAA,KAAC0lB,EAAAA,IAAG,CACArJ,UAAU,MAEViU,UAAWviB,KAAKwB,MAAM+gB,UACtBxT,GAAIniB,EAAM8T,SACNV,KAAKwB,MAAMb,MACXX,KAAKwB,MAAMzP,MACXy8C,EACA,CAAE5nC,MAAO,QACT5G,KAAKwB,MAAMmtC,aAAenjC,GAAO01B,MACjClhC,KAAKwB,MAAMmtC,cACN3uC,KAAKwB,MAAMotC,UAAYpjC,GAAOwiC,eAAiBxiC,GAAOyiC,oBAC7D/7C,UAEFD,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CACFoB,WAAS,EACT4jC,cAAe,EACfC,WAAY,EACZ3/B,GAAIniB,EAAM8T,SACNV,KAAKwB,MAAMb,MACX,CAAEiG,MAAO,QACT5G,KAAKwB,MAAMmtC,aAAenjC,GAAO5X,QACjCoM,KAAKwB,MAAMkB,OAAOmsC,YACpB38C,SAED8N,KAAKouC,YAAYxhC,EAAOrE,MAvBxB,GAAGvI,KAAKwB,MAAMhT,QAAQwR,KAAKwB,MAAMnM,UA6B7C2K,KAAKwB,MAAMmtC,YAAa,CACzB,MAAM1hD,GACFgF,EAAAA,EAAAA,KAACwX,EAAAA,MAAK,CACF/T,MAAOsK,KAAKuE,QAAQ7B,EAAOiI,SAC3BjB,KAAM,CACFC,GAAIjH,EAAOiH,SAAMpY,EACjBqY,GAAIlH,EAAOkH,SAAMrY,EACjBsY,GAAInH,EAAOmH,SAAMtY,EACjBuY,GAAIpH,EAAOoH,SAAMvY,EACjBwY,GAAIrH,EAAOqH,SAAMxY,GAErBwd,GAAI,CAAE/E,aAAc,EAAyBC,UAAW,UAAWukC,GAAct8C,SAEhF4jB,IAIT,OAAIpT,EAAOyH,SAEHC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAnY,SAAA,EACID,EAAAA,EAAAA,KAAA,OAAKF,MAAO,CAAEuY,UAAW,OAAQzD,OAAQ,KACxC5Z,KAINA,CACX,CACA,OAAO6oB,CACX,EAGJ,YGpZMtK,GAA8C,CAChDsjC,KAAM,CACFjoC,OAAQ,OACRD,MAAO,QAEX2nC,MAAO,CACH3nC,MAAO,OACPrI,QAAS,SAEbwwC,eAAgB,CACZloC,OAAQ,qBAEZmoC,kBAAmB,CACfnoC,OAAQ,sBAqNhB,SAxMA,cAAyBxF,EACrBE,WAAAA,CAAYC,GAER,IAAIytC,EAEJ,GAHAxtC,MAAMD,GAAO,KAyCjB0tC,kBAAoB,KAChB,MAAMnO,GAAQpyC,OAAO8D,SAASsuC,MAAQ,IAAI7xC,QAAQ,KAAM,IAAInC,MAAM,KAClE,GAAIg0C,EAAK/uC,OAAS,GAAiB,WAAZ+uC,EAAK,GAAiB,CACzC,MAAMoO,EAAOpO,EAAK,GACZqO,EAAOh8C,SAAS+7C,EAAM,IAC5B,IAAIF,EACAG,EAAKngD,aAAekgD,EAChBC,GAAQ,GAAKA,EAAOx/C,OAAOyQ,KAAKL,KAAKwB,MAAMkB,OAAOkK,OAAO5a,SACzDi9C,EAAMr/C,OAAOyQ,KAAKL,KAAKwB,MAAMkB,OAAOkK,OAAOwiC,IAExCx/C,OAAOyQ,KAAKL,KAAKwB,MAAMkB,OAAOkK,OAAO7V,SAASo4C,KACrDF,EAAME,QAEE59C,IAAR09C,GAAqBA,IAAQjvC,KAAKkC,MAAM+sC,OACrCtgD,OAAemM,eAA6BnM,OAAOoM,cAAcM,QAChE,GAAG2E,KAAKwB,MAAMo2B,YAAc,SAAS53B,KAAKwB,MAAMwC,cAChDirC,GAEJjvC,KAAKmC,SAAS,CAAE8sC,QAExB,GA1DIjvC,KAAKwB,MAAMma,KAAM,CAGjB,MAAMolB,GAAQpyC,OAAO8D,SAASsuC,MAAQ,IAAI7xC,QAAQ,KAAM,IAAInC,MAAM,KAClE,GAAIg0C,EAAK/uC,QAAU,GAAiB,WAAZ+uC,EAAK,GAAiB,CAC1C,MAAMoO,EAAOpO,EAAK,GACZqO,EAAOh8C,SAAS+7C,EAAM,IACxBA,GAAQC,EAAKngD,aAAekgD,EACxBC,GAAQ,GAAKA,EAAOx/C,OAAOyQ,KAAKL,KAAKwB,MAAMkB,OAAOkK,OAAO5a,SACzDi9C,EAAMr/C,OAAOyQ,KAAKL,KAAKwB,MAAMkB,OAAOkK,OAAOwiC,IAExCD,GAAQv/C,OAAOyQ,KAAKL,KAAKwB,MAAMkB,OAAOkK,OAAO7V,SAASo4C,KAC7DF,EAAME,GAIVxgD,OAAO4nC,iBAAiB,aAAcv2B,KAAKkvC,mBAAmB,EAClE,CACJ,MAEY39C,IAAR09C,IACAA,GACOtgD,OAAemM,eAA6BnM,OAAOoM,cAAcC,QAChE,GAAGgF,KAAKwB,MAAMo2B,YAAc,SAAS53B,KAAKwB,MAAMwC,gBAC/CpU,OAAOyQ,KAAKL,KAAKwB,MAAMkB,OAAOkK,OAAO,GACzChd,OAAOyQ,KAAKL,KAAKwB,MAAMkB,OAAOkK,OAAO7V,SAASk4C,KAC/CA,EAAMr/C,OAAOyQ,KAAKL,KAAKwB,MAAMkB,OAAOkK,OAAO,KAInDhd,OAAOmR,OAAOf,KAAKkC,MAAO,CAAE+sC,IAAAA,GAChC,CAEA7qC,oBAAAA,GACIzV,OAAO0gD,oBAAoB,aAAcrvC,KAAKkvC,mBAAmB,GACjEztC,MAAM2C,sBACV,CAyBAmF,MAAAA,GACI,MAAMqD,EAAQ5M,KAAKwB,MAAMkB,OAAOkK,MAChC,IAAIgiC,GAAY,EAEhB,OACIxkC,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOsjC,KAAK58C,SAAA,EACpBD,EAAAA,EAAAA,KAACq9C,EAAAA,KAAI,CACDtkC,QAAQ,aACRukC,cAAc,OACdx9C,MAAOiO,KAAKwB,MAAMkB,OAAO8sC,UACzBrwC,MAAOa,KAAKkC,MAAM+sC,IAClB1rC,SAAUA,CAAC7L,EAAGu3C,MACPtgD,OAAemM,eAA6BnM,OAAOoM,cAAcM,QAChE,GAAG2E,KAAKwB,MAAMo2B,YAAc,SAAS53B,KAAKwB,MAAMwC,cAChDirC,GAEJjvC,KAAKmC,SAAS,CAAE8sC,QAAO,KACnB,GAAIjvC,KAAKwB,MAAMma,KAAM,CACjB,MAAMolB,GAAQpyC,OAAO8D,SAASsuC,MAAQ,IAAIh0C,MAAM,KAC5Cg0C,EAAK/uC,QAAU,GAAiB,WAAZ+uC,EAAK,KACzBA,EAAK,GAAK/gC,KAAKkC,MAAM+sC,IACrBtgD,OAAO8D,SAASsuC,KAAOA,EAAKxzC,KAAK,KAEzC,IACF,EACJ2E,SAEDtC,OAAOyQ,KAAKuM,GAAO1f,KAAIJ,IACpB,IAAIyb,EACJ,GAAIvI,KAAKwB,MAAMxR,OAAQ,CASnB,GARegQ,KAAK4C,cAChBgK,EAAM9f,GAAM8a,OACZ5H,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMnM,MACX2K,KAAKwB,MAAMwB,YAGX,OAAO,KAEXuF,EAAWvI,KAAK4C,cACZgK,EAAM9f,GAAMyb,SACZvI,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMqB,UACX7C,KAAKwB,MAAMsB,YACX9C,KAAKwB,MAAMnM,MACX2K,KAAKwB,MAAMwB,WAEnB,KAAO,CAQH,GAPwBhD,KAAKkD,QACzB0J,EAAM9f,GAAM8a,QACZ,EACA5H,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMnM,MACX2K,KAAKwB,MAAMwB,YAGX,OAAO,KAEXuF,EAAWvI,KAAKkD,QACZ0J,EAAM9f,GAAMyb,UACZ,EACAvI,KAAKwB,MAAMQ,KACXhC,KAAKwB,MAAMnM,MACX2K,KAAKwB,MAAMwB,WAEnB,CACA,MAAMvR,EAAOuO,KAAKlO,QAAQ8a,EAAM9f,GAAM2E,MAGtC,OAFAm9C,EAAYA,KAAen9C,GAGvBQ,EAAAA,EAAAA,KAACw9C,EAAAA,IAAG,CACArhD,GAAItB,EACJ4iD,SAAO,EACPnnC,SAAUA,EAEVpJ,MAAOrS,EACP6iD,aAAc3vC,KAAKwB,MAAMkB,OAAOitC,cAAgB,QAChDl+C,KAAMA,EACNoX,MAAO7I,KAAKuE,QAAQqI,EAAM9f,GAAM+b,QAJ3B/b,EAKP,OAIdmF,EAAAA,EAAAA,KAACob,GAAW,CACRshC,aAAW,EACXpnC,QAASvH,KAAKwB,MAAM+F,QAEpBlS,MAAO,KACP0N,WAAY/C,KAAKwB,MAAMuB,WACvBC,WAAYhD,KAAKwB,MAAMwB,WACvByK,iBAAkBzN,KAAKwB,MAAMiM,iBAC7B/C,eAAgB1K,KAAKwB,MAAMkJ,eAC3B3Y,MAAO,IACAyZ,GAAO+iC,SACNK,EAAYpjC,GAAOujC,eAAiBvjC,GAAOwjC,mBAEnDjrC,OAAQ/D,KAAKwB,MAAMuC,OACnBC,YAAahE,KAAKwB,MAAMwC,YACxBC,SAAUjE,KAAKwB,MAAMyC,SACrBvV,OAAQsR,KAAKwB,MAAM9S,OACnB4e,QAAStN,KAAKwB,MAAM8L,QACpB3J,MAAO3D,KAAKwB,MAAMmC,MAClBrL,UAAW0H,KAAKwB,MAAMlJ,UACtBsC,UAAWoF,KAAKwB,MAAM5G,UACtBoH,KAAMhC,KAAKwB,MAAMQ,KACjBoG,aAAcpI,KAAKwB,MAAM4G,aACzBC,aAAcrI,KAAKwB,MAAM6G,aACzB9E,SAAUvD,KAAKwB,MAAM+B,SACrBY,QAASnE,KAAKwB,MAAM2C,QACpByJ,iBAAkB5N,KAAKwB,MAAMoM,iBAC7BqpB,UAAWj3B,KAAKwB,MAAMy1B,UACtBjjC,WAAYgM,KAAKwB,MAAMxN,WACvBuZ,aAAcvN,KAAKwB,MAAM+L,aAEzBC,YAAaxN,KAAKwB,MAAMgM,YACxBqoB,eAAgB71B,KAAKwB,MAAMq0B,eAC3BzzB,YAAapC,KAAKwB,MAAMY,YACxBgB,sBAAuBpD,KAAKwB,MAAM4B,sBAClCP,UAAW7C,KAAKwB,MAAMqB,UACtBC,YAAa9C,KAAKwB,MAAMsB,YACxB9S,OAAQgQ,KAAKwB,MAAMxR,OACnB0S,OAAQkK,EAAM5M,KAAKkC,MAAM+sC,KACzBphC,MAAO7N,KAAKwB,MAAMqM,MAClBlN,MAAOX,KAAKwB,MAAMb,MAClBmN,cAAe9N,KAAKwB,MAAMsM,cAC1B8gC,UAAWA,GAvCN5uC,KAAKkC,MAAM+sC,OA2ChC,GC3NEzjC,GACI,CACF5E,MAAO,OACPC,OAAQ,QA4CT,MAAM+oC,WAA4BtuC,EAAAA,UAOrCC,WAAAA,CAAYC,GACRC,MAAMD,GAAO,KAPAquC,yBAAmB,OAE5BC,aAAqD,KAAK,KAE1DC,YAA6C,KAAK,KAiG1DtiC,iBAAoB/C,GAAkC1K,KAAKmC,SAAS,CAAEuI,mBAAkB,KAwBxFslC,QAAU,CAACvgD,EAAayS,OACT,OAALA,QAAK,IAALA,IAAAA,EAAOoF,OAAQtH,KAAKkC,MAAMyB,OAC5B3D,KAAKmC,SAAS,CAAEwB,QAAc,OAALzB,QAAK,IAALA,IAAAA,EAAOoF,MACpC,EACF,KAEF/D,SAAW,CAAC0sC,EAA0C9wC,EAAY+H,EAAiBm1B,KAC/E,GAAIr8B,KAAKwB,MAAM0uC,cACXlwC,KAAKwB,MAAM0uC,cAAcD,EAAsB9wC,EAAOk9B,GAClDn1B,GACAA,SAED,GAAI+oC,GAAcjwC,KAAKwB,MAAM+B,SAAU,CAC1C,MAAMwe,EAA8C,CAChDxa,QAASpX,KAAKE,UAAU4/C,KAAgBjwC,KAAKkC,MAAMkG,cAGvDpI,KAAKmC,SAAS4f,GAAsC,KAChD/hB,KAAKwB,MAAM+B,SAAS0sC,EAAmCluB,EAASxa,QAAS80B,GACrEn1B,GACAA,GACJ,GAER,MAAWm1B,GACPr8B,KAAKwB,MAAM+B,SAAS,KAAM,KAAM84B,EACpC,EACF,KAEFl4B,QAAU,CAAC3V,EAAcyQ,KACrBe,KAAK+vC,YAAc/vC,KAAK+vC,aAAe5/C,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKkC,MAAMuW,SAC5E,MAAMA,EAASzY,KAAK+vC,YAChB9wC,EACAwZ,EAAOjqB,GAAQyQ,SAERwZ,EAAOjqB,GAGdwR,KAAK8vC,cACLzrC,aAAarE,KAAK8vC,cAElB3/C,KAAKE,UAAUooB,KAAYtoB,KAAKE,UAAU2P,KAAKkC,MAAMuW,QACrDzY,KAAK8vC,aAAexsC,YAChB,IACItD,KAAKmC,SAAS,CAAEsW,OAAQzY,KAAK+vC,cAAe,KACxC/vC,KAAK8vC,aAAe,KACpB9vC,KAAK+vC,YAAc,KACnB/vC,KAAKwB,MAAM2C,UAAUvU,OAAOyQ,KAAKL,KAAKkC,MAAMuW,QAAQzmB,OAAO,KAEnE,IAGJgO,KAAK+vC,YAAc,IACvB,EACF,KA0MFla,eAAiB,KACb71B,KAAKoC,aAAa,EACpB,KAEF+tC,gBAAkB,CAAC3hD,EAAyBwT,KACpCjR,MAAMuJ,QAAQ9L,GACdA,EAAKoN,SAAQvH,GAAK2L,KAAK6vC,oBAAoBx7C,IAAM2L,KAAK6vC,oBAAoBx7C,GAAG2N,KACtEhC,KAAK6vC,oBAAoBrhD,IAChCwR,KAAK6vC,oBAAoBrhD,GAAMwT,EACnC,EACF,KAEFoB,sBAAwB,CAAC5U,EAAc0Y,KAC/BA,EACAlH,KAAK6vC,oBAAoBrhD,GAAQ0Y,EAC1BlH,KAAK6vC,oBAAoBrhD,WACzBwR,KAAK6vC,oBAAoBrhD,EACpC,EApYAwR,KAAKkC,MAAQ,CACTkG,aAAcjY,KAAKE,UAAU2P,KAAKwB,MAAMQ,MACxCuF,SAAS,EACTkR,OAAQ,CAAC,EACT23B,WAAYpwC,KAAKwB,MAAM4uC,YAAc,EACrC/nC,aAAc,KACd1E,OAAO,EACP+G,gBAAgB,EAChBhI,OAAQvS,KAAKC,MAAMD,KAAKE,UAAU2P,KAAKwB,MAAMkB,UAGjD1C,KAAK6vC,oBAAsB,CAAC,EAE5B7vC,KAAKqwC,kBAAkBrwC,KAAKkC,MAAMQ,QAElC1C,KAAKswC,UACT,CAEA,+BAAOxuB,CACHtgB,EACAU,GAEA,OAAIV,EAAM4uC,aAAeluC,EAAMkuC,WACpB,CACHA,WAAY5uC,EAAM4uC,WAClBhoC,aAAcjY,KAAKE,UAAUmR,EAAMQ,MACnCU,OAAQvS,KAAKC,MAAMD,KAAKE,UAAUmR,EAAMkB,UAGzC,IACX,CAEA,qBAAa6tC,CACTxsC,EACAsjB,EACArjB,GAEA,IAAa,IAATqjB,GAAkBA,GAAwB,kBAATA,EAAoB,CACrD,MAAM1lB,EAAO3T,EAAAA,KAAK0I,cACZkzB,EAAuB,kBAATvC,EAAoBA,EAAO,OAC/C,IACItvB,EADAy4C,QAAezsC,EAAOysB,WAAW,GAAGxsB,UAAqB,GAAG4lB,KAAQjoB,UAsBxE,GApBI6uC,EACAz4C,EAAW,GAAG6xB,KAAQjoB,UAEtB6uC,QAAezsC,EAAOysB,WAAW,GAAGxsB,UAAqB,GAAG4lB,KAAQjoB,uBAChE6uC,EACAz4C,EAAW,GAAG6xB,KAAQjoB,sBACN,OAATA,IAEP6uC,QAAezsC,EAAOysB,WAAW,GAAGxsB,UAAqB,GAAG4lB,aACxD4mB,EACAz4C,EAAW,GAAG6xB,aAEd4mB,QAAezsC,EAAOysB,WAAW,GAAGxsB,UAAqB,GAAG4lB,0BACxD4mB,IACAz4C,EAAW,GAAG6xB,6BAM1B7xB,EAAU,CACV,MAAM04C,QAAiB1sC,EAAO8nB,SAAS,GAAG7nB,UAAqBjM,GAC/D,IAAI24C,EAEAA,OADkBn/C,IAAlBk/C,EAASlpB,KACCkpB,EAASlpB,KAGTkpB,EAGd,IACI,MAAMxyC,EAAO9N,KAAKC,MAAMsgD,GAExB1iD,EAAAA,KAAKw5B,mBAAmBvpB,EAAM0D,EAClC,CAAE,MAAOjK,GAEL,OADAoB,QAAQmG,MAAM,+BAA+B+E,WAAqBjM,MAAaL,KACxE,EACX,CACA,OAAOK,CACX,CAEA,OADAe,QAAQC,KAAK,wBAAwBiL,OAAiBjM,KAC/C,EACX,CACA,OAAIsvB,GAAwB,kBAATA,GACfr5B,EAAAA,KAAKw5B,mBAAmBH,GACjB,IAEJ,EACX,CAIAipB,QAAAA,GACStwC,KAAKwB,MAAMuC,OACX+gB,yBACAtlB,MAAK6I,GACFrI,KAAKwB,MAAMuC,OACNgM,SAAS,kBAAkB/P,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,kBAChEzE,MAAK0C,IACElC,KAAKwB,MAAMxR,OACXgQ,KAAKmC,SAAS,CAAEkG,aAAcA,EAAa3Z,OAAQiV,SAAUzB,IAASA,EAAMoF,OAE5EtH,KAAKmC,SAAS,CAAEkG,aAAcA,EAAa3Z,OAAQiV,SAAUzB,IAASA,EAAMoF,OAAQ,IAChFtH,KAAKwB,MAAMuC,OAAOm7B,eACd,kBAAkBl/B,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,iBACvDjE,KAAKgwC,UAGjB,MAGX/oC,OAAMvP,GAAKoB,QAAQmG,MAAM,8BAA8BvH,MAChE,CAyDAi5C,OAAAA,CAAQjuC,EAA6BkuC,GASjC,OARAA,EAAQA,GAAS,CAAC,EACdluC,EAAOkK,OACPhd,OAAOyQ,KAAKqC,EAAOkK,OAAOhR,SAAQpN,IAC9BoiD,EAAMpiD,GAAQkU,EAAOkK,MAAMpe,GAC3BwR,KAAK2wC,QAAQjuC,EAAOkK,MAAMpe,GAAOoiD,EAAM,IAIxCA,CACX,CAEAP,iBAAAA,CAAkB3tC,GACd,MAAMhF,EAAQsC,KAAK2wC,QAAQjuC,GAC3B9S,OAAOyQ,KAAK3C,GAAO9B,SAAQpN,IAAS,IAADqiD,EAAAC,EAAAC,EAAAC,EAAAC,EACSC,EAsBCC,EAmBFC,EAmBDC,EAmBDC,EA/Ed,QAAvBT,EAAInzC,EAAMlP,GAAMoW,eAAO,IAAAisC,GAAnBA,EAAqBt/B,gBACF,QAAnB2/B,EAAAxzC,EAAMlP,GAAMoW,eAAO,IAAAssC,GAAnBA,EAAqB3/B,cAAc3V,SAASyL,IACxC,GAAK3J,EAAM2J,GAOJ,CACH3J,EAAM2J,GAAKD,iBAAmB1J,EAAM2J,GAAKD,kBAAoB,GAE7D,MAAMmqC,EAAS,IAAK7zC,EAAMlP,GAAOA,QAC7B+iD,EAAO3sC,UACP2sC,EAAO3sC,QAAQM,OAAS,QAG5BxH,EAAM2J,GAAKD,iBAAiB9R,KAAKi8C,EACrC,MAfIz4C,QAAQmG,MAAM,mCAAmCoI,qBAC7CA,EAAIlV,WAAW,UACf2G,QAAQC,KACJ,qCAAqCsO,EAAInY,QAAQ,UAAW,oBAAoBmY,KAY5F,KAIgB,QAAxBypC,EAAIpzC,EAAMlP,GAAM+U,gBAAQ,IAAAutC,GAApBA,EAAsBv/B,gBACF,QAApB4/B,EAAAzzC,EAAMlP,GAAM+U,gBAAQ,IAAA4tC,GAApBA,EAAsB5/B,cAAc3V,SAASyL,IACzC,GAAK3J,EAAM2J,GAOJ,CACH3J,EAAM2J,GAAKG,kBAAoB9J,EAAM2J,GAAKG,mBAAqB,GAE/D,MAAM+pC,EAAS,IAAK7zC,EAAMlP,GAAOA,QAEjCkP,EAAM2J,GAAKG,kBAAkBlS,KAAKi8C,EACtC,MAZIz4C,QAAQmG,MAAM,mCAAmCoI,qBAC7CA,EAAIlV,WAAW,UACf2G,QAAQC,KACJ,qCAAqCsO,EAAInY,QAAQ,UAAW,oBAAoBmY,KAS5F,KAIc,QAAtB0pC,EAAIrzC,EAAMlP,GAAMoZ,cAAM,IAAAmpC,GAAlBA,EAAoBx/B,gBACF,QAAlB6/B,EAAA1zC,EAAMlP,GAAMoZ,cAAM,IAAAwpC,GAAlBA,EAAoB7/B,cAAc3V,SAASyL,IACvC,GAAK3J,EAAM2J,GAOJ,CACH3J,EAAM2J,GAAKM,gBAAkBjK,EAAM2J,GAAKM,iBAAmB,GAE3D,MAAM4pC,EAAS,IAAK7zC,EAAMlP,GAAOA,QAEjCkP,EAAM2J,GAAKM,gBAAgBrS,KAAKi8C,EACpC,MAZIz4C,QAAQmG,MAAM,mCAAmCoI,qBAC7CA,EAAIlV,WAAW,UACf2G,QAAQC,KACJ,qCAAqCsO,EAAInY,QAAQ,UAAW,oBAAoBmY,KAS5F,KAIa,QAArB2pC,EAAItzC,EAAMlP,GAAMqa,aAAK,IAAAmoC,GAAjBA,EAAmBz/B,gBACF,QAAjB8/B,EAAA3zC,EAAMlP,GAAMqa,aAAK,IAAAwoC,GAAjBA,EAAmB9/B,cAAc3V,SAASyL,IACtC,GAAK3J,EAAM2J,GAOJ,CACH3J,EAAM2J,GAAKQ,eAAiBnK,EAAM2J,GAAKQ,gBAAkB,GAEzD,MAAM0pC,EAAS,IAAK7zC,EAAMlP,GAAOA,QAEjCkP,EAAM2J,GAAKQ,eAAevS,KAAKi8C,EACnC,MAZIz4C,QAAQmG,MAAM,mCAAmCoI,qBAC7CA,EAAIlV,WAAW,UACf2G,QAAQC,KACJ,qCAAqCsO,EAAInY,QAAQ,UAAW,oBAAoBmY,KAS5F,KAIY,QAApB4pC,EAAIvzC,EAAMlP,GAAMmhB,YAAI,IAAAshC,GAAhBA,EAAkB1/B,gBACF,QAAhB+/B,EAAA5zC,EAAMlP,GAAMmhB,YAAI,IAAA2hC,GAAhBA,EAAkB//B,cAAc3V,SAASyL,IACrC,GAAK3J,EAAM2J,GAOJ,CACH3J,EAAM2J,GAAKS,cAAgBpK,EAAM2J,GAAKS,eAAiB,GAEvD,MAAMypC,EAAS,IAAK7zC,EAAMlP,GAAOA,QAEjCkP,EAAM2J,GAAKS,cAAcxS,KAAKi8C,EAClC,MAZIz4C,QAAQmG,MAAM,mCAAmCoI,qBAC7CA,EAAIlV,WAAW,UACf2G,QAAQC,KACJ,qCAAqCsO,EAAInY,QAAQ,UAAW,oBAAoBmY,KAS5F,IAER,GAER,CAEAoB,UAAAA,CAAWxb,GACP,MAAkB,SAAdA,EAAKiS,MAEDjN,EAAAA,EAAAA,KAACu/C,GAAU,CACP1jC,cAAe9N,KAAKwB,MAAMsM,cAC1B9J,YAAahE,KAAKwB,MAAMwC,YACxBL,MAAO3D,KAAKkC,MAAMyB,MAClBkyB,eAAgB71B,KAAK61B,eACrBtuB,QAASvH,KAAKkC,MAAMqF,QACpBmD,eAAgB1K,KAAKkC,MAAMwI,eAC3Bhc,OAAQsR,KAAKwB,MAAM9S,OACnBsB,OAAQgQ,KAAKwB,MAAMxR,OACnB6S,UAAW7C,KAAKwB,MAAMqB,UACtByK,QAAStN,KAAKwB,MAAM8L,QACpBtL,KAAMhC,KAAKwB,MAAMQ,KACjBhO,WAAYgM,KAAKwB,MAAMxN,WACvBoO,YAAapC,KAAKmwC,gBAClB3iC,YAAaxN,KAAKwB,MAAMgM,YACxBvJ,SAAUjE,KAAKwB,MAAMyC,SACrBnB,YAAa9C,KAAKwB,MAAMsB,YACxByK,aAAcvN,KAAKwB,MAAM+L,aACzB0pB,UAAWj3B,KAAKwB,MAAMy1B,UACtB1zB,SAAUvD,KAAKuD,SACfkK,iBAAkBzN,KAAKyN,iBACvBtJ,QAASA,CAAC3V,EAAMyQ,IAAUe,KAAKmE,QAAQ3V,EAAMyQ,GAC7C2O,iBAAkB5N,KAAKwB,MAAMoM,iBAC7BxF,aAAcjY,KAAKC,MAAM4P,KAAKkC,MAAMkG,cACpChF,sBAAuBpD,KAAKoD,sBAC5BuY,MAAI,EACJjZ,OAAQzV,EACR8W,OAAQ/D,KAAKwB,MAAMuC,OACnBsE,aAAcrI,KAAKkC,MAAMmG,aACzB1H,MAAOX,KAAKwB,MAAMb,MAClB/F,UAAWoF,KAAKwB,MAAM5G,UACtBtC,UAAW0H,KAAKwB,MAAMlJ,YAKhB,UAAdrL,EAAKiS,MAEJjS,EAAKiS,KAyCH,MAtCCjN,EAAAA,EAAAA,KAACob,GAAW,CACRS,cAAe9N,KAAKwB,MAAMsM,cAC1B9J,YAAahE,KAAKwB,MAAMwC,YACxBL,MAAO3D,KAAKkC,MAAMyB,MAClBkyB,eAAgB71B,KAAK61B,eACrBtuB,QAASvH,KAAKkC,MAAMqF,QACpBmD,eAAgB1K,KAAKkC,MAAMwI,eAC3Bhc,OAAQsR,KAAKwB,MAAM9S,OACnBsB,OAAQgQ,KAAKwB,MAAMxR,OACnB6S,UAAW7C,KAAKwB,MAAMqB,UACtByK,QAAStN,KAAKwB,MAAM8L,QACpBtL,KAAMhC,KAAKwB,MAAMQ,KACjBhO,WAAYgM,KAAKwB,MAAMxN,WACvBoO,YAAapC,KAAKmwC,gBAClB3iC,YAAaxN,KAAKwB,MAAMgM,YACxBnY,MAAO,IACP4O,SAAUjE,KAAKwB,MAAMyC,SACrBnB,YAAa9C,KAAKwB,MAAMsB,YACxByK,aAAcvN,KAAKwB,MAAM+L,aACzBohC,aAAc3uC,KAAKwB,MAAMiwC,SACzBxa,UAAWj3B,KAAKwB,MAAMy1B,UACtB1zB,SAAUvD,KAAKuD,SACfkK,iBAAkBzN,KAAKyN,iBACvBtJ,QAASA,CAAC3V,EAAMyQ,IAAUe,KAAKmE,QAAQ3V,EAAMyQ,GAC7C2O,iBAAkB5N,KAAKwB,MAAMoM,iBAC7BxF,aAAcjY,KAAKC,MAAM4P,KAAKkC,MAAMkG,cACpChF,sBAAuBpD,KAAKoD,sBAC5BuY,MAAI,EACJjZ,OAAQzV,EACR8W,OAAQ/D,KAAKwB,MAAMuC,OACnBsE,aAAcrI,KAAKkC,MAAMmG,aACzB1H,MAAOX,KAAKwB,MAAMb,MAClB/F,UAAWoF,KAAKwB,MAAM5G,UACtBtC,UAAW0H,KAAKwB,MAAMlJ,WAMtC,CAsBAiR,MAAAA,GACI,OAAKvJ,KAAKkC,MAAMmG,cAKZpW,EAAAA,EAAAA,KAAA,OACIF,MAAO,IACEiO,KAAKwB,MAAMiwC,cAAyBlgD,EAAdia,MACxBxL,KAAKwB,MAAMzP,SACXiO,KAAKkC,MAAMQ,OAAO3Q,OACvBG,SAED8N,KAAKyI,WAAWzI,KAAKkC,MAAMQ,WAXzBzQ,EAAAA,EAAAA,KAAC21B,EAAAA,eAAc,GAc9B,EAGJ,YCvcMpc,GAA8C,CAChDmQ,KAAM,CACF/U,MAAO,OACPC,OAAQ,OACRqV,SAAU,SACVoB,SAAU,YAEdo0B,OAAQ,CACJ7qC,OAAQ,oBACR4vB,UAAW,QAEfkb,oBAAqB,CACjBr0B,SAAU,WACVR,IAAK,EACLS,MAAO,EACPskB,OAAQ,GAEZj3B,OAAQ,CACJqI,YAAa,OAEjBtI,QAAS,CACLsB,cAAe,SAiDvB,SAASg4B,GAAQ9uC,EAAagK,GAC1B,GAAqB,kBAAVA,EACP,OAAOA,EAIX,IAAKA,EAAMhN,WAAW,oBAAsB,iBAAiBo4B,KAAKp1B,GAC9D,OA9CR,SAAuBA,EAAagK,GAChC,IAAIrO,EAAS,GACb,IAAK,IAAIoJ,EAAI,EAAGA,EAAIiF,EAAMnN,OAAQkI,IAC9BpJ,GAAUo6B,OAAOC,aAAah2B,EAAI+E,EAAI/E,EAAInD,QAAQimB,WAAW,GAAK9Y,EAAM8Y,WAAW/d,IAEvF,OAAOpJ,CACX,CAwCe8gD,CAAcz8C,EAAKgK,GAI9B,MAAM0yC,EAAY1yC,EAAMpS,MAAM,IAAK,GAE7B+T,EAAOnS,OAAOmjD,SAASC,IAAIC,IAAI5hD,MAAM+E,GACrC88C,EAAKtjD,OAAOmjD,SAASC,IAAIC,IAAI5hD,MAAMyhD,EAAU,IAE7CK,EAAevjD,OAAOmjD,SAASK,IAAIC,aAAaz0B,OAAO,CACzD00B,WAAY1jD,OAAOmjD,SAASC,IAAIC,IAAI5hD,MAAMyhD,EAAU,MAGlDS,EAAkB3jD,OAAOmjD,SAASS,IAAItO,QAAQiO,EAAcpxC,EAAM,CAAEmxC,OAE1E,OAAOtjD,OAAOmjD,SAASC,IAAIS,KAAKniD,UAAUiiD,EAC9C,CAqBA,SAASjP,GAAQluC,EAAagK,EAAeszC,GACzC,GAAqB,kBAAVtzC,EACP,OAAOA,EAGX,IAAK,iBAAiBorB,KAAKp1B,GAEvB,OA5ER,SAAuBA,EAAagK,GAChC,IAAIrO,EAAS,GACb,IAAK,IAAIoJ,EAAI,EAAGA,EAAIiF,EAAMnN,OAAQkI,IAC9BpJ,GAAUo6B,OAAOC,aAAah2B,EAAI+E,EAAI/E,EAAInD,QAAQimB,WAAW,GAAK9Y,EAAM8Y,WAAW/d,IAEvF,OAAOpJ,CACX,CAsEe4hD,CAAcv9C,EAAKgK,GAG9B,IAAI8yC,EAEAA,EADAQ,EACK9jD,OAAOmjD,SAASC,IAAIC,IAAI5hD,MAAMqiD,GAE9B9jD,OAAOmjD,SAASK,IAAIQ,UAAUC,OAAO,IAG9C,MAAM9xC,EAAOnS,OAAOmjD,SAASC,IAAIC,IAAI5hD,MAAM+E,GACrC09C,EAAYlkD,OAAOmjD,SAASS,IAAIlP,QAAQlkC,EAAO2B,EAAM,CAAEmxC,OAAMI,WAEnE,MAAO,iBAAiB1jD,OAAOmjD,SAASC,IAAIC,IAAI3hD,UAAU4hD,MAAOY,GACrE,CAEA,SAASC,GAAWzgD,EAAajE,GAAqF,IAAD2kD,EACjH,OAAK3kD,GAAO+P,SAAS60C,eAAe5kD,GASF,QAAlC2kD,EAAO50C,SAAS60C,eAAe5kD,UAAG,IAAA2kD,OAAA,EAA3BA,EAA6BhzC,OARzB,IAAIJ,SAAQC,IACf,MAAM4mB,EAASroB,SAASC,cAAc,UACtCooB,EAAOnoB,aAAa,KAAMjQ,GAC1Bo4B,EAAOzmB,OAASH,EAChB4mB,EAAOn0B,IAAMA,EACb8L,SAASsoB,qBAAqB,QAAQ,GAAGjoB,YAAYgoB,EAAO,GAIxE,CAsCA,MAAMysB,WAAmBC,EAAAA,OAOrB3xC,WAAAA,CAAYC,GACRC,MAAMD,GAAO,KAPT2xC,eAA2B,GAAG,KAE9BC,mBAAqB,GAAG,KAExB9Q,YAAM,OAuEN+Q,iBAAoBC,IACxB,MAAMv3C,EAAIu3C,EAAI99C,OAAOw0B,MAAM,GAC3B,GAAIjuB,EAAG,CACH,MAAMhJ,EAAI,IAAI+M,WACd/M,EAAEgN,OAAUrI,IACR,IAAKA,EAAElC,OACH,OAGJ,MAAM+9C,EAAW77C,EAAElC,OAAO1E,OAC1B,IACI,MAAMkR,EAAO7R,KAAKC,MAAMmjD,GACxBvzC,KAAKmC,SAAS,CAAEH,OAAMuF,QAASpX,KAAKE,UAAU2R,KAAU7R,KAAKE,UAAU2P,KAAKkC,MAAMkG,eACtF,CAAE,MACEzZ,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAE,0CACxB,GAEJ8E,EAAEygD,WAAWz3C,EACjB,MACIpN,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAE,yCACxB,EACF,KAkDFwlD,aAAev5B,MAAO9rB,EAAY2J,EAAkB2R,KAChD,GAAItb,IAAO,GAAG4R,KAAKwB,MAAMwC,qBAAuB0F,EAC5C,GAAI3R,IAAaiI,KAAKozC,mBAClB,IAAK,IAADM,QACM9D,GAAoBW,SACtBvwC,KAAKwB,MAAMuC,OACM,QADA2vC,EACjB1zC,KAAKkC,MAAMQ,cAAM,IAAAgxC,OAAA,EAAjBA,EAAmBrsB,KACnBrnB,KAAKwB,MAAMwC,aAEfhE,KAAKmC,SAAS,CAAE4+B,KAAM,GAAG/gC,KAAKkC,MAAM6+B,SACxC,CAAE,MACE,MAED,GAAI/gC,KAAKmzC,eAAep8C,SAASgB,GACpC,IACI,MAAM2K,QAAe1C,KAAK2zC,cAAc3zC,KAAKmzC,eAAe,IAC5DnzC,KAAKmC,SAAS,CAAEO,SAAQq+B,KAAM6S,IAAIzjD,KAAKE,UAAUqS,IAASzT,YAC9D,CAAE,MACE,CAGZ,EA9JA+Q,KAAKkC,MAAQ,CACTkuC,WAAY,EACZ7oC,SAAS,EACTlF,eAAe,EACf1B,OAAOkzC,EAAAA,EAAAA,OAAMryC,EAAM5G,WACnBk5C,kBAAkB,EAClB/S,KAAM,KAGV/gC,KAAKsiC,OAAS9gC,EAAM8gC,QAAU,GAEzBtiC,KAAK+zC,oBAAoBv0C,MAAKjQ,GAC/ByQ,KAAK2zC,gBAAgBn0C,MAAKkD,GAEtBktC,GAAoBW,SAASvwC,KAAKwB,MAAMuC,OAAc,OAANrB,QAAM,IAANA,OAAM,EAANA,EAAQ2kB,KAAMrnB,KAAKwB,MAAMwC,aAAaxE,MACjFw0C,IACOA,IAEKh0C,KAAKozC,qBACNpzC,KAAKozC,mBAAqBY,EACrBh0C,KAAKwB,MAAMuC,OAAOkwC,eACnB,GAAGj0C,KAAKwB,MAAMwC,oBACdhE,KAAKozC,mBACLpzC,KAAKyzC,gBAKblkD,EACAyQ,KAAKmC,SAAS,CACVO,SACAV,KAAMzS,EAAIqH,OACVlI,OAAQa,EAAIb,OACZqyC,KAAM6S,IAAIzjD,KAAKE,UAAUqS,IAASzT,aAGtCN,OAAO0rB,MACH,2BAA2Bra,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,sBAExE,OAKpB,CAEAG,oBAAAA,GACI3C,MAAM2C,uBACFpE,KAAKmzC,eAAenhD,SACpBgO,KAAKwB,MAAMuC,OAAOmwC,iBACd,GAAGl0C,KAAKwB,MAAMwC,oBACdhE,KAAKmzC,eACLnzC,KAAKyzC,cAETzzC,KAAKmzC,eAAiB,IAEtBnzC,KAAKozC,qBACLpzC,KAAKwB,MAAMuC,OAAOmwC,iBACd,GAAGl0C,KAAKwB,MAAMwC,oBACdhE,KAAKozC,mBACLpzC,KAAKyzC,cAETzzC,KAAKozC,mBAAqB,GAElC,CAyBAe,sBAAAA,GACI,OACI/pC,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOmmC,oBAAoBz/C,SAAA,EACnCD,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAOsK,KAAKwB,MAAMvT,EAAE,kCACpBkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,GAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACszB,EAAAA,IAAG,CACA7b,KAAK,QACLqF,GAAI,CAAE,gBAAiBvD,GAAOZ,QAC9BK,QAASA,KACL,MAAM+Q,EAAQ7d,SAASC,cAAc,SACrC4d,EAAM3d,aAAa,OAAQ,QAC3B2d,EAAM3d,aAAa,KAAM,SAEzB2d,EAAM3d,aAAa,UAAW,GAC9B2d,EAAMua,iBAAiB,UAAU7+B,GAAKsI,KAAKqzC,iBAAiB37C,KAAI,GAChEskB,EAAMvd,OAAO,EACfvM,UAEFD,EAAAA,EAAAA,KAACmiD,EAAAA,QAAW,SAGpBniD,EAAAA,EAAAA,KAACid,EAAAA,QAAO,CACJxZ,MAAOsK,KAAKwB,MAAMvT,EAAE,+BACpBkhB,UAAW,CAAEC,OAAQ,CAAEL,GAAIvD,GAAOb,UAAYzY,UAE9CD,EAAAA,EAAAA,KAACszB,EAAAA,IAAG,CACA7b,KAAK,QACLqF,GAAI,CAAE,gBAAiBvD,GAAOZ,QAC9BK,QAASA,KACAjL,KAAKkC,MAAMF,MAIhBpV,EAAMmR,aACF,GAAGiC,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,gBACxCjE,KAAKkC,MAAMF,KACd,EACH9P,UAEFD,EAAAA,EAAAA,KAACmiD,EAAAA,QAAW,CAACriD,MAAO,CAAEyrB,UAAW,0BAKrD,CA0BA,uBAAMu2B,GACF,IACI,MAAMxkD,QAAYyQ,KAAKwB,MAAMuC,OAAO0P,UAChC,kBAAkBzT,KAAKwB,MAAMwC,eAAehE,KAAKwB,MAAMyC,YAG3D,GAAIlT,MAAMuJ,QAAQ/K,EAAI8kD,iBAAkB,CAAC,IAADC,EACpC,IAAKt0C,KAAKsiC,OAAQ,CACd,MAAMj6B,QAAqBrI,KAAKwB,MAAMuC,OAAO+xB,wBACvCgd,GAAW,sCAAuC,aACxD9yC,KAAKsiC,OAASj6B,EAAazR,OAAO0rC,MACtC,CAMA,OALmB,QAAnBgS,EAAA/kD,EAAI8kD,uBAAe,IAAAC,GAAnBA,EAAqB14C,SAAQpN,IACrBe,EAAIqH,OAAOpI,KACXe,EAAIqH,OAAOpI,GAAQy1C,GAAQjkC,KAAKsiC,OAAQ/yC,EAAIqH,OAAOpI,IACvD,IAEGe,CACX,CACA,OAAOA,CACX,CAAE,MAAOmI,GACL/I,OAAO0rB,MAAM,6CAA6C3iB,IAC9D,CACA,OAAO,IACX,CAEAiN,mBAAAA,GACI,OAAK3E,KAAKkC,MAAMG,eAIZpQ,EAAAA,EAAAA,KAAC+S,EAAAA,QAAa,CACVtP,MAAO1H,EAAAA,KAAKC,EAAE,qBACdF,KAAMC,EAAAA,KAAKC,EAAE,yCACbgX,GAAIjX,EAAAA,KAAKC,EAAE,cACXiX,OAAQlX,EAAAA,KAAKC,EAAE,aACfkX,QAASgV,GAASna,KAAKmC,SAAS,CAAEE,eAAe,IAAS,IAAM8X,GAAS+4B,EAAAA,OAAOqB,WAAW,UARxF,IAWf,CAEA,oBAAMC,CAAev2C,EAA2Bw2C,GAC5C,GAAgC,kBAArBx2C,EAAK,YAA0B,CAEtC,MAAM+D,QAAahC,KAAK00C,eAAez2C,EAAK,YAAa,IAAIw2C,IAM7D,cALOx2C,EAAK,YACR+D,IAEA/D,EAAO,IAAKA,KAAS+D,IAElB/D,CACX,CACA,MAAMoC,EAAOzQ,OAAOyQ,KAAKpC,GACzB,IAAK,IAAI1D,EAAI,EAAGA,EAAI8F,EAAKrO,OAAQuI,IACzB0D,EAAKoC,EAAK9F,KAAgC,kBAAlB0D,EAAKoC,EAAK9F,MAClC0D,EAAKoC,EAAK9F,UAAYyF,KAAKw0C,eAAev2C,EAAKoC,EAAK9F,IAAKk6C,IAGjE,OAAOx2C,CACX,CAEA,mBAAM01C,CAAc57C,GAChB,OAAOiI,KAAK00C,eAAe38C,EAC/B,CAEA,oBAAM28C,CAAe38C,EAAmB48C,GAIpC,GAHA58C,EAAWA,GAAY,oBACvB48C,EAAaA,GAAc,IAEZ59C,SAASgB,GAEpB,OADApJ,OAAO0rB,MAAM,4CAA4CtiB,QAAe48C,EAAWpnD,KAAK,WACjF,KAEXonD,EAAWr/C,KAAKyC,GAEhB,UACwBiI,KAAKwB,MAAMuC,OAAOysB,WAAW,GAAGxwB,KAAKwB,MAAMwC,oBAAqBjM,KAEhFA,EAAW,mBAEf,MAAMiK,QAGIhC,KAAKwB,MAAMuC,OAAO8nB,SAAS,GAAG7rB,KAAKwB,MAAMwC,oBAAqBjM,GACxE,IAAI+d,EAAU,GACVyR,EAA8B,GAMlC,QAJkBh2B,IAAdyQ,EAAKulB,OACLA,EAAOvlB,EAAKulB,MAGI,kBAATA,EACPzR,EAAUyR,OAEP,GAAkB,WAAdA,EAAKroB,KAAmB,CAC/B,IAAI01C,EAAS,GAEb,MAAM38C,EAAQ,IAAI+yB,WAAWzD,EAAKvlB,MAC5B0pB,EAAMzzB,EAAM48C,WAClB,IAAK,IAAI36C,EAAI,EAAGA,EAAIwxB,EAAKxxB,IACrB06C,GAAU1pB,OAAOC,aAAalzB,EAAMiC,IAExC4b,EAAU8+B,CACd,CAGK50C,KAAKmzC,eAAep8C,SAASgB,KAC9BiI,KAAKmzC,eAAe79C,KAAKyC,SACnBiI,KAAKwB,MAAMuC,OAAOkwC,eAAe,GAAGj0C,KAAKwB,MAAMwC,oBAAqBjM,EAAUiI,KAAKyzC,eAG7F,IAEI,aAAczzC,KAAKw0C,eAAeM,IAAAA,MAAYh/B,GAAU6+B,EAG5D,CAAE,MAAOj9C,GACL/I,OAAO0rB,MAAM,2CACbvhB,QAAQwQ,IAAI5R,EAChB,CACJ,CAAE,MAAOq9C,GACA/0C,KAAKkC,MAAMQ,QACZ/T,OAAO0rB,MAAM,kCAAkCtiB,MAAag9C,IAEpE,CACA,OAAO,IACX,CAEAC,sBAAAA,GACI,OAAKh1C,KAAKkC,MAAM4xC,kBAIZ7hD,EAAAA,EAAAA,KAAC+S,EAAAA,QAAa,CACVtP,MAAO1H,EAAAA,KAAKC,EAAE,qBACdF,KAAMC,EAAAA,KAAKC,EAAE,uBACbgX,GAAIjX,EAAAA,KAAKC,EAAE,WACXiX,OAAQlX,EAAAA,KAAKC,EAAE,aACfkX,QAASgV,GAASna,KAAKmC,SAAS,CAAE2xC,kBAAkB,IAAS,IAAM35B,GAASna,KAAKi1C,QAAO,OARrF,IAWf,CAEAC,QAAAA,CAAS1mD,EAAckU,GAAkE,IAADyyC,EAEpF,GAAU,QAAVA,EADAzyC,EAASA,GAAU1C,KAAKkC,MAAMQ,cACpB,IAAAyyC,GAANA,EAAQvoC,MAAO,CACf,GAAIpe,KAAQkU,EAAOkK,MACf,OAAOlK,EAAOkK,MAAMpe,GAExB,IAAK,MAAM4hB,KAASxgB,OAAO22C,OAAO7jC,EAAOkK,OAAQ,CAC7C,MAAM3f,EAAO+S,KAAKk1C,SAAS1mD,EAAM4hB,GACjC,GAAInjB,EACA,OAAOA,CAEf,CACJ,CAEA,OAAO,IACX,CAGAmoD,cAAAA,CAAepzC,EAA+BxT,EAAckU,GAExD,GADAA,EAASA,GAAU1C,KAAKkC,MAAMQ,QACzBV,EAGD,YADAlJ,QAAQmG,MAAM,oCAAoCzQ,MAAS2B,KAAKE,UAAUqS,MAI9E,MAAM2yC,EAAWrzC,EAAKxT,GAEtB,GAAKkU,EAA0BkK,MAC3B,GAAoB,UAAhBlK,EAAOxD,KAAkB,CACzB,MAAM2O,EAAQwnC,EAEd,IAAKtkD,MAAMuJ,QAAQuT,GACf,OAGJ,IAAK,MAAM62B,KAAS72B,EAChB,IAAK,MAAMynC,KAAS5yC,EAAOkK,MACvB5M,KAAKo1C,eAAe1Q,EAAO4Q,EAAM9mD,KAAM8mD,EAGnD,MACI,IAAK,MAAOrtC,EAAOhb,KAAS2C,OAAOwsC,QAAS15B,EAA0BkK,OAAQ,CAC1E,GAC2B,UAAtB3f,EAAaiS,MACS,SAAtBjS,EAAaiS,MACS,cAAtBjS,EAAaiS,KAEd,OAEJc,KAAKo1C,eAAepzC,EAAMiG,EAAOhb,EACrC,MAED,GAAIuB,GAA4B,kBAAb6mD,EAEtB,GAAoB,SAAhB3yC,EAAOxD,MACa,IAAhBwD,EAAOrT,OACP2S,EAAKxT,GAAQ6mD,EAAShmD,aAEvB,GAAoB,OAAhBqT,EAAOxD,KAEd8C,EAAKxT,GAAQ6mD,EAAShmD,YACnB,GAAoB,WAAhBqT,EAAOxD,KAAmB,CACjC,MAAMq2C,EAAUjiD,WAAW+hD,EAASpmD,WAAWC,QAAQ,IAAK,WAEzCqC,IAAfmR,EAAOy0B,KAAqBoe,EAAU7yC,EAAOy0B,IAC7Cn1B,EAAKxT,GAAQkU,EAAOy0B,SACE5lC,IAAfmR,EAAOgP,KAAqB6jC,EAAU7yC,EAAOgP,IACpD1P,EAAKxT,GAAQkU,EAAOgP,IAEpB1P,EAAKxT,GAAQ+mD,CAErB,MAAO,GAAoB,SAAhB7yC,EAAOxD,KAAiB,CAC/B,MAAMq2C,EAAUniD,SAASiiD,EAASpmD,WAAY,SAC3BsC,IAAfmR,EAAOy0B,KAAqBoe,EAAU7yC,EAAOy0B,IAC7Cn1B,EAAKxT,GAAQkU,EAAOy0B,SACE5lC,IAAfmR,EAAOgP,KAAqB6jC,EAAU7yC,EAAOgP,MACpD1P,EAAKxT,GAAQkU,EAAOgP,KAEL,IAAf1P,EAAKxT,IAAe+mD,EAAU,GAC9BvzC,EAAKxT,GAAQ,GAEbwT,EAAKxT,GADE+mD,EAAU,MACJ,MAEAA,CAErB,KAA2B,aAAhB7yC,EAAOxD,OAEd8C,EAAKxT,IACc,IAAfwT,EAAKxT,IACU,SAAfwT,EAAKxT,IACU,OAAfwT,EAAKxT,IACU,IAAfwT,EAAKxT,IACU,MAAfwT,EAAKxT,GAGrB,CAEA,YAAMymD,CAAOO,EAAiBxU,GAC1B,GAAIwU,EAAQ,CACR,MAAMjmD,QAAYyQ,KAAK+zC,oBAEvB,IAAKxkD,EAGD,OAFAuJ,QAAQmG,MAAM,oDACdtQ,OAAO0rB,MAAM,+CAIjB,IAAKra,KAAKkC,MAAMF,OAAShC,KAAKkC,MAAMQ,OAChC,OAGJ,MAAM+yC,EAA2C,CAAC,EAElD,IAAK,MAAMjnD,KAAQoB,OAAOyQ,KAAKL,KAAKkC,MAAMF,MAAO,CAC7C,MAAM/U,EAAO+S,KAAKk1C,SAAS1mD,GACrBvB,GAASA,EAAKyoD,WAA2B,UAAdzoD,EAAKiS,MAAsB1Q,EAAK2D,WAAW,MAGxEkP,EAAcmC,SAASjU,EAAIqH,OAAQpI,EAAM,MACzCinD,EAAoBjnD,GAAQwR,KAAKkC,MAAMF,KAAKxT,IAH5C6S,EAAcmC,SAASjU,EAAIqH,OAAQpI,EAAMwR,KAAKkC,MAAMF,KAAKxT,GAKjE,CAEA,IACI,MAAMmnD,EAAexlD,KAAKC,MAAMD,KAAKE,UAAUd,IAE/C,GAAIwB,MAAMuJ,QAAQq7C,EAAatB,iBAAkB,OACvCvB,GAAW,sCAAuC,aAExD,IAAK,MAAMtkD,KAAQmnD,EAAatB,gBACxBsB,EAAa/+C,OAAOpI,KACpBmnD,EAAa/+C,OAAOpI,GAAQ60C,GAAQrjC,KAAKsiC,OAAQqT,EAAa/+C,OAAOpI,IAGjF,OAEMwR,KAAKwB,MAAMuC,OAAO6xC,UAAUD,EAAalmD,IAAKkmD,EACxD,CAAE,MAAOj+C,GACL/I,OAAO0rB,MAAM,mCAAmC3iB,IACpD,CAGA,MAAMm+C,EAAqB,IAAKtmD,EAAIqH,UAAW6+C,GAC/C38C,QAAQwQ,IAAIusC,GAEZ71C,KAAKmC,SACD,CACIoF,SAAS,EACTvF,KAAM6zC,EACNzF,WAAYpwC,KAAKkC,MAAMkuC,WAAa,EACpChoC,aAAcytC,IAElB,IAAM7U,GAASkS,EAAAA,OAAOqB,WAAW,OAEzC,MAAWv0C,KAAKkC,MAAMqF,QAClBvH,KAAKmC,SAAS,CAAEE,eAAe,IAE/B6wC,EAAAA,OAAOqB,WAAW,KAE1B,CAEAuB,kBAAAA,CAAmBC,EAA6BC,GACxCA,EAAUzuC,UAAYvH,KAAKkC,MAAMqF,SACjCvH,KAAKwB,MAAMy0C,cAAcj2C,KAAKkC,MAAMqF,QAE5C,CAKA,uBAAMpE,GACF,MAAM4F,EAAO,GAAGpa,OAAO8D,SAASm0B,aAAaj4B,OAAO8D,SAASo0B,OAAOl4B,OAAO8D,SAASC,2BAA2BsN,KAAKwB,MAAMwC,cAC1HlL,QAAQwQ,IAAI,SAASP,WACfxJ,MAAMwJ,EAChB,CAEAQ,MAAAA,GACI,OAAKvJ,KAAKkC,MAAMF,MAAShC,KAAKkC,MAAMQ,QAKhC0H,EAAAA,EAAAA,MAAA,OAAKrY,MAAOyZ,GAAOmQ,KAAKzpB,SAAA,CACnB8N,KAAK2E,sBACL3E,KAAKm0C,yBACLn0C,KAAKg1C,0BACN/iD,EAAAA,EAAAA,KAAC29C,GAAmB,CAEhB79C,MAAOyZ,GAAOkmC,OACd3tC,OAAQ/D,KAAKwB,MAAMuC,OACnBnJ,UAAWoF,KAAKwB,MAAM5G,UACtBtC,UAAW0H,KAAKwB,MAAMlJ,UACtB0L,YAAahE,KAAKwB,MAAMwC,YACxBC,SAAUjE,KAAKwB,MAAMyC,SACrBsJ,aAAcvN,KAAKwB,MAAM+L,aACzBvZ,WAAYgM,KAAKwB,MAAMxN,WACvB0O,OAAQ1C,KAAKkC,MAAMQ,OACnBhU,OAAQsR,KAAKkC,MAAMxT,OACnBsT,KAAMhC,KAAKkC,MAAMF,KACjBouC,WAAYpwC,KAAKkC,MAAMkuC,WACvBjsC,QAASlF,GAASe,KAAKmC,SAAS,CAAElD,UAClCsE,SAAUA,CAACvB,EAAMuF,EAASusC,KAClBA,GAAoB9zC,KAAKkC,MAAMjD,QAC/BtQ,OAAO0rB,MAAMrsB,EAAAA,KAAKC,EAAE,gEACpB6lD,GAAmB,IAEnBA,GAAqB9zC,KAAKkC,MAAMqF,SAAYA,IAC5CusC,GAAmB,GAEnB9xC,EACAhC,KAAKmC,SAAS,CAAEH,OAAMuF,UAASusC,0BACHviD,IAArBuiD,GACP9zC,KAAKmC,SAAS,CAAE2xC,oBACpB,EAEJhmC,cAAe9N,KAAKwB,MAAMsM,cAC1BnN,MAAOX,KAAKkC,MAAMvB,OA7BbX,KAAKkC,MAAM6+B,OA+BpB9uC,EAAAA,EAAAA,KAACikD,EAAAA,iBAAgB,CACbC,UAAU,EACVC,OAAK,EACL9U,YAAa,EACb+U,UAAQ,EACR11C,MAAOX,KAAKkC,MAAMvB,MAClB21C,gBACyB,OAArBt2C,KAAKwB,MAAMoF,OAAuC,OAArB5G,KAAKwB,MAAMoF,OAAuC,OAArB5G,KAAKwB,MAAMoF,MAEzEW,WAAYvH,KAAKkC,MAAMjD,QAASe,KAAKkC,MAAMqF,SAC3CtI,QAASe,KAAKkC,MAAMjD,MACpBg2C,OAASjU,GAAmBhhC,KAAKi1C,QAAO,EAAMjU,GAC9C77B,QAASA,IAAMnF,KAAKi1C,QAAO,SApD5BhjD,EAAAA,EAAAA,KAAC21B,EAAAA,eAAc,GAwD9B,EAGJ,W","sources":["../../../jsonConfig/src/Utils.jsx","../../../jsonConfig/src/JsonConfigComponent/ConfigGeneric.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigAccordion.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigAlive.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigAutocomplete.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigAutocompleteSendTo.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCRON.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCertificateSelect.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCertificates.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCertCollection.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCheckLicense.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCheckbox.tsx","../../../jsonConfig/src/JsonConfigComponent/ChipInput.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigChip.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigColor.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCoordinates.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCustom.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigDeviceManager.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigFileSelector.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigFile.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigFunc.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigIP.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigImageSendTo.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigImageUpload.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigInstanceSelect.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigInterface.tsx","../../../jsonConfig/src/JsonConfigComponent/wrapper/Components/CustomModal.tsx","../../../jsonConfig/src/JsonConfigComponent/wrapper/Components/Editor.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigJsonEditor.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigLanguage.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigLicense.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigNumber.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigObjectId.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigPassword.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigPattern.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigPort.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigRoom.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSelect.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSelectSendTo.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSendto.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSetState.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSlider.tsx","../../../jsonConfig/src/JsonConfigComponent/Icons.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigState.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigStaticDivider.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigStaticHeader.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigStaticImage.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigStaticText.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTable.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigText.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTextSendTo.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTopic.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigUUID.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigUser.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigQrCode.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigPanel.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigDatePicker.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTimePicker.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTabs.tsx","../../../jsonConfig/src/JsonConfigComponent/index.tsx","../../../jsonConfig/src/JsonConfig.tsx"],"sourcesContent":["/**\n * Copyright 2018-2023 Denis Haev <dogafox@gmail.com>\n *\n * MIT License\n *\n * */\nimport React from 'react';\nimport { Utils as _Utils, I18n } from '@iobroker/adapter-react-v5';\n\nconst NAMESPACE = 'material';\nconst days = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst months = ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst QUALITY_BITS = {\n 0x00: '0x00 - good',\n\n 0x01: '0x01 - general problem',\n 0x02: '0x02 - no connection problem',\n\n 0x10: '0x10 - substitute value from controller',\n 0x20: '0x20 - substitute initial value',\n 0x40: '0x40 - substitute value from device or instance',\n 0x80: '0x80 - substitute value from sensor',\n\n 0x11: '0x11 - general problem by instance',\n 0x41: '0x41 - general problem by device',\n 0x81: '0x81 - general problem by sensor',\n\n 0x12: '0x12 - instance not connected',\n 0x42: '0x42 - device not connected',\n 0x82: '0x82 - sensor not connected',\n\n 0x44: '0x44 - device reports error',\n 0x84: '0x84 - sensor reports error',\n};\nconst SIGNATURES = {\n JVBERi0: 'pdf',\n R0lGODdh: 'gif',\n R0lGODlh: 'gif',\n iVBORw0KGgo: 'png',\n '/9j/': 'jpg',\n PHN2Zw: 'svg',\n Qk1: 'bmp',\n AAABAA: 'ico', // 00 00 01 00 according to https://en.wikipedia.org/wiki/List_of_file_signatures\n};\n\nclass Utils {\n static namespace = NAMESPACE;\n\n static INSTANCES = 'instances';\n\n static dateFormat = ['DD', 'MM'];\n\n static FORBIDDEN_CHARS = /[^._\\-/ :!#$%&()+=@^{}|~\\p{Ll}\\p{Lu}\\p{Nd}]+/gu;\n\n /**\n * Capitalize words.\n * @param {string | undefined} name\n * @returns {string}\n */\n static CapitalWords(name) {\n return (name || '')\n .split(/[\\s_]/)\n .filter(item => item)\n .map(word => (word ? word[0].toUpperCase() + word.substring(1).toLowerCase() : ''))\n .join(' ');\n }\n\n static formatSeconds(seconds) {\n const days_ = Math.floor(seconds / (3600 * 24));\n seconds %= 3600 * 24;\n let hours = Math.floor(seconds / 3600);\n if (hours < 10) {\n hours = `0${hours}`;\n }\n seconds %= 3600;\n let minutes = Math.floor(seconds / 60);\n if (minutes < 10) {\n minutes = `0${minutes}`;\n }\n seconds %= 60;\n seconds = Math.floor(seconds);\n if (seconds < 10) {\n seconds = `0${seconds}`;\n }\n let text = '';\n if (days_) {\n text += `${days_} ${I18n.t('ra_daysShortText')} `;\n }\n text += `${hours}:${minutes}:${seconds}`;\n\n return text;\n }\n\n /**\n * Get the name of the object by id from the name or description.\n * @param {Record<string, ioBroker.Object>} objects\n * @param {string} id\n * @param {{ name: any; } | ioBroker.Languages | null} settings\n * @param {{ language?: ioBroker.Languages; }} options\n * @param {boolean} [isDesc] Set to true to get the description.\n * @returns {string}\n */\n static getObjectName(objects, id, settings, options, isDesc) {\n const item = objects[id];\n let text;\n const attr = isDesc ? 'desc' : 'name';\n\n if (typeof settings === 'string' && !options) {\n options = { language: settings };\n settings = null;\n }\n\n options = options || {};\n if (!options.language) {\n options.language =\n (objects['system.config'] &&\n objects['system.config'].common &&\n objects['system.config'].common.language) ||\n window.sysLang ||\n 'en';\n }\n if (settings && settings.name) {\n text = settings.name;\n if (typeof text === 'object') {\n text = text[options.language] || text.en;\n }\n } else if (item && item.common && item.common[attr]) {\n text = item.common[attr];\n if (attr !== 'desc' && !text && item.common.desc) {\n text = item.common.desc;\n }\n if (typeof text === 'object') {\n text = text[options.language] || text.en || text.de || text.ru || '';\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n } else {\n const pos = id.lastIndexOf('.');\n text = id.substring(pos + 1).replace(/[_.]/g, ' ');\n text = Utils.CapitalWords(text);\n }\n\n return text.trim();\n }\n\n /**\n * Get the name of the object from the name or description.\n * @param {ioBroker.PartialObject} obj\n * @param {{ name: any; } | ioBroker.Languages | null } settings or language\n * @param {{ language?: ioBroker.Languages; } } options\n * @param {boolean} [isDesc] Set to true to get the description.\n * @param {boolean} [noTrim] Allow to use spaces in name (by edit)\n * @returns {string}\n */\n static getObjectNameFromObj(obj, settings, options, isDesc, noTrim) {\n const item = obj;\n let text = (obj && obj._id) || '';\n const attr = isDesc ? 'desc' : 'name';\n\n if (typeof settings === 'string' && !options) {\n options = { language: settings };\n settings = null;\n }\n\n options = options || {};\n\n if (settings && settings.name) {\n text = settings.name;\n if (typeof text === 'object') {\n text = text[options.language] || text.en;\n }\n } else if (item && item.common && item.common[attr]) {\n text = item.common[attr];\n if (attr !== 'desc' && !text && item.common.desc) {\n text = item.common.desc;\n }\n if (typeof text === 'object') {\n text = text[options.language] || text.en;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n }\n return noTrim ? text : text.trim();\n }\n\n /**\n * @param {ioBroker.PartialObject | ioBroker.ObjectCommon} obj\n * @param {string} forEnumId\n * @param {{ user: string; }} options\n * @returns {string | null}\n */\n static getSettingsOrder(obj, forEnumId, options) {\n if (obj && Object.prototype.hasOwnProperty.call(obj, 'common')) {\n obj = obj.common;\n }\n let settings;\n if (obj && obj.custom) {\n settings = (obj.custom || {})[NAMESPACE];\n const user = options.user || 'admin';\n if (settings && settings[user]) {\n if (forEnumId) {\n if (settings[user].subOrder && settings[user].subOrder[forEnumId]) {\n return JSON.parse(JSON.stringify(settings[user].subOrder[forEnumId]));\n }\n } else if (settings[user].order) {\n return JSON.parse(JSON.stringify(settings[user].order));\n }\n }\n }\n return null;\n }\n\n /**\n * @param {ioBroker.PartialObject | ioBroker.ObjectCommon} obj\n * @param {string} forEnumId\n * @param {{ user: string; }} options\n */\n static getSettingsCustomURLs(obj, forEnumId, options) {\n if (obj && Object.prototype.hasOwnProperty.call(obj, 'common')) {\n obj = obj.common;\n }\n let settings;\n if (obj && obj.custom) {\n settings = (obj.custom || {})[NAMESPACE];\n const user = options.user || 'admin';\n if (settings && settings[user]) {\n if (forEnumId) {\n if (settings[user].subURLs && settings[user].subURLs[forEnumId]) {\n return JSON.parse(JSON.stringify(settings[user].subURLs[forEnumId]));\n }\n } else if (settings[user].URLs) {\n return JSON.parse(JSON.stringify(settings[user].URLs));\n }\n }\n }\n return null;\n }\n\n /**\n * Reorder the array items in list between source and dest.\n * @param {Iterable<any> | ArrayLike<any>} list\n * @param {number} source\n * @param {number} dest\n */\n static reorder(list, source, dest) {\n const result = Array.from(list);\n const [removed] = result.splice(source, 1);\n result.splice(dest, 0, removed);\n return result;\n }\n\n /**\n * @param {any} obj\n * @param {{ id: any; user: any; name: any; icon: any; color: any; language: ioBroker.Languages; }} options\n * @param {boolean} [defaultEnabling]\n */\n static getSettings(obj, options, defaultEnabling) {\n let settings;\n const id = (obj && obj._id) || (options && options.id);\n if (obj && Object.prototype.hasOwnProperty.call(obj, 'common')) {\n obj = obj.common;\n }\n if (obj?.custom) {\n settings = obj.custom;\n settings =\n settings[NAMESPACE] && settings[NAMESPACE][options.user || 'admin']\n ? JSON.parse(JSON.stringify(settings[NAMESPACE][options.user || 'admin']))\n : { enabled: true };\n } else {\n settings = { enabled: defaultEnabling === undefined ? true : defaultEnabling, useCustom: false };\n }\n\n if (!Object.prototype.hasOwnProperty.call(settings, 'enabled')) {\n settings.enabled = defaultEnabling === undefined ? true : defaultEnabling;\n }\n\n // if (false && settings.useCommon) {\n // if (obj.color) settings.color = obj.color;\n // if (obj.icon) settings.icon = obj.icon;\n // if (obj.name) settings.name = obj.name;\n // } else {\n if (options) {\n if (!settings.name && options.name) settings.name = options.name;\n if (!settings.icon && options.icon) settings.icon = options.icon;\n if (!settings.color && options.color) settings.color = options.color;\n }\n\n if (obj) {\n if (!settings.color && obj.color) settings.color = obj.color;\n if (!settings.icon && obj.icon) settings.icon = obj.icon;\n if (!settings.name && obj.name) settings.name = obj.name;\n }\n // }\n\n if (typeof settings.name === 'object') {\n settings.name = settings.name[options.language] || settings.name.en;\n\n settings.name = (settings.name || '').toString().replace(/_/g, ' ');\n\n if (settings.name === settings.name.toUpperCase()) {\n settings.name = settings.name[0] + settings.name.substring(1).toLowerCase();\n }\n }\n if (!settings.name && id) {\n const pos = id.lastIndexOf('.');\n settings.name = id.substring(pos + 1).replace(/[_.]/g, ' ');\n settings.name = (settings.name || '').toString().replace(/_/g, ' ');\n settings.name = Utils.CapitalWords(settings.name);\n }\n\n return settings;\n }\n\n /**\n * @param {any} obj\n * @param {any} settings\n * @param {{ user: any; language: ioBroker.Languages; }} options\n */\n static setSettings(obj, settings, options) {\n if (obj) {\n obj.common = obj.common || {};\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[NAMESPACE] = obj.common.custom[NAMESPACE] || {};\n obj.common.custom[NAMESPACE][options.user || 'admin'] = settings;\n const s = obj.common.custom[NAMESPACE][options.user || 'admin'];\n if (s.useCommon) {\n if (s.color !== undefined) {\n obj.common.color = s.color;\n delete s.color;\n }\n if (s.icon !== undefined) {\n obj.common.icon = s.icon;\n delete s.icon;\n }\n if (s.name !== undefined) {\n if (typeof obj.common.name !== 'object') {\n obj.common.name = {};\n obj.common.name[options.language] = s.name;\n } else {\n obj.common.name[options.language] = s.name;\n }\n delete s.name;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Get the icon for the given settings.\n * @param {{ icon: string | undefined; name: string | undefined; prefix: string | undefined}} settings\n * @param {any} style\n * @returns {JSX.Element | null}\n */\n static getIcon(settings, style) {\n if (settings && settings.icon) {\n // If UTF-8 icon\n if (settings.icon.length <= 2) {\n return <span style={style || {}}>{settings.icon}</span>;\n }\n if (settings.icon.startsWith('data:image')) {\n return (\n <img\n alt={settings.name}\n src={settings.icon}\n style={style || {}}\n />\n );\n }\n // maybe later some changes for a second type\n return (\n <img\n alt={settings.name}\n src={(settings.prefix || '') + settings.icon}\n style={style || {}}\n />\n );\n }\n return null;\n }\n\n /**\n * Get the icon for the given object.\n * @param {string} id\n * @param {{ common: { icon: any; }; }} obj\n * @returns {string | null}\n */\n static getObjectIcon(id, obj) {\n // If id is Object\n if (typeof id === 'object') {\n obj = id;\n id = obj._id;\n }\n\n if (obj && obj.common && obj.common.icon) {\n let icon = obj.common.icon;\n // If UTF-8 icon\n if (typeof icon === 'string' && icon.length <= 2) {\n return icon;\n }\n if (icon.startsWith('data:image')) {\n return icon;\n }\n\n const parts = id.split('.');\n if (parts[0] === 'system') {\n icon = `adapter/${parts[2]}${icon.startsWith('/') ? '' : '/'}${icon}`;\n } else {\n icon = `adapter/${parts[0]}${icon.startsWith('/') ? '' : '/'}${icon}`;\n }\n\n if (window.location.pathname.match(/adapter\\/[^/]+\\/[^/]+\\.html/)) {\n icon = `../../${icon}`;\n } else if (window.location.pathname.match(/material\\/[.\\d]+/)) {\n icon = `../../${icon}`;\n } else if (window.location.pathname.match(/material\\//)) {\n icon = `../${icon}`;\n }\n return icon;\n }\n\n return null;\n }\n\n /**\n * Splits CamelCase into words.\n * @param {string | undefined} text\n * @returns {string}\n */\n static splitCamelCase(text) {\n // if (false && text !== text.toUpperCase()) {\n // const words = text.split(/\\s+/);\n // for (let i = 0; i < words.length; i++) {\n // const word = words[i];\n // if (word.toLowerCase() !== word && word.toUpperCase() !== word) {\n // let z = 0;\n // const ww = [];\n // let start = 0;\n // while (z < word.length) {\n // if (word[z].match(/[A-ZÜÄÖА-Я]/)) {\n // ww.push(word.substring(start, z));\n // start = z;\n // }\n // z++;\n // }\n // if (start !== z) {\n // ww.push(word.substring(start, z));\n // }\n // for (let k = 0; k < ww.length; k++) {\n // words.splice(i + k, 0, ww[k]);\n // }\n // i += ww.length;\n // }\n // }\n //\n // return words.map(w => {\n // w = w.trim();\n // if (w) {\n // return w[0].toUpperCase() + w.substring(1).toLowerCase();\n // }\n // return '';\n // }).join(' ');\n // }\n return Utils.CapitalWords(text);\n }\n\n /**\n * Check if the given color is bright.\n * https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n * @param {string | null | undefined} color\n * @param {boolean} [defaultValue]\n * @returns {boolean}\n */\n static isUseBright(color, defaultValue) {\n if (color === null || color === undefined || color === '') {\n return defaultValue === undefined ? true : defaultValue;\n }\n color = color.toString();\n if (color.startsWith('#')) {\n color = color.slice(1);\n }\n let r;\n let g;\n let b;\n\n const rgb = color.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n if (rgb && rgb.length === 4) {\n r = parseInt(rgb[1], 10);\n g = parseInt(rgb[2], 10);\n b = parseInt(rgb[3], 10);\n } else {\n // convert 3-digit hex to 6-digits.\n if (color.length === 3) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n // remove alfa channel\n if (color.length === 8) {\n color = color.substring(0, 6);\n } else if (color.length !== 6) {\n return false;\n }\n\n r = parseInt(color.slice(0, 2), 16);\n g = parseInt(color.slice(2, 4), 16);\n b = parseInt(color.slice(4, 6), 16);\n }\n\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 <= 186;\n }\n\n /**\n * Get the time string in the format 00:00.\n * @param {string | number} seconds\n */\n static getTimeString(seconds) {\n seconds = parseFloat(seconds);\n if (Number.isNaN(seconds)) {\n return '--:--';\n }\n const hours = Math.floor(seconds / 3600);\n let minutes = Math.floor((seconds % 3600) / 60);\n let secs = seconds % 60;\n if (hours) {\n if (minutes < 10) {\n minutes = `0${minutes}`;\n }\n if (secs < 10) {\n secs = `0${secs}`;\n }\n return `${hours}:${minutes}:${secs}`;\n }\n\n if (secs < 10) {\n secs = `0${secs}`;\n }\n return `${minutes}:${secs}`;\n }\n\n /**\n * Gets the wind direction with the given angle (degrees).\n * @param {number} angle in degrees.\n * @returns {string | undefined}\n */\n static getWindDirection(angle) {\n if (angle >= 0 && angle < 11.25) {\n return 'N';\n }\n if (angle >= 11.25 && angle < 33.75) {\n return 'NNE';\n }\n if (angle >= 33.75 && angle < 56.25) {\n return 'NE';\n }\n if (angle >= 56.25 && angle < 78.75) {\n return 'ENE';\n }\n if (angle >= 78.75 && angle < 101.25) {\n return 'E';\n }\n if (angle >= 101.25 && angle < 123.75) {\n return 'ESE';\n }\n if (angle >= 123.75 && angle < 146.25) {\n return 'SE';\n }\n if (angle >= 146.25 && angle < 168.75) {\n return 'SSE';\n }\n if (angle >= 168.75 && angle < 191.25) {\n return 'S';\n }\n if (angle >= 191.25 && angle < 213.75) {\n return 'SSW';\n }\n if (angle >= 213.75 && angle < 236.25) {\n return 'SW';\n }\n if (angle >= 236.25 && angle < 258.75) {\n return 'WSW';\n }\n if (angle >= 258.75 && angle < 281.25) {\n return 'W';\n }\n if (angle >= 281.25 && angle < 303.75) {\n return 'WNW';\n }\n if (angle >= 303.75 && angle < 326.25) {\n return 'NW';\n }\n if (angle >= 326.25 && angle < 348.75) {\n return 'NNW';\n }\n // if (angle >= 348.75) {\n return 'N';\n }\n\n /**\n * Pad the given number with a zero if it's not 2 digits long.\n * @param {string | number} num\n */\n static padding(num) {\n if (typeof num === 'string') {\n if (num.length < 2) {\n return `0${num}`;\n }\n return num;\n }\n if (num < 10) {\n return `0${num}`;\n }\n return num;\n }\n\n /**\n * Sets the date format.\n * @param {string} format\n */\n static setDataFormat(format) {\n if (format) {\n Utils.dateFormat = format.toUpperCase().split(/[.-/]/);\n Utils.dateFormat.splice(Utils.dateFormat.indexOf('YYYY'), 1);\n }\n }\n\n /**\n * Converts the date to a string.\n * @param {string | number | Date} now\n * @returns {string}\n */\n static date2string(now) {\n if (typeof now === 'string') {\n now = now.trim();\n if (!now) return '';\n // only letters\n if (now.match(/^[\\w\\s]+$/)) {\n // Day of the week\n return now;\n }\n const m = now.match(/(\\d{1,4})[-./](\\d{1,2})[-./](\\d{1,4})/);\n if (m) {\n const a = [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10)];\n const year = a.find(y => y > 31);\n a.splice(a.indexOf(year), 1);\n const day = a.find(mm => mm > 12);\n if (day) {\n a.splice(a.indexOf(day), 1);\n now = new Date(year, a[0] - 1, day);\n } else if (Utils.dateFormat[0][0] === 'M' && Utils.dateFormat[1][0] === 'D') {\n // MM DD\n now = new Date(year, a[0] - 1, a[1]);\n if (Math.abs(now.getTime - Date.now()) > 3600000 * 24 * 10) {\n now = new Date(year, a[1] - 1, a[0]);\n }\n } else if (Utils.dateFormat[0][0] === 'D' && Utils.dateFormat[1][0] === 'M') {\n // DD MM\n now = new Date(year, a[1] - 1, a[0]);\n if (Math.abs(now.getTime - Date.now()) > 3600000 * 24 * 10) {\n now = new Date(year, a[0] - 1, a[1]);\n }\n } else {\n now = new Date(now);\n }\n } else {\n now = new Date(now);\n }\n } else {\n now = new Date(now);\n }\n\n let date = I18n.t(`ra_dow_${days[now.getDay()]}`).replace('ra_dow_', '');\n date += `. ${now.getDate()} ${I18n.t(`ra_month_${months[now.getMonth()]}`).replace('ra_month_', '')}`;\n return date;\n }\n\n /**\n * Render a text as a link.\n * @param {string} text\n * @returns {string | JSX.Element[]}\n */\n static renderTextWithA(text) {\n let m = text.match(/<a [^<]+<\\/a>|<br\\/?>|<b>[^<]+<\\/b>|<i>[^<]+<\\/i>/);\n if (m) {\n const result = [];\n let key = 1;\n do {\n const start = text.substring(0, m.index);\n text = text.substring(m.index + m[0].length);\n if (start) {\n result.push(<span key={`a${key++}`}>{start}</span>);\n }\n\n if (m[0].startsWith('<b>')) {\n result.push(<b key={`a${key++}`}>{m[0].substring(3, m[0].length - 4)}</b>);\n } else if (m[0].startsWith('<i>')) {\n result.push(<i key={`a${key++}`}>{m[0].substring(3, m[0].length - 4)}</i>);\n } else if (m[0].startsWith('<br')) {\n result.push(<br key={`a${key++}`} />);\n } else {\n const href = m[0].match(/href=\"([^\"]+)\"/) || m[0].match(/href='([^']+)'/);\n const target = m[0].match(/target=\"([^\"]+)\"/) || m[0].match(/target='([^']+)'/);\n const rel = m[0].match(/rel=\"([^\"]+)\"/) || m[0].match(/rel='([^']+)'/);\n const title = m[0].match(/>([^<]*)</);\n\n // eslint-disable-next-line\n result.push(\n <a\n key={`a${key++}`}\n href={href ? href[1] : ''}\n target={target ? target[1] : '_blank'}\n rel={rel ? rel[1] : ''}\n style={{ color: 'inherit' }}\n >\n {title ? title[1] : ''}\n </a>,\n );\n }\n\n m = text && text.match(/<a [^<]+<\\/a>|<br\\/?>|<b>[^<]+<\\/b>|<i>[^<]+<\\/i>/);\n if (!m && text) {\n result.push(<span key={`a${key++}`}>{text}</span>);\n }\n } while (m);\n\n return result;\n }\n\n return text;\n }\n\n /**\n * Get the smart name of the given state.\n * @param {Record<string, ioBroker.StateObject> | ioBroker.StateObject} states\n * @param {string} id\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static getSmartName(states, id, instanceId, noCommon) {\n if (!id) {\n if (!noCommon) {\n if (!states.common) {\n return states.smartName;\n }\n if (states && !states.common) {\n return states.smartName;\n }\n return states.common.smartName;\n }\n if (states && !states.common) {\n return states.smartName;\n }\n return states?.common?.custom && states.common.custom[instanceId]\n ? states.common.custom[instanceId].smartName\n : undefined;\n }\n if (!noCommon) {\n return states[id].common.smartName;\n }\n\n return states[id] && states[id].common?.custom && states[id].common.custom[instanceId]\n ? states[id].common.custom[instanceId].smartName || null\n : null;\n }\n\n /**\n * Get the smart name from a state.\n * @param {ioBroker.StateObject} obj\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static getSmartNameFromObj(obj, instanceId, noCommon) {\n if (!noCommon) {\n if (!obj.common) {\n return obj.smartName;\n }\n if (obj && !obj.common) {\n return obj.smartName;\n }\n return obj.common.smartName;\n }\n if (obj && !obj.common) {\n return obj.smartName;\n }\n\n return obj?.common?.custom && obj.common.custom[instanceId]\n ? obj.common.custom[instanceId].smartName\n : undefined;\n }\n\n /**\n * Enable smart name for a state.\n * @param {ioBroker.StateObject} obj\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static enableSmartName(obj, instanceId, noCommon) {\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = {};\n } else {\n obj.common.smartName = {};\n }\n }\n\n /**\n * Completely remove smart name from a state.\n * @param {ioBroker.StateObject} obj\n * @param {string | number} instanceId\n * @param {boolean} [noCommon]\n */\n static removeSmartName(obj, instanceId, noCommon) {\n if (noCommon) {\n if (obj.common && obj.common.custom && obj.common.custom[instanceId]) {\n obj.common.custom[instanceId] = null;\n }\n } else {\n obj.common.smartName = null;\n }\n }\n\n /**\n * Update the smartname of a state.\n * @param {ioBroker.StateObject} obj\n * @param {string} newSmartName\n * @param {string | undefined} byON\n * @param {string | undefined} smartType\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static updateSmartName(obj, newSmartName, byON, smartType, instanceId, noCommon) {\n const language = I18n.getLanguage();\n\n // convert the old format\n if (typeof obj.common.smartName === 'string') {\n const nnn = obj.common.smartName;\n obj.common.smartName = {};\n obj.common.smartName[language] = nnn;\n }\n\n // convert the old settings\n if (obj.native && obj.native.byON) {\n delete obj.native.byON;\n let _smartName = obj.common.smartName;\n\n if (!_smartName || typeof _smartName !== 'object') {\n _smartName = { en: _smartName };\n _smartName[language] = _smartName.en;\n }\n obj.common.smartName = _smartName;\n }\n if (smartType !== undefined) {\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = obj.common.custom[instanceId].smartName || {};\n if (!smartType) {\n delete obj.common.custom[instanceId].smartName.smartType;\n } else {\n obj.common.custom[instanceId].smartName.smartType = smartType;\n }\n } else {\n obj.common.smartName = obj.common.smartName || {};\n if (!smartType) {\n delete obj.common.smartName.smartType;\n } else {\n obj.common.smartName.smartType = smartType;\n }\n }\n }\n\n if (byON !== undefined) {\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = obj.common.custom[instanceId].smartName || {};\n obj.common.custom[instanceId].smartName.byON = byON;\n } else {\n obj.common.smartName = obj.common.smartName || {};\n obj.common.smartName.byON = byON;\n }\n }\n\n if (newSmartName !== undefined) {\n let smartName;\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = obj.common.custom[instanceId].smartName || {};\n smartName = obj.common.custom[instanceId].smartName;\n } else {\n obj.common.smartName = obj.common.smartName || {};\n smartName = obj.common.smartName;\n }\n smartName[language] = newSmartName;\n\n // If smart name deleted\n if (\n smartName &&\n (!smartName[language] ||\n (smartName[language] === obj.common.name &&\n (!obj.common.role || obj.common.role.includes('button'))))\n ) {\n delete smartName[language];\n let empty = true;\n // Check if the structure has any definitions\n for (const key in smartName) {\n if (Object.prototype.hasOwnProperty.call(smartName, key)) {\n empty = false;\n break;\n }\n }\n // If empty => delete smartName completely\n if (empty) {\n if (noCommon) {\n if (obj.common.custom[instanceId].smartName.byON === undefined) {\n delete obj.common.custom[instanceId];\n } else {\n delete obj.common.custom[instanceId].en;\n delete obj.common.custom[instanceId].de;\n delete obj.common.custom[instanceId].ru;\n delete obj.common.custom[instanceId].nl;\n delete obj.common.custom[instanceId].pl;\n delete obj.common.custom[instanceId].it;\n delete obj.common.custom[instanceId].fr;\n delete obj.common.custom[instanceId].pt;\n delete obj.common.custom[instanceId].es;\n delete obj.common.custom[instanceId].uk;\n delete obj.common.custom[instanceId]['zh-cn'];\n }\n } else if (obj.common.smartName.byON !== undefined) {\n delete obj.common.smartName.en;\n delete obj.common.smartName.de;\n delete obj.common.smartName.ru;\n delete obj.common.smartName.nl;\n delete obj.common.smartName.pl;\n delete obj.common.smartName.it;\n delete obj.common.smartName.fr;\n delete obj.common.smartName.pt;\n delete obj.common.smartName.es;\n delete obj.common.smartName.uk;\n delete obj.common.smartName['zh-cn'];\n } else {\n obj.common.smartName = null;\n }\n }\n }\n }\n }\n\n /**\n * Disable the smart name of a state.\n * @param {ioBroker.StateObject} obj\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static disableSmartName(obj, instanceId, noCommon) {\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = false;\n } else {\n obj.common.smartName = false;\n }\n }\n\n /**\n * Copy text to the clipboard.\n * @param {string} text\n * @param {Event} [e]\n */\n static copyToClipboard(text, e) {\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n return _Utils.copyToClipboard(text);\n }\n\n /**\n * Gets the extension of a file name.\n * @param {string | null} [fileName] the file name.\n * @returns {string | null} The extension in lower case.\n */\n static getFileExtension(fileName) {\n const pos = (fileName || '').lastIndexOf('.');\n if (pos !== -1) {\n return fileName.substring(pos + 1).toLowerCase();\n }\n return null;\n }\n\n /**\n * Format number of bytes as a string with B, KB, MB or GB.\n * The base for all calculations is 1024.\n * @param {number} bytes The number of bytes.\n * @returns {string} The formatted string (e.g. '723.5 KB')\n */\n static formatBytes(bytes) {\n if (Math.abs(bytes) < 1024) {\n return `${bytes} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n // const units = ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];\n let u = -1;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n\n return `${bytes.toFixed(1)} ${units[u]}`;\n }\n\n /**\n * Invert the given color according to a theme type to get the inverted text color for background\n * @param {string} color Color in the format '#rrggbb' or '#rgb' (or without a hash)\n * @param {string} themeType theme type\n * @param {string} invert dark theme has light color in control or light theme has light color in control\n * @returns {string | undefined}\n */\n static getInvertedColor(color, themeType, invert) {\n if (!color) {\n return undefined;\n }\n const invertedColor = Utils.invertColor(color, true);\n if (invertedColor === '#FFFFFF' && (themeType === 'dark' || (invert && themeType === 'light'))) {\n return '#DDD';\n }\n if (invertedColor === '#000000' && (themeType === 'light' || (invert && themeType === 'dark'))) {\n return '#222';\n }\n\n return undefined;\n }\n\n // Big thanks to: https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n /**\n * Invert the given color\n * @param {string} hex Color in the format '#rrggbb' or '#rgb' (or without hash)\n * @param {boolean} bw Set to black or white.\n * @returns {string}\n */\n static invertColor(hex, bw) {\n if (hex === undefined || hex === null || hex === '' || typeof hex !== 'string') {\n return '';\n }\n if (hex.startsWith('rgba')) {\n const m = hex.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('rgb')) {\n const m = hex.match(/rgb?\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('#')) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n let alfa = null;\n if (hex.length === 8) {\n alfa = hex.substring(6, 8);\n hex = hex.substring(0, 6);\n } else if (hex.length !== 6) {\n console.warn(`Cannot invert color: ${hex}`);\n return hex;\n }\n let r = parseInt(hex.slice(0, 2), 16);\n let g = parseInt(hex.slice(2, 4), 16);\n let b = parseInt(hex.slice(4, 6), 16);\n\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? `#000000${alfa || ''}` : `#FFFFFF${alfa || ''}`;\n }\n // invert color components\n r = (255 - r).toString(16);\n g = (255 - g).toString(16);\n b = (255 - b).toString(16);\n // pad each with zeros and return\n return `#${r.padStart(2, '0')}${g.padStart(2, '0')}${b.padStart(2, '0')}${alfa || ''}`;\n }\n\n /**\n * Convert RGB to array [r, g, b]\n * @param {string} hex Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @returns {Array<number>} Array with 3 elements [r, g, b]\n */\n static color2rgb(hex) {\n if (hex === undefined || hex === null || hex === '' || typeof hex !== 'string') {\n return '';\n }\n if (hex.startsWith('rgba')) {\n const m = hex.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('rgb')) {\n const m = hex.match(/rgb?\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('#')) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6 && hex.length !== 8) {\n console.warn(`Cannot invert color: ${hex}`);\n return false;\n }\n\n return [parseInt(hex.slice(0, 2), 16), parseInt(hex.slice(2, 4), 16), parseInt(hex.slice(4, 6), 16)];\n }\n\n // Big thanks to: https://github.com/antimatter15/rgb-lab\n /**\n * Convert RGB to LAB\n * @param {Array<number>} rgb color in format [r,g,b]\n * @returns {Array<number>} lab color in format [l,a,b]\n */\n static rgb2lab(rgb) {\n let r = rgb[0] / 255;\n let g = rgb[1] / 255;\n let b = rgb[2] / 255;\n\n r = r > 0.04045 ? ((r + 0.055) / 1.055) ** 2.4 : r / 12.92;\n g = g > 0.04045 ? ((g + 0.055) / 1.055) ** 2.4 : g / 12.92;\n b = b > 0.04045 ? ((b + 0.055) / 1.055) ** 2.4 : b / 12.92;\n\n let x = (r * 0.4124 + g * 0.3576 + b * 0.1805) / 0.95047;\n let y = r * 0.2126 + g * 0.7152 + b * 0.0722; /* / 1.00000; */\n let z = (r * 0.0193 + g * 0.1192 + b * 0.9505) / 1.08883;\n\n x = x > 0.008856 ? x ** 0.33333333 : 7.787 * x + 0.137931; // 16 / 116;\n y = y > 0.008856 ? y ** 0.33333333 : 7.787 * y + 0.137931; // 16 / 116;\n z = z > 0.008856 ? z ** 0.33333333 : 7.787 * z + 0.137931; // 16 / 116;\n\n return [116 * y - 16, 500 * (x - y), 200 * (y - z)];\n }\n\n /**\n * Calculate the distance between two colors in LAB color space in the range 0-100^2\n * If distance is less than 1000, the colors are similar\n * @param {string} color1 Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @param {string} color2 Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @returns {number} distance in the range 0-100^2\n */\n static colorDistance(color1, color2) {\n const lab1 = Utils.rgb2lab(Utils.color2rgb(color1));\n const lab2 = Utils.rgb2lab(Utils.color2rgb(color2));\n const dltL = lab1[0] - lab2[0];\n const dltA = lab1[1] - lab2[1];\n const dltB = lab1[2] - lab2[2];\n const c1 = Math.sqrt(lab1[1] * lab1[1] + lab1[2] * lab1[2]);\n const c2 = Math.sqrt(lab2[1] * lab2[1] + lab2[2] * lab2[2]);\n const dltC = c1 - c2;\n let dltH = dltA * dltA + dltB * dltB - dltC * dltC;\n dltH = dltH < 0 ? 0 : Math.sqrt(dltH);\n const sc = 1.0 + 0.045 * c1;\n const sh = 1.0 + 0.015 * c1;\n const dltLKlsl = dltL;\n const dltCkcsc = dltC / sc;\n const dltHkhsh = dltH / sh;\n const i = dltLKlsl * dltLKlsl + dltCkcsc * dltCkcsc + dltHkhsh * dltHkhsh;\n return i < 0 ? 0 : i;\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n /**\n * @private\n * @param {any} mix\n * @returns {string}\n */\n static _toVal(mix) {\n let y;\n let str = '';\n\n if (typeof mix === 'string' || typeof mix === 'number') {\n str += mix;\n } else if (typeof mix === 'object') {\n if (Array.isArray(mix)) {\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n y = Utils._toVal(mix[k]);\n if (y) {\n str += (str ? ' ' : '') + y;\n }\n }\n }\n } else {\n for (const k in mix) {\n if (mix[k]) {\n str += (str ? ' ' : '') + k;\n }\n }\n }\n }\n\n return str;\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n /**\n * Convert any object to a string with its values.\n * @returns {string}\n */\n static clsx() {\n let i = 0;\n let tmp;\n let x;\n let str = '';\n while (i < arguments.length) {\n // eslint-disable-next-line prefer-rest-params\n tmp = arguments[i++];\n if (tmp) {\n x = Utils._toVal(tmp);\n if (x) {\n str += (str ? ' ' : '') + x;\n }\n }\n }\n return str;\n }\n\n /**\n * Get the current theme name (either from local storage or the browser settings).\n * @param {string} [themeName]\n * @returns {string}\n */\n static getThemeName(themeName = '') {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return window.vendorPrefix;\n }\n\n return (\n themeName ||\n ((window._localStorage || window.localStorage).getItem('App.themeName')\n ? (window._localStorage || window.localStorage).getItem('App.themeName')\n : window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'colored')\n );\n }\n\n /**\n * Get the type of theme.\n * @param {string} [themeName]\n * @returns {'dark' | 'light'}\n */\n static getThemeType(themeName = '') {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return 'light';\n }\n\n themeName = themeName || (window._localStorage || window.localStorage).getItem('App.themeName');\n return themeName === 'dark' || themeName === 'blue' ? 'dark' : 'light';\n }\n\n /**\n * Set the theme name and theme type.\n * @param {string} themeName\n */\n static setThemeName(themeName) {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return; // ignore\n }\n (window._localStorage || window.localStorage).setItem('App.themeName', themeName);\n (window._localStorage || window.localStorage).setItem(\n 'App.theme',\n themeName === 'dark' || themeName === 'blue' ? 'dark' : 'light',\n );\n }\n\n /**\n * Toggle the theme name between 'dark' and 'colored'.\n * @param {string | null} themeName\n * @returns {string} the new theme name.\n */\n static toggleTheme(themeName) {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return window.vendorPrefix;\n }\n themeName = themeName || (window._localStorage || window.localStorage).getItem('App.themeName');\n\n // dark => blue => colored => light => dark\n const themes = Utils.getThemeNames();\n const pos = themes.indexOf(themeName);\n let newTheme;\n if (pos !== -1) {\n newTheme = themes[(pos + 1) % themes.length];\n } else {\n newTheme = themes[0];\n }\n Utils.setThemeName(newTheme);\n\n return newTheme;\n }\n\n /**\n * Get the list of themes\n * @returns {array<string>} list of possible themes\n */\n static getThemeNames() {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return [window.vendorPrefix];\n }\n\n return ['light', 'dark', 'blue', 'colored'];\n }\n\n /**\n * Parse a query string into its parts.\n * @param {string} query\n * @returns {Record<string, string | boolean | number>}\n */\n static parseQuery(query) {\n query = (query || '').toString().replace(/^\\?/, '');\n /** @type {Record<string, string | boolean | number>} */\n const result = {};\n query.split('&').forEach(part => {\n part = part.trim();\n if (part) {\n const parts = part.split('=');\n const attr = decodeURIComponent(parts[0]).trim();\n if (parts.length > 1) {\n result[attr] = decodeURIComponent(parts[1]);\n if (result[attr] === 'true') {\n result[attr] = true;\n } else if (result[attr] === 'false') {\n result[attr] = false;\n } else {\n const f = parseFloat(result[attr]);\n if (f.toString() === result[attr]) {\n result[attr] = f;\n }\n }\n } else {\n result[attr] = true;\n }\n }\n });\n return result;\n }\n\n /**\n * Returns parent ID.\n * @param {string} id\n * @returns {string | null} parent ID or null if no parent\n */\n static getParentId(id) {\n const p = (id || '').toString().split('.');\n if (p.length > 1) {\n p.pop();\n return p.join('.');\n }\n\n return null;\n }\n\n static formatDate(dateObj, dateFormat) {\n // format could be DD.MM.YYYY, YYYY.MM.DD or MM/DD/YYYY\n\n if (!dateObj) {\n return '';\n }\n\n let text;\n let mm = dateObj.getMonth() + 1;\n if (mm < 10) {\n mm = `0${mm}`;\n }\n\n let dd = dateObj.getDate();\n if (dd < 10) {\n dd = `0${dd}`;\n }\n\n if (dateFormat === 'MM/DD/YYYY') {\n text = `${mm}/${dd}/${dateObj.getFullYear()}`;\n } else {\n text = `${dateObj.getFullYear()}-${mm}-${dd}`;\n }\n\n // time\n let v = dateObj.getHours();\n if (v < 10) {\n text += ` 0${v}`;\n } else {\n text += ` ${v}`;\n }\n v = dateObj.getMinutes();\n if (v < 10) {\n text += `:0${v}`;\n } else {\n text += `:${v}`;\n }\n\n v = dateObj.getSeconds();\n if (v < 10) {\n text += `:0${v}`;\n } else {\n text += `:${v}`;\n }\n\n v = dateObj.getMilliseconds();\n if (v < 10) {\n text += `.00${v}`;\n } else if (v < 100) {\n text += `.0${v}`;\n } else {\n text += `.${v}`;\n }\n\n return text;\n }\n\n static formatTime(seconds) {\n if (seconds) {\n seconds = Math.round(seconds);\n const d = Math.floor(seconds / (3600 * 24));\n const h = Math.floor((seconds % (3600 * 24)) / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = seconds % 60;\n if (d) {\n return `${d}.${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n if (h) {\n return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n\n return `0:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n return '0:00:00';\n }\n\n static MDtext2link(text) {\n const m = text.match(/\\d+\\.\\)\\s/);\n if (m) {\n text = text.replace(m[0], m[0].replace(/\\s/, '&nbsp;'));\n }\n\n return text\n .replace(/[^a-zA-Zа-яА-Я0-9]/g, '')\n .trim()\n .replace(/\\s/g, '')\n .toLowerCase();\n }\n\n static openLink(url, target) {\n // replace IPv6 Address with [ipv6]:port\n url = url.replace(/\\/\\/([0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*)(:\\d+)?\\//i, '//[$1]$2/');\n\n if (target === 'this') {\n window.location = url;\n } else {\n window.open(url, target || '_blank');\n }\n }\n\n static MDgetTitle(text) {\n const result = Utils.extractHeader(text);\n const header = result.header;\n let body = result.body;\n if (!header.title) {\n // remove {docsify-bla}\n body = body.replace(/{[^}]*}/g, '');\n body = body.trim();\n const lines = body.replace(/\\r/g, '').split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('# ')) {\n return lines[i].substring(2).trim();\n }\n }\n return '';\n }\n\n return header.title;\n }\n\n static MDextractHeader(text) {\n const attrs = {};\n if (text.substring(0, 3) === '---') {\n const pos = text.substring(3).indexOf('\\n---');\n if (pos !== -1) {\n const _header = text.substring(3, pos + 3);\n const lines = _header.replace(/\\r/g, '').split('\\n');\n lines.forEach(line => {\n if (!line.trim()) {\n return;\n }\n const pos_ = line.indexOf(':');\n if (pos_ !== -1) {\n const attr = line.substring(0, pos_).trim();\n attrs[attr] = line.substring(pos_ + 1).trim();\n attrs[attr] = attrs[attr].replace(/^['\"]|['\"]$/g, '');\n if (attrs[attr] === 'true') {\n attrs[attr] = true;\n } else if (attrs[attr] === 'false') {\n attrs[attr] = false;\n } else if (parseFloat(attrs[attr]).toString() === attrs[attr]) {\n attrs[attr] = parseFloat(attrs[attr]);\n }\n } else {\n attrs[line.trim()] = true;\n }\n });\n text = text.substring(pos + 7);\n }\n }\n return { header: attrs, body: text };\n }\n\n static MDremoveDocsify(text) {\n const m = text.match(/{docsify-[^}]*}/g);\n if (m) {\n m.forEach(doc => (text = text.replace(doc, '')));\n }\n return text;\n }\n\n /**\n * Generate the json file on the file for download.\n * @param {string} filename file name\n * @param {Record<string, unknown>} json file data\n * @returns {object} json structure (not stringified)\n */\n static generateFile(filename, json) {\n const el = document.createElement('a');\n el.setAttribute(\n 'href',\n `data:application/json;charset=utf-8,${encodeURIComponent(JSON.stringify(json, null, 2))}`,\n );\n el.setAttribute('download', filename);\n\n el.style.display = 'none';\n document.body.appendChild(el);\n\n el.click();\n\n document.body.removeChild(el);\n }\n\n /**\n * Convert quality code into text\n * @param {number} quality code\n * @returns {array<string>} lines that decode quality\n */\n static quality2text(quality) {\n // eslint-disable-next-line no-bitwise\n const custom = quality & 0xffff0000;\n const text = QUALITY_BITS[quality];\n let result;\n if (text) {\n result = [text];\n // eslint-disable-next-line no-bitwise\n } else if (quality & 0x01) {\n // eslint-disable-next-line no-bitwise\n result = [QUALITY_BITS[0x01], `0x${(quality & (0xffff & ~1)).toString(16)}`];\n // eslint-disable-next-line no-bitwise\n } else if (quality & 0x02) {\n // eslint-disable-next-line no-bitwise\n result = [QUALITY_BITS[0x02], `0x${(quality & (0xffff & ~2)).toString(16)}`];\n } else {\n result = [`0x${quality.toString(16)}`];\n }\n if (custom) {\n // eslint-disable-next-line no-bitwise\n result.push(`0x${(custom >> 16).toString(16).toUpperCase()}`);\n }\n return result;\n }\n\n /**\n * Deep copy object\n * @param {object} object\n * @returns {object}\n */\n static clone(object) {\n return JSON.parse(JSON.stringify(object));\n }\n\n /**\n * Get states of object\n * @param {object} obj\n * @returns {object} states as an object in form {\"value1\": \"label1\", \"value2\": \"label2\"} or null\n */\n static getStates(obj) {\n let states = obj?.common?.states;\n if (states) {\n if (typeof states === 'string' && states[0] === '{') {\n try {\n states = JSON.parse(states);\n } catch {\n console.error(`Cannot parse states: ${states}`);\n states = null;\n }\n } else if (typeof states === 'string') {\n // if old format val1:text1;val2:text2\n const parts = states.split(';');\n states = {};\n for (let p = 0; p < parts.length; p++) {\n const s = parts[p].split(':');\n states[s[0]] = s[1];\n }\n } else if (Array.isArray(states)) {\n const result = {};\n if (obj.common.type === 'number') {\n states.forEach((value, key) => (result[key] = value));\n } else if (obj.common.type === 'string') {\n states.forEach(value => (result[value] = value));\n } else if (obj.common.type === 'boolean') {\n result.false = states[0];\n result.true = states[1];\n }\n\n return result;\n }\n }\n\n return states;\n }\n\n /**\n * Get svg file as text\n * @param {string} url URL of SVG file\n * @returns {object} Promise with \"data:image...\"\n */\n static getSvg(url) {\n return fetch(url)\n .then(response => response.blob())\n .then(\n blob =>\n new Promise(resolve => {\n const reader = new FileReader();\n // eslint-disable-next-line func-names\n reader.onload = function () {\n // do not optimize this function. \"this\" is important.\n resolve(this.result);\n };\n reader.readAsDataURL(blob);\n }),\n );\n }\n\n /**\n * Detect file extension by its content\n * @param {string} base64 Base64 encoded binary file\n * @returns {string} Detected extension, like 'jpg'\n */\n static detectMimeType(base64) {\n const signature = Object.keys(SIGNATURES).find(s => base64.startsWith(s));\n return signature ? SIGNATURES[signature] : null;\n }\n\n /**\n * Check if configured repository is the stable repository\n *\n * @param {string | string[]} activeRepo current configured repository or multi repository\n * @return {boolean}\n */\n static isStableRepository(activeRepo) {\n return !!(\n (typeof activeRepo === 'string' && activeRepo.toLowerCase().startsWith('stable')) ||\n (activeRepo && typeof activeRepo !== 'string' && activeRepo.find(r => r.toLowerCase().startsWith('stable')))\n );\n }\n\n /**\n * Check if given string is an integer\n *\n * @param {string} str string to check\n * @return {boolean}\n */\n static isStringInteger(str) {\n return parseInt(str).toString() === str;\n }\n\n /**\n * Check if the date is valid\n *\n * @param {Date} date\n * @return {boolean}\n */\n static isValidDate(date) {\n // eslint-disable-next-line no-restricted-globals\n return date instanceof Date && !isNaN(date);\n }\n\n static getStyle(theme, ...args) {\n const result = {};\n\n for (let a = 0; a < args.length; a++) {\n if (typeof args[a] === 'function') {\n Object.assign(result, args[a](theme));\n } else if (args[a] && typeof args[a] === 'object') {\n Object.keys(args[a]).forEach(attr => {\n if (typeof args[a][attr] === 'function') {\n result[attr] = args[a][attr](theme);\n } else if (typeof args[a][attr] === 'object') {\n const obj = args[a][attr];\n result[attr] = result[attr] || {};\n Object.keys(obj).forEach(attr1 => {\n if (typeof obj[attr1] === 'function') {\n result[attr][attr1] = obj(theme);\n } else if (obj[attr1] || obj[attr1] === 0) {\n result[attr][attr1] = obj[attr1];\n }\n });\n } else if (args[a][attr] || args[a][attr] === 0) {\n result[attr] = args[a][attr];\n }\n });\n }\n }\n\n return result;\n }\n}\n\nexport default Utils;\n","import React, { Component, type JSX } from 'react';\n\nimport { Grid2, Button } from '@mui/material';\n\nimport {\n Info as IconInfo,\n Warning as IconWarning,\n Error as IconError,\n Key as IconAuth,\n Send as IconSend,\n Public as IconWeb,\n Search as IconSearch,\n MenuBook as IconMenuBook,\n Help as IconHelp,\n UploadFile as IconUploadFile,\n Edit as IconEdit,\n Person as IconPerson,\n Group as IconGroup,\n Delete as IconDelete,\n Refresh as IconRefresh,\n Add as IconAdd,\n LinkOff as IconLinkOff,\n Link as LinkIcon,\n Save,\n OpenInNew,\n} from '@mui/icons-material';\n\nimport {\n Confirm as ConfirmDialog,\n Icon,\n Utils,\n type AdminConnection,\n I18n,\n type Connection,\n type ThemeType,\n type ThemeName,\n type IobTheme,\n} from '@iobroker/adapter-react-v5';\nimport type { BackEndCommand, ConfigIconType, ConfigItemAny, ConfigItemConfirmData } from '#JC/types';\n\n// because this class is used in adapter-react-v5, do not include here any foreign files like from '../../helpers/utils.ts'\nexport function isObject(it: any): it is Record<string, any> {\n // This is necessary because:\n // typeof null === 'object'\n // typeof [] === 'object'\n // [] instanceof Object === true\n return Object.prototype.toString.call(it) === '[object Object]'; // this code is 25% faster than below one\n // return it && typeof it === 'object' && !(it instanceof Array);\n}\n\nexport interface DeviceManagerPropsProps {\n /* socket object */\n socket: Connection;\n /* Instance to communicate with device-manager backend, like `adapterName.X` */\n selectedInstance: string; // adapterName.X\n registerHandler?: (handler: null | ((command: string) => void)) => void;\n themeName: ThemeName;\n themeType: ThemeType;\n isFloatComma: boolean;\n dateFormat: string;\n /** Instance to upload images to, like `adapterName.X` */\n uploadImagesToInstance?: string;\n /** Filter devices with this string */\n filter?: string;\n /** If this component is used in GUI with own toolbar. `false` if this list is used with multiple instances and true if only with one (in this case, it will monitor alive itself */\n embedded?: boolean;\n /** If embedded, this text is shown in the toolbar */\n title?: string;\n /** Style of a component that displays all devices */\n style?: React.CSSProperties;\n /** Use small cards for devices */\n smallCards?: boolean;\n}\n\nexport interface ConfigGenericProps {\n DeviceManager?: React.FC<DeviceManagerPropsProps>;\n adapterName: string;\n alive: boolean;\n arrayIndex?: number;\n attr?: string;\n changeLanguage?: () => void;\n changed: boolean;\n className?: string;\n style?: Record<string, any>;\n commandRunning?: boolean;\n common: Record<string, any>;\n custom?: boolean;\n customObj?: Record<string, any>;\n customs?: Record<string, typeof ConfigGeneric>;\n data: Record<string, any>;\n dateFormat: string;\n disabled?: boolean;\n forceUpdate: (attrs: string[], data: Record<string, any>) => void;\n // filled only by table and represents the obj.native or obj.common.custom['adapter.X'] object\n globalData?: Record<string, any>;\n imagePrefix?: string;\n // filled only by table\n index?: number;\n instance: number;\n instanceObj?: ioBroker.InstanceObject;\n isFloatComma: boolean;\n isParentTab?: boolean;\n /** If true, this field edits multiple data points at once and thus contains an array, should not be saved if not changed */\n multiEdit?: boolean;\n onChange: (attrOrData: string | Record<string, any>, val?: any, cb?: () => void, saveConfig?: boolean) => void;\n onCommandRunning: (running: boolean) => void;\n onError: (attr: string, error?: string) => void;\n /** Backend request to refresh data */\n onBackEndCommand?: (command?: BackEndCommand) => void;\n originalData: Record<string, any>;\n registerOnForceUpdate?: (attr: string, onUpdate?: (data: Record<string, any>) => void) => void;\n /** This indicates that the component is the very firsts one - root */\n root?: boolean;\n /** Provided props by the specific component */\n schema: ConfigItemAny;\n socket: AdminConnection;\n systemConfig?: ioBroker.SystemConfigCommon;\n /** This item is in the table. Maybe some layouts must be changed */\n table?: boolean;\n themeName: ThemeName;\n themeType: ThemeType;\n theme: IobTheme;\n}\n\nexport interface ConfigGenericState {\n confirmDialog: boolean;\n confirmNewValue: any;\n confirmAttr: any;\n confirmData: ConfigItemConfirmData | null;\n value?: any;\n confirmDepAttr?: any;\n confirmDepNewValue?: any;\n confirmCallback: null | ((result: boolean) => void);\n}\n\nexport default class ConfigGeneric<\n Props extends ConfigGenericProps = ConfigGenericProps,\n State extends ConfigGenericState = ConfigGenericState,\n> extends Component<Props, State> {\n static DIFFERENT_VALUE = '__different__';\n\n static DIFFERENT_LABEL = 'ra___different__';\n\n static NONE_VALUE = '';\n\n static NONE_LABEL = 'ra_none';\n\n private readonly defaultValue: any;\n\n private isError: any;\n\n private readonly lang: ioBroker.Languages;\n\n private defaultSendToDone?: boolean;\n\n private sendToTimeout?: any;\n\n private noPlaceRequired: any;\n\n constructor(props: Props) {\n super(props);\n\n // @ts-expect-error of course, as we just\n this.state = {\n confirmDialog: false,\n confirmNewValue: null,\n confirmAttr: null,\n confirmData: null,\n confirmCallback: null,\n } satisfies ConfigGenericState;\n\n this.isError = {};\n\n if (props.schema) {\n if (props.custom) {\n this.defaultValue = props.schema.defaultFunc\n ? this.executeCustom(\n props.schema.defaultFunc,\n props.data,\n props.customObj,\n props.instanceObj,\n props.arrayIndex,\n props.globalData,\n )\n : props.schema.default;\n } else if (props.schema.type !== 'state') {\n this.defaultValue = props.schema.defaultFunc\n ? this.execute(\n props.schema.defaultFunc,\n props.schema.default,\n props.data,\n props.arrayIndex,\n props.globalData,\n )\n : props.schema.default;\n }\n }\n\n this.lang = I18n.getLanguage();\n }\n\n componentDidMount(): void {\n if (this.props.registerOnForceUpdate) {\n this.props.registerOnForceUpdate(this.props.attr, this.onUpdate);\n }\n const LIKE_SELECT = ['select', 'autocomplete', 'autocompleteSendTo'];\n // init default value\n if (this.defaultValue !== undefined) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (\n value === undefined ||\n (LIKE_SELECT.includes(this.props.schema.type) && (value === '' || value === null))\n ) {\n setTimeout(() => {\n if (this.props.custom) {\n this.props.onChange(this.props.attr, this.defaultValue, () =>\n setTimeout(() => this.props.forceUpdate([this.props.attr], this.props.data), 100),\n );\n } else {\n ConfigGeneric.setValue(this.props.data, this.props.attr, this.defaultValue);\n this.props.onChange(this.props.data, undefined, () =>\n this.props.forceUpdate([this.props.attr], this.props.data),\n );\n }\n }, 100);\n }\n } else if (this.props.schema.defaultSendTo) {\n this.sendTo();\n }\n }\n\n sendTo(): void {\n if (this.props.alive) {\n this.defaultSendToDone = true;\n let data: any = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr = this.getPattern(this.props.schema.jsonData);\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n } else {\n data = {\n attr: this.props.attr,\n value: ConfigGeneric.getValue(this.props.data, this.props.attr),\n };\n }\n\n if (data === undefined) {\n data = null;\n }\n\n void this.props.socket\n .sendTo(`${this.props.adapterName}.${this.props.instance}`, this.props.schema.defaultSendTo, data)\n .then((value: any) => {\n if (value !== null && value !== undefined) {\n if (this.props.custom) {\n this.props.onChange(this.props.attr, value, () =>\n this.props.forceUpdate([this.props.attr], this.props.data),\n );\n } else {\n ConfigGeneric.setValue(this.props.data, this.props.attr, value);\n this.props.onChange(this.props.data, undefined, () =>\n this.props.forceUpdate([this.props.attr], this.props.data),\n );\n }\n }\n });\n } else {\n this.defaultSendToDone = false;\n if (!this.props.schema.allowSaveWithError) {\n // show error, that instance did not start\n this.onError(this.props.attr, I18n.t('ra_Instance %s is not alive', this.props.instance.toString()));\n }\n }\n }\n\n componentWillUnmount(): void {\n if (this.props.registerOnForceUpdate) {\n this.props.registerOnForceUpdate(this.props.attr);\n }\n if (this.sendToTimeout) {\n clearTimeout(this.sendToTimeout);\n this.sendToTimeout = null;\n }\n }\n\n onUpdate = (data: Record<string, any>): void => {\n const value = ConfigGeneric.getValue(data || this.props.data, this.props.attr) || '';\n if (this.state.value !== value) {\n this.setState({ value });\n } else {\n this.forceUpdate();\n }\n };\n\n /**\n * Extract attribute out of data\n */\n static getValue(data: Record<string, any>, attr: string | string[]): any {\n if (typeof attr === 'string') {\n return ConfigGeneric.getValue(data, attr.split('.'));\n }\n if (attr.length === 1) {\n return data[attr[0]];\n }\n const part = attr.shift();\n\n if (typeof part === 'string' && typeof data[part] === 'object') {\n return ConfigGeneric.getValue(data[part], attr);\n }\n return null;\n }\n\n static setValue(data: Record<string, any>, attr: string | string[], value: any): void {\n if (typeof attr === 'string') {\n ConfigGeneric.setValue(data, attr.split('.'), value);\n return;\n }\n if (attr.length === 1) {\n if (value === null) {\n delete data[attr[0]];\n } else {\n data[attr[0]] = value;\n }\n } else {\n const part = attr.shift();\n\n if (typeof part !== 'string') {\n return;\n }\n\n if (!data[part] || typeof data[part] === 'object') {\n data[part] = data[part] || {};\n }\n ConfigGeneric.setValue(data[part], attr, value);\n }\n }\n\n getText(text: ioBroker.StringOrTranslated, noTranslation?: boolean): string {\n if (!text) {\n return '';\n }\n\n if (typeof text === 'string') {\n const strText = noTranslation ? text : I18n.t(text);\n if (strText.includes('${')) {\n return this.getPattern(strText);\n }\n return strText;\n }\n\n if (isObject(text)) {\n // todo\n if ((text as any).func) {\n // calculate pattern\n if (typeof (text as any).func === 'object') {\n return this.getPattern((text as any).func[this.lang] || (text as any).func.en || '');\n }\n return this.getPattern((text as any).func);\n }\n\n return text[this.lang] || text.en || '';\n }\n\n return (text as any).toString();\n }\n\n renderConfirmDialog(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\n const confirm = this.state.confirmData || this.props.schema.confirm;\n let icon: null | JSX.Element = null;\n if (confirm.type === 'warning') {\n icon = <IconWarning />;\n } else if (confirm.type === 'error') {\n icon = <IconError />;\n } else if (confirm.type === 'info') {\n icon = <IconInfo />;\n }\n\n return (\n <ConfirmDialog\n title={this.getText(confirm.title) || I18n.t('ra_Please confirm')}\n text={this.getText(confirm.text)}\n ok={this.getText(confirm.ok) || I18n.t('ra_Ok')}\n cancel={this.getText(confirm.cancel) || I18n.t('ra_Cancel')}\n icon={icon || undefined}\n onClose={isOk =>\n this.setState({ confirmDialog: false }, () => {\n if (isOk) {\n if (this.state.confirmCallback) {\n const callback = this.state.confirmCallback;\n this.setState({ confirmCallback: null }, () => callback(true));\n return;\n }\n\n const data = JSON.parse(JSON.stringify(this.props.data));\n if (this.state.confirmDepAttr) {\n ConfigGeneric.setValue(data, this.state.confirmDepAttr, this.state.confirmDepNewValue);\n }\n\n ConfigGeneric.setValue(data, this.state.confirmAttr, this.state.confirmNewValue);\n this.setState(\n {\n confirmDialog: false,\n confirmDepAttr: null,\n confirmDepNewValue: null,\n confirmNewValue: null,\n confirmAttr: null,\n confirmData: null,\n },\n () => this.props.onChange(data),\n );\n } else {\n const callback = this.state.confirmCallback;\n this.setState(\n {\n confirmDialog: false,\n confirmDepAttr: null,\n confirmDepNewValue: null,\n confirmNewValue: null,\n confirmAttr: null,\n confirmData: null,\n confirmCallback: null,\n },\n () => {\n if (callback) {\n callback(false);\n }\n },\n );\n }\n })\n }\n />\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n getIcon(iconSettings?: ConfigIconType | null): JSX.Element | null {\n iconSettings = iconSettings || this.props.schema.icon;\n let icon = null;\n if (iconSettings === 'auth') {\n icon = <IconAuth />;\n } else if (iconSettings === 'send') {\n icon = <IconSend />;\n } else if (iconSettings === 'web') {\n icon = <IconWeb />;\n } else if (iconSettings === 'warning') {\n icon = <IconWarning />;\n } else if (iconSettings === 'error') {\n icon = <IconError />;\n } else if (iconSettings === 'info') {\n icon = <IconInfo />;\n } else if (iconSettings === 'search') {\n icon = <IconSearch />;\n } else if (iconSettings === 'book') {\n icon = <IconMenuBook />;\n } else if (iconSettings === 'help') {\n icon = <IconHelp />;\n } else if (iconSettings === 'upload') {\n icon = <IconUploadFile />;\n } else if (iconSettings === 'edit') {\n icon = <IconEdit />;\n } else if (iconSettings === 'user') {\n icon = <IconPerson />;\n } else if (iconSettings === 'group') {\n icon = <IconGroup />;\n } else if (iconSettings === 'delete') {\n icon = <IconDelete />;\n } else if (iconSettings === 'refresh') {\n icon = <IconRefresh />;\n } else if (iconSettings === 'add') {\n icon = <IconAdd />;\n } else if (iconSettings === 'unpair') {\n icon = <IconLinkOff />;\n } else if (iconSettings === 'pair') {\n icon = <LinkIcon />;\n } else if (iconSettings === 'save') {\n icon = <Save />;\n } else if (iconSettings === 'open') {\n icon = <OpenInNew />;\n } else if (iconSettings) {\n if (iconSettings.endsWith('.png') || iconSettings.endsWith('.svg') || iconSettings.endsWith('.jpg')) {\n // this path is relative to ./adapter/NAME\n if (!iconSettings.startsWith('http://') && !iconSettings.startsWith('https://')) {\n iconSettings = `./adapter/${this.props.adapterName}/${iconSettings}`;\n }\n }\n\n icon = (\n <Icon\n src={iconSettings}\n style={{ width: 22, height: 22 }}\n />\n );\n }\n\n return icon;\n }\n\n /**\n * Trigger onChange, to activate save button on change\n *\n * @param attr the changed attribute\n * @param newValue new value of the attribute\n */\n // eslint-disable-next-line react/no-unused-class-component-methods\n onChangeAsync(attr: string, newValue: unknown): Promise<void> {\n return new Promise(resolve => {\n const mayBePromise = this.onChange(attr, newValue, resolve);\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n });\n }\n\n /**\n * Trigger onChange, to activate save button on change\n *\n * @param attr the changed attribute\n * @param newValue new value of the attribute\n * @param cb optional callback function, else returns a Promise\n */\n onChange(attr: string, newValue: unknown, cb?: () => void): Promise<void> {\n // Do not use here deep copy, as it is not JsonConfig\n const data = JSON.parse(JSON.stringify(this.props.data));\n ConfigGeneric.setValue(data, attr, newValue);\n\n if (\n this.props.schema.confirm &&\n this.execute(this.props.schema.confirm.condition, false, data, this.props.arrayIndex, this.props.globalData)\n ) {\n return new Promise<void>(resolve => {\n this.setState(\n {\n confirmDialog: true,\n confirmNewValue: newValue,\n confirmAttr: attr,\n confirmData: null,\n },\n () => {\n if (typeof cb === 'function') {\n cb();\n } else {\n resolve();\n }\n },\n );\n });\n }\n // find any inputs with confirmation\n if (this.props.schema.confirmDependsOn) {\n for (let z = 0; z < this.props.schema.confirmDependsOn.length; z++) {\n const dep = this.props.schema.confirmDependsOn[z];\n if (dep.confirm) {\n const val = ConfigGeneric.getValue(data, dep.attr);\n\n if (\n this.execute(dep.confirm.condition, false, data, this.props.arrayIndex, this.props.globalData)\n ) {\n return new Promise<void>(resolve => {\n this.setState(\n {\n confirmDialog: true,\n confirmNewValue: newValue,\n confirmAttr: attr,\n confirmDepNewValue: val,\n confirmDepAttr: dep.attr,\n confirmData: dep.confirm,\n },\n () => {\n if (typeof cb === 'function') {\n cb();\n } else {\n resolve();\n }\n },\n );\n });\n }\n }\n }\n }\n\n const changed: string[] = [];\n if (this.props.schema.onChangeDependsOn) {\n for (let z = 0; z < this.props.schema.onChangeDependsOn.length; z++) {\n const dep = this.props.schema.onChangeDependsOn[z];\n if (dep.onChange) {\n const val = ConfigGeneric.getValue(data, dep.attr);\n\n let _newValue;\n if (this.props.custom) {\n _newValue = this.executeCustom(\n dep.onChange.calculateFunc,\n data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n );\n } else {\n _newValue = this.execute(\n dep.onChange.calculateFunc,\n val,\n data,\n this.props.arrayIndex,\n this.props.globalData,\n );\n }\n\n if (_newValue !== val) {\n ConfigGeneric.setValue(data, dep.attr, _newValue);\n changed.push(dep.attr);\n }\n }\n }\n }\n\n if (this.props.schema.hiddenDependsOn) {\n for (let z = 0; z < this.props.schema.hiddenDependsOn.length; z++) {\n const dep = this.props.schema.hiddenDependsOn[z];\n if (dep.hidden) {\n changed.push(dep.attr);\n }\n }\n }\n\n if (this.props.schema.labelDependsOn) {\n for (let z = 0; z < this.props.schema.labelDependsOn.length; z++) {\n const dep = this.props.schema.labelDependsOn[z];\n if (dep.hidden) {\n changed.push(dep.attr);\n }\n }\n }\n\n if (this.props.schema.helpDependsOn) {\n for (let z = 0; z < this.props.schema.helpDependsOn.length; z++) {\n const dep = this.props.schema.helpDependsOn[z];\n if (dep.hidden) {\n changed.push(dep.attr);\n }\n }\n }\n\n if (this.props.schema.onChange && !this.props.schema.onChange.ignoreOwnChanges) {\n const val = ConfigGeneric.getValue(data, this.props.attr);\n\n const newValue_ = this.props.custom\n ? this.executeCustom(\n this.props.schema.onChange.calculateFunc,\n data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n )\n : this.execute(\n this.props.schema.onChange.calculateFunc,\n val,\n data,\n this.props.arrayIndex,\n this.props.globalData,\n );\n if (newValue_ !== val) {\n ConfigGeneric.setValue(data, this.props.attr, newValue_);\n }\n }\n\n if (this.props.custom) {\n this.props.onChange(attr, newValue, () => cb && cb());\n\n if (changed?.length) {\n changed.forEach((_attr, i) =>\n setTimeout(() => this.props.onChange(_attr, ConfigGeneric.getValue(data, _attr)), i * 50),\n );\n }\n } else {\n this.props.onChange(data, undefined, () => {\n if (changed.length) {\n this.props.forceUpdate(changed, data);\n }\n if (cb) {\n cb();\n }\n });\n }\n\n return Promise.resolve();\n }\n\n execute(\n func: string | boolean | Record<string, string>,\n defaultValue: string | number | boolean,\n data: Record<string, any>,\n arrayIndex: number,\n globalData: Record<string, any>,\n ): string | number | boolean {\n let fun: string;\n\n if (isObject(func)) {\n fun = func.func;\n } else if (typeof func === 'string') {\n fun = func;\n } else {\n return func;\n }\n\n if (!fun) {\n return defaultValue;\n }\n try {\n const f = new Function(\n 'data',\n 'originalData',\n '_system',\n '_alive',\n '_common',\n '_socket',\n '_instance',\n 'arrayIndex',\n 'globalData',\n '_changed',\n fun.includes('return') ? fun : `return ${fun}`,\n );\n return f(\n data || this.props.data,\n this.props.originalData,\n this.props.systemConfig,\n this.props.alive,\n this.props.common,\n this.props.socket,\n this.props.instance,\n arrayIndex,\n globalData,\n this.props.changed,\n );\n } catch (e) {\n console.error(`Cannot execute ${JSON.stringify(func)}: ${e}`);\n return defaultValue;\n }\n }\n\n executeCustom(\n func: string | boolean | Record<string, string>,\n data: Record<string, any>,\n customObj: Record<string, any>,\n instanceObj: ioBroker.InstanceObject,\n arrayIndex: number,\n globalData: Record<string, any>,\n ): string | boolean | number | null {\n let fun: string;\n\n if (isObject(func)) {\n fun = func.func;\n } else if (typeof func === 'string') {\n fun = func;\n } else {\n return func;\n }\n\n if (!fun) {\n return null;\n }\n try {\n const f = new Function(\n 'data',\n 'originalData',\n '_system',\n 'instanceObj',\n 'customObj',\n '_socket',\n 'arrayIndex',\n 'globalData',\n '_changed',\n fun.includes('return') ? fun : `return ${fun}`,\n );\n return f(\n data || this.props.data,\n this.props.originalData,\n this.props.systemConfig,\n instanceObj,\n customObj,\n this.props.socket,\n arrayIndex,\n globalData,\n this.props.changed,\n );\n } catch (e) {\n console.error(`Cannot execute ${fun}: ${e}`);\n return null;\n }\n }\n\n calculate(schema: Record<string, any>): {\n error: boolean;\n disabled: boolean;\n hidden: boolean;\n defaultValue: null | string | number | boolean;\n } {\n let error: boolean;\n let disabled: boolean;\n let hidden: boolean;\n let defaultValue: null | string | number | boolean;\n\n if (this.props.custom) {\n error = schema.validator\n ? !this.executeCustom(\n schema.validator,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n )\n : false;\n if (schema.disabled === true) {\n disabled = true;\n } else {\n disabled = schema.disabled\n ? (this.executeCustom(\n schema.disabled,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n ) as boolean)\n : false;\n }\n if (schema.hidden === true) {\n hidden = true;\n } else {\n hidden = schema.hidden\n ? (this.executeCustom(\n schema.hidden,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n ) as boolean)\n : false;\n }\n defaultValue = schema.defaultFunc\n ? this.executeCustom(\n schema.defaultFunc,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n )\n : schema.default;\n } else {\n error = schema.validator\n ? !this.execute(schema.validator, false, this.props.data, this.props.arrayIndex, this.props.globalData)\n : false;\n if (schema.disabled === true) {\n disabled = true;\n } else {\n disabled = schema.disabled\n ? (this.execute(\n schema.disabled,\n false,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n ) as boolean)\n : false;\n }\n if (schema.hidden === true) {\n hidden = true;\n } else {\n hidden = schema.hidden\n ? (this.execute(\n schema.hidden,\n false,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n ) as boolean)\n : false;\n }\n defaultValue = schema.defaultFunc\n ? this.execute(\n schema.defaultFunc,\n schema.default,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n )\n : schema.default;\n }\n\n return {\n error,\n disabled,\n hidden,\n defaultValue,\n };\n }\n\n onError(attr: string, error?: string): void {\n if (!error) {\n delete this.isError[attr];\n } else {\n this.isError[attr] = error;\n }\n\n if (this.props.onError) {\n this.props.onError(attr, error);\n }\n }\n\n renderItem(_error: unknown, _disabled: boolean, _defaultValue?: unknown): JSX.Element | string | null {\n return this.getText(this.props.schema.label) || this.getText(this.props.schema.text);\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderHelp(\n text: ioBroker.StringOrTranslated,\n link: string,\n noTranslation: boolean,\n ): JSX.Element | JSX.Element[] | string {\n if (!link) {\n text = this.getText(text, noTranslation) || '';\n if (\n text &&\n (text.includes('<a ') || text.includes('<br') || text.includes('<b>') || text.includes('<i>'))\n ) {\n return Utils.renderTextWithA(text);\n }\n return text;\n }\n return (\n <a\n href={link}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{\n color: this.props.themeType === 'dark' ? '#a147ff' : '#5b238f',\n textDecoration: 'underline',\n }}\n >\n {this.getText(text, noTranslation)}\n </a>\n );\n }\n\n // we have a problem that a string '{\"password\": \"${password}\"}' cannot contain a double quota inside the string\n // escape it with \\\"\n static escapeString(str: string, data: Record<string, any>): string {\n if (typeof str !== 'string') {\n return '';\n }\n str = str.replace(/`/g, '\\\\`');\n // extract all tokes with ${data.token}\n str = str.replace(/\\${([^}]+)}/g, (_match: string, p1: any) => {\n if (p1 && typeof p1 === 'string' && p1.startsWith('data.')) {\n const value = ConfigGeneric.getValue(data, p1.replace(/^data\\./, ''));\n\n if (typeof value === 'string' && value.includes('\"')) {\n return `\\${${p1}.replace(/\"/g, '\\\\\\\\\"')}`;\n }\n }\n return _match;\n });\n\n return str;\n }\n\n getPattern(pattern: string | { func: string }, data?: Record<string, any>): string {\n data = data || this.props.data;\n if (!pattern) {\n return '';\n }\n let patternStr: string;\n if (typeof pattern === 'object') {\n if (pattern.func) {\n patternStr = (pattern as { func: string }).func;\n } else {\n console.log(`Object must be stringified: ${JSON.stringify(pattern)}`);\n patternStr = JSON.stringify(pattern);\n }\n } else {\n patternStr = pattern;\n }\n\n try {\n if (this.props.custom) {\n const f = new Function(\n 'data',\n 'originalData',\n 'arrayIndex',\n 'globalData',\n '_system',\n 'instanceObj',\n 'customObj',\n '_socket',\n '_changed',\n `return \\`${ConfigGeneric.escapeString(patternStr, data)}\\``,\n );\n return f(\n data,\n this.props.originalData,\n this.props.arrayIndex,\n this.props.globalData,\n this.props.systemConfig,\n this.props.instanceObj,\n this.props.customObj,\n this.props.socket,\n this.props.changed,\n );\n }\n\n const f = new Function(\n 'data',\n 'originalData',\n 'arrayIndex',\n 'globalData',\n '_system',\n '_alive',\n '_common',\n '_socket',\n '_changed',\n `return \\`${ConfigGeneric.escapeString(patternStr, data)}\\``,\n );\n return f(\n data,\n this.props.originalData,\n this.props.arrayIndex,\n this.props.globalData,\n this.props.systemConfig,\n this.props.alive,\n this.props.common,\n this.props.socket,\n this.props.changed,\n );\n } catch (e) {\n console.error(`Cannot execute ${patternStr}: ${e}`);\n return patternStr;\n }\n }\n\n render(): string | JSX.Element | null {\n const schema = this.props.schema;\n\n if (!schema) {\n return null;\n }\n\n if (this.props.alive && this.defaultSendToDone === false) {\n this.sendToTimeout = setTimeout(() => {\n this.sendToTimeout = null;\n this.sendTo();\n }, 200);\n }\n\n const { error, disabled, hidden, defaultValue } = this.calculate(schema);\n\n if (hidden) {\n // Remove all errors if element is hidden\n if (Object.keys(this.isError).length) {\n setTimeout(\n isError => Object.keys(isError).forEach(attr => this.props.onError(attr)),\n 100,\n JSON.parse(JSON.stringify(this.isError)),\n );\n this.isError = {};\n }\n\n if (schema.hideOnlyControl) {\n const item = (\n <Grid2\n size={{\n xs: schema.xs || 12, // if xs is not defined, take the full width\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n style={{\n marginBottom: 0 /* marginRight: 8, */,\n textAlign: 'left',\n ...schema.style,\n ...(this.props.themeType === 'dark' ? schema.darkStyle : {}),\n }}\n />\n );\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {item}\n </>\n );\n }\n return item;\n }\n return null;\n }\n // Add error\n if (schema.validatorNoSaveOnError) {\n if (error && !Object.keys(this.isError).length) {\n this.isError = {\n [this.props.attr]: schema.validatorErrorText ? I18n.t(schema.validatorErrorText) : true,\n };\n setTimeout(\n isError => Object.keys(isError).forEach(attr => this.props.onError(attr, isError[attr])),\n 100,\n JSON.parse(JSON.stringify(this.isError)),\n );\n } else if (!error && Object.keys(this.isError).length) {\n setTimeout(\n isError => Object.keys(isError).forEach(attr => this.props.onError(attr)),\n 100,\n JSON.parse(JSON.stringify(this.isError)),\n );\n this.isError = {};\n }\n }\n\n const renderedItem = this.renderItem(\n error,\n disabled || this.props.commandRunning || this.props.disabled,\n defaultValue,\n );\n\n if (this.noPlaceRequired) {\n return renderedItem;\n }\n\n const item = (\n <Grid2\n title={this.getText(schema.tooltip)}\n size={{\n xs: schema.xs || 12, // if xs is not defined, take the full width\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n style={{\n marginBottom: 0,\n // marginRight: 8,\n textAlign: 'left',\n width: schema.type === 'divider' || schema.type === 'header' ? schema.width || '100%' : undefined,\n ...schema.style,\n ...(this.props.themeType === 'dark' ? schema.darkStyle : {}),\n }}\n >\n {this.props.schema.defaultSendTo && this.props.schema.button ? (\n <Grid2\n container\n style={{ width: '100%' }}\n >\n <Grid2 flex={1}>{renderedItem}</Grid2>\n <Grid2>\n <Button\n variant=\"outlined\"\n onClick={() => this.sendTo()}\n title={\n this.props.schema.buttonTooltip\n ? this.getText(\n this.props.schema.buttonTooltip,\n this.props.schema.buttonTooltipNoTranslation,\n )\n : I18n.t('ra_Request data by instance')\n }\n >\n {this.getText(this.props.schema.button as ioBroker.StringOrTranslated)}\n </Button>\n </Grid2>\n </Grid2>\n ) : (\n renderedItem\n )}\n </Grid2>\n );\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {this.renderConfirmDialog()}\n {item}\n </>\n );\n }\n if (this.state.confirmDialog) {\n return (\n <>\n {this.renderConfirmDialog()}\n {item}\n </>\n );\n }\n return item;\n }\n}\n","import React, { type JSX } from 'react';\n\nimport {\n FormHelperText,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n IconButton,\n Paper,\n Toolbar,\n Tooltip,\n Typography,\n} from '@mui/material';\n\nimport {\n Add as AddIcon,\n Delete as DeleteIcon,\n ArrowUpward as UpIcon,\n ArrowDownward as DownIcon,\n ContentCopy as CopyContentIcon,\n ExpandMore as ExpandMoreIcon,\n} from '@mui/icons-material';\n\nimport { I18n, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemAccordion, ConfigItemAny, ConfigItemIndexed, ConfigItemPanel } from '#JC/types';\nimport Utils from '#JC/Utils';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nimport ConfigPanel from './ConfigPanel';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n },\n accordionSummary: (theme: IobTheme) => ({\n backgroundColor: theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.08)' : 'rgba(0, 0, 0, 0.08)',\n }),\n accordionTitle: {\n // fontWeight: 'bold',\n },\n toolbar: (theme: IobTheme) => ({\n backgroundColor: theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.08)' : 'rgba(0, 0, 0, 0.08)',\n borderRadius: '3px',\n }),\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface ConfigAccordionProps extends ConfigGenericProps {\n schema: ConfigItemAccordion;\n}\n\ninterface ConfigAccordionState extends ConfigGenericState {\n value: Record<string, any>[];\n activeIndex: number;\n iteration: number;\n}\n\nclass ConfigAccordion extends ConfigGeneric<ConfigAccordionProps, ConfigAccordionState> {\n private typingTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(props: ConfigAccordionProps) {\n super(props);\n this.props.schema.items = this.props.schema.items || [];\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n\n let value = ConfigGeneric.getValue(this.props.data, this.props.attr) || [];\n\n if (!Array.isArray(value)) {\n value = [];\n }\n\n this.setState({\n value,\n activeIndex: -1,\n iteration: 0,\n });\n }\n\n componentWillUnmount(): void {\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n this.typingTimer = null;\n }\n super.componentWillUnmount();\n }\n\n itemAccordion(data: Record<string, any>, idx: number): JSX.Element {\n const { value } = this.state;\n const { schema } = this.props;\n\n const schemaItem: ConfigItemPanel = {\n type: 'panel',\n items: schema.items.reduce(\n (accumulator: Record<string, ConfigItemIndexed>, currentValue: ConfigItemIndexed) => {\n accumulator[currentValue.attr] = currentValue;\n return accumulator;\n },\n {},\n ) as Record<string, ConfigItemAny>,\n style: { marginLeft: '-8px', marginTop: '10px', marginBottom: '10px' },\n };\n\n return (\n <ConfigPanel\n index={idx + this.state.iteration}\n arrayIndex={idx}\n changed={this.props.changed}\n globalData={this.props.data}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n common={this.props.common}\n alive={this.props.alive}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n data={data}\n custom\n schema={schemaItem}\n systemConfig={this.props.systemConfig}\n originalData={this.props.originalData}\n customs={this.props.customs}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n forceUpdate={this.props.forceUpdate}\n imagePrefix={this.props.imagePrefix}\n onCommandRunning={this.props.onCommandRunning}\n onChange={(attr, valueChange) => {\n const newObj = JSON.parse(JSON.stringify(value));\n (newObj[idx] as Record<string, any>)[attr as string] = valueChange;\n this.setState({ value: newObj }, () => this.onChangeWrapper(newObj));\n }}\n onError={(error, attr) => this.onError(error, attr)}\n onBackEndCommand={this.props.onBackEndCommand}\n table={this.props.table}\n DeviceManager={this.props.DeviceManager}\n theme={this.props.theme}\n />\n );\n }\n\n onDelete = (index: number) => (): void => {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n newValue.splice(index, 1);\n\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.onChangeWrapper(newValue),\n );\n };\n\n onClone = (index: number) => (): void => {\n const newValue = JSON.parse(JSON.stringify(this.state.value)) as Record<string, any>[];\n const cloned = JSON.parse(JSON.stringify(newValue[index]));\n if (typeof this.props.schema.clone === 'string' && typeof cloned[this.props.schema.clone] === 'string') {\n let i = 1;\n let text = cloned[this.props.schema.clone];\n const pattern = text.match(/(\\d+)$/);\n if (pattern) {\n text = text.replace(pattern[0], '');\n i = parseInt(pattern[0], 10) + 1;\n } else {\n text += '_';\n }\n while (newValue.find(it => it[this.props.schema.clone as string] === text + i.toString())) {\n i++;\n }\n cloned[this.props.schema.clone] = `${cloned[this.props.schema.clone]}_${i}`;\n }\n\n newValue.splice(index, 0, cloned);\n\n this.setState(\n {\n value: newValue,\n activeIndex: -1,\n iteration: this.state.iteration + 10000,\n },\n () => this.onChangeWrapper(newValue),\n );\n };\n\n onChangeWrapper = (newValue: any): void => {\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n }\n\n this.typingTimer = setTimeout(\n value => {\n this.typingTimer = null;\n\n const mayByPromise = this.onChange(this.props.attr, value);\n if (mayByPromise instanceof Promise) {\n void mayByPromise.catch(e => this.onError(e));\n }\n },\n 300,\n newValue,\n );\n };\n\n onAdd = (): void => {\n const { schema } = this.props;\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const newItem: Record<string, any> =\n schema.items &&\n schema.items.reduce((accumulator: Record<string, any>, currentValue: ConfigItemIndexed) => {\n let defaultValue;\n if (currentValue.defaultFunc) {\n if (this.props.custom) {\n defaultValue = currentValue.defaultFunc\n ? this.executeCustom(\n currentValue.defaultFunc,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n newValue.length,\n this.props.data,\n )\n : this.props.schema.default;\n } else {\n defaultValue = currentValue.defaultFunc\n ? this.execute(\n currentValue.defaultFunc,\n this.props.schema.default,\n this.props.data,\n newValue.length,\n this.props.data,\n )\n : this.props.schema.default;\n }\n } else {\n defaultValue = currentValue.default === undefined ? null : currentValue.default;\n }\n\n accumulator[currentValue.attr] = defaultValue;\n return accumulator;\n }, {});\n\n newValue.push(newItem);\n\n this.setState({ value: newValue, activeIndex: newValue.length - 1 }, () => this.onChangeWrapper(newValue));\n };\n\n onMoveUp(idx: number): void {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx - 1, 0, item);\n\n const newIndex = this.state.activeIndex - 1;\n this.setState({ value: newValue, activeIndex: newIndex, iteration: this.state.iteration + 10000 }, () =>\n this.onChangeWrapper(newValue),\n );\n }\n\n onMoveDown(idx: number): void {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx + 1, 0, item);\n\n const newIndex = this.state.activeIndex + 1;\n this.setState({ value: newValue, activeIndex: newIndex, iteration: this.state.iteration + 10000 }, () =>\n this.onChangeWrapper(newValue),\n );\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element | null {\n const { schema } = this.props;\n const { value } = this.state;\n\n if (!value) {\n return null;\n }\n\n return (\n <Paper>\n {schema.label || !schema.noDelete ? (\n <Toolbar variant=\"dense\">\n {schema.label ? (\n <Typography\n variant=\"h6\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {this.getText(schema.label)}\n </Typography>\n ) : null}\n {!schema.noDelete ? (\n <IconButton\n size=\"small\"\n color=\"primary\"\n onClick={this.onAdd}\n >\n <AddIcon />\n </IconButton>\n ) : null}\n </Toolbar>\n ) : null}\n {value.map((idx, i) => (\n <Accordion\n key={`${idx as unknown as string}_${i}`}\n expanded={this.state.activeIndex === i}\n onChange={(_e, expanded) => this.setState({ activeIndex: expanded ? i : -1 })}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={Utils.getStyle(this.props.theme, styles.fullWidth, styles.accordionSummary)}\n >\n <Typography style={styles.accordionTitle}>{idx[schema.titleAttr]}</Typography>\n </AccordionSummary>\n <AccordionDetails\n style={{ ...schema.style, ...(this.props.themeType ? schema.darkStyle : undefined) }}\n >\n {this.itemAccordion(value[i], i)}\n <Toolbar sx={styles.toolbar}>\n {i ? (\n <Tooltip\n title={I18n.t('ra_Move up')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveUp(i)}\n >\n <UpIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <div style={styles.buttonEmpty} />\n )}\n {i < value.length - 1 ? (\n <Tooltip\n title={I18n.t('ra_Move down')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveDown(i)}\n >\n <DownIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <div style={styles.buttonEmpty} />\n )}\n {!schema.noDelete ? (\n <Tooltip\n title={I18n.t('ra_Delete current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onDelete(i)}\n >\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n {schema.clone ? (\n <Tooltip\n title={I18n.t('ra_Clone current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onClone(i)}\n >\n <CopyContentIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n </Toolbar>\n </AccordionDetails>\n </Accordion>\n ))}\n {!schema.noDelete && value.length > 0 ? (\n <Toolbar\n variant=\"dense\"\n sx={styles.rootTool}\n >\n <IconButton\n size=\"small\"\n color=\"primary\"\n onClick={this.onAdd}\n >\n <AddIcon />\n </IconButton>\n </Toolbar>\n ) : null}\n {schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </Paper>\n );\n }\n}\n\nexport default ConfigAccordion;\n","import React, { type JSX } from 'react';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemAlive } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n width: '100%',\n },\n notAlive: {\n color: '#a30000',\n },\n};\n\ninterface ConfigAliveProps extends ConfigGenericProps {\n schema: ConfigItemAlive;\n}\n\ninterface ConfigAliveState extends ConfigGenericState {\n alive?: boolean | null;\n instance?: string;\n}\n\nclass ConfigAlive extends ConfigGeneric<ConfigAliveProps, ConfigAliveState> {\n componentDidMount(): void {\n super.componentDidMount();\n\n const instance = this.getInstance();\n\n void this.props.socket\n .getState(`${instance}.alive`)\n .then(state => this.setState({ alive: !!(state && state.val), instance }));\n }\n\n getInstance(): string {\n let instance = this.props.schema.instance || `${this.props.adapterName}.${this.props.instance}`;\n if (instance.includes('${')) {\n instance = this.getPattern(instance);\n }\n if (instance && !instance.startsWith('system.adapter.')) {\n instance = `system.adapter.${instance}`;\n }\n return instance;\n }\n\n renderItem(): JSX.Element | null {\n if (this.getInstance() !== this.state.instance) {\n setTimeout(() => {\n const instance = this.getInstance();\n if (instance) {\n void this.props.socket\n .getState(`${instance}.alive`)\n .then(state => this.setState({ alive: !!(state && state.val), instance }));\n } else {\n this.setState({ alive: null, instance });\n }\n }, 200);\n }\n\n if (this.state.alive !== false && this.state.alive !== true) {\n return null;\n }\n\n const instance = this.state.instance.replace(/^system.adapter./, '');\n return (\n <div style={{ ...styles.root, ...(!this.state.alive ? styles.notAlive : undefined) }}>\n {this.state.alive\n ? this.props.schema.textAlive !== undefined\n ? this.props.schema.textAlive\n ? I18n.t(this.props.schema.textAlive, instance)\n : ''\n : I18n.t('ra_Instance %s is alive', instance)\n : this.props.schema.textNotAlive !== undefined\n ? this.props.schema.textNotAlive\n ? I18n.t(this.props.schema.textNotAlive, instance)\n : ''\n : I18n.t('ra_Instance %s is not alive', instance)}\n </div>\n );\n }\n}\n\nexport default ConfigAlive;\n","import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemAutocomplete, ConfigItemSelectOption } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericState, type ConfigGenericProps } from './ConfigGeneric';\n\nexport interface ConfigAutocompleteProps extends ConfigGenericProps {\n schema: ConfigItemAutocomplete;\n}\n\nexport interface ConfigAutocompleteState extends ConfigGenericState {\n selectOptions: { value: string; label: string }[];\n}\n\nclass ConfigAutocomplete extends ConfigGeneric<ConfigAutocompleteProps, ConfigAutocompleteState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n const selectOptions = this.props.schema.options.map((item: any) =>\n typeof item === 'string' ? { label: item, value: item } : JSON.parse(JSON.stringify(item)),\n );\n\n // if __different\n if (Array.isArray(value)) {\n selectOptions.unshift({\n label: I18n.t(ConfigGeneric.DIFFERENT_LABEL),\n value: ConfigGeneric.DIFFERENT_VALUE,\n });\n this.setState({ value: ConfigGeneric.DIFFERENT_VALUE, selectOptions });\n } else {\n this.setState({ value, selectOptions });\n }\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element | null {\n if (!this.state.selectOptions) {\n return null;\n }\n\n let item;\n const options: (string | ConfigItemSelectOption)[] = JSON.parse(JSON.stringify(this.state.selectOptions));\n const isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (isIndeterminate) {\n [...this.state.value]\n .filter(val => !options.find(it => (typeof it === 'object' ? it.value === val : it === val)))\n .forEach(it => options.push({ label: it.toString(), value: it }));\n\n item = { label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE };\n options.unshift(item);\n } else {\n item =\n this.state.value !== null &&\n this.state.value !== undefined &&\n options.find(_item =>\n typeof _item === 'object' ? _item.value == this.state.value : _item == this.state.value,\n ); // let \"==\" be and not ===\n\n if (this.state.value !== null && this.state.value !== undefined && !item && this.props.schema.freeSolo) {\n item = { value: this.state.value, label: this.state.value };\n options.push(item);\n }\n }\n\n return (\n <Autocomplete\n fullWidth\n freeSolo={!!this.props.schema.freeSolo}\n value={item}\n options={options}\n // autoComplete\n onInputChange={e => {\n if (!e || !this.props.schema.freeSolo) {\n return;\n }\n\n const val = (e.target as HTMLInputElement).value;\n if (val !== this.state.value) {\n this.setState({ value: val }, () => this.onChange(this.props.attr, val));\n }\n }}\n onChange={(_, value) => {\n const val = typeof value === 'object' ? (value ? value.value : '') : value;\n if (val !== this.state.value) {\n this.setState({ value: val }, () => this.onChange(this.props.attr, val));\n }\n }}\n getOptionLabel={option => (typeof option === 'object' ? (option?.label ?? '') : '')}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n error={!!error}\n // inputProps are important and will be given in params\n // inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n disabled={disabled}\n />\n )}\n />\n );\n }\n}\n\nexport default ConfigAutocomplete;\n","import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemAutocompleteSendTo } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps } from './ConfigGeneric';\nimport type { ConfigAutocompleteState } from './ConfigAutocomplete';\n\ninterface ConfigAutocompleteSendToProps extends ConfigGenericProps {\n schema: ConfigItemAutocompleteSendTo;\n}\n\nclass ConfigAutocompleteSendTo extends ConfigGeneric<ConfigAutocompleteSendToProps, ConfigAutocompleteState> {\n private initialized = false;\n\n private _context: string | undefined;\n\n askInstance(): void {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const selectOptions = this.props.schema.options\n ? this.props.schema.options.map((item: any) =>\n typeof item === 'string' ? { label: item, value: item } : JSON.parse(JSON.stringify(item)),\n )\n : [];\n\n if (this.props.alive) {\n let data = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = this.getPattern(this.props.schema.jsonData);\n try {\n if (typeof dataStr === 'string') {\n data = JSON.parse(dataStr);\n }\n } catch {\n console.error(`Cannot parse json data: ${JSON.stringify(data)}`);\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n\n void this.props.socket\n .sendTo(`${this.props.adapterName}.${this.props.instance}`, this.props.schema.command || 'send', data)\n .then((list: unknown) => {\n if (list && Array.isArray(list)) {\n list.forEach(item =>\n selectOptions.push(\n typeof item === 'string'\n ? { label: item, value: item }\n : JSON.parse(JSON.stringify(item)),\n ),\n );\n }\n\n // if __different\n if (Array.isArray(value)) {\n selectOptions.unshift({\n label: I18n.t(ConfigGeneric.DIFFERENT_LABEL),\n value: ConfigGeneric.DIFFERENT_VALUE,\n });\n this.setState({ value: ConfigGeneric.DIFFERENT_VALUE, selectOptions });\n } else {\n this.setState({ value, selectOptions });\n }\n });\n } else if (Array.isArray(value)) {\n // if __different\n selectOptions.unshift({\n label: I18n.t(ConfigGeneric.DIFFERENT_LABEL),\n value: ConfigGeneric.DIFFERENT_VALUE,\n });\n this.setState({ value: ConfigGeneric.DIFFERENT_VALUE, selectOptions });\n } else {\n this.setState({ value, selectOptions });\n }\n }\n\n getContext(): string {\n const context: Record<string, any> = {};\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (context[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n return JSON.stringify(context);\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element | null {\n if (this.props.alive) {\n const context = this.getContext();\n if (context !== this._context || !this.initialized) {\n this._context = context;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n let item;\n const options = this.state.selectOptions ? JSON.parse(JSON.stringify(this.state.selectOptions)) : [];\n const isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_LABEL;\n\n if (isIndeterminate) {\n [...this.state.value]\n .filter(val => !options.find((it: any) => it.value === val))\n .forEach(it => options.push({ label: it.toString(), value: it }));\n\n item = { label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE };\n options.unshift(item);\n } else {\n item =\n this.state.value !== null &&\n this.state.value !== undefined &&\n options.find((item: any) => item.value == this.state.value); // let \"==\" be and not ===\n\n if (this.state.value !== null && this.state.value !== undefined && !item && this.props.schema.freeSolo) {\n item = { value: this.state.value, label: this.state.value };\n options.push(item);\n }\n item = item || null;\n }\n\n if (!options.length) {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () => this.onChange(this.props.attr, (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n return (\n <Autocomplete\n value={item}\n fullWidth\n freeSolo={!!this.props.schema.freeSolo}\n options={options}\n // autoComplete\n getOptionLabel={option => option?.label ?? ''}\n onInputChange={e => {\n if (!e || !this.props.schema.freeSolo) {\n return;\n }\n\n const val = (e.target as HTMLInputElement).value;\n if (val !== this.state.value) {\n this.setState({ value: val }, () => this.onChange(this.props.attr, val));\n }\n }}\n onChange={(_, value) => {\n const val = typeof value === 'object' ? (value ? value.value : '') : value;\n if (val !== this.state.value) {\n this.setState({ value: val }, () => this.onChange(this.props.attr, val));\n }\n }}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n // inputProps are important and will be given in params\n // inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n disabled={disabled}\n />\n )}\n />\n );\n }\n}\n\nexport default ConfigAutocompleteSendTo;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, FormControl, Button, TextField } from '@mui/material';\n\nimport { Cron as DialogCron, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCRON } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n button: {\n height: 48,\n marginLeft: 4,\n minWidth: 48,\n },\n};\n\ninterface ConfigCRONProps extends ConfigGenericProps {\n schema: ConfigItemCRON;\n}\n\ninterface ConfigCRONState extends ConfigGenericState {\n showDialog?: boolean;\n}\n\nclass ConfigCRON extends ConfigGeneric<ConfigCRONProps, ConfigCRONState> {\n componentDidMount(): void {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr) || '';\n this.setState({ value, showDialog: false });\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const { schema, attr } = this.props;\n const { value, showDialog } = this.state;\n\n return (\n <FormControl\n style={styles.fullWidth}\n variant=\"standard\"\n >\n {schema.label ? <InputLabel shrink>{this.getText(schema.label)}</InputLabel> : null}\n <div style={styles.flex}>\n <TextField\n variant=\"standard\"\n fullWidth\n value={value ?? ''}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(schema.placeholder)}\n label={this.getText(schema.label)}\n helperText={this.renderHelp(schema.help, schema.helpLink, schema.noTranslation)}\n onChange={e => {\n const value_ = e.target.value;\n this.setState({ value: value_ }, () => this.onChange(attr, value_));\n }}\n />\n <Button\n color=\"grey\"\n style={styles.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showDialog: true })}\n >\n ...\n </Button>\n </div>\n {showDialog ? (\n <DialogCron\n title={I18n.t('ra_Define schedule')}\n simple={schema.simple}\n complex={schema.complex}\n cron={value}\n onClose={() => this.setState({ showDialog: false })}\n cancel={I18n.t('ra_Cancel')}\n ok={I18n.t('ra_Ok')}\n theme={this.props.theme}\n onOk={value_ =>\n this.setState({ showDialog: false, value: value_ }, () => this.onChange(attr, value_))\n }\n />\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigCRON;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormControl, Select, FormHelperText } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemCertificateSelect } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigCertificateSelectProps extends ConfigGenericProps {\n schema: ConfigItemCertificateSelect;\n}\n\ninterface ConfigCertificateSelectState extends ConfigGenericState {\n selectOptions?: { label: string; value: string }[];\n}\n\nclass ConfigCertificateSelect extends ConfigGeneric<ConfigCertificateSelectProps, ConfigCertificateSelectState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n // Important: getCertificates is only available in AdminConnection\n const certificates = await this.props.socket.getCertificates();\n\n const selectOptions: { label: string; value: string }[] = certificates\n .filter(el => {\n const name = this.props.attr.toLowerCase();\n\n if (name.includes(el.type)) {\n return true;\n }\n if (el.type === 'public' && name.includes('cert')) {\n return true;\n }\n if (el.type === 'private' && (name.includes('priv') || name.includes('key'))) {\n return true;\n }\n return !!(el.type === 'chained' && (name.includes('chain') || name.includes('ca')));\n })\n .map(el => ({ label: el.name, value: el.name }));\n\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n\n this.setState({ value, selectOptions });\n }\n\n renderItem(error: unknown, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions?.find(_item => _item.value === this.state.value);\n\n return (\n <FormControl\n style={{ width: '100%' }}\n variant=\"standard\"\n >\n {this.props.schema.label ? (\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={this.state.value}\n renderValue={() => this.getText(item?.label, this.props.schema.noTranslation !== false)}\n onChange={e =>\n this.setState({ value: e.target.value }, () => this.onChange(this.props.attr, this.state.value))\n }\n >\n {this.state.selectOptions?.map(item_ => (\n <MenuItem\n key={item_.value}\n value={item_.value}\n style={item_.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item_.label, this.props.schema.noTranslation !== false)}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigCertificateSelect;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormControl, Select } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemCertificates } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n leWidth: {\n width: 620,\n marginBottom: 10,\n },\n certWidth: {\n width: 200,\n marginRight: 10,\n },\n};\n\ninterface ConfigCertificatesProps extends ConfigGenericProps {\n schema: ConfigItemCertificates;\n}\n\ninterface ConfigCertificatesState extends ConfigGenericState {\n certsPublicOptions?: { label: string; value: string }[];\n certsChainOptions?: { label: string; value: string }[];\n certsPrivateOptions?: { label: string; value: string }[];\n collectionsOptions?: string[];\n}\n\nclass ConfigCertificates extends ConfigGeneric<ConfigCertificatesProps, ConfigCertificatesState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n // Important: getCertificates is only available in AdminConnection\n const certificates = await this.props.socket.getCertificates();\n const certsPublicOptions: { label: string; value: string }[] = [];\n const certsPrivateOptions: { label: string; value: string }[] = [];\n const certsChainOptions: { label: string; value: string }[] = [];\n\n let collectionsOptions: string[] | null = [];\n const collectionsOptionsObj = await this.props.socket.getObject('system.certificates');\n if (collectionsOptionsObj?.native?.collections) {\n collectionsOptions = Object.keys(collectionsOptionsObj.native.collections);\n } else {\n collectionsOptions = null;\n }\n\n certificates.forEach(el => {\n if (el.type === 'public') {\n certsPublicOptions.push({ label: el.name, value: el.name });\n } else if (el.type === 'private') {\n certsPrivateOptions.push({ label: el.name, value: el.name });\n } else if (el.type === 'chained') {\n certsChainOptions.push({ label: el.name, value: el.name });\n } else {\n certsPublicOptions.push({ label: el.name, value: el.name });\n certsPrivateOptions.push({ label: el.name, value: el.name });\n certsChainOptions.push({ label: el.name, value: el.name });\n }\n });\n\n certsPublicOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n certsPrivateOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n certsChainOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n\n this.setState({\n certsPublicOptions,\n certsChainOptions,\n certsPrivateOptions,\n collectionsOptions,\n });\n }\n\n renderItem(error: unknown, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.certsPublicOptions || !this.state.certsPrivateOptions || !this.state.certsChainOptions) {\n return null;\n }\n const leCollection = (\n ConfigGeneric.getValue(this.props.data, this.props.schema.leCollectionName || 'leCollection') || 'false'\n ).toString();\n const certPublic = ConfigGeneric.getValue(this.props.data, this.props.schema.certPublicName || 'certPublic');\n const certPrivate = ConfigGeneric.getValue(this.props.data, this.props.schema.certPrivateName || 'certPrivate');\n const certChained = ConfigGeneric.getValue(this.props.data, this.props.schema.certChainedName || 'certChained');\n\n const itemCertPublic = this.state.certsPublicOptions?.find(item => item.value === certPublic);\n const itemCertPrivate = this.state.certsPrivateOptions?.find(item => item.value === certPrivate);\n const itemCertChained = this.state.certsChainOptions?.find(item => item.value === certChained);\n\n return (\n <div style={styles.fullWidth}>\n {this.state.collectionsOptions ? (\n <FormControl\n style={styles.leWidth}\n variant=\"standard\"\n >\n <InputLabel shrink>Let&apos;s encrypt</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={leCollection}\n onChange={e =>\n this.onChange(\n this.props.schema.leCollectionName || 'leCollection',\n e.target.value === 'false'\n ? false\n : e.target.value === 'true'\n ? true\n : e.target.value,\n )\n }\n >\n <MenuItem\n key=\"_false\"\n value=\"false\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t(\"ra_Do not use let's encrypt\")}\n </MenuItem>\n <MenuItem\n key=\"_true\"\n value=\"true\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t(\"ra_Use all available let's encrypt certificates\")}\n </MenuItem>\n {this.state.collectionsOptions?.map(item => (\n <MenuItem\n key={item}\n value={item}\n >\n {item}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n ) : null}\n {this.state.collectionsOptions ? <br /> : null}\n {this.state.collectionsOptions && leCollection !== 'false' ? (\n <div>{I18n.t('ra_Fallback custom certificates')}</div>\n ) : null}\n <FormControl\n style={styles.certWidth}\n variant=\"standard\"\n >\n <InputLabel shrink>{I18n.t('ra_Public certificate')}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={certPublic || ''}\n renderValue={() => this.getText(itemCertPublic?.label)}\n onChange={e => this.onChange(this.props.schema.certPublicName || 'certPublic', e.target.value)}\n >\n {this.state.certsPublicOptions?.map((item, i) => (\n <MenuItem\n key={`${item.value}_${i}`}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item.label)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n style={styles.certWidth}\n variant=\"standard\"\n >\n <InputLabel shrink>{I18n.t('ra_Private certificate')}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={certPrivate || ''}\n renderValue={() => this.getText(itemCertPrivate?.label)}\n onChange={e =>\n this.onChange(this.props.schema.certPrivateName || 'certPrivate', e.target.value)\n }\n >\n {this.state.certsPrivateOptions?.map((item, i) => (\n <MenuItem\n key={`${item.value}_${i}`}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item.label)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n style={styles.certWidth}\n variant=\"standard\"\n >\n <InputLabel shrink>{I18n.t('ra_Chained certificate')}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={certChained || ''}\n renderValue={() => this.getText(itemCertChained?.label)}\n onChange={e =>\n this.onChange(this.props.schema.certChainedName || 'certChained', e.target.value)\n }\n >\n {this.state.certsChainOptions?.map((item, i) => (\n <MenuItem\n key={`${item.value}_${i}`}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item.label)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </div>\n );\n }\n}\n\nexport default ConfigCertificates;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormControl, Select, FormHelperText } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemCertCollection } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigCertCollectionProps extends ConfigGenericProps {\n schema: ConfigItemCertCollection;\n}\n\ninterface ConfigCertCollectionState extends ConfigGenericState {\n collectionsOptions?: string[];\n}\n\ninterface CertCollection {\n /** Source of the certificate */\n from: string;\n key: string;\n cert: string;\n chain: string[];\n domains: string[];\n staging?: boolean;\n tsExpires?: number;\n}\n\nclass ConfigCertCollection extends ConfigGeneric<ConfigCertCollectionProps, ConfigCertCollectionState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n\n let collectionsOptions: string[];\n const collectionsOptionsObj = await this.props.socket.getObject('system.certificates');\n if (collectionsOptionsObj?.native?.collections) {\n collectionsOptions = Object.keys(\n collectionsOptionsObj.native.collections as Record<string, CertCollection>,\n );\n } else {\n collectionsOptions = [];\n }\n this.setState({ collectionsOptions });\n }\n\n renderItem(error: unknown, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.collectionsOptions) {\n return null;\n }\n const leCollection = (\n ConfigGeneric.getValue(this.props.data, this.props.schema.leCollectionName || 'leCollection') || 'false'\n ).toString();\n\n return (\n <FormControl\n style={{ width: '100%' }}\n variant=\"standard\"\n >\n {this.props.schema.label ? (\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={leCollection}\n onChange={e =>\n this.onChange(\n this.props.schema.leCollectionName || 'leCollection',\n e.target.value === 'false' ? false : e.target.value === 'true' ? true : e.target.value,\n )\n }\n >\n <MenuItem\n key=\"_false\"\n value=\"false\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t(\"ra_Do not use let's encrypt\")}\n </MenuItem>\n <MenuItem\n key=\"_true\"\n value=\"true\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t(\"ra_Use all available let's encrypt certificates\")}\n </MenuItem>\n {this.state.collectionsOptions?.map(item => (\n <MenuItem\n key={item}\n value={item}\n >\n {item}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigCertCollection;\n","import React, { type JSX } from 'react';\n\nimport {\n Button,\n CircularProgress,\n Dialog,\n DialogContent,\n DialogActions,\n DialogTitle,\n Table,\n TableHead,\n TableCell,\n TableRow,\n TableBody,\n DialogContentText,\n TableContainer,\n Box,\n} from '@mui/material';\n\nimport { Check as IconCheck, Send as IconSend } from '@mui/icons-material';\n\nimport { Confirm as ConfirmDialog, I18n, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCheckLicense } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4,\n },\n licLabel: {\n fontWeight: 'bold',\n minWidth: 100,\n marginRight: 10,\n textTransform: 'capitalize',\n display: 'inline-block',\n },\n licValue: {\n fontWeight: 'normal',\n },\n errorTitle: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n }),\n okTitle: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#6fd56f' : '#007c00',\n }),\n errorText: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n mb: '30px',\n }),\n};\n\nexport interface License {\n id: string;\n product: string;\n time: number;\n uuid: string;\n validTill: string;\n version: string;\n usedBy: string;\n invoice: string;\n json: string;\n}\n\ninterface LicenseResult {\n id: string;\n validName: boolean;\n validUuid: boolean;\n validVersion: boolean;\n validTill: boolean;\n license: License;\n used?: boolean;\n}\n\ninterface ConfigCheckLicenseProps extends ConfigGenericProps {\n schema: ConfigItemCheckLicense;\n fullWidth?: boolean;\n}\n\ninterface ConfigCheckLicenseState extends ConfigGenericState {\n showLicenseData: null | Record<string, any>;\n _error: string;\n result: null | boolean;\n running: boolean;\n foundSuitableLicense: boolean;\n licenseOfflineCheck: boolean;\n showLinkToProfile: boolean;\n allLicenses: null | LicenseResult[];\n askForUpdate: boolean;\n}\n\nclass ConfigCheckLicense extends ConfigGeneric<ConfigCheckLicenseProps, ConfigCheckLicenseState> {\n componentDidMount(): void {\n super.componentDidMount();\n this.setState({\n _error: '',\n running: false,\n showLicenseData: null,\n foundSuitableLicense: false,\n licenseOfflineCheck: false,\n result: null,\n allLicenses: null,\n askForUpdate: false,\n showLinkToProfile: false,\n });\n }\n\n renderErrorDialog(): JSX.Element | null {\n if (this.state._error && !this.state.showLicenseData) {\n let content: string | JSX.Element[] = this.state._error;\n if (this.state.allLicenses) {\n content = [<div key=\"error\">{content}</div>];\n content.push(\n <Button\n key=\"button\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net/www/account/licenses', '_blank')}\n >\n {I18n.t('iobroker.net')}\n </Button>,\n );\n if (!this.state.allLicenses.length) {\n content.push(<div key=\"text1\">{I18n.t('ra_No one license found in license manager')}</div>);\n content.push(<div key=\"text2\">{I18n.t('ra_Please create license')}</div>);\n } else {\n // license.id,\n // validName,\n // validUuid,\n // validTill,\n // validVersion,\n // license,\n content.push(\n <TableContainer key=\"table\">\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{I18n.t('ra_Product')}</TableCell>\n <TableCell>{I18n.t('ra_Version')}</TableCell>\n <TableCell>UUID</TableCell>\n <TableCell>{I18n.t('ra_ValidTill')}</TableCell>\n <TableCell>{I18n.t('ra_Commercial')}</TableCell>\n <TableCell>ID</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {this.state.allLicenses.map(license => (\n <TableRow key={license.id}>\n <TableCell sx={license.validName ? null : styles.errorText}>\n {license.license.product}\n </TableCell>\n <TableCell sx={license.validVersion ? null : styles.errorText}>\n {license.license.version}\n </TableCell>\n <TableCell sx={license.validUuid ? null : styles.errorText}>\n {license.license.uuid || '--'}\n </TableCell>\n <TableCell sx={license.validTill ? null : styles.errorText}>\n {license.license.validTill &&\n license.license.validTill !== '0000-00-00 00:00:00'\n ? new Date(license.license.validTill).toLocaleDateString()\n : '--'}\n </TableCell>\n <TableCell>\n {license.license.invoice !== 'free'\n ? license.license.invoice === 'MANUALLY_CREATED'\n ? '✓'\n : license.license.invoice\n : '-'}\n </TableCell>\n <TableCell>{license.id}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>,\n );\n }\n }\n\n return (\n <Dialog\n open={!0}\n maxWidth=\"xl\"\n fullWidth={this.props.fullWidth !== undefined ? this.props.fullWidth : true}\n onClick={() => this.setState({ _error: '', allLicenses: null })}\n >\n <DialogTitle>{I18n.t('ra_Error')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{content}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ _error: '', allLicenses: null })}\n color=\"primary\"\n autoFocus\n startIcon={<IconCheck />}\n >\n {I18n.t('ra_Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n }\n\n renderMessageDialog(): JSX.Element | null {\n if (this.state.showLicenseData) {\n const pre = [];\n const data = this.state.showLicenseData;\n Object.keys(data).forEach(key => {\n if (data[key] === null || data[key] === undefined) {\n return;\n }\n if (typeof data[key] === 'object') {\n const obj = data[key];\n Object.keys(obj).forEach(key1 => {\n if (obj[key1] !== null && obj[key1] !== undefined) {\n if (typeof obj[key1] === 'object') {\n pre.push(\n <div key={key1}>\n <div style={styles.licLabel}>{key1}:</div>\n {JSON.stringify(obj[key1], null, 2)}\n </div>,\n );\n } else {\n pre.push(\n <div key={key1}>\n <div style={styles.licLabel}>\n {key} -{key1}:\n </div>\n {obj[key1].toString()}\n </div>,\n );\n }\n }\n });\n } else {\n pre.push(\n <div key={key}>\n <div style={styles.licLabel}>{key.replace(/_/g, ' ')}:</div>\n {data[key].toString()}\n </div>,\n );\n }\n });\n pre.push(\n <div key=\"checked\">\n <div style={styles.licLabel}>{I18n.t('ra_Checked')}:</div>\n {this.state.licenseOfflineCheck ? I18n.t('ra_locally') : I18n.t('ra_via internet')}\n </div>,\n );\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showLicenseData: null })}\n >\n <DialogTitle>\n <Box\n component=\"span\"\n sx={this.state.result ? styles.okTitle : styles.errorTitle}\n >\n {I18n.t('ra_License %s', this.state.result ? 'OK' : 'INVALID')}\n </Box>\n </DialogTitle>\n <DialogContent>\n {this.state.showLinkToProfile ? (\n <Button\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net/www/account/licenses', '_blank')}\n >\n https://iobroker.net\n </Button>\n ) : null}\n {this.state._error ? (\n <Box\n component=\"div\"\n sx={styles.errorText}\n >\n {this.state._error}\n </Box>\n ) : null}\n {pre}\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => this.setState({ showLicenseData: null, _error: '' })}\n color=\"primary\"\n variant=\"contained\"\n >\n {I18n.t('ra_Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n static parseJwt(token: string): {\n exp: number;\n iat: number;\n name: string;\n email: string;\n uuid: string;\n version: string;\n invoice: string;\n /** @deprecated use validTill */\n valid_till: string;\n validTill: string;\n [key: string]: string | number;\n } | null {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map(c => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`)\n .join(''),\n );\n try {\n return JSON.parse(jsonPayload);\n } catch {\n return null;\n }\n }\n\n static isVersionValid(version: string, rule: string, invoice: string, adapterName: string): boolean {\n if (!rule || !version) {\n return true;\n }\n let result = true;\n const [major] = version.split('.');\n if (rule.startsWith('>=')) {\n result = parseInt(major, 10) >= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('<=')) {\n result = parseInt(major, 10) <= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('>')) {\n result = parseInt(major, 10) > parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('<')) {\n result = parseInt(major, 10) < parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('=')) {\n result = parseInt(major, 10) === parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('==')) {\n result = parseInt(major, 10) === parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('===')) {\n result = parseInt(major, 10) === parseInt(rule.substring(3, 10));\n }\n\n if (!result && invoice && adapterName) {\n // all commercial licenses are valid for all versions\n if (invoice !== 'free') {\n return true;\n }\n }\n\n return true;\n }\n\n async findInLicenseManager(adapterName: string): Promise<LicenseResult[]> {\n // read if the license manager is supported\n const licenses = await this.props.socket.getObject('system.licenses');\n const errors: LicenseResult[] = [];\n if (licenses?.native?.licenses?.length) {\n // enable license manager\n let useLicense: License | null = null;\n const now = Date.now();\n\n let uuid: string;\n if (this.props.schema.uuid) {\n const uuidObj = await this.props.socket.getObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version: string;\n if (this.props.schema.version) {\n const aObj = await this.props.socket.getObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n // find license for vis\n licenses.native.licenses.forEach((license: License) => {\n const validTill =\n !license.validTill ||\n license.validTill === '0000-00-00 00:00:00' ||\n new Date(license.validTill).getTime() > now;\n const parts = (license.product || '').split('.');\n const validName = parts[1] === adapterName || (adapterName === 'vis-2' && parts[1] === 'vis');\n const validUuid = !uuid || !license.uuid || license.uuid === uuid;\n const validVersion = ConfigCheckLicense.isVersionValid(\n version,\n license.version,\n license.invoice,\n adapterName,\n );\n // commercial license has priority over free license\n if (\n (!useLicense || license.invoice !== 'free') &&\n validTill &&\n validName &&\n validUuid &&\n validVersion\n ) {\n useLicense = license;\n }\n errors.push({\n id: license.id,\n validName,\n validUuid,\n validVersion,\n validTill,\n license,\n });\n });\n\n if (useLicense) {\n errors.find(e => e.id === useLicense.id).used = true;\n }\n }\n\n return errors;\n }\n\n async checkLicense(license: string, adapterName: string): Promise<void> {\n let uuid;\n if (this.props.schema.uuid) {\n const uuidObj = await this.props.socket.getObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version;\n if (this.props.schema.version) {\n const aObj = await this.props.socket.getObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n const controller = new AbortController();\n let timeout = setTimeout(() => {\n timeout = null;\n controller.abort();\n }, 5000);\n\n try {\n const response = await window.fetch('https://iobroker.net/api/v1/public/cert/', {\n method: 'POST',\n body: JSON.stringify({ json: license, uuid }),\n headers: {\n 'Content-Type': 'text/plain',\n },\n signal: controller.signal,\n });\n if (timeout) {\n clearTimeout(timeout);\n }\n const dataStr = await response.text();\n let data: {\n error?: string;\n validTill?: string;\n /** @deprecated use validTill */\n valid_till?: string;\n name?: string;\n version?: string;\n uuid?: string;\n invoice?: string;\n };\n try {\n data = JSON.parse(dataStr);\n } catch {\n // ignore\n }\n\n if (data?.error) {\n try {\n const data_ = ConfigCheckLicense.parseJwt(license);\n const _error = I18n.t(`ra_${data_.error || data.error || 'Unknown error'}`).replace(/^ra_/, '');\n\n return this.setState({\n _error,\n licenseOfflineCheck: false,\n showLicenseData: data_,\n result: false,\n running: false,\n });\n } catch {\n console.log('Cannot parse license');\n return this.setState({ _error: data.error, result: false, running: false });\n }\n } else {\n let showLicenseData = null;\n try {\n showLicenseData = ConfigCheckLicense.parseJwt(license);\n } catch {\n // ignore\n }\n if (data) {\n const validTill = data.validTill || data.valid_till;\n if (\n validTill &&\n validTill !== '0000-00-00 00:00:00' &&\n new Date(validTill).getTime() < Date.now()\n ) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(validTill).toLocaleString()),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n const parts = (data.name || '').split('.');\n if (parts[1] === adapterName || (parts[1] === 'vis' && adapterName === 'vis-2')) {\n // check UUID\n if (uuid && !data.uuid && adapterName === 'vis-2') {\n return this.setState({\n _error: I18n.t('ra_License must be converted', data.uuid),\n showLinkToProfile: true,\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t(\n 'ra_Serial number (UUID) \"%s\" in license is for other device.',\n data.uuid,\n ),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t(\n 'ra_License is for version %s, but required version is %s',\n data.version,\n this.props.schema.version,\n ),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n licenseOfflineCheck: false,\n showLicenseData,\n result: true,\n running: false,\n });\n }\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n throw new Error('ra_Invalid answer from server');\n }\n } catch (error) {\n if (error?.response?.status === 404) {\n return this.setState({ _error: I18n.t('ra_License does not exist'), result: false, running: false });\n }\n // check offline\n try {\n const data = ConfigCheckLicense.parseJwt(license);\n const parts = (data.name || '').split('.');\n\n if (\n data.valid_till &&\n data.valid_till !== '0000-00-00 00:00:00' &&\n new Date(data.valid_till).getTime() < Date.now()\n ) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(data.valid_till).toLocaleString()),\n showLicenseData: data,\n licenseOfflineCheck: true,\n running: false,\n result: false,\n });\n }\n if (parts[1] === adapterName) {\n // check UUID\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t('ra_Serial number (UUID) \"%s\" in license is for other device.', data.uuid),\n showLicenseData: data,\n licenseOfflineCheck: true,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t(\n 'ra_License is for version %s, but required version is %s',\n data.version,\n this.props.schema.version,\n ),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n running: false,\n result: true,\n licenseOfflineCheck: true,\n showLicenseData: data,\n });\n }\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n } catch {\n return this.setState({\n _error: I18n.t('ra_Cannot decode license'),\n result: false,\n licenseOfflineCheck: true,\n running: false,\n });\n }\n }\n }\n\n renderAskForUpdate(): JSX.Element | null {\n if (!this.state.askForUpdate) {\n return null;\n }\n return (\n <ConfirmDialog\n text={I18n.t(\n 'ra_License not found in license manager. Do you want to read licenses from iobroker.net?',\n )}\n ok={I18n.t('ra_Yes')}\n onClose={async isYes => {\n if (isYes) {\n this.setState({ askForUpdate: false });\n try {\n // updateLicense is available only in AdminConnection\n await this.props.socket.updateLicenses(null, null);\n } catch (e) {\n window.alert(I18n.t('ra_Cannot read licenses: %s', e));\n return;\n }\n await this._onClick(true);\n } else {\n this.setState({ askForUpdate: false, running: false });\n }\n }}\n />\n );\n }\n\n async _onClick(secondRun?: boolean): Promise<void> {\n const adapterName = this.props.adapterName === 'vis-2' ? 'vis' : this.props.adapterName;\n this.setState({ running: true });\n let license;\n let licenses;\n if (this.props.data.useLicenseManager) {\n licenses = await this.findInLicenseManager(adapterName);\n license = licenses.find(li => li.used);\n if (license) {\n license = license.license.json;\n }\n if (!license && !secondRun) {\n // no suitable license found in the license manager\n // should we read all licenses again?\n this.setState({ askForUpdate: true });\n return;\n }\n } else {\n license = this.props.data.license;\n }\n if (license) {\n await this.checkLicense(license, adapterName);\n } else if (this.props.data.useLicenseManager) {\n this.setState({\n _error: I18n.t('ra_Suitable license not found in license manager'),\n result: false,\n running: false,\n allLicenses: licenses,\n });\n } else {\n // this case could not happen\n this.setState({\n _error: I18n.t('ra_Please enter the license'),\n result: false,\n running: false,\n });\n }\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n return (\n <div style={styles.fullWidth}>\n <Button\n variant={this.props.schema.variant || 'outlined'}\n color={this.props.schema.color || 'primary'}\n style={styles.fullWidth}\n disabled={(!this.props.data.license && !this.props.data.useLicenseManager) || this.state.running}\n startIcon={<IconSend />}\n onClick={() => this._onClick()}\n >\n {this.state.running ? (\n <CircularProgress\n size={20}\n style={{ marginRight: 8 }}\n />\n ) : null}\n {this.getText(this.props.schema.label || 'ra_Check license', this.props.schema.noTranslation)}\n </Button>\n {this.renderMessageDialog()}\n {this.renderErrorDialog()}\n {this.renderAskForUpdate()}\n </div>\n );\n }\n}\n\nexport default ConfigCheckLicense;\n","import React, { type JSX } from 'react';\n\nimport { FormControlLabel, Checkbox, FormHelperText, FormControl } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCheckbox } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigCheckboxProps extends ConfigGenericProps {\n schema: ConfigItemCheckbox;\n}\n\nclass ConfigCheckbox extends ConfigGeneric<ConfigCheckboxProps, ConfigGenericState> {\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const isIndeterminate = Array.isArray(value);\n\n return (\n <FormControl\n style={{ width: '100%' }}\n variant=\"standard\"\n >\n <FormControlLabel\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n\n if (!disabled) {\n const mayByPromise = this.onChange(this.props.attr, !value);\n if (mayByPromise instanceof Promise) {\n void mayByPromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }\n }}\n control={\n <Checkbox\n indeterminate={isIndeterminate}\n checked={!!value}\n onChange={e => {\n let mayBePromise: void | Promise<void>;\n if (isIndeterminate) {\n mayBePromise = this.onChange(this.props.attr, true);\n } else {\n mayBePromise = this.onChange(this.props.attr, e.target.checked);\n }\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n disabled={disabled || this.props.schema.readOnly}\n />\n }\n label={this.getText(this.props.schema.label)}\n />\n <FormHelperText style={{ color: 'red' }}>\n {error\n ? this.props.schema.validatorErrorText\n ? I18n.t(this.props.schema.validatorErrorText)\n : I18n.t('ra_Error')\n : null}\n </FormHelperText>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigCheckbox;\n","/**\n * Notice: Some code was adapted from Material-UI's text field.\n * Copyright (c) 2014 Call-Em-All (https://github.com/callemall/material-ui)\n */\nimport React, { type RefObject, type JSX } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Input, OutlinedInput, InputLabel, Chip, FormControl, FormHelperText, Box } from '@mui/material';\nimport FilledInput from '@mui/material/FilledInput/FilledInput';\nimport blue from '@mui/material/colors/blue';\n\nimport { type IobTheme, type ThemeType } from '@iobroker/adapter-react-v5';\nimport Utils from '../Utils';\n\nconst variantComponent = {\n standard: Input,\n filled: FilledInput,\n outlined: OutlinedInput,\n};\n\nconst styles: Record<string, any> = (theme: IobTheme): Record<string, any> => {\n const light = theme.palette.mode === 'light';\n const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n\n return {\n root: {},\n inputRoot: {\n display: 'inline-flex',\n flexWrap: 'wrap',\n flex: 1,\n marginTop: 0,\n minWidth: 70,\n '&.mui-variant-outlined,&.mui-variant-filled': {\n boxSizing: 'border-box',\n },\n '&.mui-variant-outlined': {\n paddingTop: '14px',\n },\n '&.mui-variant-filled': {\n paddingTop: '28px',\n },\n },\n input: {\n display: 'inline-block',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n appearance: 'none', // Remove border in Safari, doesn't seem to break anything in other browsers\n WebkitTapHighlightColor: 'rgba(0,0,0,0)', // Remove mobile color flashing (deprecated style).\n float: 'left',\n flex: 1,\n },\n chipContainer: {\n display: 'flex',\n flexFlow: 'row wrap',\n alignItems: 'center',\n cursor: 'text',\n marginBottom: '-2px',\n minHeight: 40,\n },\n outlined: {\n '& input': {\n height: 16,\n paddingTop: '4px',\n paddingBottom: '12px',\n marginTop: '4px',\n marginBottom: '4px',\n },\n },\n standard: {\n marginTop: '18px',\n },\n filled: {\n '& input': {\n height: 22,\n marginBottom: '4px',\n marginTop: '4px',\n paddingTop: 0,\n },\n '$marginDense & input': {\n height: 26,\n },\n },\n labeled: {},\n label: {\n top: 4,\n '&$outlined&:not($labelShrink)': {\n top: 2,\n '$marginDense &': {\n top: 5,\n },\n },\n '&$filled&:not($labelShrink)': {\n top: 15,\n '$marginDense &': {\n top: 20,\n },\n },\n },\n labelShrink: {\n top: 0,\n },\n helperText: {\n marginBottom: -20,\n },\n focused: {},\n disabled: {},\n underline: {\n '&:after': {\n borderBottom: `2px solid ${theme.palette.primary[light ? 'dark' : 'light']}`,\n left: 0,\n bottom: 0,\n // Doing the other way around a crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\"',\n position: 'absolute',\n right: 0,\n transform: 'scaleX(0)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&$focused:after': {\n transform: 'scaleX(1)',\n },\n '&$error:after': {\n borderBottomColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n '&:before': {\n borderBottom: `1px solid ${bottomLineColor}`,\n left: 0,\n bottom: 0,\n // Doing the other way around a crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\\\\00a0\"',\n position: 'absolute',\n right: 0,\n transition: theme.transitions.create('border-bottom-color', {\n duration: theme.transitions.duration.shorter,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&:hover:not($disabled):not($focused):not($error):before': {\n borderBottom: `2px solid ${theme.palette.text.primary}`,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n borderBottom: `1px solid ${bottomLineColor}`,\n },\n },\n '&$disabled:before': {\n borderBottomStyle: 'dotted',\n },\n },\n error: {\n '&:after': {\n backgroundColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n },\n chip: {\n margin: '0 8px 8px 0',\n float: 'left',\n },\n marginDense: {},\n };\n};\n\nconst keyCodes = {\n BACKSPACE: 8,\n DELETE: 46,\n LEFT_ARROW: 37,\n RIGHT_ARROW: 39,\n};\n\ninterface ChipRendererProps {\n value: string;\n isFocused: boolean;\n isDisabled: boolean;\n isReadOnly: boolean;\n handleClick: () => void;\n handleDelete: () => void;\n style: React.CSSProperties;\n}\n\nexport const defaultChipRenderer = (\n { value, isFocused, isDisabled, isReadOnly, handleClick, handleDelete, style }: ChipRendererProps,\n key: string,\n): JSX.Element => (\n <Chip\n key={key}\n style={{\n ...style,\n pointerEvents: isDisabled || isReadOnly ? 'none' : undefined,\n backgroundColor: isFocused ? blue[300] : undefined,\n }}\n onClick={handleClick}\n onDelete={handleDelete}\n label={value}\n />\n);\n\ninterface ChipInputProps {\n /** Allows duplicate chips if set to true. */\n allowDuplicates?: boolean;\n /** If true, the placeholder will always be visible. */\n alwaysShowPlaceholder?: boolean;\n /** Behavior when the chip input is blurred: `'clear'` clears the input, `'add'` creates a chip and `'ignore'` keeps the input. */\n blurBehavior?: 'clear' | 'add' | 'add-or-clear' | 'ignore';\n /** A function of the type `({ value, text, chip, isFocused, isDisabled, isReadOnly, handleClick, handleDelete, className }, key) => node` that returns a chip based on the given properties. This can be used to customize chip styles. Each item in the `dataSource` array will be passed to `chipRenderer` as arguments `chip`, `value` and `text`. If `dataSource` is an array of objects and `dataSourceConfig` is present, then `value` and `text` will instead correspond to the object values defined in `dataSourceConfig`. If `dataSourceConfig` is not set and `dataSource` is an array of objects, then a custom `chipRenderer` must be set. `chip` is always the raw value from `dataSource`, either an object or a string. */\n chipRenderer?: (props: ChipRendererProps) => JSX.Element;\n /** Whether the input value should be cleared if the `value` prop is changed. */\n clearInputValueOnChange?: boolean;\n /** Data source for auto complete. This should be an array of strings or objects. */\n dataSource?: string[];\n /** The chips to display by default (for uncontrolled mode). */\n defaultValue?: string[];\n /** Whether to use `setTimeout` to delay adding chips in case other input events like `onSelection` need to fire first */\n delayBeforeAdd?: boolean;\n /** Disables the chip input if set to true. */\n disabled?: boolean;\n /** Disable the input underline. Only valid for 'standard' variant */\n disableUnderline?: boolean;\n /** Props to pass through to the `FormHelperText` component. */\n FormHelperTextProps?: Record<string, any>;\n /** If true, the chip input will fill the available width. */\n fullWidth?: boolean;\n /** If true, the input field will always be below the chips and fill the available space. By default, it will try to be beside the chips. */\n fullWidthInput?: boolean;\n /** Helper text that is displayed below the input. */\n helperText?: string | JSX.Element;\n /** Props to pass through to the `InputLabel`. */\n InputLabelProps?: Record<string, any>;\n /** Props to pass through to the `Input`. */\n InputProps?: Record<string, any>;\n /** Use this property to pass a ref callback to the native input component. */\n inputRef?: (el: HTMLInputElement) => void;\n /** The input value (enables controlled mode for the text input if set). */\n inputValue?: string;\n /* The content of the floating label. */\n label?: string | JSX.Element;\n /** The key codes (`KeyboardEvent.keyCode`) used to determine when to create a new chip. */\n newChipKeyCodes?: number[];\n /** The keys (`KeyboardEvent.key`) used to determine when to create a new chip. */\n newChipKeys?: string[];\n /** Callback function that is called when a new chip was added (in controlled mode). */\n onAdd?: (chip: string) => void;\n /** Callback function that is called with the chip to be added and should return true to add the chip or false to prevent the chip from being added without clearing the text input. */\n onBeforeAdd?: (chip: string) => boolean;\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n onKeyUp?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n // onKeyPress?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n /** Callback function that is called when the chips change (in uncontrolled mode). */\n onChange?: (chips: string[]) => void;\n /** Callback function that is called when a new chip was removed (in controlled mode). */\n onDelete: (chip: string, i: number) => void;\n /** Callback function that is called when the input changes. */\n onUpdateInput?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** A placeholder that is displayed if the input has no values. */\n placeholder?: string;\n /** Makes the chip input read-only if set to true. */\n readOnly?: boolean;\n /** The chips to display (enables controlled mode if set). */\n value?: string[];\n /** The variant of the Input component */\n variant?: 'outlined' | 'standard' | 'filled';\n className?: string;\n error?: boolean;\n id?: string;\n required?: boolean;\n rootRef?: RefObject<HTMLDivElement>;\n margin?: 'dense' | 'normal' | 'none';\n theme: IobTheme;\n}\n\ninterface ChipInputState {\n chips: string[];\n focusedChip: number | null;\n inputValue: string;\n isFocused: boolean;\n chipsUpdated: boolean;\n prevPropsValue: string[];\n variant: 'outlined' | 'standard' | 'filled';\n}\n\nclass ChipInput extends React.Component<ChipInputProps, ChipInputState> {\n private readonly labelRef: React.RefObject<HTMLLabelElement>;\n\n private labelNode: HTMLLabelElement | null = null;\n\n private readonly input: React.RefObject<HTMLInputElement>;\n\n private readonly newChipKeyCodes: number[];\n\n private readonly newChipKeys: string[];\n\n private actualInput: HTMLInputElement | null = null;\n\n private inputBlurTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private _keyPressed: boolean;\n\n private _preventChipCreation: boolean;\n\n private styles: Record<string, any> = {};\n\n private styleTheme: ThemeType | null = null;\n\n constructor(props: ChipInputProps) {\n super(props);\n this.state = {\n chips: props.defaultValue || [],\n focusedChip: null,\n inputValue: '',\n isFocused: false,\n chipsUpdated: false,\n prevPropsValue: [],\n variant: this.props.variant || 'standard',\n };\n this.newChipKeyCodes = props.newChipKeyCodes || [13];\n this.newChipKeys = props.newChipKeys || ['Enter'];\n\n this.labelRef = React.createRef();\n this.input = React.createRef();\n }\n\n componentDidMount(): void {\n if (this.state.variant === 'outlined') {\n // eslint-disable-next-line react/no-find-dom-node\n this.labelNode = ReactDOM.findDOMNode(this.labelRef.current) as HTMLLabelElement;\n this.forceUpdate();\n }\n }\n\n componentWillUnmount(): void {\n if (this.inputBlurTimeout) {\n clearTimeout(this.inputBlurTimeout);\n }\n }\n\n static getDerivedStateFromProps(props: ChipInputProps, state: ChipInputState): Partial<ChipInputState> | null {\n let newState: Partial<ChipInputState> | null = null;\n\n if (props.value && props.value.length !== state.prevPropsValue.length) {\n newState = { prevPropsValue: props.value };\n if (props.clearInputValueOnChange) {\n newState.inputValue = '';\n }\n }\n\n // if change detection is only necessary for clearInputValueOnChange\n if (props.clearInputValueOnChange && props.value && props.value.length !== state.prevPropsValue.length) {\n newState = { prevPropsValue: props.value, inputValue: '' };\n }\n\n if (props.disabled) {\n newState = { ...newState, focusedChip: null };\n }\n\n if (!state.chipsUpdated && props.defaultValue) {\n newState = { ...newState, chips: props.defaultValue };\n }\n\n return newState;\n }\n\n /**\n * Blurs this component.\n */\n // blur() {\n // if (this.input) {\n // this.actualInput.blur();\n // }\n // }\n\n /**\n * Focuses this component.\n */\n focus = (): void => {\n this.actualInput?.focus();\n if (this.state.focusedChip) {\n this.setState({ focusedChip: null });\n }\n };\n\n handleInputBlur = (event: React.FocusEvent<HTMLInputElement>): void => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n this.setState({ isFocused: false });\n if (this.state.focusedChip) {\n this.setState({ focusedChip: null });\n }\n const value = event.target.value;\n let addChipOptions: { clearInputOnFail: boolean };\n switch (this.props.blurBehavior || 'clear') {\n case 'add-or-clear':\n addChipOptions = { clearInputOnFail: true };\n // falls through\n case 'add':\n if (this.props.delayBeforeAdd) {\n // Let's assume that we only want to add the existing content as chip, when\n // another event has not added a chip within 200ms.\n // e.g., onSelection Callback in Autocomplete case\n const numChipsBefore = (this.props.value || this.state.chips).length;\n this.inputBlurTimeout = setTimeout(() => {\n const numChipsAfter = (this.props.value || this.state.chips).length;\n if (numChipsBefore === numChipsAfter) {\n this.handleAddChip(value, addChipOptions);\n } else {\n this.clearInput();\n }\n }, 150);\n } else {\n this.handleAddChip(value, addChipOptions);\n }\n break;\n\n case 'clear':\n this.clearInput();\n break;\n\n default:\n break;\n }\n };\n\n handleInputFocus = (event: React.FocusEvent<HTMLInputElement>): void => {\n this.setState({ isFocused: true });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n const { focusedChip } = this.state;\n this._keyPressed = false;\n this._preventChipCreation = false;\n\n if (this.props.onKeyDown) {\n // Needed for arrow controls on a menu in autocomplete scenario\n this.props.onKeyDown(event);\n // Check if the callback marked the event as isDefaultPrevented() and skip further actions\n // enter key, for example, should not always add the current value of the inputField\n if (event.isDefaultPrevented()) {\n return;\n }\n }\n const chips = this.props.value || this.state.chips;\n if (this.newChipKeyCodes.includes(event.keyCode) || this.newChipKeys.includes(event.key)) {\n const result = this.handleAddChip((event.target as HTMLInputElement).value);\n if (result !== false) {\n event.preventDefault();\n }\n return;\n }\n\n switch (event.keyCode) {\n case keyCodes.BACKSPACE:\n if ((event.target as HTMLInputElement).value === '') {\n if (focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip) {\n this.setState({ focusedChip: focusedChip - 1 });\n }\n } else {\n this.setState({ focusedChip: chips.length - 1 });\n }\n }\n break;\n case keyCodes.DELETE:\n if ((event.target as HTMLInputElement).value === '' && focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip <= chips.length - 1) {\n this.setState({ focusedChip });\n }\n }\n break;\n case keyCodes.LEFT_ARROW:\n if (focusedChip === null && (event.target as HTMLInputElement).value === '' && chips.length) {\n this.setState({ focusedChip: chips.length - 1 });\n } else if (focusedChip !== null && focusedChip > 0) {\n this.setState({ focusedChip: focusedChip - 1 });\n }\n break;\n case keyCodes.RIGHT_ARROW:\n if (focusedChip !== null && focusedChip < chips.length - 1) {\n this.setState({ focusedChip: focusedChip + 1 });\n } else {\n this.setState({ focusedChip: null });\n }\n break;\n default:\n this.setState({ focusedChip: null });\n break;\n }\n };\n\n handleKeyUp = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (\n !this._preventChipCreation &&\n (this.newChipKeyCodes.includes(event.keyCode) || this.newChipKeys.includes(event.key)) &&\n this._keyPressed\n ) {\n this.clearInput();\n } else {\n this.updateInput((event.target as HTMLInputElement).value);\n }\n if (this.props.onKeyUp) {\n this.props.onKeyUp(event);\n }\n };\n\n // handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n // this._keyPressed = true;\n // if (this.props.onKeyPress) {\n // this.props.onKeyPress(event);\n // }\n // };\n\n handleUpdateInput = (e: React.ChangeEvent<HTMLInputElement>): void => {\n if (this.props.inputValue === null || this.props.inputValue === undefined) {\n this.updateInput(e.target.value);\n }\n\n if (this.props.onUpdateInput) {\n this.props.onUpdateInput(e);\n }\n };\n\n /**\n * Handles adding a chip.\n *\n * @param chip Value of the chip, either a string or an object (if dataSourceConfig is set)\n * @param options Additional options\n * @param options.clearInputOnFail If `true`, and `onBeforeAdd` returns `false`, clear the input\n * @returns True if the chip was added (or at least `onAdd` was called), false if adding the chip was prevented\n */\n handleAddChip(chip: string, options?: { clearInputOnFail: boolean }): boolean {\n if (this.props.onBeforeAdd && !this.props.onBeforeAdd(chip)) {\n this._preventChipCreation = true;\n if (options && options.clearInputOnFail) {\n this.clearInput();\n }\n return false;\n }\n this.clearInput();\n const chips = this.props.value || this.state.chips;\n\n if (chip.trim().length) {\n if (this.props.allowDuplicates || !chips.includes(chip)) {\n if (this.props.value && this.props.onAdd) {\n this.props.onAdd(chip);\n } else {\n this.updateChips([...this.state.chips, chip]);\n }\n }\n return true;\n }\n return false;\n }\n\n handleDeleteChip(chip: string, i: number): void {\n if (!this.props.value) {\n const chips = this.state.chips.slice();\n const changed = chips.splice(i, 1); // remove the chip at index i\n if (changed) {\n let focusedChip = this.state.focusedChip;\n if (this.state.focusedChip === i) {\n focusedChip = null;\n } else if (this.state.focusedChip > i) {\n focusedChip = this.state.focusedChip - 1;\n }\n this.updateChips(chips, { focusedChip });\n }\n } else if (this.props.onDelete) {\n this.props.onDelete(chip, i);\n }\n }\n\n updateChips(chips: string[], additionalUpdates = {}): void {\n this.setState({ chips, chipsUpdated: true, ...additionalUpdates });\n if (this.props.onChange) {\n this.props.onChange(chips);\n }\n }\n\n /**\n * Clears the text field for adding new chips.\n * This only works in uncontrolled input mode, i.e., if the inputValue prop is not used.\n */\n clearInput(): void {\n this.updateInput('');\n }\n\n updateInput(value: string): void {\n this.setState({ inputValue: value });\n }\n\n /**\n * Set the reference to the actual input, that is the input of the Input.\n *\n * @param ref - The reference\n */\n setActualInputRef = (ref: HTMLInputElement): void => {\n this.actualInput = ref;\n if (this.props.inputRef) {\n this.props.inputRef(ref);\n }\n };\n\n render(): JSX.Element {\n const {\n alwaysShowPlaceholder,\n chipRenderer = defaultChipRenderer,\n className,\n disabled,\n disableUnderline,\n error,\n FormHelperTextProps,\n fullWidth,\n fullWidthInput,\n helperText,\n id,\n InputProps = {},\n InputLabelProps = {},\n inputValue,\n label,\n placeholder,\n readOnly,\n required,\n rootRef,\n value,\n margin,\n } = this.props;\n const variant = this.state.variant;\n\n if (this.styleTheme !== this.props.theme.palette.mode) {\n this.styleTheme = this.props.theme.palette.mode;\n this.styles = Utils.getStyle(this.props.theme, styles);\n }\n\n let chips = value || this.state.chips || [];\n if (!Array.isArray(chips)) {\n chips = ((chips as string) || '')\n .toString()\n .split(/[,\\s]+/)\n .map((c: string) => c.trim());\n }\n const actualInputValue = inputValue ?? this.state.inputValue;\n\n const hasInput = (this.props.value || actualInputValue).length || actualInputValue.length;\n const shrinkFloatingLabel =\n typeof InputLabelProps.shrink === 'boolean'\n ? InputLabelProps.shrink\n : label !== null && (hasInput || this.state.isFocused || chips.length);\n\n const chipComponents = chips.map((chip, i) =>\n chipRenderer(\n {\n value: chip,\n isDisabled: !!disabled,\n isReadOnly: readOnly,\n isFocused: this.state.focusedChip === i,\n handleClick: () => this.setState({ focusedChip: i }),\n handleDelete: () => this.handleDeleteChip(chip, i),\n style: this.styles.chip,\n },\n i.toString(),\n ),\n );\n\n const InputMore: { notched?: boolean; labelWidth?: number; startAdornment?: JSX.Element[] } = {};\n if (variant === 'outlined') {\n InputMore.notched = !!shrinkFloatingLabel;\n InputMore.labelWidth = (shrinkFloatingLabel && this.labelNode && this.labelNode.offsetWidth) || 0;\n }\n\n if (variant !== 'standard') {\n InputMore.startAdornment = chipComponents;\n } else {\n InputProps.disableUnderline = true;\n }\n\n const InputComponent = variantComponent[variant];\n\n return (\n <FormControl\n ref={rootRef}\n fullWidth={fullWidth}\n className={className}\n sx={{ ...this.styles.root, ...(margin === 'dense' ? this.styles.marginDense : {}) }}\n error={error}\n required={chips.length > 0 ? undefined : required}\n onClick={this.focus}\n disabled={disabled}\n variant={variant}\n component=\"div\"\n margin={margin}\n >\n {label && (\n <InputLabel\n htmlFor={id}\n sx={{\n '&.MuiInputLabel-root': this.styles.label,\n '&.MuiInputLabel-shrink': this.styles.labelShrink,\n }}\n shrink={!!shrinkFloatingLabel}\n focused={this.state.isFocused}\n variant={variant}\n ref={this.labelRef}\n required={required}\n component=\"label\"\n {...InputLabelProps}\n >\n {label}\n </InputLabel>\n )}\n <Box\n component=\"div\"\n id=\"input-chip-container\"\n sx={{\n ...this.styles[variant],\n ...this.styles.chipContainer,\n ...(this.state.isFocused ? this.styles.focused : undefined),\n ...(!disableUnderline && variant === 'standard' ? this.styles.underline : undefined),\n ...(disabled ? this.styles.disabled : undefined),\n ...(label ? this.styles.labeled : undefined),\n ...(error ? this.styles.error : undefined),\n }}\n >\n {variant === 'standard' && chipComponents}\n <InputComponent\n ref={this.input}\n className={`mui-variant-${this.styles[variant]} ${label ? 'mui-chip-with-label' : 'mui-chip-no-label'}`}\n sx={{\n '&.MuiInputBase-input': { ...this.styles.input, ...this.styles[variant] },\n '&.MuiInputBase-root': { ...this.styles.inputRoot },\n }}\n id={id}\n value={actualInputValue}\n onChange={this.handleUpdateInput}\n onKeyDown={this.handleKeyDown}\n // onKeyPress={this.handleKeyPress}\n onKeyUp={this.handleKeyUp}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n inputRef={this.setActualInputRef}\n disabled={disabled}\n fullWidth={fullWidthInput}\n placeholder={\n (!hasInput && (shrinkFloatingLabel || label === null || label === undefined)) ||\n alwaysShowPlaceholder\n ? placeholder\n : null\n }\n readOnly={readOnly}\n {...InputProps}\n {...InputMore}\n />\n </Box>\n {helperText && (\n <FormHelperText\n {...FormHelperTextProps}\n className={FormHelperTextProps?.className}\n style={this.styles.helperText}\n >\n {helperText}\n </FormHelperText>\n )}\n </FormControl>\n );\n }\n}\n\nexport default ChipInput;\n","import React, { type JSX } from 'react';\n\nimport { FormHelperText, FormControl } from '@mui/material';\n\nimport type { ConfigItemChip } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ChipInput from './ChipInput';\n\ninterface ConfigChipProps extends ConfigGenericProps {\n schema: ConfigItemChip;\n}\n\nclass ConfigChip extends ConfigGeneric<ConfigChipProps, ConfigGenericState> {\n componentDidMount(): void {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr);\n if (this.props.schema.delimiter && typeof value === 'string') {\n const parts = value\n .split(this.props.schema.delimiter)\n .map(a => a.trim())\n .filter(a => a);\n this.setState({ value: parts });\n } else {\n this.setState({ value: value || [] });\n }\n }\n\n renderItem(error: string, disabled: boolean): JSX.Element | null {\n const { attr, schema } = this.props;\n const { value } = this.state;\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n <ChipInput\n value={value}\n disabled={!!disabled}\n label={this.getText(schema.label)}\n error={!!error}\n onAdd={chip => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.push(chip);\n this.setState({ value: newValue }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.props.schema.delimiter) {\n mayBePromise = this.onChange(attr, newValue.join(`${this.props.schema.delimiter} `));\n } else {\n mayBePromise = this.onChange(attr, newValue);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n theme={this.props.theme}\n onDelete={(chip, index) => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.splice(index, 1);\n this.setState({ value: newValue }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.props.schema.delimiter) {\n mayBePromise = this.onChange(attr, newValue.join(`${this.props.schema.delimiter} `));\n } else {\n mayBePromise = this.onChange(attr, newValue);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n />\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigChip;\n","import React, { type JSX } from 'react';\nimport { ChromePicker, type ColorResult } from 'react-color';\n\nimport { IconButton, TextField, Dialog } from '@mui/material';\n\nimport { Close as ClearIcon } from '@mui/icons-material';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemText } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigColorProps extends ConfigGenericProps {\n schema: ConfigItemText;\n}\n\ninterface ConfigColorState extends ConfigGenericState {\n showColorDialog?: boolean;\n colorDialogValue?: string;\n}\n\nclass ConfigColor extends ConfigGeneric<ConfigColorProps, ConfigColorState> {\n renderColorDialog(): JSX.Element | null {\n return (\n !!this.state.showColorDialog && (\n <Dialog\n onClose={() => this.setState({ showColorDialog: false })}\n open={this.state.showColorDialog}\n >\n <ChromePicker\n color={this.state.colorDialogValue}\n onChange={(color: ColorResult) =>\n this.setState({ colorDialogValue: color.hex }, () =>\n this.onChange(this.props.attr, this.state.colorDialogValue),\n )\n }\n />\n </Dialog>\n )\n );\n }\n\n renderItem(_error: unknown, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n let textColor = Utils.isUseBright(value, null);\n if (textColor === null) {\n textColor = undefined;\n }\n return (\n <>\n {this.renderColorDialog()}\n <TextField\n variant=\"standard\"\n disabled={!!disabled}\n style={{ minWidth: 100, width: 'calc(100% - 8px)' }}\n label={this.getText(this.props.schema.label)}\n value={value || ''}\n onClick={() =>\n !this.props.schema.readOnly &&\n this.setState({ showColorDialog: true, colorDialogValue: value || '' })\n }\n onChange={e => {\n const color = e.target.value;\n const mayBePromise = this.onChange(this.props.attr, color);\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n slotProps={{\n htmlInput: {\n style: {\n // paddingLeft: noPadding ? 0 : 8,\n backgroundColor: value,\n color: textColor ? '#FFF' : '#000',\n },\n readOnly: this.props.schema.readOnly || false,\n },\n input: {\n endAdornment:\n !this.props.schema.readOnly && value && !this.props.schema.noClearButton ? (\n <IconButton\n size=\"small\"\n onClick={e => {\n e.stopPropagation();\n const mayBePromise = this.onChange(this.props.attr, '');\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n >\n <ClearIcon />\n </IconButton>\n ) : undefined,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n />\n </>\n );\n }\n}\n\nexport default ConfigColor;\n","import React, { type JSX } from 'react';\n\nimport { TextField, Fab, FormControlLabel, Checkbox } from '@mui/material';\n\nimport { GpsFixed as IconGpsFixed, LocationOn as IconLocationOn } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCoordinates } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n width: {\n width: 'calc(100% - 85px)',\n },\n width50: {\n width: 120,\n marginRight: 5,\n },\n};\n\ninterface ConfigCoordinatesProps extends ConfigGenericProps {\n schema: ConfigItemCoordinates;\n}\n\ninterface ConfigCoordinatesState extends ConfigGenericState {\n useSystem?: boolean;\n longitude?: string | number;\n latitude?: string | number;\n}\n\nclass ConfigCoordinates extends ConfigGeneric<ConfigCoordinatesProps, ConfigCoordinatesState> {\n componentDidMount(): void {\n super.componentDidMount();\n\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n\n const newState: Partial<ConfigCoordinatesState> = {};\n if (this.props.schema.useSystemName) {\n newState.useSystem = !!ConfigGeneric.getValue(this.props.data, this.props.schema.useSystemName);\n }\n if (this.props.schema.longitudeName && this.props.schema.latitudeName) {\n newState.longitude = ConfigGeneric.getValue(this.props.data, this.props.schema.longitudeName);\n newState.latitude = ConfigGeneric.getValue(this.props.data, this.props.schema.latitudeName);\n if (!newState.longitude && !newState.latitude && this.props.schema.autoInit) {\n setTimeout(() => this.getCoordinates(), 300);\n }\n } else {\n const value_ = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (!value_ && this.props.schema.autoInit) {\n setTimeout(() => this.getCoordinates(), 300);\n }\n }\n if (Object.keys(newState).length) {\n setTimeout(() => this.setState(newState as ConfigCoordinatesState), 50);\n }\n }\n\n async getSystemCoordinates(): Promise<void> {\n const obj = await this.props.socket.getCompactSystemConfig();\n if (obj?.common && (obj.common.longitude || obj.common.latitude)) {\n window.alert(I18n.t('ra_Used system settings'));\n if (this.props.schema.longitudeName && this.props.schema.latitudeName) {\n this.setState(\n {\n longitude: obj.common.longitude,\n latitude: obj.common.latitude,\n },\n async () => {\n await this.onChange(this.props.schema.longitudeName, obj.common.longitude);\n await this.onChange(this.props.schema.latitudeName, obj.common.latitude);\n },\n );\n } else {\n const value = obj.common.latitude + (this.props.schema.divider || ',') + obj.common.longitude;\n this.setState(\n {\n value,\n },\n () => {\n const mayByPromise = this.onChange(this.props.attr, value);\n if (mayByPromise instanceof Promise) {\n mayByPromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n },\n );\n }\n } else {\n window.alert(\n I18n.t(\n 'ra_Cannot determine position: System settings are empty and GPS detection is disabled in browser',\n ),\n );\n }\n }\n\n getCoordinates(): void {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(\n async (position: GeolocationPosition): Promise<void> => {\n if (position?.coords) {\n if (this.props.schema.longitudeName && this.props.schema.latitudeName) {\n this.setState(\n {\n longitude: position.coords.longitude,\n latitude: position.coords.latitude,\n },\n async () => {\n await this.onChange(\n this.props.schema.longitudeName,\n position.coords.longitude || '',\n );\n await this.onChange(this.props.schema.latitudeName, position.coords.latitude || '');\n },\n );\n } else {\n const value =\n position.coords.latitude +\n (this.props.schema.divider || ',') +\n position.coords.longitude;\n this.setState({ value }, () => {\n const mayByPromise = this.onChange(this.props.attr, value);\n if (mayByPromise instanceof Promise) {\n mayByPromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n });\n }\n } else {\n await this.getSystemCoordinates();\n }\n },\n async (error: GeolocationPositionError): Promise<void> => {\n console.error(`Cannot determine coordinates from browser: ${error.message}`);\n await this.getSystemCoordinates();\n },\n );\n } else {\n void this.getSystemCoordinates().catch(e => {\n console.error(`Cannot determine coordinates: ${e}`);\n });\n }\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n return (\n <>\n {this.props.schema.useSystemName ? (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.useSystem}\n onChange={e => {\n const useSystem = e.target.checked;\n if (useSystem) {\n void this.getSystemCoordinates().catch(e =>\n console.error(`Cannot determine coordinates: ${e}`),\n );\n }\n this.setState({ useSystem }, () =>\n this.onChange(this.props.schema.useSystemName, useSystem),\n );\n }}\n />\n }\n label={I18n.t('ra_Use system settings for position')}\n />\n ) : null}\n {this.props.schema.longitudeName && this.props.schema.latitudeName ? (\n <TextField\n variant=\"standard\"\n style={styles.width50}\n value={this.state.longitude ?? ''}\n error={!!error}\n disabled={this.state.useSystem || !!disabled}\n onChange={e => {\n const longitude = e.target.value;\n this.setState({ longitude }, () => {\n const mayBePromise = this.onChange(\n this.props.schema.longitudeName,\n (longitude || '').trim(),\n );\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n });\n }}\n label={I18n.t('ra_Longitude')}\n />\n ) : null}\n {this.props.schema.longitudeName && this.props.schema.latitudeName ? (\n <TextField\n variant=\"standard\"\n style={styles.width50}\n value={this.state.latitude ?? ''}\n error={!!error}\n disabled={this.state.useSystem || !!disabled}\n onChange={e => {\n const latitude = e.target.value;\n this.setState({ latitude }, () =>\n this.onChange(this.props.schema.latitudeName, (latitude || '').trim()),\n );\n }}\n label={I18n.t('ra_Latitude')}\n />\n ) : null}\n {!this.props.schema.longitudeName || !this.props.schema.latitudeName ? (\n <TextField\n variant=\"standard\"\n style={styles.width}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.state.useSystem,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () => this.onChange(this.props.attr, (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n ) : null}\n {!this.state.useSystem ? (\n <Fab\n size=\"small\"\n onClick={() => this.getCoordinates()}\n title={I18n.t('ra_Take browser position')}\n style={{ marginRight: 4 }}\n >\n <IconLocationOn />\n </Fab>\n ) : null}\n {!this.state.useSystem ? (\n <Fab\n size=\"small\"\n onClick={() => this.getSystemCoordinates()}\n title={I18n.t('ra_Take position from system settings')}\n >\n <IconGpsFixed />\n </Fab>\n ) : null}\n </>\n );\n }\n}\n\nexport default ConfigCoordinates;\n","import React, { type JSX } from 'react';\nimport { Grid2, LinearProgress } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemCustom } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from '#JC/JsonConfigComponent/ConfigGeneric';\n\nconst getOrLoadRemote = (\n remote: string,\n shareScope: string,\n remoteFallbackUrl?: string,\n): Promise<{ get: (module: string) => () => Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }> }> =>\n new Promise((resolve, reject) => {\n // check if remote exists on the global `window`object\n if (!(window as any)[remote]) {\n // search dom to see if remote tag exists, but might still be loading (async)\n const existingRemote: HTMLScriptElement = document.querySelector(`script[data-webpack=\"${remote}\"]`);\n // when remote is loaded.\n const onload = async (): Promise<void> => {\n // check if it was initialized\n if ((window as any)[remote]) {\n if (!(window as any)[remote].__initialized) {\n // if share scope doesn't exist (like in webpack 4) then expect shareScope to be a manual object\n // @ts-expect-error it is a trick and must be so\n if (typeof __webpack_share_scopes__ === 'undefined') {\n // use a default share scope object passed in manually\n await (window as any)[remote].init(shareScope);\n } else {\n // otherwise, init share scope as usual\n // @ts-expect-error it is a trick and must be so\n await (window as any)[remote].init((__webpack_share_scopes__ as any)[shareScope]);\n }\n // mark remote as initialized\n (window as any)[remote].__initialized = true;\n }\n } else {\n console.error(`Cannot load ${remote}`);\n reject(new Error(`Cannot load ${remote}`));\n return;\n }\n // resolve promise so marking remote as loaded\n resolve((window as any)[remote]);\n };\n\n if (existingRemote) {\n // if existing remote but not loaded, hook into its onload and wait for it to be ready\n existingRemote.onload = onload;\n existingRemote.onerror = reject;\n // check if remote fallback exists as param passed to function\n // TODO: should scan public config for a matching key if no override exists\n } else if (remoteFallbackUrl) {\n // inject remote if a fallback exists and call the same onload function\n const d = document;\n const script = d.createElement('script');\n script.type = 'text/javascript';\n // mark as data-webpack so runtime can track it internally\n script.setAttribute('data-webpack', `${remote}`);\n script.async = true;\n script.onerror = reject;\n script.onload = onload;\n script.src = remoteFallbackUrl;\n d.getElementsByTagName('head')[0].appendChild(script);\n } else {\n // no remote and no fallback exist, reject\n reject(new Error(`Cannot Find Remote ${remote} to inject`));\n }\n } else {\n // remote already instantiated, resolve\n resolve((window as any)[remote]);\n }\n });\n\nfunction loadComponent(\n remote: string,\n sharedScope: string,\n module: string,\n url: string,\n): () => Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }> {\n return async (): Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }> => {\n const container = await getOrLoadRemote(remote, sharedScope, url);\n // eslint-disable-next-line @typescript-eslint/await-thenable\n const factory = await container.get(module);\n return factory();\n };\n}\n\ninterface ConfigCustomProps extends ConfigGenericProps {\n schema: ConfigItemCustom;\n}\n\ninterface ConfigCustomState extends ConfigGenericState {\n Component: React.FC<ConfigGenericProps> | null;\n error: string;\n}\n\nexport default class ConfigCustom extends ConfigGeneric<ConfigCustomProps, ConfigCustomState> {\n static runningLoads: Record<string, Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }>> = {};\n\n constructor(props: ConfigCustomProps) {\n super(props);\n // schema.url - location of Widget\n // schema.name - Component name\n // schema.i18n - i18n\n\n Object.assign(this.state, {\n Component: null,\n error: '',\n });\n }\n\n // load component dynamically\n async componentDidMount(): Promise<void> {\n if (!this.props.schema.url) {\n console.error('URL is empty. Cannot load custom component!');\n this.setState({ error: 'URL is empty. Cannot load custom component!' });\n return;\n }\n\n let url;\n /*\n if (this.props.schema.url.startsWith('http:') || this.props.schema.url.startsWith('https:')) {\n url = this.props.schema.url;\n } else\n */\n if (this.props.schema.url.startsWith('./')) {\n url = `${window.location.protocol}//${window.location.host}${this.props.schema.url.replace(/^\\./, '')}`;\n } else {\n url = `${window.location.protocol}//${window.location.host}/adapter/${this.props.adapterName}/${this.props.schema.url}`;\n }\n const [uniqueName, fileToLoad, ...componentNameParts] = this.props.schema.name.split('/');\n const componentName = componentNameParts.join('/');\n if (!url) {\n console.error(\n 'Cannot find URL for custom component! Please define \"url\" as \"custom/customComponents.js\" in the schema',\n );\n return;\n }\n if (!uniqueName || !fileToLoad || !componentName) {\n console.error(\n 'Invalid format of \"name\"! Please define \"name\" as \"ConfigCustomBackItUpSet/Components/AdapterExist\" in the schema',\n );\n return;\n }\n let setPromise: Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }> | undefined =\n ConfigCustom.runningLoads[`${url}!${fileToLoad}`];\n\n if (!(setPromise instanceof Promise)) {\n let i18nPromise: Promise<void> | undefined;\n if (this.props.schema.i18n === true) {\n // load i18n from files\n const pos = url.lastIndexOf('/');\n let i18nURL;\n if (pos !== -1) {\n i18nURL = url.substring(0, pos);\n } else {\n i18nURL = url;\n }\n const lang = I18n.getLanguage();\n const file = `${i18nURL}/i18n/${lang}.json`;\n\n i18nPromise = fetch(file)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => {\n if (lang !== 'en') {\n // try to load English\n fetch(`${i18nURL}/i18n/en.json`)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(err => console.log(`Cannot load i18n \"${file}\": ${err}`));\n return;\n }\n console.log(`Cannot load i18n \"${file}\": ${error}`);\n });\n } else if (this.props.schema.i18n && typeof this.props.schema.i18n === 'object') {\n try {\n I18n.extendTranslations(this.props.schema.i18n);\n } catch (error) {\n console.error(`Cannot import i18n: ${error}`);\n }\n }\n try {\n console.log(uniqueName, fileToLoad, componentName);\n setPromise = loadComponent(uniqueName, 'default', `./${fileToLoad}`, url)();\n if (i18nPromise instanceof Promise) {\n setPromise = Promise.all([setPromise, i18nPromise]).then(result => result[0]);\n }\n // remember promise\n ConfigCustom.runningLoads[`${url}!${fileToLoad}`] = setPromise;\n } catch (error) {\n this.setState({ error: `Cannot import from ${this.props.schema.url}: ${error}` });\n }\n }\n\n try {\n const component: Record<string, React.FC<ConfigGenericProps>> = (await setPromise).default;\n\n if (!component?.[componentName]) {\n const keys = Object.keys(component || {});\n console.error('URL is empty. Cannot load custom component!');\n this.setState({\n error: `Component ${this.props.schema.name} not found in ${this.props.schema.url}. Found: ${keys.join(', ')}`,\n });\n } else {\n this.setState({ Component: component[componentName] });\n }\n } catch (error) {\n this.setState({ error: `Cannot import from ${this.props.schema.url}: ${error}` });\n }\n }\n\n render(): JSX.Element {\n const CustomComponent: React.FC<ConfigGenericProps> = this.state.Component;\n\n // render temporary placeholder\n if (!CustomComponent) {\n const schema = this.props.schema || ({} as ConfigItemCustom);\n\n const item = (\n <Grid2\n size={{\n xs: schema.xs || undefined,\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n style={{\n marginBottom: 0,\n // marginRight: 8,\n textAlign: 'left',\n ...schema.style,\n ...(this.props.themeType === 'dark' ? schema.darkStyle : {}),\n }}\n >\n {this.state.error ? <div>{this.state.error}</div> : <LinearProgress />}\n </Grid2>\n );\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {item}\n </>\n );\n }\n return item;\n }\n\n return <CustomComponent {...this.props} />;\n }\n}\n","import React, { type JSX } from 'react';\n\nimport type { ConfigItemDeviceManager } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigDeviceManagerProps extends ConfigGenericProps {\n schema: ConfigItemDeviceManager;\n}\n\nclass ConfigDeviceManager extends ConfigGeneric<ConfigDeviceManagerProps, ConfigGenericState> {\n renderItem(): JSX.Element | null {\n const schema = this.props.schema;\n\n if (!schema) {\n return null;\n }\n\n if (this.props.DeviceManager) {\n const DeviceManager = this.props.DeviceManager;\n return (\n <DeviceManager\n uploadImagesToInstance={`${this.props.adapterName}.${this.props.instance}`}\n title={this.getText(this.props.schema.label)}\n socket={this.props.socket}\n selectedInstance={`${this.props.adapterName}.${this.props.instance}`}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n />\n );\n }\n\n return <div>DeviceManager not found</div>;\n }\n}\n\nexport default ConfigDeviceManager;\n","import React, { type JSX } from 'react';\nimport Dropzone, { type DropzoneRef } from 'react-dropzone';\n\nimport {\n InputLabel,\n MenuItem,\n FormHelperText,\n FormControl,\n Select,\n IconButton,\n ListItemText,\n ListItemIcon,\n} from '@mui/material';\n\nimport {\n Refresh as IconRefresh,\n UploadFile as IconUpload,\n Delete as IconDelete,\n PlayArrow as IconPlay,\n MusicNote as IconAudio,\n Videocam as IconVideo,\n Article as IconText,\n Code as IconCode,\n} from '@mui/icons-material';\nimport { FaFileUpload as UploadIcon } from 'react-icons/fa';\n\nimport { Confirm as ConfirmDialog, Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemFileSelector } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n fullWidthOneButton: {\n width: 'calc(100% - 42px)',\n },\n fullWidthTwoButtons: {\n width: 'calc(100% - 84px)',\n },\n fullWidthThreeButtons: {\n width: 'calc(100% - 126x)',\n },\n dropZone: {\n width: '100%',\n height: '100%',\n position: 'absolute',\n },\n dropZoneEmpty: {},\n image: {\n objectFit: 'contain',\n margin: 'auto',\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n uploadDiv: {\n position: 'relative',\n width: '100%',\n },\n uploadDivDragging: {\n opacity: 1,\n background: 'rgba(128,255,128,0.1)',\n },\n uploadCenterDiv: {\n margin: 5,\n border: '3px dashed grey',\n borderRadius: 5,\n width: '100%',\n height: '100%',\n position: 'absolute',\n display: 'flex',\n },\n uploadCenterIcon: {\n paddingTop: 10,\n width: 48,\n height: 48,\n },\n uploadCenterText: {\n fontSize: 16,\n },\n uploadCenterTextAndIcon: {\n textAlign: 'center',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n disabledOpacity: {\n opacity: 0.3,\n cursor: 'default',\n },\n error: {\n border: '2px solid red',\n },\n deleteButton: {},\n selectedImage: {\n height: 40,\n width: 40,\n display: 'inline-block',\n marginRight: 8,\n },\n};\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp', 'gif', 'apng', 'avif', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\ninterface ConfigFileSelectorProps extends ConfigGenericProps {\n schema: ConfigItemFileSelector;\n}\n\ninterface ConfigFileSelectorState extends ConfigGenericState {\n uploadFile?: boolean | 'dragging';\n uploadError?: boolean;\n files?: { name: string; size: string }[];\n deleteFile?: string;\n}\n\nclass ConfigFileSelector extends ConfigGeneric<ConfigFileSelectorProps, ConfigFileSelectorState> {\n private readonly dropzoneRef: React.RefObject<DropzoneRef>;\n\n private readonly imagePrefix: string;\n\n private objectID: string;\n\n private path: string;\n\n constructor(props: ConfigFileSelectorProps) {\n super(props);\n this.dropzoneRef = React.createRef();\n this.imagePrefix = this.props.imagePrefix === undefined ? './files' : this.props.imagePrefix;\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n\n this.objectID = (this.props.schema.objectID || '0_userdata.0').replace(\n '%INSTANCE%',\n (this.props.instance || 0).toString(),\n );\n this.path = this.props.schema.upload;\n if (this.path) {\n if (this.path === '/') {\n this.path = '';\n } else if (!this.path.endsWith('/')) {\n this.path = `${this.path}/`;\n }\n }\n\n // read files\n void this.updateFiles().then(() => {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n });\n }\n\n updateFiles(): Promise<void> {\n return this.readFiles(this.props.schema.pattern).then(files => this.setState({ files }));\n }\n\n async readFolder(\n folderName: string,\n files: { name: string; size: string }[],\n filter: string,\n ): Promise<{ name: string; size: string }[]> {\n try {\n const dirFiles = await this.props.socket.readDir(this.objectID, folderName.replace(/^\\//, '') || null);\n for (let f = 0; f < dirFiles.length; f++) {\n const file = dirFiles[f];\n if (file.isDir) {\n // read it\n await this.readFolder(`${folderName + file.file}/`, files, filter);\n } else {\n let ok = false;\n if (filter === '*.*' && file.file.includes('.')) {\n ok = true;\n } else if (!filter || filter === '*') {\n ok = true;\n } else if (filter === '.*' && file.file.startsWith('.')) {\n ok = true;\n } else {\n const regExp = new RegExp(`^${filter.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*')}$`);\n ok = regExp.test(file.file);\n }\n\n if (ok) {\n files.push({\n name: folderName + file.file,\n size: file.stats ? Utils.formatBytes(file.stats.size) : '--',\n });\n }\n }\n }\n } catch (e) {\n console.error(`Cannot read \"${folderName}\": ${e}`);\n }\n\n return files;\n }\n\n async readFiles(pattern: string): Promise<{ name: string; size: string }[]> {\n const files: { name: string; size: string }[] = [];\n pattern = pattern || this.props.schema.pattern;\n if (!pattern) {\n pattern = '**/*.*';\n }\n let filter;\n const pos = pattern.lastIndexOf('/');\n if (pos === -1) {\n filter = pattern;\n } else {\n filter = pattern.substring(pos + 1);\n }\n\n if (pattern.startsWith('**')) {\n // read all folders\n await this.readFolder('/', files, filter);\n } else {\n const pos_ = pattern.lastIndexOf('/');\n if (pos_ === -1) {\n await this.readFolder('/', files, filter);\n } else {\n const folder = pattern.substring(0, pos_ + 1);\n await this.readFolder(folder, files, filter);\n }\n }\n\n return files;\n }\n\n onDrop(acceptedFiles: File[]): void {\n const file = acceptedFiles[0];\n const reader = new FileReader();\n const maxSize = this.props.schema.maxSize || 2 * 1024 * 1024;\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n let ext = `image/${file.name.split('.').pop().toLowerCase()}`;\n if (ext === 'image/jpg') {\n ext = 'image/jpeg';\n } else if (ext.includes('svg')) {\n ext = 'image/svg+xml';\n }\n if (file.size > maxSize) {\n window.alert(I18n.t('File is too big. Max %sk allowed. Try use SVG.', Math.round(maxSize / 1024)));\n return;\n }\n const base64 = `data:${ext};base64,${btoa(\n new Uint8Array(reader.result as ArrayBufferLike).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n '',\n ),\n )}`;\n\n this.props.socket\n .writeFile64(this.objectID, this.path + file.name, base64)\n .then(() => this.updateFiles())\n .catch(e => window.alert(`Cannot upload file: ${e}`));\n };\n reader.readAsArrayBuffer(file);\n }\n\n renderDeleteDialog(): JSX.Element | null {\n if (!this.state.deleteFile) {\n return null;\n }\n return (\n <ConfirmDialog\n title={I18n.t('ra_Are you sure?')}\n text={I18n.t('ra_File will be deleted')}\n ok={I18n.t('ra_Delete')}\n cancel={I18n.t('ra_Cancel')}\n onClose={isOk => {\n const deleteFile = this.state.deleteFile;\n this.setState({ deleteFile: '' }, () => {\n if (isOk) {\n this.props.socket\n .deleteFile(this.objectID, deleteFile)\n .then(() => this.updateFiles())\n .catch(e => window.alert(`Cannot delete file: ${e}`));\n }\n });\n }}\n />\n );\n }\n\n static base64ToArrayBuffer(base64: string): ArrayBufferLike {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n }\n\n loadFile(): Promise<{ file: string; mimeType: string }> {\n return this.props.socket.readFile(this.objectID, this.state.value, true);\n }\n\n play(): void {\n void this.loadFile().then(data => {\n if (typeof AudioContext !== 'undefined') {\n const context = new AudioContext();\n const buf = ConfigFileSelector.base64ToArrayBuffer(data.file);\n void context.decodeAudioData(\n buf,\n (buffer: AudioBuffer): void => {\n const source = context.createBufferSource(); // creates a sound source\n source.buffer = buffer; // tell the source which sound to play\n source.connect(context.destination); // connect the source to the context's destination (the speakers)\n source.start(0);\n },\n (err: DOMException): void => window.alert(`Cannot play: ${err.message}`),\n );\n }\n });\n }\n\n getFileIcon(item: { value: string; label: string; extension?: string }): JSX.Element | null {\n if (!item?.extension) {\n return null;\n }\n if (IMAGE_EXT.includes(item.extension)) {\n return (\n <div\n style={{\n ...styles.selectedImage,\n backgroundImage: `url(${this.imagePrefix}/${this.objectID}/${item.value})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n />\n );\n }\n if (AUDIO_EXT.includes(item.extension)) {\n return <IconAudio />;\n }\n if (DOC_EXT.includes(item.extension)) {\n return <IconText />;\n }\n if (VIDEO_EXT.includes(item.extension)) {\n return <IconVideo />;\n }\n if (JS_EXT.includes(item.extension)) {\n return <IconCode />;\n }\n return null;\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.files) {\n return null;\n }\n const folders: string[] = [];\n if (!this.props.schema.withFolder) {\n this.state.files.forEach(file => {\n const pos = file.name.lastIndexOf('/');\n if (pos === -1) {\n if (!folders.includes('/')) {\n folders.push('/');\n }\n } else {\n const folder = file.name.substring(0, pos + 1);\n if (!folders.includes(folder)) {\n folders.push(folder);\n }\n }\n });\n }\n\n const selectOptions: { value: string; label: string; extension?: string }[] = this.state.files.map(file => ({\n value: file.name,\n label:\n !this.props.schema.withFolder && folders.length === 1\n ? `${file.name.substring(folders[0].length)}`\n : `${file.name}${this.props.schema.noSize ? '' : `(${file.size})`}`,\n extension: file.name.toLowerCase().split('.').pop(),\n }));\n\n if (!this.props.schema.noNone) {\n selectOptions.unshift({ label: I18n.t('ra_none'), value: '' });\n }\n\n const item: { value: string; label: string; extension?: string } = selectOptions.find(\n _item => _item.value === this.state.value,\n );\n\n let buttons = 0;\n\n if (this.props.schema.upload) {\n buttons++;\n }\n if (this.props.schema.refresh) {\n buttons++;\n }\n const play =\n this.state.value &&\n (this.state.value.endsWith('.mp3') ||\n this.state.value.endsWith('.ogg') ||\n this.state.value.endsWith('.wav'));\n // show play button\n if (play) {\n buttons++;\n }\n\n const element = (\n <div style={styles.fullWidth}>\n <FormControl\n variant=\"standard\"\n style={{ width: `calc(100% - ${buttons * 42}px)` }}\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() => (\n <>\n {this.getFileIcon(item)}\n <span>{item?.label || ''}</span>\n </>\n )}\n onChange={e => {\n this.setState({ value: e.target.value === '_' ? '' : e.target.value }, () =>\n this.onChange(this.props.attr, this.state.value),\n );\n }}\n >\n {selectOptions.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n >\n <ListItemIcon>{this.getFileIcon(it)}</ListItemIcon>\n <ListItemText>{it.label}</ListItemText>\n {this.props.schema.delete && item.value ? (\n <IconButton\n style={styles.deleteButton}\n size=\"small\"\n onClick={() => this.setState({ deleteFile: item.value })}\n >\n <IconDelete />\n </IconButton>\n ) : null}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n {this.props.schema.refresh && (\n <IconButton onClick={() => this.updateFiles()}>\n <IconRefresh />\n </IconButton>\n )}\n {this.props.schema.upload && (\n <IconButton onClick={() => this.dropzoneRef.current?.open()}>\n <IconUpload />\n </IconButton>\n )}\n {play && (\n <IconButton\n style={{ color: '#00FF00' }}\n onClick={() => this.play()}\n >\n <IconPlay />\n </IconButton>\n )}\n </div>\n );\n\n if (!this.props.schema.upload) {\n return (\n <>\n {element}\n {this.renderDeleteDialog()}\n </>\n );\n }\n let accept: Record<string, string[]> = { '*/*': [] };\n if (this.props.schema.fileTypes === 'image') {\n accept = {\n 'image/*': ['.png', '.jpg', '.svg', '.gif', '.apng', '.avif', '.webp'],\n };\n } else if (this.props.schema.fileTypes === 'audio') {\n accept = {\n 'audio/*': ['.mp3', '.ogg', '.wav', '.mp4'],\n };\n } else if (this.props.schema.fileTypes === 'text') {\n accept = {\n 'text/plain': ['.txt'],\n };\n }\n if (this.props.schema.pattern) {\n const last = this.props.schema.pattern.split('/').pop().toLowerCase().replace(/.*\\./, '');\n if (\n last === 'png' ||\n last === 'jpg' ||\n last === 'svg' ||\n last === 'gif' ||\n last === 'apng' ||\n last === 'avif' ||\n last === 'webp'\n ) {\n accept = {\n 'image/*': ['.png', '.jpg', '.svg', '.gif', '.apng', '.avif', '.webp'],\n };\n } else if (last === 'mp3' || last === 'ogg' || last === 'wav') {\n accept = {\n 'audio/*': ['.mp3', '.ogg', '.wav', '.mp4'],\n };\n } else if (last === 'ics') {\n accept = {\n 'text/calendar': ['.ics'],\n };\n } else if (last === 'txt') {\n accept = {\n 'text/plain': ['.txt'],\n };\n } else if (last === 'pem') {\n accept = {\n 'text/plain': ['.pem'],\n };\n } else {\n accept = {\n '*/*': [`.${last}`],\n };\n }\n }\n\n return (\n <Dropzone\n ref={this.dropzoneRef}\n multiple={false}\n accept={accept}\n noKeyboard\n noClick\n maxSize={this.props.schema.maxSize || 2 * 1024 * 1024}\n onDragEnter={() => {\n this.setState({ uploadFile: 'dragging' });\n }}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={(acceptedFiles, errors) => {\n this.setState({ uploadFile: false });\n if (!acceptedFiles.length) {\n window.alert(\n (errors &&\n errors[0] &&\n errors[0].errors &&\n errors[0].errors[0] &&\n errors[0].errors[0].message) ||\n I18n.t('Cannot upload'),\n );\n } else {\n this.onDrop(acceptedFiles);\n }\n }}\n >\n {({ getRootProps, getInputProps }) => (\n <div\n style={{\n ...styles.uploadDiv,\n ...(this.state.uploadFile === 'dragging' ? styles.uploadDivDragging : undefined),\n ...(disabled ? styles.disabledOpacity : undefined),\n }}\n {...getRootProps()}\n >\n <input {...getInputProps()} />\n {this.state.uploadFile === 'dragging' ? (\n <div\n style={{\n ...styles.uploadCenterDiv,\n ...(this.state.uploadError ? styles.error : undefined),\n }}\n >\n <div style={styles.uploadCenterTextAndIcon}>\n <UploadIcon style={styles.uploadCenterIcon} />\n <div style={styles.uploadCenterText}>\n {this.state.uploadFile === 'dragging'\n ? I18n.t('ra_Drop file here')\n : I18n.t(\n 'ra_Place your files here or click here to open the browse dialog',\n )}\n </div>\n </div>\n </div>\n ) : null}\n {element}\n {this.renderDeleteDialog()}\n </div>\n )}\n </Dropzone>\n );\n }\n}\n\nexport default ConfigFileSelector;\n","import React, { type JSX } from 'react';\n\nimport { Button, TextField, IconButton } from '@mui/material';\n\nimport {\n Article as IconText,\n Code as IconCode,\n PlayArrow as IconPlay,\n Videocam as IconVideo,\n} from '@mui/icons-material';\n\nimport { SelectFile as SelectFileDialog } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemFile } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ConfigFileSelector from './ConfigFileSelector';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n fullWidthOneButton: {\n width: 'calc(100% - 69px)',\n marginRight: 4,\n },\n fullWidthIcon: {\n width: 'calc(100% - 119px)',\n marginRight: 4,\n },\n selectedImage: {\n height: 40,\n width: 40,\n display: 'inline-block',\n marginRight: 8,\n },\n};\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp', 'gif', 'apng', 'avif', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\ninterface ConfigFileProps extends ConfigGenericProps {\n schema: ConfigItemFile;\n}\n\ninterface ConfigFileState extends ConfigGenericState {\n showFileBrowser?: boolean;\n}\n\nclass ConfigFile extends ConfigGeneric<ConfigFileProps, ConfigFileState> {\n private imagePrefix = '../..';\n\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.imagePrefix = this.props.imagePrefix === undefined ? './files' : this.props.imagePrefix;\n this.setState({ value: value ?? '' });\n }\n\n static getDerivedStateFromProps(props: ConfigFileProps, state: ConfigFileState): Partial<ConfigFileState> | null {\n const value = ConfigGeneric.getValue(props.data, props.attr);\n if (\n value === null ||\n value === undefined ||\n value.toString().trim() !== (state.value || '').toString().trim()\n ) {\n return { value: value ?? '' };\n }\n return null;\n }\n\n loadFile(): Promise<{ file: string; mimeType: string } | null> {\n const pos = this.state.value.indexOf('/');\n if (pos !== -1) {\n const adapter = this.state.value.substring(0, pos);\n const path = this.state.value.substring(pos + 1);\n return this.props.socket.readFile(adapter, path, true);\n }\n\n return Promise.resolve(null);\n }\n\n play(): void {\n void this.loadFile().then(data => {\n if (typeof AudioContext !== 'undefined' && data?.file) {\n const context = new AudioContext();\n const buf = ConfigFileSelector.base64ToArrayBuffer(data.file);\n void context.decodeAudioData(\n buf,\n (buffer: AudioBuffer): void => {\n const source = context.createBufferSource(); // creates a sound source\n source.buffer = buffer; // tell the source which sounds to play\n source.connect(context.destination); // connect the source to the context's destination (the speakers)\n source.start(0);\n },\n (err: DOMException): void => window.alert(`Cannot play: ${err.message}`),\n );\n }\n });\n }\n\n getIcon(): JSX.Element | null {\n const extension = this.state.value.split('.').pop().toLowerCase();\n if (IMAGE_EXT.includes(extension)) {\n return (\n <div\n style={{\n ...styles.selectedImage,\n backgroundImage: `url(${this.imagePrefix}/${this.state.value})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n />\n );\n }\n if (AUDIO_EXT.includes(extension)) {\n return (\n <IconButton\n style={{ color: '#00FF00' }}\n onClick={() => this.play()}\n >\n <IconPlay />\n </IconButton>\n );\n }\n if (DOC_EXT.includes(extension)) {\n return <IconText />;\n }\n if (VIDEO_EXT.includes(extension)) {\n return <IconVideo />;\n }\n if (JS_EXT.includes(extension)) {\n return <IconCode />;\n }\n return null;\n }\n\n renderFileBrowser(): JSX.Element | null {\n if (!this.state.showFileBrowser) {\n return null;\n }\n return (\n <SelectFileDialog\n imagePrefix={this.props.imagePrefix}\n socket={this.props.socket}\n selected={this.state.value}\n onClose={() => this.setState({ showFileBrowser: false })}\n onOk={_value => {\n const value = Array.isArray(_value) ? _value[0] : _value;\n this.setState({ value }, () =>\n this.onChange(this.props.attr, this.props.schema.trim === false ? value : (value || '').trim()),\n );\n }}\n selectOnlyFolders={this.props.schema.selectOnlyFolders}\n allowUpload={this.props.schema.allowUpload}\n allowDownload={this.props.schema.allowDownload}\n allowCreateFolder={this.props.schema.allowCreateFolder}\n allowView={this.props.schema.allowView}\n showToolbar={this.props.schema.showToolbar}\n limitPath={this.props.schema.limitPath}\n theme={this.props.theme}\n />\n );\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const icon = this.getIcon();\n\n return (\n <div style={styles.fullWidth}>\n {icon}\n <TextField\n variant=\"standard\"\n style={icon ? styles.fullWidthIcon : styles.fullWidthOneButton}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: !!this.props.schema.disableEdit,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () =>\n this.onChange(\n this.props.attr,\n this.props.schema.trim === false ? value : (value || '').trim(),\n ),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n <Button\n variant=\"outlined\"\n onClick={() => this.setState({ showFileBrowser: true })}\n >\n ...\n </Button>\n {this.renderFileBrowser()}\n </div>\n );\n }\n}\n\nexport default ConfigFile;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { TextWithIcon, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemFunc } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigFuncProps extends ConfigGenericProps {\n schema: ConfigItemFunc;\n}\n\ninterface ConfigFuncState extends ConfigGenericState {\n selectOptions?: { value: string; label: string; obj?: ioBroker.EnumObject }[];\n}\n\nclass ConfigFunc extends ConfigGeneric<ConfigFuncProps, ConfigFuncState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n void this.props.socket.getEnums('functions').then(enums => {\n const selectOptions: { value: string; label: string }[] = Object.keys(enums).map(id => ({\n value: this.props.schema.short ? id.replace('enum.functions.', '') : id,\n label: this.getText(enums[id].common.name),\n obj: enums[id],\n }));\n\n if (this.props.schema.allowDeactivate !== false) {\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n }\n\n this.setState({ value, selectOptions });\n });\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions.find(it => it.value === this.state.value);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() =>\n item ? (\n item.obj ? (\n <TextWithIcon\n value={item.obj}\n themeType={this.props.themeType}\n lang={I18n.getLanguage()}\n />\n ) : (\n item.label\n )\n ) : (\n ''\n )\n }\n onChange={e => {\n this.setState({ value: e.target.value === '_' ? '' : e.target.value }, () =>\n this.onChange(this.props.attr, this.state.value),\n );\n }}\n >\n {this.state.selectOptions.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n style={it.value === ConfigGeneric.DIFFERENT_VALUE ? { opacity: 0.5 } : {}}\n >\n {it.obj ? (\n <TextWithIcon\n value={it.obj}\n themeType={this.props.themeType}\n lang={I18n.getLanguage()}\n />\n ) : (\n it.label\n )}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigFunc;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, TextField, FormHelperText, MenuItem, FormControl, Select } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemIP } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigIPProps extends ConfigGenericProps {\n schema: ConfigItemIP;\n}\n\ninterface ConfigIPState extends ConfigGenericState {\n ips?: { name: string; address: string; family: string; internal?: boolean }[];\n}\n\nclass ConfigIP extends ConfigGeneric<ConfigIPProps, ConfigIPState> {\n componentDidMount(): void {\n super.componentDidMount();\n this.props.socket\n .getHostByIp(this.props.common.host)\n .then(ips => {\n // [{name, address, family}]\n if (!this.props.schema.listenOnAllPorts) {\n ips = ips.filter(item => item.address !== '0.0.0.0' && item.address !== '::');\n }\n if (this.props.schema.onlyIp4) {\n ips = ips.filter(item => item.family === 'ipv4');\n } else if (this.props.schema.onlyIp6) {\n ips = ips.filter(item => item.family === 'ipv6');\n }\n if (this.props.schema.noInternal) {\n ips = ips.filter(item => !item.internal);\n }\n ips.forEach(item => {\n if (item.address === '0.0.0.0') {\n item.name = `[IPv4] 0.0.0.0 - ${I18n.t('ra_Listen on all IPs')}`;\n } else if (item.address === '::') {\n item.name = `[IPv6] :: - ${I18n.t('ra_Listen on all IPs')}`;\n }\n });\n this.setState({ ips });\n })\n .catch(e => console.error(e));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const item = this.state.ips?.find(it => it.address === value);\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {this.state.ips && this.props.schema.label ? (\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n {!this.state.ips ? (\n <TextField\n fullWidth\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n label={this.getText(this.props.schema.label)}\n />\n ) : (\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => item?.name || val}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.ips?.map((it, i) => (\n <MenuItem\n key={i}\n value={it.address}\n >\n {it.name}\n </MenuItem>\n ))}\n </Select>\n )}\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigIP;\n","import React, { type JSX } from 'react';\n\nimport type { ConfigItemImageSendTo } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigImageSendToProps extends ConfigGenericProps {\n schema: ConfigItemImageSendTo;\n}\n\ninterface ConfigImageSendToState extends ConfigGenericState {\n image?: string;\n}\n\nclass ConfigImageSendTo extends ConfigGeneric<ConfigImageSendToProps, ConfigImageSendToState> {\n private initialized = false;\n\n private _context: string | undefined;\n\n componentDidMount(): void {\n super.componentDidMount();\n\n this.askInstance();\n }\n\n askInstance(): void {\n if (this.props.alive) {\n let data = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = this.getPattern(this.props.schema.jsonData);\n if (dataStr) {\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${JSON.stringify(data)}`);\n }\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n\n void this.props.socket\n .sendTo(`${this.props.adapterName}.${this.props.instance}`, this.props.schema.command || 'send', data)\n .then(image => this.setState({ image: image || '' }));\n }\n }\n\n getContext(): string {\n const context: Record<string, any> = {};\n\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (context[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n\n return JSON.stringify(context);\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n if (this.props.alive) {\n const context = this.getContext();\n if (context !== this._context || !this.initialized) {\n this._context = context;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n if (this.state.image === undefined) {\n return null;\n }\n\n return (\n <img\n alt=\"dynamic content\"\n src={this.state.image}\n style={{ width: this.props.schema.width || '100%', height: this.props.schema.height }}\n />\n );\n }\n}\n\nexport default ConfigImageSendTo;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, FormHelperText, FormControl } from '@mui/material';\n\nimport { UploadImage } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemImageUpload } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigImageUploadProps extends ConfigGenericProps {\n schema: ConfigItemImageUpload;\n}\n\ninterface ConfigImageUploadState extends ConfigGenericState {\n image?: string;\n context?: string;\n}\n\nclass ConfigImageUpload extends ConfigGeneric<ConfigImageUploadProps, ConfigImageUploadState> {\n private index: number;\n\n constructor(props: ConfigImageUploadProps) {\n super(props);\n this.index = Date.now();\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n\n if (this.props.schema.base64) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n } else {\n void this.props.socket\n .fileExists(`${this.props.adapterName}.${this.props.instance}`, this.props.attr)\n .then(exist => exist && this.loadImage());\n }\n }\n\n _getUrl(update?: boolean): string {\n if (update) {\n this.index = Date.now();\n }\n let url = `files/${this.props.adapterName}.${this.props.instance}/${this.props.attr}?t=${this.index}`;\n if (window.location.port === '3000') {\n url = `${window.location.protocol}//${window.location.hostname}:8081/${url}`;\n }\n\n return url;\n }\n\n loadImage(): void {\n void fetch(this._getUrl())\n .then(res => res.blob())\n .then(blob => {\n const reader = new FileReader();\n reader.onload = () => {\n this.setState({ value: reader.result });\n };\n reader.readAsDataURL(blob);\n })\n .catch(e => console.error(e));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {this.props.schema.label ? (\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n <UploadImage\n error={!!error}\n disabled={disabled}\n accept={this.props.schema.accept}\n crop={this.props.schema.crop}\n maxSize={this.props.schema.maxSize || 256 * 1024}\n icon={this.state.value || undefined}\n removeIconFunc={() =>\n this.setState({ value: null }, () => {\n if (this.props.schema.base64) {\n const mayBePromise = this.onChange(this.props.attr, this.state.value);\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n } else {\n // delete file to /instance/attr\n void this.props.socket\n .deleteFile(`${this.props.adapterName}.${this.props.instance}`, this.props.attr)\n .catch(e => console.error(e));\n }\n })\n }\n onChange={base64 =>\n this.setState({ value: base64 }, () => {\n if (this.props.schema.base64) {\n const mayBePromise = this.onChange(this.props.attr, this.state.value);\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n } else if (base64.startsWith('data')) {\n base64 = base64.split(',')[1];\n }\n // upload file to /instance/attr\n this.props.socket\n .writeFile64(\n `${this.props.adapterName}.${this.props.instance}`,\n this.props.attr,\n base64,\n )\n .catch(e => console.error(e));\n })\n }\n />\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigImageUpload;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemInstanceSelect } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n icon: {\n width: 20,\n height: 20,\n marginRight: 4,\n },\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemInstanceSelect;\n}\n\ninterface ConfigInstanceSelectState extends ConfigGenericState {\n selectOptions?: { label: string; value: string; icon?: string }[];\n}\n\nclass ConfigInstanceSelect extends ConfigGeneric<ConfigInstanceSelectProps, ConfigInstanceSelectState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n let adapter = this.props.schema.adapter;\n if (adapter === '_dataSources') {\n adapter = undefined;\n }\n\n void this.props.socket\n .getAdapterInstances(adapter, true)\n .then(async instances => {\n if (this.props.schema.adapter === '_dataSources') {\n // get only \"data-sources\", like history, sql, influx\n instances = instances.filter(instance => instance?.common?.getHistory);\n } else if (this.props.schema.adapter) {\n instances = instances.filter(instance =>\n instance?._id.startsWith(`system.adapter.${this.props.schema.adapter}.`),\n );\n } else if (this.props.schema.adapters && Array.isArray(this.props.schema.adapters)) {\n instances = instances.filter(instance =>\n this.props.schema.adapters.includes(instance?.common?.name),\n );\n }\n\n if (this.props.schema.onlyEnabled) {\n instances = instances.filter(instance => instance?.common?.enabled);\n }\n\n const selectOptions: { label: string; value: string; icon?: string }[] = instances.map(instance => ({\n value: this.props.schema.long\n ? instance._id\n : this.props.schema.short\n ? instance._id.split('.').pop()\n : instance._id.replace(/^system\\.adapter\\./, ''),\n label: `${instance.common.name} [${instance._id.replace(/^system\\.adapter\\./, '')}]`,\n icon: `adapter/${instance.common.name}/${instance.common.icon}`,\n }));\n\n selectOptions.sort((a, b) => {\n if (a.value > b.value) {\n return 1;\n }\n if (a.value < b.value) {\n return -1;\n }\n return 0;\n });\n\n if (this.props.schema.allowDeactivate !== false) {\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n }\n if (this.props.schema.all) {\n selectOptions.unshift({ label: I18n.t('sch_all'), value: '*' });\n }\n\n this.setState({ value: value || '', selectOptions });\n\n await this.props.socket.subscribeObject(\n `system.adapter.${adapter ? `${adapter}.` : ''}*`,\n this.onInstancesUpdate,\n );\n })\n .catch(e => console.error(`Cannot get instances: ${e}`));\n }\n\n componentWillUnmount(): void {\n void this.props.socket.unsubscribeObject('system.adapter.*', this.onInstancesUpdate).then(() => {});\n super.componentWillUnmount();\n }\n\n onInstancesUpdate = (id: string, obj?: ioBroker.Object | null): void => {\n if (!id.match(/^system\\.adapter\\.[-_a-z\\d]+\\.\\d+$/)) {\n return;\n }\n const _id = this.props.schema.long\n ? id\n : this.props.schema.short\n ? id.split('.').pop()\n : id.replace(/^system\\.adapter\\./, '');\n const index = this.state.selectOptions.findIndex(item => item.value === _id);\n if (!obj) {\n // deleted\n if (index !== -1) {\n const selectOptions: { label: string; value: string; icon?: string }[] = JSON.parse(\n JSON.stringify(this.state.selectOptions),\n );\n\n const newState: Partial<ConfigInstanceSelectState> = {};\n if (this.state.value === selectOptions[index].value) {\n newState.value = ConfigGeneric.NONE_VALUE;\n }\n selectOptions.splice(index, 1);\n newState.selectOptions = selectOptions;\n\n this.setState(newState as ConfigInstanceSelectState);\n }\n } else {\n if (this.props.schema.adapter === '_dataSources' && (!obj.common || !obj.common.getHistory)) {\n return;\n }\n\n if (index === -1) {\n const selectOptions: { label: string; value: string; icon?: string }[] = JSON.parse(\n JSON.stringify(this.state.selectOptions),\n );\n const name =\n typeof obj.common.name === 'object'\n ? obj.common.name[I18n.getLanguage()] || obj.common.name.en\n : obj.common.name;\n selectOptions.push({\n value: this.props.schema.long\n ? obj._id\n : this.props.schema.short\n ? obj._id.split('.').pop()\n : obj._id.replace(/^system\\.adapter\\./, ''),\n label: `${name} [${obj._id.replace(/^system\\.adapter\\./, '')}]`,\n icon: `adapter/${name}/${obj.common.icon}`,\n });\n selectOptions.sort((a, b) => (a.label > b.label ? 1 : a.label < b.label ? -1 : 0));\n this.setState({ selectOptions });\n }\n }\n };\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions?.find(it => it.value === this.state.value);\n\n return (\n <FormControl\n fullWidth\n key={this.props.attr}\n variant=\"standard\"\n >\n {this.props.schema.label ? (\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={this.state.value}\n renderValue={() => (\n <span style={{ display: 'flex' }}>\n {item?.icon ? (\n <img\n src={`./${item.icon}`}\n alt={item.value}\n style={styles.icon}\n />\n ) : null}\n {this.getText(item?.label, true)}\n </span>\n )}\n onChange={e =>\n this.setState({ value: e.target.value }, () => this.onChange(this.props.attr, this.state.value))\n }\n >\n {this.state.selectOptions.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n style={it.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {it.icon ? (\n <img\n src={`./${it.icon}`}\n alt={it.value}\n style={styles.icon}\n />\n ) : null}\n {this.getText(it.label, true)}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigInstanceSelect;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, TextField, FormHelperText, MenuItem, FormControl, Select } from '@mui/material';\n\nimport type { ConfigItemInterface } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface NetworkInterfaceBase {\n address: string;\n netmask: string;\n mac: string;\n internal: boolean;\n cidr: string | null;\n}\ninterface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase {\n family: 'IPv4';\n scopeid?: undefined;\n}\ninterface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase {\n family: 'IPv6';\n scopeid: number;\n}\ntype NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6;\n\nconst styles: Record<string, React.CSSProperties> = {\n address: {\n fontSize: 'smaller',\n opacity: 0.5,\n marginLeft: 8,\n },\n};\n\ninterface ConfigInterfaceProps extends ConfigGenericProps {\n schema: ConfigItemInterface;\n}\n\ninterface ConfigInterfaceState extends ConfigGenericState {\n interfaces?: { value: string; address: string }[];\n}\n\nclass ConfigInterface extends ConfigGeneric<ConfigInterfaceProps, ConfigInterfaceState> {\n componentDidMount(): void {\n super.componentDidMount();\n this.props.socket\n .getObject(`system.host.${this.props.common.host}`)\n .then(obj => {\n const interfaces: { value: string; address: string }[] = [];\n if (obj?.native?.hardware?.networkInterfaces) {\n const list = obj.native.hardware.networkInterfaces;\n Object.keys(list).forEach(inter => {\n if (this.props.schema.ignoreInternal && !list[inter].find(_ip => !_ip.internal)) {\n return;\n }\n if (\n this.props.schema.ignoreLoopback &&\n list[inter].find(_ip => _ip.address === '127.0.0.1' || _ip.address === '::1')\n ) {\n return;\n }\n\n // find ipv4 address\n let ip: NetworkInterfaceInfo = list[inter].find(_ip => _ip.family === 'IPv4');\n ip = ip || list[inter].find(_ip => _ip.family === 'IPv6');\n interfaces.push({ value: inter, address: ip.address });\n });\n }\n\n this.setState({ interfaces });\n })\n .catch(e => window.alert(`Cannot read interfaces: ${e}`));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const item = this.state.interfaces?.find(it => it.value === value);\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {this.state.interfaces?.length && this.props.schema.label ? (\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n {!this.state.interfaces?.length ? (\n <TextField\n fullWidth\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n label={this.getText(this.props.schema.label)}\n />\n ) : (\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => {\n if (item) {\n return (\n <span>\n {item.value}\n <span style={styles.address}>{item.address}</span>\n </span>\n );\n }\n return val;\n }}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.interfaces.map((it, i) => (\n <MenuItem\n key={i}\n value={it.value}\n >\n <span>\n {it.value}\n <span style={styles.address}>{it.address}</span>\n </span>\n </MenuItem>\n ))}\n </Select>\n )}\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigInterface;\n","import React, { type JSX, useEffect, useState } from 'react';\n\nimport { Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TextField, Button } from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon, Language as LanguageIcon } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, React.CSSProperties> = {\n modalDialog: {\n minWidth: 400,\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n titleIcon: {\n marginRight: 5,\n },\n content: {\n fontSize: 16,\n },\n languageButton: {\n position: 'absolute',\n right: 8,\n top: 8,\n },\n languageButtonActive: {\n color: 'primary.main',\n },\n};\n\ninterface CustomModalProps {\n toggleTranslation?: () => void;\n noTranslation?: boolean;\n title: string;\n fullWidth?: boolean;\n help?: string;\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | false;\n progress?: boolean;\n icon?: any;\n applyDisabled?: boolean;\n applyButton?: boolean;\n onClose: () => void;\n children: JSX.Element | JSX.Element[] | string | string[] | undefined | null;\n titleButtonApply?: string;\n titleButtonClose?: string;\n onApply: (value: string) => void;\n textInput?: boolean;\n defaultValue?: string;\n overflowHidden?: boolean;\n}\n\nconst CustomModal = ({\n toggleTranslation,\n noTranslation,\n title,\n fullWidth,\n help,\n maxWidth,\n progress,\n icon,\n applyDisabled,\n applyButton,\n onClose,\n children,\n titleButtonApply,\n titleButtonClose,\n onApply,\n textInput,\n defaultValue,\n overflowHidden,\n}: CustomModalProps): JSX.Element => {\n const [value, setValue] = useState(defaultValue);\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n let Icon = null;\n\n if (icon) {\n Icon = icon;\n }\n\n return (\n <Dialog\n open={!0}\n maxWidth={maxWidth || 'md'}\n fullWidth={!!fullWidth}\n disableEscapeKeyDown={false}\n onClose={onClose}\n sx={{ '& .MuiPaper-root': styles.modalDialog /* paper: classes.background */ }}\n >\n {title && (\n <DialogTitle>\n {icon ? <Icon style={styles.titleIcon} /> : null}\n {title}\n {I18n.getLanguage() !== 'en' && toggleTranslation ? (\n <IconButton\n size=\"large\"\n style={{ ...styles.languageButton, ...(noTranslation ? styles.languageButtonActive : {}) }}\n onClick={() => toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </DialogTitle>\n )}\n <DialogContent\n sx={{ ...(overflowHidden ? styles.overflowHidden : {}), ...styles.content }}\n style={{ paddingTop: 8 }}\n >\n {textInput && (\n <TextField\n // className={className}\n autoComplete=\"off\"\n fullWidth\n autoFocus\n variant=\"outlined\"\n size=\"medium\"\n // rows={10}\n multiline\n value={value}\n onChange={e => setValue(e.target.value)}\n // customValue\n />\n )}\n {children}\n {help ? <div>{help}</div> : null}\n </DialogContent>\n <DialogActions>\n {applyButton !== false && (\n <Button\n startIcon={<CheckIcon />}\n disabled={progress || (applyDisabled && defaultValue === value)}\n onClick={() => onApply && onApply(textInput ? value : '')}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t(titleButtonApply || 'Ok')}\n </Button>\n )}\n <Button\n color=\"grey\"\n onClick={() => onClose && onClose()}\n disabled={progress}\n variant=\"contained\"\n startIcon={<CloseIcon />}\n >\n {I18n.t(titleButtonClose || 'Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default CustomModal;\n","import React, { type JSX } from 'react';\n\nimport AceEditor from 'react-ace';\nimport 'ace-builds/src-min-noconflict/mode-json';\nimport 'ace-builds/src-min-noconflict/worker-json';\nimport 'ace-builds/src-min-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-min-noconflict/theme-chrome';\nimport 'ace-builds/src-min-noconflict/ext-language_tools';\n\nconst styles: Record<string, React.CSSProperties> = {\n jsonError: {\n border: '1px solid red',\n minHeight: 200,\n },\n jsonNoError: {\n border: '1px solid #00000000',\n minHeight: 200,\n },\n};\n\ninterface EditorProps {\n fontSize?: number;\n value?: string;\n defaultValue?: string;\n mode?: 'json' | 'css' | 'html';\n name: string;\n onChange: (newValue: string) => void;\n themeType: string;\n editValueMode?: boolean; // flag that indicates the \"value edit mode\"\n error?: boolean;\n}\n\nfunction Editor(props: EditorProps): JSX.Element {\n return (\n <AceEditor\n style={props.error === true ? styles.jsonError : props.error === false ? styles.jsonNoError : undefined}\n mode={props.mode || 'json'}\n width=\"100%\"\n height=\"100%\"\n showPrintMargin={props.editValueMode}\n showGutter={props.editValueMode}\n highlightActiveLine={props.editValueMode}\n defaultValue={props.defaultValue}\n theme={props.themeType === 'dark' ? 'clouds_midnight' : 'chrome'}\n value={props.value}\n readOnly={!props.onChange}\n onChange={newValue => props.onChange(newValue)}\n name={props.name || 'UNIQUE_ID_OF_DIV1'}\n fontSize={props.fontSize || 14}\n setOptions={{\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: true,\n\n showLineNumbers: props.editValueMode,\n tabSize: props.editValueMode ? 2 : undefined,\n }}\n editorProps={{ $blockScrolling: true }}\n />\n );\n}\n\nexport default Editor;\n","import React, { type JSX } from 'react';\n\nimport { FormHelperText, FormControl, Button } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemJsonEditor } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport CustomModal from './wrapper/Components/CustomModal';\nimport Editor from './wrapper/Components/Editor';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n button: {\n height: 48,\n // marginLeft: 4,\n minWidth: 48,\n },\n wrapper: {\n width: 'calc(100vw - 40px)',\n height: 'calc(100vh - 188px)',\n },\n};\n\ninterface ConfigJsonEditorProps extends ConfigGenericProps {\n schema: ConfigItemJsonEditor;\n}\n\ninterface ConfigJsonEditorState extends ConfigGenericState {\n initialized?: boolean;\n showSelectId?: boolean;\n jsonError?: boolean;\n}\n\nclass ConfigJsonEditor extends ConfigGeneric<ConfigJsonEditorProps, ConfigJsonEditorState> {\n componentDidMount(): void {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr) || {};\n this.setState({ value, initialized: true, jsonError: this.validateJson(value) });\n }\n\n validateJson(value: string | null | undefined): boolean {\n let jsonError = false;\n if (this.props.schema.validateJson !== false) {\n if (value || !this.props.schema.allowEmpty) {\n try {\n JSON.parse(value);\n } catch (err: unknown) {\n console.log('Error in JSON', err);\n jsonError = true;\n }\n }\n }\n\n return jsonError;\n }\n\n renderItem(/* _error: string, _disabled: boolean, defaultValue */): JSX.Element | null {\n if (!this.state.initialized) {\n return null;\n }\n\n const { schema, data, attr } = this.props;\n const { value, showSelectId } = this.state;\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n <div style={styles.flex}>\n <Button\n color=\"grey\"\n style={styles.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showSelectId: true })}\n >\n {I18n.t('ra_JSON editor')}\n </Button>\n </div>\n {showSelectId ? (\n <CustomModal\n title={this.getText(schema.label)}\n overflowHidden\n onClose={() =>\n this.setState({ showSelectId: false, value: ConfigGeneric.getValue(data, attr) || {} })\n }\n onApply={() => this.setState({ showSelectId: false }, () => this.onChange(attr, value))}\n >\n <div style={{ ...styles.wrapper, ...(this.state.jsonError ? {} : undefined) }}>\n <Editor\n value={typeof value === 'object' ? JSON.stringify(value) : value}\n onChange={newValue =>\n this.setState({ value: newValue, jsonError: this.validateJson(newValue) })\n }\n name=\"ConfigJsonEditor\"\n themeType={this.props.themeType}\n />\n </div>\n </CustomModal>\n ) : null}\n {schema.help || this.state.jsonError ? (\n <FormHelperText>\n {this.state.jsonError\n ? I18n.t('ra_Invalid JSON')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigJsonEditor;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemLanguage } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst LANGUAGES = [\n {\n value: 'en',\n label: 'English',\n },\n {\n value: 'de',\n label: 'Deutsch',\n },\n {\n value: 'ru',\n label: 'русский',\n },\n {\n value: 'pt',\n label: 'Portugues',\n },\n {\n value: 'nl',\n label: 'Nederlands',\n },\n {\n value: 'fr',\n label: 'français',\n },\n {\n value: 'it',\n label: 'Italiano',\n },\n {\n value: 'es',\n label: 'Espanol',\n },\n {\n value: 'pl',\n label: 'Polski',\n },\n {\n value: 'uk',\n label: 'Український',\n },\n {\n value: 'zh-ch',\n label: '简体中文',\n },\n] as const;\n\ninterface LanguageSelectOption {\n /** Value to save */\n value: string;\n /** Label to show */\n label: string;\n}\n\ninterface ConfigLanguageProps extends ConfigGenericProps {\n schema: ConfigItemLanguage;\n}\n\ninterface ConfigLanguageState extends ConfigGenericState {\n selectOptions: LanguageSelectOption[];\n}\n\nclass ConfigLanguage extends ConfigGeneric<ConfigLanguageProps, ConfigLanguageState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const languages: LanguageSelectOption[] = [...LANGUAGES];\n if (this.props.schema.system) {\n languages.unshift({ value: '', label: I18n.t('ra_System language') });\n } else {\n languages.unshift({ value: '', label: I18n.t('ra_none') });\n }\n\n this.setState({\n value: this.props.schema.system ? value || '' : value || I18n.getLanguage(),\n selectOptions: languages,\n });\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element | null {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions?.find(\n it => it.value === this.state.value || (!it.value && !this.state.value),\n );\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={disabled}\n value={this.state.value || '_'}\n renderValue={() => this.getText(item?.label, this.props.schema.noTranslation)}\n onChange={e => {\n let { value } = e.target;\n if (value === '_') {\n value = '';\n }\n\n this.setState({ value }, () => {\n const mayBePromise = this.onChange(this.props.attr, value);\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(err => console.error(err));\n }\n if (this.props.schema.changeGuiLanguage) {\n if (value) {\n if (value === I18n.getLanguage()) {\n return;\n }\n I18n.setLanguage(value);\n if (this.props.changeLanguage) {\n this.props.changeLanguage();\n }\n } else {\n void this.props.socket\n .getSystemConfig()\n .then((systemConfig: ioBroker.SystemConfigObject) => {\n if (systemConfig.common.language === I18n.getLanguage()) {\n return;\n }\n if (systemConfig.common.language) {\n I18n.setLanguage(systemConfig.common.language);\n if (this.props.changeLanguage) {\n this.props.changeLanguage();\n }\n }\n })\n .catch(e => console.error(`Cannot read system config: ${e}`));\n }\n }\n });\n }}\n >\n {this.state.selectOptions?.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n >\n {it.label}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigLanguage;\n","import React, { type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LinearProgress,\n FormControlLabel,\n Checkbox,\n} from '@mui/material';\n\nimport { Check, Close } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemLicense } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigLicenseProps extends ConfigGenericProps {\n schema: ConfigItemLicense;\n}\n\ninterface ConfigLicenseState extends ConfigGenericState {\n showLicenseDialog?: boolean;\n licenseChecked?: boolean;\n license?: string;\n loading?: boolean;\n error?: boolean;\n scrolledDown?: boolean;\n}\n\nclass ConfigLicense extends ConfigGeneric<ConfigLicenseProps, ConfigLicenseState> {\n private readonly scrollRef: React.RefObject<HTMLDivElement | HTMLPreElement>;\n\n constructor(props: ConfigLicenseProps) {\n super(props);\n this.scrollRef = React.createRef();\n }\n\n scrolledDown(): boolean {\n if (!this.scrollRef.current) {\n return false;\n }\n return (\n this.scrollRef.current.offsetHeight + this.scrollRef.current.scrollTop >=\n this.scrollRef.current.scrollHeight\n );\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n if (!ConfigGeneric.getValue(this.props.data, this.props.attr)) {\n if (this.props.schema.licenseUrl) {\n this.setState({ showLicenseDialog: true, loading: true, scrolledDown: false });\n\n fetch(this.props.schema.licenseUrl)\n .then(res => res.text())\n .then(text => this.setState({ license: text, loading: false }))\n .catch(e =>\n this.setState({\n license: e.toString(),\n loading: false,\n error: true,\n scrolledDown: false,\n }),\n );\n } else {\n this.setState({ showLicenseDialog: true, scrolledDown: false });\n }\n setTimeout(() => {\n // install scroll handler\n if (this.scrollRef.current) {\n const scrolledDown = this.scrolledDown();\n if (!scrolledDown) {\n this.scrollRef.current.addEventListener('scroll', () => {\n if (!this.state.scrolledDown && this.scrolledDown()) {\n this.setState({ scrolledDown: true });\n }\n });\n } else {\n this.setState({ scrolledDown: true });\n }\n }\n }, 1000);\n }\n }\n\n renderItem(/* error: string, disabled: boolean, defaultValue */): JSX.Element | null {\n if (!this.state.showLicenseDialog) {\n return null;\n }\n\n return (\n <Dialog\n maxWidth=\"lg\"\n open={!0}\n onClose={(e, reason) => {\n if (reason !== 'escapeKeyDown' && reason !== 'backdropClick') {\n this.setState({ showLicenseDialog: false });\n }\n }}\n >\n <DialogTitle>\n {this.props.schema.title ? I18n.t(this.props.schema.title) : I18n.t('ra_License agreement')}\n </DialogTitle>\n <DialogContent>\n {this.props.schema.licenseUrl ? (\n <>\n {this.state.loading ? <LinearProgress /> : null}\n <pre\n ref={this.scrollRef as React.RefObject<HTMLPreElement>}\n style={{\n width: '100%',\n height: '100%',\n overflowY: 'auto',\n fontSize: 14,\n }}\n >\n {this.state.license}\n </pre>\n </>\n ) : null}\n {!this.props.schema.licenseUrl && this.props.schema.texts ? (\n <div\n ref={this.scrollRef as React.RefObject<HTMLDivElement>}\n style={{\n width: '100%',\n height: '100%',\n overflowY: 'auto',\n fontSize: 14,\n }}\n >\n {this.props.schema.texts.map((text, i) =>\n this.props.schema.noTranslation ? <p key={i}>{text}</p> : <p key={i}>{I18n.t(text)}</p>,\n )}\n </div>\n ) : null}\n </DialogContent>\n <DialogActions>\n {this.props.schema.checkBox ? (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.licenseChecked}\n onClick={() => this.setState({ licenseChecked: !this.state.licenseChecked })}\n />\n }\n label={I18n.t(this.props.schema.checkBox)}\n />\n ) : null}\n <Button\n disabled={\n this.state.loading ||\n this.state.error ||\n (this.props.schema.checkBox && !this.state.licenseChecked) ||\n !this.state.scrolledDown\n }\n onClick={() => {\n this.setState({ showLicenseDialog: false });\n const mayBePromise = this.onChange(this.props.attr, true);\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n color=\"primary\"\n variant=\"contained\"\n startIcon={<Check />}\n >\n {this.props.schema.agreeText\n ? I18n.t(this.props.schema.agreeText)\n : I18n.t('ra_Accept license')}\n </Button>\n <Button\n onClick={() => {\n this.setState({ showLicenseDialog: false });\n setTimeout(() => this.setState({ showLicenseDialog: true }), 2000);\n }}\n color=\"grey\"\n variant=\"contained\"\n startIcon={<Close />}\n >\n {I18n.t('ra_Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ConfigLicense;\n","import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField, FormControl } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemNumber } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n indeterminate: {\n opacity: 0.5,\n },\n control: {\n flexDirection: 'row',\n width: '100%',\n },\n};\n\ninterface ConfigNumberProps extends ConfigGenericProps {\n schema: ConfigItemNumber;\n}\n\ninterface ConfigNumberState extends ConfigGenericState {\n _value: string;\n oldValue: string | null;\n}\n\nclass ConfigNumber extends ConfigGeneric<ConfigNumberProps, ConfigNumberState> {\n private updateTimeout?: ReturnType<typeof setTimeout>;\n\n componentDidMount(): void {\n super.componentDidMount();\n let _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n if (_value === null || _value === undefined) {\n _value = '';\n }\n\n if (Array.isArray(_value) && this.props.multiEdit) {\n _value = ConfigGeneric.DIFFERENT_VALUE;\n this.setState({ _value, oldValue: _value });\n return;\n }\n\n this.setState({ _value: _value.toString(), oldValue: _value.toString() });\n }\n\n static getDerivedStateFromProps(\n props: ConfigNumberProps,\n state: ConfigNumberState,\n ): Partial<ConfigNumberState> | null {\n if (\n (props.schema.min !== undefined && props.schema.min < 0) ||\n (props.schema.max !== undefined && props.schema.max < 0)\n ) {\n return null;\n }\n const _value = ConfigGeneric.getValue(props.data, props.attr);\n\n if (props.multiEdit && state._value === ConfigGeneric.DIFFERENT_VALUE) {\n return { _value: ConfigGeneric.DIFFERENT_VALUE };\n }\n\n if (\n _value === null ||\n _value === undefined ||\n state.oldValue === null ||\n state.oldValue === undefined ||\n (_value.toString() !== parseFloat(state._value).toString() &&\n _value.toString() !== state.oldValue.toString())\n ) {\n return { _value };\n }\n\n return null;\n }\n\n checkValue(value: string): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n value = value.toString().trim();\n const f = value === '' ? 0 : parseFloat(value);\n\n if (value !== '' && Number.isNaN(f)) {\n return 'ra_Not a number';\n }\n\n if (value !== '' && window.isFinite(f)) {\n if (this.props.schema.min !== undefined && f < this.props.schema.min) {\n return 'ra_Too small';\n }\n if (this.props.schema.max !== undefined && f > this.props.schema.max) {\n return 'ra_Too big';\n }\n if (value === '' || value === '-' || Number.isNaN(f)) {\n return 'ra_Not a number';\n }\n\n return null;\n }\n\n return 'ra_Not a number';\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element | null {\n const isIndeterminate = Array.isArray(this.state._value) || this.state._value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = undefined;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = undefined;\n }\n\n if (isIndeterminate) {\n const autoCompleteOptions = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const arr =\n autoCompleteOptions\n ?.filter((a: number | null | undefined) => a || a === 0)\n .map((item: number) => ({ label: item.toString(), value: item })) || [];\n\n arr.unshift({ label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE });\n\n return (\n <Autocomplete\n style={styles.indeterminate}\n fullWidth\n freeSolo\n value={arr[0]}\n // @ts-expect-error needs investigation if this really has no effect\n getOptionSelected={(option, value) => option.label === value.label}\n onChange={(_, value: (typeof arr)[number]) => {\n const mayBePromise = this.onChange(this.props.attr, value?.value, () => {\n this.setState({ _value: value?.value, oldValue: this.state._value });\n });\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n }}\n options={arr}\n getOptionLabel={(option: (typeof arr)[number]) => option.label}\n renderInput={params => (\n <TextField\n {...params}\n label={this.getText(this.props.schema.label)}\n variant=\"standard\"\n slotProps={{\n htmlInput: {\n ...params.inputProps,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n disabled={!!disabled}\n />\n )}\n />\n );\n }\n if (!error && this.state._value !== null && this.state._value !== undefined && this.state._value) {\n error = this.checkValue(this.state._value);\n if (error) {\n error = I18n.t(error as string);\n }\n }\n\n return (\n <FormControl\n variant=\"standard\"\n style={styles.control}\n >\n <TextField\n variant=\"standard\"\n type=\"number\"\n fullWidth\n slotProps={{\n htmlInput: {\n min: this.props.schema.min,\n max: this.props.schema.max,\n step: this.props.schema.step,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\n value={this.state._value === null || this.state._value === undefined ? '' : this.state._value}\n error={!!error}\n disabled={!!disabled}\n onChange={e => {\n const _value = e.target.value; // value is always a string and it is validly formatted\n const _error = this.checkValue(_value);\n if (_error) {\n this.onError(this.props.attr, I18n.t(_error));\n } else {\n this.onError(this.props.attr); // clear error\n }\n\n this.setState({ _value, oldValue: this.state._value }, () =>\n this.onChange(this.props.attr, parseFloat(_value)),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={\n error && typeof error === 'string'\n ? error\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n </FormControl>\n );\n }\n}\n\nexport default ConfigNumber;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, FormControl, Button, TextField } from '@mui/material';\n\nimport { SelectID as DialogSelectID } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemObjectId } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n flex: {\n display: 'flex',\n },\n button: {\n height: 48,\n marginLeft: 4,\n minWidth: 48,\n },\n};\n\ninterface ConfigObjectIdProps extends ConfigGenericProps {\n schema: ConfigItemObjectId;\n}\n\ninterface ConfigObjectIdState extends ConfigGenericState {\n showSelectId?: boolean;\n initialized?: boolean;\n}\n\nclass ConfigObjectId extends ConfigGeneric<ConfigObjectIdProps, ConfigObjectIdState> {\n componentDidMount(): void {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr) || '';\n this.setState({ value, initialized: true });\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.initialized) {\n return null;\n }\n const { schema, socket, attr } = this.props;\n const { value, showSelectId } = this.state;\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {schema.label ? <InputLabel shrink>{this.getText(schema.label)}</InputLabel> : null}\n <div style={styles.flex}>\n <TextField\n variant=\"standard\"\n fullWidth\n value={value}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(schema.placeholder)}\n label={this.getText(schema.label)}\n helperText={this.renderHelp(schema.help, schema.helpLink, schema.noTranslation)}\n onChange={e => {\n const value_ = e.target.value;\n this.setState({ value: value_ }, () => this.onChange(attr, value_));\n }}\n />\n <Button\n color=\"grey\"\n style={styles.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showSelectId: true })}\n >\n ...\n </Button>\n </div>\n {showSelectId ? (\n <DialogSelectID\n imagePrefix={this.props.imagePrefix === undefined ? '../..' : this.props.imagePrefix}\n dialogName={`admin.${this.props.adapterName}`}\n filterFunc={schema.filterFunc}\n themeType={this.props.themeType}\n theme={this.props.theme}\n types={schema.types ? (Array.isArray(schema.types) ? schema.types : [schema.types]) : undefined}\n customFilter={schema.customFilter}\n filters={schema.filters}\n socket={socket}\n selected={value}\n root={schema.root}\n onClose={() => this.setState({ showSelectId: false })}\n onOk={value_ =>\n this.setState({ showSelectId: false, value: value_ }, () => this.onChange(attr, value_))\n }\n />\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigObjectId;\n","import React, { type JSX } from 'react';\n\nimport { TextField, IconButton, InputAdornment } from '@mui/material';\n\nimport { Visibility, VisibilityOff } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemPassword } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n display: 'inline-block',\n },\n halfWidth1: {\n width: 'calc(50% - 4px)',\n display: 'inline-block',\n marginRight: 8,\n },\n halfWidth2: {\n width: 'calc(50% - 4px)',\n display: 'inline-block',\n },\n};\n\nconst PASSWORD_PLACEHOLDER = '____ppp____';\n\ninterface ConfigPasswordProps extends ConfigGenericProps {\n schema: ConfigItemPassword;\n}\n\ninterface ConfigPasswordState extends ConfigGenericState {\n _notEqual?: boolean;\n _repeat?: string;\n _visible?: boolean;\n}\n\nclass ConfigPassword extends ConfigGeneric<ConfigPasswordProps, ConfigPasswordState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({\n _repeat: value ? PASSWORD_PLACEHOLDER : '',\n _visible: false,\n value: value ? PASSWORD_PLACEHOLDER : '',\n _notEqual: false,\n });\n }\n\n onChangePassword(password?: string, repeatPassword?: string): void {\n if (password === undefined) {\n password = this.state.value;\n }\n if (repeatPassword === undefined) {\n repeatPassword = this.state._repeat;\n }\n const _notEqual = !!this.props.schema.repeat && repeatPassword !== password;\n this.setState({ value: password, _repeat: repeatPassword, _notEqual }, () => {\n if (_notEqual) {\n this.onError(this.props.attr, I18n.t('ra_Passwords are not equal!'));\n } else {\n this.onError(this.props.attr); // clear error\n const mayBePromise = this.onChange(this.props.attr, password);\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => this.onError(this.props.attr, e));\n }\n }\n });\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (this.state._notEqual === undefined) {\n return null;\n }\n\n const password = (\n <TextField\n variant=\"standard\"\n fullWidth\n type={this.state._visible && this.state.value !== PASSWORD_PLACEHOLDER ? 'text' : 'password'}\n value={this.state.value}\n error={!!error || this.state._notEqual}\n disabled={!!disabled}\n onChange={e => this.onChangePassword(e.target.value)}\n label={this.getText(this.props.schema.label)}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n endAdornment:\n this.state.value &&\n this.state.value !== PASSWORD_PLACEHOLDER &&\n this.props.schema.visible &&\n !disabled && \n !this.props.schema.readOnly ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n tabIndex={-1}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n this.setState({ _visible: !this.state._visible });\n }}\n edge=\"end\"\n >\n {this.state._visible ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </InputAdornment>\n ) : undefined,\n },\n htmlInput: {\n autoComplete: 'new-password',\n form: { autoComplete: 'off' },\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\n helperText={\n this.state._notEqual\n ? I18n.t('ra_Passwords are not equal!')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n );\n\n if (this.props.schema.repeat && !this.props.schema.readOnly) {\n const passwordRepeat = (\n <TextField\n variant=\"standard\"\n fullWidth\n type={this.state._visible && this.state._repeat !== PASSWORD_PLACEHOLDER ? 'text' : 'password'}\n value={this.state._repeat}\n error={!!error || this.state._notEqual}\n disabled={!!disabled}\n onChange={e => this.onChangePassword(undefined, e.target.value)}\n label={`${this.getText(this.props.schema.label)} (${I18n.t('ra_repeat')})`}\n slotProps={{\n input: {\n endAdornment:\n this.state._repeat &&\n this.state._repeat !== PASSWORD_PLACEHOLDER &&\n this.props.schema.visible && !disabled ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n tabIndex={-1}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n this.setState({ _visible: !this.state._visible });\n }}\n edge=\"end\"\n >\n {this.state._visible ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </InputAdornment>\n ) : undefined,\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'new-password',\n form: { autoComplete: 'off' },\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n },\n }}\n helperText={\n this.state._notEqual\n ? I18n.t('ra_Passwords are not equal!')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n );\n\n return (\n <div style={styles.fullWidth}>\n <div style={styles.halfWidth1}>{password}</div>\n <div style={styles.halfWidth2}>{passwordRepeat}</div>\n </div>\n );\n }\n return password;\n }\n}\n\nexport default ConfigPassword;\n","import React, { type JSX } from 'react';\n\nimport { IconButton, TextField } from '@mui/material';\n\nimport { IconCopy, Utils } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemPattern } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigPatternProps extends ConfigGenericProps {\n schema: ConfigItemPattern;\n}\n\nclass ConfigPattern extends ConfigGeneric<ConfigPatternProps, ConfigGenericState> {\n renderItem(_error: unknown, disabled: boolean): JSX.Element | null {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n disabled={!!disabled}\n slotProps={{\n input: {\n endAdornment: this.props.schema.copyToClipboard ? (\n <IconButton\n size=\"small\"\n onClick={() => {\n Utils.copyToClipboard(this.getPattern(this.props.schema.pattern));\n window.alert('Copied');\n }}\n >\n <IconCopy />\n </IconButton>\n ) : undefined,\n },\n }}\n value={this.getPattern(this.props.schema.pattern)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n}\n\nexport default ConfigPattern;\n","import React, { type JSX } from 'react';\n\nimport { TextField } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemPort } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n warning: {\n '& .Mui-error': {\n color: 'orange',\n },\n },\n};\n\ninterface Port {\n name: string;\n port: number;\n bind: string;\n v6bind: string;\n enabled: boolean;\n}\n\ninterface ConfigPortProps extends ConfigGenericProps {\n schema: ConfigItemPort;\n}\n\ninterface ConfigPortState extends ConfigGenericState {\n _value: string;\n oldValue: string | null;\n ports: Port[];\n}\n\nclass ConfigPort extends ConfigGeneric<ConfigPortProps, ConfigPortState> {\n private updateTimeout?: ReturnType<typeof setTimeout>;\n\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n let _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (_value === null || _value === undefined) {\n _value = '';\n }\n this.setState({ _value: _value.toString(), oldValue: _value.toString() });\n\n // read all instances\n const instances: ioBroker.InstanceObject[] = await this.props.socket.getAdapterInstances();\n\n const ownId = `system.adapter.${this.props.adapterName}.${this.props.instance}`;\n const instanceObj: ioBroker.InstanceObject = (await this.props.socket.getObject(\n ownId,\n )) as ioBroker.InstanceObject;\n const ownHostname = instanceObj?.common.host;\n\n const ports: Port[] = [];\n instances.forEach(instance => {\n // ignore own instance and instances on another host\n if (!instance || instance._id === ownId || instance.common.host !== ownHostname) {\n return;\n }\n // check port only if bind attribute is present too\n if (!instance.native?.bind) {\n return;\n }\n\n // if let's encrypt is enabled and update is enabled, then add port to check\n if (instance?.native && instance.native.secure && instance.native.leEnabled && instance.native.leUpdate) {\n const port = parseInt(instance.native.leCheckPort || instance.native.lePort, 10);\n if (port) {\n ports.push({\n name: `${instance._id.replace('system.adapter.', '')} (LE)`,\n port,\n v6bind: instance.native.bind.includes(':') ? instance.native.bind : instance.native.v6bind,\n bind: instance.native.bind,\n enabled: !!instance.common?.enabled,\n });\n }\n }\n\n const port = parseInt(instance?.native?.port, 10);\n if (port) {\n ports.push({\n name: instance._id.replace('system.adapter.', ''),\n bind: instance.native.bind,\n v6bind: instance.native.bind.includes(':') ? instance.native.bind : instance.native.v6bind,\n port,\n enabled: !!instance.common?.enabled,\n });\n }\n });\n this.setState({ ports });\n }\n\n static getDerivedStateFromProps(props: ConfigPortProps, state: ConfigPortState): Partial<ConfigPortState> | null {\n const _value = ConfigGeneric.getValue(props.data, props.attr);\n if (\n _value === null ||\n _value === undefined ||\n state.oldValue === null ||\n state.oldValue === undefined ||\n (_value.toString() !== parseInt(state._value, 10).toString() &&\n _value.toString() !== state.oldValue.toString())\n ) {\n return { _value };\n }\n\n return null;\n }\n\n checkValue(value: string): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n const min = this.props.schema.min === undefined ? 20 : this.props.schema.min;\n const max = this.props.schema.max || 0xffff;\n\n value = value.toString().trim();\n const f = value === '' ? 0 : parseInt(value, 10);\n\n if (value !== '' && Number.isNaN(f)) {\n return 'ra_Not a number';\n }\n\n if (value !== '' && window.isFinite(Number(value))) {\n if (f < min) {\n return 'ra_Too small';\n }\n if (f > max) {\n return 'ra_Too big';\n }\n if (value === '' || value === '-' || Number.isNaN(f)) {\n return 'ra_Not a number';\n }\n\n return null;\n }\n\n return 'ra_Not a number';\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = undefined;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = undefined;\n }\n\n const min = this.props.schema.min === undefined ? 20 : this.props.schema.min;\n const max = this.props.schema.max || 0xffff;\n\n let warning;\n if (this.state.ports) {\n const num = parseInt(this.state._value, 10);\n\n if (num) {\n // filter ports only with the same bind address\n // todo: IPv6 (v6bind or '::/0')\n const ports = this.state.ports.filter(\n item =>\n !this.props.data.bind ||\n this.props.data.bind === item.bind ||\n this.props.data.bind === '0.0.0.0' ||\n item.bind === '0.0.0.0',\n );\n\n let idx = ports.findIndex(item => item.port === num && item.enabled);\n if (idx !== -1) {\n error = I18n.t('ra_Port is already used by %s', this.state.ports[idx].name);\n } else {\n idx = ports.findIndex(item => item.port === num && !item.enabled);\n if (idx !== -1) {\n warning = true;\n error = I18n.t('ra_Port could be used by %s', this.state.ports[idx].name);\n }\n }\n }\n }\n\n if (!error && this.state._value !== null && this.state._value !== undefined) {\n error = this.checkValue(this.state._value);\n if (typeof error === 'string') {\n error = I18n.t(error);\n }\n }\n\n return (\n <TextField\n variant=\"standard\"\n type=\"number\"\n fullWidth\n slotProps={{\n htmlInput: {\n min,\n max,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\n value={this.state._value === null || this.state._value === undefined ? '' : this.state._value}\n error={!!error}\n disabled={!!disabled}\n sx={warning ? styles.warning : undefined}\n onChange={e => {\n const _value = Number(e.target.value.toString().replace(/[^0-9]/g, '')).toString();\n const _error = this.checkValue(_value);\n if (_error) {\n this.onError(this.props.attr, I18n.t(_error));\n } else {\n this.onError(this.props.attr); // clear error\n }\n\n this.setState({ _value, oldValue: this.state._value }, () => {\n if (_value.trim() === parseInt(_value, 10).toString()) {\n const maybePromise = this.onChange(this.props.attr, parseInt(_value, 10) || 0);\n if (maybePromise instanceof Promise) {\n maybePromise.catch(err => {\n console.error(`Cannot set value for ${this.props.attr}: ${err}`);\n });\n }\n }\n });\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={\n error && typeof error === 'string'\n ? error\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n );\n }\n}\n\nexport default ConfigPort;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { TextWithIcon, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemRoom } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigRoomProps extends ConfigGenericProps {\n schema: ConfigItemRoom;\n}\n\ninterface ConfigRoomState extends ConfigGenericState {\n selectOptions?: { value: string; label: string; obj?: ioBroker.EnumObject }[];\n}\n\nclass ConfigRoom extends ConfigGeneric<ConfigRoomProps, ConfigRoomState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n void this.props.socket\n .getEnums('rooms')\n .then(enums => {\n const selectOptions: { value: string; label: string; obj?: ioBroker.EnumObject }[] = Object.keys(\n enums,\n ).map(id => ({\n value: this.props.schema.short ? id.replace('enum.rooms.', '') : id,\n label: this.getText(enums[id].common.name),\n obj: enums[id],\n }));\n\n if (this.props.schema.allowDeactivate !== false) {\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n }\n\n this.setState({ value, selectOptions });\n })\n .catch(e => console.error(`Cannot get enums: ${e}`));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions.find(it => it.value === this.state.value);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() =>\n item ? (\n item.obj ? (\n <TextWithIcon\n value={item.obj}\n themeType={this.props.themeType}\n lang={I18n.getLanguage()}\n />\n ) : (\n item.label\n )\n ) : (\n ''\n )\n }\n onChange={e => {\n this.setState({ value: e.target.value === '_' ? '' : e.target.value }, () =>\n this.onChange(this.props.attr, this.state.value),\n );\n }}\n >\n {this.state.selectOptions.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n style={it.value === ConfigGeneric.DIFFERENT_VALUE ? { opacity: 0.5 } : {}}\n >\n {it.obj ? (\n <TextWithIcon\n value={it.obj}\n themeType={this.props.themeType}\n lang={I18n.getLanguage()}\n />\n ) : (\n it.label\n )}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigRoom;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, FormHelperText, FormControl, Select, MenuItem, ListSubheader } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSelect, ConfigItemSelectOption } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n },\n noMargin: {\n '&>div': {\n marginTop: 0,\n },\n },\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemSelect;\n}\n\ninterface ConfigInstanceSelectState extends ConfigGenericState {\n selectOptions?: { label: string; value: number | string; group?: boolean; hidden?: string | boolean }[];\n}\n\nclass ConfigSelect extends ConfigGeneric<ConfigInstanceSelectProps, ConfigInstanceSelectState> {\n private initialValue: string | string[] = '';\n\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n const selectOptions: {\n label: string;\n value: number | string;\n group?: boolean;\n hidden?: string | boolean;\n }[] = [];\n\n (this.props.schema.options || []).forEach(item => {\n // if optgroup\n const groupItem: {\n items: ConfigItemSelectOption[];\n label: ioBroker.StringOrTranslated;\n value?: number | string;\n hidden?: string | boolean;\n } = item as {\n items: ConfigItemSelectOption[];\n label: ioBroker.StringOrTranslated;\n value?: number | string;\n hidden?: string | boolean;\n };\n if (Array.isArray(groupItem.items)) {\n selectOptions.push({ label: this.getText(item.label), value: item.value, group: true });\n groupItem.items.forEach(it =>\n selectOptions.push({\n label: this.getText(it.label),\n value: it.value,\n hidden: it.hidden,\n }),\n );\n } else {\n selectOptions.push({\n label: this.getText(item.label),\n value: item.value,\n hidden: item.hidden,\n });\n }\n });\n\n // if __different\n if (Array.isArray(value)) {\n this.initialValue = [...value];\n selectOptions.unshift({\n label: I18n.t(ConfigGeneric.DIFFERENT_LABEL),\n value: ConfigGeneric.DIFFERENT_VALUE,\n });\n this.setState({ value: ConfigGeneric.DIFFERENT_VALUE, selectOptions });\n } else {\n this.setState({ value, selectOptions });\n }\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const selectOptions = (this.state.selectOptions || []).filter(item => {\n // if optgroup or no hidden function\n if (!item.hidden) {\n return true;\n }\n\n if (this.props.custom) {\n return !this.executeCustom(\n item.hidden,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n );\n }\n return !this.execute(\n item.hidden,\n this.props.schema.default,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n );\n });\n\n const item = selectOptions.find(it => it.value == this.state.value); // let \"==\" be and not ===\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n sx={this.props.table !== undefined && styles.noMargin}\n id={`jsonSelect_${this.props.attr}_${this.props.index || this.props.index === 0 ? this.props.index : ''}`}\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() => this.getText(item?.label, this.props.schema.noTranslation)}\n onChange={e => {\n this.setState({ value: e.target.value === '_' ? '' : e.target.value }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.state.value === ConfigGeneric.DIFFERENT_VALUE) {\n mayBePromise = this.onChange(this.props.attr, this.initialValue);\n } else {\n mayBePromise = this.onChange(this.props.attr, this.state.value);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n >\n {selectOptions.map((it, i) => {\n if (it.group) {\n return (\n <ListSubheader key={i}>\n {this.getText(it.label, this.props.schema.noTranslation)}\n </ListSubheader>\n );\n }\n return (\n <MenuItem\n key={i}\n value={it.value}\n style={it.value === ConfigGeneric.DIFFERENT_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(it.label, this.props.schema.noTranslation)}\n </MenuItem>\n );\n })}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigSelect;\n","import React, { type JSX } from 'react';\n\nimport {\n InputLabel,\n MenuItem,\n FormHelperText,\n FormControl,\n Select,\n TextField,\n CircularProgress,\n ListItemText,\n Checkbox,\n Chip,\n Box,\n InputAdornment,\n IconButton,\n} from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSelectSendTo } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n menuPaper: {\n maxHeight: 800,\n },\n};\n\n/*\nto use this option, your adapter must implement listUart message\n\nadapter.on('message', obj => {\n if (obj) {\n switch (obj.command) {\n case 'command':\n if (obj.callback) {\n try {\n const serialport = require('serialport');\n if (serialport) {\n // read all found serial ports\n serialport.list()\n .then(ports => {\n adapter.log.info('List of port: ' + JSON.stringify(ports));\n adapter.sendTo(obj.from, obj.command, ports.map(item =>\n ({label: item.path, value: item.path})), obj.callback);\n })\n .catch(e => {\n adapter.sendTo(obj.from, obj.command, [], obj.callback);\n adapter.log.error(e)\n });\n } else {\n adapter.log.warn('Module serialport is not available');\n adapter.sendTo(obj.from, obj.command, [{label: 'Not available', value: ''}], obj.callback);\n }\n } catch (e) {\n adapter.sendTo(obj.from, obj.command, [{label: 'Not available', value: ''}], obj.callback);\n }\n }\n\n break;\n }\n }\n});\n */\n\ninterface ConfigSelectSendToProps extends ConfigGenericProps {\n schema: ConfigItemSelectSendTo;\n}\n\ninterface ConfigSelectSendToState extends ConfigGenericState {\n list?: { label: string; value: string; hidden?: boolean }[];\n running?: boolean;\n}\n\nclass ConfigSelectSendTo extends ConfigGeneric<ConfigSelectSendToProps, ConfigSelectSendToState> {\n private initialized = false;\n\n private _context: string | undefined;\n\n askInstance(): void {\n if (this.props.alive) {\n let data: Record<string, any> | undefined = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = this.getPattern(this.props.schema.jsonData);\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n this.setState({ running: true }, () => {\n void this.props.socket\n .sendTo(\n `${this.props.adapterName}.${this.props.instance}`,\n this.props.schema.command || 'send',\n data,\n )\n .then(list => this.setState({ list, running: false }))\n .catch(e => {\n console.error(`Cannot send command: ${e}`);\n });\n });\n } else {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n this.setState({ value, running: false });\n }\n }\n\n getContext(): string {\n const context: Record<string, any> = {};\n\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (context[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n\n return JSON.stringify(context);\n }\n\n _getValue(): string | string[] {\n let value =\n this.state.value === null || this.state.value === undefined\n ? ConfigGeneric.getValue(this.props.data, this.props.attr)\n : this.state.value;\n\n if (this.props.schema.multiple) {\n if (typeof value === 'string') {\n value = [value];\n } else if (value === null || value === undefined) {\n value = [];\n }\n }\n\n return value;\n }\n\n renderItem(error: unknown, disabled: boolean /* , defaultValue */): JSX.Element | string {\n if (this.props.alive) {\n const context = this.getContext();\n if (context !== this._context || !this.initialized) {\n this._context = context;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n const value = this._getValue();\n\n if (!this.props.alive || (!this.state.running && !this.state.list?.length)) {\n if (this.props.schema.multiple || this.props.schema.manual === false) {\n return I18n.t('ra_Cannot retrieve options, as instance is offline');\n }\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={value}\n error={!!error}\n disabled={!!disabled}\n onChange={e => {\n const value_ = e.target.value;\n this.setState({ value: value_ }, () => this.onChange(this.props.attr, (value_ || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n slotProps={{\n input: {\n endAdornment:\n this.state.value && !this.props.schema.noClearButton ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() =>\n this.setState({ value: '' }, () => this.onChange(this.props.attr, ''))\n }\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n );\n }\n\n if (this.state.running) {\n return <CircularProgress size=\"24\" />;\n }\n\n const selectOptions = this.state.list.filter(item => {\n if (!item.hidden) {\n return true;\n }\n if (this.props.custom) {\n return !this.executeCustom(\n item.hidden,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n );\n }\n return !this.execute(\n item.hidden,\n this.props.schema.default,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n );\n });\n\n const item = selectOptions.find(it => it.value === value);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n multiple={this.props.schema.multiple}\n disabled={!!disabled}\n // MenuProps={this.props.schema.multiple ? { classes: { paper: this.props.classes.menuPaper } } : undefined}\n sx={{\n '&.MuiSelect-paper': this.props.schema.multiple ? styles.menuPaper : undefined,\n }}\n value={value}\n renderValue={(val: string | string[]) =>\n this.props.schema.multiple ? (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {(val as string[]).map((v: string) => {\n const it = selectOptions.find(_item => _item.value === v);\n if (it || this.props.schema.showAllValues !== false) {\n const label = it?.label || v;\n return (\n <Chip\n key={v}\n label={label}\n />\n );\n }\n return null;\n })}\n </Box>\n ) : (\n item?.label || val\n )\n }\n onChange={e => {\n const mayBePromise = this.onChange(this.props.attr, e.target.value);\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n >\n {selectOptions.map((it, i) => (\n <MenuItem\n key={i}\n value={it.value}\n >\n {this.props.schema.multiple ? (\n <Checkbox\n checked={value.includes(it.value)}\n onClick={() => {\n const _value = JSON.parse(JSON.stringify(this._getValue()));\n const pos = value.indexOf(it.value);\n if (pos !== -1) {\n _value.splice(pos, 1);\n } else {\n _value.push(it.value);\n _value.sort();\n }\n this.setState({ value: _value }, () => this.onChange(this.props.attr, _value));\n }}\n />\n ) : null}\n <ListItemText primary={it.label} />\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigSelectSendTo;\n","import React, { type JSX } from 'react';\n\nimport { Button, CircularProgress } from '@mui/material';\n\nimport { Warning as IconWarning, Error as IconError, Info as IconInfo } from '@mui/icons-material';\n\nimport {\n Confirm as DialogConfirm,\n Error as DialogError,\n Message as DialogMessage,\n I18n,\n} from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSendTo } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n};\n\nfunction ip2int(ip: string): number {\n return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;\n}\n\n// copied from iobroker.admin/src-rx/src/Utils.js\nfunction findNetworkAddressOfHost(obj: Record<string, any>, localIp: string): string {\n const networkInterfaces = obj?.native?.hardware?.networkInterfaces;\n if (!networkInterfaces) {\n return null;\n }\n\n let hostIp: string | undefined;\n\n // check ipv4 addresses\n Object.keys(networkInterfaces).forEach(inter =>\n networkInterfaces[inter].forEach((ip: Record<string, any>) => {\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n // if ip4 and not docker or wsl\n if (\n ip.family === 'IPv4' &&\n !ip.address.startsWith('172') &&\n (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/))\n ) {\n // if DNS name\n hostIp = ip.address;\n } else if (!hostIp) {\n if (\n ip.family === 'IPv4' &&\n localIp.includes('.') &&\n (ip2int(localIp) & ip2int(ip.netmask)) === (ip2int(ip.address) & ip2int(ip.netmask))\n ) {\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }),\n );\n\n // check ipv6 addresses\n if (!hostIp) {\n Object.keys(networkInterfaces).forEach(inter =>\n networkInterfaces[inter].forEach((ip: Record<string, any>) => {\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (\n ip.family === 'IPv6' &&\n (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/))\n ) {\n // if DNS name\n hostIp = ip.address;\n } else if (!hostIp) {\n if (\n ip.family === 'IPv4' &&\n localIp.includes('.') &&\n (ip2int(localIp) & ip2int(ip.netmask)) === (ip2int(ip.address) & ip2int(ip.netmask))\n ) {\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }),\n );\n }\n\n if (!hostIp) {\n Object.keys(networkInterfaces).forEach(inter => {\n networkInterfaces[inter].forEach((ip: Record<string, any>) => {\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) {\n // if DNS name\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n });\n });\n }\n\n if (!hostIp) {\n Object.keys(networkInterfaces).forEach(inter => {\n networkInterfaces[inter].forEach((ip: Record<string, any>) => {\n if (ip.internal) {\n return;\n }\n hostIp = ip.address;\n });\n });\n }\n\n return hostIp;\n}\n\ninterface ConfigSendToProps extends ConfigGenericProps {\n schema: ConfigItemSendTo;\n}\n\ninterface ConfigSendToState extends ConfigGenericState {\n _error: string;\n _message: string;\n hostname: string;\n running?: boolean;\n}\n\nclass ConfigSendto extends ConfigGeneric<ConfigSendToProps, ConfigSendToState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n\n let hostname = window.location.hostname;\n if (this.props.schema.openUrl) {\n // read admin host\n const adminInstance = await this.props.socket.getCurrentInstance();\n const instanceObj = await this.props.socket.getObject(\n `system.adapter.${adminInstance}` as ioBroker.ObjectIDs.Instance,\n );\n\n if (instanceObj) {\n const hostObj = await this.props.socket.getObject(`system.host.${instanceObj?.common?.host}`);\n if (hostObj) {\n const ip = findNetworkAddressOfHost(hostObj, window.location.hostname);\n if (ip) {\n hostname = `${ip}:${window.location.port}`;\n } else {\n console.warn(\n `Cannot find suitable IP in host ${instanceObj.common.host} for ${instanceObj._id}`,\n );\n return;\n }\n }\n }\n }\n\n await new Promise<void>(resolve => {\n this.setState({ _error: '', _message: '', hostname }, resolve);\n });\n\n if (this.props.schema.onLoaded) {\n this._onClick();\n }\n }\n\n renderErrorDialog(): JSX.Element | null {\n if (this.state._error) {\n return (\n <DialogError\n text={this.state._error}\n onClose={() => this.setState({ _error: '' })}\n />\n );\n }\n return null;\n }\n\n renderMessageDialog(): JSX.Element | null {\n if (this.state._message) {\n return (\n <DialogMessage\n text={this.state._message}\n onClose={() => this.setState({ _message: '' })}\n />\n );\n }\n return null;\n }\n\n _onClick(): void {\n this.props.onCommandRunning(true);\n this.setState({ running: true });\n\n const _origin = `${window.location.protocol}//${window.location.host}${window.location.pathname.replace(/\\/index\\.html$/, '')}`;\n const _originIp = `${window.location.protocol}//${this.state.hostname.split(':').length > 3 ? `[${this.state.hostname}]` : this.state.hostname}${window.location.pathname.replace(/\\/index\\.html$/, '')}`;\n\n let data: Record<string, any> = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr = this.getPattern(this.props.schema.jsonData, {\n _origin,\n _originIp,\n ...this.props.data,\n });\n\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n }\n if (data === undefined) {\n data = null;\n }\n if (this.props.schema.openUrl && !data) {\n data = {\n _origin,\n _originIp,\n };\n }\n let timeout: ReturnType<typeof setTimeout> | undefined;\n if (this.props.schema.timeout) {\n timeout = setTimeout(\n () => {\n this.props.onCommandRunning(false);\n this.setState({ _error: I18n.t('ra_Request timed out'), running: false });\n },\n parseInt(this.props.schema.timeout as any as string, 10) || 10000,\n );\n }\n\n void this.props.socket\n .sendTo(`${this.props.adapterName}.${this.props.instance}`, this.props.schema.command || 'send', data)\n .then(async (response: Record<string, any>) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n if (response?.error) {\n if (this.props.schema.error && this.props.schema.error[response.error]) {\n let error = this.getText(this.props.schema.error[response.error]);\n if (response.args) {\n response.args.forEach((arg: string) => (error = error.replace('%s', arg)));\n }\n this.setState({ _error: error });\n } else {\n this.setState({ _error: response.error ? I18n.t(response.error) : I18n.t('ra_Error') });\n }\n } else {\n if (response?.command) {\n // If backend requested to refresh the config\n if (this.props.onBackEndCommand) {\n this.props.onBackEndCommand(response.command);\n }\n return;\n }\n if (response?.reloadBrowser && this.props.schema.reloadBrowser) {\n window.location.reload();\n } else if (response?.openUrl && this.props.schema.openUrl) {\n window.open(response.openUrl, response.window || this.props.schema.window || '_blank');\n } else if (\n response?.result &&\n this.props.schema.result &&\n this.props.schema.result[response.result]\n ) {\n let text = this.getText(this.props.schema.result[response.result]);\n if (response.args) {\n response.args.forEach((arg: string) => (text = text.replace('%s', arg)));\n }\n window.alert(text);\n }\n\n if (response?.native && this.props.schema.useNative) {\n for (const [attr, val] of Object.entries(response.native)) {\n await this.onChangeAsync(attr, val);\n }\n\n setTimeout(() => this.props.forceUpdate(Object.keys(response.native), this.props.data), 300);\n } else if (response?.result) {\n window.alert(\n typeof response.result === 'object' ? JSON.stringify(response.result) : response.result,\n );\n } else {\n window.alert(I18n.t('ra_Ok'));\n }\n\n if (response?.saveConfig) {\n this.props.onChange(null, null, null, true);\n }\n }\n })\n .catch((e: any) => {\n if (this.props.schema.error && this.props.schema.error[e.toString()]) {\n this.setState({ _error: this.getText(this.props.schema.error[e.toString()]) });\n } else {\n this.setState({ _error: I18n.t(e.toString()) || I18n.t('ra_Error') });\n }\n })\n .then(() => {\n this.props.onCommandRunning(false);\n this.setState({ running: false });\n });\n }\n\n renderConfirmDialog(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\n const confirm = this.state.confirmData || this.props.schema.confirm;\n let icon = null;\n if (confirm.type === 'warning') {\n icon = <IconWarning />;\n } else if (confirm.type === 'error') {\n icon = <IconError />;\n } else if (confirm.type === 'info') {\n icon = <IconInfo />;\n }\n\n return (\n <DialogConfirm\n title={this.getText(confirm.title) || I18n.t('ra_Please confirm')}\n text={this.getText(confirm.text)}\n ok={this.getText(confirm.ok) || I18n.t('ra_Ok')}\n cancel={this.getText(confirm.cancel) || I18n.t('ra_Cancel')}\n icon={icon || undefined}\n onClose={isOk => this.setState({ confirmDialog: false }, () => isOk && this._onClick())}\n />\n );\n }\n\n renderItem(error: Error | undefined, disabled: boolean): JSX.Element {\n const icon = this.getIcon();\n\n return (\n <div style={styles.fullWidth}>\n <Button\n variant={this.props.schema.variant || undefined}\n color={this.props.schema.color || 'grey'}\n style={{ ...styles.fullWidth, ...(this.props.schema.controlStyle || undefined) }}\n disabled={disabled || !this.props.alive}\n startIcon={icon}\n title={\n this.props.alive\n ? this.getText(this.props.schema.title) || ''\n : I18n.t('ra_Instance is not alive')\n }\n onClick={() => {\n if (this.props.schema.confirm) {\n this.setState({ confirmDialog: true });\n } else {\n this._onClick();\n }\n }}\n >\n {this.props.schema.showProcess && this.state.running ? (\n <CircularProgress\n size={20}\n style={{ marginRight: 8 }}\n />\n ) : null}\n {this.getText(this.props.schema.label, this.props.schema.noTranslation)}\n </Button>\n {this.renderErrorDialog()}\n {this.renderMessageDialog()}\n </div>\n );\n }\n}\n\nexport default ConfigSendto;\n","import React, { type JSX } from 'react';\n\nimport { Button } from '@mui/material';\n\nimport { Warning as IconWarning, Error as IconError, Info as IconInfo } from '@mui/icons-material';\n\nimport { Confirm as ConfirmDialog, Icon, I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemSetState } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4,\n },\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemSetState;\n}\n\nclass ConfigSetState extends ConfigGeneric<ConfigInstanceSelectProps, ConfigGenericState> {\n async _onClick(): Promise<void> {\n let val = this.props.schema.val;\n if (typeof val === 'string' && val.includes('${')) {\n val = this.getPattern(val);\n const obj = await this.props.socket.getObject(this.props.schema.id);\n if (obj?.common?.type === 'number') {\n val = parseFloat(val);\n } else if (obj?.common?.type === 'boolean') {\n // @ts-expect-error val could be anything\n val = val === 'true' || val === true || val === '1' || val === 1;\n }\n }\n\n const id = (this.props.schema.id || '').replace(/%INSTANCE%/g, (this.props.instance || 0).toString());\n\n try {\n await this.props.socket.setState(id, { val, ack: !!this.props.schema.ack });\n if (this.props.schema.okText) {\n window.alert(this.getText(this.props.schema.okText));\n }\n } catch (e) {\n if (this.props.schema.error && this.props.schema.error[e.toString()]) {\n window.alert(this.getText(this.props.schema.error[e.toString()]));\n } else {\n window.alert(I18n.t(e.toString()) || I18n.t('ra_Error'));\n }\n }\n }\n\n renderConfirmDialog(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\n const confirm = this.state.confirmData || this.props.schema.confirm;\n let icon = null;\n if (confirm.type === 'warning') {\n icon = <IconWarning />;\n } else if (confirm.type === 'error') {\n icon = <IconError />;\n } else if (confirm.type === 'info') {\n icon = <IconInfo />;\n }\n\n return (\n <ConfirmDialog\n title={this.getText(confirm.title) || I18n.t('ra_Please confirm')}\n text={this.getText(confirm.text)}\n ok={this.getText(confirm.ok) || I18n.t('ra_Ok')}\n cancel={this.getText(confirm.cancel) || I18n.t('ra_Cancel')}\n icon={icon}\n onClose={isOk => this.setState({ confirmDialog: false }, () => isOk && this._onClick())}\n />\n );\n }\n\n renderItem(_error: string, disabled: boolean /* , defaultValue */): JSX.Element | null {\n return (\n <Button\n variant={this.props.schema.variant || undefined}\n color={this.props.schema.color || 'grey'}\n style={styles.fullWidth}\n disabled={disabled}\n onClick={async () => {\n if (this.props.schema.confirm) {\n this.setState({ confirmDialog: true });\n } else {\n await this._onClick();\n }\n }}\n >\n {this.props.schema.icon ? (\n <Icon\n src={this.props.schema.icon}\n style={styles.icon}\n />\n ) : null}\n {this.getText(this.props.schema.label, this.props.schema.noTranslation)}\n </Button>\n );\n }\n}\n\nexport default ConfigSetState;\n","import React, { type JSX } from 'react';\n\nimport { Box, Typography, Slider } from '@mui/material';\n\nimport type { ConfigItemSlider } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n slider: {\n marginLeft: 10,\n marginRight: 10,\n width: 'calc(100% - 20px)',\n },\n};\n\ninterface ConfigSliderProps extends ConfigGenericProps {\n schema: ConfigItemSlider;\n}\n\ninterface ConfigSliderState extends ConfigGenericState {\n _value: number;\n}\n\nclass ConfigSlider extends ConfigGeneric<ConfigSliderProps, ConfigSliderState> {\n componentDidMount(): void {\n super.componentDidMount();\n const _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ _value });\n }\n\n static getDerivedStateFromProps(\n props: ConfigSliderProps,\n state: ConfigSliderState,\n ): Partial<ConfigSliderState> | null {\n if (\n (props.schema.min !== undefined && props.schema.min < 0) ||\n (props.schema.max !== undefined && props.schema.max < 0)\n ) {\n return null;\n }\n const _value = ConfigGeneric.getValue(props.data, props.attr);\n if (\n _value === null ||\n _value === undefined ||\n _value.toString() !== parseFloat(state._value as any as string).toString()\n ) {\n return { _value };\n }\n\n return null;\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const min = this.props.schema.min || 0;\n const max = this.props.schema.max || 100;\n const unit = this.props.schema.unit || '';\n\n const marks = [\n { value: min, label: min + unit },\n { value: max, label: max + unit },\n ];\n\n return (\n <Box style={styles.fullWidth}>\n {this.props.schema.label ? (\n <Typography gutterBottom>{this.getText(this.props.schema.label)}</Typography>\n ) : null}\n <Slider\n style={styles.slider}\n value={this.state._value}\n getAriaValueText={value => value + unit}\n step={this.props.schema.step || (max - min) / 100}\n valueLabelDisplay=\"auto\"\n marks={marks}\n min={min}\n max={max}\n disabled={!!disabled}\n onChange={e => {\n const _value = (e.target as HTMLInputElement).value as any as number;\n this.setState({ _value }, () => this.onChange(this.props.attr, _value));\n }}\n />\n {this.props.schema.help ? (\n <Typography>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </Typography>\n ) : null}\n </Box>\n );\n }\n}\n\nexport default ConfigSlider;\n","import React, { type JSX } from 'react';\n\nimport {\n Add,\n Delete,\n Edit,\n Refresh,\n Search,\n Wifi,\n WifiOff,\n Visibility,\n LinkOff,\n Link as LinkIcon,\n NotListedLocation,\n PlayArrow,\n Stop,\n FastForward,\n FastRewind,\n Pause,\n Lightbulb,\n Power,\n Fluorescent,\n WbIncandescent,\n Settings,\n Group,\n Person,\n QrCode,\n} from '@mui/icons-material';\n\nexport default function getIconByName(name: string, style?: React.CSSProperties): JSX.Element | null {\n if (name === 'edit' || name === 'rename') {\n return <Edit style={style} />;\n }\n if (name === 'delete') {\n return <Delete style={style} />;\n }\n if (name === 'refresh') {\n return <Refresh style={style} />;\n }\n if (name === 'newDevice' || name === 'new' || name === 'add') {\n return <Add style={style} />;\n }\n if (name === 'discover' || name === 'search') {\n return <Search style={style} />;\n }\n if (name === 'unpairDevice' || name === 'unpair') {\n return <LinkOff style={style} />;\n }\n if (name === 'pairDevice' || name === 'pair') {\n return <LinkIcon style={style} />;\n }\n if (name === 'identify') {\n return <NotListedLocation style={style} />;\n }\n if (name === 'play') {\n return <PlayArrow style={style} />;\n }\n if (name === 'stop') {\n return <Stop style={style} />;\n }\n if (name === 'pause') {\n return <Pause style={style} />;\n }\n if (name === 'forward' || name === 'next') {\n return <FastForward style={style} />;\n }\n if (name === 'rewind' || name === 'previous') {\n return <FastRewind style={style} />;\n }\n if (name === 'lamp' || name === 'light') {\n return <Lightbulb style={style} />;\n }\n if (name === 'backlight') {\n return <Fluorescent style={style} />;\n }\n if (name === 'dimmer') {\n return <WbIncandescent style={style} />;\n }\n if (name === 'socket') {\n return <Power style={style} />;\n }\n if (name === 'settings') {\n return <Settings style={style} />;\n }\n if (name === 'users' || name === 'group') {\n return <Group style={style} />;\n }\n if (name === 'user') {\n return <Person style={style} />;\n }\n if (name === 'qrcode') {\n return <QrCode style={style} />;\n }\n if (name === 'connection') {\n return <Wifi style={style} />;\n }\n if (name === 'no-connection') {\n return <WifiOff style={style} />;\n }\n if (name === 'visible') {\n return <Visibility style={style} />;\n }\n return null;\n}\n","import React, { type JSX } from 'react';\n\nimport { TextField, IconButton, Button, Switch, Slider } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemState } from '#JC/types';\nimport getIconByName from './Icons';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigStateProps extends ConfigGenericProps {\n schema: ConfigItemState;\n}\n\ninterface ConfigStateState extends ConfigGenericState {\n stateValue?: string | number | boolean | null;\n controlType?: string;\n obj?: ioBroker.Object | null;\n}\n\nclass ConfigState extends ConfigGeneric<ConfigStateProps, ConfigStateState> {\n controlTimeout: ReturnType<typeof setTimeout> | null = null;\n\n delayedUpdate: { timer: ReturnType<typeof setTimeout> | null; value: string | boolean | number | null } = {\n timer: null,\n value: null,\n };\n\n getObjectID(): string {\n return `${this.props.schema.system ? 'system.adapter.' : ''}${this.props.adapterName}.${this.props.instance}.${this.props.schema.oid}`;\n }\n\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n const obj: ioBroker.StateObject = (await this.props.socket.getObject(\n this.getObjectID(),\n )) as ioBroker.StateObject;\n const controlType = this.props.schema.control || this.detectType(obj);\n\n const state = await this.props.socket.getState(this.getObjectID());\n\n this.setState({ stateValue: state ? state.val : null, controlType, obj }, async () => {\n await this.props.socket.subscribeState(this.getObjectID(), this.onStateChanged);\n });\n }\n\n componentWillUnmount(): void {\n super.componentWillUnmount();\n this.props.socket.unsubscribeState(this.getObjectID(), this.onStateChanged);\n if (this.delayedUpdate.timer) {\n clearTimeout(this.delayedUpdate.timer);\n this.delayedUpdate.timer = null;\n }\n\n if (this.controlTimeout) {\n clearTimeout(this.controlTimeout);\n this.controlTimeout = null;\n this.props.socket\n .setState(this.getObjectID(), this.state.stateValue, false)\n .catch(e => console.error(`Cannot control value: ${e}`));\n }\n }\n\n onStateChanged = (_id: string, state: ioBroker.State | null | undefined): void => {\n let val = state ? state.val : null;\n if (this.state.controlType === 'button' || this.state.controlType === 'switch') {\n val = !!val;\n if (this.state.stateValue !== val) {\n this.setState({ stateValue: val });\n }\n } else if (val !== null && (this.state.controlType === 'slider' || this.state.controlType === 'number')) {\n val = parseFloat(val as unknown as string);\n console.log(`${Date.now()} Received new value: ${val}`);\n if (val !== this.state.stateValue) {\n if (this.delayedUpdate.timer) {\n clearTimeout(this.delayedUpdate.timer);\n this.delayedUpdate.timer = null;\n }\n this.delayedUpdate.value = val;\n this.delayedUpdate.timer = setTimeout(() => {\n this.setState({ stateValue: this.delayedUpdate.value });\n }, 500);\n } else if (this.delayedUpdate.timer) {\n clearTimeout(this.delayedUpdate.timer);\n this.delayedUpdate.timer = null;\n }\n } else if (this.state.stateValue.toString() !== val.toString()) {\n this.setState({ stateValue: val });\n }\n };\n\n detectType(obj: ioBroker.StateObject): 'button' | 'switch' | 'slider' | 'input' | 'text' {\n obj = obj || ({} as ioBroker.StateObject);\n obj.common = obj.common || ({} as ioBroker.StateCommon);\n\n // read object\n if (obj.common.type === 'boolean') {\n if (this.props.schema.controlled !== false) {\n if (obj.common.read === false || this.props.schema.controlled === true) {\n return 'button';\n }\n if (obj.common.write || this.props.schema.controlled === true) {\n return 'switch';\n }\n }\n\n return 'text';\n }\n\n if (obj.common.type === 'number' && this.props.schema.controlled !== false) {\n if (obj.common.write || this.props.schema.controlled === true) {\n if (obj.common.max !== undefined) {\n return 'slider';\n }\n return 'input';\n }\n return 'text';\n }\n\n if (obj.common.write && this.props.schema.controlled !== false) {\n return 'input';\n }\n\n return 'text';\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n if (!this.state.obj) {\n return null;\n }\n\n let content: JSX.Element;\n\n if (this.state.controlType === 'button') {\n let icon: JSX.Element | null = null;\n if (this.props.schema.falseImage) {\n icon = getIconByName(this.props.schema.falseImage);\n }\n\n const text =\n this.getText(this.props.schema.falseText, this.props.schema.noTranslation) ||\n this.getText(this.props.schema.label, this.props.schema.noTranslation);\n if (!text && icon) {\n content = (\n <IconButton\n style={this.props.schema.falseTextStyle}\n disabled={!!this.props.schema.readOnly}\n onClick={async () => {\n if (this.props.schema.confirm) {\n this.setState({\n confirmDialog: true,\n confirmCallback: async (result: boolean) => {\n if (result) {\n await this.props.socket.setState(this.getObjectID(), true, false);\n }\n },\n });\n } else {\n await this.props.socket.setState(this.getObjectID(), true, false);\n }\n }}\n >\n {icon}\n </IconButton>\n );\n } else {\n content = (\n <Button\n variant={this.props.schema.variant || 'contained'}\n startIcon={icon}\n style={this.props.schema.falseTextStyle}\n disabled={!!this.props.schema.readOnly}\n onClick={async () => {\n if (this.props.schema.confirm) {\n this.setState({\n confirmDialog: true,\n confirmCallback: async (result: boolean) => {\n if (result) {\n await this.props.socket.setState(this.getObjectID(), true, false);\n }\n },\n });\n } else {\n await this.props.socket.setState(this.getObjectID(), true, false);\n }\n }}\n >\n {text || this.getObjectID().split('.').pop()}\n </Button>\n );\n }\n } else if (this.state.controlType === 'switch') {\n let iconFalse: JSX.Element | null = null;\n const textFalse = this.getText(this.props.schema.falseText, this.props.schema.noTranslation);\n if (this.props.schema.falseImage) {\n iconFalse = getIconByName(this.props.schema.falseImage, textFalse ? { marginLeft: 8 } : undefined);\n }\n let iconTrue: JSX.Element | null = null;\n const textTrue = this.getText(this.props.schema.trueText, this.props.schema.noTranslation);\n if (this.props.schema.trueImage) {\n iconTrue = getIconByName(this.props.schema.trueImage, textTrue ? { marginRight: 8 } : undefined);\n }\n\n content = (\n <Switch\n checked={!!this.state.stateValue}\n disabled={!!this.props.schema.readOnly}\n onChange={async () => {\n if (this.props.schema.confirm) {\n this.setState({\n confirmDialog: true,\n confirmCallback: async (result: boolean) => {\n if (result) {\n await this.props.socket.setState(\n this.getObjectID(),\n !this.state.stateValue,\n false,\n );\n }\n },\n });\n } else {\n await this.props.socket.setState(this.getObjectID(), !this.state.stateValue, false);\n }\n }}\n />\n );\n\n if (textFalse || iconFalse || textTrue || iconTrue) {\n content = (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: 14 }}>\n <span style={this.props.schema.falseTextStyle}>\n {textFalse}\n {iconFalse}\n </span>\n {content}\n <span style={this.props.schema.trueTextStyle}>\n {iconTrue}\n {textTrue}\n </span>\n </div>\n );\n }\n\n const label = this.getText(this.props.schema.label, this.props.schema.noTranslation);\n if (label) {\n content = (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '1rem' }}>\n <span style={{ marginRight: 8 }}>{label}</span>\n {content}\n </div>\n );\n }\n } else if (this.state.controlType === 'slider') {\n let iconFalse: JSX.Element | null = null;\n const textFalse = this.getText(this.props.schema.falseText, this.props.schema.noTranslation);\n if (this.props.schema.falseImage) {\n iconFalse = getIconByName(this.props.schema.falseImage, textFalse ? { marginLeft: 8 } : undefined);\n }\n let iconTrue: JSX.Element | null = null;\n const textTrue = this.getText(this.props.schema.trueText, this.props.schema.noTranslation);\n if (this.props.schema.trueImage) {\n iconTrue = getIconByName(this.props.schema.trueImage, textTrue ? { marginRight: 8 } : undefined);\n }\n\n const min = this.props.schema.min === undefined ? this.state.obj.common.min || 0 : this.props.schema.min;\n const max =\n this.props.schema.max === undefined\n ? this.state.obj.common.max === undefined\n ? 100\n : this.state.obj.common.max\n : this.props.schema.max;\n const step =\n this.props.schema.step === undefined ? this.state.obj.common.step || 1 : this.props.schema.step;\n\n content = (\n <Slider\n style={{ width: '100%', flexGrow: 1 }}\n min={min}\n max={max}\n disabled={!!this.props.schema.readOnly}\n step={step}\n value={this.state.stateValue as number}\n valueLabelDisplay=\"auto\"\n valueLabelFormat={(value: number) =>\n `${value}${this.getText(this.props.schema.unit, this.props.schema.noTranslation) || this.state.obj.common.unit || ''}`\n }\n onChange={(_e: Event, value: number) => {\n this.setState({ stateValue: value }, (): void => {\n if (this.controlTimeout) {\n clearTimeout(this.controlTimeout);\n }\n this.controlTimeout = setTimeout(async () => {\n console.log(`${Date.now()} Send new value: ${this.state.stateValue}`);\n this.controlTimeout = null;\n await this.props.socket.setState(this.getObjectID(), this.state.stateValue, false);\n }, this.props.schema.controlDelay || 0);\n });\n }}\n />\n );\n\n if (textFalse || iconFalse || textTrue || iconTrue) {\n content = (\n <div\n style={{\n display: 'flex',\n width: '100%',\n flexGrow: 1,\n alignItems: 'center',\n }}\n >\n <span style={{ marginRight: 16, ...this.props.schema.falseTextStyle }}>\n {textFalse}\n {iconFalse}\n </span>\n {content}\n <span style={{ marginLeft: 16, ...this.props.schema.trueTextStyle }}>\n {iconTrue}\n {textTrue}\n </span>\n </div>\n );\n }\n const label = this.getText(this.props.schema.label, this.props.schema.noTranslation);\n if (label) {\n content = (\n <div style={{ display: 'flex', width: '100%', alignItems: 'center' }}>\n <span style={{ whiteSpace: 'nowrap', marginRight: 8, fontSize: '1rem' }}>{label}</span>\n {content}\n </div>\n );\n }\n } else if (this.state.controlType === 'input') {\n content = (\n <TextField\n style={{ width: '100%' }}\n value={this.state.stateValue}\n variant=\"standard\"\n slotProps={{\n input: {\n endAdornment:\n this.getText(this.props.schema.unit, this.props.schema.noTranslation) ||\n this.state.obj.common.unit ||\n undefined,\n },\n htmlInput: {\n readOnly: !!this.props.schema.readOnly,\n },\n }}\n onChange={e => {\n this.setState({ stateValue: e.target.value }, (): void => {\n if (this.controlTimeout) {\n clearTimeout(this.controlTimeout);\n }\n this.controlTimeout = setTimeout(async () => {\n this.controlTimeout = null;\n await this.props.socket.setState(this.getObjectID(), this.state.stateValue, false);\n }, this.props.schema.controlDelay || 0);\n });\n }}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n } else if (this.state.obj.common.type === 'number') {\n const min = this.props.schema.min === undefined ? this.state.obj.common.min || 0 : this.props.schema.min;\n const max =\n this.props.schema.max === undefined\n ? this.state.obj.common.max === undefined\n ? 100\n : this.state.obj.common.max\n : this.props.schema.max;\n const step =\n this.props.schema.step === undefined ? this.state.obj.common.step || 1 : this.props.schema.step;\n\n content = (\n <TextField\n variant=\"standard\"\n style={{ width: '100%' }}\n value={this.state.stateValue}\n type=\"number\"\n slotProps={{\n htmlInput: { min, max, step, readOnly: !!this.props.schema.readOnly },\n input: {\n endAdornment:\n this.getText(this.props.schema.unit, this.props.schema.noTranslation) ||\n this.state.obj.common.unit ||\n undefined,\n },\n }}\n onChange={e => {\n this.setState({ stateValue: e.target.value }, (): void => {\n if (this.controlTimeout) {\n clearTimeout(this.controlTimeout);\n }\n this.controlTimeout = setTimeout(async () => {\n this.controlTimeout = null;\n const val = parseFloat(this.state.stateValue as unknown as string);\n await this.props.socket.setState(this.getObjectID(), val, false);\n }, this.props.schema.controlDelay || 0);\n });\n }}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n } else if (this.state.obj.common.type === 'boolean') {\n let icon: JSX.Element | null = null;\n let text: string;\n let style: React.CSSProperties | undefined;\n if (!this.state.stateValue) {\n text = this.getText(this.props.schema.falseText, this.props.schema.noTranslation);\n if (this.props.schema.falseImage) {\n icon = getIconByName(this.props.schema.falseImage, text ? { marginLeft: 8 } : undefined);\n }\n style = this.props.schema.falseTextStyle;\n } else {\n text = this.getText(this.props.schema.trueText, this.props.schema.noTranslation);\n if (this.props.schema.trueImage) {\n icon = getIconByName(this.props.schema.falseImage, text ? { marginRight: 8 } : undefined);\n }\n style = this.props.schema.trueTextStyle;\n }\n const label = this.getText(this.props.schema.label, this.props.schema.noTranslation);\n content = (\n <div style={{ fontSize: '1rem', ...style }}>\n {label}\n {label ? <span style={{ marginRight: 8 }}>:</span> : null}\n {icon}\n {text || (this.state.stateValue ? I18n.t('ra_true') : I18n.t('ra_false'))}\n </div>\n );\n } else {\n // text or HTML\n const label = this.getText(this.props.schema.label, this.props.schema.noTranslation);\n const unit =\n this.getText(this.props.schema.unit, this.props.schema.noTranslation) || this.state.obj.common.unit;\n let value;\n if (this.state.controlType === 'html') {\n value = <span dangerouslySetInnerHTML={{ __html: this.state.stateValue as string }} />;\n } else if (this.state.stateValue === null) {\n value = 'null';\n } else if (this.state.stateValue === undefined) {\n value = 'undefined';\n } else {\n value = this.state.stateValue;\n }\n\n content = (\n <div style={{ fontSize: '1rem' }}>\n {label}\n {label ? <span style={{ marginRight: 8 }}>:</span> : null}\n {value}\n {unit ? <span style={{ opacity: 0.7 }}>{unit}</span> : null}\n </div>\n );\n }\n\n return content;\n }\n}\n\nexport default ConfigState;\n","import React, { type JSX } from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemStaticDivider } from '#JC/types';\nimport Utils from '#JC/Utils';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: {\n fullWidth: (theme: IobTheme) => React.CSSProperties;\n primary: (theme: IobTheme) => React.CSSProperties;\n secondary: (theme: IobTheme) => React.CSSProperties;\n} = {\n fullWidth: (theme: IobTheme) => ({\n width: '100%',\n backgroundColor: theme.palette.mode === 'dark' ? '#FFF' : '#000',\n borderStyle: 'hidden',\n }),\n primary: (theme: IobTheme) => ({\n backgroundColor: theme.palette.primary.main,\n }),\n secondary: (theme: IobTheme) => ({\n backgroundColor: theme.palette.secondary.main,\n }),\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemStaticDivider;\n}\n\nclass ConfigStaticDivider extends ConfigGeneric<ConfigInstanceSelectProps, ConfigGenericState> {\n renderItem(): JSX.Element {\n return (\n <Box\n component=\"hr\"\n sx={Utils.getStyle(\n this.props.theme,\n styles.fullWidth,\n this.props.schema.color === 'primary'\n ? styles.primary\n : this.props.schema.color === 'secondary'\n ? styles.secondary\n : {\n backgroundColor:\n this.props.schema.color || (this.props.themeType === 'dark' ? '#333' : '#ddd'),\n },\n {\n height: this.props.schema.color ? this.props.schema.height || 2 : this.props.schema.height || 1,\n },\n )}\n />\n );\n }\n}\n\nexport default ConfigStaticDivider;\n","import React, { type JSX } from 'react';\n\nimport { Box } from '@mui/material';\n\nimport type { IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemStaticHeader } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n header: (theme: IobTheme) => ({\n width: '100%',\n background: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n padding: '4px !important',\n borderRadius: '3px',\n marginBlockEnd: 0,\n marginBlockStart: 0,\n }),\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemStaticHeader;\n}\n\nclass ConfigStaticHeader extends ConfigGeneric<ConfigInstanceSelectProps, ConfigGenericState> {\n renderItem(/* error: string, disabled: boolean, defaultValue */): JSX.Element {\n switch ((this.props.schema.size || 5).toString()) {\n case '1':\n return (\n <Box\n component=\"h1\"\n sx={styles.header}\n >\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </Box>\n );\n\n case '2':\n return (\n <Box\n component=\"h2\"\n sx={styles.header}\n >\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </Box>\n );\n\n case '3':\n return (\n <Box\n component=\"h3\"\n sx={styles.header}\n >\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </Box>\n );\n\n case '4':\n return (\n <Box\n component=\"h4\"\n sx={styles.header}\n >\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </Box>\n );\n\n case '5':\n default:\n return (\n <Box\n component=\"h5\"\n sx={styles.header}\n >\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </Box>\n );\n }\n }\n}\n\nexport default ConfigStaticHeader;\n","import React, { type JSX } from 'react';\n\nimport type { ConfigItemStaticImage } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemStaticImage;\n}\n\nclass ConfigStaticImage extends ConfigGeneric<ConfigInstanceSelectProps, ConfigGenericState> {\n renderItem(/* error: string, disabled: boolean, defaultValue */): JSX.Element {\n let src = this.props.schema.src;\n if (\n src &&\n !src.startsWith('.') &&\n !src.startsWith('http') &&\n !src.startsWith(`adapter/${this.props.adapterName}/`) &&\n !src.startsWith(`./adapter/${this.props.adapterName}/`)\n ) {\n src = `adapter/${this.props.adapterName}/${src}`;\n }\n\n return (\n <img\n src={src}\n style={{ cursor: this.props.schema.href ? 'pointer' : undefined, width: '100%', height: '100%' }}\n onClick={\n this.props.schema.href\n ? () => this.props.schema.href && window.open(this.props.schema.href, '_blank')\n : null\n }\n alt=\"\"\n />\n );\n }\n}\n\nexport default ConfigStaticImage;\n","import React, { type JSX } from 'react';\n\nimport { Box, Button } from '@mui/material';\n\nimport { type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemStaticText } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n height: '100%',\n width: '100%',\n },\n link: (theme: IobTheme) => ({\n textDecoration: 'underline',\n color: theme.palette.mode === 'dark' ? '#4dabf5' : '#254e72',\n cursor: 'pointer',\n }),\n};\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction onLink(href: string, target: '_blank' | '_self' | string, instanceId: string): void {\n let _target;\n let url = '';\n if (!href) {\n url = `#tab-instances/config/${instanceId}`;\n _target = target || '_self';\n } else if (href.toString().startsWith('#')) {\n _target = target || '_self';\n url = href;\n } else if (href.toString().startsWith('/')) {\n _target = target || '_self';\n url = href;\n } else if (href.startsWith('http://') || href.startsWith('https://')) {\n _target = target || '_blank';\n url = href;\n } else {\n url = `#tab-instances/config/${instanceId}/${href}`;\n _target = target || '_self';\n }\n if (_target === '_self') {\n // close dialog\n setTimeout(\n (_url: string) => {\n if (_url.startsWith('#')) {\n window.location.hash = _url;\n } else if (_url.startsWith('/')) {\n url = `${window.location.protocol}:${window.location.host}${url}`;\n } else if (_url.startsWith('http://') || _url.startsWith('https://')) {\n window.location.href = _url;\n }\n },\n 100,\n url,\n );\n } else {\n if (url.startsWith('#')) {\n url = `${window.location.protocol}:${window.location.host}${window.location.pathname}${url}`;\n } else if (url.startsWith('/')) {\n url = `${window.location.protocol}:${window.location.host}${url}`;\n }\n\n window.open(url, _target);\n }\n}\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemStaticText;\n}\n\nclass ConfigStaticText extends ConfigGeneric<ConfigInstanceSelectProps, ConfigGenericState> {\n renderItem(_error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (this.props.schema.button) {\n const icon = this.getIcon();\n return (\n <Button\n variant={this.props.schema.variant || undefined}\n color={this.props.schema.color || 'grey'}\n style={{ ...styles.fullWidth, ...(this.props.schema.controlStyle || undefined) }}\n disabled={disabled}\n startIcon={icon}\n onClick={\n this.props.schema.href\n ? () => {\n // calculate one more time just before call\n const href = this.props.schema.href\n ? this.getText(this.props.schema.href, true)\n : null;\n if (href) {\n if (this.props.onBackEndCommand) {\n this.props.onBackEndCommand({\n command: 'link',\n url: href,\n target: this.props.schema.target,\n close: this.props.schema.close,\n });\n } else {\n onLink(\n href,\n this.props.schema.target,\n `${this.props.adapterName}.${this.props.instance}`,\n );\n }\n }\n }\n : null\n }\n >\n {this.getText(this.props.schema.text || this.props.schema.label, this.props.schema.noTranslation)}\n </Button>\n );\n }\n let text: string | JSX.Element | JSX.Element[] = this.getText(\n this.props.schema.text || this.props.schema.label,\n this.props.schema.noTranslation,\n );\n if (text && (text.includes('<a ') || text.includes('<br') || text.includes('<b>') || text.includes('<i>'))) {\n text = Utils.renderTextWithA(text);\n }\n\n return (\n <Box\n component=\"span\"\n style={{ ...(this.props.schema.controlStyle || undefined) }}\n sx={this.props.schema.href ? styles.link : undefined}\n onClick={\n this.props.schema.href\n ? () => {\n // calculate one more time just before call\n const href = this.props.schema.href ? this.getText(this.props.schema.href, true) : null;\n if (href) {\n if (this.props.onBackEndCommand) {\n this.props.onBackEndCommand({\n command: 'link',\n url: href,\n target: this.props.schema.target || '_blank',\n close: this.props.schema.close,\n });\n } else {\n onLink(\n href,\n this.props.schema.target || '_blank',\n `${this.props.adapterName}.${this.props.instance}`,\n );\n }\n }\n }\n : null\n }\n >\n {text}\n </Box>\n );\n }\n}\n\nexport default ConfigStaticText;\n","import React, { createRef, type JSX, type RefObject } from 'react';\nimport Dropzone from 'react-dropzone';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n InputAdornment,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n TextField,\n Toolbar,\n Tooltip,\n Typography,\n FormHelperText,\n} from '@mui/material';\n\nimport {\n Add as AddIcon,\n Delete as DeleteIcon,\n Close as CloseIcon,\n ArrowUpward as UpIcon,\n ArrowDownward as DownIcon,\n FilterAlt as IconFilterOn,\n FilterAltOff as IconFilterOff,\n ContentCopy as CopyContentIcon,\n Download as ExportIcon,\n Warning as ErrorIcon,\n UploadFile as ImportIcon,\n Close as IconClose,\n} from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemTableIndexed, ConfigItemPanel, ConfigItemTable } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ConfigPanel from './ConfigPanel';\n\nconst MAX_SIZE = 1024 * 1024; // 1MB\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n root: {\n width: '100%',\n },\n paper: {\n width: '100%',\n marginBottom: 16,\n backgroundColor: 'rgba(255, 255, 255, 0.1)',\n },\n headerText: {\n width: '100%',\n },\n table: {\n minWidth: 750,\n },\n visuallyHidden: {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: 1,\n margin: -1,\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n top: 20,\n width: 1,\n },\n label: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n // highlight: (theme: IobTheme) => (theme.palette.mode === 'light'\n // ? {\n // color: theme.palette.secondary.main,\n // // backgroundColor: lighten(theme.palette.secondary.light, 0.85),\n // }\n // : {\n // color: theme.palette.text.primary,\n // backgroundColor: theme.palette.secondary.dark,\n // }),\n title: {\n flex: '1 1 100%',\n },\n rootTool: {\n paddingLeft: 16,\n paddingRight: 8,\n },\n silver: {\n opacity: 0.2,\n },\n flex: {\n display: 'flex',\n alignItems: 'baseline',\n },\n filteredOut: {\n padding: 10,\n display: 'flex',\n textAlign: 'center',\n },\n buttonEmpty: {\n width: 34,\n display: 'inline-block',\n },\n buttonCell: {\n whiteSpace: 'nowrap',\n },\n\n dropZone: {\n width: '100%',\n height: 100,\n position: 'relative',\n },\n dropZoneEmpty: {},\n uploadDiv: {\n position: 'relative',\n width: '100%',\n minHeight: 300,\n opacity: 0.9,\n marginTop: 30,\n cursor: 'pointer',\n outline: 'none',\n },\n uploadDivDragging: {\n opacity: 1,\n background: 'rgba(128,255,128,0.1)',\n },\n image: {\n objectFit: 'contain',\n margin: 'auto',\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n uploadCenterDiv: {\n margin: 5,\n border: '3px dashed grey',\n borderRadius: 5,\n width: 'calc(100% - 10px)',\n height: 'calc(100% - 10px)',\n minHeight: 300,\n position: 'relative',\n display: 'flex',\n },\n uploadCenterIcon: {\n paddingTop: 10,\n width: 48,\n height: 48,\n },\n uploadCenterText: {\n fontSize: 16,\n },\n uploadCenterTextAndIcon: {\n textAlign: 'center',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n buttonRemoveWrapper: {\n position: 'absolute',\n zIndex: 222,\n right: 0,\n },\n error: {\n border: '2px solid red',\n boxSizing: 'border-box',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nfunction objectToArray(\n object: Record<string, any>,\n nameOfFirstAttr: string,\n nameOfSecondAttr?: string,\n): Record<string, any>[] {\n nameOfFirstAttr = nameOfFirstAttr || 'key';\n\n const array: Record<string, any>[] = [];\n Object.keys(object).forEach(key => {\n const item: Record<string, any> = {};\n item[nameOfFirstAttr] = key;\n\n if (nameOfSecondAttr) {\n item[nameOfSecondAttr] = object[key];\n array.push(item);\n } else {\n array.push(Object.assign(item, object[key]));\n }\n });\n\n return array;\n}\n\nfunction arrayToObject(\n array: Record<string, any>[],\n nameOfFirstAttr: string,\n nameOfSecondAttr?: string,\n): Record<string, any> {\n nameOfFirstAttr = nameOfFirstAttr || 'key';\n\n const object: Record<string, any> = {};\n\n array.forEach((row: Record<string, any>) => {\n let key = row[nameOfFirstAttr];\n if (key === null || key === undefined) {\n key = '';\n }\n delete row[nameOfFirstAttr];\n\n if (nameOfSecondAttr) {\n object[key] = row[nameOfSecondAttr];\n } else {\n object[key] = row;\n }\n });\n\n return object;\n}\n\ninterface ConfigTableProps extends ConfigGenericProps {\n schema: ConfigItemTable;\n}\n\ninterface ConfigTableState extends ConfigGenericState {\n value: Record<string, any>[];\n visibleValue: number[] | null;\n orderBy: string;\n order: 'asc' | 'desc';\n iteration: number;\n filterOn: string[];\n errorMessage: string;\n showImportDialog: boolean;\n showTypeOfImportDialog: Record<string, any>[] | false;\n instanceObj: ioBroker.InstanceObject;\n customObj: Record<string, any>;\n uploadFile: boolean | 'dragging';\n icon: boolean;\n}\n\nfunction encrypt(secret: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\nfunction decrypt(secret: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\n\nclass ConfigTable extends ConfigGeneric<ConfigTableProps, ConfigTableState> {\n private readonly filterRefs: Record<string, RefObject<HTMLInputElement>>;\n\n private typingTimer: ReturnType<typeof setTimeout> | null = null;\n\n private secret: string = 'Zgfr56gFe87jJOM';\n\n constructor(props: ConfigTableProps) {\n super(props);\n this.filterRefs = {};\n this.props.schema.items = this.props.schema.items || [];\n this.props.schema.items.forEach((el: ConfigItemTableIndexed) => {\n if (el.filter) {\n this.filterRefs[el.attr] = createRef();\n }\n });\n }\n\n /**\n * React lifecycle hook, called once as component is mounted\n */\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n const _value: Record<string, any>[] | Record<string, any> =\n ConfigGeneric.getValue(this.props.data, this.props.attr) || [];\n let value: Record<string, any>[];\n\n // if the list is given as an object\n if (this.props.schema.objKeyName) {\n value = objectToArray(\n _value as Record<string, any>,\n this.props.schema.objKeyName,\n this.props.schema.objValueName,\n );\n } else {\n value = _value as Record<string, any>[];\n }\n\n if (!Array.isArray(value)) {\n value = [];\n }\n\n if (this.props.schema.encryptedAttributes) {\n const systemConfig = await this.props.socket.getCompactSystemConfig();\n this.secret = systemConfig?.native.secret || this.secret;\n\n _value.forEach((el: Record<string, any>) => {\n this.props.schema.encryptedAttributes.forEach((attr: string) => {\n if (el[attr]) {\n el[attr] = decrypt(this.secret, el[attr]);\n }\n });\n });\n }\n\n this.setState(\n {\n value,\n visibleValue: null,\n orderBy: /* this.props.schema.items.length ? this.props.schema.items[0].attr : */ '',\n order: 'asc',\n iteration: 0,\n filterOn: [],\n },\n () => this.validateUniqueProps(),\n );\n }\n\n componentWillUnmount(): void {\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n this.typingTimer = null;\n }\n super.componentWillUnmount();\n }\n\n itemTable(attrItem: string, data: Record<string, any>, idx: number): JSX.Element | null {\n const { schema } = this.props;\n const schemaForAttribute =\n schema.items && schema.items.find((el: ConfigItemTableIndexed) => el.attr === attrItem);\n\n if (!schemaForAttribute) {\n return null;\n }\n\n const schemaItem = {\n items: {\n [attrItem]: schemaForAttribute,\n },\n };\n\n return (\n <ConfigPanel\n index={idx + this.state.iteration}\n arrayIndex={idx}\n changed={this.props.changed}\n globalData={this.props.data}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n common={this.props.common}\n alive={this.props.alive}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n data={data}\n table\n custom\n schema={schemaItem as ConfigItemPanel}\n systemConfig={this.props.systemConfig}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n imagePrefix={this.props.imagePrefix}\n onCommandRunning={this.props.onCommandRunning}\n forceUpdate={this.props.forceUpdate}\n originalData={this.props.originalData}\n customs={this.props.customs}\n theme={this.props.theme}\n DeviceManager={this.props.DeviceManager}\n onChange={(attr: string, valueChange: any) => {\n const newObj: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n newObj[idx][attr] = valueChange;\n this.setState({ value: newObj }, () => {\n this.validateUniqueProps();\n this.onChangeWrapper(newObj, true);\n });\n }}\n onError={(error: string, attr?: string) => this.onError(error, attr)}\n onBackEndCommand={this.props.onBackEndCommand}\n />\n );\n }\n\n /**\n * Validate that columns configured in `uniqueColumns` have unique values\n */\n validateUniqueProps(): void {\n if (!this.props.schema.uniqueColumns) {\n return;\n }\n\n for (const uniqueCol of this.props.schema.uniqueColumns) {\n const allVals: (string | number)[] = [];\n const found = this.state.value.find(entry => {\n const val = entry[uniqueCol];\n if (allVals.includes(val)) {\n this.onError(uniqueCol, 'is not unique');\n this.setState({\n errorMessage: I18n.t('Non-allowed duplicate entry \"%s\" in column \"%s\"', val, uniqueCol),\n });\n return true;\n }\n allVals.push(val);\n return false;\n });\n\n if (!found) {\n this.onError(uniqueCol, null);\n this.setState({ errorMessage: '' });\n }\n }\n }\n\n static descendingComparator(a: Record<string, any>, b: Record<string, any>, orderBy: string): number {\n if (b[orderBy] < a[orderBy]) {\n return -1;\n }\n if (b[orderBy] > a[orderBy]) {\n return 1;\n }\n return 0;\n }\n\n static getComparator(\n order: 'desc' | 'asc',\n orderBy: string,\n ): (a: Record<string, any>, b: Record<string, any>) => number {\n return order === 'desc'\n ? (a: Record<string, any>, b: Record<string, any>) => ConfigTable.descendingComparator(a, b, orderBy)\n : (a: Record<string, any>, b: Record<string, any>) => -ConfigTable.descendingComparator(a, b, orderBy);\n }\n\n static getFilterValue(el: React.RefObject<HTMLInputElement>): string {\n return (el?.current?.children[0]?.children[0] as HTMLInputElement)?.value;\n }\n\n static setFilterValue(el: React.RefObject<HTMLInputElement>, filterValue: string): string {\n return ((el.current.children[0].children[0] as HTMLInputElement).value = filterValue);\n }\n\n handleRequestSort = (property: string, orderCheck: boolean = false): void => {\n const { order, orderBy } = this.state;\n if (orderBy) {\n const isAsc = orderBy === property && order === 'asc';\n const newOrder = orderCheck ? order : isAsc ? 'desc' : 'asc';\n const newValue = this.stableSort(newOrder, property);\n this.setState({ order: newOrder, orderBy: property, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, newValue),\n );\n }\n };\n\n stableSort = (order: 'desc' | 'asc', orderBy: string): Record<string, any>[] => {\n const { value } = this.state;\n const comparator = ConfigTable.getComparator(order, orderBy);\n const stabilizedThis = value.map((el, index) => ({ el, index }));\n\n stabilizedThis.sort((a, b) => {\n const order_ = comparator(a.el, b.el);\n if (order_ !== 0) {\n return order_;\n }\n return a.index - b.index;\n });\n\n return stabilizedThis.map(el => el.el);\n };\n\n enhancedTableHead(buttonsWidth: number, doAnyFilterSet: boolean): JSX.Element {\n const { schema } = this.props;\n const { order, orderBy } = this.state;\n return (\n <TableHead>\n <TableRow>\n {schema.items &&\n schema.items.map((headCell: ConfigItemTableIndexed, i: number) => (\n <TableCell\n style={{\n width:\n typeof headCell.width === 'string' && headCell.width.endsWith('%')\n ? headCell.width\n : headCell.width,\n }}\n key={`${headCell.attr}_${i}`}\n align=\"left\"\n sortDirection={orderBy === headCell.attr ? order : false}\n >\n <div\n style={{\n ...styles.flex,\n ...(schema.showFirstAddOnTop ? { flexDirection: 'column' } : undefined),\n }}\n >\n {!i && !schema.noDelete ? (\n <Tooltip\n title={\n doAnyFilterSet\n ? I18n.t('ra_Cannot add items with set filter')\n : I18n.t('ra_Add row')\n }\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <IconButton\n size=\"small\"\n color=\"primary\"\n disabled={!!doAnyFilterSet && !this.props.schema.allowAddByFilter}\n onClick={this.onAdd}\n >\n <AddIcon />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n {headCell.sort && (\n <TableSortLabel\n active\n style={orderBy !== headCell.attr ? styles.silver : undefined}\n direction={orderBy === headCell.attr ? order : 'asc'}\n onClick={() => this.handleRequestSort(headCell.attr)}\n />\n )}\n {headCell.filter && this.state.filterOn.includes(headCell.attr) ? (\n <TextField\n variant=\"standard\"\n ref={this.filterRefs[headCell.attr]}\n onChange={() => this.applyFilter()}\n title={I18n.t('ra_You can filter entries by entering here some text')}\n slotProps={{\n input: {\n endAdornment: ConfigTable.getFilterValue(\n this.filterRefs[headCell.attr],\n ) && (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n ConfigTable.setFilterValue(\n this.filterRefs[headCell.attr],\n '',\n );\n this.applyFilter();\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n fullWidth\n placeholder={this.getText(headCell.title)}\n />\n ) : (\n <span style={styles.headerText}>{this.getText(headCell.title)}</span>\n )}\n {headCell.filter ? (\n <IconButton\n title={I18n.t('ra_Show/hide filter input')}\n size=\"small\"\n onClick={() => {\n const filterOn = [...this.state.filterOn];\n const pos = this.state.filterOn.indexOf(headCell.attr);\n if (pos === -1) {\n filterOn.push(headCell.attr);\n } else {\n filterOn.splice(pos, 1);\n }\n this.setState({ filterOn }, () => {\n if (\n pos &&\n ConfigTable.getFilterValue(this.filterRefs[headCell.attr])\n ) {\n ConfigTable.setFilterValue(this.filterRefs[headCell.attr], '');\n this.applyFilter();\n }\n });\n }}\n >\n {this.state.filterOn.includes(headCell.attr) ? (\n <IconFilterOff />\n ) : (\n <IconFilterOn />\n )}\n </IconButton>\n ) : null}\n </div>\n </TableCell>\n ))}\n {!schema.noDelete && (\n <TableCell\n style={{\n paddingLeft: 20,\n paddingRight: 20,\n width: buttonsWidth,\n textAlign: 'right',\n }}\n padding=\"checkbox\"\n >\n {schema.import ? (\n <IconButton\n style={{ marginRight: 10 }}\n size=\"small\"\n onClick={() => this.setState({ showImportDialog: true })}\n title={I18n.t('ra_import data from %s file', 'CSV')}\n >\n <ImportIcon />\n </IconButton>\n ) : null}\n {schema.export ? (\n <IconButton\n style={{ marginRight: 10 }}\n size=\"small\"\n onClick={() => this.onExport()}\n title={I18n.t('ra_Export data to %s file', 'CSV')}\n >\n <ExportIcon />\n </IconButton>\n ) : null}\n <IconButton\n disabled\n size=\"small\"\n >\n <DeleteIcon />\n </IconButton>\n </TableCell>\n )}\n </TableRow>\n </TableHead>\n );\n }\n\n onDelete = (index: number) => (): void => {\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n newValue.splice(index, 1);\n\n this.setState({ value: newValue, iteration: this.state.iteration + 10_000 }, () =>\n this.applyFilter(false, null, () => this.onChangeWrapper(newValue)),\n );\n };\n\n onExport(): void {\n const { schema } = this.props;\n const { value } = this.state;\n const cols = schema.items.map((it: ConfigItemTableIndexed) => it.attr);\n const lines = [cols.join(';')];\n value.forEach(row => {\n const line: string[] = [];\n schema.items.forEach((it: ConfigItemTableIndexed) => {\n if (row[it.attr]?.includes(';')) {\n line.push(`\"${row[it.attr]}\"`);\n } else {\n line.push(row[it.attr] === undefined || row[it.attr] === null ? '' : row[it.attr]);\n }\n });\n lines.push(line.join(';'));\n });\n const el = document.createElement('a');\n el.setAttribute('href', `data:text/csv;charset=utf-8,${encodeURIComponent(lines.join('\\n'))}`);\n const now = new Date();\n el.setAttribute(\n 'download',\n `${now.getFullYear()}_${(now.getMonth() + 1).toString().padStart(2, '0')}_${now.getDate().toString().padStart(2, '0')}_${this.props.adapterName}.${this.props.instance}_${this.props.attr}.csv`,\n );\n\n el.style.display = 'none';\n document.body.appendChild(el);\n\n el.click();\n\n document.body.removeChild(el);\n }\n\n onImport(text: string): void {\n const lines = text.split('\\n').map((line: string) => line.replace('\\r', '').trim());\n // the first line is header\n const { schema } = this.props;\n\n const header = lines\n .shift()\n .split(';')\n .filter(it => it && schema.items.find((it2: ConfigItemTableIndexed) => it2.attr === it));\n\n const values: Record<string, any>[] = [];\n lines.forEach((line: string) => {\n const parts: string[] = line.split(';');\n const obj: Record<string, string | number | boolean> = {};\n for (let p = 0; p < parts.length; p++) {\n let value = parts[p];\n if (value.startsWith('\"')) {\n value = value.substring(1);\n while (p < parts.length && !value.endsWith('\"')) {\n value += `;${parts[++p]}`;\n }\n value = value.substring(0, value.length - 1);\n }\n\n let val: string | number | boolean = value;\n\n if (value === 'true') {\n val = true;\n } else if (value === 'false') {\n val = false;\n } else if (window.isFinite(value as any as number)) {\n const attr = this.props.schema.items.find((it: ConfigItemTableIndexed) => it.attr === header[p]);\n if (attr && attr.type === 'number') {\n // if a type of attribute is a \"number\"\n val = parseFloat(value);\n } else {\n val = value;\n }\n } else {\n val = value;\n }\n\n obj[header[p]] = val;\n }\n values.push(obj);\n });\n\n if (values.length) {\n if (this.state.value?.length) {\n this.setState({ showTypeOfImportDialog: values, showImportDialog: false });\n } else {\n this.setState({ value: values, showImportDialog: false });\n }\n } else {\n window.alert('ra_No data found in file');\n }\n }\n\n onClone = (index: number) => (): void => {\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n const cloned: Record<string, any> = JSON.parse(JSON.stringify(newValue[index]));\n if (typeof this.props.schema.clone === 'string' && typeof cloned[this.props.schema.clone] === 'string') {\n let i = 1;\n let text = cloned[this.props.schema.clone];\n const pattern = text.match(/(\\d+)$/);\n if (pattern) {\n text = text.replace(pattern[0], '');\n i = parseInt(pattern[0], 10) + 1;\n } else {\n text += '_';\n }\n while (\n newValue.find(\n (it: Record<string, any>) => it[this.props.schema.clone as string] === text + i.toString(),\n )\n ) {\n i++;\n }\n cloned[this.props.schema.clone] = `${cloned[this.props.schema.clone]}_${i}`;\n }\n\n newValue.splice(index, 0, cloned);\n\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () => this.onChangeWrapper(newValue)),\n );\n };\n\n onChangeWrapper = (newValue: Record<string, any>[], updateVisible?: boolean): void => {\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n }\n\n this.typingTimer = setTimeout(\n (value, _updateVisible) => {\n this.typingTimer = null;\n\n let mayBePromise: Promise<void> | void;\n if (this.props.schema.encryptedAttributes) {\n const _value = JSON.parse(JSON.stringify(value));\n _value.forEach((el: Record<string, any>) => {\n this.props.schema.encryptedAttributes.forEach((attr: string) => {\n if (el[attr]) {\n el[attr] = encrypt(this.secret, el[attr]);\n }\n });\n });\n\n if (this.props.schema.objKeyName) {\n const objValue = arrayToObject(\n _value,\n this.props.schema.objKeyName,\n this.props.schema.objValueName,\n );\n mayBePromise = this.onChange(this.props.attr, objValue);\n } else {\n mayBePromise = this.onChange(this.props.attr, _value);\n }\n } else if (this.props.schema.objKeyName) {\n const objValue = arrayToObject(\n JSON.parse(JSON.stringify(value)),\n this.props.schema.objKeyName,\n this.props.schema.objValueName,\n );\n mayBePromise = this.onChange(this.props.attr, objValue);\n } else {\n mayBePromise = this.onChange(this.props.attr, value);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot save: ${e}`));\n }\n if (_updateVisible) {\n this.applyFilter(false, value);\n this.handleRequestSort(this.state.orderBy, true);\n }\n },\n 300,\n newValue,\n updateVisible,\n );\n };\n\n onAdd = (): void => {\n const { schema } = this.props;\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n const newItem = schema.items?.reduce(\n (accumulator: Record<string, any>, currentValue: ConfigItemTableIndexed) => {\n let defaultValue;\n if (currentValue.defaultFunc) {\n if (this.props.custom) {\n defaultValue = currentValue.defaultFunc\n ? this.executeCustom(\n currentValue.defaultFunc,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n newValue.length,\n this.props.data,\n )\n : this.props.schema.default;\n } else {\n defaultValue = currentValue.defaultFunc\n ? this.execute(\n currentValue.defaultFunc,\n this.props.schema.default,\n this.props.data,\n newValue.length,\n this.props.data,\n )\n : this.props.schema.default;\n }\n } else {\n defaultValue = currentValue.default === undefined ? null : currentValue.default;\n }\n\n accumulator[currentValue.attr] = defaultValue;\n return accumulator;\n },\n {},\n );\n\n newValue.push(newItem);\n\n this.setState({ value: newValue }, () => this.applyFilter(false, null, () => this.onChangeWrapper(newValue)));\n };\n\n isAnyFilterSet(): boolean {\n return !!Object.keys(this.filterRefs).find(attr => ConfigTable.getFilterValue(this.filterRefs[attr]));\n }\n\n applyFilter = (clear?: boolean, value?: Record<string, any>[], cb?: () => void): void => {\n value = value || this.state.value;\n let visibleValue = value.map((_, i) => i);\n Object.keys(this.filterRefs).forEach(attr => {\n let valueInputRef = ConfigTable.getFilterValue(this.filterRefs[attr]);\n if (!clear && valueInputRef) {\n valueInputRef = valueInputRef.toLowerCase();\n visibleValue = visibleValue.filter(\n idx => value[idx] && value[idx][attr] && value[idx][attr].toLowerCase().includes(valueInputRef),\n );\n } else if (this.filterRefs[attr].current) {\n ConfigTable.setFilterValue(this.filterRefs[attr], '');\n }\n });\n\n if (visibleValue.length === value.length) {\n visibleValue = null;\n }\n\n if (visibleValue === null && this.state.visibleValue === null) {\n if (cb) {\n cb();\n }\n return;\n }\n\n if (JSON.stringify(visibleValue) !== JSON.stringify(this.state.visibleValue)) {\n this.setState({ visibleValue }, () => cb && cb());\n } else if (cb) {\n cb();\n }\n };\n\n onMoveUp(idx: number): void {\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx - 1, 0, item);\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () => this.onChangeWrapper(newValue)),\n );\n }\n\n onMoveDown(idx: number): void {\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx + 1, 0, item);\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () => this.onChangeWrapper(newValue)),\n );\n }\n\n onDrop(acceptedFiles: File[]): void {\n const file = acceptedFiles[0];\n const reader = new FileReader();\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n if (file.size > MAX_SIZE) {\n window.alert(I18n.t('ra_File is too big. Max %sk allowed. Try use SVG.', Math.round(MAX_SIZE / 1024)));\n return;\n }\n const text = new Uint8Array(reader.result as ArrayBufferLike).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n '',\n );\n\n this.onImport(text);\n };\n reader.readAsArrayBuffer(file);\n }\n\n showTypeOfImportDialog(): JSX.Element | null {\n if (!this.state.showTypeOfImportDialog) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showTypeOfImportDialog: false })}\n maxWidth=\"md\"\n >\n <DialogTitle>{I18n.t('ra_Append or replace?')}</DialogTitle>\n <DialogContent>\n {I18n.t('ra_Append %s entries or replace existing?', this.state.showTypeOfImportDialog.length)}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n autoFocus\n onClick={() => {\n const value: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n\n (this.state.showTypeOfImportDialog as Record<string, any>[]).forEach(\n (obj: Record<string, any>) => value.push(obj),\n );\n\n this.setState(\n {\n value,\n iteration: this.state.iteration + 10000,\n showTypeOfImportDialog: false,\n },\n () => this.applyFilter(false, null, () => this.onChangeWrapper(value)),\n );\n }}\n >\n {I18n.t('ra_Append')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n autoFocus\n onClick={() => {\n const value: Record<string, any>[] = this.state.showTypeOfImportDialog as Record<\n string,\n any\n >[];\n this.setState(\n {\n value,\n iteration: this.state.iteration + 10000,\n showTypeOfImportDialog: false,\n },\n () => this.applyFilter(false, null, () => this.onChangeWrapper(value)),\n );\n }}\n >\n {I18n.t('ra_Replace')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n showImportDialog(): JSX.Element | null {\n if (!this.state.showImportDialog) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showImportDialog: false })}\n sx={{\n '& .MuiDialog-paper': {\n minHeight: 500,\n },\n }}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>{I18n.t('ra_Import from %s', 'CSV')}</DialogTitle>\n <DialogContent>\n <Dropzone\n multiple={false}\n accept={{ 'text/csv': ['.csv'] }}\n maxSize={MAX_SIZE}\n onDragEnter={() => this.setState({ uploadFile: 'dragging' })}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={(acceptedFiles, errors) => {\n this.setState({ uploadFile: false });\n if (!acceptedFiles.length) {\n window.alert(\n (errors &&\n errors[0] &&\n errors[0].errors &&\n errors[0].errors[0] &&\n errors[0].errors[0].message) ||\n I18n.t('ra_Cannot upload'),\n );\n } else {\n this.onDrop(acceptedFiles);\n }\n }}\n >\n {({ getRootProps, getInputProps }) => (\n <div\n style={{\n ...styles.uploadDiv,\n ...(this.state.uploadFile === 'dragging' ? styles.uploadDivDragging : undefined),\n ...styles.dropZone,\n ...(!this.state.icon ? styles.dropZoneEmpty : undefined),\n }}\n {...getRootProps()}\n >\n <input {...getInputProps()} />\n <div style={styles.uploadCenterDiv}>\n <div style={styles.uploadCenterTextAndIcon}>\n <ImportIcon style={styles.uploadCenterIcon} />\n <div style={styles.uploadCenterText}>\n {this.state.uploadFile === 'dragging'\n ? I18n.t('ra_Drop file here')\n : I18n.t(\n 'ra_Place your files here or click here to open the browse dialog',\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n </Dropzone>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showImportDialog: false })}\n color=\"primary\"\n startIcon={<IconClose />}\n >\n {I18n.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element | null {\n const { schema } = this.props;\n let { visibleValue } = this.state;\n\n if (!this.state.value || !Array.isArray(this.state.value)) {\n return null;\n }\n\n visibleValue = visibleValue || this.state.value.map((_, i) => i);\n\n const doAnyFilterSet = this.isAnyFilterSet();\n\n let tdStyle: React.CSSProperties | undefined;\n if (this.props.schema.compact) {\n tdStyle = { paddingTop: 1, paddingBottom: 1 };\n }\n\n return (\n <Paper style={styles.paper}>\n {this.showImportDialog()}\n {this.showTypeOfImportDialog()}\n {schema.label ? (\n <div style={styles.label}>\n <Toolbar\n variant=\"dense\"\n style={styles.rootTool}\n >\n <Typography\n style={styles.title}\n variant=\"h6\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {this.getText(schema.label)}\n </Typography>\n </Toolbar>\n </div>\n ) : null}\n <TableContainer>\n <Table\n style={styles.table}\n size=\"small\"\n >\n {this.enhancedTableHead(!doAnyFilterSet && !this.state.orderBy ? 120 : 64, doAnyFilterSet)}\n <TableBody>\n {visibleValue.map((idx, i) => (\n <TableRow\n hover\n key={`${idx}_${i}`}\n >\n {schema.items &&\n schema.items.map((headCell: ConfigItemTableIndexed) => (\n <TableCell\n key={`${headCell.attr}_${idx}`}\n align=\"left\"\n style={tdStyle}\n >\n {this.itemTable(headCell.attr, this.state.value[idx], idx)}\n </TableCell>\n ))}\n {!schema.noDelete && (\n <TableCell\n align=\"left\"\n style={{ ...tdStyle, ...styles.buttonCell }}\n >\n {!doAnyFilterSet && !this.state.orderBy ? (\n i ? (\n <Tooltip\n title={I18n.t('ra_Move up')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveUp(idx)}\n >\n <UpIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <div style={styles.buttonEmpty} />\n )\n ) : null}\n {!doAnyFilterSet && !this.state.orderBy ? (\n i < visibleValue.length - 1 ? (\n <Tooltip\n title={I18n.t('ra_Move down')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveDown(idx)}\n >\n <DownIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <div style={styles.buttonEmpty} />\n )\n ) : null}\n <Tooltip\n title={I18n.t('ra_Delete current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onDelete(idx)}\n >\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n {this.props.schema.clone ? (\n <Tooltip\n title={I18n.t('ra_Clone current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onClone(idx)}\n >\n <CopyContentIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n </TableCell>\n )}\n </TableRow>\n ))}\n {!schema.noDelete && visibleValue.length >= (schema.showSecondAddAt || 5) ? (\n <TableRow>\n <TableCell\n colSpan={schema.items.length + 1}\n style={{ ...tdStyle }}\n >\n <Tooltip\n title={\n doAnyFilterSet\n ? I18n.t('ra_Cannot add items with set filter')\n : I18n.t('ra_Add row')\n }\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <IconButton\n size=\"small\"\n color=\"primary\"\n disabled={!!doAnyFilterSet && !this.props.schema.allowAddByFilter}\n onClick={this.onAdd}\n >\n <AddIcon />\n </IconButton>\n </span>\n </Tooltip>\n </TableCell>\n </TableRow>\n ) : null}\n </TableBody>\n </Table>\n {!visibleValue.length && this.state.value.length ? (\n <div style={styles.filteredOut}>\n <Typography\n style={styles.title}\n variant=\"h6\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {I18n.t('ra_All items are filtered out')}\n <IconButton\n size=\"small\"\n onClick={() => this.applyFilter(true)}\n >\n <CloseIcon />\n </IconButton>\n </Typography>\n </div>\n ) : null}\n </TableContainer>\n {schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n {this.state.errorMessage ? (\n <div style={{ display: 'flex', padding: '5px' }}>\n <ErrorIcon color=\"error\" />\n <span style={{ color: 'red', alignSelf: 'center' }}>{this.state.errorMessage}</span>\n </div>\n ) : null}\n </Paper>\n );\n }\n}\n\nexport default ConfigTable;\n","import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField, TextareaAutosize, InputAdornment, IconButton } from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemText } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n indeterminate: {\n opacity: 0.5,\n },\n label: {\n width: '100%',\n fontSize: 16,\n },\n helper: {\n width: '100%',\n fontSize: 12,\n },\n error: {\n width: '100%',\n fontSize: 12,\n color: '#FF0000',\n },\n};\n\ninterface ConfigTextProps extends ConfigGenericProps {\n schema: ConfigItemText;\n}\n\ninterface ConfigTextState extends ConfigGenericState {\n oldValue?: string;\n jsonError?: boolean;\n}\n\nclass ConfigText extends ConfigGeneric<ConfigTextProps, ConfigTextState> {\n private updateTimeout: ReturnType<typeof setTimeout> | null = null;\n\n componentDidMount(): void {\n super.componentDidMount();\n let value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n if (Array.isArray(value) && this.props.multiEdit) {\n value = ConfigGeneric.DIFFERENT_VALUE;\n this.setState({ value, oldValue: value, jsonError: false });\n return;\n }\n\n this.setState({ value, oldValue: value, jsonError: this.validateJson(value) });\n }\n\n validateJson(value: string | null | undefined): boolean {\n let jsonError = false;\n if (this.props.schema.validateJson) {\n if (value || !this.props.schema.allowEmpty) {\n try {\n JSON.parse(value);\n } catch (err: unknown) {\n console.log('Error in JSON', err);\n jsonError = true;\n }\n }\n }\n\n return jsonError;\n }\n\n static getDerivedStateFromProps(props: ConfigTextProps, state: ConfigTextState): Partial<ConfigTextState> | null {\n if (props.multiEdit && state.value === ConfigGeneric.DIFFERENT_VALUE) {\n return { value: ConfigGeneric.DIFFERENT_VALUE };\n }\n\n let value = ConfigGeneric.getValue(props.data, props.attr);\n\n if (value !== null && value !== undefined) {\n value = value.toString();\n }\n\n if (value === null || value === undefined || (value !== state.value && value !== state.oldValue)) {\n return { value };\n }\n return null;\n }\n\n renderItem(error?: boolean, disabled?: boolean): JSX.Element {\n const isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (this.props.schema.time) {\n // show read-only time\n\n let time = '';\n if (typeof this.state.value === 'number') {\n // If the value is a number, it is a timestamp.\n if (this.state.value && this.state.value < 946659600000) {\n // If the value is less than 2000-01-01, it is a timestamp in seconds.\n time = new Date(this.state.value * 1000).toLocaleString();\n } else {\n time = new Date(this.state.value).toLocaleString();\n }\n } else if (typeof this.state.value === 'string') {\n // If the value is a string, it is a date string.\n time = new Date(this.state.value).toLocaleString();\n }\n\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={time}\n error={!!error || !!this.state.jsonError}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n readOnly: true,\n },\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = null;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n\n if (isIndeterminate) {\n const autoCompleteOptions = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const arr =\n autoCompleteOptions\n ?.filter((a: any) => a || a === 0)\n .map((item: any) => ({ label: item.toString() || '', value: item })) || [];\n\n arr.unshift({ label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE });\n\n return (\n <Autocomplete\n style={styles.indeterminate}\n fullWidth\n value={arr[0]}\n // getOptionSelected={(option, value) => option.label === value.label}\n onChange={(_, value) => {\n const val = value ? value.value : '';\n const mayBePromise = this.onChange(this.props.attr, val, () => {\n this.setState({ value: val, oldValue: val, jsonError: this.validateJson(value) });\n });\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n options={arr}\n getOptionLabel={option => option.label}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n slotProps={{\n htmlInput: {\n ...params.inputProps,\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n disabled={!!disabled}\n />\n )}\n />\n );\n }\n if (this.props.schema.minRows > 1) {\n const helper = this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n );\n return (\n <div style={{ width: '100%' }}>\n {this.props.schema.label ? (\n <div style={styles.label}>{this.getText(this.props.schema.label)}</div>\n ) : null}\n <TextareaAutosize\n // variant=\"standard\"\n style={{\n width: '100%',\n resize: 'vertical',\n backgroundColor: this.props.themeType === 'dark' ? '#363636' : '#cccccc',\n color: this.props.themeType === 'dark' ? '#fff' : '#111',\n }}\n minRows={this.props.schema.minRows}\n maxRows={this.props.schema.maxRows}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n disabled={!!disabled}\n readOnly={this.props.schema.readOnly || false}\n onChange={e => {\n const value = e.target.value;\n this.setState(\n { value, oldValue: this.state.value, jsonError: this.validateJson(value) },\n () => this.onChange(this.props.attr, value || ''),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n />\n {helper || error || this.state.jsonError ? (\n <div style={error ? styles.error : styles.helper}>\n {error || (this.state.jsonError ? I18n.t('ra_Invalid JSON') : helper)}\n </div>\n ) : null}\n </div>\n );\n }\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error || !!this.state.jsonError}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n input: {\n endAdornment:\n !this.props.schema.readOnly && !disabled && this.state.value && !this.props.schema.noClearButton ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() =>\n this.setState({ value: '', oldValue: this.state.value }, () =>\n this.onChange(this.props.attr, ''),\n )\n }\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n\n this.setState({ value, oldValue: this.state.value, jsonError: this.validateJson(value) }, () =>\n this.onChange(this.props.attr, value),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={\n this.state.jsonError\n ? I18n.t('ra_Invalid JSON')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n );\n }\n}\n\nexport default ConfigText;\n","import React, { type JSX } from 'react';\n\nimport { TextField, IconButton } from '@mui/material';\n\nimport { Icon, IconCopy, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSendTo } from '#JC/types';\nimport getIconByName from './Icons';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n};\n\ninterface ConfigTextSendToProps extends ConfigGenericProps {\n schema: ConfigItemSendTo;\n}\n\ninterface ConfigTextSendToState extends ConfigGenericState {\n text?: string;\n style?: React.CSSProperties;\n icon?: string;\n iconStyle?: React.CSSProperties;\n}\n\ninterface Response {\n text: string;\n style?: React.CSSProperties;\n icon?: string;\n iconStyle?: React.CSSProperties;\n}\n\nclass ConfigTextSendTo extends ConfigGeneric<ConfigTextSendToProps, ConfigTextSendToState> {\n private initialized = false;\n\n private _context: string | undefined;\n\n askInstance(): void {\n if (this.props.alive) {\n let data: Record<string, any> | undefined = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = this.getPattern(this.props.schema.jsonData);\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n\n void this.props.socket\n .sendTo(`${this.props.adapterName}.${this.props.instance}`, this.props.schema.command || 'send', data)\n .then(result => {\n if (typeof result === 'object') {\n const _data: Response = result;\n this.setState({\n text: _data.text || '',\n style: _data.style,\n icon: _data.icon,\n iconStyle: _data.iconStyle,\n });\n } else if (typeof result === 'string') {\n this.setState({ text: result || '' });\n }\n })\n .catch(e => console.error(`Cannot send command: ${e}`));\n }\n }\n\n getContext(): string {\n const context: Record<string, any> = {};\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (context[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n return JSON.stringify(context);\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n if (this.props.alive) {\n const context = this.getContext();\n if (context !== this._context || !this.initialized) {\n this._context = context;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n if (this.state.text === undefined) {\n return null;\n }\n\n let icon: JSX.Element | null = null;\n if (this.state.icon) {\n icon = getIconByName(this.state.icon, {\n marginRight: this.state.text ? 8 : undefined,\n ...(this.state.iconStyle || undefined),\n });\n if (!icon) {\n icon = (\n <Icon\n src={this.state.icon}\n style={{ marginRight: this.state.text ? 8 : undefined, ...(this.state.iconStyle || undefined) }}\n />\n );\n }\n }\n\n if (this.props.schema.container === 'text') {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n InputProps={{\n endAdornment: this.props.schema.copyToClipboard ? (\n <IconButton\n size=\"small\"\n onClick={() => {\n Utils.copyToClipboard(this.state.text);\n window.alert('Copied');\n }}\n >\n <IconCopy />\n </IconButton>\n ) : undefined,\n }}\n value={this.state.text}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n return (\n <div style={{ ...styles.fullWidth, ...(this.state.style || undefined) }}>\n {icon}\n {this.props.schema.container === 'html' ? (\n <span dangerouslySetInnerHTML={{ __html: this.state.text || '' }} />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n}\n\nexport default ConfigTextSendTo;\n","import React, { type JSX } from 'react';\n\nimport { TextField } from '@mui/material';\n\nimport type { ConfigItemTopic } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nfunction convertID2Topic(id: string, namespace: string): string {\n let topic;\n if (namespace && id.substring(0, namespace.length) === namespace) {\n topic = id.substring(namespace.length + 1);\n } else {\n topic = id;\n }\n topic = topic.replace(/\\./g, '/').replace(/_/g, ' ');\n return topic;\n}\n\ninterface ConfigTopicProps extends ConfigGenericProps {\n schema: ConfigItemTopic;\n}\n\nclass ConfigTopic extends ConfigGeneric<ConfigTopicProps, ConfigGenericState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (!value && this.props.customObj?._id) {\n const topic = convertID2Topic(this.props.customObj._id, `${this.props.adapterName}.${this.props.instance}`);\n this.setState({ value: topic });\n } else {\n this.setState({ value: value || '' });\n }\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n },\n }}\n value={this.state.value}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () => this.onChange(this.props.attr, value));\n }}\n />\n );\n }\n}\n\nexport default ConfigTopic;\n","import React, { type JSX } from 'react';\n\nimport { TextField, IconButton } from '@mui/material';\n\nimport { ContentCopy as IconCopy } from '@mui/icons-material';\n\nimport { Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemUUID } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigUUIDProps extends ConfigGenericProps {\n schema: ConfigItemUUID;\n}\n\ninterface ConfigUUIDState extends ConfigGenericState {\n uuid?: string;\n}\n\nclass ConfigUUID extends ConfigGeneric<ConfigUUIDProps, ConfigUUIDState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n\n const uuidObj = await this.props.socket.getObject('system.meta.uuid');\n this.setState({ uuid: uuidObj?.native?.uuid || 'unknown' });\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n error={!!error}\n disabled={!!disabled}\n slotProps={{\n htmlInput: { readOnly: true },\n input: {\n endAdornment: (\n <IconButton\n onClick={() => {\n Utils.copyToClipboard(this.state.uuid);\n window.alert(I18n.t('ra_Copied %s', this.state.uuid));\n }}\n >\n <IconCopy />\n </IconButton>\n ),\n },\n }}\n value={this.state.uuid || ''}\n label={this.getText(this.props.schema.label) || I18n.t('ra_Serial number (UUID)')}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n}\n\nexport default ConfigUUID;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, TextField, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { Icon, Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemUser } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n icon: {\n width: 16,\n height: 16,\n marginRight: 8,\n },\n};\n\ninterface ConfigUserProps extends ConfigGenericProps {\n schema: ConfigItemUser;\n}\n\ninterface ConfigUserState extends ConfigGenericState {\n users: Record<string, { color?: string; icon?: string; name: string }>;\n}\n\nclass ConfigUser extends ConfigGeneric<ConfigUserProps, ConfigUserState> {\n componentDidMount(): void {\n super.componentDidMount();\n this.props.socket\n .getUsers()\n .then(users => {\n const _users: Record<string, { color?: string; icon?: string; name: string }> = {};\n const lang = I18n.getLanguage();\n\n if (this.props.schema.short) {\n users.forEach(\n user =>\n (_users[user._id] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang),\n }),\n );\n } else {\n users.forEach(\n user =>\n (_users[user._id.replace(/^system\\.user\\./, '')] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang),\n }),\n );\n }\n\n this.setState({ users: _users });\n })\n .catch(e => console.error(`Cannot get users: ${e}`));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.state.users && this.props.schema.label ? (\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n {!this.state.users ? (\n <TextField\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n label={this.getText(this.props.schema.label)}\n />\n ) : (\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => (\n <span>\n {this.state.users && this.state.users[val]?.icon ? (\n <Icon\n src={this.state.users && this.state.users[val]?.icon}\n style={styles.icon}\n />\n ) : null}\n {(this.state.users && this.state.users[val]?.name) || val || ''}\n </span>\n )}\n style={{\n color: (this.state.users && this.state.users[value]?.color) || undefined,\n backgroundColor: Utils.getInvertedColor(\n this.state.users && this.state.users[value]?.color,\n this.props.themeType,\n ),\n }}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.users &&\n Object.keys(this.state.users).map(id => (\n <MenuItem\n style={{\n color: this.state.users[id].color || undefined,\n backgroundColor: Utils.getInvertedColor(\n this.state.users[id].color,\n this.props.themeType,\n ),\n }}\n key={id}\n value={id}\n >\n {this.state.users[id].icon ? (\n <Icon\n src={this.state.users[id].icon}\n style={styles.icon}\n />\n ) : null}\n {this.state.users[id].name}\n </MenuItem>\n ))}\n </Select>\n )}\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigUser;\n","import React, { type JSX } from 'react';\n\nimport type QRCode from 'react-qr-code';\nimport type { ConfigItemQrCode } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigQrCodeProps extends ConfigGenericProps {\n schema: ConfigItemQrCode;\n}\n\ninterface ConfigQrCodeState extends ConfigGenericState {\n QRCode: typeof QRCode | null;\n}\n\nclass ConfigQrCode extends ConfigGeneric<ConfigQrCodeProps, ConfigQrCodeState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n // lazy load of qrcode\n const module = await import('react-qr-code');\n this.setState({ QRCode: module.default });\n }\n\n renderItem(): JSX.Element | null {\n const QRCodeComponent = this.state.QRCode;\n if (!QRCodeComponent) {\n return null;\n }\n return (\n <QRCodeComponent\n value={this.props.schema.data}\n size={this.props.schema.size}\n fgColor={this.props.schema.fgColor}\n bgColor={this.props.schema.bgColor}\n level={this.props.schema.level}\n />\n );\n }\n}\n\nexport default ConfigQrCode;\n","import React, { type JSX } from 'react';\n\nimport { Grid2, Accordion, AccordionSummary, AccordionDetails, Typography, Box } from '@mui/material';\n\nimport { ExpandMore as ExpandMoreIcon } from '@mui/icons-material';\n\nimport { type IobTheme } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemPanel } from '#JC/types';\nimport Utils from '#JC/Utils';\n\nimport ConfigGeneric, { type ConfigGenericState, type ConfigGenericProps } from './ConfigGeneric';\nimport ConfigAccordion from './ConfigAccordion';\nimport ConfigAlive from './ConfigAlive';\nimport ConfigAutocomplete from './ConfigAutocomplete';\nimport ConfigAutocompleteSendTo from './ConfigAutocompleteSendTo';\nimport ConfigCRON from './ConfigCRON';\nimport ConfigCertificateSelect from './ConfigCertificateSelect';\nimport ConfigCertificates from './ConfigCertificates';\nimport ConfigCertCollection from './ConfigCertCollection';\nimport ConfigCheckLicense from './ConfigCheckLicense';\nimport ConfigCheckbox from './ConfigCheckbox';\nimport ConfigChip from './ConfigChip';\nimport ConfigColor from './ConfigColor';\nimport ConfigCoordinates from './ConfigCoordinates';\nimport ConfigCustom from './ConfigCustom';\nimport ConfigDatePicker from './ConfigDatePicker';\nimport ConfigDeviceManager from './ConfigDeviceManager';\nimport ConfigFile from './ConfigFile';\nimport ConfigFileSelector from './ConfigFileSelector';\nimport ConfigFunc from './ConfigFunc';\nimport ConfigIP from './ConfigIP';\nimport ConfigImageSendTo from './ConfigImageSendTo';\nimport ConfigImageUpload from './ConfigImageUpload';\nimport ConfigInstanceSelect from './ConfigInstanceSelect';\nimport ConfigInterface from './ConfigInterface';\nimport ConfigJsonEditor from './ConfigJsonEditor';\nimport ConfigLanguage from './ConfigLanguage';\nimport ConfigLicense from './ConfigLicense';\nimport ConfigNumber from './ConfigNumber';\nimport ConfigObjectId from './ConfigObjectId';\nimport ConfigPassword from './ConfigPassword';\nimport ConfigPattern from './ConfigPattern';\nimport ConfigPort from './ConfigPort';\nimport ConfigRoom from './ConfigRoom';\nimport ConfigSelect from './ConfigSelect';\nimport ConfigSelectSendTo from './ConfigSelectSendTo';\nimport ConfigSendTo from './ConfigSendto';\nimport ConfigSetState from './ConfigSetState';\nimport ConfigSlider from './ConfigSlider';\nimport ConfigState from './ConfigState';\nimport ConfigStaticDivider from './ConfigStaticDivider';\nimport ConfigStaticHeader from './ConfigStaticHeader';\nimport ConfigStaticImage from './ConfigStaticImage';\nimport ConfigStaticText from './ConfigStaticText';\nimport ConfigTable from './ConfigTable';\nimport ConfigText from './ConfigText';\nimport ConfigTextSendTo from './ConfigTextSendTo';\nimport ConfigTimePicker from './ConfigTimePicker';\nimport ConfigTopic from './ConfigTopic';\nimport ConfigUUID from './ConfigUUID';\nimport ConfigUser from './ConfigUser';\nimport ConfigQrCode from './ConfigQrCode';\n\nconst components: Record<string, typeof ConfigGeneric<any, any>> = {\n accordion: ConfigAccordion,\n alive: ConfigAlive,\n autocomplete: ConfigAutocomplete,\n autocompleteSendTo: ConfigAutocompleteSendTo,\n certCollection: ConfigCertCollection,\n certificate: ConfigCertificateSelect,\n certificates: ConfigCertificates,\n checkbox: ConfigCheckbox,\n checkLicense: ConfigCheckLicense,\n chip: ConfigChip, // deprecated. Use \"chips\"\n chips: ConfigChip,\n color: ConfigColor,\n coordinates: ConfigCoordinates,\n cron: ConfigCRON,\n custom: ConfigCustom,\n datePicker: ConfigDatePicker,\n deviceManager: ConfigDeviceManager,\n divider: ConfigStaticDivider,\n file: ConfigFile,\n fileSelector: ConfigFileSelector,\n func: ConfigFunc,\n header: ConfigStaticHeader,\n image: ConfigImageUpload,\n imageSendTo: ConfigImageSendTo,\n instance: ConfigInstanceSelect,\n interface: ConfigInterface,\n ip: ConfigIP,\n jsonEditor: ConfigJsonEditor,\n language: ConfigLanguage,\n license: ConfigLicense,\n number: ConfigNumber,\n objectId: ConfigObjectId,\n password: ConfigPassword,\n pattern: ConfigPattern,\n port: ConfigPort,\n qrCode: ConfigQrCode,\n room: ConfigRoom,\n select: ConfigSelect,\n selectSendTo: ConfigSelectSendTo,\n sendto: ConfigSendTo,\n sendTo: ConfigSendTo,\n setState: ConfigSetState,\n slider: ConfigSlider,\n state: ConfigState,\n staticImage: ConfigStaticImage,\n staticLink: ConfigStaticText,\n staticText: ConfigStaticText,\n table: ConfigTable,\n text: ConfigText,\n textSendTo: ConfigTextSendTo,\n timePicker: ConfigTimePicker,\n topic: ConfigTopic,\n uuid: ConfigUUID,\n user: ConfigUser,\n};\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n // height: '100%',\n },\n paper: {\n margin: 1,\n width: 'auto !important',\n overflowY: 'auto',\n paddingBottom: 1,\n },\n paperWithIcons: {\n height: 'calc(100vh - 259px) !important',\n },\n paperWithoutIcons: {\n height: 'calc(100vh - 235px) !important',\n },\n padding: {\n padding: '10px',\n },\n heading: {},\n primary: (theme: IobTheme) => ({\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.mode === 'dark' ? 'inherit' : '#FFF',\n }),\n secondary: (theme: IobTheme) => ({\n backgroundColor: theme.palette.secondary.main,\n }),\n};\n\ninterface ConfigPanelProps extends ConfigGenericProps {\n schema: ConfigItemPanel;\n withIcons?: boolean;\n}\ninterface ConfigPanelState extends ConfigGenericState {\n expanded?: boolean;\n}\n\nclass ConfigPanel extends ConfigGeneric<ConfigPanelProps, ConfigPanelState> {\n componentDidMount(): void {\n super.componentDidMount();\n if (this.props.schema && this.props.schema.collapsable) {\n this.setState({\n expanded:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.props.adapterName}.${this.props.attr}`,\n ) === 'true',\n });\n }\n }\n\n renderItems(items: Record<string, any>, disabled: boolean): JSX.Element[] | null {\n return items\n ? Object.keys(items).map(attr => {\n if (this.props.multiEdit && items[attr].noMultiEdit) {\n return null;\n }\n\n const type = items[attr].type || 'panel';\n let ItemComponent: typeof ConfigGeneric<any, any>;\n if (type === 'custom') {\n // name\n // url\n if (items[attr].url) {\n ItemComponent = ConfigCustom;\n } else if (this.props.customs && this.props.customs[items[attr].component]) {\n ItemComponent = this.props.customs[items[attr].component];\n } else {\n console.error(`Cannot find custom component: ${items[attr].component}`);\n ItemComponent = ConfigGeneric;\n }\n } else if (type === 'panel') {\n ItemComponent = ConfigPanel;\n } else {\n ItemComponent = components[type] || ConfigGeneric;\n }\n\n return (\n <ItemComponent\n key={`${attr}_${this.props.index === undefined ? '' : this.props.index}`}\n index={this.props.index}\n changed={this.props.changed}\n arrayIndex={this.props.arrayIndex}\n globalData={this.props.globalData}\n onCommandRunning={this.props.onCommandRunning}\n commandRunning={this.props.commandRunning}\n style={styles.panel}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n common={this.props.common}\n customs={this.props.customs}\n alive={this.props.alive}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n theme={this.props.theme}\n data={this.props.data}\n originalData={this.props.originalData}\n systemConfig={this.props.systemConfig}\n onError={this.props.onError}\n onChange={this.props.onChange}\n onBackEndCommand={this.props.onBackEndCommand}\n multiEdit={this.props.multiEdit}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n disabled={disabled}\n imagePrefix={this.props.imagePrefix}\n changeLanguage={this.props.changeLanguage}\n forceUpdate={this.props.forceUpdate}\n registerOnForceUpdate={this.props.registerOnForceUpdate}\n customObj={this.props.customObj}\n instanceObj={this.props.instanceObj}\n custom={this.props.custom}\n schema={items[attr]}\n DeviceManager={this.props.DeviceManager}\n attr={attr}\n table={this.props.table}\n />\n );\n })\n : null;\n }\n\n render(): JSX.Element | null {\n const schema = this.props.schema;\n\n if (!schema) {\n return null;\n }\n\n const { disabled, hidden } = this.calculate(schema);\n\n const items = this.props.schema.items;\n const schemaStyle = this.props.schema.style || {};\n\n if (hidden) {\n if (schema.hideOnlyControl) {\n const item = (\n <Grid2\n size={{\n xs: schema.xs || undefined,\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n sx={Utils.getStyle(\n this.props.theme,\n { marginBottom: 0, textAlign: 'left' /* marginRight: 8, */ },\n schemaStyle,\n this.props.themeType === 'dark' && schema.darkStyle,\n )}\n />\n );\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {item}\n </>\n );\n }\n return item;\n }\n return null;\n }\n\n if (this.props.table) {\n return this.renderItems(items, disabled) as any as JSX.Element;\n }\n\n if (this.props.custom) {\n return (\n <Grid2\n key={`${this.props.attr}_${this.props.index}`}\n container\n style={styles.fullWidth}\n columnSpacing={2}\n rowSpacing={1}\n sx={schemaStyle}\n >\n {this.renderItems(items, disabled)}\n </Grid2>\n );\n }\n\n let content;\n if (schema.collapsable) {\n content = (\n <Accordion\n key={`${this.props.attr}_${this.props.index}`}\n style={styles.fullWidth}\n expanded={!!this.state.expanded}\n onChange={() => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.adapterName}.${this.props.attr}`,\n this.state.expanded ? 'false' : 'true',\n );\n this.setState({ expanded: !this.state.expanded });\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={Utils.getStyle(\n this.props.theme,\n schemaStyle,\n this.props.themeType && schema.darkStyle,\n schema.color === 'primary'\n ? styles.primary\n : schema.color === 'secondary' && styles.secondary,\n { width: '100%' },\n )}\n >\n <Typography style={styles.heading}>{this.getText(schema.label)}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n columnSpacing={2}\n rowSpacing={1}\n sx={{ ...schemaStyle, width: '100%', padding: '10px' }}\n >\n {this.renderItems(items, disabled)}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n } else {\n content = (\n <Box\n component=\"div\"\n key={`${this.props.attr}_${this.props.index}`}\n className={this.props.className}\n sx={Utils.getStyle(\n this.props.theme,\n this.props.style,\n schemaStyle,\n { width: '100%' },\n this.props.isParentTab && styles.paper,\n this.props.isParentTab &&\n (this.props.withIcons ? styles.paperWithIcons : styles.paperWithoutIcons),\n )}\n >\n <Grid2\n container\n columnSpacing={2}\n rowSpacing={1}\n sx={Utils.getStyle(\n this.props.theme,\n { width: '100%' },\n this.props.isParentTab && styles.padding,\n this.props.schema.innerStyle,\n )}\n >\n {this.renderItems(items, disabled)}\n </Grid2>\n </Box>\n );\n }\n\n if (!this.props.isParentTab) {\n const item = (\n <Grid2\n title={this.getText(schema.tooltip)}\n size={{\n xs: schema.xs || undefined,\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n sx={{ marginBottom: 0, /* marginRight: 8, */ textAlign: 'left', ...schemaStyle }}\n >\n {content}\n </Grid2>\n );\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {item}\n </>\n );\n }\n return item;\n }\n return content;\n }\n}\n\nexport default ConfigPanel;\n","import React, { type JSX } from 'react';\n\nimport { DatePicker } from '@mui/x-date-pickers';\n\nimport type { ConfigItemDatePicker } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps } from './ConfigGeneric';\n\ninterface ConfigDatePickerProps extends ConfigGenericProps {\n schema: ConfigItemDatePicker;\n}\n\nexport default class ConfigDatePicker extends ConfigGeneric<ConfigDatePickerProps> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n }\n\n renderItem(_error: unknown, disabled: boolean /* , defaultValue */): JSX.Element {\n return (\n <DatePicker\n sx={theme => ({\n width: '100%',\n borderBottom: `1px solid ${theme.palette.text.primary}`,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: `${theme.spacing(1.5)} 0 4px 0`,\n },\n '& .MuiInputAdornment-root': {\n marginLeft: 0,\n marginTop: 1, // it is already in spaces\n },\n '& label': {\n transform: 'translate(0px, -9px) scale(0.75)',\n },\n })}\n format={this.props.systemConfig.dateFormat.toLowerCase().replace('mm', 'MM')}\n disabled={!!disabled}\n value={this.state.value as never}\n onChange={value => {\n this.setState({ value }, () => this.onChange(this.props.attr, this.state.value));\n }}\n label={this.getText(this.props.schema.label)}\n />\n );\n }\n}\n","import React, { type JSX } from 'react';\n\nimport { TimePicker } from '@mui/x-date-pickers';\n\nimport type { ConfigItemTimePicker } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps } from './ConfigGeneric';\n\ninterface ConfigTimePickerProps extends ConfigGenericProps {\n schema: ConfigItemTimePicker;\n dialogName?: string;\n}\n\nexport default class ConfigTimePicker extends ConfigGeneric<ConfigTimePickerProps> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n }\n\n renderItem(_error: unknown, disabled: boolean): JSX.Element {\n // the format could be 'HH:mm:ss' or 'HH:mm'\n const shortFormat = this.props.schema.returnFormat !== 'HH:mm:ss';\n\n const value: never = new Date(Date.parse(`Thu, 01 Jan 1970 ${this.state.value || '00:00:00'}`)) as never;\n\n return (\n <TimePicker\n sx={theme => ({\n width: '100%',\n borderBottom: `1px solid ${theme.palette.text.primary}`,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: `${theme.spacing(1.5)} 0 4px 0`,\n },\n '& .MuiInputAdornment-root': {\n marginLeft: 0,\n marginTop: 1, // it is already in spaces\n },\n '& label': {\n transform: 'translate(0px, -9px) scale(0.75)',\n },\n })}\n ampm={this.props.systemConfig.dateFormat.includes('/')}\n timeSteps={\n this.props.schema.timeSteps || this.props.schema.timesteps || { hours: 1, minutes: 5, seconds: 5 }\n }\n format={this.props.schema.format || 'HH:mm:ss'}\n disabled={!!disabled}\n value={value}\n onChange={(newValue: Date) => {\n let strValue: string;\n strValue =\n (newValue as any) instanceof Date\n ? newValue.toTimeString().split(' ')[0]\n : newValue.toTimeString();\n if (shortFormat) {\n strValue = strValue.split(':').slice(0, 2).join(':');\n }\n\n this.setState({ value: strValue }, () => this.onChange(this.props.attr, this.state.value));\n }}\n views={this.props.schema.views || ['hours', 'minutes', 'seconds']}\n label={this.getText(this.props.schema.label)}\n />\n );\n }\n}\n","import React, { type JSX } from 'react';\n\nimport { Tabs, Tab } from '@mui/material';\n\nimport type { ConfigItemTabs } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ConfigPanel from './ConfigPanel';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabs: {\n height: '100%',\n width: '100%',\n },\n panel: {\n width: '100%',\n display: 'block',\n },\n panelWithIcons: {\n height: 'calc(100% - 72px)',\n },\n panelWithoutIcons: {\n height: 'calc(100% - 48px)',\n },\n};\n\ninterface ConfigTabsProps extends ConfigGenericProps {\n schema: ConfigItemTabs;\n dialogName?: string;\n}\n\ninterface ConfigTabsState extends ConfigGenericState {\n tab?: string;\n}\n\nclass ConfigTabs extends ConfigGeneric<ConfigTabsProps, ConfigTabsState> {\n constructor(props: ConfigTabsProps) {\n super(props);\n let tab: string | undefined;\n\n if (this.props.root) {\n // read the path from hash\n // #tab-instances/config/system.adapter.ping.0/<TAB-NAME-OR-INDEX>\n const hash = (window.location.hash || '').replace(/^#/, '').split('/');\n if (hash.length >= 3 && hash[1] === 'config') {\n const tabS = hash[3];\n const tabN = parseInt(tabS, 10);\n if (tabS && tabN.toString() === tabS) {\n if (tabN >= 0 && tabN < Object.keys(this.props.schema.items).length) {\n tab = Object.keys(this.props.schema.items)[tabN];\n }\n } else if (tabS && Object.keys(this.props.schema.items).includes(tabS)) {\n tab = tabS;\n }\n\n // install on hash change handler\n window.addEventListener('hashchange', this.onHashTabsChanged, false);\n }\n }\n\n if (tab === undefined) {\n tab =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.props.dialogName || 'App'}.${this.props.adapterName}`,\n ) || Object.keys(this.props.schema.items)[0];\n if (!Object.keys(this.props.schema.items).includes(tab)) {\n tab = Object.keys(this.props.schema.items)[0];\n }\n }\n\n Object.assign(this.state, { tab });\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('hashchange', this.onHashTabsChanged, false);\n super.componentWillUnmount();\n }\n\n onHashTabsChanged = (): void => {\n const hash = (window.location.hash || '').replace(/^#/, '').split('/');\n if (hash.length > 3 && hash[1] === 'config') {\n const tabS = hash[3];\n const tabN = parseInt(tabS, 10);\n let tab;\n if (tabN.toString() === tabS) {\n if (tabN >= 0 && tabN < Object.keys(this.props.schema.items).length) {\n tab = Object.keys(this.props.schema.items)[tabN];\n }\n } else if (Object.keys(this.props.schema.items).includes(tabS)) {\n tab = tabS;\n }\n if (tab !== undefined && tab !== this.state.tab) {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.${this.props.adapterName}`,\n tab,\n );\n this.setState({ tab });\n }\n }\n };\n\n render(): JSX.Element {\n const items = this.props.schema.items;\n let withIcons = false;\n\n return (\n <div style={styles.tabs}>\n <Tabs\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n style={this.props.schema.tabsStyle}\n value={this.state.tab}\n onChange={(e, tab) => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.${this.props.adapterName}`,\n tab,\n );\n this.setState({ tab }, () => {\n if (this.props.root) {\n const hash = (window.location.hash || '').split('/');\n if (hash.length >= 3 && hash[1] === 'config') {\n hash[3] = this.state.tab;\n window.location.hash = hash.join('/');\n }\n }\n });\n }}\n >\n {Object.keys(items).map(name => {\n let disabled: boolean;\n if (this.props.custom) {\n const hidden = this.executeCustom(\n items[name].hidden,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.index,\n this.props.globalData,\n );\n if (hidden) {\n return null;\n }\n disabled = this.executeCustom(\n items[name].disabled,\n this.props.data,\n this.props.customObj,\n this.props.instanceObj,\n this.props.index,\n this.props.globalData,\n ) as boolean;\n } else {\n const hidden: boolean = this.execute(\n items[name].hidden,\n false,\n this.props.data,\n this.props.index,\n this.props.globalData,\n ) as boolean;\n if (hidden) {\n return null;\n }\n disabled = this.execute(\n items[name].disabled,\n false,\n this.props.data,\n this.props.index,\n this.props.globalData,\n ) as boolean;\n }\n const icon = this.getIcon(items[name].icon);\n withIcons = withIcons || !!icon;\n\n return (\n <Tab\n id={name}\n wrapped\n disabled={disabled}\n key={name}\n value={name}\n iconPosition={this.props.schema.iconPosition || 'start'}\n icon={icon}\n label={this.getText(items[name].label)}\n />\n );\n })}\n </Tabs>\n <ConfigPanel\n isParentTab\n changed={this.props.changed}\n key={this.state.tab}\n index={1001}\n arrayIndex={this.props.arrayIndex}\n globalData={this.props.globalData}\n onCommandRunning={this.props.onCommandRunning}\n commandRunning={this.props.commandRunning}\n style={{\n ...styles.panel,\n ...(withIcons ? styles.panelWithIcons : styles.panelWithoutIcons),\n }}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n common={this.props.common}\n customs={this.props.customs}\n alive={this.props.alive}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n data={this.props.data}\n originalData={this.props.originalData}\n systemConfig={this.props.systemConfig}\n onChange={this.props.onChange}\n onError={this.props.onError}\n onBackEndCommand={this.props.onBackEndCommand}\n multiEdit={this.props.multiEdit}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n // disabled={disabled}\n imagePrefix={this.props.imagePrefix}\n changeLanguage={this.props.changeLanguage}\n forceUpdate={this.props.forceUpdate}\n registerOnForceUpdate={this.props.registerOnForceUpdate}\n customObj={this.props.customObj}\n instanceObj={this.props.instanceObj}\n custom={this.props.custom}\n schema={items[this.state.tab]}\n table={this.props.table}\n theme={this.props.theme}\n DeviceManager={this.props.DeviceManager}\n withIcons={withIcons}\n />\n </div>\n );\n }\n}\n\nexport default ConfigTabs;\n","import React, { Component, type JSX } from 'react';\n\nimport { LinearProgress } from '@mui/material';\n\nimport { type AdminConnection, I18n, type ThemeName, type ThemeType, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { BackEndCommand, ConfigItemPanel, ConfigItemTabs } from '#JC/types';\nimport type ConfigGeneric from '#JC/JsonConfigComponent/ConfigGeneric';\nimport { type DeviceManagerPropsProps } from '#JC/JsonConfigComponent/ConfigGeneric';\nimport ConfigTabs from './ConfigTabs';\nimport ConfigPanel from './ConfigPanel';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n width: '100%',\n height: '100%',\n },\n};\n\ninterface JsonConfigComponentProps {\n socket: AdminConnection;\n themeName: ThemeName;\n themeType: ThemeType;\n adapterName: string;\n instance: number;\n isFloatComma: boolean;\n dateFormat: string;\n imagePrefix?: string;\n schema: ConfigItemTabs | ConfigItemPanel;\n common?: Record<string, any>;\n data: Record<string, any>;\n updateData?: number;\n onError: (error: boolean) => void;\n onChange?: (data: Record<string, any>, changed: boolean, saveConfig: boolean) => void;\n /** Backend request to refresh data */\n onBackEndCommand?: (command?: BackEndCommand) => void;\n custom?: boolean;\n onValueChange?: (attr: string, value: any, saveConfig: boolean) => void;\n embedded?: boolean;\n multiEdit?: boolean;\n instanceObj?: ioBroker.InstanceObject;\n customObj?: ioBroker.Object;\n customs?: Record<string, typeof ConfigGeneric>;\n DeviceManager?: React.FC<DeviceManagerPropsProps>;\n style?: React.CSSProperties;\n theme: IobTheme;\n}\n\ninterface JsonConfigComponentState {\n originalData: string;\n changed: boolean;\n errors: Record<string, string>;\n systemConfig: ioBroker.SystemConfigCommon | null;\n updateData?: number;\n alive: boolean;\n commandRunning: boolean;\n schema: ConfigItemTabs | ConfigItemPanel;\n}\n\nexport class JsonConfigComponent extends Component<JsonConfigComponentProps, JsonConfigComponentState> {\n private readonly forceUpdateHandlers: Record<string, (data: any) => void>;\n\n private errorTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private errorCached: Record<string, string> | null = null;\n\n constructor(props: JsonConfigComponentProps) {\n super(props);\n\n this.state = {\n originalData: JSON.stringify(this.props.data),\n changed: false,\n errors: {},\n updateData: this.props.updateData || 0,\n systemConfig: null,\n alive: false,\n commandRunning: false,\n schema: JSON.parse(JSON.stringify(this.props.schema)),\n };\n\n this.forceUpdateHandlers = {};\n\n this.buildDependencies(this.state.schema);\n\n this.readData();\n }\n\n static getDerivedStateFromProps(\n props: JsonConfigComponentProps,\n state: JsonConfigComponentState,\n ): Partial<JsonConfigComponentState> | null {\n if (props.updateData !== state.updateData) {\n return {\n updateData: props.updateData,\n originalData: JSON.stringify(props.data),\n schema: JSON.parse(JSON.stringify(props.schema)),\n };\n }\n return null;\n }\n\n static async loadI18n(\n socket: AdminConnection,\n i18n: boolean | string | Record<string, Record<ioBroker.Languages, string>>,\n adapterName: string,\n ): Promise<string> {\n if (i18n === true || (i18n && typeof i18n === 'string')) {\n const lang = I18n.getLanguage();\n const path = typeof i18n === 'string' ? i18n : 'i18n';\n let exists = await socket.fileExists(`${adapterName}.admin`, `${path}/${lang}.json`);\n let fileName;\n if (exists) {\n fileName = `${path}/${lang}.json`;\n } else {\n exists = await socket.fileExists(`${adapterName}.admin`, `${path}/${lang}/translations.json`);\n if (exists) {\n fileName = `${path}/${lang}/translations.json`;\n } else if (lang !== 'en') {\n // fallback to english\n exists = await socket.fileExists(`${adapterName}.admin`, `${path}/en.json`);\n if (exists) {\n fileName = `${path}/en.json`;\n } else {\n exists = await socket.fileExists(`${adapterName}.admin`, `${path}/en/translations.json`);\n if (exists) {\n fileName = `${path}/en/translations.json`;\n }\n }\n }\n }\n\n if (fileName) {\n const jsonFile = await socket.readFile(`${adapterName}.admin`, fileName);\n let jsonStr: string;\n if (jsonFile.file !== undefined) {\n jsonStr = jsonFile.file;\n } else {\n // @ts-expect-error deprecated\n jsonStr = jsonFile;\n }\n\n try {\n const json = JSON.parse(jsonStr);\n // apply file to I18n\n I18n.extendTranslations(json, lang);\n } catch (e) {\n console.error(`Cannot parse language file \"${adapterName}.admin/${fileName}: ${e}`);\n return '';\n }\n return fileName;\n }\n console.warn(`Cannot find i18n for ${adapterName} / ${fileName}`);\n return '';\n }\n if (i18n && typeof i18n === 'object') {\n I18n.extendTranslations(i18n);\n return '';\n }\n return '';\n }\n\n onCommandRunning = (commandRunning: boolean): void => this.setState({ commandRunning });\n\n readData(): void {\n void this.props.socket\n .getCompactSystemConfig()\n .then(systemConfig =>\n this.props.socket\n .getState(`system.adapter.${this.props.adapterName}.${this.props.instance}.alive`)\n .then(state => {\n if (this.props.custom) {\n this.setState({ systemConfig: systemConfig.common, alive: !!(state && state.val) });\n } else {\n this.setState({ systemConfig: systemConfig.common, alive: !!(state && state.val) }, () =>\n this.props.socket.subscribeState(\n `system.adapter.${this.props.adapterName}.${this.props.instance}.alive`,\n this.onAlive,\n ),\n );\n }\n }),\n )\n .catch(e => console.error(`Cannot read system config: ${e}`));\n }\n\n onAlive = (_id: string, state?: ioBroker.State | null): void => {\n if (!!state?.val !== this.state.alive) {\n this.setState({ alive: !!state?.val });\n }\n };\n\n onChange = (attrOrData: string | Record<string, any>, value: any, cb?: () => void, saveConfig?: boolean): void => {\n if (this.props.onValueChange) {\n this.props.onValueChange(attrOrData as string, value, saveConfig);\n if (cb) {\n cb();\n }\n } else if (attrOrData && this.props.onChange) {\n const newState: Partial<JsonConfigComponentState> = {\n changed: JSON.stringify(attrOrData) !== this.state.originalData,\n };\n\n this.setState(newState as JsonConfigComponentState, () => {\n this.props.onChange(attrOrData as Record<string, any>, newState.changed, saveConfig);\n if (cb) {\n cb();\n }\n });\n } else if (saveConfig) {\n this.props.onChange(null, null, saveConfig);\n }\n };\n\n onError = (attr: string, error?: string): void => {\n this.errorCached = this.errorCached || JSON.parse(JSON.stringify(this.state.errors));\n const errors = this.errorCached;\n if (error) {\n errors[attr] = error;\n } else {\n delete errors[attr];\n }\n\n if (this.errorTimeout) {\n clearTimeout(this.errorTimeout);\n }\n if (JSON.stringify(errors) !== JSON.stringify(this.state.errors)) {\n this.errorTimeout = setTimeout(\n () =>\n this.setState({ errors: this.errorCached }, () => {\n this.errorTimeout = null;\n this.errorCached = null;\n this.props.onError(!!Object.keys(this.state.errors).length);\n }),\n 50,\n );\n } else {\n this.errorCached = null;\n }\n };\n\n flatten(schema: Record<string, any>, _list?: Record<string, any>): Record<string, any> {\n _list = _list || {};\n if (schema.items) {\n Object.keys(schema.items).forEach(attr => {\n _list[attr] = schema.items[attr];\n this.flatten(schema.items[attr], _list);\n });\n }\n\n return _list;\n }\n\n buildDependencies(schema: ConfigItemTabs | ConfigItemPanel): void {\n const attrs = this.flatten(schema as Record<string, any>);\n Object.keys(attrs).forEach(attr => {\n if (attrs[attr].confirm?.alsoDependsOn) {\n attrs[attr].confirm?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].confirmDependsOn = attrs[dep].confirmDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n if (depObj.confirm) {\n depObj.confirm.cancel = 'Undo';\n }\n\n attrs[dep].confirmDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].onChange?.alsoDependsOn) {\n attrs[attr].onChange?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].onChangeDependsOn = attrs[dep].onChangeDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n\n attrs[dep].onChangeDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].hidden?.alsoDependsOn) {\n attrs[attr].hidden?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].hiddenDependsOn = attrs[dep].hiddenDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n\n attrs[dep].hiddenDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].label?.alsoDependsOn) {\n attrs[attr].label?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].labelDependsOn = attrs[dep].labelDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n\n attrs[dep].labelDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].help?.alsoDependsOn) {\n attrs[attr].help?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].helpDependsOn = attrs[dep].helpDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n\n attrs[dep].helpDependsOn.push(depObj);\n }\n });\n }\n });\n }\n\n renderItem(item: ConfigItemTabs | ConfigItemPanel): JSX.Element | null {\n if (item.type === 'tabs') {\n return (\n <ConfigTabs\n DeviceManager={this.props.DeviceManager}\n adapterName={this.props.adapterName}\n alive={this.state.alive}\n changeLanguage={this.changeLanguage}\n changed={this.state.changed}\n commandRunning={this.state.commandRunning}\n common={this.props.common}\n custom={this.props.custom}\n customObj={this.props.customObj}\n customs={this.props.customs}\n data={this.props.data}\n dateFormat={this.props.dateFormat}\n forceUpdate={this.forceAttrUpdate}\n imagePrefix={this.props.imagePrefix}\n instance={this.props.instance}\n instanceObj={this.props.instanceObj}\n isFloatComma={this.props.isFloatComma}\n multiEdit={this.props.multiEdit}\n onChange={this.onChange}\n onCommandRunning={this.onCommandRunning}\n onError={(attr, error) => this.onError(attr, error)}\n onBackEndCommand={this.props.onBackEndCommand}\n originalData={JSON.parse(this.state.originalData)}\n registerOnForceUpdate={this.registerOnForceUpdate}\n root\n schema={item}\n socket={this.props.socket}\n systemConfig={this.state.systemConfig}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n />\n );\n }\n if (\n item.type === 'panel' ||\n // @ts-expect-error type could be empty\n !item.type\n ) {\n return (\n <ConfigPanel\n DeviceManager={this.props.DeviceManager}\n adapterName={this.props.adapterName}\n alive={this.state.alive}\n changeLanguage={this.changeLanguage}\n changed={this.state.changed}\n commandRunning={this.state.commandRunning}\n common={this.props.common}\n custom={this.props.custom}\n customObj={this.props.customObj}\n customs={this.props.customs}\n data={this.props.data}\n dateFormat={this.props.dateFormat}\n forceUpdate={this.forceAttrUpdate}\n imagePrefix={this.props.imagePrefix}\n index={1000}\n instance={this.props.instance}\n instanceObj={this.props.instanceObj}\n isFloatComma={this.props.isFloatComma}\n isParentTab={!this.props.embedded}\n multiEdit={this.props.multiEdit}\n onChange={this.onChange}\n onCommandRunning={this.onCommandRunning}\n onError={(attr, error) => this.onError(attr, error)}\n onBackEndCommand={this.props.onBackEndCommand}\n originalData={JSON.parse(this.state.originalData)}\n registerOnForceUpdate={this.registerOnForceUpdate}\n root\n schema={item}\n socket={this.props.socket}\n systemConfig={this.state.systemConfig}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n />\n );\n }\n\n return null;\n }\n\n changeLanguage = (): void => {\n this.forceUpdate();\n };\n\n forceAttrUpdate = (attr: string | string[], data: any): void => {\n if (Array.isArray(attr)) {\n attr.forEach(a => this.forceUpdateHandlers[a] && this.forceUpdateHandlers[a](data));\n } else if (this.forceUpdateHandlers[attr]) {\n this.forceUpdateHandlers[attr](data);\n }\n };\n\n registerOnForceUpdate = (attr: string, cb: (data: any) => void): void => {\n if (cb) {\n this.forceUpdateHandlers[attr] = cb;\n } else if (this.forceUpdateHandlers[attr]) {\n delete this.forceUpdateHandlers[attr];\n }\n };\n\n render(): JSX.Element {\n if (!this.state.systemConfig) {\n return <LinearProgress />;\n }\n\n return (\n <div\n style={{\n ...(!this.props.embedded ? styles.root : undefined),\n ...this.props.style,\n ...this.state.schema.style,\n }}\n >\n {this.renderItem(this.state.schema)}\n </div>\n );\n }\n}\n\nexport default JsonConfigComponent;\n","import React from 'react';\nimport JSON5 from 'json5';\nimport MD5 from 'crypto-js/md5';\n\nimport { Fab, Tooltip, LinearProgress } from '@mui/material';\nimport { Publish as PublishIcon } from '@mui/icons-material';\n\nimport {\n I18n,\n Router,\n SaveCloseButtons,\n Theme,\n Confirm as ConfirmDialog,\n type AdminConnection,\n type IobTheme,\n type ThemeName,\n type ThemeType,\n} from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemAny, ConfigItemPanel, ConfigItemTabs } from '#JC/types';\nimport Utils from '#JC/Utils';\nimport ConfigGeneric, { type DeviceManagerPropsProps } from './JsonConfigComponent/ConfigGeneric';\nimport JsonConfigComponent from './JsonConfigComponent';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n },\n scroll: {\n height: 'calc(100% - 48px)',\n overflowY: 'auto',\n },\n exportImportButtons: {\n position: 'absolute',\n top: 5,\n right: 0,\n zIndex: 3,\n },\n button: {\n marginRight: '5px',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\n/**\n * Decrypt the password/value with given key\n *\n * @param key - Secret key\n * @param value - value to decrypt\n */\nfunction decryptLegacy(key: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\n\n/**\n * Encrypt the password/value with given key\n *\n * @param key - Secret key\n * @param value - value to encrypt\n */\nfunction encryptLegacy(key: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\n\n/**\n * Decrypt the password/value with given key\n * Usage:\n * ```js\n * function load(settings, onChange) {\n * if (settings.password) {\n * settings.password = decrypt(systemSecret, settings.password);\n * // same as\n * settings.password = decrypt(settings.password);\n * }\n * // ...\n * }\n * ```\n *\n * @param key - Secret key\n * @param value - value to decrypt\n */\nfunction decrypt(key: string, value: string): string {\n if (typeof value !== 'string') {\n return value;\n }\n\n // if not encrypted as aes-192 or key not a valid 48-digit hex -> fallback\n if (!value.startsWith('$/aes-192-cbc:') || !/^[0-9a-f]{48}$/.test(key)) {\n return decryptLegacy(key, value);\n }\n\n // algorithm:iv:encryptedValue\n const textParts = value.split(':', 3);\n\n const _key = window.CryptoJS.enc.Hex.parse(key);\n const iv = window.CryptoJS.enc.Hex.parse(textParts[1]);\n\n const cipherParams = window.CryptoJS.lib.CipherParams.create({\n ciphertext: window.CryptoJS.enc.Hex.parse(textParts[2]),\n });\n\n const decryptedBinary = window.CryptoJS.AES.decrypt(cipherParams, _key, { iv });\n\n return window.CryptoJS.enc.Utf8.stringify(decryptedBinary);\n}\n\n/**\n * Encrypt the password/value with given key\n * Usage:\n * ```\n * function save(callback) {\n * ...\n * if (obj.password) {\n * obj.password = encrypt(systemSecret, obj.password);\n * // same as\n * obj.password = decrypt(obj.password);\n * }\n * ...\n * }\n * ```\n *\n * @param key - Secret key\n * @param value - value to encrypt\n * @param _iv - optional initial vector for tests\n */\nfunction encrypt(key: string, value: string, _iv?: string): string {\n if (typeof value !== 'string') {\n return value;\n }\n\n if (!/^[0-9a-f]{48}$/.test(key)) {\n // key length is not matching for AES-192-CBC or key is no valid hex - fallback to old encryption\n return encryptLegacy(key, value);\n }\n\n let iv;\n if (_iv) {\n iv = window.CryptoJS.enc.Hex.parse(_iv);\n } else {\n iv = window.CryptoJS.lib.WordArray.random(128 / 8);\n }\n\n const _key = window.CryptoJS.enc.Hex.parse(key);\n const encrypted = window.CryptoJS.AES.encrypt(value, _key, { iv }).ciphertext;\n\n return `$/aes-192-cbc:${window.CryptoJS.enc.Hex.stringify(iv)}:${encrypted}`;\n}\n\nfunction loadScript(src: string, id: string): ((this: GlobalEventHandlers, ev: Event) => any) | null | Promise<void> {\n if (!id || !document.getElementById(id)) {\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('id', id);\n script.onload = resolve as unknown as (this: GlobalEventHandlers, ev: Event) => any;\n script.src = src;\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n }\n return document.getElementById(id)?.onload;\n}\n\ninterface BufferObject {\n type: 'Buffer';\n data: Buffer;\n}\n\ninterface JsonConfigProps {\n adapterName: string;\n instance: number;\n isFloatComma: boolean;\n dateFormat: string;\n secret?: string;\n socket: AdminConnection;\n theme: IobTheme;\n themeName: ThemeName;\n themeType: ThemeType;\n /** Translate method */\n t: typeof I18n.t;\n configStored: (notChanged: boolean) => void;\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n DeviceManager?: React.FC<DeviceManagerPropsProps>;\n}\n\ninterface JsonConfigState {\n schema?: ConfigItemPanel | ConfigItemTabs;\n data?: Record<string, unknown>;\n originalData?: Record<string, unknown>;\n updateData: number;\n common?: ioBroker.InstanceCommon;\n changed: boolean;\n confirmDialog: boolean;\n theme: IobTheme;\n saveConfigDialog: boolean;\n hash: string;\n error?: boolean;\n}\n\nclass JsonConfig extends Router<JsonConfigProps, JsonConfigState> {\n private fileSubscribed: string[] = [];\n\n private fileLangSubscribed = '';\n\n private secret: string;\n\n constructor(props: JsonConfigProps) {\n super(props);\n\n this.state = {\n updateData: 0,\n changed: false,\n confirmDialog: false,\n theme: Theme(props.themeName), // buttons require special theme\n saveConfigDialog: false,\n hash: '_',\n };\n\n this.secret = props.secret || '';\n\n void this.getInstanceObject().then(obj =>\n this.getConfigFile().then(schema =>\n // load language\n JsonConfigComponent.loadI18n(this.props.socket, schema?.i18n, this.props.adapterName).then(\n (langFileName: string) => {\n if (langFileName) {\n // subscribe on changes\n if (!this.fileLangSubscribed) {\n this.fileLangSubscribed = langFileName;\n void this.props.socket.subscribeFiles(\n `${this.props.adapterName}.admin`,\n this.fileLangSubscribed,\n this.onFileChange,\n );\n }\n }\n\n if (obj) {\n this.setState({\n schema,\n data: obj.native,\n common: obj.common,\n hash: MD5(JSON.stringify(schema)).toString(),\n });\n } else {\n window.alert(\n `Instance system.adapter.${this.props.adapterName}.${this.props.instance} not found!`,\n );\n }\n },\n ),\n ),\n );\n }\n\n componentWillUnmount(): void {\n super.componentWillUnmount();\n if (this.fileSubscribed.length) {\n this.props.socket.unsubscribeFiles(\n `${this.props.adapterName}.admin`,\n this.fileSubscribed,\n this.onFileChange,\n );\n this.fileSubscribed = [];\n }\n if (this.fileLangSubscribed) {\n this.props.socket.unsubscribeFiles(\n `${this.props.adapterName}.admin`,\n this.fileLangSubscribed,\n this.onFileChange,\n );\n this.fileLangSubscribed = '';\n }\n }\n\n private handleFileSelect = (evt: Record<string, any>): void => {\n const f = evt.target.files[0];\n if (f) {\n const r = new FileReader();\n r.onload = (e: ProgressEvent<FileReader>): void => {\n if (!e.target) {\n return;\n }\n\n const contents = e.target.result as string;\n try {\n const data = JSON.parse(contents);\n this.setState({ data, changed: JSON.stringify(data) !== JSON.stringify(this.state.originalData) });\n } catch {\n window.alert(I18n.t('[JsonConfig] Failed to parse JSON file'));\n }\n };\n r.readAsText(f);\n } else {\n window.alert(I18n.t('[JsonConfig] Failed to open JSON File'));\n }\n };\n\n getExportImportButtons(): JSX.Element {\n return (\n <div style={styles.exportImportButtons}>\n <Tooltip\n title={this.props.t('Import settings from JSON file')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <Fab\n size=\"small\"\n sx={{ '&.MuiFab-root': styles.button }}\n onClick={() => {\n const input = document.createElement('input');\n input.setAttribute('type', 'file');\n input.setAttribute('id', 'files');\n // @ts-expect-error check\n input.setAttribute('opacity', 0);\n input.addEventListener('change', e => this.handleFileSelect(e), false);\n input.click();\n }}\n >\n <PublishIcon />\n </Fab>\n </Tooltip>\n <Tooltip\n title={this.props.t('Export setting to JSON file')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <Fab\n size=\"small\"\n sx={{ '&.MuiFab-root': styles.button }}\n onClick={() => {\n if (!this.state.data) {\n return;\n }\n\n Utils.generateFile(\n `${this.props.adapterName}.${this.props.instance}.json`,\n this.state.data,\n );\n }}\n >\n <PublishIcon style={{ transform: 'rotate(180deg)' }} />\n </Fab>\n </Tooltip>\n </div>\n );\n }\n\n onFileChange = async (id: string, fileName: string, size: number): Promise<void> => {\n if (id === `${this.props.adapterName}.admin` && size) {\n if (fileName === this.fileLangSubscribed) {\n try {\n await JsonConfigComponent.loadI18n(\n this.props.socket,\n this.state.schema?.i18n,\n this.props.adapterName,\n );\n this.setState({ hash: `${this.state.hash}1` });\n } catch {\n // ignore errors\n }\n } else if (this.fileSubscribed.includes(fileName)) {\n try {\n const schema = await this.getConfigFile(this.fileSubscribed[0]);\n this.setState({ schema, hash: MD5(JSON.stringify(schema)).toString() });\n } catch {\n // ignore errors\n }\n }\n }\n };\n\n async getInstanceObject(): Promise<ioBroker.InstanceObject | null> {\n try {\n const obj = await this.props.socket.getObject(\n `system.adapter.${this.props.adapterName}.${this.props.instance}`,\n );\n // decode all native attributes listed in obj.encryptedNative\n if (Array.isArray(obj.encryptedNative)) {\n if (!this.secret) {\n const systemConfig = await this.props.socket.getSystemConfig();\n await loadScript('../../lib/js/crypto-js/crypto-js.js', 'crypto-js');\n this.secret = systemConfig.native.secret;\n }\n obj.encryptedNative?.forEach(attr => {\n if (obj.native[attr]) {\n obj.native[attr] = decrypt(this.secret, obj.native[attr]);\n }\n });\n return obj;\n }\n return obj;\n } catch (e) {\n window.alert(`[JsonConfig] Cannot read instance object: ${e}`);\n }\n return null;\n }\n\n renderConfirmDialog(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\n return (\n <ConfirmDialog\n title={I18n.t('ra_Please confirm')}\n text={I18n.t('ra_Some data are not stored. Discard?')}\n ok={I18n.t('ra_Discard')}\n cancel={I18n.t('ra_Cancel')}\n onClose={isYes => this.setState({ confirmDialog: false }, () => isYes && Router.doNavigate(null))}\n />\n );\n }\n\n async scanForInclude(json: Record<string, any>, filePaths: string[]): Promise<Record<string, any>> {\n if (typeof json['#include'] === 'string') {\n // load file\n const data = await this._getConfigFile(json['#include'], [...filePaths]);\n delete json['#include'];\n if (data) {\n // merge data\n json = { ...json, ...data };\n }\n return json;\n }\n const keys = Object.keys(json);\n for (let k = 0; k < keys.length; k++) {\n if (json[keys[k]] && typeof json[keys[k]] === 'object') {\n json[keys[k]] = await this.scanForInclude(json[keys[k]], filePaths);\n }\n }\n return json;\n }\n\n async getConfigFile(fileName?: string): Promise<ConfigItemPanel | ConfigItemTabs> {\n return this._getConfigFile(fileName);\n }\n\n async _getConfigFile(fileName?: string, _filePaths?: string[]): Promise<ConfigItemPanel | ConfigItemTabs> {\n fileName = fileName || 'jsonConfig.json5';\n _filePaths = _filePaths || [];\n\n if (_filePaths.includes(fileName)) {\n window.alert(`[JsonConfig] Circular reference in file: ${fileName} => ${_filePaths.join(' => ')}`);\n return null;\n }\n _filePaths.push(fileName);\n\n try {\n const exist = await this.props.socket.fileExists(`${this.props.adapterName}.admin`, fileName);\n if (!exist) {\n fileName = 'jsonConfig.json';\n }\n const data: {\n file: string;\n mimeType: string;\n } = await this.props.socket.readFile(`${this.props.adapterName}.admin`, fileName);\n let content = '';\n let file: string | BufferObject = '';\n\n if (data.file !== undefined) {\n file = data.file;\n }\n\n if (typeof file === 'string') {\n content = file;\n // @ts-expect-error revisit\n } else if (file.type === 'Buffer') {\n let binary = '';\n // @ts-expect-error revisit\n const bytes = new Uint8Array(file.data);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n content = binary;\n }\n\n // subscribe on changes\n if (!this.fileSubscribed.includes(fileName)) {\n this.fileSubscribed.push(fileName);\n await this.props.socket.subscribeFiles(`${this.props.adapterName}.admin`, fileName, this.onFileChange);\n }\n\n try {\n // detect #include attr\n return (await this.scanForInclude(JSON5.parse(content), _filePaths)) as\n | ConfigItemPanel\n | ConfigItemTabs;\n } catch (e) {\n window.alert('[JsonConfig] Cannot parse json5 config!');\n console.log(e);\n }\n } catch (e1) {\n if (!this.state.schema) {\n window.alert(`[JsonConfig] Cannot read file \"${fileName}: ${e1}`);\n }\n }\n return null;\n }\n\n renderSaveConfigDialog(): JSX.Element | null {\n if (!this.state.saveConfigDialog) {\n return null;\n }\n return (\n <ConfirmDialog\n title={I18n.t('ra_Please confirm')}\n text={I18n.t('Save configuration?')}\n ok={I18n.t('ra_Save')}\n cancel={I18n.t('ra_Cancel')}\n onClose={isYes => this.setState({ saveConfigDialog: false }, () => isYes && this.onSave(true))}\n />\n );\n }\n\n findAttr(attr: string, schema?: ConfigItemPanel | ConfigItemTabs): ConfigItemAny | null {\n schema = schema || this.state.schema;\n if (schema?.items) {\n if (attr in schema.items) {\n return schema.items[attr];\n }\n for (const _item of Object.values(schema.items)) {\n const item = this.findAttr(attr, _item as ConfigItemPanel | ConfigItemTabs);\n if (item) {\n return item;\n }\n }\n }\n\n return null;\n }\n\n // this function is called recursively and trims all text fields, that must be trimmed\n postProcessing(data: Record<string, unknown>, attr: string, schema: ConfigItemAny): void {\n schema = schema || this.state.schema;\n if (!data) {\n // should not happen\n console.error(`Data is empty in postProcessing: ${attr}, ${JSON.stringify(schema)}`);\n return;\n }\n\n const dataAttr = data[attr];\n\n if ((schema as ConfigItemTabs).items) {\n if (schema.type === 'table') {\n const table = dataAttr;\n\n if (!Array.isArray(table)) {\n return;\n }\n\n for (const entry of table) {\n for (const tItem of schema.items) {\n this.postProcessing(entry, tItem.attr, tItem as ConfigItemAny);\n }\n }\n } else {\n for (const [_attr, item] of Object.entries((schema as ConfigItemTabs).items)) {\n if (\n (item as any).type === 'panel' ||\n (item as any).type === 'tabs' ||\n (item as any).type === 'accordion'\n ) {\n return;\n }\n this.postProcessing(data, _attr, item);\n }\n }\n } else if (attr && typeof dataAttr === 'string') {\n // postprocessing\n if (schema.type === 'text') {\n if (schema.trim !== false) {\n data[attr] = dataAttr.trim();\n }\n } else if (schema.type === 'ip') {\n // should not happen\n data[attr] = dataAttr.trim();\n } else if (schema.type === 'number') {\n const dataVal = parseFloat(dataAttr.toString().replace(',', '.'));\n\n if (schema.min !== undefined && dataVal < schema.min) {\n data[attr] = schema.min;\n } else if (schema.max !== undefined && dataVal > schema.max) {\n data[attr] = schema.max;\n } else {\n data[attr] = dataVal;\n }\n } else if (schema.type === 'port') {\n const dataVal = parseInt(dataAttr.toString(), 10);\n if (schema.min !== undefined && dataVal < schema.min) {\n data[attr] = schema.min;\n } else if (schema.max !== undefined && dataVal > schema.max) {\n data[attr] = schema.max;\n }\n if (data[attr] !== 0 && dataVal < 20) {\n data[attr] = 20;\n } else if (dataVal > 0xffff) {\n data[attr] = 0xffff;\n } else {\n data[attr] = dataVal;\n }\n } else if (schema.type === 'checkbox') {\n // should not happen\n data[attr] =\n data[attr] === true ||\n data[attr] === 'true' ||\n data[attr] === 'on' ||\n data[attr] === 1 ||\n data[attr] === '1';\n }\n }\n }\n\n async onSave(doSave: boolean, close?: boolean): Promise<void> {\n if (doSave) {\n const obj = await this.getInstanceObject();\n\n if (!obj) {\n console.error('Something went wrong: may be no connection?');\n window.alert('Something went wrong: may be no connection?');\n return;\n }\n\n if (!this.state.data || !this.state.schema) {\n return;\n }\n\n const doNotSaveAttributes: Record<string, any> = {};\n\n for (const attr of Object.keys(this.state.data)) {\n const item = this.findAttr(attr);\n if ((!item || !item.doNotSave || item.type === 'state') && !attr.startsWith('_')) {\n ConfigGeneric.setValue(obj.native, attr, this.state.data[attr]);\n } else {\n ConfigGeneric.setValue(obj.native, attr, null);\n doNotSaveAttributes[attr] = this.state.data[attr];\n }\n }\n\n try {\n const encryptedObj = JSON.parse(JSON.stringify(obj));\n // encode all native attributes listed in obj.encryptedNative\n if (Array.isArray(encryptedObj.encryptedNative)) {\n await loadScript('../../lib/js/crypto-js/crypto-js.js', 'crypto-js');\n\n for (const attr of encryptedObj.encryptedNative) {\n if (encryptedObj.native[attr]) {\n encryptedObj.native[attr] = encrypt(this.secret, encryptedObj.native[attr]);\n }\n }\n }\n\n await this.props.socket.setObject(encryptedObj._id, encryptedObj);\n } catch (e) {\n window.alert(`[JsonConfig] Cannot set object: ${e}`);\n }\n\n /** We want to preserve the doNotSaveAttributes too, just not save it */\n const nativeWithNonSaved = { ...obj.native, ...doNotSaveAttributes };\n console.log(nativeWithNonSaved);\n\n this.setState(\n {\n changed: false,\n data: nativeWithNonSaved,\n updateData: this.state.updateData + 1,\n originalData: nativeWithNonSaved,\n },\n () => close && Router.doNavigate(null),\n );\n } else if (this.state.changed) {\n this.setState({ confirmDialog: true });\n } else {\n Router.doNavigate(null);\n }\n }\n\n componentDidUpdate(_prevProps: JsonConfigProps, prevState: JsonConfigState): void {\n if (prevState.changed !== this.state.changed) {\n this.props.configStored(!this.state.changed);\n }\n }\n\n /**\n * Validate the JSON config once on mount\n */\n async componentDidMount(): Promise<void> {\n const link = `${window.location.protocol}//${window.location.host}${window.location.pathname}validate_config/${this.props.adapterName}`;\n console.log(`fetch ${link}`);\n await fetch(link);\n }\n\n render(): JSX.Element {\n if (!this.state.data || !this.state.schema) {\n return <LinearProgress />;\n }\n\n return (\n <div style={styles.root}>\n {this.renderConfirmDialog()}\n {this.getExportImportButtons()}\n {this.renderSaveConfigDialog()}\n <JsonConfigComponent\n key={this.state.hash}\n style={styles.scroll}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n schema={this.state.schema}\n common={this.state.common}\n data={this.state.data}\n updateData={this.state.updateData}\n onError={error => this.setState({ error })}\n onChange={(data, changed, saveConfigDialog) => {\n if (saveConfigDialog && this.state.error) {\n window.alert(I18n.t('Cannot save configuration because of error in configuration'));\n saveConfigDialog = false;\n }\n if (saveConfigDialog && !this.state.changed && !changed) {\n saveConfigDialog = false;\n }\n if (data) {\n this.setState({ data, changed, saveConfigDialog });\n } else if (saveConfigDialog !== undefined) {\n this.setState({ saveConfigDialog });\n }\n }}\n DeviceManager={this.props.DeviceManager}\n theme={this.state.theme}\n />\n <SaveCloseButtons\n isIFrame={false}\n dense\n paddingLeft={0}\n newReact\n theme={this.state.theme}\n noTextOnButtons={\n this.props.width === 'xs' || this.props.width === 'sm' || this.props.width === 'md'\n }\n changed={!!(this.state.error || this.state.changed)}\n error={!!this.state.error}\n onSave={(close: boolean) => this.onSave(true, close)}\n onClose={() => this.onSave(false)}\n />\n </div>\n );\n }\n}\n\nexport default JsonConfig;\n"],"names":["NAMESPACE","days","months","QUALITY_BITS","SIGNATURES","JVBERi0","R0lGODdh","R0lGODlh","iVBORw0KGgo","PHN2Zw","Qk1","AAABAA","Utils","CapitalWords","name","split","filter","item","map","word","toUpperCase","substring","toLowerCase","join","formatSeconds","seconds","days_","Math","floor","hours","minutes","text","I18n","t","getObjectName","objects","id","settings","options","isDesc","attr","language","common","window","sysLang","en","desc","de","ru","toString","replace","pos","lastIndexOf","trim","getObjectNameFromObj","obj","noTrim","_id","getSettingsOrder","forEnumId","Object","prototype","hasOwnProperty","call","custom","user","subOrder","JSON","parse","stringify","order","getSettingsCustomURLs","subURLs","URLs","reorder","list","source","dest","result","Array","from","removed","splice","getSettings","defaultEnabling","_obj","enabled","undefined","useCustom","icon","color","setSettings","s","useCommon","getIcon","style","length","_jsx","children","startsWith","alt","src","prefix","getObjectIcon","parts","location","pathname","match","splitCamelCase","isUseBright","defaultValue","r","g","b","slice","rgb","parseInt","getTimeString","parseFloat","Number","isNaN","secs","getWindDirection","angle","padding","num","setDataFormat","format","dateFormat","indexOf","date2string","now","m","a","year","find","y","day","mm","Date","abs","getTime","date","getDay","getDate","getMonth","renderTextWithA","key","start","index","push","href","target","rel","title","getSmartName","states","instanceId","noCommon","_states$id$common","_states$common","smartName","getSmartNameFromObj","_obj$common","enableSmartName","removeSmartName","updateSmartName","newSmartName","byON","smartType","getLanguage","nnn","native","_smartName","role","includes","empty","nl","pl","it","fr","pt","es","uk","disableSmartName","copyToClipboard","e","stopPropagation","preventDefault","_Utils","getFileExtension","fileName","formatBytes","bytes","units","u","toFixed","getInvertedColor","themeType","invert","invertedColor","invertColor","hex","bw","padStart","alfa","console","warn","color2rgb","rgb2lab","x","z","colorDistance","color1","color2","lab1","lab2","dltL","dltA","dltB","c1","sqrt","dltC","dltH","dltCkcsc","dltHkhsh","i","_toVal","mix","str","isArray","k","clsx","tmp","arguments","getThemeName","themeName","vendorPrefix","_localStorage","localStorage","getItem","matchMedia","matches","getThemeType","setThemeName","setItem","toggleTheme","themes","getThemeNames","newTheme","parseQuery","query","forEach","part","decodeURIComponent","f","getParentId","p","pop","formatDate","dateObj","dd","getFullYear","v","getHours","getMinutes","getSeconds","getMilliseconds","formatTime","round","d","h","MDtext2link","openLink","url","open","MDgetTitle","extractHeader","header","body","lines","MDextractHeader","attrs","line","pos_","MDremoveDocsify","doc","generateFile","filename","json","el","document","createElement","setAttribute","encodeURIComponent","display","appendChild","click","removeChild","quality2text","quality","clone","object","getStates","_obj$common2","error","type","value","false","true","getSvg","fetch","then","response","blob","Promise","resolve","reader","FileReader","onload","this","readAsDataURL","detectMimeType","base64","signature","keys","isStableRepository","activeRepo","isStringInteger","isValidDate","getStyle","theme","_len","args","_key","assign","attr1","namespace","INSTANCES","FORBIDDEN_CHARS","isObject","ConfigGeneric","Component","constructor","props","super","isError","lang","defaultSendToDone","sendToTimeout","noPlaceRequired","onUpdate","data","getValue","state","setState","forceUpdate","confirmDialog","confirmNewValue","confirmAttr","confirmData","confirmCallback","schema","defaultFunc","executeCustom","customObj","instanceObj","arrayIndex","globalData","default","execute","componentDidMount","registerOnForceUpdate","LIKE_SELECT","setTimeout","onChange","setValue","defaultSendTo","sendTo","alive","jsonData","dataStr","getPattern","socket","adapterName","instance","allowSaveWithError","onError","componentWillUnmount","clearTimeout","shift","getText","noTranslation","strText","func","renderConfirmDialog","confirm","IconWarning","IconError","IconInfo","ConfirmDialog","ok","cancel","onClose","isOk","callback","confirmDepAttr","confirmDepNewValue","iconSettings","IconAuth","IconSend","IconWeb","IconSearch","IconMenuBook","IconHelp","IconUploadFile","IconEdit","IconPerson","IconGroup","IconDelete","IconRefresh","IconAdd","IconLinkOff","LinkIcon","Save","OpenInNew","endsWith","Icon","width","height","onChangeAsync","newValue","mayBePromise","catch","cb","condition","confirmDependsOn","dep","val","changed","onChangeDependsOn","_newValue","calculateFunc","hiddenDependsOn","hidden","labelDependsOn","helpDependsOn","ignoreOwnChanges","newValue_","_attr","fun","Function","originalData","systemConfig","calculate","disabled","validator","renderItem","_error","_disabled","_defaultValue","label","renderHelp","link","textDecoration","escapeString","_match","p1","pattern","patternStr","log","render","hideOnlyControl","Grid2","size","xs","sm","md","lg","xl","marginBottom","textAlign","darkStyle","newLine","_jsxs","_Fragment","flexBasis","validatorNoSaveOnError","validatorErrorText","renderedItem","commandRunning","tooltip","button","container","flex","Button","variant","onClick","buttonTooltip","buttonTooltipNoTranslation","DIFFERENT_VALUE","DIFFERENT_LABEL","NONE_VALUE","NONE_LABEL","styles","fullWidth","accordionSummary","backgroundColor","palette","mode","accordionTitle","toolbar","borderRadius","pointerEvents","typingTimer","onDelete","iteration","onChangeWrapper","onClone","cloned","activeIndex","mayByPromise","onAdd","newItem","items","reduce","accumulator","currentValue","itemAccordion","idx","schemaItem","marginLeft","marginTop","ConfigPanel","customs","isFloatComma","imagePrefix","onCommandRunning","valueChange","newObj","onBackEndCommand","table","DeviceManager","onMoveUp","newIndex","onMoveDown","Paper","noDelete","Toolbar","Typography","component","IconButton","AddIcon","Accordion","expanded","_e","AccordionSummary","expandIcon","ExpandMoreIcon","sx","titleAttr","AccordionDetails","Tooltip","slotProps","popper","UpIcon","buttonEmpty","DownIcon","DeleteIcon","CopyContentIcon","rootTool","help","FormHelperText","helpLink","getInstance","getState","textAlive","textNotAlive","selectOptions","unshift","_item","freeSolo","Autocomplete","onInputChange","_","getOptionLabel","option","_option$label","renderInput","params","TextField","placeholder","helperText","initialized","_context","askInstance","command","getContext","context","alsoDependsOn","htmlInput","maxLength","max","minWidth","showDialog","FormControl","InputLabel","shrink","value_","DialogCron","simple","complex","cron","onOk","getCertificates","_this$state$selectOpt","_this$state$selectOpt2","Select","displayEmpty","renderValue","item_","MenuItem","opacity","leWidth","certWidth","marginRight","_collectionsOptionsOb","certificates","certsPublicOptions","certsPrivateOptions","certsChainOptions","collectionsOptions","collectionsOptionsObj","getObject","collections","_this$state$certsPubl","_this$state$certsPriv","_this$state$certsChai","_this$state$collectio","_this$state$certsPubl2","_this$state$certsPriv2","_this$state$certsChai2","leCollection","leCollectionName","certPublic","certPublicName","certPrivate","certPrivateName","certChained","certChainedName","itemCertPublic","itemCertPrivate","itemCertChained","fontWeight","licLabel","textTransform","licValue","errorTitle","okTitle","errorText","mb","ConfigCheckLicense","running","showLicenseData","foundSuitableLicense","licenseOfflineCheck","allLicenses","askForUpdate","showLinkToProfile","renderErrorDialog","content","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","license","validName","product","validVersion","version","validUuid","uuid","validTill","toLocaleDateString","invoice","Dialog","maxWidth","DialogTitle","DialogContent","DialogContentText","DialogActions","autoFocus","startIcon","IconCheck","renderMessageDialog","pre","key1","Box","parseJwt","token","jsonPayload","atob","c","charCodeAt","isVersionValid","rule","major","findInLicenseManager","_licenses$native","_licenses$native$lice","licenses","errors","useLicense","_uuidObj$native","uuidObj","_aObj$common","aObj","used","checkLicense","_uuidObj$native2","_aObj$common2","controller","AbortController","timeout","abort","_data","method","headers","signal","valid_till","toLocaleString","Error","data_","_error$response","status","renderAskForUpdate","async","isYes","updateLicenses","alert","_onClick","secondRun","useLicenseManager","li","CircularProgress","isIndeterminate","FormControlLabel","control","Checkbox","indeterminate","checked","readOnly","variantComponent","standard","Input","filled","FilledInput","outlined","OutlinedInput","light","bottomLineColor","root","inputRoot","flexWrap","boxSizing","paddingTop","input","textOverflow","overflow","whiteSpace","appearance","WebkitTapHighlightColor","float","chipContainer","flexFlow","alignItems","cursor","minHeight","paddingBottom","labeled","top","labelShrink","focused","underline","borderBottom","primary","left","bottom","position","right","transform","transition","transitions","create","duration","shorter","easing","easeOut","borderBottomColor","main","borderBottomStyle","chip","margin","marginDense","keyCodes","defaultChipRenderer","_ref","isFocused","isDisabled","isReadOnly","handleClick","handleDelete","Chip","blue","ChipInput","React","labelRef","labelNode","newChipKeyCodes","newChipKeys","actualInput","inputBlurTimeout","_keyPressed","_preventChipCreation","styleTheme","focus","_this$actualInput","focusedChip","handleInputBlur","event","onBlur","addChipOptions","blurBehavior","clearInputOnFail","delayBeforeAdd","numChipsBefore","chips","numChipsAfter","handleAddChip","clearInput","handleInputFocus","onFocus","handleKeyDown","onKeyDown","isDefaultPrevented","keyCode","handleDeleteChip","handleKeyUp","updateInput","onKeyUp","handleUpdateInput","inputValue","onUpdateInput","setActualInputRef","ref","inputRef","chipsUpdated","prevPropsValue","ReactDOM","current","getDerivedStateFromProps","newState","clearInputValueOnChange","onBeforeAdd","allowDuplicates","updateChips","additionalUpdates","alwaysShowPlaceholder","chipRenderer","className","disableUnderline","FormHelperTextProps","fullWidthInput","InputProps","InputLabelProps","required","rootRef","actualInputValue","hasInput","shrinkFloatingLabel","chipComponents","InputMore","notched","labelWidth","offsetWidth","startAdornment","InputComponent","htmlFor","delimiter","renderColorDialog","showColorDialog","ChromePicker","colorDialogValue","textColor","endAdornment","noClearButton","ClearIcon","inputLabel","width50","useSystemName","useSystem","longitudeName","latitudeName","longitude","latitude","autoInit","getCoordinates","getSystemCoordinates","getCompactSystemConfig","divider","navigator","geolocation","getCurrentPosition","coords","message","_this$state$longitude","_this$state$latitude","Fab","IconLocationOn","IconGpsFixed","loadComponent","remote","sharedScope","module","getOrLoadRemote","shareScope","remoteFallbackUrl","reject","existingRemote","querySelector","__initialized","init","__webpack_share_scopes__","onerror","script","getElementsByTagName","get","ConfigCustom","protocol","host","uniqueName","fileToLoad","componentNameParts","componentName","setPromise","runningLoads","i18nPromise","i18n","i18nURL","file","extendTranslations","err","all","CustomComponent","LinearProgress","uploadImagesToInstance","selectedInstance","fullWidthOneButton","fullWidthTwoButtons","fullWidthThreeButtons","dropZone","dropZoneEmpty","image","objectFit","uploadDiv","uploadDivDragging","background","uploadCenterDiv","border","uploadCenterIcon","uploadCenterText","fontSize","uploadCenterTextAndIcon","flexDirection","justifyContent","disabledOpacity","deleteButton","selectedImage","IMAGE_EXT","AUDIO_EXT","VIDEO_EXT","DOC_EXT","JS_EXT","ConfigFileSelector","dropzoneRef","objectID","path","upload","updateFiles","readFiles","files","readFolder","folderName","dirFiles","readDir","isDir","RegExp","test","stats","folder","onDrop","acceptedFiles","maxSize","onabort","ext","btoa","Uint8Array","byte","String","fromCharCode","writeFile64","readAsArrayBuffer","renderDeleteDialog","deleteFile","base64ToArrayBuffer","binaryString","len","buffer","loadFile","readFile","play","AudioContext","buf","decodeAudioData","createBufferSource","connect","destination","getFileIcon","extension","backgroundImage","backgroundSize","backgroundRepeat","IconAudio","IconText","IconVideo","IconCode","folders","withFolder","noSize","noNone","buttons","refresh","element","ListItemIcon","ListItemText","delete","_this$dropzoneRef$cur","IconUpload","IconPlay","accept","fileTypes","last","Dropzone","multiple","noKeyboard","noClick","onDragEnter","uploadFile","onDragLeave","getRootProps","getInputProps","uploadError","UploadIcon","fullWidthIcon","adapter","renderFileBrowser","showFileBrowser","SelectFileDialog","selected","_value","selectOnlyFolders","allowUpload","allowDownload","allowCreateFolder","allowView","showToolbar","limitPath","disableEdit","getEnums","enums","short","allowDeactivate","TextWithIcon","getHostByIp","ips","listenOnAllPorts","address","onlyIp4","family","onlyIp6","noInternal","internal","_this$state$ips","_this$state$ips2","fileExists","exist","loadImage","_getUrl","update","port","hostname","res","UploadImage","crop","removeIconFunc","onInstancesUpdate","long","findIndex","getHistory","sort","getAdapterInstances","instances","_instance$common","adapters","_instance$common2","onlyEnabled","_instance$common3","subscribeObject","unsubscribeObject","_obj$native","_obj$native$hardware","interfaces","hardware","networkInterfaces","inter","ignoreInternal","_ip","ignoreLoopback","ip","_this$state$interface","_this$state$interface2","_this$state$interface3","modalDialog","overflowHidden","titleIcon","languageButton","languageButtonActive","toggleTranslation","progress","applyDisabled","applyButton","titleButtonApply","titleButtonClose","onApply","textInput","useState","useEffect","disableEscapeKeyDown","LanguageIcon","autoComplete","multiline","CheckIcon","CloseIcon","jsonError","jsonNoError","AceEditor","showPrintMargin","editValueMode","showGutter","highlightActiveLine","setOptions","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","editorProps","$blockScrolling","wrapper","validateJson","allowEmpty","showSelectId","CustomModal","Editor","LANGUAGES","languages","system","changeGuiLanguage","setLanguage","changeLanguage","getSystemConfig","scrollRef","scrolledDown","offsetHeight","scrollTop","scrollHeight","licenseUrl","showLicenseDialog","loading","addEventListener","reason","overflowY","texts","checkBox","licenseChecked","Check","agreeText","Close","updateTimeout","multiEdit","oldValue","min","checkValue","isFinite","autoCompleteOptions","arr","getOptionSelected","inputProps","step","DialogSelectID","dialogName","filterFunc","types","customFilter","filters","halfWidth1","halfWidth2","PASSWORD_PLACEHOLDER","_repeat","_visible","_notEqual","onChangePassword","password","repeatPassword","repeat","visible","InputAdornment","tabIndex","edge","VisibilityOff","Visibility","form","passwordRepeat","IconCopy","warning","ownId","ownHostname","ports","_instance$native","_instance$native2","bind","secure","leEnabled","leUpdate","leCheckPort","lePort","v6bind","maybePromise","noMargin","initialValue","groupItem","group","ListSubheader","menuPaper","maxHeight","_getValue","_this$state$list","manual","gap","showAllValues","ip2int","ipInt","octet","openUrl","adminInstance","getCurrentInstance","_instanceObj$common","hostObj","localIp","hostIp","netmask","findNetworkAddressOfHost","_message","onLoaded","DialogError","DialogMessage","_origin","_originIp","arg","reloadBrowser","reload","useNative","entries","saveConfig","DialogConfirm","controlStyle","showProcess","ack","okText","slider","unit","marks","gutterBottom","Slider","getAriaValueText","valueLabelDisplay","getIconByName","Edit","Delete","Refresh","Add","Search","LinkOff","NotListedLocation","PlayArrow","Stop","Pause","FastForward","FastRewind","Lightbulb","Fluorescent","WbIncandescent","Power","Settings","Group","Person","QrCode","Wifi","WifiOff","controlTimeout","delayedUpdate","timer","onStateChanged","controlType","stateValue","getObjectID","oid","detectType","subscribeState","unsubscribeState","controlled","read","write","falseImage","falseText","falseTextStyle","iconFalse","textFalse","iconTrue","textTrue","trueText","trueImage","Switch","trueTextStyle","flexGrow","valueLabelFormat","controlDelay","dangerouslySetInnerHTML","__html","borderStyle","secondary","contrastText","marginBlockEnd","marginBlockStart","onLink","_target","_url","hash","close","MAX_SIZE","paper","headerText","visuallyHidden","clip","paddingLeft","paddingRight","silver","filteredOut","buttonCell","outline","buttonRemoveWrapper","zIndex","arrayToObject","array","nameOfFirstAttr","nameOfSecondAttr","row","ConfigTable","_this","filterRefs","secret","handleRequestSort","property","orderCheck","orderBy","newOrder","stableSort","applyFilter","comparator","getComparator","stabilizedThis","order_","updateVisible","_updateVisible","encryptedAttributes","encrypt","objKeyName","objValue","objValueName","_schema$items","clear","visibleValue","valueInputRef","getFilterValue","setFilterValue","createRef","objectToArray","decrypt","filterOn","validateUniqueProps","itemTable","attrItem","schemaForAttribute","uniqueColumns","uniqueCol","allVals","entry","errorMessage","descendingComparator","_el$current","_el$current$children$","_el$current$children$2","filterValue","enhancedTableHead","buttonsWidth","doAnyFilterSet","headCell","align","sortDirection","showFirstAddOnTop","allowAddByFilter","TableSortLabel","active","direction","IconFilterOff","IconFilterOn","import","showImportDialog","ImportIcon","export","onExport","ExportIcon","_row$it$attr","onImport","it2","values","_this$state$value","showTypeOfImportDialog","isAnyFilterSet","IconClose","tdStyle","compact","hover","showSecondAddAt","colSpan","ErrorIcon","alignSelf","helper","time","minRows","TextareaAutosize","resize","maxRows","iconStyle","_this$props$customObj","topic","convertID2Topic","getUsers","users","_users","_user$common","_user$common2","_user$common3","_user$common4","_this$state$users$val4","_this$state$users$val5","_this$state$users$val","_this$state$users$val2","_this$state$users$val3","QRCode","QRCodeComponent","fgColor","bgColor","level","components","accordion","ConfigAccordion","ConfigAlive","autocomplete","ConfigAutocomplete","autocompleteSendTo","ConfigAutocompleteSendTo","certCollection","ConfigCertCollection","certificate","ConfigCertificateSelect","ConfigCertificates","checkbox","ConfigCheckbox","ConfigChip","ConfigColor","coordinates","ConfigCoordinates","ConfigCRON","datePicker","DatePicker","spacing","deviceManager","ConfigDeviceManager","ConfigStaticDivider","ConfigFile","fileSelector","ConfigFunc","ConfigStaticHeader","ConfigImageUpload","imageSendTo","ConfigImageSendTo","ConfigInstanceSelect","interface","ConfigInterface","ConfigIP","jsonEditor","ConfigJsonEditor","ConfigLanguage","ConfigLicense","number","ConfigNumber","objectId","ConfigObjectId","ConfigPassword","ConfigPattern","ConfigPort","qrCode","ConfigQrCode","room","ConfigRoom","select","ConfigSelect","selectSendTo","ConfigSelectSendTo","sendto","ConfigSendTo","ConfigSetState","ConfigSlider","ConfigState","staticImage","ConfigStaticImage","staticLink","ConfigStaticText","staticText","ConfigText","textSendTo","ConfigTextSendTo","timePicker","shortFormat","returnFormat","TimePicker","ampm","timeSteps","timesteps","strValue","toTimeString","views","ConfigTopic","ConfigUUID","ConfigUser","paperWithIcons","paperWithoutIcons","heading","collapsable","renderItems","noMultiEdit","ItemComponent","panel","schemaStyle","columnSpacing","rowSpacing","isParentTab","withIcons","innerStyle","tabs","panelWithIcons","panelWithoutIcons","tab","onHashTabsChanged","tabS","tabN","removeEventListener","Tabs","scrollButtons","tabsStyle","Tab","wrapped","iconPosition","JsonConfigComponent","forceUpdateHandlers","errorTimeout","errorCached","onAlive","attrOrData","onValueChange","forceAttrUpdate","updateData","buildDependencies","readData","loadI18n","exists","jsonFile","jsonStr","flatten","_list","_attrs$attr$confirm","_attrs$attr$onChange","_attrs$attr$hidden","_attrs$attr$label","_attrs$attr$help","_attrs$attr$confirm2","_attrs$attr$onChange2","_attrs$attr$hidden2","_attrs$attr$label2","_attrs$attr$help2","depObj","ConfigTabs","embedded","scroll","exportImportButtons","decryptLegacy","textParts","CryptoJS","enc","Hex","iv","cipherParams","lib","CipherParams","ciphertext","decryptedBinary","AES","Utf8","_iv","encryptLegacy","WordArray","random","encrypted","loadScript","_document$getElementB","getElementById","JsonConfig","Router","fileSubscribed","fileLangSubscribed","handleFileSelect","evt","contents","readAsText","onFileChange","_this$state$schema","getConfigFile","MD5","Theme","saveConfigDialog","getInstanceObject","langFileName","subscribeFiles","unsubscribeFiles","getExportImportButtons","PublishIcon","encryptedNative","_obj$encryptedNative","doNavigate","scanForInclude","filePaths","_getConfigFile","_filePaths","binary","byteLength","JSON5","e1","renderSaveConfigDialog","onSave","findAttr","_schema","postProcessing","dataAttr","tItem","dataVal","doSave","doNotSaveAttributes","doNotSave","encryptedObj","setObject","nativeWithNonSaved","componentDidUpdate","_prevProps","prevState","configStored","SaveCloseButtons","isIFrame","dense","newReact","noTextOnButtons"],"sourceRoot":""}