-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathapp.be29e966.js.map
1 lines (1 loc) · 349 KB
/
app.be29e966.js.map
1
{"version":3,"file":"js/app.be29e966.js","mappings":"+FAEA,MAAMA,EAAa,mBAKNC,EAAWC,IACpB,IAAIC,EAAMC,IAAAA,IAAaC,KAAKC,MAAMN,GAC9BO,EAAOH,IAAAA,IAAaC,KAAKC,MAAMJ,GAC/BM,EAAYJ,IAAAA,IAAaH,QAAQM,EAAMJ,EAAK,CAACM,KAAKL,IAAAA,KAAcM,IAAIC,QAASP,IAAAA,IAAaQ,QAC9F,OAAOJ,EAAUK,UAAU,EAMlBC,EAAWZ,IACpB,IAAIC,EAAMC,IAAAA,IAAaC,KAAKC,MAAMN,GAC9Bc,EAAUV,IAAAA,IAAaU,QAAQZ,EAAMC,EAAK,CAACM,KAAKL,IAAAA,KAAcM,IAAIC,QAASP,IAAAA,IAAaQ,QAC5F,OAAOR,IAAAA,IAAaC,KAAKU,UAAUD,GAASD,UAAU,E,gGCnBxDG,EAAAA,EAAAA,IAAuBC,E,q2FCAlBC,MAAM,U,GAEJA,MAAM,W,GAMNA,MAAM,O,oBAITC,EAAAA,EAAAA,GAAgF,OAA3EC,MAAA,2CAA2C,EAAED,EAAAA,EAAAA,GAAwB,YAAlB,iBAAW,K,UACnEA,EAAAA,EAAAA,GAA4B,OAAvBC,MAAA,YAAgB,W,SACCA,MAAA,yC,UACpBD,EAAAA,EAAAA,GAA+E,OAA1EC,MAAA,2DAA6D,WAAO,K,UACzED,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,uBAAyB,W,GAYzBA,MAAA,wC,SAKqBA,MAAA,sC,GACfA,MAAA,gE,GACAA,MAAA,2C,GACAA,MAAA,2C,UAEHD,EAAAA,EAAAA,GAAsE,QAAhEC,MAAA,qDAAuD,MAAE,K,GAG5DA,MAAA,2C,UAEHD,EAAAA,EAAAA,GAAsE,QAAhEC,MAAA,qDAAuD,MAAE,K,UAMvED,EAAAA,EAAAA,GAAuC,OAAlCC,MAAA,wBAA0B,W,GAI9BC,IAAI,WAAWH,MAAM,kB,uSArD5BC,EAAAA,EAAAA,GAsDM,MAtDNG,EAsDM,WApDJH,EAAAA,EAAAA,GAKM,MALNI,EAKM,EAJJJ,EAAAA,EAAAA,GAA6F,OAAxFD,MAAM,yBAA0BM,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAC,WAAW,K,EAAKT,EAAAA,EAAAA,GAA2B,YAAAU,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,SAAD,MACtEZ,EAAAA,EAAAA,GAA6F,OAAxFD,MAAM,yBAA0BM,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAC,WAAW,K,EAAKT,EAAAA,EAAAA,GAA2B,YAAAU,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,SAAD,MACtEZ,EAAAA,EAAAA,GAA6F,OAAxFD,MAAM,yBAA0BM,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAC,WAAW,K,EAAKT,EAAAA,EAAAA,GAA2B,YAAAU,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,SAAD,MACtEZ,EAAAA,EAAAA,GAA2F,OAAtFD,MAAM,yBAA0BM,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAC,WAAW,K,EAAKT,EAAAA,EAAAA,GAAyB,YAAAU,EAAAA,EAAAA,IAAjBC,EAAAC,GAAG,OAAD,kBAJ3CJ,EAAAK,kBAM7Bb,EAAAA,EAAAA,GA2CM,MA3CNc,EA2CM,EA1CJd,EAAAA,EAAAA,GAEM,OAFDC,MAAA,uBAA4BI,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAQ,cAAAR,EAAAQ,gBAAAD,K,EACtCf,EAAAA,EAAAA,GAAqG,OAAhGiB,IAAAC,EAA0BC,IAAKR,EAAAC,GAAG,MAAOX,MAAA,iD,YAEhDmB,EACAC,EACWb,EAAAc,IAAIC,QAAK,WAApBC,EAAAA,EAAAA,IAoCM,MApCNC,EAoCM,CAnCJC,EACAC,GACA3B,EAAAA,EAAAA,GAUM,aATJ4B,EAAAA,EAAAA,IAQWC,EAAA,C,WAPArB,EAAAsB,M,qCAAAtB,EAAAsB,MAAKvB,GACdwB,GAAG,kBACH7B,IAAI,gBACHD,MAAO,CAAA+B,MAAA,QAAAC,OAAA,OAAAC,SAAA,QACPC,WAAOC,EAAAA,EAAAA,IAAQ5B,EAAA6B,YAAW,WAC3BC,UAAU,K,sCAIdtC,EAAAA,EAAAA,GAoBM,MApBNuC,EAoBM,CAnBc/B,EAAAc,IAAIC,QAAK,WAA3B1B,EAAAA,EAAAA,IAkBa2C,EAAA,C,MAlBgBC,UAAU,aAAcT,MAAOrB,EAAAC,GAAG,OAAQ8B,QAAQ,S,CAClEC,WAASC,EAAAA,EAAAA,KAClB,IAAoE,EAApEhB,EAAAA,EAAAA,IAAoEiB,EAAA,CAA1D5C,MAAO,CAAA6C,MAAA,YAAoB,C,kBAAG,IAAkB,EAAlBlB,EAAAA,EAAAA,IAAkBmB,M,2BAE5D,IAaM,CAbKvC,EAAAc,IAAIC,QAAK,WAApBC,EAAAA,EAAAA,IAaM,MAbNwB,EAaM,EAZJhD,EAAAA,EAAAA,GAAyG,MAAzGiD,GAAyGvC,EAAAA,EAAAA,IAAjCC,EAAAC,GAAG,uBAAD,IAC1EZ,EAAAA,EAAAA,GAAiG,MAAjGkD,GAAiGxC,EAAAA,EAAAA,IAA7CC,EAAAC,GAAG,mCAAD,IACtDZ,EAAAA,EAAAA,GAIM,MAJNmD,EAIM,mBAHDxC,EAAAC,GAAG,OAAQ,IACd,GAAAwC,GAAsE,aACtE1C,EAAAA,EAAAA,IAAGC,EAAAC,GAAG,iBAAD,MAEPZ,EAAAA,EAAAA,GAIM,MAJNqD,EAIM,mBAHD1C,EAAAC,GAAG,OAAQ,IACd,GAAA0C,GAAsE,aACtE5C,EAAAA,EAAAA,IAAGC,EAAAC,GAAG,mBAAD,2B,qCAKb2C,MAAuC,kBAI3CvD,EAAAA,EAAAA,GAAkD,MAAlDwD,EAAkD,aAIpD5B,EAAAA,EAAAA,IAAoJ6B,EAAA,CAApIvD,IAAI,oBAAqBoB,IAAKd,EAAAc,IAAMoC,WAAYlD,EAAAmD,QAAUC,SAAQpD,EAAAqD,OAASC,WAAUtD,EAAAuD,SAAWC,WAAUxD,EAAAyD,S,mEAE1HrC,EAAAA,EAAAA,IAAyGsC,EAAA,CAA3FhE,IAAI,kBAAmBoB,IAAKd,EAAAc,IAAM0C,WAAUxD,EAAAyD,QAAUE,GAAI3D,EAAA4D,OAAOC,U,mCAE/EzC,EAAAA,EAAAA,IAAkF0C,EAAA,CAAvEpE,IAAI,eAAgBqE,OAAQ/D,EAAA+D,OAASJ,GAAI3D,EAAA4D,OAAOC,U,yBAE3DzC,EAAAA,EAAAA,IAAqG4C,EAAA,CAA1FtE,IAAI,eAAgBuE,eAAcjE,EAAAkE,aAAeC,eAAcnE,EAAAoE,c,6CAE1EhD,EAAAA,EAAAA,IAA0IiD,EAAA,CAA/H3E,IAAI,eAAgB4E,WAAYtE,EAAAuE,OAASC,kBAAiBxE,EAAAyE,gBAAkBC,oBAAmB1E,EAAA2E,mB,4JClErG,MAAMC,EAAc,CAEzBC,UAAW,GACXC,YAAa,GACbC,YAAa,OACbC,gBAAgB,GAChBC,WAAY,KACZC,SAAU,EACVC,OAAO,GAEPC,KAAM,KACNC,GAAG,UACHC,GAAG,UACHC,WAAY,cACZ7D,SAAU,GACV8D,YAAa,QACbC,aAAa,EACb1E,OAAO,GChBT,IAAI2E,EAAgBC,OAAOC,SAASC,SAChCC,EAAc,GACYA,EAAV,UAAjBJ,EAAyC,SACzB,QACZ,MAAMK,EAAcD,EAAcH,OAAOC,SAASI,KAAO,eACnDC,EAAgBP,EAAgB,KAAOC,OAAOC,SAASI,KAAO,OCL9DE,EAAaC,IACxB,IAAIC,EAAS,GACb,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAIG,OAAQD,IACjB,KAAVF,EAAIE,GAAWD,GAAUD,EAAIE,GAC3BD,GAAU,IAGjB,OAAOA,CAAM,EAIFG,EAAcJ,IACzB,IAAIC,EAAS,GACb,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAIG,OAAQD,IACjB,KAAVF,EAAIE,GAAWD,GAAUD,EAAIE,GAC3BD,GAAU,IAGjB,OAAOA,CAAM,EAITI,EAAY,kCACLC,EAAcN,GAClBA,EAAIO,QAAQF,GAAW,SAASG,GACrC,MAAO,KAAOA,CAChB,IAIWC,EAAcT,GAClBM,EAAWN,G,gECnBhB3G,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,GAExBF,MAAM,aAAaE,MAAA,0B,IACjBF,MAAM,+B,WAMXC,EAAAA,EAAAA,GAA4B,OAAvBC,MAAA,YAAgB,W,IAKlBF,MAAM,aAAaE,MAAA,0B,IACjBF,MAAM,wB,IAURA,MAAM,aAAaE,MAAA,0B,IACjBF,MAAM,wB,IAURA,MAAM,aAAaE,MAAA,0B,IACjBF,MAAM,wB,IAURA,MAAM,aAAaE,MAAA,yB,UAUYF,MAAM,c,eAkBvCA,MAAM,qB,WACXC,EAAAA,EAAAA,GAAuC,OAAlCC,MAAA,yBAA2B,W,IAC3BA,MAAA,mD,WACHD,EAAAA,EAAAA,GAA4B,OAAvBC,MAAA,YAAgB,W,qkBA1FzB2B,EAAAA,EAAAA,IA+FYyF,EAAA,C,WA9FD7G,EAAA8G,e,uCAAA9G,EAAA8G,eAAc/G,GACtB,oBAAkB,EAClB,eAAcC,EAAA+G,YACdvF,MAAO,IACPwF,MAAO7G,EAAAC,GAAG,QACV6G,OAAO,EACP,wBAAsB,EACvB,cAAY,kBACZ,kBACAC,UAAA,I,mBAEA,IAAsC,CAAtCvH,GACAH,EAAAA,EAAAA,GAyEM,aAxEJA,EAAAA,EAAAA,GAWM,MAXNI,EAWM,EAVJJ,EAAAA,EAAAA,GAAgF,MAAhFc,IAAgFJ,EAAAA,EAAAA,IAApCC,EAAAC,GAAG,UAA0B,IAAC,IAC1EgB,EAAAA,EAAAA,IAIU+F,EAAA,CAJAC,QAAWpH,EAAAqH,QAAQlC,QAAUnF,EAAAqH,QAAQlC,OAAOmB,OAAS,EAAkBtG,EAAAqH,QAAQlC,OAArBhF,EAAAC,GAAG,S,CAC1DgH,SAAOhF,EAAAA,EAAAA,KAChB,IAA+N,EAA/N5C,EAAAA,EAAAA,GAA+N,OAA1ND,OAAK+H,EAAAA,EAAAA,IAAA,CAAC,WAAgDtH,EAAAqH,QAAQlC,QAAUnF,EAAAqH,QAAQlC,OAAOmB,OAAS,EAAH,aAAQ,eAApF7G,MAAA,yB,QAAsHO,EAAAqH,QAAQlC,QAAUnF,EAAAqH,QAAQlC,OAAOmB,OAAS,EAAkBtG,EAAAqH,QAAQlC,OAArBhF,EAAAC,GAAG,SAAwB,M,oBAG1NmH,IACA/H,EAAAA,EAAAA,GAAkL,aAA7K4B,EAAAA,EAAAA,IAAuKoG,EAAA,CAA5JC,KAAK,QAAQC,KAAK,UAAW7H,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAA2H,WAAW,IAAIlI,MAAA,wB,mBAA4B,IAAmD,EAAnD2B,EAAAA,EAAAA,IAAmDiB,EAAA,CAA1C9C,MAAM,iBAAe,C,kBAAC,IAAU,EAAV6B,EAAAA,EAAAA,IAAUwG,M,wBAAazH,EAAAC,GAAG,OAAD,M,SACvJZ,EAAAA,EAAAA,GAAkN,YAA3K,GAAjBQ,EAAA6H,gBAAa,WAA9BxI,EAAAA,EAAAA,IAAuMmI,EAAA,C,MAA9JC,KAAK,QAAQC,KAAK,UAAW7H,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAA2H,WAAW,IAAIlI,MAAA,wB,mBAA4B,IAAqD,EAArD2B,EAAAA,EAAAA,IAAqDiB,EAAA,CAA5C9C,MAAM,iBAAe,C,kBAAC,IAAY,EAAZ6B,EAAAA,EAAAA,IAAY0G,M,wBAAa3H,EAAAC,GAAG,OAAD,M,0BACvLZ,EAAAA,EAAAA,GAAqM,YAA9J,GAAjBQ,EAAA6H,gBAAa,WAA9BxI,EAAAA,EAAAA,IAA0LmI,EAAA,C,MAAlJC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAA+H,MAAOtI,MAAA,wB,mBAA4B,IAAiD,EAAjD2B,EAAAA,EAAAA,IAAiDiB,EAAA,CAAxC9C,MAAM,iBAAe,C,kBAAC,IAAQ,EAAR6B,EAAAA,EAAAA,IAAQ4G,M,wBAAa7H,EAAAC,GAAG,OAAD,M,0CAE5KZ,EAAAA,EAAAA,GAUM,MAVNoB,GAUM,EATJpB,EAAAA,EAAAA,GAAyD,MAAzDqB,IAAyDX,EAAAA,EAAAA,IAApBC,EAAAC,GAAG,SAAU,IAAC,IACnDZ,EAAAA,EAAAA,GAMM,aALJ4B,EAAAA,EAAAA,IAIWC,EAAA,CAJA4G,SAAUjI,EAAA6H,c,WAAwB7H,EAAAqH,QAAQxC,U,qCAAR7E,EAAAqH,QAAQxC,UAAS9E,GAAER,MAAM,WAAY2I,YAAa/H,EAAAC,GAAG,W,CACrF+H,QAAM/F,EAAAA,EAAAA,KACf,IAAiC,EAAjChB,EAAAA,EAAAA,IAAiCiB,EAAA,M,kBAAxB,IAAc,EAAdjB,EAAAA,EAAAA,IAAcgH,M,4DAI7B5I,EAAAA,EAAAA,GAAuI,OAAlIC,MAAA,wCAA6CI,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAqI,OAAOrI,EAAAqH,QAAQxC,a,EAAYzD,EAAAA,EAAAA,IAA6CiB,EAAA,CAApCoF,KAAK,MAAI,C,kBAAC,IAAgB,EAAhBrG,EAAAA,EAAAA,IAAgBkH,M,WAEzH9I,EAAAA,EAAAA,GAUM,MAVNyB,GAUM,EATJzB,EAAAA,EAAAA,GAAwD,MAAxD0B,IAAwDhB,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,QAAS,IAAC,IAClDZ,EAAAA,EAAAA,GAMM,aALJ4B,EAAAA,EAAAA,IAIWC,EAAA,CAJA4G,SAAUjI,EAAA6H,c,WAAwB7H,EAAAqH,QAAQvC,Y,qCAAR9E,EAAAqH,QAAQvC,YAAW/E,GAAER,MAAM,WAAY2I,YAAa/H,EAAAC,GAAG,U,CACvF+H,QAAM/F,EAAAA,EAAAA,KACf,IAAgC,EAAhChB,EAAAA,EAAAA,IAAgCiB,EAAA,M,kBAAvB,IAAa,EAAbjB,EAAAA,EAAAA,IAAamH,M,4DAI5B/I,EAAAA,EAAAA,GAAyI,OAApIC,MAAA,wCAA6CI,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAqI,OAAOrI,EAAAqH,QAAQvC,e,EAAc1D,EAAAA,EAAAA,IAA6CiB,EAAA,CAApCoF,KAAK,MAAI,C,kBAAC,IAAgB,EAAhBrG,EAAAA,EAAAA,IAAgBkH,M,WAE3H9I,EAAAA,EAAAA,GAUM,MAVN2B,GAUM,EATJ3B,EAAAA,EAAAA,GAAwD,MAAxDuC,IAAwD7B,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,QAAS,IAAC,IAClDZ,EAAAA,EAAAA,GAMM,aALJ4B,EAAAA,EAAAA,IAIWC,EAAA,CAJA4G,SAAUjI,EAAA6H,c,WAAwB7H,EAAAqH,QAAQtC,Y,qCAAR/E,EAAAqH,QAAQtC,YAAWhF,GAAER,MAAM,WAAY2I,YAAa/H,EAAAC,GAAG,U,CACvF+H,QAAM/F,EAAAA,EAAAA,KACf,IAAkD,EAAlDhB,EAAAA,EAAAA,IAAkDiB,EAAA,CAAzC9C,MAAM,kBAAgB,C,kBAAC,IAAQ,EAAR6B,EAAAA,EAAAA,IAAQoH,M,4DAI9ChJ,EAAAA,EAAAA,GAAyI,OAApIC,MAAA,wCAA6CI,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAqI,OAAOrI,EAAAqH,QAAQtC,e,EAAc3D,EAAAA,EAAAA,IAA6CiB,EAAA,CAApCoF,KAAK,MAAI,C,kBAAC,IAAgB,EAAhBrG,EAAAA,EAAAA,IAAgBkH,M,WAE3H9I,EAAAA,EAAAA,GA0BM,MA1BNgD,GA0BM,EAzBJpB,EAAAA,EAAAA,IAQcqH,EAAA,CARDlJ,MAAM,uBAAuB,eAAa,O,CAE1CmJ,UAAQtG,EAAAA,EAAAA,KACjB,IAGmB,EAHnBhB,EAAAA,EAAAA,IAGmBuH,EAAA,M,kBAFjB,IAAoG,EAApGvH,EAAAA,EAAAA,IAAoGwH,EAAA,CAAlFrJ,MAAM,YAAaM,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAqH,QAAQnC,SAAW,I,mBAAI,IAAc,mBAAX/E,EAAAC,GAAG,OAAD,M,OACxEgB,EAAAA,EAAAA,IAAoGwH,EAAA,CAAlFrJ,MAAM,YAAaM,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAqH,QAAQnC,SAAW,I,mBAAI,IAAc,mBAAX/E,EAAAC,GAAG,OAAD,M,oCAJ5E,IAA+I,EAA/IZ,EAAAA,EAAAA,GAA+I,+BAAlH,GAApBQ,EAAAqH,QAAQnC,SAAgB/E,EAAAC,GAAG,MAAQD,EAAAC,GAAG,OAAD,IAASgB,EAAAA,EAAAA,IAAiFiB,EAAA,CAAxE9C,MAAM,kBAAgB,C,kBAAC,IAAuC,EAAvC6B,EAAAA,EAAAA,IAAuCyH,EAAA,CAA3BpJ,MAAA,wB,iBAQtE,GAApBO,EAAAqH,QAAQnC,WAAQ,WAA3BlE,EAAAA,EAAAA,IAUM,MAVNyB,GAUM,EATJjD,EAAAA,EAAAA,GAMM,aALJ4B,EAAAA,EAAAA,IAIWC,EAAA,CAJA4G,SAAUjI,EAAA6H,c,WAAwB7H,EAAAqH,QAAQrC,gB,uCAARhF,EAAAqH,QAAQrC,gBAAejF,GAAG2H,KAAM1H,EAAA8I,eAAiB,OAAH,WAAuBvJ,MAAM,WAAY2I,YAAa/H,EAAAC,GAAG,S,CACvI+H,QAAM/F,EAAAA,EAAAA,KACf,IAAkD,EAAlDhB,EAAAA,EAAAA,IAAkDiB,EAAA,CAAzC9C,MAAM,kBAAgB,C,kBAAC,IAAQ,EAAR6B,EAAAA,EAAAA,IAAQ2H,M,kEAIjB,GAAlB/I,EAAA8I,iBAAc,WAAzB9H,EAAAA,EAAAA,IAA0J,O,MAAvHvB,MAAA,wCAA6CI,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAA8I,gBAAiB,I,EAAO1H,EAAAA,EAAAA,IAAqCiB,EAAA,CAA5BoF,KAAK,MAAI,C,kBAAC,IAAQ,EAARrG,EAAAA,EAAAA,IAAQ4H,M,sBAC1IhI,EAAAA,EAAAA,IAAkI,O,MAAtHvB,MAAA,wCAA6CI,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAA8I,gBAAiB,I,EAAM1H,EAAAA,EAAAA,IAAqCiB,EAAA,CAA5BoF,KAAK,MAAI,C,kBAAC,IAAQ,EAARrG,EAAAA,EAAAA,IAAQ6H,M,yBAEpHjI,EAAAA,EAAAA,IAIM,MAAA0B,GAAA,EAHJtB,EAAAA,EAAAA,IAEYoG,EAAA,CAFAS,SAAUjI,EAAA6H,cAAeH,KAAK,UAAW7H,QAAOG,EAAAkJ,qB,mBAC1D,IAAgD,EAAhD9H,EAAAA,EAAAA,IAAgDiB,EAAA,CAAvC9C,MAAM,iBAAe,C,kBAAC,IAAO,EAAP6B,EAAAA,EAAAA,IAAO+H,M,wBAAahJ,EAAAC,GAAG,OAAD,M,uCAK7DZ,EAAAA,EAAAA,GAAoD,MAApDmD,IAAoDzC,EAAAA,EAAAA,IAAjBF,EAAAoJ,SAAO,GAC1CxG,IACApD,EAAAA,EAAAA,GAKM,MALNqD,GAKM,CAJJC,IACA1B,EAAAA,EAAAA,IAEYoG,EAAA,CAFDC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqJ,QAAS5J,MAAA,+C,mBACtD,IAAc,mBAAXU,EAAAC,GAAG,OAAD,M,wEAMXgB,EAAAA,EAAAA,IAAkKkI,EAAA,CAArJ5J,IAAI,iBAAkB8D,WAAUxD,EAAAuJ,SAAWC,OAAQxJ,EAAAyJ,gBAAkBvG,WAAYwG,EAAAxG,WAAayG,qBAAoB3J,EAAA4J,oB,qEAE/HxI,EAAAA,EAAAA,IAAyEyI,EAAA,CAA7DnK,IAAI,gBAAiB8D,WAAUxD,EAAA8J,gB,qGC1FzCtK,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,a,UACsCA,MAAM,a,mBAI1CA,MAAM,WAAWE,MAAA,mB,YACtBD,EAAAA,EAAAA,GAA6B,OAAxBC,MAAA,YAAgB,W,yBAKfF,MAAM,a,IAGbA,MAAM,W,IAEJE,MAAA,Y,IAIAA,MAAA,wB,YAOTD,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,qNAtCjCJ,EAAAA,EAAAA,IAuCYwH,EAAA,C,WAtCD7G,EAAA8G,e,qCAAA9G,EAAA8G,eAAc/G,GACtB,eAAcC,EAAA+G,YACf,sBACCvF,MAAO,IACPyF,OAAO,EACPD,MAAO7G,EAAAC,GAAG,QACX,cAAY,kBACZ8G,UAAA,I,mBAEA,IAAsC,CAAtCvH,IACAH,EAAAA,EAAAA,GA0BM,MA1BNI,GA0BM,CAzBOmK,OAAOC,KAAKN,EAAAxG,YAAYoD,OAAS,IAAH,WAAzCtF,EAAAA,EAAAA,IASM,MATNV,GASM,gBARJU,EAAAA,EAAAA,IAOMiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IAPsBR,EAAAxG,YAAU,CAAzBiH,EAAO3L,M,WAApBwC,EAAAA,EAAAA,IAOM,OAPmCxC,IAAKA,GAAG,EAC/CgB,EAAAA,EAAAA,GAKM,OALAD,OAAK+H,EAAAA,EAAAA,IAAA,cAAkBtH,EAAAoK,WAAa5L,EAAG,qBAA4BqB,QAAKE,GAAEC,EAAAoK,UAAY5L,G,EAC1F4C,EAAAA,EAAAA,IAAuHiJ,EAAA,CAA3G5K,MAAO,CAAA6K,QAAA,OAAAC,WAAA,UAAyCC,KAAK,SAAUhJ,MAAO,GAAKC,OAAQ,GAAKgJ,UAAU,KAC9GjL,EAAAA,EAAAA,GAA6D,MAA7DoB,IAA6DV,EAAAA,EAAAA,IAAZ1B,GAAG,GACpDqC,IACArB,EAAAA,EAAAA,GAAgF,OAA1EK,QAAKE,GAAEC,EAAA0K,oBAAoBlM,I,EAAO4C,EAAAA,EAAAA,IAAkCiB,EAAA,M,kBAAzB,IAAe,EAAfjB,EAAAA,EAAAA,IAAeuJ,M,gDAItE3J,EAAAA,EAAAA,IAEM,MAFNE,GAEM,EADJE,EAAAA,EAAAA,IAAkCwJ,EAAA,CAAzBC,IAAK7K,EAAA8K,WAAS,oBAEzBtL,EAAAA,EAAAA,GAWM,MAXN2B,GAWM,EAVJ3B,EAAAA,EAAAA,GAA2B,YAAAU,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,QAAS,IAAC,IACrBZ,EAAAA,EAAAA,GAGM,MAHNuC,GAGM,EAFJX,EAAAA,EAAAA,IACWC,EAAA,CADDoG,KAAK,Q,WAAiBzH,EAAAoK,U,qCAAApK,EAAAoK,UAASrK,GAAGkI,SAAoB,GAAVyB,EAAAF,OAAc7H,WAAOC,EAAAA,EAAAA,IAAQ5B,EAAAqJ,QAAO,WAAE9J,MAAM,WAAW2I,YAAY,I,iDAG3H1I,EAAAA,EAAAA,GAIM,MAJNgD,GAIM,EAHJpB,EAAAA,EAAAA,IAEYoG,EAAA,CAFDC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqJ,S,mBAC7C,IAAkC,mBAA/BK,EAAAF,OAASrJ,EAAAC,GAAG,MAAQD,EAAAC,GAAG,OAAD,M,0BAKjCqC,M,49GCpCJ,MAAMsI,IAAOC,EAAAA,GAAAA,GAAW,CACpBC,OAAQ,KACRC,eAAgB,KAChBC,SAAU,CAAEC,GAAEA,IACdC,QAASA,CAACJ,EAAQzM,IACPA,IAIf,UCRO,MAAM8M,GAAeA,CAACtE,EAAMI,EAAQmE,IAChCC,GAAAA,EAAaC,MAAMrE,GAAW2D,GAAKW,OAAOC,EAAE,UAAW3E,GAAS+D,GAAKW,OAAOC,EAAE,MAAO,CAC1FC,WAAW,EACXC,YAAY,kEACZC,iBAAkBf,GAAKW,OAAOC,EAAE,MAChCI,kBAAmBhB,GAAKW,OAAOC,EAAE,MACjCK,kBAAkB,EAClBC,mBAAmB,EACnBC,kBAAmB,oBACnBC,mBAAoB,oBACpBC,WAAY,QACZC,KAAMC,GAAAA,IACN5E,KAAM,UACN6D,SAAWgB,IACK,YAAXA,GAAsBhB,GAAU,I,+GChBvC/L,EAAAA,EAAAA,GAA6B,OAAxBC,MAAA,YAAgB,W,IAEhBA,MAAA,yC,eAKAF,MAAM,O,YACXC,EAAAA,EAAAA,GAA6B,OAAxBC,MAAA,YAAgB,W,2CATvBuB,EAAAA,EAAAA,IAUM,OAVDzB,MAAM,UAAWE,OAAK+M,EAAAA,EAAAA,IAAExM,EAAAyM,Y,CAC3B9M,IACA+M,EAAAA,EAAAA,IAA4BvM,EAAAwM,OAAA,iBAAAC,GAAA,IAC5BpN,EAAAA,EAAAA,GAIM,MAJNI,GAIM,EAHJJ,EAAAA,EAAAA,GAEM,aADJA,EAAAA,EAAAA,GAAyE,OAApEiB,IAAAC,GAA6BC,IAAKR,EAAAC,GAAG,QAASX,MAAA,iB,gBAGvDD,EAAAA,EAAAA,GAAgC,MAAhC+H,IAAgCrH,EAAAA,EAAAA,IAAZwJ,EAAAmB,KAAG,GACvBjK,IAA6B,E,CAQjC,QACE4J,KAAK,SACLqC,WAAY,CACZ,EACAC,MAAO,CACLjC,IAAK,CACHnD,KAAKqF,OACLC,UAAS,EACTC,QAASlC,GAAKW,OAAOC,EAAE,SAEzBnK,MAAM,CACJkG,KAAKqF,OACLC,UAAS,GAEXvL,OAAO,CACLiG,KAAKqF,OACLC,UAAS,GAEXE,UAAU,CACRxF,KAAKqF,OACLC,UAAS,IAGbG,KAAAA,CAAML,GAEJ,MAAML,GAAYW,EAAAA,EAAAA,KAAS,KAClB,CACL5L,MAAOsL,EAAMtL,MAAQsL,EAAMtL,MAAQ,OACnCC,OAAQqL,EAAMrL,OAASqL,EAAMrL,OAAS,OACtCyL,UAAWJ,EAAMI,UAAYJ,EAAMI,UAAY,OAInD,MAAO,CACLT,YAEJ,G,SC/CF,MAAMY,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,sBJ6CA,IACE7C,KAAM,cACNqC,WAAY,CACVS,UAAS,KACTC,OAAM,GACNC,YAAWA,GAAAA,KAEbV,MAAM,CAAC,SAAS,cAChBK,KAAAA,CAAML,EAAMW,GAGV,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GACrBoL,GAAYpL,EAAAA,EAAAA,IAAIqL,GAAKW,OAAOC,EAAE,SAG9BvB,GAAY1K,EAAAA,EAAAA,IAAI,IAGhB2J,EAAUA,KACQ,IAAnBe,EAAUD,OAAyC,IAA1BC,EAAUD,MAAMuD,SAC5CD,EAAQE,KAAK,WAAWvD,EAAUD,MAAMuD,QACxC3G,IAAa,EAIT6G,GAAelO,EAAAA,EAAAA,IAAI,IACnBgL,EAAuBF,IAC3BoD,EAAazD,MAAQK,EACrBc,GAAaP,GAAKW,OAAOC,EAAE,MAAOZ,GAAKW,OAAOC,EAAE,aAAckC,EAAe,EAEzEA,EAAiBA,KACrBJ,EAAQE,KAAK,qBAAsBC,EAAazD,QAChD2D,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,IAET5D,EAAUD,OAASyD,EAAazD,QAAOC,EAAUD,MAAQ,GAAE,EAI1D8D,EAAQA,KACZnD,EAAUX,MAAQY,GAAKW,OAAOC,EAAE,QAChCvB,EAAUD,MAAQ,GAClByD,EAAazD,MAAQ,GACrBrD,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IACnBC,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACLpH,iBACAgE,YACAV,YACAf,UACAqB,sBACAmD,iBACAI,QACAlH,cAEJ,GKlHF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,yECCIvH,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,a,IACJA,MAAM,W,IACJA,MAAM,c,UAU6BA,MAAM,qB,UACpCE,MAAA,gB,IACPF,MAAM,W,IACJA,MAAM,c,IACNE,MAAA,Y,IAOAA,MAAA,wB,YAKTD,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,2MAtCjCJ,EAAAA,EAAAA,IAuCYwH,EAAA,C,WAtCD7G,EAAA8G,e,qCAAA9G,EAAA8G,eAAc/G,GACtB,eAAcC,EAAA+G,YACdvF,MAAO,IACPyF,OAAO,EACPD,MAAO7G,EAAAC,GAAG,QACX,cAAY,kBACZ8G,UAAA,I,mBAEA,IAAsC,CAAtCvH,IACAH,EAAAA,EAAAA,GA2BM,MA3BNI,GA2BM,EA1BJJ,EAAAA,EAAAA,GAUM,MAVNc,GAUM,EATJd,EAAAA,EAAAA,GAA8C,MAA9C+H,IAA8CrH,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCgB,EAAAA,EAAAA,IAOYgN,EAAA,CANT,kBAAgB,EAChB,oBAAkB,EAClB,eAAcpO,EAAAqO,sBACdC,UAAU,G,mBAEX,IAAmH,EAAnHlN,EAAAA,EAAAA,IAAmHoG,EAAA,CAAxGC,KAAK,QAAQC,KAAK,W,mBAAW,IAAiD,EAAjDtG,EAAAA,EAAAA,IAAiDiB,EAAA,CAAxC9C,MAAM,iBAAe,C,kBAAC,IAAQ,EAAR6B,EAAAA,EAAAA,IAAQ2H,M,wBAAa5I,EAAAC,GAAG,OAAD,M,oCAGvFJ,EAAAoJ,SAAWpJ,EAAAoJ,QAAQ9C,OAAS,IAAH,WAApCtF,EAAAA,EAAAA,IAAyF,MAAzFJ,IAAyFV,EAAAA,EAAAA,IAAjBF,EAAAoJ,SAAO,iBAC/EpI,EAAAA,EAAAA,IAAwC,MAAxCH,MACArB,EAAAA,EAAAA,GAYM,MAZNyB,GAYM,EAXJzB,EAAAA,EAAAA,GAA8C,MAA9C0B,IAA8ChB,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCZ,EAAAA,EAAAA,GAMM,MANN2B,GAMM,EALJC,EAAAA,EAAAA,IAIWC,EAAA,CAJDoG,KAAK,Q,WAAiBzH,EAAAuO,W,qCAAAvO,EAAAuO,WAAUxO,GAAG4B,WAAOC,EAAAA,EAAAA,IAAQ5B,EAAAqJ,QAAO,WAAE9J,MAAM,WAAY2I,YAAa/H,EAAAC,GAAG,Y,CAC1F+H,QAAM/F,EAAAA,EAAAA,KACf,IAA0B,EAA1BhB,EAAAA,EAAAA,IAA0BiB,EAAA,M,kBAAjB,IAAO,EAAPjB,EAAAA,EAAAA,IAAO+H,M,6DAItB3J,EAAAA,EAAAA,GAEM,MAFNuC,GAEM,EADJX,EAAAA,EAAAA,IAAmFoG,EAAA,CAAxEC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqJ,S,mBAAU,IAAc,mBAAXlJ,EAAAC,GAAG,OAAD,M,0BAIpEoC,M,8CAUJ,QACEgI,KAAM,aACNqC,WAAY,CACV2B,KAAI,OACJC,IAAGA,GAAAA,KAELtB,KAAAA,CAAML,EAAMW,GAGV,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GACrB0J,GAAU1J,EAAAA,EAAAA,IAAI,IACd0H,GAAU1H,EAAAA,EAAAA,IAAI,IACd6O,GAAa7O,EAAAA,EAAAA,IAAI,IAGjB2J,EAAUA,KACdoE,EAAQE,KAAK,WAAWvG,EAAQ+C,MAAOoE,EAAWpE,OAClDpD,GAAa,EAITsH,EAAyBK,IAC7B,MAAMC,EAAS,IAAIC,WACnBD,EAAOE,OAAS,KACXF,EAAOvI,OAAOE,OAAS,SACxBwH,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,KAId5G,EAAQ+C,MAAQwE,EAAOvI,QACvB0H,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,IACV,EAEJW,EAAOG,QAAU,MACfhB,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,QACNsG,UAAU,GACV,EAEJW,EAAOI,WAAWL,EAAKA,KAAK,EAIxBT,EAAQA,KACZ7E,EAAQe,MAAQ,GAChB/C,EAAQ+C,MAAQ,GAChBoE,EAAWpE,MAAQ,GACnBrD,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IACnBC,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACLpH,iBACAsC,UACAhC,UACAmH,aACAF,wBACAhF,UACAtC,cACAkH,QAEJ,GCtHF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,UCPSvO,IAAI,iBAAiBH,MAAM,mB,0EADlCF,EAAAA,EAAAA,IAIa2P,EAAA,CAJD,eAAa,YAAa5H,QAASsC,EAAAtC,QAAUa,WAAYyB,EAAAuF,QAAUjP,EAAAkP,eAAiB,aAAYxF,EAAAyF,MAAOlN,UAAU,O,mBAC3H,IAEM,EAFNzC,EAAAA,EAAAA,GAEM,MAFNG,GAEM,EADJ+M,EAAAA,EAAAA,IAA4BvM,EAAAwM,OAAA,kBAAAC,GAAA,Y,4CAQlC,QACEpC,KAAM,UACNsC,MAAO,CACL1F,QAAS,CACPM,KAAKqF,OACLC,UAAS,EACTC,QAAQ,IAEVkC,MAAO,CACLzH,KAAK0H,OACLpC,UAAS,EACTC,QAAQ,KAEVgC,OAAQ,CACNvH,KAAK2H,QACLrC,UAAS,EACTC,SAAQ,IAGZE,KAAAA,GAEE,MAAMmC,GAAiB5P,EAAAA,EAAAA,IAAI,MACrBwP,GAAgBxP,EAAAA,EAAAA,KAAI,GAGpB6P,EAAgBA,KACpBpB,YAAW,KACNmB,EAAenF,OAASmF,EAAenF,MAAMqF,kBAC9CN,EAAc/E,MAAQmF,EAAenF,MAAMqF,kBAAkBC,YAAcH,EAAenF,MAAMqF,kBAAkBE,YAE/GR,EAAc/E,OAAQ,CAAK,GAChC,EAAE,EAIN,IAAIwF,EAAiB,KAErB,MAAMC,EAAqBA,KACtBN,EAAenF,QAChBwF,EAAiB,IAAIE,gBAAe,KAClCN,GAAe,IAEjBI,EAAeG,QAAQR,EAAenF,OACxC,EAeF,OAZA4F,EAAAA,EAAAA,KAAU,KACRR,IACAK,GAAoB,KAGtBI,EAAAA,EAAAA,KAAgB,KACXL,GAAkBL,EAAenF,QAClCwF,EAAeM,UAAUX,EAAenF,OACxCwF,EAAeO,aACjB,IAGK,CACLZ,iBACAJ,gBACAK,gBAEJ,GCnEF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,UVyGA,IACE/E,KAAK,iBACLqC,WAAY,CACVsD,QAAO,GACPC,YAAW,GACXC,WAAU,GACVC,WAAU,OACVC,UAAS,OACTC,KAAI,OACJhC,KAAI,OACJiC,aAAY,OACZC,KAAI,OACJC,KAAI,OACJC,KAAI,OACJC,SAAQ,OACRC,OAAM,OACNC,UAAS,OACTtC,IAAGA,GAAAA,KAEL3B,MAAM,CAAC,MAAM,cACbK,KAAAA,CAAML,EAAMW,GAGV,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GACrB0J,GAAU1J,EAAAA,EAAAA,IAAI,IAGd2H,GAAU3H,EAAAA,EAAAA,IAAI,CAClBmF,UAAWiI,EAAMhM,IAAI+D,UACrBC,YAAagI,EAAMhM,IAAIgE,YACvBC,YAAa+H,EAAMhM,IAAIiE,YACvBC,gBAAgB8H,EAAMhM,IAAIkE,gBAC1BC,WAAY6H,EAAMhM,IAAImE,YAAc,KACpCC,SAAU4H,EAAMhM,IAAIoE,UAAY,EAChCC,OAAQ2H,EAAMhM,IAAIqE,SAId6L,EAAeA,KACnB5H,EAAQe,MAAQ,GAEhB,MAAM8G,EAAU,8FAChB,OAAKA,EAAQC,KAAK7J,EAAQ8C,MAAMtF,WAK5BsM,MAAM9J,EAAQ8C,MAAMrF,cAAgBuC,EAAQ8C,MAAMrF,YAAc,GAAKuC,EAAQ8C,MAAMrF,YAAc,OACnGsE,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,UACvB,GAGHtE,EAAQ8C,MAAMpF,aAA4C,IAA7BsC,EAAQ8C,MAAMpF,YAKnB,GAA1BsC,EAAQ8C,MAAMjF,UAAmBmC,EAAQ8C,MAAMnF,iBAAoD,IAAjCqC,EAAQ8C,MAAMnF,mBAKvD,GAA1BqC,EAAQ8C,MAAMjF,UAAmBmC,EAAQ8C,MAAMlF,YAAkD,IAApCoC,EAAQ8C,MAAMlF,WAAWmC,WACvFgC,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,WACvB,IANPvC,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,WACvB,IANPvC,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,YACvB,IAXPvC,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,aACvB,EAuBE,EAIPyF,GAAiB1R,EAAAA,EAAAA,MACjB+J,GAAkB/J,EAAAA,EAAAA,IAAI,GAEtBiI,EAAcD,IACP,GAARA,GACoB,GAAlBsJ,MAELvH,EAAgBU,MAAQzC,EACxB0J,EAAejH,MAAMC,UAAY,GACjCgH,EAAejH,MAAMrD,gBAAiB,EAAI,EAGtCe,GAAgBnI,EAAAA,EAAAA,KAAI,GACC,IAAxB2H,EAAQ8C,MAAMhF,SAAc0C,EAAcsC,OAAQ,GACrD,MAAMZ,EAAYpE,IAEY,GAAzBsE,EAAgBU,OAEb2C,EAAM5J,WAAWiC,GAAQD,WAAUmC,EAAQ8C,MAAMjF,SAAW,GAChEmC,EAAQ8C,MAAQ,IAAI9C,EAAQ8C,SAAU2C,EAAM5J,WAAWiC,IACvD0C,EAAcsC,OAAQ,GAGS,GAAzBV,EAAgBU,QAEtB9C,EAAQ8C,MAAMhF,OAASA,EACvBsI,EAAQE,KAAK,SAAUxI,EAAQkC,EAAQ8C,OACvCtC,EAAcsC,OAAQ,EACxB,EAGIpC,EAAQA,KACZF,EAAcsC,OAAQ,EACtB9C,EAAQ8C,MAAMhF,OAAS,EAAE,EAIrByE,EAAsBY,IAC1BiD,EAAQE,KAAK,WAAYnD,GACtBnD,EAAQ8C,MAAMhF,QAAUkC,EAAQ8C,MAAMhF,QAAUqF,IACjDnD,EAAQ8C,MAAMhF,OAAS,GACvB0C,EAAcsC,OAAQ,EACxB,EAIIkH,GAAgB3R,EAAAA,EAAAA,MAChBwJ,EAAsBA,KAC1BmI,EAAclH,MAAM/C,QAAUC,EAAQ8C,MAAMlF,WAAaoC,EAAQ8C,MAAMlF,WAAWmC,QAAU,GAC5FiK,EAAclH,MAAMoE,WAAalH,EAAQ8C,MAAMlF,WAAaoC,EAAQ8C,MAAMlF,WAAWsJ,WAAa,GAClG8C,EAAclH,MAAMrD,gBAAiB,CAAI,EAErCgD,EAAiBA,CAAC1C,EAAQmH,KAC9BlH,EAAQ8C,MAAMlF,WAAa,CACzBmC,QAAQA,EACRmH,WAAWA,EACZ,EAGGlF,EAAUA,KACO,GAAlB2H,MACHvD,EAAQE,KAAK,WAAWtG,EAAQ8C,OAChCpD,IAAa,GAIT,YAAEuK,IAAgBC,EAAAA,EAAAA,KAGlBlJ,EAASmJ,UACbpK,GAAW,GACNA,GAAWA,EAAQd,OAAS,SAS3BgL,EAAYlK,IAClB0G,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,qBAblB5D,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,kBAUpB,EAGE5I,GAAiBpJ,EAAAA,EAAAA,KAAI,GAGrBuO,EAAQA,KACZ7E,EAAQe,MAAQ,GAChBrB,EAAeqB,OAAQ,EACvB9C,EAAQ8C,MAAQ,CACdtF,UAAWiI,EAAMhM,IAAI+D,UACrBC,YAAagI,EAAMhM,IAAIgE,YACvBC,YAAa+H,EAAMhM,IAAIiE,YACvBC,gBAAgB8H,EAAMhM,IAAIkE,gBAC1BC,WAAY6H,EAAMhM,IAAImE,YAAc,KACpCC,SAAU4H,EAAMhM,IAAIoE,UAAY,EAChCC,OAAQ2H,EAAMhM,IAAIqE,QAEO,IAAxBkC,EAAQ8C,MAAMhF,OAAc0C,EAAcsC,OAAQ,EAChDtC,EAAcsC,OAAQ,EAC3BrD,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IAChBkD,EAAejH,OAASiH,EAAejH,MAAMrD,gBAAgBsK,EAAejH,MAAMpD,cAClFsK,EAAclH,OAASkH,EAAclH,MAAMrD,gBAAgBuK,EAAclH,MAAMpD,cAClFoH,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACL7G,UACAP,iBACAsC,UACAC,UACA+H,iBACAzJ,aACA8B,kBACAF,WACA1B,gBACAE,QACA6B,qBACAqE,QACAlH,cACAsB,SACAS,iBACAuI,gBACAnI,sBACAY,iBAEJ,GW9TF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,yECEItK,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,a,IACJA,MAAM,aAAaE,MAAA,0B,IACjBF,MAAM,c,IACNA,MAAM,c,IAEJE,MAAA,mB,YAIPD,EAAAA,EAAAA,GAAiC,OAA5BC,MAAA,gBAAoB,W,IACpBF,MAAM,c,IAEJE,MAAA,mB,IAKJF,MAAM,aAAaE,MAAA,0B,IACjBF,MAAM,c,IACNA,MAAM,c,IAGDA,MAAM,U,IAUXA,MAAM,c,IAGDA,MAAM,U,IAWbA,MAAM,aAAaE,MAAA,yB,IACjBF,MAAM,c,IACNA,MAAM,c,IAGDA,MAAM,U,YAUhBC,EAAAA,EAAAA,GAAiC,OAA5BC,MAAA,gBAAoB,W,IACpBF,MAAM,c,IAEJE,MAAA,mB,IAKJF,MAAM,aAAaE,MAAA,0B,IACjBF,MAAM,c,IACNA,MAAM,c,YACTC,EAAAA,EAAAA,GAAgB,WAAX,SAAK,K,IACLC,MAAA,mB,IAKJF,MAAM,aAAaE,MAAA,yB,IACjBF,MAAM,c,IACNA,MAAM,c,IAGDA,MAAM,U,YAYpBC,EAAAA,EAAAA,GAAuC,OAAlCC,MAAA,yBAA2B,W,IAC3BA,MAAA,mD,YACHD,EAAAA,EAAAA,GAA4B,OAAvBC,MAAA,YAAgB,W,8RA5GzBJ,EAAAA,EAAAA,IAiHYwH,EAAA,C,WAhHD7G,EAAA8G,e,qCAAA9G,EAAA8G,eAAc/G,GACvB,sBACCyB,MAAO,IACPwF,MAAO7G,EAAAC,GAAG,QACV6G,OAAO,EACR,cAAY,kBACX,eAAcjH,EAAA+G,YACfG,UAAA,I,mBAEA,IAAsC,CAAtCvH,IACAH,EAAAA,EAAAA,GA8FM,MA9FNI,GA8FM,EA7FJJ,EAAAA,EAAAA,GAeM,MAfNc,GAeM,EAdJd,EAAAA,EAAAA,GAA8C,MAA9C+H,IAA8CrH,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCZ,EAAAA,EAAAA,GAKM,MALNoB,GAKM,EAJJpB,EAAAA,EAAAA,GAA0B,YAAAU,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,QAAD,IACVZ,EAAAA,EAAAA,GAEM,MAFNqB,GAEM,EADJO,EAAAA,EAAAA,IAAwCuQ,EAAA,C,WAAd3R,EAAAqH,QAAQhC,G,qCAARrF,EAAAqH,QAAQhC,GAAEtF,I,2BAGxCkB,IACAzB,EAAAA,EAAAA,GAKM,MALN0B,GAKM,EAJJ1B,EAAAA,EAAAA,GAA0B,YAAAU,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,QAAD,IACVZ,EAAAA,EAAAA,GAEM,MAFN2B,GAEM,EADJC,EAAAA,EAAAA,IAAwCuQ,EAAA,C,WAAd3R,EAAAqH,QAAQ/B,G,qCAARtF,EAAAqH,QAAQ/B,GAAEvF,I,8BAI1CP,EAAAA,EAAAA,GA4BM,MA5BNuC,GA4BM,EA3BJvC,EAAAA,EAAAA,GAA8C,MAA9CgD,IAA8CtC,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCZ,EAAAA,EAAAA,GAYM,MAZNiD,GAYM,EAXJjD,EAAAA,EAAAA,GAAyB,YAAAU,EAAAA,EAAAA,IAAjBC,EAAAC,GAAG,OAAD,IACVgB,EAAAA,EAAAA,IAScqH,EAAA,CATDhJ,MAAA,kBAAwB,eAAa,O,CAErCiJ,UAAQtG,EAAAA,EAAAA,KACjB,IAImB,EAJnBhB,EAAAA,EAAAA,IAImBuH,EAAA,M,kBAHP,IAAsC,gBAAhD3H,EAAAA,EAAAA,IAEWiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IAFsBlK,EAAA4R,gBAAc,CAA7BC,EAAKC,M,WACrBzS,EAAAA,EAAAA,IAAmFuJ,EAAA,C,IAD9BkJ,EAClCjS,QAAKE,GAAEC,EAAAqH,QAAQ9B,WAAasM,G,mBAAO,IAAU,mBAAPA,GAAI,M,8DAJnE,IAA6G,EAA7GrS,EAAAA,EAAAA,GAA6G,OAA7GkD,GAA6G,mBAApF1C,EAAAqH,QAAQ9B,YAAU,IAAGnE,EAAAA,EAAAA,IAAwDiB,EAAA,CAA/C9C,MAAM,kBAAgB,C,kBAAC,IAAc,EAAd6B,EAAAA,EAAAA,IAAcyH,M,oBAUhGrJ,EAAAA,EAAAA,GAYM,MAZNmD,GAYM,EAXJnD,EAAAA,EAAAA,GAAyB,YAAAU,EAAAA,EAAAA,IAAjBC,EAAAC,GAAG,OAAD,IACVgB,EAAAA,EAAAA,IAScqH,EAAA,CATDhJ,MAAA,kBAAwB,eAAa,O,CAErCiJ,UAAQtG,EAAAA,EAAAA,KACjB,IAImB,EAJnBhB,EAAAA,EAAAA,IAImBuH,EAAA,M,kBAHP,IAAoC,gBAA9C3H,EAAAA,EAAAA,IAEWiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IAFsBlK,EAAA+R,cAAY,CAA3BtK,EAAKqK,M,WACrBzS,EAAAA,EAAAA,IAAiFuJ,EAAA,C,IAD9BkJ,EAChCjS,QAAKE,GAAEC,EAAAqH,QAAQ3F,SAAW+F,G,mBAAO,IAAU,mBAAPA,GAAI,M,8DAJjE,IAA2G,EAA3GjI,EAAAA,EAAAA,GAA2G,OAA3GoD,GAA2G,mBAAlF5C,EAAAqH,QAAQ3F,UAAQ,IAAGN,EAAAA,EAAAA,IAAwDiB,EAAA,CAA/C9C,MAAM,kBAAgB,C,kBAAC,IAAc,EAAd6B,EAAAA,EAAAA,IAAcyH,M,sBAWhGrJ,EAAAA,EAAAA,GAsBM,MAtBNqD,GAsBM,EArBJrD,EAAAA,EAAAA,GAA8C,MAA9CsD,IAA8C5C,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCZ,EAAAA,EAAAA,GAYM,MAZNuD,GAYM,EAXJvD,EAAAA,EAAAA,GAAyB,YAAAU,EAAAA,EAAAA,IAAjBC,EAAAC,GAAG,OAAD,IACVgB,EAAAA,EAAAA,IAScqH,EAAA,CATDhJ,MAAA,kBAAwB,eAAa,O,CAErCiJ,UAAQtG,EAAAA,EAAAA,KACjB,IAImB,EAJnBhB,EAAAA,EAAAA,IAImBuH,EAAA,M,kBAHP,IAAwC,gBAAlD3H,EAAAA,EAAAA,IAEWiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IAFuBlK,EAAAgS,iBAAe,CAA/BvS,EAAMqS,M,WACtBzS,EAAAA,EAAAA,IAAsFuJ,EAAA,C,IAD/BkJ,EACpCjS,QAAKE,GAAEC,EAAAqH,QAAQ7B,YAAc/F,G,mBAAQ,IAAW,mBAARA,GAAK,M,8DAJtE,IAA8G,EAA9GD,EAAAA,EAAAA,GAA8G,OAA9GwD,GAA8G,mBAArFhD,EAAAqH,QAAQ7B,aAAW,IAAGpE,EAAAA,EAAAA,IAAwDiB,EAAA,CAA/C9C,MAAM,kBAAgB,C,kBAAC,IAAc,EAAd6B,EAAAA,EAAAA,IAAcyH,M,mBAUjGoJ,IACAzS,EAAAA,EAAAA,GAKM,MALN0S,GAKM,EAJJ1S,EAAAA,EAAAA,GAAyB,YAAAU,EAAAA,EAAAA,IAAjBC,EAAAC,GAAG,OAAD,IACVZ,EAAAA,EAAAA,GAEM,MAFN2S,GAEM,EADJ/Q,EAAAA,EAAAA,IAA2CgR,EAAA,C,WAAvBpS,EAAAqH,QAAQ5B,Y,qCAARzF,EAAAqH,QAAQ5B,YAAW1F,I,8BAI7CP,EAAAA,EAAAA,GAQM,MARN6S,GAQM,EAPJ7S,EAAAA,EAAAA,GAA8C,MAA9C8S,IAA8CpS,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCZ,EAAAA,EAAAA,GAKM,MALN+S,GAKM,CAJJC,IACAhT,EAAAA,EAAAA,GAEM,MAFNiT,GAEM,EADJrR,EAAAA,EAAAA,IAAqCgR,EAAA,C,WAAjBpS,EAAAqH,QAAQtG,M,qCAARf,EAAAqH,QAAQtG,MAAKhB,I,8BAIvCP,EAAAA,EAAAA,GAeM,MAfNkT,GAeM,EAdJlT,EAAAA,EAAAA,GAA8C,MAA9CmT,IAA8CzS,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCZ,EAAAA,EAAAA,GAYM,MAZNoT,GAYM,EAXJpT,EAAAA,EAAAA,GAAyB,YAAAU,EAAAA,EAAAA,IAAjBC,EAAAC,GAAG,OAAD,IACVgB,EAAAA,EAAAA,IAScqH,EAAA,CATDhJ,MAAA,kBAAwB,eAAa,O,CAErCiJ,UAAQtG,EAAAA,EAAAA,KACjB,IAImB,EAJnBhB,EAAAA,EAAAA,IAImBuH,EAAA,M,kBAHP,IAAgC,gBAA1C3H,EAAAA,EAAAA,IAEWiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IAFsBlK,EAAA6S,UAAQ,CAAvBzN,EAAK0M,M,WACrBzS,EAAAA,EAAAA,IAAyFuJ,EAAA,C,IAD1CkJ,EAC5BjS,QAAKE,GAAEC,EAAAqH,QAAQjC,KAAOA,EAAK+E,O,mBAAQ,IAAgB,mBAAb/E,EAAK0N,OAAK,M,8DAJzE,IAAwH,EAAxHtT,EAAAA,EAAAA,GAAwH,OAAxHuT,GAAwH,mBAA/F/S,EAAAgT,gBAAgBhT,EAAAqH,QAAQjC,OAAI,IAAIhE,EAAAA,EAAAA,IAAwDiB,EAAA,CAA/C9C,MAAM,kBAAgB,C,kBAAC,IAAc,EAAd6B,EAAAA,EAAAA,IAAcyH,M,uBAY/GoK,IACAzT,EAAAA,EAAAA,GAKM,MALN0T,GAKM,CAJJC,IACA/R,EAAAA,EAAAA,IAEYoG,EAAA,CAFDC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqJ,QAAS5J,MAAA,+C,mBACtD,IAAc,mBAAXU,EAAAC,GAAG,OAAD,M,uEAUb,QACEoK,KAAK,eACLqC,WAAY,CACVkE,UAASA,GAAAA,KAEXjE,MAAM,CAAC,MAAM,MACbK,KAAAA,CAAML,EAAMW,GAGV,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GAGrBmT,EAAW,CAAC,CAACC,MAAM,UAAU3I,MAAM,MAAO,CAAC2I,MAAM,UAAU3I,MAAM,OACjE6I,EAAmB5N,IACvB,MAAMgO,EAAOP,EAASQ,MAAKD,GAAQA,EAAKjJ,QAAU/E,IAClD,OAAOgO,EAAOA,EAAKN,MAAQ,SAAS,EAIhClB,GAAiBxE,EAAAA,EAAAA,KAAS,IACf,WAAZN,EAAMnJ,GACA,CAAC,cAAc,WAAW,YAAY,kBAE3B,OAAZmJ,EAAMnJ,IAA2B,OAAZmJ,EAAMnJ,GAC1B,CAAC,cAAc,QAAQ,SAAS,WAE7B,CAAC,cAAc,WAAW,YAAY,oBAG9CoO,EAAe,CAAC,GAAG,GAAG,GAAG,GAAG,IAE5BC,EAAkB,CAAC,QAAQ,YAAY,OAGvC3K,GAAU3H,EAAAA,EAAAA,IAAI,CAClB0F,KAAM0H,EAAMhM,IAAIsE,KAChBC,GAAIyH,EAAMhM,IAAIuE,GACdC,GAAIwH,EAAMhM,IAAIwE,GACdC,WAAYuH,EAAMhM,IAAIyE,WACtB7D,SAAUoL,EAAMhM,IAAIY,SACpB8D,YAAasH,EAAMhM,IAAI0E,YACvBC,YAAaqH,EAAMhM,IAAI2E,YACvB1E,MAAO+L,EAAMhM,IAAIC,QAEbsI,EAAUA,KACdoE,EAAQE,KAAK,WAAWtG,EAAQ8C,OAChCpD,GAAa,EAITkH,EAAQA,KACZ5G,EAAQ8C,MAAQ,CACd/E,KAAM0H,EAAMhM,IAAIsE,KAChBC,GAAIyH,EAAMhM,IAAIuE,GACdC,GAAIwH,EAAMhM,IAAIwE,GACdC,WAAYuH,EAAMhM,IAAIyE,WACtB7D,SAAUoL,EAAMhM,IAAIY,SACpB8D,YAAasH,EAAMhM,IAAI0E,YACvBC,YAAaqH,EAAMhM,IAAI2E,YACvB1E,MAAO+L,EAAMhM,IAAIC,OAEnB+F,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IACnBC,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACL2E,WACAG,kBACApB,iBACAG,eACAC,kBACA3K,UACAP,iBACAuC,UACAtC,cAEJ,GCtMF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,yECGIvH,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAExBF,MAAM,iB,IACJA,MAAM,WAAWE,MAAA,Y,uBAMhBD,EAAAA,EAAAA,GAAY,WAAP,KAAC,K,2BAGRA,EAAAA,EAAAA,GAAY,WAAP,KAAC,K,IAGLD,MAAM,W,UAGGA,MAAM,oBAAoBE,MAAA,4D,UAE1BF,MAAM,oBAAoBE,MAAA,4D,UACXF,MAAM,cAAcE,MAAA,4D,IAEtCF,MAAM,cAAcE,MAAA,uC,IAIdF,MAAM,W,IAMNA,MAAM,W,IAMNA,MAAM,W,YAETC,EAAAA,EAAAA,GAAc,WAAT,OAAG,K,UAORD,MAAM,oBAAoBE,MAAA,4D,iEAY3BA,MAAA,mB,UAKkFF,MAAM,WAAWE,MAAA,mB,sDAUnGA,MAAA,mB,UAKkFF,MAAM,WAAWE,MAAA,mB,uBAcpHD,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,4nBAzGjC2B,EAAAA,EAAAA,IA0GYyF,EAAA,C,WAzGD7G,EAAA8G,e,uCAAA9G,EAAA8G,eAAc/G,GACtB,eAAcC,EAAA+G,YACdC,MAAO7G,EAAAC,GAAG,QACXoB,MAAM,MACLyF,OAAO,EACR,cAAY,kBACZ,kBACAC,UAAA,GACAzH,MAAA,uB,mBAEA,IAAsC,CAAtCE,IACAH,EAAAA,EAAAA,GA4FM,aA3FJA,EAAAA,EAAAA,GAgDM,MAhDNI,GAgDM,EA/CJJ,EAAAA,EAAAA,GAWM,MAXNc,GAWM,CAVyB,GAAlBN,EAAAsT,iBAAc,WAAzBtS,EAAAA,EAAAA,IAEM,MAAAuG,GAAA,EADJnG,EAAAA,EAAAA,IAAuNC,EAAA,CAA7ME,GAAG,c,WAAuBvB,EAAAuT,I,qCAAAvT,EAAAuT,IAAGxT,GAAGmI,YAAa/H,EAAAC,GAAG,UAAWqH,KAAK,QAAS9F,UAAO7B,EAAA,KAAAA,EAAA,IAAA8B,EAAAA,EAAAA,KAAA7B,IAAQC,EAAAsT,gBAAiB,CAAK,GAAR,YAAYE,OAAI1T,EAAA,KAAAA,EAAA,GAAAC,IAAEC,EAAAsT,gBAAiB,CAAK,GAAIG,YAAS3T,EAAA,KAAAA,EAAA,IAAA4T,EAAAA,EAAAA,KAAV,QAAe,WAAEC,WAAQ7T,EAAA,KAAAA,EAAA,IAAA4T,EAAAA,EAAAA,KAAT,QAAc,WAAEE,SAAQ5T,EAAA6T,kB,gEAErM7S,EAAAA,EAAAA,IAMM,O,MANDzB,MAAM,6BAAqCoU,WAAQ7T,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAA8T,gBAAA9T,EAAA8T,kBAAAvT,K,gBACxDS,EAAAA,EAAAA,IAGMiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IAHuBlK,EAAA+T,WAAS,CAAzBX,EAAMtB,M,WAAnB9Q,EAAAA,EAAAA,IAGM,OAHmCxC,IAAKsT,EAAOvS,MAAM,W,CACzDqB,IACApB,EAAAA,EAAAA,GAAgF,OAA3ED,MAAM,YAAaM,QAAKE,GAAEC,EAAAgU,iBAAiBjU,EAAO+R,K,QAAYsB,GAAI,EAAAvS,S,MAEzEI,IAAY,QAGhBzB,EAAAA,EAAAA,GAkCM,MAlCN0B,GAkCM,EAjCJ1B,EAAAA,EAAAA,GAA6I,OAAxID,MAAM,cAAeM,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAiU,WAAAjU,EAAAiU,aAAA1T,IAAWd,MAAA,4D,EAA6D2B,EAAAA,EAAAA,IAA8BiB,EAAA,M,kBAArB,IAAW,EAAXjB,EAAAA,EAAAA,IAAW8S,M,QAClHlU,EAAAuT,KAAc,KAAPvT,EAAAuT,MAAG,WAArBvS,EAAAA,EAAAA,IAAkK,O,MAApIzB,MAAM,cAAeM,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAmU,UAAAnU,EAAAmU,YAAA5T,IAAUd,MAAA,4D,EAA6D2B,EAAAA,EAAAA,IAA2BiB,EAAA,M,kBAAlB,IAAQ,EAARjB,EAAAA,EAAAA,IAAQgT,M,sBAClJpT,EAAAA,EAAAA,IAAoI,MAApIG,GAAoI,EAAjCC,EAAAA,EAAAA,IAA2BiB,EAAA,M,kBAAlB,IAAQ,EAARjB,EAAAA,EAAAA,IAAQgT,M,SACjF,GAAxBpU,EAAAqU,cAAc/N,SAAM,WAA/BtF,EAAAA,EAAAA,IAAgL,O,MAA1IzB,MAAM,cAAeM,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAsU,YAAAtU,EAAAsU,cAAA/T,IAAYd,MAAA,4D,EAA6D2B,EAAAA,EAAAA,IAA+BiB,EAAA,M,kBAAtB,IAAY,EAAZjB,EAAAA,EAAAA,IAAYmT,M,sBAChKvT,EAAAA,EAAAA,IAAwI,MAAxIe,GAAwI,EAArCX,EAAAA,EAAAA,IAA+BiB,EAAA,M,kBAAtB,IAAY,EAAZjB,EAAAA,EAAAA,IAAYmT,M,SAChG,GAAbvU,EAAAwU,YAAS,WAApBxT,EAAAA,EAAAA,IA0BM,MA1BNwB,GA0BM,WAzBJpB,EAAAA,EAAAA,IAwBcqH,EAAA,CAxBuBhJ,MAAA,wBAA4BwC,UAAU,aAAawF,KAAK,QAAQvF,QAAQ,S,CAEhGwG,UAAQtG,EAAAA,EAAAA,KACjB,IAmBmB,WAnBnBhB,EAAAA,EAAAA,IAmBmBuH,EAAA,CAnBuBpJ,MAAM,YAAYE,MAAA,yB,mBAC1D,IAKmB,EALnB2B,EAAAA,EAAAA,IAKmBwH,EAAA,CALA/I,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAyU,qBAAqB,K,mBAC7C,IAGM,EAHNjV,EAAAA,EAAAA,GAGM,MAHNkD,GAGM,EAFJlD,EAAAA,EAAAA,GAA6C,aAAxC4B,EAAAA,EAAAA,IAAkCiB,EAAA,M,kBAAzB,IAAe,EAAfjB,EAAAA,EAAAA,IAAesT,M,SAC7BlV,EAAAA,EAAAA,GAAyB,YAAAU,EAAAA,EAAAA,IAAjBC,EAAAC,GAAG,OAAD,Q,OAGdgB,EAAAA,EAAAA,IAKmBwH,EAAA,CALA/I,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAyU,qBAAqB,K,mBAC7C,IAGM,EAHNjV,EAAAA,EAAAA,GAGM,MAHNmD,GAGM,EAFJnD,EAAAA,EAAAA,GAA2C,aAAtC4B,EAAAA,EAAAA,IAAgCiB,EAAA,M,kBAAvB,IAAa,EAAbjB,EAAAA,EAAAA,IAAauT,M,SAC3BnV,EAAAA,EAAAA,GAA0B,YAAAU,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,QAAD,Q,OAGdgB,EAAAA,EAAAA,IAKmBwH,EAAA,CALA/I,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAyU,qBAAqB,K,mBAC7C,IAGM,EAHNjV,EAAAA,EAAAA,GAGM,MAHNoD,GAGM,EAFJpD,EAAAA,EAAAA,GAAsC,aAAjC4B,EAAAA,EAAAA,IAA2BiB,EAAA,M,kBAAlB,IAAQ,EAARjB,EAAAA,EAAAA,IAAQwT,M,QACtB/R,Q,0BAhBoB7C,EAAA8G,qB,kBAF5B,IAAsG,EAAtGtH,EAAAA,EAAAA,GAAsG,MAAtGiD,GAAsG,EAAnCrB,EAAAA,EAAAA,IAA6BiB,EAAA,M,kBAApB,IAAU,EAAVjB,EAAAA,EAAAA,IAAUyT,M,4BADnE7U,EAAA8G,uBAAc,WA0BrC9F,EAAAA,EAAAA,IAAsI,MAAtI8B,GAAsI,EAAnC1B,EAAAA,EAAAA,IAA6BiB,EAAA,M,kBAApB,IAAU,EAAVjB,EAAAA,EAAAA,IAAUyT,M,mCAG1H7T,EAAAA,EAAAA,IAyCM,OAzCDO,GAAG,WAAW7B,IAAI,cAAc,uBAAqB,aAAiCH,MAAM,uBAC9FuV,cAAWhV,EAAA,MAAAA,EAAA,QAAAS,IAAEP,EAAA+U,mBAAA/U,EAAA+U,qBAAAxU,IAAoByU,SAAMlV,EAAA,MAAAA,EAAA,QAAAS,IAAEP,EAAAiV,cAAAjV,EAAAiV,gBAAA1U,IACzC2U,WAAQpV,EAAA,MAAAA,EAAA,QAAAS,IAAEP,EAAAmV,gBAAAnV,EAAAmV,kBAAA5U,IAAiB6U,OAAItV,EAAA,MAAAA,EAAA,QAAAS,IAAEP,EAAAqV,gBAAArV,EAAAqV,kBAAA9U,IAClC+U,SAAS,IAAK3T,UAAO7B,EAAA,MAAAA,EAAA,QAAAS,IAAEP,EAAAuV,oBAAAvV,EAAAuV,sBAAAhV,K,CACI,GAAhBP,EAAAwV,MAAMlP,SAAM,WAAvBtF,EAAAA,EAAAA,IAiCM,MAAA+B,GAAA,gBAhCJ/B,EAAAA,EAAAA,IA+BMiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IA/BclK,EAAAwV,OAARpC,K,WAAZpS,EAAAA,EAAAA,IA+BM,OA/BsBxC,IAAK4U,EAAK7R,I,CACA,GAApB6R,EAAKqC,cAAW,WAC9BzU,EAAAA,EAAAA,IAYM,O,MAZAzB,OAAK+H,EAAAA,EAAAA,IAAA,EAA2B,GAAxBtH,EAAA0V,WAAWtC,EAAK7R,IAAY,gBAAkB,GAAI,eAAgB1B,QAAKE,GAAEC,EAAA2V,cAAc5V,EAAOqT,GAAQO,WAAQ5T,GAAEC,EAAA4V,UAAU5V,EAAAuT,IAAMH,EAAK5I,KAAO,KAAOsK,cAAW/U,GAAEC,EAAA2V,cAAc5V,EAAOqT,GAAI,I,EACrMhS,EAAAA,EAAAA,IAAkQiJ,EAAA,CAAtP5K,MAAO,CAAA6K,QAAA,OAAAC,WAAA,UAA0CsL,UAAS,CAAAC,QAA6B,KAAhB1C,EAAK5I,KAAK,KAAuC,GAAzBxK,EAAA+V,YAAY3C,EAAK7R,KAAavB,EAAAgW,QAAO,MAAgBxL,KAAM4I,EAAK5I,KAAOhJ,MAAO,GAAKC,OAAQ,GAAKgJ,SAAU2I,EAAKqC,YAAcQ,OAAQ7C,EAAK8C,W,iDAC7L,GAArBlW,EAAAmW,mBAA6BnW,EAAAoW,YAAchD,EAAK7R,IAAMvB,EAAAoW,WAAW7U,KAAE,WAAtGP,EAAAA,EAAAA,IAEM,MAFNiR,GAEM,EADJ7Q,EAAAA,EAAAA,IAAyPC,EAAA,CAA/OE,GAAG,S,WAAkBvB,EAAAoW,WAAW5L,K,uCAAXxK,EAAAoW,WAAW5L,KAAIzK,GAAEmI,YAAY,GAAGT,KAAK,QAAS9F,UAAO,6BAAQ3B,EAAAmW,mBAAoB,CAAK,GAAR,oCAA8C,QAAa,YAA/C3C,OAAI1T,EAAA,MAAAA,EAAA,IAAAC,IAAEC,EAAAmW,mBAAoB,CAAK,GAAkBrB,cAAWhV,EAAA,MAAAA,EAAA,KAAA4T,EAAAA,EAAAA,KAAZ,QAAiB,WAAED,YAAS3T,EAAA,MAAAA,EAAA,KAAA4T,EAAAA,EAAAA,KAAV,QAAe,WAAEC,WAAQ7T,EAAA,MAAAA,EAAA,KAAA4T,EAAAA,EAAAA,KAAT,QAAc,WAAEE,SAAM7T,GAAEC,EAAAqW,aAAajD,I,sDAElPhS,EAAAA,EAAAA,IAMU+F,EAAA,CANA8H,QAASjP,EAAAsW,WAAalP,QAASgM,EAAK5I,KAAO2E,MAAO,K,CAC/C/H,SAAOhF,EAAAA,EAAAA,KAChB,IAEM,CAF4B,GAArBpC,EAAAmW,mBAA6BnW,EAAAoW,YAAchD,EAAK7R,IAAMvB,EAAAoW,WAAW7U,IAChE,iBADkE,WAAhFP,EAAAA,EAAAA,IAEM,MAFNkR,IAEMhS,EAAAA,EAAAA,IADDkT,EAAK5I,MAAI,O,sDAOpBxJ,EAAAA,EAAAA,IAYM,O,MAZAzB,OAAK+H,EAAAA,EAAAA,IAAA,EAA2B,GAAxBtH,EAAA0V,WAAWtC,EAAK7R,IAAY,gBAAkB,GAAI,eAAgB1B,QAAKE,GAAEC,EAAA2V,cAAc5V,EAAOqT,GAAQO,WAAQ5T,GAAEC,EAAAuW,YAAYnD,EAAK5I,MAAQsK,cAAW/U,GAAEC,EAAA2V,cAAc5V,EAAOqT,GAAI,I,EAC3LhS,EAAAA,EAAAA,IAAkQiJ,EAAA,CAAtP5K,MAAO,CAAA6K,QAAA,OAAAC,WAAA,UAA0CsL,UAAS,CAAAC,QAA6B,KAAhB1C,EAAK5I,KAAK,KAAuC,GAAzBxK,EAAA+V,YAAY3C,EAAK7R,KAAavB,EAAAgW,QAAO,MAAgBxL,KAAM4I,EAAK5I,KAAOhJ,MAAO,GAAKC,OAAQ,GAAKgJ,SAAU2I,EAAKqC,YAAcQ,OAAQ7C,EAAK8C,W,iDAC7L,GAArBlW,EAAAmW,mBAA6BnW,EAAAoW,YAAchD,EAAK7R,IAAMvB,EAAAoW,WAAW7U,KAAE,WAAtGP,EAAAA,EAAAA,IAEM,MAFNqR,GAEM,EADJjR,EAAAA,EAAAA,IAAyPC,EAAA,CAA/OE,GAAG,S,WAAkBvB,EAAAoW,WAAW5L,K,uCAAXxK,EAAAoW,WAAW5L,KAAIzK,GAAEmI,YAAY,GAAGT,KAAK,QAAS9F,UAAO,6BAAQ3B,EAAAmW,mBAAoB,CAAK,GAAR,oCAA8C,QAAa,YAA/C3C,OAAI1T,EAAA,MAAAA,EAAA,IAAAC,IAAEC,EAAAmW,mBAAoB,CAAK,GAAkBrB,cAAWhV,EAAA,MAAAA,EAAA,KAAA4T,EAAAA,EAAAA,KAAZ,QAAiB,WAAED,YAAS3T,EAAA,MAAAA,EAAA,KAAA4T,EAAAA,EAAAA,KAAV,QAAe,WAAEC,WAAQ7T,EAAA,MAAAA,EAAA,KAAA4T,EAAAA,EAAAA,KAAT,QAAc,WAAEE,SAAM7T,GAAEC,EAAAqW,aAAajD,I,sDAElPhS,EAAAA,EAAAA,IAMU+F,EAAA,CANA8H,QAASjP,EAAAsW,WAAalP,QAASgM,EAAK5I,KAAO2E,MAAO,K,CAC/C/H,SAAOhF,EAAAA,EAAAA,KAChB,IAEM,CAF4B,GAArBpC,EAAAmW,mBAA6BnW,EAAAoW,YAAchD,EAAK7R,IAAMvB,EAAAoW,WAAW7U,IAChE,iBADkE,WAAhFP,EAAAA,EAAAA,IAEM,MAFNsR,IAEMpS,EAAAA,EAAAA,IADDkT,EAAK5I,MAAI,O,oEAQ1BxJ,EAAAA,EAAAA,IAEM,MAAAuR,GAAA,CADsE,GAAXvS,EAAAwW,UAAO,WAAtEnX,EAAAA,EAAAA,IAA2GuL,EAAA,C,MAAnGnJ,OAAO,QAASqT,cAAWhV,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAqU,cAAgB,IAA6BxJ,IAAK7K,EAAA8K,W,8CAvCT9K,EAAAwW,aA2CpFhE,M,wDAIFpR,EAAAA,EAAAA,IAQYgN,EAAA,CANT,kBAAgB,EAChB,oBAAkB,EAClB,eAAcpO,EAAAyW,SACdnI,UAAU,G,mBAEX,IAA8F,WAA9FlN,EAAAA,EAAAA,IAA8FoG,EAAA,CAApEC,KAAK,QAAQC,KAAK,UAAUnG,GAAG,yB,kBAAtC,Q,iCANX,MAAK,SASf/B,EAAAA,EAAAA,GAME,SAJAkI,KAAK,OACLgP,gBAAA,GACC9C,SAAM9T,EAAA,MAAAA,EAAA,QAAAS,IAAEP,EAAA2W,4BAAA3W,EAAA2W,8BAAApW,IACTgB,GAAG,qB,kBAJK,MAOVH,EAAAA,EAAAA,IAA+DwV,EAAA,CAAtDlX,IAAI,aAAc8D,WAAUxD,EAAA6W,e,wBACrCzV,EAAAA,EAAAA,IAA+D0V,EAAA,CAAnDpX,IAAI,gBAAiBqX,SAAQ/W,EAAAgX,Q,sBACzC5V,EAAAA,EAAAA,IAA2D6V,EAAA,CAAnDvX,IAAI,YAAa8D,WAAUxD,EAAAkX,c,wBAGnC9V,EAAAA,EAAAA,IAAiH+V,EAAA,CAAtGpT,OAAQ2F,EAAA3F,OAAQrE,IAAI,cAAe8D,WAAUxD,EAAAoX,SAAWC,kBAAiBrX,EAAAsX,iB,8DAGpF9X,EAAAA,EAAAA,GAqBM,OArBDE,IAAI,eAAgBoV,cAAWhV,EAAA,MAAAA,EAAA,QAAAS,IAAEP,EAAAmV,gBAAAnV,EAAAmV,kBAAA5U,IAAoChB,MAAM,qB,EAC9EC,EAAAA,EAAAA,GAA2H,OAAtHC,MAAA,mCAAuCF,MAAM,eAAgBM,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAuX,iBAAiB,IAAI/Y,IAAI,M,QAAQ2B,EAAAC,GAAG,OAAD,IAC5GZ,EAAAA,EAAAA,GAAoI,OAA9HD,OAAK+H,EAAAA,EAAAA,IAAA,gBAA2C,GAAxBtH,EAAAqU,cAAc/N,OAAc,WAAR,KAAyBzG,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAuX,iBAAiB,IAAI/Y,IAAI,M,QAAQ2B,EAAAC,GAAG,OAAD,IACrHZ,EAAAA,EAAAA,GAA4K,OAAvKC,MAAA,mCAAwCF,OAAK+H,EAAAA,EAAAA,IAAA,gBAAmBtH,EAAAqU,cAAc/N,OAAS,EAAI,WAAP,KAAwBzG,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAuX,iBAAiB,IAAI/Y,IAAI,M,QAAQ2B,EAAAC,GAAG,SAAD,aAC3JZ,EAAAA,EAAAA,GAAyR,OAApRC,MAAA,mCAA+GF,OAAK+H,EAAAA,EAAAA,IAAA,gBAA6C,GAAxBtH,EAAAqU,cAAc/N,QAAetG,EAAAwX,UAAUxX,EAAAqU,cAAc,GAAG7J,MAAI,GAAK,aAAiB3K,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAuX,iBAAiB,IAAI/Y,IAAI,M,QAAQ2B,EAAAC,GAAG,OAAD,UAA9L,GAAxBJ,EAAAqU,cAAc/N,QAAetG,EAAAwX,UAAUxX,EAAAqU,cAAc,GAAG7J,UAC5GhL,EAAAA,EAAAA,GAAoI,OAA9HD,OAAK+H,EAAAA,EAAAA,IAAA,gBAA2C,GAAxBtH,EAAAqU,cAAc/N,OAAc,WAAR,KAAyBzG,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAuX,iBAAiB,IAAI/Y,IAAI,M,QAAQ2B,EAAAC,GAAG,OAAD,IACrHZ,EAAAA,EAAAA,GAAyH,OAAnHD,OAAK+H,EAAAA,EAAAA,IAAA,gBAAgC,GAAbtH,EAAAwU,UAAiB,WAAR,KAAyB3U,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAuX,iBAAiB,IAAI/Y,IAAI,M,QAAQ2B,EAAAC,GAAG,OAAD,IAC1GZ,EAAAA,EAAAA,GAAqI,OAA/HD,OAAK+H,EAAAA,EAAAA,IAAA,gBAA2C,GAAxBtH,EAAAqU,cAAc/N,OAAc,WAAR,KAAyBzG,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAuX,iBAAiB,IAAI/Y,IAAI,M,QAAQ2B,EAAAC,GAAG,QAAD,IACrHgB,EAAAA,EAAAA,IAWgBqW,EAAA,CAXAzQ,MAAO7G,EAAAC,GAAG,aACvB,sBAAqBD,EAAAC,GAAG,MAAQ,qBAAoBD,EAAAC,GAAG,MACvDsX,UAAS1X,EAAA2X,kBAAoBC,SAAQ5X,EAAA6X,iBACrCC,QAAS9X,EAAAsW,YAActW,EAAA+X,UAAW7V,QAAQ,QAC1C,eAAc,CAAA8V,OAAA,KAAAtW,SAAA,OAAAY,MAAA,SAA8C,eAAa,aAC1EL,UAAU,QAAQ,sBAAoB,U,CAC3BE,WAASC,EAAAA,EAAAA,KAClB,IAEM,EAFN5C,EAAAA,EAAAA,GAEM,OAFAD,OAAK+H,EAAAA,EAAAA,IAAA,gBAA2C,GAAxBtH,EAAAqU,cAAc/N,OAAc,WAAR,KAAwB9H,IAAI,K,EAC5EgB,EAAAA,EAAAA,GAAuD,OAAjDK,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAuX,iBAAiB,M,QAAQpX,EAAAC,GAAG,OAAD,U,+FAI9CZ,EAAAA,EAAAA,GAAwK,OAAnKC,MAAA,gCAAqCF,OAAK+H,EAAAA,EAAAA,IAAA,gBAA2C,GAAxBtH,EAAAqU,cAAc/N,OAAc,WAAR,KAAyBzG,QAAKC,EAAA,MAAAA,EAAA,IAAAC,GAAEC,EAAAuX,iBAAiB,IAAI/Y,IAAI,M,QAAQ2B,EAAAC,GAAG,OAAD,gBApB7FJ,EAAAsW,eAAU,G,CCxI1E,MAAM2B,GAAa,CACf,IAAM,MACN,KAAO,OACP,GAAK,KACL,GAAK,KACL,IAAM,MACN,IAAM,OAGGT,GAAapE,IACtB,MAAMtB,EAAQsB,EAAK8E,YAAY,KAC/B,IAAa,GAAVpG,EAAa,OAAO,EACvB,MAAMqG,EAAa/E,EAAKgF,UAAUtG,EAAQ,GAAGuG,cAC7C,QAAGJ,GAAWE,EACF,EAGVG,GAAgB,CAClB,IAAM,kBACN,KAAQ,YACR,IAAO,aACP,KAAQ,aACR,IAAO,YACP,IAAO,YACP,IAAO,YACP,KAAQ,aACR,IAAO,gBACP,IAAO,4BAGLC,GAAe,CACjB,IAAO,aACP,IAAO,YACP,IAAO,YACP,IAAO,YACP,IAAO,aAGLC,GAAe,CACjB,IAAO,YACP,KAAQ,aACR,IAAO,YACP,IAAO,kBACP,IAAO,mBAGEC,GAAmBrF,IAC5B,MAAMsF,EAAc,CAChBC,QAAQ,SACRjR,KAAK,QAEHoK,EAAQsB,EAAK8E,YAAY,KAC/B,IAAa,GAAVpG,EAAa,OAAO4G,EACvB,MAAMP,EAAa/E,EAAKgF,UAAUtG,EAAQ,GAAGuG,cAa7C,OAZGC,GAAcH,IACbO,EAAYC,QAAU,SACtBD,EAAYhR,KAAO4Q,GAAcH,IAE7BI,GAAaJ,IACjBO,EAAYC,QAAU,QACtBD,EAAYhR,KAAO6Q,GAAaJ,IAE5BK,GAAaL,KACjBO,EAAYC,QAAU,QACtBD,EAAYhR,KAAO8Q,GAAaL,IAE7BO,CAAW,EClETE,GAAeA,CAAClR,EAAKmR,IACzBC,GAAQpR,GAAQqR,GAASF,GAIrBG,GAAqBH,IAChC,MAAMI,EAAmBL,GAAa,UAAWC,GAAOK,MAAM,GACxDC,EAAc,CAClBC,MAAO,CAAyB,MAAxBH,EAAiB,GAAoC,MAAxBA,EAAiB,GAAoC,MAAxBA,EAAiB,IAAsC,MAAxBA,EAAiB,IAAsC,MAAxBA,EAAiB,IACjJI,MAAO,CAAyB,MAAxBJ,EAAiB,GAAoC,MAAxBA,EAAiB,GAAoC,MAAxBA,EAAiB,IAAsC,MAAxBA,EAAiB,IAAsC,MAAxBA,EAAiB,IACjJK,OAAQ,CAAyB,MAAxBL,EAAiB,GAAoC,MAAxBA,EAAiB,GAAoC,MAAxBA,EAAiB,IAAsC,MAAxBA,EAAiB,IAAsC,MAAxBA,EAAiB,IAClJM,KAAK,GAGP,OAAOJ,CAAW,EAIPK,GAAiBL,IAC5B,MAAMM,EAAoBC,IAChBA,EAAQ,GAAK,EAAI,IAAMA,EAAQ,GAAK,EAAI,IAAMA,EAAQ,GAAK,EAAI,GAEnEC,EAAaF,EAAiBN,EAAYC,OAAS,GACnDQ,EAAaH,EAAiBN,EAAYE,OAAS,GACnDQ,EAAcJ,EAAiBN,EAAYG,QAAU,GAE3D,OAAOK,EAAaC,EAAaC,CAAW,EAGxCC,GAAkB,CACtB,cAAiB,IACjB,aAAgB,IAChB,aAAgB,IAChB,eAAkB,IAClB,QAAW,IACX,UAAa,IACb,QAAW,IACX,QAAW,KAGPhB,GAAWpR,GACRoS,GAAgBpS,GAGnBqS,GAAgB,CACpB,MAAS,IACT,MAAS,IACT,MAAS,GACT,MAAS,GACT,MAAS,GACT,MAAS,EACT,MAAS,EACT,MAAS,EACT,MAAS,EACT,KAAQ,KACR,KAAQ,KACR,OAAU,KAGNhB,GAAYF,IAChB,IAAImB,EAAS,YAETC,EAAkB,EACtB,IAAI,IAAI5T,EAAE,EAAEA,EAAEwS,EAAMvS,OAAOD,IAAQ0T,GAAclB,EAAMxS,MAAK4T,GAAmBF,GAAclB,EAAMxS,KAiBnG,OAdA2T,EAASE,GAAoBF,EAAQ,EAAGC,EAAkBF,GAAc,SAAU,KAClFC,EAASE,GAAoBF,EAAQ,EAAGC,EAAkBF,GAAc,SAAU,KAClFC,EAASE,GAAoBF,EAAQ,EAAGC,EAAkBF,GAAc,SAAU,IAAKE,EAAkBF,GAAc,QAAS,IAAK,KAGrIC,EAASE,GAAoBF,EAAQ,EAAGC,EAAkBF,GAAc,SAAU,KAClFC,EAASE,GAAoBF,EAAQ,EAAGC,EAAkBF,GAAc,SAAU,KAClFC,EAASE,GAAoBF,EAAQ,EAAGC,EAAkBF,GAAc,SAAU,IAAKE,EAAkBF,GAAc,QAAS,IAAK,KAGrIC,EAASE,GAAoBF,EAAQ,EAAGC,EAAkBF,GAAc,SAAU,KAClFC,EAASE,GAAoBF,EAAQ,EAAGC,EAAkBF,GAAc,SAAU,KAClFC,EAASE,GAAoBF,EAAQ,EAAGC,EAAkBF,GAAc,SAAU,IAAKE,EAAkBF,GAAc,UAAW,IAAK,KAEhIC,CAAM,EAITE,GAAsBA,CAACF,EAAQlI,EAAOqI,EAAMC,EAAMC,EAAoB,EAAGC,EAAc,GAAIC,EAAmB,OAC3FP,EAAnBK,EAA4BL,EAAO5B,UAAU,EAAGtG,IAAUqI,EAAOG,EAAcC,GAAoBP,EAAO5B,UAAUtG,EAAQ,GAClHkI,EAAO5B,UAAU,EAAGtG,IAAUqI,EAAOC,EAAOJ,EAAOlI,IAAUkI,EAAO5B,UAAUtG,EAAQ,GAC7FkI,G,2DC5EEza,MAAM,W,IAEJA,MAAM,WAAWE,MAAA,uC,YAG1BD,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IACeF,MAAM,mBAAmBE,MAAA,6C,IAChEF,MAAM,W,IACJA,MAAM,a,IAEHA,MAAM,U,YAUhBC,EAAAA,EAAAA,GAAwC,OAAnCC,MAAA,yBAA2B,W,IAC3BF,MAAM,W,IACJA,MAAM,a,IAEHA,MAAM,U,YAUhBC,EAAAA,EAAAA,GAAwC,OAAnCC,MAAA,yBAA2B,W,IAC3BF,MAAM,W,IACJA,MAAM,a,YAGbC,EAAAA,EAAAA,GAAwC,OAAnCC,MAAA,yBAA2B,W,IAC3BF,MAAM,W,IAMR,uBAAqB,aAAiCE,MAAA,gD,qBAGlD+a,SAAA,GAASjb,MAAM,W,4BAGfib,SAAA,GAASjb,MAAM,W,8BAIxBC,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,uWAlEjCJ,EAAAA,EAAAA,IAmEYwH,EAAA,C,WAlED7G,EAAA8G,e,qCAAA9G,EAAA8G,eAAc/G,GACvByB,MAAM,MACLyF,OAAO,EACR,cAAY,kBACX,eAAcjH,EAAA+G,YACf,kBACAG,UAAA,I,CAEWF,OAAK5E,EAAAA,EAAAA,KACd,IAGM,EAHN5C,EAAAA,EAAAA,GAGM,MAHNG,GAGM,EAFJyB,EAAAA,EAAAA,IAA0HiJ,EAAA,CAA9G5K,MAAO,CAAA6K,QAAA,OAAAC,WAAA,UAA0CC,KAAMxK,EAAAya,SAAWjZ,MAAO,GAAKC,OAAQ,GAAKgJ,UAAU,G,kBACjHjL,EAAAA,EAAAA,GAAgG,MAAhGI,IAAgGM,EAAAA,EAAAA,IAA7BF,EAAA0a,UAAY1a,EAAAya,UAAQ,Q,kBAG3F,IAAsC,CAAtCna,IAAsC,SACtCd,EAAAA,EAAAA,GAuCM,MAvCN+H,GAuCM,EAtCJ/H,EAAAA,EAAAA,GAYM,MAZNoB,GAYM,EAXJpB,EAAAA,EAAAA,GAA+C,MAA/CqB,IAA+CX,EAAAA,EAAAA,IAApBC,EAAAC,GAAG,SAAU,IAAC,IACzCgB,EAAAA,EAAAA,IAScqH,EAAA,CATDhB,KAAK,QAAQ,eAAa,O,CAE1BiB,UAAQtG,EAAAA,EAAAA,KACjB,IAImB,EAJnBhB,EAAAA,EAAAA,IAImBuH,EAAA,M,kBAHP,IAAiC,gBAA3C3H,EAAAA,EAAAA,IAEWiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IAFsBlK,EAAA2a,WAAS,CAAxBnQ,EAAKsH,M,WACrBzS,EAAAA,EAAAA,IAAyFuJ,EAAA,C,IADzCkJ,EAC7BjS,QAAKE,IAAEC,EAAA4a,OAASpQ,EAAMxK,EAAA0a,UAAY,GAAG,G,mBAAI,IAAU,mBAAPlQ,GAAI,M,8DAJzE,IAAiG,EAAjGhL,EAAAA,EAAAA,GAAiG,OAAjGyB,GAAiG,mBAAxEjB,EAAA4a,QAAM,IAAGxZ,EAAAA,EAAAA,IAAwDiB,EAAA,CAA/C9C,MAAM,kBAAgB,C,kBAAC,IAAc,EAAd6B,EAAAA,EAAAA,IAAcyH,M,mBAUpF3H,IACA1B,EAAAA,EAAAA,GAYM,MAZN2B,GAYM,EAXJ3B,EAAAA,EAAAA,GAA6C,MAA7CuC,IAA6C7B,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACvCgB,EAAAA,EAAAA,IAScqH,EAAA,CATDhB,KAAK,QAAQ,eAAa,O,CAE1BiB,UAAQtG,EAAAA,EAAAA,KACjB,IAImB,EAJnBhB,EAAAA,EAAAA,IAImBuH,EAAA,M,kBAHP,IAA+B,gBAAzC3H,EAAAA,EAAAA,IAEWiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IAFsBlK,EAAA6a,SAAO,CAAtBrQ,EAAKsH,M,WACrBzS,EAAAA,EAAAA,IAAuEuJ,EAAA,C,IADzBkJ,EAC3BjS,QAAKE,GAAEC,EAAA8a,QAAQtQ,I,mBAAQ,IAAU,mBAAPA,GAAI,M,8DAJvD,IAA+F,EAA/FhL,EAAAA,EAAAA,GAA+F,OAA/FgD,GAA+F,mBAAtExC,EAAAlB,MAAI,IAAGsC,EAAAA,EAAAA,IAAwDiB,EAAA,CAA/C9C,MAAM,kBAAgB,C,kBAAC,IAAc,EAAd6B,EAAAA,EAAAA,IAAcyH,M,mBAUlFpG,IACAjD,EAAAA,EAAAA,GAGM,MAHNkD,GAGM,EAFJlD,EAAAA,EAAAA,GAA6C,MAA7CmD,IAA6CzC,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACvCZ,EAAAA,EAAAA,GAA0J,aAArJ4B,EAAAA,EAAAA,IAA+I2Z,EAAA,CAA7Htb,MAAO,CAAA+B,MAAA,QAAiBiG,KAAK,Q,WAAiBzH,EAAAgb,O,qCAAAhb,EAAAgb,OAAMjb,GAAGkb,IAAK,EAAIC,IAAK,EAAGC,KAAK,IAAK,iBAAe,EAAOvH,SAAQ5T,EAAAob,W,sCAEzIxY,IACApD,EAAAA,EAAAA,GAIM,MAJNqD,GAIM,EAHJzB,EAAAA,EAAAA,IAEYoG,EAAA,CAFDC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqI,Q,mBAC7C,IAAyD,EAAzDjH,EAAAA,EAAAA,IAAyDiB,EAAA,CAAhD9C,MAAM,iBAAe,C,kBAAC,IAAgB,EAAhB6B,EAAAA,EAAAA,IAAgBkH,M,wBAAanI,EAAAC,GAAG,OAAD,M,mCApChC,UAAvBJ,EAAA0Y,YAAYC,YAAO,qBAwChC3X,EAAAA,EAAAA,IASM,MATN8B,GASM,WARJ1B,EAAAA,EAAAA,IAAuKia,EAAA,CAA5J9b,MAAM,UAA+DG,IAAI,gBAAiB4b,eAActb,EAAAub,aAAeC,aAAYxb,EAAAyb,Y,kDAA1Gzb,EAAAwW,SAAkC,UAAvBxW,EAAA0Y,YAAYC,WAC5B3Y,EAAAwW,SAAkC,UAAvBxW,EAAA0Y,YAAYC,SAAqC,IAAd3Y,EAAA0b,Y,iBAAU,WAAvF1a,EAAAA,EAAAA,IAA2H,U,MAAnHzB,MAAM,UAAkFkB,IAAKT,EAAA0b,Y,YAC9D1b,EAAAwW,SAAkC,SAAvBxW,EAAA0Y,YAAYC,SAAoC,IAAd3Y,EAAA0b,Y,iBAAU,WAA9F1a,EAAAA,EAAAA,IAEQ,QAFRgC,GAEQ,EADNxD,EAAAA,EAAAA,GAAoD,UAA3CiB,IAAKT,EAAA0b,WAAahU,KAAM1H,EAAA0Y,YAAYhR,M,cAER1H,EAAAwW,SAAkC,SAAvBxW,EAAA0Y,YAAYC,SAAoC,IAAd3Y,EAAA0b,Y,iBAAU,WAA9F1a,EAAAA,EAAAA,IAEQ,QAFRkR,GAEQ,EADN1S,EAAAA,EAAAA,GAAoD,UAA3CiB,IAAKT,EAAA0b,WAAahU,KAAM1H,EAAA0Y,YAAYhR,M,qBAPC1H,EAAAwW,WAUlDnE,M,wEClEG3S,IAAI,eAAeH,MAAM,kB,2CAA9ByB,EAAAA,EAAAA,IAAqD,MAArDrB,GAAqD,S,4WCDvD,MAAMgc,GAAQ,CAEV,EAAK,QACL,GAAM,QACN,IAAO,QACP,EAAK,QACL,GAAM,QACN,IAAO,QACP,IAAO,QACP,IAAO,QACP,GAAM,SACN,IAAO,MACP,UAAa,YACb,GAAM,SACN,KAAQ,OACR,IAAO,OACP,IAAO,MACP,KAAQ,MACR,IAAO,MACP,KAAQ,OACR,GAAM,aACN,IAAO,aACP,IAAO,aACP,IAAO,aACP,IAAO,aACP,IAAO,aACP,GAAM,aACN,IAAO,aACP,KAAQ,OACR,IAAO,MACP,GAAM,WACN,SAAY,WACZ,WAAc,aACd,GAAM,SACN,GAAM,KACN,KAAQ,KACR,IAAO,MACP,IAAO,aACP,IAAO,aACP,GAAM,aACN,IAAO,aACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,KAAQ,MACR,IAAO,MACP,KAAQ,MACR,KAAQ,MACR,OAAU,MACV,IAAO,MACP,IAAO,MACP,IAAO,MACP,KAAQ,MACR,IAAO,MACP,MAAS,MACT,KAAQ,OACR,IAAO,OAEP,MAAS,OACT,aAAgB,KAChB,YAAe,KACf,aAAgB,KAChB,OAAU,KACV,OAAU,KACV,MAAS,KACT,QAAW,OAITC,GAAapR,IACf,IAAIqR,EAAS,MACb,GAAGrR,GAAQA,EAAKlE,OAAS,EAAG,CAC1B,IAAIwL,EAAQtH,EAAK0N,YAAY,MAChB,GAAVpG,IAAa+J,EAASrR,EAAK4N,UAAUtG,EAAQ,GAAGuG,cACrD,CACA,OAAOwD,CAAM,EAIXC,GAActR,GACTmR,GAAMC,GAAUpR,KAAU,OAGrC,U,SClFA,MAAMuR,GAAkB,mBAClBC,GAAuB,sBAKhBC,GAAY,CACrB,KAAM,CACFC,KAAMnR,GAAKW,OAAOC,EAAE,YACpBwQ,QAAAA,CAAS1O,GACLU,YAAW,KACPV,EAAQ2O,MAAMC,aAAaC,UAAU,GACvC,GACF7O,EAAQ2O,MAAMC,aAAavV,gBAAiB,CAChD,GAEJ,KAAM,CACFoV,KAAMnR,GAAKW,OAAOC,EAAE,QACpBwQ,QAAAA,GACI,IAAII,EAAO5W,OAAOC,SAAS4W,KAC3B7W,OAAO8W,KAAKF,EAAM,SACtB,GAEJ,KAAM,CACFL,KAAMnR,GAAKW,OAAOC,EAAE,QACpBwQ,QAAAA,GACIxW,OAAO+W,OACX,GAEJ,KAAM,CACFR,KAAMnR,GAAKW,OAAOC,EAAE,QACpBwQ,QAAAA,CAAS1O,GACFA,EAAQ2O,MAAMO,QAAQlP,EAAQ2O,MAAMO,OAAOD,MAAM,KACxD,GAEJ,KAAM,CACFR,KAAMnR,GAAKW,OAAOC,EAAE,QACpBwQ,QAAAA,GACIxW,OAAOC,SAASgX,QACpB,GAEJ,KAAM,CACFV,KAAMnR,GAAKW,OAAOC,EAAE,MACpBwQ,QAAAA,CAAS1O,GACLA,EAAQ2O,MAAMS,aAAa/V,gBAAiB,CAChD,IAKKgW,GAAW,CACpB,GAAM,CACFZ,KAAMnR,GAAKW,OAAOC,EAAE,QACpBwQ,QAAAA,CAAS1O,GACLA,EAAQ2O,MAAM/b,eAAgB,EAC9BoN,EAAQ2O,MAAMW,kBAAkBjW,gBAAiB,CACrD,GAEJ,GAAM,CACFoV,KAAMnR,GAAKW,OAAOC,EAAE,QACpBwQ,QAAAA,CAAS1O,GACLA,EAAQ2O,MAAM/b,eAAgB,EAC9BoN,EAAQ2O,MAAMY,gBAAgBlW,gBAAiB,CACnD,GAEJ,GAAM,CACFoV,KAAMnR,GAAKW,OAAOC,EAAE,QACpBwQ,QAAAA,CAAS1O,GACLA,EAAQ2O,MAAM/b,eAAgB,EAC9BoN,EAAQ2O,MAAMa,aAAanW,gBAAiB,EAC5C2G,EAAQ2O,MAAMa,aAAaC,YAC/B,GAEJ,GAAM,CACFhB,KAAMnR,GAAKW,OAAOC,EAAE,MACpBwQ,QAAAA,CAAS1O,GACLA,EAAQ2O,MAAM/b,eAAgB,EAC9BoN,EAAQ2O,MAAMe,mBAAqB1P,EAAQ2O,MAAMgB,eAAe,cAChE3P,EAAQ2O,MAAMrY,OAAS,GACpB0J,EAAQ2O,MAAMO,QAAQlP,EAAQ2O,MAAMO,OAAOD,MAAM,MAEpDjP,EAAQ2O,MAAMiB,iBACd5P,EAAQ2O,MAAMkB,eACd7P,EAAQ2O,MAAMmB,eAClB,IAKKC,GAAoB,CAC7BC,QAAQ,EACRnT,SAAS,EACToT,SAAU,GACVC,IAAK,EAELC,UAAW,CACPC,OAAAA,CAAQrf,EAAI2L,GACR,QAAYyC,GAATzC,EAEC,OAAG2T,eAAeC,QAAQ/B,GAAuBxd,GAAawf,KAAKrf,MAAMmf,eAAeC,QAAQ/B,GAAuBxd,IAC3G,KAHOsf,eAAeG,QAAQjC,GAAuBxd,EAAIwf,KAAK5e,UAAU+K,GAK5F,EACA+T,KAAAA,CAAM1f,EAAI2L,GACN,IAAIgU,EAAiB,CAAC,EAItB,GAHGC,aAAaL,QAAQhC,MACpBoC,EAAiBH,KAAKrf,MAAMQ,EAAQif,aAAaL,QAAQhC,YAEjDnP,GAATzC,EAIE,OAAOgU,EAAe3f,GAHvB2f,EAAe3f,GAAO2L,EACtBiU,aAAaH,QAAQlC,GAAgBzd,EAAQ0f,KAAK5e,UAAU+e,IAGpE,EACAE,KAAAA,GACI,GAAuB,GAApBC,UAAUhY,OAET,YADA8X,aAAaG,WAAWxC,IAG5B,IAAIoC,EAAiB,CAAC,EACnBC,aAAaL,QAAQhC,MACpBoC,EAAiBH,KAAKrf,MAAMQ,EAAQif,aAAaL,QAAQhC,OAE7D,IAAK,IAAI1V,EAAI,EAAGA,EAAIiY,UAAUhY,OAAQD,WAC3B8X,EAAeG,UAAUjY,IAEpC+X,aAAaH,QAAQlC,GAAgBzd,EAAQ0f,KAAK5e,UAAU+e,IAChE,GAGJK,UAAW,KAEX,kBAAMC,CAAarX,EAASsX,EAAO,KAC5BtX,GAAWA,EAAQd,OAAS,GAAoC,MAA/Bc,EAAQA,EAAQd,OAAS,IAA6C,MAA/Bc,EAAQA,EAAQd,OAAS,KAAYc,GAAW,MAC3HuX,KAAKhB,IAAMgB,KAAKjB,SAASpX,OACzBqY,KAAKH,UAAUpX,GAAQ,SACjB,IAAIwX,SAAQC,GAAW1Q,WAAW0Q,EAASH,EAAO,EAAIA,EAAO,IACvE,EAEAI,KAAAA,CAAM1X,EAASsX,EAAO,KAClB,OAAOC,KAAKF,aAAarX,EAASsX,EACtC,EAEAK,IAAAA,GACI,OAAOC,GAAOL,KAAKjB,SAASxE,MAAMyF,KAAKhB,KAC3C,EAEAsB,OAAAA,GACI,OAAOD,GAAOL,KAAKjB,SAASxE,MAAM,GACtC,EAEAgG,IAAAA,GACIP,KAAKrU,SAAU,CACnB,EAEA6U,IAAAA,GACIR,KAAKrU,SAAU,CACnB,GAIE0U,GAAUI,IACZ,IAAIC,EAAM,GACNC,EAAMC,GAASH,GACnB,IAAI,IAAI/Y,EAAI,EAAGA,EAAIiZ,EAAIhZ,OAAQD,IAAK,CAChC,IAAIF,EAAMqZ,GAAWF,EAAIjZ,IACtBF,GAAc,IAAPA,GAAWkZ,EAAII,KAAKtZ,EAClC,CACA,OAAOkZ,CAAG,EAIRE,GAAYH,IACd,IAAIC,EAAM,GACV,IAAI,IAAIhZ,EAAI,EAAGA,EAAI+Y,EAAI9Y,OAAQD,IAAK,CAChC,IAAIiZ,EAAMF,EAAI/Y,GAAGqZ,MAAM,QACvB,IAAI,IAAIC,EAAI,EAAGA,EAAIL,EAAIhZ,OAAQqZ,IACvBL,EAAIK,IAAgB,IAAVL,EAAIK,IAAUN,EAAII,KAAKH,EAAIK,GAEjD,CACA,OAAON,CAAG,EAIRG,GAAcrZ,IAETyZ,EAAAA,GAAAA,GAAUzZ,GAAKO,QAAQ,mBAAoB,IAQzCmZ,GAAkB,CAC3B,gBAAiB,QACjB,oBAAoB,cACpB,aAAc,WACd,kBAAmB,WAKVC,GAA6B,CACxCC,eAAgB,SAASC,EAAQnC,EAASoC,EAAK9X,EAAQoD,GACrD,MAAM2U,EAA+B,CACnC,CACE1V,KAAM,aACNL,MAAO,aACPgW,KAAM,aACNC,YAAa,iBACbC,MAAO,KAET,CACE7V,KAAM,YACNL,MAAO,YACPgW,KAAM,aACNC,YAAa,mBACbC,MAAO,KAET,CACE7V,KAAM,UACNL,MAAO,YACPgW,KAAM,aACNC,YAAa,+BACbC,MAAO,KAET,CACI7V,KAAM,QACNL,MAAO,UACPgW,KAAM,aACNC,YAAa,6BACbC,MAAO,KAEX,CACE7V,KAAM,QACNL,MAAO,UACPgW,KAAM,aACNC,YAAa,yBACbC,MAAO,KAET,CACE7V,KAAM,QACNL,MAAO,UACPgW,KAAM,aACNC,YAAa,oBACbC,MAAO,KAET,CACE7V,KAAM,OACNL,MAAO,SACPgW,KAAM,aACNC,YAAa,6BACbC,MAAO,KAET,CACE7V,KAAM,UACNL,MAAO,YACPgW,KAAM,aACNC,YAAa,yBACbC,MAAO,KAET,CACE7V,KAAM,OACNL,MAAO,SACPgW,KAAM,aACNC,YAAa,qBACbC,MAAO,KAET,CACE7V,KAAM,OACNL,MAAO,SACPgW,KAAM,aACNC,YAAa,qBACbC,MAAO,MAIX9U,EAAS,KAAM2U,EAA6BI,KAAKC,IACxC,CACLC,QAASD,EAAWC,SAAWD,EAAW/V,KAC1CL,MAAOoW,EAAWpW,MAClBgW,KAAMI,EAAWJ,KACjBC,YAAaG,EAAWH,aAAe,OAG7C,GFpOF,QACE5V,KAAM,YACN2C,KAAAA,CAAML,EAAOW,GACX,MAAMgT,GAAe/gB,EAAAA,EAAAA,MACfghB,GAAYhhB,EAAAA,EAAAA,IAAI,MAGhBihB,EAAYC,IACbF,EAAUvW,OAAOuW,EAAUvW,MAAMwW,SAASC,GAC1CF,EAAUvW,OAAOuW,EAAUvW,MAAM0W,UAAUC,gBAAgB,EAI1DC,EAAWA,IACZL,EAAUvW,MAAcuW,EAAUvW,MAAM4W,WAC/B,GAIRC,EAAeA,KAChBN,EAAUvW,OAAOuW,EAAUvW,MAAM8W,aAAaC,iBAAiBjT,OAAO,EAGrEkT,EAAe3W,IAChBkW,EAAUvW,OAAOuW,EAAUvW,MAAM8W,aAAanG,QAAS,YAAWgB,GAAWtR,KAAQ,EAGpF4W,EAAeC,IACnB,GAAIX,EAAUvW,MAAO,CACnBuW,EAAUvW,MAAMiX,YAAYC,GAE5B,MAAMC,EAAkBD,EAAa,UAAY,GACjDZ,EAAatW,MAAM1K,MAAM6hB,gBAAkBA,CAC7C,GAGIC,EAAcC,IACfd,EAAUvW,OAAOuW,EAAUvW,MAAMsX,WAAW,CAC7CD,QAASA,EACTE,aAAa,GACb,EAIEC,EAASC,IACb,GAAIA,EAAMC,SAAWD,EAAME,QACzB,OAAQ/U,OAAOgV,aAAaH,EAAMI,OAAO3J,eACvC,IAAK,IACHuJ,EAAMzM,iBACN1H,EAAQE,KAAK,aAAc+S,EAAUvW,MAAM4W,YAC3C,MAEN,EAII9S,EAAQA,KACZ0S,EAAS,IACTK,GAAc,EA+ChB,OA3CAjR,EAAAA,EAAAA,KAAU,KACR2Q,EAAUvW,MAAQ8X,KAAAA,KAASxB,EAAatW,MAAO,CAC7C+X,0BAA0B,EAC1BC,wBAAwB,EACxBC,iBAAiB,EACjBC,qBAAqB,EAErBC,2BAA2B,EAC3BC,gBAAgB,EAChBC,0BAA0B,EAC1BC,MAAO,mBACP3jB,KAAM,kBAGR4hB,EAAUvW,MAAMuY,WAAWjD,KAAKK,IAGhCY,EAAUvW,MAAM0T,QAAQ8E,UAAU,aAAa,GAG/CjC,EAAUvW,MAAMyY,GAAG,UAAU,KAC3BnV,EAAQE,KAAK,eAAe,IAI9B+S,EAAUvW,MAAMkJ,KAAK,SAAS,CAC5BwP,WAAW,EACXC,MAAM,EACNC,eAAe,EACfC,WAAW,EACXC,QAAQ,IAEVvC,EAAUvW,MAAM+Y,WAChBxC,EAAUvW,MAAMgZ,eAGhB1C,EAAatW,MAAMiZ,iBAAiB,UAAWzB,EAAM,KAGvD0B,EAAAA,EAAAA,KAAY,KACP5C,EAAatW,OAAOsW,EAAatW,MAAMmZ,oBAAoB,UAAW3B,EAAM,IAG1E,CACLlB,eACAC,YACAC,WACAK,eACA/S,QACAkT,cACAJ,WACAK,cACAG,aAEJ,GGxKF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,iCCNO,MAAMgC,GAAkBnc,GACtBoc,GAAUC,OAAOrc,GAASsc,SAGtBC,GAAmBA,CAAC/C,EAAM8C,IAC9BE,KAAAA,OAAahD,EAAM8C,GAGfG,GAAmBA,CAACC,EAAQC,IAChCH,KAAAA,OAAaE,EAAQC,GL0E9B,QACEvZ,KAAM,aACNqC,WAAY,CACVmX,UAAS,GACT1W,UAAS,KACTyD,UAAS,OACTN,aAAYA,GAAAA,KAEdtD,KAAAA,CAAML,EAAMW,GAEV,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GACrB8W,GAAU9W,EAAAA,EAAAA,KAAI,GAEdgb,GAAYhb,EAAAA,EAAAA,IAAI,IAChB+a,GAAW/a,EAAAA,EAAAA,IAAI,IACfukB,GAAUvkB,EAAAA,EAAAA,IAAI,IAEdgZ,GAAchZ,EAAAA,EAAAA,IAAI,CACtBiZ,QAAQ,SACRjR,KAAK,SAEDgU,GAAahc,EAAAA,EAAAA,IAAI,IAEjBwkB,GAAgBxkB,EAAAA,EAAAA,MAEhBykB,GAAQzkB,EAAAA,EAAAA,IAAI,MAEZ4c,EAAW9K,UACfgF,EAAQrM,OAAQ,EAChB8D,IACA,IAAImW,EAAMH,EAAQ9Z,MAClBuO,EAAYvO,MAAQsO,GAAgBgC,EAAStQ,OAC7Cka,EAAWD,GACXD,EAAMha,MAAQma,IAAAA,KAAO,CACnBF,IAAKA,EACLG,OAAQ,MACRC,UAAW,CACTC,aAAc,eAEhBC,UAAAA,CAAWC,GACT,OAAOA,CACT,EACAC,OAAAA,CAAQD,GACN,GAAGP,GAAOH,EAAQ9Z,MAClB,CAEE,GAAgC,UAA7BuO,EAAYvO,MAAMwO,QAAqB,CACxC,MAAMkM,EAAO,IAAIC,KAAK,CAACH,GAAO,CAACjd,KAAKgR,EAAYvO,MAAMzC,OAC/B,IAApBgU,EAAWvR,OAAa4a,IAAIC,gBAAgBtJ,EAAWvR,OAC1DuR,EAAWvR,MAAQ4a,IAAIE,gBAAgBJ,EACzC,KACK,CACHjK,EAAOzQ,MAAQoZ,GAAexW,OAAOgV,gBAAgB,IAAImD,WAAWP,EAAKzL,MAAM,EAAE,WACjFmL,EAAWD,GACX,MAAMxD,EAAOiD,GAAiB,IAAIqB,WAAWP,GAAM/J,EAAOzQ,OAC1D+Z,EAAc/Z,MAAMwW,SAASC,GAC7BsD,EAAc/Z,MAAM6W,eACpBliB,EAAKqL,MAAQ,OACb+Z,EAAc/Z,MAAMgX,YAAY1G,EAAStQ,OACzCiR,GACF,CACAV,EAAUvQ,MAAQ,GAClBqM,EAAQrM,OAAQ,CAClB,CACF,EACAgb,KAAAA,GACKf,GAAOH,EAAQ9Z,SAEhB2D,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,UACvBjE,KAAM,QACNsG,UAAU,IAEZC,IACAlH,IAEJ,UAEIod,EAAMha,KAAK,EAGboR,EAAeA,KACnBb,EAAUvQ,MAAQ,GAAG,EAGjBsR,EAAcmF,IACI,KAAnBlG,EAAUvQ,QACbsD,EAAQE,KAAK,SAAS8M,EAAStQ,MAAO8Z,EAAQ9Z,MAAOwZ,GAAiB/C,EAAOhG,EAAOzQ,OAAS,UAC7FuQ,EAAUvQ,MAAQ,GAAE,EAIhByQ,GAASlb,EAAAA,EAAAA,IAAI,IACbib,GAAYjb,EAAAA,EAAAA,IAAI,CAAC,QAAQ,MAAM,aAAa,iBAC5C2kB,EAAcD,IAClB,IAAIgB,EAAe,QACfC,EAAWjB,EAAIkB,QAAQ,YACvBC,EAAYnB,EAAIkB,QAAQ,WACZ,GAAbD,IAAgC,GAAdE,IAAiBH,EAAe7e,EAAW6d,EAAIhM,UAAUiN,EAAW,EAAGE,GAAW7F,MAAM,KAAK,KAClH/E,EAAUxQ,MAAQ,CAAC,QAAQ,MAAM,aAAa,gBAC1CwQ,EAAUxQ,MAAMmW,KAAIlN,GAAQA,EAAKiF,gBAAemN,SAASJ,EAAa/M,gBAAgBsC,EAAUxQ,MAAMsb,QAAQL,GAC9GxK,EAAOzQ,OAAuC,SAA9ByQ,EAAOzQ,MAAMkO,cACxBsC,EAAUxQ,MAAMmW,KAAIlN,GAAQA,EAAKiF,gBAAemN,SAAS5K,EAAOzQ,MAAMkO,gBAAgBsC,EAAUxQ,MAAMsb,QAAQ7K,EAAOzQ,OADnEyQ,EAAOzQ,MAAQib,CAC0D,EAIhItmB,GAAOY,EAAAA,EAAAA,IAAI,IACXmb,GAAUnb,EAAAA,EAAAA,IAAI,CAAC,OAAO,MAAM,OAAO,SACnCob,EAAWtQ,IACZ1L,EAAKqL,OAASK,IACjB1L,EAAKqL,MAAQK,EACb0Z,EAAc/Z,MAAMgX,YAAqB,QAAR3W,EAAkBiQ,EAAStQ,MAAS,MAAQK,GAAM,EAI/EwQ,GAAStb,EAAAA,EAAAA,IAAI,GACb0b,EAAYA,KAChB8I,EAAc/Z,MAAMoX,WAAWvG,EAAO7Q,MAAM,GAIxC,YAAEmH,IAAgBC,EAAAA,EAAAA,KAGlBlJ,EAASmJ,UACb,MAAMpK,EAAU8c,EAAc/Z,MAAM4W,WAC/B3Z,GAAWA,EAAQd,OAAS,SAS3BgL,EAAYlK,IAClB0G,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,qBAblB5D,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,kBAUpB,EAIEzD,EAAQA,CAACyX,GAAK,KACfA,IACDjL,EAAStQ,MAAQ,GACjB8Z,EAAQ9Z,MAAQ,GAChBqM,EAAQrM,OAAQ,GAEf+Z,EAAc/Z,OAAO+Z,EAAc/Z,MAAM8D,QAC5CyM,EAAUvQ,MAAQ,GAClBuO,EAAYvO,MAAQ,CAClBwO,QAAQ,SACRjR,KAAK,QAEgB,IAApBgU,EAAWvR,QACZ4a,IAAIC,gBAAgBtJ,EAAWvR,OAC/BuR,EAAWvR,MAAQ,IAElBga,EAAMha,QACPga,EAAMha,MAAMwb,QACZxB,EAAMha,MAAQ,MAEhByQ,EAAOzQ,MAAQ,GACfwQ,EAAUxQ,MAAQ,CAAC,QAAQ,MAAM,aAAa,gBAC9CrL,EAAKqL,MAAQ,GACb6Q,EAAO7Q,MAAQ,EACfrD,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IACnBC,YAAW,KACTF,GAAM,EAAK,GACX,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACLpH,iBACAwV,WACA9F,UACAiE,WACAwJ,UACAvL,cACAgD,aACAwI,gBACAxJ,YACAa,eACAE,aACAb,SACAD,YACA0J,aACAvlB,OACA+b,UACAC,UACAE,SACAI,YACA/S,SACAtB,cACAkH,QAEJ,GM5RF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,yECCIzO,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,a,IAKJA,MAAM,qB,IACNA,MAAM,W,YAKTC,EAAAA,EAAAA,GAAgC,OAA3BC,MAAA,gBAAoB,W,IACpBA,MAAA,Y,IAIAA,MAAA,wB,YAKTD,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,oMA/BjCJ,EAAAA,EAAAA,IAgCYwH,EAAA,C,WA/BD7G,EAAA8G,e,qCAAA9G,EAAA8G,eAAc/G,GACtB,eAAcC,EAAA+G,YACdvF,MAAO,IACPyF,OAAO,EACPD,MAAO7G,EAAAC,GAAG,MACX,cAAY,kBACZ8G,UAAA,I,mBAEA,IAAsC,CAAtCvH,IACAH,EAAAA,EAAAA,GAoBM,MApBNI,GAoBM,EAnBJwB,EAAAA,EAAAA,IAGiBwkB,EAAA,C,WAHQ5lB,EAAAyV,Y,qCAAAzV,EAAAyV,YAAW1V,GAAER,MAAM,Q,mBAC1C,IAA+D,EAA/D6B,EAAAA,EAAAA,IAA+DykB,EAAA,CAApD/S,OAAO,EAAOrL,KAAK,S,mBAAQ,IAAc,mBAAXtH,EAAAC,GAAG,OAAD,M,OAC3CgB,EAAAA,EAAAA,IAA+DykB,EAAA,CAApD/S,OAAO,EAAMrL,KAAK,S,mBAAQ,IAAe,mBAAZtH,EAAAC,GAAG,QAAD,M,iCAE5CZ,EAAAA,EAAAA,GAAoD,MAApDc,IAAoDJ,EAAAA,EAAAA,IAAjBF,EAAAoJ,SAAO,IAC1C5J,EAAAA,EAAAA,GAaM,MAbN+H,GAaM,EAZJ/H,EAAAA,EAAAA,GAGM,YAFsG,GAAfQ,EAAAyV,cAAW,WAAtGpW,EAAAA,EAAAA,IAAiJgL,EAAA,C,MAArI5K,MAAO,CAAA6K,QAAA,OAAAC,WAAA,UAA0C/I,MAAO,GAAKC,OAAQ,GAA+B+I,KAAK,SAAUC,UAAU,O,WACzIpL,EAAAA,EAAAA,IAA8HgL,EAAA,C,MAAlH5K,MAAO,CAAA6K,QAAA,OAAAC,WAAA,UAA0C/I,MAAO,GAAKC,OAAQ,GAAW+I,KAAK,SAAUC,UAAU,OAEvH7J,IACApB,EAAAA,EAAAA,GAGM,MAHNqB,GAGM,EAFJO,EAAAA,EAAAA,IACWC,EAAA,CADDoG,KAAK,Q,WAAiBzH,EAAAwK,K,qCAAAxK,EAAAwK,KAAIzK,GAAG4B,WAAOC,EAAAA,EAAAA,IAAQ5B,EAAAqJ,QAAO,WAAE9J,MAAM,WAAW2I,YAAY,I,sCAG9F1I,EAAAA,EAAAA,GAEM,MAFNyB,GAEM,EADJG,EAAAA,EAAAA,IAAmFoG,EAAA,CAAxEC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqJ,S,mBAAU,IAAc,mBAAXlJ,EAAAC,GAAG,OAAD,M,0BAIpEc,M,8CAUJ,QACEsJ,KAAM,SACNqC,WAAY,CACVS,UAASA,MAEXH,KAAAA,CAAML,EAAMW,GAGV,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GACrB0J,GAAU1J,EAAAA,EAAAA,IAAI,IACd+V,GAAc/V,EAAAA,EAAAA,KAAI,GAClB8K,GAAO9K,EAAAA,EAAAA,IAAI,IACXomB,GAASpmB,EAAAA,EAAAA,IAAI,IAGb2J,EAAUA,KAGd,GADAD,EAAQe,MAAQ,KACXK,EAAKL,OAASK,EAAKL,MAAMuD,OAAOpH,OAAS,GAE5C,YADA8C,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,YAGhC,MAAMoa,EAAgB,OACnBA,EAAc7U,KAAK1G,EAAKL,OACzBf,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,WAAa,QAG7C8B,EAAQE,KAAK,WAAY8H,EAAYtL,MAAOK,EAAKL,MAAO2b,EAAO3b,OAC/DpD,IAAa,EAITkH,EAAQA,KACZ7E,EAAQe,MAAQ,GAChBsL,EAAYtL,OAAQ,EACpBK,EAAKL,MAAQ,GACb2b,EAAO3b,MAAQ,GACfrD,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IACnBC,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACLpH,iBACAsC,UACAqM,cACAjL,OACAsb,SACAzc,UACAtC,cACAkH,QAGJ,GC/FF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,yECEMzO,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,kB,IAEJA,MAAM,WAAWE,MAAA,sC,IACjBA,MAAA,uB,YAGTD,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,YAAY,uBAAqB,c,IACrCA,MAAM,W,IACJE,MAAA,yB,YAKPD,EAAAA,EAAAA,GAA8B,OAAzBD,MAAM,aAAW,W,IACjBA,MAAM,kB,IACJA,MAAM,c,IAGFA,MAAM,Y,UASgBA,MAAM,W,IAChCA,MAAM,c,IACNA,MAAM,Y,UAGkCE,MAAA,wB,UAOnCF,MAAM,W,IACXA,MAAM,c,IACNA,MAAM,Y,UAGkCE,MAAA,wB,YAO/CD,EAAAA,EAAAA,GAA8B,OAAzBD,MAAM,aAAW,W,IACjBA,MAAM,W,IACJA,MAAM,c,IAKRA,MAAM,W,IACJA,MAAM,c,YAKbC,EAAAA,EAAAA,GAA8B,OAAzBD,MAAM,aAAW,W,IACjBA,MAAM,W,IACJA,MAAM,c,YAOXC,EAAAA,EAAAA,GAA4B,OAAvBC,MAAA,YAAgB,W,YAMzBD,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,6VA3FjC2B,EAAAA,EAAAA,IA4FYyF,EAAA,C,WA3FD7G,EAAA8G,e,qCAAA9G,EAAA8G,eAAc/G,GACtB,eAAcC,EAAA+G,YACdvF,MAAO,IACPyF,OAAO,EACR,cAAY,kBACZ,kBACAC,UAAA,I,CAEWF,OAAK5E,EAAAA,EAAAA,KACd,IAAsC,CAAtCzC,IACAH,EAAAA,EAAAA,GAIM,MAJNI,GAIM,EAHJwB,EAAAA,EAAAA,IAA2KiJ,EAAA,CAA/J5K,MAAO,CAAA6K,QAAA,OAAAC,WAAA,UAA0CC,KAAMxK,EAAAgmB,SAASxb,KAAOhJ,MAAO,GAAKC,OAAQ,GAAKgJ,SAAUzK,EAAAgmB,SAASvQ,YAAcQ,OAAQjW,EAAAgmB,SAAS9P,W,sCAC9J1W,EAAAA,EAAAA,GAAwF,MAAxFc,IAAwFJ,EAAAA,EAAAA,IAAtBF,EAAAgmB,SAASxb,MAAI,IAC/EhL,EAAAA,EAAAA,GAAmD,MAAnD+H,IAAmDrH,EAAAA,EAAAA,IAAjBC,EAAAC,GAAG,OAAD,Q,kBAGxC,IAAsC,CAAtCQ,IAAsC,qBACtCI,EAAAA,EAAAA,IAwEM,MAxENH,GAwEM,EAvEJrB,EAAAA,EAAAA,GAKM,MALNyB,GAKM,EAJJzB,EAAAA,EAAAA,GAAmN,MAAnN0B,GAAmN,EAAjLE,EAAAA,EAAAA,IAA2KiJ,EAAA,CAA/J5K,MAAO,CAAA6K,QAAA,OAAAC,WAAA,UAA0CC,KAAMxK,EAAAgmB,SAASxb,KAAOhJ,MAAO,GAAKC,OAAQ,GAAKgJ,SAAUzK,EAAAgmB,SAASvQ,YAAcQ,OAAQjW,EAAAgmB,SAAS9P,W,wCAChM1W,EAAAA,EAAAA,GAEM,aADJ4B,EAAAA,EAAAA,IAAqEC,EAAA,CAA1DM,WAAOC,EAAAA,EAAAA,IAAQ5B,EAAAqJ,QAAO,W,WAAWrJ,EAAAimB,O,qCAAAjmB,EAAAimB,OAAMlmB,GAAEmI,YAAY,I,uCAGpE/G,IACA3B,EAAAA,EAAAA,GAYM,MAZNuC,GAYM,EAXJvC,EAAAA,EAAAA,GAA8C,MAA9CgD,IAA8CtC,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCgB,EAAAA,EAAAA,IAMU+F,EAAA,CANAC,QAASpH,EAAAkmB,QAAUlmB,EAAAgmB,SAASxb,M,CACzBpD,SAAOhF,EAAAA,EAAAA,KAChB,IAEM,EAFN5C,EAAAA,EAAAA,GAEM,MAFNiD,IAEMvC,EAAAA,EAAAA,IADDF,EAAAkmB,QAAUlmB,EAAAgmB,SAASxb,MAAI,M,qBAIhChL,EAAAA,EAAAA,GAEM,OAFDC,MAAA,uCAA4CI,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAAqI,OAAOrI,EAAAkmB,QAAUlmB,EAAAgmB,SAASxb,Q,EAChFpJ,EAAAA,EAAAA,IAA6CiB,EAAA,CAApCoF,KAAK,MAAI,C,kBAAC,IAAgB,EAAhBrG,EAAAA,EAAAA,IAAgBkH,M,UAG5BtI,EAAAgmB,SAASvQ,cAAW,WAA/BzU,EAAAA,EAAAA,IAWM,MAXN0B,GAWM,EAVJlD,EAAAA,EAAAA,GAA8C,MAA9CmD,IAA8CzC,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCZ,EAAAA,EAAAA,GAEM,MAFNoD,IAEM1C,EAAAA,EAAAA,IADDF,EAAAmmB,aAAW,GAELnmB,EAAAgmB,SAAS9P,WAAalW,EAAAomB,aAAU,WAA3CplB,EAAAA,EAAAA,IAEM,MAFN6B,GAEM,EADJzB,EAAAA,EAAAA,IAAkDilB,EAAA,CAA1C5e,KAAK,QAAQC,KAAK,U,mBAAS,IAAM,UAAN,a,0BAErClI,EAAAA,EAAAA,GAEM,OAFDC,MAAA,uCAA4CI,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAsmB,kBAAAtmB,EAAAsmB,oBAAA/lB,K,EACtDa,EAAAA,EAAAA,IAAwCiB,EAAA,CAA/BoF,KAAK,MAAI,C,kBAAC,IAAW,EAAXrG,EAAAA,EAAAA,IAAW8S,M,wBAGlClT,EAAAA,EAAAA,IAWM,MAXN8B,GAWM,EAVJtD,EAAAA,EAAAA,GAA8C,MAA9CuD,IAA8C7C,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCZ,EAAAA,EAAAA,GAEM,MAFNwD,IAEM9C,EAAAA,EAAAA,IADDF,EAAAumB,SAASvmB,EAAAgmB,SAASQ,WAAW/e,OAAQ,MAAEvH,EAAAA,EAAAA,IAAGF,EAAAgmB,SAASQ,WAAW/e,KAAO,IAAMtH,EAAAC,GAAG,OAAQ,KAC3F,GACWJ,EAAAgmB,SAAS9P,WAAalW,EAAAomB,aAAU,WAA3CplB,EAAAA,EAAAA,IAEM,MAFNiR,GAEM,EADJ7Q,EAAAA,EAAAA,IAAkDilB,EAAA,CAA1C5e,KAAK,QAAQC,KAAK,U,mBAAS,IAAM,UAAN,a,0BAErClI,EAAAA,EAAAA,GAEM,OAFDC,MAAA,uCAA4CI,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAymB,aAAAzmB,EAAAymB,eAAAlmB,K,EACtDa,EAAAA,EAAAA,IAAwCiB,EAAA,CAA/BoF,KAAK,MAAI,C,kBAAC,IAAW,EAAXrG,EAAAA,EAAAA,IAAW8S,M,WAGlChC,IACA1S,EAAAA,EAAAA,GAKM,MALN2S,GAKM,EAJJ3S,EAAAA,EAAAA,GAAgD,MAAhD6S,IAAgDnS,EAAAA,EAAAA,IAApBC,EAAAC,GAAG,SAAU,IAAC,IAC1CZ,EAAAA,EAAAA,GAEM,YAAAU,EAAAA,EAAAA,IADDF,EAAA0mB,WAAW1mB,EAAAgmB,SAASQ,WAAWG,QAAK,MAG3CnnB,EAAAA,EAAAA,GAKM,MALN8S,GAKM,EAJJ9S,EAAAA,EAAAA,GAAgD,MAAhD+S,IAAgDrS,EAAAA,EAAAA,IAApBC,EAAAC,GAAG,SAAU,IAAC,IAC1CZ,EAAAA,EAAAA,GAEM,YAAAU,EAAAA,EAAAA,IADDF,EAAA0mB,WAAW1mB,EAAAgmB,SAASQ,WAAWI,QAAK,KAG3CpU,IACAhT,EAAAA,EAAAA,GAYM,MAZNiT,GAYM,EAXJjT,EAAAA,EAAAA,GAA8C,MAA9CkT,IAA8CxS,EAAAA,EAAAA,IAAlBC,EAAAC,GAAG,OAAQ,IAAC,IACxCZ,EAAAA,EAAAA,GAEM,YAAAU,EAAAA,EAAAA,IADDF,EAAA4Y,aAAa5Y,EAAAgmB,SAASQ,WAAW1nB,KAAK4I,KAAK1H,EAAAgmB,SAASQ,WAAWrN,cAAW,IAE/E3Z,EAAAA,EAAAA,GAEM,OAFDC,MAAA,uCAA4CI,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAA6mB,qBAAA7mB,EAAA6mB,uBAAAtmB,K,EACtDa,EAAAA,EAAAA,IAAqCiB,EAAA,CAA5BoF,KAAK,MAAI,C,kBAAC,IAAQ,EAARrG,EAAAA,EAAAA,IAAQ4G,M,QAE7B2K,IACAnT,EAAAA,EAAAA,GAEM,aADJ4B,EAAAA,EAAAA,IAAmFoG,EAAA,CAAxEC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqJ,S,mBAAU,IAAc,mBAAXlJ,EAAAC,GAAG,OAAD,M,+BArEAJ,EAAAwW,WAyEpE5D,M,uCAIFxR,EAAAA,EAAAA,IAAgG0lB,EAAA,CAA/EpnB,IAAI,qBAAsB2X,kBAAiBrX,EAAAsX,iB,mCC7FvD,MAAMoP,GAAchI,IACvB,IAAIA,EAAM,MAAO,GACjB,IAAIqI,EAAO,IAAIC,KAAU,IAALtI,GAChBuI,EAAOF,EAAKG,cACZC,EAAQJ,EAAKK,WAAa,EAC1BC,EAAMN,EAAKO,UACXC,EAAOR,EAAKS,WACZvM,EAAM8L,EAAKU,aACXC,EAAUX,EAAKY,aAEhBR,EAAQ,KAAIA,EAAQ,IAAMA,GAC1BE,EAAM,KAAIA,EAAM,IAAMA,GACtBE,EAAO,KAAIA,EAAO,IAAMA,GACxBtM,EAAM,KAAIA,EAAM,IAAMA,GACtByM,EAAU,KAAIA,EAAU,IAAMA,GAEjC,IAAIE,EAAU,KAId,OAHgCA,EAAN,OAAvB7c,GAAKW,OAAOT,OAA2B,CAACgc,EAAME,EAAOE,GACzC,CAACF,EAAOE,EAAKJ,GAErBW,EAAQ,GAAK7c,GAAKW,OAAOC,EAAE,KAAOic,EAAQ,GAAK7c,GAAKW,OAAOC,EAAE,KAAOic,EAAQ,GAAK7c,GAAKW,OAAOC,EAAE,MAAQ4b,EAAO,IAAMtM,EAAM,IAAMyM,CAAO,ECvBrInB,GAAYsB,IACrB,GAAc,MAAXA,QAA8Bjb,GAAXib,EAAsB,MAAO,GACnD,IAAIpgB,EAAO,GAEPA,EADAogB,EAAU,KACHA,EAAQC,QAAQ,GAAK,KACrBD,EAAU,SACTA,EAAU,MAAMC,QAAQ,GAAK,MAC9BD,EAAU,YACTA,EAAU,SAAeC,QAAQ,GAAK,OAEtCD,EAAU,YAAsBC,QAAQ,GAAK,MAEzD,IAAIC,EAAUtgB,EAAO,GACjBqK,EAAQiW,EAAQzC,QAAQ,KACxB0C,EAAMD,EAAQ3P,UAAUtG,EAAQ,EAAGA,EAAQ,GAC/C,MAAW,MAAPkW,EACOD,EAAQ3P,UAAU,EAAGtG,GAASiW,EAAQ3P,UAAUtG,EAAQ,GAE5DrK,CAAI,E,mECPTjI,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,kB,IAEJA,MAAM,WAAWE,MAAA,sC,IACjBA,MAAA,uB,YAGTD,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,W,IACJA,MAAM,wB,IAKRA,MAAM,W,IACJA,MAAM,wB,IAKRA,MAAM,W,IACJA,MAAM,wB,YAKbC,EAAAA,EAAAA,GAAuC,OAAlCC,MAAA,yBAA2B,W,IAC3BA,MAAA,0E,YAEHD,EAAAA,EAAAA,GAA4B,OAAvBC,MAAA,YAAgB,W,mJAvCzBJ,EAAAA,EAAAA,IA4CYwH,EAAA,C,WA3CD7G,EAAA8G,e,uCAAA9G,EAAA8G,eAAc/G,GACtB,eAAcC,EAAA+G,YACdvF,MAAQrB,EAAAC,GAAG,OACX6G,OAAO,EACR,cAAY,kBACZ,kBACAC,UAAA,I,CAEWF,OAAK5E,EAAAA,EAAAA,KACd,IAAsC,CAAtCzC,IACAH,EAAAA,EAAAA,GAIM,MAJNI,GAIM,EAHJwB,EAAAA,EAAAA,IAA2KiJ,EAAA,CAA/J5K,MAAO,CAAA6K,QAAA,OAAAC,WAAA,UAA0CC,KAAMxK,EAAAgmB,SAASxb,KAAOhJ,MAAO,GAAKC,OAAQ,GAAKgJ,SAAUzK,EAAAgmB,SAASvQ,YAAcQ,OAAQjW,EAAAgmB,SAAS9P,W,sCAC9J1W,EAAAA,EAAAA,GAAwF,MAAxFc,IAAwFJ,EAAAA,EAAAA,IAAtBF,EAAAgmB,SAASxb,MAAI,IAC/EhL,EAAAA,EAAAA,GAAqD,MAArD+H,IAAqDrH,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,SAAD,Q,kBAGxC,IAAsC,CAAtCQ,IACApB,EAAAA,EAAAA,GAKM,MALNqB,GAKM,EAJJrB,EAAAA,EAAAA,GAAyD,MAAzDyB,IAAyDf,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,QAAS,IAAC,IACnDgB,EAAAA,EAAAA,IAAiF6mB,EAAA,C,WAA3DjoB,EAAAkoB,gBAAgB9O,MAAM,G,qCAAtBpZ,EAAAkoB,gBAAgB9O,MAAM,GAADrZ,GAAM+S,MAAO3S,EAAAC,GAAG,MAAOqH,KAAK,S,gCACvErG,EAAAA,EAAAA,IAAiF6mB,EAAA,C,WAA3DjoB,EAAAkoB,gBAAgB9O,MAAM,G,qCAAtBpZ,EAAAkoB,gBAAgB9O,MAAM,GAADrZ,GAAM+S,MAAO3S,EAAAC,GAAG,MAAOqH,KAAK,S,gCACvErG,EAAAA,EAAAA,IAAiF6mB,EAAA,C,WAA3DjoB,EAAAkoB,gBAAgB9O,MAAM,G,qCAAtBpZ,EAAAkoB,gBAAgB9O,MAAM,GAADrZ,GAAM+S,MAAO3S,EAAAC,GAAG,MAAOqH,KAAK,S,kCAEzEjI,EAAAA,EAAAA,GAKM,MALN0B,GAKM,EAJJ1B,EAAAA,EAAAA,GAAyD,MAAzD2B,IAAyDjB,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,QAAS,IAAC,IACnDgB,EAAAA,EAAAA,IAAiF6mB,EAAA,C,WAA3DjoB,EAAAkoB,gBAAgB7O,MAAM,G,qCAAtBrZ,EAAAkoB,gBAAgB7O,MAAM,GAADtZ,GAAM+S,MAAO3S,EAAAC,GAAG,MAAOqH,KAAK,S,gCACvErG,EAAAA,EAAAA,IAAiF6mB,EAAA,C,WAA3DjoB,EAAAkoB,gBAAgB7O,MAAM,G,qCAAtBrZ,EAAAkoB,gBAAgB7O,MAAM,GAADtZ,GAAM+S,MAAO3S,EAAAC,GAAG,MAAOqH,KAAK,S,gCACvErG,EAAAA,EAAAA,IAAiF6mB,EAAA,C,WAA3DjoB,EAAAkoB,gBAAgB7O,MAAM,G,qCAAtBrZ,EAAAkoB,gBAAgB7O,MAAM,GAADtZ,GAAM+S,MAAO3S,EAAAC,GAAG,MAAOqH,KAAK,S,kCAEzEjI,EAAAA,EAAAA,GAKM,MALNuC,GAKM,EAJJvC,EAAAA,EAAAA,GAA0D,MAA1DgD,IAA0DtC,EAAAA,EAAAA,IAApBC,EAAAC,GAAG,SAAU,IAAC,IACpDgB,EAAAA,EAAAA,IAAkF6mB,EAAA,C,WAA5DjoB,EAAAkoB,gBAAgB5O,OAAO,G,qCAAvBtZ,EAAAkoB,gBAAgB5O,OAAO,GAADvZ,GAAM+S,MAAO3S,EAAAC,GAAG,MAAOqH,KAAK,S,gCACxErG,EAAAA,EAAAA,IAAkF6mB,EAAA,C,WAA5DjoB,EAAAkoB,gBAAgB5O,OAAO,G,qCAAvBtZ,EAAAkoB,gBAAgB5O,OAAO,GAADvZ,GAAM+S,MAAO3S,EAAAC,GAAG,MAAOqH,KAAK,S,gCACxErG,EAAAA,EAAAA,IAAkF6mB,EAAA,C,WAA5DjoB,EAAAkoB,gBAAgB5O,OAAO,G,qCAAvBtZ,EAAAkoB,gBAAgB5O,OAAO,GAADvZ,GAAM+S,MAAO3S,EAAAC,GAAG,MAAOqH,KAAK,S,iCAE1EhF,IACAjD,EAAAA,EAAAA,GAMM,MANNkD,GAMM,CALe1C,EAAAgmB,SAASvQ,cAAW,WAAvCpW,EAAAA,EAAAA,IAA+J4oB,EAAA,C,iBAA7GjoB,EAAAkoB,gBAAgB3O,I,qCAAhBvZ,EAAAkoB,gBAAgB3O,IAAGxZ,GAAG+S,MAAO3S,EAAAC,GAAG,aAAcqH,KAAK,QAAQhI,MAAA,+C,gDAC7GkD,IACAvB,EAAAA,EAAAA,IAEYoG,EAAA,CAFDC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqJ,QAAS5J,MAAA,+C,mBACtD,IAAc,mBAAXU,EAAAC,GAAG,OAAD,M,uEAab,QACEoK,KAAM,kBACNqC,WAAY,CACVS,UAASA,MAEXH,KAAAA,CAAML,EAAOW,GAGX,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GAGrBwmB,GAAUxmB,EAAAA,EAAAA,IAAI,IACdsmB,GAAWtmB,EAAAA,EAAAA,IAAI,CACnB8mB,WAAW,CACT1nB,KAAK,CACH4I,KAAK,IAEPyR,YAAY,MAIV+O,GAAkBxoB,EAAAA,EAAAA,IAAI,CAC1B0Z,MAAO,EAAC,GAAM,GAAM,GACpBC,MAAO,EAAC,GAAM,GAAM,GACpBC,OAAQ,EAAC,GAAM,GAAM,GACrBC,KAAK,IAID4O,EAAOA,KACXD,EAAgB/d,MAAQ6O,GAAkBgN,EAAS7b,MAAMqc,WAAWrN,YAAY,EAI5E9P,EAAUA,KACdoE,EAAQE,KAAK,kBAAmBuY,EAAQ/b,MAAO6b,EAAS7b,MAAMK,KAAM0d,EAAgB/d,MAAM,EAItF8D,EAAQA,KACZiY,EAAQ/b,MAAQ,GAChB6b,EAAS7b,MAAQ,CACfqc,WAAW,CACT1nB,KAAK,CACH4I,KAAK,IAEPyR,YAAY,KAGhB+O,EAAgB/d,MAAQ,CACtBiP,MAAO,EAAC,GAAM,GAAM,GACpBC,MAAO,EAAC,GAAM,GAAM,GACpBC,OAAQ,EAAC,GAAM,GAAM,GACrBC,KAAK,GAEPzS,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IACnBC,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACLgY,UACAF,WACAlf,iBACAC,cACAohB,OACAD,kBACAlP,kBAAiB,GACjB3P,UAEJ,GC7HF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,UJ6GA,IACEmB,KAAM,WACNqC,WAAY,CACVsD,QAAO,GACP7C,UAAS,KACTmD,aAAY,OACZ2X,QAAO,OACPxX,KAAI,OACJyX,gBAAeA,IAEjBvb,MAAM,CAAC,UACPK,KAAAA,CAAML,EAAMW,GAGV,MAAM,YAAE6D,IAAgBC,EAAAA,EAAAA,KAGlBzK,GAAiBpH,EAAAA,EAAAA,KAAI,GACrBsmB,GAAWtmB,EAAAA,EAAAA,IAAI,CAAC,GAChBwmB,GAAUxmB,EAAAA,EAAAA,IAAI,IACdumB,GAASvmB,EAAAA,EAAAA,IAAI,IAGb8W,GAAU9W,EAAAA,EAAAA,KAAI,GAEd0mB,GAAa1mB,EAAAA,EAAAA,KAAI,GAEjBymB,GAAczmB,EAAAA,EAAAA,IAAIqL,GAAKW,OAAOC,EAAE,iBAGhC8a,EAAcA,KAClBnC,IAAAA,KAAO,CACLF,IAAKne,EAAgB,MACrByB,KAAK,MACL4gB,KAAK,CACH5J,MAAK,IAAIsI,MAAOuB,UAChBxkB,OAAO+I,EAAM/I,OACbykB,KAAK/hB,EAAWyf,EAAQ/b,OACxBiJ,KAAKxM,EAAWof,EAAS7b,MAAMK,OAEjCie,WAAY,WACVjS,EAAQrM,OAAQ,CAClB,EACAya,OAAAA,CAAQD,GACY,WAAfA,EAAK+D,OAAqB1C,EAAS7b,MAAMqc,WAAW/e,KAAOkhB,SAAShE,EAAK2D,KAAM,IAC7ElC,EAAWjc,OAAQ,CAC1B,EACAye,SAAU,WACRpS,EAAQrM,OAAQ,CAClB,GACA,EAIEmc,EAAmBA,KACvBhC,IAAAA,KAAO,CACLF,IAAKne,EAAgB,QACrByB,KAAK,MACL4gB,KAAK,CACH5J,MAAK,IAAIsI,MAAOuB,UAChBxkB,OAAO+I,EAAM/I,OACbykB,KAAK/hB,EAAWyf,EAAQ/b,OACxBiJ,KAAKxM,EAAWof,EAAS7b,MAAMK,OAEjCie,WAAY,WACVjS,EAAQrM,OAAQ,CAClB,EACAya,OAAAA,CAAQD,GACY,WAAfA,EAAK+D,OACNvC,EAAYhc,MAAQwa,EAAK2D,KAAK,GAAKvd,GAAKW,OAAOC,EAAE,SAAYkd,KAAK3N,IAAI,EAAEyN,SAAShE,EAAK2D,KAAK,GAAI,IAAM,GAAMvd,GAAKW,OAAOC,EAAE,SAEtHya,EAAWjc,OAAQ,CAC1B,EACAye,SAAU,WACRpS,EAAQrM,OAAQ,CAClB,GACA,EAIEd,EAAUA,KAEd,GAAG2c,EAAS7b,MAAMK,MAAQyb,EAAO9b,MAE/B,YADApD,IAGF,KAAKkf,EAAO9b,OAAS8b,EAAO9b,MAAMuD,OAAOpH,OAAS,GAMhD,YALAwH,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,WACvBjE,KAAM,UACNsG,UAAU,IAId,MAAM+X,EAAgB,OACtB,GAAGA,EAAc7U,KAAK+U,EAAO9b,OAM3B,YALA2D,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,WAAa,OACpCjE,KAAM,UACNsG,UAAU,IAId,IAAI8a,EAAU5C,EAAQ/b,MAAQ6b,EAAS7b,MAAMK,KACzCue,EAAU7C,EAAQ/b,MAAQ8b,EAAO9b,MACrCsD,EAAQE,KAAK,WAAWmb,EAAQC,GAChChiB,GAAa,EAITsB,EAASmJ,UACbpK,GAAW,GACNA,GAAWA,EAAQd,OAAS,SAS3BgL,EAAYlK,IAClB0G,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,qBAblB5D,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,kBAUpB,EAGE4F,EAAkBA,CAACkR,EAAKpV,EAAM8U,KAClCza,EAAQE,KAAK,kBAAmB6a,EAAMpV,EAAM8U,EAAgB,EAIxDja,EAAQA,KACZ+X,EAAS7b,MAAQ,CACfqc,WAAW,CACT1nB,KAAK,CACH4I,KAAK,IAEPyR,YAAY,KAGhB8M,EAAO9b,MAAQ,GACf+b,EAAQ/b,MAAQ,GAChBqM,EAAQrM,OAAQ,EAChBic,EAAWjc,OAAQ,EACnBgc,EAAYhc,MAAQY,GAAKW,OAAOC,EAAE,gBAClC7E,EAAeqD,OAAQ,CAAK,EAIxB6e,GAAqBtpB,EAAAA,EAAAA,MACrBmnB,EAAsBA,KAC1BmC,EAAmB7e,MAAM+b,QAAUA,EAAQ/b,MAC3C6e,EAAmB7e,MAAM6b,SAAWA,EAAS7b,MAC7C6e,EAAmB7e,MAAMrD,gBAAiB,EAC1CkiB,EAAmB7e,MAAMge,MAAM,EAI3BphB,EAAemH,IAChB8a,EAAmB7e,OAAO6e,EAAmB7e,MAAMpD,cACtDoH,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACLpH,iBACAkf,WACA3c,UACAtC,cACAkH,QACAiY,UACAD,SACAS,WAAU,GACV9N,aAAY,GACZ2N,SAAQ,GACRle,SACAmO,UACA4P,aACAD,cACAM,cACAH,mBACA0C,qBACAnC,sBACAvP,kBAEJ,GK/SF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,yECCI9X,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,a,IACJA,MAAM,W,YACTC,EAAAA,EAAAA,GAAmC,OAA9BD,MAAM,cAAc,QAAI,K,IACxBE,MAAA,Y,UAQmCF,MAAM,qB,UACpCE,MAAA,gB,IACPF,MAAM,W,IACJA,MAAM,c,IACNE,MAAA,Y,IAOAA,MAAA,wB,YAKTD,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,8LArCjCJ,EAAAA,EAAAA,IAsCYwH,EAAA,C,WArCD7G,EAAA8G,e,qCAAA9G,EAAA8G,eAAc/G,GACtB,eAAcC,EAAA+G,YACdvF,MAAO,IACPyF,OAAO,EACPD,MAAO7G,EAAAC,GAAG,SACX,cAAY,kBACZ8G,UAAA,I,mBAEA,IAAsC,CAAtCvH,IACAH,EAAAA,EAAAA,GA0BM,MA1BNI,GA0BM,EAzBJJ,EAAAA,EAAAA,GASM,MATNc,GASM,CARJiH,IACA/H,EAAAA,EAAAA,GAMM,MANNoB,GAMM,EALJQ,EAAAA,EAAAA,IAIWC,EAAA,CAJDoG,KAAK,Q,WAAiBzH,EAAAokB,I,qCAAApkB,EAAAokB,IAAGrkB,GAAER,MAAM,WAAY2I,YAAa/H,EAAAC,GAAG,a,CAC1D+H,QAAM/F,EAAAA,EAAAA,KACf,IAAiC,EAAjChB,EAAAA,EAAAA,IAAiCiB,EAAA,M,kBAAxB,IAAc,EAAdjB,EAAAA,EAAAA,IAAc6nB,M,kDAKpBjpB,EAAAoJ,SAAWpJ,EAAAoJ,QAAQ9C,OAAS,IAAH,WAApCtF,EAAAA,EAAAA,IAAyF,MAAzFH,IAAyFX,EAAAA,EAAAA,IAAjBF,EAAAoJ,SAAO,iBAC/EpI,EAAAA,EAAAA,IAAwC,MAAxCC,MACAzB,EAAAA,EAAAA,GAYM,MAZN0B,GAYM,EAXJ1B,EAAAA,EAAAA,GAA+C,MAA/C2B,IAA+CjB,EAAAA,EAAAA,IAAnBC,EAAAC,GAAG,QAAS,IAAC,IACzCZ,EAAAA,EAAAA,GAMM,MANNuC,GAMM,EALJX,EAAAA,EAAAA,IAIWC,EAAA,CAJDoG,KAAK,Q,WAAiBzH,EAAAwK,K,qCAAAxK,EAAAwK,KAAIzK,GAAG4B,WAAOC,EAAAA,EAAAA,IAAQ5B,EAAAqJ,QAAO,WAAE9J,MAAM,WAAY2I,YAAa/H,EAAAC,GAAG,W,CACpF+H,QAAM/F,EAAAA,EAAAA,KACf,IAA+B,EAA/BhB,EAAAA,EAAAA,IAA+BiB,EAAA,M,kBAAtB,IAAY,EAAZjB,EAAAA,EAAAA,IAAY8nB,M,6DAI3B1pB,EAAAA,EAAAA,GAEM,MAFNgD,GAEM,EADJpB,EAAAA,EAAAA,IAAmFoG,EAAA,CAAxEC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqJ,S,mBAAU,IAAc,mBAAXlJ,EAAAC,GAAG,OAAD,M,0BAIpEqC,M,8CASJ,QACE+H,KAAM,UACNqC,WAAY,CACVsc,WAAU,OACVC,SAAQA,GAAAA,KAEVjc,KAAAA,CAAML,EAAMW,GAGV,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GACrB0J,GAAU1J,EAAAA,EAAAA,IAAI,IACd8K,GAAO9K,EAAAA,EAAAA,IAAI,IACX0kB,GAAM1kB,EAAAA,EAAAA,IAAI,IAGV2J,EAAUA,KAGd,GADAD,EAAQe,MAAQ,KACXia,EAAIja,OAASia,EAAIja,MAAMuD,OAAOpH,OAAS,GAE1C,YADA8C,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,YAGhC,KAAKnB,EAAKL,OAASK,EAAKL,MAAMuD,OAAOpH,OAAS,GAE5C,YADA8C,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,YAGhC,MAAMoa,EAAgB,OACnBA,EAAc7U,KAAK1G,EAAKL,OACzBf,EAAQe,MAAQY,GAAKW,OAAOC,EAAE,WAAa,QAG7C8B,EAAQE,KAAK,WAAWyW,EAAIja,MAAOK,EAAKL,OACxCpD,IAAa,EAITkH,EAAQA,KACZ7E,EAAQe,MAAQ,GAChBK,EAAKL,MAAQ,GACbia,EAAIja,MAAQ,GACZrD,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IACnBC,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACLpH,iBACAsC,UACAoB,OACA4Z,MACA/a,UACAtC,cACAkH,QAEJ,GCrGF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,UnB+KA,IACEzD,KAAK,YACLqC,WAAY,CACVsD,QAAO,GACP5C,OAAM,GACND,UAAS,KACT+b,WAAU,GACVC,OAAM,GACNC,SAAQ,GACRC,QAAO,GACPpB,QAAO,OACPqB,KAAI,OACJC,SAAQ,OACRC,OAAM,OACNC,YAAW,OACXC,UAAS,OACTC,KAAIA,GAAAA,KAENhd,MAAM,CAAC,SAAS,MAChBK,KAAAA,CAAML,GAGJ,MAAM0J,GAAU9W,EAAAA,EAAAA,KAAI,IAGd,YAAE4R,IAAgBC,EAAAA,EAAAA,KAElBiE,GAAQ9V,EAAAA,EAAAA,IAAI,IACZ2U,GAAgB3U,EAAAA,EAAAA,IAAI,IAC1B,IAAIqqB,GAAqB,EACzB,MAAMpU,EAAgBA,CAACiM,EAAOxO,EAAM4W,GAAM,KACxCpI,EAAMzM,iBACN,MAAMrD,EAAQ4D,EAAWtC,EAAK7R,IAE9B,GAAIyoB,EAUJ,GAAGpI,EAAMqI,SACP,GAAiC,GAA9B5V,EAAclK,MAAM7D,SAAqC,GAAtByjB,GAA2BA,GAAqBvU,EAAMrL,MAAM7D,OAAQ,CACxG+N,EAAclK,MAAQ,GACtB,IAAI,IAAI9D,EAAE,EAAEA,GAAG+M,EAAKtB,MAAMzL,IAAKgO,EAAclK,MAAMsV,KAAK,IAAIjK,EAAMrL,MAAM9D,KACxE0jB,GAAqB,CACvB,KACK,CACH1V,EAAclK,MAAQ,GACtB,MAAM+f,EAAQrB,KAAK5N,IAAI7H,EAAKtB,MAAMiY,GAC5BI,EAAMtB,KAAK3N,IAAI9H,EAAKtB,MAAMiY,GAChC,IAAI,IAAI1jB,EAAE6jB,EAAM7jB,GAAG8jB,EAAI9jB,IAAKgO,EAAclK,MAAMsV,KAAK,IAAIjK,EAAMrL,MAAM9D,IACvE,KAGmB,WAAZyG,EAAMnJ,IAAmBie,EAAMC,UAA0B,OAAZ/U,EAAMnJ,IAA2B,OAAZmJ,EAAMnJ,KAAgBie,EAAME,SACrGiI,EAAoB3W,EAAKtB,OACZ,GAAVA,EAAauC,EAAclK,MAAMigB,OAAOtY,EAAO,GAC7CuC,EAAclK,MAAMsV,KAAKrM,KAG9B2W,EAAoB3W,EAAKtB,MACzBuC,EAAclK,MAAQ,GACtBkK,EAAclK,MAAMsV,KAAKrM,SA/BZ,GAAVtB,IACDiY,EAAoB3W,EAAKtB,MACzBuC,EAAclK,MAAQ,GACtBkK,EAAclK,MAAMsV,KAAKrM,GA6B7B,EAEIsC,EAAcnU,IAClB,IAAI,IAAI8E,EAAE,EAAEA,EAAEgO,EAAclK,MAAM7D,OAAOD,IACvC,GAAG9E,GAAM8S,EAAclK,MAAM9D,GAAG9E,GAAI,OAAO8E,EAE7C,OAAQ,CAAC,EAEL0P,EAAexU,IACnB,IAAI,IAAI8E,EAAE,EAAEA,EAAEgkB,GAAclgB,MAAMqL,MAAMlP,OAAOD,IAC7C,GAAG9E,GAAM8oB,GAAclgB,MAAMqL,MAAMnP,GAAG9E,GAAI,OAAO8E,EAEnD,OAAQ,CAAC,EAELikB,EAAqB9f,IACzB,IAAI,IAAInE,EAAE,EAAEA,EAAEmP,EAAMrL,MAAM7D,OAAOD,IAC/B,GAAGmP,EAAMrL,MAAM9D,GAAGmE,MAAQA,EAAM,OAAOgL,EAAMrL,MAAM9D,GAErD,OAAO,IAAI,EAGPkN,GAAM7T,EAAAA,EAAAA,IAAI,IACVqU,GAAYrU,EAAAA,EAAAA,IAAI,IAEhB6qB,EAAoBA,KACR,IAAbhX,EAAIpJ,OAA+B,KAAhBoJ,EAAIpJ,MAAM,KAAWoJ,EAAIpJ,MAAQ,IAAMoJ,EAAIpJ,OAC3B,KAAnCoJ,EAAIpJ,MAAMoJ,EAAIpJ,MAAM7D,OAAS,KAAWiN,EAAIpJ,MAAQoJ,EAAIpJ,MAAQ,KACnEoJ,EAAIpJ,MAAQoJ,EAAIpJ,MAAMzD,QAAQ,UAAW,KAEzC8jB,EAAajX,EAAIpJ,MAAM,EAEnBqgB,EAAgBC,IACA1W,EAAU5J,MAAf,KAAZsgB,EAAmC,GACfA,EAASrS,UAAU,EAAEqS,EAASnkB,OAAS,GAAGoZ,MAAM,IAAI,EAEvE1L,EAAmBA,CAAC4N,EAAM9P,KAE9B,KAAkB,WAAZhF,EAAMnJ,IAAmBie,EAAMC,UAA0B,OAAZ/U,EAAMnJ,IAA2B,OAAZmJ,EAAMnJ,KAAgBie,EAAME,SAAW,OAC/GF,EAAMzM,iBACN,IAAIuV,EAAS,IACb,IAAI,IAAIrkB,EAAE,EAAEA,GAAGyL,EAAMzL,IACnBqkB,GAAU3W,EAAU5J,MAAM9D,GAC1BqkB,GAAU,IAEZ9U,EAAU8U,EAAO,EAIbpX,GAAiB5T,EAAAA,EAAAA,KAAI,GACrBwd,EAAaA,KACD,IAAb3J,EAAIpJ,OACPma,IAAAA,KAAO,CACLF,IAAKne,EAAgB,QACrByB,KAAK,MACL4gB,KAAK,CACH5J,MAAK,IAAIsI,MAAOuB,UAChBxkB,OAAO+I,EAAM/I,QAEf6gB,OAAAA,CAAQD,GACY,WAAfA,EAAK+D,QACN5d,EAAUX,MAAQY,GAAKW,OAAOC,EAAE,QAChC6I,EAAUrK,MAAQ,EAClBoJ,EAAIpJ,MAAQwa,EAAK2D,KAAKE,KACtB+B,IACAlW,EAAclK,MAAQ,GACtBqL,EAAMrL,MAAQ,GACdwgB,MAGA7f,EAAUX,MAAQwa,EAAKiG,KACvBpW,EAAUrK,MAAQ,EAClBqM,EAAQrM,OAAQ,EAEpB,GACA,EAIEW,GAAYpL,EAAAA,EAAAA,IAAIqL,GAAKW,OAAOC,EAAE,SAE9B6I,GAAY9U,EAAAA,EAAAA,IAAI,GAChBirB,EAAaA,KACjB,GAAgB,IAAbpX,EAAIpJ,MAEL,YADA+S,IAGF,IAAI2N,EAAUtX,EAAIpJ,MAClBma,IAAAA,KAAO,CACLF,IAAKne,EAAgB,MACrByB,KAAK,MACL4gB,KAAK,CACH5J,MAAK,IAAIsI,MAAOuB,UAChBxkB,OAAO+I,EAAM/I,OACbykB,KAAKqC,GAEPpC,WAAY,WACVjS,EAAQrM,OAAQ,EAChBqL,EAAMrL,MAAQ,EAChB,EACAya,OAAAA,CAAQD,GACN,GAAGkG,GAAWtX,EAAIpJ,MAEhB,GADAkK,EAAclK,MAAQ,GACJ,WAAfwa,EAAK+D,QAON,GANAlT,EAAMrL,MAAQwa,EAAK2D,KAAK9S,MACxB1K,EAAUX,MAAQY,GAAKW,OAAOC,EAAE,QAChC6I,EAAUrK,MAAQ,EAClB4f,GAAqB,EACrBe,EAAY3gB,MAAMmL,SAAW,IAC7BwV,EAAY3gB,MAAM4gB,QACfC,EAAY7gB,OAAS6gB,EAAY7gB,MAAMrD,eAAgB,CACxD,IAAImkB,EAAcX,EAAkBU,EAAY7gB,MAAM6b,SAASxb,MAC5DygB,GACDD,EAAY7gB,MAAM8D,QAClB+c,EAAY7gB,MAAMrD,gBAAiB,EACnCkkB,EAAY7gB,MAAM6b,SAAWiF,EAC7BD,EAAY7gB,MAAM+b,QAAU3S,EAAIpJ,MAChC6gB,EAAY7gB,MAAM8b,OAASgF,EAAYzgB,KACpCygB,EAAYxV,YAAauV,EAAY7gB,MAAMmc,mBACzC0E,EAAY7gB,MAAMsc,eAEpBuE,EAAY7gB,MAAMpD,aACzB,OAGAyO,EAAMrL,MAAQ,GACdW,EAAUX,MAAQwa,EAAKiG,KACvBpW,EAAUrK,MAAQ,EAClB4f,GAAqB,EACrBe,EAAY3gB,MAAMmL,SAAW,IAC7BwV,EAAY3gB,MAAM4gB,OAGxB,EACAnC,SAAU,WACLiC,GAAWtX,EAAIpJ,QAAOqM,EAAQrM,OAAQ,EAC3C,GACA,EAKE+gB,EAAmBA,CAAC1gB,EAAMge,IACvBviB,iCAAqD,IAAI+gB,MAAOuB,UAAY,aAAe4C,mBAAmB3gB,GAAQ,WAAasC,EAAM/I,OAAS,SAAWonB,mBAAmB3C,GAAcjV,EAAIpJ,OAGrMihB,EAAqBA,CAAC5gB,EAAMge,IACzBviB,mCAAuD,IAAI+gB,MAAOuB,UAAY,eAAiB4C,mBAAmBvkB,EAAW4D,IAAS,WAAasC,EAAM/I,OAAS,SAAWonB,mBAAmB1kB,EAAW+hB,GAAcjV,EAAIpJ,QAIhOkhB,EAAYjH,IAChB,IAAIkH,EAAY,CAAC9sB,IAAI,GAAIgqB,KAAK,MAC1BnD,EAAWjB,EAAIkB,QAAQ,YACvBC,EAAYnB,EAAIkB,QAAQ,UAG5B,OAFgB,GAAbD,IAAgC,GAAdE,IAAiB+F,EAAU9sB,IAAM4lB,EAAIhM,UAAUiN,EAAW,EAAGE,KACjE,GAAdA,IAAiB+F,EAAU9C,KAAO+C,mBAAmBnH,EAAIhM,UAAUmN,EAAY,KAC3E+F,CAAS,EAIZE,EAAsBhhB,IAC1B,GAA2B,GAAxB8I,EAAenJ,MAAe,OACjC,IAAIshB,EAAIC,SAASC,cAAc,KAC/BF,EAAEjP,KAAO0O,EAAiB1gB,GAC1BkhB,SAASE,KAAKC,YAAYJ,GAC1BA,EAAEzB,QACF0B,SAASE,KAAKE,YAAYL,EAAE,EAIxBM,EAAevhB,IACnB,GAA2B,GAAxB8I,EAAenJ,MAAe,OACjC,IAAIshB,EAAIC,SAASC,cAAc,KAC/BF,EAAEjP,KAAO4O,EAAmB5gB,GAC5BkhB,SAASE,KAAKC,YAAYJ,GAC1BA,EAAEzB,QACF0B,SAASE,KAAKE,YAAYL,EAAE,EAIxB7V,EAAaoW,IACU,GAAxB1Y,EAAenJ,QAClBoJ,EAAIpJ,MAAQ6hB,EACZzB,IACAlW,EAAclK,MAAQ,GACtBwgB,IAAY,EAIR9W,EAAmBA,KACvBP,EAAenJ,OAAQ,EACvBogB,IACAlW,EAAclK,MAAQ,GACtBwgB,GAAY,EAIR1W,EAAYA,KAChBX,EAAenJ,OAAQ,EACvBwgB,GAAY,EAGRxW,EAAWA,KACf,GAA2B,GAAxBb,EAAenJ,MAAe,OACjC,GAAgB,KAAboJ,EAAIpJ,MAAc,OACiB,KAAnCoJ,EAAIpJ,MAAMoJ,EAAIpJ,MAAM7D,OAAS,KAAWiN,EAAIpJ,MAAQoJ,EAAIpJ,MAAMiO,UAAU,EAAE7E,EAAIpJ,MAAM7D,OAAS,IAChG,IAAIwL,EAAQyB,EAAIpJ,MAAM+N,YAAY,MACrB,GAAVpG,IAAayB,EAAIpJ,MAAQoJ,EAAIpJ,MAAMiO,UAAU,EAAEtG,EAAQ,IAC1DyY,IACAlW,EAAclK,MAAQ,GACtB8J,GAAW,EAGPK,EAAaA,KACU,GAAxBhB,EAAenJ,QACe,GAA9BkK,EAAclK,MAAM7D,QAAe+N,EAAclK,MAAM,GAAGK,MAAQ6J,EAAclK,MAAM,GAAGsL,aAAasW,EAAY1X,EAAclK,MAAM,GAAGK,MAC3G,GAA9B6J,EAAclK,MAAM7D,QAAe+N,EAAclK,MAAM,GAAGK,OAAS6J,EAAclK,MAAM,GAAGsL,aAAa+V,EAAmBnX,EAAclK,MAAM,GAAGK,MAAK,EAGrJyhB,EAAY,QACZxV,EAAWjF,MAAO0a,EAAU5D,EAAK,CAAC,KACtC,IACE,GAA2B,GAAxBhV,EAAenJ,MAAe,OACjC,IAAIuE,EAAOwd,EAASxd,KACpB,IAAIA,EAAM,OAEV,MAAM+L,EAAW/L,EAAKlE,KAChB2hB,EAAWzd,EAAKjH,KAEhB2kB,EAAsD,GAA7CzD,SAASE,KAAKwD,KAAKF,EAAWF,IAAmB,EAAItD,SAASE,KAAKwD,KAAKF,EAAWF,IAC5FK,EAAS5d,EAAK6d,IACpB,IAAIC,EAAa,EACjB,MAAMhE,EAAOF,EAAKmE,QAAUnE,EAAKmE,QAAUlZ,EAAIpJ,MAG5CgiB,EAAW,WAAiB7D,EAAKoE,gBAClC5e,EAAAA,EAAAA,IAAU,CACRC,QAASua,EAAKqE,YAAcrE,EAAKqE,YAAc5hB,GAAKW,OAAOC,EAAE,QAC7DjE,KAAM,UACNsG,UAAU,IAKd,IAAI,IAAI4e,EAAMJ,EAAWI,GAAOR,EAAOQ,IAAS,CAE9C,IAAI1C,GAAS0C,EAAM,GAAKX,EACpB9B,EAAMD,EAAQ+B,GAAaE,EAAWA,EAAWjC,EAAQ+B,EACzDY,EAAYne,EAAKwK,MAAMgR,EAAOC,GAC9B2C,EAAW,IAAIC,SACnBD,EAASE,OAAO,OAAOH,GACvBC,EAASE,OAAO,WAAWvS,GAC3BqS,EAASE,OAAO,SAASZ,GACzBU,EAASE,OAAO,QAAQJ,GACxBE,EAASE,OAAO,YAAYb,GAC5BW,EAASE,OAAO,KAAKV,GACrBQ,EAASE,OAAO,SAASlgB,EAAM/I,QAC/B+oB,EAASE,OAAO,OAAOxE,SAEjBlE,IAAAA,KAAO,CACXF,IAAKne,EAAgB,UACrByB,KAAK,OACL4gB,KAAMwE,EACNG,aAAc,EACdC,aAAc,EACdtI,OAAAA,CAAQD,GAEU,KAAbA,EAAKwI,OACNrf,EAAAA,EAAAA,IAAU,CACRC,QAASua,EAAK7c,MAAQ6c,EAAK7c,MAAQkZ,EAAKiG,KACxCljB,KAAMid,EAAK+D,OACX1a,UAAU,IAETwa,GAAQjV,EAAIpJ,OACbgE,YAAW,KACTwc,GAAY,GACX9B,KAAK5N,IAAI,IAAM,IAAe,GAATmR,MAQP,KAAbzH,EAAKwI,MASQ,KAAbxI,EAAKwI,MASQ,KAAbxI,EAAKwI,MASQ,KAAbxI,EAAKwI,SA1BXrf,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,IAEZ4e,EAAQR,EAAS,EA6BrB,GAEJ,CACF,CAAE,MAAOjH,IACPrX,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,UACvBjE,KAAM,QACNsG,UAAU,GAEd,GAGI8F,EAAkB8N,IAEN,WAAZ9U,EAAMnJ,IAAmBie,EAAMC,UAA0B,OAAZ/U,EAAMnJ,IAA2B,OAAZmJ,EAAMnJ,KAAgBie,EAAME,UAClGxO,EAAenJ,OAAQ,EACvBgE,YAAW,KACTud,SAAS0B,cAAc,gBAAgBrC,OAAO,GAC9C,GAAE,EAIAjkB,GAAiBpH,EAAAA,EAAAA,KAAI,GAGrB2tB,GAAgB3tB,EAAAA,EAAAA,MAChB6W,EAAe/L,IACnB6iB,EAAcljB,MAAMsQ,SAAWjQ,EAC/B6iB,EAAcljB,MAAM8Z,QAAUiH,EAAiB1gB,GAC/C6iB,EAAcljB,MAAMqM,SAAU,EAC9B6W,EAAcljB,MAAMmS,WACpB+Q,EAAcljB,MAAMrD,gBAAiB,CAAI,EAGrCkQ,EAASA,CAACxM,EAAM4Z,EAAKkJ,KACzB,IAAIhC,EAAYD,EAASjH,GACzB,GAAGkH,EAAU9sB,KAAOsO,EAAM/I,OAAQ,OAElC,MAAM8gB,EAAO,IAAIC,KAAK,CAACwI,GAAc,CAAE5lB,KAAM,6BAEvCgH,EAAO,IAAI6e,KAAK,CAAC1I,GAAOra,GAC9BkE,EAAK6d,IAAM1D,KAAK2E,SAAStuB,SAAS,IAAIkZ,UAAU,GAChD3B,EAAS,CAAC/H,KAAKA,GAAO,CAAC+d,QAASnB,EAAU9C,KAAMmE,YAAY5hB,GAAKW,OAAOC,EAAE,SAASF,MAAMV,GAAKW,OAAOC,EAAE,YAAY,EAI/Gmf,GAAcprB,EAAAA,EAAAA,MACdyV,EAAkByM,IACtBA,EAAMzM,gBAAgB,EAElBE,EAAkBuM,IACtBA,EAAMzM,iBAEN,MAAMsY,EAAQ7L,EAAM8L,aAAaD,MACjC,KAAKA,GAASA,EAAMnnB,OAAS,GAAI,OACjC,IAAIqnB,EAAWpa,EAAIpJ,MACnB,IAAK,IAAI9D,EAAI,EAAGA,EAAIonB,EAAMnnB,OAAQD,IAAK,CACrC,IAAI+M,EAAOqa,EAAMpnB,GAAGunB,mBAEpB,GAAGxa,EAAKya,SAAWza,EAAKqC,YACtBrC,EAAK1E,MAAKA,IACRA,EAAK6d,IAAM1D,KAAK2E,SAAStuB,SAAS,IAAIkZ,UAAU,GAChD3B,EAAS,CAAC/H,KAAKA,GAAO,CAAC+d,QAASkB,GAAU,SAIzC,IAAIva,EAAKya,QAAUza,EAAKqC,YAAa,CACxC,MAAMqY,EAAUH,EAAWva,EAAK5I,KAChC8Z,IAAAA,KAAO,CACLF,IAAKne,EAAgB,SACrByB,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACbykB,KAAKmF,EACLva,KAAKA,EAAK5I,MAEZoa,OAAAA,CAAQD,GACY,WAAfA,EAAK+D,QACNiC,IACAoD,EAAa3a,EAAM0a,EAAU,OAG7BhgB,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,GAGhB,GAEJ,CACF,GAGI+f,EAAeA,CAACC,EAAgBL,KACpC,MAAMhf,EAASqf,EAAeC,eAC9Btf,EAAOuf,aAAaC,IAClB,IAAK,IAAI9nB,EAAI,EAAGA,EAAI8nB,EAAQ7nB,OAAQD,IAAK,CACvC,MAAM+M,EAAO+a,EAAQ9nB,GAErB,GAAG+M,EAAKya,SAAWza,EAAKqC,YACtBrC,EAAK1E,MAAKA,IACRA,EAAK6d,IAAM1D,KAAK2E,SAAStuB,SAAS,IAAIkZ,UAAU,GAChD3B,EAAS,CAAC/H,KAAKA,GAAO,CAAC+d,QAASkB,EAAUjB,eAAe,GAAM,SAI9D,IAAItZ,EAAKya,QAAUza,EAAKqC,YAAa,CACxC,MAAMqY,EAAUH,EAAWva,EAAK5I,KAChC8Z,IAAAA,KAAO,CACLF,IAAKne,EAAgB,SACrByB,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACbykB,KAAKmF,EACLva,KAAKA,EAAK5I,MAEZoa,OAAAA,CAAQD,GACY,WAAfA,EAAK+D,OACNqF,EAAa3a,EAAM0a,EAAU,MAG7BhgB,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,GAGhB,GAEJ,CACH,IACC,EAIEsI,GAAa5W,EAAAA,EAAAA,KAAI,GACjBqY,GAAYrY,EAAAA,EAAAA,KAAI,GAChByW,GAAoBzW,EAAAA,EAAAA,KAAI,GACxB0W,GAAa1W,EAAAA,EAAAA,IAAI,CAAC,GAClBsrB,GAActrB,EAAAA,EAAAA,MAEd6X,GAAmB/F,UACvB,OAAQ9J,GAEN,KAAK,EACHuM,IACA,MAEF,KAAK,EAC8B,GAA9BI,EAAclK,MAAM7D,QAAqD,GAAtC+N,EAAclK,MAAM,GAAGsL,YAAqBG,EAAUrC,EAAIpJ,MAAQkK,EAAclK,MAAM,GAAGK,KAAO,KAChG,GAA9B6J,EAAclK,MAAM7D,QAAqD,GAAtC+N,EAAclK,MAAM,GAAGsL,aAAsBc,EAAYlC,EAAclK,MAAM,GAAGK,MAC3H,MAEF,KAAK,EACH,GAAK+I,EAAIpJ,OAASoJ,EAAIpJ,MAAM7D,OAAS,EAQhC,CACH,MAAMkiB,EAAOjV,EAAIpJ,OAAuC,GAA9BkK,EAAclK,MAAM7D,OAAc+N,EAAclK,MAAM,GAAGK,KAAO,UACpF8G,EAAYkX,IAClB1a,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,kBAEtB,MAhBE5D,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,mBAatB,MAEF,KAAK,EAC8B,GAA9B2C,EAAclK,MAAM7D,QAAagO,IACpC,MAEF,KAAK,EACH8Z,GAAUjkB,MAAM2b,OAASvS,EAAIpJ,MAC7BikB,GAAUjkB,MAAMrD,gBAAiB,EACjC,MAEF,KAAK,EAC8B,GAA9BuN,EAAclK,MAAM7D,SACrB8P,EAAWjM,MAAQ,IAAIkK,EAAclK,MAAM,IAC3CgM,EAAkBhM,OAAQ,EAC1BgE,YAAW,KACTud,SAAS0B,cAAc,WAAWrC,OAAO,GACzC,IAEJ,MAEF,KAAK,EACHhT,EAAU5N,OAAQ,EAClB,MAEF,KAAK,EAC8B,GAA9BkK,EAAclK,MAAM7D,SACrB0kB,EAAY7gB,MAAM8D,QAClB+c,EAAY7gB,MAAM6b,SAAW,IAAI3R,EAAclK,MAAM,IACrD6gB,EAAY7gB,MAAM+b,QAAU3S,EAAIpJ,MAChC6gB,EAAY7gB,MAAM8b,OAAS5R,EAAclK,MAAM,GAAGK,KAC/C6J,EAAclK,MAAM,GAAGsL,YAAauV,EAAY7gB,MAAMmc,mBACpD0E,EAAY7gB,MAAMsc,cACvBuE,EAAY7gB,MAAMrD,gBAAiB,GAErC,MAEF,KAAK,EAC8B,GAA9BuN,EAAclK,MAAM7D,QAAekR,GAAUnD,EAAclK,MAAM,GAAGK,OACrE6jB,KAEF,MACF,QACE,MAEO,GAAR3mB,IACD4O,EAAWnM,OAAQ,EACnB4N,EAAU5N,OAAQ,EACpB,EAEI8K,GAAeA,KACnBqB,EAAWnM,OAAQ,EACnB4N,EAAU5N,OAAQ,CAAK,EAEnBmkB,IAAe5uB,EAAAA,EAAAA,MAEfqV,GAAqB6M,IAEH,YAAnBA,EAAM2M,OAAOhtB,KAAkB8S,EAAclK,MAAQ,IACxDmkB,GAAankB,MAAM1K,MAAM+uB,IAAM5M,EAAM6M,QAAU,IAAM,KACrDH,GAAankB,MAAM1K,MAAMivB,KAAO9M,EAAM+M,QAAU,EAAI,KACpDrY,EAAWnM,OAAQ,EACnB4N,EAAU5N,OAAQ,EAClByX,EAAMzM,gBAAgB,EAGlBkB,GAAgBjD,IAGpB,GAFA+C,EAAkBhM,OAAQ,EAEvBiJ,EAAK5I,MAAQ4L,EAAWjM,MAAMK,KAE/B,YADA4L,EAAWjM,MAAQ,CAAC,GAGtB,KAAKiM,EAAWjM,MAAMK,MAAQ4L,EAAWjM,MAAMK,KAAKkD,OAAOpH,OAAS,GAOlE,OANAwH,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,WACvBjE,KAAM,UACNsG,UAAU,SAEZoI,EAAWjM,MAAQ,CAAC,GAGtB,MAAM4b,EAAgB,OACtB,GAAGA,EAAc7U,KAAKkF,EAAWjM,MAAMK,MAOrC,OANAsD,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,WAAa,OACpCjE,KAAM,UACNsG,UAAU,SAEZoI,EAAWjM,MAAQ,CAAC,GAGtB,IAAI2e,EAAUvV,EAAIpJ,MAAQiJ,EAAK5I,KAC3Bue,EAAUxV,EAAIpJ,MAAQiM,EAAWjM,MAAMK,KAC3C4L,EAAWjM,MAAQ,CAAC,EACpBiN,GAAS0R,EAAQC,EAAQ,EAErB3R,GAAWA,CAAC0R,EAAQC,KACxBzE,IAAAA,KAAO,CACLF,IAAKne,EAAgB,UACrByB,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACb+kB,QAAQA,EACRC,QAAQA,GAEVnE,OAAAA,CAAQD,IACN7W,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,IAEZ2c,GACF,GACA,EAGEhT,GAAoBA,KACxBrB,EAAWnM,OAAQ,EACnB4N,EAAU5N,OAAQ,EACe,GAA9BkK,EAAclK,MAAM7D,QACvBge,IAAAA,KAAO,CACLF,IAAKne,EAAgB,SACrByB,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACbykB,KAAK/hB,EAAW8M,EAAIpJ,OACpBsjB,MAAMpZ,EAAclK,MAAMmW,KAAIsO,GAAKhoB,EAAWgoB,EAAEpkB,QAAOqkB,KAAK,MAE9DjK,OAAAA,CAAQD,IACN7W,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,IAEZ2c,GACF,GACA,EAEE9S,GAAmBA,KACvBE,EAAU5N,OAAQ,CAAK,EAGnBikB,IAAY1uB,EAAAA,EAAAA,MACZwX,GAAeA,CAACzM,EAAUD,EAAMsb,KACpCxB,IAAAA,KAAO,CACLF,IAAKne,GAAiBwE,EAAW,SAAW,UAC5C/C,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACbykB,KAAK/d,EAAWqb,EAASrf,EAAWqf,GACpC1S,KAAK3I,EAAWD,EAAO5D,EAAW4D,IAEpCoa,OAAAA,CAAQD,IACN7W,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,IAEZ2c,GACF,GACA,GAGJmE,EAAAA,EAAAA,IAAMvb,GAAI,KACL6a,GAAUjkB,OAAOikB,GAAUjkB,MAAMpD,cACjCgoB,GAAW5kB,OAAO4kB,GAAW5kB,MAAMpD,cACnCikB,EAAY7gB,OAAO6gB,EAAY7gB,MAAMpD,aAAa,IAIvD,MAAMioB,GAAgBld,IACpB,MAAMmd,EAAY,GACZC,EAAapd,EAAQmd,EACrBE,EAAeD,EAAaD,EAE5BG,EAAYtE,EAAY3gB,MAAMklB,aAE9BC,EAAmBxE,EAAY3gB,MAAMolB,UAExCL,EAAaI,EAAkBxE,EAAY3gB,MAAMolB,UAAYL,EACxDC,EAAeG,EAAmBF,IAAWtE,EAAY3gB,MAAMolB,UAAYJ,EAAeC,EAAS,EAIvG/E,IAAgB3qB,EAAAA,EAAAA,IAAI,CACxB8oB,KAAK,IACLhT,MAAM,KAEFQ,IAAUtW,EAAAA,EAAAA,KAAI,GACd6V,GAAsBqM,IAC1B,MAAM4N,EAAY9D,SAAS0B,cAAc,WACzC,IAAGoC,IAAaA,EAAUC,SAAS7N,EAAM2M,QAAzC,CAsBA,GArBA3M,EAAMzM,iBAEW,YAAdyM,EAAMpjB,KAAmC,cAAdojB,EAAMpjB,MAEjB,YAAdojB,EAAMpjB,OACkB,GAAtBurB,GAA2BA,EAAoBvU,EAAMrL,MAAM7D,UAAQyjB,EAAoBvU,EAAMrL,MAAM7D,QACtGyjB,IACAA,EAAoBlB,KAAK3N,IAAI,EAAE6O,IAGX,cAAdnI,EAAMpjB,MACZurB,IACAA,EAAoBlB,KAAK5N,IAAIzF,EAAMrL,MAAM7D,OAAS,EAAEyjB,IAEtDzT,EAAWnM,OAAQ,EACnB4N,EAAU5N,OAAQ,EAClBkK,EAAclK,MAAQ,GACtBkK,EAAclK,MAAMsV,KAAKjK,EAAMrL,MAAM4f,IACrCiF,GAAajF,IAGE,UAAdnI,EAAMpjB,IAAiB,CACxB,GAAG8X,EAAWnM,OAAS4N,EAAU5N,MAG/B,OAFAmM,EAAWnM,OAAQ,OACnB4N,EAAU5N,OAAQ,GAGpB,GAAiC,GAA9BkK,EAAclK,MAAM7D,OAAa,CAClC,MAAM8M,EAAOiB,EAAclK,MAAM,GAC9BiJ,EAAKqC,YAAaG,EAAUrC,EAAIpJ,MAAQiJ,EAAK5I,KAAO,KAClD+L,EAAYnD,EAAK5I,KACxB,CACF,CAEA,GAAiB,WAAZsC,EAAMnJ,IAAmBie,EAAMC,UAA0B,OAAZ/U,EAAMnJ,IAA2B,OAAZmJ,EAAMnJ,KAAgBie,EAAME,QACjG,OAAQ/U,OAAOgV,aAAaH,EAAMI,OAAO3J,eAEvC,IAAK,IACHhE,EAAclK,MAAQ,GACtB,IAAI,IAAI9D,EAAE,EAAEA,EAAEmP,EAAMrL,MAAM7D,OAAOD,IAAKgO,EAAclK,MAAMsV,KAAK,IAAIjK,EAAMrL,MAAM9D,KAC/E,MAEF,IAAK,IACAgO,EAAclK,MAAM7D,OAAS,IAC9B+jB,GAAclgB,MAAMqe,KAAOjV,EAAIpJ,MAC/BkgB,GAAclgB,MAAMqL,MAAQnB,EAAclK,MAAM+O,MAAM,GACtDlD,GAAQ7L,OAAQ,GAElB,MAEF,IAAK,IACH,GAAuC,GAApCkgB,GAAclgB,MAAMqL,MAAMlP,OAAa,OAC1CopB,GAAa1Z,GAAQ7L,MAAQ,KAAO,MACjC6L,GAAQ7L,QACT6L,GAAQ7L,OAAQ,EAChBkgB,GAAclgB,MAAQ,CACpBqe,KAAK,IACLhT,MAAM,KAGV,MAEF,IAAK,IACH6U,GAAclgB,MAAMqe,KAAOjV,EAAIpJ,MAC/BkgB,GAAclgB,MAAMqL,MAAQnB,EAAclK,MAAM+O,MAAM,GACtDlD,GAAQ7L,OAAQ,EAChB,MAnEkD,CAqExD,EAIIulB,GAAgB5wB,IACjBurB,GAAclgB,MAAMqe,MAAQjV,EAAIpJ,OACnCma,IAAAA,KAAO,CACLF,IAAKne,EAAgB,IAAMnH,EAC3B4I,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACbtD,IAAIgG,EAAW4jB,GAAclgB,MAAMqe,MACnCmH,IAAIlpB,EAAW8M,EAAIpJ,OACnBsjB,MAAOpD,GAAclgB,MAAMqL,MAAM8K,KAAIsO,GAAKhoB,EAAWgoB,EAAEpkB,QAAOqkB,KAAK,MAErEjK,OAAAA,CAAQD,GACY,WAAfA,EAAK+D,OAAqBiC,MAG3B7c,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,IAEZqc,GAAclgB,MAAQ,CACpBqe,KAAK,IACLhT,MAAM,IAGZ,GACA,EAIEf,GAAwB/M,IAEjB,GAARA,EACDgkB,SAAS0B,cAAc,0BAA0BpD,QAGnC,GAARtiB,GACNgkB,SAAS0B,cAAc,sBAAsBjjB,MAAQ,GACrDuhB,SAAS0B,cAAc,sBAAsBpD,SAG/B,GAARtiB,IACNqnB,GAAW5kB,MAAMrD,gBAAiB,EACpC,EAGI6P,GAA8BiL,IAClC,IAAI+L,EAAWpa,EAAIpJ,MACfylB,EAAmB,CAAC,EAExB,IAAI,IAAIvpB,EAAE,EAAEA,EAAEub,EAAM2M,OAAO/Y,MAAM,UAAUnP,IAAK,CAC9C,IAAIqI,EAAOkT,EAAM2M,OAAO/Y,MAAMnP,GAC1BokB,EAAW/b,EAAK,sBAChBoD,EAAQ2Y,EAASvS,YAAY,KAC7B2X,EAAWpF,EAASrS,UAAU,EAAEtG,EAAM,GACtC8d,EAAiBC,KACnBD,EAAiBC,GAAY,CAC3BrH,KAAKqH,EACLra,MAAM,KAGVoa,EAAiBC,GAAUra,MAAMiK,KAAK/Q,EACxC,CAEA,IAAIohB,EAAW,GACf,IAAI,IAAItxB,KAAOoxB,EACbE,EAASrQ,KAAKmQ,EAAiBpxB,IAEjCsxB,EAASC,MAAK,CAACtE,EAAGuE,IAAMvE,EAAEjD,KAAKliB,OAAS0pB,EAAExH,KAAKliB,SAC/C2pB,GAAkBtC,EAASmC,EAAS,EAAE,EAGlCG,GAAoBA,CAACtC,EAASmC,EAASI,KAE3C,MAAMC,EAAUL,EAASI,GACzB5L,IAAAA,KAAO,CACLF,IAAKne,EAAgB,SACrByB,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACbykB,KAAKmF,EACLva,KAAK+c,EAAQ3H,MAEf5D,OAAAA,CAAQD,GACN,GAAkB,WAAfA,EAAK+D,OAAqB,CACjB,GAAPwH,GAAUvF,IACVuF,EAAMJ,EAASxpB,OAAS,GAAG2pB,GAAkBtC,EAASmC,EAAUI,EAAI,GAEvE,IAAI,IAAI7pB,EAAE,EAAEA,EAAE8pB,EAAQ3a,MAAMlP,OAAOD,IAAK,CACtC,MAAMqI,EAAOyhB,EAAQ3a,MAAMnP,GAC3BqI,EAAK6d,IAAM1D,KAAK2E,SAAStuB,SAAS,IAAIkZ,UAAU,GAChD3B,EAAS,CAAC/H,KAAKA,GAAO,CAAC+d,QAASkB,EAAWwC,EAAQ3H,KAAMkE,eAAe,GAC1E,CACF,MAEE5e,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,WACvBjE,KAAMid,EAAK+D,OACX1a,UAAU,EACVyD,UAAWrC,OAAOsC,kBAGxB,GACA,EAIEqd,IAAarvB,EAAAA,EAAAA,MACbmX,GAAgBA,CAACuN,EAAI3J,KACzB6J,IAAAA,KAAO,CACLF,IAAKne,EAAgB,QACrByB,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACbykB,KAAK/hB,EAAW8M,EAAIpJ,OACpBiJ,KAAKxM,EAAW6T,GAChB2J,IAAIgM,UAAUhM,IAEhBQ,OAAAA,CAAQD,IACN7W,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,IAEZ2c,GACF,GACA,EAIE0D,GAAQA,KACZ/J,IAAAA,KAAO,CACLF,IAAKne,EAAgB,SACrByB,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACbykB,KAAK/hB,EAAW8M,EAAIpJ,OACpBiJ,KAAKxM,EAAWyN,EAAclK,MAAM,GAAGK,OAEzCoa,OAAAA,CAAQD,IACN7W,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,IAEZ2c,GACF,GACA,EAIErT,GAAkBA,CAACkR,EAAKpV,EAAM8U,KAClC5D,IAAAA,KAAO,CACLF,IAAKne,EAAgB,SACrByB,KAAK,OACL4gB,KAAK,CACHvkB,OAAO+I,EAAM/I,OACbykB,KAAK/hB,EAAW+hB,GAChBpV,KAAKxM,EAAWwM,GAChBid,MAAM7W,GAAc0O,GACpB3O,IAAI2O,EAAgB3O,MAAO,GAE7BqL,OAAAA,CAAQD,IACN7W,EAAAA,EAAAA,IAAU,CACRC,QAAS4W,EAAKiG,KACdljB,KAAMid,EAAK+D,OACX1a,UAAU,IAEM,WAAf2W,EAAK+D,SACHsC,EAAY7gB,OAAS6gB,EAAY7gB,MAAM6e,oBAAoBgC,EAAY7gB,MAAM6e,mBAAmBjiB,cACnG4jB,IAEJ,GACA,EAIE1c,GAAQA,CAACyX,GAAK,KACfA,IACDlP,EAAQrM,OAAQ,EAChBqL,EAAMrL,MAAQ,GACdoJ,EAAIpJ,MAAQ,GACZ4J,EAAU5J,MAAQ,GAClBmJ,EAAenJ,OAAQ,EACvBW,EAAUX,MAAQY,GAAKW,OAAOC,EAAE,QAChC6I,EAAUrK,MAAQ,EAClBkgB,GAAclgB,MAAQ,CACpBqe,KAAK,IACLhT,MAAM,IAERQ,GAAQ7L,OAAQ,GAElBkK,EAAclK,MAAQ,GACtB4f,GAAqB,EACrBzT,EAAWnM,OAAQ,EACnB4N,EAAU5N,OAAQ,EAClBgM,EAAkBhM,OAAQ,EAC1BiM,EAAWjM,MAAQ,CAAC,EACpBrD,EAAeqD,OAAQ,CAAK,EAIxBpD,GAAemH,IAChBmf,EAAcljB,OAASkjB,EAAcljB,MAAMrD,gBAAgBumB,EAAcljB,MAAMpD,cAC/EqnB,GAAUjkB,OAASikB,GAAUjkB,MAAMrD,gBAAgBsnB,GAAUjkB,MAAMpD,cACnEikB,EAAY7gB,OAAS6gB,EAAY7gB,MAAMrD,gBAAgBkkB,EAAY7gB,MAAMpD,cACzEgoB,GAAW5kB,OAAS4kB,GAAW5kB,MAAMrD,gBAAgBioB,GAAW5kB,MAAMpD,cACzEoH,YAAW,KACTF,IAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAIXoiB,GAAkBA,KACnBjD,EAAcljB,OAAOkjB,EAAcljB,MAAMpD,cACzCqnB,GAAUjkB,OAAOikB,GAAUjkB,MAAMpD,cACjCikB,EAAY7gB,OAAO6gB,EAAY7gB,MAAMpD,cACrCgoB,GAAW5kB,OAAO4kB,GAAW5kB,MAAMpD,cACtCoH,YAAW,KACTF,IAAM,EAAK,GACX,KACFnH,EAAeqD,OAAQ,CAAK,EA0B9B,OAvBA4F,EAAAA,EAAAA,KAAU,KACR2b,SAAStI,iBAAiB,aAAcxB,IAKtC,GAJGkJ,EAAY3gB,OAAS2gB,EAAY3gB,MAAMslB,SAAS7N,EAAM2M,UACvDzD,EAAY3gB,MAAMmL,SAAW,IAC7BwV,EAAY3gB,MAAM4gB,SAEhBuD,GAAankB,OAASmkB,GAAankB,MAAMslB,SAAS7N,EAAM2M,QAAS,OACrE,MAAMgC,EAAa7E,SAAS0B,cAAc,eACtCmD,GAAcA,EAAWd,SAAS7N,EAAM2M,UAC5CjY,EAAWnM,OAAQ,EACnB4N,EAAU5N,OAAQ,EAAK,GACvB,KAGJkZ,EAAAA,EAAAA,KAAY,KACPyH,EAAY3gB,QACb2gB,EAAY3gB,MAAMmZ,oBAAoB,WAAYnO,GAClD2V,EAAY3gB,MAAMmZ,oBAAoB,OAAQjO,GAC9CyV,EAAY3gB,MAAMmZ,oBAAoB,SAAUrO,IAChD6V,EAAY3gB,MAAMmZ,oBAAoB,UAAW/N,IACnD,IAGK,CACLzO,iBACAwM,iBACAC,MACAiC,QACA0H,aACAyN,aACAa,qBACAO,cACAnW,YACA/B,mBACA/I,YACAmJ,YACAE,WACAG,aACAmC,WACApC,gBACAmC,UACA6W,gBACA9W,cACAS,SACA8T,cACAvT,oBACAjB,aACAnB,iBACAE,iBACAJ,gBACAF,qBACAoB,oBACAE,gBACAD,aACAkY,gBACAxa,iBACAiE,YACAJ,qBACAE,oBACAuW,aACAlX,gBACAE,YACA4T,cACA+C,eACAvZ,YACAe,sBACA8U,iBACA1U,gBACAD,aACAK,cACAC,WACA0Z,gBACAjb,wBACAkC,8BACAoY,cACAlY,iBACA5I,SACAlH,eACAupB,mBACA9Y,UAAS,GACT6W,SACA/W,mBACAvD,YACAC,mBAEJ,GoBhyCF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,yECGIxU,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAExBF,MAAM,W,YACTC,EAAAA,EAAAA,GAAsD,OAAjDD,MAAM,+BAA+B,UAAM,K,YAChDC,EAAAA,EAAAA,GAA4F,OAAvFD,MAAM,mBAAmBE,MAAA,qDAAuD,KAAC,K,YAMtFD,EAAAA,EAAAA,GAA6B,OAAxBC,MAAA,YAAgB,W,IAclBF,MAAM,W,IACJA,MAAM,8BAA8BE,MAAA,wB,YAMzCD,EAAAA,EAAAA,GAA6B,OAAxBC,MAAA,YAAgB,W,YAOvBD,EAAAA,EAAAA,GAA8B,OAAzBD,MAAM,aAAW,W,IACjBA,MAAM,UAAUE,MAAA,kB,YACnBD,EAAAA,EAAAA,GAA4C,OAAvCD,MAAM,oBAAmB,YAAQ,K,YACtCC,EAAAA,EAAAA,GAA6B,OAAxBC,MAAA,YAAgB,W,IAiBlB,uBAAqB,aAAiCA,MAAA,gD,IAIxDA,MAAA,kB,YACHD,EAAAA,EAAAA,GAA4B,OAAvBC,MAAA,YAAgB,W,qZA1EzBJ,EAAAA,EAAAA,IA+EYwH,EAAA,C,WA9ED7G,EAAA8G,e,qCAAA9G,EAAA8G,eAAc/G,GACtB,eAAcC,EAAA+G,YACf,sBACCvF,MAAO,IACPwF,MAAO7G,EAAAC,GAAG,YACV6G,OAAO,EACR,cAAY,kBACZ,kBACAC,UAAA,I,mBAEA,IAAsC,CAAtCvH,IACAH,EAAAA,EAAAA,GA4DM,aA3DJA,EAAAA,EAAAA,GAqBM,MArBNI,GAqBM,CApBJU,GACAiH,IACAnG,EAAAA,EAAAA,IAIWC,EAAA,CAJDoG,KAAK,QAAShI,MAAO,CAAA+B,MAAA,S,WAA2BxB,EAAAwwB,cAAchmB,K,qCAAdxK,EAAAwwB,cAAchmB,KAAIzK,GAAER,MAAM,WAAY2I,YAAa/H,EAAAC,GAAG,WAAY0B,UAAU,IAAI2uB,UAAU,K,CACvItoB,QAAM/F,EAAAA,EAAAA,KACf,IAAoC,EAApChB,EAAAA,EAAAA,IAAoCiB,EAAA,M,kBAA3B,IAAiB,EAAjBjB,EAAAA,EAAAA,IAAiBsvB,M,8CAG9B9vB,IACApB,EAAAA,EAAAA,GAWM,aAVJ4B,EAAAA,EAAAA,IASYgN,EAAA,CART,kBAAgB,EAChB,oBAAkB,EAClB,eAAcpO,EAAA2wB,aACdriB,UAAU,G,mBAEX,IAEY,EAFZlN,EAAAA,EAAAA,IAEYoG,EAAA,CAFDC,KAAK,QAAQC,KAAK,W,mBAC3B,IAAmD,EAAnDtG,EAAAA,EAAAA,IAAmDiB,EAAA,CAA1C9C,MAAM,iBAAe,C,kBAAC,IAAU,EAAV6B,EAAAA,EAAAA,IAAUyT,M,eAAU,KAAC3U,EAAAA,EAAAA,IAAGC,EAAAC,GAAG,OAAD,M,uCAKjEZ,EAAAA,EAAAA,GAaM,MAbNqB,GAaM,EAZJrB,EAAAA,EAAAA,GAA4G,MAA5GyB,IAA4Gf,EAAAA,EAAAA,IAApCC,EAAAC,GAAG,UAA0B,IAAC,IACtGgB,EAAAA,EAAAA,IAIWC,EAAA,CAJDoG,KAAK,QAAShI,MAAO,CAAA+B,MAAA,S,WAA2BxB,EAAAwwB,cAActU,K,qCAAdlc,EAAAwwB,cAActU,KAAInc,GAAER,MAAM,WAAY2I,YAAa/H,EAAAC,GAAG,c,CACnG+H,QAAM/F,EAAAA,EAAAA,KACf,IAA8B,EAA9BhB,EAAAA,EAAAA,IAA8BiB,EAAA,M,kBAArB,IAAW,EAAXjB,EAAAA,EAAAA,IAAWwvB,M,8CAGxB1vB,IACA1B,EAAAA,EAAAA,GAIM,aAHJ4B,EAAAA,EAAAA,IAEYoG,EAAA,CAFDC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAoE,c,mBAC7C,IAAqD,EAArDhD,EAAAA,EAAAA,IAAqDiB,EAAA,CAA5C9C,MAAM,iBAAe,C,kBAAC,IAAY,EAAZ6B,EAAAA,EAAAA,IAAYmT,M,eAAU,KAACrU,EAAAA,EAAAA,IAAGC,EAAAC,GAAG,OAAD,M,wBAIjEe,IACA3B,EAAAA,EAAAA,GAkBM,MAlBNuC,GAkBM,CAjBJS,GACAC,IACAjD,EAAAA,EAAAA,GAIM,OAJAK,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAA6wB,YAAY,IAAIpxB,MAAA,4D,EAC3B2B,EAAAA,EAAAA,IAEa4N,EAAA,CAFA5H,QAASjH,EAAAC,GAAG,QAAS6B,UAAU,O,mBAC1C,IAA8B,EAA9Bb,EAAAA,EAAAA,IAA8BiB,EAAA,M,kBAArB,IAAW,EAAXjB,EAAAA,EAAAA,IAAW8S,M,gCAGxB1U,EAAAA,EAAAA,GAIM,OAJAK,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAA6wB,YAAY,IAAIpxB,MAAA,4D,EAC3B2B,EAAAA,EAAAA,IAEa4N,EAAA,CAFA5H,QAASjH,EAAAC,GAAG,MAAO6B,UAAU,O,mBACxC,IAAqC,EAArCb,EAAAA,EAAAA,IAAqCiB,EAAA,M,kBAA5B,IAAkB,EAAlBjB,EAAAA,EAAAA,IAAkB0vB,M,gCAG/BtxB,EAAAA,EAAAA,GAIM,OAJAK,QAAKC,EAAA,KAAAA,EAAA,GAAAC,GAAEC,EAAA6wB,YAAY,IAAIpxB,MAAA,4D,EAC3B2B,EAAAA,EAAAA,IAEa4N,EAAA,CAFA5H,QAASjH,EAAAC,GAAG,MAAO6B,UAAU,O,mBACxC,IAA+B,EAA/Bb,EAAAA,EAAAA,IAA+BiB,EAAA,M,kBAAtB,IAAY,EAAZjB,EAAAA,EAAAA,IAAY0G,M,uDAI3B9G,EAAAA,EAAAA,IAEM,MAFN0B,GAEM,EADJtB,EAAAA,EAAAA,IAA0Eia,EAAA,CAA/D3b,IAAI,qBAAsB8b,aAAYxb,EAAAyb,Y,gCADDzb,EAAAwW,cAIpDhX,EAAAA,EAAAA,GAKM,MALNmD,GAKM,CAJJC,IACAxB,EAAAA,EAAAA,IAEYoG,EAAA,CAFDC,KAAK,QAAQC,KAAK,UAAW7H,QAAOG,EAAAqJ,QAAS5J,MAAA,+C,mBACtD,IAAc,mBAAXU,EAAAC,GAAG,OAAD,M,uEAab,QACEoK,KAAM,YACNqC,WAAY,CACVmX,UAAS,GACT+M,cAAa,OACbC,QAAO,OACPrH,OAAM,OACND,SAAQ,OACRtB,QAAO,OACPvX,SAAQ,OACRogB,eAAcA,GAAAA,KAEhB9jB,KAAAA,CAAML,EAAMW,GAGV,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GACrB8W,GAAU9W,EAAAA,EAAAA,KAAI,GAEdwxB,EAAoB,ybAYpBC,GAAqBzxB,EAAAA,EAAAA,MACrB8wB,GAAgB9wB,EAAAA,EAAAA,IAAI,CACxB8K,KAAK,GACL0R,KAAK,KAIDT,EAAcmF,IAClBxC,aAAaH,QAAQ,cAAe2C,IACpC9S,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,kBAClB,EAEEiP,EAAYC,IAChBuQ,EAAmBhnB,MAAMwW,SAASC,GAClCuQ,EAAmBhnB,MAAM6W,cAAc,EAEnC1E,EAAWA,KAEf6U,EAAmBhnB,MAAMgX,YAAY,SAElC/C,aAAaL,QAAQ,iBACtBoT,EAAmBhnB,MAAMwW,SAASvC,aAAaL,QAAQ,gBACvDoT,EAAmBhnB,MAAM6W,eAC3B,EAGIoQ,EAAkBjrB,IACtB,MAAMkrB,EAAQ,iBACd,OAAOA,EAAMngB,KAAK/K,EAAI,EAIlBwqB,EAAgBrI,IACpB,IAAI5Z,EAAO4Z,EAAK5Z,KAChB,MAAM4iB,EAAa,IAAI1iB,WACvB0iB,EAAWziB,OAAS,KAClB,IACE,MAAMtK,EAASyZ,KAAKrf,MAAM2yB,EAAWlrB,QACrC,IAAIkiB,EAAO,CAAC,EAERiJ,EAAO,EACPC,EAAO,EACX,IAAK,MAAMhzB,KAAO+F,EACb/F,GAAOA,EAAI8H,QAAU,GAAK9H,EAAI8H,QAAU,IAAgB,KAAV9H,EAAI,IAAuB,KAAVA,EAAI,KAAc4yB,EAAe5yB,IACjG8pB,EAAK9pB,EAAIizB,eAAiB,CACxBvV,KAAM3X,EAAO/F,GAAK0d,MAAQ,GAC1BwV,SAAWntB,EAAO/F,GAAKkzB,UAAY,GACnChJ,OAAQ,cAEV6I,OAGAzjB,EAAAA,EAAAA,IAAU,CACRC,QAAS,SAAWvP,EAAMuM,GAAKW,OAAOC,EAAE,SACxCjE,KAAM,QACNsG,UAAU,IAEZwjB,KAIO,GAARA,GACD/jB,EAAQE,KAAK,eAAgB2a,IAC7Bxa,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,IAEZjH,KAGc,GAARwqB,GACNzjB,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,iBACvBjE,KAAM,QACNsG,UAAU,KAKZP,EAAQE,KAAK,eAAgB2a,IAC7Bxa,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,SAAW4lB,EAAOxmB,GAAKW,OAAOC,EAAE,KAAOZ,GAAKW,OAAOC,EAAE,UAAY6lB,EAAOzmB,GAAKW,OAAOC,EAAE,KAC7GjE,KAAM,UACNsG,UAAU,IAGhB,CAAE,MAAMmX,IACNrX,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,iBACvBjE,KAAM,QACNsG,UAAU,GAEd,CAAE,QACAwI,EAAQrM,OAAQ,CAClB,GAEFmnB,EAAWxiB,QAAU,MACnBhB,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,eACvBjE,KAAM,QACNsG,UAAU,IAEZwI,EAAQrM,OAAQ,CAAK,EAEvBqM,EAAQrM,OAAQ,EAChBmnB,EAAWviB,WAAWL,EAAK,EAEvBtK,EAAeA,KACnBqJ,EAAQE,KAAK,iBACbG,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,GACV,EAIE6iB,EAAenpB,IACnB,OAAOA,GACL,KAAK,EAEH0W,aAAaG,WAAW,eACxBoC,EAASuQ,GACT,MACF,KAAK,EAEH9S,aAAaG,WAAW,eACxBoC,EAAS,IACT,MACF,KAAK,EAEHlF,EAAW0V,EAAmBhnB,MAAM4W,YACpC,MACJ,EAII1X,EAAUA,KACd,KAAKmnB,EAAcrmB,MAAMK,MAAQgmB,EAAcrmB,MAAMK,KAAKlE,QAAU,GAAKkqB,EAAcrmB,MAAMK,KAAKlE,QAAU,GAO1G,YANAwH,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,aACvBjE,KAAM,QACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,mBAItB,IAAI0f,EAAeZ,EAAcrmB,MAAMK,MAOrC,YANAsD,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,mBACvBjE,KAAM,QACNsG,UAAU,EACVyD,UAAWrC,OAAOsC,mBAItB,IAAI4W,EAAO,CAAC,EACZA,EAAK,IAAMkI,EAAcrmB,MAAMK,KAAKinB,eAAiB,CACnDvV,KAAMsU,EAAcrmB,MAAM+R,KAC1BwV,SAAUP,EAAmBhnB,MAAM4W,WACnC2H,OAAQ,cAEVjb,EAAQE,KAAK,eAAgB2a,IAC7Bxa,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,IAEZoQ,aAAaG,WAAW,eACxBxX,GAAa,EAITkH,EAAQA,KACTkjB,EAAmBhnB,OAAOgnB,EAAmBhnB,MAAM8D,QACtDuI,EAAQrM,OAAQ,EAChBqmB,EAAcrmB,MAAMK,KAAO,GAC3BgmB,EAAcrmB,MAAM+R,KAAO,GAC3BpV,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IACnBC,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACLpH,iBACAuC,UACAtC,cACAkH,QACAkjB,qBACA1V,aACAa,WACA9F,UACAga,gBACAG,eACAvsB,eACAuc,WACAkQ,cAEJ,GCnUF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,yECEIrxB,EAAAA,EAAAA,GAAsC,OAAjCC,MAAA,wBAA0B,W,IAC1BF,MAAM,a,IAGIE,MAAA,sC,YACkBD,EAAAA,EAAAA,GAAkD,QAA5CC,MAAA,gCAAoC,KAAC,K,YAC9DD,EAAAA,EAAAA,GAA8B,OAAzBD,MAAM,aAAW,W,IAEfA,MAAM,qBAAqBE,MAAA,uB,IACzBA,MAAA,gC,IACAA,MAAA,wB,IAMRA,MAAA,sC,YACkBD,EAAAA,EAAAA,GAAkD,QAA5CC,MAAA,gCAAoC,KAAC,K,YAC9DD,EAAAA,EAAAA,GAA8B,OAAzBD,MAAM,aAAW,W,IAEfA,MAAM,qBAAqBE,MAAA,uB,IACzBA,MAAA,gC,IACAA,MAAA,wB,IAMRA,MAAA,sC,IAGMF,MAAM,UAAUE,MAAA,8C,IAEdA,MAAA,sB,IACAA,MAAA,yC,YAKLD,EAAAA,EAAAA,GAA6B,OAAxBC,MAAA,YAAgB,W,YAqBrBD,EAAAA,EAAAA,GAAuC,OAAlCC,MAAA,wBAA0B,W,IAE5BA,MAAA,+B,YAKcD,EAAAA,EAAAA,GAAkD,QAA5CC,MAAA,gCAAoC,KAAC,K,YAC9DD,EAAAA,EAAAA,GAA8B,OAAzBD,MAAM,aAAW,W,IAEfA,MAAM,qBAAqBE,MAAA,uB,IACzBF,MAAM,UAAUE,MAAA,gB,IACdA,MAAA,gC,YACLD,EAAAA,EAAAA,GAA6B,OAAxBC,MAAA,YAAgB,W,IAElBF,MAAM,WAAWE,MAAA,wB,YACtBD,EAAAA,EAAAA,GAA6B,OAAxBC,MAAA,YAAgB,W,IAChBA,MAAA,yC,2BAWQD,EAAAA,EAAAA,GAAkD,QAA5CC,MAAA,gCAAoC,KAAC,K,YAC9DD,EAAAA,EAAAA,GAA8B,OAAzBD,MAAM,aAAW,W,YAGlBC,EAAAA,EAAAA,GAAqC,OAAhCC,MAAA,uBAAyB,W,kXAtGlDJ,EAAAA,EAAAA,IA8GYwH,EAAA,C,WA7GD7G,EAAA8G,e,qCAAA9G,EAAA8G,eAAc/G,GACvB,sBACCyB,MAAO,IACPwF,MAAO7G,EAAAC,GAAG,MACV6G,OAAO,EACR,cAAY,kBACX,eAAcjH,EAAA+G,YACfG,UAAA,I,mBAEA,IAAsC,CAAtCvH,IACAH,EAAAA,EAAAA,GAkGM,MAlGNI,GAkGM,EAjGFwB,EAAAA,EAAAA,IAgGUuwB,EAAA,CAhGDjqB,KAAK,eAAa,C,kBACvB,IAWc,EAXdtG,EAAAA,EAAAA,IAWcwwB,EAAA,CAXA9e,MAAO3S,EAAAC,GAAG,Y,mBACtB,IASM,EATNZ,EAAAA,EAAAA,GASM,MATNc,GASM,EARFd,EAAAA,EAAAA,GAAqG,8BAA7FW,EAAAC,GAAG,MAAO,IAAC,GAAAmH,IAAkD,aAACrH,EAAAA,EAAAA,IAAGC,EAAAC,GAAG,kBAAD,KAC3EQ,KAA8B,aAC9BI,EAAAA,EAAAA,IAKMiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IALqBlK,EAAAic,WAAS,CAAvB7I,EAAM5U,M,WAAnBwC,EAAAA,EAAAA,IAKM,OALiCxC,IAAKA,GAAG,EAC7CgB,EAAAA,EAAAA,GAGM,MAHNqB,GAGM,EAFJrB,EAAAA,EAAAA,GAAwD,MAAxDyB,IAAwDf,EAAAA,EAAAA,IAAZ1B,GAAG,IAC/CgB,EAAAA,EAAAA,GAAsD,MAAtD0B,IAAsDhB,EAAAA,EAAAA,IAAlBkT,EAAK8I,MAAI,U,8BAKvD9a,EAAAA,EAAAA,IAWcwwB,EAAA,CAXA9e,MAAO3S,EAAAC,GAAG,Y,mBACtB,IASM,EATNZ,EAAAA,EAAAA,GASM,MATN2B,GASM,EARF3B,EAAAA,EAAAA,GAAqG,8BAA7FW,EAAAC,GAAG,MAAO,IAAC,GAAA2B,IAAkD,aAAC7B,EAAAA,EAAAA,IAAGC,EAAAC,GAAG,kBAAD,KAC3EoC,KAA8B,aAC9BxB,EAAAA,EAAAA,IAKMiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IALqBlK,EAAA8c,UAAQ,CAAtB1J,EAAM5U,M,WAAnBwC,EAAAA,EAAAA,IAKM,OALgCxC,IAAKA,GAAG,EAC5CgB,EAAAA,EAAAA,GAGM,MAHNiD,GAGM,EAFJjD,EAAAA,EAAAA,GAAwD,MAAxDkD,IAAwDxC,EAAAA,EAAAA,IAAZ1B,GAAG,IAC/CgB,EAAAA,EAAAA,GAAsD,MAAtDmD,IAAsDzC,EAAAA,EAAAA,IAAlBkT,EAAK8I,MAAI,U,8BAKvD9a,EAAAA,EAAAA,IAsEcwwB,EAAA,CAtEA9e,MAAO3S,EAAAC,GAAG,Y,mBACtB,IAoEM,EApENZ,EAAAA,EAAAA,GAoEM,MApENoD,GAoEM,CAnEY5C,EAAAsE,YAAcyF,OAAOC,KAAKhK,EAAAsE,YAAYgC,OAAS,IAAH,WAA5DtF,EAAAA,EAAAA,IAyDWiJ,EAAAA,GAAA,CAAAzL,IAAA,IAxDOwB,EAAA6xB,UAAY7xB,EAAA6xB,SAASvrB,QAAU,GAAKtG,EAAA6xB,SAASvrB,QAAU,IAAJ,WAAnEtF,EAAAA,EAAAA,IAmCWiJ,EAAAA,GAAA,CAAAzL,IAAA,KAlCTgB,EAAAA,EAAAA,GA8BM,MA9BNqD,GA8BM,EA7BJrD,EAAAA,EAAAA,GAA8H,OAAxHK,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAA8xB,YAAA9xB,EAAA8xB,cAAAvxB,IAAYd,MAAA,6D,EAA+D2B,EAAAA,EAAAA,IAAgCiB,EAAA,M,kBAAvB,IAAa,EAAbjB,EAAAA,EAAAA,IAAa2wB,M,SAC9GvyB,EAAAA,EAAAA,GAAiE,MAAjEsD,IAAiE5C,EAAAA,EAAAA,IAA9BF,EAAA0a,UAAY1a,EAAA6xB,UAAQ,IACvDryB,EAAAA,EAAAA,GAIM,MAJNuD,GAIM,EAHJ3B,EAAAA,EAAAA,IAEa4N,EAAA,CAFA5H,QAASpH,EAAA6f,gBAAgB7f,EAAAsE,WAAWtE,EAAA6xB,UAAUnJ,QAASzmB,UAAU,O,mBAC5E,IAA8F,EAA9Fb,EAAAA,EAAAA,IAA8F4wB,EAAA,CAAhFvyB,MAAO,CAAAiC,SAAA,QAAqBgnB,OAAQ1oB,EAAAsE,WAAWtE,EAAA6xB,UAAUnJ,Q,4CAG3E1lB,GAC0C,GAARhD,EAAAlB,OAAI,WAAtCkC,EAAAA,EAAAA,IAIM,O,MAJAnB,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAiyB,eAAAjyB,EAAAiyB,iBAAA1xB,IAAoCd,MAAA,gF,EAC/C2B,EAAAA,EAAAA,IAEa4N,EAAA,CAFA5H,QAASjH,EAAAC,GAAG,MAAO6B,UAAU,O,mBACxC,IAA2B,EAA3Bb,EAAAA,EAAAA,IAA2BiB,EAAA,M,kBAAlB,IAAQ,EAARjB,EAAAA,EAAAA,IAAQ4G,M,gDAG0B,GAARhI,EAAAlB,OAAI,WAA3CkC,EAAAA,EAAAA,IAIM,O,MAJAnB,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAkyB,oBAAAlyB,EAAAkyB,sBAAA3xB,IAAyCd,MAAA,gF,EACpD2B,EAAAA,EAAAA,IAEa4N,EAAA,CAFA5H,QAASjH,EAAAC,GAAG,MAAO6B,UAAU,O,mBACxC,IAA6B,EAA7Bb,EAAAA,EAAAA,IAA6BiB,EAAA,M,kBAApB,IAAU,EAAVjB,EAAAA,EAAAA,IAAU+wB,M,gDAGgB,GAARnyB,EAAAlB,OAAI,WAAnCkC,EAAAA,EAAAA,IAIM,O,MAJAnB,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAoyB,YAAApyB,EAAAoyB,cAAA7xB,IAAgCd,MAAA,gF,EAC3C2B,EAAAA,EAAAA,IAEa4N,EAAA,CAFA5H,QAASjH,EAAAC,GAAG,MAAO6B,UAAU,O,mBACxC,IAA2B,EAA3Bb,EAAAA,EAAAA,IAA2BiB,EAAA,M,kBAAlB,IAAQ,EAARjB,EAAAA,EAAAA,IAAQ4H,M,gDAGmB,GAARhJ,EAAAlB,OAAI,WAApCkC,EAAAA,EAAAA,IAIM,O,MAJAnB,QAAKC,EAAA,KAAAA,EAAA,OAAAS,IAAEP,EAAAqyB,aAAAryB,EAAAqyB,eAAA9xB,IAAiCd,MAAA,gF,EAC5C2B,EAAAA,EAAAA,IAEa4N,EAAA,CAFA5H,QAASjH,EAAAC,GAAG,QAAS6B,UAAU,O,mBAC1C,IAA+B,EAA/Bb,EAAAA,EAAAA,IAA+BiB,EAAA,M,kBAAtB,IAAY,EAAZjB,EAAAA,EAAAA,IAAY0G,M,gDAGzBmK,MAEFzS,EAAAA,EAAAA,GAEM,MAFN0S,GAEM,EADJ9Q,EAAAA,EAAAA,IAAwGia,EAAA,CAA7F3b,IAAI,qBAAsB4b,eAActb,EAAAub,aAAeC,aAAYxb,EAAAqyB,a,+DAGlFrxB,EAAAA,EAAAA,IAmBWiJ,EAAAA,GAAA,CAAAzL,IAAA,KAlBTgB,EAAAA,EAAAA,GAAqH,8BAA7GW,EAAAC,GAAG,MAAO,IAAC,GAAA+R,IAAkD,aAACjS,EAAAA,EAAAA,IAAGC,EAAAC,GAAG,kCAAD,KAC3EiS,KAA8B,aAC9BrR,EAAAA,EAAAA,IAeMiJ,EAAAA,GAAA,MAAAC,EAAAA,EAAAA,IAfqBlK,EAAAsE,YAAU,CAAxB8O,EAAM5U,M,WAAnBwC,EAAAA,EAAAA,IAeM,OAfkCxC,IAAKA,GAAG,EAC9CgB,EAAAA,EAAAA,GAaM,MAbN8S,GAaM,EAZJ9S,EAAAA,EAAAA,GAGM,MAHN+S,GAGM,EAFJ/S,EAAAA,EAAAA,GAAwD,MAAxDgT,IAAwDtS,EAAAA,EAAAA,IAAZ1B,GAAG,GAC/CiU,MAEFjT,EAAAA,EAAAA,GAAuE,MAAvEkT,IAAuExS,EAAAA,EAAAA,IAAlBkT,EAAK8I,MAAI,GAC9DvJ,IACAnT,EAAAA,EAAAA,GAIM,MAJNoT,GAIM,EAHJxR,EAAAA,EAAAA,IAEa4N,EAAA,CAFA5H,QAASpH,EAAA6f,gBAAgBzM,EAAKsV,QAASzmB,UAAU,O,mBAC5D,IAA8E,EAA9Eb,EAAAA,EAAAA,IAA8E4wB,EAAA,CAAhEvyB,MAAO,CAAAiC,SAAA,QAAqBgnB,OAAQtV,EAAKsV,Q,gDAG3DlpB,EAAAA,EAAAA,GAAmI,OAA7HK,QAAKE,GAAEC,EAAAsyB,WAAW9zB,GAAMiB,MAAA,4D,EAA8D2B,EAAAA,EAAAA,IAAiCiB,EAAA,M,kBAAxB,IAAc,EAAdjB,EAAAA,EAAAA,IAAcmxB,M,mDAK3HvxB,EAAAA,EAAAA,IAQWiJ,EAAAA,GAAA,CAAAzL,IAAA,KAPTgB,EAAAA,EAAAA,GAAqH,8BAA7GW,EAAAC,GAAG,MAAO,IAAC,GAAA6S,IAAkD,aAAC/S,EAAAA,EAAAA,IAAGC,EAAAC,GAAG,kCAAD,KAC3E8S,IACA9R,EAAAA,EAAAA,IAISwJ,EAAA,CAJDnJ,OAAO,SAAO,CACT+wB,QAAMpwB,EAAAA,EAAAA,KACf,IAAqC,CAArC+Q,M,4QCtGM,GAAfnT,EAAAyyB,aAAU,WAArBzxB,EAAAA,EAAAA,IAAiG,O,MAAnEvB,OAAK+M,EAAAA,EAAAA,IAAExM,EAAA0yB,c,EAActxB,EAAAA,EAAAA,IAAwCiB,EAAA,M,kBAA/B,IAAqB,EAArBjB,EAAAA,EAAAA,IAAqBuxB,M,YAClD,GAAf3yB,EAAAyyB,aAAU,WAA1BzxB,EAAAA,EAAAA,IAAkG,O,MAA/DvB,OAAK+M,EAAAA,EAAAA,IAAExM,EAAA0yB,c,EAActxB,EAAAA,EAAAA,IAAoCiB,EAAA,M,kBAA3B,IAAiB,EAAjBjB,EAAAA,EAAAA,IAAiBwxB,M,WACpD,GAAd5yB,EAAAyyB,aAAU,WAA1BzxB,EAAAA,EAAAA,IAAiG,O,MAA/DvB,OAAK+M,EAAAA,EAAAA,IAAExM,EAAA0yB,c,EAActxB,EAAAA,EAAAA,IAAoCiB,EAAA,M,kBAA3B,IAAiB,EAAjBjB,EAAAA,EAAAA,IAAiByxB,M,wBACjF7xB,EAAAA,EAAAA,IAAyE,O,MAA5DvB,OAAK+M,EAAAA,EAAAA,IAAExM,EAAA0yB,c,EAActxB,EAAAA,EAAAA,IAAiCiB,EAAA,M,kBAAxB,IAAc,EAAdjB,EAAAA,EAAAA,IAAc0xB,M,WAQ3D,QACEtoB,KAAM,cACNqC,WAAY,CACVkmB,cAAa,OACbC,cAAa,OACbC,kBAAiB,OACjBC,WAAUA,GAAAA,KAEZpmB,MAAO,CACL4b,OAAQ,CACNhhB,KAAMqF,OACNE,QAAS,WAEXxN,MAAO,CACLiI,KAAMqC,OACNkD,QAAUA,SAGdE,KAAAA,CAAML,GAEJ,MAAMqmB,EAAgB,CACpB,iBAAkB,EAClB,qBAAsB,EACtB,aAAc,EACd,kBAAmB,GAGfC,EAAc,CAAC,UAAU,UAAU,UAAU,WAE7CX,GAAarlB,EAAAA,EAAAA,KAAS,IACnB+lB,EAAcrmB,EAAM4b,SAAW,IAGlCgK,GAActlB,EAAAA,EAAAA,KAAS,KACpB,CACL1L,SAAU,UACPoL,EAAMrN,MACT6C,MAAO8wB,GAAaD,EAAcrmB,EAAM4b,SAAW,GAAK,OAI5D,MAAO,CACLgK,cACAD,aAEJ,GCpDF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,UFuHA,IACEjoB,KAAK,YACLqC,WAAY,CACVU,OAAM,GACN8lB,YAAW,GACXrP,UAAS,GACTsP,WAAU,OACVC,UAAS,OACT3iB,KAAI,OACJF,KAAI,OACJG,SAAQ,OACR2iB,OAAMA,GAAAA,KAERrmB,KAAAA,CAAML,EAAOW,GAGX,MAAM3G,GAAiBpH,EAAAA,EAAAA,KAAI,GACrBgb,GAAYhb,EAAAA,EAAAA,IAAI,IAEhB4E,GAAa5E,EAAAA,EAAAA,IAAI,CAAC,GAClBmyB,GAAWnyB,EAAAA,EAAAA,IAAI,IACfZ,GAAOY,EAAAA,EAAAA,KAAI,GAEX4yB,EAAchxB,IAClBuwB,EAAS1nB,MAAQ7I,EACjBxC,EAAKqL,OAAQ,EACbgE,YAAW,KACTslB,GAAgB,EAAK,GACrB,EAAE,EAGA3B,EAAaA,KACjBhzB,EAAKqL,OAAQ,EACb0nB,EAAS1nB,MAAQ,GACjBuQ,EAAUvQ,MAAQ,EAAE,EAIhBgnB,GAAqBzxB,EAAAA,EAAAA,MACrB+zB,EAAmB30B,IACvBqyB,EAAmBhnB,MAAMgX,YAAY,SACrCgQ,EAAmBhnB,MAAMwW,SAAS3C,KAAKrf,MAAMQ,EAAQif,aAAaL,QAAQ,YAAY8T,EAAS1nB,OAAOunB,UAAY,IAClHP,EAAmBhnB,MAAM6W,eACzBmQ,EAAmBhnB,MAAMiX,YAAYtiB,GACrC4b,EAAUvQ,MAAQ,EAAE,EAIhB8nB,EAAgBA,KACpBnzB,EAAKqL,OAAQ,EACbspB,GAAgB,EAAM,EAGlBrB,EAAaA,KACjBtzB,EAAKqL,OAAQ,EACbspB,GAAgB,EAAK,EAIjBpB,EAAcA,KACI,KAAnB3X,EAAUvQ,QACbsD,EAAQE,KAAK,kBAAmBkkB,EAAS1nB,MAAOgnB,EAAmBhnB,MAAM4W,YACzEqR,KACAtkB,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,IAEZ0M,EAAUvQ,MAAQ,GAAE,EAIhB+nB,EAAqBA,KACzB5mB,GAAaP,GAAKW,OAAOC,EAAE,MAAOZ,GAAKW,OAAOC,EAAE,gBAAiB+nB,EAAc,EAE3EA,EAAgBA,KACpBjmB,EAAQE,KAAK,oBAAqBkkB,EAAS1nB,QAC3C2D,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,QACvBjE,KAAM,UACNsG,UAAU,IAEZ8jB,GAAY,EAGRvW,EAAeA,KACnBb,EAAUvQ,MAAQ,GAAG,EAIjB8D,EAAQA,KACTkjB,EAAmBhnB,OAAOgnB,EAAmBhnB,MAAM8D,QACtDnP,EAAKqL,OAAQ,EACb0nB,EAAS1nB,MAAQ,GACjBuQ,EAAUvQ,MAAQ,GAClBrD,EAAeqD,OAAQ,CAAK,EAIxBpD,EAAemH,IACnBC,YAAW,KACTF,GAAO,GACP,KACFnH,EAAeqD,OAAQ,EACpB+D,GAAMA,GAAM,EAGjB,MAAO,CACLpH,iBACAmV,UAAS,GACTa,SAAQ,GACR+U,WACAS,aACAR,aACAxtB,aACA6sB,qBACAsC,kBACA5T,gBAAe,GACf/gB,OACAmzB,gBACAG,aACAC,cACAH,qBACAwB,gBACAnY,eACAb,YACAzM,QACAlH,cAEJ,GGxPF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U5CuFA,IACEyD,KAAM,YACNqC,WAAY,CACV8mB,eAAc,GACdC,aAAY,GACZC,UAAS,GACTC,UAAS,GACTC,UAAS,GACTznB,eAAcA,GAAAA,KAEhBa,KAAAA,GAGE,MAAM6mB,GAAWC,EAAAA,EAAAA,OAGX,YAAE3iB,IAAgBC,EAAAA,EAAAA,KAGlB2iB,EAAW,IAAIC,EAAAA,SAGfvwB,GAASlE,EAAAA,EAAAA,IAAI,CAAC,GACdyD,GAAUzD,EAAAA,EAAAA,IAAI,CAAC,GACf00B,EAAUA,KACXhW,aAAaL,QAAQ,WAAY5a,EAAQgH,MAAQ6T,KAAKrf,MAAMQ,EAAQif,aAAaL,QAAQ,aACvF5a,EAAQgH,MAAQ,CAAC,CAAC,EAEzBiqB,IACA,MAAM7vB,GAAS7E,EAAAA,EAAAA,IAAI,CAAC,GACd20B,EAAaA,KACjB9vB,EAAO4F,MAAQ,CAAC,EACbiU,aAAaL,QAAQ,YACtBxZ,EAAO4F,MAAQ6T,KAAKrf,MAAMQ,EAAQif,aAAaL,QAAQ,aAEzD5P,YAAW,KACT0O,GAAa1S,MAAM7F,WAAa,IAAIC,EAAO4F,MAAM,GACjD,EAAE,EAENkqB,IACA,MAAMvzB,GAAMpB,EAAAA,EAAAA,IAAI,MACV40B,EAAUA,KACd,GAAGlW,aAAaL,QAAQ,OAAQ,CAC9Bjd,EAAIqJ,MAAQ6T,KAAKrf,MAAMQ,EAAQif,aAAaL,QAAQ,SACpD,IAAIwW,EAAYpxB,EAAQgH,MAAMrJ,EAAIqJ,MAAM,WACrCoqB,EAAWzzB,EAAIqJ,MAAQ,IAAIrJ,EAAIqJ,SAASoqB,GACtCzzB,EAAIqJ,MAAMhF,OAAS,EAC1B,MACKrE,EAAIqJ,MAAQvF,EAEjBmG,GAAKW,OAAOT,OAASnK,EAAIqJ,MAAM/E,MAAQ,IAAI,EAE7CkvB,IAGA,MAAMjxB,EAASA,CAACmH,EAAK4I,KAChB5I,IAAMrH,EAAQgH,MAAQ,IAAIhH,EAAQgH,MAAM,CAACK,GAAM4I,IAClDgL,aAAaH,QAAQ,UAAU3f,EAAQ0f,KAAK5e,UAAU+D,EAAQgH,SAC9DiqB,GAAS,EAGL7wB,EAAYiH,WACTrH,EAAQgH,MAAMK,GACrBnH,EAAO,KAAK,MACTvC,EAAIqJ,MAAMhF,QAAUrE,EAAIqJ,MAAMhF,QAAUqF,GAAM/G,EAAQ,CAAC0B,OAAO,KAAI,EAAM,EAIvEiY,GAAiB1d,EAAAA,EAAAA,IAAI,CACzB,KAAO,sCACP,QAAU,2BACV,WAAa,sCACb,aAAe,qCAEXyd,GAAqBzd,EAAAA,EAAAA,IAAI0d,EAAejT,MAAM,eAG9CqqB,GAAW90B,EAAAA,EAAAA,MACjB,IAAI+0B,EAAO,KACX,MAAMC,GAAUh1B,EAAAA,EAAAA,KAAI,GACdi1B,EAAeA,KACnBF,EAAO,IAAIG,EAAAA,SAAS,CAClBC,aAAc,SACdC,YAAY,EACZC,WAAY,EACZC,cAAc,EACdxvB,YAAa1E,EAAIqJ,MAAM3E,YACvBC,YAAa3E,EAAIqJ,MAAM1E,YACvBgd,MAAM,CACJwS,WAAYn0B,EAAIqJ,MAAM7E,GACtB4vB,WAAYp0B,EAAIqJ,MAAM9E,GACtB8vB,OAAQ,QAEVC,WAAY,IACZ7vB,WAAYzE,EAAIqJ,MAAM5E,WACtB7D,SAAUZ,EAAIqJ,MAAMzI,WAEtB+yB,EAAKY,UAAUnB,EAAS,EAIpBoB,EAAUA,KAId,GAHAd,EAASrqB,MAAM1K,MAAMgC,OAAUkE,OAAO4vB,YAAc,GAAM,KAC1DrB,EAASsB,MAEN7Y,EAAOxS,OAASwS,EAAOxS,MAAMsrB,YAAcC,UAAUC,MAAQlB,EAAM,CACpE,IAAImB,EAAW1B,EAAS2B,oBAAoBC,KACxCC,EAAW7B,EAAS2B,oBAAoBG,KAC5CrZ,EAAOxS,MAAM8rB,KAAK33B,EAAQ0f,KAAK5e,UAAU,CAACsI,KAAK,EAAEN,QAAQ,GAAG0uB,KAAKF,EAASI,KAAKD,MAC/EtB,EAAKyB,OAAOH,EAASH,EACvB,GAII7xB,GAASrE,EAAAA,EAAAA,IAAI,IACbid,GAASjd,EAAAA,EAAAA,IAAI,MACb4d,EAAeA,KACnBX,EAAOxS,MAAQ,IAAIurB,UAAU3vB,EAAcG,EAAU5H,EAAQ0f,KAAK5e,UAAU0B,EAAIqJ,UAChFwS,EAAOxS,MAAMgsB,OAAS,KACpBb,GAAS,EAEX3Y,EAAOxS,MAAMisB,UAAYzR,IACvB,IAAIve,EAAS4X,KAAKrf,MAAMgmB,EAAK2D,MAoB7B,IAlBmB,GAAhBliB,EAAO+mB,OACRsH,EAAK4B,QACLlZ,EAAmBhT,MAAQiT,EAAejT,MAAM,QAChDsqB,EAAK3V,MAAM3B,EAAmBhT,OAC9BgE,YAAW,KACTlO,EAAW,EAAE,GACb,MAGc,GAAfmG,EAAO+mB,OACRsH,EAAK4B,QACLlZ,EAAmBhT,MAAQiT,EAAejT,MAAM,WAChDpG,EAAOoG,MAAQhL,EAAQiH,EAAOkiB,MAC9Bna,YAAW,KACTmnB,GAAS,GACT,IAGc,GAAflvB,EAAO+mB,KAAW,CACnB,IAAImJ,EAASn3B,EAAQiH,EAAOkiB,MACzB9K,GAAkBC,QAAQD,GAAkBE,SAAS+B,KAAK6W,GACxD9Y,GAAkBC,SAAWD,GAAkBlT,SAAUmqB,EAAK3V,MAAMwX,GAEzE7B,EAAKtxB,QAAQ4xB,YAAcN,EAAK8B,MAAMzS,OAAO0S,MAAMlwB,MACrD,GAEFqW,EAAOxS,MAAMssB,QAAW7H,IACnBzR,EAAmBhT,OAASiT,EAAejT,MAAM,YAAwB,MAAVykB,EAAEzB,OAClEppB,EAAOoG,MAAQ,GACfkT,IACAF,EAAmBhT,MAAQiT,EAAejT,MAAM,gBAChDsqB,EAAK3V,MAAM,OAAS3B,EAAmBhT,QAEzCusB,GAAwB,CACzB,EAIGr2B,GAAgBX,EAAAA,EAAAA,KAAI,GACpBc,EAAeA,KACnBH,EAAc8J,OAAS9J,EAAc8J,KAAK,EAEtC4S,GAAoBrd,EAAAA,EAAAA,MACpBsd,GAAkBtd,EAAAA,EAAAA,MAClBud,GAAevd,EAAAA,EAAAA,MAEf+D,EAAUA,CAACkzB,EAAQC,GAAQ,KAC/B91B,EAAIqJ,MAAQ,IAAIrJ,EAAIqJ,SAASwsB,GAC7BvY,aAAaH,QAAQ,MAAM3f,EAAQ0f,KAAK5e,UAAU0B,EAAIqJ,SACnDysB,GAAS32B,EAAW,EAAE,EAIrB42B,EAAcA,CAACjW,EAAMnD,GAAO,KAC7Bd,EAAOxS,QAELuqB,EAAQvqB,QACTmrB,IACAZ,EAAQvqB,OAAQ,GAEfqT,GAAkBC,SAAWA,GAAQd,EAAOxS,MAAM8rB,KAAK33B,EAAQ0f,KAAK5e,UAAU,CAACsI,KAAK,EAAEN,QAAQwZ,EAAKkV,KAAK,EAAEE,KAAK,MACpH,EAIIc,EAAclV,IAClBA,EAAMzM,iBACN0hB,EAAYjV,EAAM2M,OAAOpkB,OACzByX,EAAM2M,OAAOpkB,MAAQ,EAAE,EAInB4sB,EAAUvlB,eAAeoQ,GAC7BA,EAAMzM,iBACN,IAAI6hB,QAAkBC,UAAUC,UAAUC,WAC1CN,EAAYG,EACd,EAGMI,EAAUA,KACd/2B,EAAc8J,OAAQ,CAAK,EAIvBoT,EAAgBA,KACjBkX,GAAQD,EAASrqB,QAClBqqB,EAASrqB,MAAMmZ,oBAAoB,cAAeyT,GAClDvC,EAASrqB,MAAMmZ,oBAAoB,iBAAkBwT,GACrDtC,EAASrqB,MAAMmZ,oBAAoB,QAAS8T,IAE9C5C,EAASrqB,MAAMktB,UAAY,GAC3B3C,EAAQvqB,OAAQ,EAChBmqB,IACAK,IACAF,EAAKhY,KAAK+X,EAASrqB,OACnBmrB,IAGAd,EAASrqB,MAAMiZ,iBAAiB,iBAAkB0T,GAGlDrC,EAAK6C,OAAM1I,IACTiI,EAAYjI,EAAEpwB,IAAI,IAIpBi2B,EAAK8C,mBAAkB/lB,UACrB,GAAIijB,EAAK+C,eAAgB,CACvB,IAAIC,EAAWhD,EAAKiD,eAChBC,EAAeF,EAAS/pB,OACzBiqB,GAAgC,IAAhBA,SAA0BrmB,EAAYmmB,EAC3D,KAIFjD,EAASrqB,MAAMiZ,iBAAiB,cAAe2T,GAG/CvC,EAASrqB,MAAMiZ,iBAAiB,QAASgU,GAEzC3C,EAAK3V,MAAM3B,EAAmBhT,MAAM,EAIhClK,EAAcyH,IAEP,GAARA,GACDrH,EAAc8J,OAAQ,EACtB4S,EAAkB5S,MAAMrD,gBAAiB,GAG1B,GAARY,GACPrH,EAAc8J,OAAQ,EACtB6S,EAAgB7S,MAAMrD,gBAAiB,GAGxB,GAARY,GACPrH,EAAc8J,OAAQ,EACtBgT,EAAmBhT,MAAQiT,EAAejT,MAAM,cAChDpG,EAAOoG,MAAQ,GACZwS,EAAOxS,OAAOwS,EAAOxS,MAAMuS,MAAM,MAEpCW,IACAC,IACAC,KAGc,GAAR7V,IACNrH,EAAc8J,OAAQ,EACtB8S,EAAa9S,MAAM+S,aACnBD,EAAa9S,MAAMrD,gBAAiB,EACtC,EAIF,IAAI8wB,EAAQ,KACZ,MAAMC,EAAcA,KACN,MAATD,IACDA,EAAQE,aAAY,KACfnb,EAAOxS,OAASwS,EAAOxS,MAAMsrB,YAAcC,UAAUC,MACtDhZ,EAAOxS,MAAM8rB,KAAK33B,EAAQ0f,KAAK5e,UAAU,CAACsI,KAAK,EAAEN,QAAQ,GAAG0uB,KAAK,EAAEE,KAAK,MAG9C,SAAzBpyB,EAAOuG,MAAM4tB,UACdzT,IAAAA,KAAO,CACLF,IAAKne,EAAgB,QACrByB,KAAK,OACL4gB,KAAK,CACH0P,SAASp0B,EAAOuG,MAAM6tB,UAExBpT,OAAAA,GACA,GAEJ,GACA,MACJ,EAIIvH,EAAiBA,KAClBJ,EAAa9S,OAAO8S,EAAa9S,MAAMmmB,iBAAiB,EAGvD2H,EAAiBA,CAACC,EAAYC,KAClC5zB,EAAO4F,MAAM+tB,GAAYxP,OAASyP,EAClC/Z,aAAaH,QAAQ,SAAS3f,EAAQ0f,KAAK5e,UAAUmF,EAAO4F,SAC5DgE,YAAW,KACT0O,GAAa1S,MAAM7F,WAAa,IAAIC,EAAO4F,MAAM,GACjD,EAAE,EAIA7I,GAAQ5B,EAAAA,EAAAA,IAAI,IACZmC,EAAc2P,UAClB,IAAIlQ,EAAM6I,OAAS7I,EAAM6I,MAAM7D,OAAS,EAAG,OAC3C,IAAI4xB,EAAa52B,EAAM6I,MAAMsnB,cAG7B,GAFAnwB,EAAM6I,MAAQ,GAEM,KAAjB+tB,EAAW,IAAajc,GAAUic,GAAajc,GAAUic,GAAY/b,SAAS6X,QAE5E,GAAoB,KAAjBkE,EAAW,IAAapb,GAASob,GAAapb,GAASob,GAAY/b,SAAS6X,QAE/E,GAAoB,KAAjBkE,EAAW,IAAa3zB,EAAO4F,MAAM+tB,GAG3C,GAFI1a,GAAkBgB,YAAWhB,GAAkBgB,UAAYqY,GAEhC,GAA5BrZ,GAAkBC,OAAiB,CAIpC,GAHAiZ,IACAlZ,GAAkBC,QAAS,GAEvBlZ,EAAO4F,MAAM+tB,GAAY/b,YAAc5X,EAAO4F,MAAM+tB,GAAY/b,oBAAoBic,UAAW,CACjG,IAAIC,EAAW9zB,EAAO4F,MAAM+tB,GAAYxG,SAASxyB,WACjD,IACEqF,EAAO4F,MAAM+tB,GAAY/b,SAAW,IAAIic,SAAS,aAAe,8BAA6BC,SAC/F,CAAE,MAAOlT,GAQP,OAPA8S,EAAeC,EAAY,kBAC3BpqB,EAAAA,EAAAA,IAAU,CACRC,QAAS,SAAWmqB,EAAa,mBAAqB/S,EACtDzd,KAAM,QACNsG,UAAU,SAEZ0oB,GAEF,CACF,CAEA,UACQnyB,EAAO4F,MAAM+tB,GAAY/b,SAASqB,KACxC1P,EAAAA,EAAAA,IAAU,CACRC,QAAS,SAAWmqB,EAAa,iBACjCxwB,KAAM,UACNsG,UAAU,IAEZiqB,EAAeC,EAAY,kBAC7B,CAAE,MAAM/S,IACNrX,EAAAA,EAAAA,IAAU,CACRC,QAAS,SAAWmqB,EAAa,uBAAyB/S,EAC1Dzd,KAAM,UACNsG,UAAU,IAEZiqB,EAAeC,EAAY,oBAC7B,CAAE,QACAxB,GACF,CACF,MAEE5oB,EAAAA,EAAAA,IAAU,CACRC,QAAS,6BACTrG,KAAM,UACNsG,UAAU,QAKM,KAAjBkqB,EAAW,IAA8B,KAAjBA,EAAW,IAA8B,KAAjBA,EAAW,IAC5DpqB,EAAAA,EAAAA,IAAU,CACRC,QAAS,SAAWmqB,EAAa,kBACjCxwB,KAAM,UACNsG,UAAU,KAIZF,EAAAA,EAAAA,IAAU,CACRC,QAAShD,GAAKW,OAAOC,EAAE,qBACvBjE,KAAM,UACNsG,UAAU,GAGhB,EAGI0oB,EAAyBA,KAC7BlZ,GAAkBC,QAAS,EAC3BD,GAAkBlT,SAAU,EAC5BkT,GAAkBE,SAAW,GAC7BF,GAAkBG,IAAM,CAAC,EAErBtB,IAAe3c,EAAAA,EAAAA,MAEfwE,GAAgBokB,IACpB,IAAIgQ,EAAY,CAAC,EACjBA,EAAY,IAAI/zB,EAAO4F,SAASme,GAChClK,aAAaH,QAAQ,SAAS3f,EAAQ0f,KAAK5e,UAAUk5B,KACrDjE,GAAY,EAGRjwB,GAAeA,KACnB,IAAIgD,EAAU,CAAC,EACZgX,aAAaL,QAAQ,YAAW3W,EAAU4W,KAAKrf,MAAMQ,EAAQif,aAAaL,QAAQ,aAErF,MAAM8G,EAAO,IAAIC,KAAK,CAAC9G,KAAK5e,UAAUgI,EAAS,KAAM,IAAK,CAAEM,KAAM,eAE5D0c,EAAMW,IAAIE,gBAAgBJ,GAC1B4G,EAAIC,SAASC,cAAc,KACjCF,EAAEjP,KAAO4H,EACTqH,EAAE8M,SAAW,aACb7M,SAASE,KAAKC,YAAYJ,GAC1BA,EAAEzB,QACF0B,SAASE,KAAKE,YAAYL,GAE1B1G,IAAIC,gBAAgBZ,EAAI,EAGpBvH,IAAend,EAAAA,EAAAA,MACf+E,GAAkBA,CAAC+F,EAAMpD,KAC7B,IAAIkhB,EAAO,CAAC,EACZA,EAAK9d,GAAQ,CACX0R,KAAM3X,EAAO4F,MAAMK,GAAM0R,MAAQ,GACjCwV,SAAUtqB,GAAW,GACrBshB,OAAQ,cAEVxkB,GAAaokB,EAAK,EAEd3jB,GAAqB6F,WAClBjG,EAAO4F,MAAMK,GACpBtG,GAAa,CAAC,EAAE,EAyClB,OAtCA6L,EAAAA,EAAAA,KAAU,KAGRwN,IAEA+G,IAAAA,KAAO,CACLF,IAAKne,EAAgB,QACrByB,KAAK,MACL4gB,KAAM,CACJ5J,MAAM,IAAIsI,MAAOuB,WAEnB3D,OAAAA,CAAQD,GACN/gB,EAAOuG,MAAQ,IAAIwa,EAAK2D,MAExBhL,IAEA3X,OAAOyd,iBAAiB,UAAU,KAC7BnG,EAAa9S,QACd8S,EAAa9S,MAAMmM,YAAa,EAChC2G,EAAa9S,MAAM4N,WAAY,GAEjCud,GAAS,IAGXuC,GACF,GACA,KAGJxU,EAAAA,EAAAA,KAAY,KACPoR,GAAQD,EAASrqB,QAClBqqB,EAASrqB,MAAMmZ,oBAAoB,cAAeyT,GAClDvC,EAASrqB,MAAMmZ,oBAAoB,iBAAkBwT,GACrDtC,EAASrqB,MAAMmZ,oBAAoB,QAAS8T,IAE3CQ,GAAOY,cAAcZ,EAAM,IAGzB,CACL92B,MACAqC,UACAga,qBACAC,iBACAoX,WACAlX,eACAX,SACAnc,eACAH,gBACAJ,aACA8c,oBACAC,kBACAC,eACAxZ,UACAM,SACA8zB,cACAx0B,SACAE,WACAjC,QACAO,cACAwb,iBACAE,gBACAhZ,SACA8X,gBACAwa,cACA3yB,gBACAE,gBACAyY,gBACApY,mBACAE,qBACAf,SAGJ,G6C1lBF,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,GAAQ,CAAC,YAAY,qBAEzF,U9CFA,IACE4G,KAAM,MACNqC,WAAY,CACV4rB,UAASA,K+CHb,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAASC,KAEpE,U,+MCLApU,IAAAA,UAAY,CACR4I,aAAa,EAEb1I,UAAU,CACRmU,iBAAiB,GAEnBjU,UAAAA,CAAWC,GACTA,EAAO3G,KAAKrf,MAAMgmB,GAClB,IAAI2D,EAAO3D,EAAK2D,KAEhB,OADGA,IAAM3D,EAAK2D,KAAOtK,KAAKrf,MAAMQ,EAAQwlB,EAAK2D,QACtCtK,KAAK5e,UAAUulB,EACxB,IAMJ,MAAMiU,IAAMC,EAAAA,EAAAA,IAAUC,IAKtBF,GAAIG,IAAIC,GAAAA,UAAUD,IAAIE,GAAAA,IAAUF,IAAIG,GAAAA,IAAQH,IAAII,GAAAA,IAASJ,IAAIK,GAAAA,IAAUL,IAAIM,GAAAA,GAAeN,IAAIO,GAAAA,IAAQP,IAAIQ,GAAAA,IAAWR,IAAIS,GAAAA,IAAUT,IAAIU,GAAAA,IAAWV,IAAIW,GAAAA,IACtJd,GAAIG,IAAIY,GAAAA,IAAYZ,IAAIa,GAAAA,IAAgBb,IAAIc,GAAAA,IAAgBd,IAAIe,GAAAA,IAAUf,IAAIgB,GAAAA,IAAWhB,IAAIiB,GAAAA,IAAcjB,IAAIkB,GAAAA,IAASlB,IAAImB,GAAAA,IAAWnB,IAAIoB,GAAAA,IAAOpB,IAAIqB,GAAAA,IAAcrB,IAAIsB,GAAAA,IAIxKzB,GAAIG,IAAIhuB,IAER6tB,GAAI0B,MAAM,QAMV1B,GAAI2B,OAAOC,YAAc,M,uCCtCrBC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB/tB,IAAjBguB,EACH,OAAOA,EAAaC,QAGrB,IAAIC,EAASL,EAAyBE,GAAY,CACjDp5B,GAAIo5B,EACJI,QAAQ,EACRF,QAAS,CAAC,GAUX,OANAG,EAAoBL,GAAUM,KAAKH,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG3EI,EAAOC,QAAS,EAGTD,EAAOD,OACf,CAGAH,EAAoBQ,EAAIF,E,WC5BxBN,EAAoBS,KAAO,WAC1B,MAAM,IAAIC,MAAM,iCACjB,C,eCFA,IAAIC,EAAW,GACfX,EAAoBY,EAAI,SAASl1B,EAAQm1B,EAAUC,EAAIC,GACtD,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAASt1B,EAAI,EAAGA,EAAIg1B,EAAS/0B,OAAQD,IAAK,CACrCk1B,EAAWF,EAASh1B,GAAG,GACvBm1B,EAAKH,EAASh1B,GAAG,GACjBo1B,EAAWJ,EAASh1B,GAAG,GAE3B,IAJA,IAGIu1B,GAAY,EACPjc,EAAI,EAAGA,EAAI4b,EAASj1B,OAAQqZ,MACpB,EAAX8b,GAAsBC,GAAgBD,IAAa1xB,OAAOC,KAAK0wB,EAAoBY,GAAGO,OAAM,SAASr9B,GAAO,OAAOk8B,EAAoBY,EAAE98B,GAAK+8B,EAAS5b,GAAK,IAChK4b,EAASnR,OAAOzK,IAAK,IAErBic,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACbP,EAASjR,OAAO/jB,IAAK,GACrB,IAAIy1B,EAAIN,SACE5uB,IAANkvB,IAAiB11B,EAAS01B,EAC/B,CACD,CACA,OAAO11B,CArBP,CAJCq1B,EAAWA,GAAY,EACvB,IAAI,IAAIp1B,EAAIg1B,EAAS/0B,OAAQD,EAAI,GAAKg1B,EAASh1B,EAAI,GAAG,GAAKo1B,EAAUp1B,IAAKg1B,EAASh1B,GAAKg1B,EAASh1B,EAAI,GACrGg1B,EAASh1B,GAAK,CAACk1B,EAAUC,EAAIC,EAwB/B,C,eC5BAf,EAAoBqB,EAAI,SAASjB,GAChC,IAAIkB,EAASlB,GAAUA,EAAOmB,WAC7B,WAAa,OAAOnB,EAAO,UAAY,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAJ,EAAoBwB,EAAEF,EAAQ,CAAEvQ,EAAGuQ,IAC5BA,CACR,C,eCNAtB,EAAoBwB,EAAI,SAASrB,EAASsB,GACzC,IAAI,IAAI39B,KAAO29B,EACXzB,EAAoB0B,EAAED,EAAY39B,KAASk8B,EAAoB0B,EAAEvB,EAASr8B,IAC5EuL,OAAOsyB,eAAexB,EAASr8B,EAAK,CAAE89B,YAAY,EAAMC,IAAKJ,EAAW39B,IAG3E,C,eCPAk8B,EAAoB8B,EAAI,WACvB,GAA0B,kBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAO9d,MAAQ,IAAIyZ,SAAS,cAAb,EAChB,CAAE,MAAOxJ,GACR,GAAsB,kBAAXjpB,OAAqB,OAAOA,MACxC,CACA,CAPuB,E,eCAxB+0B,EAAoB0B,EAAI,SAASM,EAAKC,GAAQ,OAAO5yB,OAAO6yB,UAAUC,eAAe5B,KAAKyB,EAAKC,EAAO,C,eCCtGjC,EAAoBoB,EAAI,SAASjB,GACX,qBAAXiC,QAA0BA,OAAOC,aAC1ChzB,OAAOsyB,eAAexB,EAASiC,OAAOC,YAAa,CAAE5yB,MAAO,WAE7DJ,OAAOsyB,eAAexB,EAAS,aAAc,CAAE1wB,OAAO,GACvD,C,eCNAuwB,EAAoBsC,IAAM,SAASlC,GAGlC,OAFAA,EAAOmC,MAAQ,GACVnC,EAAOoC,WAAUpC,EAAOoC,SAAW,IACjCpC,CACR,C,eCJAJ,EAAoByC,EAAI,G,eCKxB,IAAIC,EAAkB,CACrB,IAAK,GAaN1C,EAAoBY,EAAE3b,EAAI,SAAS0d,GAAW,OAAoC,IAA7BD,EAAgBC,EAAgB,EAGrF,IAAIC,EAAuB,SAASC,EAA4BjV,GAC/D,IAKIqS,EAAU0C,EALV9B,EAAWjT,EAAK,GAChBkV,EAAclV,EAAK,GACnBmV,EAAUnV,EAAK,GAGIjiB,EAAI,EAC3B,GAAGk1B,EAASmC,MAAK,SAASn8B,GAAM,OAA+B,IAAxB67B,EAAgB77B,EAAW,IAAI,CACrE,IAAIo5B,KAAY6C,EACZ9C,EAAoB0B,EAAEoB,EAAa7C,KACrCD,EAAoBQ,EAAEP,GAAY6C,EAAY7C,IAGhD,GAAG8C,EAAS,IAAIr3B,EAASq3B,EAAQ/C,EAClC,CAEA,IADG6C,GAA4BA,EAA2BjV,GACrDjiB,EAAIk1B,EAASj1B,OAAQD,IACzBg3B,EAAU9B,EAASl1B,GAChBq0B,EAAoB0B,EAAEgB,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAO3C,EAAoBY,EAAEl1B,EAC9B,EAEIu3B,EAAqBC,KAAK,wBAA0BA,KAAK,yBAA2B,GACxFD,EAAmBE,QAAQP,EAAqBQ,KAAK,KAAM,IAC3DH,EAAmBle,KAAO6d,EAAqBQ,KAAK,KAAMH,EAAmBle,KAAKqe,KAAKH,G,IC/CvF,IAAII,EAAsBrD,EAAoBY,OAAE1uB,EAAW,CAAC,MAAM,WAAa,OAAO8tB,EAAoB,KAAO,IACjHqD,EAAsBrD,EAAoBY,EAAEyC,E","sources":["webpack://terminal/./src/utils/Encrypt.js","webpack://terminal/./src/App.vue","webpack://terminal/./src/views/FrameWork.vue","webpack://terminal/./src/utils/Env.js","webpack://terminal/./src/utils/BaseUrl.js","webpack://terminal/./src/utils/StringUtil.js","webpack://terminal/./src/components/ConnectSetting.vue","webpack://terminal/./src/components/OptionBlock.vue","webpack://terminal/./src/locales/i18n.js","webpack://terminal/./src/utils/DeleteDialog.js","webpack://terminal/./src/components/NoData.vue","webpack://terminal/./src/components/NoData.vue?b1a9","webpack://terminal/./src/components/OptionBlock.vue?fd56","webpack://terminal/./src/components/PrivateKey.vue","webpack://terminal/./src/components/PrivateKey.vue?507a","webpack://terminal/./src/components/ToolTip.vue","webpack://terminal/./src/components/ToolTip.vue?7d0b","webpack://terminal/./src/components/ConnectSetting.vue?de6a","webpack://terminal/./src/components/StyleSetting.vue","webpack://terminal/./src/components/StyleSetting.vue?dcef","webpack://terminal/./src/components/FileBlock.vue","webpack://terminal/./src/utils/FileSuffix.js","webpack://terminal/./src/utils/CalcPriority.js","webpack://terminal/./src/components/preview/TxtPreview.vue","webpack://terminal/./src/components/preview/AceEditor.vue","webpack://terminal/./src/components/preview/Lang.js","webpack://terminal/./src/components/tcode/Tcode.js","webpack://terminal/./src/components/preview/AceEditor.vue?3d73","webpack://terminal/./src/components/preview/EncodeUtil.js","webpack://terminal/./src/components/preview/TxtPreview.vue?acab","webpack://terminal/./src/components/MkFile.vue","webpack://terminal/./src/components/MkFile.vue?d447","webpack://terminal/./src/components/FileAttr.vue","webpack://terminal/./src/utils/FormatDate.js","webpack://terminal/./src/utils/CalcSize.js","webpack://terminal/./src/components/PermissionsEdit.vue","webpack://terminal/./src/components/PermissionsEdit.vue?1a3f","webpack://terminal/./src/components/FileAttr.vue?ee12","webpack://terminal/./src/components/FileUrl.vue","webpack://terminal/./src/components/FileUrl.vue?63a8","webpack://terminal/./src/components/FileBlock.vue?ea05","webpack://terminal/./src/components/tcode/UserTcode.vue","webpack://terminal/./src/components/tcode/UserTcode.vue?afd1","webpack://terminal/./src/components/tcode/HelpTcode.vue","webpack://terminal/./src/components/tcode/TcodeStatus.vue","webpack://terminal/./src/components/tcode/TcodeStatus.vue?37b2","webpack://terminal/./src/components/tcode/HelpTcode.vue?981d","webpack://terminal/./src/views/FrameWork.vue?81e6","webpack://terminal/./src/App.vue?7ccd","webpack://terminal/./src/main.js","webpack://terminal/webpack/bootstrap","webpack://terminal/webpack/runtime/amd define","webpack://terminal/webpack/runtime/chunk loaded","webpack://terminal/webpack/runtime/compat get default export","webpack://terminal/webpack/runtime/define property getters","webpack://terminal/webpack/runtime/global","webpack://terminal/webpack/runtime/hasOwnProperty shorthand","webpack://terminal/webpack/runtime/make namespace object","webpack://terminal/webpack/runtime/node module decorator","webpack://terminal/webpack/runtime/publicPath","webpack://terminal/webpack/runtime/jsonp chunk loading","webpack://terminal/webpack/startup"],"sourcesContent":["import CryptoJS from \"crypto-js\";\r\n\r\nconst SECRET_KEY = 'P5P1SIqVe6kaOxMX';\r\n\r\n/**\r\n * AES Encrypt\r\n */\r\nexport const encrypt = (word) => {\r\n var key = CryptoJS.enc.Utf8.parse(SECRET_KEY);\r\n var srcs = CryptoJS.enc.Utf8.parse(word);\r\n var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});\r\n return encrypted.toString();\r\n};\r\n\r\n/**\r\n * AES Decrypt\r\n */\r\nexport const decrypt = (word) => {\r\n var key = CryptoJS.enc.Utf8.parse(SECRET_KEY);\r\n var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});\r\n return CryptoJS.enc.Utf8.stringify(decrypt).toString();\r\n};\r\n\r\n// BASE64 Encode and Decode\r\nexport const Base64={_keyStr:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",encode:function(e){var t=\"\";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t=\"\";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,\"\");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,\"n\");var t=\"\";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t=\"\";var n=0;var r=0;var c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);var c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}};\r\n","<template>\r\n <FrameWork></FrameWork>\r\n</template>\r\n\r\n<script>\r\nimport FrameWork from \"./views/FrameWork\";\r\n\r\nexport default {\r\n name: 'App',\r\n components: {\r\n FrameWork,\r\n }\r\n}\r\n</script>\r\n\r\n<style>\r\n/* 禁止图片拖拽 */\r\nimg {\r\n -webkit-user-drag: none; /* Safari */\r\n -khtml-user-drag: none; /* Konqueror HTML */\r\n -moz-user-drag: none; /* Firefox */\r\n -o-user-drag: none; /* Opera */\r\n}\r\n\r\n.kk-dialog-class {\r\n pointer-events: none;\r\n z-index: 3456;\r\n}\r\n\r\n.el-dialog {\r\n pointer-events: auto;\r\n}\r\n\r\n.el-popconfirm__main {\r\n user-select: none;\r\n margin-top: 2px;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n</style>","<template>\r\n <div class=\"golbal\">\r\n <!-- 设置栏 -->\r\n <div class=\"setting\" v-show=\"isShowSetting\" >\r\n <div class=\"setting-menu no-select\" @click=\"doSettings(1)\" ><div>{{ $t('连接设置') }}</div></div>\r\n <div class=\"setting-menu no-select\" @click=\"doSettings(2)\" ><div>{{ $t('偏好设置') }}</div></div>\r\n <div class=\"setting-menu no-select\" @click=\"doSettings(4)\" ><div>{{ $t('文件管理') }}</div></div>\r\n <div class=\"setting-menu no-select\" @click=\"doSettings(3)\" ><div>{{ $t('重启') }}</div></div>\r\n </div>\r\n <div class=\"bar\">\r\n <div style=\"user-select: none;\" @click=\"showSettings\" >\r\n <img src=\"../assets/logo.png\" :alt=\"$t('终端')\" style=\"height: 16px; margin: 0 7px; cursor: pointer;\" >\r\n </div>\r\n <div style=\"user-select: none; font-size: 14px;\" ><span>kk Terminal</span></div>\r\n <div style=\"flex: 1;\"></div>\r\n <div v-if=\"env.tCode\" style=\"display: flex; align-items: center;\" >\r\n <div style=\"font-size: 12px; color: #313131; user-select: none;\" > TCode </div>\r\n <div style=\"margin-left: 7px;\" ></div>\r\n <div>\r\n <el-input\r\n v-model=\"tcode\"\r\n id=\"kkterminalTcode\"\r\n ref=\"tCodeInputRef\"\r\n :style=\"{ width: '100px', height: '20px', fontSize: '12px'}\"\r\n @keydown.enter=\"handleTcode\"\r\n maxlength=\"6\"\r\n >\r\n </el-input>\r\n </div>\r\n <div style=\"cursor: pointer; margin-left: 5px;\" >\r\n <el-popover v-if=\"env.tCode\" placement=\"bottom-end\" :width=\"$t('220')\" trigger=\"click\" >\r\n <template #reference>\r\n <el-icon :style=\"{ color: '#606266' }\" ><QuestionFilled /></el-icon>\r\n </template>\r\n <div v-if=\"env.tCode\" style=\"font-size: 12px; color: #313131;\" >\r\n <div style=\"user-select: none; font-size: 14px; font-weight: bold;\" >{{ $t('什么是 TCode (终端代码) ?') }}</div>\r\n <div style=\"user-select: none; margin-top: 5px;\">{{ $t('TCode(终端代码)是用于访问和执行特定操作流程的快捷方式') }}</div>\r\n <div style=\"user-select: none; margin-top: 5px;\">\r\n {{ $t('输入') }}\r\n <span style=\"background-color: #f3f4f4; user-select: text;\" >/H</span>\r\n {{ $t('并按下回车,查看帮助信息') }}\r\n </div>\r\n <div style=\"user-select: none; margin-top: 5px;\">\r\n {{ $t('输入') }}\r\n <span style=\"background-color: #f3f4f4; user-select: text;\" >/A</span>\r\n {{ $t('并按下回车,自定义TCode') }}\r\n </div>\r\n </div>\r\n </el-popover>\r\n </div>\r\n <div style=\"margin-left: 20px;\" ></div>\r\n </div>\r\n </div>\r\n <!-- terminal主体 -->\r\n <div ref=\"terminal\" class=\"terminal-class\" ></div>\r\n </div>\r\n\r\n <!-- 连接设置 -->\r\n <ConnectSetting ref=\"connectSettingRef\" :env=\"env\" :sshOptions=\"options\" @saveOp=\"saveOp\" @deleteOp=\"deleteOp\" @callback=\"saveEnv\"></ConnectSetting>\r\n <!-- 样式设置 -->\r\n <StyleSetting ref=\"styleSettingRef\" :env=\"env\" @callback=\"saveEnv\" :os=\"osInfo.clientOS\" ></StyleSetting>\r\n <!-- 文件管理 -->\r\n <FileBlock ref=\"fileBlockRef\" :sshKey=\"sshKey\" :os=\"osInfo.clientOS\" ></FileBlock>\r\n <!-- 用户TCode -->\r\n <UserTcode ref=\"userTcodeRef\" @importTCodes=\"importTCodes\" @exportTcodes=\"exportTcodes\" ></UserTcode>\r\n <!-- 帮助TCode -->\r\n <HelpTcode ref=\"helpTcodeRef\" :userTCodes=\"tcodes\" @handleSaveTCode=\"handleSaveTCode\" @handleDeleteTCode=\"handleDeleteTCode\" ></HelpTcode>\r\n\r\n</template>\r\n\r\n<script>\r\nimport useClipboard from \"vue-clipboard3\";\r\nimport { ref, onMounted, onUnmounted, getCurrentInstance } from 'vue';\r\nimport { encrypt, decrypt } from '@/utils/Encrypt';\r\nimport { ElMessage } from 'element-plus';\r\n\r\nimport { Terminal } from 'xterm';\r\nimport { FitAddon } from 'xterm-addon-fit';\r\nimport \"xterm/css/xterm.css\";\r\n\r\nimport $ from 'jquery';\r\nimport { default_env } from '@/utils/Env';\r\nimport { ws_base_url } from '@/utils/BaseUrl';\r\nimport { changeStr } from '@/utils/StringUtil';\r\nimport { http_base_url } from '@/utils/BaseUrl';\r\n\r\nimport ConnectSetting from '@/components/ConnectSetting.vue';\r\nimport StyleSetting from '@/components/StyleSetting.vue';\r\nimport FileBlock from \"@/components/FileBlock.vue\";\r\nimport UserTcode from '@/components/tcode/UserTcode.vue';\r\nimport HelpTcode from \"@/components/tcode/HelpTcode.vue\";\r\nimport { QuestionFilled } from '@element-plus/icons-vue';\r\nimport { FuncTcode, SysTcode, UserTcodeExecutor } from \"@/components/tcode/Tcode\";\r\n\r\nimport i18n from \"@/locales/i18n\";\r\n\r\nexport default {\r\n name: \"FrameWork\",\r\n components: {\r\n ConnectSetting,\r\n StyleSetting,\r\n FileBlock,\r\n UserTcode,\r\n HelpTcode,\r\n QuestionFilled,\r\n },\r\n setup() {\r\n\r\n // 获取当前组件实例\r\n const instance = getCurrentInstance();\r\n\r\n // 拷贝\r\n const { toClipboard } = useClipboard();\r\n\r\n // 终端自适应\r\n const fitAddon = new FitAddon();\r\n\r\n // 加载环境变量\r\n const osInfo = ref({});\r\n const options = ref({});\r\n const loadOps = () => {\r\n if(localStorage.getItem('options')) options.value = JSON.parse(decrypt(localStorage.getItem('options')));\r\n else options.value = {};\r\n };\r\n loadOps();\r\n const tcodes = ref({});\r\n const loadTCodes = () => {\r\n tcodes.value = {};\r\n if(localStorage.getItem('tcodes')) {\r\n tcodes.value = JSON.parse(decrypt(localStorage.getItem('tcodes')));\r\n }\r\n setTimeout(() => {\r\n helpTcodeRef.value.userTCodes = {...tcodes.value};\r\n },1);\r\n };\r\n loadTCodes();\r\n const env = ref(null);\r\n const loadEnv = () => {\r\n if(localStorage.getItem('env')) {\r\n env.value = JSON.parse(decrypt(localStorage.getItem('env')));\r\n let nowOpInfo = options.value[env.value['option']];\r\n if(nowOpInfo) env.value = {...env.value,...nowOpInfo};\r\n else env.value.option = '';\r\n }\r\n else env.value = default_env;\r\n // 切换语言\r\n i18n.global.locale = env.value.lang || 'en';\r\n };\r\n loadEnv();\r\n\r\n // 保存更改的配置\r\n const saveOp = (name,item) => {\r\n if(name) options.value = {...options.value,[name]:item};\r\n localStorage.setItem('options',encrypt(JSON.stringify(options.value)));\r\n loadOps();\r\n };\r\n // 删除配置\r\n const deleteOp = (name) => {\r\n delete options.value[name];\r\n saveOp(null,null);\r\n if(env.value.option && env.value.option == name) saveEnv({option:''},false);\r\n };\r\n\r\n // 连接状态\r\n const connect_status = ref({\r\n 'Fail':'Fail to connect remote server !\\r\\n',\r\n 'Success':'Connecting success !\\r\\n',\r\n 'Connecting':'Connecting to remote server ...\\r\\n',\r\n 'Disconnected':'Disconnect to remote server.\\r\\n',\r\n });\r\n const now_connect_status = ref(connect_status.value['Connecting']);\r\n\r\n // 初始化终端\r\n const terminal = ref();\r\n let term = null;\r\n const isFirst = ref(true);\r\n const initTerminal = () => {\r\n term = new Terminal({\r\n rendererType: \"canvas\", // 渲染类型\r\n convertEol: true, // 启用时,光标将设置为下一行的开头\r\n scrollback: 0, // 终端中的回滚量\r\n disableStdin: false, // 是否应禁用输入\r\n cursorStyle: env.value.cursorStyle, // 光标样式 block\r\n cursorBlink: env.value.cursorBlink, // 光标闪烁\r\n theme:{\r\n foreground: env.value.fg, // 前景色\r\n background: env.value.bg, // 背景色\r\n cursor: \"help\", // 设置光标\r\n },\r\n lineHeight: 1.2,\r\n fontFamily: env.value.fontFamily, // 设置字体为 Consolas\r\n fontSize: env.value.fontSize, // 设置字号为 16\r\n });\r\n term.loadAddon(fitAddon);\r\n };\r\n\r\n // 终端视高自适应\r\n const termFit = () => {\r\n terminal.value.style.height = (window.innerHeight - 25) + 'px';\r\n fitAddon.fit();\r\n // 修改虚拟终端行列大小\r\n if(socket.value && socket.value.readyState == WebSocket.OPEN && term) {\r\n let new_rows = fitAddon.proposeDimensions().rows;\r\n let new_cols = fitAddon.proposeDimensions().cols;\r\n socket.value.send(encrypt(JSON.stringify({type:1,content:\"\",rows:new_rows,cols:new_cols})));\r\n term.resize(new_cols,new_rows);\r\n }\r\n };\r\n\r\n // websocket连接\r\n const sshKey = ref('');\r\n const socket = ref(null);\r\n const doSSHConnect = () => {\r\n socket.value = new WebSocket(ws_base_url + changeStr(encrypt(JSON.stringify(env.value))));\r\n socket.value.onopen = () => {\r\n termFit();\r\n }\r\n socket.value.onmessage = resp => {\r\n let result = JSON.parse(resp.data);\r\n // 连接失败\r\n if(result.code == -1) {\r\n term.clear();\r\n now_connect_status.value = connect_status.value['Fail'];\r\n term.write(now_connect_status.value);\r\n setTimeout(() => {\r\n doSettings(1);\r\n },400);\r\n }\r\n // 连接成功\r\n if(result.code == 0) {\r\n term.clear();\r\n now_connect_status.value = connect_status.value['Success'];\r\n sshKey.value = decrypt(result.data);\r\n setTimeout(() => {\r\n termFit();\r\n },1);\r\n }\r\n // 输出\r\n if(result.code == 1) {\r\n let output = decrypt(result.data);\r\n if(UserTcodeExecutor.active) UserTcodeExecutor.outArray.push(output);\r\n if(!(UserTcodeExecutor.active && !UserTcodeExecutor.display)) term.write(output);\r\n // 设置回滚量\r\n term.options.scrollback += term._core.buffer.lines.length;\r\n }\r\n }\r\n socket.value.onclose = (e) => {\r\n if(now_connect_status.value == connect_status.value['Success'] && e.code != 3333) {\r\n sshKey.value = '';\r\n closeFileBlock();\r\n now_connect_status.value = connect_status.value['Disconnected'];\r\n term.write(\"\\r\\n\" + now_connect_status.value);\r\n }\r\n userTcodeExecutorReset();\r\n }\r\n };\r\n\r\n // 终端信息设置\r\n const isShowSetting = ref(false);\r\n const showSettings = () => {\r\n isShowSetting.value = !isShowSetting.value;\r\n };\r\n const connectSettingRef = ref();\r\n const styleSettingRef = ref();\r\n const fileBlockRef = ref();\r\n // 保存更改的环境变量\r\n const saveEnv = (new_env,restart=true) => {\r\n env.value = {...env.value,...new_env};\r\n localStorage.setItem('env',encrypt(JSON.stringify(env.value)));\r\n if(restart) doSettings(3);\r\n };\r\n\r\n // 文本消息发送\r\n const sendMessage = (text, active=false) => {\r\n if(socket.value) {\r\n // 重启后第一次输入\r\n if(isFirst.value) {\r\n termFit();\r\n isFirst.value = false;\r\n }\r\n if(UserTcodeExecutor.active === active) socket.value.send(encrypt(JSON.stringify({type:0,content:text,rows:0,cols:0})));\r\n }\r\n };\r\n\r\n // 中文\r\n const putChinese = (event) => {\r\n event.preventDefault();\r\n sendMessage(event.target.value);\r\n event.target.value = '';\r\n };\r\n\r\n // 右键事件函数\r\n const doPaste = async function(event) {\r\n event.preventDefault(); // 阻止默认的上下文菜单弹出\r\n let pasteText = await navigator.clipboard.readText();\r\n sendMessage(pasteText);\r\n };\r\n\r\n // 单击事件\r\n const doClick = () => {\r\n isShowSetting.value = false;\r\n };\r\n\r\n // 重启终端\r\n const resetTerminal = () => {\r\n if(term && terminal.value) {\r\n terminal.value.removeEventListener('contextmenu', doPaste);\r\n terminal.value.removeEventListener('compositionend', putChinese);\r\n terminal.value.removeEventListener('click', doClick);\r\n }\r\n terminal.value.innerHTML = '';\r\n isFirst.value = true;\r\n loadEnv();\r\n initTerminal();\r\n term.open(terminal.value);\r\n termFit();\r\n\r\n // 支持中文输入\r\n terminal.value.addEventListener('compositionend', putChinese);\r\n\r\n // 正常输入\r\n term.onKey(e => {\r\n sendMessage(e.key);\r\n });\r\n\r\n // 监听选中文本,自动复制\r\n term.onSelectionChange(async () => {\r\n if (term.hasSelection()) {\r\n let copyText = term.getSelection();\r\n let copyTextTrim = copyText.trim();\r\n if(copyTextTrim && copyTextTrim != '') await toClipboard(copyText);\r\n }\r\n });\r\n\r\n // 右键进行粘贴\r\n terminal.value.addEventListener('contextmenu', doPaste);\r\n\r\n // 左键单击\r\n terminal.value.addEventListener('click', doClick);\r\n\r\n term.write(now_connect_status.value);\r\n };\r\n\r\n // 终端设置\r\n const doSettings = (type) => {\r\n // 连接设置\r\n if(type == 1) {\r\n isShowSetting.value = false;\r\n connectSettingRef.value.DialogVisilble = true;\r\n }\r\n // 偏好设置\r\n else if (type == 2) {\r\n isShowSetting.value = false;\r\n styleSettingRef.value.DialogVisilble = true;\r\n }\r\n // 重启\r\n else if (type == 3) {\r\n isShowSetting.value = false;\r\n now_connect_status.value = connect_status.value['Connecting'];\r\n sshKey.value = '';\r\n if(socket.value) socket.value.close(3333); // 主动释放资源,必需\r\n // 进行重启\r\n closeFileBlock();\r\n doSSHConnect();\r\n resetTerminal();\r\n }\r\n // 文件管理\r\n else if(type == 4) {\r\n isShowSetting.value = false;\r\n fileBlockRef.value.getInitDir();\r\n fileBlockRef.value.DialogVisilble = true;\r\n }\r\n };\r\n\r\n // websocket心跳续约 (25秒)\r\n let timer = null;\r\n const doHeartBeat = () => {\r\n if(timer == null) {\r\n timer = setInterval(() => {\r\n if(socket.value && socket.value.readyState == WebSocket.OPEN) {\r\n socket.value.send(encrypt(JSON.stringify({type:2,content:\"\",rows:0,cols:0})));\r\n }\r\n // PC端\r\n if(osInfo.value.serverOS != \"Linux\") {\r\n $.ajax({\r\n url: http_base_url + '/beat',\r\n type:'post',\r\n data:{\r\n windowId:osInfo.value.windowId,\r\n },\r\n success(){\r\n }\r\n });\r\n }\r\n },25000);\r\n }\r\n };\r\n\r\n // 关闭文件模块\r\n const closeFileBlock = () => {\r\n if(fileBlockRef.value) fileBlockRef.value.deepCloseDialog();\r\n };\r\n\r\n const setTcodeStatus = (transTcode, state) => {\r\n tcodes.value[transTcode].status = state;\r\n localStorage.setItem('tcodes',encrypt(JSON.stringify(tcodes.value)));\r\n setTimeout(() => {\r\n helpTcodeRef.value.userTCodes = {...tcodes.value};\r\n },1);\r\n };\r\n\r\n // 处理终端代码\r\n const tcode = ref('');\r\n const handleTcode = async () => {\r\n if(!tcode.value || tcode.value.length < 2) return;\r\n let transTcode = tcode.value.toUpperCase();\r\n tcode.value = '';\r\n // 功能TCode\r\n if(transTcode[0] == '/' && FuncTcode[transTcode]) FuncTcode[transTcode].execFlow(instance);\r\n // 系统TCode\r\n else if(transTcode[0] == 'S' && SysTcode[transTcode]) SysTcode[transTcode].execFlow(instance);\r\n // 用户TCode\r\n else if(transTcode[0] == 'U' && tcodes.value[transTcode]) {\r\n if(!UserTcodeExecutor.writeOnly) UserTcodeExecutor.writeOnly = sendMessage;\r\n // 未激活\r\n if(UserTcodeExecutor.active == false) {\r\n userTcodeExecutorReset();\r\n UserTcodeExecutor.active = true;\r\n // 执行流未被定义\r\n if(!tcodes.value[transTcode].execFlow || !(tcodes.value[transTcode].execFlow instanceof Function)) {\r\n let textflow = tcodes.value[transTcode].workflow.toString();\r\n try {\r\n tcodes.value[transTcode].execFlow = new Function('kkTerminal', `return (async function() { ${textflow} })()`);\r\n } catch (error) {\r\n setTcodeStatus(transTcode, 'Compile Error');\r\n ElMessage({\r\n message: 'TCode-' + transTcode + ' Compile Error: ' + error,\r\n type: 'error',\r\n grouping: true,\r\n });\r\n userTcodeExecutorReset();\r\n return;\r\n }\r\n }\r\n // 执行Workflow\r\n try {\r\n await tcodes.value[transTcode].execFlow(UserTcodeExecutor);\r\n ElMessage({\r\n message: 'TCode-' + transTcode + ' Workflow Over',\r\n type: 'success',\r\n grouping: true,\r\n });\r\n setTcodeStatus(transTcode, 'Execute Success');\r\n } catch(error) {\r\n ElMessage({\r\n message: 'TCode-' + transTcode + ' Execute Interrupt: ' + error,\r\n type: 'warning',\r\n grouping: true,\r\n });\r\n setTcodeStatus(transTcode, 'Execute Interrupt');\r\n } finally {\r\n userTcodeExecutorReset();\r\n }\r\n }\r\n else {\r\n ElMessage({\r\n message: 'Another TCode is executing',\r\n type: 'warning',\r\n grouping: true,\r\n });\r\n }\r\n }\r\n else {\r\n if(transTcode[0] == '/' || transTcode[0] == 'S' || transTcode[0] == 'U') {\r\n ElMessage({\r\n message: 'TCode-' + transTcode + ' does not exist',\r\n type: 'warning',\r\n grouping: true,\r\n });\r\n }\r\n else {\r\n ElMessage({\r\n message: i18n.global.t('TCode必须以 /,S,U 开头'),\r\n type: 'warning',\r\n grouping: true,\r\n });\r\n }\r\n }\r\n };\r\n // 重置用户TCode执行器\r\n const userTcodeExecutorReset = () => {\r\n UserTcodeExecutor.active = false;\r\n UserTcodeExecutor.display = true;\r\n UserTcodeExecutor.outArray = [];\r\n UserTcodeExecutor.cnt = 0;\r\n };\r\n const userTcodeRef = ref();\r\n // 批量导入TCode\r\n const importTCodes = (data) => {\r\n let tCodeData = {};\r\n tCodeData = {...tcodes.value,...data};\r\n localStorage.setItem('tcodes',encrypt(JSON.stringify(tCodeData)));\r\n loadTCodes();\r\n };\r\n // 批量导出TCode\r\n const exportTcodes = () => {\r\n let content = {};\r\n if(localStorage.getItem('tcodes')) content = JSON.parse(decrypt(localStorage.getItem('tcodes')));\r\n // 创建 Blob 对象\r\n const blob = new Blob([JSON.stringify(content, null, 4)], { type: 'text/plain' });\r\n // 创建指向 Blob 的 URL\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = 'TCode.json';\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n // 释放 URL 对象\r\n URL.revokeObjectURL(url);\r\n };\r\n // 帮助\r\n const helpTcodeRef = ref();\r\n const handleSaveTCode = (name, content) => {\r\n let data = {};\r\n data[name] = {\r\n desc: tcodes.value[name].desc || '',\r\n workflow: content || '',\r\n status: 'Not Active',\r\n };\r\n importTCodes(data);\r\n };\r\n const handleDeleteTCode = (name) => {\r\n delete tcodes.value[name];\r\n importTCodes({});\r\n };\r\n\r\n onMounted(() => {\r\n\r\n // 启动终端\r\n resetTerminal();\r\n\r\n $.ajax({\r\n url: http_base_url + '/init',\r\n type:'get',\r\n data: {\r\n time: new Date().getTime(),\r\n },\r\n success(resp){\r\n osInfo.value = {...resp.data};\r\n // 连接服务器\r\n doSSHConnect();\r\n // 监听窗口大小变化事件,自动调整终端大小\r\n window.addEventListener('resize', () => {\r\n if(fileBlockRef.value) {\r\n fileBlockRef.value.isShowMenu = false;\r\n fileBlockRef.value.isShowPop = false;\r\n }\r\n termFit();\r\n });\r\n // 心跳\r\n doHeartBeat();\r\n },\r\n });\r\n });\r\n\r\n onUnmounted(() => {\r\n if(term && terminal.value) {\r\n terminal.value.removeEventListener('contextmenu', doPaste);\r\n terminal.value.removeEventListener('compositionend', putChinese);\r\n terminal.value.removeEventListener('click', doClick);\r\n }\r\n if(timer) clearInterval(timer);\r\n });\r\n\r\n return {\r\n env,\r\n options,\r\n now_connect_status,\r\n connect_status,\r\n terminal,\r\n doSSHConnect,\r\n socket,\r\n showSettings,\r\n isShowSetting,\r\n doSettings,\r\n connectSettingRef,\r\n styleSettingRef,\r\n fileBlockRef,\r\n saveEnv,\r\n sshKey,\r\n doHeartBeat,\r\n saveOp,\r\n deleteOp,\r\n tcode,\r\n handleTcode,\r\n closeFileBlock,\r\n resetTerminal,\r\n tcodes,\r\n userTcodeRef,\r\n sendMessage,\r\n importTCodes,\r\n exportTcodes,\r\n helpTcodeRef,\r\n handleSaveTCode,\r\n handleDeleteTCode,\r\n osInfo,\r\n }\r\n\r\n }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n\r\n.golbal {\r\n position: relative;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n}\r\n\r\n.bar {\r\n display: flex;\r\n align-items: center;\r\n background-color: #f5f5f5;\r\n color: black;\r\n width: 100%;\r\n height: 25px;\r\n border-top: 1px solid #d7d7d7;\r\n border-bottom: 1px solid #d7d7d7;\r\n border-left: 1px solid #d7d7d7;\r\n border-right: 1px solid #d7d7d7;\r\n}\r\n\r\n.terminal-class {\r\n width: 100%;\r\n}\r\n\r\n.setting {\r\n position: absolute;\r\n left: 0;\r\n top: 25px;\r\n z-index: 100;\r\n cursor: pointer;\r\n border: 2px solid #f2f2f2;\r\n}\r\n\r\n.setting-menu {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #f2f2f2;\r\n text-align: center;\r\n width: 80px;\r\n height: 25px;\r\n line-height: 25px;\r\n font-size: 13px;\r\n color: #383838;\r\n}\r\n\r\n.setting-menu:hover {\r\n background-color: #91c9f7;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n</style>\r\n","export const default_env = {\r\n // 连接相关\r\n server_ip: '',\r\n server_port: 22,\r\n server_user: 'root',\r\n server_password:'',\r\n server_key: null,\r\n authType: 0,\r\n option:'',\r\n // 样式相关\r\n lang: \"en\",\r\n bg:'#0c0c0c',\r\n fg:'#cccccc',\r\n fontFamily: 'Courier New',\r\n fontSize: 16,\r\n cursorStyle: 'block',\r\n cursorBlink: true,\r\n tCode: true,\r\n};","// 上线环境\r\nlet http_protocol = window.location.protocol;\r\nlet ws_protocol = '';\r\nif(http_protocol == 'https:') ws_protocol = 'wss://';\r\nelse ws_protocol = 'ws://';\r\nexport const ws_base_url = ws_protocol + window.location.host + '/socket/ssh/';\r\nexport const http_base_url = http_protocol + '//' + window.location.host + '/api';\r\n\r\n// 本地开发环境\r\n// export const ws_base_url = 'ws://localhost:3000/socket/ssh/';\r\n// export const http_base_url = 'http://localhost:3000/api';\r\n\r\n// 在线环境\r\n// export const ws_base_url = 'wss://ssh.kkbpro.com/socket/ssh/';\r\n// export const http_base_url = 'https://ssh.kkbpro.com/api';","// 将 '/' 转为 '@'\r\nexport const changeStr = (str) => {\r\n let result = '';\r\n for (let i = 0; i < str.length; i++) {\r\n if(str[i] != '/') result += str[i];\r\n else result += '@';\r\n }\r\n \r\n return result;\r\n};\r\n\r\n// 将 '@' 转为 '-'\r\nexport const changeStr2 = (str) => {\r\n let result = '';\r\n for (let i = 0; i < str.length; i++) {\r\n if(str[i] != '@') result += str[i];\r\n else result += '-';\r\n }\r\n \r\n return result;\r\n};\r\n\r\n// 转义字符串(路径)\r\nconst pathChars = /[ !\"#$&'()*,:;<=>?@[\\\\\\]^`{}~]/g;\r\nexport const escapePath = (str) => {\r\n return str.replace(pathChars, function(match) {\r\n return '\\\\' + match;\r\n });\r\n};\r\n\r\n// 转义字符串(文件项)\r\nexport const escapeItem = (str) => {\r\n return escapePath(str);\r\n};","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n :destory-on-close=\"true\"\r\n :before-close=\"closeDialog\"\r\n :width=\"360\"\r\n :title=\"$t('连接设置')\"\r\n :modal=\"false\"\r\n :close-on-click-modal=\"false\"\r\n modal-class=\"kk-dialog-class\"\r\n align-center\r\n draggable\r\n >\r\n <div style=\"margin-top: -25px;\"></div>\r\n <div>\r\n <div class=\"item-class\" style=\"margin-bottom: 15px;\">\r\n <div class=\"no-select form-width nowrap\">{{ $t('配\\u00A0\\u00A0\\u00A0置') }}:</div>\r\n <ToolTip :content=\"!(setInfo.option && setInfo.option.length > 0) ? $t('新建配置') : setInfo.option\" >\r\n <template #content>\r\n <div class=\"ellipsis\" style=\"user-select: none;\" :class=\"!(setInfo.option && setInfo.option.length > 0) ? 'new-option': 'old-option'\" >{{ !(setInfo.option && setInfo.option.length > 0) ? $t('新建配置') : setInfo.option }}</div>\r\n </template>\r\n </ToolTip>\r\n <div style=\"flex: 1;\"></div>\r\n <div><el-button size=\"small\" type=\"primary\" @click=\"showOption(0)\" style=\"margin-left: 10px;\" ><el-icon class=\"el-icon--left\"><Switch /></el-icon>{{ $t('切换') }}</el-button></div>\r\n <div><el-button v-if=\"isForbidInput == false\" size=\"small\" type=\"primary\" @click=\"showOption(1)\" style=\"margin-left: 10px;\" ><el-icon class=\"el-icon--left\"><Finished /></el-icon>{{ $t('保存') }}</el-button></div>\r\n <div><el-button v-if=\"isForbidInput == true\" size=\"small\" type=\"primary\" @click=\"newOp\" style=\"margin-left: 10px;\" ><el-icon class=\"el-icon--left\"><Edit /></el-icon>{{ $t('新建') }}</el-button></div>\r\n </div>\r\n <div class=\"item-class\" style=\"margin-bottom: 15px;\">\r\n <div class=\"no-select form-width\">{{ $t('主机IP') }}:</div>\r\n <div>\r\n <el-input :disabled=\"isForbidInput\" v-model=\"setInfo.server_ip\" class=\"w-50 m-2\" :placeholder=\"$t('输入主机IP')\">\r\n <template #prefix>\r\n <el-icon><HomeFilled /></el-icon>\r\n </template>\r\n </el-input>\r\n </div>\r\n <div style=\"cursor: pointer; margin-left: 10px;\" @click=\"doCopy(setInfo.server_ip)\"><el-icon size=\"15\"><DocumentCopy /></el-icon></div>\r\n </div>\r\n <div class=\"item-class\" style=\"margin-bottom: 15px;\">\r\n <div class=\"no-select form-width\">{{ $t('端口号') }}:</div>\r\n <div>\r\n <el-input :disabled=\"isForbidInput\" v-model=\"setInfo.server_port\" class=\"w-50 m-2\" :placeholder=\"$t('输入端口号')\">\r\n <template #prefix>\r\n <el-icon><Paperclip /></el-icon>\r\n </template>\r\n </el-input>\r\n </div>\r\n <div style=\"cursor: pointer; margin-left: 10px;\" @click=\"doCopy(setInfo.server_port)\"><el-icon size=\"15\"><DocumentCopy /></el-icon></div>\r\n </div>\r\n <div class=\"item-class\" style=\"margin-bottom: 15px;\">\r\n <div class=\"no-select form-width\">{{ $t('用户名') }}:</div>\r\n <div>\r\n <el-input :disabled=\"isForbidInput\" v-model=\"setInfo.server_user\" class=\"w-50 m-2\" :placeholder=\"$t('输入用户名')\">\r\n <template #prefix>\r\n <el-icon class=\"el-input__icon\"><User /></el-icon>\r\n </template>\r\n </el-input>\r\n </div>\r\n <div style=\"cursor: pointer; margin-left: 10px;\" @click=\"doCopy(setInfo.server_user)\"><el-icon size=\"15\"><DocumentCopy /></el-icon></div>\r\n </div>\r\n <div class=\"item-class\" style=\"margin-bottom: 5px;\">\r\n <el-dropdown class=\"no-select form-width\" hide-timeout=\"300\" >\r\n <span>{{ setInfo.authType == 0 ? $t('密码') : $t('私钥') }}<el-icon class=\"el-icon--right\"><arrow-down style=\"cursor: pointer;\" /></el-icon></span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item class=\"no-select\" @click=\"setInfo.authType = 0\" >{{ $t('密码') }}</el-dropdown-item>\r\n <el-dropdown-item class=\"no-select\" @click=\"setInfo.authType = 1\" >{{ $t('私钥') }}</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <div v-if=\"setInfo.authType == 0\" class=\"item-class\">\r\n <div>\r\n <el-input :disabled=\"isForbidInput\" v-model=\"setInfo.server_password\" :type=\"isShowPassword ? 'text': 'password'\" class=\"w-50 m-2\" :placeholder=\"$t('输入密码')\">\r\n <template #prefix>\r\n <el-icon class=\"el-input__icon\"><Lock /></el-icon>\r\n </template>\r\n </el-input>\r\n </div>\r\n <div v-if=\"isShowPassword == true\" style=\"cursor: pointer; margin-left: 10px;\" @click=\"isShowPassword = false\"><el-icon size=\"15\"><View /></el-icon></div>\r\n <div v-else style=\"cursor: pointer; margin-left: 10px;\" @click=\"isShowPassword = true\"><el-icon size=\"15\"><Hide /></el-icon></div>\r\n </div>\r\n <div v-else >\r\n <el-button :disabled=\"isForbidInput\" type=\"primary\" @click=\"openprivateKeyBlock\" >\r\n <el-icon class=\"el-icon--left\"><Key /></el-icon>{{ $t('导入') }}\r\n </el-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"errInfo no-select\"> {{ err_msg }} </div>\r\n <div style=\"margin-bottom: 5px;\"></div>\r\n <div style=\"display: flex; border-top: 1px solid #f1f2f4;\">\r\n <div style=\"flex: 1;\"></div>\r\n <el-button size=\"small\" type=\"primary\" @click=\"confirm\" style=\"margin-bottom: -15px; margin-top: 10px;\">\r\n {{ $t('确定') }}\r\n </el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 配置管理 -->\r\n <OptionBlock ref=\"optionBlockRef\" @callback=\"doOption\" :opType=\"optionBlockType\" :sshOptions=\"sshOptions\" @handleDeleteOption=\"handleDeleteOption\" ></OptionBlock>\r\n <!-- 私钥管理 -->\r\n <PrivateKey ref=\"privateKeyRef\" @callback=\"savePrivateKey\" ></PrivateKey>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport useClipboard from \"vue-clipboard3\";\r\nimport { ElMessage } from 'element-plus';\r\nimport OptionBlock from './OptionBlock';\r\nimport PrivateKey from './PrivateKey';\r\nimport ToolTip from './ToolTip.vue';\r\nimport { HomeFilled, Paperclip, User, Lock, DocumentCopy, View, Hide, Edit, Finished, Switch, ArrowDown, Key } from '@element-plus/icons-vue';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\nexport default {\r\n name:'ConnectSetting',\r\n components: {\r\n ToolTip,\r\n OptionBlock,\r\n PrivateKey,\r\n HomeFilled,\r\n Paperclip,\r\n User,\r\n Lock,\r\n DocumentCopy,\r\n View,\r\n Hide,\r\n Edit,\r\n Finished,\r\n Switch,\r\n ArrowDown,\r\n Key,\r\n },\r\n props:['env','sshOptions'],\r\n setup(props,context) {\r\n\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n const err_msg = ref('');\r\n\r\n // 设置信息\r\n const setInfo = ref({\r\n server_ip: props.env.server_ip,\r\n server_port: props.env.server_port,\r\n server_user: props.env.server_user,\r\n server_password:props.env.server_password,\r\n server_key: props.env.server_key || null,\r\n authType: props.env.authType || 0,\r\n option: props.env.option,\r\n });\r\n\r\n // 校验参数\r\n const verifyParams = () => {\r\n err_msg.value = '';\r\n // 验证IP地址\r\n const ipRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\r\n if (!ipRegex.test(setInfo.value.server_ip)) {\r\n err_msg.value = i18n.global.t(\"主机IP地址无效\");\r\n return false;\r\n }\r\n // 校验端口号\r\n if (isNaN(setInfo.value.server_port) || setInfo.value.server_port < 0 || setInfo.value.server_port > 65535) {\r\n err_msg.value = i18n.global.t(\"端口号无效\");\r\n return false;\r\n }\r\n // 校验用户名\r\n if (!(setInfo.value.server_user && setInfo.value.server_user != '')) {\r\n err_msg.value = i18n.global.t(\"用户名不能为空\");\r\n return false;\r\n }\r\n // 校验密码\r\n if (setInfo.value.authType == 0 && !(setInfo.value.server_password && setInfo.value.server_password != '')) {\r\n err_msg.value = i18n.global.t(\"密码不能为空\");\r\n return false;\r\n }\r\n // 校验私钥\r\n if(setInfo.value.authType == 1 && !(setInfo.value.server_key && setInfo.value.server_key.content != '')) {\r\n err_msg.value = i18n.global.t(\"私钥不能为空\");\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n // 配置选项\r\n const optionBlockRef = ref();\r\n const optionBlockType = ref(0);\r\n\r\n const showOption = (type) => {\r\n if(type == 1) {\r\n if(verifyParams() == false) return;\r\n }\r\n optionBlockType.value = type;\r\n optionBlockRef.value.aimOption = '';\r\n optionBlockRef.value.DialogVisilble = true;\r\n };\r\n\r\n const isForbidInput = ref(false);\r\n if(setInfo.value.option != '') isForbidInput.value = true;\r\n const doOption = (option) => {\r\n // 切换\r\n if(optionBlockType.value == 0)\r\n {\r\n if(!props.sshOptions[option].authType) setInfo.value.authType = 0;\r\n setInfo.value = {...setInfo.value, ...props.sshOptions[option]};\r\n isForbidInput.value = true;\r\n }\r\n // 保存\r\n else if(optionBlockType.value == 1)\r\n {\r\n setInfo.value.option = option;\r\n context.emit('saveOp', option, setInfo.value);\r\n isForbidInput.value = true;\r\n }\r\n };\r\n\r\n const newOp = () => {\r\n isForbidInput.value = false;\r\n setInfo.value.option = '';\r\n };\r\n\r\n // 删除配置\r\n const handleDeleteOption = (name) => {\r\n context.emit('deleteOp', name);\r\n if(setInfo.value.option && setInfo.value.option == name) {\r\n setInfo.value.option = '';\r\n isForbidInput.value = false;\r\n }\r\n };\r\n\r\n // 私钥相关\r\n const privateKeyRef = ref();\r\n const openprivateKeyBlock = () => {\r\n privateKeyRef.value.content = setInfo.value.server_key ? setInfo.value.server_key.content : '';\r\n privateKeyRef.value.passphrase = setInfo.value.server_key ? setInfo.value.server_key.passphrase : '';\r\n privateKeyRef.value.DialogVisilble = true;\r\n };\r\n const savePrivateKey = (content,passphrase) => {\r\n setInfo.value.server_key = {\r\n content:content,\r\n passphrase:passphrase,\r\n };\r\n };\r\n\r\n const confirm = () => {\r\n if(verifyParams() == false) return;\r\n context.emit('callback',setInfo.value);\r\n closeDialog();\r\n };\r\n\r\n // 拷贝\r\n const { toClipboard } = useClipboard();\r\n\r\n // 复制\r\n const doCopy = async (content) => {\r\n content += '';\r\n if(!(content && content.length > 0)) {\r\n ElMessage({\r\n message: i18n.global.t('内容为空'),\r\n type: 'warning',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n return;\r\n }\r\n await toClipboard(content);\r\n ElMessage({\r\n message: i18n.global.t('复制成功'),\r\n type: 'success',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n };\r\n\r\n const isShowPassword = ref(false);\r\n\r\n // 重置\r\n const reset = () => {\r\n err_msg.value = '';\r\n isShowPassword.value = false;\r\n setInfo.value = {\r\n server_ip: props.env.server_ip,\r\n server_port: props.env.server_port,\r\n server_user: props.env.server_user,\r\n server_password:props.env.server_password,\r\n server_key: props.env.server_key || null,\r\n authType: props.env.authType || 0,\r\n option: props.env.option,\r\n };\r\n if(setInfo.value.option != '') isForbidInput.value = true;\r\n else isForbidInput.value = false;\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n if(optionBlockRef.value && optionBlockRef.value.DialogVisilble) optionBlockRef.value.closeDialog();\r\n if(privateKeyRef.value && privateKeyRef.value.DialogVisilble) privateKeyRef.value.closeDialog();\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n setInfo,\r\n DialogVisilble,\r\n err_msg,\r\n confirm,\r\n optionBlockRef,\r\n showOption,\r\n optionBlockType,\r\n doOption,\r\n isForbidInput,\r\n newOp,\r\n handleDeleteOption,\r\n reset,\r\n closeDialog,\r\n doCopy,\r\n isShowPassword,\r\n privateKeyRef,\r\n openprivateKeyBlock,\r\n savePrivateKey,\r\n }\r\n }\r\n\r\n\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n.item-class {\r\n display: flex; \r\n align-items: center; \r\n}\r\n\r\n.errInfo{\r\n font-size: 12px;\r\n color: rgb(234, 80, 80);\r\n margin-top: 8px;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n/* 文本溢出省略 */\r\n.ellipsis {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.nowrap {\r\n white-space: nowrap;\r\n}\r\n\r\n.old-option {\r\n color: #67c23a;\r\n}\r\n\r\n.new-option {\r\n color: #f56c6c;\r\n}\r\n\r\n.form-width {\r\n width: 56px;\r\n}\r\n\r\n</style>","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n :before-close=\"closeDialog\"\r\n destroy-on-close\r\n :width=\"420\"\r\n :modal=\"false\"\r\n :title=\"$t('全部配置')\"\r\n modal-class=\"kk-dialog-class\"\r\n draggable\r\n >\r\n <div style=\"margin-top: -27px;\"></div>\r\n <div class=\"no-select\">\r\n <div v-if=\"Object.keys(sshOptions).length > 0\" class=\"kk-border\">\r\n <div v-for=\"(value, key) in sshOptions\" :key=\"key\" >\r\n <div :class=\"['item-class', (aimOption == key) ? 'item-selected' : '']\" @click=\"aimOption = key\">\r\n <FileIcons :style=\"{display: 'flex', alignItems: 'center'}\" name=\"kk.txt\" :width=\"20\" :height=\"20\" :isFolder=\"false\" />\r\n <div class=\"ellipsis\" style=\"margin: 0 10px;\">{{ key }}</div>\r\n <div style=\"flex: 1;\" ></div>\r\n <div @click=\"confirmDeleteOption(key)\" ><el-icon><CircleClose /></el-icon></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div v-else class=\"kk-border\">\r\n <NoData :msg=\"noDataMsg\"></NoData>\r\n </div>\r\n <div class=\"kk-flex\">\r\n <div>{{ $t('配置名') }}:</div>\r\n <div style=\"flex: 1;\">\r\n <el-input size=\"small\" v-model=\"aimOption\" :disabled=\"opType == 0\" @keydown.enter=\"confirm\" class=\"w-50 m-2\" placeholder=\"\">\r\n </el-input>\r\n </div>\r\n <div style=\"margin-left: 10px;\">\r\n <el-button size=\"small\" type=\"primary\" @click=\"confirm\" >\r\n {{ opType ? $t('保存') : $t('选择') }}\r\n </el-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"margin-top: -15px;\"></div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport { CircleClose } from '@element-plus/icons-vue';\r\nimport { ElMessage } from 'element-plus';\r\nimport { deleteDialog } from '@/utils/DeleteDialog';\r\n\r\nimport NoData from '@/components/NoData';\r\n// 引入文件图标组件\r\nimport FileIcons from 'file-icons-vue';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\nexport default {\r\n name: 'OptionBlock',\r\n components: {\r\n FileIcons,\r\n NoData,\r\n CircleClose,\r\n },\r\n props:['opType','sshOptions'],\r\n setup(props,context)\r\n {\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n const noDataMsg = ref(i18n.global.t('暂无配置'));\r\n \r\n // 目标配置\r\n const aimOption = ref('');\r\n \r\n // 确定\r\n const confirm = () => {\r\n if(aimOption.value == '' || aimOption.value.trim() == '') return;\r\n context.emit('callback',aimOption.value.trim());\r\n closeDialog();\r\n };\r\n\r\n // 删除配置\r\n const deleteOption = ref('');\r\n const confirmDeleteOption = (name) => {\r\n deleteOption.value = name;\r\n deleteDialog(i18n.global.t('提示'), i18n.global.t('确定删除此配置吗?'), doDeleteOption);\r\n };\r\n const doDeleteOption = () => {\r\n context.emit('handleDeleteOption', deleteOption.value);\r\n ElMessage({\r\n message: i18n.global.t('删除成功'),\r\n type: 'success',\r\n grouping: true,\r\n });\r\n if(aimOption.value == deleteOption.value) aimOption.value = '';\r\n };\r\n\r\n // 重置\r\n const reset = () => {\r\n noDataMsg.value = i18n.global.t('暂无配置');\r\n aimOption.value = '';\r\n deleteOption.value = '';\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n DialogVisilble,\r\n noDataMsg,\r\n aimOption,\r\n confirm,\r\n confirmDeleteOption,\r\n doDeleteOption,\r\n reset,\r\n closeDialog,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.item-class {\r\n display: flex;\r\n align-items: center;\r\n padding: 5px 10px;\r\n border-bottom: 1px solid #ececec;\r\n cursor: pointer;\r\n width: 100%;\r\n}\r\n\r\n.item-class:hover {\r\n background-color: #f3f3f3;\r\n}\r\n\r\n.item-selected {\r\n background-color: #f3f3f3;\r\n}\r\n\r\n.kk-flex {\r\n display: flex; \r\n align-items: center;\r\n margin-top: 10px;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n.kk-border\r\n{\r\n height: 30.1vh;\r\n overflow-y: scroll;\r\n width: 100%;\r\n border-bottom: 1px solid #ececec;\r\n}\r\n\r\n/* 文本溢出省略 */\r\n.ellipsis {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 18px;\r\n}\r\n</style>","import { createI18n } from 'vue-i18n';\r\nimport en from './en_US.json';\r\n\r\nconst i18n = createI18n({\r\n locale: 'en',\r\n fallbackLocale: 'zh',\r\n messages: { en },\r\n missing: (locale, key) => {\r\n return key;\r\n },\r\n});\r\n\r\nexport default i18n;","import { ElMessageBox } from 'element-plus';\r\nimport { QuestionFilled } from '@element-plus/icons-vue';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\nexport const deleteDialog = (title,content,callback) => {\r\n return ElMessageBox.alert(content || i18n.global.t('确定删除吗?'), title || i18n.global.t('提示'), {\r\n autofocus: false,\r\n customStyle:'font-size: 13px; color: black; width: 260px; user-select: none;',\r\n cancelButtonText: i18n.global.t('取消'),\r\n confirmButtonText: i18n.global.t('确定'),\r\n showCancelButton: true,\r\n showConfirmButton: true,\r\n cancelButtonClass: 'el-button is-text',\r\n confirmButtonClass: 'el-button--danger',\r\n buttonSize: 'small',\r\n icon: QuestionFilled,\r\n type: 'warning',\r\n callback: (action) => {\r\n if(action === 'confirm') callback();\r\n },\r\n });\r\n};","<template>\r\n <div class=\"no-data\" :style=\"viewStyle\" >\r\n <div style=\"flex: 1;\" ></div>\r\n <slot name=\"myslot\" ></slot>\r\n <div style=\"display: flex; align-items: center;\" >\r\n <div>\r\n <img src=\"../assets/no_data.png\" :alt=\"$t('暂无数据')\" style=\"width: 120px;\">\r\n </div>\r\n </div>\r\n <div class=\"msg\">{{ msg }}</div>\r\n <div style=\"flex: 1;\" ></div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { computed } from 'vue';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\nexport default {\r\n name:'NoData',\r\n components: {\r\n },\r\n props: {\r\n msg: {\r\n type:String,\r\n required:false,\r\n default: i18n.global.t('暂无数据'),\r\n },\r\n width:{\r\n type:String,\r\n required:false,\r\n },\r\n height:{\r\n type:String,\r\n required:false,\r\n },\r\n minHeight:{\r\n type:String,\r\n required:false,\r\n },\r\n },\r\n setup(props) {\r\n\r\n const viewStyle = computed(() => {\r\n return {\r\n width: props.width ? props.width : '100%',\r\n height: props.height ? props.height : '100%',\r\n minHeight: props.minHeight ? props.minHeight : '',\r\n }\r\n });\r\n\r\n return {\r\n viewStyle,\r\n }\r\n },\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.no-data {\r\n text-align: center;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.msg {\r\n margin-top: 10px;\r\n color: #909399;\r\n font-size: 14px;\r\n}\r\n</style>","import { render } from \"./NoData.vue?vue&type=template&id=139a934c&scoped=true\"\nimport script from \"./NoData.vue?vue&type=script&lang=js\"\nexport * from \"./NoData.vue?vue&type=script&lang=js\"\n\nimport \"./NoData.vue?vue&type=style&index=0&id=139a934c&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-139a934c\"]])\n\nexport default __exports__","import { render } from \"./OptionBlock.vue?vue&type=template&id=b81572ee&scoped=true\"\nimport script from \"./OptionBlock.vue?vue&type=script&lang=js\"\nexport * from \"./OptionBlock.vue?vue&type=script&lang=js\"\n\nimport \"./OptionBlock.vue?vue&type=style&index=0&id=b81572ee&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-b81572ee\"]])\n\nexport default __exports__","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n :before-close=\"closeDialog\"\r\n :width=\"320\"\r\n :modal=\"false\"\r\n :title=\"$t('导入私钥')\"\r\n modal-class=\"kk-dialog-class\"\r\n draggable\r\n >\r\n <div style=\"margin-top: -32px;\"></div>\r\n <div class=\"no-select\">\r\n <div class=\"kk-flex\" >\r\n <div class=\"form-width\" >{{ $t('私钥') }}:</div>\r\n <el-upload\r\n :show-file-list=\"false\"\r\n :with-credentials=\"true\"\r\n :http-request=\"readPrivateKeyContent\"\r\n :multiple=\"false\"\r\n >\r\n <el-button size=\"small\" type=\"primary\" ><el-icon class=\"el-icon--left\"><Lock /></el-icon>{{ $t('选择') }}</el-button>\r\n </el-upload>\r\n </div>\r\n <div v-if=\"err_msg && err_msg.length > 0\" class=\"errInfo no-select\"> {{ err_msg }} </div>\r\n <div v-else style=\"height: 7px;\" ></div>\r\n <div class=\"kk-flex\">\r\n <div class=\"form-width\" >{{ $t('密码') }}:</div>\r\n <div style=\"flex: 1;\">\r\n <el-input size=\"small\" v-model=\"passphrase\" @keydown.enter=\"confirm\" class=\"w-50 m-2\" :placeholder=\"$t('请输入私钥密码')\">\r\n <template #prefix>\r\n <el-icon><Key /></el-icon>\r\n </template>\r\n </el-input>\r\n </div>\r\n <div style=\"margin-left: 10px;\">\r\n <el-button size=\"small\" type=\"primary\" @click=\"confirm\" >{{ $t('确定') }}</el-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"margin-top: -10px;\"></div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport { ElMessage } from 'element-plus';\r\nimport { Lock, Key } from '@element-plus/icons-vue';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\nexport default {\r\n name: 'PrivateKey',\r\n components: {\r\n Lock,\r\n Key,\r\n },\r\n setup(props,context)\r\n {\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n const err_msg = ref('');\r\n const content = ref(''); \r\n const passphrase = ref('');\r\n \r\n // 确定\r\n const confirm = () => {\r\n context.emit('callback',content.value, passphrase.value);\r\n closeDialog();\r\n };\r\n\r\n // 读取私钥文件\r\n const readPrivateKeyContent = (file) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n if(reader.result.length > 1024*1024) {\r\n ElMessage({\r\n message: i18n.global.t('内容过长'),\r\n type: 'warning',\r\n grouping: true,\r\n });\r\n return;\r\n }\r\n content.value = reader.result;\r\n ElMessage({\r\n message: i18n.global.t('读取成功'),\r\n type: 'success',\r\n grouping: true,\r\n });\r\n };\r\n reader.onerror = () => {\r\n ElMessage({\r\n message: i18n.global.t('读取失败'),\r\n type: 'error',\r\n grouping: true,\r\n });\r\n };\r\n reader.readAsText(file.file);\r\n };\r\n\r\n // 重置\r\n const reset = () => {\r\n err_msg.value = '';\r\n content.value = '';\r\n passphrase.value = '';\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n DialogVisilble,\r\n err_msg,\r\n content,\r\n passphrase,\r\n readPrivateKeyContent,\r\n confirm,\r\n closeDialog,\r\n reset,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.kk-flex {\r\n display: flex; \r\n align-items: center;\r\n margin-top: 10px;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n.errInfo{\r\n font-size: 12px;\r\n color: rgb(234, 80, 80);\r\n margin-top: 8px;\r\n}\r\n\r\n.form-width {\r\n width: 56px;\r\n}\r\n</style>","import { render } from \"./PrivateKey.vue?vue&type=template&id=1dbee2f6&scoped=true\"\nimport script from \"./PrivateKey.vue?vue&type=script&lang=js\"\nexport * from \"./PrivateKey.vue?vue&type=script&lang=js\"\n\nimport \"./PrivateKey.vue?vue&type=style&index=0&id=1dbee2f6&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1dbee2f6\"]])\n\nexport default __exports__","<template>\r\n <el-tooltip popper-class=\"no-select\" :content=\"content\" :disabled=\"!(isShow && isShowTooltip)\" :show-after=\"delay\" placement=\"top\">\r\n <div ref=\"tooltipContent\" class=\"tooltip-content\">\r\n <slot name=\"content\"></slot>\r\n </div>\r\n </el-tooltip>\r\n</template>\r\n\r\n<script>\r\nimport { ref, onMounted, onBeforeUnmount } from 'vue';\r\n\r\nexport default {\r\n name: 'ToolTip',\r\n props: {\r\n content: {\r\n type:String,\r\n required:true,\r\n default:'',\r\n },\r\n delay: {\r\n type:Number,\r\n required:false,\r\n default:200,\r\n },\r\n isShow: {\r\n type:Boolean,\r\n required:false,\r\n default:true,\r\n }\r\n },\r\n setup() {\r\n\r\n const tooltipContent = ref(null);\r\n const isShowTooltip = ref(false);\r\n\r\n // 检查内容是否溢出\r\n const checkOverflow = () => {\r\n setTimeout(() => {\r\n if(tooltipContent.value && tooltipContent.value.firstElementChild) {\r\n isShowTooltip.value = tooltipContent.value.firstElementChild.scrollWidth > tooltipContent.value.firstElementChild.offsetWidth;\r\n }\r\n else isShowTooltip.value = false;\r\n },1);\r\n };\r\n\r\n // 使用ResizeObserver监听尺寸变化\r\n let resizeObserver = null;\r\n\r\n const observeSizeChanges = () => {\r\n if(tooltipContent.value) {\r\n resizeObserver = new ResizeObserver(() => {\r\n checkOverflow();\r\n });\r\n resizeObserver.observe(tooltipContent.value);\r\n }\r\n };\r\n\r\n onMounted(() => {\r\n checkOverflow();\r\n observeSizeChanges();\r\n });\r\n\r\n onBeforeUnmount(() => {\r\n if(resizeObserver && tooltipContent.value) {\r\n resizeObserver.unobserve(tooltipContent.value);\r\n resizeObserver.disconnect();\r\n }\r\n });\r\n\r\n return {\r\n tooltipContent,\r\n isShowTooltip,\r\n checkOverflow,\r\n };\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.tooltip-content {\r\n display: inline-block;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n</style> ","import { render } from \"./ToolTip.vue?vue&type=template&id=7eeec75d&scoped=true\"\nimport script from \"./ToolTip.vue?vue&type=script&lang=js\"\nexport * from \"./ToolTip.vue?vue&type=script&lang=js\"\n\nimport \"./ToolTip.vue?vue&type=style&index=0&id=7eeec75d&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7eeec75d\"]])\n\nexport default __exports__","import { render } from \"./ConnectSetting.vue?vue&type=template&id=24fbdd4c&scoped=true\"\nimport script from \"./ConnectSetting.vue?vue&type=script&lang=js\"\nexport * from \"./ConnectSetting.vue?vue&type=script&lang=js\"\n\nimport \"./ConnectSetting.vue?vue&type=style&index=0&id=24fbdd4c&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-24fbdd4c\"]])\n\nexport default __exports__","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n destroy-on-close\r\n :width=\"426\"\r\n :title=\"$t('偏好设置')\"\r\n :modal=\"false\"\r\n modal-class=\"kk-dialog-class\"\r\n :before-close=\"closeDialog\"\r\n draggable\r\n >\r\n <div style=\"margin-top: -27px;\"></div>\r\n <div class=\"no-select\">\r\n <div class=\"item-class\" style=\"margin-bottom: 13px;\">\r\n <div class=\"form-width\" >{{ $t('颜色') }}:</div>\r\n <div class=\"item-class\">\r\n <div>{{ $t('背景色') }}</div>\r\n <div style=\"margin: 0 20px;\" >\r\n <el-color-picker v-model=\"setInfo.bg\" />\r\n </div>\r\n </div>\r\n <div style=\"width: 20px;\" ></div>\r\n <div class=\"item-class\">\r\n <div>{{ $t('前景色') }}</div>\r\n <div style=\"margin: 0 20px;\" >\r\n <el-color-picker v-model=\"setInfo.fg\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"item-class\" style=\"margin-bottom: 13px;\">\r\n <div class=\"form-width\" >{{ $t('文本') }}:</div>\r\n <div class=\"item-class\">\r\n <div>{{ $t('字体') }}</div>\r\n <el-dropdown style=\"margin: 0 20px;\" hide-timeout=\"300\" >\r\n <span class=\"a-link\" >{{ setInfo.fontFamily }}<el-icon class=\"el-icon--right\"><arrow-down /></el-icon></span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <template v-for=\"(font,index) in fontFamilyList\" :key=\"index\" >\r\n <el-dropdown-item @click=\"setInfo.fontFamily = font\" >{{ font }}</el-dropdown-item>\r\n </template>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n <div class=\"item-class\">\r\n <div>{{ $t('字号') }}</div>\r\n <el-dropdown style=\"margin: 0 20px;\" hide-timeout=\"300\" >\r\n <span class=\"a-link\" >{{ setInfo.fontSize }}<el-icon class=\"el-icon--right\"><arrow-down /></el-icon></span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <template v-for=\"(size,index) in fontSizeList\" :key=\"index\" >\r\n <el-dropdown-item @click=\"setInfo.fontSize = size\" >{{ size }}</el-dropdown-item>\r\n </template>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"item-class\" style=\"margin-bottom: 8px;\">\r\n <div class=\"form-width\" >{{ $t('光标') }}:</div>\r\n <div class=\"item-class\">\r\n <div>{{ $t('样式') }}</div>\r\n <el-dropdown style=\"margin: 0 20px;\" hide-timeout=\"300\" >\r\n <span class=\"a-link\" >{{ setInfo.cursorStyle }}<el-icon class=\"el-icon--right\"><arrow-down /></el-icon></span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <template v-for=\"(style,index) in cursorStyleList\" :key=\"index\" >\r\n <el-dropdown-item @click=\"setInfo.cursorStyle = style\" >{{ style }}</el-dropdown-item>\r\n </template>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n <div style=\"width: 15px;\" ></div>\r\n <div class=\"item-class\">\r\n <div>{{ $t('闪烁') }}</div>\r\n <div style=\"margin: 0 20px;\" >\r\n <el-switch v-model=\"setInfo.cursorBlink\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"item-class\" style=\"margin-bottom: 13px;\">\r\n <div class=\"form-width\" >{{ $t('功能') }}:</div>\r\n <div class=\"item-class\">\r\n <div>TCode</div>\r\n <div style=\"margin: 0 20px;\" >\r\n <el-switch v-model=\"setInfo.tCode\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"item-class\" style=\"margin-bottom: 5px;\">\r\n <div class=\"form-width\" >{{ $t('其它') }}:</div>\r\n <div class=\"item-class\">\r\n <div>{{ $t('语言') }}</div>\r\n <el-dropdown style=\"margin: 0 20px;\" hide-timeout=\"300\" >\r\n <span class=\"a-link\" >{{ mapValueToLabel(setInfo.lang) }}<el-icon class=\"el-icon--right\"><arrow-down /></el-icon></span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <template v-for=\"(lang,index) in langList\" :key=\"index\" >\r\n <el-dropdown-item @click=\"setInfo.lang = lang.value\" >{{ lang.label }}</el-dropdown-item>\r\n </template>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"margin-bottom: 5px;\"></div>\r\n <div style=\"display: flex; border-top: 1px solid #f1f2f4;\">\r\n <div style=\"flex: 1;\"></div>\r\n <el-button size=\"small\" type=\"primary\" @click=\"confirm\" style=\"margin-bottom: -15px; margin-top: 10px;\">\r\n {{ $t('确定') }}\r\n </el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { ref, computed } from 'vue';\r\nimport { ArrowDown } from '@element-plus/icons-vue';\r\n\r\nexport default {\r\n name:'StyleSetting',\r\n components: {\r\n ArrowDown,\r\n },\r\n props:['env','os'],\r\n setup(props,context) {\r\n\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n\r\n // 语言列表\r\n const langList = [{label:\"English\",value:\"en\"}, {label:\"Chinese\",value:\"zh\"}];\r\n const mapValueToLabel = (lang) => {\r\n const item = langList.find(item => item.value === lang);\r\n return item ? item.label : \"English\";\r\n };\r\n\r\n // 字体列表\r\n const fontFamilyList = computed(() => {\r\n if(props.os == \"Windows\") {\r\n return ['Courier New','Consolas','Monospace','Lucida Console'];\r\n }\r\n else if(props.os == \"Mac\" || props.os == \"iOS\") {\r\n return ['Courier New','Menlo','Monaco','Courier'];\r\n }\r\n else return ['Courier New','Consolas','Monospace','Lucida Console'];\r\n });\r\n // 字号列表\r\n const fontSizeList = [12,14,16,18,20];\r\n // 光标样式列表\r\n const cursorStyleList = ['block','underline','bar'];\r\n\r\n // 设置信息\r\n const setInfo = ref({\r\n lang: props.env.lang,\r\n bg: props.env.bg,\r\n fg: props.env.fg,\r\n fontFamily: props.env.fontFamily,\r\n fontSize: props.env.fontSize,\r\n cursorStyle: props.env.cursorStyle,\r\n cursorBlink: props.env.cursorBlink,\r\n tCode: props.env.tCode,\r\n });\r\n const confirm = () => {\r\n context.emit('callback',setInfo.value);\r\n closeDialog();\r\n };\r\n\r\n // 重置\r\n const reset = () => {\r\n setInfo.value = {\r\n lang: props.env.lang,\r\n bg: props.env.bg,\r\n fg: props.env.fg,\r\n fontFamily: props.env.fontFamily,\r\n fontSize: props.env.fontSize,\r\n cursorStyle: props.env.cursorStyle,\r\n cursorBlink: props.env.cursorBlink,\r\n tCode: props.env.tCode,\r\n };\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n langList,\r\n mapValueToLabel,\r\n fontFamilyList,\r\n fontSizeList,\r\n cursorStyleList,\r\n setInfo,\r\n DialogVisilble,\r\n confirm,\r\n closeDialog,\r\n }\r\n }\r\n\r\n\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.item-class {\r\n display: flex; \r\n align-items: center; \r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n.form-width {\r\n width: 60px;\r\n}\r\n\r\n</style>","import { render } from \"./StyleSetting.vue?vue&type=template&id=1bef79cc&scoped=true\"\nimport script from \"./StyleSetting.vue?vue&type=script&lang=js\"\nexport * from \"./StyleSetting.vue?vue&type=script&lang=js\"\n\nimport \"./StyleSetting.vue?vue&type=style&index=0&id=1bef79cc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1bef79cc\"]])\n\nexport default __exports__","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n :before-close=\"closeDialog\"\r\n :title=\"$t('文件管理')\"\r\n width=\"50%\"\r\n :modal=\"false\"\r\n modal-class=\"kk-dialog-class\"\r\n align-center\r\n draggable\r\n style=\"position: relative;\"\r\n >\r\n <div style=\"margin-top: -27px;\"></div>\r\n <div>\r\n <div class=\"title kk-flex\" >\r\n <div class=\"ellipsis\" style=\"flex: 1;\">\r\n <div v-if=\"isShowDirInput == true\" >\r\n <el-input id=\"aimDirInput\" v-model=\"dir\" :placeholder=\"$t('输入目录路径')\" size=\"small\" @keydown.enter=\"isShowDirInput = false;\" @blur=\"isShowDirInput = false;\" @mousedown.stop @dblclick.stop @change=\"dirInputCallback\" />\r\n </div>\r\n <div class=\"kk-flex no-select ellipsis\" v-else @dblclick=\"doShowDirInput\" >\r\n <div v-for=\"(item, index) in dirLevels\" :key=\"index\" class=\"kk-flex\" >\r\n <div>/</div>\r\n <div class=\"dir-level\" @click=\"changeDirByLevel($event,index)\" >{{ item }}</div>\r\n </div>\r\n <div>/</div>\r\n </div>\r\n </div>\r\n <div class=\"kk-flex\" >\r\n <div class=\"hover-class\" @click=\"doRefresh\" style=\"margin-left: 10px; font-size: 18px; cursor: pointer;\"><el-icon><Refresh /></el-icon></div>\r\n <div v-if=\"dir && dir != '/'\" class=\"hover-class\" @click=\"doReturn\" style=\"margin-left: 10px; font-size: 18px; cursor: pointer;\"><el-icon><Fold /></el-icon></div>\r\n <div v-else class=\"disabled-function\" style=\"margin-left: 10px; font-size: 18px; cursor: pointer;\"><el-icon><Fold /></el-icon></div>\r\n <div v-if=\"selectedFiles.length == 1\" class=\"hover-class\" @click=\"doDownload\" style=\"margin-left: 10px; font-size: 18px; cursor: pointer;\"><el-icon><Download /></el-icon></div>\r\n <div v-else class=\"disabled-function\" style=\"margin-left: 10px; font-size: 18px; cursor: pointer;\"><el-icon><Download /></el-icon></div>\r\n <div v-if=\"dirStatus == 0\" class=\"hover-class\" style=\"margin-left: 10px; font-size: 18px; cursor: pointer;\">\r\n <el-dropdown v-show=\"DialogVisilble\" style=\"line-height: unset;\" placement=\"bottom-end\" size=\"small\" trigger=\"click\" >\r\n <div class=\"hover-class\" style=\"font-size: 18px; cursor: pointer;\"><el-icon><Upload /></el-icon></div>\r\n <template #dropdown>\r\n <el-dropdown-menu v-show=\"DialogVisilble\" class=\"no-select\" style=\"text-align: center;\">\r\n <el-dropdown-item @click=\"fileUploadTypeChoose(0)\" >\r\n <div class=\"kk-flex\" >\r\n <div><el-icon><DocumentAdd /></el-icon></div>\r\n <div>{{ $t('文件') }}</div>\r\n </div>\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"fileUploadTypeChoose(1)\" >\r\n <div class=\"kk-flex\" >\r\n <div><el-icon><FolderAdd /></el-icon></div>\r\n <div>{{ $t('文件夹') }}</div>\r\n </div>\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"fileUploadTypeChoose(2)\" >\r\n <div class=\"kk-flex\" >\r\n <div><el-icon><Link /></el-icon></div>\r\n <div>URL</div>\r\n </div>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n <div v-else class=\"disabled-function\" style=\"margin-left: 10px; font-size: 18px; cursor: pointer;\"><el-icon><Upload /></el-icon></div>\r\n </div>\r\n </div>\r\n <div id=\"fileArea\" ref=\"fileAreaRef\" element-loading-text=\"Loading...\" v-loading=\"loading\" class=\"list-class no-select\" \r\n @contextmenu=\"handleContextMenu\" @scroll=\"handleScroll\" \r\n @dragover=\"preventDefault\" @drop=\"handleFileDrag\" \r\n tabindex=\"0\" @keydown=\"handleShortcutKeys\" >\r\n <div v-if=\"files.length != 0\" >\r\n <div v-for=\"item in files\" :key=\"item.id\" >\r\n <template v-if=\"item.isDirectory == true\">\r\n <div :class=\"[isSelected(item.id) != -1 ? 'item-selected' : '', 'item-class']\" @click=\"addSelectFile($event,item)\" @dblclick=\"changeDir(dir + item.name + '/')\" @contextmenu=\"addSelectFile($event,item,false)\" >\r\n <FileIcons :style=\"{display: 'flex', alignItems: 'center'}\" :iconStyle=\"{opacity: (item.name[0] == '.' || (isClipboard(item.id) != -1 && isCtrlx)) ? 0.5 : 1}\" :name=\"item.name\" :width=\"20\" :height=\"20\" :isFolder=\"item.isDirectory\" :isLink=\"item.isSymlink\" />\r\n <div style=\"margin: 0 10px;\" v-if=\"isShowRenameInput == true && renameFile && item.id == renameFile.id\" >\r\n <el-input id=\"rename\" v-model=\"renameFile.name\" placeholder=\"\" size=\"small\" @keydown.enter=\"isShowRenameInput = false;\" @blur=\"isShowRenameInput = false;\" @keydown.stop @contextmenu.stop @mousedown.stop @dblclick.stop @change=\"handleRename(item)\" />\r\n </div>\r\n <ToolTip :isShow=\"!isShowMenu\" :content=\"item.name\" :delay=\"1000\" >\r\n <template #content>\r\n <div v-if=\"!(isShowRenameInput == true && renameFile && item.id == renameFile.id)\" class=\"ellipsis\" style=\"margin: 0 10px;\">\r\n {{ item.name }}\r\n </div>\r\n </template>\r\n </ToolTip>\r\n </div>\r\n </template>\r\n <template v-else>\r\n <div :class=\"[isSelected(item.id) != -1 ? 'item-selected' : '', 'item-class']\" @click=\"addSelectFile($event,item)\" @dblclick=\"preViewFile(item.name)\" @contextmenu=\"addSelectFile($event,item,false)\" >\r\n <FileIcons :style=\"{display: 'flex', alignItems: 'center'}\" :iconStyle=\"{opacity: (item.name[0] == '.' || (isClipboard(item.id) != -1 && isCtrlx)) ? 0.5 : 1}\" :name=\"item.name\" :width=\"20\" :height=\"20\" :isFolder=\"item.isDirectory\" :isLink=\"item.isSymlink\" />\r\n <div style=\"margin: 0 10px;\" v-if=\"isShowRenameInput == true && renameFile && item.id == renameFile.id\" >\r\n <el-input id=\"rename\" v-model=\"renameFile.name\" placeholder=\"\" size=\"small\" @keydown.enter=\"isShowRenameInput = false;\" @blur=\"isShowRenameInput = false;\" @keydown.stop @contextmenu.stop @mousedown.stop @dblclick.stop @change=\"handleRename(item)\" />\r\n </div>\r\n <ToolTip :isShow=\"!isShowMenu\" :content=\"item.name\" :delay=\"1000\" >\r\n <template #content>\r\n <div v-if=\"!(isShowRenameInput == true && renameFile && item.id == renameFile.id)\" class=\"ellipsis\" style=\"margin: 0 10px;\">\r\n {{ item.name }}\r\n </div>\r\n </template>\r\n </ToolTip>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n <div v-else>\r\n <NoData height=\"248px\" @contextmenu=\"selectedFiles = []\" v-if=\"loading == false\" :msg=\"noDataMsg\"></NoData>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"margin-top: -12px;\"></div>\r\n </el-dialog>\r\n\r\n <!-- 文件上传 -->\r\n <el-upload\r\n v-show=\"false\"\r\n :show-file-list=\"false\"\r\n :with-credentials=\"true\"\r\n :http-request=\"doUpload\"\r\n :multiple=\"true\"\r\n >\r\n <el-button v-show=\"false\" size=\"small\" type=\"primary\" id=\"fileUploadInputButton\" ></el-button>\r\n </el-upload>\r\n <!-- 文件夹上传 -->\r\n <input\r\n v-show=\"false\"\r\n type=\"file\"\r\n webkitdirectory\r\n @change=\"folderInputUploadPrehandle\"\r\n id=\"folderUploadInput\"\r\n />\r\n <!-- 文件URL上传 -->\r\n <FileUrl ref=\"fileUrlRef\" @callback=\"fileUrlUpload\" ></FileUrl> \r\n <TxtPreview ref=\"txtPreviewRef\" @doSave=\"doSave\" ></TxtPreview>\r\n <MkFile ref=\"mkFileRef\" @callback=\"handleMkFile\" ></MkFile>\r\n\r\n <!-- 文件属性 -->\r\n <FileAttr :sshKey=\"sshKey\" ref=\"fileAttrRef\" @callback=\"doRename\" @editPermissions=\"editPermissions\" ></FileAttr>\r\n\r\n <!-- 菜单项 -->\r\n <div ref=\"menuBlockRef\" @contextmenu=\"preventDefault\" v-show=\"isShowMenu\" class=\"kk-menu no-select\">\r\n <div style=\"border-bottom: 1px solid #ddd;\" class=\"kk-menu-item\" @click=\"handleMenuSelect(1)\" key=\"1\" >{{ $t('刷新') }}</div>\r\n <div :class=\"['kk-menu-item', selectedFiles.length != 1 ? 'disabled':'']\" @click=\"handleMenuSelect(2)\" key=\"2\" >{{ $t('打开') }}</div>\r\n <div style=\"border-bottom: 1px solid #ddd;\" :class=\"['kk-menu-item', selectedFiles.length > 1 ? 'disabled':'']\" @click=\"handleMenuSelect(3)\" key=\"3\" >{{ $t('复制路径') }}</div>\r\n <div style=\"border-bottom: 1px solid #ddd;\" v-show=\"selectedFiles.length == 1 && isZipFile(selectedFiles[0].name)\" :class=\"['kk-menu-item', !(selectedFiles.length == 1 && isZipFile(selectedFiles[0].name)) ? 'disabled':'']\" @click=\"handleMenuSelect(9)\" key=\"9\" >{{ $t('解压') }}</div>\r\n <div :class=\"['kk-menu-item', selectedFiles.length != 1 ? 'disabled':'']\" @click=\"handleMenuSelect(4)\" key=\"4\" >{{ $t('下载') }}</div>\r\n <div :class=\"['kk-menu-item', dirStatus == 1 ? 'disabled':'']\" @click=\"handleMenuSelect(5)\" key=\"5\" >{{ $t('新建') }}</div>\r\n <div :class=\"['kk-menu-item', selectedFiles.length != 1 ? 'disabled':'']\" @click=\"handleMenuSelect(6)\" key=\"6\" >{{ $t('重命名') }}</div>\r\n <el-popconfirm :title=\"$t('确定删除此文件吗?')\"\r\n :confirm-button-text=\"$t('确定')\" :cancel-button-text=\"$t('取消')\"\r\n @confirm=\"confirmPopConfirm\" @cancel=\"cancelPopConfirm\"\r\n :visible=\"isShowMenu && isShowPop\" trigger=\"click\"\r\n :popper-style=\"{zIndex: 3466,fontSize:'13px',color:'black'}\" popper-class=\"confirmPop\"\r\n placement=\"right\" confirm-button-type=\"danger\" >\r\n <template #reference>\r\n <div :class=\"['kk-menu-item', selectedFiles.length == 0 ? 'disabled':'']\" key=\"7\" >\r\n <div @click=\"handleMenuSelect(7)\" >{{ $t('删除') }}</div>\r\n </div>\r\n </template>\r\n </el-popconfirm>\r\n <div style=\"border-top: 1px solid #ddd;\" :class=\"['kk-menu-item', selectedFiles.length != 1 ? 'disabled':'']\" @click=\"handleMenuSelect(8)\" key=\"8\" >{{ $t('属性') }}</div>\r\n </div>\r\n\r\n</template>\r\n\r\n<script>\r\nimport { ref, onUnmounted, onMounted, watch } from 'vue';\r\nimport useClipboard from \"vue-clipboard3\";\r\nimport $ from 'jquery';\r\nimport { ElMessage } from 'element-plus';\r\nimport { http_base_url } from '@/utils/BaseUrl';\r\nimport { Refresh, Fold, Download, Upload, DocumentAdd, FolderAdd, Link } from '@element-plus/icons-vue';\r\nimport { escapeItem, escapePath } from '@/utils/StringUtil';\r\nimport { isZipFile } from '@/utils/FileSuffix';\r\nimport { getChmodValue } from '@/utils/CalcPriority';\r\nimport ToolTip from './ToolTip.vue';\r\n\r\nimport NoData from '@/components/NoData';\r\nimport TxtPreview from './preview/TxtPreview';\r\nimport MkFile from './MkFile';\r\nimport FileAttr from './FileAttr';\r\nimport FileUrl from './FileUrl';\r\n\r\nimport i18n from \"@/locales/i18n\";\r\n\r\n// 引入文件图标组件\r\nimport FileIcons from 'file-icons-vue';\r\n\r\nexport default {\r\n name:'FileBlock',\r\n components: {\r\n ToolTip,\r\n NoData,\r\n FileIcons,\r\n TxtPreview,\r\n MkFile,\r\n FileAttr,\r\n FileUrl,\r\n Refresh,\r\n Fold,\r\n Download,\r\n Upload,\r\n DocumentAdd,\r\n FolderAdd,\r\n Link,\r\n },\r\n props:['sshKey','os'],\r\n setup(props) {\r\n\r\n // 加载\r\n const loading = ref(true);\r\n\r\n // 拷贝\r\n const { toClipboard } = useClipboard();\r\n\r\n const files = ref([]);\r\n const selectedFiles = ref([]);\r\n let lastSelectedIndex = -1;\r\n const addSelectFile = (event, item, click=true) => {\r\n event.preventDefault();\r\n const index = isSelected(item.id);\r\n // 右键\r\n if(!click) {\r\n if(index == -1) {\r\n lastSelectedIndex = item.index;\r\n selectedFiles.value = [];\r\n selectedFiles.value.push(item);\r\n }\r\n return;\r\n } \r\n // 单击\r\n // shift\r\n if(event.shiftKey) {\r\n if(selectedFiles.value.length == 0 || lastSelectedIndex == -1 || lastSelectedIndex >= files.value.length) {\r\n selectedFiles.value = [];\r\n for(let i=0;i<=item.index;i++) selectedFiles.value.push({...files.value[i]});\r\n lastSelectedIndex = -1;\r\n }\r\n else {\r\n selectedFiles.value = [];\r\n const start = Math.min(item.index,lastSelectedIndex);\r\n const end = Math.max(item.index,lastSelectedIndex);\r\n for(let i=start;i<=end;i++) selectedFiles.value.push({...files.value[i]});\r\n }\r\n }\r\n // ctrl\r\n else if((props.os == \"Windows\" && event.ctrlKey) || ((props.os == \"Mac\" || props.os == \"iOS\") && event.metaKey)) {\r\n lastSelectedIndex = item.index;\r\n if(index != -1) selectedFiles.value.splice(index, 1);\r\n else selectedFiles.value.push(item);\r\n }\r\n else {\r\n lastSelectedIndex = item.index;\r\n selectedFiles.value = [];\r\n selectedFiles.value.push(item);\r\n }\r\n };\r\n const isSelected = (id) => {\r\n for(let i=0;i<selectedFiles.value.length;i++) {\r\n if(id == selectedFiles.value[i].id) return i;\r\n }\r\n return -1;\r\n };\r\n const isClipboard = (id) => {\r\n for(let i=0;i<fileClipboard.value.files.length;i++) {\r\n if(id == fileClipboard.value.files[i].id) return i;\r\n }\r\n return -1;\r\n };\r\n const getFileInfoByName = (name) => {\r\n for(let i=0;i<files.value.length;i++) {\r\n if(files.value[i].name == name) return files.value[i];\r\n }\r\n return null;\r\n };\r\n\r\n const dir = ref('');\r\n const dirLevels = ref([]);\r\n // 保证路径正确\r\n const confirmDirCorrect = () => {\r\n if(dir.value == '' || dir.value[0] != '/') dir.value = '/' + dir.value;\r\n if(dir.value[dir.value.length - 1] != '/') dir.value = dir.value + '/';\r\n dir.value = dir.value.replace(/\\/{2,}/g, '/');\r\n // 更新路径显示\r\n calcDirLevel(dir.value);\r\n };\r\n const calcDirLevel = (fullPath) => {\r\n if(fullPath == '/') dirLevels.value = [];\r\n else dirLevels.value = fullPath.substring(1,fullPath.length - 1).split('/');\r\n };\r\n const changeDirByLevel = (event,index) => {\r\n // not ctrl\r\n if(!((props.os == \"Windows\" && event.ctrlKey) || ((props.os == \"Mac\" || props.os == \"iOS\") && event.metaKey))) return;\r\n event.preventDefault();\r\n let aimDir = '/';\r\n for(let i=0;i<=index;i++) {\r\n aimDir += dirLevels.value[i];\r\n aimDir += '/';\r\n }\r\n changeDir(aimDir);\r\n };\r\n\r\n // 获取初始家目录\r\n const isShowDirInput = ref(false);\r\n const getInitDir = () => {\r\n if(dir.value != '') return;\r\n $.ajax({\r\n url: http_base_url + '/home',\r\n type:'get',\r\n data:{\r\n time:new Date().getTime(),\r\n sshKey:props.sshKey,\r\n },\r\n success(resp){\r\n if(resp.status == 'success') {\r\n noDataMsg.value = i18n.global.t('暂无文件');\r\n dirStatus.value = 0;\r\n dir.value = resp.data.path;\r\n confirmDirCorrect();\r\n selectedFiles.value = [];\r\n files.value = [];\r\n getDirList();\r\n }\r\n else {\r\n noDataMsg.value = resp.info;\r\n dirStatus.value = 1;\r\n loading.value = false;\r\n }\r\n }\r\n });\r\n };\r\n \r\n // 获取当前路径下的文件列表\r\n const noDataMsg = ref(i18n.global.t('暂无文件'));\r\n // 目录状态:0 正常 / 1 目录不存在、无权限等\r\n const dirStatus = ref(0);\r\n const getDirList = () => {\r\n if(dir.value == '') {\r\n getInitDir();\r\n return;\r\n }\r\n let now_dir = dir.value;\r\n $.ajax({\r\n url: http_base_url + '/ls',\r\n type:'get',\r\n data:{\r\n time:new Date().getTime(),\r\n sshKey:props.sshKey,\r\n path:now_dir,\r\n },\r\n beforeSend: function() { // 发送请求前执行的方法\r\n loading.value = true;\r\n files.value = [];\r\n },\r\n success(resp){\r\n if(now_dir == dir.value) {\r\n selectedFiles.value = [];\r\n if(resp.status == 'success') {\r\n files.value = resp.data.files;\r\n noDataMsg.value = i18n.global.t('暂无文件');\r\n dirStatus.value = 0;\r\n lastSelectedIndex = -1;\r\n fileAreaRef.value.tabindex = '0';\r\n fileAreaRef.value.focus();\r\n if(fileAttrRef.value && fileAttrRef.value.DialogVisilble) {\r\n let nowFileInfo = getFileInfoByName(fileAttrRef.value.fileInfo.name);\r\n if(nowFileInfo) {\r\n fileAttrRef.value.reset();\r\n fileAttrRef.value.DialogVisilble = true;\r\n fileAttrRef.value.fileInfo = nowFileInfo;\r\n fileAttrRef.value.fileDir = dir.value;\r\n fileAttrRef.value.rename = nowFileInfo.name;\r\n if(nowFileInfo.isDirectory) fileAttrRef.value.getFolderInclude();\r\n else fileAttrRef.value.getFileSize();\r\n }\r\n else fileAttrRef.value.closeDialog();\r\n }\r\n }\r\n else {\r\n files.value = [];\r\n noDataMsg.value = resp.info;\r\n dirStatus.value = 1;\r\n lastSelectedIndex = -1;\r\n fileAreaRef.value.tabindex = '0';\r\n fileAreaRef.value.focus();\r\n }\r\n }\r\n },\r\n complete: function() { // 发送请求完成后执行的方法\r\n if(now_dir == dir.value) loading.value = false;\r\n }\r\n });\r\n };\r\n\r\n // 远程url参数规范: sshKey不能是第一个参数,path必须是最后一个参数,sshKey和path必须连在一起\r\n // 获取远程文件url\r\n const getRemoteFileUrl = (name, path) => {\r\n return http_base_url + '/download/remote/file' + '?time=' + new Date().getTime() + '&fileName=' + encodeURIComponent(name) + '&sshKey=' + props.sshKey + '&path=' + encodeURIComponent(path ? path : dir.value);\r\n };\r\n // 获取远程文件夹url\r\n const getRemoteFolderUrl = (name, path) => {\r\n return http_base_url + '/download/remote/folder' + '?time=' + new Date().getTime() + '&folderName=' + encodeURIComponent(escapeItem(name)) + '&sshKey=' + props.sshKey + '&path=' + encodeURIComponent(escapePath(path ? path : dir.value));\r\n };\r\n\r\n // 解析文件url的path\r\n const parseUrl = (url) => {\r\n let urlParams = {key:'', path:null};\r\n let indexKey = url.indexOf('&sshKey=');\r\n let indexPath = url.indexOf('&path=');\r\n if(indexKey != -1 && indexPath != -1) urlParams.key = url.substring(indexKey + 8, indexPath);\r\n if(indexPath != -1) urlParams.path = decodeURIComponent(url.substring(indexPath + 6));\r\n return urlParams;\r\n };\r\n\r\n // 下载远程文件\r\n const downloadRemoteFile = (name) => {\r\n if(isShowDirInput.value == true) return;\r\n let a = document.createElement('a');\r\n a.href = getRemoteFileUrl(name);\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n };\r\n\r\n // 下载文件夹\r\n const downloadDir = (name) => {\r\n if(isShowDirInput.value == true) return;\r\n let a = document.createElement('a');\r\n a.href = getRemoteFolderUrl(name);\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n };\r\n\r\n // 更新目录路径\r\n const changeDir = (new_dir) => {\r\n if(isShowDirInput.value == true) return;\r\n dir.value = new_dir;\r\n confirmDirCorrect();\r\n selectedFiles.value = [];\r\n getDirList();\r\n };\r\n\r\n // 更改路径回调\r\n const dirInputCallback = () => {\r\n isShowDirInput.value = false;\r\n confirmDirCorrect();\r\n selectedFiles.value = [];\r\n getDirList();\r\n };\r\n\r\n // 刷新文件列表\r\n const doRefresh = () => {\r\n isShowDirInput.value = false;\r\n getDirList();\r\n };\r\n // 返回上一级\r\n const doReturn = () => {\r\n if(isShowDirInput.value == true) return;\r\n if(dir.value == '/') return;\r\n if(dir.value[dir.value.length - 1] == '/') dir.value = dir.value.substring(0,dir.value.length - 1);\r\n let index = dir.value.lastIndexOf('/');\r\n if(index != -1) dir.value = dir.value.substring(0,index + 1);\r\n confirmDirCorrect();\r\n selectedFiles.value = [];\r\n doRefresh();\r\n };\r\n // 下载文件/文件夹\r\n const doDownload = () => {\r\n if(isShowDirInput.value == true) return;\r\n if(selectedFiles.value.length == 1 && selectedFiles.value[0].name && selectedFiles.value[0].isDirectory) downloadDir(selectedFiles.value[0].name);\r\n if(selectedFiles.value.length == 1 && selectedFiles.value[0].name && !selectedFiles.value[0].isDirectory) downloadRemoteFile(selectedFiles.value[0].name);\r\n };\r\n // 上传文件\r\n const chunkSize = 1024 * 2173; // 每一片大小2173kB\r\n const doUpload = async (fileData, data={}) => {\r\n try {\r\n if(isShowDirInput.value == true) return;\r\n let file = fileData.file;\r\n if(!file) return;\r\n // 文件切片\r\n const fileName = file.name;\r\n const fileSize = file.size;\r\n // 允许上传空文件\r\n const chunks = parseInt(Math.ceil(fileSize / chunkSize)) == 0 ? 1 : parseInt(Math.ceil(fileSize / chunkSize));\r\n const fileId = file.uid;\r\n let chunkIndex = 1;\r\n const path = data.pathVal ? data.pathVal : dir.value;\r\n\r\n // 大文件开始上传提示\r\n if(fileSize > 20*1024*1024 && !data.noStartUpLoad) {\r\n ElMessage({\r\n message: data.startUpLoad ? data.startUpLoad : i18n.global.t('开始上传'),\r\n type: 'success',\r\n grouping: true,\r\n });\r\n }\r\n\r\n // 分片上传\r\n for(let chunk=chunkIndex;chunk<=chunks;chunk++) {\r\n // 上传逻辑\r\n let start = (chunk-1) * chunkSize;\r\n let end = start + chunkSize >= fileSize ? fileSize : start + chunkSize;\r\n let chunkFile = file.slice(start, end);\r\n let formData = new FormData();\r\n formData.append('file',chunkFile);\r\n formData.append('fileName',fileName);\r\n formData.append('chunks',chunks);\r\n formData.append('chunk',chunk);\r\n formData.append('totalSize',fileSize);\r\n formData.append('id',fileId);\r\n formData.append('sshKey',props.sshKey);\r\n formData.append('path',path);\r\n\r\n await $.ajax({\r\n url: http_base_url + '/upload',\r\n type:'post',\r\n data: formData,\r\n contentType : false,\r\n processData : false,\r\n success(resp){\r\n // 文件后台上传中\r\n if(resp.code == 202) {\r\n ElMessage({\r\n message: data.alert ? data.alert : resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n if(path == dir.value) {\r\n setTimeout(() => {\r\n getDirList();\r\n }, Math.min(1000, 500 + chunks * 10));\r\n }\r\n }\r\n // 文件片上传成功\r\n // else if(resp.code == 203) {\r\n\r\n // }\r\n // 文件片上传失败\r\n else if(resp.code == 502) {\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n })\r\n chunk = chunks + 1;\r\n }\r\n // 文件片缺失\r\n else if(resp.code == 503) {\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n })\r\n chunk = chunks + 1;\r\n }\r\n // 上传文件大小不一致\r\n else if(resp.code == 504) {\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n })\r\n chunk = chunks + 1;\r\n }\r\n // ssh连接断开\r\n else if(resp.code == 602) {\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n })\r\n chunk = chunks + 1;\r\n }\r\n },\r\n });\r\n }\r\n } catch (error) {\r\n ElMessage({\r\n message: i18n.global.t(\"文件上传失败\"),\r\n type: \"error\",\r\n grouping: true,\r\n })\r\n } \r\n };\r\n\r\n const doShowDirInput = (event) => {\r\n // ctrl\r\n if((props.os == \"Windows\" && event.ctrlKey) || ((props.os == \"Mac\" || props.os == \"iOS\") && event.metaKey)) return;\r\n isShowDirInput.value = true;\r\n setTimeout(() => {\r\n document.querySelector('#aimDirInput').focus();\r\n },1);\r\n };\r\n\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n\r\n // 文本文件编辑\r\n const txtPreviewRef = ref();\r\n const preViewFile = (name) => {\r\n txtPreviewRef.value.fileName = name;\r\n txtPreviewRef.value.fileUrl = getRemoteFileUrl(name);\r\n txtPreviewRef.value.loading = true;\r\n txtPreviewRef.value.initText();\r\n txtPreviewRef.value.DialogVisilble = true;\r\n };\r\n // 保存文本,写回服务器\r\n const doSave = (name, url, arrayBuffer) => {\r\n let urlParams = parseUrl(url);\r\n if(urlParams.key != props.sshKey) return;\r\n // 创建Blob对象\r\n const blob = new Blob([arrayBuffer], { type: 'application/octet-stream' });\r\n // 创建File对象\r\n const file = new File([blob], name);\r\n file.uid = Math.random().toString(36).substring(2);\r\n doUpload({file:file}, {pathVal: urlParams.path, startUpLoad:i18n.global.t(\"修改保存中\"),alert:i18n.global.t('文件后台保存中')});\r\n };\r\n\r\n // 文件/文件夹拖拽\r\n const fileAreaRef = ref();\r\n const preventDefault = (event) => {\r\n event.preventDefault();\r\n };\r\n const handleFileDrag = (event) => {\r\n event.preventDefault();\r\n // 文件/文件夹项\r\n const items = event.dataTransfer.items;\r\n if(!(items && items.length > 0)) return;\r\n let basePath = dir.value;\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i].webkitGetAsEntry();\r\n // 文件类型\r\n if(item.isFile && !item.isDirectory) {\r\n item.file(file => {\r\n file.uid = Math.random().toString(36).substring(2);\r\n doUpload({file:file}, {pathVal: basePath});\r\n });\r\n }\r\n // 文件夹类型\r\n else if(!item.isFile && item.isDirectory) {\r\n const nowPath = basePath + item.name;\r\n $.ajax({\r\n url: http_base_url + '/mkdir',\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n path:basePath,\r\n item:item.name,\r\n },\r\n success(resp){\r\n if(resp.status == 'success') {\r\n getDirList();\r\n folderUpload(item, nowPath + '/');\r\n }\r\n else {\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n };\r\n // 文件夹拖拽递归上传\r\n const folderUpload = (directoryEntry, basePath) => {\r\n const reader = directoryEntry.createReader();\r\n reader.readEntries((entries) => {\r\n for (let i = 0; i < entries.length; i++) {\r\n const item = entries[i];\r\n // 文件类型\r\n if(item.isFile && !item.isDirectory) {\r\n item.file(file => {\r\n file.uid = Math.random().toString(36).substring(2);\r\n doUpload({file:file}, {pathVal: basePath, noStartUpLoad: true});\r\n });\r\n }\r\n // 文件夹类型\r\n else if(!item.isFile && item.isDirectory) {\r\n const nowPath = basePath + item.name;\r\n $.ajax({\r\n url: http_base_url + '/mkdir',\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n path:basePath,\r\n item:item.name,\r\n },\r\n success(resp){\r\n if(resp.status == 'success') {\r\n folderUpload(item, nowPath + '/');\r\n }\r\n else {\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n // 菜单项\r\n const isShowMenu = ref(false);\r\n const isShowPop = ref(false);\r\n const isShowRenameInput = ref(false);\r\n const renameFile = ref({});\r\n const fileAttrRef = ref();\r\n // 菜单选择\r\n const handleMenuSelect = async (type) => {\r\n switch (type) {\r\n // 刷新\r\n case 1:\r\n doRefresh();\r\n break;\r\n // 打开\r\n case 2:\r\n if(selectedFiles.value.length == 1 && selectedFiles.value[0].isDirectory == true) changeDir(dir.value + selectedFiles.value[0].name + '/');\r\n else if(selectedFiles.value.length == 1 && selectedFiles.value[0].isDirectory == false) preViewFile(selectedFiles.value[0].name);\r\n break;\r\n // 复制路径\r\n case 3:\r\n if(!(dir.value && dir.value.length > 0)) {\r\n ElMessage({\r\n message: i18n.global.t('内容为空'),\r\n type: 'warning',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n }\r\n else {\r\n const path = dir.value + (selectedFiles.value.length == 1 ? selectedFiles.value[0].name : '');\r\n await toClipboard(path);\r\n ElMessage({\r\n message: i18n.global.t('复制成功'),\r\n type: 'success',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n }\r\n break;\r\n // 下载\r\n case 4:\r\n if(selectedFiles.value.length == 1) doDownload();\r\n break;\r\n // 新建\r\n case 5:\r\n mkFileRef.value.nowDir = dir.value;\r\n mkFileRef.value.DialogVisilble = true;\r\n break;\r\n // 重命名\r\n case 6:\r\n if(selectedFiles.value.length == 1) {\r\n renameFile.value = {...selectedFiles.value[0]};\r\n isShowRenameInput.value = true;\r\n setTimeout(() => {\r\n document.querySelector('#rename').focus();\r\n },1);\r\n }\r\n break;\r\n // 删除\r\n case 7:\r\n isShowPop.value = true;\r\n break;\r\n // 属性\r\n case 8:\r\n if(selectedFiles.value.length == 1) {\r\n fileAttrRef.value.reset();\r\n fileAttrRef.value.fileInfo = {...selectedFiles.value[0]};\r\n fileAttrRef.value.fileDir = dir.value;\r\n fileAttrRef.value.rename = selectedFiles.value[0].name;\r\n if(selectedFiles.value[0].isDirectory) fileAttrRef.value.getFolderInclude();\r\n else fileAttrRef.value.getFileSize();\r\n fileAttrRef.value.DialogVisilble = true;\r\n }\r\n break;\r\n // 解压\r\n case 9:\r\n if(selectedFiles.value.length == 1 && isZipFile(selectedFiles.value[0].name)) {\r\n untar();\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if(type != 7) {\r\n isShowMenu.value = false;\r\n isShowPop.value = false;\r\n }\r\n };\r\n const handleScroll = () => {\r\n isShowMenu.value = false;\r\n isShowPop.value = false;\r\n };\r\n const menuBlockRef = ref();\r\n // 右键显示\r\n const handleContextMenu = (event) => {\r\n // 点击空白处\r\n if(event.target.id == 'fileArea') selectedFiles.value = [];\r\n menuBlockRef.value.style.top = event.clientY - 135 + 'px';\r\n menuBlockRef.value.style.left = event.clientX + 1 + 'px';\r\n isShowMenu.value = true;\r\n isShowPop.value = false;\r\n event.preventDefault();\r\n };\r\n // 重命名文件\r\n const handleRename = (item) => {\r\n isShowRenameInput.value = false;\r\n // 校验\r\n if(item.name == renameFile.value.name) {\r\n renameFile.value = {};\r\n return;\r\n }\r\n if(!(renameFile.value.name && renameFile.value.name.trim().length > 0)) {\r\n ElMessage({\r\n message: i18n.global.t(\"文件名不能为空\"),\r\n type: \"warning\",\r\n grouping: true,\r\n })\r\n renameFile.value = {};\r\n return;\r\n }\r\n const invalidNameRe = /[/|]/;\r\n if(invalidNameRe.test(renameFile.value.name)) {\r\n ElMessage({\r\n message: i18n.global.t(\"文件名不能含有\") + \" |,/\",\r\n type: \"warning\",\r\n grouping: true,\r\n });\r\n renameFile.value = {};\r\n return;\r\n }\r\n let oldPath = dir.value + item.name;\r\n let newPath = dir.value + renameFile.value.name;\r\n renameFile.value = {};\r\n doRename(oldPath,newPath);\r\n };\r\n const doRename = (oldPath,newPath) => {\r\n $.ajax({\r\n url: http_base_url + '/rename',\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n oldPath:oldPath,\r\n newPath:newPath,\r\n },\r\n success(resp){\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n getDirList();\r\n }\r\n });\r\n };\r\n // 批量删除文件/文件夹\r\n const confirmPopConfirm = () => {\r\n isShowMenu.value = false;\r\n isShowPop.value = false;\r\n if(selectedFiles.value.length == 0) return;\r\n $.ajax({\r\n url: http_base_url + '/rm-rf',\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n path:escapePath(dir.value),\r\n items:selectedFiles.value.map(e => escapeItem(e.name)).join(' '),\r\n },\r\n success(resp){\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n getDirList();\r\n }\r\n });\r\n };\r\n const cancelPopConfirm = () => {\r\n isShowPop.value = false;\r\n };\r\n // 新建文件/文件夹\r\n const mkFileRef = ref();\r\n const handleMkFile = (isFolder, name, nowDir) => { \r\n $.ajax({\r\n url: http_base_url + (isFolder ? '/mkdir' : '/touch'),\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n path:isFolder ? nowDir : escapePath(nowDir),\r\n item:isFolder ? name : escapeItem(name),\r\n },\r\n success(resp){\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n getDirList();\r\n }\r\n });\r\n };\r\n\r\n watch(dir,() => {\r\n if(mkFileRef.value) mkFileRef.value.closeDialog();\r\n if(fileUrlRef.value) fileUrlRef.value.closeDialog();\r\n if(fileAttrRef.value) fileAttrRef.value.closeDialog();\r\n });\r\n\r\n // 滚动到可视区\r\n const scrollToView = (index) => {\r\n const itemWidth = 31;\r\n const upDistance = index * itemWidth;\r\n const downDistance = upDistance + itemWidth;\r\n // 获取可视区域的高度\r\n const viewWidth = fileAreaRef.value.clientHeight;\r\n // 获取当前滚动位置\r\n const currentScrollTop = fileAreaRef.value.scrollTop;\r\n // 当前项不完全在可视区内\r\n if(upDistance < currentScrollTop) fileAreaRef.value.scrollTop = upDistance;\r\n else if(downDistance > currentScrollTop + viewWidth) fileAreaRef.value.scrollTop = downDistance - viewWidth;\r\n };\r\n\r\n // 文件快捷键操作\r\n const fileClipboard = ref({\r\n path:'/',\r\n files:[],\r\n });\r\n const isCtrlx = ref(false);\r\n const handleShortcutKeys = (event) => {\r\n const renameDom = document.querySelector('#rename');\r\n if(renameDom && renameDom.contains(event.target)) return;\r\n event.preventDefault();\r\n // 上下箭头\r\n if(event.key === 'ArrowUp' || event.key === 'ArrowDown') {\r\n // 上箭头\r\n if(event.key === 'ArrowUp') {\r\n if(lastSelectedIndex == -1 || lastSelectedIndex > files.value.length) lastSelectedIndex = files.value.length;\r\n lastSelectedIndex--;\r\n lastSelectedIndex = Math.max(0,lastSelectedIndex);\r\n }\r\n // 下箭头\r\n else if(event.key === 'ArrowDown') {\r\n lastSelectedIndex++;\r\n lastSelectedIndex = Math.min(files.value.length - 1,lastSelectedIndex);\r\n }\r\n isShowMenu.value = false;\r\n isShowPop.value = false;\r\n selectedFiles.value = [];\r\n selectedFiles.value.push(files.value[lastSelectedIndex]);\r\n scrollToView(lastSelectedIndex);\r\n }\r\n // 回车键\r\n if(event.key === 'Enter') {\r\n if(isShowMenu.value || isShowPop.value) {\r\n isShowMenu.value = false;\r\n isShowPop.value = false;\r\n return;\r\n }\r\n if(selectedFiles.value.length == 1) {\r\n const item = selectedFiles.value[0];\r\n if(item.isDirectory) changeDir(dir.value + item.name + '/');\r\n else preViewFile(item.name);\r\n }\r\n }\r\n // ctrl\r\n if ((props.os == \"Windows\" && event.ctrlKey) || ((props.os == \"Mac\" || props.os == \"iOS\") && event.metaKey)) {\r\n switch (String.fromCharCode(event.which).toLowerCase()) {\r\n // 全选\r\n case 'a':\r\n selectedFiles.value = [];\r\n for(let i=0;i<files.value.length;i++) selectedFiles.value.push({...files.value[i]});\r\n break;\r\n // 复制\r\n case 'c':\r\n if(selectedFiles.value.length > 0) {\r\n fileClipboard.value.path = dir.value;\r\n fileClipboard.value.files = selectedFiles.value.slice(0);\r\n isCtrlx.value = false;\r\n }\r\n break;\r\n // 粘贴\r\n case 'v':\r\n if(fileClipboard.value.files.length == 0) return;\r\n fileCopyMove(isCtrlx.value ? 'mv' : 'cp');\r\n if(isCtrlx.value) {\r\n isCtrlx.value = false;\r\n fileClipboard.value = {\r\n path:'/',\r\n files:[],\r\n };\r\n }\r\n break;\r\n // 剪切\r\n case 'x':\r\n fileClipboard.value.path = dir.value;\r\n fileClipboard.value.files = selectedFiles.value.slice(0);\r\n isCtrlx.value = true;\r\n break;\r\n }\r\n }\r\n };\r\n\r\n // 文件复制/剪切\r\n const fileCopyMove = (mode) => {\r\n if(fileClipboard.value.path == dir.value) return;\r\n $.ajax({\r\n url: http_base_url + '/' + mode,\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n src:escapePath(fileClipboard.value.path),\r\n dst:escapePath(dir.value),\r\n items: fileClipboard.value.files.map(e => escapeItem(e.name)).join(' '),\r\n },\r\n success(resp){\r\n if(resp.status == 'success') getDirList();\r\n // 复制剪切失败\r\n else {\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n fileClipboard.value = {\r\n path:'/',\r\n files:[],\r\n };\r\n }\r\n }\r\n });\r\n };\r\n\r\n // 文件上传类型\r\n const fileUploadTypeChoose = (type) => {\r\n // 文件上传\r\n if(type == 0) {\r\n document.querySelector('#fileUploadInputButton').click();\r\n }\r\n // 文件夹上传\r\n else if(type == 1) {\r\n document.querySelector('#folderUploadInput').value = '';\r\n document.querySelector('#folderUploadInput').click();\r\n }\r\n // URL上传\r\n else if(type == 2) {\r\n fileUrlRef.value.DialogVisilble = true;\r\n }\r\n };\r\n // 文件夹input框上传预处理\r\n const folderInputUploadPrehandle = (event) => {\r\n let basePath = dir.value;\r\n let filesGroupByPath = {};\r\n // 根据文件路径进行分类\r\n for(let i=0;i<event.target.files['length'];i++) {\r\n let file = event.target.files[i];\r\n let fullPath = file['webkitRelativePath'];\r\n let index = fullPath.lastIndexOf('/');\r\n let filePath = fullPath.substring(0,index+1);\r\n if(!filesGroupByPath[filePath]) {\r\n filesGroupByPath[filePath] = {\r\n path:filePath,\r\n files:[],\r\n }\r\n }\r\n filesGroupByPath[filePath].files.push(file);\r\n }\r\n // 根据文件路径长度进行升序排序,确保文件父目录存在\r\n let filesArr = [];\r\n for(let key in filesGroupByPath) {\r\n filesArr.push(filesGroupByPath[key]);\r\n }\r\n filesArr.sort((a, b) => a.path.length - b.path.length);\r\n folderInputUpload(basePath,filesArr,0);\r\n };\r\n // 文件夹input框上传\r\n const folderInputUpload = (basePath,filesArr,now) => {\r\n // 父目录创建\r\n const fileObj = filesArr[now];\r\n $.ajax({\r\n url: http_base_url + '/mkdir',\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n path:basePath,\r\n item:fileObj.path,\r\n },\r\n success(resp){\r\n if(resp.status == 'success') {\r\n if(now == 0) getDirList();\r\n if(now < filesArr.length - 1) folderInputUpload(basePath,filesArr, now+1);\r\n // 子文件上传\r\n for(let i=0;i<fileObj.files.length;i++) {\r\n const file = fileObj.files[i];\r\n file.uid = Math.random().toString(36).substring(2);\r\n doUpload({file:file}, {pathVal: basePath + fileObj.path, noStartUpLoad: true});\r\n }\r\n }\r\n else {\r\n ElMessage({\r\n message: i18n.global.t(\"文件夹上传失败\"),\r\n type: resp.status,\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n // 文件URL上传\r\n const fileUrlRef = ref();\r\n const fileUrlUpload = (url,fileName) => {\r\n $.ajax({\r\n url: http_base_url + '/wget',\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n path:escapePath(dir.value),\r\n item:escapeItem(fileName),\r\n url:encodeURI(url),\r\n },\r\n success(resp){\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n getDirList();\r\n }\r\n });\r\n };\r\n\r\n // 解压文件\r\n const untar = () => {\r\n $.ajax({\r\n url: http_base_url + '/untar',\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n path:escapePath(dir.value),\r\n item:escapeItem(selectedFiles.value[0].name),\r\n },\r\n success(resp){\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n getDirList();\r\n }\r\n });\r\n };\r\n\r\n // 修改权限\r\n const editPermissions = (path,item, permissionsInfo) => {\r\n $.ajax({\r\n url: http_base_url + '/chmod',\r\n type:'post',\r\n data:{\r\n sshKey:props.sshKey,\r\n path:escapePath(path),\r\n item:escapeItem(item),\r\n perms:getChmodValue(permissionsInfo),\r\n sub:permissionsInfo.sub || false,\r\n },\r\n success(resp){\r\n ElMessage({\r\n message: resp.info,\r\n type: resp.status,\r\n grouping: true,\r\n });\r\n if(resp.status == 'success') {\r\n if(fileAttrRef.value && fileAttrRef.value.permissionsEditRef) fileAttrRef.value.permissionsEditRef.closeDialog();\r\n getDirList();\r\n }\r\n }\r\n });\r\n };\r\n\r\n // 重置\r\n const reset = (deep=false) => {\r\n if(deep) {\r\n loading.value = true;\r\n files.value = [];\r\n dir.value = '';\r\n dirLevels.value = [];\r\n isShowDirInput.value = false;\r\n noDataMsg.value = i18n.global.t('暂无文件');\r\n dirStatus.value = 0;\r\n fileClipboard.value = {\r\n path:'/',\r\n files:[],\r\n };\r\n isCtrlx.value = false;\r\n }\r\n selectedFiles.value = [];\r\n lastSelectedIndex = -1;\r\n isShowMenu.value = false;\r\n isShowPop.value = false;\r\n isShowRenameInput.value = false;\r\n renameFile.value = {};\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n if(txtPreviewRef.value && txtPreviewRef.value.DialogVisilble) txtPreviewRef.value.closeDialog();\r\n if(mkFileRef.value && mkFileRef.value.DialogVisilble) mkFileRef.value.closeDialog();\r\n if(fileAttrRef.value && fileAttrRef.value.DialogVisilble) fileAttrRef.value.closeDialog();\r\n if(fileUrlRef.value && fileUrlRef.value.DialogVisilble) fileUrlRef.value.closeDialog();\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n // 深度关闭\r\n const deepCloseDialog = () => {\r\n if(txtPreviewRef.value) txtPreviewRef.value.closeDialog();\r\n if(mkFileRef.value) mkFileRef.value.closeDialog();\r\n if(fileAttrRef.value) fileAttrRef.value.closeDialog();\r\n if(fileUrlRef.value) fileUrlRef.value.closeDialog();\r\n setTimeout(() => {\r\n reset(true);\r\n },400);\r\n DialogVisilble.value = false;\r\n };\r\n\r\n onMounted(() => {\r\n document.addEventListener('mousedown', (event) => {\r\n if(fileAreaRef.value && fileAreaRef.value.contains(event.target)) {\r\n fileAreaRef.value.tabindex = '0';\r\n fileAreaRef.value.focus();\r\n }\r\n if (menuBlockRef.value && menuBlockRef.value.contains(event.target)) return;\r\n const confirmPop = document.querySelector('.confirmPop');\r\n if (confirmPop && confirmPop.contains(event.target)) return;\r\n isShowMenu.value = false;\r\n isShowPop.value = false;\r\n });\r\n });\r\n\r\n onUnmounted(() => {\r\n if(fileAreaRef.value) {\r\n fileAreaRef.value.removeEventListener('dragover', preventDefault);\r\n fileAreaRef.value.removeEventListener('drop', handleFileDrag);\r\n fileAreaRef.value.removeEventListener('scroll', handleScroll);\r\n fileAreaRef.value.removeEventListener('keydown', handleShortcutKeys);\r\n }\r\n });\r\n\r\n return {\r\n DialogVisilble,\r\n isShowDirInput,\r\n dir,\r\n files,\r\n getInitDir,\r\n getDirList,\r\n downloadRemoteFile,\r\n downloadDir,\r\n changeDir,\r\n dirInputCallback,\r\n noDataMsg,\r\n doRefresh,\r\n doReturn,\r\n doDownload,\r\n doUpload,\r\n selectedFiles,\r\n loading,\r\n txtPreviewRef,\r\n preViewFile,\r\n doSave,\r\n fileAreaRef,\r\n handleMenuSelect,\r\n isShowMenu,\r\n preventDefault,\r\n handleFileDrag,\r\n handleScroll,\r\n handleContextMenu,\r\n isShowRenameInput,\r\n handleRename,\r\n renameFile,\r\n menuBlockRef,\r\n doShowDirInput,\r\n isShowPop,\r\n confirmPopConfirm,\r\n cancelPopConfirm,\r\n mkFileRef,\r\n handleMkFile,\r\n doRename,\r\n fileAttrRef,\r\n folderUpload,\r\n dirStatus,\r\n handleShortcutKeys,\r\n fileClipboard,\r\n addSelectFile,\r\n isSelected,\r\n isClipboard,\r\n isCtrlx,\r\n fileCopyMove,\r\n fileUploadTypeChoose,\r\n folderInputUploadPrehandle,\r\n fileUrlRef,\r\n fileUrlUpload,\r\n reset,\r\n closeDialog,\r\n deepCloseDialog,\r\n isZipFile,\r\n untar,\r\n editPermissions,\r\n dirLevels,\r\n changeDirByLevel,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.title {\r\n background-color: #efefef;\r\n padding: 4px 10px;\r\n font-size: 13px;\r\n white-space: nowrap; \r\n overflow: hidden;\r\n text-overflow:ellipsis;\r\n margin-bottom: 15px;\r\n}\r\n\r\n.kk-flex {\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n.list-class {\r\n height: 248px;\r\n overflow-y: scroll;\r\n width: 100%;\r\n}\r\n\r\n.item-class {\r\n display: flex;\r\n align-items: center;\r\n padding: 5px 10px;\r\n border-bottom: 1px solid #efefef;\r\n cursor: pointer;\r\n width: 100%;\r\n}\r\n\r\n.item-class:hover {\r\n background-color: #f3f3f3;\r\n}\r\n\r\n.hover-class:hover\r\n{\r\n color: #409eff;\r\n}\r\n\r\n.item-selected\r\n{\r\n background-color: #efefef !important;\r\n border-bottom: 1px solid #d8d8d8;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n/* 文本溢出省略 */\r\n.ellipsis {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 18px;\r\n}\r\n\r\n.kk-menu\r\n{\r\n position: absolute;\r\n z-index: 3466;\r\n text-align: center;\r\n border-radius: 8px;\r\n border-top: 8px solid #fff;\r\n border-bottom: 8px solid #fff;\r\n box-shadow: 0 6px 12px 0 rgba(0, 0, 0, 0.15), 0 3px 6px -2px rgba(0, 0, 0, 0.2), 0 8px 16px 4px rgba(0, 0, 0, 0.12);\r\n}\r\n\r\n.kk-menu-item {\r\n height: 30px;\r\n font-size: 13px;\r\n line-height: 30px;\r\n width: 110px;\r\n color: #383838;\r\n background-color: #fff;\r\n cursor: pointer;\r\n}\r\n\r\n.kk-menu-item:hover\r\n{\r\n background-color: #efefef;\r\n}\r\n\r\n.disabled {\r\n background-color: #f5f7fa;\r\n color: #a8abb2;\r\n pointer-events: none;\r\n}\r\n\r\n.disabled-function {\r\n color: #a8abb2;\r\n pointer-events: none;\r\n}\r\n\r\n.confirmPop {\r\n /* 定位删除确认框 */\r\n user-select: none;\r\n}\r\n\r\n.dir-level:hover {\r\n text-decoration: none;\r\n color: var(--link);\r\n cursor: pointer;\r\n}\r\n\r\n</style>","const zipSuffixs = {\r\n \"tar\":\"tar\",\r\n \"tbz2\":\"tbz2\",\r\n \"gz\":\"gz\",\r\n \"xz\":\"xz\",\r\n \"bz2\":\"bz2\",\r\n \"zip\":\"zip\",\r\n};\r\n\r\nexport const isZipFile = (item) => {\r\n const index = item.lastIndexOf('.');\r\n if(index == -1) return false;\r\n const fileSuffix = item.substring(index + 1).toLowerCase();\r\n if(zipSuffixs[fileSuffix]) return true;\r\n return false;\r\n};\r\n\r\nconst iframeSuffixs = {\r\n \"pdf\":\"application/pdf\",\r\n \"html\": \"text/html\",\r\n \"jpg\": \"image/jpeg\",\r\n \"jpeg\": \"image/jpeg\",\r\n \"png\": \"image/png\",\r\n \"gif\": \"image/gif\",\r\n \"bmp\": \"image/bmp\",\r\n \"webp\": \"image/webp\",\r\n \"svg\": \"image/svg+xml\",\r\n \"ico\": \"image/vnd.microsoft.icon\",\r\n};\r\n\r\nconst audioSuffixs = {\r\n \"mp3\": \"audio/mpeg\",\r\n \"wav\": \"audio/wav\",\r\n \"ogg\": \"audio/ogg\",\r\n \"aac\": \"audio/aac\",\r\n \"m4a\": \"audio/mp4\"\r\n};\r\n\r\nconst videoSuffixs = {\r\n \"mp4\": \"video/mp4\",\r\n \"webm\": \"video/webm\",\r\n \"ogv\": \"video/ogg\",\r\n \"avi\": \"video/x-msvideo\",\r\n \"mov\": \"video/quicktime\"\r\n};\r\n\r\nexport const previewFileInfo = (item) => {\r\n const previewInfo = {\r\n preview:'editor',\r\n type:'text',\r\n };\r\n const index = item.lastIndexOf('.');\r\n if(index == -1) return previewInfo;\r\n const fileSuffix = item.substring(index + 1).toLowerCase();\r\n if(iframeSuffixs[fileSuffix]) {\r\n previewInfo.preview = \"iframe\";\r\n previewInfo.type = iframeSuffixs[fileSuffix];\r\n }\r\n else if(audioSuffixs[fileSuffix]) {\r\n previewInfo.preview = \"audio\";\r\n previewInfo.type = audioSuffixs[fileSuffix];\r\n }\r\n else if(videoSuffixs[fileSuffix]) {\r\n previewInfo.preview = \"video\";\r\n previewInfo.type = videoSuffixs[fileSuffix];\r\n }\r\n return previewInfo;\r\n};","export const calcPriority = (type,attrs) => {\r\n return getType(type) + getAttrs(attrs);\r\n};\r\n\r\n// 获取所有者、所属组和其他用户的权限数组\r\nexport const getPermissionInfo = (attrs) => {\r\n const permissionString = calcPriority('REGULAR', attrs).slice(1); // 仅提取权限部分\r\n const permissions = {\r\n owner: [permissionString[0] === 'r', permissionString[1] === 'w', permissionString[2] === 'x' || permissionString[2] === 's' || permissionString[2] === 'S'],\r\n group: [permissionString[3] === 'r', permissionString[4] === 'w', permissionString[5] === 'x' || permissionString[5] === 's' || permissionString[5] === 'S'],\r\n others: [permissionString[6] === 'r', permissionString[7] === 'w', permissionString[8] === 'x' || permissionString[8] === 't' || permissionString[8] === 'T'],\r\n sub: false,\r\n };\r\n\r\n return permissions;\r\n};\r\n\r\n// chmod权限整数值\r\nexport const getChmodValue = (permissions) => {\r\n const calculateSection = (section) => {\r\n return (section[0] ? 4 : 0) + (section[1] ? 2 : 0) + (section[2] ? 1 : 0);\r\n };\r\n const ownerValue = calculateSection(permissions.owner) + '';\r\n const groupValue = calculateSection(permissions.group) + '';\r\n const othersValue = calculateSection(permissions.others) + '';\r\n\r\n return ownerValue + groupValue + othersValue;\r\n};\r\n\r\nconst fileTypeSymbols = {\r\n 'BLOCK_SPECIAL': 'b',\r\n 'CHAR_SPECIAL': 'c',\r\n 'FIFO_SPECIAL': 'p',\r\n 'SOCKET_SPECIAL': 's',\r\n 'REGULAR': '-',\r\n 'DIRECTORY': 'd',\r\n 'SYMLINK': 'l',\r\n 'UNKNOWN': '?'\r\n};\r\n\r\nconst getType = (type) => {\r\n return fileTypeSymbols[type];\r\n};\r\n\r\nconst permissionMap = {\r\n 'USR_R': 256,\r\n 'USR_W': 128,\r\n 'USR_X': 64,\r\n 'GRP_R': 32,\r\n 'GRP_W': 16,\r\n 'GRP_X': 8,\r\n 'OTH_R': 4,\r\n 'OTH_W': 2,\r\n 'OTH_X': 1,\r\n 'SUID': 2048,\r\n 'SGID': 1024,\r\n 'STICKY': 512\r\n};\r\n\r\nconst getAttrs = (attrs) => {\r\n let symbol = '---------';\r\n // 将权限数组转换为对应的权限值总和\r\n let permissionValue = 0;\r\n for(let i=0;i<attrs.length;i++) if(permissionMap[attrs[i]]) permissionValue += permissionMap[attrs[i]];\r\n\r\n // 设置用户权限\r\n symbol = setPermissionSymbol(symbol, 0, permissionValue & permissionMap['USR_R'], 'r');\r\n symbol = setPermissionSymbol(symbol, 1, permissionValue & permissionMap['USR_W'], 'w');\r\n symbol = setPermissionSymbol(symbol, 2, permissionValue & permissionMap['USR_X'], 'x', permissionValue & permissionMap['SUID'], 's', 'S');\r\n\r\n // 设置组权限\r\n symbol = setPermissionSymbol(symbol, 3, permissionValue & permissionMap['GRP_R'], 'r');\r\n symbol = setPermissionSymbol(symbol, 4, permissionValue & permissionMap['GRP_W'], 'w');\r\n symbol = setPermissionSymbol(symbol, 5, permissionValue & permissionMap['GRP_X'], 'x', permissionValue & permissionMap['SGID'], 's', 'S');\r\n\r\n // 设置其他权限\r\n symbol = setPermissionSymbol(symbol, 6, permissionValue & permissionMap['OTH_R'], 'r');\r\n symbol = setPermissionSymbol(symbol, 7, permissionValue & permissionMap['OTH_W'], 'w');\r\n symbol = setPermissionSymbol(symbol, 8, permissionValue & permissionMap['OTH_X'], 'x', permissionValue & permissionMap['STICKY'], 't', 'T');\r\n\r\n return symbol;\r\n};\r\n\r\n// 设置权限符号\r\nconst setPermissionSymbol = (symbol, index, attr, char, specialPermission = 0, specialChar = '', noPermissionChar = '-') => {\r\n if (specialPermission) symbol = symbol.substring(0, index) + (attr ? specialChar : noPermissionChar) + symbol.substring(index + 1);\r\n else symbol = symbol.substring(0, index) + (attr ? char : symbol[index]) + symbol.substring(index + 1);\r\n return symbol;\r\n};","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n width=\"80%\"\r\n :modal=\"false\"\r\n modal-class=\"kk-dialog-class\"\r\n :before-close=\"closeDialog\"\r\n align-center\r\n draggable\r\n >\r\n <template #title>\r\n <div class=\"kk-flex\">\r\n <FileIcons :style=\"{display: 'flex', alignItems: 'center'}\" :name=\"fileName\" :width=\"25\" :height=\"25\" :isFolder=\"false\" />\r\n <div class=\"ellipsis\" style=\"margin: 0 5px; font-size: larger;\">{{ modifyTag + fileName }}</div>\r\n </div>\r\n </template>\r\n <div style=\"margin-top: -28px;\"></div>\r\n <div v-show=\"previewInfo.preview == 'editor'\" class=\"kk-flex ellipsis\" style=\"margin-bottom: 5px; overflow-x: auto;\" >\r\n <div class=\"kk-flex\" >\r\n <div class=\"no-select\" >{{ $t('保存编码') }}:</div>\r\n <el-dropdown size=\"small\" hide-timeout=\"300\" >\r\n <span class=\"a-link\" >{{ encode }}<el-icon class=\"el-icon--right\"><arrow-down /></el-icon></span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <template v-for=\"(name,index) in encodeSet\" :key=\"index\" >\r\n <el-dropdown-item @click=\"encode = name; modifyTag = '*';\" >{{ name }}</el-dropdown-item>\r\n </template>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n <div style=\"margin-right: 20px;\" ></div>\r\n <div class=\"kk-flex\" >\r\n <div class=\"no-select\" >{{ $t('模式') }}:</div>\r\n <el-dropdown size=\"small\" hide-timeout=\"300\" >\r\n <span class=\"a-link\" >{{ mode }}<el-icon class=\"el-icon--right\"><arrow-down /></el-icon></span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <template v-for=\"(name,index) in modeSet\" :key=\"index\" >\r\n <el-dropdown-item @click=\"setMode(name)\" >{{ name }}</el-dropdown-item>\r\n </template>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n <div style=\"margin-right: 20px;\" ></div>\r\n <div class=\"kk-flex\" >\r\n <div class=\"no-select\" >{{ $t('缩进') }}:</div>\r\n <div><el-input-number :style=\"{width: '80px'}\" size=\"small\" v-model=\"indent\" :min=\"2\" :max=\"4\" step=\"2\" :step-strictly=\"true\" @change=\"setIndent\" /></div>\r\n </div>\r\n <div style=\"margin-right: 20px;\" ></div>\r\n <div class=\"kk-flex\" >\r\n <el-button size=\"small\" type=\"primary\" @click=\"doCopy\" >\r\n <el-icon class=\"el-icon--left\"><DocumentCopy /></el-icon>{{ $t('复制') }}\r\n </el-button>\r\n </div>\r\n </div>\r\n <div element-loading-text=\"Loading...\" v-loading=\"loading\" style=\"padding: 0px 5px; width: 100%; height: 60vh;\">\r\n <AceEditor class=\"preview\" v-show=\"!loading && previewInfo.preview == 'editor'\" ref=\"codeEditorRef\" @handleChange=\"handleChange\" @handleSave=\"handleSave\" ></AceEditor>\r\n <iframe class=\"preview\" v-if=\"!loading && previewInfo.preview == 'iframe' && previewUrl != ''\" :src=\"previewUrl\" ></iframe>\r\n <audio controls class=\"preview\" v-if=\"!loading && previewInfo.preview == 'audio' && previewUrl != ''\" >\r\n <source :src=\"previewUrl\" :type=\"previewInfo.type\" >\r\n </audio>\r\n <video controls class=\"preview\" v-if=\"!loading && previewInfo.preview == 'video' && previewUrl != ''\" >\r\n <source :src=\"previewUrl\" :type=\"previewInfo.type\" >\r\n </video>\r\n </div>\r\n <div style=\"margin-top: -13px;\"></div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport AceEditor from './AceEditor';\r\nimport $ from 'jquery';\r\nimport useClipboard from \"vue-clipboard3\";\r\nimport { ElMessage } from 'element-plus';\r\nimport { previewFileInfo } from '@/utils/FileSuffix';\r\nimport { changeStr2 } from '@/utils/StringUtil';\r\nimport { detectEncoding, encodeStrToArray, decodeArrayToStr } from \"@/components/preview/EncodeUtil\";\r\nimport { ArrowDown, DocumentCopy } from '@element-plus/icons-vue';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\n// 引入文件图标组件\r\nimport FileIcons from 'file-icons-vue';\r\n\r\nexport default {\r\n name: 'TxtPreview',\r\n components: {\r\n AceEditor,\r\n FileIcons,\r\n ArrowDown,\r\n DocumentCopy,\r\n },\r\n setup(props,context) {\r\n\r\n const DialogVisilble = ref(false);\r\n const loading = ref(false);\r\n\r\n const modifyTag = ref('');\r\n const fileName = ref('');\r\n const fileUrl = ref('');\r\n\r\n const previewInfo = ref({\r\n preview:'editor',\r\n type:'text',\r\n });\r\n const previewUrl = ref('');\r\n\r\n const codeEditorRef = ref();\r\n\r\n const jqXHR = ref(null);\r\n\r\n const initText = async () => {\r\n loading.value = true;\r\n reset();\r\n let url = fileUrl.value;\r\n previewInfo.value = previewFileInfo(fileName.value);\r\n initEncode(url);\r\n jqXHR.value = $.ajax({\r\n url: url,\r\n method: 'GET',\r\n xhrFields: {\r\n responseType: 'arraybuffer'\r\n },\r\n dataFilter(resp) {\r\n return resp;\r\n },\r\n success(resp) {\r\n if(url == fileUrl.value)\r\n {\r\n // 文件可预览\r\n if(previewInfo.value.preview != 'editor') {\r\n const blob = new Blob([resp], {type:previewInfo.value.type});\r\n if(previewUrl.value != '') URL.revokeObjectURL(previewUrl.value);\r\n previewUrl.value = URL.createObjectURL(blob);\r\n }\r\n else {\r\n encode.value = detectEncoding(String.fromCharCode(...new Uint8Array(resp.slice(0,100*1024))));\r\n initEncode(url);\r\n const text = decodeArrayToStr(new Uint8Array(resp),encode.value);\r\n codeEditorRef.value.setValue(text);\r\n codeEditorRef.value.resetHistory();\r\n mode.value = 'auto';\r\n codeEditorRef.value.setLanguage(fileName.value);\r\n setIndent();\r\n }\r\n modifyTag.value = '';\r\n loading.value = false;\r\n }\r\n },\r\n error() {\r\n if(url == fileUrl.value)\r\n {\r\n ElMessage({\r\n message: i18n.global.t('文件加载失败'),\r\n type: 'error',\r\n grouping: true,\r\n });\r\n reset();\r\n closeDialog();\r\n }\r\n }\r\n });\r\n await jqXHR.value;\r\n };\r\n\r\n const handleChange = () => {\r\n modifyTag.value = '*';\r\n };\r\n\r\n const handleSave = (text) => {\r\n if(modifyTag.value != '*') return;\r\n context.emit('doSave',fileName.value, fileUrl.value, encodeStrToArray(text, (encode.value || \"UTF-8\")));\r\n modifyTag.value = '';\r\n };\r\n\r\n // 编码\r\n const encode = ref('');\r\n const encodeSet = ref(['UTF-8','GBK','ISO-8859-1','Windows-1252']);\r\n const initEncode = (url) => {\r\n let serverEncode = 'UTF-8';\r\n let indexKey = url.indexOf('&sshKey=');\r\n let indexPath = url.indexOf('&path=');\r\n if(indexKey != -1 && indexPath != -1) serverEncode = changeStr2(url.substring(indexKey + 8, indexPath).split('-')[1]);\r\n encodeSet.value = ['UTF-8','GBK','ISO-8859-1','Windows-1252'];\r\n if(!encodeSet.value.map(item => item.toLowerCase()).includes(serverEncode.toLowerCase())) encodeSet.value.unshift(serverEncode);\r\n if(!encode.value || encode.value.toLowerCase() == 'ascii') encode.value = serverEncode;\r\n else if(!encodeSet.value.map(item => item.toLowerCase()).includes(encode.value.toLowerCase())) encodeSet.value.unshift(encode.value);\r\n };\r\n\r\n // 语言模式\r\n const mode = ref('');\r\n const modeSet = ref(['auto','xml','bash','json']);\r\n const setMode = (name) => {\r\n if(mode.value == name) return;\r\n mode.value = name;\r\n codeEditorRef.value.setLanguage((name == 'auto') ? fileName.value : (\"kk.\" + name));\r\n };\r\n\r\n // 缩进\r\n const indent = ref(4);\r\n const setIndent = () => {\r\n codeEditorRef.value.setTabSize(indent.value);\r\n };\r\n\r\n // 拷贝\r\n const { toClipboard } = useClipboard();\r\n\r\n // 复制\r\n const doCopy = async () => {\r\n const content = codeEditorRef.value.getValue();\r\n if(!(content && content.length > 0)) {\r\n ElMessage({\r\n message: i18n.global.t('内容为空'),\r\n type: 'warning',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n return;\r\n }\r\n await toClipboard(content);\r\n ElMessage({\r\n message: i18n.global.t('复制成功'),\r\n type: 'success',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n };\r\n\r\n // 重置\r\n const reset = (deep=false) => {\r\n if(deep) {\r\n fileName.value = '';\r\n fileUrl.value = '';\r\n loading.value = false;\r\n }\r\n if(codeEditorRef.value) codeEditorRef.value.reset();\r\n modifyTag.value = '';\r\n previewInfo.value = {\r\n preview:'editor',\r\n type:'text',\r\n };\r\n if(previewUrl.value != '') {\r\n URL.revokeObjectURL(previewUrl.value);\r\n previewUrl.value = '';\r\n }\r\n if(jqXHR.value) {\r\n jqXHR.value.abort();\r\n jqXHR.value = null;\r\n }\r\n encode.value = '';\r\n encodeSet.value = ['UTF-8','GBK','ISO-8859-1','Windows-1252'];\r\n mode.value = '';\r\n indent.value = 4;\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n setTimeout(() => {\r\n reset(true);\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n DialogVisilble,\r\n initText,\r\n loading,\r\n fileName,\r\n fileUrl,\r\n previewInfo,\r\n previewUrl,\r\n codeEditorRef,\r\n modifyTag,\r\n handleChange,\r\n handleSave,\r\n encode,\r\n encodeSet,\r\n initEncode,\r\n mode,\r\n modeSet,\r\n setMode,\r\n indent,\r\n setIndent,\r\n doCopy,\r\n closeDialog,\r\n reset,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.kk-flex {\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n/* 文本溢出省略 */\r\n.ellipsis {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 22px;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n.preview {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n</style>\r\n","<template>\r\n <div ref=\"aceEditorRef\" class=\"kk-code-editor\"></div>\r\n</template>\r\n\r\n<script>\r\nimport { ref, onMounted, onUnmounted } from 'vue';\r\nimport ace from 'ace-builds/src-noconflict/ace';\r\nimport 'ace-builds/src-noconflict/ext-searchbox';\r\nimport 'ace-builds/src-noconflict/theme-chrome';\r\n\r\n\r\n// 引入语言高亮样式\r\nimport 'ace-builds/src-noconflict/mode-c_cpp';\r\nimport 'ace-builds/src-noconflict/mode-csharp';\r\nimport 'ace-builds/src-noconflict/mode-css';\r\nimport 'ace-builds/src-noconflict/mode-gitignore';\r\nimport 'ace-builds/src-noconflict/mode-golang';\r\nimport 'ace-builds/src-noconflict/mode-html';\r\nimport 'ace-builds/src-noconflict/mode-ini';\r\nimport 'ace-builds/src-noconflict/mode-java';\r\nimport 'ace-builds/src-noconflict/mode-javascript';\r\nimport 'ace-builds/src-noconflict/mode-json';\r\nimport 'ace-builds/src-noconflict/mode-jsp';\r\nimport 'ace-builds/src-noconflict/mode-markdown';\r\nimport 'ace-builds/src-noconflict/mode-properties';\r\nimport 'ace-builds/src-noconflict/mode-python';\r\nimport 'ace-builds/src-noconflict/mode-sh';\r\nimport 'ace-builds/src-noconflict/mode-sql';\r\nimport 'ace-builds/src-noconflict/mode-typescript';\r\nimport 'ace-builds/src-noconflict/mode-text';\r\nimport 'ace-builds/src-noconflict/mode-xml';\r\nimport 'ace-builds/src-noconflict/mode-yaml';\r\n\r\n// 引入智能提示\r\nimport 'ace-builds/src-noconflict/ext-language_tools';\r\nimport 'ace-builds/src-noconflict/snippets/c_cpp';\r\nimport 'ace-builds/src-noconflict/snippets/csharp';\r\nimport 'ace-builds/src-noconflict/snippets/css';\r\nimport 'ace-builds/src-noconflict/snippets/gitignore';\r\nimport 'ace-builds/src-noconflict/snippets/golang';\r\nimport 'ace-builds/src-noconflict/snippets/html';\r\nimport 'ace-builds/src-noconflict/snippets/ini';\r\nimport 'ace-builds/src-noconflict/snippets/java';\r\nimport 'ace-builds/src-noconflict/snippets/javascript';\r\nimport 'ace-builds/src-noconflict/snippets/json';\r\nimport 'ace-builds/src-noconflict/snippets/jsp';\r\nimport 'ace-builds/src-noconflict/snippets/markdown';\r\nimport 'ace-builds/src-noconflict/snippets/properties';\r\nimport 'ace-builds/src-noconflict/snippets/python';\r\nimport 'ace-builds/src-noconflict/snippets/sh';\r\nimport 'ace-builds/src-noconflict/snippets/sql';\r\nimport 'ace-builds/src-noconflict/snippets/typescript';\r\nimport 'ace-builds/src-noconflict/snippets/text';\r\nimport 'ace-builds/src-noconflict/snippets/xml';\r\nimport 'ace-builds/src-noconflict/snippets/yaml';\r\n\r\nimport langToMode from './Lang';\r\nimport { userTcodeExecutorCompleter } from '@/components/tcode/Tcode';\r\n\r\nexport default {\r\n name: 'AceEditor',\r\n setup(props, context) {\r\n const aceEditorRef = ref();\r\n const aceEditor = ref(null);\r\n\r\n // 赋值内容\r\n const setValue = (text) => {\r\n if(aceEditor.value) aceEditor.value.setValue(text);\r\n if(aceEditor.value) aceEditor.value.selection.clearSelection();\r\n };\r\n\r\n // 获取内容\r\n const getValue = () => {\r\n if(aceEditor.value) return aceEditor.value.getValue();\r\n else return '';\r\n };\r\n\r\n // 清空撤销历史\r\n const resetHistory = () => {\r\n if(aceEditor.value) aceEditor.value.getSession().getUndoManager().reset();\r\n };\r\n // 设置语言\r\n const setLanguage = (name) => {\r\n if(aceEditor.value) aceEditor.value.getSession().setMode(`ace/mode/${langToMode(name)}`);\r\n };\r\n // 设置只读模式\r\n const setReadOnly = (isReadOnly) => {\r\n if (aceEditor.value) {\r\n aceEditor.value.setReadOnly(isReadOnly);\r\n // 只读时设置背景色,非只读时恢复默认\r\n const backgroundColor = isReadOnly ? '#f0f0f0' : '';\r\n aceEditorRef.value.style.backgroundColor = backgroundColor;\r\n }\r\n };\r\n // 设置缩进\r\n const setTabSize = (tabSize) => {\r\n if(aceEditor.value) aceEditor.value.setOptions({\r\n tabSize: tabSize, // 缩进空格数\r\n useSoftTabs: false // 使用Tab\r\n });\r\n };\r\n\r\n // 保存代码\r\n const CtrlS = (event) => {\r\n if (event.ctrlKey || event.metaKey) {\r\n switch (String.fromCharCode(event.which).toLowerCase()) {\r\n case 's':\r\n event.preventDefault();\r\n context.emit('handleSave', aceEditor.value.getValue());\r\n break;\r\n }\r\n }\r\n };\r\n\r\n // 重置编辑器\r\n const reset = () => {\r\n setValue('');\r\n resetHistory();\r\n };\r\n\r\n // 实例化编辑器\r\n onMounted(() => {\r\n aceEditor.value = ace.edit(aceEditorRef.value, {\r\n autoScrollEditorIntoView: false,\r\n copyWithEmptySelection: false,\r\n showPrintMargin: false,\r\n highlightActiveLine: true,\r\n // fontFamily: 'monospace',\r\n enableBasicAutocompletion: true, // 启用基本自动补全\r\n enableSnippets: true, // 启用代码片段\r\n enableLiveAutocompletion: true, // 启用实时自动补全\r\n theme: 'ace/theme/chrome', // 主题\r\n mode: 'ace/mode/text', // 高亮\r\n });\r\n // 自定义智能提示\r\n aceEditor.value.completers.push(userTcodeExecutorCompleter);\r\n\r\n // 禁用 Web Workers\r\n aceEditor.value.session.setOption(\"useWorker\", false);\r\n\r\n // 编辑 监听内容变化\r\n aceEditor.value.on('change', () => {\r\n context.emit('handleChange');\r\n });\r\n\r\n // 查找替换\r\n aceEditor.value.find('needle',{\r\n backwards: false,\r\n wrap: false,\r\n caseSensitive: false,\r\n wholeWord: false,\r\n regExp: false\r\n });\r\n aceEditor.value.findNext();\r\n aceEditor.value.findPrevious();\r\n\r\n // 监听保存键 ctrl+s\r\n aceEditorRef.value.addEventListener('keydown', CtrlS);\r\n });\r\n\r\n onUnmounted(() => {\r\n if(aceEditorRef.value) aceEditorRef.value.removeEventListener('keydown', CtrlS);\r\n });\r\n\r\n return {\r\n aceEditorRef,\r\n aceEditor,\r\n setValue,\r\n resetHistory,\r\n reset,\r\n setLanguage,\r\n getValue,\r\n setReadOnly,\r\n setTabSize,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.kk-code-editor {\r\n height: 100%;\r\n width: 100%;\r\n border: 1px solid #ececec;\r\n}\r\n</style>\r\n","const langs = {\r\n // common file types\r\n \"c\": \"c_cpp\",\r\n \"cc\": \"c_cpp\",\r\n \"cxx\": \"c_cpp\",\r\n \"h\": \"c_cpp\",\r\n \"hh\": \"c_cpp\",\r\n \"cpp\": \"c_cpp\",\r\n \"hpp\": \"c_cpp\",\r\n \"ino\": \"c_cpp\",\r\n \"cs\": \"csharp\",\r\n \"css\": \"css\",\r\n \"gitignore\": \"gitignore\",\r\n \"go\": \"golang\",\r\n \"html\": \"html\",\r\n \"htm\": \"html\",\r\n \"ini\": \"ini\",\r\n \"conf\": \"ini\",\r\n \"cfg\": \"ini\",\r\n \"java\": \"java\",\r\n \"js\": \"javascript\",\r\n \"jsm\": \"javascript\",\r\n \"cjs\": \"javascript\",\r\n \"mjs\": \"javascript\",\r\n \"jsx\": \"javascript\",\r\n \"vue\": \"javascript\",\r\n \"we\": \"javascript\",\r\n \"wpy\": \"javascript\",\r\n \"json\": \"json\",\r\n \"jsp\": \"jsp\",\r\n \"md\": \"markdown\",\r\n \"markdown\": \"markdown\",\r\n \"properties\": \"properties\",\r\n \"py\": \"python\",\r\n \"sh\": \"sh\",\r\n \"bash\": \"sh\",\r\n \"sql\": \"sql\",\r\n \"cts\": \"typescript\",\r\n \"mts\": \"typescript\",\r\n \"ts\": \"typescript\",\r\n \"tsx\": \"typescript\",\r\n \"xml\": \"xml\",\r\n \"rdf\": \"xml\",\r\n \"rss\": \"xml\",\r\n \"wsdl\": \"xml\",\r\n \"xsl\": \"xml\",\r\n \"xslt\": \"xml\",\r\n \"atom\": \"xml\",\r\n \"mathml\": \"xml\",\r\n \"mml\": \"xml\",\r\n \"xul\": \"xml\",\r\n \"xbl\": \"xml\",\r\n \"xaml\": \"xml\",\r\n \"xsd\": \"xml\",\r\n \"xhtml\": \"xml\",\r\n \"yaml\": \"yaml\",\r\n \"yml\": \"yaml\",\r\n // uncommon file types\r\n \"ipynb\": \"json\",\r\n \"bash_history\": \"sh\",\r\n \"bash_logout\": \"sh\",\r\n \"bash_profile\": \"sh\",\r\n \"tcshrc\": \"sh\",\r\n \"bashrc\": \"sh\",\r\n \"cshrc\": \"sh\",\r\n \"vcxproj\": \"xml\",\r\n};\r\n\r\n// 获取文件名后缀\r\nconst getSuffix = (name) => {\r\n let suffix = 'txt';\r\n if(name && name.length > 0) {\r\n let index = name.lastIndexOf('.');\r\n if(index != -1) suffix = name.substring(index + 1).toLowerCase();\r\n }\r\n return suffix;\r\n};\r\n\r\n// 文件名 => 语言\r\nconst langToMode = (name) => {\r\n return langs[getSuffix(name)] || \"text\";\r\n};\r\n\r\nexport default langToMode;","import { encrypt, decrypt } from '@/utils/Encrypt';\r\nconst storageLocalKey = 'tcode-local-vars';\r\nconst storageSessionPrefix = 'tcode-session-vars-';\r\n\r\nimport i18n from \"@/locales/i18n\";\r\n\r\n// 功能TCode, 以 / 开头\r\nexport const FuncTcode = {\r\n '/A': {\r\n desc: i18n.global.t('自定义TCode'),\r\n execFlow(context) {\r\n setTimeout(() => {\r\n context.proxy.userTcodeRef.initText();\r\n },1);\r\n context.proxy.userTcodeRef.DialogVisilble = true;\r\n }\r\n },\r\n '/O': {\r\n desc: i18n.global.t('新建窗口'),\r\n execFlow() {\r\n let _url = window.location.href;\r\n window.open(_url, '_blank');\r\n }\r\n },\r\n '/C': {\r\n desc: i18n.global.t('关闭窗口'),\r\n execFlow() {\r\n window.close();\r\n }\r\n },\r\n '/E': {\r\n desc: i18n.global.t('退出登录'),\r\n execFlow(context) {\r\n if(context.proxy.socket) context.proxy.socket.close(3131);\r\n }\r\n },\r\n '/R': {\r\n desc: i18n.global.t('刷新页面'),\r\n execFlow() {\r\n window.location.reload();\r\n }\r\n },\r\n '/H': {\r\n desc: i18n.global.t('帮助'),\r\n execFlow(context) {\r\n context.proxy.helpTcodeRef.DialogVisilble = true;\r\n }\r\n },\r\n};\r\n\r\n// 系统TCode, 以 S 开头\r\nexport const SysTcode = {\r\n 'SC': {\r\n desc: i18n.global.t('连接设置'),\r\n execFlow(context) {\r\n context.proxy.isShowSetting = false;\r\n context.proxy.connectSettingRef.DialogVisilble = true;\r\n }\r\n },\r\n 'SP': {\r\n desc: i18n.global.t('偏好设置'),\r\n execFlow(context) {\r\n context.proxy.isShowSetting = false;\r\n context.proxy.styleSettingRef.DialogVisilble = true;\r\n }\r\n },\r\n 'SF': {\r\n desc: i18n.global.t('文件管理'),\r\n execFlow(context) {\r\n context.proxy.isShowSetting = false;\r\n context.proxy.fileBlockRef.DialogVisilble = true;\r\n context.proxy.fileBlockRef.getInitDir();\r\n }\r\n },\r\n 'SS': {\r\n desc: i18n.global.t('重启'),\r\n execFlow(context) {\r\n context.proxy.isShowSetting = false;\r\n context.proxy.now_connect_status = context.proxy.connect_status['Connecting'];\r\n context.proxy.sshKey = '';\r\n if(context.proxy.socket) context.proxy.socket.close(3333); // 主动释放资源,必需\r\n // 进行重启\r\n context.proxy.closeFileBlock();\r\n context.proxy.doSSHConnect();\r\n context.proxy.resetTerminal();\r\n }\r\n }\r\n};\r\n\r\n// 用户TCode, 以 U 开头\r\nexport const UserTcodeExecutor = {\r\n active: false,\r\n display: true,\r\n outArray: [],\r\n cnt: 0,\r\n // 变量\r\n variables: {\r\n session(key,value) {\r\n if(value != undefined) sessionStorage.setItem(storageSessionPrefix + key,JSON.stringify(value));\r\n else {\r\n if(sessionStorage.getItem(storageSessionPrefix + key)) return JSON.parse(sessionStorage.getItem(storageSessionPrefix + key));\r\n else return null;\r\n }\r\n },\r\n local(key,value) {\r\n let tcodeLocalVars = {};\r\n if(localStorage.getItem(storageLocalKey)) {\r\n tcodeLocalVars = JSON.parse(decrypt(localStorage.getItem(storageLocalKey)));\r\n }\r\n if(value != undefined) {\r\n tcodeLocalVars[key] = value;\r\n localStorage.setItem(storageLocalKey,encrypt(JSON.stringify(tcodeLocalVars)));\r\n }\r\n else return tcodeLocalVars[key];\r\n },\r\n clean() {\r\n if(arguments.length == 0) {\r\n localStorage.removeItem(storageLocalKey);\r\n return;\r\n }\r\n let tcodeLocalVars = {};\r\n if(localStorage.getItem(storageLocalKey)) {\r\n tcodeLocalVars = JSON.parse(decrypt(localStorage.getItem(storageLocalKey)));\r\n }\r\n for (let i = 0; i < arguments.length; i++) {\r\n delete tcodeLocalVars[arguments[i]];\r\n }\r\n localStorage.setItem(storageLocalKey,encrypt(JSON.stringify(tcodeLocalVars)));\r\n }\r\n },\r\n // 仅向terminal写入,不等待\r\n writeOnly: null,\r\n // 向terminal写入并等待\r\n async writeAndWait(content, time = 200) {\r\n if(content && content.length > 0 && content[content.length - 1] != '\\n' && content[content.length - 1] != '\\r') content += '\\n';\r\n this.cnt = this.outArray.length;\r\n this.writeOnly(content,true);\r\n await new Promise(resolve => setTimeout(resolve, time > 0 ? time : 0));\r\n },\r\n // writeAndWait简写\r\n write(content, time = 200) {\r\n return this.writeAndWait(content, time);\r\n },\r\n // 读取输出\r\n read() {\r\n return filter(this.outArray.slice(this.cnt));\r\n },\r\n // 读取全部输出\r\n readAll() {\r\n return filter(this.outArray.slice(0));\r\n },\r\n // 隐藏\r\n hide() {\r\n this.display = false;\r\n },\r\n // 显示\r\n show() {\r\n this.display = true;\r\n },\r\n};\r\n\r\n// 处理过滤输出\r\nconst filter = (arr) => {\r\n let ret = [];\r\n let tmp = filterRN(arr);\r\n for(let i = 0; i < tmp.length; i++) {\r\n let str = filterANSI(tmp[i]);\r\n if(str && str != '') ret.push(str);\r\n }\r\n return ret;\r\n};\r\n\r\n// 以 \\r\\n 分割\r\nconst filterRN = (arr) => {\r\n let ret = [];\r\n for(let i = 0; i < arr.length; i++) {\r\n let tmp = arr[i].split(\"\\r\\n\");\r\n for(let j = 0; j < tmp.length; j++) {\r\n if (tmp[j] && tmp[j] != '') ret.push(tmp[j]);\r\n }\r\n }\r\n return ret;\r\n};\r\n// 过滤 ANSI 等终端字符\r\nimport stripAnsi from 'strip-ansi';\r\nconst filterANSI = (str) => {\r\n // eslint-disable-next-line\r\n return stripAnsi(str).replace(/[\\x00-\\x1F\\x7F]/g, '');\r\n};\r\n\r\n// 用户TCode状态枚举\r\n// Error-编译失败: Compile Error\r\n// Interrupted-执行中断: Execute Interrupt\r\n// Inactive-未被使用: Not Active\r\n// Success-执行成功: Execute Success\r\nexport const TCodeStatusEnum = {\r\n 'Compile Error': 'Error',\r\n 'Execute Interrupt':'Interrupted',\r\n 'Not Active': 'Inactive',\r\n 'Execute Success': 'Success',\r\n};\r\n\r\n\r\n// 编辑器添加kkTerminal智能提示\r\nexport const userTcodeExecutorCompleter = {\r\n getCompletions: function(editor, session, pos, prefix, callback) {\r\n const userTcodeExecutorCompletions = [\r\n {\r\n name: \"kkTerminal\",\r\n value: \"kkTerminal\",\r\n meta: \"kkTerminal\",\r\n description: \"kkTerminal API\",\r\n score: 1000,\r\n },\r\n {\r\n name: \"variables\",\r\n value: \"variables\",\r\n meta: \"kkTerminal\",\r\n description: \"access variables\",\r\n score: 1000,\r\n },\r\n {\r\n name: \"session\",\r\n value: \"session()\",\r\n meta: \"kkTerminal\",\r\n description: \"get or set session variables\",\r\n score: 1000,\r\n },\r\n {\r\n name: \"local\",\r\n value: \"local()\",\r\n meta: \"kkTerminal\",\r\n description: \"get or set local variables\",\r\n score: 1000,\r\n },\r\n {\r\n name: \"clean\",\r\n value: \"clean()\",\r\n meta: \"kkTerminal\",\r\n description: \"remove local variables\",\r\n score: 1000,\r\n },\r\n {\r\n name: \"write\",\r\n value: \"write()\",\r\n meta: \"kkTerminal\",\r\n description: \"write to terminal\",\r\n score: 1000,\r\n },\r\n {\r\n name: \"read\",\r\n value: \"read()\",\r\n meta: \"kkTerminal\",\r\n description: \"read lastest from terminal\",\r\n score: 1000,\r\n },\r\n {\r\n name: \"readAll\",\r\n value: \"readAll()\",\r\n meta: \"kkTerminal\",\r\n description: \"read all from terminal\",\r\n score: 1000,\r\n },\r\n {\r\n name: \"hide\",\r\n value: \"hide()\",\r\n meta: \"kkTerminal\",\r\n description: \"hide TCode display\",\r\n score: 1000,\r\n },\r\n {\r\n name: \"show\",\r\n value: \"show()\",\r\n meta: \"kkTerminal\",\r\n description: \"show TCode display\",\r\n score: 1000,\r\n }\r\n ];\r\n\r\n callback(null, userTcodeExecutorCompletions.map((completion) => {\r\n return {\r\n caption: completion.caption || completion.name,\r\n value: completion.value,\r\n meta: completion.meta,\r\n description: completion.description || ''\r\n };\r\n }));\r\n }\r\n};\r\n","import { render } from \"./AceEditor.vue?vue&type=template&id=08e3f4e0&scoped=true\"\nimport script from \"./AceEditor.vue?vue&type=script&lang=js\"\nexport * from \"./AceEditor.vue?vue&type=script&lang=js\"\n\nimport \"./AceEditor.vue?vue&type=style&index=0&id=08e3f4e0&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-08e3f4e0\"]])\n\nexport default __exports__","import jschardet from 'jschardet';\r\nimport iconv from 'iconv-lite';\r\n\r\nexport const detectEncoding = (content) => {\r\n return jschardet.detect(content).encoding;\r\n};\r\n\r\nexport const encodeStrToArray = (text, encoding) => {\r\n return iconv.encode(text, encoding);\r\n};\r\n\r\nexport const decodeArrayToStr = (buffer, decoding) => {\r\n return iconv.decode(buffer, decoding);\r\n};","import { render } from \"./TxtPreview.vue?vue&type=template&id=2740b858&scoped=true\"\nimport script from \"./TxtPreview.vue?vue&type=script&lang=js\"\nexport * from \"./TxtPreview.vue?vue&type=script&lang=js\"\n\nimport \"./TxtPreview.vue?vue&type=style&index=0&id=2740b858&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2740b858\"]])\n\nexport default __exports__","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n :before-close=\"closeDialog\"\r\n :width=\"300\"\r\n :modal=\"false\"\r\n :title=\"$t('新建')\"\r\n modal-class=\"kk-dialog-class\"\r\n draggable\r\n >\r\n <div style=\"margin-top: -32px;\"></div>\r\n <div class=\"no-select\">\r\n <el-radio-group v-model=\"isDirectory\" class=\"ml-4\">\r\n <el-radio :label=\"false\" size=\"large\">{{ $t('文件') }}</el-radio>\r\n <el-radio :label=\"true\" size=\"large\">{{ $t('文件夹') }}</el-radio>\r\n </el-radio-group>\r\n <div class=\"errInfo no-select\"> {{ err_msg }} </div>\r\n <div class=\"kk-flex\">\r\n <div>\r\n <FileIcons :style=\"{display: 'flex', alignItems: 'center'}\" :width=\"24\" :height=\"24\" v-if=\"isDirectory == true\" name=\"kk.txt\" :isFolder=\"true\" />\r\n <FileIcons :style=\"{display: 'flex', alignItems: 'center'}\" :width=\"24\" :height=\"24\" v-else name=\"kk.txt\" :isFolder=\"false\" />\r\n </div>\r\n <div style=\"width: 10px;\"></div>\r\n <div style=\"flex: 1;\">\r\n <el-input size=\"small\" v-model=\"name\" @keydown.enter=\"confirm\" class=\"w-50 m-2\" placeholder=\"\">\r\n </el-input>\r\n </div>\r\n <div style=\"margin-left: 10px;\">\r\n <el-button size=\"small\" type=\"primary\" @click=\"confirm\" >{{ $t('确定') }}</el-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"margin-top: -10px;\"></div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport i18n from \"@/locales/i18n\";\r\n// 引入文件图标组件\r\nimport FileIcons from 'file-icons-vue';\r\n\r\nexport default {\r\n name: 'MkFile',\r\n components: {\r\n FileIcons,\r\n },\r\n setup(props,context)\r\n {\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n const err_msg = ref('');\r\n const isDirectory = ref(false);\r\n const name = ref(''); \r\n const nowDir = ref('');\r\n \r\n // 确定\r\n const confirm = () => {\r\n // 校验\r\n err_msg.value = '';\r\n if(!(name.value && name.value.trim().length > 0)) {\r\n err_msg.value = i18n.global.t('文件名不能为空');\r\n return;\r\n }\r\n const invalidNameRe = /[/|]/;\r\n if(invalidNameRe.test(name.value)) {\r\n err_msg.value = i18n.global.t(\"文件名不能含有\") + \" |,/\";\r\n return;\r\n }\r\n context.emit('callback', isDirectory.value, name.value, nowDir.value);\r\n closeDialog();\r\n };\r\n\r\n // 重置\r\n const reset = () => {\r\n err_msg.value = '';\r\n isDirectory.value = false;\r\n name.value = '';\r\n nowDir.value = '';\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n DialogVisilble,\r\n err_msg,\r\n isDirectory,\r\n name,\r\n nowDir,\r\n confirm,\r\n closeDialog,\r\n reset,\r\n\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.kk-flex {\r\n display: flex; \r\n align-items: center;\r\n margin-top: 10px;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n.errInfo{\r\n font-size: 12px;\r\n color: rgb(234, 80, 80);\r\n margin-top: 8px;\r\n}\r\n</style>","import { render } from \"./MkFile.vue?vue&type=template&id=7567fb7c&scoped=true\"\nimport script from \"./MkFile.vue?vue&type=script&lang=js\"\nexport * from \"./MkFile.vue?vue&type=script&lang=js\"\n\nimport \"./MkFile.vue?vue&type=style&index=0&id=7567fb7c&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7567fb7c\"]])\n\nexport default __exports__","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n :before-close=\"closeDialog\"\r\n :width=\"400\"\r\n :modal=\"false\"\r\n modal-class=\"kk-dialog-class\"\r\n align-center\r\n draggable\r\n >\r\n <template #title>\r\n <div style=\"margin-top: -15px;\"></div>\r\n <div class=\"kk-flex nowrap\">\r\n <FileIcons :style=\"{display: 'flex', alignItems: 'center'}\" :name=\"fileInfo.name\" :width=\"16\" :height=\"16\" :isFolder=\"fileInfo.isDirectory\" :isLink=\"fileInfo.isSymlink\" />\r\n <div class=\"ellipsis\" style=\"margin: 0 5px; font-size: small;\">{{ fileInfo.name }}</div>\r\n <div style=\"font-size: small;\">{{ $t('属性') }}</div>\r\n </div>\r\n </template>\r\n <div style=\"margin-top: -32px;\"></div>\r\n <div class=\"no-select\" element-loading-text=\"Loading...\" v-loading=\"loading\" >\r\n <div class=\"kk-flex\">\r\n <div style=\"margin-right: 10px;\" ><FileIcons :style=\"{display: 'flex', alignItems: 'center'}\" :name=\"fileInfo.name\" :width=\"32\" :height=\"32\" :isFolder=\"fileInfo.isDirectory\" :isLink=\"fileInfo.isSymlink\" /></div>\r\n <div>\r\n <el-input @keydown.enter=\"confirm\" v-model=\"rename\" placeholder=\"\" />\r\n </div>\r\n </div>\r\n <div class=\"kk-border\" ></div>\r\n <div class=\"kk-flex nowrap\">\r\n <div class=\"form-width\" >{{ $t('位置') }}:</div>\r\n <ToolTip :content=\"fileDir + fileInfo.name\" >\r\n <template #content>\r\n <div class=\"ellipsis\">\r\n {{ fileDir + fileInfo.name }}\r\n </div>\r\n </template>\r\n </ToolTip>\r\n <div style=\"cursor: pointer; margin-left: 7px;\" @click=\"doCopy(fileDir + fileInfo.name)\">\r\n <el-icon size=\"18\"><DocumentCopy /></el-icon>\r\n </div>\r\n </div>\r\n <div v-if=\"fileInfo.isDirectory\" class=\"kk-flex\">\r\n <div class=\"form-width\" >{{ $t('包含') }}:</div>\r\n <div class=\"ellipsis\" >\r\n {{ includeInfo }}\r\n </div>\r\n <div v-if=\"fileInfo.isSymlink || unreliable\" style=\"margin-left: 10px;\" >\r\n <el-tag size=\"small\" type=\"danger\">unsure</el-tag>\r\n </div>\r\n <div style=\"cursor: pointer; margin-left: 7px;\" @click=\"getFolderInclude\" >\r\n <el-icon size=\"18\"><Refresh /></el-icon>\r\n </div>\r\n </div>\r\n <div v-else class=\"kk-flex\">\r\n <div class=\"form-width\" >{{ $t('大小') }}:</div>\r\n <div class=\"ellipsis\" >\r\n {{ calcSize(fileInfo.attributes.size) }} ({{ fileInfo.attributes.size + ' ' + $t('字节') }})\r\n </div>\r\n <div v-if=\"fileInfo.isSymlink || unreliable\" style=\"margin-left: 10px;\" >\r\n <el-tag size=\"small\" type=\"danger\">unsure</el-tag>\r\n </div>\r\n <div style=\"cursor: pointer; margin-left: 7px;\" @click=\"getFileSize\" >\r\n <el-icon size=\"18\"><Refresh /></el-icon>\r\n </div>\r\n </div>\r\n <div class=\"kk-border\" ></div>\r\n <div class=\"kk-flex\">\r\n <div class=\"form-width\" >{{ $t('修改时间') }}:</div>\r\n <div>\r\n {{ formatDate(fileInfo.attributes.mtime) }}\r\n </div>\r\n </div>\r\n <div class=\"kk-flex\">\r\n <div class=\"form-width\" >{{ $t('访问时间') }}:</div>\r\n <div>\r\n {{ formatDate(fileInfo.attributes.atime) }}\r\n </div>\r\n </div>\r\n <div class=\"kk-border\" ></div>\r\n <div class=\"kk-flex\">\r\n <div class=\"form-width\" >{{ $t('权限') }}:</div>\r\n <div>\r\n {{ calcPriority(fileInfo.attributes.mode.type,fileInfo.attributes.permissions) }}\r\n </div>\r\n <div style=\"cursor: pointer; margin-left: 7px;\" @click=\"openEditPermissions\">\r\n <el-icon size=\"18\"><Edit /></el-icon>\r\n </div>\r\n <div style=\"flex: 1;\"></div>\r\n <div>\r\n <el-button size=\"small\" type=\"primary\" @click=\"confirm\" >{{ $t('确定') }}</el-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"margin-top: -15px;\"></div>\r\n </el-dialog>\r\n\r\n <!-- 权限修改 -->\r\n <PermissionsEdit ref=\"permissionsEditRef\" @editPermissions=\"editPermissions\" ></PermissionsEdit>\r\n\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport $ from 'jquery';\r\nimport { http_base_url } from '@/utils/BaseUrl';\r\nimport { formatDate } from '@/utils/FormatDate';\r\nimport { calcPriority } from '@/utils/CalcPriority';\r\nimport { ElMessage } from 'element-plus';\r\nimport useClipboard from \"vue-clipboard3\";\r\nimport { DocumentCopy, Refresh, Edit } from '@element-plus/icons-vue';\r\nimport { calcSize } from '@/utils/CalcSize';\r\nimport { escapeItem, escapePath } from '@/utils/StringUtil';\r\nimport ToolTip from './ToolTip.vue';\r\nimport PermissionsEdit from './PermissionsEdit.vue';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\n// 引入文件图标组件\r\nimport FileIcons from 'file-icons-vue';\r\n\r\nexport default {\r\n name: 'FileAttr',\r\n components: {\r\n ToolTip,\r\n FileIcons,\r\n DocumentCopy,\r\n Refresh,\r\n Edit,\r\n PermissionsEdit,\r\n },\r\n props:['sshKey'],\r\n setup(props,context)\r\n {\r\n // 拷贝\r\n const { toClipboard } = useClipboard();\r\n\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n const fileInfo = ref({});\r\n const fileDir = ref('');\r\n const rename = ref('');\r\n\r\n // 加载\r\n const loading = ref(true);\r\n // 不可靠标识\r\n const unreliable = ref(false);\r\n // 包含信息\r\n const includeInfo = ref(i18n.global.t('0 个文件,0 个文件夹'));\r\n\r\n // 获取文件大小\r\n const getFileSize = () => {\r\n $.ajax({\r\n url: http_base_url + '/du',\r\n type:'get',\r\n data:{\r\n time:new Date().getTime(),\r\n sshKey:props.sshKey,\r\n path:escapePath(fileDir.value),\r\n item:escapeItem(fileInfo.value.name),\r\n },\r\n beforeSend: function() { // 发送请求前执行的方法\r\n loading.value = true;\r\n },\r\n success(resp){\r\n if(resp.status == 'success') fileInfo.value.attributes.size = parseInt(resp.data, 10);\r\n else unreliable.value = true;\r\n },\r\n complete: function() { // 发送请求完成后执行的方法\r\n loading.value = false;\r\n }\r\n });\r\n };\r\n\r\n // 获取文件夹包含信息\r\n const getFolderInclude = () => {\r\n $.ajax({\r\n url: http_base_url + '/find',\r\n type:'get',\r\n data:{\r\n time:new Date().getTime(),\r\n sshKey:props.sshKey,\r\n path:escapePath(fileDir.value),\r\n item:escapeItem(fileInfo.value.name),\r\n },\r\n beforeSend: function() { // 发送请求前执行的方法\r\n loading.value = true;\r\n },\r\n success(resp){\r\n if(resp.status == 'success') {\r\n includeInfo.value = resp.data[0] + i18n.global.t(' 个文件,') + (Math.max(0,parseInt(resp.data[1], 10) - 1)) + i18n.global.t(' 个文件夹');\r\n }\r\n else unreliable.value = true;\r\n },\r\n complete: function() { // 发送请求完成后执行的方法\r\n loading.value = false;\r\n }\r\n });\r\n };\r\n \r\n // 确定\r\n const confirm = () => {\r\n // 校验\r\n if(fileInfo.value.name == rename.value) {\r\n closeDialog();\r\n return;\r\n }\r\n if(!(rename.value && rename.value.trim().length > 0)) {\r\n ElMessage({\r\n message: i18n.global.t(\"文件名不能为空\"),\r\n type: \"warning\",\r\n grouping: true,\r\n })\r\n return;\r\n }\r\n const invalidNameRe = /[/|]/;\r\n if(invalidNameRe.test(rename.value)) {\r\n ElMessage({\r\n message: i18n.global.t(\"文件名不能含有\") + \" |,/\",\r\n type: \"warning\",\r\n grouping: true,\r\n })\r\n return;\r\n }\r\n let oldPath = fileDir.value + fileInfo.value.name;\r\n let newPath = fileDir.value + rename.value;\r\n context.emit('callback',oldPath,newPath);\r\n closeDialog();\r\n };\r\n\r\n // 复制\r\n const doCopy = async (content) => {\r\n content += '';\r\n if(!(content && content.length > 0)) {\r\n ElMessage({\r\n message: i18n.global.t('内容为空'),\r\n type: 'warning',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n return;\r\n }\r\n await toClipboard(content);\r\n ElMessage({\r\n message: i18n.global.t('复制成功'),\r\n type: 'success',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n };\r\n\r\n const editPermissions = (path,item, permissionsInfo) => {\r\n context.emit('editPermissions', path, item, permissionsInfo);\r\n };\r\n\r\n // 重置\r\n const reset = () => {\r\n fileInfo.value = {\r\n attributes:{\r\n mode:{\r\n type:'',\r\n },\r\n permissions:'',\r\n },\r\n };\r\n rename.value = '';\r\n fileDir.value = '';\r\n loading.value = false;\r\n unreliable.value = false;\r\n includeInfo.value = i18n.global.t('0 个文件,0 个文件夹');\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 权限修改\r\n const permissionsEditRef = ref();\r\n const openEditPermissions = () => {\r\n permissionsEditRef.value.fileDir = fileDir.value;\r\n permissionsEditRef.value.fileInfo = fileInfo.value;\r\n permissionsEditRef.value.DialogVisilble = true;\r\n permissionsEditRef.value.init();\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n if(permissionsEditRef.value) permissionsEditRef.value.closeDialog();\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n DialogVisilble,\r\n fileInfo,\r\n confirm,\r\n closeDialog,\r\n reset,\r\n fileDir,\r\n rename,\r\n formatDate,\r\n calcPriority,\r\n calcSize,\r\n doCopy,\r\n loading,\r\n unreliable,\r\n includeInfo,\r\n getFileSize,\r\n getFolderInclude,\r\n permissionsEditRef,\r\n openEditPermissions,\r\n editPermissions,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.kk-flex {\r\n display: flex; \r\n align-items: center;\r\n margin-top: 15px;\r\n}\r\n\r\n.kk-border {\r\n padding-bottom: 10px;\r\n border-bottom: 1px solid #ececec;\r\n}\r\n\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n/* 文本溢出省略 */\r\n.ellipsis {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 18px;\r\n}\r\n\r\n.nowrap {\r\n white-space: nowrap;\r\n}\r\n\r\n.form-width {\r\n text-align: left;\r\n width: 100px;\r\n}\r\n</style>","import i18n from \"@/locales/i18n\";\r\n\r\n// 将时间戳转为 2024年1月22日,20:40:38 格式\r\nexport const formatDate = (time) => {\r\n if(!time) return \"\";\r\n let date = new Date(time*1000);\r\n let year = date.getFullYear();\r\n let month = date.getMonth() + 1;\r\n let day = date.getDate();\r\n let hour = date.getHours();\r\n let min = date.getMinutes();\r\n let seconds = date.getSeconds();\r\n\r\n if(month < 10) month = \"0\" + month;\r\n if(day < 10) day = \"0\" + day;\r\n if(hour < 10) hour = \"0\" + hour;\r\n if(min < 10) min = \"0\" + min;\r\n if(seconds < 10) seconds = \"0\" + seconds;\r\n\r\n let dateArr = null;\r\n if(i18n.global.locale === \"zh\") dateArr = [year, month, day];\r\n else dateArr = [month, day, year];\r\n\r\n return dateArr[0] + i18n.global.t(\"年\") + dateArr[1] + i18n.global.t(\"月\") + dateArr[2] + i18n.global.t(\"日,\") + hour + \":\" + min + \":\" + seconds;\r\n};","export const calcSize = (sizeRaw) => {\r\n if(sizeRaw == null || sizeRaw == undefined) return \"\";\r\n let size = \"\";\r\n if (sizeRaw < 1024) { // B\r\n size = sizeRaw.toFixed(2) + \" B\"\r\n } else if (sizeRaw < 1024 * 1024) { // KB\r\n size = (sizeRaw / 1024).toFixed(2) + \" KB\"\r\n } else if (sizeRaw < 1024 * 1024 * 1024) { // MB\r\n size = (sizeRaw / (1024 * 1024)).toFixed(2) + \" MB\"\r\n } else { // GB\r\n size = (sizeRaw / (1024 * 1024 * 1024)).toFixed(2) + \" GB\"\r\n }\r\n let sizeStr = size + \"\"; // 转成字符串\r\n let index = sizeStr.indexOf(\".\"); // 获取小数点处的索引\r\n let dou = sizeStr.substring(index + 1, index + 3) // 获取小数点后两位的值\r\n if (dou == \"00\") { // 判断后两位是否为00,如果是则删除00 \r\n return sizeStr.substring(0, index) + sizeStr.substring(index + 3)\r\n }\r\n return size;\r\n};","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n :before-close=\"closeDialog\"\r\n :width=\" $t('360')\"\r\n :modal=\"false\"\r\n modal-class=\"kk-dialog-class\"\r\n align-center\r\n draggable\r\n >\r\n <template #title>\r\n <div style=\"margin-top: -15px;\"></div>\r\n <div class=\"kk-flex nowrap\">\r\n <FileIcons :style=\"{display: 'flex', alignItems: 'center'}\" :name=\"fileInfo.name\" :width=\"16\" :height=\"16\" :isFolder=\"fileInfo.isDirectory\" :isLink=\"fileInfo.isSymlink\" />\r\n <div class=\"ellipsis\" style=\"margin: 0 5px; font-size: small;\">{{ fileInfo.name }}</div>\r\n <div style=\"font-size: small;\">{{ $t('权限修改') }}</div>\r\n </div>\r\n </template>\r\n <div style=\"margin-top: -25px;\"></div>\r\n <div class=\"kk-flex\" >\r\n <div class=\"form-width no-select\" >{{ $t('所有者') }}:</div>\r\n <el-checkbox v-model=\"permissionsInfo.owner[0]\" :label=\"$t('读取')\" size=\"large\" />\r\n <el-checkbox v-model=\"permissionsInfo.owner[1]\" :label=\"$t('写入')\" size=\"large\" />\r\n <el-checkbox v-model=\"permissionsInfo.owner[2]\" :label=\"$t('执行')\" size=\"large\" />\r\n </div>\r\n <div class=\"kk-flex\" >\r\n <div class=\"form-width no-select\" >{{ $t('所属组') }}:</div>\r\n <el-checkbox v-model=\"permissionsInfo.group[0]\" :label=\"$t('读取')\" size=\"large\" />\r\n <el-checkbox v-model=\"permissionsInfo.group[1]\" :label=\"$t('写入')\" size=\"large\" />\r\n <el-checkbox v-model=\"permissionsInfo.group[2]\" :label=\"$t('执行')\" size=\"large\" />\r\n </div>\r\n <div class=\"kk-flex\" >\r\n <div class=\"form-width no-select\" >{{ $t('其他用户') }}:</div>\r\n <el-checkbox v-model=\"permissionsInfo.others[0]\" :label=\"$t('读取')\" size=\"large\" />\r\n <el-checkbox v-model=\"permissionsInfo.others[1]\" :label=\"$t('写入')\" size=\"large\" />\r\n <el-checkbox v-model=\"permissionsInfo.others[2]\" :label=\"$t('执行')\" size=\"large\" />\r\n </div>\r\n <div style=\"margin-bottom: 5px;\"></div>\r\n <div style=\"display: flex; align-items: center; border-top: 1px solid #f1f2f4;\">\r\n <el-checkbox v-if=\"fileInfo.isDirectory\" v-model=\"permissionsInfo.sub\" :label=\"$t('应用到子目录和文件')\" size=\"small\" style=\"margin-bottom: -15px; margin-top: 10px;\" />\r\n <div style=\"flex: 1;\"></div>\r\n <el-button size=\"small\" type=\"primary\" @click=\"confirm\" style=\"margin-bottom: -15px; margin-top: 10px;\" >\r\n {{ $t('确定') }}\r\n </el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport { getPermissionInfo } from '@/utils/CalcPriority';\r\n\r\n// 引入文件图标组件\r\nimport FileIcons from 'file-icons-vue';\r\n\r\nexport default {\r\n name: 'PermissionsEdit',\r\n components: {\r\n FileIcons,\r\n },\r\n setup(props, context) {\r\n\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n\r\n // 文件信息\r\n const fileDir = ref('');\r\n const fileInfo = ref({\r\n attributes:{\r\n mode:{\r\n type:'',\r\n },\r\n permissions:'',\r\n },\r\n });\r\n \r\n const permissionsInfo = ref({\r\n owner: [false,false,false],\r\n group: [false,false,false],\r\n others: [false,false,false],\r\n sub: false,\r\n });\r\n\r\n // 初始化,获取文件权限信息\r\n const init = () => {\r\n permissionsInfo.value = getPermissionInfo(fileInfo.value.attributes.permissions);\r\n };\r\n\r\n // 修改权限\r\n const confirm = () => {\r\n context.emit('editPermissions', fileDir.value, fileInfo.value.name, permissionsInfo.value);\r\n };\r\n\r\n // 重置\r\n const reset = () => {\r\n fileDir.value = '';\r\n fileInfo.value = {\r\n attributes:{\r\n mode:{\r\n type:'',\r\n },\r\n permissions:'',\r\n },\r\n };\r\n permissionsInfo.value = {\r\n owner: [false,false,false],\r\n group: [false,false,false],\r\n others: [false,false,false],\r\n sub: false,\r\n };\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n fileDir,\r\n fileInfo,\r\n DialogVisilble,\r\n closeDialog,\r\n init,\r\n permissionsInfo,\r\n getPermissionInfo,\r\n confirm,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.kk-flex {\r\n display: flex; \r\n align-items: center;\r\n margin-top: 15px;\r\n}\r\n\r\n/* 文本溢出省略 */\r\n.ellipsis {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 18px;\r\n}\r\n\r\n.nowrap {\r\n white-space: nowrap;\r\n}\r\n\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n.form-width {\r\n width: 72px;\r\n}\r\n</style>","import { render } from \"./PermissionsEdit.vue?vue&type=template&id=96f92c8a&scoped=true\"\nimport script from \"./PermissionsEdit.vue?vue&type=script&lang=js\"\nexport * from \"./PermissionsEdit.vue?vue&type=script&lang=js\"\n\nimport \"./PermissionsEdit.vue?vue&type=style&index=0&id=96f92c8a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-96f92c8a\"]])\n\nexport default __exports__","import { render } from \"./FileAttr.vue?vue&type=template&id=496b021a&scoped=true\"\nimport script from \"./FileAttr.vue?vue&type=script&lang=js\"\nexport * from \"./FileAttr.vue?vue&type=script&lang=js\"\n\nimport \"./FileAttr.vue?vue&type=style&index=0&id=496b021a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-496b021a\"]])\n\nexport default __exports__","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n :before-close=\"closeDialog\"\r\n :width=\"320\"\r\n :modal=\"false\"\r\n :title=\"$t('URL上传')\"\r\n modal-class=\"kk-dialog-class\"\r\n draggable\r\n >\r\n <div style=\"margin-top: -32px;\"></div>\r\n <div class=\"no-select\">\r\n <div class=\"kk-flex\" >\r\n <div class=\"form-width\" >URL:</div>\r\n <div style=\"flex: 1;\">\r\n <el-input size=\"small\" v-model=\"url\" class=\"w-50 m-2\" :placeholder=\"$t('请输入文件URL')\">\r\n <template #prefix>\r\n <el-icon><Connection /></el-icon>\r\n </template>\r\n </el-input>\r\n </div>\r\n </div>\r\n <div v-if=\"err_msg && err_msg.length > 0\" class=\"errInfo no-select\"> {{ err_msg }} </div>\r\n <div v-else style=\"height: 7px;\" ></div>\r\n <div class=\"kk-flex\">\r\n <div class=\"form-width\" >{{ $t('文件名') }}:</div>\r\n <div style=\"flex: 1;\">\r\n <el-input size=\"small\" v-model=\"name\" @keydown.enter=\"confirm\" class=\"w-50 m-2\" :placeholder=\"$t('请输入文件名')\">\r\n <template #prefix>\r\n <el-icon><Document /></el-icon>\r\n </template>\r\n </el-input>\r\n </div>\r\n <div style=\"margin-left: 10px;\">\r\n <el-button size=\"small\" type=\"primary\" @click=\"confirm\" >{{ $t('确定') }}</el-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"margin-top: -10px;\"></div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport { Connection, Document } from '@element-plus/icons-vue';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\nexport default {\r\n name: 'FileUrl',\r\n components: {\r\n Connection,\r\n Document,\r\n },\r\n setup(props,context)\r\n {\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n const err_msg = ref('');\r\n const name = ref(''); \r\n const url = ref('');\r\n \r\n // 确定\r\n const confirm = () => {\r\n // 校验\r\n err_msg.value = '';\r\n if(!(url.value && url.value.trim().length > 0)) {\r\n err_msg.value = i18n.global.t('URL不能为空');\r\n return;\r\n }\r\n if(!(name.value && name.value.trim().length > 0)) {\r\n err_msg.value = i18n.global.t('文件名不能为空');\r\n return;\r\n }\r\n const invalidNameRe = /[/|]/;\r\n if(invalidNameRe.test(name.value)) {\r\n err_msg.value = i18n.global.t(\"文件名不能含有\") + \" |,/\";\r\n return;\r\n }\r\n context.emit('callback',url.value, name.value);\r\n closeDialog();\r\n };\r\n\r\n // 重置\r\n const reset = () => {\r\n err_msg.value = '';\r\n name.value = '';\r\n url.value = '';\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n DialogVisilble,\r\n err_msg,\r\n name,\r\n url,\r\n confirm,\r\n closeDialog,\r\n reset,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.kk-flex {\r\n display: flex; \r\n align-items: center;\r\n margin-top: 10px;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n.errInfo{\r\n font-size: 12px;\r\n color: rgb(234, 80, 80);\r\n margin-top: 8px;\r\n}\r\n\r\n.form-width {\r\n width: 56px;\r\n}\r\n</style>","import { render } from \"./FileUrl.vue?vue&type=template&id=73c3d5c6&scoped=true\"\nimport script from \"./FileUrl.vue?vue&type=script&lang=js\"\nexport * from \"./FileUrl.vue?vue&type=script&lang=js\"\n\nimport \"./FileUrl.vue?vue&type=style&index=0&id=73c3d5c6&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-73c3d5c6\"]])\n\nexport default __exports__","import { render } from \"./FileBlock.vue?vue&type=template&id=4744d482&scoped=true\"\nimport script from \"./FileBlock.vue?vue&type=script&lang=js\"\nexport * from \"./FileBlock.vue?vue&type=script&lang=js\"\n\nimport \"./FileBlock.vue?vue&type=style&index=0&id=4744d482&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4744d482\"]])\n\nexport default __exports__","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n :before-close=\"closeDialog\"\r\n destroy-on-close\r\n :width=\"550\"\r\n :title=\"$t('自定义TCode')\"\r\n :modal=\"false\"\r\n modal-class=\"kk-dialog-class\"\r\n align-center\r\n draggable\r\n >\r\n <div style=\"margin-top: -32px;\"></div>\r\n <div>\r\n <div class=\"kk-flex\">\r\n <div class=\"no-select nowrap form-width\" >TCode:</div>\r\n <div class=\"no-select nowrap\" style=\"background-color: #f3f4f4; margin-right: 8px;\" >U</div>\r\n <el-input size=\"small\" :style=\"{width: '130px'}\" v-model=\"userTcodeInfo.name\" class=\"w-50 m-2\" :placeholder=\"$t('输入TCode')\" maxlength=\"5\" minlength=\"1\" >\r\n <template #prefix>\r\n <el-icon><CollectionTag /></el-icon>\r\n </template>\r\n </el-input>\r\n <div style=\"flex: 1;\" ></div>\r\n <div>\r\n <el-upload\r\n :show-file-list=\"false\"\r\n :with-credentials=\"false\"\r\n :http-request=\"importTcodes\"\r\n :multiple=\"false\"\r\n >\r\n <el-button size=\"small\" type=\"primary\" >\r\n <el-icon class=\"el-icon--left\"><Upload /></el-icon> {{ $t('导入') }}\r\n </el-button>\r\n </el-upload>\r\n </div>\r\n </div>\r\n <div class=\"kk-flex\">\r\n <div class=\"no-select nowrap form-width\" style=\"margin-right: 2px;\" >{{ $t('描\\u00A0\\u00A0\\u00A0述') }}:</div>\r\n <el-input size=\"small\" :style=\"{width: '146px'}\" v-model=\"userTcodeInfo.desc\" class=\"w-50 m-2\" :placeholder=\"$t('输入TCode描述')\" >\r\n <template #prefix>\r\n <el-icon><EditPen /></el-icon>\r\n </template>\r\n </el-input>\r\n <div style=\"flex: 1;\" ></div>\r\n <div>\r\n <el-button size=\"small\" type=\"primary\" @click=\"exportTcodes\" >\r\n <el-icon class=\"el-icon--left\"><Download /></el-icon> {{ $t('导出') }}\r\n </el-button>\r\n </div>\r\n </div>\r\n <div class=\"kk-border\" ></div>\r\n <div class=\"kk-flex\" style=\"margin: 7px 0;\" >\r\n <div class=\"no-select nowrap\">Workflow</div>\r\n <div style=\"flex: 1;\" ></div>\r\n <div @click=\"workflowTab(1)\" style=\"font-size: 18px; cursor: pointer; margin-left: 15px;\" >\r\n <el-tooltip :content=\"$t('默认模板')\" placement=\"top\">\r\n <el-icon><Refresh /></el-icon>\r\n </el-tooltip>\r\n </div>\r\n <div @click=\"workflowTab(2)\" style=\"font-size: 18px; cursor: pointer; margin-left: 15px;\" >\r\n <el-tooltip :content=\"$t('清空')\" placement=\"top\">\r\n <el-icon><DocumentDelete /></el-icon>\r\n </el-tooltip>\r\n </div>\r\n <div @click=\"workflowTab(3)\" style=\"font-size: 18px; cursor: pointer; margin-left: 15px;\" >\r\n <el-tooltip :content=\"$t('保存')\" placement=\"top\">\r\n <el-icon><Finished /></el-icon>\r\n </el-tooltip>\r\n </div>\r\n </div>\r\n <div element-loading-text=\"Loading...\" v-loading=\"loading\" style=\"padding: 0px 5px; width: 100%; height: 30vh;\">\r\n <AceEditor ref=\"userTcodeEditorRef\" @handleSave=\"handleSave\" ></AceEditor>\r\n </div>\r\n </div>\r\n <div style=\"display: flex;\">\r\n <div style=\"flex: 1;\"></div>\r\n <el-button size=\"small\" type=\"primary\" @click=\"confirm\" style=\"margin-bottom: -15px; margin-top: 10px;\">\r\n {{ $t('确定') }}\r\n </el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport { ElMessage } from 'element-plus';\r\nimport AceEditor from '../preview/AceEditor';\r\nimport { CollectionTag, EditPen, Upload, Download, Refresh, Finished, DocumentDelete } from '@element-plus/icons-vue';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\nexport default {\r\n name: 'UserTcode',\r\n components: {\r\n AceEditor,\r\n CollectionTag,\r\n EditPen,\r\n Upload,\r\n Download,\r\n Refresh,\r\n Finished,\r\n DocumentDelete,\r\n },\r\n setup(props,context)\r\n {\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n const loading = ref(false);\r\n \r\n const workflowTemplate = `const path = '/root/terminal';\r\nawait kkTerminal.write('cd ' + path, 1200);\r\nconst port = 3000;\r\nawait kkTerminal.write('lsof -ti :' + port, 1200);\r\nconst resultArr = kkTerminal.read();\r\nif(resultArr.length >= 2) {\r\n const pid = resultArr[1];\r\n\tif(pid && /^\\\\d+$/.test(pid)) await kkTerminal.write('kill -9 ' + pid, 1200);\r\n}\r\nconst jar = 'kkTerminal.jar';\r\nawait kkTerminal.write('nohup java -jar ./' + jar + ' > ./out.log &', 1200);`;\r\n\r\n const userTcodeEditorRef = ref();\r\n const userTcodeInfo = ref({\r\n name:'',\r\n desc:'',\r\n });\r\n\r\n // 保存\r\n const handleSave = (text) => {\r\n localStorage.setItem('tcode-draft', text);\r\n ElMessage({\r\n message: i18n.global.t('保存成功'),\r\n type: 'success',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n };\r\n const setValue = (text) => {\r\n userTcodeEditorRef.value.setValue(text);\r\n userTcodeEditorRef.value.resetHistory();\r\n };\r\n const initText = () => {\r\n // Workflow仅支持JS语法\r\n userTcodeEditorRef.value.setLanguage('kk.js');\r\n // 加载Draft\r\n if(localStorage.getItem('tcode-draft')) {\r\n userTcodeEditorRef.value.setValue(localStorage.getItem('tcode-draft'));\r\n userTcodeEditorRef.value.resetHistory();\r\n }\r\n };\r\n // 仅有数字字母组成\r\n const isAlphaNumeric = (str) => {\r\n const regex = /^[A-Za-z0-9]+$/;\r\n return regex.test(str);\r\n };\r\n\r\n // 导入导出Tcode\r\n const importTcodes = (data) => {\r\n let file = data.file;\r\n const fileReader = new FileReader();\r\n fileReader.onload = () => {\r\n try {\r\n const tcodes = JSON.parse(fileReader.result);\r\n let data = {};\r\n // 统计成功/失败数\r\n let scnt = 0;\r\n let fcnt = 0;\r\n for (const key in tcodes) {\r\n if(key && key.length >= 2 && key.length <= 6 && (key[0] == 'U' || key[0] == 'u') && isAlphaNumeric(key)) {\r\n data[key.toUpperCase()] = {\r\n desc: tcodes[key].desc || '',\r\n workflow: tcodes[key].workflow || '',\r\n status: 'Not Active',\r\n };\r\n scnt++;\r\n }\r\n else {\r\n ElMessage({\r\n message: 'TCode-' + key + i18n.global.t(':名称非法'),\r\n type: 'error',\r\n grouping: true,\r\n });\r\n fcnt++;\r\n }\r\n }\r\n // 全部成功\r\n if(fcnt == 0) {\r\n context.emit('importTCodes', data);\r\n ElMessage({\r\n message: i18n.global.t('导入成功'),\r\n type: 'success',\r\n grouping: true,\r\n });\r\n closeDialog();\r\n }\r\n // 全部失败\r\n else if(scnt == 0) {\r\n ElMessage({\r\n message: i18n.global.t('导入失败:无合法TCode'),\r\n type: 'error',\r\n grouping: true,\r\n });\r\n }\r\n // 部分成功\r\n else {\r\n context.emit('importTCodes', data);\r\n ElMessage({\r\n message: i18n.global.t('导入成功:') + scnt + i18n.global.t('个') + i18n.global.t(',导入失败:') + fcnt + i18n.global.t('个'),\r\n type: 'warning',\r\n grouping: true,\r\n });\r\n }\r\n } catch(error) {\r\n ElMessage({\r\n message: i18n.global.t('导入失败:json格式错误'),\r\n type: 'error',\r\n grouping: true,\r\n });\r\n } finally {\r\n loading.value = false;\r\n }\r\n };\r\n fileReader.onerror = () => {\r\n ElMessage({\r\n message: i18n.global.t('导入失败:文件读取失败'),\r\n type: 'error',\r\n grouping: true,\r\n });\r\n loading.value = false;\r\n };\r\n loading.value = true;\r\n fileReader.readAsText(file);\r\n };\r\n const exportTcodes = () => {\r\n context.emit('exportTcodes');\r\n ElMessage({\r\n message: i18n.global.t('导出成功'),\r\n type: 'success',\r\n grouping: true,\r\n });\r\n };\r\n\r\n // 处理workflowTab\r\n const workflowTab = (type) => {\r\n switch(type) {\r\n case 1:\r\n // 刷新\r\n localStorage.removeItem('tcode-draft');\r\n setValue(workflowTemplate);\r\n break;\r\n case 2:\r\n // 删除\r\n localStorage.removeItem('tcode-draft');\r\n setValue('');\r\n break;\r\n case 3:\r\n // 保存\r\n handleSave(userTcodeEditorRef.value.getValue());\r\n break;\r\n }\r\n };\r\n \r\n // 确定(添加TCode)\r\n const confirm = () => {\r\n if(!(userTcodeInfo.value.name && userTcodeInfo.value.name.length >= 1 && userTcodeInfo.value.name.length <= 5)) {\r\n ElMessage({\r\n message: i18n.global.t('TCode不能为空'),\r\n type: 'error',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n return;\r\n }\r\n if(!isAlphaNumeric(userTcodeInfo.value.name)) {\r\n ElMessage({\r\n message: i18n.global.t('TCode只能由字母和数字组成'),\r\n type: 'error',\r\n grouping: true,\r\n repeatNum: Number.MIN_SAFE_INTEGER,\r\n });\r\n return;\r\n }\r\n let data = {};\r\n data['U' + userTcodeInfo.value.name.toUpperCase()] = {\r\n desc: userTcodeInfo.value.desc,\r\n workflow: userTcodeEditorRef.value.getValue(),\r\n status: 'Not Active',\r\n };\r\n context.emit('importTCodes', data);\r\n ElMessage({\r\n message: i18n.global.t('添加成功'),\r\n type: 'success',\r\n grouping: true,\r\n });\r\n localStorage.removeItem('tcode-draft');\r\n closeDialog();\r\n };\r\n\r\n // 重置\r\n const reset = () => {\r\n if(userTcodeEditorRef.value) userTcodeEditorRef.value.reset();\r\n loading.value = false;\r\n userTcodeInfo.value.name = '';\r\n userTcodeInfo.value.desc = '';\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n DialogVisilble,\r\n confirm,\r\n closeDialog,\r\n reset,\r\n userTcodeEditorRef,\r\n handleSave,\r\n initText,\r\n loading,\r\n userTcodeInfo,\r\n importTcodes,\r\n exportTcodes,\r\n setValue,\r\n workflowTab,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.kk-flex {\r\n display: flex; \r\n align-items: center;\r\n margin-top: 15px;\r\n}\r\n\r\n.kk-border {\r\n margin-top: 3px;\r\n margin-bottom: 3px;\r\n padding-bottom: 5px;\r\n border-bottom: 1px solid #ececec;\r\n}\r\n\r\n.no-select {\r\n user-select: none;\r\n}\r\n/* 不换行 */\r\n.nowrap {\r\n white-space: nowrap;\r\n}\r\n\r\n.form-width {\r\n width: 56px;\r\n}\r\n\r\n</style>","import { render } from \"./UserTcode.vue?vue&type=template&id=5447fae9&scoped=true\"\nimport script from \"./UserTcode.vue?vue&type=script&lang=js\"\nexport * from \"./UserTcode.vue?vue&type=script&lang=js\"\n\nimport \"./UserTcode.vue?vue&type=style&index=0&id=5447fae9&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5447fae9\"]])\n\nexport default __exports__","<template>\r\n <el-dialog\r\n v-model=\"DialogVisilble\"\r\n destroy-on-close\r\n :width=\"480\"\r\n :title=\"$t('帮助')\"\r\n :modal=\"false\"\r\n modal-class=\"kk-dialog-class\"\r\n :before-close=\"closeDialog\"\r\n draggable\r\n >\r\n <div style=\"margin-top: -27px;\"></div>\r\n <div class=\"no-select\">\r\n <el-tabs type=\"border-card\">\r\n <el-tab-pane :label=\"$t('功能TCode')\">\r\n <div style=\"height: 210px; overflow-y: auto;\" >\r\n <div>{{ $t('以') }} <span style=\"background-color: #f3f4f4;\" >/</span> {{ $t('开头,用于快速执行通用功能') }}</div>\r\n <div class=\"kk-border\" ></div>\r\n <div v-for=\"(item, key) in FuncTcode\" :key=\"key\" >\r\n <div class=\"kk-flex tocde-item\" style=\"padding: 12px 10px;\" >\r\n <div style=\"background-color: #f3f4f4;\" >{{ key }}</div>\r\n <div style=\"margin-left: 25px;\" >{{ item.desc }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </el-tab-pane>\r\n <el-tab-pane :label=\"$t('系统TCode')\">\r\n <div style=\"height: 210px; overflow-y: auto;\" >\r\n <div>{{ $t('以') }} <span style=\"background-color: #f3f4f4;\" >S</span> {{ $t('开头,用于快速访问系统模块') }}</div>\r\n <div class=\"kk-border\" ></div>\r\n <div v-for=\"(item, key) in SysTcode\" :key=\"key\" >\r\n <div class=\"kk-flex tocde-item\" style=\"padding: 12px 10px;\" >\r\n <div style=\"background-color: #f3f4f4;\" >{{ key }}</div>\r\n <div style=\"margin-left: 25px;\" >{{ item.desc }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </el-tab-pane>\r\n <el-tab-pane :label=\"$t('用户TCode')\">\r\n <div style=\"height: 210px; overflow-y: auto;\" >\r\n <template v-if=\"userTCodes && Object.keys(userTCodes).length > 0\" >\r\n <template v-if=\"nowTCode && nowTCode.length >= 2 && nowTCode.length <= 6\" >\r\n <div class=\"kk-flex\" style=\"margin-bottom: 12px; margin-top: -6px;\" >\r\n <div @click=\"toOverview\" style=\"margin-right: 10px; cursor: pointer; font-size: 16px;\" ><el-icon><ArrowLeft /></el-icon></div>\r\n <div style=\"margin-top: 3px;\" > {{ modifyTag + nowTCode }} </div>\r\n <div style=\"cursor: pointer; margin-left: 10px;\" >\r\n <el-tooltip :content=\"TCodeStatusEnum[userTCodes[nowTCode].status]\" placement=\"top\">\r\n <TcodeStatus :style=\"{fontSize: '18px'}\" :status=\"userTCodes[nowTCode].status\" ></TcodeStatus>\r\n </el-tooltip>\r\n </div>\r\n <div style=\"flex: 1;\" ></div>\r\n <div @click=\"doModifyTCode\" v-if=\"mode == false\" style=\"margin-top: -3px; font-size: 18px; cursor: pointer; margin-left: 15px;\" >\r\n <el-tooltip :content=\"$t('编辑')\" placement=\"top\">\r\n <el-icon><Edit /></el-icon>\r\n </el-tooltip>\r\n </div>\r\n <div @click=\"confirmDeleteTCode\" v-if=\"mode == false\" style=\"margin-top: -3px; font-size: 18px; cursor: pointer; margin-left: 15px;\" >\r\n <el-tooltip :content=\"$t('删除')\" placement=\"top\">\r\n <el-icon><Delete /></el-icon>\r\n </el-tooltip>\r\n </div>\r\n <div @click=\"doOnlyRead\" v-if=\"mode == true\" style=\"margin-top: -3px; font-size: 18px; cursor: pointer; margin-left: 15px;\" >\r\n <el-tooltip :content=\"$t('只读')\" placement=\"top\">\r\n <el-icon><View /></el-icon>\r\n </el-tooltip>\r\n </div>\r\n <div @click=\"doSaveTCode\" v-if=\"mode == true\" style=\"margin-top: -3px; font-size: 18px; cursor: pointer; margin-left: 15px;\" >\r\n <el-tooltip :content=\"$t('保存修改')\" placement=\"top\">\r\n <el-icon><Finished /></el-icon>\r\n </el-tooltip>\r\n </div>\r\n <div style=\"margin-left: 10px;\" ></div>\r\n </div>\r\n <div style=\"width: 100%; height: 178px;\">\r\n <AceEditor ref=\"userTcodeEditorRef\" @handleChange=\"handleChange\" @handleSave=\"doSaveTCode\" ></AceEditor>\r\n </div>\r\n </template>\r\n <template v-else >\r\n <div>{{ $t('以') }} <span style=\"background-color: #f3f4f4;\" >U</span> {{ $t('开头,自定义实现类似Shell脚本的自动化Workflow') }}</div>\r\n <div class=\"kk-border\" ></div>\r\n <div v-for=\"(item, key) in userTCodes\" :key=\"key\" >\r\n <div class=\"kk-flex tocde-item\" style=\"padding: 12px 10px;\" >\r\n <div class=\"kk-flex\" style=\"width: 60px;\">\r\n <div style=\"background-color: #f3f4f4;\" >{{ key }}</div>\r\n <div style=\"flex: 1;\" ></div>\r\n </div>\r\n <div class=\"ellipsis\" style=\"margin-left: 10px;\" >{{ item.desc }}</div>\r\n <div style=\"flex: 1;\" ></div>\r\n <div style=\"cursor: pointer; margin-left: 10px;\" >\r\n <el-tooltip :content=\"TCodeStatusEnum[item.status]\" placement=\"top\">\r\n <TcodeStatus :style=\"{fontSize: '18px'}\" :status=\"item.status\" ></TcodeStatus>\r\n </el-tooltip>\r\n </div>\r\n <div @click=\"toWorkflow(key)\" style=\"margin-left: 15px; cursor: pointer; font-size: 16px;\" ><el-icon><ArrowRight /></el-icon></div>\r\n </div>\r\n </div>\r\n </template>\r\n </template>\r\n <template v-else >\r\n <div>{{ $t('以') }} <span style=\"background-color: #f3f4f4;\" >U</span> {{ $t('开头,自定义实现类似Shell脚本的自动化Workflow') }}</div>\r\n <div class=\"kk-border\" ></div>\r\n <NoData height=\"160px\" >\r\n <template #myslot>\r\n <div style=\"margin-top: 20px;\"></div>\r\n </template>\r\n </NoData>\r\n </template>\r\n </div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue';\r\nimport { ElMessage } from 'element-plus';\r\nimport { FuncTcode, SysTcode, TCodeStatusEnum } from \"@/components/tcode/Tcode\";\r\nimport NoData from '../NoData.vue';\r\nimport { ArrowRight, ArrowLeft, Edit, View, Finished, Delete } from '@element-plus/icons-vue';\r\nimport AceEditor from '../preview/AceEditor.vue';\r\nimport { decrypt } from '@/utils/Encrypt';\r\nimport TcodeStatus from './TcodeStatus.vue';\r\nimport { deleteDialog } from '@/utils/DeleteDialog';\r\nimport i18n from \"@/locales/i18n\";\r\n\r\nexport default {\r\n name:'HelpTcode',\r\n components: {\r\n NoData,\r\n TcodeStatus,\r\n AceEditor,\r\n ArrowRight,\r\n ArrowLeft,\r\n Edit,\r\n View,\r\n Finished,\r\n Delete,\r\n },\r\n setup(props, context) {\r\n\r\n // 控制Dialog显示\r\n const DialogVisilble = ref(false);\r\n const modifyTag = ref('');\r\n\r\n const userTCodes = ref({});\r\n const nowTCode = ref('');\r\n const mode = ref(false);\r\n // 查看Workflow\r\n const toWorkflow = (tcode) => {\r\n nowTCode.value = tcode;\r\n mode.value = false;\r\n setTimeout(() => {\r\n initTcodeEditor(true);\r\n },1);\r\n };\r\n // 返回\r\n const toOverview = () => {\r\n mode.value = false;\r\n nowTCode.value = '';\r\n modifyTag.value = '';\r\n };\r\n\r\n // 编辑器(只读)\r\n const userTcodeEditorRef = ref();\r\n const initTcodeEditor = (mode) => {\r\n userTcodeEditorRef.value.setLanguage('kk.js');\r\n userTcodeEditorRef.value.setValue(JSON.parse(decrypt(localStorage.getItem('tcodes')))[nowTCode.value].workflow || '');\r\n userTcodeEditorRef.value.resetHistory();\r\n userTcodeEditorRef.value.setReadOnly(mode);\r\n modifyTag.value = '';\r\n };\r\n\r\n // 启用编辑\r\n const doModifyTCode = () => {\r\n mode.value = true;\r\n initTcodeEditor(false);\r\n };\r\n // 只读模式\r\n const doOnlyRead = () => {\r\n mode.value = false;\r\n initTcodeEditor(true);\r\n };\r\n\r\n // 修改TCode的Workflow\r\n const doSaveTCode = () => {\r\n if(modifyTag.value != '*') return;\r\n context.emit('handleSaveTCode', nowTCode.value, userTcodeEditorRef.value.getValue());\r\n doOnlyRead();\r\n ElMessage({\r\n message: i18n.global.t('修改成功'),\r\n type: 'success',\r\n grouping: true,\r\n });\r\n modifyTag.value = '';\r\n };\r\n\r\n // 删除TCode\r\n const confirmDeleteTCode = () => {\r\n deleteDialog(i18n.global.t('提示'), i18n.global.t('确定删除此TCode吗?'), doDeleteTCode);\r\n };\r\n const doDeleteTCode = () => {\r\n context.emit('handleDeleteTCode', nowTCode.value);\r\n ElMessage({\r\n message: i18n.global.t('删除成功'),\r\n type: 'success',\r\n grouping: true,\r\n });\r\n toOverview();\r\n };\r\n\r\n const handleChange = () => {\r\n modifyTag.value = '*';\r\n };\r\n\r\n // 重置\r\n const reset = () => {\r\n if(userTcodeEditorRef.value) userTcodeEditorRef.value.reset();\r\n mode.value = false;\r\n nowTCode.value = '';\r\n modifyTag.value = '';\r\n DialogVisilble.value = false;\r\n };\r\n\r\n // 关闭\r\n const closeDialog = (done) => {\r\n setTimeout(() => {\r\n reset();\r\n },400);\r\n DialogVisilble.value = false;\r\n if(done) done();\r\n };\r\n\r\n return {\r\n DialogVisilble,\r\n FuncTcode,\r\n SysTcode,\r\n nowTCode,\r\n toWorkflow,\r\n toOverview,\r\n userTCodes,\r\n userTcodeEditorRef,\r\n initTcodeEditor,\r\n TCodeStatusEnum,\r\n mode,\r\n doModifyTCode,\r\n doOnlyRead,\r\n doSaveTCode,\r\n confirmDeleteTCode,\r\n doDeleteTCode,\r\n handleChange,\r\n modifyTag,\r\n reset,\r\n closeDialog,\r\n }\r\n }\r\n\r\n\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n.kk-flex {\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n.kk-border {\r\n padding-bottom: 10px;\r\n border-bottom: 1px solid #ddd;\r\n}\r\n\r\n.tocde-item:hover {\r\n background-color: #efefef;\r\n}\r\n\r\n/* 文本不可选中 */\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n/* 文本溢出省略 */\r\n.ellipsis {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 18px;\r\n}\r\n\r\n/* 不换行 */\r\n.nowrap {\r\n white-space: nowrap;\r\n}\r\n</style>\r\n","<template>\r\n <div v-if=\"statusType == -2\" :style=\"statusStyle\" ><el-icon><CircleCloseFilled /></el-icon></div>\r\n <div v-else-if=\"statusType == -1\" :style=\"statusStyle\" ><el-icon><WarningFilled /></el-icon></div>\r\n <div v-else-if=\"statusType == 1\" :style=\"statusStyle\" ><el-icon><SuccessFilled /></el-icon></div>\r\n <div v-else :style=\"statusStyle\" ><el-icon><InfoFilled /></el-icon></div>\r\n</template>\r\n\r\n<script>\r\nimport { computed } from 'vue';\r\n\r\nimport { SuccessFilled, WarningFilled, CircleCloseFilled, InfoFilled } from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n name: 'TcodeStatus',\r\n components: {\r\n SuccessFilled,\r\n WarningFilled,\r\n CircleCloseFilled,\r\n InfoFilled,\r\n },\r\n props: {\r\n status: {\r\n type: String,\r\n default: 'success',\r\n },\r\n style: {\r\n type: Object,\r\n default: (() => {}),\r\n },\r\n },\r\n setup(props) {\r\n\r\n const statusTypeMap = {\r\n 'Compile Error': -2,\r\n 'Execute Interrupt': -1,\r\n 'Not Active': 0,\r\n 'Execute Success': 1,\r\n };\r\n\r\n const statusColor = ['#f56c6c','#e6a23c','#909399','#67c23a'];\r\n\r\n const statusType = computed(() => {\r\n return statusTypeMap[props.status] || 0;\r\n });\r\n\r\n const statusStyle = computed(() => {\r\n return {\r\n fontSize: '16px',\r\n ...props.style,\r\n color: statusColor[(statusTypeMap[props.status] || 0) + 2],\r\n }\r\n });\r\n\r\n return {\r\n statusStyle,\r\n statusType,\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style>\r\n</style>","import { render } from \"./TcodeStatus.vue?vue&type=template&id=2d4928b5\"\nimport script from \"./TcodeStatus.vue?vue&type=script&lang=js\"\nexport * from \"./TcodeStatus.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./HelpTcode.vue?vue&type=template&id=807dded8&scoped=true\"\nimport script from \"./HelpTcode.vue?vue&type=script&lang=js\"\nexport * from \"./HelpTcode.vue?vue&type=script&lang=js\"\n\nimport \"./HelpTcode.vue?vue&type=style&index=0&id=807dded8&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-807dded8\"]])\n\nexport default __exports__","import { render } from \"./FrameWork.vue?vue&type=template&id=2601a094&scoped=true\"\nimport script from \"./FrameWork.vue?vue&type=script&lang=js\"\nexport * from \"./FrameWork.vue?vue&type=script&lang=js\"\n\nimport \"./FrameWork.vue?vue&type=style&index=0&id=2601a094&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2601a094\"]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=68402248\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=68402248&lang=css\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","// jQuery配置Ajax全局响应拦截,进行数据解密\r\nimport $ from 'jquery';\r\nimport { decrypt } from '@/utils/Encrypt';\r\n\r\n$.ajaxSetup({\r\n processData: true,\r\n // 携带cookie\r\n xhrFields:{\r\n withCredentials: true,\r\n },\r\n dataFilter(resp) {\r\n resp = JSON.parse(resp);\r\n let data = resp.data;\r\n if(data) resp.data = JSON.parse(decrypt(resp.data));\r\n return JSON.stringify(resp);\r\n },\r\n});\r\n\r\nimport { createApp } from 'vue';\r\nimport App from './App.vue';\r\n\r\nconst app = createApp(App);\r\n\r\n// 按需引入element-plus\r\nimport 'element-plus/dist/index.css';\r\nimport { ElButton, ElDialog, ElIcon, ElInput, ElUpload, ElColorPicker,ElDropdown, ElDropdownMenu, ElDropdownItem, ElSwitch, ElLoading, ElRadioGroup, ElRadio, ElPopover, ElTabs, ElTabPane, ElResult, ElTooltip, ElTag, ElPopconfirm, ElCheckbox, ElInputNumber } from 'element-plus';\r\napp.use(ElButton).use(ElDialog).use(ElIcon).use(ElInput).use(ElUpload).use(ElColorPicker).use(ElTabs).use(ElTabPane).use(ElResult).use(ElTooltip).use(ElCheckbox);\r\napp.use(ElDropdown).use(ElDropdownMenu).use(ElDropdownItem).use(ElSwitch).use(ElLoading).use(ElRadioGroup).use(ElRadio).use(ElPopover).use(ElTag).use(ElPopconfirm).use(ElInputNumber);\r\n\r\n// i18n 国际化\r\nimport i18n from '@/locales/i18n';\r\napp.use(i18n);\r\n\r\napp.mount('#app');\r\n\r\n// 引入全局样式\r\nimport './assets/base.css';\r\n\r\n//用于去掉eazyplayer警告,开发时禁用,打包开启\r\napp.config.warnHandler = () => {};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkterminal\"] = self[\"webpackChunkterminal\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(2110); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["SECRET_KEY","encrypt","word","key","CryptoJS","Utf8","parse","srcs","encrypted","mode","ECB","padding","Pkcs7","toString","decrypt","stringify","_createBlock","_component_FrameWork","class","_createElementVNode","style","ref","_hoisted_1","_hoisted_2","onClick","_cache","$event","$setup","doSettings","_toDisplayString","_ctx","$t","isShowSetting","_hoisted_3","args","showSettings","src","_imports_0","alt","_hoisted_5","_hoisted_6","env","tCode","_createElementBlock","_hoisted_7","_hoisted_8","_hoisted_9","_createVNode","_component_el_input","tcode","id","width","height","fontSize","onKeydown","_withKeys","handleTcode","maxlength","_hoisted_10","_component_el_popover","placement","trigger","reference","_withCtx","_component_el_icon","color","_component_QuestionFilled","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_component_ConnectSetting","sshOptions","options","onSaveOp","saveOp","onDeleteOp","deleteOp","onCallback","saveEnv","_component_StyleSetting","os","osInfo","clientOS","_component_FileBlock","sshKey","_component_UserTcode","onImportTCodes","importTCodes","onExportTcodes","exportTcodes","_component_HelpTcode","userTCodes","tcodes","onHandleSaveTCode","handleSaveTCode","onHandleDeleteTCode","handleDeleteTCode","default_env","server_ip","server_port","server_user","server_password","server_key","authType","option","lang","bg","fg","fontFamily","cursorStyle","cursorBlink","http_protocol","window","location","protocol","ws_protocol","ws_base_url","host","http_base_url","changeStr","str","result","i","length","changeStr2","pathChars","escapePath","replace","match","escapeItem","_component_el_dialog","DialogVisilble","closeDialog","title","modal","draggable","_component_ToolTip","content","setInfo","_normalizeClass","_hoisted_4","_component_el_button","size","type","showOption","_component_Switch","isForbidInput","_component_Finished","newOp","_component_Edit","disabled","placeholder","prefix","_component_HomeFilled","doCopy","_component_DocumentCopy","_component_Paperclip","_component_User","_component_el_dropdown","dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_component_arrow_down","isShowPassword","_component_Lock","_component_View","_component_Hide","openprivateKeyBlock","_component_Key","err_msg","confirm","_component_OptionBlock","doOption","opType","optionBlockType","$props","onHandleDeleteOption","handleDeleteOption","_component_PrivateKey","savePrivateKey","Object","keys","_Fragment","_renderList","value","aimOption","_component_FileIcons","display","alignItems","name","isFolder","confirmDeleteOption","_component_CircleClose","_component_NoData","msg","noDataMsg","i18n","createI18n","locale","fallbackLocale","messages","en","missing","deleteDialog","callback","ElMessageBox","alert","global","t","autofocus","customStyle","cancelButtonText","confirmButtonText","showCancelButton","showConfirmButton","cancelButtonClass","confirmButtonClass","buttonSize","icon","QuestionFilled","action","_normalizeStyle","viewStyle","_renderSlot","$slots","undefined","components","props","String","required","default","minHeight","setup","computed","__exports__","FileIcons","NoData","CircleClose","context","trim","emit","deleteOption","doDeleteOption","ElMessage","message","grouping","reset","done","setTimeout","_component_el_upload","readPrivateKeyContent","multiple","passphrase","Lock","Key","file","reader","FileReader","onload","onerror","readAsText","_component_el_tooltip","isShow","isShowTooltip","delay","Number","Boolean","tooltipContent","checkOverflow","firstElementChild","scrollWidth","offsetWidth","resizeObserver","observeSizeChanges","ResizeObserver","observe","onMounted","onBeforeUnmount","unobserve","disconnect","ToolTip","OptionBlock","PrivateKey","HomeFilled","Paperclip","User","DocumentCopy","View","Hide","Edit","Finished","Switch","ArrowDown","verifyParams","ipRegex","test","isNaN","optionBlockRef","privateKeyRef","toClipboard","useClipboard","async","repeatNum","MIN_SAFE_INTEGER","_component_el_color_picker","fontFamilyList","font","index","fontSizeList","cursorStyleList","_hoisted_20","_hoisted_21","_hoisted_22","_component_el_switch","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","langList","label","_hoisted_31","mapValueToLabel","_hoisted_32","_hoisted_33","_hoisted_34","item","find","isShowDirInput","dir","onBlur","onMousedown","_withModifiers","onDblclick","onChange","dirInputCallback","doShowDirInput","dirLevels","changeDirByLevel","doRefresh","_component_Refresh","doReturn","_component_Fold","selectedFiles","doDownload","_component_Download","dirStatus","fileUploadTypeChoose","_component_DocumentAdd","_component_FolderAdd","_component_Link","_component_Upload","onContextmenu","handleContextMenu","onScroll","handleScroll","onDragover","preventDefault","onDrop","handleFileDrag","tabindex","handleShortcutKeys","files","isDirectory","isSelected","addSelectFile","changeDir","iconStyle","opacity","isClipboard","isCtrlx","isLink","isSymlink","isShowRenameInput","renameFile","handleRename","isShowMenu","preViewFile","loading","doUpload","webkitdirectory","folderInputUploadPrehandle","_component_FileUrl","fileUrlUpload","_component_TxtPreview","onDoSave","doSave","_component_MkFile","handleMkFile","_component_FileAttr","doRename","onEditPermissions","editPermissions","handleMenuSelect","isZipFile","_component_el_popconfirm","onConfirm","confirmPopConfirm","onCancel","cancelPopConfirm","visible","isShowPop","zIndex","zipSuffixs","lastIndexOf","fileSuffix","substring","toLowerCase","iframeSuffixs","audioSuffixs","videoSuffixs","previewFileInfo","previewInfo","preview","calcPriority","attrs","getType","getAttrs","getPermissionInfo","permissionString","slice","permissions","owner","group","others","sub","getChmodValue","calculateSection","section","ownerValue","groupValue","othersValue","fileTypeSymbols","permissionMap","symbol","permissionValue","setPermissionSymbol","attr","char","specialPermission","specialChar","noPermissionChar","controls","fileName","modifyTag","encodeSet","encode","modeSet","setMode","_component_el_input_number","indent","min","max","step","setIndent","_component_AceEditor","onHandleChange","handleChange","onHandleSave","handleSave","previewUrl","langs","getSuffix","suffix","langToMode","storageLocalKey","storageSessionPrefix","FuncTcode","desc","execFlow","proxy","userTcodeRef","initText","_url","href","open","close","socket","reload","helpTcodeRef","SysTcode","connectSettingRef","styleSettingRef","fileBlockRef","getInitDir","now_connect_status","connect_status","closeFileBlock","doSSHConnect","resetTerminal","UserTcodeExecutor","active","outArray","cnt","variables","session","sessionStorage","getItem","JSON","setItem","local","tcodeLocalVars","localStorage","clean","arguments","removeItem","writeOnly","writeAndWait","time","this","Promise","resolve","write","read","filter","readAll","hide","show","arr","ret","tmp","filterRN","filterANSI","push","split","j","stripAnsi","TCodeStatusEnum","userTcodeExecutorCompleter","getCompletions","editor","pos","userTcodeExecutorCompletions","meta","description","score","map","completion","caption","aceEditorRef","aceEditor","setValue","text","selection","clearSelection","getValue","resetHistory","getSession","getUndoManager","setLanguage","setReadOnly","isReadOnly","backgroundColor","setTabSize","tabSize","setOptions","useSoftTabs","CtrlS","event","ctrlKey","metaKey","fromCharCode","which","ace","autoScrollEditorIntoView","copyWithEmptySelection","showPrintMargin","highlightActiveLine","enableBasicAutocompletion","enableSnippets","enableLiveAutocompletion","theme","completers","setOption","on","backwards","wrap","caseSensitive","wholeWord","regExp","findNext","findPrevious","addEventListener","onUnmounted","removeEventListener","detectEncoding","jschardet","detect","encoding","encodeStrToArray","iconv","decodeArrayToStr","buffer","decoding","AceEditor","fileUrl","codeEditorRef","jqXHR","url","initEncode","$","method","xhrFields","responseType","dataFilter","resp","success","blob","Blob","URL","revokeObjectURL","createObjectURL","Uint8Array","error","serverEncode","indexKey","indexOf","indexPath","includes","unshift","deep","abort","_component_el_radio_group","_component_el_radio","nowDir","invalidNameRe","fileInfo","rename","fileDir","includeInfo","unreliable","_component_el_tag","getFolderInclude","calcSize","attributes","getFileSize","formatDate","mtime","atime","openEditPermissions","_component_PermissionsEdit","date","Date","year","getFullYear","month","getMonth","day","getDate","hour","getHours","getMinutes","seconds","getSeconds","dateArr","sizeRaw","toFixed","sizeStr","dou","_component_el_checkbox","permissionsInfo","init","Refresh","PermissionsEdit","data","getTime","path","beforeSend","status","parseInt","complete","Math","oldPath","newPath","permissionsEditRef","_component_Connection","_component_Document","Connection","Document","TxtPreview","MkFile","FileAttr","FileUrl","Fold","Download","Upload","DocumentAdd","FolderAdd","Link","lastSelectedIndex","click","shiftKey","start","end","splice","fileClipboard","getFileInfoByName","confirmDirCorrect","calcDirLevel","fullPath","aimDir","getDirList","info","now_dir","fileAreaRef","focus","fileAttrRef","nowFileInfo","getRemoteFileUrl","encodeURIComponent","getRemoteFolderUrl","parseUrl","urlParams","decodeURIComponent","downloadRemoteFile","a","document","createElement","body","appendChild","removeChild","downloadDir","new_dir","chunkSize","fileData","fileSize","chunks","ceil","fileId","uid","chunkIndex","pathVal","noStartUpLoad","startUpLoad","chunk","chunkFile","formData","FormData","append","contentType","processData","code","querySelector","txtPreviewRef","arrayBuffer","File","random","items","dataTransfer","basePath","webkitGetAsEntry","isFile","nowPath","folderUpload","directoryEntry","createReader","readEntries","entries","mkFileRef","untar","menuBlockRef","target","top","clientY","left","clientX","e","join","watch","fileUrlRef","scrollToView","itemWidth","upDistance","downDistance","viewWidth","clientHeight","currentScrollTop","scrollTop","renameDom","contains","fileCopyMove","dst","filesGroupByPath","filePath","filesArr","sort","b","folderInputUpload","now","fileObj","encodeURI","perms","deepCloseDialog","confirmPop","userTcodeInfo","minlength","_component_CollectionTag","importTcodes","_component_EditPen","workflowTab","_component_DocumentDelete","CollectionTag","EditPen","DocumentDelete","workflowTemplate","userTcodeEditorRef","isAlphaNumeric","regex","fileReader","scnt","fcnt","toUpperCase","workflow","_component_el_tabs","_component_el_tab_pane","nowTCode","toOverview","_component_ArrowLeft","_component_TcodeStatus","doModifyTCode","confirmDeleteTCode","_component_Delete","doOnlyRead","doSaveTCode","toWorkflow","_component_ArrowRight","myslot","statusType","statusStyle","_component_CircleCloseFilled","_component_WarningFilled","_component_SuccessFilled","_component_InfoFilled","SuccessFilled","WarningFilled","CircleCloseFilled","InfoFilled","statusTypeMap","statusColor","TcodeStatus","ArrowRight","ArrowLeft","Delete","initTcodeEditor","doDeleteTCode","ConnectSetting","StyleSetting","FileBlock","UserTcode","HelpTcode","instance","getCurrentInstance","fitAddon","FitAddon","loadOps","loadTCodes","loadEnv","nowOpInfo","terminal","term","isFirst","initTerminal","Terminal","rendererType","convertEol","scrollback","disableStdin","foreground","background","cursor","lineHeight","loadAddon","termFit","innerHeight","fit","readyState","WebSocket","OPEN","new_rows","proposeDimensions","rows","new_cols","cols","send","resize","onopen","onmessage","clear","output","_core","lines","onclose","userTcodeExecutorReset","new_env","restart","sendMessage","putChinese","doPaste","pasteText","navigator","clipboard","readText","doClick","innerHTML","onKey","onSelectionChange","hasSelection","copyText","getSelection","copyTextTrim","timer","doHeartBeat","setInterval","serverOS","windowId","setTcodeStatus","transTcode","state","Function","textflow","tCodeData","download","clearInterval","FrameWork","render","withCredentials","app","createApp","App","use","ElButton","ElDialog","ElIcon","ElInput","ElUpload","ElColorPicker","ElTabs","ElTabPane","ElResult","ElTooltip","ElCheckbox","ElDropdown","ElDropdownMenu","ElDropdownItem","ElSwitch","ElLoading","ElRadioGroup","ElRadio","ElPopover","ElTag","ElPopconfirm","ElInputNumber","mount","config","warnHandler","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","loaded","__webpack_modules__","call","m","amdD","Error","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","r","n","getter","__esModule","d","definition","o","defineProperty","enumerable","get","g","globalThis","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","p","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}